Read conversation messages
const url = 'https://example.com/v1/conversations/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/messages?limit=25';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://example.com/v1/conversations/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/messages?limit=25' \ --header 'Authorization: Bearer <token>'Cursor-paginated. Sort is sequence asc (natural conversation reading order) — distinct from most list endpoints, which use createdAt desc.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”ConversationId — opaque branded string (a UUID).
Query Parameters
Section titled “Query Parameters”1..100. Default 25.
Where the previous page ended: its nextCursor, as it came. A runtime that seals cursors takes one only for the same list, filters and caller, within a day; otherwise 400 bad-input, and the list starts again without it. Absent → first page.
Responses
Section titled “Responses”Page of messages.
object
object
Monotonic index within the conversation. Sort order for the list endpoint.
Free-form string OR a structured object (tool results).
Stored files the message carries, on a user message (its run’s input files) or a tool’s result: references, never bytes. A later turn shows its model each one the run’s rule still admits, and a line for one that’s gone.
A stored file as a value: in a run’s input, a tool’s result or a conversation message. Only artifactId is trusted: the runtime shows a model a file by its own checked record of it, never by the value’s other fields. A message’s files are the ones its run admitted, with the record’s fields.
object
The stored file (POST /v1/artifacts): its blobId.
The file’s name.
Its type, as checked from its bytes.
Its size in bytes.
Sha256 of its bytes, hex-encoded, lowercase.
A PDF’s page count, as checked from its bytes.
Set when the model isn’t shown it, and reads a line naming it instead: type (not a type a model is shown), size (over its type’s limit), model (the agent or its model doesn’t take images and PDFs), limit (over a call’s or a list’s limits), store (no file store), gone (no longer stored), changed (not the bytes that were checked), refused (the model couldn’t read it when it was attached), storage (a tool’s store found the tenant’s storage full), reading (what the model is sent in its place, an image or a text made from it, isn’t made yet).
object
Opaque cursor for the next page. Absent when hasMore: false. Sort is sequence asc.
Example
{ "data": [ { "role": "user", "files": [ { "type": "kindgi.file", "notShown": "type" } ] } ]}Malformed cursor, or conversationId is not a conversation id (a UUID).
object
object
Stable machine-readable discriminant. Values match domain error codes (see docs/API-ROUTE-CONVENTIONS.md §4.3).
Optional, kind-specific.
object
Server-assigned request id; also echoed via X-Request-Id header.
Examplegenerated
{ "error": { "code": "example", "message": "example", "details": {}, "requestId": "example" }}Missing / malformed / expired / revoked bearer token.
object
object
Stable machine-readable discriminant. Values match domain error codes (see docs/API-ROUTE-CONVENTIONS.md §4.3).
Optional, kind-specific.
object
Server-assigned request id; also echoed via X-Request-Id header.
Examplegenerated
{ "error": { "code": "example", "message": "example", "details": {}, "requestId": "example" }}No conversation with that id under this tenant, or one the caller can’t read (read on its project, or on its agent for one from before projects): the same answer, byte for byte.
object
object
Stable machine-readable discriminant. Values match domain error codes (see docs/API-ROUTE-CONVENTIONS.md §4.3).
Optional, kind-specific.
object
Server-assigned request id; also echoed via X-Request-Id header.
Examplegenerated
{ "error": { "code": "example", "message": "example", "details": {}, "requestId": "example" }}The database was too busy to answer in time (database-busy); Retry-After (whole seconds) says when to try again.
object
object
Stable machine-readable discriminant. Values match domain error codes (see docs/API-ROUTE-CONVENTIONS.md §4.3).
Optional, kind-specific.
object
Server-assigned request id; also echoed via X-Request-Id header.
Examplegenerated
{ "error": { "code": "example", "message": "example", "details": {}, "requestId": "example" }}