Unusual Whales API - Net Flow endpoint

Layer mapping: L1 load-bearing. Single endpoint with a expiration=zero_dte filter - the most directly named feed for the 0DTE SPY hunter. Returns cross-market net flow groups organized by expiry.

1. Base contract

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

2. GET /api/net-flow/expiry

Cross-market net flow data grouped by expiry, with rich filters.

Query parameters:

ParamTypeRequiredDefaultAllowed values
datedatenolast trading date-
moneynessarrayno[all]all, itm, otm, atm
tide_typearrayno[all]all, equity_only, etf_only, index_only
expirationarrayno[weekly, zero_dte]weekly, zero_dte

Response (top-level):

FieldTypeDescription
datestringTrading date
expirationarrayApplied expiration filters
moneynessarrayApplied moneyness filters
tide_typearrayApplied tide_type filters
dataarrayNet flow group records

Per-group record (inferred shape - first real fetch needs to verify): likely includes expiration_class, moneyness_class, tide_type_class, plus tide-style fields (net_call_premium, net_put_premium, net_volume, timestamp).

3. The 0DTE-specific call

For the SPY hunter:

GET /api/net-flow/expiry?
  expiration[]=zero_dte&
  moneyness[]=otm&
  tide_type[]=index_only&
  tide_type[]=etf_only

Translation: “give me the 0DTE OTM net flow on index + ETF products”. This is the most directly relevant slice of the entire UW API for 0DTE SPY work.

Compare with weekly to see the relative pull (0DTE vs near-week) of dealer hedging.

4. MK3 use (L1)

Poll every minute during RTH.

Derived features:

FeatureDefinition
zero_dte_otm_etf_net_premium_1mLatest bucket value
zero_dte_otm_etf_net_premium_zscore_60mz-score vs trailing 60m
zero_dte_vs_weekly_dominance(0DTE net_premium) / (weekly net_premium) - high = 0DTE-driven tape
itm_vs_otm_concentration(itm net_premium) / (otm net_premium) at zero_dte - high = informed money
etf_only_vs_equity_onlydirect macro vs single-name flow split

Contrarian-flip caveat. Same as the uw-api-tide family: the 2026-05-22-uw-historical-findings OTM-contrarian finding was at the per-ticker level. Whether it extends to aggregated cross-market flows at zero_dte scope is untested. Empirical test required before treating bullish zero_dte OTM ETF flow as a fade signal.

5. Nautilus integration shape

  • Custom data class: UWNetFlowExpiryGroup with discriminator on (expiration, moneyness, tide_type).
  • Polling Actor: UWNetFlowActor polls the four combinations of interest every minute:
    1. expiration=zero_dte, moneyness=otm, tide_type=etf_only
    2. expiration=zero_dte, moneyness=otm, tide_type=index_only
    3. expiration=weekly, moneyness=otm, tide_type=etf_only
    4. expiration=zero_dte, moneyness=itm, tide_type=etf_only
  • Each combination publishes its own snapshot stream.

6. Comparison to neighboring endpoints

EndpointScopeWhat it adds
uw-api-tide market_tideWhole-marketSingle aggregate, no expiry split
uw-api-tide etf_tide on SPYSPY onlySPY-specific, no expiry split
uw-api-net-flow/expiryCross-market with expiry + moneyness + class filters0DTE-specific OTM ETF/index slice
uw-api-gex-greeks family 2Per-ticker option flowPer-ticker, can pick expiry, no cross-market aggregation
uw-api-group-flowSector / mag7 aggregationSector-rolled, not expiry-rolled

The unique value of net-flow/expiry is the multi-filter expiry slice - none of the other endpoints offer the zero_dte cut at a cross-market scope.

7. Known gaps

  • Per-group response shape is partly inferred. First real fetch should confirm field names and types.
  • tide_type allowed values overlap with sector_tide GICS sectors on naming but the semantics differ (this is asset-class filtering: equity vs ETF vs index). Don’t confuse them.
  • No weekly definition. Is “weekly” 1-7 DTE? 1-14 DTE? Verify.
  • No realtime push. Polling only.

8. Source URL

  • https://api.unusualwhales.com/docs/operations/PublicApi.NetFlowController.expiry

cortana-north-star uw-api-tide uw-api-gex-greeks uw-api-group-flow 2026-05-22-uw-historical-findings 2026-05-15-mk3-setup-hunter-architecture