Skip to content

Get reactions

After a message is sent or received, you can look up all of its active reactions. Each phone number can have at most one active reaction per message. The latest reaction sent replaces the previous one.

This page covers looking up reactions. To send or remove a reaction, see Send a reaction.

Get reactions

To list a message’s reactions, make a GET request with the message_id returned when you sent it.

Endpoint: GET /v1/messages/{message_id}/reactions for the main number. For extra numbers, use GET /v1/numbers/{ref}/messages/{message_id}/reactions, where {ref} is the number’s current alias or the number’s id (num_…, the message’s number_id).

Required scope: messages:read

Path parameters:

ParameterTypeDescription
refstring(extra number route only) Alias of the number the message belongs to (main or the alias of an extra number) or its id (num_…).
message_idstringPublic message identifier (msg_{hex32})
turbo-notify.sh
curl -X GET \
https://api.turbonotify.com/v1/messages/msg_0198d3c5a1b24d3e9f01a2b3c4d5e6f7/reactions \
-H "Authorization: Bearer YOUR_KEY"

Response examples

With reactions

HTTP status: 200
{
  "message_id": "msg_0198d3c5a1b24d3e9f01a2b3c4d5e6f7",
  "reactions": [
    {
      "from": {
        "number": "5511988887777",
        "contact_id": "ct_a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4",
        "name": "Ana Souza"
      },
      "emoji": "👍",
      "at": "2025-07-16T10:05:00Z",
      "direction": "inbound"
    },
    {
      "from": {
        "number": "5511977776666"
      },
      "emoji": "❤️",
      "at": "2025-07-16T10:06:30Z",
      "direction": "inbound"
    }
  ]
}

No reactions

HTTP status: 200
{
  "message_id": "msg_0198d3c5a1b24d3e9f01a2b3c4d5e6f7",
  "reactions": []
}

Response structure

FieldTypeDescription
message_idstringPublic message identifier.
reactionsarrayList of active reactions (one per phone number).
reactions[].fromobjectSender of the reaction.
reactions[].from.numberstringPhone number of who reacted (without +).
reactions[].from.contact_idstringPublic contact identifier (ct_{hex32}). Omitted when not available.
reactions[].from.namestringSender’s name on WhatsApp. Omitted when not available.
reactions[].emojistringReaction emoji.
reactions[].atstringISO 8601 date and time when the reaction was recorded.
reactions[].directionstring"inbound" (reaction from a contact) or "outbound" (reaction from the organization’s number).

Possible errors

StatusError codeDescription
401not_authenticatedThe API key is invalid or missing.
403insufficient_scopeThe API key does not have the messages:read scope.
404not_foundThe message was not found, belongs to another organization, or belongs to a number other than the one in the URL (on the shortcut route without {ref}, the main number): all of these cases return the same response, with no distinction.
404number_not_found(only on the route with {ref}) The alias or id in the URL does not match any registered number.
400invalid_number_id(only on the route with {ref}) The value in the URL starts with num_ but is not a valid number id.
500internal_errorUnexpected internal server error.