How a form is built
A form is defined top-down, and a submission is defined by the field names you chose. That is the one thing to get right: thename on a field is the key that will
appear in every submission for that form.
Create a form
Required:title, slug, sections
sections must contain at least one section, and each section at least one field.
Section and field titles are multilingual maps — a language code to a string.
Field types
Every field needsname, type, label, and required. The type decides how the
value is validated on submit.
Only the types in the top half get format validation. A
text field accepts any
string, so put the constraint in your own UI if you need one.Select and multi-select need options
Aselect, multi-select, or multi-checkbox field is only valid if it declares
options:
values — a submission with a topic that
is not in the list is rejected with a 422.
Public vs internal forms
formType decides where a form can be submitted from.
internal forms are for backend-to-backend use — they skip the public route
entirely, which means they can carry fields you would not expose publicly.Submitting a form
Required:language, values
values is a map keyed by the field names you defined:
captcha.enabled set to true, a captchaToken from the provider’s
client widget is also required. See Captcha.
Relations
A field can carry arelation that links it to a collection — for example a
select whose options come from your articles. Submissions store the linked IDs, and
you can manage them after the fact through the submission relation endpoints.
Submission relations
Connect, disconnect, and reorder related records on a submission
Where to go next
Create a form
The full create schema.
List submissions
Read every submission for the tenant.

