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

# Instruments

> Find option contracts for a source and normalized underlying market.

List venue-native option contracts under a normalized underlying market. Pass both `source` and `market`; use `instrument`, `expiry`, `option_type`, or `q` to narrow a chain.

## Request

```bash theme={null}
curl "https://api.polaris.supply/catalog/instruments?source=deribit&market=BTC&limit=2"
```

### Query parameters

| Parameter | Type | Required | Description |
| - | - | - | - |
| `source` | `string` | Yes | Exact source identifier |
| `market` | `string` | Yes | Normalized option underlying |
| `instrument` | `string` | No | Exact venue-native contract |
| `expiry` | `integer` | No | Exact expiry timestamp in milliseconds |
| `option_type` | `string` | No | call or put |
| `q` | `string` | No | Instrument or strike search |
| `cursor` | `string` | No | Cursor returned by the previous page |
| `limit` | `integer` | No | Page size from 1 to 1000; defaults to 200 |

## Access and behavior

Each instrument row identifies the venue-native contract and its option terms. `expiry` is an exact Unix-millisecond expiry; `option_type` accepts `call` or `put`. The response uses `next_cursor` for continuation and does not include `has_more` or `total`.

## Response

| Field | Type | Required | Description |
| - | - | - | - |
| `instruments` | `CatalogInstrument[]` | Yes | — |
| `next_cursor` | `string / null` | No | — |
| `updatedAt` | `string` | Yes | — |

### `instruments[]` fields

| Field | Type | Required | Description |
| - | - | - | - |
| `contract_size` | `string / null` | No | — |
| `exercise_style` | `string / null` | No | — |
| `expiry_timestamp` | `integer` | Yes | — |
| `instrument` | `string` | Yes | — |
| `market` | `string` | Yes | — |
| `option_type` | `string` | Yes | — |
| `premium_currency` | `string / null` | No | — |
| `quantity_unit` | `string / null` | No | — |
| `settlement_currency` | `string / null` | No | — |
| `source` | `string` | Yes | — |
| `statistics` | `null / CatalogStatistics` | No | — |
| `status` | `string` | Yes | — |
| `strike` | `string` | Yes | — |
| `underlying` | `string` | Yes | — |

## Pagination

Pass `next_cursor` as `cursor` with the same filters. Stop when `has_more` is false, or when `next_cursor` is null for endpoints without `has_more`. A cursor is opaque; do not edit or reuse it with different filters.

## Errors

The OpenAPI contract lists `400`, `503`, `429`. Error responses use `error.code`, `error.message`, and `error.resolution`. Follow `Retry-After` after `429`.

For the machine-readable contract, see the [OpenAPI document](https://api.polaris.supply/openapi.json).
