# Contracts

Look up options contracts in bulk or fetch a single contract by its options ticker. Results include contract type, exercise style, expiration, strike, and related reference fields.

New to the contract fields? Start with [How Options Work](/how-options-work), [Strike Price Explained](/strike-price-explained), and [Option Expiration Explained](/option-expiration-explained).

<div data-try-url="/v1/options/contracts/?underlying_ticker=NFLX&limit=10"></div>

Related guides: [OCC Option Symbol Format Explained](/occ-option-symbol-format) and [Option Expiration Date Filters](/option-expiration-date-filter-api)

## Endpoints

```
GET /v1/options/contracts
GET /v1/options/contracts/{options_ticker}
```

---

## List contracts

Returns a reference index of options contracts. You can scan the full universe or narrow results with filters (underlying, expiration, strike, contract type, and more). By default, expired contracts are excluded. A single contract is loaded with **`GET /v1/options/contracts/{options_ticker}/`**. The list URL does **not** accept a `ticker` query parameter (requests that include it receive **400**).

### Query parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `underlying_ticker` | string | No | Limit to contracts for this underlying equity ticker (for example `NFLX`). |
| `contract_type` | string | No | Filter by contract type (for example `call` or `put`). |
| `expiration_date` | string | No | Filter by expiration, format `YYYY-MM-DD`. |
| `as_of` | string | No | Treat contracts as of this calendar date, format `YYYY-MM-DD`. Defaults to today when omitted. |
| `strike_price` | number | No | Filter by exact strike price. |
| `expired` | boolean | No | Include expired contracts when `true`. Default is `false`. |
| `underlying_ticker.gte` | string | No | Range filter: underlying ticker greater than or equal. |
| `underlying_ticker.gt` | string | No | Range filter: underlying ticker greater than. |
| `underlying_ticker.lte` | string | No | Range filter: underlying ticker less than or equal. |
| `underlying_ticker.lt` | string | No | Range filter: underlying ticker less than. |
| `expiration_date.gte` | string | No | Range filter: expiration on or after this date (`YYYY-MM-DD`). |
| `expiration_date.gt` | string | No | Range filter: expiration after this date. |
| `expiration_date.lte` | string | No | Range filter: expiration on or before this date. |
| `expiration_date.lt` | string | No | Range filter: expiration before this date. |
| `strike_price.gte` | number | No | Range filter: strike greater than or equal. |
| `strike_price.gt` | number | No | Range filter: strike greater than. |
| `strike_price.lte` | number | No | Range filter: strike less than or equal. |
| `strike_price.lt` | number | No | Range filter: strike less than. |
| `sort` | string | No | Field name used for ordering. |
| `order` | string | No | Sort direction for the `sort` field. |
| `limit` | integer | No | Maximum number of results per request. Default is **10**, maximum is **1000**. |
| `page` | string | No | Pagination continuation. When `next_url` is present, request that full URL (recommended), or call this endpoint with the `page` query string from `next_url`. |

### Pagination

Use `limit` (up to 1000) together with `sort`, `order`, and filters such as expiration or strike ranges to narrow results. When more rows exist, the response includes **`next_url`**: a complete URL for the next page. Request it with the same API key and repeat until `next_url` is absent.

### Response (list)

| Field | Type | Description |
| --- | --- | --- |
| `status` | string | Outcome of the request (for example `OK`). |
| `request_id` | string | Identifier for this request (assigned by CuteMarkets). |
| `results` | array | Contract objects matching the query. |
| `next_url` | string | Present when another page of results exists. Full URL for the next request. |

Each element of `results` may include:

| Field | Type | Description |
| --- | --- | --- |
| `ticker` | string | Options contract ticker. |
| `underlying_ticker` | string | Underlying symbol. |
| `contract_type` | string | Typically `call`, `put`, or rarely `other`. |
| `exercise_style` | string | One of `american`, `european`, or `bermudan`. |
| `expiration_date` | string | Expiration date, `YYYY-MM-DD`. |
| `strike_price` | number | Strike price. |
| `shares_per_contract` | number | Contract size in shares. |
| `primary_exchange` | string | MIC code of the primary listing exchange. |
| `cfi` | string | Six-letter CFI code ([ISO 10962](https://en.wikipedia.org/wiki/ISO_10962)). |
| `correction` | integer | Correction number for this contract record, when present. |
| `additional_underlyings` | array | Optional deliverables or extra underlyings (for example after corporate actions). Objects may include `underlying`, `type`, and `amount`. |

### Example request (list)

```bash
curl \
  "https://api.cutemarkets.com/v1/options/contracts/?underlying_ticker=NFLX&limit=10" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

### Sample response (list)

```json
{
  "results": [
    {
      "cfi": "OCASPS",
      "contract_type": "call",
      "exercise_style": "american",
      "expiration_date": "2026-04-02",
      "primary_exchange": "BATO",
      "shares_per_contract": 100,
      "strike_price": 40,
      "ticker": "O:NFLX260402C00040000",
      "underlying_ticker": "NFLX"
    },
    {
      "cfi": "OCASPS",
      "contract_type": "call",
      "exercise_style": "american",
      "expiration_date": "2026-04-02",
      "primary_exchange": "BATO",
      "shares_per_contract": 100,
      "strike_price": 45,
      "ticker": "O:NFLX260402C00045000",
      "underlying_ticker": "NFLX"
    }
  ],
  "status": "OK",
  "request_id": "cm_6e2beadb22f8498885af015fde6bfab2"
}
```

---

## Contract detail

Returns reference data for **one** options contract: type (call/put), exercise style, expiration, strike, shares per contract, underlying symbol, primary exchange, and related metadata. Use it to confirm contract specifications, align chain or strategy logic, or integrate contract definitions into tooling.

<div data-try-url="/v1/options/contracts/O:NFLX260402C00075000/"></div>

### Endpoint

```
GET /v1/options/contracts/{options_ticker}
```

### Path parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `options_ticker` | string | Yes | Options contract ticker in full form (for example `O:NFLX260402C00075000`). The path segment is the contract identifier; it is not repeated as a query parameter. |

### Query parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `as_of` | string | No | Return the contract as it was defined on this calendar date, format `YYYY-MM-DD`. When omitted, defaults to today. |

### Historical reference behavior

`as_of` is for contract **reference data**: expiration, strike, contract type, deliverables, and related metadata as of a date. It does not return a quote, mark, trade, IV, or Greeks. For expired or same-week contracts, use `as_of` to confirm the contract definition, then use quotes/trades with timestamp filters to reconstruct prior market state. Current snapshot endpoints may return **404** after a contract expires or leaves the current snapshot feed.

### Response (detail)

| Field | Type | Description |
| --- | --- | --- |
| `status` | string | Outcome of the request (for example `OK`). |
| `request_id` | string | Unique identifier for this request, assigned by CuteMarkets. |
| `results` | object | The contract record for the requested ticker. |

Fields on `results`:

| Field | Type | Description |
| --- | --- | --- |
| `ticker` | string | Options contract ticker. |
| `underlying_ticker` | string | Underlying equity symbol. |
| `contract_type` | string | Typically `call`, `put`, or rarely `other`. |
| `exercise_style` | string | One of `american`, `european`, or `bermudan`. |
| `expiration_date` | string | Expiration date, `YYYY-MM-DD`. |
| `strike_price` | number | Strike price. |
| `shares_per_contract` | number | Shares represented per contract. |
| `primary_exchange` | string | MIC code of the primary listing exchange. |
| `cfi` | string | Six-letter CFI code ([ISO 10962](https://en.wikipedia.org/wiki/ISO_10962)). |
| `correction` | integer | Correction revision for this contract record, when present. |
| `additional_underlyings` | array | Optional. Extra deliverables or underlyings (for example after splits or mergers). Objects may include `underlying`, `type`, and `amount`. See the [Options Industry Council FAQ on corporate actions](https://www.optionseducation.org/referencelibrary/faq/splits-mergers-spinoffs-bankruptcies) for context. |

### Example request (detail)

```bash
curl \
  "https://api.cutemarkets.com/v1/options/contracts/O:NFLX260402C00075000/" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

Optional historical as-of:

```bash
curl \
  "https://api.cutemarkets.com/v1/options/contracts/O:NFLX260402C00075000/?as_of=2026-01-15" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

### Sample response (detail)

```json
{
  "results": {
    "cfi": "OCASPS",
    "contract_type": "call",
    "exercise_style": "american",
    "expiration_date": "2026-04-02",
    "primary_exchange": "BATO",
    "shares_per_contract": 100,
    "strike_price": 75,
    "ticker": "O:NFLX260402C00075000",
    "underlying_ticker": "NFLX"
  },
  "status": "OK",
  "request_id": "cm_dae7973c238245a5bf0525814f03e3aa"
}
```

Some contracts include `additional_underlyings` when deliverables are not a single equity only, for example after mergers or spinoffs:

```json
{
  "results": {
    "additional_underlyings": [
      { "amount": 44, "type": "equity", "underlying": "VMW" },
      { "amount": 6.53, "type": "currency", "underlying": "USD" }
    ],
    "cfi": "OCASPS",
    "contract_type": "call",
    "exercise_style": "american",
    "expiration_date": "2021-11-19",
    "primary_exchange": "BATO",
    "shares_per_contract": 100,
    "strike_price": 85,
    "ticker": "O:AAPL211119C00085000",
    "underlying_ticker": "AAPL"
  },
  "status": "OK",
  "request_id": "cm_9f3e2d1c0b4a5e6d7c8b9a0f1e2d3c4b"
}
```
