page_size/limit at 100 and default to 25.
Offset pagination
Used by catalog resources like/chatbots, /articles, /products, /objects, /qr-groups. Pages are 1-indexed.
Query parameters
Response envelope
total is the filtered count, so it changes when you pass query filters. Use Math.ceil(total / page_size) for the page count.
Cursor pagination
Used by high-volume streams:/conversations, /conversations/{id}/messages, /qr-codes/{id}/scans, /submissions, /articles (when sorted by created_at descending), and similar feeds. Cursors are opaque base64url strings — never parse, predict, or hand-construct one.
Query parameters
Response envelope
has_more is false, next_cursor is null and you’re done.
Invalid cursors
Tampered or corrupted cursors return:next_cursor string verbatim, including any trailing = characters (URL-encode them — %3D).
Which style does an endpoint use?
The OpenAPI spec is authoritative. As a heuristic: anything that emits webhook events at high volume (conversation.created, qr_code.scanned, page.submission.created, etc.) uses cursor pagination. Everything else uses offset.
