curl --request GET \
--url https://api.unusualwhales.com/api/alerts/filters \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.unusualwhales.com/api/alerts/filters"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.unusualwhales.com/api/alerts/filters', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.unusualwhales.com/api/alerts/filters",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.unusualwhales.com/api/alerts/filters"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.unusualwhales.com/api/alerts/filters")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.unusualwhales.com/api/alerts/filters")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"access": {
"flow_alerts": true,
"option_trade": true,
"politician_trades": false
},
"data": {
"option_trade": [
{
"accepted_values": [
"all",
"watchlist_only",
"list"
],
"filter": "symbols"
},
{
"accepted_values": "list",
"filter": "option_contracts"
},
{
"accepted_values": "bool",
"description": "Filter for options expiring on OpEx (monthly expiration) Friday",
"filter": "opex_only"
},
{
"accepted_values": "bool",
"description": "Filter for options expiring on a quarterly OpEx (3rd Friday of Mar/Jun/Sep/Dec)",
"filter": "is_quarterly"
},
{
"accepted_values": [
"jan",
"feb",
"mar",
"apr",
"may",
"jun",
"jul",
"aug",
"sep",
"oct",
"nov",
"dec"
],
"description": "Filter for monthly opex expiries in any of these months",
"filter": "expiry_months"
},
{
"accepted_values": "bool",
"filter": "is_multi_leg"
},
{
"accepted_values": "bool",
"filter": "is_otm"
},
{
"accepted_values": "bool",
"description": "Trade size exceeds total open interest",
"filter": "size_greater_oi"
},
{
"accepted_values": "bool",
"description": "Daily volume exceeds total open interest",
"filter": "volume_greater_oi"
},
{
"accepted_values": "bool",
"description": "Filter for opening transactions only (new positions)",
"filter": "opening"
},
{
"accepted_values": "bool",
"description": "Exclude deep in-the-money contracts",
"filter": "exclude_deep_itm"
},
{
"accepted_values": "bool",
"description": "Include aggregated/block trades",
"filter": "add_agg_trades"
},
{
"accepted_values": [
"ask_side",
"bid_side",
"mid_side",
"no_side",
"china",
"volatility",
"dividend",
"index",
"arbitrage"
],
"filter": "excluded_tags"
},
{
"accepted_values": [
"ask_side",
"bid_side",
"mid_side",
"no_side",
"china",
"volatility",
"dividend",
"index",
"arbitrage"
],
"filter": "tags"
},
{
"accepted_values": [
"Common Stock",
"ETF",
"ADR",
"Index"
],
"filter": "issue_types"
},
{
"accepted_values": "list",
"filter": "industries"
},
{
"accepted_values": [
"Basic Materials",
"Communication Services",
"Consumer Cyclical",
"Consumer Defensive",
"Energy",
"Financial Services",
"Healthcare",
"Industrials",
"Real Estate",
"Technology",
"Utilities"
],
"filter": "sectors"
},
{
"accepted_values": [
"GMNI",
"XCBO",
"BATO",
"XBXO",
"MPRL",
"C2OX",
"AMXO",
"MCRY",
"ARCO",
"EDGO",
"XISX",
"XNDQ",
"XMIO",
"XPHO",
"XBOX",
"EMLD",
"MXOP",
"SPHR",
"MXTO",
"IEXO"
],
"filter": "exchanges"
},
{
"accepted_values": [
"Canc",
"Oseq",
"Cncl",
"Late",
"Cnco",
"Open",
"Cnol",
"Opnl",
"Auto",
"Reop",
"Isoi",
"Slan",
"Slai",
"Slcn",
"Slci",
"Slft",
"Mlet",
"Mlat",
"Mlct",
"Mlft",
"Mesl",
"Tlat",
"Masl",
"Mfsl",
"Tlet",
"Tlct",
"Tlft",
"Tesl",
"Tasl",
"Tfsl",
"Cbmo",
"Mctp",
"Exht"
],
"filter": "trade_codes"
},
{
"accepted_values": "list",
"filter": "expiry_dates"
},
{
"accepted_values": [
"micro",
"small",
"mid",
"large",
"big"
],
"filter": "marketcap_size"
},
{
"accepted_values": [
"opening",
"closing",
"reopening",
"cross_trade",
"extended_hours",
"intermarket_sweep",
"trade_through_exempt",
"odd_lot",
"official_price_report",
"futures_floor",
"summary",
"printable",
"normal"
],
"filter": "report_flags"
},
{
"accepted_values": "decimal",
"description": "Volume to open interest ratio (>1.0 = volume exceeds OI)",
"filter": "min_volume_oi_ratio"
},
{
"accepted_values": "decimal",
"description": "Volume to open interest ratio (>1.0 = volume exceeds OI)",
"filter": "max_volume_oi_ratio"
},
{
"accepted_values": [
"call",
"put"
],
"filter": "type"
},
{
"accepted_values": [
"am",
"pm",
"asian",
"cliquet"
],
"filter": "settlement"
},
{
"accepted_values": {
"arith_ops": [
"add",
"sub",
"mul",
"div"
],
"cmp_ops": [
"gt",
"gte",
"lt",
"lte",
"eq",
"neq"
],
"fields": [
"spot",
"strike",
"bid",
"ask",
"ewma_bid",
"ewma_ask",
"premium",
"price",
"size",
"volume",
"open_int",
"dte",
"delta",
"gamma",
"vega",
"theta",
"rho",
"theo",
"iv",
"marketcap",
"diff",
"spread",
"bid_perc",
"ask_perc",
"bull_perc",
"bear_perc",
"earnings_dte",
"days_between_expiry_and_earnings",
"vol_oi_ratio"
]
},
"description": "Cross field comparison",
"filter": "compare"
},
{
"accepted_values": "decimal",
"filter": "min_underlying_price"
},
{
"accepted_values": "decimal",
"filter": "max_underlying_price"
},
{
"accepted_values": "decimal",
"filter": "min_strike"
},
{
"accepted_values": "decimal",
"filter": "max_strike"
},
{
"accepted_values": "decimal",
"filter": "min_premium"
},
{
"accepted_values": "decimal",
"filter": "max_premium"
},
{
"accepted_values": "decimal",
"filter": "min_price"
},
{
"accepted_values": "decimal",
"filter": "max_price"
},
{
"accepted_values": "integer",
"filter": "min_size"
},
{
"accepted_values": "integer",
"filter": "max_size"
},
{
"accepted_values": "integer",
"filter": "min_volume"
},
{
"accepted_values": "integer",
"filter": "max_volume"
},
{
"accepted_values": "integer",
"filter": "min_open_interest"
},
{
"accepted_values": "integer",
"filter": "max_open_interest"
},
{
"accepted_values": "integer",
"filter": "min_dte"
},
{
"accepted_values": "integer",
"filter": "max_dte"
},
{
"accepted_values": "decimal_abs",
"filter": "min_delta"
},
{
"accepted_values": "decimal_abs",
"filter": "max_delta"
},
{
"accepted_values": "decimal_abs",
"filter": "min_gamma"
},
{
"accepted_values": "decimal_abs",
"filter": "max_gamma"
},
{
"accepted_values": "decimal_abs",
"filter": "min_theta"
},
{
"accepted_values": "decimal_abs",
"filter": "max_theta"
},
{
"accepted_values": "decimal_abs",
"description": "Implied volatility of the contract (decimal: 0.5 = 50%)",
"filter": "min_iv"
},
{
"accepted_values": "decimal_abs",
"description": "Implied volatility of the contract (decimal: 0.5 = 50%)",
"filter": "max_iv"
},
{
"accepted_values": "decimal",
"filter": "min_marketcap"
},
{
"accepted_values": "decimal",
"filter": "max_marketcap"
},
{
"accepted_values": "decimal_abs",
"description": "Stock price percentage change (decimal: 0.1 = 10%)",
"filter": "min_diff"
},
{
"accepted_values": "decimal_abs",
"description": "Stock price percentage change (decimal: 0.1 = 10%)",
"filter": "max_diff"
},
{
"accepted_values": "decimal",
"description": "Bid-ask spread percentage",
"filter": "min_spread"
},
{
"accepted_values": "decimal",
"description": "Bid-ask spread percentage",
"filter": "max_spread"
},
{
"accepted_values": "decimal_abs",
"description": "Percentage of volume traded at the bid price",
"filter": "min_bid_perc"
},
{
"accepted_values": "decimal_abs",
"description": "Percentage of volume traded at the bid price",
"filter": "max_bid_perc"
},
{
"accepted_values": "decimal_abs",
"description": "Percentage of volume traded at the ask price",
"filter": "min_ask_perc"
},
{
"accepted_values": "decimal_abs",
"description": "Percentage of volume traded at the ask price",
"filter": "max_ask_perc"
},
{
"accepted_values": "decimal_abs",
"description": "Percentage of bullish flow (calls at ask + puts at bid)",
"filter": "min_bull_perc"
},
{
"accepted_values": "decimal_abs",
"description": "Percentage of bullish flow (calls at ask + puts at bid)",
"filter": "max_bull_perc"
},
{
"accepted_values": "decimal_abs",
"description": "Percentage of bearish flow (calls at bid + puts at ask)",
"filter": "min_bear_perc"
},
{
"accepted_values": "decimal_abs",
"description": "Percentage of bearish flow (calls at bid + puts at ask)",
"filter": "max_bear_perc"
},
{
"accepted_values": "integer",
"description": "Days until next earnings report",
"filter": "min_earnings_dte"
},
{
"accepted_values": "integer",
"description": "Days until next earnings report",
"filter": "max_earnings_dte"
},
{
"accepted_values": "integer",
"description": "Minimum (contract_expiry - next_earnings_date) in calendar days — signed",
"filter": "min_days_between_expiry_and_earnings"
},
{
"accepted_values": "integer",
"description": "Maximum (contract_expiry - next_earnings_date) in calendar days — signed",
"filter": "max_days_between_expiry_and_earnings"
},
{
"accepted_values": "decimal_abs",
"description": "Bull/bear skew ratio",
"filter": "min_skew"
},
{
"accepted_values": "decimal_abs",
"description": "Bull/bear skew ratio",
"filter": "max_skew"
}
]
},
"filter_descriptions": {
"option_trade": [
{
"opening": "Filter for opening transactions only (new positions)"
},
{
"min_iv": "Implied volatility of the contract (decimal: 0.5 = 50%)"
}
]
},
"noti_type_descriptions": {
"option_trade": "Get notified about any new option trades that hit the flow"
},
"rate_limits": {
"flow_alerts": "500",
"option_trade": "5000"
}
}{
"code": "authentication_required",
"documentation_url": "https://api.unusualwhales.com/docs",
"expected_format": "uuid",
"message": "The API token provided is not in the expected format. Unusual Whales API tokens are UUIDs, such as 123e4567-e89b-12d3-a456-426614174000.",
"reason": "malformed_token",
"request_id": "GNI_YTC1CRnw2LACGBvE",
"retryable": false,
"support_email": "[email protected]",
"token_url": "https://unusualwhales.com/dashboard/api"
}{
"code": "missing_access",
"documentation_url": "https://api.unusualwhales.com/docs",
"message": "The API token provided is valid but is not permitted to access this route.",
"reason": "route_not_permitted",
"request_id": "GNI_YTC1CRnw2LACGBvE",
"retryable": false,
"support_email": "[email protected]",
"token_url": "https://unusualwhales.com/dashboard/api"
}{
"msg": "Invalid path input: MSFT12 (valid example: AAPL) - Invalid query input(s): date=2023-02-140 (valid example: date=2024-01-18)",
"path": "/api/darkpool/MSFT12",
"query": "date=2023-02-140",
"url": "localhost:4000/api/darkpool/MSFT12?date=2023-02-140"
}"Something went wrong"Alert filters
Returns the available filters for creating alert configurations:
data: per alert type (noti_type) the filter fields that can be used in theconfigobject, each with its accepted valuesaccess: per alert type whether your account can create alerts of that typenoti_type_descriptions: a description of each alert typefilter_descriptions: per alert type a description of each filter fieldrate_limits: per alert type the maximum amount of alerts that trigger per day
Use this endpoint to determine which alert types the account can access and to build a structured config object.
Submit the resulting noti_type and config to POST /api/alerts/configuration to create an alert.
For more complex filters, fetch the Query language syntax and fields from GET /api/alerts/query/grammar,
then submit the Query expression to POST /api/alerts/configuration using input instead of config.
The config and input fields are mutually exclusive.
curl --request GET \
--url https://api.unusualwhales.com/api/alerts/filters \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.unusualwhales.com/api/alerts/filters"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.unusualwhales.com/api/alerts/filters', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.unusualwhales.com/api/alerts/filters",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.unusualwhales.com/api/alerts/filters"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.unusualwhales.com/api/alerts/filters")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.unusualwhales.com/api/alerts/filters")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"access": {
"flow_alerts": true,
"option_trade": true,
"politician_trades": false
},
"data": {
"option_trade": [
{
"accepted_values": [
"all",
"watchlist_only",
"list"
],
"filter": "symbols"
},
{
"accepted_values": "list",
"filter": "option_contracts"
},
{
"accepted_values": "bool",
"description": "Filter for options expiring on OpEx (monthly expiration) Friday",
"filter": "opex_only"
},
{
"accepted_values": "bool",
"description": "Filter for options expiring on a quarterly OpEx (3rd Friday of Mar/Jun/Sep/Dec)",
"filter": "is_quarterly"
},
{
"accepted_values": [
"jan",
"feb",
"mar",
"apr",
"may",
"jun",
"jul",
"aug",
"sep",
"oct",
"nov",
"dec"
],
"description": "Filter for monthly opex expiries in any of these months",
"filter": "expiry_months"
},
{
"accepted_values": "bool",
"filter": "is_multi_leg"
},
{
"accepted_values": "bool",
"filter": "is_otm"
},
{
"accepted_values": "bool",
"description": "Trade size exceeds total open interest",
"filter": "size_greater_oi"
},
{
"accepted_values": "bool",
"description": "Daily volume exceeds total open interest",
"filter": "volume_greater_oi"
},
{
"accepted_values": "bool",
"description": "Filter for opening transactions only (new positions)",
"filter": "opening"
},
{
"accepted_values": "bool",
"description": "Exclude deep in-the-money contracts",
"filter": "exclude_deep_itm"
},
{
"accepted_values": "bool",
"description": "Include aggregated/block trades",
"filter": "add_agg_trades"
},
{
"accepted_values": [
"ask_side",
"bid_side",
"mid_side",
"no_side",
"china",
"volatility",
"dividend",
"index",
"arbitrage"
],
"filter": "excluded_tags"
},
{
"accepted_values": [
"ask_side",
"bid_side",
"mid_side",
"no_side",
"china",
"volatility",
"dividend",
"index",
"arbitrage"
],
"filter": "tags"
},
{
"accepted_values": [
"Common Stock",
"ETF",
"ADR",
"Index"
],
"filter": "issue_types"
},
{
"accepted_values": "list",
"filter": "industries"
},
{
"accepted_values": [
"Basic Materials",
"Communication Services",
"Consumer Cyclical",
"Consumer Defensive",
"Energy",
"Financial Services",
"Healthcare",
"Industrials",
"Real Estate",
"Technology",
"Utilities"
],
"filter": "sectors"
},
{
"accepted_values": [
"GMNI",
"XCBO",
"BATO",
"XBXO",
"MPRL",
"C2OX",
"AMXO",
"MCRY",
"ARCO",
"EDGO",
"XISX",
"XNDQ",
"XMIO",
"XPHO",
"XBOX",
"EMLD",
"MXOP",
"SPHR",
"MXTO",
"IEXO"
],
"filter": "exchanges"
},
{
"accepted_values": [
"Canc",
"Oseq",
"Cncl",
"Late",
"Cnco",
"Open",
"Cnol",
"Opnl",
"Auto",
"Reop",
"Isoi",
"Slan",
"Slai",
"Slcn",
"Slci",
"Slft",
"Mlet",
"Mlat",
"Mlct",
"Mlft",
"Mesl",
"Tlat",
"Masl",
"Mfsl",
"Tlet",
"Tlct",
"Tlft",
"Tesl",
"Tasl",
"Tfsl",
"Cbmo",
"Mctp",
"Exht"
],
"filter": "trade_codes"
},
{
"accepted_values": "list",
"filter": "expiry_dates"
},
{
"accepted_values": [
"micro",
"small",
"mid",
"large",
"big"
],
"filter": "marketcap_size"
},
{
"accepted_values": [
"opening",
"closing",
"reopening",
"cross_trade",
"extended_hours",
"intermarket_sweep",
"trade_through_exempt",
"odd_lot",
"official_price_report",
"futures_floor",
"summary",
"printable",
"normal"
],
"filter": "report_flags"
},
{
"accepted_values": "decimal",
"description": "Volume to open interest ratio (>1.0 = volume exceeds OI)",
"filter": "min_volume_oi_ratio"
},
{
"accepted_values": "decimal",
"description": "Volume to open interest ratio (>1.0 = volume exceeds OI)",
"filter": "max_volume_oi_ratio"
},
{
"accepted_values": [
"call",
"put"
],
"filter": "type"
},
{
"accepted_values": [
"am",
"pm",
"asian",
"cliquet"
],
"filter": "settlement"
},
{
"accepted_values": {
"arith_ops": [
"add",
"sub",
"mul",
"div"
],
"cmp_ops": [
"gt",
"gte",
"lt",
"lte",
"eq",
"neq"
],
"fields": [
"spot",
"strike",
"bid",
"ask",
"ewma_bid",
"ewma_ask",
"premium",
"price",
"size",
"volume",
"open_int",
"dte",
"delta",
"gamma",
"vega",
"theta",
"rho",
"theo",
"iv",
"marketcap",
"diff",
"spread",
"bid_perc",
"ask_perc",
"bull_perc",
"bear_perc",
"earnings_dte",
"days_between_expiry_and_earnings",
"vol_oi_ratio"
]
},
"description": "Cross field comparison",
"filter": "compare"
},
{
"accepted_values": "decimal",
"filter": "min_underlying_price"
},
{
"accepted_values": "decimal",
"filter": "max_underlying_price"
},
{
"accepted_values": "decimal",
"filter": "min_strike"
},
{
"accepted_values": "decimal",
"filter": "max_strike"
},
{
"accepted_values": "decimal",
"filter": "min_premium"
},
{
"accepted_values": "decimal",
"filter": "max_premium"
},
{
"accepted_values": "decimal",
"filter": "min_price"
},
{
"accepted_values": "decimal",
"filter": "max_price"
},
{
"accepted_values": "integer",
"filter": "min_size"
},
{
"accepted_values": "integer",
"filter": "max_size"
},
{
"accepted_values": "integer",
"filter": "min_volume"
},
{
"accepted_values": "integer",
"filter": "max_volume"
},
{
"accepted_values": "integer",
"filter": "min_open_interest"
},
{
"accepted_values": "integer",
"filter": "max_open_interest"
},
{
"accepted_values": "integer",
"filter": "min_dte"
},
{
"accepted_values": "integer",
"filter": "max_dte"
},
{
"accepted_values": "decimal_abs",
"filter": "min_delta"
},
{
"accepted_values": "decimal_abs",
"filter": "max_delta"
},
{
"accepted_values": "decimal_abs",
"filter": "min_gamma"
},
{
"accepted_values": "decimal_abs",
"filter": "max_gamma"
},
{
"accepted_values": "decimal_abs",
"filter": "min_theta"
},
{
"accepted_values": "decimal_abs",
"filter": "max_theta"
},
{
"accepted_values": "decimal_abs",
"description": "Implied volatility of the contract (decimal: 0.5 = 50%)",
"filter": "min_iv"
},
{
"accepted_values": "decimal_abs",
"description": "Implied volatility of the contract (decimal: 0.5 = 50%)",
"filter": "max_iv"
},
{
"accepted_values": "decimal",
"filter": "min_marketcap"
},
{
"accepted_values": "decimal",
"filter": "max_marketcap"
},
{
"accepted_values": "decimal_abs",
"description": "Stock price percentage change (decimal: 0.1 = 10%)",
"filter": "min_diff"
},
{
"accepted_values": "decimal_abs",
"description": "Stock price percentage change (decimal: 0.1 = 10%)",
"filter": "max_diff"
},
{
"accepted_values": "decimal",
"description": "Bid-ask spread percentage",
"filter": "min_spread"
},
{
"accepted_values": "decimal",
"description": "Bid-ask spread percentage",
"filter": "max_spread"
},
{
"accepted_values": "decimal_abs",
"description": "Percentage of volume traded at the bid price",
"filter": "min_bid_perc"
},
{
"accepted_values": "decimal_abs",
"description": "Percentage of volume traded at the bid price",
"filter": "max_bid_perc"
},
{
"accepted_values": "decimal_abs",
"description": "Percentage of volume traded at the ask price",
"filter": "min_ask_perc"
},
{
"accepted_values": "decimal_abs",
"description": "Percentage of volume traded at the ask price",
"filter": "max_ask_perc"
},
{
"accepted_values": "decimal_abs",
"description": "Percentage of bullish flow (calls at ask + puts at bid)",
"filter": "min_bull_perc"
},
{
"accepted_values": "decimal_abs",
"description": "Percentage of bullish flow (calls at ask + puts at bid)",
"filter": "max_bull_perc"
},
{
"accepted_values": "decimal_abs",
"description": "Percentage of bearish flow (calls at bid + puts at ask)",
"filter": "min_bear_perc"
},
{
"accepted_values": "decimal_abs",
"description": "Percentage of bearish flow (calls at bid + puts at ask)",
"filter": "max_bear_perc"
},
{
"accepted_values": "integer",
"description": "Days until next earnings report",
"filter": "min_earnings_dte"
},
{
"accepted_values": "integer",
"description": "Days until next earnings report",
"filter": "max_earnings_dte"
},
{
"accepted_values": "integer",
"description": "Minimum (contract_expiry - next_earnings_date) in calendar days — signed",
"filter": "min_days_between_expiry_and_earnings"
},
{
"accepted_values": "integer",
"description": "Maximum (contract_expiry - next_earnings_date) in calendar days — signed",
"filter": "max_days_between_expiry_and_earnings"
},
{
"accepted_values": "decimal_abs",
"description": "Bull/bear skew ratio",
"filter": "min_skew"
},
{
"accepted_values": "decimal_abs",
"description": "Bull/bear skew ratio",
"filter": "max_skew"
}
]
},
"filter_descriptions": {
"option_trade": [
{
"opening": "Filter for opening transactions only (new positions)"
},
{
"min_iv": "Implied volatility of the contract (decimal: 0.5 = 50%)"
}
]
},
"noti_type_descriptions": {
"option_trade": "Get notified about any new option trades that hit the flow"
},
"rate_limits": {
"flow_alerts": "500",
"option_trade": "5000"
}
}{
"code": "authentication_required",
"documentation_url": "https://api.unusualwhales.com/docs",
"expected_format": "uuid",
"message": "The API token provided is not in the expected format. Unusual Whales API tokens are UUIDs, such as 123e4567-e89b-12d3-a456-426614174000.",
"reason": "malformed_token",
"request_id": "GNI_YTC1CRnw2LACGBvE",
"retryable": false,
"support_email": "[email protected]",
"token_url": "https://unusualwhales.com/dashboard/api"
}{
"code": "missing_access",
"documentation_url": "https://api.unusualwhales.com/docs",
"message": "The API token provided is valid but is not permitted to access this route.",
"reason": "route_not_permitted",
"request_id": "GNI_YTC1CRnw2LACGBvE",
"retryable": false,
"support_email": "[email protected]",
"token_url": "https://unusualwhales.com/dashboard/api"
}{
"msg": "Invalid path input: MSFT12 (valid example: AAPL) - Invalid query input(s): date=2023-02-140 (valid example: date=2024-01-18)",
"path": "/api/darkpool/MSFT12",
"query": "date=2023-02-140",
"url": "localhost:4000/api/darkpool/MSFT12?date=2023-02-140"
}"Something went wrong"Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Response
The alert filters
The available filters per alert type for creating alert configurations
Per alert type whether your account can create alerts of that type.
Per alert type (noti_type) the list of filter fields that can be used in the config object, each with its accepted values.
accepted_values is either an array of allowed literal values, an object describing a nested structure, or one of these type tokens:
bool: true or falseinteger: a whole numberdecimal: a decimal numberdecimal_abs: a decimal number that can optionally be wrapped asabs(x)or|x|to match on absolute value, e.g."min_delta": "abs(0.3)"matches both delta 0.4 and delta -0.4string: a stringlist: an array of values such as symbols, option contracts or datesobject: a nested object, see the filter's description
Per alert type a description of each filter field.
A description of each alert type.
Per alert type the maximum amount of alerts that trigger per day.
Was this page helpful?
