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

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

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

## 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}/receipts`
- Auth: HTTP bearer

Members only. Eligible recipients are the members present when the message was sent, excluding the author; late joiners never appear and former members keep what they earned. Each recipient includes conversation-wide last_read_sequence and last_delivered_sequence when supported. To render a receipt only on the latest outgoing message, fetch this endpoint for that message, follow every next_cursor, and compare its sequence with each recipient's read position. A nonempty complete eligible set must cover the message before showing Read by all. Refetch for a new outgoing message, membership change or reconnect; receipt.updated can advance known recipients between fetches. Groups above 50 members require on-demand refresh. Existing read/delivered flags and summary remain available, including as fallback when cursor fields are absent during rollout. Receipts stay inside the chat and never notify.

## Path parameters

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

## Query parameters

- `cursor` string
- `limit` integer

## Response `200`

Eligible recipients and whether their watermarks cover the message

- ChatMessageReceiptPage
  - `recipients` ChatMessageReceipt[], 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
    - `membership` 'active' | 'left' | 'removed', required: Current membership; former members keep the receipts they earned.
    - `delivered` boolean, required
    - `read` boolean, required
    - `last_read_sequence` string: Recipient's cumulative read position in this conversation, including later messages by any author. Compare as an exact integer against the requested message sequence. Zero means no read position. Omitted together with last_delivered_sequence by older deployments; absence is unknown, not zero.
    - `last_delivered_sequence` string: Recipient's cumulative delivered position in this conversation, never below last_read_sequence. Omitted together with last_read_sequence by older deployments.
  - `summary` ChatMessageReceiptSummary, required: Totals over the members who were in the chat when the message was sent, excluding the author. Late joiners are never counted.
    - `eligible` integer, required
    - `delivered` integer, required
    - `read` integer, required
  - `next_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)
