Lab API
Options Blocks
Options Block Trades API
Large option trades across all contracts for an underlying, newest first, filtered by minimum contract size.
Endpoint
Auth required (
X-Api-Key)
Rate Limited: Yes
Alpha plan+
Parameters
| Name | In | Required | Default | Description |
|---|---|---|---|---|
symbol |
path | yes | - | Underlying symbol |
minSize |
query | no | 100 | Minimum contract size |
expiry |
query | no | - | Filter to a single expiration cycle, YYYY-MM-DD. Omit to include all expiries. |
curl -H "X-Api-Key: YOUR_API_KEY" \
"https://lab.flashalpha.com/v1/flow/options/SPY/blocks?minSize=250"
import requests
resp = requests.get(
"https://lab.flashalpha.com/v1/flow/options/SPY/blocks",
headers={"X-Api-Key": "YOUR_API_KEY"}
)
data = resp.json()
print(f"{data['count']} blocks at minSize {data['minSize']}")
const resp = await fetch(
"https://lab.flashalpha.com/v1/flow/options/SPY/blocks",
{ headers: { "X-Api-Key": "YOUR_API_KEY" } }
);
const data = await resp.json();
console.log(data.count + " blocks at minSize " + data.minSize);
Response
{
"symbol": "SPY",
"minSize": 250,
"count": 2,
"blocks": [
{
"ts": "2026-05-12T18:41:55.108Z",
"expiry": "2026-05-15",
"strike": 600.0,
"right": "C",
"price": 1.85,
"size": 1500,
"side": "buy"
},
{
"ts": "2026-05-12T18:38:12.402Z",
"expiry": "2026-06-20",
"strike": 590.0,
"right": "P",
"price": 4.30,
"size": 800,
"side": "sell"
}
]
}
Key Response Fields
| Field | Type | Description |
|---|---|---|
symbol | string | Uppercase underlying symbol |
minSize | integer | Minimum block size applied |
count | integer | Number of block trades returned |
blocks[] | array | Block rows: ts, expiry, strike, right, price, size, side |
Errors
| Status | Description |
|---|---|
403 | Requires Alpha plan or higher |
502 | Upstream flow data source unavailable |
About
Filters the option tape to only prints at or above minSize contracts. Default is 100 contracts but you can raise it for institutional-only filtering. Returns rows in the same shape as the recent feed minus instrument id, bid, and ask.
Common Use Cases
- Track institutional-only flow - raise
minSizeto 500+ and watchblocks[]to surface only large single-ticket prints worth reacting to - Detect multi-leg sweeps - cluster
blocks[]bytsacross strikes and expiries to identify a single sweep routed across venues - Read directional intent - combine
sidewithright(e.g.buycalls vsbuyputs) to tell bullish bets from hedges or bearish positioning - Score conviction by notional - multiply
sizebypriceon each block to rank prints by dollars committed, not just contract count - Spot event positioning - scan large prints on specific
expirylegs into earnings or macro catalysts - Build a day sentiment overlay - tally buy-side versus sell-side
sizeacross blocks to gauge net institutional pressure
Related
Related reading
- Options sweep detection: the 500ms rule - how block prints coalesce into cross-venue sweeps
- Flow Signals API: scoring unusual options activity - turn large prints into a ranked unusual-activity score
Complementary endpoints
- Options Recent - the full tape these blocks are filtered from, with bid/ask context
- Options Summary - aggregate buy/sell volume the blocks contribute to
- Options Leaderboard - rank the contracts these blocks land on
- Flow Signals - scored unusual-activity layer built on this flow
Ready to build?
Get your free API key and start pulling live options data in 30 seconds.