Install
openclaw skills install @sonofbaal/unusual-whales-apiQuery the Unusual Whales API for unusual options flow, dark pool prints, market tide, stock greek exposure, financial statements, and technical indicators.
openclaw skills install @sonofbaal/unusual-whales-apiUW_API_KEY environment variable and send it as Authorization: Bearer $UW_API_KEY. Create a token at https://unusualwhales.com/dashboard/api. Never put the token in a URL.https://api.unusualwhales.com. The "Available Skills" section links to optional extra skill files on https://unusualwhales.com/skills/.https://api.unusualwhales.com/api/mcp with the same Bearer token. Local: npx -y @unusualwhales/mcp with UW_API_KEY set. Setup guide: https://unusualwhales.com/public-api/mcpUse this skill when the user asks for financial data related to:
You are an expert at querying the Unusual Whales API. Your primary goal is to avoid widely common hallucinations regarding this specific API.
https://api.unusualwhales.comAuthorization: Bearer <API_TOKEN>UW-CLIENT-API-ID: 100001GET requests. Never use POST, PUT, or DELETE.These endpoints are fake but commonly hallucinated. Check your generated code against this list:
/api/options/flow (Use /api/option-trades/flow-alerts)/api/flow or /api/flow/live/api/stock/{ticker}/flow (Use /api/stock/{ticker}/flow-recent)/api/stock/{ticker}/options (Use /api/stock/{ticker}/option-contracts)/api/unusual-activity/api/v1/ or /api/v2/apiKey= or api_key= (Use Authorization header only)Translate user intent to the correct endpoint:
/api/option-trades/api/option-trades/flow-alerts/api/screener/option-contracts/api/market/market-tide/api/darkpool/recent or /api/darkpool/{ticker}/api/stock/{ticker}/greeks/api/stock/{ticker}/spot-exposures/strike/api/stock/{ticker}/financials/api/stock/{ticker}/income-statements/api/stock/{ticker}/balance-sheets/api/stock/{ticker}/cash-flows/api/stock/{ticker}/earnings/api/stock/{ticker}/technical-indicator/{function}You must choose the endpoint from this list.
/api/option-trades
limit, ticker_symbol, option_contracts[], type, newer_than, older_than, min_premium, max_premium, min_size, max_size, min_dte, max_dte, min_volume, max_volume, min_open_interest, max_open_interest, is_otm, opening, size_greater_oi, volume_greater_oi, include_agg_trades, tags[], excluded_tags[], issue_types[], sectors[], industries[], exchanges[], trade_codes[]tags[]=ask_side&tags[]=bid_side. newer_than and older_than accept Unix timestamps in seconds or milliseconds./api/option-trades/flow-alerts
limit, is_call, is_put, is_otm, min_premium, ticker_symbol, size_greater_oi/api/screener/option-contracts
limit, min_premium, type, is_otm, issue_types[], min_volume_oi_ratio/api/stock/{ticker}/flow-recent/api/darkpool/{ticker}/api/darkpool/recent/api/market/market-tide/api/stock/{ticker}/net-prem-ticks/api/stock/{ticker}/option-contracts/api/stock/{ticker}/greeks/api/stock/{ticker}/greek-exposure/strike/api/stock/{ticker}/spot-exposures/strike/api/stock/{ticker}/interpolated-iv/api/stock/{ticker}/options-volume/api/screener/option-contracts/api/insider/transactions/api/congress/recent-trades/api/news/headlines/api/stock/{ticker}/financials/api/stock/{ticker}/income-statements
report_type/api/stock/{ticker}/balance-sheets
report_type/api/stock/{ticker}/cash-flows
report_type/api/stock/{ticker}/earnings
report_type/api/stock/{ticker}/technical-indicator/{function}
interval, time_period, series_typeUser: "Show me the latest unusual option trades for TSLA." Code:
import httpx
url = "https://api.unusualwhales.com/api/option-trades/flow-alerts"
headers = {"Authorization": "Bearer YOUR_TOKEN"}
params = {
"ticker_symbol": "TSLA",
"min_premium": 50_000,
"size_greater_oi": True, # Opening trades where size > open_interest
"limit": 10,
"is_otm": True
}
response = httpx.get(url, headers=headers, params=params)
print(response.json().get("data", []))
# List of dicts with details like 'ticker', 'type', 'total_premium', 'total_size', etc.
User: "Show me ask side OTM option trades with at least 500 volume and $10,000 premium. Aggregate multiple transactions that happened at the same time as one transaction"
import httpx
url = "https://api.unusualwhales.com/api/option-trades"
headers = {
"Authorization": "Bearer YOUR_TOKEN",
"UW-CLIENT-API-ID": "100001",
}
params = {
"is_otm": True,
"volume_greater_oi": True,
"is_multi_leg": False,
"max_open_interest": 5_000,
"max_dte": 180,
"excluded_tags[]": ["bid_side"],
"min_premium": 10_000,
"limit": 50,
"min_volume": 500,
"max_price": 25,
"issue_types[]": ["Common Stock", "ADR"],
"min_ask_perc": 0.5,
# Aggregate multiple transactions that happened at the same time into one transaction
# so that if the transaction got split up and the individual transactions would not match
# the minimum $10,000 premium but the aggregated would the aggregated would show up this way.
#
# Aggregated transactions are the flow alerts from https://api.unusualwhales.com/api/option-trades/flow-alerts
# tagged as RepeatedHits
"include_agg_trades": True,
}
response = httpx.get(url, headers=headers, params=params)
print(response.json().get("data", []))
# Individual prints with fields such as 'option_chain_id', 'executed_at', 'price', 'size', and 'premium'.
User: "Show me unusually bullish option activity for today."
import httpx
url = "https://api.unusualwhales.com/api/screener/option-contracts"
headers = {"Authorization": "Bearer YOUR_TOKEN"}
params = {
"limit": 150,
"is_otm": True,
"issue_types[]": ["Common Stock", "ADR"],
"max_dte": 183,
"max_multileg_volume_ratio": 0.1,
"min_ask_perc": 0.7,
"min_volume": 500,
"min_premium": 250_000,
"type": "Calls",
"vol_greater_oi": True,
}
response = httpx.get(url, headers=headers, params=params)
print(response.json().get("data", []))
# List of dicts with details like 'ticker_symbol', 'option_symbol', 'ask_side_volume', 'avg_price', etc.
User: "What is the overall market sentiment right now?" Code:
import httpx
url = "https://api.unusualwhales.com/api/market/market-tide"
headers = {"Authorization": "Bearer YOUR_TOKEN"}
params = {"interval_5m": False}
response = httpx.get(url, headers=headers, params=params)
print(response.json().get("data", []))
# List of dicts with details like 'timestamp', 'net_call_premium', 'net_put_premium', etc.
User: "Any big dark pool prints on NVDA?" Code:
import httpx
url = "https://api.unusualwhales.com/api/darkpool/NVDA"
headers = {"Authorization": "Bearer YOUR_TOKEN"}
response = httpx.get(url, headers=headers)
print(response.json().get("data", []))
# List of dicts with details like 'ticker', 'price', 'size', 'executed_at', etc.
User: "Show me the gamma exposure for RIVN puts near current price." Code:
import httpx
url = "https://api.unusualwhales.com/api/stock/RIVN/spot-exposures/strike"
headers = {"Authorization": "Bearer YOUR_TOKEN"}
response = httpx.get(url, headers=headers)
print(response.json().get("data", []))
# List of dicts with details like 'strike', 'put_gamma_oi', 'put_gamma_bid', 'put_gamma_ask', etc.