---
title: "Mark Channel Read"
method: PUT
path: "/channels/{channel_id}/mark-read"
tags: ["channels", "channels"]
---

# Mark Channel Read

`PUT /channels/{channel_id}/mark-read`

The reader says "I have seen this channel up to now."

Until this existed, a channel was marked read only as a side effect of
GET /messages, so a message that ARRIVED over the socket while the channel
was open was never marked read: the list kept a badge on the very channel
the person was looking at until they refreshed (Nancy, 2026-09-11). Direct
messages have had PUT /chat/mark-read for this since the unread counters
were denormalised; this is the channel twin. Idempotent; a non-member is a
no-op rather than an error, because the client calls it on every incoming
message and a stale membership must not turn into a red banner.

## Path parameters

- `channel_id` string, required

## Headers

- `authorization` string, nullable

## Response `200`

Successful Response

- unknown

## Other responses

- `422` — Validation Error

## Changes

> 21 revisions in range; 1 not diffed.

- **2026-09-13** `3c5400a294e1` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/fluentea/apis/aurqa-language-learning-platform-refactored/changes/channels/:channel_id/mark-read/put.md)

---

[API](https://skmtc.dev/fluentea/apis/aurqa-language-learning-platform-refactored.md) · [All operations](https://skmtc.dev/fluentea/apis/aurqa-language-learning-platform-refactored/llms.txt) · [OpenAPI document](https://skmtc.dev/fluentea/apis/aurqa-language-learning-platform-refactored/revisions/13996d792e23?raw)
