dotsy · Schema

DraftStatusResponse

CompanyArtificial IntelligenceWebsite BuilderNo-CodeFree

Properties

Name Type Description
total integer Staged changes in all three lists.
content array Content files that differ from the live site.
routes array Routes that differ from the live site.
menus array Menu items that differ from the live site. Menus always publish together with the rest.
fingerprint string One opaque token for the whole staged state. If it is unchanged when you publish, nothing moved since you looked.
indexState string The staged-set index is being rebuilt, so the lists above may be a subset of what is staged.
contentBytesIssues array Pages whose stored bytes are missing or empty. A publish would be refused (`content_bytes_missing`): re-write them first.
draftLog array The most recent draft edits an agent recorded (up to 20). Cleared when all drafts are discarded.
verify objectnull The last `verifySite` run. Present only with `?verify=1`; `null` when the site has never been verified.
View JSON Schema on GitHub

JSON Schema

dotsy-ai-draft-status-response-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/dotsy-ai/json-schema/dotsy-ai-draft-status-response-schema.json",
  "title": "DraftStatusResponse",
  "x-generated": "2026-11-06",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/dotsy-ai-openapi.yml#/components/schemas/DraftStatusResponse",
  "type": "object",
  "properties": {
    "total": {
      "type": "integer",
      "description": "Staged changes in all three lists."
    },
    "content": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "key": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "modified",
              "new",
              "deleted"
            ]
          },
          "hash": {
            "type": "string",
            "description": "Fingerprint of the staged content (`deleted` for a deletion). Echo it in `reviewedSet` when you publish."
          }
        },
        "required": [
          "key",
          "status",
          "hash"
        ]
      },
      "description": "Content files that differ from the live site."
    },
    "routes": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "modified",
              "new",
              "deleted"
            ]
          },
          "hash": {
            "type": "string"
          }
        },
        "required": [
          "path",
          "status",
          "hash"
        ]
      },
      "description": "Routes that differ from the live site."
    },
    "menus": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "menu": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "modified",
              "new",
              "deleted"
            ]
          }
        },
        "required": [
          "id",
          "menu",
          "status"
        ]
      },
      "description": "Menu items that differ from the live site. Menus always publish together with the rest."
    },
    "fingerprint": {
      "type": "string",
      "description": "One opaque token for the whole staged state. If it is unchanged when you publish, nothing moved since you looked."
    },
    "indexState": {
      "type": "string",
      "enum": [
        "building"
      ],
      "description": "The staged-set index is being rebuilt, so the lists above may be a subset of what is staged."
    },
    "contentBytesIssues": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "key": {
            "type": "string"
          },
          "reason": {
            "type": "string",
            "enum": [
              "missing",
              "empty"
            ]
          }
        },
        "required": [
          "key",
          "reason"
        ]
      },
      "description": "Pages whose stored bytes are missing or empty. A publish would be refused (`content_bytes_missing`): re-write them first."
    },
    "draftLog": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "tool": {
            "type": "string"
          },
          "context": {
            "type": "string"
          },
          "at": {
            "type": "number",
            "description": "Unix ms."
          }
        },
        "required": [
          "tool",
          "context",
          "at"
        ]
      },
      "description": "The most recent draft edits an agent recorded (up to 20). Cleared when all drafts are discarded."
    },
    "verify": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "at": {
          "type": "number",
          "description": "Unix ms when that check ran."
        },
        "scanned": {
          "type": "integer",
          "description": "Pages the check composed and scanned."
        },
        "errors": {
          "type": "integer"
        },
        "warnings": {
          "type": "integer"
        },
        "scope": {
          "type": "string",
          "enum": [
            "site",
            "paths"
          ],
          "description": "`site`: every route was checked. `paths`: only the pages the caller named, so a sample."
        },
        "heavyImages": {
          "type": "integer",
          "description": "Images the site's pages load that are too heavy or never shrunk (files with an image code: `perf_image_heavy`, `perf_image_old_format` or `perf_gif_heavy`; stylesheets, scripts and videos are not counted). Counted by a `site` run; a `paths` run keeps the last site run's count, and leaves it out when there was none. Absent on checks from before this field."
        },
        "brokenLinks": {
          "type": "integer",
          "description": "Distinct pages the site's links point at that don't exist (`link_broken_internal`). Counted by a `site` run; a `paths` run keeps the last site run's count. Absent when there was none, on checks from before this field, and after a run that could not read every route and page (`health.links.partial`)."
        },
        "healthWarnings": {
          "type": "integer",
          "description": "Warning-level health issues from the last `site` run (`health.warnings`: page issues plus file and site warnings, never infos). Every `site` run stores it; a `paths` run keeps the last site run's count. Absent when there was none and on checks from before this field. Not part of the SEO issue count."
        },
        "healthPartial": {
          "type": "boolean",
          "enum": [
            true
          ],
          "description": "True when that `site` run could not check everything (`health.partial` or `health.links.partial`), so `healthWarnings` may be low. A `paths` run keeps it with the count."
        },
        "stale": {
          "type": "boolean",
          "description": "True when the draft changed (content, routes or menus) after the check ran, so its result no longer describes it."
        }
      },
      "required": [
        "at",
        "scanned",
        "errors",
        "warnings",
        "scope",
        "stale"
      ],
      "description": "The last `verifySite` run. Present only with `?verify=1`; `null` when the site has never been verified."
    }
  },
  "required": [
    "total",
    "content",
    "routes",
    "menus",
    "fingerprint"
  ]
}

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-draft-status-response"
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.