Skip to main content
A recording pairs one call’s audio metadata with a short-lived signed download URL. GET /recordings and GET /recordings/{recording_id} cover every recorded call the organization has ever made — including calls started from the dashboard, a non-API Automation, or a batch — not only calls created through the Public API.

Resource model

id is derived from the underlying call row and is stable: fetching the same recording more than once always returns the same id. Treat every ID on this resource as opaque.

Why call_id can be null

call_id is present only when the call was created through the Public API. In that case it is the same call id documented in Calls, so you can retrieve that call’s own summary and transcript. It is null for every recording whose call the Public API never created — dashboard dialing, a non-API Automation, or a batch that predates this resource. A null call_id is normal, not an error; on an established organization, most recordings do not have one. contact_id is null under the same principle whenever a recording has no linked contact — an inbound call from an unrecognized number, a manual dial, or a contact deleted after the call. A small number of recordings also have a null duration_seconds. Parse all three fields as nullable; do not assume they are always present.

No status field

A recording has no status or reason field. Every row GET /recordings returns has retrievable metadata by construction — whether its audio bytes are fetchable right now is answered only by the download step itself, not by a flag on the list or get response.

The signed download URL

download_url is minted fresh on the request that returns it; it is never stored server-side and never the same value twice. It defaults to a 900-second lifetime and accepts an expires_in override between 60 and 3600 seconds. Treat the value as opaque — fetch it directly with a normal HTTP client instead of parsing, reconstructing, or caching its shape. See Download call recordings for how to sync recordings completely, when to request the URL, and what happens to one already issued after you revoke access.