Options Flow Leaderboard API - Top Buyers and Sellers | FlashAlpha
  1. Leaderboard

Options Flow Leaderboard API

Cross-symbol option-flow buyers and sellers ranked by net notional over a rolling window.

Endpoint

GET /v1/flow/options/leaderboard
Auth required (X-Api-Key) Rate Limited: Yes Plan: Alpha+

Parameters

Name In Type Required Default Description
n query integer 10 Rows per side; effective max is 50. Non-numeric values return a 400 problem-details body. Out-of-range values are clamped to the supported range.
windowMinutes query integer 240 Lookback window, clamped to 1..10080. Non-numeric values return a 400 problem-details body.

Request

curl -H "X-Api-Key: YOUR_API_KEY" \
  "https://lab.flashalpha.com/v1/flow/options/leaderboard?n=10&windowMinutes=240"
import requests

resp = requests.get(
    "https://lab.flashalpha.com/v1/flow/options/leaderboard",
    headers={"X-Api-Key": "YOUR_API_KEY"}
)
resp.raise_for_status()
data = resp.json()
print(f"Top buyer: {data['buyers'][0]['symbol']}")
const resp = await fetch(
  "https://lab.flashalpha.com/v1/flow/options/leaderboard",
  { headers: { "X-Api-Key": "YOUR_API_KEY" } }
);
if (!resp.ok) throw new Error(`HTTP ${resp.status}`);
const data = await resp.json();
console.log("Top buyer: " + data.buyers[0].symbol);

Try it live

Runs on live market data and uses 1 request from your daily quota.

GET

Response

{
  "generatedUtc": "2026-10-30T13:45:58.1288162Z",
  "n": 10,
  "windowMinutes": 240,
  "buyers": [
    {
      "symbol": "SPY",
      "netVolume": 57663,
      "netNotional": 14364083,
      "buyVolume": 435734,
      "sellVolume": 378071,
      "avgPremium": 2.49,
      "tradeCount": 144604,
      "lastTradeUtc": "2026-10-30T13:45:55.557Z"
    },
    {
      "symbol": "PLTR",
      "netVolume": 15952,
      "netNotional": 5754193,
      "buyVolume": 34996,
      "sellVolume": 19044,
      "avgPremium": 3.61,
      "tradeCount": 12102,
      "lastTradeUtc": "2026-10-30T13:45:53.808Z"
    }
  ],
  "sellers": [
    {
      "symbol": "SPX",
      "netVolume": -4651,
      "netNotional": -108068020,
      "buyVolume": 2461,
      "sellVolume": 7112,
      "avgPremium": 232.35,
      "tradeCount": 2628,
      "lastTradeUtc": "2026-10-30T13:45:54.931Z"
    },
    {
      "symbol": "SNDK",
      "netVolume": -4340,
      "netNotional": -12101101,
      "buyVolume": 8681,
      "sellVolume": 13021,
      "avgPremium": 27.88,
      "tradeCount": 15706,
      "lastTradeUtc": "2026-10-30T13:45:55.246Z"
    }
  ],
  "endpoint_version": "2026.09.30",
  "data_as_of": {
    "node": "fa4",
    "equity_feed": "2026-10-30T13:45:58.109Z",
    "equity_options_feed": "2026-10-30T13:45:57Z",
    "index_feed": "2026-10-30T13:45:56.132Z",
    "index_options_feed": "2026-10-30T13:45:54Z",
    "futures_feed": "2026-10-30T13:45:53.139Z",
    "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
generatedUtcstringGeneration timestamp
nintegerEffective rows per side
windowMinutesintegerEffective lookback window
buyers[]arrayPositive net-notional rows: symbol, netVolume, netNotional, buyVolume, sellVolume, avgPremium, tradeCount, lastTradeUtc
sellers[]arrayNegative net-notional rows (same schema as buyers[])
buyers[].symbolstringUnderlying symbol
buyers[].netVolumenumberBuy volume minus sell volume
buyers[].netNotionalnumberBuyers: net notional
buyers[].buyVolumenumberVolume classified as buyer-initiated
buyers[].sellVolumenumberVolume classified as seller-initiated
buyers[].avgPremiumnumberBuyers: avg premium
buyers[].tradeCountnumberNumber of trades
buyers[].lastTradeUtcstringBuyers: last trade (UTC)
sellers[].symbolstringUnderlying symbol
sellers[].netVolumenumberBuy volume minus sell volume
sellers[].netNotionalnumberSellers: net notional
sellers[].buyVolumenumberVolume classified as buyer-initiated
sellers[].sellVolumenumberVolume classified as seller-initiated
sellers[].avgPremiumnumberSellers: avg premium
sellers[].tradeCountnumberNumber of trades
sellers[].lastTradeUtcstringSellers: last trade (UTC)
endpoint_version, data_as_ofstring, objectResponse envelope, see Response envelope.

Errors

Status Error When
400-A query value has the wrong type, or a required value is missing. The body is an RFC 7807 problem-details object with errors.<param>.
401-Missing or invalid X-Api-Key. The body is empty; check the status code before parsing JSON.
403tier_restrictedYour plan is below Alpha. The body includes current_plan and required_plan.
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.
502-Upstream flow data source unavailable.

About

Ranks the option-flow universe by net notional over the requested window and returns the top buyers and sellers in a single payload. The leaderboard refreshes about every 30 seconds, so polling more often returns the same result.

Common Use Cases

  • Run a universe-wide flow scanner - pull buyers[] and sellers[] ranked by netNotional over a rolling windowMinutes to surface where money is moving right now
  • Seed a watchlist automatically - take the top n symbols by absolute netNotional to focus the day on the most-pressured names
  • Send a daily flow recap - format the buyers and sellers lists into an email or Slack post each session close
  • Separate conviction from churn - weigh netVolume against buyVolume/sellVolume and tradeCount to tell one-sided accumulation from two-way noise
  • Filter by premium tier - use avgPremium to split cheap lotto flow from expensive, higher-conviction positioning
  • Chart market-wide sentiment - snapshot aggregate buy versus sell netNotional across the leaderboard over time, refreshing no faster than every 30 seconds

Related reading

Complementary endpoints

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