Skip to main content
GET

What it returns

One flat object describing the latest GEX snapshot: spot, the primary gamma flip, the dealer regime, the largest positive / negative / absolute GEX strikes, net and absolute totals, the stability and volatility levels, max pain and ATM implied volatility. No per-strike arrays, so the response is small, which makes this the first call for a script or an LLM agent. Costs 1 request against your daily quota. Field definitions, units and sign convention are in the data dictionary.

Path parameters

string
required
Crypto: bybit, deribit, okx, derive, all / combined, or a subset such as deribit+derive. TradFi tickers: tradfi (all and combined are aliases). See Markets and exchanges.
string
required
Symbol, for example BTC, ETH, QQQ, SPX. Case-insensitive. Use /coins to see what is available.

Query parameters

string
default:"TOTAL"
TOTAL (all expirations combined), an expiration code such as 17OCT26, or an ISO date such as 2026-10-17. max_pain is null for TOTAL.
string
Comma-separated list of 1d, 7d and 30d. Adds data.compare: for each period, the last stored capture on or before the session date N days ago, with the deltas to the live levels. Available for TOTAL only (otherwise 400 invalid_param). Venue subsets have no history and return 400 history_not_available. See Compare with the past.

Response

object
The levels fields (spot, flip, flip_count, regime, net_gex, abs_gex, call_gex, put_gex, call_oi_total, put_oi_total, p1_strike … a2_gex, s_price, s_gex, v_price, v_gex, max_pain, atm_iv) plus expiration (TOTAL or the code) and expiration_iso (YYYY-MM-DD, null for TOTAL). Missing values are null.
object
Freshness and context: as_of, oi_as_of, data_source, is_live, market_open, next_open, units, docs_url, exchange_resolved, market, symbol, plus the echoed exchange, coin, expiration and expiration_iso, and your rate_limit. See Response meta.

Compare with the past

?compare=1d,7d,30d answers “what changed since” in one call. data.compare has one key per requested period. Each value is either null (no history that far back) or a history row with the fields of /history/levels (timestamp_utc, session_date, type, oi_date, spot, flip, regime, …) plus a delta object: the live value minus the past value for spot, flip, net_gex, abs_gex, p1_strike, n1_strike, s_price and v_price (null when either side is missing).
  • The reference date is today minus N days in the market’s session calendar: the UTC date for crypto, the New York date for TradFi. The row returned is the last capture of the latest session on or before that date, so a weekend reference gives Friday’s close. Check its session_date.
  • type is close only when that session is complete.
  • If the history lookup fails the live levels are still returned, with every period null.
Illustrative values, shortened. It does not add to the request cost: still 1 request.

Errors

error
Unknown venue, or a venue that does not match the coin’s market. The body includes valid_exchanges.
error
The expiration is not listed. The body includes nearest_expirations (up to five ISO dates closest to the one you sent, or the earliest five if the value is not a date).
error
With compare: a period other than 1d, 7d, 30d (valid_values), a single expiration instead of TOTAL, or a venue subset (valid_exchanges).
error
Your plan does not include this coin’s market. The body includes markets_in_plan.
error
No snapshot for this combination.
The values above are illustrative (a TradFi snapshot taken during the US session). max_pain is null because this call is for TOTAL; pass a single expiration to get it. When the market is closed, data_source and is_live say whether the snapshot is live or end-of-day, and next_open carries the next open.