Skip to main content
Every call can leave two artifacts: an audio recording (when the agent was created with recording=True) and a turn-by-turn transcript. Both are retrieved through the Management API.

Recordings

recordings.list() returns the sessions that have a recording; read the download URL off each one:
Pause and resume recording during a live call (e.g. around card numbers) with ctx.session.recording.pause(reason=...) / .resume() - see AgentRunner & Sessions.

Transcripts

transcripts.list()/.get() return sessions; the turns live on session.transcript:

Transcripts From a Call

client.calls carries the turns too, and its two read paths differ on purpose:
None means not loaded; [] means the call genuinely had no turns. A list row always reads None because the endpoint drops the turns to keep a page small - it is not a silent call. Check transcript_turns first, then call calls.get(call_id) only when there is something to fetch.
This is the post-call complement to the live metrics in Observability, and the raw material Analytics extracts structured fields from.