# reaction.received

A participant added or removed an emoji reaction on a message on Instagram, Facebook, WhatsApp, Telegram, Slack or TikTok.

### Payload notes

Sent as its own event, never as `message.received`. `reaction.action` is `added` or `removed`. `reaction.platformMessageId` is always present; `reaction.messageId` is the Zernio id when resolvable.

### Removals

On WhatsApp, Instagram and Facebook removals, `reaction.emoji` is an empty string because the platform does not say which emoji went away. Match on `platformMessageId` to clear a mirrored reaction.

### TikTok

A like or emoji reaction on a DM arrives only as this event, never as an empty `message.received`. `platformMessageId` is the TikTok id of the liked message. AI emoji reactions can have an empty `emoji`.

### Telegram

The bot must be an administrator in the chat. Reactions in private chats are never delivered to bots.

### Accounts connected before August 2026

Instagram and Facebook accounts connected before August 2026 do not receive this event until their webhook subscription is refreshed. Reconnect them, or re-subscribe a Facebook Page without a reconnect.




**Payload for `reaction.received`:**

- **id** (required) `string`: Stable webhook event ID: the dedupe key, also sent as the X-Zernio-Event-Id header and identical on every retry and redelivery. It identifies the event only, never an account or other resource.
- **profiles**: `WebhookProfiles` - See schema definition
- **test** `boolean`: Always true when present: only a sample sent by POST /v1/webhooks/test with an event carries it. Real deliveries never do.
- **event** (required) `string`: No description - one of: reaction.received
- **reaction** (required) `object`: 
  - **emoji** (required) `string`: The emoji reacted with. May be an empty string when `action` is
`removed` on WhatsApp (Meta does not report which emoji was removed),
and on TikTok for an AI emoji reaction (TikTok sends no unicode for it).

  - **action** (required) `string`: No description - one of: added, removed
  - **messageId** `string`: Internal Zernio message ID of the reacted-to message, when resolvable from the platform ID.
  - **platformMessageId** (required) `string`: Platform-native ID of the reacted-to message (e.g. WhatsApp wamid).
  - **sender** (required) `object`: Whoever added or removed the reaction. Usually the participant, but on WhatsApp, Slack, Instagram, Facebook Messenger and TikTok it is the business own platform id when the business reacted from the native app or via the reactions API: compare it with conversation.participantId.
    - **id** (required) `string`: No description
    - **contactId** `string`: Zernio CRM Contact id for this sender, when one exists.
    - **name** `string`: No description
    - **username** `string`: No description
    - **picture** `string`: No description
    - **phoneNumber** `string,null`: WhatsApp only. Sender's phone number in E.164 format (with leading `+`), when available.
  - **reactedAt** (required) `string` (date-time): No description
- **conversation** (required): `InboxWebhookConversation` - See schema definition
- **account** (required): `InboxWebhookAccount` - See schema definition
- **timestamp** (required) `string` (date-time): UTC time at which Zernio generated this event (set once when the event payload is built, before delivery is queued). Retries and redeliveries keep the original value, so it reflects the event, not the delivery attempt.