Pagination

View as Markdown
1

Request the first page

Send your filters with limit. The default is 20 records and the maximum is 50.
2

Process the response

Read data and pagination. A page may contain fewer records than your limit.
3

Continue

Send the same filters and sort_order with cursor set to pagination.next_cursor.
4

Stop

Finish when pagination.has_more is false.
{
"data": [],
"pagination": {
"has_more": false,
"next_cursor": null
}
}

Date filters

Supply start_time and end_time as Unix epoch seconds. The start is inclusive and the end is exclusive; the range must be nonempty and no longer than 31 days. time_field is optional and defaults to the timestamp listed below for the requested resource. The same values apply inside filters when creating an export; export timestamps must be JSON integers.

Use the timestamp listed for each resource. created_at, updated_at, and analysis_completed_at are not supported filter values.

Earlier timestamp filters such as conversation_time[gte] / conversation_time[lt] remain accepted for compatibility, as do their corresponding export JSON objects. Do not combine those filters with time_field, start_time, or end_time in one request.

Stable order

The four resource list GETs accept sort_order=asc|desc. The default is desc (newest first); asc returns oldest first. The timestamp used for ordering is also the timestamp used by the date-range filter.

ListAllowed time_field and default
Conversation Analytics conversationsconversation_time
Customer conversationsconversation_time
Customerslast_interaction_at
Voice Agent conversationsconversation_time

Records with equal timestamps are ordered by ID in the same direction. For example, ascending order uses (timestamp ASC, id ASC).

GET /api/v2/conversation-analytics/conversations?service_id=svc_demo_support&time_field=conversation_time&start_time=1788220800&end_time=1788307200&sort_order=asc&limit=20

Continue with the same sort_order, date range, and other filters. Switching direction with an existing cursor returns 400 INVALID_CURSOR; omit the cursor to start a new query. Omitting sort_order is equivalent to sending desc.

Single-record GETs do not accept sorting. Field definitions always sort by field key ascending. Exports retain descending timestamp and ID order.

Treat a cursor as an opaque continuation value, not a page number or permanent synchronization checkpoint. It remains subject to authorization. A cursor from one query cannot be used with another query. Cursors expire after 15 minutes and are bound to the key, permissions, endpoint, filters, and sort order. An invalid or expired cursor returns 400 with INVALID_CURSOR; restart that bounded query.

Changing data

Pagination is not a historical snapshot. New analysis and updated customer profiles can affect results while you read them. Persist records by ID, tolerate repeated records, and use bounded overlapping reads for reconciliation. These endpoints do not provide a complete update feed.