What is a reaction message?
A reaction message is an emoji that a business or a customer attaches to a specific earlier message in a WhatsApp chat. It appears as a small badge on the original bubble rather than as a new message, and it points at that message by its WhatsApp Message ID (WAMID). On the Cloud API it is one of the WhatsApp Message Types in its own right, reaction, with two fields: message_id, the wamid being reacted to, and emoji, the emoji itself or its Unicode escape sequence.
Businesses send reactions through the messages endpoint like any other free-form type, so a 24-hour customer service window must be open. Meta delivers a reaction only when the target message is no more than 30 days old, exists in the chat thread, has not been deleted and is not itself a reaction; otherwise a messages webhook reports error 131009. A sent reaction triggers only a sent status on the Statuses Webhook — never delivered or read — so a status model that waits for them will wait forever.
Customers' reactions arrive on the Messages Webhook as type: reaction, holding the message_id of your message and the emoji, for business messages sent within the last 30 days. If the customer removes their reaction, another webhook arrives with the emoji property omitted. A reaction differs from a Contextual Reply, which quotes a message and adds new content: a reaction acknowledges, a reply answers. It is also separate from Mark as Read, the API call that shows the customer blue ticks on their message; many inboxes do both when an agent acknowledges a photo.
Key takeaways
- A reaction message pins one emoji to an earlier message, identified by its wamid, instead of adding a new bubble.
- Send
type: reactionwithmessage_idandemoji; an empty emoji removes the reaction. - Reactions to messages over 30 days old, missing or deleted messages, or other reactions fail with error 131009.
- A sent reaction produces only a
sentstatus — no delivered or read webhooks follow. - An inbound reaction with no
emojiproperty means the customer removed their reaction.
Watch a reaction pin itself to a message
Today
- Customer: PhotoHere's the model plate10:30Appliance Service Desk reacted 👍
- Appliance Service Desk: Thanks! Your technician arrives tomorrow between 10 and 11 am.10:32ReadCustomer reacted ❤️
- Customer: Can he bring a spare filter?10:34
- Appliance Service Desk: Yes, he will carry one.10:35Delivered
Message 6 of 6
Appliance Service DeskTextDelivered (two grey ticks)
Free-form text. A business can send it only within 24 hours of the customer’s last message.
Message 6 of 6: Appliance Service Desk, Text, Delivered (two grey ticks). Free-form text. A business can send it only within 24 hours of the customer’s last message.
A reaction message in code
# React with a thumbs-up to the customer's photocurl -X POST "https://graph.facebook.com/v26.0/{PHONE_NUMBER_ID}/messages" \-H "Authorization: Bearer {ACCESS_TOKEN}" \-H "Content-Type: application/json" \-d '{"messaging_product": "whatsapp","recipient_type": "individual","to": "919812345678","type": "reaction","reaction": {"message_id": "wamid.HBgMOTE5ODEyMzQ1Njc4FQIAEhgUM0FCQzEyM0RFRjQ1NkFCQzc4OTAA","emoji": "👍"}}'# Remove it again: same message_id, empty emoji# "reaction": { "message_id": "wamid.HBgMOTE5...", "emoji": "" }
Only a sent status comes back. A target over 30 days old, deleted or itself a reaction fails with 131009.
How does a reaction message work?
Pick the target message
Take the wamid of the message you want to react to — usually an inbound customer message you stored from the webhook — and check it is under 30 days old.
Send the reaction
POST to
/{PHONE_NUMBER_ID}/messageswithtype: reactionand areactionobject holdingmessage_idandemoji. The customer's window must be open.Expect only sent
A successful reaction returns a wamid and a single
sentstatus. Delivered and read never follow, so close the record on sent.Change or remove it
Send another reaction to the same
message_idwith a different emoji to replace it, or with an emptyemojito remove it.Handle inbound reactions
Store customer reactions against the target wamid, treat a reaction without
emojias a removal, and keep reactions out of the bot's text-intent pipeline.
Common wrong turns
Common mistakes with a reaction message
Waiting for delivered
Reactions never get delivered or read statuses. A pipeline that flags messages without them as stuck will flag every reaction you send.
Reacting to the wrong target
A bot that reacts to whatever message it stored last can hit old, deleted or reaction targets and get 131009. Check the target's type and age first.
Feeding reactions to the bot
A reaction is not a question. Routing it through the same intent engine as text produces replies to a thumbs-up; give reactions their own branch.
Ignoring removals
A removal arrives as a reaction with no emoji. Treat it as a delete, or your feedback counts drift upwards over time.
Key facts at a glance
A reaction message: key facts and limits
- Type
- reaction
- Fields
- message_id (the target wamid) and emoji
- Remove a reaction
- Send an empty emoji; inbound removals omit emoji
- Target age
- 30 days at most
- Failure code
- 131009 (old, missing, deleted or reaction target)
- Statuses
- sent only — no delivered or read
- Window
- Needs an open 24-hour window to send
Example: Acknowledging photos at an appliance service desk
A Coimbatore appliance-service company asks customers to send a photo of the model plate before a technician visits. When the photo arrives, the agent reacts 👍 to it instead of typing 'received', which keeps the thread short. Customers in turn react to the technician's arrival-time message; the team counts 👍 and ❤️ on those messages as a light satisfaction signal and routes any 👎 to a supervisor. Because a removal arrives as a reaction with no emoji, the counts stay accurate when customers change their minds.
Reaction Message FAQs
How do I send a reaction with the WhatsApp Cloud API?+
How do I remove a reaction through the WhatsApp API?+
Why did my WhatsApp reaction fail with error 131009?+
Is a reaction the same as replying to a message?+
Why does a reaction message matter?
Reactions are the lightest acknowledgement WhatsApp offers. A 👍 on a customer's photo of a damaged parcel tells them it was seen without another 'Thanks, noted' bubble in the thread. Inbound, they are a feedback signal hiding in plain sight — a ❤️ on a delivery update, a 👎 on a bot answer — that many integrations silently drop because their webhook handler has no branch for the type. Handling reactions well means fewer filler messages going out and more signal coming in.
Good practice
Best practices for a reaction message
- Use a 👍 to acknowledge photos and documents instead of sending a filler message.
- Store inbound reactions against the target wamid so you can report them per message or per template.
- Keep the emoji set small and meaningful for any metric you build on reactions.