Stocks Flow Minute History API - Per-Minute Buckets | FlashAlpha
  1. Trade History

Stocks Flow Minute History API

Minute stock-flow buckets, newest first. Each bucket carries buy/sell/mid/net share volume, trade count, biggest trade, VWAP, and OHLC.

Endpoint

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

Parameters

Name In Type Required Default Description
symbol path string required - Stock symbol
minutes query integer 60 Window size, 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/SPY/history?minutes=120"
import requests

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

Try it live

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

GET

Response

{
  "symbol": "SPY",
  "minutes": 120,
  "count": 120,
  "buckets": [
    {
      "ts": "2026-10-30T13:45:00Z",
      "buyVolume": 2329,
      "sellVolume": 4083,
      "midVolume": 1506,
      "netVolume": -1754,
      "tradeCount": 121,
      "biggestTrade": 1960,
      "vwap": 760.1278,
      "open": 760.122,
      "close": 760.25,
      "high": 760.4631,
      "low": 760.05
    },
    {
      "ts": "2026-10-30T13:44:00Z",
      "buyVolume": 5569,
      "sellVolume": 6261,
      "midVolume": 23154,
      "netVolume": -692,
      "tradeCount": 978,
      "biggestTrade": 2560,
      "vwap": 760.2039,
      "open": 760.105,
      "close": 760.13,
      "high": 760.5278,
      "low": 760.02
    }
  ],
  "endpoint_version": "2026.09.30",
  "data_as_of": {
    "node": "fa5",
    "equity_feed": "2026-10-30T13:46:03.297Z",
    "equity_options_feed": "2026-10-30T13:46:02Z",
    "index_feed": "2026-10-30T13:46:02.132Z",
    "index_options_feed": "2026-10-30T13:45:59Z",
    "futures_feed": "2026-10-30T13:45:51.589Z",
    "futures_options_feed": "2026-10-30T13:45:51.596Z",
    "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
symbolstringUppercase stock symbol
minutesintegerRequested/effective minute window
countintegerNumber of buckets returned
buckets[]arrayMinute buckets: ts, buyVolume, sellVolume, midVolume, netVolume, tradeCount, biggestTrade, vwap, open, close, high, low
endpoint_version, data_as_ofstring, objectResponse envelope, see Response envelope.

Fields of buckets[]

Field Type Description
buckets[].tsstringBucket timestamp (UTC)
buckets[].buyVolumenumberVolume classified as buyer-initiated
buckets[].sellVolumenumberVolume classified as seller-initiated
buckets[].midVolumenumberVolume printed at the mid
buckets[].netVolumenumberBuy volume minus sell volume
buckets[].tradeCountnumberNumber of trades
buckets[].biggestTradenumberLargest single trade size
buckets[].vwapnumberVolume-weighted average price
buckets[].opennumberOpen
buckets[].closenumberClose
buckets[].highnumberHigh
buckets[].lownumberLow

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

Minute-aggregated equity trade-flow buckets, newest first. Includes full minute OHLC so this stream can also act as a 1-minute candle feed with flow attribution baked in. Window is clamped to one week.

Common Use Cases

  • Draw minute candles with a flow overlay - plot each bucket's open/high/low/close as a candle and shade by buyVolume vs sellVolume for flow-attributed bars in one call
  • Track VWAP deviation - measure each bucket's close against its vwap to build a rolling mean-reversion signal
  • Scan for volume spikes - flag buckets where tradeCount or biggestTrade jumps above a rolling baseline to catch sudden participation
  • Chart cumulative imbalance - sum netVolume across buckets for a session-long accumulation/distribution line
  • Feed a backtest - replay 1-minute equity flow buckets (window clamped to one week) alongside option flow for joint signal research
  • Discount mid-heavy minutes - weigh netVolume against midVolume to avoid over-reading bars where most volume crossed at the mid

Related reading

Complementary endpoints

  • Stocks Bars - multi-resolution OHLCV bars (oldest-first) for live chart consumers
  • Stocks Cumulative - the running net-volume path over the same window
  • Stocks Recent - the per-trade tape these minute buckets aggregate
  • Options History - the matching minute-flow buckets for the options tape

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