Options Recent Trades API - Raw Tape Rows - FlashAlpha Lab API
Lab API Options Recent

Options Recent Trades API

Recent option trades across all contracts for an underlying, newest first. Each row carries timestamp, contract instrument id, expiry, strike, right, price, size, side, block flag, and the prevailing bid/ask.

Endpoint

GET /v1/flow/options/{symbol}/recent
Auth required (X-Api-Key) Rate Limited: Yes Alpha plan+

Parameters

Name In Required Default Description
symbol path yes - Underlying symbol
limit query no 50 Number of trades, clamped to 1..500
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/recent?limit=10"
import requests

resp = requests.get(
    "https://lab.flashalpha.com/v1/flow/options/SPY/recent",
    headers={"X-Api-Key": "YOUR_API_KEY"}
)
data = resp.json()
print(f"{data['count']} of {data['totalAvailable']} buffered trades")
const resp = await fetch(
  "https://lab.flashalpha.com/v1/flow/options/SPY/recent",
  { headers: { "X-Api-Key": "YOUR_API_KEY" } }
);
const data = await resp.json();
console.log(data.count + " of " + data.totalAvailable + " buffered trades");

Response

{
  "symbol": "SPY",
  "count": 3,
  "totalAvailable": 482,
  "trades": [
    {
      "ts": "2026-05-12T18:42:09.812Z",
      "instrumentId": 12345678,
      "expiry": "2026-05-15",
      "strike": 600.0,
      "right": "C",
      "price": 1.85,
      "size": 250,
      "side": "buy",
      "isBlock": true,
      "bid": 1.83,
      "ask": 1.86
    },
    {
      "ts": "2026-05-12T18:42:08.441Z",
      "instrumentId": 12345701,
      "expiry": "2026-05-15",
      "strike": 595.0,
      "right": "P",
      "price": 0.72,
      "size": 12,
      "side": "sell",
      "isBlock": false,
      "bid": 0.71,
      "ask": 0.73
    },
    {
      "ts": "2026-05-12T18:42:07.205Z",
      "instrumentId": 12345689,
      "expiry": "2026-05-15",
      "strike": 597.0,
      "right": "C",
      "price": 1.20,
      "size": 5,
      "side": "mid",
      "isBlock": false,
      "bid": 1.19,
      "ask": 1.21
    }
  ]
}

Key Response Fields

Field Type Description
symbolstringUppercase underlying symbol
countintegerNumber of trades returned
totalAvailableintegerTrades available in the in-memory buffer
trades[]arrayRecent trade rows: ts, instrumentId, expiry, strike, right, price, size, side, isBlock, bid, ask

Errors

Status Description
403Requires Alpha plan or higher
502Upstream flow data source unavailable

About

Returns the most recent option trades for an underlying across all of its contracts in a single stream, newest first. Trades come from the in-memory buffer fed by the ingest service, and totalAvailable reports how deep that buffer currently is. Useful for a live time-and-sales feed or for sampling the most recent activity on a name.

Common Use Cases

  • Render a live time-and-sales feed - stream the newest trades[] rows (ts, strike, right, price, size) into a tape widget for a watched symbol
  • Read buy/sell pressure at a glance - tally side (buy vs sell vs mid) across recent prints to judge whether the tape is aggressively bid or offered right now
  • Flag institutional prints - filter isBlock=true rows to surface large single-ticket trades the moment they cross
  • Classify aggressor side from quotes - compare price against bid/ask to confirm whether a fill lifted the offer or hit the bid for sweep/toxic-flow detection
  • Gauge tape depth - watch totalAvailable versus count to see how active a name is and how far back the in-memory buffer reaches
  • Feed downstream classifiers - sample the latest trades by instrumentId and expiry to seed real-time sweep, repeat-hitter, or unusual-activity models

Related reading

Complementary endpoints

Ready to build?

Get your free API key and start pulling live options data in 30 seconds.