Rich block schema

Bots, workflows, the AI agent and your own backend send interactive content to the messenger as blocks. Every block follows one versioned JSON schema, is checked on our servers and works with a keyboard and a screen reader.

Block types

Block types
TypeLimitsWhat the visitor gets
quick_repliesUp to 10, 6 shown, 40 characters eachTapping one sends its label as the visitor's message. The chips go away once the visitor sends anything.
buttonsUp to 10Each button posts back, opens a URL in a new tab or opens an article. Single-use buttons turn off after use.
fieldemail, phone, text, number, single selectChecked in the browser and on our servers. Phone numbers use E.164 with a country picker. After sending, the field collapses to a masked summary the visitor can edit until the conversation closes.
articleTitle, 160-character excerpt, collectionOpens in the article reader inside the messenger, or in a new tab when the reader is turned off.
image, fileAlt text required for imagesImages show inline. Files show as a card with their name and size and download on tap.

Example

A reply in the "Invoice PDF shows the wrong tax rate" conversation that offers the visitor's recent invoices and asks where to send the corrected PDF.

{
  "schema_version": "2026-09-01",
  "text": "Which invoice shows the wrong tax rate?",
  "fallback_text": "Reply with the invoice number, for example INV-2041.",
  "blocks": [
    { "type": "quick_replies", "options": [
      { "label": "INV-2041", "value": "inv_2041" },
      { "label": "INV-2042", "value": "inv_2042" },
      { "label": "Another invoice", "value": "other" }
    ] },
    { "type": "field", "input": "email", "name": "billing_email",
      "label": "Where should we send the corrected PDF?" }
  ]
}

How it looks in the messenger

The messenger shows the AI label, the question, three quick replies, an email field with a Send button and Talk to a person.
Keyboard
Tab reaches every reply, button and field. Enter or Space sends.
Screen readers
New blocks are announced, for example "3 replies available".
Touch targets
Replies, buttons and fields are at least 44 px high.
AI label
Blocks sent by the AI agent always carry the assistant's name and an AI label.
A person is one tap away
Talk to a person stays under every block. No schema field can hide it.

Rules every block follows

Rules every block follows
One schemaMessages from your backend, workflows, bots and the AI agent all go through the same versioned schema. Set schema_version to the version you built against.
Server checksAn invalid block is rejected with error code block_invalid and the path of the field that failed. Nothing half-valid reaches the visitor.
No raw HTMLText is plain text. Links are sanitized, and javascript: and data: URLs are blocked.
Fallback textfallback_text is required. An older SDK that does not know a block type shows this text instead, so the visitor can still answer.