Skip to main content
POST
Run one turn of a v2 conversation

Authorizations

x-api-key
string
header
required

Path Parameters

conversation_id
string<uuid>
required

Body

application/json

Drive one turn of a v2 conversation (Phase F1).

user_message
string
required
for_update
boolean
default:false
deprecated

Deprecated compatibility field; all turns use optimistic guarded finalization and this value has no effect.

include_evidence
boolean
default:false
evidence_view
enum<string>
default:display
Available options:
display,
full

Response

Successful Response

The outcome of one driven turn — mirrors driver.TurnResult.

turn_id
string<uuid>
required
conversation_id
string<uuid>
required
text
string
required
active_assistant_id
string<uuid> | null
required
path
string
required
decision_source
string
required
message_seqs
integer[]
required
session_status
string
required
answering_assistant_id
string<uuid> | null
turn_ttft_ms
integer | null
ended
boolean
default:false
evidence
EvidencePackageDisplay · object

End-user serialization view — source cards only, NO audit internals.

A distinct model (not :class:EvidencePackage with a narrower config) so the omitted fields are absent from the schema, and so view yields a clean tagged union. organization_id, agent_id and status_reason are full-only and intentionally not present here.

kb_used exists because status_reason is deliberately full-only: several of its values (build_failed, item_cap_applied, partial_missing_source_rows) describe internal packing/DB state that an end-user surface must not see. But a consumer still has one legitimate question that items=[] alone cannot answer — was the knowledge base consulted on this turn at all? An empty card set means "no KB search ran" under not_applicable but "searched, packed nothing" under complete. kb_used answers that directly instead of making every client hard-code which evidence_status value is the magic one.

message
string | null
sources
TurnSource · object[] | null