Historical options quotes API

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.

Real-time dataHistorical market dataQuotes & tradesAggregates & indicators

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.

FactorPage-specific guidanceAPI implementation
Window boundaryDefine 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 fillLong 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 marketsA 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 evidenceA 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.

DecisionUse quote history whenReject or flag when
Ask-side entryA 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 exitA 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 fillMidpoint 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 handlingNo-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 comparisonTrade 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 comparisonBars 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

quote window
curl "https://api.cutemarkets.com/v1/options/quotes/O:AAPL251121C00225000/?timestamp.gte=2025-10-29T13:30:00Z&timestamp.lt=2025-10-29T20:00:00Z" \
  -H "Authorization: Bearer YOUR_API_KEY"
historical contracts first
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"

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.