WhatsApp reaction webhooks
whatsapp.reacted fires when a contact reacts to one of your messages, changes their emoji, or takes it back. Reactions sent by your business number do not emit it. A subscription to whatsapp.received does not include reactions, and a reaction does not open a customer service window.
A reaction is an annotation on a message rather than a message of its own, so it is not part of the delivery timeline and does not carry the fields every message event carries.
The payload
whatsapp_id names the message that was reacted to, not the reaction, and emoji is the change the user made. A user who reacts, changes their emoji, then takes the reaction back produces three events on that one message. WhatsApp sends no removal between the first two, so a change arrives as a single event carrying the new emoji.
Code example
{
"data": {
"emoji": "👍",
"from": { "phone_number": "+14155550100" },
"to": { "phone_number": "+13124495569" },
"whatsapp_id": "wam_01ky8b3xq4gd7pmzn2ka51f7te",
"workspace_id": "ws_01ky7m235keycbnwyajabe1a6b"
},
"timestamp": "2026-07-23T14:52:11.000Z",
"type": "whatsapp.reacted"
}WhatsApp reports the reaction time to the second, so two of those three events can share one timestamp. Sorting them by it will not order them, and neither will delivery order, which retries make unreliable. Act on the reaction each event carries, as the change it describes. Do not reconstruct the sequence from the events or treat the last one to arrive as the message's standing reaction, because neither the timestamps nor the arrival order support it. Read the message back for the reactions that stand: GET /v1/whatsapp/messages/{message_id} returns one entry per sender in reactions, and the message's reaction log has every change.
emoji is present and null when the user took their reaction back, so a null is the removal itself rather than a missing value. The emoji is delivered exactly as WhatsApp sent it and is not normalized, so ❤ and ❤️ reach you as different strings.
- from is the contact and to is your WhatsApp number. Handle business-scoped user IDs when the contact's address has no phone number.
Next steps
- Reaction events: read the current reactions and the reaction log
- Send or remove a reaction
Related resources
Continue with the documentation, guides and examples for this topic. Resources are in English.
Watch the guideConnecting WhatsApp to Bird: from buying a number to a live channelUnderstand the conceptWhat is the 24-hour customer service window on WhatsApp?Use the toolWhatsApp message builderExplore the capabilityWhatsApp
Try the practice and get an implementation brief