Show a scrollable menu when you have more options than buttons allow — support menus, product picks, or any flow with several choices.

At a glance

ItemDetail
typelist
Channel supportOfficial and unofficial
UnofficialMay be delivered as formatted fallback text
Structuresections[] with rows[] (id, title, optional description)

Request body

FieldRequiredDescription
channel_idYesSender channel ID
toYesRecipient phone number
typeYeslist
content.bodyYesMessage text
content.button_textYesLabel on the list open button
content.sectionsYesArray of sections with title and rows

Example

curl -X POST "https://api.wazapin.com/v1/messages" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "channel_id": "wzp_abc123",
    "to": "6281234567890",
    "type": "list",
    "content": {
      "body": "Pilih menu yang kamu mau",
      "button_text": "Lihat menu",
      "sections": [
        {
          "title": "Menu utama",
          "rows": [
            {"id": "menu_1", "title": "Cek pesanan", "description": "Lihat status order"},
            {"id": "menu_2", "title": "Hubungi CS", "description": "Butuh bantuan"}
          ]
        }
      ]
    }
  }'
When the user replies, see Handle inbound text or Handle interactive replies.

Endpoint

POST https://api.wazapin.com/v1/messages Authenticate with X-Api-Key. See Authentication.

Response

On success, the API returns 201 Created with a message record (status often starts as queued).
201 Created
{
  "data": {
    "id": "9f1fd66d-c37a-4b50-a8c2-b4dca523f9c8",
    "channel_id": "wzp_abc123",
    "to_phone": "6281234567890",
    "type": "text",
    "status": "queued",
    "created_at": "2026-03-04T06:20:10Z",
    "updated_at": "2026-03-04T06:20:10Z"
  }
}
Track delivery with Webhooks or GET /v1/messages/.