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 the open interest of this contract",
"filter": "size_greater_oi"
},
{
"accepted_values": "bool",
"description": "Daily volume exceeds the open interest of this contract",
"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": "payment_required",
"documentation_url": "https://api.unusualwhales.com/docs",
"message": "This API token is paused because the payment for your API subscription failed. Update your card at https://unusualwhales.com/settings. The same token works again once a payment succeeds.",
"reason": "payment_failed",
"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 wrongAlert 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 the open interest of this contract",
"filter": "size_greater_oi"
},
{
"accepted_values": "bool",
"description": "Daily volume exceeds the open interest of this contract",
"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": "payment_required",
"documentation_url": "https://api.unusualwhales.com/docs",
"message": "This API token is paused because the payment for your API subscription failed. Update your card at https://unusualwhales.com/settings. The same token works again once a payment succeeds.",
"reason": "payment_failed",
"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 wrongAuthorizations
Response
The alert filters
The available filters per alert type for creating alert configurations
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
Was this page helpful?
