---
title: "Get a leg recording's audio"
canonical: "https://bird.com/docs/api/reference/get-voice-leg-recording-audio"
---

# Get a leg recording's audio

`GET /v1/voice/legs/{leg_id}/recordings/{recording_id}/audio`

Redirects to a short-lived URL for this recording's audio.

The bytes live in object storage and are served straight from there, so
they never transit the API and no list response carries a link to them.
Each request to this operation signs a fresh one.

The response is a `302` whose `Location` is that pre-authorized storage
URL, valid for 15 minutes, so your client must follow redirects. The
`Authorization` header has to be absent from the request that fetches that
URL. A client that attaches credentials centrally, at its transport,
interceptor or middleware layer rather than per request, re-adds the header
on every hop including the redirect, so the storage URL needs a client that
carries none. With curl, use version 7.58.0 or later when following the
redirect: earlier versions forward custom authorization headers to other hosts.

Treat the URL as secret for as long as it lasts. Anyone holding one can
hear the audio.

Audio download is available for 30 days after the source audio starts.
The API returns `404` after that cutoff without issuing a storage URL.

An in-progress capture can appear in the inventory with its media stream
listed as open. This operation answers `425` while its audio is not ready.
If capture metadata is delayed, the recording may not appear immediately.
A recording whose capture failed has no audio to serve and answers `404`.
Its transcript, if one ran, stays readable.

Answers `501` where the workspace's region has no voice media store
configured. The audio has nowhere to be read from there.

## Servers

- `https://{region}.platform.bird.com`: Regional API endpoint. Use the host for the region your organization is hosted in. Official Bird SDKs and the CLI select it automatically from your API key, so you rarely need to set it by hand.
  - `region`: `us1`, `eu1`. Default: `us1`. The region your organization's data is hosted in.

## Authentication

Use one authentication option:

- `BearerAuth`: HTTP bearer authentication. Pass the API key as a bearer token in the `Authorization` header. Workspace
keys use `bk_{region}_*`; organization master keys use `bm_{region}_*`.
The prefix identifies the region and selects the
API endpoint. Official Bird SDKs and the CLI derive the region from the key.

## Code samples

**TypeScript**

```ts
const audio = await bird.voice.legs.recordings.audio(
  "vcl_01krdgeqcxet5s7t44vh8rt9mg",
  "vrc_01krdgeqcxet5s7t44vh8rt9mg",
);
console.log(audio.contentType, audio.contentLength);
```

Examples: [TypeScript](/docs/api/reference/get-voice-leg-recording-audio.ts.md) · [Python](/docs/api/reference/get-voice-leg-recording-audio.py.md) · [Go](/docs/api/reference/get-voice-leg-recording-audio.go.md) · [PHP](/docs/api/reference/get-voice-leg-recording-audio.php.md) · [CLI](/docs/api/reference/get-voice-leg-recording-audio.cli.md) · [MCP](/docs/api/reference/get-voice-leg-recording-audio.mcp.md) · [cURL](/docs/api/reference/get-voice-leg-recording-audio.curl.md)

## Path parameters

- `leg_id` (string, required): The leg the recording belongs to.
- `recording_id` (string, required): The `id` of an entry in `recordings` from [`listVoiceCallRecordings`](/docs/api/reference/list-voice-call-recordings).

## Query parameters

- `disposition` (string, optional)

  Whether the signed URL plays the audio or saves it. `inline`, the default, streams it in a browser. `attachment` asks the browser to save it under a filename naming the recording and when it started.

  Possible values: `inline`, `attachment`

## Header parameters

- `X-Workspace-Id` (string, optional): Workspace context for the request. Required for dashboard authentication and master keys. Workspace keys and access tokens already identify their workspace; send that workspace or omit the header. A different one is rejected.
- `X-Organization-Id` (string, optional): Organization context for the request. Required for dashboard authentication. An API key or access token carries its own organization, so send either that organization or no header at all; a different one is rejected.

## Related resources

- [Should I use a Bird SDK or call the API directly?](/explained/platform/should-i-use-an-sdk-or-call-the-api-directly) (answer)
- [Build your first integration](/learn/paths/integration) (course)
- [Send your first email](/docs/get-started/send-your-first-email) (docs)

[Get an implementation brief](/learn/workspace?topic=api-basics)
