Identifiers
string
required
Always
"submission".string
required
UUID. Use as your foreign key in external systems.
string | null
UUID of the Page the submission came from.
null if the parent page was deleted.integer
required
Sequential, per-organization counter. The dashboard formats it as
SUB-0001; the wire value is the raw integer.Status, priority, flag
string
required
One of
new, read, in_progress, resolved, spam. Default is new.string
required
One of
none, low, medium, high. Default is none.boolean
required
Free-floating “needs attention” toggle. Independent of status and priority.
Assignment
string | null
UUID of the user who owns this submission.
null means unassigned.string | null
UUID of the user who resolved the submission. Stamped automatically when status moves to
resolved and the actor is an OAuth user; it stays null when an API key performs the resolve (there’s no user to attribute). Clear via PATCH with null to undo.string | null
ISO 8601 timestamp when the submission was resolved. Auto-stamped by the server the moment
status moves to resolved. You may also set it explicitly via PATCH; a malformed value (not a parseable ISO 8601 timestamp) is rejected with 400.string | null
Free-text internal annotation. Not visible to the visitor.
Data
object
required
The form response itself, keyed by block ID (not field label). Each entry has the shape:
type— the form block type (form_text,form_email,form_textarea,form_select,form_checkbox, …).label— the author-set label at submission time. Survives subsequent edits to the page.value— the submitted value.stringfor most fields,string[]for multi-select / checkboxes,nullfor empty optional fields,numberfor numeric inputs.order— the block’s sort order on the page when the submission was captured. Use this to render fields in form order, since JSON object keys aren’t ordered.
object
required
Free-form key/value pairs captured at submit time. Common keys:
utm_source, utm_medium, utm_campaign, referrer, user_agent. May be {} but never null.Attribution
string | null
QR code the visitor scanned to reach the page. Server-resolved from a session cookie — visitors can’t forge this.
string | null
Product whose scan URL drove this visit. Server-resolved.
string | null
Custom object whose
/o/<slug> URL drove this visit.string | null
Conversation that presented the form, if the submission originated from a chatbot’s
present_page tool call rather than a direct page visit.Destination
object | null
The redirect destination resolved at submit time. The page’s block configuration determines what the visitor sees after submitting; this field records what was applied.
null means the visitor saw the default thank-you screen.Shape is a tagged union on type:Activity
string | null
ISO 8601. When the visitor first loaded the page.
null if not captured (legacy submissions).number | null
Seconds between
viewed_at and created_at — time-to-complete. null when viewed_at is null.Timestamps
string
required
ISO 8601. When the visitor submitted.

