Skip to main content
Auth. HMAC v1 or bearer token — see Authentication. Status. Live · Idempotent: No (each call posts a fresh tapback).
Sends a tapback reaction to a message in the chat. The six valid values map to the standard iMessage tapbacks (love ❤, like 👍, dislike 👎, laugh 😂, emphasize ‼, question ❓). The reaction is sent from the same line the original message was sent from, so the recipient sees the tapback attached to the right bubble.

Which id goes in the URL

This is a message-scoped route: {id} is a message_id, not a chat_id. Prefer the Chert-issued message_id returned by POST /api/v1/send, or the message.id returned by POST /api/v1/chats and POST /api/v1/chats/{id}/messages. Chert resolves that id to the underlying iMessage identifier internally before sending the tapback.
For inbound messages and history rows, the id from GET /api/v1/chats/{id}/messages and inbound message.received webhooks is also accepted.

Request

POST /api/v1/messages/{id}/react
curl -X POST https://console.trychert.com/api/v1/messages/msg_01H.../react \
  -H "x-chert-tenant: $TENANT" \
  -H "x-chert-signature: v1,$TS,$SIG" \
  -H "content-type: application/json" \
  -d '{"reaction": "love"}'

Response

{
  "status": "sent",
  "message_id": "msg_01H...",
  "reaction": "love"
}

Path parameters

id
string
required
The Chert message_id returned by a send endpoint, or the message id surfaced on chat-message listings and inbound message.received webhook payloads.

Body

reaction
enum
required
One of: love | like | dislike | laugh | emphasize | question. Maps to the six standard iMessage tapbacks.

Response fields

status
string
Always "sent" on success.
message_id
string
The Chert message_id the reaction was attached to.
reaction
enum
Echoed-back normalized reaction value.

Errors

CodeHTTPWhen
1002400Invalid reaction value.
1004400Invalid JSON body.
2003404Message not found.
4001502Delivery failed downstream.
See the full error code reference.

See also