---
title: "Get a time-limited recording download URL"
method: GET
path: "/conversation/{callId}/recording/download-url"
tags: ["Conversations"]
---

# Get a time-limited recording download URL

`GET /conversation/{callId}/recording/download-url`

## Request

- Base URL: `https://api.smallest.ai/atoms/v1`
- URL: `https://api.smallest.ai/atoms/v1/conversation/{callId}/recording/download-url`
- Auth: HTTP bearer

Returns a presigned S3 URL for the call's recording. Hand the URL straight to the customer or pull bytes server-side. The presigned URL is **time-limited** — typically usable for a few minutes — so don't cache it; request a fresh one each time you need the recording.

Returns `404` if the call has no recording (call hasn't started, was cancelled before audio captured, or was deleted by the platform's retention policy). Returns `400 Invalid call ID format` if you pass a Mongo `_id` instead of the `callId` string.

## Path parameters

- `callId` string, required

## Response `200`

Successful response — presigned URL ready to fetch.

- object
  - `status` boolean
  - `data` object
    - `presignedUrl` string, uri: Time-limited HTTPS URL pointing at the recording in S3. The URL expires after a short window; request a fresh one if needed.

## Other responses

- `400`: Invalid call ID format.
- `401`: Unauthorized access
- `404`: No recording found for this call.
- `500`: Internal server error

## Changes

- **2026-09-01** `49ce8525306e`: 1 breaking
  - added the pattern `^CALL-\d{13}-[a-fA-F0-9]{6}$` to the `path` request parameter `callId`
- **2026-06-17** `ee98cf1af6bc`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/smallest-inc/apis/agent-management-api/changes/conversation/:callId/recording/download-url/get.md)

---

[API](https://skmtc.dev/smallest-inc/apis/agent-management-api.md) - [All operations](https://skmtc.dev/smallest-inc/apis/agent-management-api/llms.txt) - [OpenAPI document](https://skmtc.dev/smallest-inc/apis/agent-management-api/revisions/fed4f750ea02?raw)
