Flow Signals Summary API - Net Bullish/Bearish Premium Roll-up - FlashAlpha Lab API
Lab API Signals Summary

Flow Signals Summary API

Net bullish vs bearish premium, opening vs closing premium, and the top-10 highest-scoring signals - in one cheap call you can fan across a watchlist for a smart-money tilt read.

Endpoint

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

Parameters

Name In Required Default Description
symbol path yes - Underlying symbol
windowMinutes query no 240 Look-back window in minutes (1-10080)
expiry query no all expiries Filter the chain to a single expiry (yyyy-MM-dd)
curl -H "X-Api-Key: YOUR_API_KEY" \
  "https://lab.flashalpha.com/v1/flow/signals/NVDA/summary?windowMinutes=240"
import requests

resp = requests.get(
    "https://lab.flashalpha.com/v1/flow/signals/NVDA/summary",
    params={"windowMinutes": 240},
    headers={"X-Api-Key": "YOUR_API_KEY"}
)
data = resp.json()
print(f"Signals: {data['signal_count']}")
print(f"Net directional: ${data['net_directional_premium']:,.0f}")
print(f"Opening / Closing: ${data['opening_premium']:,.0f} / ${data['closing_premium']:,.0f}")
const resp = await fetch(
  "https://lab.flashalpha.com/v1/flow/signals/NVDA/summary?windowMinutes=240",
  { headers: { "X-Api-Key": "YOUR_API_KEY" } }
);
const data = await resp.json();
console.log(`Signals: ${data.signal_count}`);
console.log(`Net directional: $${data.net_directional_premium.toLocaleString()}`);

Response

{
  "symbol": "NVDA",
  "as_of": "2026-05-21T16:30:45Z",
  "window_minutes": 240,
  "expiry": null,
  "underlying_price": 900.25,
  "signal_count": 12,
  "bullish_premium": 18250000.0,
  "bearish_premium": 6400000.0,
  "net_directional_premium": 11850000.0,
  "opening_premium": 21300000.0,
  "closing_premium": 3350000.0,
  "top_signals": [
    {
      "ts": "2026-05-21T15:58:12Z",
      "expiry": "2026-05-23",
      "strike": 950.0,
      "right": "C",
      "side": "buy",
      "price": 12.40,
      "size": 1500,
      "premium": 1860000.0,
      "dte": 7,
      "structure": "sweep",
      "aggressor": "above_ask",
      "open_close_bias": "opening_bias",
      "open_close_confidence": 0.43,
      "contract_net_oi_delta": 4200,
      "intent": "bullish",
      "score": 87,
      "conviction": "high",
      "tags": ["sweep", "opening", "whale", "golden"],
      "score_breakdown": {
        "premium": 22, "size_vs_oi": 18, "aggressor": 14,
        "sweep": 12, "opening_bias": 9, "tenor": 12
      },
      "enrichment": {
        "iv": 0.62,
        "delta": 0.28,
        "gamma": 0.0041,
        "iv_vs_atm": 0.08,
        "moneyness": "OTM",
        "estimated_delta_notional": 37810500.0,
        "hypothetical_gex_impact_if_opening": 4984267.88
      }
    }
  ]
}

Top-level fields

Field Type Description
symbol / as_ofstringSymbol and ISO 8601 request timestamp
window_minutesnumberEcho of the requested look-back window
expirystring, nullableEcho of the requested expiry filter (null when aggregating across all expiries)
underlying_pricenumberSpot at request time (0 when the settled chain snapshot is unavailable)
signal_countnumberFull count of signals in the window (not capped at 10)
bullish_premiumnumberSum of premium across signals classified intent=bullish
bearish_premiumnumberSum of premium across signals classified intent=bearish
net_directional_premiumnumberbullish_premium − bearish_premium
opening_premiumnumberSum of premium across signals where open_close_bias = opening_bias
closing_premiumnumberSum of premium across signals where open_close_bias = closing_bias
top_signalsarrayUp to 10 highest-scoring signals - same shape as /v1/flow/signals/{symbol}

About the Summary

The summary is the watchlist-scale version of /v1/flow/signals. The full feed is great for a single name, but quickly gets expensive when you want a tilt read on 50 symbols. The summary aggregates the same scored signals into five headline premium roll-ups and embeds only the 10 highest-scoring signals so the response stays tight.

The net_directional_premium tells you whether bullish or bearish flow dominated the window. The opening_premium vs closing_premium split tells you whether positioning is being established or unwound - a high net-directional with a high opening share is the cleanest tilt read.

Common Use Cases

  • Watchlist tilt scanner - fan across a universe, rank by net_directional_premium / underlying_price for size-adjusted bullishness
  • Sector flow dashboard - roll up signal-summary calls across a sector ETF's holdings to spot rotation
  • Premium decomposition - diff opening_premium vs closing_premium to separate fresh positioning from unwinds
  • Lightweight gate before the full feed - poll the summary cheaply, then call /v1/flow/signals only when signal_count or net_directional_premium crosses a threshold
  • Daily summary report - end-of-day snapshot with windowMinutes=390 (full session) for a one-line-per-name flow tilt

Ready to build?

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