Field types
Hosted forms have a fixed list of field types. Each one validates differently, renders differently, and exposes its own config in the builder's inspector.
This page is the reference. For UX walkthroughs see Form builder →.
Input fields
These collect data and end up in the submission payload.
text
Single-line plain text. Most common field.
Config: placeholder, default, validation.min, validation.max, validation.pattern.
email
Single-line, validated as an RFC-5322 email.
Config: same as text. We auto-bind this field as the autoresponder reply_to_field if you don't set one explicitly.
tel
Phone number. We don't validate format (numbering plans are messy) — use validation.pattern if you need a specific shape.
url
URL with http:// or https://. Strips trailing whitespace before validation.
textarea
Multi-line text. Config: rows (defaults to 4) plus the standard validation.min/max.
number
Numeric input. Config: step (default 1), validation.min, validation.max.
date
ISO date picker (YYYY-MM-DD). Config: validation.min, validation.max (also as ISO dates).
select
Dropdown. Requires an options array of { value, label } pairs.
{
"type": "select",
"name": "plan",
"label": "Plan",
"options": [
{ "value": "free", "label": "Free" },
{ "value": "pro", "label": "Pro" }
]
}
radio
Single-choice radio group. Same options shape as select.
checkbox
Multi-choice. Same options shape. The submitted value is an array.
Set multiple: false and one option to make it act like a single boolean checkbox.
consent
A single tickbox for things like terms-of-service or marketing consent. The submitted value is true (we reject the form if required: true and it's not ticked).
Use the label to render the consent text. Inline links are fine — labels render as markdown.
file
File upload. Config:
accept— array of MIME types (["image/png", "image/jpeg"]) or extensions ([".pdf"]).multiple— allow multiple files at once.
Caps depend on plan; see Files →.
hidden
A field with no UI. Useful for tracking — your HTML can prefill it (e.g. UTM params) before submission. Validation still applies.
Markup-only blocks
These don't collect data and never appear in the payload. They exist for layout.
heading
A headline. Config: content (the text), level (h1 through h6).
divider
A horizontal rule. No config.
html
A markdown block. Config: content (markdown source). Renders to HTML on the public page.
Special fields
price
Renders a formatted price tag. Config: amount (number), currency (ISO 4217). Use this together with computed to build pricing tables that show a live total.
computed
A read-only field that displays the result of a formula referencing other fields' names:
{
"type": "computed",
"name": "total",
"label": "Total",
"formula": "quantity * unit_price"
}
The result is included in the submitted payload. Empty formula is allowed (useful while building); the field renders blank until you fill it in.
Field name rules
Every input field has a name that becomes the JSON key in the submission. The rules:
a-z,A-Z,0-9,_,-only.- 1–64 characters.
- Must be unique within the form.
We enforce this at schema-validation time — bad names throw at save, not at submit.
What's next
- Validation → — gate values per field
- Form builder → — visual editor walkthrough
- Themes → — restyle the public page