---
title: "GET /v2/chats/{chat_id}/messages/{message_id}/reactions"
method: GET
path: "/v2/chats/{chat_id}/messages/{message_id}/reactions"
tags: ["Messaging"]
---

# GET /v2/chats/{chat_id}/messages/{message_id}/reactions

`GET /v2/chats/{chat_id}/messages/{message_id}/reactions`

## Request

- Base URL: `https://api.arbital.xyz` (the document declares no server; this is the origin it was published from)
- URL: `https://api.arbital.xyz/v2/chats/{chat_id}/messages/{message_id}/reactions`
- Auth: HTTP bearer

Who reacted with what, for reaction popovers. Readers of the chat may list them. With contract=2, returns the caller's per-edge versions including absent tombstones; limit 1–100, default 50. Use edge_cursor for subsequent pages; legacy cursor and emoji filters are rejected. Only after complete enumeration may a never-used edge be treated as revision 0.

## Path parameters

- `chat_id` string, uuid, required
- `message_id` string, uuid, required

## Query parameters

- `emoji` string
- `cursor` string
- `limit` integer
- `contract` '2'
- `edge_cursor` string

## Response `200`

Cursor page of reactors, oldest first

- union
  - ChatReactionActorPage
    - `reactors` ChatReactionActor[], required
      - `emoji` string, required
      - `reacted_at_unix_ms` integer, required
      - `user` MessagingUserSummary, required
        - `avatar_url` string, nullable, required: Approved profile image or stable CALLD default avatar URL.
        - `display_name` string, nullable, required
        - `user_id` string, uuid, required
        - `username` string, required
    - `next_cursor` string, nullable, required
  - ChatReactionEdgePageV2: Caller-owned per-emoji edge versions, including absent retained tombstones, ordered by emoji. Enumerate every page before assuming an unreturned/never-used edge has revision 0. Aggregate counts are independent of the edge page. This does not expose other users' edge versions or mutate receipts.
    - `contract` 2, required
    - `aggregate_revision` string, required: Unsigned decimal string within signed 64-bit range; never coerce to a JavaScript number.
    - `reactions` ChatMessageReactionSummary[], required
      - `emoji` string, required: One emoji grapheme in canonical form (NFC, variation selectors removed).
      - `count` integer, required
    - `edge_versions` object[], required
      - `emoji` string, required
      - `revision` string, required: Unsigned decimal string within signed 64-bit range; never coerce to a JavaScript number.
      - `present` boolean, required
    - `next_edge_cursor` string, nullable, required

## Other responses

- `400`: Stable machine-readable private messaging problem
- `401`: Stable machine-readable private messaging problem
- `403`: Stable machine-readable private messaging problem
- `404`: Stable machine-readable private messaging problem
- `503`: Stable machine-readable private messaging problem

---

[API](https://skmtc.dev/arbital/apis/arbital-api.md) - [All operations](https://skmtc.dev/arbital/apis/arbital-api/llms.txt) - [OpenAPI document](https://skmtc.dev/arbital/apis/arbital-api/revisions/bb0185edf43a?raw)
