Flow Summary API - Live Intraday Flow Direction | FlashAlpha
  1. Flow Summary

Flow Summary API

At-a-glance summary of intraday flow vs the morning OI baseline: directional label, intraday OI delta, contracts moved, live GEX, and percent shift from settled.

Endpoint

GET /v1/flow/summary/{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.
Works with CME futures. Pass ES=F or NQ=F and URL-encode the = as %3D - e.g. /v1/flow/summary/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/summary/SPY"
import requests

resp = requests.get(
    "https://lab.flashalpha.com/v1/flow/summary/SPY",
    headers={"X-Api-Key": "YOUR_API_KEY"}
)
resp.raise_for_status()
data = resp.json()
print(f"Flow direction: {data['flow_direction']}")
print(f"Live GEX: ${data['live_gex']:,.0f}")
const resp = await fetch(
  "https://lab.flashalpha.com/v1/flow/summary/SPY",
  { headers: { "X-Api-Key": "YOUR_API_KEY" } }
);
if (!resp.ok) throw new Error(`HTTP ${resp.status}`);
const data = await resp.json();
console.log(`Flow direction: ${data.flow_direction}`);
console.log(`Live GEX: $${data.live_gex.toLocaleString()}`);

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:46:09.3154414Z",
  "underlying_price": 760.225,
  "expiry": null,
  "flow_direction": "neutral",
  "intraday_oi_delta": 24615,
  "contracts_with_flow": 1385,
  "contracts_total": 12318,
  "live_gex": -15649324149,
  "flow_gex_pct_shift": -0.001363,
  "endpoint_version": "2026.09.30",
  "data_as_of": {
    "node": "fa4",
    "equity_feed": "2026-10-30T13:46:08.984Z",
    "equity_options_feed": "2026-10-30T13:46:08Z",
    "index_feed": "2026-10-30T13:46:08.091Z",
    "index_options_feed": "2026-10-30T13:46:03Z",
    "futures_feed": "2026-10-30T13:46:07.407Z",
    "futures_options_feed": "2026-10-30T13:45:49.971Z",
    "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
flow_directionstringno_flow, amplifying, dampening, regime_flip, or neutral
intraday_oi_deltanumberNet signed OI delta across the chain (simulator estimate)
contracts_with_flownumberNumber of contracts whose effective OI has changed since open
contracts_totalnumberTotal contracts in the chain
live_gexnumberNet dealer gamma exposure recomputed on effective OI
flow_gex_pct_shiftnumber, nullable(live - settled) / |settled|. null when settled GEX is zero and live is non-zero (regime created with no baseline)
expirystring | nullThe expiry filter from the request, null when it was omitted
endpoint_version, data_as_ofstring, objectResponse envelope, see Response envelope.

Errors

Status Error When
400invalid_expiryexpiry is not a valid yyyy-MM-dd date.
401-Missing or invalid X-Api-Key. The body is empty; check the status code before parsing JSON.
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 the Flow Summary

The Flow Summary returns the single line you'd put at the top of a trading dashboard: how flow is reshaping dealer positioning right now. Unlike /v1/exposure/summary - which is computed on the morning OPRA-broadcast (settled) open interest and stays static through the session - this endpoint runs the same dealer-GEX math on the OI simulator's effective OI, so the value updates intraday as positioning shifts. The flow_direction label and flow_gex_pct_shift together tell you whether dealers are getting longer gamma, shorter gamma, or flipping regime versus the morning baseline.

Common Use Cases

  • Headline a dashboard - render flow_direction plus flow_gex_pct_shift as one line ("flow has amplified dealer GEX 9.4% since open") instead of explaining four endpoints
  • Alert on regime shifts - fire when flow_direction becomes regime_flip so you catch the moment dealers cross from long to short gamma
  • Detect a stale settled picture - watch flow_gex_pct_shift to know when the morning OPRA-settled GEX has stopped being representative and live positioning has diverged
  • Overlay flow confirmation - combine flow_direction with directional signals to filter out trades that fight intraday repositioning
  • Poll cheaply across a watchlist - one lightweight call per symbol answers "is anything interesting happening today" before you spend budget on the full bundle
  • Track the intraday OI delta - read intraday_oi_delta to gauge how much fresh positioning has built since open and weight the flow signal accordingly

Related reading

Complementary endpoints

  • Flow Live - the full bundle when the headline says something is happening
  • Flow Signals - the scored prints driving the direction the summary reports
  • Live Flow GEX - the per-strike live dealer-gamma behind flow_gex_pct_shift
  • Live Flow Levels - intraday support/resistance updated by the same OI simulator

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