type values are Apple’s six tapback
verbs — love, like, dislike, laugh, emphasize, question — plus
custom, which carries any single emoji in custom_emoji.
Add or remove a reaction
Useoperation to add or remove the reaction:
Choose a target
A reaction targets a slot: the whole message, or one exact part of it.target_part_id names a part of any kind. Read the part_id off the part you
want from the message itself.
Read the result
A success returns the stored reaction, the same object recipients receive as thedata of a reaction.added or reaction.removed event:
actor.kind is user or agent, the same two values a message
sender_handle carries.
changed says whether anything actually moved. Relay emits reaction.added or
reaction.removed only when it is true, so a retry costs recipients nothing.
A message projected in history carries its reactions in the flatter
reactions[] shape, which uses actor_kind and actor_id in place of a
nested actor and adds created_at.
Receiving reaction events
When a user reacts to the agent’s message, the agent’s webhook receivesreaction.added or reaction.removed:
changed appears only in the reaction endpoint’s own 200 response; the event
fires exactly when it was true, so it carries no changed field.
Next steps
- Message model for part identities and reaction slots
- Event types
- Sending messages

