GEThttps://core-api.heysadie.ai/turn-flags/calls/{callId}/recording-url
callId success data url expiresAt channels callerChannel metadata timestamp version path error code message details fieldGet a call's recording URL
A presigned GET for the call's recording, valid 10 minutes (`expiresAt`). To play one line, load `url#t=<start>,<end>` in an audio element, with start = `audio.startSeconds - 0.75` and end = `audio.endSeconds + 0.75`, clamped to the recording: the margins the transcribers heard around the line. On a stereo recording the caller is on `callerChannel` 1 (right). Reuse the URL for every line of the call, and fetch a new one shortly before `expiresAt`. Errors: 404 RESOURCE_NOT_FOUND when the call is not in the organization or has no recording this API can sign. 500 RECORDINGS_NOT_CONFIGURED when this deployment cannot sign recording URLs.
Try it in the API ExplorerExample request
curl "https://core-api.heysadie.ai/turn-flags/calls/CALL_ID/recording-url" \
-H "Authorization: ApiKey YOUR_API_KEY"Authentication
Authenticate with an API key in the Authorization header using the ApiKey scheme. See Authentication for how keys work and where to get them.
AuthorizationstringrequiredAPI key in the ApiKey scheme: ApiKey YOUR_API_KEY. Tenant keys authorize their own tenant; organization keys can act on any tenant in the organization.
X-Tenant-Idstring (uuid)optionalRequired when authenticating with an organization key: it selects the tenant the request acts on. Omit with tenant keys.
Request
Path parameters
callIdstringrequiredA call of the organization
Responses
successbooleanrequiredtrue on every 2xx
dataobjectoptionalThe result
Show 4 child properties
urlstringrequiredPresigned GET for the whole recording. To play one line, load `url#t=<start>,<end>` with start = `audio.startSeconds - 0.75` and end = `audio.endSeconds + 0.75`, clamped to the recording
expiresAtstring (date-time) | string (date) | numberrequiredWhen `url` stops working, 10 minutes after issue. Fetch a new one before then; a player streaming by range requests needs it valid until the clip ends
channelsenumrequiredstereo: agent left, caller right. mono: both mixed
"stereo""mono"callerChannelenumrequiredThe channel index carrying the caller: 1 (right) for stereo, 0 for mono
01metadataobjectoptionalRequest metadata
Show 3 child properties
timestampstringrequiredWhen the server answered, ISO 8601 UTC
versionstringrequiredAPI version
pathstringoptionalThe URL that was requested
400VALIDATION_ERROR: a path id, query parameter or body field broke a rule; `details` lists each `field` and its `message`. A body with a missing field or a JSON type the schema does not allow answers 400 with code INTERNAL_SERVER_ERROR and no `details` instead, so branch on the status
successbooleanrequiredfalse on every error
errorobjectoptionalWhat went wrong: a stable `code` to branch on and a human-readable `message`
Show 3 child properties
codeenumrequiredA parameter or body field broke a rule
"VALIDATION_ERROR"messagestringrequiredHuman-readable explanation. Do not parse it; branch on `code`
detailsobject[]optionalOne entry per field that failed
Show 2 item properties
fieldstringrequiredThe offending field
messagestringrequiredThe rule it broke
metadataobjectoptionalRequest metadata
Show 3 child properties
timestampstringrequiredWhen the server answered, ISO 8601 UTC
versionstringrequiredAPI version
pathstringoptionalThe URL that was requested
401UNAUTHORIZED: no valid credentials, or a dashboard token that names no organization. Send `Authorization: ApiKey <organization API key>`
successbooleanrequiredfalse on every error
errorobjectoptionalWhat went wrong: a stable `code` to branch on and a human-readable `message`
Show 2 child properties
codeenumrequiredNo valid credentials
"UNAUTHORIZED"messagestringrequiredHuman-readable explanation. Do not parse it; branch on `code`
metadataobjectoptionalRequest metadata
Show 3 child properties
timestampstringrequiredWhen the server answered, ISO 8601 UTC
versionstringrequiredAPI version
pathstringoptionalThe URL that was requested
403ORG_SCOPE_REQUIRED: transcriber testing is an organization feature. Use an organization API key without `X-Tenant-Id`, or a dashboard token scoped to the organization. A tenant API key, an organization key sent with `X-Tenant-Id` for one of its tenants, or a token carrying a tenant gets this 403. FORBIDDEN: an organization key sent `X-Tenant-Id` for a tenant outside its organization
successbooleanrequiredfalse on every error
errorobjectoptionalWhat went wrong: a stable `code` to branch on and a human-readable `message`
Show 2 child properties
codeenumrequiredORG_SCOPE_REQUIRED: the credentials carry a tenant scope. FORBIDDEN: an organization key sent `X-Tenant-Id` for a tenant outside its organization
"ORG_SCOPE_REQUIRED""FORBIDDEN"messagestringrequiredHuman-readable explanation. Do not parse it; branch on `code`
metadataobjectoptionalRequest metadata
Show 3 child properties
timestampstringrequiredWhen the server answered, ISO 8601 UTC
versionstringrequiredAPI version
pathstringoptionalThe URL that was requested
404RESOURCE_NOT_FOUND: an id in the path, query or body names nothing in the caller's organization. `message` names what, e.g. "Transcriber bank not found"
successbooleanrequiredfalse on every error
errorobjectoptionalWhat went wrong: a stable `code` to branch on and a human-readable `message`
Show 2 child properties
codeenumrequiredAn id names nothing the caller can see
"RESOURCE_NOT_FOUND"messagestringrequiredHuman-readable explanation. Do not parse it; branch on `code`
metadataobjectoptionalRequest metadata
Show 3 child properties
timestampstringrequiredWhen the server answered, ISO 8601 UTC
versionstringrequiredAPI version
pathstringoptionalThe URL that was requested
500A server error. RECORDINGS_NOT_CONFIGURED: this deployment cannot sign recording URLs
successbooleanrequiredfalse on every error
errorobjectoptionalWhat went wrong: a stable `code` to branch on and a human-readable `message`
Show 2 child properties
codeenumrequiredRECORDINGS_NOT_CONFIGURED: the server has no recordings bucket. INTERNAL_SERVER_ERROR: any other failure
"INTERNAL_SERVER_ERROR""RECORDINGS_NOT_CONFIGURED"messagestringrequiredHuman-readable explanation. Do not parse it; branch on `code`
metadataobjectoptionalRequest metadata
Show 3 child properties
timestampstringrequiredWhen the server answered, ISO 8601 UTC
versionstringrequiredAPI version
pathstringoptionalThe URL that was requested