- Buttons —
POST /messages/buttons. A message with 1 to 3 buttons under the text. Use them for short, closed choices: confirm or cancel an appointment, yes or no, or a link, a code to copy or a number to call. - Lists —
POST /messages/list. A message with one button that opens a list of up to 10 options, grouped into sections. Use it when there are more than three options, or when each option needs a short description: time slots, menu items, departments.
message event with what they chose. See Button and list replies.
Send buttons
Reply buttons send the choice back to you. Give each one anid — it is what you receive in the event, so make it something your code can route on.
201 Created with the ID of the message:
replyTo.id, which is how you tell which message — and so which appointment, order or ticket — the recipient answered.
Link, copy and call buttons
Buttons of different types can be mixed in one message. These three act on the recipient’s device and send nothing back:Button types
type can be omitted for reply buttons.
Send a list
A list shows one button (buttonText) under the message. Tapping it opens the options, grouped into titled sections. The recipient picks one.
title.
The AI label
SetaiLabel: true on either endpoint to show WhatsApp’s AI badge on the message — useful when the message comes from an assistant or bot and you want to say so.
aiLabel is ignored and the message is sent without it.
Limits
The limits follow the ones WhatsApp publishes for its Cloud API. Both endpoints
Buttons
Lists
A request that breaks a limit is rejected with
400 Bad Request and a message naming the field, and nothing is sent:
Handling the reply
A reply arrives as amessage event with type: "button_reply" or type: "list_reply". Route on the id you set on the button or row, and use replyTo.id — the ID returned by the send call — to find the message it answers. Only reply buttons and list rows produce events.
Button and list replies
Payloads, correlation, and what to watch for in your handler
Caveats
- This is a beta feature. Interactive messages rely on WhatsApp behaviour that is not an official contract and can change without notice. Keep a fallback in your flow: for example, accept a typed “confirm” as well as the button.
201means WhatsApp accepted the message, not that it was rendered. WhatsApp accepts the message even when the recipient’s app does not display the buttons or the list, and there is no signal back when that happens.- Where they render:
- Buttons render on phones and on WhatsApp Web.
- Lists currently render on phones only. WhatsApp Web shows “open your phone to view this message” instead.
- The AI label applies to 1:1 chats only, and is ignored in groups.
- Header and footer are text only. Images, videos and documents in the header are not supported.
- The common send options are not available. These endpoints do not take
mentions,replyTo,isForwardedorephemeralExpiration.