Multiselect Block

The multiselect block lets users pick multiple options from a set. Requires channel mode: "interactive". Set send_on_change: true to fire an input_change webhook on every selection change; otherwise selections are only sent as part of card_state when a button is clicked.

Fields

Field Type Required Description
type string Yes "multiselect"
label string No Display label above the dropdown
options Option[] Yes Array of selectable options
selected_values string[] No Currently selected option values
max_selections integer No Maximum number of selections allowed
disabled boolean No Disables the dropdown
clear_on_submit boolean No Reset to selected_values when any button in the card is pressed
send_on_change boolean No Send an input_change webhook when selections change

Option Object

Field Type Required Description
value string Yes Value sent in the webhook payload
label string Yes Display text shown in the dropdown

Examples

Tag Selector

{
  "type": "multiselect",
  "label": "Tags",
  "options": [
    { "value": "urgent", "label": "Urgent" },
    { "value": "billing", "label": "Billing" },
    { "value": "tech", "label": "Technical" },
    { "value": "feature", "label": "Feature Request" },
    { "value": "bug", "label": "Bug" }
  ]
}

With Pre-selected Values

{
  "id": "category-select",
  "type": "multiselect",
  "label": "Categories",
  "selected_values": ["billing", "urgent"],
  "options": [
    { "value": "urgent", "label": "Urgent" },
    { "value": "billing", "label": "Billing" },
    { "value": "tech", "label": "Technical" }
  ]
}

Limited Selections

{
  "type": "multiselect",
  "label": "Pick up to 3 topics",
  "max_selections": 3,
  "options": [
    { "value": "sales", "label": "Sales" },
    { "value": "marketing", "label": "Marketing" },
    { "value": "engineering", "label": "Engineering" },
    { "value": "support", "label": "Support" },
    { "value": "hr", "label": "HR" }
  ]
}

Webhook Payload

Fired only when send_on_change: true. Triggered immediately on every selection change.

{
  "type": "input_change",
  "card_id": "card-uuid",
  "payload": {
    "block_type": "multiselect",
    "value": ["billing", "urgent"]
  }
}

The value is an array of the selected option value strings.

Tip: Selections are always included in the card_state of any button click, so send_on_change is only needed if you want to react to each selection immediately.

Patching

Update Selected Values

{
  "id": "category-select",
  "patch": {
    "selected_values": ["tech", "feature"]
  }
}

Disable After Submission

{
  "id": "tag-select",
  "patch": {
    "disabled": true
  }
}