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.
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.
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.