dotsy · Schema

ImportSiteRequest

What to import. Only `sourceUrl` is needed: it imports every page dotsy can discover on that site.

CompanyArtificial IntelligenceWebsite BuilderNo-CodeFree

Properties

Name Type Description
sourceUrl string The website to import. Without `pages` and `segments`, dotsy imports the whole site it can discover from here.
mode string Default `auto`.
pages array An explicit page list, taken as given. Omit it (and `segments`) to let dotsy find the pages from the sitemap and the home page links. Two pages sharing a key collapse into one, which comes back as a w
segments array For a site served from several places: each segment expands into pages through its own sitemap.
keyConvention string Shape of the content keys. `directory` stores `about/index.html` (static-site output); `flat` (default) stores `about.html`.
onSlugTaken string What to do when `{slug}` is already in use. `auto-suffix` (default): when another account holds it, import into `{slug}-{adjective}-{noun}` instead; when you own it, answer 409 `slug_taken_self`. `fai
assetMirror string Which asset URLs are copied into dotsy. `full` (default): the source's own assets and the cross-origin assets they use (CDN images, fonts, scripts). `same-host`: only assets served from the source hos
assetWarm string When mirrored assets are copied. `inline`: during the import. `deferred`: in a background job afterwards. `auto` (default): inline up to 100 external assets, deferred beyond.
skipHosts array Asset hosts to leave alone: matching URLs stay pointing at the source.
mirrorHosts array With `assetMirror: full`, copy cross-origin assets only from hosts that match one of these.
View JSON Schema on GitHub

JSON Schema

dotsy-ai-import-site-request-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/dotsy-ai/json-schema/dotsy-ai-import-site-request-schema.json",
  "title": "ImportSiteRequest",
  "description": "What to import. Only `sourceUrl` is needed: it imports every page dotsy can discover on that site.",
  "x-generated": "2026-11-06",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/dotsy-ai-openapi.yml#/components/schemas/ImportSiteRequest",
  "type": "object",
  "properties": {
    "sourceUrl": {
      "type": "string",
      "format": "uri",
      "description": "The website to import. Without `pages` and `segments`, dotsy imports the whole site it can discover from here."
    },
    "mode": {
      "type": "string",
      "enum": [
        "auto",
        "mirror",
        "render"
      ],
      "description": "Default `auto`."
    },
    "pages": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "Page URL, absolute or relative to `sourceUrl`."
          },
          "key": {
            "type": "string",
            "description": "Content key to store the page under."
          },
          "mode": {
            "type": "string",
            "enum": [
              "auto",
              "mirror",
              "render"
            ],
            "description": "How a page is captured. `mirror` copies the served HTML, `render` runs the page in a browser first (for sites that build their content with JavaScript), `auto` mirrors each page and switches it to render when it looks like a JavaScript-built shell."
          }
        },
        "required": [
          "url",
          "key"
        ]
      },
      "description": "An explicit page list, taken as given. Omit it (and `segments`) to let dotsy find the pages from the sitemap and the home page links. Two pages sharing a key collapse into one, which comes back as a warning."
    },
    "segments": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "pathPrefix": {
            "type": "string",
            "description": "The part of the site this segment covers."
          },
          "sitemap": {
            "type": "string",
            "description": "Sitemap path, relative to `sourceUrl` (for example `/blog/sitemap.xml`). Without it only the segment's hub page is imported, and a `segment_hub_only` warning says so."
          },
          "mode": {
            "type": "string",
            "enum": [
              "auto",
              "mirror",
              "render"
            ],
            "description": "How a page is captured. `mirror` copies the served HTML, `render` runs the page in a browser first (for sites that build their content with JavaScript), `auto` mirrors each page and switches it to render when it looks like a JavaScript-built shell."
          },
          "maxPages": {
            "type": "integer",
            "minimum": 1,
            "description": "Cap for this segment (default 500). A larger sitemap needs an explicit higher cap."
          }
        },
        "required": [
          "pathPrefix"
        ]
      },
      "description": "For a site served from several places: each segment expands into pages through its own sitemap."
    },
    "keyConvention": {
      "type": "string",
      "enum": [
        "flat",
        "directory"
      ],
      "description": "Shape of the content keys. `directory` stores `about/index.html` (static-site output); `flat` (default) stores `about.html`."
    },
    "onSlugTaken": {
      "type": "string",
      "enum": [
        "auto-suffix",
        "fail",
        "merge"
      ],
      "description": "What to do when `{slug}` is already in use. `auto-suffix` (default): when another account holds it, import into `{slug}-{adjective}-{noun}` instead; when you own it, answer 409 `slug_taken_self`. `fail`: when another account holds it, answer 409 `slug_taken` with suggestions. `merge`: when you own it, add or update the pages on that site; when another account holds it, behaves like `auto-suffix`."
    },
    "assetMirror": {
      "type": "string",
      "enum": [
        "full",
        "same-host",
        "off"
      ],
      "description": "Which asset URLs are copied into dotsy. `full` (default): the source's own assets and the cross-origin assets they use (CDN images, fonts, scripts). `same-host`: only assets served from the source host. `off`: none, so asset URLs keep pointing at the source."
    },
    "assetWarm": {
      "type": "string",
      "enum": [
        "auto",
        "inline",
        "deferred"
      ],
      "description": "When mirrored assets are copied. `inline`: during the import. `deferred`: in a background job afterwards. `auto` (default): inline up to 100 external assets, deferred beyond."
    },
    "skipHosts": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Asset hosts to leave alone: matching URLs stay pointing at the source."
    },
    "mirrorHosts": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "With `assetMirror: full`, copy cross-origin assets only from hosts that match one of these."
    }
  },
  "required": [
    "sourceUrl"
  ]
}

Work with this as data

Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/dotsy-ai-import-site-request"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.