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.
Quick definition: options quotes are timestamped bid/ask records. They are the main evidence for whether an option fill assumption was plausible at a specific moment.
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=10Why quotes matter
Options do not trade continuously across every listed contract. A last sale can be stale while the bid/ask market has already moved. Quote history gives a backtest or execution model the market context it needs to decide whether a contract was tradable, how wide the spread was, and which side of the market a realistic fill should reference.
For research, preserve the quote timestamp, bid, ask, sizes, exchange ids, and the selected fill rule. The midpoint is useful as a mark, but it is not automatically executable. If a strategy only works when it receives every midpoint, compare it against near-side and marketable assumptions before promoting the result.
| Workflow question | Quote field to keep | Practical use |
|---|---|---|
| Was the quote fresh enough? | sip_timestamp or quote_timestamp | Reject fills when the nearest quote is outside the allowed window. |
| Was the spread acceptable? | bid_price, ask_price, bid, ask, midpoint | Filter contracts or add slippage based on spread width. |
| Was there visible size? | bid_size, ask_size | Flag tiny or one-sided markets before sizing orders. |
| Which market side did the model use? | Fill side plus bid/ask fields | Distinguish midpoint marks from executable buy or sell assumptions. |
| Was the data live or delayed? | timeframe, delay_minutes | Keep plan-dependent freshness visible in UI and artifacts. |
Failure modes
Do not join quotes to bars only by calendar date when the simulation is intraday. Use timestamp windows around the signal, entry, and exit. Do not forward-fill a quote indefinitely; stale quotes can make a contract appear tradable after the market has changed. Do not treat an empty result as a system failure by default. Some contracts have sparse quote history or are no longer available through current latest-quote lookup after expiration.
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:
{
"status": "ERROR",
"request_id": "cm_4ba72c263423499ea3f5c54d03eda8d1",
"error": {
"code": "forbidden",
"message": "This endpoint requires an Expert or Commercial subscription."
}
}
Related workflow pages
- Data Sources and OPRA
- Options data API
- Why option quotes matter more than last price
- Quote-aware options fills
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"
}