Flow Dealer Risk API - Settled vs Live Dealer GEX DEX | FlashAlpha
  1. Dealer Risk

Flow Dealer Risk API

Settled vs live dealer GEX and DEX joined into one response, with delta, percent shift, and a directional label.

Endpoint

GET /v1/flow/dealer-risk/{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/dealer-risk/ES%3DF. Options-on-futures are priced with Black-76 using the CME multiplier ($50/pt ES, $20/pt NQ); CME futures are Growth plan. See the futures hub.

Request

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

resp = requests.get(
    "https://lab.flashalpha.com/v1/flow/dealer-risk/SPY",
    headers={"X-Api-Key": "YOUR_API_KEY"}
)
resp.raise_for_status()
data = resp.json()
print(f"Direction: {data['flow_direction']}")
print(f"GEX shift: {data['flow_gex_pct_shift']:.1%}")
print(data['description'])
const resp = await fetch(
  "https://lab.flashalpha.com/v1/flow/dealer-risk/SPY",
  { headers: { "X-Api-Key": "YOUR_API_KEY" } }
);
if (!resp.ok) throw new Error(`HTTP ${resp.status}`);
const data = await resp.json();
console.log(`Direction: ${data.flow_direction}`);
console.log(`GEX shift: ${(data.flow_gex_pct_shift * 100).toFixed(1)}%`);
console.log(data.description);

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:44.1956431Z",
  "underlying_price": 760.425,
  "expiry": null,
  "settled_net_gex": -15604250270,
  "live_net_gex": -15611924215,
  "flow_gex_adjustment": -7673945,
  "flow_gex_pct_shift": -0.000492,
  "settled_net_dex": -30462684135,
  "live_net_dex": -30692234816,
  "flow_dex_adjustment": -229550680,
  "flow_dex_pct_shift": -0.007535,
  "total_abs_delta_contracts": 90853,
  "contracts_with_flow": 1380,
  "flow_direction": "neutral",
  "description": "Flow has not materially shifted dealer GEX since open (-0.0% < 5% threshold).",
  "endpoint_version": "2026.09.30",
  "data_as_of": {
    "node": "fa5",
    "equity_feed": "2026-10-30T13:45:44.171Z",
    "equity_options_feed": "2026-10-30T13:45:43Z",
    "index_feed": "2026-10-30T13:45:43.102Z",
    "index_options_feed": "2026-10-30T13:45:42Z",
    "futures_feed": "2026-10-30T13:45:28.31Z",
    "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
settled_net_gexnumberComputed on this morning's OPRA settled OI
live_net_gexnumberComputed on simulator-effective OI
flow_gex_adjustment / flow_dex_adjustmentnumberlive - settled for GEX and DEX, in USD notional
flow_gex_pct_shift / flow_dex_pct_shiftnumber, nullableadjustment / |settled|. null when the settled value is zero and the live value is non-zero (regime created with no baseline)
total_abs_delta_contractsnumberSum of absolute per-contract effective-OI changes
contracts_with_flownumberNumber of contracts whose effective OI moved
flow_directionstringno_flow, amplifying, dampening, regime_flip, neutral (when absolute percent shift is below 5%)
descriptionstringHuman-readable summary of the shift
symbolstringUnderlying symbol
as_ofstringTimestamp of the data (ISO 8601, UTC)
underlying_pricenumberUnderlying price used for the calculation
expirystring | nullThe expiry filter from the request, null when it was omitted
settled_net_dexnumberComputed on this morning's OPRA settled OI
live_net_dexnumberComputed on simulator-effective OI
endpoint_version, data_as_ofstring, objectResponse envelope, see Response envelope.

Direction Labels

Label Meaning
no_flowSimulator reported zero per-contract movement on every contract. Distinct from neutral so consumers can tell 'no flow yet' from 'flow exists but is small'
amplifyingSame sign as settled, magnitude grew (dealers more exposed)
dampeningSame sign as settled, magnitude shrank (positions resolving)
regime_flipNet GEX changed sign, or a regime was created from a zero baseline
neutralAbsolute percent shift below 5%

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 Flow Dealer Risk

Dealer Risk is the join between settled and live: /v1/exposure/summary's dealer-GEX/DEX numbers are anchored to the morning OPRA-broadcast OI, while the live values use the OI simulator's effective open interest. This endpoint returns both sides plus the deltas, percent shifts, contract-flow magnitude, and a single directional label that classifies the shift as amplifying, dampening, regime_flip, or neutral. The description field is the same shift spelled out in plain English.

Common Use Cases

  • Regime-flip alerts - fire when flow_direction becomes regime_flip, signalling net GEX has changed sign and the volatility regime has inverted since the open
  • Flow-direction filter - trade with flow during amplifying, fade or de-risk during dampening, and stand down on neutral or no_flow
  • Quantify intraday repositioning - cite total_abs_delta_contracts and contracts_with_flow as the single magnitude and breadth numbers in a daily desk note
  • Detect a stale snapshot - a high flow_gex_pct_shift or flow_dex_pct_shift tells you the morning settled view has stopped being representative and the live numbers should drive decisions
  • Separate gamma from delta drift - compare flow_gex_adjustment against flow_dex_adjustment to see whether flow is reshaping pinning pressure or directional dealer lean
  • Drop in a pre-built narrative - push description straight into a dashboard tile or chat alert with no formatting work

Related reading

Complementary endpoints

  • Flow Live Bundle - the raw real-time tape that drives the repositioning
  • Flow Summary - rolled-up flow context for the same window
  • Flow GEX - the live flow-adjusted gamma surface by strike
  • Dealer Premium - signed premium flow that complements the Greek-risk view

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