# Pagination

Every list endpoint pages via opaque cursor tokens. Walk a result set by passing back the `next_cursor` you receive on the previous page.

## The cursor contract

List endpoints (`/v2/tickers`, `/v2/scan`, `/v2/signals/{signal}`, `/v2/signals/.../history/...`, `/v2/universes`, `/v2/rules`, `/v2/webhooks`, `/v2/webhooks/{id}/deliveries`) return a `next_cursor` alongside the data. Pass it back as `?cursor=` to get the next page. When there's no more data, `next_cursor` is `null`.

## Treat cursors as opaque

Don't parse them. Don't construct them. Don't cache them. The server bakes the sort key, the page size, and the original filters into each token. Changing any query parameter mid-walk invalidates the cursor. If you need to change the filter, start a new walk.

## Page size

Default 50, max 100. Pass `?limit=` to change page size. Bulk-fetch endpoints (`/v2/tickers?symbols=…`) have their own limits documented on the endpoint page.

## See also

- Errors & rate limits: https://tickerbot.io/api/errors
- Schema: https://tickerbot.io/api/schema
