Flow OI API - Raw OI Simulator State - FlashAlpha Lab API
Lab API Flow OI

Flow OI API

Raw OI simulator state: official, simulated, and effective open interest, plus intraday delta and the simulator's confidence weight.

Endpoint

GET /v1/flow/oi/{symbol}
Auth required (X-Api-Key) Rate Limited: Yes Alpha plan+

Parameters

Name In Required Default Description
symbol path yes - Underlying symbol
expiry query no all expiries Filter chain to a single expiry (yyyy-MM-dd). Omit to aggregate across all expiries
curl -H "X-Api-Key: YOUR_API_KEY" \
  "https://lab.flashalpha.com/v1/flow/oi/SPY"
import requests

resp = requests.get(
    "https://lab.flashalpha.com/v1/flow/oi/SPY",
    headers={"X-Api-Key": "YOUR_API_KEY"}
)
data = resp.json()
print(f"Official OI:  {data['official_oi']:,}")
print(f"Effective OI: {data['effective_oi']:,}")
print(f"Intraday delta: {data['intraday_oi_delta']:,}")
const resp = await fetch(
  "https://lab.flashalpha.com/v1/flow/oi/SPY",
  { headers: { "X-Api-Key": "YOUR_API_KEY" } }
);
const data = await resp.json();
console.log(`Official OI:  ${data.official_oi.toLocaleString()}`);
console.log(`Effective OI: ${data.effective_oi.toLocaleString()}`);
console.log(`Intraday delta: ${data.intraday_oi_delta.toLocaleString()}`);

Response

{
  "symbol": "SPY",
  "as_of": "2026-05-12T18:42:10Z",
  "expiry": "2026-05-15",
  "official_oi": 14820000,
  "simulated_oi": 14832450,
  "intraday_oi_delta": 12450,
  "oi_delta_confidence": 0.43,
  "effective_oi": 14835100,
  "contracts_total": 5240,
  "contracts_with_flow": 1820
}

Key Response Fields

Field Type Description
official_oinumberSum of morning OPRA-broadcast OI across the chain
simulated_oinumberofficial + intraday_oi_delta aggregated (unclamped, surfaces overshoot)
intraday_oi_deltanumberSum of the simulator's signed per-contract delta. Never reconstructed from (effective - official) - that loses magnitude when a per-contract value overshot zero and got clamped
oi_delta_confidencenumberPer-trade confidence weight applied by the upstream simulator (currently 0.43)
effective_oinumberSum of per-contract max(0, official + delta) - what the analytics endpoints actually consume
contracts_with_flownumberNumber of contracts where intraday_delta != 0

effective_oi can differ from max(0, simulated_oi) because the clamp is applied per-contract before aggregation.


About Flow OI

Flow OI exposes the raw simulator state that powers the rest of the /v1/flow/* family. official_oi matches the morning OPRA-broadcast OI used by the settled /v1/exposure/* endpoints. effective_oi is the per-contract clamped quantity the live analytics consume, and simulated_oi is the unclamped aggregate, which can deviate when sell pressure overshoots a contract's OI to zero. The intraday_oi_delta is the true signed sum from the simulator and intentionally cannot be reconstructed from (effective - official) - use this field if you're building your own analytics on top of the simulator.

Common Use Cases

  • Custom analytics - build your own GEX/DEX or pin-risk variants on top of the same effective OI that powers the Flow endpoints
  • Audit and reconciliation - surface the gap between official, simulated, and effective OI for quality checks
  • Confidence weighting - scale signal size by oi_delta_confidence when the simulator is less certain
  • Activity heat - contracts_with_flow / contracts_total is a rough breadth measure for the session
  • Research workflows - pair with historical exposure snapshots to study how intraday OI flow predicts end-of-day positioning

Ready to build?

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