- Live API Reference
- Flow Analytics
- Live Bundle
Flow Live Bundle API
One-call convenience bundle: simulator state, live levels, pin risk, live GEX/DEX totals, and the full flow-adjusted dealer-risk join.
Endpoint
X-Api-Key)
Rate Limited: Yes
Plan: Alpha+
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, unchanged) or flow. flow re-signs the bundle's aggregate gamma (live_gex) by the session dealer-inventory change inferred from the classified tape, Lee-Ready style; DEX and the dealer-risk block stay convention-signed. Bad value returns 400 invalid_polarity. See flow-signed GEX. |
Request
curl -H "X-Api-Key: YOUR_API_KEY" \
"https://lab.flashalpha.com/v1/flow/live/SPY"import requests
resp = requests.get(
"https://lab.flashalpha.com/v1/flow/live/SPY",
headers={"X-Api-Key": "YOUR_API_KEY"}
)
resp.raise_for_status()
data = resp.json()
print(f"Live GEX: ${data['live_gex']:,.0f}")
print(f"Pin risk: {data['live_pin_risk']}/100")
print(f"Direction: {data['flow_adjusted_dealer_risk']['flow_direction']}")const resp = await fetch(
"https://lab.flashalpha.com/v1/flow/live/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 GEX: $${data.live_gex.toLocaleString()}`);
console.log(`Pin risk: ${data.live_pin_risk}/100`);
console.log(`Direction: ${data.flow_adjusted_dealer_risk.flow_direction}`);Try it live
Runs on live market data and uses 1 request from your daily quota.
Response
{
"symbol": "SPY",
"as_of": "2026-10-30T13:45:46.3677713Z",
"underlying_price": 760.37,
"expiry": null,
"contracts": 12318,
"contracts_with_flow": 1380,
"official_oi": 18161399,
"simulated_oi": 18186045,
"intraday_oi_delta": 24646,
"oi_delta_confidence": 0.43,
"effective_oi": 18187619,
"live_gex": -15619418952,
"live_gex_delta": -14630791,
"live_gamma_flip": 769.8723,
"gamma_flip_status": "available",
"live_call_wall": 800,
"live_put_wall": 760,
"live_max_pain": 765,
"live_pin_risk": 9,
"flow_adjusted_dealer_risk": {
"settled_net_gex": -15604788161,
"live_net_gex": -15619418952,
"flow_gex_adjustment": -14630791,
"flow_gex_pct_shift": -0.000938,
"settled_net_dex": -28805203513,
"live_net_dex": -29043560206,
"flow_dex_adjustment": -238356693,
"flow_dex_pct_shift": -0.008275,
"total_abs_delta_contracts": 90836,
"flow_direction": "neutral",
"description": "Flow has not materially shifted dealer GEX since open (-0.1% < 5% threshold)."
},
"endpoint_version": "2026.09.30",
"data_as_of": {
"node": "fa5",
"equity_feed": "2026-10-30T13:45:46.705Z",
"equity_options_feed": "2026-10-30T13:45:45Z",
"index_feed": "2026-10-30T13:45:46.132Z",
"index_options_feed": "2026-10-30T13:45:45Z",
"futures_feed": "2026-10-30T13:45:45.68Z",
"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
live_gex_delta is the GEX change that intraday flow accounts for (equal to flow_adjusted_dealer_risk.flow_gex_adjustment); all other fields carry the same meaning as the dedicated endpoints.
| Field | Type | Description |
|---|---|---|
symbol | string | Underlying symbol |
as_of | string | ISO 8601 timestamp |
underlying_price | number | Current price of underlying |
contracts / contracts_with_flow | number | Chain size and how many contracts have moved (see Flow OI) |
official_oi / simulated_oi / effective_oi | number | Same as Flow OI |
intraday_oi_delta / oi_delta_confidence | number | Simulator's signed per-contract delta and confidence weight |
live_gex | number | Net dealer GEX on effective OI (matches Flow GEX) |
live_gex_delta | number | GEX change from intraday flow, equal to flow_adjusted_dealer_risk.flow_gex_adjustment. Net DEX is flow_adjusted_dealer_risk.live_net_dex |
live_gamma_flip / live_call_wall / live_put_wall / live_max_pain | number | Same as Flow Levels |
live_pin_risk | number | Composite pin-risk score (see Flow Pin Risk) |
flow_adjusted_dealer_risk | object | Full settled-vs-live join with direction label and human description (see Flow Dealer Risk) |
expiry | string | null | The expiry filter from the request, null when it was omitted |
gamma_flip_status | string | available when gamma_flip is a certified level; any other value means the level is unverified or missing. See GEX. |
endpoint_version, data_as_of | string, object | Response envelope, see Response envelope. |
Fields of flow_adjusted_dealer_risk
| Field | Type | Description |
|---|---|---|
flow_adjusted_dealer_risk.settled_net_gex | number | Flow adjusted dealer risk: settled net GEX |
flow_adjusted_dealer_risk.live_net_gex | number | Flow adjusted dealer risk: live net GEX |
flow_adjusted_dealer_risk.flow_gex_adjustment | number | Flow adjusted dealer risk: flow GEX adjustment |
flow_adjusted_dealer_risk.flow_gex_pct_shift | number | Flow adjusted dealer risk: flow GEX (%) shift |
flow_adjusted_dealer_risk.settled_net_dex | number | Flow adjusted dealer risk: settled net DEX |
flow_adjusted_dealer_risk.live_net_dex | number | Flow adjusted dealer risk: live net DEX |
flow_adjusted_dealer_risk.flow_dex_adjustment | number | Flow adjusted dealer risk: flow DEX adjustment |
flow_adjusted_dealer_risk.flow_dex_pct_shift | number | Flow adjusted dealer risk: flow DEX (%) shift |
flow_adjusted_dealer_risk.total_abs_delta_contracts | number | Flow adjusted dealer risk: total abs delta contracts |
flow_adjusted_dealer_risk.flow_direction | string | Flow adjusted dealer risk: flow direction |
flow_adjusted_dealer_risk.description | string | Plain-English description |
Errors
| Status | Error | When |
|---|---|---|
400 | invalid_expiry | expiry is not a valid yyyy-MM-dd date. |
400 | invalid_polarity | polarity is not convention or flow. |
401 | - | Missing or invalid X-Api-Key. The body is empty; check the status code before parsing JSON. |
403 | tier_restricted | Your plan is below Alpha. The body includes current_plan and required_plan. |
404 | no_data | No data for the symbol. |
429 | Quota exceeded | Daily 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 Live Bundle
The Live Bundle materialises the live chain once on the server and returns OI simulator state, live levels, pin risk, live GEX/DEX totals, and the full flow-adjusted dealer-risk join in one response. It's cheaper than calling each /v1/flow/* endpoint individually and removes any cross-endpoint drift from microsecond-level updates between calls. Use it whenever you'd otherwise be fanning out five or six flow requests per symbol per refresh.
Common Use Cases
- Render a flow dashboard in one call - hydrate OI state, live levels, pin risk, and live GEX/DEX from a single bundle response per symbol per tick instead of fanning out
- Rank a watchlist - poll the bundle across symbols and sort by
pin_risk,flow_direction, or the dealer live-GEX shift to surface the most active names - Guarantee snapshot consistency - every field is computed on the same materialised chain, so live GEX and live pin risk can't drift apart between microsecond updates
- Stretch a daily request budget - collapse ~6
/v1/flow/*hits into one bundle call to stay under plan quotas while refreshing more often - Back a caching layer - cache the bundle once server-side and serve the OI, levels, pin-risk, and GEX/DEX views to multiple downstream consumers without re-fetching
- Drive flow-confirmed entries - read
flow_directionand the dealer-risk join together so an alert only fires when positioning and levels agree
Related
Related reading
- Real-time options data: polling vs streaming - how to pick a refresh cadence for the bundle
- Options flow API: recent trades, blocks & leaderboard - the wider flow surface the bundle summarises
Complementary endpoints
- Flow Summary - the one-line headline when you don't need the full bundle
- Flow Signals - scored unusual prints to pair with the bundle's positioning view
- Live Flow GEX - the standalone live dealer-gamma component on its own
- Live Flow DEX - the standalone live dealer-delta component on its own
Unlock DEX, VEX and CHEX with Basic
Everything in Free, plus:
- DEX, VEX and CHEX exposure
- Full max pain
- ETF & index symbols SPY, QQQ, SPX, VIX
Go full-chain with Growth
Everything in Basic, plus:
- Full-chain GEX Every expiration
- 0DTE analytics
- Exposure summary & AI narrative
- CME futures & live screener
Add history and vol surfaces with Alpha
Everything in Growth, plus:
- Historical API replay Since 2017
- SVI vol surfaces
- VRP analytics
- Greeks surfaces Vanna, charm, volga and speed grids