Get all conversation logs
Changed onRetrieve paginated conversation logs with support for various filters. Returns call logs for agents belonging to the authenticated user's organization.
To discover new inbound calls, use webhooks instead of polling this endpoint. Subscribe an agent to the pre-conversation webhook event: it fires the moment an inbound call connects and delivers callId, fromPhone, and toPhone, so you get every new call in real time with no polling load. See the Webhooks guide. Poll this endpoint only for backfill or reconciliation.
If you do poll, use the default sort. The default query (no sortBy) sorts by updatedAt descending and is index-backed, so it stays fast even on large accounts. Request the first page and keep the list small: page=1&limit=N (optionally callTypes=telephony_inbound for inbound only). This returns in well under a second. To detect new calls between polls, track the conversation IDs you have already seen rather than a single timestamp, since the default order is updatedAt (a recently-updated older call can move to the top).
Avoid sortBy=createdAt, dateFrom, and dateTo on large accounts. These sort or range-filter on createdAt, which is not index-backed for the organization-wide query and forces a full scan of your conversation history. On accounts with a large history this can exceed the gateway timeout and return a 504. Prefer the default updatedAt sort above.
agentIds and campaignIds accept comma-separated IDs and narrow the result set, but do not pair them with sortBy=createdAt or dateFrom on large accounts (the createdAt sort/filter is the slow part, not the number of agents).
Request
- Base URLhttps://api.smallest.ai/atoms/v1
- URLhttps://api.smallest.ai/atoms/v1/conversation
- AuthHTTP bearer
Query parameters
Page number for pagination
Number of items per page. Server-side cap is 500 — values above 500 are silently clamped.
Comma-separated list of agent IDs to filter by
Comma-separated list of campaign IDs to filter by
Comma-separated list of call types to filter by
Search query to filter by callId, fromNumber, or toNumber
Comma-separated list of call statuses to filter by. Available statuses: pending, in_progress, in_queue, processing, active, completed, failed, no_answer, cancelled
Comma-separated list of disconnect reasons to filter by. Available reasons: user_hangup, agent_hangup, connection_error, timeout, system_error, transfer_complete
Comma-separated list of call attempt types to filter by. Available filters: initial (first attempt calls), retry (retry attempt calls), all (all calls)
Comma-separated list of duration ranges to filter by. Available ranges: 0-30 (0-30 seconds), 30-60 (30-60 seconds), 1-5 (1-5 minutes), 5+ (more than 5 minutes)
Field to sort results by
Sort direction
ISO date — return calls created on or after this date
ISO date — return calls created on or before this date
Comma-separated version IDs to filter calls by the agent version that handled them
Response
Successful response
Example response
{
"status": true,
"data": {
"logs": [
{
"_id": "60d0fe4f5311236168a109ca",
"callId": "CALL-1737000000000-abc123",
"status": "completed",
"duration": 120,
"from": "+15551234567",
"to": "+15559876543",
"type": "telephony_outbound",
"agentId": "60d0fe4f5311236168a109ca",
"recordingUrl": "https://storage.example.com/recordings/call-123.mp3",
"recordingDualUrl": "https://storage.example.com/recordings/call-123-dual.mp3",
"disconnectionReason": "user_hangup",
"createdAt": "2025-01-15T10:30:00.000Z",
"dispositionMetrics": {
"interested": "yes",
"follow_up_needed": "no"
}
}
],
"pagination": {
"total": 150,
"page": 1,
"limit": 10,
"hasMore": true,
"totalPages": 15
}
}
}Changes
- info
added the optional property
////to the response with the status - info
added the optional property
////to the response with the status - info
added the optional property
////to the response with the status - info
added the optional property
////to the response with the status
- info
- breaking
removed the enum value
chatfrom thequeryrequest parametercallTypes - warning
for the
queryrequest parameterlimit, the max was set to500.00 - warning
removed the optional property
///from the response with the status - warning
added the new
activeenum value to the///response property for the response status - warning
added the new
in_queueenum value to the///response property for the response status - warning
added the new
processingenum value to the///response property for the response status - warning
added the new
webcallenum value to the///response property for the response status - info
added the new optional
queryrequest parameterdateFrom - info
added the new optional
queryrequest parameterdateTo - info
added the new optional
queryrequest parametersortBy - info
added the new optional
queryrequest parametersortOrder - info
added the new optional
queryrequest parameterversionFilter - info
added the new enum value
webcallto thequeryrequest parametercallTypes - info
added the optional property
///to the response with the status - info
added the optional property
///to the response with the status - info
added the optional property
///to the response with the status - info
added the optional property
///to the response with the status - info
added the optional property
///to the response with the status - info
added the optional property
///to the response with the status - info
added the optional property
///to the response with the status - info
added the optional property
///to the response with the status - info
added the optional property
///to the response with the status - info
removed the
busyenum value from the///response property for the response status - info
removed the
chatenum value from the///response property for the response status
- breaking