Do not collapse quotes into trades
Quotes describe the bid/ask market a workflow could face. Trades describe prints that happened.
Use both when judging liquidity.
A developer and buyer guide to OPRA-originating listed-options market data, why quotes and trades need separate handling, and how to evaluate an options API built on that market context.
OPRA is the consolidated reporting layer for U.S. exchange-listed options last-sale and quotation information. An OPRA-backed options API still has to make that data useful by preserving contract identity, bid/ask quotes, trade prints, timestamps, conditions, entitlement state, pagination, and missing-data behavior across the workflows developers actually build.
Primary market
U.S. listed options
OPRA context applies to exchange-listed securities options, not equities, futures, crypto, or broker execution.
Core objects
Quotes + trades
Quotation information and last-sale prints answer different implementation questions and should stay separate.
CuteMarkets workflow
Contracts to evidence
Use expirations, contracts, chains, snapshots, quotes, trades, aggregates, and plan labels together.
Source context
OPRA provides consolidated listed-options quote and last-sale context from U.S. options exchanges, but a production API has to turn that feed context into a developer workflow. On CuteMarkets, that means connecting Options Data API requests to listed Expirations, exact Contracts, Quotes, Trades, Aggregates, and focused contract snapshots.
When a chain is loaded, keep the OCC ticker, expiration date, strike, contract type, multiplier, open interest, implied volatility, Greeks, latest quote, latest trade, and day stats together. When the workflow drills into one leg, the quote row should preserve bid, ask, size, timestamp, condition, spread width, midpoint, and quote age, while the trade row preserves printed price, size, exchange context, sequence, correction, and trade condition.
Quotes describe the bid/ask market a workflow could face. Trades describe prints that happened.
Use both when judging liquidity.
OPRA context does not remove look-ahead risk. Historical research still needs point-in-time contracts and quote windows.
Use `as_of` and timestamp filters.
Live, delayed, quote access, WebSocket access, and commercial-use terms affect what the app can show.
Label freshness and plan state.
Provenance
Options do not have one clean price that can be reused everywhere. A last price can be stale, a midpoint can be unexecutable, a bar can summarize prints without showing the current bid/ask, and a chain snapshot can be too broad for fill validation. The Options Quotes vs Trades guide separates these objects, while Why Last Price Is Bad for Options Backtesting explains why quote-aware fills need bid/ask evidence.
For a backtest, event study, scanner, or dashboard, provenance means the app can answer where the selected value came from. Store the request URL, OCC symbol, quote timestamp, trade timestamp, quote condition, trade condition, spread percent, quote age, and rejection reason beside the result. The Backtesting Execution Realism and Historical Options Quotes API pages turn those terms into fill policies.
Provider evaluation
A provider saying "OPRA data" is a starting point, not the full vendor review. Ask how the API exposes quote and trade conditions, timestamps, corrections, exchange or participant context, sequence fields, pagination, empty windows, stale quotes, delayed data labels, commercial-use rules, and support for both REST and streaming. The Options Data Provider Evaluation and Live, Delayed, and Entitlements docs cover the operational checks.
For procurement or migration, keep the source review tied to buildable use cases. A chain scanner needs moneyness, delta, IV, open interest, volume, spread percent, and quote freshness. A historical backtest needs contracts with `as_of`, quote windows, trade prints, aggregate bars, reject reasons, and audit artifacts. A production dashboard needs plan labels, WebSocket subscriptions, reconnect state, and REST backfills. The Compare page and Best Options Data APIs page organize those checks against provider alternatives.
Boundaries
OPRA source context does not make every options API equivalent. The developer experience still depends on authentication, endpoint names, response envelopes, pagination, filters, SDKs, examples, rate limits, historical lookback, WebSocket availability, pricing, support, and licensing. A strong evaluation checks the data source and then verifies whether the API can answer the exact product question.
CuteMarkets should be judged on the complete workflow: discover listed expirations, choose exact OCC contracts, inspect current chains, drill into snapshots, validate historical quotes, review trades, summarize aggregates, and preserve evidence for every fill, alert, chart, and research conclusion. That is how OPRA-originating market data becomes a usable options API rather than an abstract data-source claim.
Implementation detail
Treat this page as an implementation boundary, more than a short answer. For OPRA Market Data for Options APIs, the practical record should include the request inputs, timestamp context, selected object, freshness state, and the reason a row was accepted or rejected. That is what keeps a concise answer usable when it becomes a scanner, dashboard, backtest, alert, or support note.
The core page facts are Primary market: U.S. listed options; Core objects: Quotes + trades; CuteMarkets workflow: Contracts to evidence. Those values should map to fields in code or to visible labels in the interface. If a developer cannot point to the endpoint family, market-data object, date window, entitlement state, or review artifact behind the answer, the workflow is still too vague for production use.
A reliable implementation should store source URLs or endpoint paths, query parameters, pagination state, market timestamps, application timestamps, and any reject reason beside the result. That evidence makes it possible to rerun the answer later, compare it with another provider, and explain why a value changed after a calendar update, feed repair, plan change, or data-quality review.
In the checklist, the handoff starts with Separate the market-data object and ends with Link source review to implementation. Keep those steps connected with stable identifiers rather than display labels, especially when the workflow moves from stocks into options, from chains into exact contracts, or from current snapshots into historical replay.
These object boundaries keep scanner, dashboard, and backtest logic from treating unlike market-data fields as interchangeable.
| Object | What it tells you | Implementation use |
|---|---|---|
| Quotes | Bid, ask, size, quote timestamp, quote age, spread, and condition context. | Validate executable context, scanner liquidity, no-bid exits, stale quotes, and spread filters. |
| Trades | Printed price, size, timestamp, exchange context, sequence, correction, and condition context. | Review tape activity, unusual options flow, event response, and aggregate-bar interpretation. |
| Contracts and expirations | Listed series, OCC identity, expiration date, strike, contract side, and historical availability. | Avoid invalid dates, stale contracts, look-ahead selection, and wrong-symbol joins. |
| Aggregates | Trade-derived OHLC bars, volume, and VWAP over a selected interval. | Build charts and price-path context without treating bars as bid/ask fill proof. |
| Entitlement and freshness | Live or delayed state, quote access, WebSocket availability, and plan limits. | Label dashboards, explain missing fields, and prevent production support confusion. |
| Check | Why it matters | CuteMarkets reference |
|---|---|---|
| Quote fields | Bid/ask values, sizes, timestamps, and conditions determine whether a displayed option market is usable. | Quotes docs and historical quotes API. |
| Trade fields | Last-sale prints are activity evidence, not automatic fill prices. | Trades docs and options trades API. |
| Timestamp handling | Research needs UTC filters, quote age, market-session context, and reproducible event windows. | Market hours and timestamps docs. |
| Entitlements | Live, delayed, commercial, quote, and streaming access affect product behavior. | Pricing and live-delayed-entitlements docs. |
| Missing data | Empty pages, no-bid exits, stale quotes, unavailable Greeks, and incomplete pagination should be explicit. | Corrections and missing-data docs. |
| Need | Primary page | Reason |
|---|---|---|
| Build an API integration | Options Data API | Starts with contracts, chains, quotes, trades, aggregates, and expirations. |
| Validate fills | Historical Options Quotes API | Uses bid/ask windows around candidate entry and exit timestamps. |
| Rank live candidates | Options Chain API | Loads chain breadth, Greeks, IV, OI, volume, and latest quote/trade context. |
| Compare vendors | Options Data API Evaluation Framework | Turns source and endpoint claims into a testable review plan. |
| Review license fit | Market Data Licensing and Commercial Use | Separates internal tools, redistribution, display, and commercial terms. |
API example
request quote and trade evidence
# Start from a listed contract, then inspect the quote and trade evidence separately.
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.cutemarkets.com/v1/options/contracts/?underlying_ticker=AAPL&expiration_date=2026-06-19&limit=100"
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.cutemarkets.com/v1/options/quotes/O:AAPL260619C00225000/?timestamp.gte=2026-06-04T13:30:00Z×tamp.lt=2026-06-04T13:35:00Z"
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.cutemarkets.com/v1/options/trades/O:AAPL260619C00225000/?timestamp.gte=2026-06-04T13:30:00Z×tamp.lt=2026-06-04T13:35:00Z"quote quality model
type QuoteRow = {
bid_price: string;
ask_price: string;
sip_timestamp: string;
conditions?: string[];
};
function explainQuote(row: QuoteRow, decisionTimestampMs: number) {
const bid = Number(row.bid_price);
const ask = Number(row.ask_price);
const mid = bid > 0 && ask >= bid ? (bid + ask) / 2 : null;
const spreadPct = mid ? (ask - bid) / mid : Infinity;
const quoteAgeSeconds = (decisionTimestampMs - Date.parse(row.sip_timestamp)) / 1000;
return {
bid,
ask,
midpoint: mid,
spreadPct,
quoteAgeSeconds,
quoteConditions: row.conditions ?? [],
usableForFill: bid > 0 && ask >= bid && spreadPct <= 0.12 && quoteAgeSeconds <= 15,
};
}How to implement
Decide whether the workflow needs listed contracts, a chain snapshot, a quote window, a trade tape, an aggregate bar, or a live stream before writing the request.
Store the OCC ticker, underlying, expiration, strike, contract type, timestamp filter, quote timestamp, trade timestamp, and timezone context in the artifact.
Carry condition codes, correction state, exchange or participant context, sequence fields, and reject reasons into scanner, backtest, and dashboard output.
Show whether the result is live or delayed, whether quote fields are entitled, whether WebSocket updates are enabled, and when the row was last refreshed.
Use provider evidence only after proving the API can reproduce the workflow with contracts, quotes, trades, aggregates, and stored request URLs.
Last verified
This guide was last reviewed on June 4, 2026. Date-sensitive market calendars, provider docs, and listed contracts can change, so production workflows should verify the live source before trading or publishing an automated answer.
OPRA market data is consolidated U.S. exchange-listed options last-sale and quotation information. For developers, the practical objects are quote rows, trade rows, contract identity, timestamps, conditions, and entitlement context.
No. The source context is only one part of the evaluation. APIs differ in endpoint design, historical lookback, quote access, WebSockets, response fields, pricing, pagination, missing-data handling, support, and licensing.
Use both for different jobs. Trades show printed activity and bars, while quotes provide bid/ask context for plausible fills, spread filters, no-bid exits, and quote-age checks.
Ask each provider to reproduce the same workflow: expiration discovery, point-in-time contracts, chain selection, historical quote windows, trade validation, aggregate bars, entitlement labels, and stored request evidence.
Operational usage
Treat this page as a decision boundary for the surrounding API workflow. Before a value from OPRA Market Data for Options APIsenters a scanner, dashboard, calendar, backtest, or support answer, store the source route, request parameters, relevant timestamp, freshness label, and the reason the value is suitable for the next step.
The important implementation habit is to keep display labels separate from stable identifiers. Dates should remain tied to the calendar rule or listed-expiration source that produced them. Option rows should keep the OCC symbol, expiration, strike, side, quote state, and pagination context that created the row. Provider or product answers should keep the entitlement, licensing, and support assumptions visible.
When the workflow changes, rerun the page against one concrete example instead of trusting a general claim. Pick the ticker, date window, endpoint family, and expected output artifact. Then verify that the same terminology appears in the API request, UI label, log entry, and review checklist.
Related pages
OPRA source docs
Read the CuteMarkets docs page for OPRA-originating listed-options source context.
Options data API
Use the main options API surface after reviewing source and provenance questions.
Historical options quotes API
Validate fills with bid/ask windows, spread checks, and quote-age policies.
Option quote and trade conditions
Keep condition-code context visible in scanner and backtest artifacts.
Options data provider evaluation
Turn source, endpoint, entitlement, and missing-data claims into a testable checklist.
Compare providers
Review CuteMarkets against alternatives with a workflow-based comparison frame.