Skip to main content
Version: Latest

Reactions and Reply

React to an existing message or attach a reply context to a new message. Send these request bodies to the corresponding channel endpoint with your API key. Replace UUIDs and recipient IDs with real values from the same conversation.

Availability by channel​

FeatureWhatsAppInstagramMessengerTelegramWeb Chatt
React with emojiYesYesYesYesYes
Remove reactionYesYesYesYesYes
Reply contextYesNoYesYesYes

Messenger forwards the resolved provider message ID as reply_to.mid; Web Chatt preserves the referenced message in the conversation. This describes the implemented forwarding behavior. Provider acceptance and the quoted preview displayed by each client can vary.

Emoji reaction​

{
"from": "9e85226d-a104-4c85-a21a-5c3cbf7daa8f",
"to": "5511993986082",
"content": {
"reaction": {
"messageId": "9b509e32-bfec-4fe6-8a63-2c22017a3a17",
"emoji": "❤️"
}
}
}

reaction.messageId is the Hub message ID: payload.message.id in an inbound webhook, or messageId in a send response. Keep it with its channel and conversation; do not substitute a provider ID.

Telegram validates an explicit emoji allowlist. The allowed values are:

👍 👎 ❤️ 🔥 🥰 👏 😁 🤔 🤯 😱 🤬 😢 🎉 🤩 🤮 💩 🙏 👌 🕊 🤡 🥱 🥴 😍 🐳 ❤‍🔥 🌚 🌭 💯 🤣 ⚡ 🍌 🏆 💔 🤨 😐 🍓 🍾 💋 🖕 😈 😴 😭 🤓 👻 👨‍💻 👀 🎃 🙈 😇 😨 🤝 ✍ 🤗 🫡 🎅 🎄 ☃ 💅 🤪 🗿 🆒 💘 🙉 🦄 😘 💊 🙊 😎 👾 🤷‍♂ 🤷 🤷‍♀ 😡

Use the exact emoji sequence. An unsupported Telegram emoji returns EMOJI_NOT_ALLOWED; inclusion in the Hub list does not override chat/provider restrictions. Other channels may impose their own restrictions.

Remove a reaction​

Send the same target ID without emoji, or with emoji: "":

{
"from": "9e85226d-a104-4c85-a21a-5c3cbf7daa8f",
"to": "5511993986082",
"content": {
"reaction": {
"messageId": "9b509e32-bfec-4fe6-8a63-2c22017a3a17"
}
}
}

Reply to a specific message​

Use content.context.messageId for WhatsApp, Messenger, Telegram and Web Chatt:

{
"from": "9e85226d-a104-4c85-a21a-5c3cbf7daa8f",
"to": "5511993986082",
"content": {
"text": "Sure! I'll check that for you.",
"context": {
"messageId": "9b509e32-bfec-4fe6-8a63-2c22017a3a17"
}
}
}

The context can also accompany media content on a supported channel. This WhatsApp example sends an image with a caption:

{
"from": "9e85226d-a104-4c85-a21a-5c3cbf7daa8f",
"to": "5511993986082",
"content": {
"imageUrl": "https://example.com/order-photo.jpg",
"text": "Here is the image you requested!",
"context": {
"messageId": "9b509e32-bfec-4fe6-8a63-2c22017a3a17"
}
}
}

For Messenger, use its channel ID and recipient PSID. Media captions are not preserved by its current adapter; send explanatory text separately when needed. For Telegram, use the bot channel and chat ID. For Web Chatt, use a widget channel and visitor UUID.

WhatsApp quoted previews

Quotes for location, sticker and voice (PTT) audio messages may not appear in WhatsApp clients. The reply context can still be forwarded. Do not depend on a particular quoted preview without testing the target client.

Where to get the target ID​

An inbound text message arrives with the ID in payload.message.id:

{
"eventType": "message",
"timestamp": "2026-10-06T15:00:00.000Z",
"payload": {
"provider": "whatsapp",
"direction": "IN",
"timestamp": 1791298800000,
"message": {
"id": "9b509e32-bfec-4fe6-8a63-2c22017a3a17",
"sessionId": "d387b2bf-b36e-40f4-90f8-0a4db8a49f75",
"type": "Text",
"content": {
"text": "Can you check my order?"
}
},
"sender": {
"id": "5511993986082"
},
"recipient": {
"id": "551130001234",
"applicationChannelId": "9e85226d-a104-4c85-a21a-5c3cbf7daa8f"
}
}
}

A successful ordinary WhatsApp send acknowledges acceptance with enqueued:

{
"messageId": "9b509e32-bfec-4fe6-8a63-2c22017a3a17",
"status": "enqueued"
}

Other channel sends may return sent; sandbox sends return enqueued. These are send acknowledgements, so follow status webhooks for later delivery updates. Save the Hub ID if you will react or reply later.

Next steps​