Skip to navigation

Retrieve a call recording

View as Markdown

Streams the call’s recording from the voice provider, normally as audio/mpeg, with the provider’s Content-Length when known. Offer it when the call’s has_recording is true; the bytes are proxied on demand and never stored by Jelliu.

A 404 carries an X-Recording-Status header when the provider has no audio: processing (the call is recent; retry in a minute) or expired (older than about 13 days, past the provider’s retention window; it will not come back). A call that never reached the voice provider returns 404 without the header.

Consistency. Sent with Cache-Control: private, max-age=300. The upstream fetch is attempted every time, whatever the call’s age.

Idempotency. Read-only; safe to retry. If the stream breaks mid-way the response simply ends; request it again.

Access

  • Required scope: read (or write).
  • Rate limit: General API — 120 (Starter), 200 (Growth), 300 (Business) or 600 (Enterprise) requests/min per workspace. The 20/min outbound limit does not apply to this route, so a player’s range requests do not spend it. See Rate limits.
  • Plan: Available on every plan.

Authentication

AuthorizationBearer

Workspace API key: jl_ followed by 64 lowercase hex characters, created by the workspace owner in the dashboard (Settings → API Keys) and sent as Authorization: Bearer jl_.... The plaintext is shown once, at creation; Jelliu stores only a SHA-256 hash. A workspace can hold up to 25 active keys.

ScopeGET / HEADPOST / PUT / PATCH / DELETEAdmin-only routes
readYesNoNo
writeYesYesNo
fullYesYesYes

Operations restricted to admins or owners reject keys without the full scope with 403, and say so in their description. No key, whatever its scope, can mint or revoke API keys or rotate a webhook secret — that requires a signed-in owner session. A revoked key stops authenticating within about 10 seconds. See Authentication.

Path parameters

callIdstringRequiredformat: "uuid"

The call’s id. Must be a UUID (400 Invalid call ID otherwise).

Response headers

Cache-ControlstringOptional

Always private, max-age=300.

Response

The audio bytes.

Errors

400
Bad Request Error
401
Unauthorized Error
403
Forbidden Error
404
Not Found Error
429
Too Many Requests Error