Commerce CensusContactRequest access

Pagination

Every list endpoint is cursor-paginated. Offsets are not offered, and that is deliberate.

Why not offsets

The index changes while you read it. With `offset=200`, a product inserted before your position shifts everything and you silently skip a row; a deletion makes you read one twice. A cursor is anchored to a position in the result set, so neither happens.

HTTP
GET /v1/search?q=espresso&limit=100
{ "results": [ … ], "next_cursor": "eyJvIjoyMDB9" }

GET /v1/search?q=espresso&limit=100&cursor=eyJvIjoyMDB9
{ "results": [ … ], "next_cursor": null }   // null = done

Rules

Treat the cursor as opaque — its encoding is not part of the contract and will change. Stop when `next_cursor` is null, not when a page comes back short; a short page is normal. Cursors expire after 24 hours; restart the iteration if you get `cursor_expired`.

Large result sets

Past a few hundred thousand rows, use a bulk export instead. Pagination is for interactive reads; exports are for analysis.