<!-- source: https://secondlayer.tools/docs/api-reference#index-discovery-object -->

## The Index discovery object

Every Index route with the filters it accepts.

| Field | Type | Description |
| --- | --- | --- |
| `routes` | array of object | One entry per route: `path`, `method`, `description`, and `filters` where it takes any. The `/v1/index/events` entry adds `event_types` and `event_type_filters` (columns and accepted filters per type). |
| `auth` | string | How to authenticate, in prose. |
| `cursor` | object | Cursor format and how to resume with it. |

```json
{
  "routes": [
    {
      "path": "/v1/index/ft-transfers",
      "method": "GET",
      "description": "Alias for /events?event_type=ft_transfer. Fungible token transfers, decoded + filterable.",
      "filters": [
        "limit",
        "cursor",
        "from_cursor",
        "from_height",
        "to_height",
        "order",
        "contract_id",
        "sender",
        "recipient",
        "asset_identifier",
        "fields"
      ]
    },
    {
      "path": "/v1/index/blocks",
      "method": "GET",
      "description": "Canonical blocks, cursor-paginated. Returns blocks[] ({block_height, block_hash, parent_hash, burn_block_height, burn_block_hash, block_time, canonical}), next_cursor, tip.",
      "filters": [
        "limit",
        "cursor",
        "from_cursor",
        "from_height",
        "to_height"
      ]
    }
  ],
  "cursor": {
    "format": "<block_height>:<event_index>",
    "semantics": "opaque resume token; pass back unchanged to continue. Equals last event's cursor (inclusive on output, exclusive on input). Under order=desc it carries a `desc:` prefix and resumes only under order=desc."
  }
}
```
