Skip to content
Inkbox

Inkbox

BlogContactDocs
GuidesAPI Reference

Ctrl K

GuidesAPI Reference

Jump to

Tapbacks

Tapbacks are iMessage's inline reactions — the heart, thumbs-up, "haha", and friends that attach to a specific message bubble. Agents can send them, humans send them back, and message reads always carry the current live set.

Tapbacks follow Apple's semantics: one live tapback per sender per message. Sending a new tapback to a message you already reacted to replaces your previous one. When the human swaps or removes theirs, message reads and webhooks reflect it.


Send tapback POST

POST /reactions

React to a message in one of your agent's conversations. Any message can be the target — the human's or the agent's own.

Request body

FieldTypeRequiredDescription
message_idUUIDYesThe message being reacted to
reactionstringYesOne of "love", "like", "dislike", "laugh", "emphasize", "question"
part_indexintegerNoPart of a multi-part message to react to. Defaults to 0

Request example

JSONJSON

Response (201)

JSONJSON

If the agent already had a live tapback on that message part, it is replaced — exactly what the human sees happen on their device.

Error responses

StatusDescription
400The conversation's identity is not enabled for iMessage, or the target message cannot accept reactions yet
403The conversation's recipient is blocked by a contact rule
404Message not found, or not visible to the caller
409The recipient has disconnected from this agent and must reconnect through the router
422Unknown reaction value or invalid part_index
502Upstream delivery failure — safe to retry

Receiving tapbacks

Tapbacks from humans arrive two ways:

  • On message reads — every message object carries a reactions array with the live tapbacks targeting it, oldest first.
  • As webhooksimessage.reaction_received fires when a human tapbacks one of your agent's messages.

Humans can react with any emoji, not just the classic six. Those arrive with reaction: "custom" and the literal emoji in custom_emoji:

JSONJSON

Custom-emoji tapbacks are receive-only — sends accept the classic six.

When a human removes a tapback, it simply disappears from the message's reactions array on the next read. Removals do not fire a webhook.

Reaction object

FieldTypeDescription
idstring (UUID)Reaction ID
conversation_idstring (UUID)The conversation containing the target message
assignment_idstring (UUID)The connection carrying the conversation
target_message_idstring (UUID)The message this tapback targets
directionstring"inbound" (from the human) or "outbound" (from the agent)
reactionstring"love", "like", "dislike", "laugh", "emphasize", "question", or "custom"
custom_emojistring | nullThe literal emoji when reaction is "custom"; null for the classic six
remote_numberstringThe human's phone number (E.164)
part_indexintegerMessage part the tapback targets (0 for single-part messages)
created_atstring (ISO 8601)Creation timestamp
updated_atstring (ISO 8601)Last update timestamp

The compact reaction entries embedded in a message's reactions array omit the conversation/assignment/target IDs (they're implied by the message) and the updated_at field.

Inkbox

Copyright © 2026 Inkbox

This site is protected by reCAPTCHA.

Google Privacy Policy and Terms of Service apply.

Website

Inkbox

Copyright © 2026 Inkbox

This site is protected by reCAPTCHA.

Google Privacy Policy and Terms of Service apply.

Website

Y CombinatorBacked by Y Combinator
Tapbacks