Sites

Get a site

One site in full: settings, stats, a window of its pages, recent activity and, while an import is running, build progress. pages is a window: it holds up to pagesLimit HTML pages (500 by default); follow nextPagesCursor for the rest, or use GET /api/v1/sites/{slug}/pages for a paged list of every page. Add brief=1 to include the head of the site brief.

The path accepts the site id (a UUID) as well as the slug. An old slug (after a rename) answers 301 for reads and 308 for writes, and a site id answers 307, both to the canonical slug path. Follow redirects.

get/api/v1/sites/{slug}

Request

  • Base URL: https://api.dotsy.ai
  • URL: https://api.dotsy.ai/api/v1/sites/{slug}
  • Auth: one of:
    • HTTP bearer
    • HTTP bearer

Path parameters

slugstring required
Example:acme-studio

Site slug or site id (UUID). An old slug answers 301/308 and a site id 307 to the canonical slug path.

Query parameters

pagesLimitinteger

Max HTML pages returned (default 500). Use with pagesCursor on big clones.

pagesCursorstring

Key cursor from a prior response's nextPagesCursor.

pagesQstring

Filter HTML pages whose content key contains this term (case-insensitive).

brief'0' | '1'

When 1, include parsed _intent/site.md head in brief (~1 KB).

Response

The site.

idstring required

Stable site id (UUID). Unlike the slug, it never changes.

slugstring required
titlestring nullable required
keyConvention'flat' | 'directory' required
backend'kv' | 'do-sqlite' required
status'published' | 'draft' required
editingMode'live' | 'staged' required
publishedAtnumber nullable required
publicUrlstring required

Canonical public site URL for this slug.

liveUrlstring required

Alias of publicUrl.

liveReadyboolean required

True after first publish; until then the public URL 404s.

buildingboolean required

build != null && build.phase !== 'done' — clone/build still running.

buildPhase'pages' | 'assets' | 'done' | 'failed' nullable required

Current build phase, or null when no build is active.

editorReadyboolean required

!building && stats.pages > 0 — draft/editor is renderable. Distinct from liveReady (public URL).

createdAtnumber required
updatedAtnumber required
pagesListTotalnumber required

Total HTML pages matching pagesQ (or all pages when pagesQ is omitted).

nextPagesCursorstring nullable required

Present when more HTML pages exist — pass as pagesCursor on the next call.

pagesPartialboolean

True when pages is one window of the page-key space, not all of it (mirrors /pages's own partial) — follow nextPagesCursor rather than treating pagesListTotal as exact.

statsPartialboolean

True when stats.pages/pagesListTotal is a floor from the KV arm's bounded meta-prefix probe, not an exact count. Distinct from pagesPartial, which is about the returned page WINDOW rather than the count.

previewReadyboolean

Pages staged — preview/publish allowed while asset warm may still run.

assetsReadyboolean

Import complete and external warm settled with zero failures. False when the latest warm aborted, even with 0 failures recorded (see mirroredAssets.abort).

mirrorCompleteboolean

Alias of assetsReady.

failedAssetUrlsstring[]

Sample failed external warm URLs from the latest warm job.

assetsHintstring

Present with mirroredAssets — explains CMS assets/ vs mirrored raw/_cdn/ lanes.

Example response

{
  "id": "3f6c1d52-8a4b-4e0e-9c57-2f1b7a9d6e10",
  "publicUrl": "https://acme-studio.dotsy.site/",
  "liveUrl": "https://acme-studio.dotsy.site/",
  "pages": [
    {
      "key": "index.html",
      "name": "Home",
      "route": "/"
    }
  ],
  "activity": [
    {
      "label": "Published to the edge"
    }
  ]
}

Changes

No recorded changes to this operation across all 1 revision of this API.