Options chain
Filtered options chain. Per-contract data (greeks, OI, IV, bid/ask) plus aggregate stats.
?fields= top-level, ?include= per-contract) and a payload cap (?max_contracts). Cached 30s per filter combination.
Where each number comes from
A chain row mixes cross-venue and single-venue fields on purpose. Reading a single-venue field as a market-wide total is the most common way to misread this endpoint.?include=volume. volume is contracts, notional_volume is premium paid
in USD, and trade_count is prints. All three mean the same thing on every
symbol; only the venue scope differs.
Under ?as_of=, these three are recomputed from the tape for the window
ending at that snapshot (meta.extra.activity_rebuilt confirms it). bid and
ask are not recoverable that way and stay 0 on chains persisted before
2026-09-01 - meta.extra.quotes_note says so.
Full reasoning, including why SOL and HYPE are not blended, is in
Venues.
See also
Which fields are cross-venue
Consolidated best bid/offer
Greeks beyond delta
Refresh cadences
Authorizations
Your BackQuant API key (same key as v1)
Headers
Query Parameters
Trading symbol: BTCUSDT, ETHUSDT, SOLUSDT, or HYPEUSDT.
BTCUSDT, ETHUSDT, SOLUSDT, HYPEUSDT CSV of expiry tokens (e.g. 28MAR25,25APR25)
Inclusive lower bound on days-to-expiry.
0 <= x <= 720Inclusive upper bound on days-to-expiry.
0 <= x <= 720Minimum open interest per contract.
x >= 0Maximum open interest per contract.
x >= 0Minimum |delta| (0..1).
0 <= x <= 1Maximum |delta| (0..1).
0 <= x <= 1Minimum strike price (absolute).
x >= 0Maximum strike price (absolute).
x >= 0Strike/spot lower bound (e.g. 0.9 for ATM-10%).
0 <= x <= 10Strike/spot upper bound (e.g. 1.1 for ATM+10%).
0 <= x <= 10Filter to call, put, or both contract types.
call, put, both Cap on the number of contracts returned (default 2000, hard ceiling 5000). When more contracts match the filters, the response is truncated to the closest-to-spot subset and truncated=true is set with total_matching_count so the client knows to narrow the filter.
1 <= x <= 5000Top-level projection: aggregates,available_expiries,contracts
Per-contract projection: bid_ask,gex,greeks,iv,oi,volume. Default is all sections.
ISO-8601 instant to answer as of, e.g. 2026-08-20T14:30:00Z. Omit for the current value. Resolves to the nearest chain snapshot AT OR BEFORE the requested time (never after, which would be look-ahead bias); the snapshot actually used and the lag are reported in meta.extra.as_of. Under positioning=flow the dealer flow map is rebuilt from the tape as it stood at that instant, so a given timestamp always returns the same numbers. Bounded by your plan's history window.
Response
Successful Response
The meta block returned alongside every v2 response.
Every field after version/timestamp is optional because endpoints
attach different combinations - e.g. /v2/status skips symbol, the
chain endpoint sets extra.filter_hash, etc. Listing them here means
SDKs get a typed accessor for each instead of a generic meta: dict.
