> ## Documentation Index
> Fetch the complete documentation index at: https://docs.testnet.dev.adipredictstreet.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Pagination

> Pagination parameters used by PredictStreet list endpoints.

PredictStreet list endpoints use offset, page-number, cursor, or
time-cursor pagination. Pagination parameters are endpoint-specific;
an unsupported query parameter may be ignored, so only send the
parameters listed below.

This page inventories both integration-facing endpoints and first-party
retail endpoints. Rows marked **Retail/SIWE** are included for
completeness, but they are not part of the API-key integration surface.

## General rules

* Treat every `cursor` as opaque. Pass `nextCursor` back unchanged;
  do not parse or construct cursors.
* Keep filters and `limit` unchanged when following a cursor.
* `before` is a legacy time cursor on endpoints that also expose
  `cursor`; prefer `cursor` for new integrations.
* A page shorter than its requested `limit` is the final page when
  the response does not expose `nextCursor`.
* Limit overflow is endpoint-specific: some endpoints return HTTP
  `400`, while others clamp to their maximum. Follow the endpoint's
  own reference when a maximum is listed.

## Offset and page-number endpoints

| Endpoint                              | Parameters        | Defaults and limits                                                                                                                                |
| ------------------------------------- | ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| `GET /api/markets`                    | `limit`, `offset` | `limit=50`, `offset=0`; limit `1..500`                                                                                                             |
| `GET /api/matches`                    | `limit`, `offset` | `limit=500`, `offset=0`; limit `1..500`                                                                                                            |
| `GET /api/events`                     | `page`, `limit`   | Supplying either enables aliases with `page=1`, `limit=100`; limit `1..500`. Without both, the legacy `from`/`to` window applies (up to 500 rows). |
| `GET /api/crypto-series/{id}/windows` | `limit`, `offset` | `limit=50`, `offset=0`; limit `1..500` (`state=all` defaults to `500` where supported).                                                            |
| `GET /api/search/events`              | `limit`, `offset` | `limit=50`, `offset=0`; limit up to `50`                                                                                                           |
| `GET /api/search/matches`             | `limit`, `offset` | `limit=50`, `offset=0`; limit up to `50`                                                                                                           |
| `GET /api/search/users`               | `limit`, `offset` | `limit=50`, `offset=0`; limit up to `50`                                                                                                           |

For offset pagination, request the next page with
`offset = offset + limit`. For `/api/events`, increment `page`.

## Cursor endpoints

| Endpoint                                         | Parameters        | Default / maximum limit                       |
| ------------------------------------------------ | ----------------- | --------------------------------------------- |
| `GET /api/orders/open`                           | `cursor`, `limit` | `500` / `500`                                 |
| `GET /api/orders/history`                        | `cursor`, `limit` | `100` / `200`; values above `200` are clamped |
| `GET /api/leaderboard`                           | `cursor`, `limit` | `20` / `50`                                   |
| `GET /api/challenges`                            | `cursor`, `limit` | `50` / endpoint-defined                       |
| `GET /api/markets/{symbol}/challenges`           | `cursor`, `limit` | `50` / endpoint-defined                       |
| `GET /api/me/challenges` (**Retail/SIWE**)       | `cursor`, `limit` | `50` / endpoint-defined                       |
| `GET /api/me/disputes/intents` (**Retail/SIWE**) | `cursor`, `limit` | `20` / `50`                                   |
| `GET /api/me/activity` (**Retail/SIWE**)         | `cursor`, `limit` | `20` / `100`                                  |
| `GET /api/users/{address}/activity`              | `cursor`, `limit` | `20` / `100`                                  |
| `GET /api/users/by-vault/{vault}/activity`       | `cursor`, `limit` | `20` / `100`                                  |
| `GET /api/me/events/saved` (**Retail/SIWE**)     | `cursor`, `limit` | `10` / endpoint-defined                       |
| `GET /api/me/matches/saved` (**Retail/SIWE**)    | `cursor`, `limit` | `10` / endpoint-defined                       |
| `GET /api/me/favorites` (**Retail/SIWE**)        | `cursor`, `limit` | Endpoint-defined                              |
| `GET /api/me/positions`                          | `cursor`, `limit` | Full list when omitted / `50`                 |
| `GET /api/me/overview` (**Retail/SIWE**)         | `cursor`          | Paginates `positions`                         |
| `GET /api/me/withdrawals`                        | `cursor`, `limit` | `100` / `200`                                 |
| `GET /api/v1/partner/trades`                     | `cursor`, `limit` | `50` / `300`                                  |
| `GET /api/v1/partner/mm-kpis`                    | `cursor`, `limit` | `500` / `1000`                                |

## Cursor endpoints with legacy `before`

| Endpoint                     | Parameters                  | Default / maximum limit |
| ---------------------------- | --------------------------- | ----------------------- |
| `GET /api/me/trades`         | `cursor`, `before`, `limit` | `50` / `200`            |
| `GET /api/me/balance-events` | `cursor`, `before`, `limit` | `100` / `500`           |
| `GET /api/me/fees`           | `cursor`, `before`, `limit` | `100` / `500`           |
| `GET /api/me/splits-merges`  | `cursor`, `before`, `limit` | `50` / `200`            |

## Time-cursor and limit-only endpoints

| Endpoint                                       | Parameters                 | Defaults and limits                         |
| ---------------------------------------------- | -------------------------- | ------------------------------------------- |
| `GET /api/markets/{symbol}/trades`             | `limit`, `before`, `after` | `limit=50`; maximum `200`                   |
| `GET /api/markets/{symbol}/traders`            | `limit`                    | `limit=50`; maximum `200`                   |
| `GET /api/markets/{symbol}/traders/by-outcome` | `limit`                    | `limit=50`; clamped to `1..200` per outcome |
| `GET /api/markets/disputable`                  | `limit`                    | Maximum `500`                               |
| `GET /api/me/notifications` (**Retail/SIWE**)  | `limit`                    | Endpoint-defined                            |
| `GET /api/me/splits-merges/unlockable`         | `limit`                    | `limit=50`; maximum `200`                   |
