type, a config object whose shape is determined by type, and rendering hints (sort_order, spacing). This page documents the wire shape for every block type currently registered.
The dashboard editor is the authority for block authoring — v1 Pages is
read-only. This page describes the read shape your client receives from
GET /pages/{id}.The block envelope
Every block has the same outer shape:string (uuid)
required
Stable UUID for this block. Referenced from form submissions (each submitted
field is keyed on its block id).
string
required
Block type. One of the values listed below. New types may be added without an
OpenAPI version bump — treat unknown types as opaque.
object
required
Configuration for this block. Shape depends on
type. The schema types this
as unknown; see the per-type sections below for the exact shape.integer
required
Display order. The
blocks[] array is already returned sorted by this field —
use it for stable ordering across refetches.integer
required
Top padding in pixels.
integer
required
Bottom padding in pixels.
Categories
Content blocks
heading
text
image
video
divider
banner
Action blocks
button
contact
Renders as a tap-to-save vCard on mobile.
file
Form blocks
All form fields share aformBase schema and extend it with field-specific keys. The base:
The submitted value is keyed by block id in the submission’s
data map — see Submissions.
form_text
maxLength (integer).
form_textarea
rows (integer, default 4), maxLength (integer).
form_email
form_phone
form_number
min, max, step (numbers).
form_select
options[] with { label, value, description? }. Always renders as a native-style dropdown — no variant.
form_radio
variant (list | cards, default cards), accentColor (hex), options[].
form_switch
Same shape as form_radio — multi-select toggle cards or list.
form_checkbox
Same shape as form_radio — multi-select with checkboxes.
form_rating
form_date
form_hidden
Hidden fields are never visually rendered. Prefill-from-URL is handled by the visible field blocks; this is a pure constant.
form_media
form_submit
Redirect rules are evaluated top-to-bottom, first match wins. The last rule should have
condition: null (the fallback). Each rule:
eq, neq, gt, gte, lt, lte, in, not_in, contains.
Shared types
FaIcon
Font Awesome icon reference.
prefix— FA style prefix (fas,far,fab,fad, etc.).iconName— kebab-case icon name.
Button style
variant—filledoroutline.bgColor,textColor— hex.borderRadius— px.borderWidth— px. Ignored whenvariant = "filled".
Page destination
Thedestination object used by button blocks (and form submit redirects). Discriminated on type:
The destination embeds enough of the target’s metadata (title, slug, etc.) so
renderers can hyperlink without an extra lookup. The embedded values are a
snapshot — refresh by re-reading the page if you need the latest.
Forward compatibility
New block types may be added without an OpenAPI version bump — they’re additive. Treat any unknowntype as opaque and skip rendering rather than crashing. The config field is typed as unknown on the wire precisely so additions don’t break existing consumers.
