Messages
Send List
Send an interactive menu with sections and selectable options
POST
Send List
Auth:
Error envelope:
TokenAccount or TokenInstance • Rate-limit: Global (100/min) • Idempotent: no
Description
Sends an interactive list with up to 10 sections and 10 rows per section (overall limit of 100 rows across all sections). The recipient taps the button (buttonText) to open the menu and pick one of the options, and WhatsApp returns the id of the selected row as a reply message. Ideal for menus, short catalogs, guided FAQs and structured support.
Examples
Simple list (1 section)
A lean menu with a single “Dishes” section and two rows. The recipient taps “See options” to open the menu and select one of the options, which comes back as a reply carrying theid (p1 or p2).
Multi-section menu (categories)
A list with multiple categories grouped into sections. Each section is rendered with its own header inside the menu, visually separating the groups.List with header and footer
AddsheaderText (title above the body) and footerText (text in gray below the button), useful for branding and short disclaimers.
Success response
The returnedcontent is the contentText you sent, and messageType is fixed at list. Store the messageId to correlate with the selection events that arrive via webhook.
200 OK
When the recipient picks an option, WhatsApp sends a reply message containing the
id of the selected row, capture that response via webhook/websocket of events to continue the flow.Path parameters
Instance name (e.g.,
$Instance_Name).Headers
TokenAccount or TokenInstance.application/jsonRequest body
Destination: phone (
5511999999999) or JID (@s.whatsapp.net, @lid, @g.us, @newsletter).Main body of the message (description). Appears above the button that opens the list.
Text of the button that opens the list (e.g.,
"See options", "Open menu"). Limited by WhatsApp to a few characters.Array of 1 to 10 sections. The total number of rows across all sections cannot exceed 100.
Title displayed above
contentText. Optional.Light gray text below the button. Optional, ideal for short disclaimers.
Time in seconds to wait before sending. During the interval, the server sends the “typing…” indicator to the recipient and fires “paused” before the actual send.
ID of the message to be quoted (reply). The original message must belong to the same instance and have been saved in the database.
When
true and replyTo points to a message originating from a group, the reply is redirected to the original author’s private chat (keeping the quote).Origin identifier for traceability (e.g.,
crm, bot-suporte, n8n). Saved on the message record in the database and propagated to webhooks.Notes
- WhatsApp limits: maximum of 10 sections, 10 rows per section and 100 rows in total. Exceeded? The server responds with
400before attempting to send. - The row selected by the user is returned through the message event as a reply carrying the original
id, capture this via webhook to map the choice. - Lists work well in DMs, groups and channels, but the UX may vary between WhatsApp Business and personal WhatsApp.
descriptionis optional per row, but greatly improves readability when the title alone is ambiguous.
Errors
| HTTP | Internal status | Message |
|---|---|---|
| 400 | , | Instance name is required |
| 400 | , | Invalid request body: <detail> |
| 400 | , | Number is required |
| 400 | , | ContentText is required |
| 400 | , | ButtonText is required |
| 400 | , | At least one section is required |
| 400 | , | Maximum of 10 sections allowed |
| 400 | , | Section N: Title is required |
| 400 | , | Section N: At least one row is required |
| 400 | , | Section N: Maximum of 10 rows allowed |
| 400 | , | Section N, Row M: ID is required |
| 400 | , | Section N, Row M: Title is required |
| 400 | , | Total number of rows across all sections cannot exceed 100 |
| 400 | invalid_number | Invalid phone number format: <detail> |
| 404 | , | Instance not found |
| 500 | send_failed | Failed to send message: <reason> |
| 503 | disconnected | Instance is not connected to WhatsApp |