--- title: Reactions | API Docs description: Add and remove emoji reactions on messages. --- React to any message with built-in iMessage tapbacks or custom Unicode emoji. Reactions are an iMessage feature — see [Protocol Selection](/guides/messaging/protocol-selection/index.md) for protocol capabilities. See the [Reactions API Reference](/api/resources/messages/methods/add_reaction/index.md) for the full endpoint specification. ## Adding a reaction Terminal window ``` curl -X POST https://api.linqapp.com/api/partner/v3/messages/{message_id}/reactions \ -H "Authorization: Bearer $LINQ_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "type": "love", "operation": "add" }' ``` ``` await client.messages.addReaction(messageId, { type: 'love', operation: 'add', }); ``` ``` client.messages.add_reaction( message_id, type="love", operation="add", ) ``` ## Built-in reaction types These map to the standard iMessage tapback reactions: | Type | Description | | ----------- | ----------------- | | `love` | Heart | | `like` | Thumbs up | | `dislike` | Thumbs down | | `laugh` | Ha ha | | `emphasize` | Exclamation marks | | `question` | Question mark | ## Custom emoji reactions Send any Unicode emoji as a reaction: Terminal window ``` curl -X POST https://api.linqapp.com/api/partner/v3/messages/{message_id}/reactions \ -H "Authorization: Bearer $LINQ_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "type": "custom", "custom_emoji": "🎉", "operation": "add" }' ``` ## Targeting multipart messages For messages with multiple parts, target a specific part using `part_index` (0-based): ``` { "type": "love", "operation": "add", "part_index": 1 } ``` This reacts to the second part of the message. If omitted, the reaction applies to the first part. ## Removing reactions Use the same endpoint with `"operation": "remove"` and the matching `type` you originally added. ## Sticker attachments A contact can attach a sticker to any message part in iMessage. This is distinct from a custom sticker reaction — the `type` is `"sticker"` and the payload includes image metadata. Sticker attachments are **inbound only**; the API does not support sending them. They appear inside `parts[].reactions[]` on the message and trigger a [`reaction.added`](/guides/webhooks/events/#reaction-events/index.md) event: ``` { "parts": [ { "type": "text", "value": "Hey yea", "reactions": [ { "type": "sticker", "is_me": false, "custom_emoji": null, "sticker": { "file_name": "sticker-abc123.png", "mime_type": "image/png", "url": "https://cdn.linqapp.com/attachments/550e8400/sticker-abc123.png", "width": 320, "height": 320 }, "handle": { "id": "550e8400-e29b-41d4-a716-446655440011", "handle": "+14155559876", "is_me": false, "service": "iMessage", "status": "active", "joined_at": "2025-11-23T17:30:00.000Z", "left_at": null } } ] } ] } ``` ## Reaction webhook events | Event | Description | | ------------------ | ------------------------------------- | | `reaction.added` | A reaction was added to a message | | `reaction.removed` | A reaction was removed from a message | Webhook payloads include `reaction_type`, `message_id`, `part_index`, and sender information. See [Reaction events](/guides/webhooks/events#reaction-events/index.md) for full payload details.