Cursor vs page-based pagination for /analytics/conversations/details/query

We’re pulling conversation details into our Android app for a custom analytics dashboard. The endpoint is POST /api/v2/analytics/conversations/details/query. The docs mention both nextPageToken and pageSize/page parameters, but the behavior is confusing.

I tried using nextPageToken from the response, but it looks like it’s tied to a specific query snapshot. If the query runs for 30 seconds and new data arrives, the cursor seems to skip or duplicate records. Here’s the Kotlin snippet we’re using:

val response = apiClient.post("/analytics/conversations/details/query", body)
val nextPageToken = response.nextPageToken
if (nextPageToken != null) {
 // retry with token
}

Is cursor-based pagination meant for real-time streaming or just batch exports? We need consistent, non-overlapping chunks for UI rendering. Using page and pageSize feels safer but slower. Any insight on best practices for mobile clients?