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:** Outbound — 20 requests/min per workspace, shared by every `/api/calls` endpoint. See [Rate limits](/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. | Scope | GET / HEAD | POST / PUT / PATCH / DELETE | Admin-only routes | | --- | --- | --- | --- | | `read` | Yes | No | No | | `write` | Yes | Yes | No | | `full` | Yes | Yes | Yes | 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](/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