> ## 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.

# Options Ticker

> Query partial option contract observations.

Read venue-published option observations in global collector-time order. Filter by normalized underlying `market`, and optionally by one exact venue-native `instrument`; omit `instrument` for the whole chain.

## Request

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

### Query parameters

| Parameter | Type | Required | Description |
| - | - | - | - |
| `source` | `string` | No | Optional exact source identifier |
| `market` | `string` | No | Optional exact normalized underlying market across sources |
| `instrument` | `string` | No | Exact venue-native option contract; omit to query the whole underlying chain |
| `start` | `integer` | No | Inclusive collector time in Unix milliseconds. With no end, queries through now. Anonymous requests must start within the rolling last hour; older history requires a Polaris API key. |
| `end` | `integer` | No | Inclusive collector time in Unix milliseconds. With no start, queries the preceding hour, clamped to the public cutoff for anonymous requests. Older history requires a Polaris API key. |
| `limit` | `integer` | No | Page size; defaults to 200 and values above 1000 are capped |
| `cursor` | `string` | No | Opaque keyset cursor bound to this complete query; anonymous continuation skips rows that have aged beyond the last hour |

## Access and behavior

With no bounds, the API queries the latest hour anonymously. Explicit bounds inside the rolling last hour are also public; older history requires a Polaris API key. `start` and `end` are inclusive collector timestamps in Unix milliseconds. With only `start`, the query runs through now; with only `end`, it covers the preceding hour, clamped to the anonymous cutoff. Anonymous reads are capped at 1 GiB per request and two concurrent queries per API replica. Rows that age out of the public hour are skipped during anonymous pagination.

## Response

| Field | Type | Required | Description |
| - | - | - | - |
| `has_more` | `boolean` | Yes | — |
| `items` | `OptionTickerEventItem[]` | Yes | — |
| `next_cursor` | `string / null` | No | — |

### `items[]` fields

| Field | Type | Required | Description |
| - | - | - | - |
| `ask_iv` | `string / null` | No | — |
| `ask_price` | `string / null` | No | — |
| `ask_size` | `string / null` | No | — |
| `bid_iv` | `string / null` | No | — |
| `bid_price` | `string / null` | No | — |
| `bid_size` | `string / null` | No | — |
| `collector_timestamp` | `integer` | Yes | — |
| `delta` | `string / null` | No | — |
| `event_id` | `string` | Yes | — |
| `exchange_timestamp` | `integer / null` | No | — |
| `expiry_timestamp` | `integer / null` | No | — |
| `forward_price` | `string / null` | No | — |
| `gamma` | `string / null` | No | — |
| `index_price` | `string / null` | No | — |
| `instrument` | `string` | Yes | — |
| `last_price` | `string / null` | No | — |
| `mark_iv` | `string / null` | No | — |
| `mark_price` | `string / null` | No | — |
| `market` | `string` | Yes | — |
| `open_interest` | `string / null` | No | — |
| `option_type` | `string / null` | No | — |
| `premium_currency` | `string / null` | No | — |
| `quantity_unit` | `string / null` | No | — |
| `rho` | `string / null` | No | — |
| `schema_version` | `integer` | Yes | — |
| `source` | `string` | Yes | — |
| `source_capture_id` | `string` | Yes | — |
| `strike` | `string / null` | No | — |
| `theta` | `string / null` | No | — |
| `turnover_24h` | `string / null` | No | — |
| `underlying` | `string / null` | No | — |
| `underlying_price` | `string / null` | No | — |
| `vega` | `string / null` | No | — |
| `volume_24h` | `string / null` | No | — |

Decimal prices, sizes, implied volatilities, and Greeks remain strings to preserve their normalized representation. Null means that observation did not provide a value. See [option ticker event fields](/schemas/option-tickers) for the SDK envelope.

## 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`, `401`, `422`, `429`, `503`. Error responses use `error.code`, `error.message`, and `error.resolution`. Narrow an expensive query after `422`. Follow `Retry-After` after `429`.

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