Skip to main content
Every call an agent takes or places is a conversation. Use these endpoints to sync calls into your own systems, build reports, or pull the audio and transcript of one call.

List conversations

The conversation above is trimmed: participants of type: "agent" and a few other fields are left out.

Filters

All filters are optional query parameters and combine with AND.

Sorting and pagination

total is the number of conversations that match the filters, so you can page with offset until offset + limit >= total. When you sync continuously, sort by created_at ascending with a date_from you advance, rather than paging through a list that grows while you read it.
An unknown value is not an error. An unrecognized status simply matches nothing, and an unrecognized sort_by falls back to created_at.

Conversation fields

To list call legs across the whole project instead, use GET /v1/projects/{projectId}/calls. It accepts most of the same filters and returns { "calls": [...] }.

Read the transcript and recording

The artifacts endpoint returns everything recorded for one conversation, one entry per agent session:
The example is trimmed. Each session also carries metadata, the raw timeline_jsonl, findings, turn_timings and per-turn model metrics.

Transcript format

transcript (per session) and merged.transcript (all sessions in order) are plain text, one line per event:
  • The time is relative to the start of the session.
  • ROLE is AGENT for the AI, USER for the caller, OPERATOR for a person handling a Voice Assist call, TOOL for a tool call with its outcome, duration and result, and END for how the call ended. A few other roles mark the agent’s internal prompts.
  • (Lnnn) points to the line of timeline_jsonl the entry came from. Long tool arguments and results are shortened.
If you want structured lines rather than text, use the dialog entries of the call-ended vCon, or parse timeline_jsonl.

Download the recording

recording_signed_url is a pre-signed link to the session’s WAV file. Fetch it without the Authorization header:
  • The link is valid for one hour. Request the artifacts again for a new one.
  • It is null when the session has no recording.
  • A conversation with several agent sessions, for example after a hand-off between agents, has one recording per session.

When artifacts are not ready

When only some sessions fail, the request succeeds: the failed sessions carry an error object and sessions_degraded counts them. A conversation with no agent session at all, for example a call that never reached an agent, answers 200 with an empty sessions list.

Metrics

  • e2e_median_latency_ms is the agent’s response latency in milliseconds: the median over the conversation’s call legs, leaving out legs whose latency is above 10 seconds.
  • resolution_state and resolution_reason come from Clarity’s resolution judge, when it has judged the call.
  • Every field is null when the call has no metrics yet, or none were recorded.