---
title: "Mark a thread as read"
method: POST
path: "/api/v1/threads/{thread}/mark_read"
---

# Mark a thread as read

`POST /api/v1/threads/{thread}/mark_read`

Records that a user has read up to a specific message in the thread. Unread
indicators and badge counts are cleared up to the specified message.

You must supply exactly one of `last_read_message` or `use_latest_message`.
Omitting both returns 400. If `use_latest_message` is `true` and the thread
has no messages, the request succeeds silently with no state change.

For server-to-server (S2S) requests where no user identity is present in the
token, the `user` param is required to identify whose read state to update.

## Path parameters

- `thread` string, required

## Request body

- object
  - `last_read_message` string — Message ID (`msg_...`) to record as the last read message. Mutually exclusive with `use_latest_message`.
  - `use_latest_message` boolean — When `true`, marks the thread as read up to the latest message. Mutually exclusive with `last_read_message`.
  - `user` string — User ID (`usr_...`) whose read state to update. Required for S2S requests; ignored when an authenticated user is present in the token.

## Response `204`

No content

## Other responses

- `401` — Unauthorized
- `404` — Thread not found
- `422` — Validation error

---

[API](https://skmtc.net/archastro/apis/archastro-platform-api.md) · [All operations](https://skmtc.net/archastro/apis/archastro-platform-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/archastro/archastro-platform-api/versions/a8772b442f86/schema)
