Unusual Whales API - Option Trade endpoints

Layer mapping: L1 (0DTE) load-bearing. Three endpoints:

  1. /flow-alerts - the pre-classified flow alerts feed (UW has already done the unusual-activity detection for you).
  2. /flow-alerts/{id} - a single flow alert lookup.
  3. /full-tape/{date} - every options trade for the date.

Plus a reference to the flow-alert rules page: https://unusualwhales.com/option-flow-alerts/rules (main-site, not API docs). This page enumerates the meaning of each alert_rule value; the API endpoint docs only enumerate the names.

1. Base contract

PropertyValue
Base URLhttps://api.unusualwhales.com
AuthAuthorization: Bearer <token> header
Response envelope{ "data": [...] }
Status codes200, 422, 500

2. GET /api/option-trades/flow-alerts - The pre-classified feed

The UW flow-alerts feed. Each record is a cluster of trades that hit one of nine named detection rules.

2.1 Query parameters

Ticker + asset:

ParamTypeNotes
ticker_symbolstringComma-separated; - to exclude
issue_types[]enumCommon Stock, ETF, Index, ADR

Premium + size:

ParamTypeRange
min_premium / max_premiumnumber>= 0
min_size / max_sizenumber>= 0
min_marketcap / max_marketcapnumber>= 0

Volume + OI:

ParamTypeRange
min_volume / max_volumenumber>= 0
min_open_interest / max_open_interestnumber>= 0
min_volume_oi_ratio / max_volume_oi_rationumber>= 0
size_greater_oiboolSize > OI flag
vol_greater_oiboolVolume > OI flag

Transaction type (all default true):

ParamMeaning
is_floorInclude floor trades
is_sweepInclude intermarket sweeps
is_callInclude calls
is_putInclude puts
is_ask_sideInclude ask-side
is_bid_sideInclude bid-side
is_multi_legMulti-leg only (no default)
all_openingAll transactions opening (no default; set false for RepeatedHits rules)

Rule names (rule_name[] enum array):

RuleWhat it captures (per UW’s classification)
FloorTradeSmallCapFloor trade on a small-cap underlying
FloorTradeMidCapFloor trade on a mid-cap underlying
FloorTradeLargeCapFloor trade on a large-cap underlying
RepeatedHitsRepeated trades hitting one contract (cluster)
RepeatedHitsAscendingFillRepeated hits with ascending fill price
RepeatedHitsDescendingFillRepeated hits with descending fill price
OtmEarningsFloorFloor trade on OTM contract pre-earnings
LowHistoricVolumeFloorFloor trade in a contract with low historic volume
SweepsFollowedByFloorSweep cluster followed by floor trade

Detailed rule definitions live on the main-site page: https://unusualwhales.com/option-flow-alerts/rules. Fetch separately to capture the full rule logic - the API docs only enumerate the names.

Contract characteristics:

ParamTypeNotes
min_diff / max_diffdecimalOTM diff ratio: (strike - underlying) / underlying for calls (inverted for puts)
is_otmboolOTM only
min_dte / max_dteintDTE range

Sentiment + skew:

ParamTypeRange
min_ask_perc / max_ask_percdecimal0 to 1
min_bid_perc / max_bid_percdecimal0 to 1
min_bull_perc / max_bull_percdecimal0 to 1
min_bear_perc / max_bear_percdecimal0 to 1
min_skew / max_skewdecimal0 to 1

Pricing + greeks:

ParamTypeRange
min_price / max_pricenumber>= 0
min_iv_change / max_iv_changedecimalE.g. 0.01 = +1% IV change
min_spread / max_spreadnumber>= 0
min_size_vol_ratio / max_size_vol_rationumber>= 0

Earnings windows:

ParamTypeNotes
min_days_between_expiry_and_earningsintNegative = before earnings
max_days_between_expiry_and_earningsintPositive = after earnings

Pagination:

ParamTypeNotes
newer_thanunix or ISOTime boundary
older_thanunix or ISOTime boundary
limitint1-200, default 100

2.2 Response per alert (cluster of trades)

FieldTypeDescription
alert_rulestringTriggering rule name
all_opening_tradesboolAll transactions opening
created_atISO 8601UTC timestamp
tickerstringUnderlying
issue_typestringAsset type
typestringcall or put
expirydateOption expiry
expiry_countintDistinct expiries in cluster
strikedecimalStrike price
option_chainstringOCC symbol (single-chain alerts)
pricedecimalUnderlying price
underlying_pricedecimalCurrent underlying
volumeintContract volume at alert
open_interestintContract OI at alert
volume_oi_ratiodecimalVol / OI
trade_countintTrades in the cluster
total_sizeintSum of trade sizes
total_premiumstringCombined $ premium
total_ask_side_premstringAsk-side $
total_bid_side_premstringBid-side $
has_floorboolCluster contains floor trades
has_sweepboolCluster contains sweeps
has_singlelegboolSingle-leg trades present
has_multilegboolMulti-leg trades present

2.3 MK3 use (L1 critical)

This is the pre-classified institutional-activity feed for L1. Two query patterns:

1. The SPY 0DTE filter (the primary feed):

GET /api/option-trades/flow-alerts?
  ticker_symbol=SPY&
  max_dte=0&
  min_premium=10000&
  is_sweep=true&
  vol_greater_oi=true

This catches today’s 0DTE SPY clusters with sweep + vol>OI + meaningful premium.

2. The mega-cap cluster filter (constituent context):

GET /api/option-trades/flow-alerts?
  ticker_symbol=AAPL,MSFT,NVDA,AMZN,META,GOOGL,GOOG&
  max_dte=2&
  min_premium=50000&
  rule_name[]=RepeatedHits&
  rule_name[]=SweepsFollowedByFloor

Catches mag7 unusual clusters near-term. Mag7 alerts here often precede SPY moves.

2.4 Important contrarian-flip interaction

Per 2026-05-22-uw-historical-findings: top-decile OTM call flow is CONTRARIAN-bearish for SPY (-3.6 to -8.7 lift). A flow_alert with is_otm=true, is_call=true, heavily ask-side - that’s exactly the pattern that historically fades. Setup Hunter must treat ask-side OTM call cluster alerts as fade candidates, not confirmation.

Sweep-followed-by-floor (SweepsFollowedByFloor) is the most high-conviction rule per UW’s classification - it indicates sequential institutional aggression. Worth distinguishing from purely-aggressive RepeatedHits.

3. GET /api/option-trades/flow-alerts/{id} - Single alert

Lookup one flow alert by ID.

Path: id = alert ID from the feed.

Response: the same record shape as #2. Useful for postmortem analysis (drilling into one alert from a stored ID).

4. GET /api/option-trades/full-tape/{date} - Every options trade

The full tape. Every option trade for the date.

Path: date (YYYY-MM-DD).

Response schema: UW’s docs leave this almost entirely undocumented (the example shows {}). First real fetch needs to catalog the actual response. Expected shape: very large array of per-trade records (trade_id, option_symbol, executed_at, price, size, premium, NBBO context, exchange, trade flags).

4.1 Critical warnings

  • Data volume is extreme. US equity options market does ~50M trades/day. The full tape is gigabytes per day.
  • No documented pagination - so either the endpoint streams, paginates implicitly, or returns a download URL. First real fetch needed to find out.
  • No filter parameters documented - either nothing is supported, or the docs are simply incomplete.
  • Rate limits unknown - polling this casually will likely hit a quota fast.

4.2 MK3 use (with extreme care)

Two viable patterns:

  1. End-of-day archival. Pull /full-tape/YYYY-MM-DD once after close, write to local Parquet. This becomes the IMPULSE engine substrate going forward, addressing the data-foundation gap from 2026-05-15-mk3-data-foundation-constraint.

  2. DO NOT use intraday. This is wrong tool for the live hot path. Use /option-contract/{id}/flow (uw-api-option-contract #4) for real-time per-contract data instead.

Treat this endpoint as a historical recording mechanism, not a live feed. Pair with the existing 1Y UW Parquet bundle on disk to extend the historical corpus forward.

5. Nautilus integration shape

EndpointCadenceCustom data type
/flow-alertsEvery 30sUWFlowAlert
/flow-alerts/{id}On demandUWFlowAlert
/full-tape/{date}Once after closeParquet archive, not bus traffic

The flow-alerts feed lives on the MessageBus. The full-tape is a filesystem archive: rolled into the Postgres-cached or catalog-mounted historical store, not streamed to subscribers.

6. Reference: flow-alert rules page

URL: https://unusualwhales.com/option-flow-alerts/rules

This page documents the semantic meaning of each alert_rule value. The API docs only enumerate names. A future fetch should pull the rules page and file a companion concept page (uw-flow-alert-rules.md) with per-rule detail (thresholds, detection logic, examples).

For now, treat the names as descriptive labels (e.g. “RepeatedHits = many trades clustering on one chain”, “Sweep = ISO across multiple exchanges”) and the source-of-truth is the rules page until we have a deeper file.

7. Known gaps

  • Detailed rule definitions not in the API docs - fetch the rules page separately.
  • Full-tape response schema undocumented - first fetch needs to catalog.
  • Full-tape rate limits / pagination undocumented - tread carefully.
  • tags field on individual trades (from option-contract /flow) has no published taxonomy.
  • The contrarian-flip applies to flow-alerts cluster aggregator too - validated at ticker scope, but verify whether the same flip affects pre-classified clusters specifically.

8. Source URLs

  • https://api.unusualwhales.com/docs/operations/PublicApi.OptionTradeController.flow_alerts
  • https://api.unusualwhales.com/docs/operations/PublicApi.OptionTradeController.flow_alert
  • https://api.unusualwhales.com/docs/operations/PublicApi.OptionTradeController.full_tape
  • https://unusualwhales.com/option-flow-alerts/rules (rule definitions reference)

cortana-north-star uw-api-option-contract uw-api-gex-greeks uw-api-tide uw-api-net-flow 2026-05-15-mk3-data-foundation-constraint 2026-05-22-uw-historical-findings 2026-05-15-mk3-setup-hunter-architecture