> This page is for Taurus PROTECT, version v3.58 (default).
> For other versions, use one of these documentation indexes:
> - v3.58 (default): https://taurushq.ferndocs.com/protect-capital/v3.58/llms.txt
> - v3.56: https://taurushq.ferndocs.com/protect-capital/v3.56/llms.txt
> - v3.54: https://taurushq.ferndocs.com/protect-capital/v3.54/llms.txt
> - v3.52: https://taurushq.ferndocs.com/protect-capital/v3.52/llms.txt
> - v3.50: https://taurushq.ferndocs.com/protect-capital/v3.50/llms.txt
> - v3.48: https://taurushq.ferndocs.com/protect-capital/v3.48/llms.txt
> - v3.46: https://taurushq.ferndocs.com/protect-capital/v3.46/llms.txt
> - v3.44: https://taurushq.ferndocs.com/protect-capital/v3.44/llms.txt
> - v3.42: https://taurushq.ferndocs.com/protect-capital/v3.42/llms.txt
> - v3.40: https://taurushq.ferndocs.com/protect-capital/v3.40/llms.txt
> - v3.38: https://taurushq.ferndocs.com/protect-capital/v3.38/llms.txt

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://taurushq.ferndocs.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://taurushq.ferndocs.com/_mcp/server.

# Pagination

# Cursor Pagination

Use cursor pagination to retrieve results one page at a time from supported endpoints.

A cursor token tracks your position in a result set. The server generates a token and returns it in each response; pass that token in your next request to retrieve the next page.

`FIRST` and `LAST` do not require a token. `NEXT` and `PREVIOUS` require a token returned by a prior API response. Do not construct the token manually.

## Retrieve pages

### 1. Start at the beginning

```http
GET /api/rest/v1/statistics/tags/{tagID}?cursor.pageRequest=FIRST&cursor.pageSize=20
```

```json
{
  "result": [...],
  "cursor": {
    "currentPage": "eyJjdXJyIjoiLi4uIn0=",
    "hasNext": true,
    "hasPrevious": false
  }
}
```

When `hasPrevious` is `false`, you are at the start of the result set. When `hasNext` is `true`, another page is available.

### 2. Retrieve the next page

Copy `cursor.currentPage` from the response verbatim and pass it back:

```http
GET /api/rest/v1/statistics/tags/{tagID}?cursor.pageRequest=NEXT&cursor.pageSize=20&cursor.currentPage=eyJjdXJyIjoiLi4uIn0=
```

The server continues from the previous position and returns a new token.

### 3. Continue until the final page

Repeat the request with the latest `cursor.currentPage` value until `hasNext` is `false`. A value of `false` means you reached the end of the result set.

---

## `pageRequest` Values

| Value      | `cursor.currentPage` required? |
| ---------- | ------------------------------ |
| `FIRST`    | No                             |
| `LAST`     | No                             |
| `NEXT`     | Yes                            |
| `PREVIOUS` | Yes                            |

---

## Endpoints That Support Cursor Pagination

| Endpoint                                               | Description                                    |
| ------------------------------------------------------ | ---------------------------------------------- |
| `GET /api/rest/v1/statistics/tags`                     | Retrieve aggregated tag statistics             |
| `GET /api/rest/v1/statistics/tags/{tagID}`             | Retrieve an asset breakdown for a specific tag |
| `GET /api/rest/v1/statistics/portfolio/history`        | Retrieve portfolio statistics history          |
| `GET /api/rest/v1/statistics/portfolio/history/export` | Export portfolio statistics history            |
| `GET /api/rest/v1/balances`                            | Retrieve total balances for each asset         |
| `GET /api/rest/v1/balances/nft/collections`            | Retrieve NFT collection balances               |
| `GET /api/rest/v2/requests`                            | List requests                                  |
| `GET /api/rest/v2/requests/for-approval`               | List requests that are pending approval        |
| `GET /api/rest/v1/requests/bundles`                    | List request bundles                           |

---

## Troubleshoot invalid cursor errors

### `E900-INVALID_CURSOR_DATA`

This error means the cursor token is invalid. It occurs when you construct `cursor.currentPage` manually instead of copying it from an API response.

The server base64-encodes and serializes the token internally. Copy `cursor.currentPage` directly from the prior response, without modifying it, before you send the next request.