surface says which; each item’s channel says how it arrived). Each call or chat inside it is a session. A person can have many conversations; what ties them together is contact_key, your stable id for the person, not conversation_id, which is new on every call for an agent that starts clean. Read one run on calls; read a person’s history here.
List a person’s conversations
GET /v1/conversations returns customer threads on every channel, most recently active first. CoPilot threads are not included.
Endpoints
userdata on a conversation is the contact’s: what tools have stored about this person across all their conversations, identical on every thread with the same contact_key. What one call ended with is session.userdata on the call.
The contact
ref describes the person the thread is with:
Items
Sessions
The sessions list is how you read a multi-agent or multi-call thread: one row per run.
The thread
snapshot sums cost over priced sessions only and is null when none are priced.
Correct what an agent knows
PATCH with userdata changes what the next turn sees as {{userdata.field}}, for every conversation with this person. Each field you send (summary, userdata, metadata) replaces that whole object; omitted fields are left alone.
In the dashboard
Conversations is the inbox: one row per thread with surface, agent and last message, filterable by agent. A thread shows the transcript with its health verdict, the sessions behind it and per-reply latency, and updates live.Calls
One voice or video session in full.
Conversation memory
What a new call knows about earlier ones.