# Option Chain Snapshot

Returns a **snapshot of options contracts** for one underlying equity: per-contract pricing context, Greeks, implied volatility, open interest, latest quote and trade (when your plan includes them), and underlying reference. Use it for chain overviews, comparing strikes and expirations, research, and strategy work.

> **Quick definition: an option chain snapshot is the current cross-section of listed contracts for one underlying, useful for comparing strikes and expirations before drilling into one contract's history.**

If you are still learning what the columns mean, read [How to Read an Options Chain](/how-to-read-an-options-chain) and [Options Greeks Explained](/options-greeks-explained) first.

For **one** contract by underlying + OCC ticker, use [Contract snapshot](/docs/option-contract-snapshot) instead.

<div data-try-url="/v1/options/chain/NFLX/?limit=2"></div>

## When to use a chain snapshot

Use the chain endpoint when the user or model needs to compare many candidate contracts at once. It is the right surface for strike ladders, expiration views, scanner filters, watchlist setup, and pre-trade diagnostics. It is not the right surface for replaying a historical fill, because the snapshot describes current or plan-specific latest state rather than a timestamped quote stream.

For a robust workflow, treat the chain as a candidate generator. First select the underlying and expiration, then filter by contract type, strike range, liquidity, open interest, volume, Greeks, or implied volatility. After a contract survives those filters, request quotes, trades, aggregates, or a contract snapshot depending on the next decision.

| Decision | Use chain snapshot? | Better endpoint when chain is not enough |
| --- | --- | --- |
| Show a current strike table | Yes. It returns many contracts with latest state in one response. | Use pagination when the visible table spans many strikes. |
| Discover historical contracts | Not by itself. Current chain state can leak future listings into a backtest. | [Contracts](/docs/contracts) with `as_of`. |
| Price an entry or exit in a backtest | No. A latest quote or trade is not proof of prior executable state. | [Quotes](/docs/quotes) with timestamp bounds. |
| Audit recent activity | Partly. `last_trade` is useful context but not a full tape. | [Trades](/docs/trades) and [Aggregates](/docs/aggregates). |
| Refresh one selected leg | Usually no. Loading the full chain is unnecessary. | [Contract snapshot](/docs/option-contract-snapshot). |

## Implementation checklist

- Narrow the request by `expiration_date`, `contract_type`, and strike range when the UI already knows those filters.
- Store the returned OCC ticker for any contract the user selects.
- Display quote and trade timestamps when those fields influence a decision.
- Treat missing Greeks, IV, quote, or trade fields as data availability states, not rendering errors.
- Use quotes or trades for historical replay instead of reusing the latest chain snapshot.

## Endpoint

```
GET /v1/options/chain/{ticker}
```

### Path parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `ticker` | string | Yes | Underlying symbol (for example `NFLX` or `AAPL`). |

### Query parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `strike_price` | number | No | Exact strike filter. |
| `expiration_date` | string | No | Expiration date, `YYYY-MM-DD`. |
| `contract_type` | string | No | Filter by type (for example `call` or `put`). |
| `strike_price.gte` | number | No | Strike greater than or equal. |
| `strike_price.gt` | number | No | Strike greater than. |
| `strike_price.lte` | number | No | Strike less than or equal. |
| `strike_price.lt` | number | No | Strike less than. |
| `expiration_date.gte` | string | No | Expiration on or after this date (`YYYY-MM-DD`). |
| `expiration_date.gt` | string | No | Expiration after this date. |
| `expiration_date.lte` | string | No | Expiration on or before this date. |
| `expiration_date.lt` | string | No | Expiration before this date. |
| `sort` | string | No | Field used for ordering. |
| `order` | string | No | Sort direction for `sort`. |
| `limit` | integer | No | Maximum contracts returned. Default **10**, maximum **100**. |
| `page` | string | No | Pagination continuation: use the URL in `next_url`, or pass the `page` query value from that URL here. |

### Response

Top-level fields:

| Field | Type | Description |
| --- | --- | --- |
| `status` | string | Outcome of the request (for example `OK`). |
| `request_id` | string | Unique identifier for this request, assigned by CuteMarkets. |
| `results` | array | Snapshot objects, one per contract. |
| `next_url` | string | When more contracts exist for the query, full URL for the next page. |


Each element of `results` may include:

| Field | Type | Description |
| --- | --- | --- |
| `break_even_price` | number | Underlying price at which the position breaks even (call: strike + premium; put: strike − premium). |
| `day` | object | Latest daily bar: open, high, low, close, volume, VWAP, change fields, `last_updated` (nanoseconds). |
| `details` | object | `ticker`, `contract_type`, `exercise_style`, `expiration_date`, `strike_price`, `shares_per_contract`. |
| `greeks` | object | `delta`, `gamma`, `theta`, `vega` when available; some deep ITM or illiquid lines may omit values. |
| `implied_volatility` | number | IV implied by the option price, when available. |
| `last_quote` | object | Latest quote (bid/ask, sizes, exchanges, midpoint, `last_updated`, `timeframe`) when quotes are enabled for your plan. |
| `last_trade` | object | Latest trade when your plan includes trade data: `price`, `size`, `exchange`, `sip_timestamp`, `conditions`, `timeframe`, and related fields. |
| `open_interest` | number | Open interest. |
| `underlying_asset` | object | Underlying: `ticker`, `price`, `change_to_break_even`, `last_updated`, `timeframe`. |
| `fmv` | number | Fair market value estimate when your tier includes it. |
| `fmv_last_updated` | integer | Nanosecond timestamp of last FMV update when `fmv` is present. |

## Example requests

```bash
curl \
  "https://api.cutemarkets.com/v1/options/chain/NFLX/?limit=2" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

Filtered chain (example):

```bash
curl \
  "https://api.cutemarkets.com/v1/options/chain/NFLX/?contract_type=call&limit=50&sort=strike_price&order=asc" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

Higher `limit` (up to 100):

```bash
curl \
  "https://api.cutemarkets.com/v1/options/chain/NFLX/?limit=100" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

## Sample response

_Sample with two results._

```json
{
  "results": [
    {
      "break_even_price": 100.025,
      "day": {
        "change": -0.08,
        "change_percent": -80,
        "close": 0.02,
        "high": 0.15,
        "last_updated": 1775016000000000000,
        "low": 0.02,
        "open": 0.11,
        "previous_close": 0.1,
        "volume": 11788,
        "vwap": 0.03614
      },
      "details": {
        "contract_type": "call",
        "exercise_style": "american",
        "expiration_date": "2026-04-02",
        "shares_per_contract": 100,
        "strike_price": 100,
        "ticker": "O:NFLX260402C00100000"
      },
      "greeks": {
        "delta": 0.02481795338171621,
        "gamma": 0.022072818287936315,
        "theta": -0.13121396656786571,
        "vega": 0.0019964356066287225
      },
      "implied_volatility": 0.6950024226241469,
      "last_quote": {
        "ask": 0.03,
        "ask_size": 486,
        "ask_exchange": 309,
        "bid": 0.02,
        "bid_size": 238,
        "bid_exchange": 322,
        "last_updated": 1775072652441254747,
        "midpoint": 0.025,
        "timeframe": "REAL-TIME"
      },
      "last_trade": {
        "sip_timestamp": 1775073506446593186,
        "conditions": [
          227
        ],
        "price": 0.02,
        "size": 50,
        "exchange": 312,
        "timeframe": "REAL-TIME"
      },
      "open_interest": 14078,
      "underlying_asset": {
        "change_to_break_even": 5.235,
        "last_updated": 1775123022067431274,
        "price": 94.79,
        "ticker": "NFLX",
        "timeframe": "DELAYED"
      }
    },
    {
      "break_even_price": 97.255,
      "day": {
        "change": -0.45,
        "change_percent": -65.2,
        "close": 0.24,
        "high": 1.11,
        "last_updated": 1775016000000000000,
        "low": 0.16,
        "open": 0.91,
        "previous_close": 0.69,
        "volume": 11096,
        "vwap": 0.3416
      },
      "details": {
        "contract_type": "call",
        "exercise_style": "american",
        "expiration_date": "2026-04-02",
        "shares_per_contract": 100,
        "strike_price": 97,
        "ticker": "O:NFLX260402C00097000"
      },
      "greeks": {
        "delta": 0.18593220522845647,
        "gamma": 0.10775236828790113,
        "theta": -0.5784063493211438,
        "vega": 0.010167595059336215
      },
      "implied_volatility": 0.6600286584180963,
      "last_quote": {
        "ask": 0.27,
        "ask_size": 63,
        "ask_exchange": 318,
        "bid": 0.24,
        "bid_size": 60,
        "bid_exchange": 315,
        "last_updated": 1775073599203471487,
        "midpoint": 0.255,
        "timeframe": "REAL-TIME"
      },
      "last_trade": {
        "sip_timestamp": 1775073599506207795,
        "conditions": [
          209
        ],
        "price": 0.24,
        "size": 1,
        "exchange": 309,
        "timeframe": "REAL-TIME"
      },
      "open_interest": 13473,
      "underlying_asset": {
        "change_to_break_even": 2.465,
        "last_updated": 1775123022067431274,
        "price": 94.79,
        "ticker": "NFLX",
        "timeframe": "DELAYED"
      }
    }
  ],
  "status": "OK",
  "request_id": "cm_adce10cb073745c7b859fc8131b203b0"
}
```

## Related workflow pages

- [Options chain API](/options-chain-api)
- [ETF options data API](/etf-options-data-api)
- [Options data API](/options-data-api)
- [Put/Call Ratio API](/put-call-ratio-api)

## How to use chain snapshots well

The chain endpoint is the right starting point when the application needs to compare many contracts at once. A scanner can filter by expiration, strike range, contract type, delta, implied volatility, open interest, volume, or bid/ask width after the response arrives. A strategy builder can use the chain to choose candidate legs, then request historical quotes, trades, or aggregates for the exact OCC tickers that survive the filter.

Keep the chain request narrow enough for the job. If a user has already selected an expiration, pass `expiration_date` instead of loading every listed contract. If the workflow only needs calls near the money, use `contract_type=call` and a strike range. Narrow requests make the UI faster and reduce the chance that pagination splits a user-visible chain across multiple pages.

Do not treat every field as equally fresh. The underlying price, latest quote, latest trade, open interest, and daily bar can have different update behavior and plan-dependent freshness. When a chain powers an order-ticket-like UI or a backtest, display or store the relevant timestamp fields beside the values. That is especially important for short-dated options where stale quotes and wide spreads can change the conclusion.

## Common chain patterns

- Expiration table: fetch listed expirations first, then request one expiration at a time.
- Strike ladder: sort by `strike_price` and filter by `contract_type`.
- Liquidity scan: combine open interest, volume, quote freshness, and spread width.
- Greeks screen: filter the chain response by delta, gamma, theta, or vega after checking liquidity.
- Backtest setup: use the chain to select a contract, then use historical quotes for fill evidence.

The main rule is simple: use the chain for selection, then use contract-specific endpoints for proof. A chain snapshot tells you which contracts are interesting now; historical quotes and trades tell you what was available at the timestamp your model is trying to reconstruct.
