Calls
The call's newest playable recording, streamed
GET /v1/calls/{call_id}/recording
- Scope
recordings:read- Tier
- Tier 1
- Data
- Sensitive personal data
- Idempotency
- Idempotency-Key: not used
The audio is streamed through the API; no storage URL is ever issued. One bytes= range is supported and answered 206. 410 recording_deleted when retention removed the audio; 403 recording_on_legal_hold; 404 not_found when the call has no playable recording.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
call_id | path | string (CallId) | yes | |
Range | header | string | no | |
X-Correlation-ID | header | string | no | Your own trace value, logged with the request. Metadata only, never identity. (min length 1; max length 128) |
Response
200: The whole recording.
206: The requested byte range.
| Header | Meaning |
|---|---|
X-Request-ID | The DialerBee request id. Quote it to support. Every response carries X-Request-ID: req_<ULID>, or edge_<32 hex> when the edge answered before the request reached the API. |
Cache-Control | Always no-store. |
Accept-Ranges | |
Content-Length |
Examples
Request example
curl
curl -sS -X GET \
"https://app.dialerbee.com/api/v1/calls/call_0f8fad5b-d9cb-469f-a165-70867728950e/recording" \
-H "Authorization: Bearer $DIALERBEE_API_KEY" \
--output call-recording
Python (SDK)
from dialerbee import DialerBee
db = DialerBee() # reads DIALERBEE_API_KEY from the environment
audio = db.calls.recording("call_0f8fad5b-d9cb-469f-a165-70867728950e")
# audio.write_to("call-recording") # or db.calls.stream_recording(...) for large files
Response example
200: the audio itself (audio/mpeg, audio/wav, audio/ogg), streamed. Send a Range: bytes=start-end header to get part of it (206).
Error examples
410 recording_deleted
{
"type": "https://docs.dialerbee.com/errors/recording-deleted",
"title": "Recording deleted",
"status": 410,
"detail": "The recording was deleted by the account's retention setting.",
"instance": "urn:dialerbee:request:req_01K6BZ3M9X4T7Q2V8N5R6P1W0C",
"code": "recording_deleted",
"request_id": "req_01K6BZ3M9X4T7Q2V8N5R6P1W0C"
}
403 recording_on_legal_hold
{
"type": "https://docs.dialerbee.com/errors/recording-on-legal-hold",
"title": "Recording on legal hold",
"status": 403,
"detail": "The recording is under legal hold and cannot be accessed through the API.",
"instance": "urn:dialerbee:request:req_01K6BZ3M9X4T7Q2V8N5R6P1W0C",
"code": "recording_on_legal_hold",
"request_id": "req_01K6BZ3M9X4T7Q2V8N5R6P1W0C"
}
403 insufficient_scope
{
"type": "https://docs.dialerbee.com/errors/insufficient-scope",
"title": "Not permitted",
"status": 403,
"detail": "The API client does not hold the scope this operation requires.",
"instance": "urn:dialerbee:request:req_01K6BZ3M9X4T7Q2V8N5R6P1W0C",
"code": "insufficient_scope",
"request_id": "req_01K6BZ3M9X4T7Q2V8N5R6P1W0C"
}
Errors
| Status | Code | Title |
|---|---|---|
| 401 | invalid_api_key | Invalid API key |
| 403 | api_access_disabled | API access disabled |
| 403 | ip_not_allowed | IP address not allowed |
| 403 | insufficient_scope | Not permitted |
| 400 | credential_in_url | Credential in URL |
| 400, 422 | validation_failed | Invalid request |
| 404 | not_found | Not found |
| 410 | recording_deleted | Recording deleted |
| 403 | recording_on_legal_hold | Recording on legal hold |
| 429 | rate_limit_exceeded | Too many requests |
| 503 | temporarily_unavailable | Temporarily unavailable |
| 503 | upstream_unavailable | Temporarily unavailable |
| 502 | upstream_invalid_response | Upstream error |
| 500 | internal_error | Internal error |