Reaction
React to a specific message with an emoji (👍, ❤️, 😂, etc.).
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.
Micro-Interactions: Mastering the Message Reaction Engine
Reactions (/v2/send/reaction) are one of the most powerful micro-interactions in a modern messaging ecosystem. They allow users and bots to acknowledge information, express sentiment, or provide feedback without the friction of a full text reply. In a Wawp-powered application, reactions aren't just cosmetic; they are structural signals that can be used to track engagement, build interactive voting systems, or simplify bot-to-user acknowledgements.
🏗️ The Reaction Lifecycle Architecture
Unlike full messages, reactions are additive metadata attached to an existing message. Wawp’s reaction engine manages this attachment with high precision:
- Target Identification: The engine uses the
messageIdto locate the specific message on the WhatsApp backend. This must be the unique ID of an existing message in the chat identified bychatId. - Emoji Normalization: While you can send any emoji, Wawp ensures the character is correctly encoded for the WhatsApp WebSocket. If you send an empty string (
""), the engine interprets this as a "Delete Reaction" command, instructing the WhatsApp network to remove your previous sentiment from that particular message. - Atomic Delivery: Reactions are delivered as light-weight, high-priority packets. This ensures that a reaction appears almost instantaneously on the recipient's phone, making the chat feel "Live" and responsive.
🛡️ Strategic Best Practices for Sentiment Engagement
1. The "Standard Set" Strategy
While WhatsApp supports any emoji as a reaction, users are most accustomed to the "Standard Quick Actions": 👍 (Acknowledgement), ❤️ (Love/Quality), 😂 (Laughter), 😮 (Surprise), 😢 (Sympathy), and 🙏 (Thanks).
- UX Impact: By sticking to these standards, you match the user's muscle memory.
- Compatibility: Rare or complex combined emojis (like multi-colored family units) can sometimes render inconsistently across older Android or Desktop versions. Standard emojis are universally safe.
2. Automated Acknowledgements
Modern bots shouldn't always respond with text.
- Example: If a user says "Got it!" or "Thanks!", instead of the bot replying with "You're welcome!" (another message for the user to clear), have the bot react with a 👍 or 💙.
- Value: This keeps the chat history clean while still providing the user with positive reinforcement that their input was received.
3. Removal and Cleanup
Don't let outdated sentiments linger.
- Workflow: If your bot reacts with a ⏳ (Processing) while it’s working on a long task, make sure to call the endpoint again with an empty string
""to remove the ⏳ once the task is finished, or replace it with a ✅ (Done). This prevents the UI from becoming cluttered with conflicting status emojis.
🧩 Advanced Use Cases
Lightweight Interactive Voting
You can build a low-friction voting system by asking a question and having users react with different emojis for different options.
- Logic: Use your Webhooks (
message.reaction) للاستماع إلى التفاعلات الواردة من المستخدمين. Your backend then tallies the counts for each emoji type, enabling "Reactions-as-Votes" functionality without a single line of extra UI code.
Sentiment Monitoring for Human Agents
When an automated flow is running, have your system monitor the emojis users react with. If a user consistently reacts with 😢 or 😠 to bot messages, your system can interpret this as a "Frustration Signal" and automatically escalate the chat to a human agent.
🛠️ Common Pitfalls and Solutions
- The "Missing ID" Error: If you provide a correctly formatted
messageIdbut the message was sent too long ago (typically several weeks), the reaction may fail. Reactions are most reliable when applied to recent (active) conversation history. - Rapid Re-Reaction: Sending five different reactions to the same message in one second can be flagged as "Suspicious Scripting." Implement a small jitter or debounce (at least 200ms) between reaction updates to the same target message.
- Encryption Resync: In rare cases, if a session's security keys are out of sync, a reaction might fail while standard text succeeds. A quick
/v2/session/restartusually resolves these synchronization edge cases.
Summary of Capabilities:
- Apply and remove native WhatsApp reactions (emojis) to any existing message.
- Support for "Delete Reaction" via empty string payloads.
- High-concurrency support for voting and acknowledgement systems.
- Real-time event tracking through
message.reactionWebhooks. - Lightweight and low-priority execution to minimize chat-history clutter.
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 | Recipient's WhatsApp ID (JID). Supports Individuals (@c.us), Groups (@g.us), and Newsletters (@newsletter). Example: | ||
string | The ID of the message you want to react to. Example: | ||
string | The emoji reaction. Use an empty string to remove. 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...