Pagination
Cursor-based paging on list endpoints
Cursor-based paging on list endpoints
Every list endpoint returns a cursor-paginated envelope:
data — the page of records.next_cursor — an opaque base64 cursor for the next page (null on the last page).has_more — true when more pages exist after this one.Call without a cursor to start, then pass the previous response’s
next_cursor as the cursor query parameter until has_more is false:
Cursors are keyset-based (stable under inserts), so paging never skips or duplicates rows the way offset paging can. Treat the cursor as opaque — don’t decode or construct it yourself.
Some list endpoints accept filters that compose with pagination, e.g.
GET /contacts?q=acme (name search) and
GET /expenses?extraction_status=completed.