Skip to main content
blocks let you send a richer layout than plain text — a title, a label/value grid, buttons — on top of the required text fallback. Blocks ship in stages: Always send text. It’s what people and push notifications see until rendering ships, and it stays as the fallback after.

Block types

At most 50 blocks per message, 16 KB total. An unknown type or a field a type doesn’t accept returns 400 invalid_blocks.
A bold title line.
A body paragraph. text supports a Markdown subset: **bold**, _italic_, [label](url), and line breaks.
A two-column label/value grid. 1 to 10 fields.
A row of 1 to 5 buttons. Each button is either a link (url — opens in the browser, no callback) or an action (action_id + optional value — sends an interaction callback once clicks ship in Phase 2). Never both on the same button. style is primary, danger, or omitted.
A small grey footer line.
A horizontal rule. Takes no other fields.
Full field-level schema on Block types.

Editing

PATCH /v1/messages/{id} replaces the whole blocks array — there’s no partial update. Leaving blocks out of an edit clears them.