Get an agent conversation
Fetches the conversation’s metadata plus its current version. Use the version
immediately before posting a run as expected_version — that’s how the platform’s
compare-and-swap guard knows whether the conversation has advanced since you last
looked.
When to call this
- Before starting a new run: read
version, post it asexpected_version. If you cache the value across long delays you’ll hit Version Conflict more often. - When resuming a
requires_actionrun: the conversation’s version has advanced because the assistant turn was persisted on the run row’s finalize. Re-read it before postingtool_outputs. - To inspect a conversation’s
defaultsif you’ve forgotten what was pinned.
What you cannot do here
There is no PATCH / PUT for conversations. The system_prompt and defaults are
immutable at the conversation level. To change behavior, override per-run via
config_override, or create a new conversation.
Scope: per-user, not per-company
Conversations are scoped to the (company_id, user_id) pair that created them.
Peers in the same company cannot see each other’s conversations — the endpoint
returns 404 for “does not exist”, “belongs to a different company”, and “belongs to
a different user in the same company” alike. This is deliberate: distinguishing them
would leak existence.
Permission
agent_conversations resource with read verb.
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
The conversation's UUID.
UUID identifying a conversation. Returned from POST /agents/conversations and used
in every other agent endpoint that operates on this conversation.
"bc2505b7-068d-44ed-8055-a6f6ffe54ab1"
Response
The conversation row.
The conversation row as the API returns it. The same shape comes back from
POST /agents/conversations (201 Created) and GET /agents/conversations/{id} (200 OK).
UUID identifying a conversation. Returned from POST /agents/conversations and used
in every other agent endpoint that operates on this conversation.
"bc2505b7-068d-44ed-8055-a6f6ffe54ab1"
Company ID derived from the bearer token. Pinned for the conversation's lifetime.
1
User ID derived from the bearer token. Pinned for the conversation's lifetime and gates every subsequent read endpoint — only the originating user can fetch the conversation, its messages, or its runs. Peers in the same company see 404.
407
The configuration applied to every run on this conversation by default. Each field
can be overridden per-run via config_override on the POST .../runs body, except
system_prompt which is fixed at conversation creation time.
For mcp_servers and tools, overrides replace the whole list, not individual
entries. There is no per-server or per-tool merge — set the complete catalog you want
for that run.
Monotonic per-conversation counter, bumped by 1 (or more) every time a successful run appends messages. Two roles:
- Delta cursor for
GET .../messages?since=N— fetch only messages withsequence_no > N. - Compare-and-swap token for
POST .../runs— setexpected_versionto the conversation's current head; if it doesn't match at run-creation time, you get a Version Conflict (HTTP 409).
Always start a new run cycle by reading the current version from
GET /agents/conversations/{id} rather than caching a value from earlier.
x >= 04
"2026-05-18T13:21:30.355180Z"
"2026-05-18T13:21:51.983952Z"

