Skip to content
Linq Copy agent prompt
Messaging

Reactions

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 for protocol capabilities. See the Reactions API Reference for the full endpoint specification.

Terminal window
curl -X POST https://api.linqapp.com/api/partner/v3/messages/{messageId}/reactions \
-H "Authorization: Bearer $LINQ_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"operation": "add",
"type": "love"
}'

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

Send any Unicode emoji as a reaction:

Terminal window
curl -X POST https://api.linqapp.com/api/partner/v3/messages/{messageId}/reactions \
-H "Authorization: Bearer $LINQ_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"operation": "add",
"type": "custom",
"custom_emoji": "😍"
}'

This is a tapback — the emoji sits in the small bubble at the message’s corner. To peel the same emoji onto the bubble itself as a draggable sticker, use type: "sticker" with emoji instead. See Stickers.

For messages with multiple parts, target a specific part using part_index (0-based):

Terminal window
curl -X POST https://api.linqapp.com/api/partner/v3/messages/{messageId}/reactions \
-H "Authorization: Bearer $LINQ_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"operation": "add",
"type": "laugh",
"part_index": 1
}'

If part_index is omitted, the reaction applies to the first part.

Use the same endpoint with "operation": "remove" and the matching type you originally added:

Terminal window
curl -X POST https://api.linqapp.com/api/partner/v3/messages/{messageId}/reactions \
-H "Authorization: Bearer $LINQ_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"operation": "remove",
"type": "like"
}'

Stickers are the exception — iMessage has no unpeel operation, so "operation": "remove" with type: "sticker" is rejected. See Stickers.

A sticker is an emoji or image peeled onto a message part rather than a tapback — the type is "sticker" and the payload carries image metadata.

Stickers send and receive. Peeling one onto a message uses this same endpoint with type: "sticker" and an emoji, url or attachment_id, and they can be positioned and moved afterwards — see the Stickers guide for sending, placement, and repositioning.

Inbound, they appear inside parts[].reactions[] on the message and trigger a reaction.added event:

{
"parts": [
{
"type": "text",
"value": "Hey yea",
"reactions": [
{
"id": "9f8b1c2d-3e4f-5061-7283-94a5b6c7d8e9",
"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
}
}
]
}
]
}

The id is what you pass to move the sticker. Stickers stack, so the message alone can’t identify one.

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 for full payload details.