---
title: "Read a conversation transcript"
method: GET
path: "/v1/conversations/{id}/transcript"
tags: ["Conversations"]
---

# Read a conversation transcript

`GET /v1/conversations/{id}/transcript`

## Request

- Base URL: `https://api.shardflux.dev`
- URL: `https://api.shardflux.dev/v1/conversations/{id}/transcript`
- Auth: HTTP bearer

The harness’s own transcript (Claude Code or Codex JSONL), as the conversation’s computer wrote it, kept by Shardflux as the conversation runs. Reading it never reaches the computer: it works the same for a working, parked or finished conversation. Page with `offset` = the previous `next_offset`; `size` is what is stored now.

## Path parameters

- `id` string, required

## Query parameters

- `offset` integer
- `limit_bytes` integer
- `session_id` string

## Response `200`

Default Response

- ConversationTranscript
  - `conversation_id` string, required
  - `harness` 'claude' | 'codex', required
  - `session_id` string, nullable, required: The harness session the transcript belongs to (a Claude Code session id or Codex thread id); null while nothing is stored.
  - `file` string, nullable, required: The native file name: `<session>.jsonl` for Claude Code, `rollout-<time>-<thread>.jsonl` for Codex.
  - `offset` integer, required: Byte offset of `data` in the transcript.
  - `next_offset` integer, required: Byte offset after `data`: pass it as the next `offset`. A line boundary.
  - `size` integer, required: Bytes stored so far.
  - `data` string, required: Native JSONL lines (UTF-8), byte for byte as the harness wrote them.
  - `updated_at` string, date-time, nullable, required

## Other responses

- `4XX`: Default Response
- `5XX`: Default Response

---

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