object: "page". GET /pages/{id} extends the shape with a blocks[] array — the full ordered block tree, documented on Blocks.
Example
Identifiers
string
required
Always
"page".string (uuid)
required
Stable UUID. Use this in
/pages/{id} and as the target of destination.page
on QR codes and products.string
required
Operator-facing slug. Editable in the dashboard. Used for internal dashboard
navigation and as the default surface name when no
public_slug is set.string
required
The slug exposed in public page URLs. Distinct from
slug because the
operator may want a clean public address that’s independent of internal
renames. Stable within the page’s life; changes only on explicit operator
edit.Status
Content
string
required
Page title. Rendered in the editor’s tab and used as the default
<title> when meta_title is unset.string | null
Free-form description. Operator-facing — distinct from
meta_description
below.Background
object
required
The page background. Discriminated on
type: color, gradient, image, or video.Island
The “island” is the content card that sits on the background.object
required
Meta
string | null
URL for the browser tab favicon.
null falls back to the org default.string | null
Override for the
<title> tag. Falls back to title when unset.string | null
Override for the
<meta name="description"> tag. Falls back to description when unset.string | null
Override for the Open Graph image. Used by social previews. Falls back to a
brand default when unset.
Stats
integer
required
Lifetime view count. Increments on every public render. Read-only.
Timestamps
string (datetime)
required
When the page was created.
string (datetime)
required
Last mutation timestamp.
Blocks
GET /pages/{id} extends the response with a blocks[] array, ordered by sort_order. Each block has the envelope:
config shape.
array
Ordered list of block objects. Empty for blank pages.

