Send Poll
Send an interactive poll with multiple options.
Authentication Required
Login to swap the placeholders with your real Instance ID and Access Token.
Log InNo 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.
Democracy in Chat: Mastering the Interactive Poll Engine
Polls (/v2/send/poll) are the gold standard for gathering structured feedback in a conversational environment. They eliminate the "Decision Fatigue" associated with typing out text responses and provide a clean, visual way for users to express preferences. In a Wawp-powered application, polls act as interactive data entry points that can trigger complex backend workflows based on user selection.
🏗️ The Multi-Option Synchronization Pipeline
When you call the /send/poll endpoint, Wawp initiates a specialized synchronization flow:
- Schema Validation: The engine verifies that your
optionsarray contains at least two choices and does not exceed the WhatsApp maximum of 12 options. It also ensures each option string is under 255 characters. - Metadata Consistency: The
name(your question) andoptionsare serialized into a native WhatsApp Poll packet. Wawp maintains a mapping between these string options and their internal index IDs, ensuring that when a user votes, you get a clean, predictable value in your Webhook. - The MultipleAnswers Logic: Setting
multipleAnswers: trueinstructs the WhatsApp network to render checkboxes instead of radio buttons. This changes the fundamental nature of the engagement from a "Choice" to a "Survey," allowing for more complex data collection.
🛡️ Strategic Best Practices for Feedback Engagement
1. The "Power of Five" Rule
While you can send 12 options, research indicates that conversion drops significantly after five.
- UX Impact: On mobile screens, long polls require scrolling, which leads to user abandonment. Keep your most important choices in the top three slots.
- Clarity: Use emojis in your option strings (e.g., "✅ Yes," "❌ No") to provide immediate visual cues that transcend language barriers.
2. High-Fidelity Vote Tracking
A poll is only as good as the data it produces.
- Monitoring: Always use Webhooks (
poll.vote) to capture user interaction. When a user changes their vote, WhatsApp sends a new event. Your backend should be idempotent, updating the user's choice based on the latestpoll_votetimestamp. - De-duplication: In
multipleAnswersmode, remember to handle arrays of choices. Every time a user checks or unchecks a box, a new event is triggered reflecting the entire current state of that user's selections.
3. Contextual Follow-ups
Don't let a vote be the end of the conversation.
- Workflow: When your webhook receives a vote for Option A, have your system automatically trigger a
/v2/send/textor/v2/send/imagethat specifically addresses that choice. This "Decision-Tree" automation makes the bot feel intelligent and responsive.
🧩 Advanced Use Cases
Real-Time Event Scheduling
Send a poll with time slots for a meeting: "When are you free? 1) 10 AM, 2) 2 PM, 3) 4 PM." As users vote, your system can see which slot has the most votes in real-time and send a confirmation once a consensus is reached.
Customer Satisfaction (CSAT) Surveys
Instead of asking "Rate us 1 to 5," send a poll with descriptive stars or labels: "⭐ Poor" to "⭐⭐⭐⭐⭐ Excellent." The visual feedback of the "Voted" indicator on the user's screen provides a sense of closure that a text-based reply cannot match.
🛠️ Common Pitfalls and Solutions
- Duplicate Options: Sending a poll with two identical option strings will cause the WhatsApp network to reject the message. Always ensure your options are unique in your backend logic.
- The "Lost Vote" Trap: Unlike text messages, votes are binary updates. If a user votes while your webhook server is down, you may miss the event. We recommend using our Polling Logs or a robust message queue to process delayed webhook deliveries.
- Question Length: A question that is too long can be truncated on the chat preview. Keep your
nameconcise and put the detailed context in a preceding text message.
Summary of Capabilities:
- Deliver native, interactive WhatsApp polls with up to 12 custom options.
- Support for Single-Choice (Radio) and Multi-Choice (Checkbox) modes.
- Real-time vote tracking via consistent
poll_voteWebhook events. - Advanced threading support using the
reply_toparameter. - High-fidelity synchronization between poll question and selectable choice indices.
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 objectstring | Your unique WhatsApp Instance ID Example: | ||
string | Your API Access Token Example: | ||
string | Target phone number or group ID Example: | ||
object | The poll structure containing name and options. Example: | ||
string | — | Message ID to reply 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.
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.
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": {
}
}Command Palette
Search for a command to run...