Flow by strike
Cumulative multi-venue aggressor buying and selling by strike on still-open contracts, split into call buy, call sell, put buy and put sell.
GET /v2/tape/flow-by-strike
Real taker flow on still-open contracts (expiry_date >= today UTC),
aggregated by strike into four quadrants: call buy, call sell, put buy,
put sell. This is cumulative inventory of aggressor prints behind live
OI, not a rolling lookback window.
Use it to see where aggressors have been active by strike without pulling
the full trade history.
Who it’s for
Coins
BTCUSDT and ETHUSDT only. SOLUSDT / HYPEUSDT return 404 - they
do not yet have a multi-venue aggressor tape of this shape.
Query parameters
expiry and expiries to include every still-open contract.
Per-venue split (?include=by_venue)
Dealer flow aggregated across eight venues answers which way are dealers
positioned. It does not tell you which venue is driving it, and that turns
out to matter more often than not.
by_venue array parallel to strikes, so you can zip the two rather
than join on strike:
net_size is sold minus bought, the same convention the dealer flow model
uses, so a venue’s number here and its contribution there point the same way.
Why this exists
Deribit carries about 88% of BTC option premium. That is why most feeds are Deribit-only, and why it looks sufficient. It is not. Measured over seven days of live data, restricted to contracts at least two venues traded $5,000 or more of premium on:BTC 86,000 call, 11 Sep - aggregate +38.35 Deribit -26.20 (143k) · OKX +12.72 ($51k)A Deribit-only view reports dealers short that strike. They are long it, and the venues carrying the other half of the volume are the reason.
venue_disagreement
Returned in the body and in meta.extra:
Cost
The split is opt-in because it multiplies the row count, not because it is expensive: it is one extraGROUP BY column on a scan that already reads these
rows. Measured at 880ms against the aggregated query’s 961ms.
Response shape
Quadrant fields
Each ofcall_buy / call_sell / put_buy / put_sell:
call_sell.size − call_buy.size (passive/maker inventory from aggressor
tape). See Positioning.
Important properties
- Cumulative on open contracts - not “last N hours.” Expired prints
drop when
expiry_daterolls past UTC today. - Native taker side - every venue stamps
directionat ingest (Deribit, Bybit, OKX, Binance, Derive, Thalex, Delta India, Delta Global). This is not quote-rule inference. - Cached ~90s - single-flight compute; safe to poll for dashboards.
Example
See also
Positioning (flow vs std)
Venue coverage
Tape overview
Greek TRACE
Authorizations
Your BackQuant API key (same key as v1)
Headers
Query Parameters
Trading symbol: BTCUSDT, ETHUSDT, SOLUSDT, or HYPEUSDT.
BTCUSDT, ETHUSDT, SOLUSDT, HYPEUSDT Single live expiry YYYY-MM-DD. Omit for all open contracts.
Comma-separated live expiries YYYY-MM-DD to COMBINE; takes precedence over expiry.
Minimum premium_usd per trade (whale filter).
x >= 0CSV venue filter. Default: all. Allowed: binance, bybit, delta, delta_india, deribit, derive, okx, thalex
Optional sections. by_venue splits each strike's flow across the venues that traded it, and reports how often they disagree on direction under meta.extra.venue_disagreement. Off by default because it multiplies the row count; the query cost is the same.
Response
Successful Response
