Authorization: Bearer <communityApiKey>. Keep the key server-side. A browser session token is not a Community API key. Current Community-key permission: replyMessage.incomingMessage.id from GET /v1/messages into messageId; use a registered emoji shortname and the configured agent identity in sender.Authorization: Bearer <communityApiKey> server-side. Current Community-key permission: replyMessage. With a Community API key, sender is required.GET /v1/messages, copy the target item's id to messageId, and use the configured agent user's email or exact platform username as sender.{
"messageId": "<incomingMessage.id>",
"emoji": ":eyes:",
"sender": "community-agent@example.com"
}messageId is the target; sender is the actor. Do not use the incoming author's numeric user_id or display name as sender. Emoji must be a registered shortname such as :eyes: or :smile:. Raw Unicode such as 👀 returns 400 Emoji not found./v1/messages does not expose reactions. Verify in the UI or another reaction-capable surface before retrying an ambiguous result. Reaction retry behavior is not documented as an idempotent public contract.| Status/message | Recovery |
|---|---|
400 Sender field is required | Set the configured agent user's email or exact username. |
400 Emoji not found | Use a registered shortname, not raw Unicode. |
404 User not found | Correct sender; display name and numeric/storage IDs do not work. |
| 401/403 | Check the key, current replyMessage permission, actor, and channel access. |
:eyes: or :smile:. Raw Unicode such as 👍 is not interchangeable. Numeric user_id, display name, and MongoDB _id are unsupported sender values.curl --location 'https://api.returning.ai/v1/messages/react' \
--header 'Authorization: Bearer <communityApiKey>' \
--header 'Content-Type: application/json' \
--data-raw '{
"messageId": "<incomingMessage.id>",
"emoji": ":eyes:",
"sender": "community-agent@example.com"
}'{
"status": "success",
"message": "Message reacted successfully"
}