# Pagination

Page through search results with nextCursor.

Search results come in pages of up to 100 jobs (`limit`, default 25). Each response has a `nextCursor`; pass it back as `cursor` to get the next page. On the last page `nextCursor` is `null`.

```json
{
  "query": { "roles": ["frontend-engineer"] },
  "cursor": "MjAyNi0xMC0zMFQwNjoxMjowMC4wMDBafDQ0MTkwMjM",
  "limit": 100
}
```

## Rules

- Send the same `query` (including `sort`) and `postedSince` with every page. A cursor from a different search is rejected with `invalid_request`.
- Treat the cursor as opaque. Don't build or edit one.
- Pages are keyset-based, so they stay stable while you page: you won't see the same job twice or skip one because results shifted.

## Totals

`total` is the number of matches, capped at 10,000. When the real number is higher, `totalCapped` is `true`; narrow the query rather than paging through everything.

## Lookups

Lookup endpoints (`/v1/places`, `/v1/roles`, `/v1/companies`) aren't paginated. They return the best matches first, up to `limit` (default 8, at most 20). `/v1/families` returns every family.
