Skip to main content
GET

What it returns

For a specific expiration, this endpoint returns:
  • GEX per strike — call, put, net, and total dealer gamma exposure at each listed strike
  • Key markers — gamma flip point, max pain, largest positive/negative GEX strikes (walls), max-volatility and max-stability price levels, spot reference, and aggregate totals
  • Asymmetry metrics — upside vs. downside GEX imbalance and bias direction
  • Metadata — current price, strike range, timestamp, exchange/coin/expiration
  • Levels — a flat levels object (flip, regime, walls, totals, max pain, ATM IV), defined in the data dictionary. The same object is returned on its own by /levels
This is the most detailed GEX endpoint — it’s what powers the “GEX by Strike” chart on gammaflip.io.

Path parameters

string
required
Crypto: bybit, deribit, okx, derive, binance, 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. Case-insensitive.
string
required
Expiration date in DDMMMYY format (e.g., 25APR26), as an ISO date (2026-04-25), or TOTAL to combine all expirations into a single view.

Query parameters

string
default:"full"
full (default, unchanged) returns the per-strike arrays, markers and metadata. levels returns only levels and metadata: a compact answer for scripts and LLM agents (a full TOTAL payload is tens of KB). Any other value returns 400 invalid_param with valid_values.
number
With view=full, keeps only strikes within ±range_pct % of spot in the per-strike arrays. Must be in (0, 50]; otherwise 400 invalid_param with max_value: 50. Without it, you get the full strike range as before. It has no effect with view=levels, which has no per-strike arrays.

Response shape

data.levels sits next to gex_data, markers and metadata and is purely additive; markers is unchanged. Example, trimmed:

Field guide

  • gex_data — parallel arrays; index i across all arrays refers to the same strike. total_gex = call_gex - put_gex aggregated on dealers’ side.
  • flip_points — price level(s) where net dealer GEX crosses zero. Above the flip, dealer hedging is positive-gamma (stabilising); below, it’s negative-gamma (amplifying).
  • absolute_max / positive_max / negative_max — ranked lists of the largest absolute, positive, and negative GEX strikes. These are the “walls” where hedging flows concentrate.
  • stability_point — max-stability level: the peak of the net-gamma profile (a price, not a strike).
  • volatility_point — max-volatility level: the trough of the net-gamma profile (a price, not a strike).
  • asymmetry — imbalance between upside and downside dealer exposure; bias is a qualitative read (bullish / bearish / neutral).
TOTAL aggregates all expirations for the given coin. Useful for getting an “all-positioning” view; individual expiration views are more precise for timing-specific trades.

Response meta

Every data response (this endpoint, /levels and term-oi) carries a self-describing meta. The keys below are additive: meta.exchange, meta.coin and meta.expiration keep their existing values. meta.timestamp is when the response was generated. meta.rate_limit shows your quota (this call counts as 1 request).

Errors

error
Exchange not recognized, or it 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
view or range_pct is invalid. The body includes valid_values or max_value.
error
Your plan does not include this coin’s market. The body includes markets_in_plan.
error
The coin belongs to a market your plan doesn’t cover. See market_not_in_plan.
error
No data for this coin/exchange/expiration combination. Common cause: the expiration doesn’t exist on that exchange (use /expirations/ first).