Skip to main content
GET
cURL
Use GET /chat/conversation/{conversation_id}/ to retrieve a turn created by an earlier POST /chat/query/. Send X-API-KEY in the header; the only input is the conversation_id path parameter. Use it to re-display a prior turn, hand a turn between systems, or recover a result after an SSE stream disconnects (the agent still finishes and persists the answer). This endpoint is read-only. It does not run the agent, consume session capacity, or count against the per-user concurrency limit.

Status

Every 200 response includes a top-level status so callers polling an async turn can tell whether the answer is ready:
  • Completed — the turn finished. The body carries the full answer payload (same shape as POST /chat/query/).
  • AwaitingInput — the turn is paused waiting on user input. The body contains status, conversation_id, chat_id, and a detail message.
  • Processing — the agent is still running. Poll again shortly.
  • Failed — the turn stopped without producing an answer.

Response

When status is Completed, the answer fields match POST /chat/query/: final_answer, chat_id, chat_url, conversation_id, sources, tools, content, plus status. Returns 404 if no conversation with this ID exists in the API key’s organization.

Example Response (Completed)

Example Response (Processing)

Example Response (Failed)

Authorizations

x-api-key
string
header
required

Path Parameters

conversation_id
integer
required

The integer identifier returned in conversation_id from a prior /chat/query/ response (or the start / done SSE events).

Response

The conversation's current state. Inspect the status field: when it is Completed the body carries the full answer in the same shape as the JSON response from POST /chat/query/; when it is Processing, AwaitingInput, or Failed only the lightweight status fields are returned.

Response body for GET /chat/conversation/{conversation_id}/. The shape depends on the turn's status: a Completed turn returns the full answer payload; a Processing or Failed turn returns only the status fields.

final_answer
string
required

Cleaned answer text returned by the agent. Internal markup (<answer>, <ref>, <abbr>, citation tokens) is stripped.

thinking
string
required

Aggregated reasoning string from the legacy multi-agent orchestrator: per-agent entries are concatenated in execution order, each prefixed by a header line and separated by a blank line. Empty under the current agent pipeline — use tools and content to inspect the reasoning trail instead.

chat_id
string<uuid>
required

Thread identifier: the Chat UUID for this conversation. Reuse this value in subsequent requests to continue the same thread.

chat_url
string<uri>
required

Web UI link to this thread: https://voltai.ai/{organization_name}/chat/{chat_id} using the resolved organization's name.

conversation_id
integer
required

Identifier of the specific question/answer turn within the thread. A new conversation_id is generated for every /chat/query/ request. Use it with GET /chat/conversation/{conversation_id}/ to fetch this exact turn later.

sources
object[]
required

Evidence cited by the agent. Each entry is annotated with the tool that surfaced it (display_name) and a stable id for joining back to citation tokens in final_answer.

tools
object[]
required

Every tool call the agent made while answering this turn, in execution order. Lets non-streaming clients see the same reasoning trail that SSE clients receive as live tool_call / tool_output frames.

content
object[]
required

Raw agent transcript for the turn: an ordered list of text and tool items as the agent produced them. text items concatenate to final_answer; tool items mirror the entries in tools.

Text fragment emitted by the agent (main agent or a subagent). Concatenate all main-agent text items in order to reconstruct the agent's prose.

status
enum<string>
required

The turn finished and its answer is included in this response.

Available options:
Completed