Send List Message

Sends an interactive List Message (menu) to a chat. This message type displays a button that, when tapped, opens a list of options.

POST
https://api.wawp.net/v2/send/list?instance_id=YOUR_INSTANCE_ID&access_token=YOUR_ACCESS_TOKEN&chatId=447441429009&message=%7B%0A++%22title%22%3A+%22Simple+Menu%22%2C%0A++%22description%22%3A+%22Please+choose+an+option%22%2C%0A++%22footer%22%3A+%22Thank+you%21%22%2C%0A++%22button%22%3A+%22Open+Menu%22%2C%0A++%22sections%22%3A+%5B%0A++++%7B%0A++++++%22title%22%3A+%22Main+Options%22%2C%0A++++++%22rows%22%3A+%5B%0A++++++++%7B%0A++++++++++%22title%22%3A+%22Option+1%22%2C%0A++++++++++%22rowId%22%3A+%22opt1%22%2C%0A++++++++++%22description%22%3A+%22Description+for+1%22%0A++++++++%7D%2C%0A++++++++%7B%0A++++++++++%22title%22%3A+%22Option+2%22%2C%0A++++++++++%22rowId%22%3A+%22opt2%22%0A++++++++%7D%0A++++++%5D%0A++++%7D%0A++%5D%0A%7D&message.title=Simple+Menu&message.description=Please+select+an+option+below&message.footer=Powered+by+Wawp&message.button=Open+Menu&message.sections=%5B%7B+title%3A+%27Section+1%27%2C+rows%3A+%5B...%5D+%7D%5D&reply_to=false_111...AAAA

Authentication Required

Login to swap the placeholders with your real Instance ID and Access Token.

Log In
Test /v2/send/list endpoint
POSTGET

No query parameters required

This endpoint doesn't expect data in the URL.

Best practices

  • Use "reply_to" to maintain conversation context.

  • Handle distinct message types (text, image, video) appropriately.

  • Implement a robust retry mechanism for failed sends.

Request Parameters

Configure the parameters required to interact with this endpoint. All query and body arguments are listed below with their details.

Request Body

Sent as a JSON object
string

Unique ID of the WhatsApp session

Example:
string

API access token

Example:
string

Recipient's WhatsApp number

Example:
object

The interactive list message structure.

Example:
string

Header title of the list message.

Example:
string

Body text of the message.

Example:
string

Small text at the bottom.

Example:
string

Text on the button that opens the list.

Example:
array

Array of sections, each containing a title and rows.

Example:
string

The ID of the message you are replying to

Example:

Request Samples

Use these ready-to-go code snippets to integrate our API into your project quickly and efficiently. Choose your preferred language and library.

1const baseUrl = "https://api.wawp.net";
2const endpoint = "/v2/send/list";
3const params = new URLSearchParams({
4 "instance_id": "YOUR_INSTANCE_ID",
5 "access_token": "YOUR_ACCESS_TOKEN"
6}).toString();
7const body = {
8 "chatId": "447441429009",
9 "message": {
10 "title": "Simple Menu",
11 "description": "Please choose an option",
12 "footer": "Thank you!",
13 "button": "Open Menu",
14 "sections": [
15 {
16 "title": "Main Options",
17 "rows": [
18 {
19 "title": "Option 1",
20 "rowId": "opt1",
21 "description": "Description for 1"
22 },
23 {
24 "title": "Option 2",
25 "rowId": "opt2"
26 }
27 ]
28 }
29 ]
30 },
31 "message.title": "Simple Menu",
32 "message.description": "Please select an option below",
33 "message.footer": "Powered by Wawp",
34 "message.button": "Open Menu",
35 "message.sections": "[{ title: 'Section 1', rows: [...] }]",
36 "reply_to": "false_111...AAAA"
37};
38
39fetch(`${baseUrl}${endpoint}${params ? '?' + params : ''}`, {
40 method: "POST",
41 headers: { "Content-Type": "application/json" },
42 body: JSON.stringify(body)
43})
44 .then(async (response) => {
45 if (response.ok) {
46 const data = await response.json();
47 console.log("Success:", data);
48 return data;
49 }
50
51 // Error Handling
52 if (response.status === 400) {
53 console.error("Error 400: Bad Request - Missing Required Parameter(s)");
54 }
55 if (response.status === 400) {
56 console.error("Error 400: Bad Request - Invalid Number (Egypt)");
57 }
58 if (response.status === 400) {
59 console.error("Error 400: Bad Request - Invalid Number (Saudi Arabia)");
60 }
61 if (response.status === 400) {
62 console.error("Error 400: Bad Request - Invalid Number (Unknown)");
63 }
64 if (response.status === 400) {
65 console.error("Error 400: Bad Request (XML Format)");
66 }
67 if (response.status === 400) {
68 console.error("Error 400: Bad Request (Plain Text)");
69 }
70 if (response.status === 401) {
71 console.error("Error 401: Unauthorized - Invalid or Missing Access Token");
72 }
73 if (response.status === 401) {
74 console.error("Error 401: Unauthorized (XML Format)");
75 }
76 if (response.status === 404) {
77 console.error("Error 404: Not Found - Session Does Not Exist");
78 }
79 if (response.status === 404) {
80 console.error("Error 404: Not Found (XML Format)");
81 }
82 if (response.status === 429) {
83 console.error("Error 429: Too Many Requests - Rate Limit Exceeded");
84 }
85 if (response.status === 500) {
86 console.error("Error 500: Internal Server Error - Unexpected Failure");
87 }
88 if (response.status === 500) {
89 console.error("Error 500: Internal Server Error (HTML)");
90 }
91 if (response.status === 502) {
92 console.error("Error 502: Bad Gateway - Connection Failed to Upstream");
93 }
94 if (response.status === 502) {
95 console.error("Error 502: Bad Gateway (XML Format)");
96 }
97
98 const errorText = await response.text();
99 console.error(`Error ${response.status}: ${errorText}`);
100 })
101 .catch((error) => console.error("Network Error:", error));
Interactive Samples
Ln 101, Col 1javascript

Expected Responses

Explore all possible responses and outcomes from the server. We have documented each status code with data examples to make success and error handling easier.

Message Sent Successfully
Type:
application/json
object *
string *
object *
number *
boolean *
string *
string *
number *
string *
string *
string *
boolean *
number *
boolean *
boolean *
boolean *
boolean *
boolean *
array *
array *
array *
boolean *
array *

Example

{
"_data": {
  "id": {
    "fromMe": true,
    "remote": "000000000000@c.us",
    "id": "MSG_ID_123456",
    "_serialized": "true_000000000000@c.us_MSG_ID_123456"
    },
  "viewed": false,
  "body": "BASE64_IMAGE_DATA",
  "type": "image",
  "t": 1759108866,
  "from": {
    "server": "c.us",
    "user": "111111111111",
    "_serialized": "111111111111@c.us"
    },
  "to": {
    "server": "c.us",
    "user": "000000000000",
    "_serialized": "000000000000@c.us"
    },
  "ack": 0,
  "isNewMsg": true,
  "star": false,
  "kicNotified": false,
  "caption": "Here's your requested image.",
  "deprecatedMms3Url": "https://example.com/media-url",
  "directPath": "/media/direct/path/example",
  "mimetype": "image/jpeg",
  "filehash": "FILE_HASH_PLACEHOLDER",
  "encFilehash": "ENC_FILE_HASH_PLACEHOLDER",
  "size": 192487,
  "mediaKey": "MEDIA_KEY_PLACEHOLDER",
  "mediaKeyTimestamp": 1759108865,
  "streamable": false,
  "mediaHandle": null,
  "isFromTemplate": false,
  "pollInvalidated": false,
  "isSentCagPollCreation": false,
  "latestEditMsgKey": null,
  "latestEditSenderTimestampMs": null,
  "mentionedJidList": {
    },
  "groupMentions": {
    },
  "isEventCanceled": false,
  "eventInvalidated": false,
  "isVcardOverMmsDocument": false,
  "isForwarded": false,
  "isQuestion": false,
  "questionReplyQuotedMessage": null,
  "questionResponsesCount": 0,
  "readQuestionResponsesCount": 0,
  "labels": {
    },
  "hasReaction": false,
  "disappearingModeInitiator": "chat",
  "disappearingModeTrigger": "chat_settings",
  "productHeaderImageRejected": false,
  "lastPlaybackProgress": 0,
  "isDynamicReplyButtonsMsg": false,
  "isCarouselCard": false,
  "parentMsgId": null,
  "callSilenceReason": null,
  "isVideoCall": false,
  "callDuration": null,
  "callCreator": null,
  "callParticipants": null,
  "isCallLink": null,
  "callLinkToken": null,
  "isMdHistoryMsg": false,
  "stickerSentTs": 0,
  "lastUpdateFromServerTs": 0,
  "invokedBotWid": null,
  "bizBotType": null,
  "botResponseTargetId": null,
  "botPluginType": null,
  "botPluginReferenceIndex": null,
  "botPluginSearchProvider": null,
  "botPluginSearchUrl": null,
  "botPluginSearchQuery": null,
  "botPluginMaybeParent": false,
  "botReelPluginThumbnailCdnUrl": null,
  "botMessageDisclaimerText": null,
  "botMsgBodyType": null,
  "requiresDirectConnection": false,
  "bizContentPlaceholderType": null,
  "hostedBizEncStateMismatch": false,
  "senderOrRecipientAccountTypeHosted": false,
  "placeholderCreatedWhenAccountIsHosted": false,
  "galaxyFlowDisabled": false,
  "links": {
    }
  },
"mediaKey": "MEDIA_KEY_PLACEHOLDER",
"id": {
  "fromMe": true,
  "remote": "000000000000@c.us",
  "id": "MSG_ID_123456",
  "_serialized": "true_000000000000@c.us_MSG_ID_123456"
  },
"ack": 0,
"hasMedia": true,
"body": "Here's your requested image.",
"type": "image",
"timestamp": 1759108866,
"from": "111111111111@c.us",
"to": "000000000000@c.us",
"deviceType": "android",
"isForwarded": false,
"forwardingScore": 0,
"isStatus": false,
"isStarred": false,
"fromMe": true,
"hasQuotedMsg": false,
"hasReaction": false,
"vCards": {
  },
"mentionedIds": {
  },
"groupMentions": {
  },
"isGif": false,
"links": {
  }
}
Bad Request - Missing Required Parameter(s)
Unauthorized - Invalid or Missing Access Token
Not Found - Session Does Not Exist
Too Many Requests - Rate Limit Exceeded
Internal Server Error - Unexpected Failure
Bad Gateway - Connection Failed to Upstream
Previous TopicSend PDF
Next TopicSend Event

Command Palette

Search for a command to run...