MessagesTapback Reactions

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

TypeEmojiDescription
love❤️Heart
like👍Thumbs up
dislike👎Thumbs down
laugh😂Laughing
emphasize‼️Exclamation marks
questionQuestion 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:

FieldDescription
reaction.typeThe reaction type: love, like, dislike, laugh, emphasize, question, emoji, remove
reaction.emojiThe emoji character (present only when type is emoji)
reaction.targetMessageIdInternal message ID the reaction was applied to (null if not found)
reaction.targetExternalIdProvider-assigned GUID of the original message
reaction.contentHuman-readable description (null for emoji reactions)

Notes

  • Tapback reactions are iMessage only — returns 400 CHANNEL_NOT_SUPPORTED for 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"