messages:send| Field | Type | Required | Validation | Description |
|---|---|---|---|---|
phone | string | Yes | Recipient phone number with country code | |
type | string | Yes | in: button, list | Interactive message type |
body_text | string | Yes | max:1024 | Main message body text |
header_text | string | No | max:60 | Optional header text |
footer_text | string | No | max:60 | Optional footer text |
contact_id | integer | No | Must exist in contacts | Existing contact ID |
| Field | Type | Required | Validation | Description |
|---|---|---|---|---|
buttons | array | Yes | max:3 items | Array of reply buttons |
buttons[].id | string | Yes | Unique button identifier | |
buttons[].title | string | Yes | max:20 | Button display text |
| Field | Type | Required | Validation | Description |
|---|---|---|---|---|
list_button_text | string | Yes | max:20 | Text on the list menu button |
sections | array | Yes | max:10 | Array of list sections |
sections[].title | string | Yes | Section heading | |
sections[].rows | array | Yes | Array of selectable rows | |
sections[].rows[].id | string | Yes | Unique row identifier | |
sections[].rows[].title | string | Yes | max:24 | Row display text |
sections[].rows[].description | string | No | max:72 | Row description text |
| Field | Type | Description |
|---|---|---|
message_id | string | WhatsApp message ID |
contact_id | integer | Contact ID |
phone | string | Cleaned phone number |
type | string | Interactive type used (button/list) |
status | string | Message status (sent) |
sent_at | string | ISO 8601 send timestamp |
chat_id | integer | Internal chat interaction ID |
chat_message_id | integer | Internal chat message record ID |
| Status | Error Code | Description |
|---|---|---|
| 401 | UNAUTHORIZED | Invalid or missing API token |
| 403 | INSUFFICIENT_SCOPE | Token missing messages:send scope |
| 403 | FEATURE_LIMIT_EXCEEDED | Contact limit or conversation limit reached |
| 403 | CONTACT_OPTED_OUT | Contact has opted out of receiving messages |
| 404 | NOT_FOUND | Contact not found (when contact_id provided) |
| 422 | VALIDATION_ERROR | Request validation failed or missing config for auto-contact creation |
| 422 | WHATSAPP_NOT_CONFIGURED | WhatsApp not configured for this account |
| 429 | RATE_LIMIT_EXCEEDED | Too many requests |
| 500 | MESSAGE_SEND_FAILED | Failed to send via WhatsApp API |
| 500 | INTERNAL_ERROR | Unexpected server error |
| Field | Message |
|---|---|
phone | Phone number is required |
type | Interactive message type is required / Type must be either button or list |
body_text | Body text is required |
buttons | Buttons are required for button type messages |
list_button_text | List button text is required for list type messages |
sections | Sections are required for list type messages |
curl --location --request POST '/messages/interactive' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data-raw '{
"phone": "+919999999999",
"type": "button",
"body_text": "Would you like to schedule a demo?",
"header_text": "Product Demo",
"footer_text": "Click a button below",
"buttons": [
{
"id": "btn_yes",
"title": "Yes, please!"
},
{
"id": "btn_no",
"title": "Not now"
},
{
"id": "btn_later",
"title": "Maybe later"
}
]
}'{}