Actions
A row of interactive elements, buttons, selects, date pickers, and more.
actions lays out a row of interactive elements: buttons, select menus, checkboxes, radio
buttons, date and time pickers, and overflow menus. Reach for it whenever you need controls that
aren’t tied to a specific piece of text, the way a section accessory is.
Fields
typestring
Always `actions`.
stringelementsActionsBlockElement[]
The row's elements, in order. Slack allows up to 25.
ActionsBlockElement[]block_id?string
A unique identifier for this block. Auto-generated if omitted. Maximum length is 255 characters.
stringelements accepts buttons, all five select menu types, checkboxes, radio buttons, a date picker,
a time picker, a combined date-time picker, an overflow menu, a workflow button, and a rich text
input. Checkboxes, radio buttons, and the date-time picker each take their own full-width row
instead of sitting side by side with the others, matching Slack’s own layout.
Examples
Buttons
Select menus
Static, users, and conversations selects side by side. See select menus for the other types, including multi-select and external selects.
Checkboxes and radio buttons
Both take their own full-width row:
Date and time pickers
Interactivity
Each element type dispatches a different shape of onAction payload, all sharing type,
action_id, block_id, and action_ts:
button:value(if set), plusurlandstylewhen present.static_select/external_select:selected_option: { text, value }.multi_static_select/multi_external_select:selected_options: [...].users_select:selected_user: "U0ADA";multi_users_select:selected_users: [...].conversations_select:selected_conversation: "C0GENERAL";multi_conversations_select:selected_conversations: [...].channels_select:selected_channel: "C0GENERAL";multi_channels_select:selected_channels: [...].checkboxes:selected_options: [...](every checked option, not just the one clicked).radio_buttons:selected_option: { text, value }.datepicker:selected_date: "1990-04-28"(ornullwhen cleared).timepicker:selected_time: "13:37".overflow:selected_option: { text, value, url? }, and opensurlin a new tab if set.workflow_button:text,workflow, andstyle(if set).
For example, picking an option from the static select above dispatches:
{
"type": "static_select",
"action_id": "actionId-2",
"block_id": "b1",
"action_ts": "1706000000.000100",
"selected_option": {
"text": { "type": "plain_text", "text": "Apple", "emoji": true },
"value": "apple"
}
}
Selects, checkboxes, radio buttons, and pickers also write their value to state.values[block_id][action_id],
so a later action (like a modal submit) can read every element’s current value; buttons, overflow,
and workflow buttons don’t, since they’re one-shot actions.