Stocks Flow Outliers API - Cross-Symbol Equity Scanner | FlashAlpha
  1. Outliers

Stocks Flow Outliers API

Cross-symbol stock-flow outliers ranked by absolute net notional, same shape as the options-outliers payload.

Endpoint

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

Parameters

Name In Type Required Default Description
limit query integer 20 Rows returned, clamped to 1..200. Non-numeric values return a 400 problem-details body.
minTrades query integer 20 Minimum trades for a symbol to qualify. Non-numeric values return a 400 problem-details body. Values below 1 are treated as 1.
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/stocks/outliers?limit=20&minTrades=100&windowMinutes=240"
import requests

resp = requests.get(
    "https://lab.flashalpha.com/v1/flow/stocks/outliers",
    headers={"X-Api-Key": "YOUR_API_KEY"}
)
resp.raise_for_status()
data = resp.json()
print(f"{data['qualified']} of {data['tracked']} symbols qualified")
const resp = await fetch(
  "https://lab.flashalpha.com/v1/flow/stocks/outliers",
  { headers: { "X-Api-Key": "YOUR_API_KEY" } }
);
if (!resp.ok) throw new Error(`HTTP ${resp.status}`);
const data = await resp.json();
console.log(data.qualified + " of " + data.tracked + " symbols qualified");

Try it live

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

GET

Response

{
  "generatedUtc": "2026-10-30T13:46:04.1111129Z",
  "windowMinutes": 240,
  "tracked": 959,
  "qualified": 982,
  "limit": 20,
  "outliers": [
    {
      "symbol": "MU",
      "tradeCount": 81240,
      "buyVolume": 1849182,
      "sellVolume": 296795,
      "midVolume": 1872936,
      "netVolume": 1552387,
      "imbalancePct": 72.3,
      "skew": "BUY",
      "notional": 3641981017,
      "netNotional": 1406789344,
      "biggestTrade": 1343101,
      "biggestTradeUtc": "2026-10-30T12:11:00Z",
      "biggestAgeSec": 5704,
      "lastVwap": 906.21,
      "lastTradeUtc": "2026-10-30T13:46:00Z",
      "lastTradeAgeSec": 4
    },
    {
      "symbol": "MNQ=F",
      "tradeCount": 281458,
      "buyVolume": 227694,
      "sellVolume": 262452,
      "midVolume": 18892,
      "netVolume": -34758,
      "imbalancePct": 7.1,
      "skew": "FLAT",
      "notional": 14652716214,
      "netNotional": -1000512948,
      "biggestTrade": 101,
      "biggestTradeUtc": "2026-10-30T13:29:00Z",
      "biggestAgeSec": 1024,
      "lastVwap": 28785.11,
      "lastTradeUtc": "2026-10-30T13:46:00Z",
      "lastTradeAgeSec": 4
    }
  ],
  "endpoint_version": "2026.09.30",
  "data_as_of": {
    "node": "fa4",
    "equity_feed": "2026-10-30T13:46:03.529Z",
    "equity_options_feed": "2026-10-30T13:46:02Z",
    "index_feed": "2026-10-30T13:46:03.1Z",
    "index_options_feed": "2026-10-30T13:46:03Z",
    "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
windowMinutesintegerEffective lookback window
trackedintegerSymbols scanned
qualifiedintegerSymbols that met filters
limitintegerEffective output limit
outliers[]arrayOutlier rows (same shape as options outliers): symbol, tradeCount, buyVolume, sellVolume, midVolume, netVolume, imbalancePct, skew, notional, netNotional, biggestTrade, biggestTradeUtc, biggestAgeSec, lastVwap, lastTradeUtc, lastTradeAgeSec
endpoint_version, data_as_ofstring, objectResponse envelope, see Response envelope.

Fields of outliers[]

Field Type Description
outliers[].symbolstringUnderlying symbol
outliers[].tradeCountnumberNumber of trades
outliers[].buyVolumenumberVolume classified as buyer-initiated
outliers[].sellVolumenumberVolume classified as seller-initiated
outliers[].midVolumenumberVolume printed at the mid
outliers[].netVolumenumberBuy volume minus sell volume
outliers[].imbalancePctnumberOutliers: imbalance (%)
outliers[].skewstringOutliers: skew
outliers[].notionalnumberOutliers: notional
outliers[].netNotionalnumberOutliers: net notional
outliers[].biggestTradenumberLargest single trade size
outliers[].biggestTradeUtcstringOutliers: biggest trade (UTC)
outliers[].biggestAgeSecnumberOutliers: biggest age seconds
outliers[].lastVwapnumberOutliers: last vwap
outliers[].lastTradeUtcstringOutliers: last trade (UTC)
outliers[].lastTradeAgeSecnumberOutliers: last trade age seconds

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

Same response shape as options outliers, applied to the equity universe. Use minTrades to filter out thin tape and limit to cap output size. Refreshes about every 30 seconds.

Common Use Cases

  • Scan for unusual equity activity - rank outliers[] by skew and absolute netNotional to surface the most one-sided names across the universe
  • Quantify directional lean - read imbalancePct and signed netVolume to size how far buyers or sellers dominate each outlier's tape
  • Run a fresh big-print radar - filter on a low biggestAgeSec (with biggestTrade/biggestTradeUtc) to catch institutional prints that landed seconds ago
  • Filter out thin tape - raise minTrades and check qualified vs tracked to confirm enough symbols cleared the participation floor before trusting the ranking
  • Add execution and freshness context - pull lastVwap for slippage and lastTradeAgeSec to drop stale names from alerts
  • Generate pairs ideas - contrast skew across correlated tickers to find divergent flow for a relative-value setup

Related reading

Complementary endpoints

  • Stocks Leaderboard - the net-notional top-N ranking that pairs with this skew/imbalance view
  • Stocks Summary - drill into a single outlier's flow totals
  • Stocks Recent - inspect the per-trade tape behind a flagged symbol
  • Options Outliers - the matching outlier scan for the options tape (same response shape)

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