List a call's recordings and transcripts
/v1/voice/calls/{call_id}/recordingsconst inventory = await bird.voice.calls.recordings.list("vcs_01krdgeqcxet5s7t44vh8rt9mg");
for (const recording of inventory.recordings) {
console.log(recording.leg_id, recording.id);
}inventory = client.voice.calls.recordings.list("vcs_01krdgeqcxet5s7t44vh8rt9mg")
for recording in inventory.recordings:
print(recording.leg_id, recording.id)inventory, err := client.Voice.Calls.Recordings.List(context.Background(), "vcs_01krdgeqcxet5s7t44vh8rt9mg")
if err != nil {
log.Fatal(err)
}
for _, recording := range inventory.Recordings {
fmt.Println(recording.LegId, recording.Id)
}$inventory = $bird->voice->calls->recordings->list('vcs_01krdgeqcxet5s7t44vh8rt9mg');
foreach ($inventory->getRecordings() ?? [] as $recording) {
echo $recording->getLegId(), ' ', $recording->getId(), PHP_EOL;
}bird voice calls recordings list <call-id>curl -X GET "https://us1.platform.bird.com/v1/voice/calls/{call_id}/recordings" \
-H "Authorization: Bearer $TOKEN"{
"media": [
{
"id": "vcm_01krdgeqcxet5s7t44vh8rt9mg",
"leg_id": "vcl_01krdgeqcxet5s7t44vh8rt9mg",
"call_id": "vcs_01krdgeqcxet5s7t44vh8rt9mg",
"codec": "PCMU",
"state": "available",
"offset_ms": 0,
"audio_ms": 1000,
"started_at": "2026-11-01T12:00:00Z",
"ended_at": "2026-11-01T12:00:01Z",
"source_party": {
"endpoint": {
"type": "pstn"
},
"address": "+14155551234"
}
}
],
"recordings": [
{
"id": "vrc_01krdgeqcxet5s7t44vh8rt9mg",
"leg_id": "vcl_01krdgeqcxet5s7t44vh8rt9mg",
"call_id": "vcs_01krdgeqcxet5s7t44vh8rt9mg",
"number": "+12025550100",
"channel": "rx",
"media_id": "vcm_01krdgeqcxet5s7t44vh8rt9mg",
"media_started_at": "2026-11-01T12:00:00Z",
"started_at": "2026-11-01T12:00:00Z",
"ended_at": "2026-11-01T12:00:01Z"
}
],
"transcripts": [],
"truncated": false,
"evaluated_at": "2026-11-01T12:01:00Z"
}
Returns everything captured across every leg of one call: its stored audio,
each leg's view of it, and every transcription attempt over it. A stream heard on
several legs appears once in media, with one view per leg in
recordings.
Audio streams, their recording views and transcripts leave the API 30 days
after the source audio starts. Transcription does not restart that period.
Read truncated before presenting the result as complete.
The collections arrive independently. A stream can appear before its
recording view, or without a view if delivery fails or the view expires.
Download audio with getVoiceLegRecordingAudio, passing the recording
view's leg_id and id. The download requires a recording view ID, so a
stream cannot be downloaded until its view is available.
A call this workspace never placed, or whose recordings have all expired,
answers with empty collections rather than 404.
Parámetros
call_idstringThe call to read. Every leg carries its call's ID as call_id.
Carga de respuesta
mediaThe stored audio this read covers, each stream once.
transcriptsEvery transcription attempt over that audio, including failed ones.
Mostrar atributos secundarios
transcripts.idUnique identifier for this attempt.
transcripts.leg_idThe leg the transcribed stream was captured from.
transcripts.call_idnull on a transcript of a stream captured before calls existed.
transcripts.media_idThe stream this attempt describes.
transcripts.media_started_atWhen that stream started. A transcript is retained with the stream it describes rather than on its own transcription lag.
transcripts.stateWhether the attempt produced a transcript. failed is an outcome, not evidence that a later attempt cannot succeed.
Possible values: available, failed
transcripts.sourceWhat the times in cues are worth: whole for a pass that times nothing, aligned for offline forced alignment, live for a streaming producer.
Possible values (may grow over time): whole, aligned, live
transcripts.modelThe model that produced it.
transcripts.channelThe direction of the transcribed stream.
Possible values: rx, tx
transcripts.cuesThe transcript, in order. Concatenating cues across streams reads as prose nobody spoke, and a reader matching over it can match the wrong party's words.
Mostrar atributos secundarios
transcripts.cues.seqPosition of this cue in the transcript.
transcripts.cues.start_msOffset of this cue from the start of its stream, in milliseconds. Set on aligned cues; null when nothing measured it, because a zero would be a claim about timing that was never made.
transcripts.cues.end_msOffset of the end of this cue from the start of its stream. null on the same terms as start_ms.
transcripts.cues.textWhat was transcribed for this cue. Empty on the single cue of a stream where nothing was heard.
transcripts.source_partyThe party this audio was captured from, which is what says whose voice it
carries. channel only says which direction of the leg the stream came
from. A recording view's number identifies a number associated with
that view, which can be an outbound destination.
null on a stream stored before the platform recorded a party for it.
transcripts.created_attruncatedWhether a collection above was cut at this read's per-collection limit of
500. When true, there is more than is shown here and this response is not
the whole set.
false means no collection hit that limit, and a collection that could
not be read in full fails the request rather than returning a short
answer. What false does not establish is that every recording made has
arrived: delivery into this store is asynchronous, so a recording made
moments ago can be absent from a complete read.
evaluated_atThe instant each collection's retention was decided at. Nothing here stays true because you are still holding the response. A recording can expire after it.
Recursos relacionados
Continúa con la documentación, guías y ejemplos de este tema.