Skip to documentation
Anywe

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.

TypeContractAgent may sendPlatform may produceWeb rendererMobile renderer
formPublishedAllowedNo documented platform producer.FormBlockFormBlockView

form

Allowed

A 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.

FieldRequiredPublished constraint
typeYesliteral "form"
form_idYesstring · 1–64 characters
submit_labelNostring · 0–60 characters
fieldsYesarray · 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"
JSON
{
  "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