Every list endpoint returns the same Page envelope and pages with limit and offset query parameters.

No total, no cursor

There is no total count and no parameter that asks for one; walk to has_more: false to count. offset is the only way forward. Most lists are newest first (agents by last edit, calls by start), so rows created while you page shift later rows and a long walk can repeat or skip one. To page a busy list stably, close the window: GET /v1/calls takes start and end (default: the last 30 days up to now). Conversation and chat items default to oldest first (order=asc); order=desc returns the newest window, still chronological within the page.

Page size

limit above the endpoint’s maximum is a 422, not a clamp.

Walking every page

Each SDK has one paginate helper for every Page endpoint. Its limit (default 200) is the page size it requests, not a cap on items yielded; it stops at has_more: false.
TypeScript takes paginate(fn, { limit: 50 }); Python takes paginate(fn, limit=50, **filters), and paginate_async with async for on AsyncTalqing.

Endpoints that do not use Page

Walk these by hand; paginate does not apply. Other collection endpoints (GET /v1/catalog, GET /v1/email/senders, GET /v1/integrations/{integration_id}/mcp-tools, GET /v1/observability) return everything in one response.