Skip to content
2026

Interactive reply buttons

Released: June 1, 2026

Reply buttons (Meta’s interactive.type=button surface) are now supported on POST /v1/{phone_number_id}/messages as a new interactive subtype:

{
"messaging_product": "whatsapp",
"to": "+628123456789",
"type": "interactive",
"interactive": {
"type": "reply_buttons",
"body": { "text": "Konfirmasi jadwal workshop besok jam 9?" },
"action": {
"buttons": [
{ "type": "reply", "reply": { "id": "confirm", "title": "Confirm" } },
{ "type": "reply", "reply": { "id": "reschedule", "title": "Reschedule" } },
{ "type": "reply", "reply": { "id": "cancel", "title": "Cancel" } }
]
}
}
}

Recipients tap one of the buttons; their choice arrives on your webhook as an inbound message.received event carrying a button_reply discriminator with the id you set. Use it for confirmations, branching menus, and short multiple-choice questions where each option is a single short label (≤20 chars).

Distinct from the existing CTA URL button — that opens a link in the browser; reply buttons stay inside WhatsApp and route back to your webhook.

Validation enforced before the request reaches Meta:

  • 1–3 buttons per message
  • Each id ≤ 256 chars; each title ≤ 20 chars
  • Both id and title must be unique across the button set
  • Body ≤ 1024 chars (required); optional header (text / image / video / document via link) ≤ 60 chars; optional footer ≤ 60 chars
  • Subject to the 24-hour customer-service window — same as every free-form send

See the new Send reply buttons guide for the full payload, the webhook shape, and end-to-end examples in cURL and the TypeScript SDK.

@kirimdev/sdk accepts the new reply_buttons variant on phone.messages.send(...) automatically — the SDK derives its types from the same OpenAPI spec that powers the API reference. No new SDK method is required; the variant appears as a tab inside the existing type: 'interactive' discriminator.

The existing send_message MCP tool now accepts reply_buttons payloads — Claude, ChatGPT, and other MCP-aware clients can drive the new surface immediately. No new tool registration is needed.

The Kirim n8n community node ships a new Send Interactive Reply Buttons operation alongside the existing CTA URL action. The form exposes optional header / body / footer and a dynamic 1–3-row buttons collection (id + title). Validation is performed locally with clear errors before any HTTP request fires.

The chat composer has a new Tombol balasan menu item between the URL-button and list-message actions. Operators can compose a reply-buttons message inline, see the same 1–3 button preview the recipient will tap, and review inbound button_reply events directly in the thread.