Skip to Content

List Recordings

Retrieve a paginated list of completed recordings.

GEThttps://api.identitycall.ai/api/v1/public/recordings

Returns a list of recordings with their status and metadata.

Requires read permission

Query Parameters

Parameters

NameTypeRequiredDefaultDescription
pageintegerNo1Page number
per_pageintegerNo20Items per page (1-100)
statusstringNo-Filter by transcription status
date_fromstringNo-Only calls at or after this time (called_at, or created_at when unknown). A date (2026-10-01) starts that day in the account time zone; a timestamp (2026-10-01T08:00:00+03:00, URL-encode + as %2B) is exact. Invalid values return 400.
date_tostringNo-Only calls at or before this time. A date (2026-10-31) includes that whole day; a timestamp is exact. Works alone or with date_from.
operator_idintegerNo-Only recordings this operator took part in, as the credited operator or as the colleague on the other end of an internal call. Get ids from GET /operators or the operators list in GET /recordings/filters.
agent_idintegerNo-Deprecated. Filters by the internal voice-cluster identity. Use operator_id.

Request

curl -X GET "https://api.identitycall.ai/api/v1/public/recordings?page=1&per_page=20" \ -H "Authorization: Bearer $IDENTITYCALL_API_KEY"

Response

Response200 OK
{
"data": [
  {
    "public_id": "018f3a00-0000-7000-8000-0000000000a1",
    "name": "Sales Call - John Smith",
    "status": "completed",
    "duration_ms": 185000,
    "created_at": "2025-01-15T10:30:00Z",
    "speakers": ["Speaker 1", "Speaker 2"],
    "goal_achievement": 87.5
  },
  {
    "public_id": "018f3a00-0000-7000-8000-0000000000a2",
    "name": "Support Call #4521",
    "status": "completed",
    "duration_ms": 420000,
    "created_at": "2025-01-15T11:45:00Z",
    "speakers": ["Agent", "Customer"],
    "goal_achievement": 100.0
  }
],
"meta": {
  "current_page": 1,
  "total_pages": 5,
  "total_count": 98,
  "per_page": 20
}
}

Response Fields

FieldTypeDescription
idintegerUnique recording ID
namestringRecording display name
statusstringTranscription status (pending, processing, completed, failed)
duration_msintegerRecording duration in milliseconds
called_atstring | nullWhen the call happened (ISO 8601), as reported by the phone system. date_from/date_to filter on it.
created_atstringWhen the recording was imported (ISO 8601)
speakersarrayList of speaker labels
goal_achievementnumber | nullPercentage of goals met (0-100) by the credited operator. For the colleague on an internal call, read participants.
client_assessmentobject | nullHow the customer did against the project’s client criteria: { percentage, met_count, total_count, conflict, criteria: [{ name, met, reasoning }] }. Never part of the operator’s score; null when the call was not assessed. See Results.
participantsarrayEveryone from your roster on the call, credited operator first: { operator_id, name, side, goal_achievement }. side is ours for the credited operator and far for a colleague on the other end. Each person has their own goal_achievement (null until they are evaluated). Empty when the call has no credited operator.
operatorobject | nullWho handled the call: { id, name, source }. source records how the attribution was made — api when you sent operator_id, manual or review when someone chose in-app, voice or routing when IdentityCall inferred it. This is the identity every performance metric credits.
agentobject | nullDeprecated. The internal voice-cluster identity ({ id, name }), which exists only when speaker identification has matched one. Read operator instead.

Internal calls recorded on both lines

When two colleagues talk and both lines are recorded, the call is returned once. The item is whichever of the two recordings was imported first (its operator may be the caller or the callee); both people appear in participants, each with their own goal_achievement, and GET /recordings/:id/results on that item returns the goal results of both, marked by subject_operator_id. Filtering by operator_id finds the call by either person.

Try It

Try It