---
title: "Retrieve a Recording"
method: GET
path: "/Accounts/{AccountSid}/Recordings/{Sid}.json"
tags: ["Recordings"]
---

# Retrieve a Recording

`GET /Accounts/{AccountSid}/Recordings/{Sid}.json`

## Request

- Base URL: `https://YOUR_SPACE.signalwire.com/api/laml/2010-04-01`
- URL: `https://YOUR_SPACE.signalwire.com/api/laml/2010-04-01/Accounts/{AccountSid}/Recordings/{Sid}.json`
- Auth: HTTP basic

Retrieves one voice recording's metadata, such as duration, cost, and status. Use this account-level route for saved call or conference media; Video Room recordings are separate resources.

Request the recording URI with a `.json` extension to get the metadata.

`GET https://example.signalwire.com/api/laml/2010-04-01/Accounts/{AccountSid}/Recordings/{Sid}.json`

## Access

Access to the recording URI, for metadata and audio alike, follows the project's **Protect Recording Media URLs**
setting. New projects have it turned on. See [Media URL protection](/docs/platform/media-protection).

- **On:** authenticate with your Project ID and an API token that has the _Management_ scope. A request without
  valid credentials, or with a token that lacks the scope, gets a `401`.
- **Off:** anyone with the URI can retrieve the recording without authenticating, which lets external
  applications embed recording URLs without exposing your API credentials. Recording URIs contain long random
  IDs, which makes them difficult to guess unless you reveal them.

[Learn more about API scopes](/docs/platform/your-signalwire-api-space).

## Recording audio

The same recording URI also returns the recording audio, depending on the extension. Without an extension, the
response follows the request's `Accept` header: `application/json` returns the metadata, and a generic value such
as `*/*` returns the audio.

The audio URLs respond with a `302` redirect to the audio file, so your client must follow redirects. When the
recording has no audio to return, for example because its `status` isn't `completed`, they respond with `404`
and an empty body.

**Retrieve WAV file**

When a recording URI has a `.wav` extension, or no extension and a generic `Accept` header, the request
redirects to a WAV version of the recording file.

`GET https://example.signalwire.com/api/laml/2010-04-01/Accounts/{AccountSid}/Recordings/{Sid}.wav`

`GET https://example.signalwire.com/api/laml/2010-04-01/Accounts/{AccountSid}/Recordings/{Sid}`

**Retrieve MP3 file**

Setting an extension of ".mp3" on the URI redirects to an MP3 version
of the recording. For example:

`GET https://example.signalwire.com/api/laml/2010-04-01/Accounts/{AccountSid}/Recordings/{Sid}.mp3`

## Path parameters

- `AccountSid` string, uuid, required: Universal Unique Identifier.
- `Sid` string, uuid, required: Universal Unique Identifier.

## Response `200`

The request has succeeded.

- RecordingResponse: Response containing a single recording.
  - `sid` string, uuid, required: Universal Unique Identifier.
  - `account_sid` string, uuid, required: Universal Unique Identifier.
  - `api_version` string, required: The version of the SignalWire API.
  - `call_sid` string, uuid, required: Universal Unique Identifier.
  - `conference_sid` string, uuid, required: Universal Unique Identifier.
  - `channel` '1' | '2', required: The number of channels in a recording (singular key). Returns '1' for mono or '2' for stereo.
  - `channels` '1' | '2', required: The number of channels in a recording. Returns '1' for mono or '2' for stereo.
  - `date_created` string, required: The date, in RFC 2822 format, this recording was created.
  - `date_updated` string, required: The date, in RFC 2822 format, this recording was updated.
  - `start_time` string, nullable, required: The time, in RFC 2822 format, this recording started.
  - `end_time` string, nullable, required: The time, in RFC 2822 format, this recording ended.
  - `duration` integer, required: The length, in seconds, of the recording.
  - `price` number, double, required: The cost of the recording.
  - `price_unit` string, required: The currency of the price of the recording.
  - `source` 'DialVerb' | 'Queue' | 'RecordVerb' | 'StartCallRecordingAPI' | 'Conference', required: How the recording was started. - `DialVerb`: the recording settings on `<Dial>`, including a `<Dial>` that connects to a `<Conference>`. - `Queue`: the recording settings on a `<Dial>` that connects to a `<Queue>`. - `RecordVerb`: the `<Record>` verb. - `StartCallRecordingAPI`: a request to create a recording on an active call. - `Conference`: a recording of a conference.
  - `status` 'queued' | 'in-progress' | 'paused' | 'resumed' | 'completed' | 'absent' | 'stopped', required: Recording status.
  - `error_code` string, nullable, required: Further details about a failed recording.
  - `uri` string, required: The URI of the recording.
  - `subresource_uris` RecordingSubresourceUris, required: Recording subresource URIs.
    - `transcriptions` string, required: The URI for transcriptions.
  - `encryption_details` string, nullable, required: Encryption details. Always null.
  - `trim` string, nullable, required: Whether leading and trailing silence is trimmed from a recording: `trim-silence` or `do-not-trim`. Can be null, for example on conference recordings.

## Other responses

- `400`: The request was invalid or cannot be processed. Check the error details for more information.
- `401`: Authentication failed. Please verify your credentials and try again. The body is usually the plain text `Unauthorized`. If your Space hasn't verified a phone number yet, the body is JSON instead: `{"message": "Please validate a phone number to access your account."}`.
- `404`: The requested resource was not found. Please verify the resource identifier.

## Changes

- **2026-10-29** `d09479744b3d`: 1 breaking, 1 info
  - removed the media type `application/json` for the response with the status `401`
  - added the media type `text/plain` for the response with the status `401`
- **2026-10-29** `29659db8352c`: 2 info
  - removed `#/components/schemas/RecordingSource` from the `source` response property `allOf` list for the response status `200`
  - added `#/components/schemas/RecordingSource, subschema #2` to the `source` response property `anyOf` list for the response status `200`
- **2026-10-29** `d2ecf7cc758f`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/signalwire/apis/compatibility-api/changes/Accounts/:AccountSid/Recordings/:Sid.json/get.md)

---

[API](https://skmtc.dev/signalwire/apis/compatibility-api.md) - [All operations](https://skmtc.dev/signalwire/apis/compatibility-api/llms.txt) - [OpenAPI document](https://skmtc.dev/signalwire/apis/compatibility-api/revisions/d09479744b3d?raw)
