Skip to main content

Reaction added or removed

Webhook 

A reaction was added to or removed from a chat message the app can see.

Event name: chat.reaction

Required scope: chat:history

Delivered inside the standard event envelope; the schema below shows the full delivery body with this event's payload under data.

Like chat.message, this is delivered for any message in a chat the app participates in or can see (Slack reaction_added / reaction_removed parity) — not only the app's own messages. The reacted message's author is in messageAuthorId, so an app can filter to reactions on its own messages. Membership matrix: Chat.

One event is delivered per reaction change: action says whether the reaction was added or removed, name is the single reaction that changed, and userId is the user who changed it. There is no batching or debouncing — an add followed by a remove delivers two events.

Delivery is at-least-once; use the envelope's eventId to deduplicate retries. Event ordering is not guaranteed — use the envelope's timestamp when reconstructing a sequence. To fetch a message's current reaction set, call /reaction.list.

Filter on webhook.subscribe. Omit filter to receive every reaction in chats you can see.

{
"url": "https://example.com/hooks/reactions",
"event": "chat.reaction",
"filter": { "names": ["wave", "heart"] }
}

names matches the name field of /reaction.add and /reaction.list (plain shortcode, no colons). There is no chatType or mention filter on this event.

Note: the legacy v0 chat:message:reaction event instead delivers the message's full reaction snapshot, debounced per message, with tagged IDs (chat / recipient / messageSender) — and its filter key is codes.

Both actors are typed inline. userType describes userId, while messageAuthorType describes messageAuthorId; each equals user.info.type under the same credentials.

These fields are additive on both supported webhook versions. Baseline (2026-06-01) includes them in the bare payload; Latest nests them under data:

{ "userId": "ad1e9cc0-...", "userType": "user", "messageAuthorId": "709b8a57-...", "messageAuthorType": "bot" }
{ "type": "chat.reaction", "data": { "userId": "ad1e9cc0-...", "userType": "user", "messageAuthorId": "709b8a57-...", "messageAuthorType": "bot" } }

A malformed event whose actor or message author cannot be resolved is not delivered as a partially typed payload.

Request

Responses

Return a 200 status to indicate that the data was received successfully