A conversation is one thread with one person: a web chat, a Telegram thread, a single phone call, or — on one of your numbers — a mix of phone calls, WhatsApp calls and WhatsApp messages (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.