curl "https://api.bota.dev/v1/recordings/rec_abc123/download-url" \
-H "Authorization: Bearer sk_live_..."
const response = await fetch('https://api.bota.dev/v1/recordings/rec_abc123/download-url', {
headers: {
'Authorization': 'Bearer sk_live_...',
},
});
const { download_url, expires_in } = await response.json();
import requests
response = requests.get(
'https://api.bota.dev/v1/recordings/rec_abc123/download-url',
headers={'Authorization': 'Bearer sk_live_...'},
)
download_url = response.json()['download_url']
{
"download_url": "https://bota-uploads.s3.amazonaws.com/...",
"expires_in": 3600,
"content_type": "audio/ogg",
"file_size_bytes": 48575
}
{
"error": {
"code": "bad_request",
"message": "Invalid format. Must be \"wav\", \"mp3\", \"m4a\", \"flac\", or \"opus\"."
}
}
Uploads
Get Download URL
Generate a pre-signed URL to download recording audio
GET
/
recordings
/
{id}
/
download-url
curl "https://api.bota.dev/v1/recordings/rec_abc123/download-url" \
-H "Authorization: Bearer sk_live_..."
const response = await fetch('https://api.bota.dev/v1/recordings/rec_abc123/download-url', {
headers: {
'Authorization': 'Bearer sk_live_...',
},
});
const { download_url, expires_in } = await response.json();
import requests
response = requests.get(
'https://api.bota.dev/v1/recordings/rec_abc123/download-url',
headers={'Authorization': 'Bearer sk_live_...'},
)
download_url = response.json()['download_url']
{
"download_url": "https://bota-uploads.s3.amazonaws.com/...",
"expires_in": 3600,
"content_type": "audio/ogg",
"file_size_bytes": 48575
}
{
"error": {
"code": "bad_request",
"message": "Invalid format. Must be \"wav\", \"mp3\", \"m4a\", \"flac\", or \"opus\"."
}
}
Generate a pre-signed S3 URL for downloading a recording’s uploaded audio.
For a standalone server-side workflow, use the
Node.js download example.
It checks recording scope, keeps the API credential off the storage request,
bounds downloaded bytes and refuses to overwrite an existing local file.
It requests original stored bytes without conversion or enhancement; it does not
decrypt device audio or infer integrity from URL issuance. An optional expected
SHA-256 must come from a source you trust.
Authentication
Requires an API key withrecordings:read scope.
curl "https://api.bota.dev/v1/recordings/rec_abc123/download-url" \
-H "Authorization: Bearer sk_live_..."
const response = await fetch('https://api.bota.dev/v1/recordings/rec_abc123/download-url', {
headers: {
'Authorization': 'Bearer sk_live_...',
},
});
const { download_url, expires_in } = await response.json();
import requests
response = requests.get(
'https://api.bota.dev/v1/recordings/rec_abc123/download-url',
headers={'Authorization': 'Bearer sk_live_...'},
)
download_url = response.json()['download_url']
Path Parameters
string
required
The recording’s unique identifier.
Query Parameters
string
Optional export format. Supported values are
opus, wav, mp3, m4a, and flac.boolean
When
true, return the enhanced audio version if available. If format is supplied, this defaults to true; otherwise it defaults to false.Response
Returns a pre-signed S3 download URL and its lifetime in seconds.{
"download_url": "https://bota-uploads.s3.amazonaws.com/...",
"expires_in": 3600,
"content_type": "audio/ogg",
"file_size_bytes": 48575
}
{
"error": {
"code": "bad_request",
"message": "Invalid format. Must be \"wav\", \"mp3\", \"m4a\", \"flac\", or \"opus\"."
}
}
Response Fields
| Field | Type | Description |
|---|---|---|
download_url | string | Pre-signed S3 URL for downloading the file |
expires_in | integer | Number of seconds before the URL expires |
content_type | string | null | MIME type of the downloaded object |
file_size_bytes | integer | null | File size in bytes, when known |
The pre-signed URL can be used directly with a plain
GET request. If it expires, request a new URL.Was this page helpful?

