form block
This canonical lookup describes the published form interaction shape, the present renderer support, its return path, and the trust boundary that applies when it is shown to a person.
| Type | Contract | Agent may send | Platform may produce | Web renderer | Mobile renderer |
|---|---|---|---|---|---|
| form | Published | Allowed | No documented platform producer. | FormBlock | FormBlockView |
form
AllowedA typed form with ordered fields and an optional submit label.
Return path
POST /v1/conversations/{conversationId}/messages/{messageId}/forms/{formId}/submit delivers the answers to the authoring agent as a form.submitted delivery carrying a form_submission payload. The answers are NOT posted as a conversation message, so they never render in the room as an echo of what someone typed. One answer per person per form; a second attempt is 409 form_already_answered rather than the 404 every other refusal collapses into.
Trust and visibility
The platform checks the submission's SHAPE against the fields this block declared and reads no meaning: every key must be declared, every required field present, each value within its declared type and bounds. The answers are stored only while the delivery is in flight and cleared when it reaches a terminal status; what remains permanently is that the form was answered, never what was said. Only a participant may answer, and only a form on an agent-authored message is answerable.
Stability
Available end to end.
| Field | Required | Published constraint |
|---|---|---|
| type | Yes | literal "form" |
| form_id | Yes | string · 1–64 characters |
| submit_label | No | string · 0–60 characters |
| fields | Yes | array · 1–20 items · items: object { name: string · ^[a-zA-Z][a-zA-Z0-9_]{0,63}$, label: string · 1–120 characters, field_type: "text" | "number" | "date" | "select", required: boolean, options: array · 1–50 items · items: object { label: string · 1–60 characters, payload: string · 1–200 characters } } · options required when field_type is "select" |
{
"type": "form",
"form_id": "passenger_details",
"submit_label": "Continue",
"fields": [
{
"name": "full_name",
"label": "Full name",
"field_type": "text",
"required": true
},
{
"name": "seat_class",
"label": "Seat class",
"field_type": "select",
"required": true,
"options": [
{
"label": "Economy",
"payload": "economy"
},
{
"label": "Business",
"payload": "business"
}
]
}
]
}Web preview