A call is one voice or video session: a web call, a phone call, a WhatsApp call or a media stream. GET /v1/calls/{session_id} holds what was said, every tool call and its result, the userdata the call ended with, and where the time and money went — the first thing to open when an agent misbehaves. Chats are not calls; read them with GET /v1/chats (text conversations) or under conversations.

List calls

GET /v1/calls returns a page of calls, newest first.
A row carries status, close_reason, close_reason_label, duration_s, cost, contact_key, metadata, recording.state, message_count, total_audio_ms, resumed_from_call_id, the analysis summary and outcome, and plan (non-null only when the call ran something other than the agent’s published version: members, inline, overridden).

Read one call

GET /v1/calls/{session_id} returns the full record.
Read it in this order: snapshot.issues, transcript, session.userdata, events.

Top-level fields

session

transcript items

Each item carries its own agent_id and agent_version, so on a call with handoffs it says which agent spoke. Items from an inline team member carry null; the preceding agent_handoff names it.

snapshot: latency

snapshot.response_latency is caller-stops-speaking to first agent audio: avg_ms, p95_ms, max_ms, samples. snapshot.response_stages breaks the average into ordered {kind, ms, label} stages: Realtime agents have no stt or tts stage. Per reply, the same list is on transcript[].latency.stages, with latency.kind response (speech → first audio), reply (typed message → first token) or after_filler (a filler line → the tool-driven reply).

snapshot: thresholds and counters

transfer

Stats

GET /v1/calls/stats returns totals over start/end (default last 30 days), optionally by agent_id: total_calls, priced_calls, total_minutes, total_spend and avg_cost_per_call (over priced calls), judged_calls and successful_calls (over calls analysis judged), and the resolved start, end.

Delete a call

DELETE /v1/calls/{session_id} returns 202 and erases the call’s content within seconds: recordings, transcript and tool calls, userdata, summary and extracted fields, and the phone numbers. The call row, status, duration, outcome, timings, cost and usage stay, and content_deleted_at is stamped. A call still in progress is a 409.
Erasing a person’s last remaining call also erases the contact’s stored userdata: the next call from them starts with no memory of them. This cannot be undone.
To delete only the audio, use DELETE /v1/calls/{session_id}/recording. Retention runs the same purge on a schedule — see data retention and privacy.

Debugging agents

Symptom first: which field answers it.

Close reasons

Every close_reason value.