> ## Documentation Index
> Fetch the complete documentation index at: https://docs.my-aichatbot.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Form

> The form block — up to ten input fields, submitted as one event.

A card of inputs with a submit button. Answers arrive as [form events](/block-kit/interactions).

<Warning>
  **One form per message, and a form cannot share a message with a `button_group`.** Breaking either rule returns `FORM_EXCLUSIVITY`.
</Warning>

<ParamField body="type" type="string" required>
  `"form"`
</ParamField>

<ParamField body="fields" type="array" required>
  1–10 fields.
</ParamField>

<ParamField body="form_id" type="string">
  Your id for the form. We make one if you leave it out.
</ParamField>

<ParamField body="title" type="string">
  Plain text, up to 150 characters.
</ParamField>

<ParamField body="submit_label" default="Submit" type="string">
  Up to 40 characters.
</ParamField>

## The field object

<ParamField body="name" type="string" required>
  The key used in the submitted `values`. Must match `^[a-zA-Z0-9_]{1,64}$` and be unique in the form.
</ParamField>

<ParamField body="type" type="string" required>
  `text`, `email`, `number`, `select`, `textarea`, or `checkbox`.
</ParamField>

<ParamField body="label" type="string" required>
  1–80 characters.
</ParamField>

<ParamField body="required" default="false" type="boolean">
  For `checkbox`, this means it must be ticked.
</ParamField>

<ParamField body="placeholder" type="string">
  Up to 100 characters.
</ParamField>

<ParamField body="help" type="string">
  Up to 200 characters. Simple inline markdown only.
</ParamField>

<ParamField body="default" type="string | number | boolean">
  Must match the field's type.
</ParamField>

<ParamField body="max_length" type="integer">
  1–5,000. Works on `text` and `textarea`.
</ParamField>

<ParamField body="min" type="number">
  `number` fields only.
</ParamField>

<ParamField body="max" type="number">
  `number` fields only.
</ParamField>

<ParamField body="options" type="array">
  Needed for `select`. 1–50 entries of `{ label, value }`. Plain strings work too — we expand them.
</ParamField>

```json theme={null}
{
  "type": "form",
  "form_id": "callback",
  "title": "Request a callback",
  "submit_label": "Request callback",
  "fields": [
    { "name": "full_name", "type": "text", "label": "Your name", "required": true },
    { "name": "email", "type": "email", "label": "Email", "required": true },
    { "name": "team_size", "type": "number", "label": "Team size", "min": 1, "max": 10000 },
    {
      "name": "topic",
      "type": "select",
      "label": "Topic",
      "required": true,
      "options": ["Billing", "Technical", { "label": "Something else", "value": "other" }]
    },
    { "name": "details", "type": "textarea", "label": "Details", "max_length": 1000 },
    { "name": "consent", "type": "checkbox", "label": "Email me about my request" }
  ]
}
```

We check every answer again on our servers. Then the form **locks for good** — it shows the answers read-only with a "Submitted" badge. It cannot be sent twice. See [Interactions](/block-kit/interactions) for the payload you get.
