Data API — Recordings
API reference for listing CCaaS call recordings by time range and downloading the audio for a single recording.
The Recordings API lets an external system collect CCaaS call recordings programmatically — for archiving, quality assurance, compliance retention, or analysis in a third-party tool. Collection is a two-step process: list the recordings for a time range to get each recording's metadata and recordingKey, then download the audio for each recording one at a time.
Interactive ReferenceThe same endpoints are available in the API Reference, where requests can be built and sent with Try It.
Overview
| Base URL | https://<hostname>.xima.cloud/rest/api |
| Authentication | Bearer token from an API Service User |
| Response format | JSON (recording list), OGG audio (recording audio) |
| Limits | One audio request per 3 seconds per tenant, and a rolling 5-day egress cap per tenant — see Limits |
Authentication
Every request requires a Service User bearer token in the Authorization header:
Authorization: Bearer <api_bearer_token>Service Users are created under API Enablement > API Service Users. See API Service Users.
Endpoints
| Method | Path | Summary |
|---|---|---|
GET | /v2/recordings | List recordings for a time range |
GET | /v2/recordings/{hostname}/{recording_key}/audio | Download the audio for one recording |
List Recordings
GET /v2/recordings
Returns the metadata for every call recording within a time range. Each record describes the recording — the parties, call direction, skill, agent, and file size — but does not include the audio itself. Use each record's recordingKey with Download Recording Audio to download the audio.
GET https://<hostname>.xima.cloud/rest/api/v2/recordingsParameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
startTime | query | string (ISO 8601) | Yes | Start of the time range to query, including the time zone offset — for example, 2026-11-02T08:00:00.000-07:00 |
endTime | query | string (ISO 8601) | Yes | End of the time range to query, including the time zone offset — for example, 2026-11-02T17:00:00.000-07:00 |
Authorization | header | string | Yes | Bearer <api_bearer_token> |
Content-Type | header | string | Yes | application/json |
URL-Encode the Time Zone OffsetA
+in a time zone offset (for example,+10:00) must be sent as%2Bin the query string, or it is read as a space.
Responses
| Code | Description |
|---|---|
200 OK | An array of Recording objects, one per recording in the time range. An empty array means no recordings matched |
400 Bad Request | startTime or endTime is missing or not a valid ISO 8601 date-time |
401 Unauthorized | The bearer token is missing, expired, or invalid |
403 Forbidden | The Service User does not have access to the requested data |
See API Limits & Statuses for statuses shared by every CCaaS API.
Example Request
curl -L -X GET 'https://<hostname>.xima.cloud/rest/api/v2/recordings?startTime=2026-11-02T08:00:00.000-07:00&endTime=2026-11-02T17:00:00.000-07:00' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <api_bearer_token>'Example Response — 200 OK
200 OK[
{
"recordingKey": "af66cf94-29fc-43f8-8228-b5640379578d-1793638800000",
"callKey": "b4c3911a-7128-4da1-9ed6-d590f7c1a2b7-1793638776000-1793639868000",
"startTime": 1793638800000,
"duration": 1068993,
"size": 0,
"eventId": 99390,
"recordingSystemId": 0,
"status": "PENDING",
"callingParty": "15550100147",
"receivingParty": "Jane Doe(101)",
"tenantName": "example-ns",
"tagData": "Default",
"callDirection": "INBOUND",
"skill": "Sales",
"agent": "Jane Doe(101)"
}
]Download Recording Audio
GET /v2/recordings/{hostname}/{recording_key}/audio
Returns the audio file for a single recording as an OGG-encoded binary stream. The recording_key comes from the recordingKey field, and hostname from the tenantName field, of a Recording returned by List Recordings.
GET https://<hostname>.xima.cloud/rest/api/v2/recordings/{hostname}/{recording_key}/audio
One Recording per RequestRecording metadata can be listed in bulk, but audio must be requested one recording at a time, no more often than once every 3 seconds per tenant. Bulk audio exports are not supported.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
hostname | path | string | Yes | The name of the CCaaS tenant the recording belongs to — the recording's tenantName |
recording_key | path | string | Yes | The unique identifier of the recording — the recording's recordingKey |
Authorization | header | string | Yes | Bearer <api_bearer_token> |
Content-Type | header | string | Yes | audio/ogg |
Responses
| Code | Description |
|---|---|
200 OK | The recording's audio as a binary stream. The response Content-Type is audio/ogg |
401 Unauthorized | The bearer token is missing, expired, or invalid |
404 Not Found | No recording with that recording_key exists for the tenant in hostname |
429 Too Many Requests | More than one audio request was sent within 3 seconds for the tenant. Wait and retry |
509 Bandwidth Limit Exceeded | The tenant's rolling 5-day recording egress cap has been reached |
Example Request
curl -L -X GET 'https://<hostname>.xima.cloud/rest/api/v2/recordings/example-ns/af66cf94-29fc-43f8-8228-b5640379578d-1793638800000/audio' \
-H 'Content-Type: audio/ogg' \
-H 'Authorization: Bearer <api_bearer_token>' \
--output recording.oggExample Response — 200 OK
200 OKA binary OGG audio stream. Save the response body to a file, as the --output option does above.
Models
Recording
One call recording, as returned by List Recordings.
| Field | Type | Description |
|---|---|---|
recordingKey | string | The unique identifier of the recording. Used as recording_key to download its audio |
callKey | string | The identifier of the call the recording belongs to |
startTime | integer (int64) | When the recording started, in milliseconds since January 1, 1970 (UTC) |
duration | integer (int64) | The length of the recording, in milliseconds |
size | integer (int64) | The size of the recording file |
eventId | integer | The identifier of the call event that was recorded |
recordingSystemId | integer | The identifier of the recording system that captured the recording |
status | string | The recording's processing status — for example, PENDING |
callingParty | string | The party that placed the call — a phone number or an agent in name(extension) form |
receivingParty | string | The party that received the call — a phone number or an agent in name(extension) form |
tenantName | string | The CCaaS tenant the recording belongs to. Used as hostname to download its audio |
tagData | string | The tag applied to the recorded call event |
callDirection | string | The direction of the call — for example, INBOUND |
skill | string | The skill the recorded call was handled through, if any |
agent | string | The agent on the recorded call, in name(extension) form |
Limits
| Limit | Description |
|---|---|
| Request frequency | Audio requests must not exceed one request per 3 seconds per tenant. Exceeding this returns 429 Too Many Requests. The limit is per tenant, so multiple tenants can be queried at the same time |
| Rolling egress cap | Audio downloads count against a rolling 5-day egress cap per tenant. Reaching the cap returns 509 Bandwidth Limit Exceeded; contact Xima Support to review usage |
Best PracticeSchedule recording collection to run nightly: list the previous day's recordings once, then download each recording's audio in sequence, no more often than once every 3 seconds.
See API Limits & Statuses for full details.
Related Pages
- Data APIs
- Active Recording Management — pause and resume an agent's active call recording
- API Service Users
- API Limits & Statuses
Updated about 2 hours ago
