Skip to main content

Recordings

Tags: recordings, voice

Download recorded voice calls. Audio is only available when the workspace has Enable Audio Recording turned on and the call completed with stored audio. Recorded call audio may contain protected health information (PHI); treat it with the same care as any other patient data.

Endpoints

Download Recording

GET /api/v2/w/{workspace_uuid}/recordings/chat/{chat_id}/audio.wav

Description:

Download a completed call recording as a single WAV file

Returns the full call for chat_id as one standard WAV file, assembled from the stored audio onto a single timeline (overlapping speech is mixed). The result is suitable for any HTML5 audio player or wavesurfer.js. You only need the chat ID — no chunk enumeration or storage keys are involved.

For API integrations, prefer GET /chat/{chat_id}/download-url so large recording downloads do not stream through the Gravity Rail API process.

Manager-owned and direct-message chats stay private to their participants: a caller who is not a participant receives 403 Forbidden for those chats even with the chats:read scope.

Returns 404 Not Found when no audio is stored for the chat (recording was off, the call was too short, or the chat is not a voice chat).

Authorization: Requires chats:read scope

Parameters:

  • chat_id (Integer)

Get Download URL

GET /api/v2/w/{workspace_uuid}/recordings/chat/{chat_id}/download-url

Description:

Get a short-lived URL for a completed call recording

Return a short-lived presigned URL for downloading a completed call recording as one WAV file. This is the recommended integration endpoint for workflows such as "call ended → download the recording": your client downloads the bytes directly from object storage instead of streaming them through the Gravity Rail API.

The first request for a chat assembles the recording from stored audio chunks and caches the full-call WAV in workspace-scoped storage. Later requests reuse that cached object and only mint a fresh presigned URL.

The expires_in query parameter (seconds) is optional; Gravity Rail caps it at the server-configured maximum and defaults to 3600 seconds.

Manager-owned and direct-message chats stay private to their participants: a caller who is not a participant receives 403 Forbidden for those chats even with the chats:read scope.

Returns 404 Not Found when no audio is stored for the chat (recording was off, the call was too short, or the chat is not a voice chat).

Authorization: Requires chats:read scope

Parameters:

  • chat_id (Integer)
  • expires_in (Integer)

Response: See CallRecordingDownloadUrlResponse