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

# Button group

> The button_group block — up to five buttons that fire interaction events.

Up to five buttons. Clicks arrive as [interaction events](/block-kit/interactions).

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

<ParamField body="buttons" type="array" required>
  1–5 buttons. More returns `BUTTONS_TOO_MANY`.
</ParamField>

<ParamField body="disable_on_click" default="true" type="boolean">
  When true, one click turns off the whole group and marks the clicked button. Set `false` for actions people repeat, like "Refresh".
</ParamField>

## The button object

<ParamField body="action_id" type="string" required>
  What kind of action this is. Must match `^[a-zA-Z0-9_.:-]{1,64}$` and be unique in the message. If you leave it out, we build it from `label`.
</ParamField>

<ParamField body="label" type="string" required>
  Plain text, 1–40 characters.
</ParamField>

<ParamField body="value" type="string">
  Your data, up to 2,000 characters. We never read it. It comes back exactly as sent when clicked.
</ParamField>

<ParamField body="style" default="secondary" type="string">
  `primary`, `secondary`, or `danger`.
</ParamField>

<ParamField body="url" type="string">
  An `https://` URL. This makes a **link button**: it opens a new tab, sends no event, and ignores `value`.
</ParamField>

```json theme={null}
{
  "type": "button_group",
  "buttons": [
    { "action_id": "approve", "label": "Approve", "value": "req_991", "style": "primary" },
    { "action_id": "reject", "label": "Reject", "value": "req_991", "style": "danger" },
    { "label": "View policy", "url": "https://example.com/policy" }
  ]
}
```

<Tip>
  `action_id` says *what kind* of action (`track_order`). `value` says *which one* (`4821`). Both come back in the [click event](/block-kit/interactions).
</Tip>

Buttons expire 30 days after the message is created. They also turn off once a human takes over the conversation.
