Pagination

View as Markdown

List endpoints return one page at a time. A cursor tells the API where to continue the same query. You get it from the response; you do not create it or pass a page number.

FieldHow to use it
limitMaximum records requested per page: 1–50, default 20.
cursorOmit on the first request. On later requests, send the previous response’s pagination.next_cursor unchanged.
pagination.has_moretrue means another page is available. Stop when it is false.
pagination.next_cursorThe continuation token for the next request, or null when there are no more pages.

1. Request the first page

Set ANTHROPOD_API_KEY to your private API key and replace svc_demo_support with your service ID. These examples select 1 September 2026 UTC. Use your required dates and keep them unchanged for subsequent pages.

curl --get 'https://anthropod.in/api/v2/conversation-analytics/conversations' \
--header "Authorization: Bearer $ANTHROPOD_API_KEY" \
--data-urlencode 'service_id=svc_demo_support' \
--data-urlencode 'start_time=1788220800' \
--data-urlencode 'end_time=1788307200' \
--data-urlencode 'sort_order=desc' \
--data-urlencode 'limit=20'

Read the records in data. When pagination.has_more is true, copy the complete string in pagination.next_cursor.

2. Request the next page

Replace the placeholder below with that actual token. Repeat the same endpoint, API key, filters, dates, and sort order, adding only cursor. --data-urlencode safely encodes the token in the URL.

NEXT_CURSOR='paste-the-pagination.next_cursor-value-here'
curl --get 'https://anthropod.in/api/v2/conversation-analytics/conversations' \
--header "Authorization: Bearer $ANTHROPOD_API_KEY" \
--data-urlencode 'service_id=svc_demo_support' \
--data-urlencode 'start_time=1788220800' \
--data-urlencode 'end_time=1788307200' \
--data-urlencode 'sort_order=desc' \
--data-urlencode 'limit=20' \
--data-urlencode "cursor=$NEXT_CURSOR"

3. Continue until the last page

After each response, use its new pagination.next_cursor for the following request. Do not keep sending the token from the first response: that would fetch the same page again.

Stop when the response contains this pagination object (the final data array can still contain records):

{
"pagination": {
"has_more": false,
"next_cursor": null
}
}

For a large CSV download, use Exports instead of collecting pages yourself.

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 use pagination or accept sorting.

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.