Updated March 2026
A form is a structured write endpoint. Any time a user sends data to a server, that's a form submission -- even if it doesn't look like a traditional form.
Upvotes are forms. User clicks an upvote button, your frontend submits a hidden form with user_id and feature_id. Set uniqueBy to user_id to prevent double-voting. Query submissions via the API to show vote counts.
Quiz answers are forms. Each question maps to a field -- text for open-ended, select for multiple choice. Student submits, your frontend compares answers to a key. Score computed client-side or server-side.
Polls are forms with a single select field. Create options, use page entries to display live results. Voters submit, results update automatically.
RSVPs are forms. Name, email, guest count, meal preference. uniqueBy on email prevents duplicates. Query submissions via the API for totals and attendee lists.
Reactions are forms. User clicks a heart on a blog post, your frontend submits a hidden post_id and the emoji value. Query submissions grouped by emoji to show distribution.
Homework submissions use a form with student name, assignment ID, and a file upload field. Teachers access through the API.
Anonymous posts. Single textarea, no identification fields. Use page entries to display recent posts. Confession wall with zero backend code.
The form API plus automations is what makes these practical without building a custom backend. Add automations for confirmation emails on submit -- an RSVP form can email the attendee their details, a homework submission can notify the teacher, a poll can thank the voter.
Every blueprint in /blueprints/ demonstrates one of these. A form API is not limited to contact pages.
{
"name": "Post Reaction",
"fields": [
{
"name": "post_id",
"label": "Post ID",
"type": "hidden"
},
{
"name": "emoji",
"label": "Reaction",
"type": "select",
"options": ["thumbs_up", "heart", "fire", "thinking", "rocket"],
"required": true
},
{
"name": "reader_id",
"label": "Reader ID",
"type": "hidden"
}
]
}