Pagination
Page through conversation exports.
Pagination model
POST /export/conversations is paginated as below. The teams and users exports return their results in one response.
| Field | Behavior |
|---|---|
page | Starts at 1. |
limit | 1–50 results per array per page. Defaults to 50. |
totalPages | The maximum page count across conversations, awaitingUpload, and errored. |
The lookup routes page with page, limit, currentPage and totalPages too. List conversations always pages, up to 100 per page. List teams, List users and Get a transcript return everything on one page unless you send a limit.
Export all pages
Implement consume to store or process each page.
Complete pagination example
// apiKey and consume are supplied by your application.
let page = 1;
let totalPages = 1;
do {
const response = await fetch(
'https://customer.rillavoice.com/export/conversations',
{
method: 'POST',
headers: {
Authorization: apiKey,
'Content-Type': 'application/json',
},
body: JSON.stringify({
fromDate: '2026-09-01T00:00:00Z',
toDate: '2026-09-02T00:00:00Z',
page, limit: 50,
}),
},
);
if (!response.ok) {
throw new Error(`Export failed: ${response.status}`);
}
const data = await response.json();
await consume({
conversations: data.conversations,
awaitingUpload: data.awaitingUpload ?? [],
errored: data.errored,
});
totalPages = data.totalPages;
page += 1;
} while (page <= totalPages);Date types
timeOfRecording is the default. processedDate selects by processing time and omits awaitingUpload and totalAwaitingUpload, because those recordings haven’t been processed.
For an ongoing sync, persist stable record IDs and make downstream writes idempotent. Avoid assuming that an earlier export window can never change.