# Mark Shared Thread Read

Advance your read cursor to **now** for a **live-shared** thread you **joined** — the slug-scoped twin of the owner mark-read endpoint, for a participant who joined the thread but does not own it.

The owner mark-read route (`POST /v1/threads/{id}/read`) is ownership-scoped and returns `404` for a joiner. Use this endpoint instead: it advances the joiner's read cursor server-side so the shared-chat unread count clears durably — it stays reset across devices and reloads, rather than clearing only in the local UI. The read cursor is keyed on `(user, thread)` and is shared with owner reads, so this and the owner endpoint remain consistent.

Authorized by the joiner's **live**-share grant on the slug. A `view` or `fork` slug returns `403`; an unknown, unauthorized, or expired link returns `404`. The call is idempotent.

## Authentication

Requires **user** authentication (Bearer token).

## Path Parameters

**`slug`** string required

The share-link slug, from the share URL. The link must be a `live` link.

## Returns

- **success** `boolean` — always `true` when the read cursor was advanced.


## Code Examples

### cURL


```bash
curl -X POST "https://api.aitronos.com/v1/shared-threads/abc123slug/read" \
  -H "Authorization: Bearer YOUR_TOKEN"
```

### Python SDK


```python
from aitronos import Aitronos

client = Aitronos(api_key="", token="YOUR_TOKEN")
result = client.threads.shared.mark_read(slug="abc123slug")
print(result.success)
```

### Python (requests)


```python
import requests

response = requests.post(
    "https://api.aitronos.com/v1/shared-threads/abc123slug/read",
    headers={"Authorization": "Bearer YOUR_TOKEN"},
)
print(response.json()["success"])
```

### JavaScript


```javascript
const response = await fetch(
  "https://api.aitronos.com/v1/shared-threads/abc123slug/read",
  {
    method: "POST",
    headers: { Authorization: "Bearer YOUR_TOKEN" },
  },
);
const result = await response.json();
console.log(result.success);
```

## Response Examples

### Success (200)


```json
{
  "success": true
}
```

### Error — Not a live link (403)


```json
{
  "success": false,
  "error": {
    "code": "INSUFFICIENT_PERMISSIONS",
    "message": "You do not have permission to perform this action.",
    "system_message": "This share link does not grant live co-working access",
    "type": "authorization_error",
    "status": 403,
    "details": { "link_id": "tslnk_...", "access_level": "view" },
    "trace_id": "...",
    "timestamp": "..."
  }
}
```

### Error — Unknown / expired link (404)


```json
{
  "success": false,
  "error": {
    "code": "RESOURCE_NOT_FOUND",
    "message": "The requested resource could not be found.",
    "system_message": "Share link not found",
    "type": "client_error",
    "status": 404,
    "details": {},
    "trace_id": "...",
    "timestamp": "..."
  }
}
```

## Related Resources

- [Shared Thread Read State](/api-reference/shared-threads/shared-thread-read-state) — Mark read up to a specific message, and get the unread count + divider anchor
- [Join Shared Thread](/api-reference/shared-threads/join-shared-thread) — Join the live-shared thread first
- [Shared Thread Reactions](/api-reference/shared-threads/shared-thread-reactions) — React to messages as a joiner
- [Shared Thread Presence](/api-reference/shared-threads/shared-thread-presence) — Heartbeat your presence on the thread
- [Live Shared Thread](/api-reference/shared-threads/live-shared-thread) — The real-time stream for the shared thread