Forms
Micropage includes built-in form handling. No custom backend or third-party service is required.
Markup
Add a form to any page section:
form: Contact
input: Name*
input: Email*
textarea: Message
submit: Send
Fields ending in * are required. The * is not part of the label text: it sets the field's required attribute and renders as a red asterisk after the label on the published page. A form with at least one required field also renders a * indicates a required field key above its fields. The form name (e.g. Contact) is used to identify submissions.
The per-field asterisk is aria-hidden, since the required attribute already announces the field to screen readers; the key is plain text and is read out. checkboxes and radios associate their group label with the group via role="group" and aria-labelledby, so the group label is announced along with its options.
Supported field types
| Element | Aliases | Description |
|---|---|---|
input: | textfield: | Single-line text field |
textarea: | text: | Multi-line text field |
select: | – | Dropdown |
checkboxes: | multichoice:, multi-choice: | Multiple choice (all aliases fully supported) |
radios: | choice:, singlechoice:, single-choice: | Single choice (all aliases fully supported) |
submit: | save: | Submit button |
All aliases above are supported and not deprecated. Use the canonical names in new markup for consistency.
Success message
After a successful submission the form is replaced by a confirmation message. Set your own with success::
form: Contact
input: Name*
input: Email*
textarea: Message
submit: Send
success: Thanks — we'll reply within one business day.
success: is optional. The text is trimmed and capped at 300 characters, and the same text is used both on the JavaScript path and on the no-JavaScript fallback page. It may appear anywhere in the form's field run; the convention is after submit:.
Without success:, a form shows Thank you. Your message was sent. and a newsletter form shows Thank you. You're subscribed.. Regular forms also show a Submit again button under the confirmation; newsletter forms don't. Which of the two applies is set by the form's newsletter status — see Newsletter copy in markup.
The confirmation stays on screen; it is not faded or auto-hidden. It carries role="status", and removing it on a timer would cut off the screen-reader announcement.
Spam protection
Forms include:
- a hidden honeypot field
- server-side validation: only fields defined in markup are accepted, and required fields (label ending with
*, including onselect,checkboxes, andradios) must be present on submit - Cloudflare Turnstile verification on the published page
- an automatic content check for common spam patterns
Submissions that fail Turnstile or look like spam are kept in a separate Spam view instead of the inbox. They don't send notifications or webhooks and don't create newsletter subscribers. Nothing is deleted automatically: you can move a submission back with Not spam, or flag one yourself with Mark as spam.
Using the Web App
Add a form block in the Edit tab and publish. Submissions appear in the Form Submissions tab automatically.
Using the CLI
View submissions:
micropage submissions list
Show a single submission:
micropage submissions show <id>
Notifications
Micropage can notify you when a submission is received.
| Plan | Notification type |
|---|---|
| Pro | Daily email digest of submission counts |
| Pro+ | Instant email per submission + daily digest |
| Pro+ | Webhook — POST to a URL you configure |
Webhook notifications (Pro+)
Configure a webhook URL in Settings → Forms. When a submission is received, Micropage sends a POST request to that URL with the submission data as JSON.
Payload:
{
"id": "uuid",
"project_id": 123,
"form_name": "Contact",
"page_url": "/",
"form_index": 0,
"payload": {
"fields": [
{ "name": "name_0", "label": "Name", "value": "Jane" },
{ "name": "email_1", "label": "Email", "value": "[email protected]" }
]
},
"submitted_at": "2026-04-02T12:00:00Z"
}
fields is ordered like the form markup. Integrations can key off name (stable wire name); label is for display.
The request includes an X-Micropage-Submission-Id header containing the submission UUID, which you can use to verify the request or deduplicate retries.
Limits and plans
| Capability | Free | Pro | Pro+ |
|---|---|---|---|
| Submissions per project per month | 100 | 1,000 | 10,000 |
| CSV export | no | yes | yes |
| Daily email digest | no | yes | yes |
| Instant email per submission | no | no | yes |
| Webhook | no | no | yes |
Limits apply per project, per calendar month (UTC) on every plan. Submissions flagged as spam don't count toward the limit.