Tapback Reactions
Send emoji reactions to messages via POST /v1/messages/:id/reactions. Tapbacks are an iMessage-only feature.
The :id in the URL is the internal TextBubbles message ID (e.g. msg_abc123) — not the provider GUID. For outbound messages this is the ID returned from POST /v1/messages. For inbound messages received via the message.inbound webhook, use the messageId field in the webhook payload (not externalMessageId).
Send a Reaction
curl -X POST https://api.textbubbles.com/v1/messages/msg_abc123/reactions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "love"
}'Response:
{
"success": true,
"data": {
"messageId": "msg_abc123",
"reaction": "love"
},
"requestId": "req_xyz"
}Available Reactions
| Type | Emoji | Description |
|---|---|---|
love | ❤️ | Heart |
like | 👍 | Thumbs up |
dislike | 👎 | Thumbs down |
laugh | 😂 | Laughing |
emphasize | ‼️ | Exclamation marks |
question | ❓ | Question mark |
Remove a Reaction
To remove a reaction you previously sent, send the negative form of the same type (-love, -like, -dislike, -laugh, -emphasize, -question):
curl -X POST https://api.textbubbles.com/v1/messages/msg_abc123/reactions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "-love"
}'You can only remove a reaction that you previously added via the API.
Reaction Webhooks
When a reaction is received on an inbound message, you’ll get a structured webhook payload:
{
"id": "evt_abc123",
"type": "message.reaction",
"timestamp": "2026-03-28T10:00:00.000Z",
"data": {
"reaction": {
"type": "love",
"targetMessageId": "msg_xyz789",
"targetExternalId": "guid-of-original-message",
"content": "Loved \"Hello!\""
},
"from": "+14155551234",
"channel": "imessage"
}
}Emoji Reactions (iOS 17+)
iOS 17 and macOS 14 introduced emoji and sticker reactions. These are delivered with type: "emoji" and include the emoji character:
{
"id": "evt_def456",
"type": "message.reaction",
"timestamp": "2026-03-28T10:00:05.000Z",
"data": {
"reaction": {
"type": "emoji",
"emoji": "🥓",
"targetMessageId": "msg_xyz789",
"targetExternalId": "guid-of-original-message",
"content": null
},
"from": "+14155551234",
"channel": "imessage"
}
}The reaction object contains:
| Field | Description |
|---|---|
reaction.type | The reaction type: love, like, dislike, laugh, emphasize, question, emoji, remove |
reaction.emoji | The emoji character (present only when type is emoji) |
reaction.targetMessageId | Internal message ID the reaction was applied to (null if not found) |
reaction.targetExternalId | Provider-assigned GUID of the original message |
reaction.content | Human-readable description (null for emoji reactions) |
Notes
- Tapback reactions are iMessage only — returns
400 CHANNEL_NOT_SUPPORTEDfor SMS messages - You can only add one reaction per message per sender
- To remove a reaction, send the negative form (e.g.
-love) — see Remove a Reaction above - Emoji/sticker reactions require iOS 17+ or macOS 14+ on the sender’s device
- When a reaction is removed, the webhook fires with
type: "remove"