---
title: "Read a conversation"
method: GET
path: "/v1/assistant/sessions/{session_id}/messages"
tags: ["Assistant"]
---

# Read a conversation

`GET /v1/assistant/sessions/{session_id}/messages`

## Request

- Base URL: `https://api.naturali.ai`
- URL: `https://api.naturali.ai/v1/assistant/sessions/{session_id}/messages`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://api.naturali.ai/authorize`, token URL `https://api.naturali.ai/token`, scopes: `mcp:access`)

A page of one conversation, oldest first. `offset` and `total` count every stored message, tool-only turns included, which this list leaves out — so a page can hold fewer than `limit`, and the list ends when `offset + limit` reaches `total`. The newest page is at `offset = total - limit`.

## Query parameters

- `limit` integer
- `offset` integer

## Response `200`

The conversation.

- AssistantMessageList
  - `data` AssistantMessage[], required
    - `id` string, required
    - `role` 'user' | 'assistant', required
    - `content` string, required
  - `total` integer, required: Stored messages in the conversation, tool-only turns included.
  - `limit` integer, required
  - `offset` integer, required: The stored messages skipped before this page.

## Other responses

- `401`: Missing or invalid credentials.
- `403`: The credential cannot hold the account's conversation (`access_denied`): it is confined to one project, or it is the Assistant's own turn credential.
- `404`: The resource does not exist (existence is not leaked).
- `502`: The turn could not be run or read (`upstream_unavailable`).
- `503`: This deployment serves no Assistant conversation (`assistant_unavailable`).

---

[API](https://skmtc.dev/naturali/apis/naturali-ai-api.md) · [All operations](https://skmtc.dev/naturali/apis/naturali-ai-api/llms.txt) · [OpenAPI document](https://skmtc.dev/naturali/apis/naturali-ai-api/revisions/e4905b78f422?raw)
