Get a call recording
GET
https://api.voice-agent.gowajee.ai/api/call/:callId/record-urlReturns two fresh links to the call’s audio: one to play in a browser, and one to download as a file.
Path parameters
Section titled “Path parameters”| Name | Description |
|---|---|
callId |
The call ID. |
Request
Section titled “Request”curl "https://api.voice-agent.gowajee.ai/api/call/fc1c320d-d133-4d48-8118-5932d93149fd/record-url" \ -H "X-API-Key: $GOWAJEE_API_KEY"
# Download the filecurl -L -o recording.wav "<downloadUrl from the response>"const res = await fetch(`https://api.voice-agent.gowajee.ai/api/call/${callId}/record-url`, { headers: { 'X-API-Key': process.env.GOWAJEE_API_KEY },});const body = await res.json();if (res.ok) { const audio = await fetch(body.downloadUrl).then((r) => r.arrayBuffer());} else if (body.code === 'RECORDING_DELETED') { console.log('Recording deleted at', body.expiredAt);}res = requests.get( f"https://api.voice-agent.gowajee.ai/api/call/{call_id}/record-url", headers={"X-API-Key": os.environ["GOWAJEE_API_KEY"]}, timeout=30,)info = res.json()if res.ok: with open("recording.wav", "wb") as f: f.write(requests.get(info["downloadUrl"], timeout=120).content)elif info["code"] == "RECORDING_DELETED": print("Recording deleted at", info["expiredAt"])Response
Section titled “Response”This endpoint returns its fields at the top level. There is no data wrapper.
{ "success": true, "recordUrl": "https://storage.example.com/recordings/fc1c320d.wav?X-Amz-Expires=3600&X-Amz-Signature=...", "downloadUrl": "https://storage.example.com/recordings/fc1c320d.wav?response-content-disposition=attachment...&X-Amz-Signature=..."}{ "success": false, "statusCode": 410, "code": "RECORDING_DELETED", "message": "Recording deleted by data retention policy", "errors": ["Recording deleted by data retention policy"], "expiredAt": "2026-12-30T02:13:58.592Z"}{ "success": false, "statusCode": 404, "code": "RECORDING_NOT_FOUND", "message": "No recording available for this call", "errors": ["No recording available for this call"]}| Field | Type | Description |
|---|---|---|
success |
boolean | true on 200. |
recordUrl |
string | A link to play the recording (opens in the browser). |
downloadUrl |
string or null |
A link that downloads the file as recording-<callId>.<ext>. |
Errors
Section titled “Errors”The body is the usual error envelope.
| Status | code |
message |
Cause |
|---|---|---|---|
400 |
INVALID_ID |
callId must be a valid UUID |
The ID in the path isn’t a UUID. |
404 |
CALL_NOT_FOUND |
Call not found |
Wrong callId, or the call belongs to another organization. |
404 |
RECORDING_NOT_FOUND |
No recording available for this call |
The call has no audio, for example NO_ANSWER, BUSY, or a call still in progress. |
410 |
RECORDING_DELETED |
Recording deleted by data retention policy |
The recording was deleted by your data-retention policy, or because its campaign was deleted. expiredAt says when (UTC), or is null if unknown. It won’t come back. |