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.
When a workflow also needs condition policy, exchange mapping, correction handling, sequence fields, or NBBO-style terminology, keep Option Quote and Trade Conditions next to this page. That guide connects quote rows to trades, OPRA/source context, missing-data handling, and options provider evaluation.
| 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
- Option Quote and Trade Conditions
- 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 (€499/mo yearly or €589/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"
}
Quote implementation notes
Quotes carry executable context. Store bid, ask, bid size, ask size, quote timestamp, condition, exchange or venue context, sequence number when available, and request window. For options, also keep the selected OCC symbol, underlying timestamp, expiration, strike, side, and DTE. Those fields make quote age and spread checks reviewable.
Use Trades for prints and Aggregates for chart intervals, but do not let either replace bid/ask evidence in a fill model. Pair this page with Backtesting Execution Realism and Option Quote and Trade Conditions when building quote-aware backtests, scanners, or contract detail panels.