Sign inGet Started

List a call's recordings and transcripts

GET
/v1/voice/calls/{call_id}/recordings
const inventory = await bird.voice.calls.recordings.list("vcs_01krdgeqcxet5s7t44vh8rt9mg");
for (const recording of inventory.recordings) {
  console.log(recording.leg_id, recording.id);
}
Antwort200
{
  "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.

Parameter

call_idstring

The call to read. Every leg carries its call's ID as call_id.

Antwort-Payload

media
array of object
erforderlich

The stored audio this read covers, each stream once.

Untergeordnete Attribute anzeigen
recordings
array of object
erforderlich

Each leg's view of that audio.

Untergeordnete Attribute anzeigen
recordings.id
string
erforderlich

Unique identifier for this view.

recordings.leg_id
string
erforderlich

The leg this view belongs to.

recordings.call_id
nullable string

null on a recording captured before calls existed.

recordings.number
string

The number associated with this recording view, when one was recorded. It can be an outbound destination. Omitted for numberless calls.

recordings.channel
string
erforderlich

It does not say whose voice it is.

Possible values: rx, tx

recordings.media_id
string
erforderlich

The stream this view refers to. A stream captured on another leg or omitted by retention or truncation may be absent from media in this response.

recordings.media_started_at
string
erforderlich

When the referenced stream started, which a view captured from the far leg does not share with its own started_at.

recordings.started_at
string
erforderlich
recordings.ended_at
nullable string
erforderlich

When capture ended, or null while capture is open or its end is unknown.

transcripts
array of object
erforderlich

Every transcription attempt over that audio, including failed ones.

Untergeordnete Attribute anzeigen
truncated
boolean
erforderlich

Whether 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_at
string
erforderlich

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

Weiter mit der Dokumentation, Anleitungen und Beispielen zu diesem Thema.