Skip to content
Esc
↑↓navigate↵open⌘Jpreview

Get a signed recording audio URL

Returns a short-lived signed URL for streaming the audio of a recording — call recordings AND voicemail audio both resolve here by recordingSid, so voicemail integrations need this scope alongside voicemails. The URL stops working at expiresAt (15 minutes after issue); request a fresh one rather than storing it. While the audio is still processing the response is a retryable RECORDING_NOT_READY problem — retry after a short delay. Requires the recordings scope.

GET/customer/phone-systems/{phoneSystemId}/recordings/{recordingSid}/url
Authorization
X-API-KeyAPI key · headerrequired
API key (sk_phones_* prefix) for programmatic access
Path parameters
phoneSystemIdstring<uuid>required
Phone system identifier, discoverable via the accessible phone systems operation.
recordingSidstringrequired
Recording identifier from a webhook payload or a list response.
matches ^RE[0-9a-fA-F]{32}$
Responses
200The signed audio URL and the instant it expires.
expiresAtstring<date-time>required
When the signed URL stops working.
urlstring<uri>required
Short-lived signed URL for streaming the audio.
400Validation failure: recordingSid is not a valid recording identifier.
codestringrequired
Stable machine identifier to branch on.
correlationIdstringrequired
Request identifier to quote to support.
detailstringrequired
User-safe explanation. Display it if you must; never match on it.
errorsobject[]
Field-level validation problems. Present on validation failures.
Show properties
Array of object
codestringrequired
Per-field machine code (REQUIRED, TOO_SMALL, …).
detailstringrequired
Human-readable description of the field problem.
pointerstringrequired
JSON Pointer to the offending request field.
paramsobject
Extra primitive detail about the condition, such as a limit that was hit.
retry_afterinteger
Seconds to wait before retrying, when a meaningful delay exists.
retryablebooleanrequired
Whether this condition is transient. Derived from code.
statusintegerrequired
Mirrors the HTTP status code.
titlestringrequired
Short human summary of the problem type.
typestringrequired
URL identifying the problem type. An identifier to match, not a link.
401The API key is missing, malformed, expired, or revoked.
codestringrequired
Stable machine identifier to branch on.
correlationIdstringrequired
Request identifier to quote to support.
detailstringrequired
User-safe explanation. Display it if you must; never match on it.
errorsobject[]
Field-level validation problems. Present on validation failures.
Show properties
Array of object
codestringrequired
Per-field machine code (REQUIRED, TOO_SMALL, …).
detailstringrequired
Human-readable description of the field problem.
pointerstringrequired
JSON Pointer to the offending request field.
paramsobject
Extra primitive detail about the condition, such as a limit that was hit.
retry_afterinteger
Seconds to wait before retrying, when a meaningful delay exists.
retryablebooleanrequired
Whether this condition is transient. Derived from code.
statusintegerrequired
Mirrors the HTTP status code.
titlestringrequired
Short human summary of the problem type.
typestringrequired
URL identifying the problem type. An identifier to match, not a link.
403The key lacks the recordings:read scope, or is not a tenant API key.
codestringrequired
Stable machine identifier to branch on.
correlationIdstringrequired
Request identifier to quote to support.
detailstringrequired
User-safe explanation. Display it if you must; never match on it.
errorsobject[]
Field-level validation problems. Present on validation failures.
Show properties
Array of object
codestringrequired
Per-field machine code (REQUIRED, TOO_SMALL, …).
detailstringrequired
Human-readable description of the field problem.
pointerstringrequired
JSON Pointer to the offending request field.
paramsobject
Extra primitive detail about the condition, such as a limit that was hit.
retry_afterinteger
Seconds to wait before retrying, when a meaningful delay exists.
retryablebooleanrequired
Whether this condition is transient. Derived from code.
statusintegerrequired
Mirrors the HTTP status code.
titlestringrequired
Short human summary of the problem type.
typestringrequired
URL identifying the problem type. An identifier to match, not a link.
404No such recording in this phone system — a nonexistent identifier, permanently unavailable audio, and an identifier belonging to another phone system are indistinguishable — or the phone system itself is not covered by the key.
codestringrequired
Stable machine identifier to branch on.
correlationIdstringrequired
Request identifier to quote to support.
detailstringrequired
User-safe explanation. Display it if you must; never match on it.
errorsobject[]
Field-level validation problems. Present on validation failures.
Show properties
Array of object
codestringrequired
Per-field machine code (REQUIRED, TOO_SMALL, …).
detailstringrequired
Human-readable description of the field problem.
pointerstringrequired
JSON Pointer to the offending request field.
paramsobject
Extra primitive detail about the condition, such as a limit that was hit.
retry_afterinteger
Seconds to wait before retrying, when a meaningful delay exists.
retryablebooleanrequired
Whether this condition is transient. Derived from code.
statusintegerrequired
Mirrors the HTTP status code.
titlestringrequired
Short human summary of the problem type.
typestringrequired
URL identifying the problem type. An identifier to match, not a link.
409The recording exists but its audio is still processing (code RECORDING_NOT_READY, retryable: true) — retry after a short delay.
codestringrequired
Stable machine identifier to branch on.
correlationIdstringrequired
Request identifier to quote to support.
detailstringrequired
User-safe explanation. Display it if you must; never match on it.
errorsobject[]
Field-level validation problems. Present on validation failures.
Show properties
Array of object
codestringrequired
Per-field machine code (REQUIRED, TOO_SMALL, …).
detailstringrequired
Human-readable description of the field problem.
pointerstringrequired
JSON Pointer to the offending request field.
paramsobject
Extra primitive detail about the condition, such as a limit that was hit.
retry_afterinteger
Seconds to wait before retrying, when a meaningful delay exists.
retryablebooleanrequired
Whether this condition is transient. Derived from code.
statusintegerrequired
Mirrors the HTTP status code.
titlestringrequired
Short human summary of the problem type.
typestringrequired
URL identifying the problem type. An identifier to match, not a link.
Request
curl -X GET "https://api.steerphones.com/v1/customer/phone-systems/%3Cuuid%3E/recordings/string/url" \
  -H "X-API-Key: YOUR_API_KEY"
Response
{
  "expiresAt": "2024-01-01T00:00:00Z",
  "url": "<uri>"
}