DialerBee APIv1 · 1.0.0-rc6

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

NameInTypeRequiredDescription
call_idpathstring (CallId)yes
Rangeheaderstringno
X-Correlation-IDheaderstringnoYour 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.

HeaderMeaning
X-Request-IDThe 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-ControlAlways 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

StatusCodeTitle
401invalid_api_keyInvalid API key
403api_access_disabledAPI access disabled
403ip_not_allowedIP address not allowed
403insufficient_scopeNot permitted
400credential_in_urlCredential in URL
400, 422validation_failedInvalid request
404not_foundNot found
410recording_deletedRecording deleted
403recording_on_legal_holdRecording on legal hold
429rate_limit_exceededToo many requests
503temporarily_unavailableTemporarily unavailable
503upstream_unavailableTemporarily unavailable
502upstream_invalid_responseUpstream error
500internal_errorInternal error