Recording resource
A Recording is the captured audio of a call, stored under your retention policy with AES-256-GCM envelope encryption at rest. Recordings are produced when a call is created with record enabled or when a call-control document records mid-call. You retrieve the audio through a short-lived signed URL — issued only on fetch and audited — and you can list, inspect or delete recordings through the API.
IllustrativeThe recording pipeline is real and shipping in TelVox Dial — recording modes (always / on-demand / never) with pause and resume, AES-256-GCM envelope encryption, S3 / local / SFTP backends, wav→mp3, filename templates with a masked phone tail, signed-URL audited playback (HIPAA REC-04) and a retention worker. The public REST shapes and field names below are developer preview and may change before GA. Base URL: https://api.telvox.dev.
Properties
The media_url is a short-lived signed URL issued only when you fetch a single recording; fetch the audio promptly and do not cache the URL. Every access is written to the append-only audit trail.
| Property | Type | Description |
|---|---|---|
| sid | string | Unique identifier for the recording, prefixed RE. |
| object | string | Always "recording". |
| call_sid | string | The SID of the call this recording belongs to. |
| status | enum | Lifecycle state — see the status enum below. |
| duration | integer | Recording length in seconds. Null until completed. |
| channels | integer | 1 for a mixed mono recording, 2 for dual-channel (each party on its own channel). |
| format | enum | Container of the stored media: wav or mp3. |
| encryption | string | Always "aes-256-gcm" — recordings are envelope-encrypted at rest. |
| storage_backend | enum | Where the media lives: s3, local, or sftp, per your account configuration. |
| media_url | string | Short-lived signed URL to fetch the audio. Issued on fetch, never embedded in lists; access is audited (HIPAA REC-04). |
| retention_until | string | ISO 8601 time after which the retention worker deletes this recording. |
| created_at | string | ISO 8601 time the recording was created. |
Status enum
The status field reports where a recording is in its lifecycle. The same values are delivered as recording_status on the callback below.
| Value | Type | Description |
|---|---|---|
| in-progress | status | The recording is actively capturing the call. |
| completed | status | The recording finished and the encrypted media is stored. |
| absent | status | No audio was captured (e.g. the call ended before recording started). |
| failed | status | The recording could not be completed or stored. |
Fetch a recording
Retrieve a single recording by its SID. The response includes a short-lived signed media_url for the audio.
/v1/recordings/{sid}Fetch one recording, including a signed media URL.
# illustrative — shape may differ at GA
curl https://api.telvox.dev/v1/recordings/RE2a7f9c1d4b6e8a0c3f5d7b9e1a2c4d6 \
-H "Authorization: Bearer $TELVOX_API_KEY"// illustrative — shape may differ at GA
{
"object": "recording",
"sid": "RE2a7f9c1d4b6e8a0c3f5d7b9e1a2c4d6",
"call_sid": "CA8f0e1d7c4b2a9f6e3d0c1b8a7f6e5d4",
"status": "completed",
"duration": 47,
"channels": 2,
"format": "mp3",
"encryption": "aes-256-gcm",
"storage_backend": "s3",
"media_url": "https://api.telvox.dev/media/RE2a7f…?sig=…&exp=1750612951",
"retention_until": "2026-12-22T00:00:00Z",
"created_at": "2026-06-22T17:04:58Z"
}List recordings
Return a paginated list of recordings, newest first, narrowed by the filters below. Signed media URLs are omitted from lists — fetch an individual recording to obtain one. See pagination for cursoring.
/v1/recordingsList recordings with optional filters and pagination.
| Query | Type | Description |
|---|---|---|
| call_sid | string | Return only recordings for this call. |
| status | enum | Filter by recording status, e.g. completed. |
| created_after | string | Return recordings created on or after this ISO 8601 timestamp. |
| created_before | string | Return recordings created on or before this ISO 8601 timestamp. |
| limit | integer | Page size, 1–100. Defaults to 50. |
| starting_after | string | Cursor — a recording SID to page forward from. |
# illustrative — shape may differ at GA
curl "https://api.telvox.dev/v1/recordings?call_sid=CA8f0e1d7c4b2a9f6e3d0c1b8a7f6e5d4" \
-H "Authorization: Bearer $TELVOX_API_KEY"// illustrative — media_url is omitted from lists; fetch a recording to get one
{
"object": "list",
"url": "/v1/recordings",
"has_more": false,
"next_cursor": null,
"data": [
{
"object": "recording",
"sid": "RE2a7f9c1d4b6e8a0c3f5d7b9e1a2c4d6",
"call_sid": "CA8f0e1d7c4b2a9f6e3d0c1b8a7f6e5d4",
"status": "completed",
"duration": 47,
"channels": 2,
"format": "mp3"
}
]
}Delete a recording
Permanently delete a recording and its encrypted media. The deletion is recorded in the audit trail and cannot be undone.
/v1/recordings/{sid}Delete a recording and its stored media.
# illustrative — shape may differ at GA
curl -X DELETE \
https://api.telvox.dev/v1/recordings/RE2a7f9c1d4b6e8a0c3f5d7b9e1a2c4d6 \
-H "Authorization: Bearer $TELVOX_API_KEY"// illustrative — no response body
HTTP/1.1 204 No ContentRecordingStatusCallback
Set a recording_status_callback when you start recording and Connect POSTs to that URL as the recording moves through its lifecycle. Respond 2xx promptly. Delivery is over the same signed, SSRF-safe egress that powers Dial — see webhooks & callbacks for signature verification.
| recording_status | Fires when |
|---|---|
| in-progress | Recording has started capturing the call. |
| completed | Recording finished; encrypted media is stored and ready to fetch. |
| absent | No audio was captured for the call. |
| failed | The recording could not be completed or stored. |
Callback payload
// illustrative — POST body delivered to your recording_status_callback
{
"recording_sid": "RE2a7f9c1d4b6e8a0c3f5d7b9e1a2c4d6",
"call_sid": "CA8f0e1d7c4b2a9f6e3d0c1b8a7f6e5d4",
"recording_status": "completed",
"duration": 47,
"channels": 2,
"timestamp": "2026-06-22T17:05:01Z"
}| Field | Type | Description |
|---|---|---|
| recording_sid | string | The SID of the recording this event is about. |
| call_sid | string | The SID of the call being recorded. |
| recording_status | enum | The status: in-progress, completed, absent, or failed. |
| duration | integer | Present on completed — recording length in seconds. |
| channels | integer | 1 (mixed mono) or 2 (dual-channel). |
| timestamp | string | ISO 8601 time the event fired. |