Read the conversation
bearerAuthorizationBearer <token>An API token
id*stringA session id
after?integerOnly entries after this seq
0 <= valueEntries in order
application/json- response
entries*array<||||||||||||>curl -X GET 'http://127.0.0.1:7777/sessions/ses_6c1f2a0b9d3e4f5a6b7c/transcript?after=0'{ "entries": [ { "seq": 0, "at": 0, "kind": "user", "text": "string", "mode": "agent", "by": { "principal": "string", "name": "string" }, "attachments": [ { "attachmentId": "string", "name": "string", "size": 0, "type": "string" } ] } ]}Download an attachment GET
The file's bytes, with its media type. Images are shown inline; anything else downloads.
Follow a session live GET
A server-sent event stream. Each transcript entry is an `entry` event with `id: <seq>`; approvals, questions, waiting messages, status and usage arrive as `approval`, `ask`, `pending`, `status` and `usage` events, each `data` a `SessionEvent`. While the model writes, `reply` events carry its text as it streams (an id, an offset and the text from there; offset 0 is the whole text so far, which a stream opened mid-reply gets first): live only, never replayed, ended by the assistant entry itself. Reconnect with `Last-Event-ID` (or `?after=`) to get every later entry exactly once. A stream that has to end says why in an `error` event.