Flow Levels API - Live Gamma Flip, Walls, Max Pain | FlashAlpha
  1. Flow Levels

Flow Levels API

Live, intraday-adjusted versions of the key technical levels: gamma flip, call wall, put wall, and max pain - recomputed on effective OI.

Endpoint

GET /v1/flow/levels/{symbol}
Auth required (X-Api-Key) Rate Limited: Yes Plan: Growth+

Parameters

Name In Type Required Default Description
symbol path string required - Underlying symbol
expiry query date all expiries Filter chain to a single expiry (yyyy-MM-dd). Omit to aggregate across all expiries. Invalid values return 400 invalid_expiry.
polarity query enum convention convention (default, calls +, puts -, unchanged) or flow. flow re-signs the gamma flip and walls by the session dealer-inventory change inferred from the classified tape, Lee-Ready style; live_max_pain stays OI-based. Requires Alpha+. Bad value returns 400 invalid_polarity. See flow-signed GEX.
Works with CME futures. Pass ES=F or NQ=F and URL-encode the = as %3D - e.g. /v1/flow/levels/ES%3DF. Flow analytics recompute on intraday effective OI; options-on-futures are priced with Black-76 ($50/pt ES, $20/pt NQ). CME futures and flow are Growth plan. See the futures hub.

Request

curl -H "X-Api-Key: YOUR_API_KEY" \
  "https://lab.flashalpha.com/v1/flow/levels/SPY"
import requests

resp = requests.get(
    "https://lab.flashalpha.com/v1/flow/levels/SPY",
    headers={"X-Api-Key": "YOUR_API_KEY"}
)
resp.raise_for_status()
data = resp.json()
print(f"Live gamma flip: {data['live_gamma_flip']}")
print(f"Live call wall: {data['live_call_wall']}")
print(f"Live put wall:  {data['live_put_wall']}")
const resp = await fetch(
  "https://lab.flashalpha.com/v1/flow/levels/SPY",
  { headers: { "X-Api-Key": "YOUR_API_KEY" } }
);
if (!resp.ok) throw new Error(`HTTP ${resp.status}`);
const data = await resp.json();
console.log(`Live gamma flip: ${data.live_gamma_flip}`);
console.log(`Live call wall: ${data.live_call_wall}`);
console.log(`Live put wall:  ${data.live_put_wall}`);

Try it live

Runs on live market data and uses 1 request from your daily quota.

GET

Response

{
  "symbol": "SPY",
  "as_of": "2026-10-30T13:45:45.6227323Z",
  "underlying_price": 760.35,
  "expiry": null,
  "live_gamma_flip": 770.0162,
  "gamma_flip_status": "available",
  "live_call_wall": 800,
  "live_put_wall": 760,
  "live_max_pain": 765,
  "endpoint_version": "2026.09.30",
  "data_as_of": {
    "node": "fa5",
    "equity_feed": "2026-10-30T13:45:45.819Z",
    "equity_options_feed": "2026-10-30T13:45:45Z",
    "index_feed": "2026-10-30T13:45:44.115Z",
    "index_options_feed": "2026-10-30T13:45:44Z",
    "futures_feed": "2026-10-30T13:45:45.387Z",
    "futures_options_feed": "2026-10-30T13:45:27.486Z",
    "flow_feed": "2026-10-30T13:45:00Z",
    "oi_feed": "2026-10-29T20:00:00Z",
    "macro_feed": "2026-10-29T21:00:20Z"
  }
}

Sending request…

See this endpoint on live data

Send this exact request and the real response shows up here, right next to the example.

Response Fields

Field Type Description
symbolstringUnderlying symbol
as_ofstringISO 8601 timestamp
underlying_pricenumberCurrent price of underlying
live_gamma_flipnumberStrike where live net GEX crosses zero (the gamma flip point)
live_call_wallnumberStrike with highest live call GEX - the call wall (resistance)
live_put_wallnumberStrike with highest live put GEX - the put wall (support)
live_max_painnumberMax pain strike using effective OI
expirystring | nullThe expiry filter from the request, null when it was omitted
gamma_flip_statusstringavailable when gamma_flip is a certified level; any other value means the level is unverified or missing. See GEX.
endpoint_version, data_as_ofstring, objectResponse envelope, see Response envelope.

Any field may be null if the underlying profile cannot resolve it (e.g., no gamma flip exists in the strike range).

Errors

Status Error When
400invalid_expiryexpiry is not a valid yyyy-MM-dd date.
400invalid_polaritypolarity is not convention or flow.
401-Missing or invalid X-Api-Key. The body is empty; check the status code before parsing JSON.
403tier_restrictedpolarity=flow on a plan below Alpha.
403tier_restrictedYour plan is below Growth. The body includes current_plan and required_plan.
404no_dataNo data for the symbol.
429Quota exceededDaily quota used up. Retry-After gives the seconds until the reset at 00:00 UTC. Rejected requests (including 403) count toward the quota.

About Flow Levels

Flow Levels returns the live versions of the four key technical levels traders anchor to: gamma flip, call wall, put wall, and max pain. The settled versions in /v1/exposure/levels are computed on the morning OPRA-broadcast OI and stay fixed all session. This endpoint runs the same level-detection logic on the OI simulator's effective OI, so when a wall starts losing OI or a new strike accumulates positioning, the levels move with it. Same definitions, intraday-adjusted inputs.

Common Use Cases

  • Trade against live walls, not stale ones - read live_call_wall as intraday resistance and live_put_wall as support, and re-anchor entries/targets as they migrate off the morning levels
  • Flip regime on live_gamma_flip - fade extensions and trade mean-reversion above it; respect momentum and trend below it, switching bias the moment spot crosses the live flip
  • Alert when the flip crosses spot - diff live_gamma_flip against underlying_price and fire when the sign flips, catching the dampening-to-amplifying handoff in real time
  • Set EOD targets on live_max_pain - treat the live max pain strike as the close-of-day magnet and plan exits toward it as expiry approaches
  • Confirm setups before sizing up - validate a long against a nearby live_put_wall or a short against live_call_wall so you only press trades the dealer book supports
  • Surface a "levels are shifting" signal - diff each live field against the settled /v1/exposure/levels values and flag the largest deltas as early evidence of intraday repositioning
  • Handle null levels gracefully - any field can be null when the profile can't resolve it (e.g. no flip in range), so gate dependent logic instead of assuming a number

Related reading

Complementary endpoints

  • Key Levels - the settled morning baseline to diff these live levels against
  • Live Flow GEX - the per-strike profile these walls and the flip are derived from
  • Flow Pin Risk - scores how strongly price is being pulled toward the live max-pain magnet
  • Live Flow DEX - directional dealer positioning to pair with the gamma walls

Ready to build with FlashAlpha?

Get your free API key and start pulling live options data in 60 seconds.

No credit card required Setup in 60 seconds Secure & reliable