Skip to main content
POST
Send a list menu
Best effort. Many WhatsApp clients no longer render interactive messages and will show a plain-text fallback instead. A 200 means the message was accepted for delivery — not that the menu will appear. The response carries "best_effort": true to say so explicitly. Read Buttons and lists are best-effort before you build anything on this.

Notes

Limits, all enforced before the message leaves us:
  • row_id is what identifies the row someone picked. Two rows sharing an id would make the selection unreadable, so duplicates are rejected.
  • Omit a row’s description entirely rather than sending "" — an empty string is not accepted.

Example

cURL

The response

Successful responses on this endpoint carry two extra fields:
You cannot receive the selection. When someone taps a row, their choice goes back to the WhatsApp conversation — there is no webhook and no endpoint that delivers it to your system. row_id is meaningful only to a human reading the chat on the phone.

Authorizations

apikey
string
header
required

Your API key, sent in an apikey request header. Never in the URL, never as a Bearer token.

Body

application/json
instance_id
string<uuid>
required

Which of your connected numbers to send FROM. Copy it from your numbers screen in the portal, or from GET /v1/instances. It must belong to your account.

Example:

"3f9c1a2b-7d4e-4c81-9f0a-2b6d5e8c1a34"

to
string
required

The recipient, with country code and no leading zero — for example 919876543210. Spaces, dashes, brackets and a leading + are accepted and stripped; 6 to 15 digits must remain.

Example:

"919876543210"

title
string
required

Heading of the message.

Required string length: 1 - 1024
Example:

"Book an appointment"

button_text
string
required

Label on the button that opens the menu. Up to 24 characters.

Required string length: 1 - 24
Example:

"View slots"

sections
object[]
required

1 to 10 sections, and no more than 30 rows in total across all of them.

Required array length: 1 - 10 elements
description
string

Body text under the title.

Maximum string length: 1024
Example:

"Pick a time that suits you"

Small print under the menu. Up to 60 characters.

Maximum string length: 60
quoted_message_id
string

Send this message as a reply, quoting an earlier one. Use the data.message_id returned by a previous send.

Maximum string length: 128
Example:

"3EB0C1D2F4A5B6C7D8E9"

quoted_from_me
boolean
default:false

Set true when the quoted message is one you sent from this number. Only valid together with quoted_message_id.

Response

Accepted for delivery — best effort. best_effort and note are on every interactive response, because whether the recipient's WhatsApp renders it is outside anyone's control.

success
boolean
data
object
request_id
string<uuid>