---
title: "Get a call recording"
method: GET
path: "/v1/voice/calls/{id}/recording"
tags: ["Voice"]
---

# Get a call recording

`GET /v1/voice/calls/{id}/recording`

## Request

- Base URL: `https://zernio.com/api`
- URL: `https://zernio.com/api/v1/voice/calls/{id}/recording`
- Auth: HTTP bearer

Resolves a fresh, playable MP3 URL for the call's recording
(provider-signed URLs expire ~10 minutes after signing, so this
endpoint re-signs on demand). Default responds `302 Found` redirecting
to the fresh URL; pass `as=json` to receive `{ url }` instead.

## Path parameters

- `id` string, required

## Query parameters

- `as` 'json'

## Response `200`

Recording URL (`as=json` only).

- object
  - `url` string

## Other responses

- `302`: Redirect to a freshly-signed recording URL.
- `401`: Missing or invalid API key. `code` is `missing_credentials` when no Authorization header was sent and `invalid_credentials` when the key is unknown, revoked or expired.
- `404`: Call not found, or no recording is available for this call
- `502`: Recording provider lookup failed

## Changes

- **2026-10-06** `f8c8f34fb41a`: 1 warning
  - added the new `account` enum value to the `details/budgetScope` response property for the response status `401`
- **2026-10-02** `d556591af3f6`: 7 info
  - added the optional property `code` to the response with the `401` status
  - added the optional property `details` to the response with the `401` status
  - added the optional property `docUrl` to the response with the `401` status
  - added the optional property `param` to the response with the `401` status
  - …3 more

[Operation history](https://skmtc.dev/zernio/apis/zernio-api/changes/v1/voice/calls/:id/recording/get.md)

---

[API](https://skmtc.dev/zernio/apis/zernio-api.md) · [All operations](https://skmtc.dev/zernio/apis/zernio-api/llms.txt) · [OpenAPI document](https://skmtc.dev/zernio/apis/zernio-api/revisions/4e74db179e73?raw)
