Skip to main content
Everything about a single call is on GET /calls/{id} (scope calls.view). To find call IDs, list calls with GET /calls?campaignId=…, or take data.finalCall.id from a lead result.
GET /calls and GET /calls/{id} are part of the workspace API and need a scoped API key.

Transcripts

Relevant fields in the response: Each transcript turn looks like this:
  • role is agent, user (the person called) or system.
  • startedAtMs, when present, is the Unix time in milliseconds at which the turn started (not an offset from the start of the call). Subtract the call’s answeredAt to get an offset.

English translation

For a call in another language, POST /calls/{id}/transcript-translation returns an English version:
The translation is stored, so later calls return it immediately and it also appears as transcriptTranslation on GET /calls/{id}. A call with no transcript returns 400 no_transcript. API keys need calls.edit for this endpoint (see stricter permissions).

Recordings

Download a recording from:
This URL redirects (302) to a short-lived download link for the audio. Follow the redirect and download straight away: the link it points to expires after a short time, but the /recordings/{callId} URL itself never expires. Store the /recordings/{callId} URL or the call ID, not the link it redirects to.
/recordings/{callId} does not require an API key. The call ID is long and random and works like a share link: anyone who has it can play the recording. Share call IDs only with people who may hear the call.
Use /recordings/{callId} rather than the recordingUrl field of GET /calls/{id}. recordingUrl is a temporary link that stops working once recordingUrlExpires has passed.

When transcripts and recordings become available

A call reaches its final status first; the transcript, summary, recording and extracted fields can arrive afterwards. Analysis waits for the transcript and keeps retrying for several hours if it is late.
  • If transcript is null or hasRecording is false shortly after a call ended, poll GET /calls/{id} again later. Back off between attempts.
  • A lead result is created only after the call’s analysis has finished, so by the time you receive it the transcript is normally available on GET /calls/{data.finalCall.id}.
  • Calls that never connected have no transcript or recording.