Fetch a recording
The call recording.
The call recording.
Returns the URL by default so a client can hand it to a player, store it, or
fetch it on its own schedule. Pass redirect=true to be sent straight to
the audio with a 302 — useful for an <audio src> tag.
The audio bytes are never proxied through this API; the URL points at the storage that already holds them.
Two different 404s, deliberately distinguished: "Call not found." means no such execution in your organization, while "No recording is available for this execution." means the call is real but produced no audio — it was never answered, recording was disabled for it, or it has not finished yet.
Rate limit: 600 requests per minute per organization (bucket executions.list). Exceeding it returns 429 with Retry-After; the X-RateLimit-* response headers report your remaining allowance on every call.
v2/calls/{execution_id}/recordingAuthorization
AuthorizationRequiredBearer <token>
Your Graine API key. Create one in the dashboard under Developers, or via POST /v2/api-keys. Send it as Authorization: Bearer <key>.
In: header
Path Parameters
execution_idRequiredExecution Id
The call's id, as returned by POST /v2/calls or GET /v2/calls.
Query Parameters
redirectRedirect
Redirect (302) straight to the audio instead of returning its URL.
falseorganization_idOrganization Id
Optional. Must equal your key's organization.
Response Body
200
Where to fetch the audio.
execution_idRequiredExecution Id
The call this audio belongs to.
recording_urlRequiredRecording Url
Fetch the audio here. The bytes are never proxied through this API.
content_typeContent Type
MIME type of the audio.
"audio/wav"expires_atExpires At | null
Reserved. Currently always null — recording URLs do not expire.
401
1100 — missing, unknown or inactive API key. 1101 — a browser session token was presented instead of an API key.
errorRequiredError
Stable integer code from the /v2 error table. Branch on this.
messageRequiredMessage
One human-readable sentence. Wording may change; the code will not.
403
1102 — the key is valid but lacks the scope this endpoint requires, or names another organization. GET /v2/scopes reports what a key holds.
errorRequiredError
Stable integer code from the /v2 error table. Branch on this.
messageRequiredMessage
One human-readable sentence. Wording may change; the code will not.
404
1200 — two distinct cases, told apart by the message: 'Call not found.' means no such execution in your organization, while 'No recording is available for this execution.' means the call is real but produced no audio.
errorRequiredError
Stable integer code from the /v2 error table. Branch on this.
messageRequiredMessage
One human-readable sentence. Wording may change; the code will not.
422
1001 — the body or query failed validation; the message names the first offending field.
errorRequiredinteger
Stable integer code from the error table. Branch on this, not on the message.
messageRequiredstring
One human-readable sentence. Wording may change; the code will not.
429
1300 — the per-organization request rate or concurrent-call limit was reached. Carries Retry-After.
errorRequiredError
Stable integer code from the /v2 error table. Branch on this.
messageRequiredMessage
One human-readable sentence. Wording may change; the code will not.
503
1501 — a service this endpoint depends on is unreachable or returned a 5xx.
errorRequiredError
Stable integer code from the /v2 error table. Branch on this.
messageRequiredMessage
One human-readable sentence. Wording may change; the code will not.
Where to fetch the audio.

