---
title: "Read a thread"
method: GET
path: "/threads/{threadId}"
---

# Read a thread

`GET /threads/{threadId}`

Read an ask/agent thread back as question / answer rounds.

This is both the poll endpoint for a `processing` answer (`GET /ask`
returns the `threadId` to poll) and a general way to read a past
conversation: it returns every round's question and answer, without the
intermediate events. While the run is still working the response is
`202` with `status: "processing"` — poll again after `retryAfterSeconds`
/ the `Retry-After` header.

## Path parameters

- `threadId` string, required

## Response `200`

Ok

- AskThreadPresentation
  - `threadId` string, required
  - `status` 'processing' | 'completed' | 'failed' | 'needs-approval', required
  - `title` string
  - `rounds` AskThreadRound[], required — Question / answer pairs, oldest first.
    - `question` string, required
    - `answer` string, required
  - `retryAfterSeconds` number, double — Set while `processing` — suggested seconds before polling again.
  - `message` string — Human-readable hint about the current state.
  - `triageUrl` string — needs-approval: where a human reviews the drafted changes.
  - `pendingApprovalCount` number, double

## Other responses

- `202` — The answer is still being prepared — poll again after `retryAfterSeconds` / the `Retry-After` header.
- `401` — Invalid authentication
- `404` — No thread with this id
- `422` — Input validation error
- `429` — Rate limitation error
- `default` — Unexpected error

---

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