Stocks Block Trades API - Large Equity Prints | FlashAlpha
  1. Block Trades

Stocks Block Trades API

Large stock trades for a symbol, newest first, filtered by minimum share size.

Endpoint

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

Parameters

Name In Type Required Default Description
symbol path string required - Stock symbol
minSize query integer 10000 Minimum share size. Non-numeric values return a 400 problem-details body. Values below 1 are treated as 1.

Request

curl -H "X-Api-Key: YOUR_API_KEY" \
  "https://lab.flashalpha.com/v1/flow/stocks/SPY/blocks?minSize=25000"
import requests

resp = requests.get(
    "https://lab.flashalpha.com/v1/flow/stocks/SPY/blocks",
    headers={"X-Api-Key": "YOUR_API_KEY"}
)
resp.raise_for_status()
data = resp.json()
print(f"{data['count']} blocks at minSize {data['minSize']}")
const resp = await fetch(
  "https://lab.flashalpha.com/v1/flow/stocks/SPY/blocks",
  { 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 + " blocks at minSize " + data.minSize);

Try it live

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

GET

Response

{
  "symbol": "SPY",
  "minSize": 25000,
  "count": 0,
  "blocks": [],
  "endpoint_version": "2026.09.30",
  "data_as_of": {
    "node": "fa5",
    "equity_feed": "2026-10-30T13:46:02.995Z",
    "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
minSizeintegerMinimum block size applied
countintegerNumber of block trades returned
blocks[]arrayBlock rows: ts, price, size, side, bid, ask
blocks[].tsstringTimestamp of the trade (UTC)
blocks[].pricenumberPrice
blocks[].sizenumberSize
blocks[].sidestringSide
blocks[].bidnumberBid
blocks[].asknumberAsk
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

Filters the equity tape to prints at or above minSize shares. Default is 10,000 shares; raise for institutional-only filtering. Each row carries the prevailing bid/ask so you can see how aggressively the print crossed the spread.

Common Use Cases

  • Track institutional prints in real time - stream blocks[] to surface every trade at or above the minSize share threshold as it crosses the tape
  • Tune the size filter to the name - raise minSize (echoed back as the applied threshold) to isolate genuinely institutional flow on liquid tickers and lower it on thin ones
  • Classify the spread aggressor - compare each block's price to its bid/ask to label buyer-initiated (at/above ask) vs seller-initiated (at/below bid) prints
  • Read directional bias - tally size by side across the returned blocks to see whether large prints lean accumulation or distribution
  • Build a volume-at-price profile - bucket size by price level to map where the big lots transacted for VWAP and support/resistance context
  • Flag fresh blocks - watch the newest ts to alert only on prints that just landed rather than replaying the whole buffer

Related reading

Complementary endpoints

  • Stocks Recent - the full unfiltered tape these blocks are drawn from
  • Stocks Summary - headline buy/sell/net totals, including biggestSingleTrade
  • Stocks Leaderboard - rank the universe by net notional to find where blocks are clustering
  • Options Blocks - the matching block-size prints on 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