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 before using quotes for fills or backtests.
Example Endpoint
/v1/options/quotes/O:NFLX260402C00075000/?limit=10Endpoint
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:
{
"status": "ERROR",
"request_id": "cm_4ba72c263423499ea3f5c54d03eda8d1",
"error": {
"code": "forbidden",
"message": "This endpoint requires an Expert or Commercial subscription."
}
}
Related workflow pages
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:
curl \
"https://api.cutemarkets.com/v1/options/quotes/O:NFLX260402C00075000/?limit=10" \
-H "Authorization: Bearer YOUR_API_KEY"
Latest delayed quote row:
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:
curl \
"https://api.cutemarkets.com/v1/options/quotes/O:NFLX260402C00075000/last/" \
-H "Authorization: Bearer YOUR_API_KEY"
Latest delayed quote for portfolio marks:
curl \
"https://api.cutemarkets.com/v1/options/quotes/O:NFLX260402C00075000/last/?timeframe=delayed" \
-H "Authorization: Bearer YOUR_API_KEY"
Time window (example):
curl \
"https://api.cutemarkets.com/v1/options/quotes/O:NFLX260402C00075000/?timestamp.gte=2026-03-01×tamp.lte=2026-03-31&limit=500&sort=timestamp&order=desc" \
-H "Authorization: Bearer YOUR_API_KEY"
Sample response (success)
{
"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:
{
"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"
}