# Quotes

> **Expert or Commercial plan required.** This endpoint is available on Expert and Commercial plans.

Historical **National Best Bid and Offer (NBBO)**–style quotes for one options contract: bid and ask price, sizes, exchange ids, sequence number, and nanosecond SIP timestamps. Expert and Commercial users can request either live quote rows or a 15-minute delayed view. Use it to study spread behavior, liquidity, backtests, and strategy refinement.

Learning the market columns? Read [Options Bid Ask Spread Explained](/options-bid-ask-spread-explained) before using quotes for fills or backtests.

<div data-try-url="/v1/options/quotes/O:NFLX260402C00075000/?limit=10"></div>

## Endpoint

```
GET /v1/options/quotes/{options_ticker}
GET /v1/options/quotes/{options_ticker}/last
```

### Path parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `options_ticker` | string | Yes | Full options ticker (for example `O:NFLX260402C00075000`). Encode `:` as `%3A` if your HTTP client requires it. |

### Query parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `timestamp` | string | No | Filter by time: `YYYY-MM-DD` or a **nanosecond** Unix timestamp string. |
| `timestamp.gte` | string | No | Lower bound (date or nanosecond timestamp). |
| `timestamp.gt` | string | No | Strictly greater than. |
| `timestamp.lte` | string | No | Upper bound. |
| `timestamp.lt` | string | No | Strictly less than. |
| `sort` | string | No | Field used for ordering. |
| `order` | string | No | Sort direction for `sort`. |
| `limit` | integer | No | Maximum quotes returned. Default **1000**, maximum **10000**. |
| `timeframe` | string | No | `live` (default) returns current quote rows. `delayed` caps results to data no newer than 15 minutes ago. |
| `page` | string | No | Pagination continuation: use the URL in `next_url`, or pass the `page` query value from that URL here. |

The `/last` endpoint accepts `timeframe` only. `timeframe=live` returns the current latest NBBO quote. `timeframe=delayed` returns the most recent historical quote row no newer than 15 minutes ago.

### Response (historical quotes)

| Field | Type | Description |
| --- | --- | --- |
| `status` | string | Outcome (for example `OK`). |
| `request_id` | string | Unique identifier for this request, assigned by CuteMarkets. |
| `timeframe` | string | `REAL-TIME` for live responses, `DELAYED` for delayed responses. |
| `delay_minutes` | integer | Present only for delayed responses; currently `15`. |
| `results` | array | Quote rows, ordered per `sort` / `order`. |
| `next_url` | string | When more quotes exist, full URL for the next page. |

Use `limit` and time-window filters per page; follow `next_url` when present.

Each element of `results`:

| Field | Type | Description |
| --- | --- | --- |
| `bid_price` | number | Best bid (premium per share). |
| `ask_price` | number | Best ask. |
| `bid_size` | number | Bid size in **round lots** (often 100 shares per lot unless your venue defines otherwise). A size of `2` means two round lots at that bid. |
| `ask_size` | number | Ask size in the same round-lot units. |
| `bid_exchange` | integer | Exchange id for the bid side. |
| `ask_exchange` | integer | Exchange id for the ask side. |
| `sequence_number` | integer | Monotonic sequence for quote events for this symbol (not always contiguous). |
| `sip_timestamp` | integer | Nanosecond Unix time when the SIP received this quote. |

### Response (latest quote)

`GET /v1/options/quotes/{options_ticker}/last/` returns one normalized quote object in `results`. It preserves upstream fields and adds stable mark-friendly fields:

| Field | Type | Description |
| --- | --- | --- |
| `ticker` | string | Requested option ticker. |
| `bid` | number | Current or delayed best bid. |
| `ask` | number | Current or delayed best ask. |
| `midpoint` | number | `(bid + ask) / 2` when bid and ask are available. |
| `bid_size` | number | Bid size. |
| `ask_size` | number | Ask size. |
| `bid_exchange` | integer | Exchange id for the bid side. |
| `ask_exchange` | integer | Exchange id for the ask side. |
| `quote_timestamp` | integer | Nanosecond quote timestamp. |
| `timeframe` | string | `REAL-TIME` or `DELAYED`. |

If no usable quote exists, `results` is an empty object. Expired contracts can still have historical quote rows when the upstream retains them, but current latest quote lookups may return **404** after a contract is no longer listed.

### Plan requirement (Expert or Commercial)

If the API key is not on Expert or Commercial, CuteMarkets returns **403**:

```json
{
  "status": "ERROR",
  "request_id": "cm_4ba72c263423499ea3f5c54d03eda8d1",
  "error": {
    "code": "forbidden",
    "message": "This endpoint requires an Expert or Commercial subscription."
  }
}
```

## Related workflow pages

- [Historical options quotes API](/historical-options-quotes-api)
- [Why option quotes matter more than last price](/blog/why-option-quotes-matter-more-than-last-price)
- [Quote-aware options fills](/blog/quote-aware-options-fills-research)

Upgrade to **Expert** (€99/mo yearly or €119/mo monthly) for live quotes data, or **Commercial** (€399/mo yearly or €469/mo monthly) when the same data powers commercial applications.

## Example requests

Live quotes are the default:

```bash
curl \
  "https://api.cutemarkets.com/v1/options/quotes/O:NFLX260402C00075000/?limit=10" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

Latest delayed quote row:

```bash
curl \
  "https://api.cutemarkets.com/v1/options/quotes/O:NFLX260402C00075000/?timeframe=delayed&limit=1&sort=timestamp&order=desc" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

Latest live quote for portfolio marks:

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

Latest delayed quote for portfolio marks:

```bash
curl \
  "https://api.cutemarkets.com/v1/options/quotes/O:NFLX260402C00075000/last/?timeframe=delayed" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

Time window (example):

```bash
curl \
  "https://api.cutemarkets.com/v1/options/quotes/O:NFLX260402C00075000/?timestamp.gte=2026-03-01&timestamp.lte=2026-03-31&limit=500&sort=timestamp&order=desc" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

## Sample response (success)

```json
{
  "results": [
    {
      "ask_exchange": 323,
      "ask_price": 0.28,
      "ask_size": 10,
      "bid_exchange": 316,
      "bid_price": 0.25,
      "bid_size": 1,
      "sequence_number": 789539218,
      "sip_timestamp": 1645119125346243600
    },
    {
      "ask_exchange": 301,
      "ask_price": 0.27,
      "ask_size": 1,
      "bid_exchange": 323,
      "bid_price": 0.24,
      "bid_size": 10,
      "sequence_number": 788994206,
      "sip_timestamp": 1645119118474271000
    }
  ],
  "status": "OK",
  "timeframe": "REAL-TIME",
  "request_id": "cm_a1b2c3d4e5f6478990a1b2c3d4e5f678"
}
```

## Expired contract behavior

Quotes are historical event data. Use timestamp filters around the trading session you want to inspect, including for same-week or expired contracts. For expired contracts, the latest quote endpoint represents current latest quote availability and may return **404** after the contract is no longer listed; use the historical quotes endpoint with explicit timestamps when reconstructing prior marks.

Delayed responses include delay metadata:

```json
{
  "results": [
    {
      "ask_exchange": 323,
      "ask_price": 0.28,
      "ask_size": 10,
      "bid_exchange": 316,
      "bid_price": 0.25,
      "bid_size": 1,
      "sequence_number": 789539218,
      "sip_timestamp": 1645119125346243600
    }
  ],
  "status": "OK",
  "timeframe": "DELAYED",
  "delay_minutes": 15,
  "request_id": "cm_a1b2c3d4e5f6478990a1b2c3d4e5f678"
}
```
