Add or remove a reaction
Add or remove an emoji on a message, or on one exact part of it. Recipients receive reaction.added / reaction.removed events.
One reaction per actor per target slot, the way an iMessage tapback behaves: adding a second emoji to a slot replaces the first, and removing one that is not there is a documented no-op that answers 200 with changed: false. Events are emitted only when changed is true, so a retry costs the recipient nothing and no operation id is needed.
Omit target_part_id to react to the whole message. Send it to react to one part, of any kind.
Authorizations
Agent Token (rly_live_…), shown once when the agent is created.
Path Parameters
^msg_[0-9a-hjkmnp-tv-z]{26}$Body
add, remove Apple's six tapback verbs (chat.db associated_message_type 2000–2005, spelled the way Linq spells them) plus custom, which carries the emoji in custom_emoji.
love, like, dislike, laugh, emphasize, question, custom Required exactly when type is custom.
1 - 32"🔥"
React to one exact part, of any kind. It must name a part this message has. Omit it, or send null, to react to the whole message.
^prt_[0-9a-hjkmnp-tv-z]{26}$"prt_01k1m4q9vn2r7t9b4c6qdh8xwy"
Response
Reaction state updated. The body echoes the reaction Relay recorded, which is also what recipients receive in the reaction.added or reaction.removed event.
One reaction as Relay recorded it. The same object is the reaction endpoint's response body and the data.reaction of a reaction.added or reaction.removed event, so a consumer reads one shape from both paths. It is flatter than the reactions array in a projected message, which carries actor_kind and actor_id instead of a nested actor: see ProjectedReaction.

