Historical Options Quotes API for bid/ask spreads and execution-aware research
CuteMarkets exposes historical options quote rows with bid, ask, sizes, exchanges, sequence numbers, and nanosecond timestamps so teams can study spread behavior instead of relying on last price alone.
Why teams use it
What a historical options quotes API should make easy
Bid/ask history
Inspect the spread that existed when a strategy would actually have entered or exited a contract.
Nanosecond timestamps
Use SIP timestamps and sequence fields when intraday ordering matters.
Quote-size context
Filter contracts by displayed size and spread quality before treating them as tradable.
Backtest realism
Reject fills that only work at fantasy midpoints or stale last-sale prices.
Pagination for heavy days
Use time filters and continuation URLs to pull quote windows without overfetching.
Pairs with contracts
Start from the contract universe, then request quotes only for the legs your model selected.
Quote-window workflow
Historical quotes answer fill questions, not contract-discovery questions
Contract discovery tells you which OCC ticker could be selected. Historical quote history tells you what bid, ask, size, spread, and quote freshness existed when the strategy tried to enter or exit that ticker.
| Factor | Page-specific guidance | API implementation |
|---|---|---|
| Window boundary | Define the entry or exit timestamp before requesting quotes so the fill model cannot browse the whole day for a better market. | Use timestamp.gte and timestamp.lt around the decision time, then record the selected quote row, quote age, and rejection threshold. |
| Side-specific fill | Long option entries usually need ask-side evidence and long option exits usually need bid-side evidence. | Store bid, ask, midpoint, bid size, ask size, spread dollars, spread percent, and the side that the simulated order used. |
| Stale and wide markets | A trade print or aggregate bar can look active while the quote window is stale, crossed, no-bid, or too wide for the strategy. | Reject fills with missing quotes, crossed markets, quote age over the policy, spread percent over the policy, or no bid on exit. |
| Replay evidence | A quote-aware backtest should retain the quote rows that justified each fill or rejection. | Persist the request URL, OCC ticker, timestamp window, quote fields, fill price, reject reason, and linked aggregate bar. |
Quote evidence fields
Fields a quote-aware artifact should preserve
Historical quotes become useful when the artifact keeps the market state beside the model decision, not when the backtest collapses everything into one price column.
Market state
Store bid, ask, midpoint, bid size, ask size, exchange, sequence number, SIP timestamp, quote age, and spread percent.
Fill state
Store side, fill policy, modeled price, slippage assumption, no-bid state, stale-quote state, and reject reason.
Join state
Store the OCC ticker, request URL, contract selector, aggregate bar timestamp, trade-print window, and replay artifact id.
How quotes fit
Use quotes after the contract selector has done its job
A historical quote request should usually follow Contracts or Options Contract Selection, because the quote endpoint needs an exact OCC ticker. That order keeps contract identity, listed expiration, strike, side, and `as_of` selection separate from the bid/ask evidence used for execution realism.
Once the contract is selected, Quotes provide the bid, ask, quote size, exchange, sequence, and timestamp context that a fill policy needs. Trades can confirm printed activity, while Aggregates summarize OHLC, VWAP, and volume for charting. Those objects should be joined, not treated as interchangeable prices.
For Backtesting Execution Realism, the quote row is the evidence behind side-specific fills, midpoint assumptions, stale-quote rejects, no-bid exits, and spread-percent gates. If a model cannot show the quote window that justified an entry or exit, the backtest result is harder to trust.
Entry evidence
Store ask-side availability, midpoint, quote age, spread percent, bid size, ask size, and whether the entry was filled, slipped, or rejected.
Exit evidence
Store bid-side availability, no-bid exits, stale quote state, rejected fill reason, and the aggregate bar used for reporting the price path.
Window sizing
Choose a quote window that matches the simulated decision
A quote-aware fill model should not scan a full session for the nicest bid or ask. Define a narrow decision window around the signal timestamp, entry timestamp, or exit timestamp, then choose the first eligible row or the best row allowed by the written policy.
For intraday studies, keep the quote window close to the model clock: seconds for fast 0DTE entries, a wider but still bounded interval for slower event studies, and explicit overnight handling when the strategy carries through earnings or macro releases. That window should be stored beside the selected OCC ticker and the Historical Options Replay Runbook artifact.
The quote row should carry enough metadata to explain the decision later: SIP timestamp, participant timestamp if available, sequence number, exchange, bid size, ask size, quote age, locked or crossed state, spread dollars, spread percent, side used, modeled fill price, and whether the row passed the policy.
Fast scanner window
Use a tighter timestamp window, strict quote-age gate, and explicit stale-row label before a contract can trigger an alert.
Research notebook window
Use a wider timestamp window only when the notebook records why that wider window is allowed and how it affects slippage.
Reject debugging
Keep reject reasons separate from strategy PnL
The historical quotes endpoint is most valuable when it explains why a candidate trade did not qualify. A missing quote window, no-bid exit, stale quote, locked market, crossed market, wide spread, empty displayed size, or late quote update is a data and execution state, not simply a losing trade.
Use Backtesting Data Quality Checklist and Market Data Corrections and Missing Data to decide how the replay should handle empty windows, correction policy, halted symbols, missing intervals, and delayed entitlement states. Those decisions should be made before the result table is ranked by PnL.
A production-quality report should group outcomes by filled-at-ask, filled-at-bid, midpoint-allowed, no-bid exit, stale quote reject, wide-spread reject, missing quote reject, and manual-review state. That grouping makes the fill model easier to inspect than a single aggregate win rate.
Do not hide no-bid exits
No-bid exits should be visible in the artifact, because replacing them with last trade, zero, or an aggregate close changes the meaning of the test.
Do not overtrust prints
A trade print can confirm activity, but a fill decision still needs the contemporaneous bid/ask row and its condition context.
Operations
Monitor quote quality as a production metric
Historical quote analysis should feed production monitoring. Track median quote age, p95 quote age, median spread percent, p95 spread percent, no-bid frequency, crossed-market frequency, empty-window frequency, and backfill success rate per underlying, expiration cycle, and DTE bucket.
Those metrics help a dashboard or scanner explain why a contract disappears from the eligible universe. They also make provider evaluation more concrete than a feature checklist, because the team can compare actual bid/ask availability, displayed size, and replay reliability across the contracts it trades most often.
Fill policy decisions
When historical quotes should change the backtest result
A quote window is not decorative evidence. It can approve a fill, move a modeled price, or reject the trade entirely.
| Decision | Use quote history when | Reject or flag when |
|---|---|---|
| Ask-side entry | A long option entry needs a fresh ask, displayed ask size, and acceptable spread percent at the entry timestamp. | The ask is missing, crossed, stale, outside the spread policy, or only appears after the decision window. |
| Bid-side exit | A long option exit needs bid availability, bid size, and a timestamp close enough to the exit decision. | The contract has no bid, a stale bid, or a bid that appears after the simulated exit decision. |
| Midpoint fill | Midpoint assumptions should be allowed only when bid, ask, and spread width support that policy. | The midpoint is derived from a wide, crossed, or stale market that a live order probably could not execute. |
| No-bid handling | No-bid exits should be stored as a separate state so losses are not hidden by missing data. | The backtest silently substitutes last price, aggregate close, or zero without recording the reason. |
| Trade-print comparison | Trade history can confirm activity after the quote-based fill decision has been evaluated. | A print is old, condition-coded, or outside the quote window used for the simulated order. |
| Aggregate-bar comparison | Bars can summarize the path after the fill evidence is already tied to a quote window. | A bar close is used as an entry or exit price without checking the contemporaneous bid/ask market. |
Use cases
What you can build with this options data API
Spread filters
Measure whether selected contracts were tight enough for the strategy assumption.
Execution studies
Compare candidate fills against contemporaneous bid/ask history.
Liquidity dashboards
Show quote size, spread, and stale-quote warnings inside internal tools.
Historical research
Build more causal options backtests by pairing quotes with trades and contract discovery.
Developer examples
Two code paths teams usually need first
curl "https://api.cutemarkets.com/v1/options/quotes/O:AAPL251121C00225000/?timestamp.gte=2025-10-29T13:30:00Z×tamp.lt=2025-10-29T20:00:00Z" \
-H "Authorization: Bearer YOUR_API_KEY"curl "https://api.cutemarkets.com/v1/options/contracts/?underlying_ticker=AAPL&as_of=2025-10-29&expiration_date=2025-11-21&limit=25" \
-H "Authorization: Bearer YOUR_API_KEY"Evaluate and compare
Why chain snapshots alone are not enough
Focused endpoint pages match how most teams evaluate an options data API. They evaluate one workflow first, then expand into chains, contracts, quotes, trades, and expirations.
Options data API
Start from the main options overview for the full live and historical surface.
Historical options data API
See how contracts, quotes, trades, aggregates, and expirations fit together for research.
Best options data APIs
Compare provider evaluation criteria before committing to a data stack.
Options Data API Evaluation Framework
Use a workflow-first framework before comparing providers, endpoints, and pricing.
Options backtesting API
Connect endpoint choices to historical contracts, quotes, trades, and aggregate workflows.
Options contracts API
Use contract discovery and `as_of` filters before requesting deeper market data.
Endpoint coverage matrix
Map chains, contracts, quotes, trades, snapshots, Greeks, OI, expirations, and bars to a workflow.
Open next
Docs and research for the next step
Docs to open next
Relevant API docs
Tutorials and research
Related articles
FAQ
Common questions about this options data API
Why use historical quotes instead of historical option prices?
Historical quotes show the bid/ask market and displayed size around a point in time. Many option contracts have sparse trades, and a last price can be stale or impossible to execute against.
Does CuteMarkets provide both real-time and historical options data?
Yes. CuteMarkets supports real-time snapshots and historical workflows across contracts, trades, quotes, aggregates, and expirations, with plan-specific live or delayed access.
Do you provide quotes, trades, and historical contracts?
Yes. The platform includes contracts, chain snapshots, contract snapshots, trade history, quote history, aggregates, and expiration lookups for U.S.-listed options.
Do you provide the earnings calendar too?
CuteMarkets provides the options data layer. Earnings timing should come from a dedicated earnings calendar source that you combine with the options data.
Use bid/ask evidence before trusting an options backtest
Start with historical contract discovery, then pull quote windows for the contracts your strategy would have selected.