{"openapi":"3.0.3","info":{"title":"Crypto Data API","description":"Real-time crypto market intelligence API. Built for AI agents: gasless USDC payments via x402 protocol, one-call onboarding, and 180+ endpoints for prices, derivatives, funding, and sentiment.","version":"2026-08-25"},"paths":{"/api/v1/health":{"get":{"tags":["Health"],"summary":"Health Check","description":"Basic health check endpoint (no auth required).","operationId":"health_check_api_v1_health_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthCheckResponse"}}}}}},"head":{"tags":["Health"],"summary":"Health Check","description":"Basic health check endpoint (no auth required).","operationId":"health_check_api_v1_health_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthCheckResponse"}}}}}}},"/api/v1/auth/keys":{"post":{"tags":["Authentication"],"summary":"Create Api Key","description":"Create a new free-tier API key. The full key is only shown once.","operationId":"create_api_key_api_v1_auth_keys_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIKeyCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Authentication"],"summary":"Revoke Api Key","description":"Revoke the current API key. 7-day cooldown before new key creation.","operationId":"revoke_api_key_api_v1_auth_keys_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Revoke Api Key Api V1 Auth Keys Delete"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/auth/keys/me":{"get":{"tags":["Authentication"],"summary":"Get Current Key Info","description":"Get information about the current API key.\n\nReports the EFFECTIVE limits (limits_for), not the tier's headline numbers —\na free key whose email is unverified is on the smaller starter allowance, and\na dashboard or agent that showed the tier default would be promising quota\nthe limiter won't honour.","operationId":"get_current_key_info_api_v1_auth_keys_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIKeyInfo"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/auth/resend-verify":{"post":{"tags":["Authentication"],"summary":"Resend Verify Email","description":"Re-send the confirmation link for this key's email address.\n\nExists so an agent that hits the unverified daily cap can get its human back\non track without leaving the session — the 429 body names this endpoint. The\n10-minute resend cooldown inside _issue_verify is the abuse floor.\n\nOnly ever acts on the CALLER'S OWN key, so the outcome is reported honestly\nrather than blurred: there is no other account's state to probe here, and a\nvague \"sent\" for a mail that never went out just sends an agent back to wait\nfor an email that will never arrive.","operationId":"resend_verify_email_api_v1_auth_resend_verify_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/auth/keys/rotate":{"post":{"tags":["Authentication"],"summary":"Rotate Api Key","description":"Rotate the current API key. Invalidates the old key.","operationId":"rotate_api_key_api_v1_auth_keys_rotate_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIKeyRotateResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/coins":{"get":{"tags":["Coins"],"summary":"List Coins","description":"List all coins, paginated by market cap rank.","operationId":"list_coins_api_v1_coins_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":250,"minimum":1,"default":50,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoinListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/coins/search":{"get":{"tags":["Coins"],"summary":"Search Coins","description":"Search coins by name or symbol.","operationId":"search_coins_api_v1_coins_search_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"title":"Q"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoinSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/coins/top":{"get":{"tags":["Coins"],"summary":"Top Coins","description":"Get top N coins by market cap.","operationId":"top_coins_api_v1_coins_top_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoinTopResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/coins/categories":{"get":{"tags":["Coins"],"summary":"Coin Categories","description":"Get all unique coin categories.","operationId":"coin_categories_api_v1_coins_categories_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoinCategoriesResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/coins/category-groups":{"get":{"tags":["Coins"],"summary":"Coin Category Groups","description":"Curated coin-category themes (20+ major categories).\n\nCovers AI, Layer-1 / platform, Layer-2 & scaling, DeFi, DEX, lending, liquid\nstaking, stablecoins, exchange tokens, meme, privacy, RWA, NFT, gaming,\nmetaverse, DePIN, oracles, interoperability, storage, Bitcoin / Solana /\nCosmos ecosystems, PoW and derivatives. Each group carries a plain-English\ndescription and a resolved list of the tracked coins that belong to it (live\nprice, market cap, rank, 24h/7d change), sorted by market-cap rank. Unlike\n`/coins/categories` (raw CoinGecko tag names), this is an editorial set built\nfor the Coin Categories page.","operationId":"coin_category_groups_api_v1_coins_category_groups_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Max coins per category group","default":25,"title":"Limit"},"description":"Max coins per category group"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoinCategoryGroupsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/coins/{symbol}":{"get":{"tags":["Coins"],"summary":"Get Coin","description":"Get a single coin profile by symbol (e.g., BTC, ETH).","operationId":"get_coin_api_v1_coins__symbol__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","title":"Symbol"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoinProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/market-health":{"get":{"tags":["Market Health"],"summary":"Get Market Health","description":"Full dual-score market health result with all 11 components.\n\n**`indicators` contract**\n\nTop-level `indicators` is a flat denormalization of the most-filtered values\nfrom `components.<x>.details`. Keys are **omitted entirely** when the source\nvalue is unavailable (never null) so consumers can safely use\n`dict.get(key, default)` for fallbacks. Committed key set:\n\n- `long_short_ratio` (float) — BTC long/short ratio (Binance perps)\n- `funding_rate` (float, %) — avg funding rate (aliased from `avg_funding_rate`)\n- `buy_ratio` (float, 0–1) — weighted taker-buy ratio across top spot pairs\n- `fear_greed_value` (int, 0–100) — averaged Fear & Greed index\n- `breadth_pct` (float, %) — share of top-30 coins above their 200D MA\n- `pct_from_200ma` (float, %) — BTC distance from 200D MA\n- `cross_status` (str) — Golden | Death | Neutral\n- `stablecoin_change_7d` (float) — 7-day stablecoin market-cap change\n\nHealth is computed cross-exchange (CoinGlass aggregate + Binance) and is not\nscoped by any per-exchange filter. The `long_short_ratio` is BTC-on-Binance,\nused as a market-wide sentiment signal.","operationId":"get_market_health_api_v1_market_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketHealthResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/market-health/summary":{"get":{"tags":["Market Health"],"summary":"Get Health Summary","description":"Scores + sentiment only (lightweight).","operationId":"get_health_summary_api_v1_market_health_summary_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Response format: 'markdown' for LLM-friendly plain text","title":"Format"},"description":"Response format: 'markdown' for LLM-friendly plain text"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketHealthSummary"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/market-health/components":{"get":{"tags":["Market Health"],"summary":"Get Health Components","description":"All 11 component details.","operationId":"get_health_components_api_v1_market_health_components_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthComponentsResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/market-health/component/{name}":{"get":{"tags":["Market Health"],"summary":"Get Health Component","description":"Get a single component by name.","operationId":"get_health_component_api_v1_market_health_component__name__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComponentScoreSchema"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/market-health/history":{"get":{"tags":["Market Health"],"summary":"Get Health History","description":"Health score history from database.","operationId":"get_health_history_api_v1_market_health_history_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":730,"minimum":1,"default":365,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthHistoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/market-health/altcoin-breadth":{"get":{"tags":["Market Health"],"summary":"Altcoin Breadth","description":"Altcoin breadth - % of coins above their MA with per-coin detail.","operationId":"altcoin_breadth_api_v1_market_health_altcoin_breadth_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"ma_period","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":5,"default":200,"title":"Ma Period"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AltcoinBreadthResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/market-health/refresh":{"post":{"tags":["Market Health"],"summary":"Force Refresh","description":"Force recalculate health score (Pro and Pro Plus tiers).","operationId":"force_refresh_api_v1_market_health_refresh_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthRefreshResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/indicators/signum-rgg":{"get":{"tags":["Indicators"],"summary":"Get Signum Rgg","description":"SIGNUM_RGG trend radar across all Hyperliquid perps + top 100 Binance USDT pairs.\n\nEach asset gets a daily RED/GREY/GREEN color from ADX(14)+DMI with hysteresis,\nplus days-in-color, flip date, % change since flip, and (for grey) the 20-day\nconsolidation range.","operationId":"get_signum_rgg_api_v1_indicators_signum_rgg_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"color","in":"query","required":false,"schema":{"title":"Color","enum":["red","grey","green"],"type":"string","nullable":true}},{"name":"source","in":"query","required":false,"schema":{"title":"Source","enum":["binance_spot","hyperliquid_perp"],"type":"string","nullable":true}},{"name":"min_days","in":"query","required":false,"schema":{"title":"Min Days","type":"integer","minimum":0,"nullable":true}},{"name":"max_days","in":"query","required":false,"schema":{"title":"Max Days","type":"integer","minimum":0,"nullable":true}},{"name":"sort","in":"query","required":false,"schema":{"enum":["days_in_color","pct_change","adx","symbol"],"type":"string","default":"days_in_color","title":"Sort"}},{"name":"order","in":"query","required":false,"schema":{"enum":["asc","desc"],"type":"string","default":"desc","title":"Order"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":250,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignumRggResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/indicators/signum-rgg/{symbol}":{"get":{"tags":["Indicators"],"summary":"Get Signum Rgg Symbol","description":"Per-asset SIGNUM_RGG detail with the last 60 days of color history.\n\nHyperliquid thousand-unit tickers (``kBONK``, ``kPEPE``, ``kSHIB``) are\naccepted as aliases of the plain symbol.","operationId":"get_signum_rgg_symbol_api_v1_indicators_signum_rgg__symbol__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","title":"Symbol"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignumRggDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/indicators/signum-rgg/refresh":{"post":{"tags":["Indicators"],"summary":"Refresh Signum Rgg","description":"Force recompute the SIGNUM_RGG cache (Pro tier).","operationId":"refresh_signum_rgg_api_v1_indicators_signum_rgg_refresh_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignumRggRefreshResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/indicators/technical":{"get":{"tags":["Indicators"],"summary":"Get Technical Regime","description":"Technical / Structural regime overlay (Regime #14, Pro tier).\n\nPer-asset price-structure state across the same universe as SIGNUM_RGG:\nmoving-average position (SMA-50/100/200 + last cross), Bollinger-band\nsqueeze + bandwidth percentile, 20d range position, and RSI(14) extremes\non daily + 1h timeframes.\n\nFilter via `ma_state`, `bb`, `range_zone`, `rsi` (each is optional and\nAND-combined). Example screener queries:\n\n  - `?bb=in_squeeze&sort=squeeze_days&order=desc` — assets compressed for longest\n  - `?rsi=oversold&min_days_in_state=2` — sustained oversold candidates\n  - `?ma_state=reclaim_200` — recent 200MA reclaims (last 10 days)\n  - `?range_zone=near_high&ma_state=above_200` — near-range-high + uptrend","operationId":"get_technical_regime_api_v1_indicators_technical_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"source","in":"query","required":false,"schema":{"title":"Source","enum":["binance_spot","hyperliquid_perp"],"type":"string","nullable":true}},{"name":"ma_state","in":"query","required":false,"schema":{"description":"Filter by SMA-200 relationship","title":"Ma State","enum":["above_200","below_200","breakdown_200","reclaim_200"],"type":"string","nullable":true},"description":"Filter by SMA-200 relationship"},{"name":"bb","in":"query","required":false,"schema":{"description":"Filter by Bollinger band state","title":"Bb","enum":["in_squeeze","expanding"],"type":"string","nullable":true},"description":"Filter by Bollinger band state"},{"name":"range_zone","in":"query","required":false,"schema":{"description":"Filter by 20d range position","title":"Range Zone","enum":["near_low","mid","near_high"],"type":"string","nullable":true},"description":"Filter by 20d range position"},{"name":"rsi","in":"query","required":false,"schema":{"description":"Filter by daily RSI state","title":"Rsi","enum":["overbought","oversold","extreme"],"type":"string","nullable":true},"description":"Filter by daily RSI state"},{"name":"min_days_in_state","in":"query","required":false,"schema":{"description":"Min days in state (squeeze or RSI extreme); requires matching filter","title":"Min Days In State","type":"integer","minimum":0,"nullable":true},"description":"Min days in state (squeeze or RSI extreme); requires matching filter"},{"name":"sort","in":"query","required":false,"schema":{"enum":["symbol","price","rsi_1d","bb_bandwidth","squeeze_days","dist_from_200","position_in_range"],"type":"string","default":"symbol","title":"Sort"}},{"name":"order","in":"query","required":false,"schema":{"enum":["asc","desc"],"type":"string","default":"desc","title":"Order"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":250,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechnicalRegimeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/indicators/technical/{symbol}":{"get":{"tags":["Indicators"],"summary":"Get Technical Regime Symbol","description":"Per-asset Technical / Structural detail with 60d daily history.\n\n`history` contains compact daily bars (close, RSI-14, BB bandwidth, SMA-200,\nabove_200) suitable for sparkline rendering.\n\nHyperliquid thousand-unit tickers (``kBONK``, ``kPEPE``, ``kSHIB``) are\naccepted as aliases of the plain symbol.","operationId":"get_technical_regime_symbol_api_v1_indicators_technical__symbol__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","title":"Symbol"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechnicalRegimeDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/indicators/technical/refresh":{"post":{"tags":["Indicators"],"summary":"Refresh Technical Regime","description":"Force recompute the Technical / Structural cache (Pro tier).","operationId":"refresh_technical_regime_api_v1_indicators_technical_refresh_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechnicalRegimeRefreshResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/derivatives/binance/funding-rates":{"get":{"tags":["Derivatives"],"summary":"Binance Funding Rates","description":"Binance perpetual funding rate history.","operationId":"binance_funding_rates_api_v1_derivatives_binance_funding_rates_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"symbol","in":"query","required":false,"schema":{"type":"string","default":"BTCUSDT","title":"Symbol"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":30,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FundingRateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/derivatives/binance/open-interest":{"get":{"tags":["Derivatives"],"summary":"Binance Open Interest","description":"Binance open interest + 30-day trend.","operationId":"binance_open_interest_api_v1_derivatives_binance_open_interest_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"symbol","in":"query","required":false,"schema":{"type":"string","default":"BTCUSDT","title":"Symbol"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenInterestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/derivatives/binance/long-short-ratio":{"get":{"tags":["Derivatives"],"summary":"Binance Long Short Ratio","description":"Binance long/short account ratio.","operationId":"binance_long_short_ratio_api_v1_derivatives_binance_long_short_ratio_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"symbol","in":"query","required":false,"schema":{"type":"string","default":"BTCUSDT","title":"Symbol"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LongShortRatioResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/derivatives/binance/summary":{"get":{"tags":["Derivatives"],"summary":"Binance Derivatives Summary","description":"All-in-one Binance derivatives summary.","operationId":"binance_derivatives_summary_api_v1_derivatives_binance_summary_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"symbol","in":"query","required":false,"schema":{"type":"string","default":"BTCUSDT","title":"Symbol"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DerivativesSummary"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/derivatives/binance/history":{"get":{"tags":["Derivatives"],"summary":"Derivatives History","description":"Daily derivatives data (funding, OI, L/S) from our own funding + OI archives.","operationId":"derivatives_history_api_v1_derivatives_binance_history_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":1,"default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DerivativesHistoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/derivatives/funding-rates":{"get":{"tags":["Derivatives"],"summary":"Cross Exchange Funding","description":"Funding rates across Binance + Hyperliquid.","operationId":"cross_exchange_funding_api_v1_derivatives_funding_rates_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"coin","in":"query","required":false,"schema":{"type":"string","default":"BTC","title":"Coin"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrossExchangeFunding"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/derivatives/open-interest":{"get":{"tags":["Derivatives"],"summary":"Cross Exchange Oi","description":"Open interest across Binance + Hyperliquid.","operationId":"cross_exchange_oi_api_v1_derivatives_open_interest_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"coin","in":"query","required":false,"schema":{"type":"string","default":"BTC","title":"Coin"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrossExchangeOI"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/derivatives/summary":{"get":{"tags":["Derivatives"],"summary":"Cross Exchange Summary","description":"Combined cross-exchange derivatives overview.","operationId":"cross_exchange_summary_api_v1_derivatives_summary_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"coin","in":"query","required":false,"schema":{"type":"string","default":"BTC","title":"Coin"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Response format: 'markdown' for LLM-friendly plain text","title":"Format"},"description":"Response format: 'markdown' for LLM-friendly plain text"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrossExchangeSummary"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/hyperliquid/meta":{"get":{"tags":["Hyperliquid"],"summary":"Get Meta","description":"Exchange metadata: assets, max leverage, specs.","operationId":"get_meta_api_v1_hyperliquid_meta_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HLMetaResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/hyperliquid/prices":{"get":{"tags":["Hyperliquid"],"summary":"Get Prices","description":"All mid prices across Hyperliquid assets.","operationId":"get_prices_api_v1_hyperliquid_prices_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HLPricesResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/hyperliquid/funding-rates":{"get":{"tags":["Hyperliquid"],"summary":"Get Funding Rates","description":"Current + historical funding rates for a coin.","operationId":"get_funding_rates_api_v1_hyperliquid_funding_rates_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"coin","in":"query","required":false,"schema":{"type":"string","default":"BTC","title":"Coin"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HLFundingRateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/hyperliquid/open-interest":{"get":{"tags":["Hyperliquid"],"summary":"Get Open Interest","description":"Open interest across all Hyperliquid assets.","operationId":"get_open_interest_api_v1_hyperliquid_open_interest_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HLOpenInterestResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/hyperliquid/candles":{"get":{"tags":["Hyperliquid"],"summary":"Get Candles","description":"OHLCV candles for a coin.","operationId":"get_candles_api_v1_hyperliquid_candles_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"coin","in":"query","required":false,"schema":{"type":"string","default":"BTC","title":"Coin"}},{"name":"interval","in":"query","required":false,"schema":{"type":"string","default":"1h","title":"Interval"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HLCandleResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/hyperliquid/l2-book":{"get":{"tags":["Hyperliquid"],"summary":"Get L2 Book","description":"L2 order book snapshot.","operationId":"get_l2_book_api_v1_hyperliquid_l2_book_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"coin","in":"query","required":false,"schema":{"type":"string","default":"BTC","title":"Coin"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HLL2BookResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/hyperliquid/summary":{"get":{"tags":["Hyperliquid"],"summary":"Get Summary","description":"All-in-one perp data for a coin, including its volume multiplier.\n\n``volume_multiplier`` is the coin's live rolling-24h notional over its mean\ndaily notional across the last 30 settled days — 3.0 means it is trading at\nthree times normal. Null when the coin is too newly listed (<7 days) to have\nan honest baseline. The ranked, filterable scan across the whole universe\nlives at ``/api/v1/volume/scanner``.","operationId":"get_summary_api_v1_hyperliquid_summary_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"coin","in":"query","required":false,"schema":{"type":"string","default":"BTC","title":"Coin"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HLSummaryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/hyperliquid/top-traders":{"get":{"tags":["Hyperliquid Traders"],"summary":"Get Top Traders","description":"Scored leaderboard of top traders filtered by performance criteria.","operationId":"get_top_traders_api_v1_hyperliquid_top_traders_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HLTopTradersResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/hyperliquid/wallet-positions":{"get":{"tags":["Hyperliquid Traders"],"summary":"Get Wallet Positions","description":"Current positions for tracked wallets. For non-tracked addresses, queries Hyperliquid on-demand.","operationId":"get_wallet_positions_api_v1_hyperliquid_wallet_positions_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"address","in":"query","required":false,"schema":{"description":"Filter by wallet address (0x...)","title":"Address","type":"string","nullable":true},"description":"Filter by wallet address (0x...)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HLWalletPositionsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/hyperliquid/wallet-signals":{"get":{"tags":["Hyperliquid Traders"],"summary":"Get Wallet Signals","description":"Position change signals: entries, exits, size increases/decreases.","operationId":"get_wallet_signals_api_v1_hyperliquid_wallet_signals_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"minutes","in":"query","required":false,"schema":{"type":"integer","maximum":1440,"minimum":1,"description":"Look-back window in minutes","default":10,"title":"Minutes"},"description":"Look-back window in minutes"},{"name":"address","in":"query","required":false,"schema":{"description":"Filter by wallet address (0x...). Comma-separated for multiple.","title":"Address","type":"string","nullable":true},"description":"Filter by wallet address (0x...). Comma-separated for multiple."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HLWalletSignalsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/hyperliquid/trader-profiles":{"get":{"tags":["Hyperliquid Traders"],"summary":"Get Trader Profiles","description":"Trade profiles with win rate, PnL, classification, and edges.","operationId":"get_trader_profiles_api_v1_hyperliquid_trader_profiles_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"address","in":"query","required":false,"schema":{"description":"Filter by wallet address (0x...)","title":"Address","type":"string","nullable":true},"description":"Filter by wallet address (0x...)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HLTraderProfilesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/hyperliquid/trader-profiles/refresh":{"post":{"tags":["Hyperliquid Traders"],"summary":"Refresh Trader Profiles","description":"Force a synchronous refresh of trade profiles for all tracked wallets.\n\nPro Plus tier — expensive (~15-30s, sequential Hyperliquid calls). Use after\na deploy or when cached profiles look stale; the daily 19:00 UTC scheduled\nrefresh covers normal operation.","operationId":"refresh_trader_profiles_api_v1_hyperliquid_trader_profiles_refresh_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/hyperliquid/leaderboard/refresh":{"post":{"tags":["Hyperliquid Traders"],"summary":"Refresh Leaderboard","description":"Force a synchronous refresh of the Hyperliquid leaderboard cache.\n\nPro Plus tier — fetches a ~28 MB payload and takes ~25-30s. Use when\n/copy-signals or /wallets/search return 0 results and you suspect the\nin-memory leaderboard is empty (e.g. a startup fetch timed out). The\n2-min position refresh job will also auto-recover an empty leaderboard;\nthis endpoint is for forcing it sooner.","operationId":"refresh_leaderboard_api_v1_hyperliquid_leaderboard_refresh_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/hyperliquid/wallets/search":{"get":{"tags":["Hyperliquid Traders"],"summary":"Search Wallets","description":"Search the cached top-leaderboard pool for wallets matching arbitrary gates.\n\nRead-only — does not modify the watchlist. Pool is the same ~50-wallet set\nthat auto-watchlist evaluation considers. Refreshed daily at 19:00 UTC.","operationId":"search_wallets_api_v1_hyperliquid_wallets_search_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"min_score","in":"query","required":false,"schema":{"type":"number","maximum":100,"minimum":0,"description":"Minimum top-trader score","default":0,"title":"Min Score"},"description":"Minimum top-trader score"},{"name":"min_win_rate","in":"query","required":false,"schema":{"description":"Minimum 30d win rate (0-1)","title":"Min Win Rate","type":"number","maximum":1,"minimum":0,"nullable":true},"description":"Minimum 30d win rate (0-1)"},{"name":"min_profit_factor","in":"query","required":false,"schema":{"description":"Minimum profit factor","title":"Min Profit Factor","type":"number","minimum":0,"nullable":true},"description":"Minimum profit factor"},{"name":"min_trades_30d","in":"query","required":false,"schema":{"description":"Minimum trades in 30d. Defaults to 30 to filter tiny-sample wallets. Pass 0 explicitly to disable.","title":"Min Trades 30D","type":"integer","minimum":0,"nullable":true},"description":"Minimum trades in 30d. Defaults to 30 to filter tiny-sample wallets. Pass 0 explicitly to disable."},{"name":"min_avg_duration_hours","in":"query","required":false,"schema":{"description":"Min avg trade duration (hours)","title":"Min Avg Duration Hours","type":"number","minimum":0,"nullable":true},"description":"Min avg trade duration (hours)"},{"name":"exclude_types","in":"query","required":false,"schema":{"description":"Comma-separated trader types to exclude, e.g. 'hft,scalper'","title":"Exclude Types","type":"string","nullable":true},"description":"Comma-separated trader types to exclude, e.g. 'hft,scalper'"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"description":"Max wallets to return","default":50,"title":"Limit"},"description":"Max wallets to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HLWalletSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/hyperliquid/watchlist":{"get":{"tags":["Hyperliquid Traders"],"summary":"Get Watchlist","description":"List all watchlisted wallet addresses.","operationId":"get_watchlist_api_v1_hyperliquid_watchlist_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HLWatchlistResponse"}}}}},"security":[{"APIKeyHeader":[]}]},"post":{"tags":["Hyperliquid Traders"],"summary":"Add To Watchlist","description":"Add wallet addresses to the watchlist. Automatically starts tracking for signals.\n\nThe watchlist is a shared, collector-wide poll set, so mutations are gated to\nPro / Pro Plus — a free key must not be able to inflate or alter the set that\ndrives every consumer's wallet signals.","operationId":"add_to_watchlist_api_v1_hyperliquid_watchlist_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchlistAddDetailedRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HLWatchlistResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKeyHeader":[]}]},"delete":{"tags":["Hyperliquid Traders"],"summary":"Remove From Watchlist","description":"Remove wallet addresses from the watchlist.","operationId":"remove_from_watchlist_api_v1_hyperliquid_watchlist_delete","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchlistRemoveRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HLWatchlistResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/hyperliquid/watchlist/auto":{"get":{"tags":["Hyperliquid Traders"],"summary":"Get Auto Watchlist","description":"Get current auto-managed watchlist configuration and status.","operationId":"get_auto_watchlist_api_v1_hyperliquid_watchlist_auto_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HLAutoWatchlistResponse"}}}}},"security":[{"APIKeyHeader":[]}]},"post":{"tags":["Hyperliquid Traders"],"summary":"Create Auto Watchlist","description":"Auto-populate watchlist from top traders based on configurable criteria.","operationId":"create_auto_watchlist_api_v1_hyperliquid_watchlist_auto_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoWatchlistRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HLAutoWatchlistResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKeyHeader":[]}]},"delete":{"tags":["Hyperliquid Traders"],"summary":"Delete Auto Watchlist","description":"Disable auto-management and remove all auto-managed entries.","operationId":"delete_auto_watchlist_api_v1_hyperliquid_watchlist_auto_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HLAutoWatchlistResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/hyperliquid/copy-signals":{"get":{"tags":["Hyperliquid Traders"],"summary":"Get Copy Signals","description":"Top traders with their recent signals in a single response.\n\nReplaces the 3-step workflow (top-traders → watchlist → signals) with one call.\nOnly returns traders that have signals in the given time window.\n\nProfile filters (min_win_rate, min_profit_factor, min_trades_30d,\nmin_avg_duration_hours, exclude_types) are optional and only applied when\npassed — preserves backward compatibility. Recommended: pass\nmin_trades_30d=30 to drop tiny-sample wallets.","operationId":"get_copy_signals_api_v1_hyperliquid_copy_signals_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"min_score","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":0,"description":"Minimum trader score","default":80,"title":"Min Score"},"description":"Minimum trader score"},{"name":"minutes","in":"query","required":false,"schema":{"type":"integer","maximum":1440,"minimum":1,"description":"Signal look-back window in minutes","default":60,"title":"Minutes"},"description":"Signal look-back window in minutes"},{"name":"min_win_rate","in":"query","required":false,"schema":{"description":"Minimum 30d win rate (0-1)","title":"Min Win Rate","type":"number","maximum":1,"minimum":0,"nullable":true},"description":"Minimum 30d win rate (0-1)"},{"name":"min_profit_factor","in":"query","required":false,"schema":{"description":"Minimum profit factor","title":"Min Profit Factor","type":"number","minimum":0,"nullable":true},"description":"Minimum profit factor"},{"name":"min_trades_30d","in":"query","required":false,"schema":{"description":"Minimum trades in 30d. Pass 30+ to filter tiny-sample wallets (e.g. '100% WR over 2 trades'). Not auto-defaulted here for backward compatibility.","title":"Min Trades 30D","type":"integer","minimum":0,"nullable":true},"description":"Minimum trades in 30d. Pass 30+ to filter tiny-sample wallets (e.g. '100% WR over 2 trades'). Not auto-defaulted here for backward compatibility."},{"name":"min_avg_duration_hours","in":"query","required":false,"schema":{"description":"Min avg trade duration (hours)","title":"Min Avg Duration Hours","type":"number","minimum":0,"nullable":true},"description":"Min avg trade duration (hours)"},{"name":"exclude_types","in":"query","required":false,"schema":{"description":"Comma-separated trader types to exclude, e.g. 'hft,scalper'","title":"Exclude Types","type":"string","nullable":true},"description":"Comma-separated trader types to exclude, e.g. 'hft,scalper'"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HLCopySignalsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/hyperliquid/trader-profile/{address}":{"get":{"tags":["Hyperliquid Traders"],"summary":"Get Trader Profile","description":"On-demand trade profile for ANY Hyperliquid address. Fetches fill history and computes stats.","operationId":"get_trader_profile_api_v1_hyperliquid_trader_profile__address__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string","title":"Address"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":1,"description":"Analysis period in days","default":30,"title":"Days"},"description":"Analysis period in days"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HLTraderProfileResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/hyperliquid/wallet-trades/{address}":{"get":{"tags":["Hyperliquid Traders"],"summary":"Get Wallet Trades","description":"Historical trades for any Hyperliquid address with summary statistics.","operationId":"get_wallet_trades_api_v1_hyperliquid_wallet_trades__address__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string","title":"Address"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":1,"description":"Trade history period in days","default":30,"title":"Days"},"description":"Trade history period in days"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HLWalletTradesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/liquidity/depth":{"get":{"tags":["Liquidity / Market Depth"],"summary":"Get Depth","description":"Current per-coin depth/spread snapshot across the tracked universe.\n\nReturns one record per coin (top-25 HL perps by 24h volume):\nbid/ask depth in USD at {10, 25, 50, 100}bps from mid, spread in bps,\nbook imbalance within 10bps, and joined open interest.\n\nThe free tier is scoped to BTC; full-universe coverage is Pro and Pro Plus.","operationId":"get_depth_api_v1_liquidity_depth_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DepthResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/liquidity/oi-divergence":{"get":{"tags":["Liquidity / Market Depth"],"summary":"Get Oi Divergence","description":"OI vs price change across 1h/4h/24h windows, ranked by 4h divergence.\n\nPositive divergence (OI rising faster than price) = fragile positioning.\nCoins without enough history for a given window report null for that window.\n\nThe free tier is scoped to BTC; full-universe coverage is Pro and Pro Plus.","operationId":"get_oi_divergence_api_v1_liquidity_oi_divergence_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OIDivergenceResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/liquidity/regime":{"get":{"tags":["Liquidity / Market Depth"],"summary":"Get Regime","description":"Per-coin liquidity regime + market-wide aggregate + composite score.\n\nEach coin is classified into one of: ``deep_book``, ``oi_price_divergence``,\n``depth_withdrawal``, ``post_cascade_impaired``, or ``neutral``. The\ncomposite score (0-100) maps the regime mix into a single fragility read\n(higher = healthier market structure).\n\n**Forward-only — not historically backfillable.** Unlike ``technical_regime``\n(replayable from daily klines), the rules here depend on *intraday* L2 depth\ndeltas (10-min withdrawal, 12h depth baselines, depth/spread percentiles)\nthat only exist in the live per-minute sample buffer. There is no historical\nsource to reconstruct them from, so this signal accumulates forward from\ncollector start. The per-coin snapshot is archived daily so a backtestable\nhistory builds going forward; periods before collector deploy are unavailable.","operationId":"get_regime_api_v1_liquidity_regime_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LiquidityRegimeResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/liquidity/regime/score":{"get":{"tags":["Liquidity / Market Depth"],"summary":"Get Regime Score","description":"Composite liquidity fragility score (0-100) + sentiment band + aggregate breakdown.\n\nTrimmed companion to ``/liquidity/regime`` — same composite, no per-coin list.","operationId":"get_regime_score_api_v1_liquidity_regime_score_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LiquidityRegimeScoreResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/liquidity/depth/{coin}":{"get":{"tags":["Liquidity / Market Depth"],"summary":"Get Depth For Coin","description":"Per-coin depth history (rolling, up to 24h). Free: BTC only; Pro + Pro Plus: any coin.","operationId":"get_depth_for_coin_api_v1_liquidity_depth__coin__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"coin","in":"path","required":true,"schema":{"type":"string","title":"Coin"}},{"name":"minutes","in":"query","required":false,"schema":{"type":"integer","maximum":1440,"minimum":1,"description":"Trailing minutes of history (max 24h)","default":60,"title":"Minutes"},"description":"Trailing minutes of history (max 24h)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoinDepthHistoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/quant/market":{"get":{"tags":["Quant"],"summary":"Get Quant Market","description":"Whole-market regime + probability object (Pro).\n\nHMM-filtered posterior over the 6 market regimes (strong_trend_bull/bear,\nrange_low_vol, choppy_high_vol, vol_spike, squeeze) with calibrated\nprobability buckets for direction, volatility, liquidation risk, funding,\nbreadth, open interest and regime transitions at the requested horizon.\nThe market `liquidation_risk` bucket is depth-aware — driven by live\norder-book fragility (thin book + wide spread = higher forced-liquidation\nodds), not just realized volatility; the source is tagged in\n`explain.heads_provenance` (e.g. `depth_fragility:thin`).\nIncludes seeded Monte Carlo tomorrow-distribution stats on the 24h horizon\nand a full `explain` block. Refreshed every 15 minutes from hourly bars.\nMarket-wide and per-coin regime data (/quant/coins) are both Pro.","operationId":"get_quant_market_api_v1_quant_market_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"horizon","in":"query","required":false,"schema":{"enum":["4h","24h"],"type":"string","default":"24h","title":"Horizon"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuantProbabilityObject"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/quant/positioning":{"get":{"tags":["Quant"],"summary":"Get Quant Positioning","description":"Per-coin trader positioning by account type (Pro).\n\nAggregates the full HL account universe (every account >= $100k holding a\nposition; active accounts re-polled every liq-map cycle — 15 min on the\npublic path, 5 min once batch RPC is armed) into per-coin\nlong/short/net/gross notional split by\n**trader type** — `market_maker`, `whale`, `other`, and `all` — using a\nbehavioral classifier (turnover, market breadth, leverage, PnL consistency).\nThe `market_maker` bucket is the basis for the dealer-gamma view at\n`/quant/gex`. Each bucket also reports the distinct account count.","operationId":"get_quant_positioning_api_v1_quant_positioning_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"symbol","in":"query","required":false,"schema":{"description":"Filter to one coin, e.g. BTC","title":"Symbol","type":"string","nullable":true},"description":"Filter to one coin, e.g. BTC"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/quant/gex":{"get":{"tags":["Quant"],"summary":"Get Quant Gex","description":"Dealer positioning / Gamma Exposure — perp analog (Pro).\n\nBuilt from **market-maker** accounts (the perp \"dealers\"): per coin we report\n`mm_net_delta` (dealer inventory long/short), `gamma_profile` (the MM\nliquidation-density by price = where MM forced unwinds cluster, the\nshort-gamma acceleration zones) and `gamma_flip` (the price where MM\nlong-liq-below crosses short-liq-above — the inflection).\n\nNote: perps have no literal options gamma; this is a behavioral analog from\nmarket-maker inventory + liquidation-driven forced flow, not options dealer\ngamma. The MM set is a heuristic classification (turnover + breadth + known\ndesks), so treat it as a positioning signal, not an exact dealer book.\n\nEach coin also carries the composite **`regime`** flag — `amplify`\n(short-gamma analog: crowded book + dense clusters near mark → forced flow\nfollows through) vs `dampen` (balanced, mean-reverting) vs `transitional`\n(on the flip line) — joining the cluster profile with funding skew, OI\nrate-of-change, the realized-liquidation cascade signal and the\n`dist_to_flip_pct`. Every sub-signal is returned in `regime.inputs` so the\ncall is reproducible. `meta.maintenance_margin_tiers` gives the per-pair MM /\nmax-leverage ladder for context.\n\n**`distribution_context`** (per coin) puts today's readings in\ndistributional context: trailing-30-day percentile ranks of the near-mark\ncluster density, |distance to flip|, normalized MM skew\n(`mm_net_delta/mm_gross`), regime score and funding rate — e.g. \"BTC\nnear-mark fuel density is the 92nd percentile of 30d\". The history is\nforward-only (hourly samples, started 2026-07); `history_days` /\n`sample_count` report how much exists and every `*_pctile` is null while\n`status` is `warming` (< 2 days). `meta.distribution_legend` documents each\nfield. The same block is archived in the `gamma_exposure` snapshot type.\n\nRequires a Pro or Pro Plus key; full-universe (all perps) on both.","operationId":"get_quant_gex_api_v1_quant_gex_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"symbol","in":"query","required":false,"schema":{"description":"Filter to one coin, e.g. BTC","title":"Symbol","type":"string","nullable":true},"description":"Filter to one coin, e.g. BTC"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/quant/whales":{"get":{"tags":["Quant"],"summary":"Get Quant Whales","description":"Hyperliquid whale activity — the ≥$100k account universe (Pro).\n\nRolls every large Hyperliquid account (the same universe behind\n`/quant/positioning` and `/quant/gex`; active accounts re-polled every\nliq-map cycle — 15 min on the public path) up into a single read:\n\n* `summary` — accounts tracked, the behavioral-class split\n  (`market_maker` / `whale` / `other`), aggregate long vs short notional, the\n  long/short ratio and the whole-book `net_bias` (risk-on/risk-off).\n* `top_coins` — the cryptos whales hold the most, by total notional: per coin\n  the long/short/net/gross USD, distinct account counts, the dominant side and\n  `directional_net_usd` (net excluding market-maker liquidity = the conviction\n  read).\n\nScope: Hyperliquid **perpetuals** (the whale margin book). `meta.segment` is\n`perp` and `meta.spot_status` flags that spot-wallet balances are not yet\ncollected. The view is crypto-only (no tokenized equities).\n\nFull-universe (all coins) on Pro and Pro Plus. Historical whale positioning\nis on Pro Plus via `/quant/whales/history`.","operationId":"get_quant_whales_api_v1_quant_whales_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/quant/whales/history":{"get":{"tags":["Quant"],"summary":"Get Quant Whales History","description":"Historic whale-activity movement — daily long/short notional (Pro Plus).\n\nA daily time-series of aggregate whale positioning: per UTC day the total\n`long_usd` / `short_usd` / `net_usd` / `gross_usd` across the ≥$100k account\nbook, plus the day's top coins by net.\n\nFull-universe collection is recent, so the early part of the series is\n**modeled** (each point carries `source` = `seed` | `live` and `estimated`):\na seeded baseline anchored to the first live reading that is replaced by\nobserved snapshots as they accrue. `meta.seeded_count` / `live_count` report\nthe split so you can trust-but-verify.\n\nFull-universe aggregate history (not coin-scopable) — Pro Plus.","operationId":"get_quant_whales_history_api_v1_quant_whales_history_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":540,"minimum":7,"description":"Trailing window length in days","default":180,"title":"Days"},"description":"Trailing window length in days"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/quant/coins":{"get":{"tags":["Quant"],"summary":"Get Quant Coins","description":"All-coins regime summary — the heatmap feed (Pro).\n\nOne trimmed entry per active Hyperliquid perp: regime + confidence,\np_direction_up (sum of the two bullish buckets), most likely transition,\nand current OI. Coins with under 60 days of history carry\n`insufficient_history: true` with reduced confidence; brand-new listings\nshow `status: warming_up` until 30 days of bars exist. Full probability\nmatrices live at /quant/coins/{symbol}.","operationId":"get_quant_coins_api_v1_quant_coins_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"horizon","in":"query","required":false,"schema":{"enum":["4h","24h"],"type":"string","default":"24h","title":"Horizon"}},{"name":"regime","in":"query","required":false,"schema":{"description":"Filter by regime label, e.g. squeeze","title":"Regime","type":"string","nullable":true},"description":"Filter by regime label, e.g. squeeze"},{"name":"sort","in":"query","required":false,"schema":{"enum":["oi","confidence","symbol","p_up"],"type":"string","default":"oi","title":"Sort"}},{"name":"order","in":"query","required":false,"schema":{"enum":["asc","desc"],"type":"string","default":"desc","title":"Order"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":300,"minimum":1,"default":250,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuantCoinsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/quant/coins/risk":{"get":{"tags":["Quant"],"summary":"Get Quant Coins Risk","description":"Bulk per-coin risk model for the whole universe (Pro).\n\nOne call that batches /quant/coins/{symbol} and /volatility/regime/{symbol}\nacross the full quant universe — majors (BTC/ETH/SOL) included — so consumers\ndon't fan out ~2 calls per perp. Each item carries the coin's regime +\nconfidence, the volatility / liquidation_risk / funding / open_interest\nprobability buckets (verbatim from /quant/coins/{symbol}), and the\nvol-sizing fields (vol_target_multiplier, vol_pctile_30, rv_24h) from the\nvolatility regime. Coins with insufficient history or brand-new listings\nstill appear, flagged in `meta`, so callers can mark them ineligible rather\nthan guess. Values match the per-symbol endpoints for the same\nsymbol/horizon — this is a batched view, not new modelling.","operationId":"get_quant_coins_risk_api_v1_quant_coins_risk_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"horizon","in":"query","required":false,"schema":{"enum":["4h","24h"],"type":"string","default":"24h","title":"Horizon"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuantCoinsRiskResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/quant/coins/{symbol}":{"get":{"tags":["Quant"],"summary":"Get Quant Coin","description":"Full per-coin probability object with explain block (Pro).\n\nEverything /quant/market provides, conditioned on the whole-market regime\n(the coin's transition matrix is the market-posterior-weighted mixture —\ninspect `explain.transition_mixture_weights`). `recent_regimes` carries the\nlast ~48 inference rows for sparkline rendering. Coins with under 60 days\nof history return the object flagged `insufficient_history` rather than 404.","operationId":"get_quant_coin_api_v1_quant_coins__symbol__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","title":"Symbol"}},{"name":"horizon","in":"query","required":false,"schema":{"enum":["4h","24h"],"type":"string","default":"24h","title":"Horizon"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuantCoinDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/quant/history":{"get":{"tags":["Quant"],"summary":"Get Quant History","description":"Past probability rows — the verification surface (Pro Plus).\n\nEvery row records what the model said at that moment, with `backfilled`\ndistinguishing live point-in-time inferences (15-minute cadence) from\nretro-computed history (1-hour cadence, written by the backfill script)\nand `model_version` pinning which artifact produced it. Use this to score\nour calls against what actually happened — black-box probabilities are\nworthless; auditable ones aren't.","operationId":"get_quant_history_api_v1_quant_history_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"scope","in":"query","required":false,"schema":{"type":"string","description":"'market' or a coin symbol, e.g. BTC","default":"market","title":"Scope"},"description":"'market' or a coin symbol, e.g. BTC"},{"name":"start","in":"query","required":true,"schema":{"type":"string","description":"ISO 8601 or unix ms","title":"Start"},"description":"ISO 8601 or unix ms"},{"name":"end","in":"query","required":false,"schema":{"title":"End","type":"string","nullable":true}},{"name":"horizon","in":"query","required":false,"schema":{"title":"Horizon","enum":["4h","24h"],"type":"string","nullable":true}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":2000,"minimum":1,"default":500,"title":"Limit"}},{"name":"format","in":"query","required":false,"schema":{"enum":["json","csv"],"type":"string","default":"json","title":"Format"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuantHistoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/quant/regimes/history":{"get":{"tags":["Quant"],"summary":"Get Quant Regime History","description":"Bulk download: the full market 6-regime history Parquet (Pro Plus).\n\nOne hourly row per bar, **2020 → yesterday**, market scope, with the full\ndistribution over all 6 regimes at three horizons — **now, 4h, 24h**\n(`p_now_*`, `p_4h_*`, `p_24h_*`, keyed by regime id; see `regime_map`). The\ndeep history is the same model that serves live, run over the Binance public\narchive it trained on — no hindsight relabeling — stitched to the live tail\n(the `source` column marks the seam). Returns a pre-signed URL so you pull\nmulti-year history in one request instead of paginating `/quant/history`.\n\nRebuilt daily. `p_4h`/`p_24h` are exact `αᵀAⁿ` transition-matrix\nprojections of the current posterior, not realized outcomes.","operationId":"get_quant_regime_history_api_v1_quant_regimes_history_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuantRegimeHistoryResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/quant/timeline":{"get":{"tags":["Quant"],"summary":"Get Quant Timeline","description":"Historic daily regime timeline, 2019 → now (Pro Plus).\n\nGenerated at training time by running the final model over its full\ntraining history — the COVID crash, 2021 bull, LUNA/FTX bear and 2024 ETF\nbull are all in here, labeled by the same model that serves live, with no\nhindsight relabeling. Regenerated on every retrain.","operationId":"get_quant_timeline_api_v1_quant_timeline_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"start","in":"query","required":false,"schema":{"description":"ISO date filter, e.g. 2022-01-01","title":"Start","type":"string","nullable":true},"description":"ISO date filter, e.g. 2022-01-01"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuantTimelineResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/quant/model":{"get":{"tags":["Quant"],"summary":"Get Quant Model Card","description":"Model card + runtime status — full transparency (any valid key).\n\nWhat the model is (family, states, features), when it was trained, how it\nvalidated (walk-forward fold metrics from the artifact), its sha256, and\nlive runtime health (universe coverage, drift monitor vs training\nbaseline). `loaded: false` means data endpoints are 503 (no model deployed\nyet, or stub plumbing only).","operationId":"get_quant_model_card_api_v1_quant_model_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuantModelCardResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/quant/regimes":{"get":{"tags":["Quant"],"summary":"Get Quant Regimes","description":"The 6-regime taxonomy reference (any valid key).\n\nStable vocabulary for all quant endpoints: id, label, display name,\ndescription and the suggested algo-basket stance per regime. Raw HMM\nstates map many-to-one onto these labels; the labels are the API contract.","operationId":"get_quant_regimes_api_v1_quant_regimes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuantRegimesResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/quant/refresh":{"post":{"tags":["Quant"],"summary":"Refresh Quant","description":"Force an immediate inference cycle (Pro Plus).","operationId":"refresh_quant_api_v1_quant_refresh_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuantRefreshResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/regimes":{"get":{"tags":["Regimes"],"summary":"Get Regimes","description":"The 10-state long-horizon regime model + the current detected regime.\n\n``regimes`` is the stable taxonomy (id, machine ``regime`` id, display name,\ndescription, typical duration and directional bias). ``current`` is the live\nclassification with a ``rationale``, the inspectable ``signals`` that drove\nit, and — where applicable — an internal ``stage`` (Distribution) or\n``euphoria_score`` (Speculative Euphoria).\n\n**Committed vs live.** ``current.regime``/``id``/``name``/``rationale`` are the\nCOMMITTED regime: an anti-churn dwell gate holds it until a new candidate is\nthe raw classification for ``pending.needed`` consecutive refreshes. But\n``signals`` are always read fresh, so mid-turn they can stop supporting the\ncommitted regime — that is expected, not stale data. ``current.raw`` gives the\nlive ungated classification and ``raw.matches_committed`` tells you the two\ndisagree; ``current.pending`` shows how far the successor has confirmed.\n\n**Stability.** ``pending`` is null whenever the live read already agrees with\nthe committed regime — correct, but it means a consumer watching for a turn\nsees a field that blinks in and out. ``current.stability`` is always present\nand always numeric: ``raw_agreement`` decays as conditions drift,\n``confirmations_against``/``needed`` track a successor, and ``locked_for_s``\nis the HARD number — how long the dwell floor mechanically guarantees the\ncommitted regime survives. ``current.thresholds`` gives the distance from\nevery numeric cutoff in the cascade to flipping, so hysteresis can be built\non published boundaries instead of guesses.\n\n``typical_duration`` describes the real-world cycle phase, NOT a guaranteed\ndwell — but the dwell floor is now SCALED to it: a \"Weeks-Months\" state\n(#2/#4/#6/#8) must be held 48h before anything may replace it, \"Weeks\" 24h,\n\"Days-Weeks\" 12h, and #1 Structural Shock only 2h because it is an emergency\noverride. Read the live value from ``stability.dwell_floor_s``.\n\n``/regimes/history`` returns the committed transition sequence.","operationId":"get_regimes_api_v1_regimes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegimesResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/regimes/history":{"get":{"tags":["Regimes"],"summary":"Get Regime History","description":"Committed long-horizon regime transitions over a window (Pro Plus).\n\n``/regimes`` publishes only what is committed right now, so the sequence that\nproduced it could not be reconstructed from this API at all. Each entry here\nis one committed run: which regime, the exact instant it committed, when the\nnext one replaced it, and how long it held.\n\n**``committed_at`` is exact.** It comes from the ``in_regime_since`` stamped\nat commit time and carried in every archived sample — not from the ~25-min\nsample that first observed the change. And because every committed regime is\nnow protected by a minimum-dwell floor of at least 2h, no transition can hide\nbetween two samples.\n\n**Coverage starts 2026-08-07 and cannot be backfilled.** The published regime\nis a stateful commit through the anti-churn dwell gate, not a pure function\nof the archived signals — replaying older inputs would produce a sequence\nthat was never actually served. ``coverage_start`` reports the true start.\n\nNot to be confused with ``/quant/regimes/history``, which is the short-horizon\n6-state HMM's hourly probability Parquet. This is the 10-state cycle model.","operationId":"get_regime_history_api_v1_regimes_history_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"from","in":"query","required":false,"schema":{"type":"string","description":"Window start, inclusive (ISO-8601 or unix ms). Defaults to 30 days ago.","title":"From"},"description":"Window start, inclusive (ISO-8601 or unix ms). Defaults to 30 days ago."},{"name":"to","in":"query","required":false,"schema":{"type":"string","description":"Window end, EXCLUSIVE (ISO-8601 or unix ms). Defaults to now.","title":"To"},"description":"Window end, EXCLUSIVE (ISO-8601 or unix ms). Defaults to now."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25000,"minimum":1,"description":"Max archive samples to scan (~57/day), not transitions returned.","default":5000,"title":"Limit"},"description":"Max archive samples to scan (~57/day), not transitions returned."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegimeHistoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/regimes/current":{"get":{"tags":["Regimes"],"summary":"Get Current","description":"Just the current long-horizon regime — the trimmed companion to ``/regimes``.\n\nSame classification as the ``current`` block above, without the taxonomy.","operationId":"get_current_api_v1_regimes_current_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CurrentRegime"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/trading-strategy-baskets":{"get":{"tags":["Strategy Baskets"],"summary":"Get Trading Strategy Baskets","description":"The 50-strategy meta-basket catalogue across 6 groups.\n\nEach basket carries a stable ``slug`` (the API contract, matching the web\npage anchor), a display ``name`` and a one-line ``description``. This is the\ntop-level taxonomy; finer setups live as sub-strategies beneath each basket.","operationId":"get_trading_strategy_baskets_api_v1_trading_strategy_baskets_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StrategyBasketsResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/volatility/regime":{"get":{"tags":["Volatility Regime"],"summary":"Get Volatility Regime","description":"Per-asset realized-volatility regime across the SIGNUM_RGG universe.\n\nEach asset is classified into one of ``vol_shock``, ``expanding``,\n``compressed``, ``mean_reverting``, or ``normal`` from realized vol (close-to-\nclose, Parkinson, Garman-Klass) on daily klines. Each entry carries 7d/30d\nvol, the 90d vol percentile, term structure (7d/30d), and a vol-target\nposition-size multiplier (``target_vol / current_vol``, capped).\n\n**Backfillable** — replayable from daily klines (unlike the intraday-only\nliquidity regime). The ``vol.rv_1h`` field is live-only and lands null on\nhistorically backfilled days.\n\nExample screens: `?regime=compressed&sort=days_compressed` (longest dry\ntinder), `?regime=vol_shock` (acute spikes), `?sort=vol_target_multiplier&\norder=desc` (assets a vol-targeter would size up).\n\n**Tiers:** Free is scoped to BTC only; Pro / Pro Plus return the full universe.","operationId":"get_volatility_regime_api_v1_volatility_regime_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"source","in":"query","required":false,"schema":{"title":"Source","enum":["binance_spot","hyperliquid_perp"],"type":"string","nullable":true}},{"name":"regime","in":"query","required":false,"schema":{"description":"Filter by volatility regime","title":"Regime","enum":["vol_shock","expanding","compressed","mean_reverting","normal"],"type":"string","nullable":true},"description":"Filter by volatility regime"},{"name":"sort","in":"query","required":false,"schema":{"enum":["symbol","rv_gk_30","rv_gk_7","vol_pctile_30","term_structure_ratio","vol_target_multiplier","days_compressed"],"type":"string","default":"vol_pctile_30","title":"Sort"}},{"name":"order","in":"query","required":false,"schema":{"enum":["asc","desc"],"type":"string","default":"desc","title":"Order"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":250,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VolatilityRegimeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/volatility/regime/score":{"get":{"tags":["Volatility Regime"],"summary":"Get Volatility Regime Score","description":"Market-wide volatility-stress composite (0-100) + sentiment + regime mix.\n\nHigher score = more market-wide volatility stress (size down). Sentiment\nbands: stressed (≥70), elevated (55-69), normal (45-54), calm (30-44),\ndormant (<30) — where ``dormant`` is the dangerously-quiet, compressed-vol\nstate. Trimmed companion to ``/volatility/regime`` — no per-coin list.","operationId":"get_volatility_regime_score_api_v1_volatility_regime_score_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VolatilityRegimeScoreResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/volatility/index":{"get":{"tags":["Volatility Regime"],"summary":"Get Volatility Index","description":"Crypto Volatility Index (CVI) — market-wide realized vol + BTC/ETH implied.\n\nThe headline ``cvi_realized_30`` is the **volume-weighted 30d annualized\nrealized vol (%)** across the universe (each coin weighted by its mean daily\nnotional). ``composite_score`` is the 0-100 vol-stress breadth gauge.\n``majors`` carries BTC & ETH realized vs Deribit implied vol (DVOL) and the\n**variance risk premium** (``vrp`` = implied − realized).\n\n**Tiers:** the market-wide CVI headline is available on every plan; the\n``majors`` block is BTC-only on Free and adds ETH on Pro / Pro Plus.","operationId":"get_volatility_index_api_v1_volatility_index_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VolatilityIndexResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/volatility/implied":{"get":{"tags":["Volatility Regime"],"summary":"Get Implied Vol","description":"BTC/ETH implied vol (Deribit DVOL) + variance risk premium.\n\nCurrent DVOL, 24h change, realized comparison and VRP: **BTC-only on Free**,\nBTC + ETH on Pro / Pro Plus. The full DVOL history series + the ATM implied-vol\nterm structure are **Pro Plus** only (``detail: true``).","operationId":"get_implied_vol_api_v1_volatility_implied_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImpliedVolResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/volatility/index/history":{"get":{"tags":["Volatility Regime"],"summary":"Get Volatility Index History","description":"Daily CVI + vol-stress history from the daily archive (**Pro Plus**).\n\nReconstructed from each day's persisted volatility-regime summary — so the\nseries starts when CVI was first archived (realized-vol history before that\nisn't retroactively weighted). One point per archived UTC day.","operationId":"get_volatility_index_history_api_v1_volatility_index_history_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":90,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VolatilityIndexHistoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/volatility/regime/{symbol}":{"get":{"tags":["Volatility Regime"],"summary":"Get Volatility Regime Symbol","description":"Per-asset Volatility regime detail with 60d daily history.\n\nCoin scope follows the plan: **Free = BTC only**, Pro / Pro Plus = any coin.\nThe 60d ``history`` series is **Pro Plus** only (empty on Free / Pro).\n\nHyperliquid thousand-unit tickers (``kBONK``, ``kPEPE``, ``kSHIB``) are\naccepted as aliases of the plain symbol.","operationId":"get_volatility_regime_symbol_api_v1_volatility_regime__symbol__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","title":"Symbol"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VolatilityRegimeDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/volatility/regime/refresh":{"post":{"tags":["Volatility Regime"],"summary":"Refresh Volatility Regime","description":"Force recompute the Volatility regime cache (Pro+).","operationId":"refresh_volatility_regime_api_v1_volatility_regime_refresh_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VolatilityRegimeRefreshResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/volume/scanner":{"get":{"tags":["Volume Scanner"],"summary":"Get Volume Scanner","description":"Every Hyperliquid perp with its 24h volume, 30-day average, and multiplier.\n\n``multiplier`` = live rolling-24h notional ÷ mean daily notional over the last\n30 **settled** days (today's partial day is excluded from the baseline). A\nreading of 3.0 means the coin is trading at three times its normal daily\nvolume. ``multiplier_median`` is the same ratio against the 30-day median,\nwhich is far less distorted by a single prior blow-off day — compare the two\nwhen a coin's recent history is lumpy.\n\nPerps listed less than 7 days ago have no honest baseline and report\n``multiplier: null`` with ``band: \"unknown\"`` rather than a spurious number.\n\nExample screens: `?min_multiplier=3` (today's unusual activity),\n`?band=dormant` (coins that have gone quiet), `?sort=volume_24h` (plain\nvolume leaderboard).\n\n**Tiers:** Free returns the top 20 perps by 24h volume; Pro / Pro Plus return\nthe full universe.","operationId":"get_volume_scanner_api_v1_volume_scanner_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"band","in":"query","required":false,"schema":{"description":"Filter by activity band","title":"Band","enum":["dormant","quiet","normal","elevated","surging","extreme","unknown"],"type":"string","nullable":true},"description":"Filter by activity band"},{"name":"min_multiplier","in":"query","required":false,"schema":{"description":"Only perps trading at or above this multiple of their 30d average","title":"Min Multiplier","type":"number","minimum":0,"nullable":true},"description":"Only perps trading at or above this multiple of their 30d average"},{"name":"sort","in":"query","required":false,"schema":{"enum":["multiplier","volume_24h","symbol","change_24h"],"type":"string","default":"multiplier","title":"Sort"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":250,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VolumeScannerResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/volume/scanner/{symbol}":{"get":{"tags":["Volume Scanner"],"summary":"Get Volume Scanner Symbol","description":"One perp's volume multiplier plus its 30-day daily notional series (**Pro**).\n\nHyperliquid thousand-unit tickers (``kBONK``, ``kPEPE``, ``kSHIB``) are\naccepted as aliases of the plain symbol.","operationId":"get_volume_scanner_symbol_api_v1_volume_scanner__symbol__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","title":"Symbol"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VolumeScannerDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/meme/regime":{"get":{"tags":["Meme Regime"],"summary":"Get Meme Regime","description":"Per-asset Meme / Speculative regime across the curated meme universe.\n\nEach asset is classified into one of ``euphoric``, ``distribution``,\n``ignition``, ``bleeding``, or ``dormant`` from trailing returns, a\nvolume-spike ratio, 30d realized-vol percentile, SMA-20 extension, and live\nHyperliquid funding. Aimed at systematic perps trading: the label implies a\nholding duration, leverage level, and funding-cost tolerance.\n\n**Partly backfillable** — price/volume/vol features replay from daily klines;\nthe ``meme.funding_rate`` / ``meme.oi_usd`` fields are live-only and land\nnull on historically backfilled days (so ``distribution`` only appears live).\n\nExample screens: `?regime=ignition&sort=vol_spike` (early movers),\n`?regime=euphoric&sort=ret_7d` (hottest blow-offs), `?regime=bleeding`\n(unwinds to avoid).","operationId":"get_meme_regime_api_v1_meme_regime_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"source","in":"query","required":false,"schema":{"title":"Source","enum":["binance_spot","hyperliquid_perp"],"type":"string","nullable":true}},{"name":"regime","in":"query","required":false,"schema":{"description":"Filter by meme regime","title":"Regime","enum":["euphoric","distribution","ignition","bleeding","dormant"],"type":"string","nullable":true},"description":"Filter by meme regime"},{"name":"sort","in":"query","required":false,"schema":{"enum":["symbol","ret_7d","ret_30d","vol_spike","vol_pctile_30","sma20_extension_pct","funding_rate","oi_usd"],"type":"string","default":"ret_7d","title":"Sort"}},{"name":"order","in":"query","required":false,"schema":{"enum":["asc","desc"],"type":"string","default":"desc","title":"Order"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":250,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemeRegimeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/meme/regime/score":{"get":{"tags":["Meme Regime"],"summary":"Get Meme Regime Score","description":"Market-wide meme-hype composite (0-100) + sentiment + regime mix.\n\nHigher score = frothier / more speculative heat. Sentiment bands: euphoric\n(≥70), heating (55-69), neutral (45-54), cooling (30-44), dormant (<30).\nCarries the cross-meme co-movement correlation and a ``meme_season`` flag\n(broad heating + correlated pack move). Trimmed companion to ``/meme/regime``\n— no per-coin list.","operationId":"get_meme_regime_score_api_v1_meme_regime_score_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemeRegimeScoreResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/meme/regime/{symbol}":{"get":{"tags":["Meme Regime"],"summary":"Get Meme Regime Symbol","description":"Per-asset Meme regime detail with 60d daily history (Pro+).\n\n`history` contains compact daily bars (close, 30d Garman-Klass vol) suitable\nfor sparkline rendering.\n\nHyperliquid thousand-unit tickers (``kBONK``, ``kPEPE``, ``kSHIB``) are\naccepted as aliases of the plain symbol.","operationId":"get_meme_regime_symbol_api_v1_meme_regime__symbol__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","title":"Symbol"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemeRegimeDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/meme/regime/refresh":{"post":{"tags":["Meme Regime"],"summary":"Refresh Meme Regime","description":"Force recompute the Meme regime cache (Pro+).","operationId":"refresh_meme_regime_api_v1_meme_regime_refresh_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemeRegimeRefreshResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/event/regime":{"get":{"tags":["Event / Catalyst Regime"],"summary":"Get Event Regime","description":"Forward catalyst calendar — dated token unlocks, macro prints, and depegs.\n\nThe main Event/Catalyst payload: every catalyst in the next ``window_days``\n(default 7) with its directional bias and magnitude, plus the market-wide\nEvent Risk score. Unlocks bias short (supply overhang); macro prints are\n``risk_flag`` (the surprise is unknown ahead of time); major depegs bias\nshort. Use `/event/calendar` for richer filtering, `/event/regime/score` for\nthe composite alone.\n\n**Partly backfillable** — unlocks / macro / depeg replay from schedule + price\nhistory; the ``sector_rotation`` sidecar on `/event/regime/score` is\nlive-only and lands null on backfilled days.","operationId":"get_event_regime_api_v1_event_regime_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"window_days","in":"query","required":false,"schema":{"type":"integer","maximum":30,"minimum":1,"description":"Forward horizon for the calendar","default":7,"title":"Window Days"},"description":"Forward horizon for the calendar"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventRegimeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/event/regime/score":{"get":{"tags":["Event / Catalyst Regime"],"summary":"Get Event Regime Score","description":"Market-wide Event Risk composite (0-100) + sub-scores + live-only sidecars.\n\nBaseline 0 (event risk is absence-by-default). Bands: dormant (<10), quiet\n(10-29), elevated (30-54), heavy (55-79), critical (≥80). Composite =\n0.40·unlock + 0.25·macro + 0.35·depeg, re-normalized over available feeds\n(``partial``/``inputs_available`` flag which were live). The\n``sector_rotation`` (CoinGecko categories) sidecar is live-only and\nexcluded from the composite.","operationId":"get_event_regime_score_api_v1_event_regime_score_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventRegimeScoreResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/event/calendar":{"get":{"tags":["Event / Catalyst Regime"],"summary":"Get Event Calendar","description":"Filterable / queryable forward catalyst calendar (up to 30d out).\n\nThe query surface for the calendar: narrow by catalyst ``type``, affected\n``symbol``, ``bias``, ``min_magnitude``, and ``window_days``.","operationId":"get_event_calendar_api_v1_event_calendar_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"type","in":"query","required":false,"schema":{"title":"Type","enum":["unlock","macro_print","depeg","mint"],"type":"string","nullable":true}},{"name":"window_days","in":"query","required":false,"schema":{"type":"integer","maximum":30,"minimum":1,"default":30,"title":"Window Days"}},{"name":"symbol","in":"query","required":false,"schema":{"description":"Filter to catalysts affecting this ticker","title":"Symbol","type":"string","nullable":true},"description":"Filter to catalysts affecting this ticker"},{"name":"bias","in":"query","required":false,"schema":{"title":"Bias","enum":["long","short","neutral","risk_flag"],"type":"string","nullable":true}},{"name":"min_magnitude","in":"query","required":false,"schema":{"type":"number","maximum":1.0,"minimum":0.0,"default":0.0,"title":"Min Magnitude"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventRegimeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/event/regime/refresh":{"post":{"tags":["Event / Catalyst Regime"],"summary":"Refresh Event Regime","description":"Force recompute the Event / Catalyst regime cache (Pro+).","operationId":"refresh_event_regime_api_v1_event_regime_refresh_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventRegimeRefreshResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/event/regime/{symbol}":{"get":{"tags":["Event / Catalyst Regime"],"summary":"Get Event Regime Symbol","description":"Per-symbol catalyst overlay — pending catalysts (≤7d) + net bias (Pro+).","operationId":"get_event_regime_symbol_api_v1_event_regime__symbol__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","title":"Symbol"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventSymbolOverlayResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/security/regime":{"get":{"tags":["Security / Black Swan Regime"],"summary":"Get Security Regime","description":"Recent security events — confirmed hacks/exploits + live stablecoin depegs.\n\nThe main Security/Black Swan payload: every security event in the last\n``window_days`` (default 10) with its affected symbols, severity, and acute\nshort bias, plus the market-wide Security Stress score. Use\n`/security/regime/score` for the composite alone.\n\n**Partly backfillable** — the hack / flow-stress / depeg subscores replay from\nthe dated DefiLlama hacks registry, archived net flows, and price history; the\n``security_headlines`` RSS sidecar on `/security/regime/score` is live-only and\nlands null on backfilled days.","operationId":"get_security_regime_api_v1_security_regime_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"window_days","in":"query","required":false,"schema":{"type":"integer","maximum":10,"minimum":1,"description":"Lookback for recent security events","default":10,"title":"Window Days"},"description":"Lookback for recent security events"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecurityRegimeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/security/regime/score":{"get":{"tags":["Security / Black Swan Regime"],"summary":"Get Security Regime Score","description":"Market-wide Security Stress composite (0-100) + sub-scores + live sidecar.\n\nBaseline 0 (security stress is absence-by-default). Bands: dormant (<10),\nquiet (10-29), elevated (30-54), heavy (55-79), critical (≥80). Composite =\n0.45·hack + 0.30·flow + 0.25·depeg, re-normalized over available feeds\n(``partial``/``inputs_available`` flag which were live). The\n``security_headlines`` sidecar (classified rekt/SlowMist RSS) is live-only and\nexcluded from the composite.","operationId":"get_security_regime_score_api_v1_security_regime_score_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecurityRegimeScoreResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/security/events":{"get":{"tags":["Security / Black Swan Regime"],"summary":"Get Security Events","description":"Filterable recent security-events list (up to 10d back).\n\nNarrow by event ``type``, affected ``symbol``, and ``min_severity``.","operationId":"get_security_events_api_v1_security_events_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"type","in":"query","required":false,"schema":{"title":"Type","enum":["hack","depeg"],"type":"string","nullable":true}},{"name":"window_days","in":"query","required":false,"schema":{"type":"integer","maximum":10,"minimum":1,"default":10,"title":"Window Days"}},{"name":"symbol","in":"query","required":false,"schema":{"description":"Filter to events affecting this ticker","title":"Symbol","type":"string","nullable":true},"description":"Filter to events affecting this ticker"},{"name":"min_severity","in":"query","required":false,"schema":{"type":"number","maximum":1.0,"minimum":0.0,"default":0.0,"title":"Min Severity"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecurityRegimeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/security/regime/refresh":{"post":{"tags":["Security / Black Swan Regime"],"summary":"Refresh Security Regime","description":"Force recompute the Security / Black Swan regime cache (Pro+).","operationId":"refresh_security_regime_api_v1_security_regime_refresh_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecurityRegimeRefreshResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/security/regime/{symbol}":{"get":{"tags":["Security / Black Swan Regime"],"summary":"Get Security Regime Symbol","description":"Per-symbol security overlay — implicating events + acute bias (Pro+).","operationId":"get_security_regime_symbol_api_v1_security_regime__symbol__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","title":"Symbol"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecuritySymbolOverlayResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/policy/regime":{"get":{"tags":["Geopolitical / Policy Shock Regime"],"summary":"Get Policy Regime","description":"Policy Risk score + signed tilt + upcoming rate catalysts.\n\nThe main Geopolitical / Policy Shock payload: the market-wide Policy Risk\ncomposite, the signed ``policy_tilt`` (pro-crypto vs restrictive), and the\nscheduled rate decisions within ``window_days``. Use `/policy/regime/score`\nfor the full sub-score breakdown and `/policy/headlines` for the live\nUS-regulatory headline feed.\n\n**Partly backfillable** — the gdelt / cross-asset / rate subscores replay from\nGDELT's dated series, the archived macro block, and the rate schedule; the\n``policy_headlines`` sidecar is live-only (null on backfill).","operationId":"get_policy_regime_api_v1_policy_regime_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"window_days","in":"query","required":false,"schema":{"type":"integer","maximum":45,"minimum":1,"description":"Forward horizon for rate catalysts","default":45,"title":"Window Days"},"description":"Forward horizon for rate catalysts"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyRegimeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/policy/regime/score":{"get":{"tags":["Geopolitical / Policy Shock Regime"],"summary":"Get Policy Regime Score","description":"Market-wide Policy Risk composite (0-100) + sub-scores + tilt + sidecars.\n\nBaseline 0 (policy shock is absence-by-default). Bands: dormant (<10), quiet\n(10-29), elevated (30-54), heavy (55-79), critical (≥80). Composite =\n0.40·gdelt + 0.35·cross_asset + 0.25·rate, re-normalized over available feeds.\n``policy_tilt`` (signed) comes from GDELT coverage tone. The\n``policy_headlines`` (Federal Register / SEC / CFTC) sidecar is live-only\nand excluded from the composite.","operationId":"get_policy_regime_score_api_v1_policy_regime_score_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyRegimeScoreResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/policy/headlines":{"get":{"tags":["Geopolitical / Policy Shock Regime"],"summary":"Get Policy Headlines","description":"Live classified US-regulatory headlines (Federal Register / SEC / CFTC).\n\nThe breaking-news sidecar: recent policy headlines classified pro-crypto vs\nrestrictive, with an aggregate ``regulatory_pressure`` magnitude and a signed\n``headline_tilt``. Live-only — not part of any backfillable composite.","operationId":"get_policy_headlines_api_v1_policy_headlines_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyHeadlinesResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/policy/regime/refresh":{"post":{"tags":["Geopolitical / Policy Shock Regime"],"summary":"Refresh Policy Regime","description":"Force recompute the Geopolitical / Policy Shock regime cache (Pro+).","operationId":"refresh_policy_regime_api_v1_policy_regime_refresh_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyRegimeRefreshResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/sentiment/fear-greed":{"get":{"tags":["Sentiment & Macro"],"summary":"Get Fear Greed","description":"Fear & Greed index (multi-source averaged).","operationId":"get_fear_greed_api_v1_sentiment_fear_greed_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Response format: 'markdown' for LLM-friendly plain text","title":"Format"},"description":"Response format: 'markdown' for LLM-friendly plain text"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FearGreedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sentiment/macro":{"get":{"tags":["Sentiment & Macro"],"summary":"Get Macro","description":"Macro indicators: EUR/USD, gold, treasury yields.","operationId":"get_macro_api_v1_sentiment_macro_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MacroResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/sentiment/stablecoins":{"get":{"tags":["Sentiment & Macro"],"summary":"Get Stablecoins","description":"Stablecoin market cap + 14d/90d flows.","operationId":"get_stablecoins_api_v1_sentiment_stablecoins_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StablecoinResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/sentiment/stablecoins/remote-history":{"get":{"tags":["Sentiment & Macro"],"summary":"Get Remote Stablecoin History","description":"Daily stablecoin mcap + inflows, derived from our own DefiLlama history.","operationId":"get_remote_stablecoin_history_api_v1_sentiment_stablecoins_remote_history_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":90,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemoteStablecoinHistoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sentiment/stablecoins/history":{"get":{"tags":["Sentiment & Macro"],"summary":"Get Stablecoin History","description":"Raw stablecoin market cap history timeseries.","operationId":"get_stablecoin_history_api_v1_sentiment_stablecoins_history_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StablecoinHistoryResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/supply/float":{"get":{"tags":["Token Supply"],"summary":"Get Supply Float","description":"Circulating float and dilution overhang for every tracked coin.\n\nRanked by **ascending float** — the tightest floats first, because that is\nthe end of the distribution where supply is the story. A coin trading at a\n23% float with three times its market cap still locked is a different\ninstrument from one that is fully distributed.\n\n- `float_pct` (0..1) — circulating ÷ `supply_basis`.\n- `supply_basis` — **which denominator was used**: `max_supply` when the token\n  is genuinely capped, else `total_supply`. `max_supply` is absent for over\n  half the universe, and \"share of max\" and \"share of total\" are different\n  claims, so this is stated rather than assumed.\n- `locked_supply` / `locked_usd` — what is not yet circulating.\n- `dilution_overhang` — locked value as a multiple of current market cap.\n- `next_unlock` — the soonest dated cliff, with same-day tranches summed and\n  priced (`usd`, `pct_of_float`, `pct_of_market_cap`).\n- `unlock_coverage` — `tracked` or `not_tracked`. **A null `next_unlock` with\n  `not_tracked` does NOT mean the token has no unlock scheduled**; it means\n  no schedule is published for it in our source. Do not read it as \"safe\".\n\nDefaults to a **$500M market-cap floor**: below it a \"tight float\" is usually\na nominal `total_supply` rather than a real vesting schedule, and those\nartifacts otherwise dominate the top of an ascending-float ranking. Pass\n`min_market_cap=0` for the unfiltered set — the rows are still computed, they\nare just not what the default board is for.\n\nFree tier returns the top 25 rows; Pro and above get the full board and the\nfilters.","operationId":"get_supply_float_api_v1_supply_float_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"min_market_cap","in":"query","required":false,"schema":{"type":"number","minimum":0,"description":"Market-cap floor. Defaults to $500M because below it a tight float is usually a nominal total_supply rather than a vesting schedule. Pass 0 for the full set.","default":500000000.0,"title":"Min Market Cap"},"description":"Market-cap floor. Defaults to $500M because below it a tight float is usually a nominal total_supply rather than a vesting schedule. Pass 0 for the full set."},{"name":"min_locked_usd","in":"query","required":false,"schema":{"type":"number","minimum":0,"description":"Only rows with at least this much locked value","default":0.0,"title":"Min Locked Usd"},"description":"Only rows with at least this much locked value"},{"name":"max_float_pct","in":"query","required":false,"schema":{"type":"number","maximum":1,"exclusiveMinimum":0,"description":"Only rows at or below this float (0-1)","default":1.0,"title":"Max Float Pct"},"description":"Only rows at or below this float (0-1)"},{"name":"symbol","in":"query","required":false,"schema":{"description":"Filter to one ticker","title":"Symbol","type":"string","nullable":true},"description":"Filter to one ticker"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":2000,"minimum":1,"default":250,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplyFloatResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/supply/unlocks":{"get":{"tags":["Token Supply"],"summary":"Get Supply Unlocks","description":"The forward token-unlock calendar — dated vesting cliffs.\n\nSourced from DefiLlama's free emissions data and sized against the coin's own\nfloat, so a cliff reads as \"12% of circulating supply on 1 Sept\" rather than\na raw token count.\n\n**This is a cliff calendar, not an emissions feed.** Continuous emission is\ndeliberately excluded: mining inflation, linear vesting, and runs of\nidentical daily releases are a drip, not a step, and publishing them as\ncatalysts buries the real ones. Coverage is bounded by the protocols\nDefiLlama tracks — absence here is not evidence that a token has no unlock.\n\nFree tier is limited to the next 7 days; Pro and above get the full horizon.","operationId":"get_supply_unlocks_api_v1_supply_unlocks_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"window_days","in":"query","required":false,"schema":{"type":"integer","maximum":35,"minimum":1,"description":"Forward horizon","default":30,"title":"Window Days"},"description":"Forward horizon"},{"name":"symbol","in":"query","required":false,"schema":{"description":"Filter to one ticker","title":"Symbol","type":"string","nullable":true},"description":"Filter to one ticker"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplyUnlocksResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/market-data/klines":{"get":{"tags":["Market Data"],"summary":"Get Klines","description":"OHLCV klines from Binance Spot.","operationId":"get_klines_api_v1_market_data_klines_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"symbol","in":"query","required":false,"schema":{"type":"string","default":"BTCUSDT","title":"Symbol"}},{"name":"interval","in":"query","required":false,"schema":{"type":"string","default":"1d","title":"Interval"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KlineResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/market-data/ticker/24hr":{"get":{"tags":["Market Data"],"summary":"Get Ticker 24Hr","description":"24hr ticker stats from Binance Spot.","operationId":"get_ticker_24hr_api_v1_market_data_ticker_24hr_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"symbol","in":"query","required":false,"schema":{"type":"string","default":"BTCUSDT","title":"Symbol"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TickerResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/market-data/ticker/price":{"get":{"tags":["Market Data"],"summary":"Get Ticker Price","description":"Current price from Binance Spot.","operationId":"get_ticker_price_api_v1_market_data_ticker_price_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"symbol","in":"query","required":false,"schema":{"type":"string","default":"BTCUSDT","title":"Symbol"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PriceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/market-data/btc-price-history":{"get":{"tags":["Market Data"],"summary":"Btc Price History","description":"BTC price history with 200D MA.","operationId":"btc_price_history_api_v1_market_data_btc_price_history_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":730,"minimum":1,"default":365,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BtcPriceHistoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/market-data/volume-history":{"get":{"tags":["Market Data"],"summary":"Volume History","description":"Daily volume + buy ratio, derived from our own kline + taker archives.","operationId":"volume_history_api_v1_market_data_volume_history_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":1,"default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VolumeHistoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/market-data/short-term-price":{"get":{"tags":["Market Data"],"summary":"Short Term Price","description":"Short-term BTC price momentum metrics (on-demand computation).","operationId":"short_term_price_api_v1_market_data_short_term_price_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShortTermPriceResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/market-data/exchange-info":{"get":{"tags":["Market Data"],"summary":"Get Exchange Info","description":"Exchange pair info from Binance Spot.","operationId":"get_exchange_info_api_v1_market_data_exchange_info_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"symbol","in":"query","required":false,"schema":{"type":"string","default":"BTCUSDT","title":"Symbol"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExchangeInfoResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/market-intelligence/btc/cycle-indicators":{"get":{"tags":["Market Intelligence"],"summary":"Btc Cycle Indicators","description":"All 8 BTC cycle indicators.","operationId":"btc_cycle_indicators_api_v1_market_intelligence_btc_cycle_indicators_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of daily entries to return (0 = all, default 30)","default":30,"title":"Days"},"description":"Number of daily entries to return (0 = all, default 30)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CycleIndicatorsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/market-intelligence/btc/cycle-indicators/{indicator}":{"get":{"tags":["Market Intelligence"],"summary":"Btc Cycle Indicator By Name","description":"Single BTC cycle indicator by name.","operationId":"btc_cycle_indicator_by_name_api_v1_market_intelligence_btc_cycle_indicators__indicator__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"indicator","in":"path","required":true,"schema":{"type":"string","description":"Indicator name","title":"Indicator"},"description":"Indicator name"},{"name":"days","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of daily entries to return (0 = all, default 30)","default":30,"title":"Days"},"description":"Number of daily entries to return (0 = all, default 30)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CycleIndicatorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/market-intelligence/etf/btc/aum":{"get":{"tags":["Market Intelligence"],"summary":"Etf Btc Aum","description":"BTC spot-ETF assets under management (reconstructed estimate).\n\nReturns one row: ``aum_usd_from_flows``, ``btc_held_from_flows``,\n``btc_price_usd``, ``cumulative_net_flow_usd``, ``price_appreciation_usd``,\n``as_of``, ``since``, ``flow_days``, plus ``method``, ``source``,\n``excludes`` and a ``caveats`` list.\n\nThe ``_from_flows`` suffix is deliberate — GBTC converted holding an\nexisting stake that never appears here as an inflow, so these cover BTC\naccumulated through flows since launch and understate the complex by\nroughly that seed. See ``excludes`` in the payload.\n\nThis 503'd on EVERY call from the 2026-07-24 CoinGlass retirement until\n2026-08-22: CoinGlass was the only AUM feed and no free one exists. It is\nderivable though — AUM is coins held times price, and the daily flow history\nplus that day's close gives the coins. See\nFreeMarketCollector._refresh_etf_aum for the derivation and its biases.\n\n``cumulative_net_flow_usd`` is returned alongside deliberately: it is a\nDIFFERENT quantity from AUM (the gap is price appreciation), and conflating\nthe two is the usual way this number gets misreported.","operationId":"etf_btc_aum_api_v1_market_intelligence_etf_btc_aum_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketIntelligenceDataResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/market-intelligence/etf/{asset}/flows":{"get":{"tags":["Market Intelligence"],"summary":"Etf Flows","description":"BTC, ETH or SOL spot-ETF latest-day net flow.\n\n``sol`` was dead until 2026-08-22 — it 503'd on every call from the\n2026-07-24 CoinGlass retirement because the free replacement only wired\n/btc/ and /eth/. Farside publishes /sol/ in the same shape; it is live now.\n\n``xrp`` is NOT supported and now says so with a 400 instead of 503ing\nforever. No free source publishes XRP spot-ETF flows (Farside has btc, eth,\nsol and hyp pages, and no xrp page). A 503 tells an integration to retry;\nthis is not a transient condition, so a 400 that names the supported assets\nis the honest answer. Wire it up here the moment a source appears.","operationId":"etf_flows_api_v1_market_intelligence_etf__asset__flows_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"asset","in":"path","required":true,"schema":{"type":"string","description":"Asset: btc, eth, or sol","title":"Asset"},"description":"Asset: btc, eth, or sol"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ETFFlowsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/market-intelligence/liquidations":{"get":{"tags":["Market Intelligence"],"summary":"Liquidations","description":"Realized-liquidation data (long/short USD over 1h/4h/12h/24h windows).\nDefaults to Hyperliquid perps coins only.\n\n**Coverage:** totals aggregate our configured realized-liquidation venue\nfeeds (OKX + Bybit + Hyperliquid where armed; the HL contribution is exact\nper-fill capture) — see the ``coverage`` field on the response. **Binance,\nthe largest venue, geo-blocks its liquidation stream from our infrastructure\n(no REST fallback), so these figures run below a true all-exchange total.**\n\n**Filter semantics:** ``exchange=`` is a **coin-set filter**, not an\nexchange-data filter. With ``exchange=hyperliquid`` you get the coins\nlisted on Hyperliquid, but the liquidation values inside each entry are the\nvenue-subset totals above. For Hyperliquid's own per-asset trading data use\n``/daily/hyperliquid``.\n\n**AsterDEX coverage:** With ``exchange=asterdex`` the response is the union\nof (a) CoinGlass cross-exchange aggregate rows whose symbol is also listed\non AsterDEX and (b) AsterDEX venue-native rows (``source: \"asterdex\"``)\nfor AsterDEX-only symbols (e.g. LAB, ASTEROID). Native rows depend on\nAsterDEX's force-order feed, which is intermittently disabled upstream;\nwhen unavailable, only the CoinGlass-aggregate rows are returned.\n\nThe free tier is scoped to BTC; full-universe coverage is Pro and Pro Plus.","operationId":"liquidations_api_v1_market_intelligence_liquidations_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"symbol","in":"query","required":false,"schema":{"type":"string","description":"Filter to a single coin (e.g. BTC)","title":"Symbol"},"description":"Filter to a single coin (e.g. BTC)"},{"name":"exchange","in":"query","required":false,"schema":{"type":"string","description":"Filter to coins on exchange: hyperliquid, binance_spot, asterdex, or all","default":"hyperliquid","title":"Exchange"},"description":"Filter to coins on exchange: hyperliquid, binance_spot, asterdex, or all"},{"name":"type","in":"query","required":false,"schema":{"type":"string","description":"Instrument type (perps)","default":"perps","title":"Type"},"description":"Instrument type (perps)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Max coins to return (default 250)","default":250,"title":"Limit"},"description":"Max coins to return (default 250)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketIntelligenceLiquidationsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/market-intelligence/squeeze-alerts":{"get":{"tags":["Market Intelligence"],"summary":"Squeeze Alerts","description":"Coins whose forced-liquidation flow is one-sided and abnormal *right now*.\n\nA cascade tripwire, not a news feed. Scored catalysts on\n``/news/market-moving`` are 15-45 minutes behind a breaking story — RSS is\npolled every 5 minutes and desks publish well after the fact — which is no\nuse to a leveraged position. This reads the liquidation websocket directly:\non 2026-08-19 the BTC tape printed **$322.8M of short liquidations in one\n5-minute bucket at a 334x short/long ratio, 23 minutes before** the first\nrelated headline qualified for the tape.\n\n**`direction` names the side being LIQUIDATED, not the price.** A short\nliquidation is the exchange closing a short at market — forced buying — so\n`short_squeeze` is upward pressure and `long_flush` is downward, and the\nlabel is correct before price confirms it.\n\n**`oi_state` is what separates the two cases that matter.** Open interest\nfalling into a short squeeze means shorts are being closed out (the move is\nconsuming its own fuel); OI rising means fresh positioning is being added\ninto it. It reads `null` until the OI history has two samples, and `unclear`\ninside a ±0.5% noise band rather than being forced into a story.\n\n**Severity is built from ratios**, not dollars: `spike_ratio` (this window\nagainst the coin's own trailing-24h mean) and `asymmetry` (the dominant\nside's share) carry 80% of the weight. Absolute notionals are the figure\nmost distorted by the coverage gap below, so they are weighted least.\n\n**Coverage:** the same venue subset as ``/market-intelligence/liquidations``\n(OKX + Bybit + Hyperliquid where armed; Hyperliquid is exact per-fill).\nBinance geo-blocks its liquidation stream from our infrastructure, so\nnotionals run below a true all-exchange total.\n\n**Check `baseline_span_h`, not `window_uptime_h`.** `spike_ratio` compares a\nwindow against a trailing-24h mean, and `baseline_span_h` is how many hours\nof history are actually behind that mean — it is what triggering is gated on.\n`window_uptime_h` is process uptime and resets on every deploy, while the\nfeed restores up to 24h of events from its snapshot on boot, so the two\nroutinely disagree by a full day.\n\n**`triggered` requires every gate**: `spike_ratio` ≥ 2, `asymmetry` ≥ 0.70,\n`severity` ≥ 0.35, window notional ≥ $100k and ≥ 1h of baseline history.\n`suppressed_by` names whichever blocked it. The two absolute floors exist\nbecause notional is only 20% of the severity weight — without them a\nperfectly one-sided window scores 0.80 on any size at all, which in\nproduction raised alerts on $760 of liquidations. They gate the alert, not\nthe scoring, so `include_quiet=true` still returns the row with the reason.\n\nThe free tier is scoped to BTC; full-universe coverage is Pro and Pro Plus.","operationId":"squeeze_alerts_api_v1_market_intelligence_squeeze_alerts_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"symbol","in":"query","required":false,"schema":{"type":"string","description":"Filter to a single coin (e.g. BTC)","title":"Symbol"},"description":"Filter to a single coin (e.g. BTC)"},{"name":"window_s","in":"query","required":false,"schema":{"type":"integer","maximum":3600,"minimum":60,"description":"Trailing window in seconds (default 300 = 5 min)","default":300,"title":"Window S"},"description":"Trailing window in seconds (default 300 = 5 min)"},{"name":"min_severity","in":"query","required":false,"schema":{"type":"number","maximum":1.0,"minimum":0.0,"description":"Minimum severity to report","default":0.35,"title":"Min Severity"},"description":"Minimum severity to report"},{"name":"include_quiet","in":"query","required":false,"schema":{"type":"boolean","description":"Return every coin with a usable window, not just the ones firing. For calibration","default":false,"title":"Include Quiet"},"description":"Return every coin with a usable window, not just the ones firing. For calibration"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Max coins to scan","default":250,"title":"Limit"},"description":"Max coins to scan"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SqueezeAlertsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/market-intelligence/options":{"get":{"tags":["Market Intelligence"],"summary":"Options Data","description":"BTC options data (OI, volume, max pain).","operationId":"options_data_api_v1_market_intelligence_options_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketIntelligenceOptionsResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/market-intelligence/exchange-balance":{"get":{"tags":["Market Intelligence"],"summary":"Exchange Balance","description":"Exchange BTC balance and flow data.","operationId":"exchange_balance_api_v1_market_intelligence_exchange_balance_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketIntelligenceDataResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/market-intelligence/coinbase-premium":{"get":{"tags":["Market Intelligence"],"summary":"Coinbase Premium","description":"Coinbase premium index.","operationId":"coinbase_premium_api_v1_market_intelligence_coinbase_premium_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketIntelligenceDataResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/market-intelligence/funding-rates":{"get":{"tags":["Market Intelligence"],"summary":"Funding Rates","description":"Cross-exchange funding rates. Defaults to Hyperliquid perps coins only.\n\n**Filter semantics:** ``exchange=`` is a **coin-set filter**, not an\nexchange-data filter. With ``exchange=hyperliquid`` you get the coins\nlisted on Hyperliquid, but each entry's ``stablecoin_margin_list`` /\n``token_margin_list`` still shows funding rates from every exchange\n(Binance, OKX, Bybit, …). For Hyperliquid's own per-asset funding rate\nuse ``/daily/hyperliquid``.","operationId":"funding_rates_api_v1_market_intelligence_funding_rates_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"symbol","in":"query","required":false,"schema":{"type":"string","description":"Filter to a single coin (e.g. BTC)","title":"Symbol"},"description":"Filter to a single coin (e.g. BTC)"},{"name":"exchange","in":"query","required":false,"schema":{"type":"string","description":"Filter to coins on exchange: hyperliquid, binance_spot, asterdex, or all","default":"hyperliquid","title":"Exchange"},"description":"Filter to coins on exchange: hyperliquid, binance_spot, asterdex, or all"},{"name":"type","in":"query","required":false,"schema":{"type":"string","description":"Instrument type (perps)","default":"perps","title":"Type"},"description":"Instrument type (perps)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Max coins to return (default 250)","default":250,"title":"Limit"},"description":"Max coins to return (default 250)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketIntelligenceDataResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/market-intelligence/open-interest":{"get":{"tags":["Market Intelligence"],"summary":"Open Interest","description":"Cross-exchange open interest.\n\nReturns multi-symbol data (top ~25 perps) when available, falling back to\nBTC-only from the fast-refresh cache.\n\n**Filter semantics:** ``exchange=`` is a **coin-set filter**, not an\nexchange-data filter. With ``exchange=hyperliquid`` you get the coins\nlisted on Hyperliquid, but each entry's ``exchange_list`` still aggregates\nopen interest across all CEXes. For Hyperliquid's own per-asset OI use\n``/daily/hyperliquid`` — note that ``open_interest`` there is in base-coin\nunits, with ``open_interest_usd`` as a derived USD notional.","operationId":"open_interest_api_v1_market_intelligence_open_interest_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"symbol","in":"query","required":false,"schema":{"type":"string","description":"Filter to a single coin (e.g. BTC)","title":"Symbol"},"description":"Filter to a single coin (e.g. BTC)"},{"name":"exchange","in":"query","required":false,"schema":{"type":"string","description":"Filter to coins on exchange: hyperliquid, binance_spot, asterdex, or all","default":"hyperliquid","title":"Exchange"},"description":"Filter to coins on exchange: hyperliquid, binance_spot, asterdex, or all"},{"name":"type","in":"query","required":false,"schema":{"type":"string","description":"Instrument type (perps)","default":"perps","title":"Type"},"description":"Instrument type (perps)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Max coins to return (default 250)","default":250,"title":"Limit"},"description":"Max coins to return (default 250)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketIntelligenceDataResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/market-intelligence/taker-buy-sell":{"get":{"tags":["Market Intelligence"],"summary":"Taker Buy Sell","description":"Taker buy/sell volume ratio by exchange, per coin (4h window).","operationId":"taker_buy_sell_api_v1_market_intelligence_taker_buy_sell_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"symbol","in":"query","required":false,"schema":{"type":"string","description":"Filter by symbol (BTC, ETH, SOL, DOGE, XRP, ADA). Omit for all.","title":"Symbol"},"description":"Filter by symbol (BTC, ETH, SOL, DOGE, XRP, ADA). Omit for all."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketIntelligenceDataResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/market-intelligence/liquidations/by-exchange":{"get":{"tags":["Market Intelligence"],"summary":"Liquidations By Exchange","description":"Liquidations broken down by exchange (BTC, trailing 4h).\n\nRows are ``{exchange, symbol, total, total_usd, long_usd, short_usd}``,\nlargest first. ``total`` is the legacy CoinGlass field name; ``total_usd``\nmirrors it under the naming the rest of the liquidation surface uses.\n\nCoverage is the venue subset we stream (OKX + Bybit + Hyperliquid), so totals\nrun UNDER a true all-exchange number — same caveat as ``/liquidations``.\nBinance geo-blocks its liquidation stream from our IPs.\n\nThe 503 below is a real cold-start signal, not a dead endpoint: this served\nit on EVERY call from the 2026-07-24 CoinGlass retirement until 2026-08-22,\nbecause the free-source cutover left the slot unsourced on the assumption\nthat consumers tolerate ``None`` — which is true of the other retired slots\nand false here. Now it only fires while the 4h window has no venue-tagged\nevents, i.e. the first minutes after a deploy.","operationId":"liquidations_by_exchange_api_v1_market_intelligence_liquidations_by_exchange_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketIntelligenceDataResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/market-intelligence/fear-greed-history":{"get":{"tags":["Market Intelligence"],"summary":"Fear Greed History","description":"Fear & Greed index history with dated entries.","operationId":"fear_greed_history_api_v1_market_intelligence_fear_greed_history_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FearGreedHistoryResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/market-intelligence/stablecoin-history":{"get":{"tags":["Market Intelligence"],"summary":"Stablecoin History","description":"Stablecoin market cap history timeseries.","operationId":"stablecoin_history_api_v1_market_intelligence_stablecoin_history_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketIntelligenceDataResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/market-intelligence/status":{"get":{"tags":["Market Intelligence"],"summary":"Market Intelligence Status","description":"Market intelligence collector status and rate usage.","operationId":"market_intelligence_status_api_v1_market_intelligence_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketIntelligenceStatusResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/daily":{"get":{"tags":["Daily Snapshot"],"summary":"Get Daily Snapshot","description":"Full daily snapshot of all current (non-history) data in one response.\n\nExcludes Binance spot prices and Hyperliquid data which are available\nvia dedicated ``/daily/prices`` and ``/daily/hyperliquid`` endpoints.\n\n**Market health block (`market_health`)**\n\nDual-score architecture: 4 long-term components (Price Trend, Market Breadth,\nStablecoin Flow 90d, Macro/DXY) + 7 short-term components (Volume Quality,\nFear & Greed, Derivatives, Market Breadth Short, Volatility, Short-Term Price,\nStablecoin Flow 14d). Combined score = 0.5·LT + 0.5·ST.\n\n- `market_health.total_score` / `long_term_score` / `short_term_score`: int 0–100\n- `market_health.sentiment` / `long_term_sentiment` / `short_term_sentiment`: BULLISH | NEUTRAL | BEARISH\n- `market_health.components`: `{name: {score, weight}}` (per-component details\n  are stripped from `/daily`; hit `/market-health` for component `.details`)\n- `market_health.indicators`: flat denormalization for quick consumption (below)\n\n**`market_health.indicators` contract**\n\nA flat dict of the most-filtered values from `components.<x>.details`. Keys are\n**omitted entirely** when the source value is unavailable (never null) so consumers\ncan safely use `dict.get(key, default)` for fallbacks. Committed key set:\n\n- `long_short_ratio` (float) — BTC long/short ratio (Binance perps)\n- `funding_rate` (float, %) — avg funding rate (aliased from `avg_funding_rate`;\n  CoinGlass cross-exchange when available, Binance fallback)\n- `buy_ratio` (float, 0–1) — weighted taker-buy ratio across top spot pairs\n- `fear_greed_value` (int, 0–100) — averaged Fear & Greed index\n- `breadth_pct` (float, %) — share of top-30 coins above their 200D MA\n- `pct_from_200ma` (float, %) — BTC distance from 200D MA\n- `cross_status` (str) — Golden | Death | Neutral\n- `stablecoin_change_7d` (float) — 7-day stablecoin market-cap change\n\n**Cross-exchange scope**\n\n`market_health` is computed cross-exchange (CoinGlass aggregate + Binance) and\nis **not** scoped by the `exchange` query param. The `exchange` filter only\ntrims the `coins`, `coinglass.funding`, and `coinglass.liquidations` lists.\nIn particular `indicators.long_short_ratio` is BTC-on-Binance, used as a\nmarket-wide sentiment signal — not a per-exchange Hyperliquid metric.\n\n**Payload trimming and filter-source readiness**\n\nTo keep responses small, `coinglass.funding` and `coinglass.liquidations` are\nalways capped at the top 100 entries (sorted by max absolute funding rate\nand 24h liquidation USD respectively) regardless of the `exchange` filter.\nThe full long tail is available at the dedicated\n`/market-intelligence/funding-rates` and `/market-intelligence/liquidations`\nendpoints. When `exchange` is set to a specific venue whose coin set has\nnot yet loaded after server start, this endpoint returns `503` rather than\nsilently emitting the unfiltered payload.\n\n**Technical / Structural regime block (`technical_regime`)**\n\nUniverse-wide counts (`above_200ma`, `in_squeeze`, `overbought_1d`, …) plus\ntop-N symbol lists (`top_in_squeeze`, `top_overbought`, `top_oversold`,\n`top_near_high`, `top_near_low`) as a macro overlay. The full per-symbol map\n(`by_symbol`, keyed by ticker, each entry carrying the `ma` / `bollinger` /\n`range_state` / `rsi` blocks) is **omitted by default** to keep this payload\ncompact — pass `technical_detail=true` to include it here, or read it\npoint-in-time from `/backtesting/daily-snapshots/{date}` where it is always\npresent. Per-symbol `rsi.*_1h` fields are only meaningful in the live\nsnapshot; backfilled historical days have no intraday series.\n\n**Volatility regime block (`volatility_regime`)**\n\nRealized-vol risk-sizing overlay (Regime #13): regime counts + shares\n(`compressed`, `expanding`, `vol_shock`, `mean_reverting`, `normal`), a\n0-100 `composite_score` (higher = more market-wide vol stress) with\n`sentiment`, `median_vol_pctile_30`, and top-N lists (`top_compressed`,\n`top_vol_shock`, `top_expanding`). The full per-symbol map (`by_symbol`,\neach entry carrying the `regime` + `vol` metrics incl. the vol-target\nmultiplier) is **omitted by default** — pass `volatility_detail=true` to\ninclude it, or read it point-in-time from `/backtesting/daily-snapshots/\n{date}`. Per-symbol `vol.rv_1h` is live-only; backfilled days land null.\n\n**SIGNUM_RGG directional trend radar (`signum_rgg`)**\n\nDaily RED/GREY/GREEN trend classifier (ADX(14)+DMI with hysteresis) across the\nfull HL-perp ∪ top-Binance-spot universe — Regime #14's directional companion.\nUniverse summary: `green`/`grey`/`red` counts + shares, a directional\n`net_breadth_pct` = (green−red)/n·100, `mean_trend_score`, a\nBULLISH/NEUTRAL/BEARISH `sentiment`, and `top_green`/`top_red` (most strongly\ntrending). The full per-symbol map (`by_symbol`, keyed by bare ticker, each\ncarrying `color`, a signed `score` (+ADX green / −ADX red / 0 grey),\n`adx`/`plus_di`/`minus_di`, `days_in_color`, and the `hl_symbol` join key) is\n**omitted by default** — pass `signum_detail=true` to include it, or read it\npoint-in-time from `/backtesting/daily-snapshots/{date}`. Per-symbol\n`intraday_*` are live-only; backfilled historical days land null.","operationId":"get_daily_snapshot_api_v1_daily_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"exchange","in":"query","required":false,"schema":{"type":"string","description":"Filter coins by exchange: hyperliquid, binance_spot, asterdex, or 'all' for unfiltered","default":"hyperliquid","title":"Exchange"},"description":"Filter coins by exchange: hyperliquid, binance_spot, asterdex, or 'all' for unfiltered"},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Response format: 'markdown' for LLM-friendly plain text","title":"Format"},"description":"Response format: 'markdown' for LLM-friendly plain text"},{"name":"technical_detail","in":"query","required":false,"schema":{"type":"boolean","description":"Include the full per-symbol technical_regime.by_symbol map (keyed by ticker). Off by default to keep the payload compact; always available point-in-time via /backtesting/daily-snapshots/{date}.","default":false,"title":"Technical Detail"},"description":"Include the full per-symbol technical_regime.by_symbol map (keyed by ticker). Off by default to keep the payload compact; always available point-in-time via /backtesting/daily-snapshots/{date}."},{"name":"volatility_detail","in":"query","required":false,"schema":{"type":"boolean","description":"Include the full per-symbol volatility_regime.by_symbol map (keyed by ticker; regime + vol metrics per coin). Off by default to keep the payload compact; always available point-in-time via /backtesting/daily-snapshots/{date}.","default":false,"title":"Volatility Detail"},"description":"Include the full per-symbol volatility_regime.by_symbol map (keyed by ticker; regime + vol metrics per coin). Off by default to keep the payload compact; always available point-in-time via /backtesting/daily-snapshots/{date}."},{"name":"meme_detail","in":"query","required":false,"schema":{"type":"boolean","description":"Include the full per-symbol meme_regime.by_symbol map (keyed by ticker; regime + meme metrics per coin). Off by default to keep the payload compact; always available point-in-time via /backtesting/daily-snapshots/{date}.","default":false,"title":"Meme Detail"},"description":"Include the full per-symbol meme_regime.by_symbol map (keyed by ticker; regime + meme metrics per coin). Off by default to keep the payload compact; always available point-in-time via /backtesting/daily-snapshots/{date}."},{"name":"event_detail","in":"query","required":false,"schema":{"type":"boolean","description":"Include the full per-symbol event_regime.by_symbol overlay (keyed by ticker; pending catalysts + net bias per coin). Off by default to keep the payload compact; always available point-in-time via /backtesting/daily-snapshots/{date}.","default":false,"title":"Event Detail"},"description":"Include the full per-symbol event_regime.by_symbol overlay (keyed by ticker; pending catalysts + net bias per coin). Off by default to keep the payload compact; always available point-in-time via /backtesting/daily-snapshots/{date}."},{"name":"security_detail","in":"query","required":false,"schema":{"type":"boolean","description":"Include the full per-symbol security_regime.by_symbol overlay (keyed by ticker; implicating hacks/depegs + acute bias per coin). Off by default to keep the payload compact; always available point-in-time via /backtesting/daily-snapshots/{date}.","default":false,"title":"Security Detail"},"description":"Include the full per-symbol security_regime.by_symbol overlay (keyed by ticker; implicating hacks/depegs + acute bias per coin). Off by default to keep the payload compact; always available point-in-time via /backtesting/daily-snapshots/{date}."},{"name":"signum_detail","in":"query","required":false,"schema":{"type":"boolean","description":"Include the full per-symbol signum_rgg.by_symbol map (keyed by ticker; RED/GREY/GREEN color + signed trend score + ADX/DMI + hl_symbol join key per coin). Off by default to keep the payload compact; always available point-in-time via /backtesting/daily-snapshots/{date}.","default":false,"title":"Signum Detail"},"description":"Include the full per-symbol signum_rgg.by_symbol map (keyed by ticker; RED/GREY/GREEN color + signed trend score + ADX/DMI + hl_symbol join key per coin). Off by default to keep the payload compact; always available point-in-time via /backtesting/daily-snapshots/{date}."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DailySnapshotResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/daily/prices":{"get":{"tags":["Daily Snapshot"],"summary":"Get Daily Prices","description":"All Binance spot price pairs (~2,500 symbols).","operationId":"get_daily_prices_api_v1_daily_prices_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DailySnapshotResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/daily/hyperliquid":{"get":{"tags":["Daily Snapshot"],"summary":"Get Daily Hyperliquid","description":"Hyperliquid perpetuals: prices, funding rates, and open interest (~230 assets).\n\nEach entry in ``funding_oi`` contains both raw and derived fields:\n\n- ``funding_rate`` — Hyperliquid's own funding rate, per HL funding interval\n  (1h on HL by default). Negative values indicate shorts paying longs.\n  This is **Hyperliquid-specific**; cross-exchange averaged funding\n  lives in ``/market-health`` and ``/market-intelligence/funding-rates``.\n- ``open_interest`` — **in base-coin units** (number of contracts), mirroring\n  the Hyperliquid API. For BTC this might be ``28846.42`` meaning ~28.8K BTC.\n  Use this when comparing across exchanges that quote OI in the same units.\n- ``open_interest_usd`` — derived notional in USD = ``open_interest * mark_price``.\n  Use this for \"is this market large enough to trade?\" thresholds.\n- ``mark_price`` / ``oracle_price`` — both USD.\n- ``day_ntl_vlm`` — 24h notional volume, **already USD-denominated**.\n\nCoverage: every active HL perp (~230). Refresh cadence: 1 minute. Note that\nthinly-traded perps may emit ``open_interest = 0`` legitimately when no\npositions are open.","operationId":"get_daily_hyperliquid_api_v1_daily_hyperliquid_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DailySnapshotResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/daily/hl-traders":{"get":{"tags":["Daily Snapshot"],"summary":"Get Daily Hl Traders","description":"Top trader leaderboard, wallet positions, and tracking metadata.","operationId":"get_daily_hl_traders_api_v1_daily_hl_traders_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DailySnapshotResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/dex/trending":{"get":{"tags":["DEX & Meme Coins"],"summary":"Get Trending Pools","description":"Trending DEX pools across chains. High-frequency discovery data for meme coin alpha.","operationId":"get_trending_pools_api_v1_dex_trending_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"chain","in":"query","required":false,"schema":{"description":"Filter by chain: solana, ethereum, base, bsc, arbitrum","title":"Chain","type":"string","nullable":true},"description":"Filter by chain: solana, ethereum, base, bsc, arbitrum"},{"name":"universe","in":"query","required":false,"schema":{"description":"Filter to token universe: hl_perps","title":"Universe","type":"string","nullable":true},"description":"Filter to token universe: hl_perps"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/dex/new-pools":{"get":{"tags":["DEX & Meme Coins"],"summary":"Get New Pools","description":"Newest DEX pools — early discovery of new token launches.","operationId":"get_new_pools_api_v1_dex_new_pools_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"chain","in":"query","required":false,"schema":{"description":"Filter by chain: solana, ethereum, base, bsc, arbitrum","title":"Chain","type":"string","nullable":true},"description":"Filter by chain: solana, ethereum, base, bsc, arbitrum"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/dex/token/{chain}/{address}":{"get":{"tags":["DEX & Meme Coins"],"summary":"Get Token Info","description":"Token info + top pools for a specific token on a chain.","operationId":"get_token_info_api_v1_dex_token__chain___address__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"chain","in":"path","required":true,"schema":{"type":"string","title":"Chain"}},{"name":"address","in":"path","required":true,"schema":{"type":"string","title":"Address"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/dex/promoted":{"get":{"tags":["DEX & Meme Coins"],"summary":"Get Promoted Tokens","description":"Recently promoted/boosted tokens — marketing spend signal.","operationId":"get_promoted_tokens_api_v1_dex_promoted_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/dex/promoted/top":{"get":{"tags":["DEX & Meme Coins"],"summary":"Get Top Promoted Tokens","description":"Top promoted tokens ranked by promotion spend.","operationId":"get_top_promoted_tokens_api_v1_dex_promoted_top_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/dex/security/{chain}/{address}":{"get":{"tags":["DEX & Meme Coins"],"summary":"Get Token Security","description":"Token security report — rug detection, honeypot check, risk scoring.","operationId":"get_token_security_api_v1_dex_security__chain___address__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"chain","in":"path","required":true,"schema":{"type":"string","title":"Chain"}},{"name":"address","in":"path","required":true,"schema":{"type":"string","title":"Address"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/backtesting/daily-snapshots":{"get":{"tags":["Backtesting"],"summary":"List Daily Snapshots","description":"List dates with an archived daily snapshot available (YYYY-MM-DD).\n\nSnapshots are produced once per day at 20:00 UTC (and on server startup).\nEach archived snapshot contains everything `/api/v1/daily` returns —\nhealth score, derivatives, sentiment, macro, ETF flows, cycle indicators,\non-chain composite score, all on-chain collector states.\n\nPass ``start``/``end`` (YYYY-MM-DD, inclusive) to bound the date range.","operationId":"list_daily_snapshots_api_v1_backtesting_daily_snapshots_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"start","in":"query","required":false,"schema":{"type":"string","description":"Earliest date to include (YYYY-MM-DD, inclusive).","title":"Start"},"description":"Earliest date to include (YYYY-MM-DD, inclusive)."},{"name":"end","in":"query","required":false,"schema":{"type":"string","description":"Latest date to include (YYYY-MM-DD, inclusive).","title":"End"},"description":"Latest date to include (YYYY-MM-DD, inclusive)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DailySnapshotArchiveListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/backtesting/daily-snapshots/{date}":{"get":{"tags":["Backtesting"],"summary":"Get Daily Snapshot By Date","description":"Retrieve an archived daily snapshot for `date` (YYYY-MM-DD UTC).\n\nReturns the full snapshot identical in shape to `/api/v1/daily`, including\nthe new `onchain_health_score` field. Use this to build historical\nregime-tagged backtests without re-computing per-day signals yourself.\n\nA snapshot for today is not written until the 20:00 UTC daily build (it is\nkeyed by build date, so day D lands at 20:00 UTC on D — NOT 01:00 UTC, which\nis the separate backtesting Parquet export). Those 404s carry `Retry-After`\n(seconds until that build) so a polling client backs off instead of hot-\nlooping; one consumer was observed retrying today's date ~1900 times in 2h.","operationId":"get_daily_snapshot_by_date_api_v1_backtesting_daily_snapshots__date__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"date","in":"path","required":true,"schema":{"type":"string","title":"Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DailySnapshotArchiveResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/backtesting/klines":{"get":{"tags":["Backtesting"],"summary":"Get Klines","description":"Query historical 1-minute OHLCV klines for backtesting.","operationId":"get_klines_api_v1_backtesting_klines_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"symbol","in":"query","required":true,"schema":{"type":"string","description":"Trading pair, e.g. BTCUSDT (Binance) or BTC (Hyperliquid)","title":"Symbol"},"description":"Trading pair, e.g. BTCUSDT (Binance) or BTC (Hyperliquid)"},{"name":"exchange","in":"query","required":false,"schema":{"type":"string","description":"binance or hyperliquid","default":"binance","title":"Exchange"},"description":"binance or hyperliquid"},{"name":"start","in":"query","required":true,"schema":{"type":"string","description":"Start time (ISO 8601 or unix ms)","title":"Start"},"description":"Start time (ISO 8601 or unix ms)"},{"name":"end","in":"query","required":false,"schema":{"type":"string","description":"End time (ISO 8601 or unix ms, defaults to now). EXCLUSIVE — the range is [start, end), so consecutive windows do not repeat a boundary row.","title":"End"},"description":"End time (ISO 8601 or unix ms, defaults to now). EXCLUSIVE — the range is [start, end), so consecutive windows do not repeat a boundary row."},{"name":"bounds","in":"query","required":false,"schema":{"type":"string","pattern":"^(half-open|closed)$","description":"Interval convention for `start`/`end`. `half-open` (default) is [start, end) — `end` is EXCLUSIVE, so consecutive windows tile without repeating a boundary row. `closed` is [start, end] — `end` INCLUSIVE, the pre-2026-08-08 behaviour; use it only to keep an existing integration byte-identical.","default":"half-open","title":"Bounds"},"description":"Interval convention for `start`/`end`. `half-open` (default) is [start, end) — `end` is EXCLUSIVE, so consecutive windows tile without repeating a boundary row. `closed` is [start, end] — `end` INCLUSIVE, the pre-2026-08-08 behaviour; use it only to keep an existing integration byte-identical."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":1000,"title":"Limit"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Response format: json or csv","default":"json","title":"Format"},"description":"Response format: json or csv"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestKlinesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/backtesting/funding":{"get":{"tags":["Backtesting"],"summary":"Get Funding","description":"Query historical funding rates and open interest.","operationId":"get_funding_api_v1_backtesting_funding_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"symbol","in":"query","required":true,"schema":{"type":"string","description":"Symbol, e.g. BTC or BTCUSDT","title":"Symbol"},"description":"Symbol, e.g. BTC or BTCUSDT"},{"name":"exchange","in":"query","required":false,"schema":{"type":"string","description":"binance or hyperliquid","default":"hyperliquid","title":"Exchange"},"description":"binance or hyperliquid"},{"name":"start","in":"query","required":true,"schema":{"type":"string","description":"Start time (ISO 8601 or unix ms)","title":"Start"},"description":"Start time (ISO 8601 or unix ms)"},{"name":"end","in":"query","required":false,"schema":{"type":"string","description":"End time (ISO 8601 or unix ms, defaults to now). EXCLUSIVE — the range is [start, end), so consecutive windows do not repeat a boundary row.","title":"End"},"description":"End time (ISO 8601 or unix ms, defaults to now). EXCLUSIVE — the range is [start, end), so consecutive windows do not repeat a boundary row."},{"name":"bounds","in":"query","required":false,"schema":{"type":"string","pattern":"^(half-open|closed)$","description":"Interval convention for `start`/`end`. `half-open` (default) is [start, end) — `end` is EXCLUSIVE, so consecutive windows tile without repeating a boundary row. `closed` is [start, end] — `end` INCLUSIVE, the pre-2026-08-08 behaviour; use it only to keep an existing integration byte-identical.","default":"half-open","title":"Bounds"},"description":"Interval convention for `start`/`end`. `half-open` (default) is [start, end) — `end` is EXCLUSIVE, so consecutive windows tile without repeating a boundary row. `closed` is [start, end] — `end` INCLUSIVE, the pre-2026-08-08 behaviour; use it only to keep an existing integration byte-identical."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":1000,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestFundingResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/backtesting/liquidations":{"get":{"tags":["Backtesting"],"summary":"Get Liquidations","description":"Query historical liquidation data.","operationId":"get_liquidations_api_v1_backtesting_liquidations_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"symbol","in":"query","required":false,"schema":{"type":"string","description":"Filter by symbol, or omit for all","title":"Symbol"},"description":"Filter by symbol, or omit for all"},{"name":"start","in":"query","required":true,"schema":{"type":"string","description":"Start time (ISO 8601 or unix ms)","title":"Start"},"description":"Start time (ISO 8601 or unix ms)"},{"name":"end","in":"query","required":false,"schema":{"type":"string","description":"End time (ISO 8601 or unix ms, defaults to now). EXCLUSIVE — the range is [start, end), so consecutive windows do not repeat a boundary row.","title":"End"},"description":"End time (ISO 8601 or unix ms, defaults to now). EXCLUSIVE — the range is [start, end), so consecutive windows do not repeat a boundary row."},{"name":"bounds","in":"query","required":false,"schema":{"type":"string","pattern":"^(half-open|closed)$","description":"Interval convention for `start`/`end`. `half-open` (default) is [start, end) — `end` is EXCLUSIVE, so consecutive windows tile without repeating a boundary row. `closed` is [start, end] — `end` INCLUSIVE, the pre-2026-08-08 behaviour; use it only to keep an existing integration byte-identical.","default":"half-open","title":"Bounds"},"description":"Interval convention for `start`/`end`. `half-open` (default) is [start, end) — `end` is EXCLUSIVE, so consecutive windows tile without repeating a boundary row. `closed` is [start, end] — `end` INCLUSIVE, the pre-2026-08-08 behaviour; use it only to keep an existing integration byte-identical."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":1000,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestLiquidationsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/backtesting/hl-liquidations":{"get":{"tags":["Backtesting"],"summary":"Get Hl Liquidations","description":"Query the per-event Hyperliquid liquidation tape.\n\nExact liquidation fills (market + backstop) across the full HL perp\nuniverse — time, coin, liquidated side, px, sz, USD notional, method,\nmark price — unlike ``/backtesting/liquidations``' venue-merged\nrolling-24h totals. Serves the local retention window (~30 days); the\nfull history is archived daily as the ``hl_liquidations`` data type\n(one Parquet per day, all coins — see ``/backtesting/archives``).\nPro Plus.","operationId":"get_hl_liquidations_api_v1_backtesting_hl_liquidations_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"coin","in":"query","required":false,"schema":{"type":"string","description":"Filter by HL universe coin name (e.g. BTC, kPEPE), or omit for all","title":"Coin"},"description":"Filter by HL universe coin name (e.g. BTC, kPEPE), or omit for all"},{"name":"start","in":"query","required":true,"schema":{"type":"string","description":"Start time (ISO 8601 or unix ms)","title":"Start"},"description":"Start time (ISO 8601 or unix ms)"},{"name":"end","in":"query","required":false,"schema":{"type":"string","description":"End time (ISO 8601 or unix ms, defaults to now). EXCLUSIVE — the range is [start, end), so consecutive windows do not repeat a boundary row.","title":"End"},"description":"End time (ISO 8601 or unix ms, defaults to now). EXCLUSIVE — the range is [start, end), so consecutive windows do not repeat a boundary row."},{"name":"bounds","in":"query","required":false,"schema":{"type":"string","pattern":"^(half-open|closed)$","description":"Interval convention for `start`/`end`. `half-open` (default) is [start, end) — `end` is EXCLUSIVE, so consecutive windows tile without repeating a boundary row. `closed` is [start, end] — `end` INCLUSIVE, the pre-2026-08-08 behaviour; use it only to keep an existing integration byte-identical.","default":"half-open","title":"Bounds"},"description":"Interval convention for `start`/`end`. `half-open` (default) is [start, end) — `end` is EXCLUSIVE, so consecutive windows tile without repeating a boundary row. `closed` is [start, end] — `end` INCLUSIVE, the pre-2026-08-08 behaviour; use it only to keep an existing integration byte-identical."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":1000,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestHLLiquidationsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/backtesting/news-events":{"get":{"tags":["Backtesting"],"summary":"Get News Events","description":"Query the archived market-moving news tape, with market-response labels.\n\nThe backtestable form of ``/api/v1/news/market-moving``: every qualified\ncatalyst with its ``impact_score``, signed ``bias``, ``corroboration``, and\nthe MEASURED move that followed — ``ret_15m`` / ``ret_1h`` / ``ret_4h``,\n``vol_mult`` (vs that coin's own 30-day baseline), ``oi_change_pct``,\n``funding_shift`` and a combined ``abnormality``. That last set is what makes\nthe impact score calibratable rather than merely asserted.\n\nTwo constraints worth stating plainly:\n\n* **Only qualified events are archived.** Stories that failed the noise gate\n  or scored below the impact threshold were discarded at ingest and no row\n  exists for them. Do not treat this as \"all news\".\n* **History starts when this shipped and CANNOT be backfilled.** RSS serves a\n  recent window only, so no earlier tape will ever exist — the same\n  constraint as ``/regimes/history``.\n\nResponse columns are NULL for windows that have not matured yet, which means\n\"not yet measured\", not \"no reaction\". Pro Plus.","operationId":"get_news_events_api_v1_backtesting_news_events_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"symbol","in":"query","required":false,"schema":{"type":"string","description":"Filter by HL perp symbol (e.g. SOL, kPEPE) or MARKET; omit for all","title":"Symbol"},"description":"Filter by HL perp symbol (e.g. SOL, kPEPE) or MARKET; omit for all"},{"name":"start","in":"query","required":true,"schema":{"type":"string","description":"Start time (ISO 8601 or unix ms)","title":"Start"},"description":"Start time (ISO 8601 or unix ms)"},{"name":"end","in":"query","required":false,"schema":{"type":"string","description":"End time (ISO 8601 or unix ms, defaults to now). EXCLUSIVE — the range is [start, end), so consecutive windows do not repeat a boundary row.","title":"End"},"description":"End time (ISO 8601 or unix ms, defaults to now). EXCLUSIVE — the range is [start, end), so consecutive windows do not repeat a boundary row."},{"name":"min_impact","in":"query","required":false,"schema":{"type":"number","maximum":1.0,"minimum":0.0,"description":"Minimum impact_score","default":0.0,"title":"Min Impact"},"description":"Minimum impact_score"},{"name":"bounds","in":"query","required":false,"schema":{"type":"string","pattern":"^(half-open|closed)$","description":"Interval convention for `start`/`end`. `half-open` (default) is [start, end) — `end` is EXCLUSIVE, so consecutive windows tile without repeating a boundary row. `closed` is [start, end] — `end` INCLUSIVE, the pre-2026-08-08 behaviour; use it only to keep an existing integration byte-identical.","default":"half-open","title":"Bounds"},"description":"Interval convention for `start`/`end`. `half-open` (default) is [start, end) — `end` is EXCLUSIVE, so consecutive windows tile without repeating a boundary row. `closed` is [start, end] — `end` INCLUSIVE, the pre-2026-08-08 behaviour; use it only to keep an existing integration byte-identical."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"default":500,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestNewsEventsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/backtesting/snapshots":{"get":{"tags":["Backtesting"],"summary":"Get Snapshots","description":"Query historical JSON snapshots for a data type.\n\nStreamed row-by-row so peak memory stays ~one row regardless of ``limit``.\nA limit=1000 pull of fat types (coinglass_oi / coinglass_funding /\nstablecoins) otherwise decompressed ~300MB and ballooned ~1GB through\nserialization, OOM-looping the 2.5GiB container. The JSON response shape is\nunchanged, so consumers need no changes. Streaming also means bytes start\nflowing immediately — no more 60s nginx 504 on large pulls. No heavy-read\nsemaphore needed here: memory is now bounded by the stream itself, and the\nrequest rate is bounded by nginx/Cloudflare on the /backtesting route.","operationId":"get_snapshots_api_v1_backtesting_snapshots_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"data_type","in":"query","required":true,"schema":{"type":"string","description":"Snapshot type, e.g. market_health, fear_greed, coinglass_etf_flows","title":"Data Type"},"description":"Snapshot type, e.g. market_health, fear_greed, coinglass_etf_flows"},{"name":"start","in":"query","required":true,"schema":{"type":"string","description":"Start time (ISO 8601 or unix ms)","title":"Start"},"description":"Start time (ISO 8601 or unix ms)"},{"name":"end","in":"query","required":false,"schema":{"type":"string","description":"End time (ISO 8601 or unix ms, defaults to now). EXCLUSIVE — the range is [start, end), so consecutive windows do not repeat a boundary row.","title":"End"},"description":"End time (ISO 8601 or unix ms, defaults to now). EXCLUSIVE — the range is [start, end), so consecutive windows do not repeat a boundary row."},{"name":"bounds","in":"query","required":false,"schema":{"type":"string","pattern":"^(half-open|closed)$","description":"Interval convention for `start`/`end`. `half-open` (default) is [start, end) — `end` is EXCLUSIVE, so consecutive windows tile without repeating a boundary row. `closed` is [start, end] — `end` INCLUSIVE, the pre-2026-08-08 behaviour; use it only to keep an existing integration byte-identical.","default":"half-open","title":"Bounds"},"description":"Interval convention for `start`/`end`. `half-open` (default) is [start, end) — `end` is EXCLUSIVE, so consecutive windows tile without repeating a boundary row. `closed` is [start, end] — `end` INCLUSIVE, the pre-2026-08-08 behaviour; use it only to keep an existing integration byte-identical."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"universe","in":"query","required":false,"schema":{"description":"For dex_trending: filter to hl_perps","title":"Universe","type":"string","nullable":true},"description":"For dex_trending: filter to hl_perps"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestSnapshotsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/backtesting/snapshots/types":{"get":{"tags":["Backtesting"],"summary":"Get Snapshot Types","description":"List all available snapshot data types with row counts and date ranges.","operationId":"get_snapshot_types_api_v1_backtesting_snapshots_types_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestSnapshotTypesResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/backtesting/symbols":{"get":{"tags":["Backtesting"],"summary":"Get Symbols","description":"List all tracked symbols with available date ranges.","operationId":"get_symbols_api_v1_backtesting_symbols_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"exchange","in":"query","required":false,"schema":{"type":"string","description":"Filter by exchange: binance or hyperliquid","title":"Exchange"},"description":"Filter by exchange: binance or hyperliquid"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestSymbolsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/backtesting/status":{"get":{"tags":["Backtesting"],"summary":"Get Status","description":"Get backtesting storage statistics.","operationId":"get_status_api_v1_backtesting_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestStatusResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/backtesting/export":{"get":{"tags":["Backtesting"],"summary":"Export Data","description":"Export kline data as streaming CSV download.","operationId":"export_data_api_v1_backtesting_export_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"symbol","in":"query","required":true,"schema":{"type":"string","description":"Symbol to export","title":"Symbol"},"description":"Symbol to export"},{"name":"exchange","in":"query","required":false,"schema":{"type":"string","description":"binance or hyperliquid","default":"binance","title":"Exchange"},"description":"binance or hyperliquid"},{"name":"start","in":"query","required":true,"schema":{"type":"string","description":"Start time (ISO 8601 or unix ms)","title":"Start"},"description":"Start time (ISO 8601 or unix ms)"},{"name":"end","in":"query","required":false,"schema":{"type":"string","description":"End time (ISO 8601 or unix ms, defaults to now). EXCLUSIVE — the range is [start, end), so consecutive windows do not repeat a boundary row.","title":"End"},"description":"End time (ISO 8601 or unix ms, defaults to now). EXCLUSIVE — the range is [start, end), so consecutive windows do not repeat a boundary row."},{"name":"bounds","in":"query","required":false,"schema":{"type":"string","pattern":"^(half-open|closed)$","description":"Interval convention for `start`/`end`. `half-open` (default) is [start, end) — `end` is EXCLUSIVE, so consecutive windows tile without repeating a boundary row. `closed` is [start, end] — `end` INCLUSIVE, the pre-2026-08-08 behaviour; use it only to keep an existing integration byte-identical.","default":"half-open","title":"Bounds"},"description":"Interval convention for `start`/`end`. `half-open` (default) is [start, end) — `end` is EXCLUSIVE, so consecutive windows tile without repeating a boundary row. `closed` is [start, end] — `end` INCLUSIVE, the pre-2026-08-08 behaviour; use it only to keep an existing integration byte-identical."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/backtesting/archives/index":{"get":{"tags":["Backtesting"],"summary":"Get Archive Index","description":"Return the backtesting archive index — a compact summary of all\navailable data types, symbols, exchanges, and date ranges.\n\nConsumers should call this once to discover what's available, then\nuse ``/archives/download`` to fetch specific files.","operationId":"get_archive_index_api_v1_backtesting_archives_index_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/backtesting/archives":{"get":{"tags":["Backtesting"],"summary":"List Archives","description":"List archived files available for download from cold storage.\n\nUse ``data_type=daily`` for consolidated Parquet files containing all\nsymbols for an exchange in a single file (recommended for bulk downloads).\n\n``data_type=klines_deep`` / ``funding_deep`` expose the deep monthly cold\nhistory (one Parquet per symbol per month) — much further back than the\nrolling daily files. ``klines_deep`` is coarse OHLCV (``interval`` 1h/4h/1d)\nfor BOTH exchanges: ``exchange=binance`` (spot, back to each market's listing\n— BTCUSDT to Aug 2017) and ``exchange=hyperliquid`` (1d to HL's 2023 launch).\n``funding_deep`` is hourly HL ``funding_rate`` only (no historical OI/mark).\n\nPass ``start``/``end`` (YYYY-MM-DD; YYYY-MM for deep tiers) to filter by date\nserver-side — strongly recommended for high-volume types where the unfiltered\nlisting can be large enough to time out.","operationId":"list_archives_api_v1_backtesting_archives_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"data_type","in":"query","required":false,"schema":{"type":"string","description":"Data type: daily, klines, funding, liquidations, hl_liquidations, snapshots, klines_deep, or funding_deep. Use 'daily' for consolidated per-exchange bundles; 'hl_liquidations' is the per-event Hyperliquid liquidation tape (one file per day, all coins); the '*_deep' tiers are monthly cold history (see /archives/index).","default":"klines","title":"Data Type"},"description":"Data type: daily, klines, funding, liquidations, hl_liquidations, snapshots, klines_deep, or funding_deep. Use 'daily' for consolidated per-exchange bundles; 'hl_liquidations' is the per-event Hyperliquid liquidation tape (one file per day, all coins); the '*_deep' tiers are monthly cold history (see /archives/index)."},{"name":"exchange","in":"query","required":false,"schema":{"type":"string","description":"Filter by exchange (klines/funding/daily/klines_deep/funding_deep only)","title":"Exchange"},"description":"Filter by exchange (klines/funding/daily/klines_deep/funding_deep only)"},{"name":"symbol","in":"query","required":false,"schema":{"type":"string","description":"Filter by symbol, or snapshot type name for snapshots","title":"Symbol"},"description":"Filter by symbol, or snapshot type name for snapshots"},{"name":"start","in":"query","required":false,"schema":{"type":"string","description":"Earliest archive date to include (YYYY-MM-DD, inclusive; YYYY-MM for '*_deep' tiers). Recommended for large types like liquidations to avoid listing timeouts.","title":"Start"},"description":"Earliest archive date to include (YYYY-MM-DD, inclusive; YYYY-MM for '*_deep' tiers). Recommended for large types like liquidations to avoid listing timeouts."},{"name":"end","in":"query","required":false,"schema":{"type":"string","description":"Latest archive date to include (YYYY-MM-DD, inclusive; YYYY-MM for '*_deep' tiers).","title":"End"},"description":"Latest archive date to include (YYYY-MM-DD, inclusive; YYYY-MM for '*_deep' tiers)."},{"name":"interval","in":"query","required":false,"schema":{"type":"string","description":"Candle interval for klines_deep only: 1h, 4h, or 1d (ignored for other types).","title":"Interval"},"description":"Candle interval for klines_deep only: 1h, 4h, or 1d (ignored for other types)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestArchivesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/backtesting/archives/download":{"get":{"tags":["Backtesting"],"summary":"Download Archives","description":"Generate pre-signed download URLs for archived files.\n\nUse ``data_type=daily`` for consolidated Parquet files (one per exchange)\ninstead of individual per-symbol files.\n\n``data_type=klines_deep`` (with ``interval`` 1h/4h/1d) and ``funding_deep``\nserve the deep monthly cold history — one Parquet per symbol per month,\nreaching far past the rolling daily files: ``exchange=binance`` spot klines\nback to each market's listing (BTCUSDT to Aug 2017), ``exchange=hyperliquid``\n1d to its 2023 launch. For deep tiers ``start``/``end`` match the file's\nYYYY-MM token, so pass month-granular bounds (e.g. ``start=2019-01``).","operationId":"download_archives_api_v1_backtesting_archives_download_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"start","in":"query","required":true,"schema":{"type":"string","description":"Start date (YYYY-MM-DD; YYYY-MM for '*_deep' tiers)","title":"Start"},"description":"Start date (YYYY-MM-DD; YYYY-MM for '*_deep' tiers)"},{"name":"data_type","in":"query","required":false,"schema":{"type":"string","description":"Data type: daily, klines, funding, liquidations, hl_liquidations, snapshots, klines_deep, or funding_deep. Use 'daily' for consolidated bundles; 'hl_liquidations' for the per-event HL liquidation tape; '*_deep' for deep monthly cold history.","default":"klines","title":"Data Type"},"description":"Data type: daily, klines, funding, liquidations, hl_liquidations, snapshots, klines_deep, or funding_deep. Use 'daily' for consolidated bundles; 'hl_liquidations' for the per-event HL liquidation tape; '*_deep' for deep monthly cold history."},{"name":"exchange","in":"query","required":false,"schema":{"type":"string","description":"Exchange filter (klines/funding/daily/klines_deep/funding_deep)","title":"Exchange"},"description":"Exchange filter (klines/funding/daily/klines_deep/funding_deep)"},{"name":"symbol","in":"query","required":false,"schema":{"type":"string","description":"Symbol, or snapshot type name for snapshots","title":"Symbol"},"description":"Symbol, or snapshot type name for snapshots"},{"name":"end","in":"query","required":false,"schema":{"type":"string","description":"End date (YYYY-MM-DD, defaults to today; YYYY-MM for '*_deep' tiers)","title":"End"},"description":"End date (YYYY-MM-DD, defaults to today; YYYY-MM for '*_deep' tiers)"},{"name":"interval","in":"query","required":false,"schema":{"type":"string","description":"Candle interval for klines_deep only: 1h, 4h, or 1d (ignored for other types).","title":"Interval"},"description":"Candle interval for klines_deep only: 1h, 4h, or 1d (ignored for other types)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestArchiveDownloadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/nfts/overview":{"get":{"tags":["NFTs"],"summary":"Get Nft Overview","description":"Headline NFT trade volume — total + per-chain / per-tier / per-category series, top collections, marketplaces.","operationId":"get_nft_overview_api_v1_nfts_overview_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":3650,"minimum":7,"description":"Days of history to return","default":90,"title":"Days"},"description":"Days of history to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NFTOverviewResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/nfts/collections":{"get":{"tags":["NFTs"],"summary":"List Nft Collections","description":"Seeded NFT collection taxonomy — slug, name, chain, category, tier, launch month.","operationId":"list_nft_collections_api_v1_nfts_collections_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/nfts/collections/{slug}":{"get":{"tags":["NFTs"],"summary":"Get Nft Collection","description":"Per-collection daily volume time-series.","operationId":"get_nft_collection_api_v1_nfts_collections__slug__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":3650,"minimum":7,"default":365,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NFTCollectionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/nfts/chains":{"get":{"tags":["NFTs"],"summary":"List Nft Chains","description":"Chain breakdown — each chain plus the count of seeded collections on it.","operationId":"list_nft_chains_api_v1_nfts_chains_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/NFTChainCount"},"type":"array","title":"Response List Nft Chains Api V1 Nfts Chains Get"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/nfts/categories":{"get":{"tags":["NFTs"],"summary":"List Nft Categories","description":"Category taxonomy — fixed buckets (pfp/art/gaming/collectible/music/domain/metaverse/ordinal/other).","operationId":"list_nft_categories_api_v1_nfts_categories_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/NFTCategoryCount"},"type":"array","title":"Response List Nft Categories Api V1 Nfts Categories Get"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/nfts/volume":{"get":{"tags":["NFTs"],"summary":"Get Nft Volume","description":"Daily NFT volume buckets — choose `by=chain|tier|category|collection`.\n\nPro tier. The collection breakdown can return many series; consumers\nshould expect a wide list when calling with `by=collection`.","operationId":"get_nft_volume_api_v1_nfts_volume_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"by","in":"query","required":false,"schema":{"enum":["chain","tier","category","collection"],"type":"string","default":"chain","title":"By"}},{"name":"from","in":"query","required":false,"schema":{"description":"ISO date (YYYY-MM-DD)","title":"From","type":"string","nullable":true},"description":"ISO date (YYYY-MM-DD)"},{"name":"to","in":"query","required":false,"schema":{"description":"ISO date (YYYY-MM-DD)","title":"To","type":"string","nullable":true},"description":"ISO date (YYYY-MM-DD)"},{"name":"granularity","in":"query","required":false,"schema":{"type":"string","default":"daily","title":"Granularity","enum":["daily"]}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NFTVolumeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/nfts/correlations":{"get":{"tags":["NFTs"],"summary":"Get Nft Correlations","description":"Pearson correlation of daily NFT total volume vs daily log-returns of vs= assets.\n\nPro Plus tier. Window is a trailing window ending today. Returns one\ncoefficient per asset plus the number of overlapping days actually used.","operationId":"get_nft_correlations_api_v1_nfts_correlations_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"vs","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated asset symbols","default":"btc,eth,sol","title":"Vs"},"description":"Comma-separated asset symbols"},{"name":"window_days","in":"query","required":false,"schema":{"type":"integer","maximum":730,"minimum":14,"default":90,"title":"Window Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NFTCorrelationsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/exchanges":{"get":{"tags":["Exchanges"],"summary":"List Exchanges","description":"Every exchange we profile, with its sign-up link where we have one.\n\nSign-up URLs are CryptoDataAPI **partner/referral** links: the user gets the\nstated `signup_incentive` (Hyperliquid: 4% off spot and perpetual trading\nfees) and we may earn a commission at no extra cost to them. If you surface\n`signup_url` to an end user, surface `disclosure` with it.\n\nNo API key required.","operationId":"list_exchanges_api_v1_exchanges_get","parameters":[{"name":"referral_only","in":"query","required":false,"schema":{"type":"boolean","description":"Return only venues we hold a partner sign-up link for.","default":false,"title":"Referral Only"},"description":"Return only venues we hold a partner sign-up link for."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExchangeListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/exchanges/{slug}":{"get":{"tags":["Exchanges"],"summary":"Get Exchange Detail","description":"One exchange profile by slug (e.g. `hyperliquid`, `binance`).\n\nSame shape as a row from `/exchanges`. Returns 404 for an unknown slug — the\nknown set is in that endpoint's `all_slugs`. No API key required.","operationId":"get_exchange_detail_api_v1_exchanges__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExchangeDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/on-chain/stablecoin-reserves":{"get":{"tags":["On-Chain Intelligence"],"summary":"Get Stablecoin Reserves","description":"CEX stablecoin reserves across ETH/Tron/BSC.\n\nAggregate USDT/USDC/etc. balances held in known hot/cold wallets of the\ntop centralized exchanges. Rising = dry powder accumulating (bullish);\nfalling = capital deployed (often follows rallies).","operationId":"get_stablecoin_reserves_api_v1_on_chain_stablecoin_reserves_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StablecoinReservesResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/on-chain/stablecoin-reserves/dry-powder":{"get":{"tags":["On-Chain Intelligence"],"summary":"Get Dry Powder Score","description":"Dry-powder signal: z-score of current reserves vs 30d baseline.\n\nSignal interpretation:\n- **accumulating** (z > +1): institutional capital staging on exchanges\n- **depleting** (z < -1): capital deployed or off-ramped\n- **neutral**: within normal range\n\nReturns 'unknown' until ≥8 historical snapshots have been collected.","operationId":"get_dry_powder_score_api_v1_on_chain_stablecoin_reserves_dry_powder_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DryPowderScoreResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/on-chain/exchange-flows/spike-alerts":{"get":{"tags":["On-Chain Intelligence"],"summary":"Get Spike Alerts","description":"Recent large transfers (≥ `min_amount` USD) to/from tracked CEX wallets.\n\nUseful for catching whale-sized deposits in real time. Each alert carries\n`amount` in TOKEN-NATIVE units (with `unit`) plus `amount_usd` converted\nat ingestion from the live price — the `min_amount` threshold applies to\n`amount_usd`, so meme-token unit counts can't masquerade as dollar spikes.\nRows whose USD value can't be verified (no live price) are excluded.","operationId":"get_spike_alerts_api_v1_on_chain_exchange_flows_spike_alerts_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"min_amount","in":"query","required":false,"schema":{"type":"number","minimum":0,"description":"Minimum transfer size in USD (applies to amount_usd; default $1M)","default":1000000,"title":"Min Amount"},"description":"Minimum transfer size in USD (applies to amount_usd; default $1M)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpikeAlertsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/on-chain/miners/reserves":{"get":{"tags":["On-Chain Intelligence"],"summary":"Get Miner Reserves","description":"BTC miner pool reserves + 24h/7d/30d net flow per pool.\n\nTracks reward addresses for Foundry USA, AntPool, F2Pool, ViaBTC, and\nBinance Pool. Most pools sweep balances immediately (low standing balance\nis normal); the meaningful signal is the cumulative funded/spent delta\nover rolling windows.\n\nNet flow interpretation:\n- **Negative net** (heavy spending): miners selling — bearish pressure\n- **Positive net** (accumulation): miners holding — historically late-bear\n- Windows show as `available: false` until enough snapshots have accrued","operationId":"get_miner_reserves_api_v1_on_chain_miners_reserves_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MinerReservesResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/on-chain/miners/hash-ribbon":{"get":{"tags":["On-Chain Intelligence"],"summary":"Get Hash Ribbon","description":"Hash Ribbon indicator: 30dMA vs 60dMA of BTC hashrate.\n\nStates:\n- **capitulation**: 30dMA < 60dMA — miners shutting off rigs\n- **recovery**: 30dMA just crossed back above 60dMA (within 14d) —\n  historically the strongest BTC bottom signal\n- **normal**: standard configuration with no recent crossover\n\nSource: mempool.space hashrate index (3y daily history).","operationId":"get_hash_ribbon_api_v1_on_chain_miners_hash_ribbon_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HashRibbonResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/on-chain/dormancy/btc":{"get":{"tags":["On-Chain Intelligence"],"summary":"Get Btc Dormancy","description":"BTC supply-shock / dormancy signals via CoinMetrics Community API.\n\nReturns:\n- **MVRV** (market cap / realized cap) — the canonical supply-shock indicator\n  with zone classification (capitulation → accumulation → neutral →\n  elevated → euphoria)\n- **Active addresses** — network health + adoption proxy\n- **Issuance USD/24h** — direct miner pressure proxy\n- **Exchange net flow USD/24h** — independent cross-check of QuickNode\n  derived ERC-20 flows","operationId":"get_btc_dormancy_api_v1_on_chain_dormancy_btc_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DormancyResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/on-chain/whales/accumulation-score":{"get":{"tags":["On-Chain Intelligence"],"summary":"Get Whale Accumulation Score","description":"🚧 **Coming soon** (temporarily disabled). Aggregate whale accumulation\nsignal across all tracked ERC-20s.\n\nReturns counts of `accumulating` / `neutral` / `distributing` / `unknown`\nacross USDT/USDC/WBTC/WETH and a directional verdict.\n\nSignals turn from `unknown` to actionable once the collector has ≥7d of\nhistory (so non-CEX top-holder balance deltas can be computed).","operationId":"get_whale_accumulation_score_api_v1_on_chain_whales_accumulation_score_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhaleAccumulationScoreResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/on-chain/whales/accumulation-score/{symbol}":{"get":{"tags":["On-Chain Intelligence"],"summary":"Get Whale Accumulation Score For Symbol","description":"🚧 **Coming soon** (temporarily disabled). Whale accumulation signal for a single ERC-20 token (USDT/USDC/WBTC/WETH).","operationId":"get_whale_accumulation_score_for_symbol_api_v1_on_chain_whales_accumulation_score__symbol__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","title":"Symbol"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhaleAccumulationScoreResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/on-chain/whales/{symbol}":{"get":{"tags":["On-Chain Intelligence"],"summary":"Get Whales For Symbol","description":"🚧 **Coming soon** (temporarily disabled). Top non-CEX holders of `symbol` with 7d/30d balance deltas.\n\nReturns up to top-5 holders by current balance (full top-100 is internal\nstate used for aggregation). Aggregate balance, share-of-supply, and\ndeltas reflect the full top-100 minus known CEX wallets.","operationId":"get_whales_for_symbol_api_v1_on_chain_whales__symbol__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","title":"Symbol"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhaleSymbolEntry"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/on-chain/whales":{"get":{"tags":["On-Chain Intelligence"],"summary":"Get All Whales","description":"🚧 **Coming soon** (temporarily disabled). Top non-CEX holders across all tracked tokens — full snapshot.","operationId":"get_all_whales_api_v1_on_chain_whales_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhalesResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/on-chain/score":{"get":{"tags":["On-Chain Intelligence"],"summary":"Get Onchain Health Score","description":"Composite 0-100 on-chain health score with per-component breakdown.\n\nSynthesizes Hash Ribbon, MVRV, stablecoin dry-powder, whale accumulation,\nexchange flow direction, and miner net flow into a single directional read.\n\nSentiment bands:\n- **bullish** (≥70): broad on-chain confluence of accumulation signals\n- **leaning_bullish** (55-69): tilted positive but mixed\n- **neutral** (45-54)\n- **leaning_bearish** (30-44)\n- **bearish** (<30): broad distribution + miner stress + flow into CEXs\n\nKept separate from `/market-health` for v1. Components with no data yet are\nEXCLUDED and the remaining weights renormalised, so a partially-warm deploy\nreports the confluence it can actually see instead of being diluted toward a\nconfident-looking 50. When no component has data, `sentiment` is `unknown`.","operationId":"get_onchain_health_score_api_v1_on_chain_score_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnChainHealthResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/on-chain/exchange-flows/{symbol}":{"get":{"tags":["On-Chain Intelligence"],"summary":"Get Exchange Flows","description":"Net Transfer flow to/from CEX wallets for `symbol`, across windows.\n\nSymbol must be a token tracked by the exchange-flows collector across the\nsupported chains (ETH, BSC, Base, Arbitrum, Optimism, Tron, Solana). The\nsame symbol can be tracked on multiple chains; see `by_chain`.\n\nThe 1h/6h/24h/7d windows show inflow, outflow, and net. Positive net = more\ndeposits to CEXs (often bearish — incoming sell-side liquidity). Negative\nnet = withdrawals from CEXs (often bullish).\n\n`by_chain` breaks the same windows down per chain (only chains with data for\nthis symbol are present) and `chains_covered` lists them — matching the\ndaily-archive shape so live and backfilled snapshots line up.\n\n`spike_zscore_1h` flags the latest 1h vs the prior hour's baseline; values\n> 2 indicate a statistically unusual spike.","operationId":"get_exchange_flows_api_v1_on_chain_exchange_flows__symbol__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","title":"Symbol"}},{"name":"exchange","in":"query","required":false,"schema":{"description":"Filter to one exchange (e.g. 'binance')","title":"Exchange","type":"string","nullable":true},"description":"Filter to one exchange (e.g. 'binance')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExchangeFlowsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/payments/plans":{"get":{"tags":["Payments"],"summary":"Get Plans","description":"Return plan pricing and supported networks. No auth required.","operationId":"get_plans_api_v1_payments_plans_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlansResponse"}}}}}}},"/api/v1/payments/subscribe":{"post":{"tags":["Payments"],"summary":"Subscribe","description":"Subscribe to a pro plan via x402 payment.\n\nFlow:\n1. If active subscription with >7 days remaining → return it (no charge).\n2. If no x-payment header → return 402 with payment options.\n3. If x-payment header → verify, settle, upgrade key, create subscription + invoice.","operationId":"subscribe_api_v1_payments_subscribe_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscribeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/payments/subscription":{"get":{"tags":["Payments"],"summary":"Get Subscription","description":"Return current subscription status.","operationId":"get_subscription_api_v1_payments_subscription_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionStatusResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/payments/invoices":{"get":{"tags":["Payments"],"summary":"List Invoices","description":"List all invoices for this API key's email.","operationId":"list_invoices_api_v1_payments_invoices_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvoiceListResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/payments/invoices/{number}":{"get":{"tags":["Payments"],"summary":"Get Invoice","description":"Get a single invoice. JSON by default, ?format=html for printable, ?format=pdf for download.","operationId":"get_invoice_api_v1_payments_invoices__number__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"number","in":"path","required":true,"schema":{"type":"string","title":"Number"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","pattern":"^(json|html|pdf)$","default":"json","title":"Format"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/payments/validate-code":{"post":{"tags":["Payments"],"summary":"Validate Code","description":"Validate a discount code and return the discounted price per plan.\n\nPublic (checkout UIs call it pre-auth). Every failure mode returns the\nidentical `{\"valid\": false}` — unknown, inactive, expired, and exhausted\nare indistinguishable, and email binding is never revealed here (it\nsurfaces only at pay time) — so codes can't be enumerated or probed.\nRate-limited per IP.","operationId":"validate_code_api_v1_payments_validate_code_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateCodeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateCodeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/payments/agent-subscribe":{"post":{"tags":["Payments"],"summary":"Agent Subscribe (x402 Gasless Payment)","description":"Gasless one-shot onboarding for AI agents. Pay with USDC on Base via x402 -- no ETH gas needed.\n\n**How it works (2 HTTP calls):**\n\n1. **Call with no payment header** -- receive 402 with payment options (facilitator URL, price, networks).\n2. **Sign the USDC payment with your wallet** (off-chain EIP-712 signature, zero gas).\n3. **Call again with `x-payment` header** -- facilitator settles on-chain, you get an API key + PRO subscription.\n\n**Supported networks:** Base (USDC), Ethereum (USDC), Solana (USDC).\nRecommended: **Base** for lowest settlement cost.\n\n**Plans:**\n- Pro:      monthly (real-time data, derivatives, on-chain analytics)\n- Pro Plus: monthly (adds quant/regime engine, historical data & Parquet downloads)\nCurrent pricing: the 402 response carries the exact USDC amount, or see https://cryptodataapi.com/pricing\n\n**Key resolution on repeat calls:**\n- Include `X-API-Key` header to renew that key's subscription.\n- No key header: looks up existing key by your wallet address, or creates a new one.\n- New API keys are returned **once** -- save it immediately.","operationId":"agent_subscribe_api_v1_payments_agent_subscribe_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSubscribeRequest"}}},"required":true},"responses":{"200":{"description":"API key and PRO subscription details","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/payments/stripe/checkout":{"post":{"tags":["Payments"],"summary":"Create Checkout","description":"Start a recurring card subscription. Returns a Stripe Checkout URL to redirect to.","operationId":"create_checkout_api_v1_payments_stripe_checkout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StripeCheckoutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StripeCheckoutResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/payments/stripe/portal":{"post":{"tags":["Payments"],"summary":"Create Portal","description":"Open the Stripe Billing Portal (cancel / update card / invoice history).","operationId":"create_portal_api_v1_payments_stripe_portal_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StripePortalResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/webhooks":{"get":{"tags":["Webhooks"],"summary":"List Webhooks","description":"List the webhook endpoints owned by the caller's API key.","operationId":"list_webhooks_api_v1_webhooks_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/WebhookOut"},"type":"array","title":"Response List Webhooks Api V1 Webhooks Get"}}}}},"security":[{"APIKeyHeader":[]}]},"post":{"tags":["Webhooks"],"summary":"Create Webhook","description":"Register a new webhook endpoint with optional address and event filters.","operationId":"create_webhook_api_v1_webhooks_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/webhooks/{label}":{"patch":{"tags":["Webhooks"],"summary":"Update Webhook","description":"Update a webhook endpoint by label (must be owned by the caller).","operationId":"update_webhook_api_v1_webhooks__label__patch","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"label","in":"path","required":true,"schema":{"type":"string","title":"Label"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Webhooks"],"summary":"Delete Webhook","description":"Delete a webhook endpoint by label (must be owned by the caller).","operationId":"delete_webhook_api_v1_webhooks__label__delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"label","in":"path","required":true,"schema":{"type":"string","title":"Label"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/wallet/challenge":{"post":{"tags":["Wallet Auth"],"summary":"Create Challenge","description":"Generate an EIP-191 sign-in challenge for a wallet address.","operationId":"create_challenge_api_v1_wallet_challenge_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChallengeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChallengeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/wallet/verify":{"post":{"tags":["Wallet Auth"],"summary":"Verify Signature","description":"Verify an EIP-191 signature and return/create an API key.","operationId":"verify_signature_api_v1_wallet_verify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/wallet/session":{"get":{"tags":["Wallet Auth"],"summary":"Get Session","description":"Get wallet session info for the current API key.","operationId":"get_session_api_v1_wallet_session_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/wallet/upgrade":{"post":{"tags":["Wallet Payments"],"summary":"Upgrade Plan","description":"Verify a USDC transfer on-chain and upgrade the API key to pro.","operationId":"upgrade_plan_api_v1_wallet_upgrade_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentVerifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentVerifyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/wallet/invoices":{"get":{"tags":["Wallet Payments"],"summary":"List Invoices","description":"List all invoices for the current wallet.","operationId":"list_invoices_api_v1_wallet_invoices_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/wallet/invoices/{number}":{"get":{"tags":["Wallet Payments"],"summary":"Download Invoice","description":"Download a single invoice as PDF.","operationId":"download_invoice_api_v1_wallet_invoices__number__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"number","in":"path","required":true,"schema":{"type":"string","title":"Number"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/wallet/config":{"get":{"tags":["Wallet Payments"],"summary":"Wallet Config","description":"Return public wallet config (treasury addresses, supported networks).","operationId":"wallet_config_api_v1_wallet_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/wallet/create-tron-intent":{"post":{"tags":["Wallet Payments"],"summary":"Create Tron Intent","description":"Bind a declared Tron sender to this API key BEFORE they send USDC, and return\nthe deposit details. Tron has no wallet-signature login, so this intent is what\nlets /wallet/upgrade confirm the on-chain sender is the person claiming it.","operationId":"create_tron_intent_api_v1_wallet_create_tron_intent_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TronIntentRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/wallet/create-solana-tx":{"post":{"tags":["Wallet Payments"],"summary":"Create Solana Tx","description":"Build a Solana SPL USDC transfer transaction and return base64 bytes.\n\nCreates a payment intent binding the sender to the caller's API key.\nThe frontend passes these bytes to Phantom which deserializes, simulates,\nand signs using its own @solana/web3.js — avoiding cross-module issues.","operationId":"create_solana_tx_api_v1_wallet_create_solana_tx_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SolanaTxRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/wallet/solana-blockhash":{"get":{"tags":["Wallet Payments"],"summary":"Solana Blockhash","description":"Proxy: get latest Solana blockhash (avoids CORS issues with public RPCs).","operationId":"solana_blockhash_api_v1_wallet_solana_blockhash_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/wallet/solana-confirm/{signature}":{"get":{"tags":["Wallet Payments"],"summary":"Solana Confirm","description":"Proxy: check Solana transaction confirmation status.","operationId":"solana_confirm_api_v1_wallet_solana_confirm__signature__get","parameters":[{"name":"signature","in":"path","required":true,"schema":{"type":"string","title":"Signature"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/news/market-moving":{"get":{"tags":["Market-Moving News"],"summary":"Get Market Moving News","description":"The filtered catalyst tape — only events that cleared the impact threshold.\n\nFree: BTC / ETH / MARKET, last 24h, top 10. Pro: every HL perp, 7 days.\nPro Plus: full retained history plus the `impact_score` components\n(`severity`, `confidence`, `match_mode`, `sources`) and the measured\n`market_response` at +15m / +1h / +4h.\n\n`bias` is signed: negative is risk-off. `corroboration` counts how many\nindependent sources carried the same `(symbol, category)` inside the window —\nthe strongest single indicator that a story is real rather than syndicated.","operationId":"get_market_moving_news_api_v1_news_market_moving_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"symbol","in":"query","required":false,"schema":{"description":"Filter to one Hyperliquid perp, or MARKET","title":"Symbol","type":"string","nullable":true},"description":"Filter to one Hyperliquid perp, or MARKET"},{"name":"hours","in":"query","required":false,"schema":{"type":"number","maximum":336,"minimum":1,"description":"Lookback window in hours","default":24.0,"title":"Hours"},"description":"Lookback window in hours"},{"name":"min_impact","in":"query","required":false,"schema":{"type":"number","maximum":1.0,"minimum":0.0,"description":"Minimum impact_score. Cannot go below the pipeline threshold.","default":0.45,"title":"Min Impact"},"description":"Minimum impact_score. Cannot go below the pipeline threshold."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewsEventsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/news/pulse":{"get":{"tags":["Market-Moving News"],"summary":"Get News Pulse","description":"Per-coin news feature series — `news_pressure` and signed `news_tilt`.\n\nThe endpoint built for trading strategies: one row per Hyperliquid perp,\ncross-sectionally ranked, joinable straight onto price.\n\n- `news_pressure` (0..1) — recency-weighted sum of impact scores, saturating.\n- `news_tilt` (-1..+1) — impact-weighted direction. Negative is risk-off.\n- `event_count` / `top_impact` — how much of the pressure is one big story\n  versus a steady drip.\n\n- `headlines` — raw coverage: how many stories in the current feed window\n  name this coin at high confidence, whether or not any of them qualified as\n  a catalyst. This is attention, not an event. The catalyst funnel discards\n  ~95% of what it reads, so most coins sit at `news_pressure: 0` while\n  `headlines` keeps counting; a coin high on headlines with no pressure is\n  being talked about without anything happening.\n\n**Every active perp gets a row.** A coin with no news is `news_pressure: 0`,\nnot a missing row — a cross-sectional ranking needs the zeros, and a silently\nabsent symbol is indistinguishable from a pipeline failure. Rows are ranked\nby pressure first, then by `headlines`. Free tier gets the top 10 rows; Pro\nand above get the full universe.","operationId":"get_news_pulse_api_v1_news_pulse_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"hours","in":"query","required":false,"schema":{"type":"number","maximum":168,"minimum":1,"description":"Lookback window in hours","default":24.0,"title":"Hours"},"description":"Lookback window in hours"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewsPulseResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/news/coin/{symbol}":{"get":{"tags":["Market-Moving News"],"summary":"Get Coin News","description":"Qualified events and news feature values for one Hyperliquid perp.\n\nFree tier is limited to BTC and ETH; Pro and above may query any perp. Pro\nPlus additionally receives the score components and the measured\n`market_response` per window.","operationId":"get_coin_news_api_v1_news_coin__symbol__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","title":"Symbol"}},{"name":"hours","in":"query","required":false,"schema":{"type":"number","maximum":336,"minimum":1,"default":72.0,"title":"Hours"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewsCoinResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/news/sources":{"get":{"tags":["Market-Moving News"],"summary":"Get News Sources","description":"Per-feed health, the funnel counts, and the published coverage gap.\n\n`sources[].not_modified` distinguishes \"answered 304, nothing new\" from\n\"dead\" — both look like zero fresh items otherwise, which is how a silently\nbroken feed hides.\n\n`funnel_24h` is hourly counts only (`ingested`, `dropped_noise`,\n`dropped_no_catalyst`, `dropped_no_entity`, `dropped_below_threshold`,\n`qualified`) with no titles or URLs. It exists so the filter can be seen over-tightening and swallowing\nreal catalysts, without keeping a news archive to check against.\n\n`unresolvable` lists active perps whose ticker is a common English word and\nwhich have no safe project name — they can only ever be matched by a cashtag.\nPublished as a field rather than left as a silent blind spot.","operationId":"get_news_sources_api_v1_news_sources_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewsSourcesResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/changelog":{"get":{"tags":["meta"],"summary":"Get Changelog","description":"Public API changelog + current version (no API key required).\n\nPoll this to detect breaking or notable response-shape changes. The same\nversion string is on every `/api/*` response as the `X-API-Version` header.\n`/changelog` serves this identical JSON to any non-browser caller.","operationId":"get_changelog_api_v1_changelog_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"APIKeyCreate":{"properties":{"email":{"type":"string","title":"Email"}},"type":"object","required":["email"],"title":"APIKeyCreate","description":"Request body for creating an API key."},"APIKeyInfo":{"properties":{"key_prefix":{"type":"string","title":"Key Prefix"},"email":{"type":"string","title":"Email"},"tier":{"type":"string","title":"Tier"},"is_active":{"type":"boolean","title":"Is Active"},"requests_today":{"type":"integer","title":"Requests Today"},"daily_limit":{"title":"Daily Limit","type":"integer","nullable":true},"created_at":{"type":"string","format":"date-time","title":"Created At"},"expires_at":{"title":"Expires At","type":"string","format":"date-time","nullable":true},"per_minute_limit":{"title":"Per Minute Limit","type":"integer","nullable":true},"email_verified":{"type":"boolean","title":"Email Verified","default":false},"verified_daily_limit":{"title":"Verified Daily Limit","type":"integer","nullable":true},"upgrade_message":{"title":"Upgrade Message","type":"string","nullable":true}},"type":"object","required":["key_prefix","email","tier","is_active","requests_today","daily_limit","created_at","expires_at"],"title":"APIKeyInfo","description":"API key information (without the full key)."},"APIKeyResponse":{"properties":{"api_key":{"type":"string","title":"Api Key"},"key_prefix":{"type":"string","title":"Key Prefix"},"email":{"type":"string","title":"Email"},"tier":{"type":"string","title":"Tier"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"message":{"type":"string","title":"Message","default":"Save this API key securely. It will not be shown again."}},"type":"object","required":["api_key","key_prefix","email","tier","created_at"],"title":"APIKeyResponse","description":"Response after creating an API key (only time full key is shown)."},"APIKeyRotateResponse":{"properties":{"api_key":{"type":"string","title":"Api Key"},"key_prefix":{"type":"string","title":"Key Prefix"},"message":{"type":"string","title":"Message","default":"Your old API key has been invalidated. Save this new key securely."}},"type":"object","required":["api_key","key_prefix"],"title":"APIKeyRotateResponse","description":"Response after rotating an API key."},"AgentSubscribeRequest":{"properties":{"plan":{"type":"string","enum":["monthly","monthly_plus","annual","annual_plus"],"title":"Plan"},"discount_code":{"title":"Discount Code","type":"string","nullable":true}},"type":"object","required":["plan"],"title":"AgentSubscribeRequest","description":"Request body for agent subscription (no API key required)."},"AltcoinBreadthResponse":{"properties":{"coins":{"items":{"$ref":"#/components/schemas/AltcoinDetail"},"type":"array","title":"Coins"},"breadth_pct":{"type":"integer","title":"Breadth Pct"},"ma_period":{"type":"integer","title":"Ma Period"}},"type":"object","required":["coins","breadth_pct","ma_period"],"title":"AltcoinBreadthResponse","description":"Altcoin breadth with per-coin detail."},"AltcoinDetail":{"properties":{"symbol":{"type":"string","title":"Symbol"},"price":{"type":"number","title":"Price"},"ma":{"type":"number","title":"Ma"},"pct_from_ma":{"type":"number","title":"Pct From Ma"},"above_ma":{"type":"boolean","title":"Above Ma"}},"type":"object","required":["symbol","price","ma","pct_from_ma","above_ma"],"title":"AltcoinDetail","description":"Per-coin altcoin breadth detail."},"ArchiveDownloadLink":{"properties":{"date":{"type":"string","title":"Date"},"url":{"type":"string","title":"Url"},"size_bytes":{"type":"integer","title":"Size Bytes"},"expires_in":{"type":"integer","title":"Expires In","default":3600}},"type":"object","required":["date","url","size_bytes"],"title":"ArchiveDownloadLink"},"ArchiveFileInfo":{"properties":{"exchange":{"title":"Exchange","type":"string","nullable":true},"symbol":{"title":"Symbol","type":"string","nullable":true},"date":{"type":"string","title":"Date"},"size_mb":{"type":"number","title":"Size Mb"},"bars_total":{"title":"Bars Total","type":"integer","nullable":true},"bars_raw":{"title":"Bars Raw","type":"integer","nullable":true},"completeness":{"title":"Completeness","type":"number","nullable":true}},"type":"object","required":["date","size_mb"],"title":"ArchiveFileInfo"},"AutoWatchlistFilters":{"properties":{"min_win_rate":{"title":"Min Win Rate","description":"Minimum 30d win rate (0-1)","type":"number","maximum":1.0,"minimum":0.0,"nullable":true},"min_profit_factor":{"title":"Min Profit Factor","description":"Minimum profit factor","type":"number","minimum":0.0,"nullable":true},"min_trades_30d":{"title":"Min Trades 30D","description":"Minimum trades in 30d. Defaults to 30 when filters are provided, to prevent tiny-sample wallets (e.g. '100% WR over 2 trades') from passing. Pass 0 explicitly to disable.","type":"integer","minimum":0.0,"nullable":true},"min_avg_duration_hours":{"title":"Min Avg Duration Hours","description":"Min avg trade duration (hours)","type":"number","minimum":0.0,"nullable":true},"exclude_types":{"title":"Exclude Types","description":"Trader types to exclude, e.g. ['hft','scalper']","items":{"type":"string"},"type":"array","nullable":true}},"type":"object","title":"AutoWatchlistFilters"},"AutoWatchlistRequest":{"properties":{"mode":{"type":"string","title":"Mode","description":"Source mode (currently only 'top_traders')","default":"top_traders"},"max_wallets":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Max Wallets","description":"Max wallets in auto-managed set","default":15},"min_score":{"type":"integer","maximum":100.0,"minimum":0.0,"title":"Min Score","description":"Minimum top-trader score","default":80},"filters":{"$ref":"#/components/schemas/AutoWatchlistFilters","nullable":true},"auto_refresh":{"type":"boolean","title":"Auto Refresh","description":"Re-evaluate daily and update automatically","default":true}},"type":"object","title":"AutoWatchlistRequest"},"BacktestArchiveDownloadResponse":{"properties":{"exchange":{"title":"Exchange","type":"string","nullable":true},"symbol":{"title":"Symbol","type":"string","nullable":true},"files":{"items":{"$ref":"#/components/schemas/ArchiveDownloadLink"},"type":"array","title":"Files"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["files","count"],"title":"BacktestArchiveDownloadResponse"},"BacktestArchivesResponse":{"properties":{"files":{"items":{"$ref":"#/components/schemas/ArchiveFileInfo"},"type":"array","title":"Files"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["files","count"],"title":"BacktestArchivesResponse"},"BacktestFundingEntry":{"properties":{"time":{"type":"integer","title":"Time"},"symbol":{"type":"string","title":"Symbol"},"exchange":{"type":"string","title":"Exchange"},"funding_rate":{"title":"Funding Rate","type":"number","nullable":true},"open_interest":{"title":"Open Interest","type":"number","nullable":true},"mark_price":{"title":"Mark Price","type":"number","nullable":true}},"type":"object","required":["time","symbol","exchange"],"title":"BacktestFundingEntry"},"BacktestFundingResponse":{"properties":{"symbol":{"type":"string","title":"Symbol"},"exchange":{"type":"string","title":"Exchange"},"count":{"type":"integer","title":"Count"},"data":{"items":{"$ref":"#/components/schemas/BacktestFundingEntry"},"type":"array","title":"Data"}},"type":"object","required":["symbol","exchange","count","data"],"title":"BacktestFundingResponse"},"BacktestHLLiquidationEvent":{"properties":{"time":{"type":"integer","title":"Time"},"tid":{"type":"integer","title":"Tid"},"coin":{"type":"string","title":"Coin"},"symbol":{"type":"string","title":"Symbol"},"side":{"type":"string","title":"Side"},"px":{"title":"Px","type":"number","nullable":true},"sz":{"title":"Sz","type":"number","nullable":true},"usd":{"title":"Usd","type":"number","nullable":true},"method":{"title":"Method","type":"string","nullable":true},"mark_px":{"title":"Mark Px","type":"number","nullable":true},"liquidated_user":{"title":"Liquidated User","type":"string","nullable":true},"hash":{"title":"Hash","type":"string","nullable":true}},"type":"object","required":["time","tid","coin","symbol","side"],"title":"BacktestHLLiquidationEvent","description":"One exact Hyperliquid liquidation fill (market or backstop)."},"BacktestHLLiquidationsResponse":{"properties":{"coin":{"title":"Coin","type":"string","nullable":true},"count":{"type":"integer","title":"Count"},"data":{"items":{"$ref":"#/components/schemas/BacktestHLLiquidationEvent"},"type":"array","title":"Data"}},"type":"object","required":["coin","count","data"],"title":"BacktestHLLiquidationsResponse"},"BacktestKline":{"properties":{"t":{"type":"integer","title":"T"},"o":{"type":"number","title":"O"},"h":{"type":"number","title":"H"},"l":{"type":"number","title":"L"},"c":{"type":"number","title":"C"},"v":{"type":"number","title":"V"},"qv":{"title":"Qv","type":"number","nullable":true}},"type":"object","required":["t","o","h","l","c","v"],"title":"BacktestKline"},"BacktestKlinesResponse":{"properties":{"symbol":{"type":"string","title":"Symbol"},"exchange":{"type":"string","title":"Exchange"},"interval":{"type":"string","title":"Interval"},"count":{"type":"integer","title":"Count"},"klines":{"items":{"$ref":"#/components/schemas/BacktestKline"},"type":"array","title":"Klines"}},"type":"object","required":["symbol","exchange","interval","count","klines"],"title":"BacktestKlinesResponse"},"BacktestLiquidationEntry":{"properties":{"time":{"type":"integer","title":"Time"},"symbol":{"type":"string","title":"Symbol"},"long_liq_usd":{"title":"Long Liq Usd","type":"number","nullable":true},"short_liq_usd":{"title":"Short Liq Usd","type":"number","nullable":true},"total_liq_usd":{"title":"Total Liq Usd","type":"number","nullable":true}},"type":"object","required":["time","symbol"],"title":"BacktestLiquidationEntry"},"BacktestLiquidationsResponse":{"properties":{"symbol":{"title":"Symbol","type":"string","nullable":true},"count":{"type":"integer","title":"Count"},"data":{"items":{"$ref":"#/components/schemas/BacktestLiquidationEntry"},"type":"array","title":"Data"}},"type":"object","required":["symbol","count","data"],"title":"BacktestLiquidationsResponse"},"BacktestNewsEvent":{"properties":{"time":{"type":"integer","title":"Time"},"event_id":{"type":"string","title":"Event Id"},"symbol":{"type":"string","title":"Symbol"},"source":{"title":"Source","type":"string","nullable":true},"title":{"title":"Title","type":"string","nullable":true},"url":{"title":"Url","type":"string","nullable":true},"category":{"title":"Category","type":"string","nullable":true},"impact_score":{"title":"Impact Score","type":"number","nullable":true},"bias":{"title":"Bias","type":"number","nullable":true},"severity":{"title":"Severity","type":"number","nullable":true},"confidence":{"title":"Confidence","type":"number","nullable":true},"match_mode":{"title":"Match Mode","type":"string","nullable":true},"corroboration":{"title":"Corroboration","type":"integer","nullable":true},"ret_15m":{"title":"Ret 15M","type":"number","nullable":true},"ret_1h":{"title":"Ret 1H","type":"number","nullable":true},"ret_4h":{"title":"Ret 4H","type":"number","nullable":true},"vol_mult":{"title":"Vol Mult","type":"number","nullable":true},"oi_change_pct":{"title":"Oi Change Pct","type":"number","nullable":true},"funding_shift":{"title":"Funding Shift","type":"number","nullable":true},"abnormality":{"title":"Abnormality","type":"number","nullable":true}},"type":"object","required":["time","event_id","symbol"],"title":"BacktestNewsEvent","description":"One archived market-moving news event, with its measured market response.\n\nOnly events that cleared the impact threshold are ever archived — this is a\nfiltered catalyst tape, not a news archive. The response columns are filled\nin as each window matures, so a recent row legitimately carries nulls."},"BacktestNewsEventsResponse":{"properties":{"symbol":{"title":"Symbol","type":"string","nullable":true},"count":{"type":"integer","title":"Count"},"data":{"items":{"$ref":"#/components/schemas/BacktestNewsEvent"},"type":"array","title":"Data"}},"type":"object","required":["symbol","count","data"],"title":"BacktestNewsEventsResponse"},"BacktestSnapshotEntry":{"properties":{"time":{"type":"integer","title":"Time"},"data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"items":{},"type":"array"},{"type":"null"}],"title":"Data"}},"type":"object","required":["time"],"title":"BacktestSnapshotEntry"},"BacktestSnapshotTypeInfo":{"properties":{"data_type":{"type":"string","title":"Data Type"},"count":{"type":"integer","title":"Count"},"earliest":{"title":"Earliest","type":"integer","nullable":true},"latest":{"title":"Latest","type":"integer","nullable":true}},"type":"object","required":["data_type","count"],"title":"BacktestSnapshotTypeInfo"},"BacktestSnapshotTypesResponse":{"properties":{"types":{"items":{"$ref":"#/components/schemas/BacktestSnapshotTypeInfo"},"type":"array","title":"Types"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["types","count"],"title":"BacktestSnapshotTypesResponse"},"BacktestSnapshotsResponse":{"properties":{"data_type":{"type":"string","title":"Data Type"},"count":{"type":"integer","title":"Count"},"snapshots":{"items":{"$ref":"#/components/schemas/BacktestSnapshotEntry"},"type":"array","title":"Snapshots"}},"type":"object","required":["data_type","count","snapshots"],"title":"BacktestSnapshotsResponse"},"BacktestStatusResponse":{"properties":{"bt_klines_rows":{"type":"integer","title":"Bt Klines Rows","default":0},"bt_funding_rows":{"type":"integer","title":"Bt Funding Rows","default":0},"bt_liquidations_rows":{"type":"integer","title":"Bt Liquidations Rows","default":0},"bt_snapshots_rows":{"type":"integer","title":"Bt Snapshots Rows","default":0},"klines_earliest":{"title":"Klines Earliest","type":"integer","nullable":true},"klines_latest":{"title":"Klines Latest","type":"integer","nullable":true},"db_size_mb":{"type":"number","title":"Db Size Mb","default":0},"tracked_symbols":{"type":"integer","title":"Tracked Symbols","default":0}},"type":"object","title":"BacktestStatusResponse"},"BacktestSymbolInfo":{"properties":{"symbol":{"type":"string","title":"Symbol"},"exchange":{"type":"string","title":"Exchange"},"is_active":{"type":"boolean","title":"Is Active","default":true},"earliest":{"title":"Earliest","type":"integer","nullable":true},"latest":{"title":"Latest","type":"integer","nullable":true}},"type":"object","required":["symbol","exchange"],"title":"BacktestSymbolInfo"},"BacktestSymbolsResponse":{"properties":{"symbols":{"items":{"$ref":"#/components/schemas/BacktestSymbolInfo"},"type":"array","title":"Symbols"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["symbols","count"],"title":"BacktestSymbolsResponse"},"BasketGroup":{"properties":{"id":{"type":"string","title":"Id","description":"Group letter A-F"},"name":{"type":"string","title":"Name"},"icon":{"type":"string","title":"Icon","description":"Display emoji for the group","default":""},"description":{"type":"string","title":"Description","description":"One-line summary of the group","default":""},"baskets":{"items":{"$ref":"#/components/schemas/BasketInfo"},"type":"array","title":"Baskets"}},"type":"object","required":["id","name","baskets"],"title":"BasketGroup","description":"A thematic group of meta-baskets (A-F)."},"BasketInfo":{"properties":{"slug":{"type":"string","title":"Slug","description":"Stable id (matches the web-page anchor)"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"}},"type":"object","required":["slug","name","description"],"title":"BasketInfo","description":"One top-level strategy meta-basket."},"BollingerStateModel":{"properties":{"middle":{"title":"Middle","type":"number","nullable":true},"upper":{"title":"Upper","type":"number","nullable":true},"lower":{"title":"Lower","type":"number","nullable":true},"bandwidth_pct":{"title":"Bandwidth Pct","type":"number","nullable":true},"squeeze_percentile":{"title":"Squeeze Percentile","type":"number","nullable":true},"in_squeeze":{"type":"boolean","title":"In Squeeze","default":false},"days_in_squeeze":{"type":"integer","title":"Days In Squeeze","default":0},"expanding":{"type":"boolean","title":"Expanding","default":false}},"type":"object","title":"BollingerStateModel"},"BtcPriceHistoryEntry":{"properties":{"date":{"type":"string","title":"Date"},"price":{"type":"number","title":"Price"},"ma200":{"title":"Ma200","type":"number","nullable":true}},"type":"object","required":["date","price"],"title":"BtcPriceHistoryEntry","description":"Single entry in BTC price history."},"BtcPriceHistoryResponse":{"properties":{"history":{"items":{"$ref":"#/components/schemas/BtcPriceHistoryEntry"},"type":"array","title":"History"}},"type":"object","required":["history"],"title":"BtcPriceHistoryResponse","description":"BTC price history with 200D MA."},"CacheStatus":{"properties":{"has_data":{"type":"boolean","title":"Has Data"},"age_seconds":{"title":"Age Seconds","type":"number","nullable":true}},"type":"object","required":["has_data"],"title":"CacheStatus","description":"Status of a single cache entry."},"CategoryCoin":{"properties":{"symbol":{"type":"string","title":"Symbol"},"name":{"type":"string","title":"Name","default":""},"current_price":{"title":"Current Price","type":"number","nullable":true},"market_cap":{"type":"number","title":"Market Cap","default":0},"market_cap_rank":{"type":"integer","title":"Market Cap Rank","default":0},"total_volume":{"type":"number","title":"Total Volume","default":0},"price_change_24h_pct":{"type":"number","title":"Price Change 24H Pct","default":0},"price_change_7d_pct":{"type":"number","title":"Price Change 7D Pct","default":0},"image_url":{"type":"string","title":"Image Url","default":""}},"type":"object","required":["symbol"],"title":"CategoryCoin","description":"Compact coin record inside a curated category group."},"ChallengeRequest":{"properties":{"wallet_address":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$","title":"Wallet Address"}},"type":"object","required":["wallet_address"],"title":"ChallengeRequest"},"ChallengeResponse":{"properties":{"message":{"type":"string","title":"Message"},"nonce":{"type":"string","title":"Nonce"}},"type":"object","required":["message","nonce"],"title":"ChallengeResponse"},"CoinCategoriesResponse":{"properties":{"categories":{"items":{"type":"string"},"type":"array","title":"Categories"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["categories","count"],"title":"CoinCategoriesResponse","description":"All unique coin categories."},"CoinCategoryGroup":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"coin_count":{"type":"integer","title":"Coin Count"},"coins":{"items":{"$ref":"#/components/schemas/CategoryCoin"},"type":"array","title":"Coins"}},"type":"object","required":["id","name","description","coin_count","coins"],"title":"CoinCategoryGroup","description":"A single curated category theme with its resolved coins."},"CoinCategoryGroupsResponse":{"properties":{"categories":{"items":{"$ref":"#/components/schemas/CoinCategoryGroup"},"type":"array","title":"Categories"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["categories","count"],"title":"CoinCategoryGroupsResponse","description":"Curated category groups (AI, Platform, Privacy, RWA, NFT, ...)."},"CoinDepthHistoryResponse":{"properties":{"coin":{"type":"string","title":"Coin"},"minutes":{"type":"integer","title":"Minutes"},"count":{"type":"integer","title":"Count"},"history":{"items":{"$ref":"#/components/schemas/CoinDepthSnapshot"},"type":"array","title":"History"}},"type":"object","required":["coin","minutes","count","history"],"title":"CoinDepthHistoryResponse"},"CoinDepthSnapshot":{"properties":{"coin":{"type":"string","title":"Coin"},"ts":{"type":"integer","title":"Ts"},"mid_price":{"type":"number","title":"Mid Price"},"spread_bps":{"title":"Spread Bps","type":"number","nullable":true},"bid_levels":{"type":"integer","title":"Bid Levels"},"ask_levels":{"type":"integer","title":"Ask Levels"},"depth_usd":{"$ref":"#/components/schemas/DepthBuckets","nullable":true},"total_depth_25bps_usd":{"title":"Total Depth 25Bps Usd","type":"number","nullable":true},"imbalance_10bps":{"title":"Imbalance 10Bps","type":"number","nullable":true},"open_interest_usd":{"title":"Open Interest Usd","type":"number","nullable":true}},"type":"object","required":["coin","ts","mid_price","bid_levels","ask_levels"],"title":"CoinDepthSnapshot"},"CoinListResponse":{"properties":{"coins":{"items":{"$ref":"#/components/schemas/CoinProfile"},"type":"array","title":"Coins"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"per_page":{"type":"integer","title":"Per Page"}},"type":"object","required":["coins","total","page","per_page"],"title":"CoinListResponse","description":"Paginated coin list response."},"CoinProfile":{"properties":{"coingecko_id":{"type":"string","title":"Coingecko Id","default":""},"symbol":{"type":"string","title":"Symbol"},"name":{"type":"string","title":"Name"},"current_price":{"title":"Current Price","type":"number","nullable":true},"market_cap":{"type":"number","title":"Market Cap","default":0},"market_cap_rank":{"type":"integer","title":"Market Cap Rank","default":0},"circulating_supply":{"type":"number","title":"Circulating Supply","default":0},"max_supply":{"title":"Max Supply","type":"number","nullable":true},"total_supply":{"type":"number","title":"Total Supply","default":0},"total_volume":{"type":"number","title":"Total Volume","default":0},"price_change_24h_pct":{"type":"number","title":"Price Change 24H Pct","default":0},"price_change_7d_pct":{"type":"number","title":"Price Change 7D Pct","default":0},"price_change_30d_pct":{"type":"number","title":"Price Change 30D Pct","default":0},"ath":{"type":"number","title":"Ath","default":0},"ath_change_pct":{"type":"number","title":"Ath Change Pct","default":0},"ath_date":{"type":"string","title":"Ath Date","default":""},"atl":{"type":"number","title":"Atl","default":0},"atl_change_pct":{"type":"number","title":"Atl Change Pct","default":0},"atl_date":{"type":"string","title":"Atl Date","default":""},"categories":{"items":{"type":"string"},"type":"array","title":"Categories","default":[]},"description":{"type":"string","title":"Description","default":""},"image_url":{"type":"string","title":"Image Url","default":""},"last_updated":{"type":"string","title":"Last Updated","default":""},"cap_tier":{"type":"string","title":"Cap Tier","default":""}},"type":"object","required":["symbol","name"],"title":"CoinProfile","description":"Full coin profile."},"CoinRegimeEntry":{"properties":{"coin":{"type":"string","title":"Coin"},"regime":{"type":"string","title":"Regime","description":"deep_book | oi_price_divergence | depth_withdrawal | post_cascade_impaired | neutral"},"confidence":{"type":"number","title":"Confidence","default":0.0},"low_confidence":{"type":"boolean","title":"Low Confidence","default":false},"baseline_minutes":{"type":"integer","title":"Baseline Minutes","default":0},"signals":{"additionalProperties":true,"type":"object","title":"Signals"}},"type":"object","required":["coin","regime"],"title":"CoinRegimeEntry"},"CoinSearchResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/CoinProfile"},"type":"array","title":"Results"},"query":{"type":"string","title":"Query"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["results","query","count"],"title":"CoinSearchResponse","description":"Search results."},"CoinTopResponse":{"properties":{"coins":{"items":{"$ref":"#/components/schemas/CoinProfile"},"type":"array","title":"Coins"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["coins","count"],"title":"CoinTopResponse","description":"Top coins by market cap."},"ComponentScoreSchema":{"properties":{"name":{"type":"string","title":"Name"},"score":{"type":"integer","title":"Score"},"weight":{"type":"number","title":"Weight"},"description":{"type":"string","title":"Description"},"details":{"additionalProperties":true,"type":"object","title":"Details","default":{}}},"type":"object","required":["name","score","weight","description"],"title":"ComponentScoreSchema","description":"Individual component score."},"Credentials":{"properties":{"email":{"type":"string","title":"Email"},"password":{"type":"string","title":"Password"}},"type":"object","required":["email","password"],"title":"Credentials"},"CrossExchangeFunding":{"properties":{"coin":{"type":"string","title":"Coin"},"binance":{"additionalProperties":true,"type":"object","title":"Binance","default":{}},"hyperliquid":{"additionalProperties":true,"type":"object","title":"Hyperliquid","default":{}},"cross_exchange":{"title":"Cross Exchange","nullable":true}},"type":"object","required":["coin"],"title":"CrossExchangeFunding","description":"Cross-exchange funding rate comparison."},"CrossExchangeOI":{"properties":{"coin":{"type":"string","title":"Coin"},"binance":{"additionalProperties":true,"type":"object","title":"Binance","default":{}},"hyperliquid":{"additionalProperties":true,"type":"object","title":"Hyperliquid","default":{}},"cross_exchange":{"title":"Cross Exchange","nullable":true}},"type":"object","required":["coin"],"title":"CrossExchangeOI","description":"Cross-exchange open interest comparison."},"CrossExchangeSummary":{"properties":{"coin":{"type":"string","title":"Coin"},"binance":{"additionalProperties":true,"type":"object","title":"Binance","default":{}},"hyperliquid":{"additionalProperties":true,"type":"object","title":"Hyperliquid","default":{}},"cross_exchange":{"title":"Cross Exchange","nullable":true}},"type":"object","required":["coin"],"title":"CrossExchangeSummary","description":"Combined cross-exchange derivatives overview."},"CurrentRegime":{"properties":{"regime":{"title":"Regime","description":"Machine id, null on cold start","type":"string","nullable":true},"id":{"title":"Id","type":"integer","nullable":true},"anchor":{"title":"Anchor","type":"string","nullable":true},"name":{"title":"Name","type":"string","nullable":true},"rationale":{"title":"Rationale","description":"Why this regime was selected","type":"string","nullable":true},"stage":{"title":"Stage","description":"Sub-stage for Distribution (early_distribution|active_deleveraging) and Speculative Euphoria (alt_expansion|blow_off)","type":"string","nullable":true},"stage_label":{"title":"Stage Label","description":"Human label for the sub-stage","type":"string","nullable":true},"euphoria_score":{"title":"Euphoria Score","description":"0-100 froth gauge, present only for Speculative Euphoria","type":"integer","nullable":true},"signals":{"additionalProperties":true,"type":"object","title":"Signals","description":"The classifier inputs (health scores, condition, BTC dominance, volatility / meme / security overlays, OI, liquidations) — transparency. ALWAYS LIVE: these are read at `as_of`, whereas regime/id/name/rationale describe the COMMITTED regime, which the dwell gate holds until a new candidate confirms. Compare against `raw` to see the two diverge."},"raw":{"description":"The live, ungated classification — what the cascade says about `signals` right now. Null only on a cold start.","$ref":"#/components/schemas/RawClassification","nullable":true},"as_of":{"title":"As Of","description":"ISO-8601 timestamp of the classification","type":"string","nullable":true},"in_regime_since":{"title":"In Regime Since","description":"ISO-8601 ts the current committed regime was ENTERED — advances only when the regime actually changes, so consumers can show how long it has held","type":"string","nullable":true},"pending":{"description":"Candidate regime awaiting confirmation by the anti-churn dwell gate. Null exactly when the live cascade already agrees with the committed regime (identical to `raw.matches_committed` being true) — nothing is accumulating, so there is no candidate to describe. For a field that is always populated, read `stability`.","$ref":"#/components/schemas/PendingRegime","nullable":true},"stability":{"description":"Continuous stability of the committed regime — always present once the first refresh lands, candidate or not","$ref":"#/components/schemas/RegimeStability","nullable":true},"thresholds":{"description":"Distance from each cascade cutoff to flipping, for building client-side hysteresis without guessing where the boundaries are","$ref":"#/components/schemas/RegimeThresholds","nullable":true}},"type":"object","title":"CurrentRegime","description":"The single regime the market is currently classified into."},"CycleIndicatorResponse":{"properties":{"indicator":{"type":"string","title":"Indicator"},"data":{"title":"Data"}},"type":"object","required":["indicator","data"],"title":"CycleIndicatorResponse","description":"Single BTC cycle indicator."},"CycleIndicatorsResponse":{"properties":{"indicators":{"additionalProperties":true,"type":"object","title":"Indicators"},"available":{"items":{"type":"string"},"type":"array","title":"Available"}},"type":"object","required":["indicators","available"],"title":"CycleIndicatorsResponse","description":"All BTC cycle indicators."},"DailySnapshotArchiveListResponse":{"properties":{"count":{"type":"integer","title":"Count"},"dates":{"items":{"type":"string"},"type":"array","title":"Dates"}},"type":"object","required":["count","dates"],"title":"DailySnapshotArchiveListResponse"},"DailySnapshotArchiveResponse":{"properties":{"date":{"type":"string","title":"Date"},"snapshot":{"additionalProperties":true,"type":"object","title":"Snapshot"}},"type":"object","required":["date","snapshot"],"title":"DailySnapshotArchiveResponse"},"DailySnapshotResponse":{"properties":{"available_sections":{"items":{"type":"string"},"type":"array","title":"Available Sections","default":[]},"market_health":{"additionalProperties":true,"type":"object","title":"Market Health","default":{}}},"additionalProperties":true,"type":"object","title":"DailySnapshotResponse","description":"Full daily snapshot containing all current data from all collectors.\n\nKeys are collector names (e.g., binance_spot, hyperliquid, fear_greed, etc.)\nwith their respective daily data payloads."},"DepthBuckets":{"properties":{"bid":{"additionalProperties":{"type":"number"},"type":"object","title":"Bid"},"ask":{"additionalProperties":{"type":"number"},"type":"object","title":"Ask"}},"type":"object","title":"DepthBuckets","description":"Cumulative bid/ask notional within bps buckets from mid."},"DepthResponse":{"properties":{"as_of":{"type":"integer","title":"As Of"},"universe_size":{"type":"integer","title":"Universe Size"},"coins":{"items":{"$ref":"#/components/schemas/CoinDepthSnapshot"},"type":"array","title":"Coins"}},"type":"object","required":["as_of","universe_size","coins"],"title":"DepthResponse"},"DerivativesHistoryResponse":{"properties":{"history":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"History"}},"type":"object","required":["history"],"title":"DerivativesHistoryResponse","description":"Daily derivatives history derived from the local funding + OI archives."},"DerivativesSummary":{"properties":{"symbol":{"type":"string","title":"Symbol"},"funding":{"additionalProperties":true,"type":"object","title":"Funding","default":{}},"open_interest":{"additionalProperties":true,"type":"object","title":"Open Interest","default":{}},"long_short":{"additionalProperties":true,"type":"object","title":"Long Short","default":{}}},"type":"object","required":["symbol"],"title":"DerivativesSummary","description":"All-in-one derivatives summary."},"DormancyMetrics":{"properties":{"mvrv":{"title":"Mvrv","type":"number","nullable":true},"mvrv_7d_change_pct":{"title":"Mvrv 7D Change Pct","type":"number","nullable":true},"mvrv_30d_change_pct":{"title":"Mvrv 30D Change Pct","type":"number","nullable":true},"active_addresses":{"title":"Active Addresses","type":"number","nullable":true},"active_addresses_7d_change_pct":{"title":"Active Addresses 7D Change Pct","type":"number","nullable":true},"total_nonzero_addresses":{"title":"Total Nonzero Addresses","type":"number","nullable":true},"issuance_usd_24h":{"title":"Issuance Usd 24H","type":"number","nullable":true},"exchange_inflow_usd_24h":{"title":"Exchange Inflow Usd 24H","type":"number","nullable":true},"exchange_outflow_usd_24h":{"title":"Exchange Outflow Usd 24H","type":"number","nullable":true},"exchange_net_flow_usd_24h":{"title":"Exchange Net Flow Usd 24H","type":"number","nullable":true},"price_usd":{"title":"Price Usd","type":"number","nullable":true}},"type":"object","title":"DormancyMetrics"},"DormancyResponse":{"properties":{"as_of":{"type":"integer","title":"As Of"},"as_of_date":{"type":"string","title":"As Of Date"},"metrics":{"$ref":"#/components/schemas/DormancyMetrics"},"mvrv_signal":{"$ref":"#/components/schemas/MVRVSignal"},"samples":{"type":"integer","title":"Samples"}},"type":"object","required":["as_of","as_of_date","metrics","mvrv_signal","samples"],"title":"DormancyResponse"},"DryPowderScoreResponse":{"properties":{"current_usd":{"title":"Current Usd","type":"number","nullable":true},"mean_30d":{"title":"Mean 30D","type":"number","nullable":true},"stdev_30d":{"title":"Stdev 30D","type":"number","nullable":true},"zscore":{"title":"Zscore","type":"number","nullable":true},"samples":{"title":"Samples","type":"integer","nullable":true},"signal":{"type":"string","title":"Signal","description":"accumulating | neutral | depleting | unknown"},"reason":{"title":"Reason","type":"string","nullable":true}},"type":"object","required":["signal"],"title":"DryPowderScoreResponse"},"DvolHistoryPoint":{"properties":{"date":{"type":"string","title":"Date"},"dvol":{"type":"number","title":"Dvol"}},"type":"object","required":["date","dvol"],"title":"DvolHistoryPoint"},"ETFFlowsResponse":{"properties":{"asset":{"type":"string","title":"Asset"},"flows":{"title":"Flows"}},"type":"object","required":["asset","flows"],"title":"ETFFlowsResponse","description":"ETF flow history."},"EventCatalystModel":{"properties":{"event_type":{"type":"string","enum":["unlock","macro_print","depeg","mint"],"title":"Event Type"},"title":{"type":"string","title":"Title"},"date":{"type":"string","title":"Date"},"days_until":{"type":"integer","title":"Days Until"},"symbols":{"items":{"type":"string"},"type":"array","title":"Symbols","default":[]},"bias":{"type":"string","enum":["long","short","neutral","risk_flag","mixed"],"title":"Bias"},"magnitude":{"title":"Magnitude","type":"number","nullable":true},"unlocked_value_usd":{"title":"Unlocked Value Usd","type":"number","nullable":true},"pct_of_fdv":{"title":"Pct Of Fdv","type":"number","nullable":true},"deviation_bps":{"title":"Deviation Bps","type":"number","nullable":true},"macro_class":{"title":"Macro Class","type":"string","nullable":true},"delta_usd":{"title":"Delta Usd","type":"number","nullable":true},"pct_of_supply":{"title":"Pct Of Supply","type":"number","nullable":true},"source":{"type":"string","title":"Source","default":""}},"type":"object","required":["event_type","title","date","days_until","bias"],"title":"EventCatalystModel"},"EventPendingItem":{"properties":{"event_type":{"type":"string","enum":["unlock","macro_print","depeg","mint"],"title":"Event Type"},"date":{"type":"string","title":"Date"},"days_until":{"type":"integer","title":"Days Until"},"bias":{"type":"string","enum":["long","short","neutral","risk_flag","mixed"],"title":"Bias"},"magnitude":{"title":"Magnitude","type":"number","nullable":true}},"type":"object","required":["event_type","date","days_until","bias"],"title":"EventPendingItem"},"EventRegimeRefreshResponse":{"properties":{"refreshed":{"type":"boolean","title":"Refreshed"},"events":{"type":"integer","title":"Events"},"event_risk_score":{"type":"number","title":"Event Risk Score"},"timestamp":{"type":"string","title":"Timestamp"}},"type":"object","required":["refreshed","events","event_risk_score","timestamp"],"title":"EventRegimeRefreshResponse"},"EventRegimeResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/EventCatalystModel"},"type":"array","title":"Items"},"count":{"type":"integer","title":"Count"},"window_days":{"type":"integer","title":"Window Days"},"event_risk_score":{"type":"number","title":"Event Risk Score"},"band":{"type":"string","enum":["dormant","quiet","elevated","heavy","critical"],"title":"Band"},"timestamp":{"type":"string","title":"Timestamp"}},"type":"object","required":["items","count","window_days","event_risk_score","band","timestamp"],"title":"EventRegimeResponse","description":"Forward event calendar — the main /event/regime payload."},"EventRegimeScoreResponse":{"properties":{"as_of":{"type":"string","title":"As Of"},"event_risk_score":{"type":"number","title":"Event Risk Score","description":"0-100; baseline 0 (absence = no event risk)"},"band":{"type":"string","enum":["dormant","quiet","elevated","heavy","critical"],"title":"Band"},"unlock_subscore":{"type":"number","title":"Unlock Subscore","default":0.0},"macro_subscore":{"type":"number","title":"Macro Subscore","default":0.0},"depeg_subscore":{"type":"number","title":"Depeg Subscore","default":0.0},"events_7d":{"type":"integer","title":"Events 7D","default":0},"events_30d":{"type":"integer","title":"Events 30D","default":0},"counts":{"additionalProperties":true,"type":"object","title":"Counts"},"partial":{"type":"boolean","title":"Partial","default":false},"inputs_available":{"items":{"type":"string"},"type":"array","title":"Inputs Available","default":[]},"sector_rotation":{"title":"Sector Rotation","description":"Live-only CoinGecko sector leaders/laggards; null on backfill","additionalProperties":true,"type":"object","nullable":true}},"type":"object","required":["as_of","event_risk_score","band"],"title":"EventRegimeScoreResponse","description":"Market-wide Event Risk composite + sub-scores + live-only sidecars."},"EventSymbolOverlayResponse":{"properties":{"symbol":{"type":"string","title":"Symbol"},"hl_symbol":{"title":"Hl Symbol","type":"string","nullable":true},"pending":{"items":{"$ref":"#/components/schemas/EventPendingItem"},"type":"array","title":"Pending","default":[]},"net_bias":{"type":"string","enum":["long","short","neutral","risk_flag","mixed"],"title":"Net Bias","default":"neutral"},"net_magnitude":{"type":"number","title":"Net Magnitude","default":0.0},"nearest_event_days":{"title":"Nearest Event Days","type":"integer","nullable":true},"timestamp":{"type":"string","title":"Timestamp"}},"type":"object","required":["symbol","timestamp"],"title":"EventSymbolOverlayResponse","description":"Per-symbol catalyst overlay (Pro+)."},"ExchangeBreakdown":{"properties":{"symbols":{"additionalProperties":{"type":"number"},"type":"object","title":"Symbols","description":"Balance by stablecoin symbol"},"chains":{"additionalProperties":{"type":"number"},"type":"object","title":"Chains","description":"Balance by chain"},"total_usd":{"type":"number","title":"Total Usd"}},"type":"object","required":["total_usd"],"title":"ExchangeBreakdown"},"ExchangeDetailResponse":{"properties":{"exchange":{"$ref":"#/components/schemas/ExchangeInfo"},"disclosure":{"type":"string","title":"Disclosure"}},"type":"object","required":["exchange","disclosure"],"title":"ExchangeDetailResponse"},"ExchangeFlowsResponse":{"properties":{"symbol":{"type":"string","title":"Symbol"},"exchange_filter":{"title":"Exchange Filter","type":"string","nullable":true},"as_of":{"type":"integer","title":"As Of"},"windows":{"additionalProperties":{"$ref":"#/components/schemas/WindowFlow"},"type":"object","title":"Windows"},"per_exchange_24h":{"additionalProperties":{"$ref":"#/components/schemas/WindowFlow"},"type":"object","title":"Per Exchange 24H"},"by_chain":{"additionalProperties":{"additionalProperties":{"$ref":"#/components/schemas/WindowFlow"},"type":"object"},"type":"object","title":"By Chain","default":{}},"chains_covered":{"items":{"type":"string"},"type":"array","title":"Chains Covered","default":[]},"spike_zscore_1h":{"title":"Spike Zscore 1H","type":"number","nullable":true},"spike_zscore_24h":{"title":"Spike Zscore 24H","type":"number","nullable":true}},"type":"object","required":["symbol","as_of","windows","per_exchange_24h"],"title":"ExchangeFlowsResponse"},"ExchangeInfo":{"properties":{"slug":{"type":"string","title":"Slug"},"name":{"type":"string","title":"Name"},"kind":{"title":"Kind","type":"string","nullable":true},"website":{"title":"Website","type":"string","nullable":true},"tagline":{"title":"Tagline","type":"string","nullable":true},"about":{"title":"About","type":"string","nullable":true},"founded":{"title":"Founded","type":"string","nullable":true},"based":{"title":"Based","type":"string","nullable":true},"focus":{"items":{"type":"string"},"type":"array","title":"Focus","default":[]},"specs":{"$ref":"#/components/schemas/ExchangeSpecs","nullable":true},"signup_url":{"title":"Signup Url","type":"string","nullable":true},"signup_incentive":{"title":"Signup Incentive","type":"string","nullable":true},"referral_code":{"title":"Referral Code","type":"string","nullable":true},"is_referral_link":{"type":"boolean","title":"Is Referral Link","default":false}},"type":"object","required":["slug","name"],"title":"ExchangeInfo"},"ExchangeInfoResponse":{"properties":{"symbol":{"type":"string","title":"Symbol","default":""},"status":{"type":"string","title":"Status","default":""},"base_asset":{"type":"string","title":"Base Asset","default":""},"quote_asset":{"type":"string","title":"Quote Asset","default":""},"base_precision":{"type":"integer","title":"Base Precision","default":0},"quote_precision":{"type":"integer","title":"Quote Precision","default":0}},"type":"object","title":"ExchangeInfoResponse","description":"Exchange pair info."},"ExchangeListResponse":{"properties":{"exchanges":{"items":{"$ref":"#/components/schemas/ExchangeInfo"},"type":"array","title":"Exchanges"},"all_slugs":{"items":{"type":"string"},"type":"array","title":"All Slugs"},"count":{"type":"integer","title":"Count"},"disclosure":{"type":"string","title":"Disclosure"}},"type":"object","required":["exchanges","all_slugs","count","disclosure"],"title":"ExchangeListResponse"},"ExchangeSpecs":{"properties":{"instruments":{"items":{"type":"string"},"type":"array","title":"Instruments","default":[]},"coins":{"title":"Coins","type":"string","nullable":true},"max_leverage":{"title":"Max Leverage","type":"string","nullable":true},"kyc":{"title":"Kyc","type":"string","nullable":true},"custody":{"title":"Custody","type":"string","nullable":true},"fiat_onramp":{"title":"Fiat Onramp","type":"boolean","nullable":true}},"type":"object","title":"ExchangeSpecs"},"FearGreedHistoryEntry":{"properties":{"date":{"type":"string","title":"Date"},"value":{"type":"integer","title":"Value"},"classification":{"type":"string","title":"Classification"}},"type":"object","required":["date","value","classification"],"title":"FearGreedHistoryEntry","description":"Single entry in Fear & Greed history."},"FearGreedHistoryResponse":{"properties":{"history":{"items":{"$ref":"#/components/schemas/FearGreedHistoryEntry"},"type":"array","title":"History"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["history","count"],"title":"FearGreedHistoryResponse","description":"Fear & Greed history with dated entries."},"FearGreedResponse":{"properties":{"value":{"type":"integer","title":"Value"},"classification":{"type":"string","title":"Classification"},"sources":{"items":{"type":"string"},"type":"array","title":"Sources","default":[]},"individual_values":{"additionalProperties":{"type":"integer"},"type":"object","title":"Individual Values","default":{}}},"type":"object","required":["value","classification"],"title":"FearGreedResponse","description":"Fear & Greed index."},"FundingRateResponse":{"properties":{"symbol":{"type":"string","title":"Symbol"},"current_rate":{"type":"number","title":"Current Rate","default":0},"avg_rate":{"type":"number","title":"Avg Rate","default":0},"rates":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Rates","default":[]},"count":{"type":"integer","title":"Count","default":0}},"type":"object","required":["symbol"],"title":"FundingRateResponse","description":"Funding rate data."},"HLAutoWatchlistResponse":{"properties":{"managed":{"type":"boolean","title":"Managed"},"wallet_count":{"type":"integer","title":"Wallet Count"},"wallets":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Wallets"},"config":{"additionalProperties":true,"type":"object","title":"Config"},"next_refresh":{"title":"Next Refresh","type":"string","nullable":true},"updated_at":{"title":"Updated At","type":"string","nullable":true}},"type":"object","required":["managed","wallet_count","wallets","config"],"title":"HLAutoWatchlistResponse","description":"Auto-managed watchlist result."},"HLCandleResponse":{"properties":{"coin":{"type":"string","title":"Coin"},"interval":{"type":"string","title":"Interval"},"candles":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Candles"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["coin","interval","candles","count"],"title":"HLCandleResponse","description":"Hyperliquid OHLCV candles."},"HLCopySignalsResponse":{"properties":{"traders":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Traders"},"window_minutes":{"type":"integer","title":"Window Minutes"},"updated_at":{"title":"Updated At","type":"string","nullable":true}},"type":"object","required":["traders","window_minutes"],"title":"HLCopySignalsResponse","description":"Top traders with their recent signals in a single response."},"HLFundingRateResponse":{"properties":{"coin":{"type":"string","title":"Coin"},"current_rate":{"title":"Current Rate","type":"number","nullable":true},"history":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"History","default":[]}},"type":"object","required":["coin"],"title":"HLFundingRateResponse","description":"Hyperliquid funding rate data."},"HLL2BookResponse":{"properties":{"coin":{"type":"string","title":"Coin"},"bids":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Bids","default":[]},"asks":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Asks","default":[]}},"type":"object","required":["coin"],"title":"HLL2BookResponse","description":"Hyperliquid L2 order book."},"HLMetaResponse":{"properties":{"universe":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Universe","default":[]}},"type":"object","title":"HLMetaResponse","description":"Hyperliquid exchange metadata."},"HLOpenInterestResponse":{"properties":{"assets":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Assets"},"total_oi":{"type":"number","title":"Total Oi","default":0},"total_oi_usd":{"type":"number","title":"Total Oi Usd","default":0}},"type":"object","required":["assets"],"title":"HLOpenInterestResponse","description":"Hyperliquid open interest across all assets."},"HLPricesResponse":{"properties":{"prices":{"additionalProperties":{"type":"number"},"type":"object","title":"Prices"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["prices","count"],"title":"HLPricesResponse","description":"All Hyperliquid mid prices."},"HLSummaryResponse":{"properties":{"coin":{"type":"string","title":"Coin"},"price":{"title":"Price","type":"number","nullable":true},"funding_rate":{"title":"Funding Rate","type":"number","nullable":true},"open_interest":{"title":"Open Interest","type":"number","nullable":true},"mark_price":{"title":"Mark Price","type":"number","nullable":true},"oracle_price":{"title":"Oracle Price","type":"number","nullable":true},"day_volume":{"title":"Day Volume","type":"number","nullable":true},"avg_volume_30d":{"title":"Avg Volume 30D","type":"number","nullable":true},"volume_multiplier":{"title":"Volume Multiplier","type":"number","nullable":true},"volume_band":{"title":"Volume Band","type":"string","nullable":true},"funding_history":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Funding History","default":[]}},"type":"object","required":["coin"],"title":"HLSummaryResponse","description":"All-in-one Hyperliquid perp data."},"HLTopTradersResponse":{"properties":{"traders":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Traders"},"total_leaderboard_size":{"type":"integer","title":"Total Leaderboard Size","default":0},"after_filter":{"type":"integer","title":"After Filter","default":0},"updated_at":{"title":"Updated At","type":"string","nullable":true}},"type":"object","required":["traders"],"title":"HLTopTradersResponse","description":"Scored leaderboard of top Hyperliquid traders."},"HLTraderProfileResponse":{"properties":{"profile":{"additionalProperties":true,"type":"object","title":"Profile"},"updated_at":{"title":"Updated At","type":"string","nullable":true}},"type":"object","required":["profile"],"title":"HLTraderProfileResponse","description":"Single trader profile (on-demand for any address)."},"HLTraderProfilesResponse":{"properties":{"profiles":{"additionalProperties":true,"type":"object","title":"Profiles"},"updated_at":{"title":"Updated At","type":"string","nullable":true}},"type":"object","required":["profiles"],"title":"HLTraderProfilesResponse","description":"Trade profiles with win rate, PnL stats, and classification."},"HLWalletPositionsResponse":{"properties":{"wallets":{"additionalProperties":true,"type":"object","title":"Wallets"},"updated_at":{"title":"Updated At","type":"string","nullable":true}},"type":"object","required":["wallets"],"title":"HLWalletPositionsResponse","description":"Current positions for tracked wallets."},"HLWalletSearchResponse":{"properties":{"wallets":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Wallets"},"count":{"type":"integer","title":"Count"},"filters":{"additionalProperties":true,"type":"object","title":"Filters"},"pool_size":{"type":"integer","title":"Pool Size"},"updated_at":{"title":"Updated At","type":"string","nullable":true}},"type":"object","required":["wallets","count","filters","pool_size"],"title":"HLWalletSearchResponse","description":"Wallets from the cached top-leaderboard pool that satisfy the given gates."},"HLWalletSignalsResponse":{"properties":{"signals":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Signals"},"window_minutes":{"type":"integer","title":"Window Minutes"},"updated_at":{"title":"Updated At","type":"string","nullable":true}},"type":"object","required":["signals","window_minutes"],"title":"HLWalletSignalsResponse","description":"Position change signals (entry/exit/increase/decrease)."},"HLWalletTradesResponse":{"properties":{"address":{"type":"string","title":"Address"},"trades":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Trades"},"summary":{"additionalProperties":true,"type":"object","title":"Summary"},"updated_at":{"title":"Updated At","type":"string","nullable":true}},"type":"object","required":["address","trades","summary"],"title":"HLWalletTradesResponse","description":"Historical trades for a wallet with summary statistics."},"HLWatchlistResponse":{"properties":{"addresses":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Addresses"},"count":{"type":"integer","title":"Count"},"updated_at":{"title":"Updated At","type":"string","nullable":true}},"type":"object","required":["addresses","count"],"title":"HLWatchlistResponse","description":"Current watchlist addresses."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HashRibbonResponse":{"properties":{"as_of":{"type":"integer","title":"As Of"},"state":{"type":"string","title":"State","description":"capitulation | recovery | normal"},"days_in_state":{"type":"integer","title":"Days In State"},"last_crossover_ts":{"type":"integer","title":"Last Crossover Ts"},"hashrate_eh":{"type":"number","title":"Hashrate Eh"},"ma30_eh":{"type":"number","title":"Ma30 Eh"},"ma60_eh":{"type":"number","title":"Ma60 Eh"},"ratio_ma30_over_ma60":{"title":"Ratio Ma30 Over Ma60","type":"number","nullable":true},"compressed":{"type":"boolean","title":"Compressed"},"history_days":{"type":"integer","title":"History Days"}},"type":"object","required":["as_of","state","days_in_state","last_crossover_ts","hashrate_eh","ma30_eh","ma60_eh","compressed","history_days"],"title":"HashRibbonResponse"},"HealthCheckResponse":{"properties":{"status":{"type":"string","title":"Status"},"service":{"type":"string","title":"Service"}},"type":"object","required":["status","service"],"title":"HealthCheckResponse","description":"Health check response."},"HealthComponent":{"properties":{"name":{"type":"string","title":"Name"},"score":{"type":"number","title":"Score"},"weight":{"type":"number","title":"Weight"},"reason":{"type":"string","title":"Reason"},"raw":{"title":"Raw","additionalProperties":true,"type":"object","nullable":true}},"type":"object","required":["name","score","weight","reason"],"title":"HealthComponent"},"HealthComponentsResponse":{"properties":{"components":{"items":{"$ref":"#/components/schemas/ComponentScoreSchema"},"type":"array","title":"Components"}},"type":"object","required":["components"],"title":"HealthComponentsResponse","description":"All component details."},"HealthHistoryEntry":{"properties":{"date":{"type":"string","title":"Date"},"score":{"type":"integer","title":"Score"},"long_term_score":{"type":"integer","title":"Long Term Score"},"short_term_score":{"type":"integer","title":"Short Term Score"},"components":{"additionalProperties":true,"type":"object","title":"Components","default":{}}},"type":"object","required":["date","score","long_term_score","short_term_score"],"title":"HealthHistoryEntry","description":"Single entry in health score history."},"HealthHistoryResponse":{"properties":{"history":{"items":{"$ref":"#/components/schemas/HealthHistoryEntry"},"type":"array","title":"History"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["history","count"],"title":"HealthHistoryResponse","description":"Health score history."},"HealthRefreshResponse":{"properties":{"total_score":{"type":"integer","title":"Total Score"},"long_term_score":{"type":"integer","title":"Long Term Score"},"short_term_score":{"type":"integer","title":"Short Term Score"},"state":{"type":"string","title":"State"},"sentiment":{"type":"string","title":"Sentiment"},"refreshed":{"type":"boolean","title":"Refreshed"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp"}},"type":"object","required":["total_score","long_term_score","short_term_score","state","sentiment","refreshed","timestamp"],"title":"HealthRefreshResponse","description":"Response after force-refreshing health score."},"ImpliedVolEntry":{"properties":{"symbol":{"type":"string","title":"Symbol"},"dvol":{"title":"Dvol","type":"number","nullable":true},"dvol_change_24h":{"title":"Dvol Change 24H","type":"number","nullable":true},"realized_30":{"title":"Realized 30","type":"number","nullable":true},"vrp":{"title":"Vrp","type":"number","nullable":true},"history":{"items":{"$ref":"#/components/schemas/DvolHistoryPoint"},"type":"array","title":"History","default":[]},"term_structure":{"items":{"$ref":"#/components/schemas/TermStructurePoint"},"type":"array","title":"Term Structure","default":[]}},"type":"object","required":["symbol"],"title":"ImpliedVolEntry"},"ImpliedVolResponse":{"properties":{"as_of":{"type":"string","title":"As Of"},"detail":{"type":"boolean","title":"Detail","description":"True when history + term_structure are populated (Pro+)","default":false},"items":{"items":{"$ref":"#/components/schemas/ImpliedVolEntry"},"type":"array","title":"Items","default":[]}},"type":"object","required":["as_of"],"title":"ImpliedVolResponse","description":"BTC/ETH implied vol (Deribit DVOL) + variance risk premium. Current DVOL +\nVRP open to any key; full DVOL history + ATM term structure gated to Pro+."},"InvoiceListResponse":{"properties":{"invoices":{"items":{"$ref":"#/components/schemas/InvoiceResponse"},"type":"array","title":"Invoices"}},"type":"object","required":["invoices"],"title":"InvoiceListResponse"},"InvoiceResponse":{"properties":{"invoice_number":{"type":"string","title":"Invoice Number"},"plan":{"type":"string","title":"Plan"},"amount_usd":{"type":"number","title":"Amount Usd"},"amount_usdc":{"type":"number","title":"Amount Usdc"},"network":{"type":"string","title":"Network"},"tx_hash":{"type":"string","title":"Tx Hash"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["invoice_number","plan","amount_usd","amount_usdc","network","tx_hash","created_at"],"title":"InvoiceResponse"},"KlineResponse":{"properties":{"symbol":{"type":"string","title":"Symbol"},"interval":{"type":"string","title":"Interval"},"klines":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Klines"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["symbol","interval","klines","count"],"title":"KlineResponse","description":"OHLCV kline data."},"LiquidityRegimeResponse":{"properties":{"as_of":{"type":"integer","title":"As Of"},"universe_size":{"type":"integer","title":"Universe Size"},"coins":{"items":{"$ref":"#/components/schemas/CoinRegimeEntry"},"type":"array","title":"Coins"},"aggregate":{"$ref":"#/components/schemas/RegimeAggregate"},"composite_score":{"type":"number","title":"Composite Score","description":"0-100; higher = healthier market structure"},"sentiment":{"type":"string","title":"Sentiment","description":"healthy | leaning_healthy | neutral | leaning_fragile | fragile"}},"type":"object","required":["as_of","universe_size","coins","aggregate","composite_score","sentiment"],"title":"LiquidityRegimeResponse"},"LiquidityRegimeScoreResponse":{"properties":{"as_of":{"type":"integer","title":"As Of"},"composite_score":{"type":"number","title":"Composite Score"},"sentiment":{"type":"string","title":"Sentiment"},"aggregate":{"$ref":"#/components/schemas/RegimeAggregate"}},"type":"object","required":["as_of","composite_score","sentiment","aggregate"],"title":"LiquidityRegimeScoreResponse"},"LongShortRatioResponse":{"properties":{"symbol":{"type":"string","title":"Symbol"},"long_short_ratio":{"type":"number","title":"Long Short Ratio","default":1.0},"long_account_pct":{"type":"number","title":"Long Account Pct","default":50},"short_account_pct":{"type":"number","title":"Short Account Pct","default":50},"top_trader_long_short_ratio":{"type":"number","title":"Top Trader Long Short Ratio","default":1.0},"top_trader_long_pct":{"type":"number","title":"Top Trader Long Pct","default":50},"history":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"History","default":[]}},"type":"object","required":["symbol"],"title":"LongShortRatioResponse","description":"Long/short ratio data."},"MVRVSignal":{"properties":{"zone":{"type":"string","title":"Zone","description":"capitulation | accumulation | neutral | elevated | euphoria | unknown"},"value":{"title":"Value","type":"number","nullable":true},"interpretation":{"title":"Interpretation","type":"string","nullable":true},"reason":{"title":"Reason","type":"string","nullable":true}},"type":"object","required":["zone"],"title":"MVRVSignal"},"MacroResponse":{"properties":{"eur_usd_latest":{"title":"Eur Usd Latest","type":"number","nullable":true},"eur_usd_30d_change_pct":{"title":"Eur Usd 30D Change Pct","type":"number","nullable":true},"eur_usd_7d_change_pct":{"title":"Eur Usd 7D Change Pct","type":"number","nullable":true},"gold_price_usd":{"title":"Gold Price Usd","type":"number","nullable":true},"treasury_yield":{"title":"Treasury Yield","type":"number","nullable":true},"treasury_avg_interest_rate":{"title":"Treasury Avg Interest Rate","type":"number","nullable":true}},"type":"object","title":"MacroResponse","description":"Macro indicators."},"MajorVolEntry":{"properties":{"symbol":{"type":"string","title":"Symbol"},"realized_30":{"title":"Realized 30","description":"30d annualized realized vol (%)","type":"number","nullable":true},"implied_dvol":{"title":"Implied Dvol","description":"Deribit DVOL — 30d implied vol (%)","type":"number","nullable":true},"vrp":{"title":"Vrp","description":"Variance risk premium = implied − realized (vol points)","type":"number","nullable":true},"implied_change_24h":{"title":"Implied Change 24H","type":"number","nullable":true}},"type":"object","required":["symbol"],"title":"MajorVolEntry","description":"Per-major realized-vs-implied comparison (options-liquid coins only)."},"MarketHealthResponse":{"properties":{"total_score":{"type":"integer","title":"Total Score"},"long_term_score":{"type":"integer","title":"Long Term Score"},"short_term_score":{"type":"integer","title":"Short Term Score"},"state":{"type":"string","title":"State"},"sentiment":{"type":"string","title":"Sentiment"},"long_term_sentiment":{"type":"string","title":"Long Term Sentiment"},"short_term_sentiment":{"type":"string","title":"Short Term Sentiment"},"components":{"items":{"$ref":"#/components/schemas/ComponentScoreSchema"},"type":"array","title":"Components"},"long_term_components":{"items":{"$ref":"#/components/schemas/ComponentScoreSchema"},"type":"array","title":"Long Term Components"},"short_term_components":{"items":{"$ref":"#/components/schemas/ComponentScoreSchema"},"type":"array","title":"Short Term Components"},"details":{"additionalProperties":true,"type":"object","title":"Details","default":{}},"indicators":{"title":"Indicators","additionalProperties":true,"type":"object","nullable":true},"timestamp":{"type":"string","format":"date-time","title":"Timestamp"}},"type":"object","required":["total_score","long_term_score","short_term_score","state","sentiment","long_term_sentiment","short_term_sentiment","components","long_term_components","short_term_components","timestamp"],"title":"MarketHealthResponse","description":"Full market health score response."},"MarketHealthSummary":{"properties":{"total_score":{"type":"integer","title":"Total Score"},"long_term_score":{"type":"integer","title":"Long Term Score"},"short_term_score":{"type":"integer","title":"Short Term Score"},"state":{"type":"string","title":"State"},"sentiment":{"type":"string","title":"Sentiment"},"long_term_sentiment":{"type":"string","title":"Long Term Sentiment"},"short_term_sentiment":{"type":"string","title":"Short Term Sentiment"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp"}},"type":"object","required":["total_score","long_term_score","short_term_score","state","sentiment","long_term_sentiment","short_term_sentiment","timestamp"],"title":"MarketHealthSummary","description":"Summary scores + sentiment only."},"MarketIntelligenceDataResponse":{"properties":{"data":{"title":"Data"}},"type":"object","required":["data"],"title":"MarketIntelligenceDataResponse","description":"Generic market intelligence data wrapper."},"MarketIntelligenceLiquidationsResponse":{"properties":{"data":{"title":"Data"},"coverage":{"title":"Coverage","additionalProperties":true,"type":"object","nullable":true}},"type":"object","required":["data"],"title":"MarketIntelligenceLiquidationsResponse","description":"Liquidation rows + a coverage descriptor.\n\n``coverage`` states which venue feeds the totals aggregate and that Binance\n(the largest venue) is excluded — so consumers know these run under a true\nall-exchange number rather than mistaking the subset for the full market."},"MarketIntelligenceOptionsResponse":{"properties":{"symbol":{"type":"string","title":"Symbol"},"data":{"title":"Data"}},"type":"object","required":["symbol","data"],"title":"MarketIntelligenceOptionsResponse","description":"BTC options data."},"MarketIntelligenceStatusResponse":{"properties":{"enabled":{"type":"boolean","title":"Enabled","default":false},"rate_usage":{"additionalProperties":true,"type":"object","title":"Rate Usage","default":{}},"caches":{"additionalProperties":{"$ref":"#/components/schemas/CacheStatus"},"type":"object","title":"Caches","default":{}}},"type":"object","title":"MarketIntelligenceStatusResponse","description":"Market intelligence collector status and rate usage."},"MemeHistoryEntry":{"properties":{"date":{"type":"string","title":"Date"},"close":{"type":"number","title":"Close"},"rv_gk_30":{"title":"Rv Gk 30","type":"number","nullable":true}},"type":"object","required":["date","close"],"title":"MemeHistoryEntry"},"MemeMetricsModel":{"properties":{"ret_1d":{"title":"Ret 1D","type":"number","nullable":true},"ret_7d":{"title":"Ret 7D","type":"number","nullable":true},"ret_30d":{"title":"Ret 30D","type":"number","nullable":true},"ret_90d":{"title":"Ret 90D","type":"number","nullable":true},"vol_spike":{"title":"Vol Spike","type":"number","nullable":true},"rv_gk_30":{"title":"Rv Gk 30","type":"number","nullable":true},"vol_pctile_30":{"title":"Vol Pctile 30","type":"number","nullable":true},"sma20_extension_pct":{"title":"Sma20 Extension Pct","type":"number","nullable":true},"funding_rate":{"title":"Funding Rate","type":"number","nullable":true},"funding_extreme":{"type":"boolean","title":"Funding Extreme","default":false},"oi_usd":{"title":"Oi Usd","type":"number","nullable":true},"days_in_regime":{"type":"integer","title":"Days In Regime","default":0},"prev_regime":{"title":"Prev Regime","type":"string","enum":["euphoric","distribution","ignition","bleeding","dormant"],"nullable":true},"regime_changed":{"type":"boolean","title":"Regime Changed","default":false}},"type":"object","title":"MemeMetricsModel"},"MemeRegimeDetailResponse":{"properties":{"symbol":{"type":"string","title":"Symbol"},"source":{"type":"string","enum":["binance_spot","hyperliquid_perp"],"title":"Source"},"price":{"type":"number","title":"Price"},"regime":{"type":"string","enum":["euphoric","distribution","ignition","bleeding","dormant"],"title":"Regime"},"hl_symbol":{"title":"Hl Symbol","type":"string","nullable":true},"meme":{"$ref":"#/components/schemas/MemeMetricsModel"},"history":{"items":{"$ref":"#/components/schemas/MemeHistoryEntry"},"type":"array","title":"History","default":[]},"timestamp":{"type":"string","title":"Timestamp"}},"type":"object","required":["symbol","source","price","regime","meme","timestamp"],"title":"MemeRegimeDetailResponse"},"MemeRegimeItem":{"properties":{"symbol":{"type":"string","title":"Symbol"},"source":{"type":"string","enum":["binance_spot","hyperliquid_perp"],"title":"Source"},"price":{"type":"number","title":"Price"},"regime":{"type":"string","enum":["euphoric","distribution","ignition","bleeding","dormant"],"title":"Regime"},"hl_symbol":{"title":"Hl Symbol","type":"string","nullable":true},"meme":{"$ref":"#/components/schemas/MemeMetricsModel"}},"type":"object","required":["symbol","source","price","regime","meme"],"title":"MemeRegimeItem"},"MemeRegimeRefreshResponse":{"properties":{"refreshed":{"type":"boolean","title":"Refreshed"},"count":{"type":"integer","title":"Count"},"timestamp":{"type":"string","title":"Timestamp"}},"type":"object","required":["refreshed","count","timestamp"],"title":"MemeRegimeRefreshResponse"},"MemeRegimeResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/MemeRegimeItem"},"type":"array","title":"Items"},"count":{"type":"integer","title":"Count"},"universe_size":{"type":"integer","title":"Universe Size"},"timestamp":{"type":"string","title":"Timestamp"}},"type":"object","required":["items","count","universe_size","timestamp"],"title":"MemeRegimeResponse"},"MemeRegimeScoreResponse":{"properties":{"as_of":{"type":"string","title":"As Of"},"composite_score":{"type":"number","title":"Composite Score"},"sentiment":{"type":"string","title":"Sentiment"},"breadth_heating_pct":{"type":"number","title":"Breadth Heating Pct","default":0.0},"mean_pairwise_correlation":{"title":"Mean Pairwise Correlation","type":"number","nullable":true},"meme_season":{"type":"boolean","title":"Meme Season","default":false},"median_funding_rate":{"title":"Median Funding Rate","type":"number","nullable":true},"fresh_issuance":{"title":"Fresh Issuance","description":"Live-only fresh-issuance froth gauge (DEX-promotion breadth/spend + GoPlus rug density): froth_score, promoted_count, total_promotion_spend, rug_sampled, rug_high_risk_pct, avg_security_score. Null if unavailable.","additionalProperties":true,"type":"object","nullable":true},"aggregate":{"additionalProperties":true,"type":"object","title":"Aggregate","description":"Regime counts + pct shares across the tracked meme universe"}},"type":"object","required":["as_of","composite_score","sentiment"],"title":"MemeRegimeScoreResponse","description":"Trimmed composite-only companion to /meme/regime."},"MinerFlowWindow":{"properties":{"available":{"type":"boolean","title":"Available"},"per_pool":{"title":"Per Pool","additionalProperties":{"additionalProperties":{"type":"number"},"type":"object"},"type":"object","nullable":true},"total_funded_btc":{"title":"Total Funded Btc","type":"number","nullable":true},"total_spent_btc":{"title":"Total Spent Btc","type":"number","nullable":true},"total_net_btc":{"title":"Total Net Btc","type":"number","nullable":true}},"type":"object","required":["available"],"title":"MinerFlowWindow"},"MinerPoolEntry":{"properties":{"balance_btc":{"type":"number","title":"Balance Btc"},"funded_sats_total":{"type":"integer","title":"Funded Sats Total"},"spent_sats_total":{"type":"integer","title":"Spent Sats Total"},"tx_count":{"type":"integer","title":"Tx Count"},"addresses":{"items":{"type":"string"},"type":"array","title":"Addresses"}},"type":"object","required":["balance_btc","funded_sats_total","spent_sats_total","tx_count","addresses"],"title":"MinerPoolEntry"},"MinerReservesResponse":{"properties":{"as_of":{"type":"integer","title":"As Of"},"total_balance_btc":{"type":"number","title":"Total Balance Btc"},"total_funded_btc_cumulative":{"type":"number","title":"Total Funded Btc Cumulative"},"total_spent_btc_cumulative":{"type":"number","title":"Total Spent Btc Cumulative"},"by_pool":{"additionalProperties":{"$ref":"#/components/schemas/MinerPoolEntry"},"type":"object","title":"By Pool"},"flows":{"additionalProperties":{"$ref":"#/components/schemas/MinerFlowWindow"},"type":"object","title":"Flows"},"tracked_pools":{"items":{"type":"string"},"type":"array","title":"Tracked Pools"}},"type":"object","required":["as_of","total_balance_btc","total_funded_btc_cumulative","total_spent_btc_cumulative","by_pool","flows","tracked_pools"],"title":"MinerReservesResponse"},"MovingAverageStateModel":{"properties":{"sma_50":{"title":"Sma 50","type":"number","nullable":true},"sma_100":{"title":"Sma 100","type":"number","nullable":true},"sma_200":{"title":"Sma 200","type":"number","nullable":true},"above_50":{"title":"Above 50","type":"boolean","nullable":true},"above_100":{"title":"Above 100","type":"boolean","nullable":true},"above_200":{"title":"Above 200","type":"boolean","nullable":true},"dist_from_50_pct":{"title":"Dist From 50 Pct","type":"number","nullable":true},"dist_from_100_pct":{"title":"Dist From 100 Pct","type":"number","nullable":true},"dist_from_200_pct":{"title":"Dist From 200 Pct","type":"number","nullable":true},"last_cross_200":{"title":"Last Cross 200","type":"string","enum":["golden","death"],"nullable":true},"days_since_cross_200":{"title":"Days Since Cross 200","type":"integer","nullable":true},"last_cross_50_100":{"title":"Last Cross 50 100","type":"string","enum":["golden","death"],"nullable":true},"days_since_cross_50_100":{"title":"Days Since Cross 50 100","type":"integer","nullable":true}},"type":"object","title":"MovingAverageStateModel"},"NFTCategoryCount":{"properties":{"category":{"type":"string","title":"Category"},"collection_count":{"type":"integer","title":"Collection Count"}},"type":"object","required":["category","collection_count"],"title":"NFTCategoryCount"},"NFTChainCount":{"properties":{"chain":{"type":"string","title":"Chain"},"collection_count":{"type":"integer","title":"Collection Count"}},"type":"object","required":["chain","collection_count"],"title":"NFTChainCount"},"NFTCollection":{"properties":{"slug":{"type":"string","title":"Slug"},"name":{"type":"string","title":"Name"},"chain":{"type":"string","title":"Chain"},"contract":{"title":"Contract","type":"string","nullable":true},"category":{"type":"string","title":"Category"},"tier":{"type":"string","title":"Tier"},"launched":{"title":"Launched","type":"string","nullable":true}},"type":"object","required":["slug","name","chain","category","tier"],"title":"NFTCollection"},"NFTCollectionResponse":{"properties":{"meta":{"$ref":"#/components/schemas/NFTCollection"},"series":{"items":{"$ref":"#/components/schemas/NFTCollectionTimeseriesPoint"},"type":"array","title":"Series"}},"type":"object","required":["meta","series"],"title":"NFTCollectionResponse"},"NFTCollectionTimeseriesPoint":{"properties":{"date":{"type":"string","title":"Date"},"volume_usd":{"title":"Volume Usd","type":"number","nullable":true},"trades":{"title":"Trades","type":"integer","nullable":true}},"type":"object","required":["date"],"title":"NFTCollectionTimeseriesPoint"},"NFTCorrelationEntry":{"properties":{"asset":{"type":"string","title":"Asset"},"correlation":{"title":"Correlation","type":"number","nullable":true},"window_days":{"type":"integer","title":"Window Days"},"overlapping_days":{"type":"integer","title":"Overlapping Days"}},"type":"object","required":["asset","window_days","overlapping_days"],"title":"NFTCorrelationEntry"},"NFTCorrelationsResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/NFTCorrelationEntry"},"type":"array","title":"Items"},"window_days":{"type":"integer","title":"Window Days"},"method":{"type":"string","title":"Method"},"notes":{"type":"string","title":"Notes"}},"type":"object","required":["items","window_days","method","notes"],"title":"NFTCorrelationsResponse"},"NFTMarketplace":{"properties":{"name":{"type":"string","title":"Name"},"volume_usd_24h":{"type":"number","title":"Volume Usd 24H"},"volume_usd_7d":{"type":"number","title":"Volume Usd 7D"},"trades_24h":{"type":"integer","title":"Trades 24H"},"trades_7d":{"type":"integer","title":"Trades 7D"},"pct_of_total":{"type":"number","title":"Pct Of Total"},"weekly_change":{"type":"number","title":"Weekly Change"}},"type":"object","required":["name","volume_usd_24h","volume_usd_7d","trades_24h","trades_7d","pct_of_total","weekly_change"],"title":"NFTMarketplace"},"NFTOverviewResponse":{"properties":{"total_series":{"items":{"$ref":"#/components/schemas/NFTSeriesPoint"},"type":"array","title":"Total Series"},"by_chain":{"additionalProperties":{"items":{"$ref":"#/components/schemas/NFTSeriesPoint"},"type":"array"},"type":"object","title":"By Chain"},"by_tier":{"additionalProperties":{"items":{"$ref":"#/components/schemas/NFTSeriesPoint"},"type":"array"},"type":"object","title":"By Tier"},"by_category":{"additionalProperties":{"items":{"$ref":"#/components/schemas/NFTSeriesPoint"},"type":"array"},"type":"object","title":"By Category"},"totals":{"$ref":"#/components/schemas/NFTOverviewTotals"},"top_collections":{"items":{"$ref":"#/components/schemas/NFTTopCollection"},"type":"array","title":"Top Collections"},"marketplaces":{"items":{"$ref":"#/components/schemas/NFTMarketplace"},"type":"array","title":"Marketplaces"},"refreshed_at":{"title":"Refreshed At","type":"string","nullable":true},"history_days":{"type":"integer","title":"History Days"}},"type":"object","required":["total_series","by_chain","by_tier","by_category","totals","top_collections","marketplaces","history_days"],"title":"NFTOverviewResponse"},"NFTOverviewTotals":{"properties":{"volume_usd_24h":{"type":"number","title":"Volume Usd 24H"},"volume_usd_7d":{"type":"number","title":"Volume Usd 7D"},"volume_usd_30d":{"type":"number","title":"Volume Usd 30D"},"volume_usd_90d":{"type":"number","title":"Volume Usd 90D"}},"type":"object","required":["volume_usd_24h","volume_usd_7d","volume_usd_30d","volume_usd_90d"],"title":"NFTOverviewTotals"},"NFTSeriesPoint":{"properties":{"date":{"type":"string","title":"Date"},"volume_usd":{"type":"number","title":"Volume Usd"}},"type":"object","required":["date","volume_usd"],"title":"NFTSeriesPoint"},"NFTTopCollection":{"properties":{"slug":{"type":"string","title":"Slug"},"name":{"type":"string","title":"Name"},"chain":{"type":"string","title":"Chain"},"contract":{"title":"Contract","type":"string","nullable":true},"category":{"type":"string","title":"Category"},"tier":{"type":"string","title":"Tier"},"volume_eth_24h":{"title":"Volume Eth 24H","type":"number","nullable":true},"volume_usd_24h":{"title":"Volume Usd 24H","type":"number","nullable":true},"volume_eth_7d":{"title":"Volume Eth 7D","type":"number","nullable":true},"trades_24h":{"type":"integer","title":"Trades 24H"}},"type":"object","required":["slug","name","chain","category","tier","trades_24h"],"title":"NFTTopCollection"},"NFTVolumePoint":{"properties":{"date":{"type":"string","title":"Date"},"bucket":{"type":"string","title":"Bucket"},"volume_usd":{"type":"number","title":"Volume Usd"}},"type":"object","required":["date","bucket","volume_usd"],"title":"NFTVolumePoint"},"NFTVolumeResponse":{"properties":{"by":{"type":"string","title":"By"},"granularity":{"type":"string","title":"Granularity"},"points":{"items":{"$ref":"#/components/schemas/NFTVolumePoint"},"type":"array","title":"Points"},"start_date":{"type":"string","title":"Start Date"},"end_date":{"type":"string","title":"End Date"}},"type":"object","required":["by","granularity","points","start_date","end_date"],"title":"NFTVolumeResponse"},"NewsCoinResponse":{"properties":{"symbol":{"type":"string","title":"Symbol"},"news_pressure":{"type":"number","title":"News Pressure"},"news_tilt":{"type":"number","title":"News Tilt"},"events":{"items":{"$ref":"#/components/schemas/NewsEvent"},"type":"array","title":"Events"},"count":{"type":"integer","title":"Count"},"window_hours":{"type":"number","title":"Window Hours"},"as_of":{"type":"string","title":"As Of"}},"type":"object","required":["symbol","news_pressure","news_tilt","events","count","window_hours","as_of"],"title":"NewsCoinResponse","description":"Events for a single Hyperliquid perp."},"NewsEvent":{"properties":{"event_id":{"type":"string","title":"Event Id"},"symbol":{"type":"string","title":"Symbol"},"title":{"type":"string","title":"Title"},"url":{"type":"string","title":"Url"},"source":{"type":"string","title":"Source"},"published":{"title":"Published","type":"string","nullable":true},"category":{"type":"string","title":"Category"},"impact_score":{"type":"number","title":"Impact Score"},"bias":{"type":"number","title":"Bias"},"corroboration":{"type":"integer","title":"Corroboration"},"severity":{"title":"Severity","type":"number","nullable":true},"confidence":{"title":"Confidence","type":"number","nullable":true},"match_mode":{"title":"Match Mode","type":"string","nullable":true},"sources":{"title":"Sources","items":{"type":"string"},"type":"array","nullable":true},"market_response":{"title":"Market Response","additionalProperties":true,"type":"object","nullable":true}},"type":"object","required":["event_id","symbol","title","url","source","category","impact_score","bias","corroboration"],"title":"NewsEvent","description":"One qualified, market-moving news event bound to a Hyperliquid perp.\n\nOnly events clearing the impact threshold are ever returned — there is no\nraw-feed surface at any tier. ``symbol`` is the HL perp symbol, or\n``MARKET`` for a story that moves everything."},"NewsEventsResponse":{"properties":{"events":{"items":{"$ref":"#/components/schemas/NewsEvent"},"type":"array","title":"Events"},"count":{"type":"integer","title":"Count"},"window_hours":{"type":"number","title":"Window Hours"},"impact_threshold":{"type":"number","title":"Impact Threshold"},"tier_scope":{"type":"string","title":"Tier Scope"},"as_of":{"type":"string","title":"As Of"}},"type":"object","required":["events","count","window_hours","impact_threshold","tier_scope","as_of"],"title":"NewsEventsResponse","description":"Filtered catalyst tape."},"NewsPulseResponse":{"properties":{"rows":{"items":{"$ref":"#/components/schemas/NewsPulseRow"},"type":"array","title":"Rows"},"count":{"type":"integer","title":"Count"},"universe_size":{"type":"integer","title":"Universe Size"},"window_hours":{"type":"number","title":"Window Hours"},"tier_scope":{"type":"string","title":"Tier Scope"},"as_of":{"type":"string","title":"As Of"}},"type":"object","required":["rows","count","universe_size","window_hours","tier_scope","as_of"],"title":"NewsPulseResponse","description":"Per-coin news feature series — the strategy input."},"NewsPulseRow":{"properties":{"symbol":{"type":"string","title":"Symbol"},"news_pressure":{"type":"number","title":"News Pressure"},"news_tilt":{"type":"number","title":"News Tilt"},"event_count":{"type":"integer","title":"Event Count"},"top_impact":{"type":"number","title":"Top Impact"},"headlines":{"type":"integer","title":"Headlines","default":0},"rank":{"type":"integer","title":"Rank"}},"type":"object","required":["symbol","news_pressure","news_tilt","event_count","top_impact","rank"],"title":"NewsPulseRow","description":"One perp's news feature values.\n\nEvery active perp gets a row: a quiet coin is ``news_pressure: 0``, not a\nmissing row, so a cross-sectional ranking has the zeros it needs."},"NewsSourcesResponse":{"properties":{"sources":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Sources"},"universe_size":{"type":"integer","title":"Universe Size"},"project_feed_symbols":{"items":{"type":"string"},"type":"array","title":"Project Feed Symbols"},"unresolvable":{"items":{"type":"string"},"type":"array","title":"Unresolvable"},"missing_names":{"items":{"type":"string"},"type":"array","title":"Missing Names"},"impact_threshold":{"type":"number","title":"Impact Threshold"},"funnel_24h":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Funnel 24H"},"store":{"additionalProperties":true,"type":"object","title":"Store"},"last_refresh":{"title":"Last Refresh","type":"string","nullable":true}},"type":"object","required":["sources","universe_size","project_feed_symbols","unresolvable","missing_names","impact_threshold","funnel_24h","store"],"title":"NewsSourcesResponse","description":"Feed health plus the published coverage gap.\n\n``unresolvable`` lists active perps with no safe project name and an\nambiguous ticker — nothing short of a cashtag can match them. It is a field\nrather than a silent blind spot on purpose."},"NextUnlock":{"properties":{"date":{"type":"string","title":"Date"},"timestamp_ms":{"type":"integer","title":"Timestamp Ms"},"days_until":{"type":"integer","title":"Days Until"},"tokens":{"title":"Tokens","type":"number","nullable":true},"usd":{"title":"Usd","type":"number","nullable":true},"pct_of_float":{"title":"Pct Of Float","type":"number","nullable":true},"pct_of_market_cap":{"title":"Pct Of Market Cap","type":"number","nullable":true},"categories":{"items":{"type":"string"},"type":"array","title":"Categories","default":[]}},"type":"object","required":["date","timestamp_ms","days_until"],"title":"NextUnlock","description":"The soonest dated cliff for a coin, same-day tranches summed."},"OIDivergenceResponse":{"properties":{"as_of":{"type":"integer","title":"As Of"},"universe_size":{"type":"integer","title":"Universe Size"},"rows":{"items":{"$ref":"#/components/schemas/OIDivergenceRow"},"type":"array","title":"Rows"}},"type":"object","required":["as_of","universe_size","rows"],"title":"OIDivergenceResponse"},"OIDivergenceRow":{"properties":{"coin":{"type":"string","title":"Coin"},"price":{"title":"Price","type":"number","nullable":true},"open_interest_usd":{"title":"Open Interest Usd","type":"number","nullable":true},"price_change_1h_pct":{"title":"Price Change 1H Pct","type":"number","nullable":true},"price_change_4h_pct":{"title":"Price Change 4H Pct","type":"number","nullable":true},"price_change_24h_pct":{"title":"Price Change 24H Pct","type":"number","nullable":true},"oi_change_1h_pct":{"title":"Oi Change 1H Pct","type":"number","nullable":true},"oi_change_4h_pct":{"title":"Oi Change 4H Pct","type":"number","nullable":true},"oi_change_24h_pct":{"title":"Oi Change 24H Pct","type":"number","nullable":true},"divergence_4h":{"title":"Divergence 4H","description":"oi_change_4h_pct - price_change_4h_pct (positive = OI rising faster than price)","type":"number","nullable":true}},"type":"object","required":["coin"],"title":"OIDivergenceRow"},"OnChainHealthResponse":{"properties":{"as_of":{"type":"integer","title":"As Of"},"score":{"type":"number","title":"Score"},"sentiment":{"type":"string","title":"Sentiment","description":"bullish | leaning_bullish | neutral | leaning_bearish | bearish"},"components":{"items":{"$ref":"#/components/schemas/HealthComponent"},"type":"array","title":"Components"},"weights_version":{"type":"string","title":"Weights Version"}},"type":"object","required":["as_of","score","sentiment","components","weights_version"],"title":"OnChainHealthResponse"},"OpenInterestResponse":{"properties":{"symbol":{"type":"string","title":"Symbol"},"current_oi":{"type":"number","title":"Current Oi","default":0},"oi_trend_30d_pct":{"type":"number","title":"Oi Trend 30D Pct","default":0},"history":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"History","default":[]}},"type":"object","required":["symbol"],"title":"OpenInterestResponse","description":"Open interest data."},"PaymentVerifyRequest":{"properties":{"tx_hash":{"type":"string","maxLength":120,"minLength":10,"title":"Tx Hash"},"network":{"type":"string","pattern":"^(base|ethereum|solana|tron)$","title":"Network"},"plan":{"type":"string","pattern":"^(monthly|monthly_plus|annual|annual_plus)$","title":"Plan"},"intent_id":{"title":"Intent Id","type":"string","nullable":true},"discount_code":{"title":"Discount Code","type":"string","nullable":true}},"type":"object","required":["tx_hash","network","plan"],"title":"PaymentVerifyRequest"},"PaymentVerifyResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"subscription":{"title":"Subscription","additionalProperties":true,"type":"object","nullable":true},"invoice_number":{"title":"Invoice Number","type":"string","nullable":true}},"type":"object","required":["success"],"title":"PaymentVerifyResponse"},"PendingRegime":{"properties":{"anchor":{"type":"string","title":"Anchor"},"regime":{"type":"string","title":"Regime"},"name":{"type":"string","title":"Name"},"count":{"type":"integer","title":"Count","description":"Consecutive raw samples seen so far"},"needed":{"type":"integer","title":"Needed","description":"Consecutive samples required to commit"},"since":{"title":"Since","description":"ISO ts the candidate first appeared","type":"string","nullable":true},"dwell_blocked_s":{"type":"integer","title":"Dwell Blocked S","description":"Seconds still owed on the minimum-dwell floor. When >0 the candidate is FULLY confirmed (count >= needed) and is waiting only for the committed regime to satisfy its minimum hold — which is why count can sit above needed without committing.","default":0}},"type":"object","required":["anchor","regime","name","count","needed"],"title":"PendingRegime","description":"A candidate regime accumulating confirmations but not yet committed.\n\nSurfaced so a consumer can see a turn brewing before the committed regime\nactually changes (the anti-churn dwell gate requires ``needed`` consecutive\nsamples before a switch)."},"PlanInfo":{"properties":{"price_usd":{"type":"number","title":"Price Usd"},"price_usdc":{"type":"string","title":"Price Usdc"},"savings":{"title":"Savings","type":"string","nullable":true},"tier":{"title":"Tier","type":"string","nullable":true}},"type":"object","required":["price_usd","price_usdc"],"title":"PlanInfo"},"PlansResponse":{"properties":{"plans":{"additionalProperties":{"$ref":"#/components/schemas/PlanInfo"},"type":"object","title":"Plans"},"networks":{"items":{"type":"string"},"type":"array","title":"Networks"},"token":{"type":"string","title":"Token","default":"USDC"}},"type":"object","required":["plans","networks"],"title":"PlansResponse"},"PolicyEventModel":{"properties":{"event_type":{"type":"string","title":"Event Type"},"title":{"type":"string","title":"Title"},"date":{"type":"string","title":"Date"},"days_until":{"type":"integer","title":"Days Until"},"macro_class":{"title":"Macro Class","type":"string","nullable":true},"bias":{"type":"string","title":"Bias"},"magnitude":{"title":"Magnitude","type":"number","nullable":true},"source":{"type":"string","title":"Source","default":""}},"type":"object","required":["event_type","title","date","days_until","bias"],"title":"PolicyEventModel"},"PolicyHeadlinesResponse":{"properties":{"regulatory_pressure":{"type":"number","title":"Regulatory Pressure","default":0.0},"headline_tilt":{"type":"number","title":"Headline Tilt","default":0.0},"headline_count":{"type":"integer","title":"Headline Count","default":0},"top_headlines":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Top Headlines","default":[]},"sources_ok":{"additionalProperties":true,"type":"object","title":"Sources Ok","default":{}},"as_of":{"type":"string","title":"As Of"}},"type":"object","required":["as_of"],"title":"PolicyHeadlinesResponse","description":"Live classified US-regulatory headlines (Federal Register / SEC / CFTC)."},"PolicyRegimeRefreshResponse":{"properties":{"refreshed":{"type":"boolean","title":"Refreshed"},"events":{"type":"integer","title":"Events"},"policy_risk_score":{"type":"number","title":"Policy Risk Score"},"policy_tilt":{"type":"number","title":"Policy Tilt"},"timestamp":{"type":"string","title":"Timestamp"}},"type":"object","required":["refreshed","events","policy_risk_score","policy_tilt","timestamp"],"title":"PolicyRegimeRefreshResponse"},"PolicyRegimeResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/PolicyEventModel"},"type":"array","title":"Items"},"count":{"type":"integer","title":"Count"},"window_days":{"type":"integer","title":"Window Days"},"policy_risk_score":{"type":"number","title":"Policy Risk Score"},"band":{"type":"string","enum":["dormant","quiet","elevated","heavy","critical"],"title":"Band"},"policy_tilt":{"type":"number","title":"Policy Tilt","description":"-1 restrictive/risk-off … +1 pro-crypto/risk-on"},"tilt_label":{"type":"string","enum":["pro_crypto","restrictive","neutral"],"title":"Tilt Label"},"timestamp":{"type":"string","title":"Timestamp"}},"type":"object","required":["items","count","window_days","policy_risk_score","band","policy_tilt","tilt_label","timestamp"],"title":"PolicyRegimeResponse","description":"Upcoming rate catalysts + market-wide policy risk — the main payload."},"PolicyRegimeScoreResponse":{"properties":{"as_of":{"type":"string","title":"As Of"},"policy_risk_score":{"type":"number","title":"Policy Risk Score","description":"0-100; baseline 0 (absence = no policy shock)"},"band":{"type":"string","enum":["dormant","quiet","elevated","heavy","critical"],"title":"Band"},"policy_tilt":{"type":"number","title":"Policy Tilt","default":0.0},"tilt_label":{"type":"string","enum":["pro_crypto","restrictive","neutral"],"title":"Tilt Label","default":"neutral"},"gdelt_subscore":{"type":"number","title":"Gdelt Subscore","default":0.0},"cross_asset_subscore":{"type":"number","title":"Cross Asset Subscore","default":0.0},"rate_subscore":{"type":"number","title":"Rate Subscore","default":0.0},"gdelt_volume_z":{"title":"Gdelt Volume Z","type":"number","nullable":true},"gdelt_tone":{"title":"Gdelt Tone","type":"number","nullable":true},"cross_asset_z":{"additionalProperties":true,"type":"object","title":"Cross Asset Z"},"next_rate_days":{"title":"Next Rate Days","type":"integer","nullable":true},"events_count":{"type":"integer","title":"Events Count","default":0},"partial":{"type":"boolean","title":"Partial","default":false},"inputs_available":{"items":{"type":"string"},"type":"array","title":"Inputs Available","default":[]},"policy_headlines":{"title":"Policy Headlines","description":"Live-only classified US-regulatory headlines; null on backfill","additionalProperties":true,"type":"object","nullable":true}},"type":"object","required":["as_of","policy_risk_score","band"],"title":"PolicyRegimeScoreResponse","description":"Market-wide Policy Risk composite + sub-scores + tilt + live-only sidecars."},"PriceResponse":{"properties":{"symbol":{"type":"string","title":"Symbol"},"price":{"type":"number","title":"Price"}},"type":"object","required":["symbol","price"],"title":"PriceResponse","description":"Current price."},"QuantCoinDetailResponse":{"properties":{"scope":{"type":"string","title":"Scope"},"symbol":{"title":"Symbol","type":"string","nullable":true},"timestamp":{"type":"string","title":"Timestamp"},"horizon":{"type":"string","title":"Horizon"},"regime":{"$ref":"#/components/schemas/QuantRegimeState","nullable":true},"probabilities":{"title":"Probabilities","additionalProperties":{"additionalProperties":{"type":"number"},"type":"object"},"type":"object","nullable":true},"tomorrow":{"title":"Tomorrow","description":"Seeded Monte Carlo tomorrow stats (24h horizon only)","additionalProperties":true,"type":"object","nullable":true},"meta":{"$ref":"#/components/schemas/QuantMeta"},"explain":{"title":"Explain","description":"Feature z-scores, posteriors, hysteresis state, calibration — every adjustment inspectable","additionalProperties":true,"type":"object","nullable":true},"recent_regimes":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Recent Regimes","description":"Recent inference rows {timestamp, regime_id, regime_label, confidence} for sparkline rendering (newest last)"}},"type":"object","required":["scope","timestamp","horizon","meta"],"title":"QuantCoinDetailResponse"},"QuantCoinRisk":{"properties":{"symbol":{"type":"string","title":"Symbol"},"regime":{"$ref":"#/components/schemas/QuantCoinRiskRegime","nullable":true},"vol_target_multiplier":{"title":"Vol Target Multiplier","description":"Position-size multiplier from /volatility/regime (0.25–3.0)","type":"number","nullable":true},"vol_pctile_30":{"title":"Vol Pctile 30","description":"30d realized-vol percentile within the trailing 90d","type":"number","nullable":true},"rv_24h":{"title":"Rv 24H","description":"Live intraday realized vol (volatility regime `rv_1h`, annualized %); null on backfilled/illiquid coins","type":"number","nullable":true},"probabilities":{"title":"Probabilities","description":"volatility / liquidation_risk / funding / open_interest buckets, verbatim from /quant/coins/{symbol}.probabilities (null while warming up)","additionalProperties":{"additionalProperties":{"type":"number"},"type":"object"},"type":"object","nullable":true},"meta":{"$ref":"#/components/schemas/QuantCoinRiskMeta"}},"type":"object","required":["symbol","meta"],"title":"QuantCoinRisk","description":"One coin's batched risk-model view.\n\nA verbatim batched join of /quant/coins/{symbol} (regime, probability\nbuckets, meta) and /volatility/regime/{symbol} (vol-sizing fields) for the\nsame symbol/horizon — not new modelling."},"QuantCoinRiskMeta":{"properties":{"status":{"type":"string","title":"Status","description":"ok | degraded | warming_up"},"insufficient_history":{"type":"boolean","title":"Insufficient History","default":false},"new_listing":{"type":"boolean","title":"New Listing","default":false}},"type":"object","required":["status"],"title":"QuantCoinRiskMeta"},"QuantCoinRiskRegime":{"properties":{"label":{"type":"string","title":"Label"},"confidence":{"type":"number","title":"Confidence"}},"type":"object","required":["label","confidence"],"title":"QuantCoinRiskRegime","description":"Trimmed regime view for the bulk risk feed (label + confidence only)."},"QuantCoinSummary":{"properties":{"symbol":{"type":"string","title":"Symbol"},"regime":{"$ref":"#/components/schemas/QuantRegimeState","nullable":true},"status":{"type":"string","title":"Status"},"p_direction_up":{"title":"P Direction Up","description":"P(mild_up) + P(strong_up) at the requested horizon","type":"number","nullable":true},"p_direction_down":{"title":"P Direction Down","description":"P(mild_down) + P(strong_down) at the requested horizon. Note up + down + flat = 1 — never treat 1 - p_up as fall odds.","type":"number","nullable":true},"top_transition":{"title":"Top Transition","description":"Most likely regime change: {to, p}","additionalProperties":true,"type":"object","nullable":true},"oi_usd":{"title":"Oi Usd","type":"number","nullable":true},"insufficient_history":{"type":"boolean","title":"Insufficient History","default":false},"new_listing":{"type":"boolean","title":"New Listing","default":false}},"type":"object","required":["symbol","status"],"title":"QuantCoinSummary","description":"Trimmed per-coin entry for the heatmap feed."},"QuantCoinsResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/QuantCoinSummary"},"type":"array","title":"Items"},"count":{"type":"integer","title":"Count"},"universe_size":{"type":"integer","title":"Universe Size"},"horizon":{"type":"string","title":"Horizon"},"model_version":{"type":"string","title":"Model Version"},"timestamp":{"type":"string","title":"Timestamp"}},"type":"object","required":["items","count","universe_size","horizon","model_version","timestamp"],"title":"QuantCoinsResponse"},"QuantCoinsRiskResponse":{"properties":{"as_of":{"type":"string","title":"As Of"},"horizon":{"type":"string","title":"Horizon"},"items":{"items":{"$ref":"#/components/schemas/QuantCoinRisk"},"type":"array","title":"Items"},"count":{"type":"integer","title":"Count"},"universe_size":{"type":"integer","title":"Universe Size"}},"type":"object","required":["as_of","horizon","items","count","universe_size"],"title":"QuantCoinsRiskResponse"},"QuantHistoryEntry":{"properties":{"time":{"type":"integer","title":"Time","description":"Inference timestamp, unix ms UTC"},"timestamp":{"type":"string","title":"Timestamp"},"scope":{"type":"string","title":"Scope"},"horizon":{"type":"string","title":"Horizon"},"regime_id":{"type":"integer","title":"Regime Id"},"regime_label":{"type":"string","title":"Regime Label"},"regime_conf":{"type":"number","title":"Regime Conf"},"candles_in_regime":{"type":"integer","title":"Candles In Regime"},"p_dir_strong_down":{"title":"P Dir Strong Down","type":"number","nullable":true},"p_dir_down":{"title":"P Dir Down","type":"number","nullable":true},"p_dir_flat":{"title":"P Dir Flat","type":"number","nullable":true},"p_dir_up":{"title":"P Dir Up","type":"number","nullable":true},"p_dir_strong_up":{"title":"P Dir Strong Up","type":"number","nullable":true},"p_vol_low":{"title":"P Vol Low","type":"number","nullable":true},"p_vol_mid":{"title":"P Vol Mid","type":"number","nullable":true},"p_vol_high":{"title":"P Vol High","type":"number","nullable":true},"p_liq_low":{"title":"P Liq Low","type":"number","nullable":true},"p_liq_mid":{"title":"P Liq Mid","type":"number","nullable":true},"p_liq_high":{"title":"P Liq High","type":"number","nullable":true},"p_fund_neg":{"title":"P Fund Neg","type":"number","nullable":true},"p_fund_neutral":{"title":"P Fund Neutral","type":"number","nullable":true},"p_fund_pos":{"title":"P Fund Pos","type":"number","nullable":true},"p_breadth_narrow":{"title":"P Breadth Narrow","type":"number","nullable":true},"p_breadth_mixed":{"title":"P Breadth Mixed","type":"number","nullable":true},"p_breadth_broad":{"title":"P Breadth Broad","type":"number","nullable":true},"p_oi_falling":{"title":"P Oi Falling","type":"number","nullable":true},"p_oi_flat":{"title":"P Oi Flat","type":"number","nullable":true},"p_oi_rising":{"title":"P Oi Rising","type":"number","nullable":true},"post_label_0":{"title":"Post Label 0","type":"number","nullable":true},"post_label_1":{"title":"Post Label 1","type":"number","nullable":true},"post_label_2":{"title":"Post Label 2","type":"number","nullable":true},"post_label_3":{"title":"Post Label 3","type":"number","nullable":true},"post_label_4":{"title":"Post Label 4","type":"number","nullable":true},"post_label_5":{"title":"Post Label 5","type":"number","nullable":true},"model_version":{"type":"string","title":"Model Version"},"feature_coverage":{"title":"Feature Coverage","type":"number","nullable":true},"insufficient_history":{"type":"boolean","title":"Insufficient History","default":false},"backfilled":{"type":"boolean","title":"Backfilled","description":"True = retro-computed by the backfill script (1h cadence), False = live point-in-time inference (15-min cadence). The trust contract."}},"type":"object","required":["time","timestamp","scope","horizon","regime_id","regime_label","regime_conf","candles_in_regime","model_version","backfilled"],"title":"QuantHistoryEntry"},"QuantHistoryResponse":{"properties":{"scope":{"type":"string","title":"Scope"},"horizon":{"title":"Horizon","type":"string","nullable":true},"entries":{"items":{"$ref":"#/components/schemas/QuantHistoryEntry"},"type":"array","title":"Entries"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["scope","entries","count"],"title":"QuantHistoryResponse"},"QuantMeta":{"properties":{"model_version":{"type":"string","title":"Model Version"},"model_family":{"type":"string","title":"Model Family"},"last_retrain":{"type":"string","title":"Last Retrain"},"data_staleness_ms":{"title":"Data Staleness Ms","type":"integer","nullable":true},"feature_coverage":{"title":"Feature Coverage","type":"number","nullable":true},"insufficient_history":{"type":"boolean","title":"Insufficient History","default":false},"status":{"type":"string","title":"Status","description":"ok | degraded | warming_up"},"backfilled":{"type":"boolean","title":"Backfilled","default":false}},"type":"object","required":["model_version","model_family","last_retrain","status"],"title":"QuantMeta"},"QuantModelCardResponse":{"properties":{"loaded":{"type":"boolean","title":"Loaded","description":"True when a real (non-stub) model is serving"},"model_version":{"title":"Model Version","type":"string","nullable":true},"model_family":{"title":"Model Family","type":"string","nullable":true},"feature_version":{"title":"Feature Version","type":"string","nullable":true},"sha256":{"title":"Sha256","type":"string","nullable":true},"created_at":{"title":"Created At","type":"string","nullable":true},"last_retrain":{"title":"Last Retrain","type":"string","nullable":true},"labels":{"title":"Labels","items":{"type":"string"},"type":"array","nullable":true},"n_states":{"title":"N States","description":"Raw HMM state counts per scope model (internal; labels are the contract)","additionalProperties":{"type":"integer"},"type":"object","nullable":true},"features":{"title":"Features","additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object","nullable":true},"validation":{"title":"Validation","description":"Walk-forward fold metrics + drift baseline, straight from the artifact","additionalProperties":true,"type":"object","nullable":true},"approval":{"title":"Approval","additionalProperties":true,"type":"object","nullable":true},"runtime":{"additionalProperties":true,"type":"object","title":"Runtime","description":"Engine status: universe counts, drift monitor, last inference"}},"type":"object","required":["loaded","runtime"],"title":"QuantModelCardResponse","description":"Transparency surface: what the model is, how it was validated, and live\nruntime status. Available on any valid key — this is the marketing page\nfor the data."},"QuantProbabilityObject":{"properties":{"scope":{"type":"string","title":"Scope"},"symbol":{"title":"Symbol","type":"string","nullable":true},"timestamp":{"type":"string","title":"Timestamp"},"horizon":{"type":"string","title":"Horizon"},"regime":{"$ref":"#/components/schemas/QuantRegimeState","nullable":true},"probabilities":{"title":"Probabilities","additionalProperties":{"additionalProperties":{"type":"number"},"type":"object"},"type":"object","nullable":true},"tomorrow":{"title":"Tomorrow","description":"Seeded Monte Carlo tomorrow stats (24h horizon only)","additionalProperties":true,"type":"object","nullable":true},"meta":{"$ref":"#/components/schemas/QuantMeta"},"explain":{"title":"Explain","description":"Feature z-scores, posteriors, hysteresis state, calibration — every adjustment inspectable","additionalProperties":true,"type":"object","nullable":true}},"type":"object","required":["scope","timestamp","horizon","meta"],"title":"QuantProbabilityObject","description":"Full probability object for one scope (market or coin) at one horizon.\n\n`probabilities` maps head name (directional, volatility, liquidation_risk,\nfunding, breadth [market only], open_interest, regime_transitions) to its\nbucket->probability map; every head carries its own `confidence`.\n`regime`/`probabilities` are null while the scope is warming up."},"QuantRefreshResponse":{"properties":{"refreshed":{"type":"boolean","title":"Refreshed"},"timestamp":{"type":"string","title":"Timestamp"}},"type":"object","required":["refreshed","timestamp"],"title":"QuantRefreshResponse"},"QuantRegimeHistoryResponse":{"properties":{"download_url":{"type":"string","title":"Download Url","description":"Pre-signed URL to the Parquet file"},"expires_in":{"type":"integer","title":"Expires In","description":"Seconds until the download URL expires"},"format":{"type":"string","title":"Format","default":"parquet"},"rows":{"type":"integer","title":"Rows","description":"Number of hourly rows in the file"},"start":{"type":"integer","title":"Start","description":"First row timestamp (ms epoch)"},"end":{"type":"integer","title":"End","description":"Last row timestamp (ms epoch)"},"model_version":{"type":"string","title":"Model Version"},"horizons":{"items":{"type":"string"},"type":"array","title":"Horizons","description":"Distribution horizons, e.g. [now, 4h, 24h]"},"regime_map":{"additionalProperties":{"type":"string"},"type":"object","title":"Regime Map","description":"regime_id -> label"},"columns":{"items":{"type":"string"},"type":"array","title":"Columns","description":"Parquet column order"},"generated_at":{"type":"string","title":"Generated At","description":"When the file was last rebuilt (ISO 8601)"}},"type":"object","required":["download_url","expires_in","rows","start","end","model_version","horizons","regime_map","columns","generated_at"],"title":"QuantRegimeHistoryResponse","description":"Pre-signed download for the full market 6-regime history Parquet.\n\nOne hourly row per bar from 2020 to yesterday (market scope), each carrying\nthe full distribution over the 6 regimes at three horizons — now, 4h and 24h\n(`p_now_*`, `p_4h_*`, `p_24h_*`, keyed by regime id per `regime_map`). The\ndeep history is labelled by the same model that serves live (no hindsight);\nthe `source` column marks the Binance-archive vs live-Hyperliquid seam."},"QuantRegimeInfo":{"properties":{"id":{"type":"integer","title":"Id"},"label":{"type":"string","title":"Label"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"stance":{"type":"string","title":"Stance"},"color":{"type":"string","title":"Color"}},"type":"object","required":["id","label","name","description","stance","color"],"title":"QuantRegimeInfo"},"QuantRegimeState":{"properties":{"label":{"type":"string","title":"Label","description":"Regime label, e.g. strong_trend_bull"},"name":{"type":"string","title":"Name","description":"Display name, e.g. Strong Trend (Bull)"},"id":{"type":"integer","maximum":5.0,"minimum":0.0,"title":"Id"},"confidence":{"type":"number","title":"Confidence","description":"Calibrated confidence, degraded by staleness/history"},"confidence_raw":{"type":"number","title":"Confidence Raw","description":"Raw max label posterior, pre-calibration"},"label_raw":{"type":"string","title":"Label Raw","description":"Argmax label before hysteresis (headline label may lag)"},"candles_in_regime":{"type":"integer","title":"Candles In Regime"}},"type":"object","required":["label","name","id","confidence","confidence_raw","label_raw","candles_in_regime"],"title":"QuantRegimeState"},"QuantRegimesResponse":{"properties":{"regimes":{"items":{"$ref":"#/components/schemas/QuantRegimeInfo"},"type":"array","title":"Regimes"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["regimes","count"],"title":"QuantRegimesResponse"},"QuantTimelineEntry":{"properties":{"date":{"type":"string","title":"Date"},"label":{"type":"string","title":"Label"},"id":{"type":"integer","title":"Id"},"confidence":{"title":"Confidence","type":"number","nullable":true}},"type":"object","required":["date","label","id"],"title":"QuantTimelineEntry"},"QuantTimelineResponse":{"properties":{"entries":{"items":{"$ref":"#/components/schemas/QuantTimelineEntry"},"type":"array","title":"Entries"},"count":{"type":"integer","title":"Count"},"model_version":{"type":"string","title":"Model Version"},"note":{"type":"string","title":"Note","description":"Daily majority label from the trained model run over its full training history — same model, no hindsight relabeling"}},"type":"object","required":["entries","count","model_version","note"],"title":"QuantTimelineResponse"},"RangeStateModel":{"properties":{"low":{"title":"Low","type":"number","nullable":true},"high":{"title":"High","type":"number","nullable":true},"width_pct":{"title":"Width Pct","type":"number","nullable":true},"position_pct":{"title":"Position Pct","type":"number","nullable":true},"zone":{"title":"Zone","type":"string","enum":["near_low","mid","near_high"],"nullable":true},"near_high":{"type":"boolean","title":"Near High","default":false},"near_low":{"type":"boolean","title":"Near Low","default":false}},"type":"object","title":"RangeStateModel"},"RawClassification":{"properties":{"anchor":{"title":"Anchor","type":"string","nullable":true},"regime":{"title":"Regime","type":"string","nullable":true},"name":{"title":"Name","type":"string","nullable":true},"id":{"title":"Id","type":"integer","nullable":true},"matches_committed":{"type":"boolean","title":"Matches Committed","description":"False when the live cascade disagrees with the committed regime"}},"type":"object","required":["matches_committed"],"title":"RawClassification","description":"What the cascade classifies RIGHT NOW, before the anti-churn dwell gate.\n\nThe published regime is the COMMITTED one, which by design lags the live\ninputs — so ``signals`` can stop meeting the committed regime's entry\ncondition while that regime is still served. Without this block that reads\nas contradictory data: a consumer sees ``rationale`` saying \"a security\nshock is active\" next to a ``security_stress`` below the trigger, with no\nway to tell the difference between \"stale by design\" and \"broken\".\n\n``matches_committed`` false is normal and expected — it means a turn is\nbeing evaluated; read ``pending.count``/``needed`` for how far along it is."},"RegimeAggregate":{"properties":{"deep_book":{"type":"integer","title":"Deep Book","default":0},"oi_price_divergence":{"type":"integer","title":"Oi Price Divergence","default":0},"depth_withdrawal":{"type":"integer","title":"Depth Withdrawal","default":0},"post_cascade_impaired":{"type":"integer","title":"Post Cascade Impaired","default":0},"neutral":{"type":"integer","title":"Neutral","default":0},"pct_deep_book":{"type":"number","title":"Pct Deep Book","default":0.0},"pct_divergent":{"type":"number","title":"Pct Divergent","default":0.0},"pct_withdrawing":{"type":"number","title":"Pct Withdrawing","default":0.0},"pct_impaired":{"type":"number","title":"Pct Impaired","default":0.0},"pct_neutral":{"type":"number","title":"Pct Neutral","default":0.0}},"type":"object","title":"RegimeAggregate"},"RegimeHistoryResponse":{"properties":{"transitions":{"items":{"$ref":"#/components/schemas/RegimeTransition"},"type":"array","title":"Transitions"},"count":{"type":"integer","title":"Count"},"from":{"type":"string","title":"From","description":"Start of the requested window (inclusive)"},"to":{"type":"string","title":"To","description":"End of the requested window (exclusive)"},"coverage_start":{"title":"Coverage Start","description":"Earliest archived snapshot. Recording began 2026-08-07 and CANNOT be backfilled — the published regime is a stateful commit through the dwell gate, so replaying older signals would invent a sequence that was never served. A `from` earlier than this returns nothing for the uncovered part.","type":"string","nullable":true},"sample_interval_seconds":{"type":"integer","title":"Sample Interval Seconds","description":"Archive cadence. Every committed regime is protected by a dwell floor of at least 2h, well above this, so no transition can fall between samples."},"truncated":{"type":"boolean","title":"Truncated","description":"True when `limit` clipped the window. Rows are read oldest-first, so the RECENT end is what is missing — narrow the window and re-request."}},"type":"object","required":["transitions","count","from","to","sample_interval_seconds","truncated"],"title":"RegimeHistoryResponse","description":"`/api/v1/regimes/history` — the committed transition sequence."},"RegimeInfo":{"properties":{"id":{"type":"integer","title":"Id","description":"Stable 1-10 ordinal, roughly cycle order"},"regime":{"type":"string","title":"Regime","description":"Machine id — the API contract (e.g. established_bear)"},"anchor":{"type":"string","title":"Anchor","description":"Slug matching the /regimes web page section id"},"name":{"type":"string","title":"Name","description":"Human display name"},"description":{"type":"string","title":"Description"},"typical_duration":{"type":"string","title":"Typical Duration"},"directional_bias":{"type":"string","title":"Directional Bias"}},"type":"object","required":["id","regime","anchor","name","description","typical_duration","directional_bias"],"title":"RegimeInfo","description":"One entry in the 10-state long-horizon regime taxonomy."},"RegimeStability":{"properties":{"score":{"type":"number","title":"Score","description":"0-1 blend: 0.6 * raw_agreement + 0.4 * (1 - confirmation pressure). Excludes locked_for_s deliberately — a hard guarantee and a soft estimate do not belong in one number."},"raw_agreement":{"type":"number","title":"Raw Agreement","description":"Fraction of the last raw_samples ungated classifications that matched the committed regime. Decays smoothly as conditions drift, well before any candidate confirms."},"raw_samples":{"type":"integer","title":"Raw Samples","description":"Samples currently in the window"},"raw_window":{"type":"integer","title":"Raw Window","description":"Window size in samples (~15 min each)"},"confirmations_against":{"type":"integer","title":"Confirmations Against","description":"Consecutive raw samples the current successor has accumulated (0 if none)"},"confirmations_needed":{"type":"integer","title":"Confirmations Needed","description":"Consecutive samples a successor must accumulate — populated even with no candidate, so the pair is always interpretable"},"candidate":{"title":"Candidate","description":"Anchor of the pending successor, or null","type":"string","nullable":true},"held_s":{"title":"Held S","description":"Seconds the committed regime has been held","type":"integer","nullable":true},"dwell_floor_s":{"type":"integer","title":"Dwell Floor S","description":"This regime's own minimum-hold floor, scaled to its catalog typical_duration (see /regimes typical_duration)"},"locked_for_s":{"type":"integer","title":"Locked For S","description":"Seconds the committed regime is GUARANTEED to survive under the dwell floor. 0 means a confirmed successor could commit on the next refresh. Structural Shock can still pre-empt this."}},"type":"object","required":["score","raw_agreement","raw_samples","raw_window","confirmations_against","confirmations_needed","dwell_floor_s","locked_for_s"],"title":"RegimeStability","description":"How firmly the committed regime is holding — always present, always numeric.\n\n``pending`` is null exactly when the live cascade agrees with the committed\nregime, so a consumer polling for \"is a turn brewing\" gets a field that\nblinks in and out of existence and carries no signal on a hold. This block\nis the continuous companion: it is emitted on every response, candidate or\nnot, so it can be differenced, thresholded, or fed to a risk sizer directly.\n\n``locked_for_s`` is the only HARD number here — the minimum-dwell floor\nmechanically prevents any change for that long. The one exception is a\nStructural Shock override, which is exempt from the floor by design."},"RegimeThresholds":{"properties":{"nearest":{"description":"The measured check with the smallest distance","$ref":"#/components/schemas/ThresholdCheck","nullable":true},"checks":{"items":{"$ref":"#/components/schemas/ThresholdCheck"},"type":"array","title":"Checks"}},"type":"object","required":["checks"],"title":"RegimeThresholds","description":"Distance to every numeric boundary in the cascade — the raw material for\nclient-side hysteresis.\n\nThe two CATEGORICAL inputs (``quant_label``, ``meme_season``) have no\ndistance by construction; read them from ``signals``."},"RegimeTransition":{"properties":{"id":{"title":"Id","type":"integer","nullable":true},"regime":{"title":"Regime","type":"string","nullable":true},"anchor":{"title":"Anchor","type":"string","nullable":true},"name":{"title":"Name","type":"string","nullable":true},"committed_at":{"type":"string","title":"Committed At","description":"ISO-8601 instant the regime COMMITTED, read from the snapshot's own in_regime_since — not the sample that first observed it, so this is exact rather than rounded to the archive cadence"},"ended_at":{"title":"Ended At","description":"commit instant of the NEXT regime; null while this one is current","type":"string","nullable":true},"dwell_seconds":{"title":"Dwell Seconds","description":"Held duration; measured to now for the open final run","type":"integer","nullable":true},"rationale":{"title":"Rationale","type":"string","nullable":true},"stage":{"title":"Stage","type":"string","nullable":true},"euphoria_score":{"title":"Euphoria Score","type":"integer","nullable":true},"first_observed_at":{"type":"string","title":"First Observed At","description":"First archived sample carrying this run"},"last_observed_at":{"type":"string","title":"Last Observed At","description":"Last archived sample carrying this run"},"observations":{"type":"integer","title":"Observations","description":"Archived samples covering this run"}},"type":"object","required":["committed_at","first_observed_at","last_observed_at","observations"],"title":"RegimeTransition","description":"One committed run of a regime — when it was entered, and for how long."},"RegimesResponse":{"properties":{"current":{"$ref":"#/components/schemas/CurrentRegime"},"regimes":{"items":{"$ref":"#/components/schemas/RegimeInfo"},"type":"array","title":"Regimes"},"count":{"type":"integer","title":"Count"},"as_of":{"type":"string","title":"As Of"}},"type":"object","required":["current","regimes","count","as_of"],"title":"RegimesResponse","description":"`/api/v1/regimes` — current detection plus the full taxonomy."},"RemoteStablecoinHistoryResponse":{"properties":{"history":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"History"}},"type":"object","required":["history"],"title":"RemoteStablecoinHistoryResponse","description":"Daily stablecoin mcap + inflow history."},"RsiStateModel":{"properties":{"rsi_14_1d":{"title":"Rsi 14 1D","type":"number","nullable":true},"rsi_14_1h":{"title":"Rsi 14 1H","type":"number","nullable":true},"state_1d":{"type":"string","enum":["overbought","oversold","neutral"],"title":"State 1D","default":"neutral"},"state_1h":{"type":"string","enum":["overbought","oversold","neutral"],"title":"State 1H","default":"neutral"},"extreme_1d":{"type":"boolean","title":"Extreme 1D","default":false},"extreme_1h":{"type":"boolean","title":"Extreme 1H","default":false},"extreme_duration_bars":{"type":"integer","title":"Extreme Duration Bars","default":0}},"type":"object","title":"RsiStateModel"},"SecurityEventModel":{"properties":{"event_type":{"type":"string","enum":["hack","depeg"],"title":"Event Type"},"title":{"type":"string","title":"Title"},"date":{"type":"string","title":"Date"},"days_ago":{"type":"integer","title":"Days Ago"},"symbols":{"items":{"type":"string"},"type":"array","title":"Symbols","default":[]},"bias":{"type":"string","enum":["short","long","neutral","mixed"],"title":"Bias"},"severity":{"title":"Severity","type":"number","nullable":true},"amount_usd":{"title":"Amount Usd","type":"number","nullable":true},"deviation_bps":{"title":"Deviation Bps","type":"number","nullable":true},"classification":{"title":"Classification","type":"string","nullable":true},"technique":{"title":"Technique","type":"string","nullable":true},"target_type":{"title":"Target Type","type":"string","nullable":true},"chains":{"title":"Chains","items":{"type":"string"},"type":"array","nullable":true},"source":{"type":"string","title":"Source","default":""}},"type":"object","required":["event_type","title","date","days_ago","bias"],"title":"SecurityEventModel"},"SecurityPendingItem":{"properties":{"event_type":{"type":"string","enum":["hack","depeg"],"title":"Event Type"},"date":{"type":"string","title":"Date"},"days_ago":{"type":"integer","title":"Days Ago"},"bias":{"type":"string","enum":["short","long","neutral","mixed"],"title":"Bias"},"severity":{"title":"Severity","type":"number","nullable":true}},"type":"object","required":["event_type","date","days_ago","bias"],"title":"SecurityPendingItem"},"SecurityRegimeRefreshResponse":{"properties":{"refreshed":{"type":"boolean","title":"Refreshed"},"events":{"type":"integer","title":"Events"},"security_stress_score":{"type":"number","title":"Security Stress Score"},"timestamp":{"type":"string","title":"Timestamp"}},"type":"object","required":["refreshed","events","security_stress_score","timestamp"],"title":"SecurityRegimeRefreshResponse"},"SecurityRegimeResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/SecurityEventModel"},"type":"array","title":"Items"},"count":{"type":"integer","title":"Count"},"window_days":{"type":"integer","title":"Window Days"},"security_stress_score":{"type":"number","title":"Security Stress Score"},"band":{"type":"string","enum":["dormant","quiet","elevated","heavy","critical"],"title":"Band"},"timestamp":{"type":"string","title":"Timestamp"}},"type":"object","required":["items","count","window_days","security_stress_score","band","timestamp"],"title":"SecurityRegimeResponse","description":"Recent security events + market-wide stress — the main /security payload."},"SecurityRegimeScoreResponse":{"properties":{"as_of":{"type":"string","title":"As Of"},"security_stress_score":{"type":"number","title":"Security Stress Score","description":"0-100; baseline 0 (absence = all clear)"},"band":{"type":"string","enum":["dormant","quiet","elevated","heavy","critical"],"title":"Band"},"hack_subscore":{"type":"number","title":"Hack Subscore","default":0.0},"flow_subscore":{"type":"number","title":"Flow Subscore","default":0.0},"depeg_subscore":{"type":"number","title":"Depeg Subscore","default":0.0},"hacks_in_window":{"type":"integer","title":"Hacks In Window","default":0},"largest_hack_usd":{"title":"Largest Hack Usd","type":"number","nullable":true},"worst_flow_symbol":{"title":"Worst Flow Symbol","type":"string","nullable":true},"worst_flow_zscore":{"title":"Worst Flow Zscore","type":"number","nullable":true},"events_count":{"type":"integer","title":"Events Count","default":0},"counts":{"additionalProperties":true,"type":"object","title":"Counts"},"partial":{"type":"boolean","title":"Partial","default":false},"inputs_available":{"items":{"type":"string"},"type":"array","title":"Inputs Available","default":[]},"security_headlines":{"title":"Security Headlines","description":"Live-only classified RSS advisories (rekt/SlowMist); null on backfill","additionalProperties":true,"type":"object","nullable":true}},"type":"object","required":["as_of","security_stress_score","band"],"title":"SecurityRegimeScoreResponse","description":"Market-wide Security Stress composite + sub-scores + live-only sidecar."},"SecuritySymbolOverlayResponse":{"properties":{"symbol":{"type":"string","title":"Symbol"},"hl_symbol":{"title":"Hl Symbol","type":"string","nullable":true},"events":{"items":{"$ref":"#/components/schemas/SecurityPendingItem"},"type":"array","title":"Events","default":[]},"acute_bias":{"type":"string","enum":["short","long","neutral","mixed"],"title":"Acute Bias","default":"neutral"},"max_severity":{"type":"number","title":"Max Severity","default":0.0},"timestamp":{"type":"string","title":"Timestamp"}},"type":"object","required":["symbol","timestamp"],"title":"SecuritySymbolOverlayResponse","description":"Per-symbol security overlay (Pro+)."},"ShortTermPriceResponse":{"properties":{"symbol":{"type":"string","title":"Symbol","default":"BTC"},"current_price":{"type":"number","title":"Current Price"},"ma_20":{"type":"number","title":"Ma 20"},"pct_from_20ma":{"type":"number","title":"Pct From 20Ma"},"roc_5d_pct":{"type":"number","title":"Roc 5D Pct"},"consecutive_green_4h":{"type":"integer","title":"Consecutive Green 4H"},"consecutive_red_4h":{"type":"integer","title":"Consecutive Red 4H"},"rsi_14":{"title":"Rsi 14","type":"number","nullable":true},"price_change_1h_pct":{"title":"Price Change 1H Pct","type":"number","nullable":true},"price_change_4h_pct":{"title":"Price Change 4H Pct","type":"number","nullable":true},"price_change_24h_pct":{"title":"Price Change 24H Pct","type":"number","nullable":true},"momentum_score":{"type":"integer","title":"Momentum Score"}},"type":"object","required":["current_price","ma_20","pct_from_20ma","roc_5d_pct","consecutive_green_4h","consecutive_red_4h","momentum_score"],"title":"ShortTermPriceResponse","description":"Short-term BTC price momentum metrics."},"SignumHistoryEntry":{"properties":{"date":{"type":"string","title":"Date"},"color":{"type":"string","enum":["red","grey","green"],"title":"Color"}},"type":"object","required":["date","color"],"title":"SignumHistoryEntry"},"SignumIntradayHistoryEntry":{"properties":{"ts":{"type":"string","title":"Ts"},"color":{"type":"string","enum":["red","grey","green"],"title":"Color"},"adx":{"type":"number","title":"Adx"},"plus_di":{"type":"number","title":"Plus Di"},"minus_di":{"type":"number","title":"Minus Di"}},"type":"object","required":["ts","color","adx","plus_di","minus_di"],"title":"SignumIntradayHistoryEntry"},"SignumRange":{"properties":{"low":{"type":"number","title":"Low"},"high":{"type":"number","title":"High"},"width_pct":{"type":"number","title":"Width Pct"}},"type":"object","required":["low","high","width_pct"],"title":"SignumRange"},"SignumRggDetailResponse":{"properties":{"symbol":{"type":"string","title":"Symbol"},"source":{"type":"string","enum":["binance_spot","hyperliquid_perp"],"title":"Source"},"color":{"type":"string","enum":["red","grey","green"],"title":"Color"},"days_in_color":{"type":"integer","title":"Days In Color"},"flipped_at":{"type":"string","title":"Flipped At"},"pct_change_since_flip":{"type":"number","title":"Pct Change Since Flip"},"range":{"$ref":"#/components/schemas/SignumRange","nullable":true},"adx":{"type":"number","title":"Adx"},"plus_di":{"type":"number","title":"Plus Di"},"minus_di":{"type":"number","title":"Minus Di"},"price":{"type":"number","title":"Price"},"intraday_color":{"title":"Intraday Color","type":"string","enum":["red","grey","green"],"nullable":true},"intraday_timeframe":{"title":"Intraday Timeframe","type":"string","nullable":true},"intraday_adx":{"title":"Intraday Adx","type":"number","nullable":true},"intraday_plus_di":{"title":"Intraday Plus Di","type":"number","nullable":true},"intraday_minus_di":{"title":"Intraday Minus Di","type":"number","nullable":true},"flip_alert":{"type":"boolean","title":"Flip Alert","default":false},"history":{"items":{"$ref":"#/components/schemas/SignumHistoryEntry"},"type":"array","title":"History"},"intraday_history":{"items":{"$ref":"#/components/schemas/SignumIntradayHistoryEntry"},"type":"array","title":"Intraday History","default":[]},"rule_params":{"$ref":"#/components/schemas/SignumRuleParams"},"timestamp":{"type":"string","title":"Timestamp"}},"type":"object","required":["symbol","source","color","days_in_color","flipped_at","pct_change_since_flip","adx","plus_di","minus_di","price","history","rule_params","timestamp"],"title":"SignumRggDetailResponse"},"SignumRggItem":{"properties":{"symbol":{"type":"string","title":"Symbol"},"source":{"type":"string","enum":["binance_spot","hyperliquid_perp"],"title":"Source"},"color":{"type":"string","enum":["red","grey","green"],"title":"Color"},"days_in_color":{"type":"integer","title":"Days In Color"},"flipped_at":{"type":"string","title":"Flipped At"},"pct_change_since_flip":{"type":"number","title":"Pct Change Since Flip"},"range":{"$ref":"#/components/schemas/SignumRange","nullable":true},"adx":{"type":"number","title":"Adx"},"plus_di":{"type":"number","title":"Plus Di"},"minus_di":{"type":"number","title":"Minus Di"},"price":{"type":"number","title":"Price"},"intraday_color":{"title":"Intraday Color","type":"string","enum":["red","grey","green"],"nullable":true},"intraday_timeframe":{"title":"Intraday Timeframe","type":"string","nullable":true},"intraday_adx":{"title":"Intraday Adx","type":"number","nullable":true},"intraday_plus_di":{"title":"Intraday Plus Di","type":"number","nullable":true},"intraday_minus_di":{"title":"Intraday Minus Di","type":"number","nullable":true},"flip_alert":{"type":"boolean","title":"Flip Alert","default":false}},"type":"object","required":["symbol","source","color","days_in_color","flipped_at","pct_change_since_flip","adx","plus_di","minus_di","price"],"title":"SignumRggItem"},"SignumRggRefreshResponse":{"properties":{"refreshed":{"type":"boolean","title":"Refreshed"},"count":{"type":"integer","title":"Count"},"timestamp":{"type":"string","title":"Timestamp"}},"type":"object","required":["refreshed","count","timestamp"],"title":"SignumRggRefreshResponse"},"SignumRggResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/SignumRggItem"},"type":"array","title":"Items"},"count":{"type":"integer","title":"Count"},"universe_size":{"type":"integer","title":"Universe Size"},"timestamp":{"type":"string","title":"Timestamp"}},"type":"object","required":["items","count","universe_size","timestamp"],"title":"SignumRggResponse"},"SignumRuleParams":{"properties":{"period":{"type":"integer","title":"Period"},"upper":{"type":"number","title":"Upper"},"lower":{"type":"number","title":"Lower"},"range_lookback":{"type":"integer","title":"Range Lookback"}},"type":"object","required":["period","upper","lower","range_lookback"],"title":"SignumRuleParams"},"SolanaTxRequest":{"properties":{"sender":{"type":"string","title":"Sender"},"plan":{"type":"string","title":"Plan"},"discount_code":{"title":"Discount Code","type":"string","nullable":true}},"type":"object","required":["sender","plan"],"title":"SolanaTxRequest"},"SpikeAlert":{"properties":{"ts":{"type":"integer","title":"Ts"},"chain":{"type":"string","title":"Chain"},"symbol":{"type":"string","title":"Symbol"},"exchange":{"type":"string","title":"Exchange"},"direction":{"type":"string","title":"Direction","description":"inflow | outflow"},"amount":{"type":"number","title":"Amount","description":"Transfer size in TOKEN-NATIVE units (ETH in ETH, BTC in BTC, tokens in raw units) — not USD"},"unit":{"title":"Unit","description":"Unit of `amount` (the token symbol)","type":"string","nullable":true},"amount_usd":{"title":"Amount Usd","description":"Transfer size in USD, converted at ingestion from the live price; the min_amount threshold applies to this","type":"number","nullable":true},"counterparty":{"type":"string","title":"Counterparty"}},"type":"object","required":["ts","chain","symbol","exchange","direction","amount","counterparty"],"title":"SpikeAlert"},"SpikeAlertsResponse":{"properties":{"as_of":{"type":"integer","title":"As Of"},"count":{"type":"integer","title":"Count"},"min_amount":{"type":"number","title":"Min Amount"},"alerts":{"items":{"$ref":"#/components/schemas/SpikeAlert"},"type":"array","title":"Alerts"}},"type":"object","required":["as_of","count","min_amount","alerts"],"title":"SpikeAlertsResponse"},"SqueezeAlert":{"properties":{"symbol":{"type":"string","title":"Symbol"},"direction":{"type":"string","title":"Direction","description":"short_squeeze | long_flush | balanced. Named after the side being LIQUIDATED: a short liquidation is forced buying, so short_squeeze is upward pressure"},"severity":{"type":"number","title":"Severity","description":"0..1 composite of spike_ratio, asymmetry and notional. Ratios carry 80% of the weight because absolute notionals run low (Binance excluded)"},"triggered":{"type":"boolean","title":"Triggered","description":"True when every gate clears: spike_ratio, asymmetry, severity, a minimum absolute notional and a minimum baseline age — i.e. a cascade is firing, not just churn"},"suppressed_by":{"items":{"type":"string"},"type":"array","title":"Suppressed By","description":"Which gates blocked the alert, empty when triggered. One or more of: no_spike_baseline, spike_ratio, asymmetry, severity, min_notional (window below the absolute floor — the ratios alone must not be able to raise an alert on four-figure flow), baseline_too_young (feed reconnected too recently for spike_ratio to be a fair comparison)"},"window_s":{"title":"Window S","description":"Trailing window the figures cover, in seconds","type":"integer","nullable":true},"long_liq_usd":{"type":"number","title":"Long Liq Usd"},"short_liq_usd":{"type":"number","title":"Short Liq Usd"},"total_liq_usd":{"type":"number","title":"Total Liq Usd"},"asymmetry":{"type":"number","title":"Asymmetry","description":"Dominant side's share of window notional: 0.5 = two-sided churn, 1.0 = entirely one-sided"},"side_ratio":{"title":"Side Ratio","description":"Dominant side divided by the opposing side (the '334x' figure). null when the opposing side is exactly zero","type":"number","nullable":true},"spike_ratio":{"title":"Spike Ratio","description":"Window liquidation total vs this coin's own trailing-24h mean over an equal window. ~1 is normal; >= 2 is required to trigger","type":"number","nullable":true},"liq_24h_usd":{"title":"Liq 24H Usd","type":"number","nullable":true},"oi_change_pct":{"title":"Oi Change Pct","description":"Open-interest change over the same window. null until the OI history has two samples","type":"number","nullable":true},"oi_state":{"title":"Oi State","description":"covering | fresh_longs | capitulating | fresh_shorts | unclear. Reads oi_change_pct against `direction`: OI falling into a short squeeze means shorts are being closed out; OI rising means the move is being fed. null when OI is unavailable","type":"string","nullable":true},"price_change_24h_pct":{"title":"Price Change 24H Pct","description":"Context only — 24h mark vs prevDayPx. Direction is derived from liquidation flow, not from this","type":"number","nullable":true},"legs":{"additionalProperties":{"type":"number"},"type":"object","title":"Legs","description":"The three severity components before weighting"},"coverage":{"title":"Coverage","description":"Which venue feeds the totals aggregate","type":"string","nullable":true},"window_uptime_h":{"title":"Window Uptime H","description":"Hours the liquidation FEED PROCESS has been connected. Not the same as baseline_span_h — the feed restores up to 24h of events from its snapshot on boot, so this resets on every deploy while the history does not","type":"number","nullable":true},"baseline_span_h":{"title":"Baseline Span H","description":"Hours of history actually behind spike_ratio. This is the number to check before trusting a spike; triggering is gated on it, not on window_uptime_h","type":"number","nullable":true}},"type":"object","required":["symbol","direction","severity","triggered","long_liq_usd","short_liq_usd","total_liq_usd","asymmetry"],"title":"SqueezeAlert","description":"One coin's forced-liquidation cascade state over the trailing window."},"SqueezeAlertsResponse":{"properties":{"as_of":{"type":"integer","title":"As Of"},"window_s":{"type":"integer","title":"Window S"},"min_severity":{"type":"number","title":"Min Severity"},"count":{"type":"integer","title":"Count"},"evaluated":{"type":"integer","title":"Evaluated","description":"Coins that had a usable liquidation window. `count` of these cleared the thresholds"},"coverage":{"title":"Coverage","type":"string","nullable":true},"alerts":{"items":{"$ref":"#/components/schemas/SqueezeAlert"},"type":"array","title":"Alerts"}},"type":"object","required":["as_of","window_s","min_severity","count","evaluated","alerts"],"title":"SqueezeAlertsResponse","description":"Coins whose forced-liquidation flow is currently one-sided and abnormal."},"StablecoinHistoryResponse":{"properties":{"data":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"StablecoinHistoryResponse","description":"Stablecoin market cap history timeseries."},"StablecoinReservesResponse":{"properties":{"as_of":{"type":"integer","title":"As Of","description":"Unix timestamp of snapshot"},"by_exchange":{"additionalProperties":{"$ref":"#/components/schemas/ExchangeBreakdown"},"type":"object","title":"By Exchange"},"by_chain":{"additionalProperties":{"additionalProperties":{"type":"number"},"type":"object"},"type":"object","title":"By Chain"},"by_symbol":{"additionalProperties":{"type":"number"},"type":"object","title":"By Symbol"},"total_usd":{"type":"number","title":"Total Usd"},"tracked_exchanges":{"items":{"type":"string"},"type":"array","title":"Tracked Exchanges"},"tracked_chains":{"items":{"type":"string"},"type":"array","title":"Tracked Chains"}},"type":"object","required":["as_of","by_exchange","by_chain","by_symbol","total_usd","tracked_exchanges","tracked_chains"],"title":"StablecoinReservesResponse"},"StablecoinResponse":{"properties":{"total_market_cap":{"title":"Total Market Cap","type":"number","nullable":true},"current_mcap_billions":{"title":"Current Mcap Billions","type":"number","nullable":true},"inflow_14d_billions":{"title":"Inflow 14D Billions","type":"number","nullable":true},"change_14d_pct":{"title":"Change 14D Pct","type":"number","nullable":true},"inflow_90d_billions":{"title":"Inflow 90D Billions","type":"number","nullable":true},"change_90d_pct":{"title":"Change 90D Pct","type":"number","nullable":true},"top_stablecoins":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Top Stablecoins","default":[]}},"type":"object","title":"StablecoinResponse","description":"Stablecoin market data."},"StrategyBasketsResponse":{"properties":{"groups":{"items":{"$ref":"#/components/schemas/BasketGroup"},"type":"array","title":"Groups"},"group_count":{"type":"integer","title":"Group Count"},"basket_count":{"type":"integer","title":"Basket Count"}},"type":"object","required":["groups","group_count","basket_count"],"title":"StrategyBasketsResponse","description":"`/api/v1/trading-strategy-baskets` — the full 50-basket catalogue."},"StripeCheckoutRequest":{"properties":{"plan":{"type":"string","enum":["monthly","monthly_plus","annual","annual_plus"],"title":"Plan"},"discount_code":{"title":"Discount Code","type":"string","nullable":true}},"type":"object","required":["plan"],"title":"StripeCheckoutRequest","description":"Start a Stripe Checkout session for a recurring card subscription."},"StripeCheckoutResponse":{"properties":{"checkout_url":{"type":"string","title":"Checkout Url"}},"type":"object","required":["checkout_url"],"title":"StripeCheckoutResponse"},"StripePortalResponse":{"properties":{"portal_url":{"type":"string","title":"Portal Url"}},"type":"object","required":["portal_url"],"title":"StripePortalResponse"},"SubscribeRequest":{"properties":{"plan":{"type":"string","enum":["monthly","monthly_plus","annual","annual_plus"],"title":"Plan"},"discount_code":{"title":"Discount Code","type":"string","nullable":true}},"type":"object","required":["plan"],"title":"SubscribeRequest","description":"Request body for subscribing to a plan."},"SubscriptionStatusResponse":{"properties":{"status":{"type":"string","title":"Status"},"plan":{"title":"Plan","type":"string","nullable":true},"expires_at":{"title":"Expires At","type":"string","format":"date-time","nullable":true},"days_remaining":{"title":"Days Remaining","type":"integer","nullable":true},"cancels_at":{"title":"Cancels At","type":"string","format":"date-time","nullable":true},"renews_at":{"title":"Renews At","type":"string","format":"date-time","nullable":true},"auto_renew":{"title":"Auto Renew","type":"boolean","nullable":true},"payment_status":{"title":"Payment Status","type":"string","nullable":true}},"type":"object","required":["status"],"title":"SubscriptionStatusResponse"},"SupplyFloatResponse":{"properties":{"rows":{"items":{"$ref":"#/components/schemas/SupplyFloatRow"},"type":"array","title":"Rows"},"count":{"type":"integer","title":"Count"},"summary":{"$ref":"#/components/schemas/SupplyFloatSummary"},"tier_scope":{"type":"string","title":"Tier Scope"},"as_of":{"type":"string","title":"As Of"}},"type":"object","required":["rows","count","summary","tier_scope","as_of"],"title":"SupplyFloatResponse"},"SupplyFloatRow":{"properties":{"symbol":{"type":"string","title":"Symbol"},"name":{"type":"string","title":"Name"},"coingecko_id":{"title":"Coingecko Id","type":"string","nullable":true},"market_cap":{"title":"Market Cap","type":"number","nullable":true},"market_cap_rank":{"title":"Market Cap Rank","type":"integer","nullable":true},"price":{"title":"Price","type":"number","nullable":true},"circulating_supply":{"type":"number","title":"Circulating Supply"},"total_supply":{"title":"Total Supply","type":"number","nullable":true},"max_supply":{"title":"Max Supply","type":"number","nullable":true},"supply_basis":{"type":"string","enum":["max_supply","total_supply"],"title":"Supply Basis"},"float_pct":{"type":"number","title":"Float Pct"},"locked_supply":{"type":"number","title":"Locked Supply"},"locked_usd":{"title":"Locked Usd","type":"number","nullable":true},"dilution_overhang":{"title":"Dilution Overhang","type":"number","nullable":true},"next_unlock":{"$ref":"#/components/schemas/NextUnlock","nullable":true},"unlock_coverage":{"type":"string","enum":["tracked","not_tracked"],"title":"Unlock Coverage"},"rank":{"type":"integer","title":"Rank"}},"type":"object","required":["symbol","name","circulating_supply","supply_basis","float_pct","locked_supply","unlock_coverage","rank"],"title":"SupplyFloatRow","description":"One coin's supply state."},"SupplyFloatSummary":{"properties":{"coins":{"type":"integer","title":"Coins"},"total_locked_usd":{"title":"Total Locked Usd","type":"number","nullable":true},"median_float_pct":{"title":"Median Float Pct","type":"number","nullable":true},"tight_float_count":{"type":"integer","title":"Tight Float Count"},"with_tracked_unlock":{"type":"integer","title":"With Tracked Unlock"},"notable_overhang":{"type":"integer","title":"Notable Overhang"}},"type":"object","required":["coins","tight_float_count","with_tracked_unlock","notable_overhang"],"title":"SupplyFloatSummary"},"SupplyUnlockItem":{"properties":{"symbol":{"type":"string","title":"Symbol"},"name":{"type":"string","title":"Name"},"coingecko_id":{"title":"Coingecko Id","type":"string","nullable":true},"date":{"type":"string","title":"Date"},"days_until":{"type":"integer","title":"Days Until"},"tokens":{"title":"Tokens","type":"number","nullable":true},"usd":{"title":"Usd","type":"number","nullable":true},"pct_of_float":{"title":"Pct Of Float","type":"number","nullable":true},"pct_of_market_cap":{"title":"Pct Of Market Cap","type":"number","nullable":true},"categories":{"items":{"type":"string"},"type":"array","title":"Categories","default":[]},"float_pct":{"type":"number","title":"Float Pct"},"market_cap":{"title":"Market Cap","type":"number","nullable":true}},"type":"object","required":["symbol","name","date","days_until","float_pct"],"title":"SupplyUnlockItem"},"SupplyUnlocksResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/SupplyUnlockItem"},"type":"array","title":"Items"},"count":{"type":"integer","title":"Count"},"window_days":{"type":"integer","title":"Window Days"},"tier_scope":{"type":"string","title":"Tier Scope"},"as_of":{"type":"string","title":"As Of"}},"type":"object","required":["items","count","window_days","tier_scope","as_of"],"title":"SupplyUnlocksResponse"},"TechnicalHistoryEntry":{"properties":{"date":{"type":"string","title":"Date"},"close":{"type":"number","title":"Close"},"rsi_14":{"title":"Rsi 14","type":"number","nullable":true},"bb_bw_pct":{"title":"Bb Bw Pct","type":"number","nullable":true},"sma_200":{"title":"Sma 200","type":"number","nullable":true},"above_200":{"title":"Above 200","type":"boolean","nullable":true}},"type":"object","required":["date","close"],"title":"TechnicalHistoryEntry"},"TechnicalRegimeDetailResponse":{"properties":{"symbol":{"type":"string","title":"Symbol"},"source":{"type":"string","enum":["binance_spot","hyperliquid_perp"],"title":"Source"},"price":{"type":"number","title":"Price"},"ma":{"$ref":"#/components/schemas/MovingAverageStateModel"},"bollinger":{"$ref":"#/components/schemas/BollingerStateModel"},"range_state":{"$ref":"#/components/schemas/RangeStateModel"},"rsi":{"$ref":"#/components/schemas/RsiStateModel"},"history":{"items":{"$ref":"#/components/schemas/TechnicalHistoryEntry"},"type":"array","title":"History","default":[]},"timestamp":{"type":"string","title":"Timestamp"}},"type":"object","required":["symbol","source","price","ma","bollinger","range_state","rsi","timestamp"],"title":"TechnicalRegimeDetailResponse"},"TechnicalRegimeItem":{"properties":{"symbol":{"type":"string","title":"Symbol"},"source":{"type":"string","enum":["binance_spot","hyperliquid_perp"],"title":"Source"},"price":{"type":"number","title":"Price"},"ma":{"$ref":"#/components/schemas/MovingAverageStateModel"},"bollinger":{"$ref":"#/components/schemas/BollingerStateModel"},"range_state":{"$ref":"#/components/schemas/RangeStateModel"},"rsi":{"$ref":"#/components/schemas/RsiStateModel"}},"type":"object","required":["symbol","source","price","ma","bollinger","range_state","rsi"],"title":"TechnicalRegimeItem"},"TechnicalRegimeRefreshResponse":{"properties":{"refreshed":{"type":"boolean","title":"Refreshed"},"count":{"type":"integer","title":"Count"},"timestamp":{"type":"string","title":"Timestamp"}},"type":"object","required":["refreshed","count","timestamp"],"title":"TechnicalRegimeRefreshResponse"},"TechnicalRegimeResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/TechnicalRegimeItem"},"type":"array","title":"Items"},"count":{"type":"integer","title":"Count"},"universe_size":{"type":"integer","title":"Universe Size"},"timestamp":{"type":"string","title":"Timestamp"}},"type":"object","required":["items","count","universe_size","timestamp"],"title":"TechnicalRegimeResponse"},"TermStructurePoint":{"properties":{"expiry":{"type":"string","title":"Expiry"},"expiry_days":{"type":"integer","title":"Expiry Days"},"atm_iv":{"type":"number","title":"Atm Iv"}},"type":"object","required":["expiry","expiry_days","atm_iv"],"title":"TermStructurePoint"},"ThresholdCheck":{"properties":{"signal":{"type":"string","title":"Signal","description":"Key in `signals` this check reads"},"op":{"type":"string","title":"Op","description":"Comparison the cascade applies (>=, >, <=, <)"},"cutoff":{"type":"number","title":"Cutoff"},"value":{"title":"Value","description":"Live value, or null if the feed is down","type":"number","nullable":true},"holds":{"title":"Holds","description":"Whether the check passes right now","type":"boolean","nullable":true},"distance":{"title":"Distance","description":"Absolute move required to cross the cutoff, in the signal's own units. Does NOT indicate direction of travel.","type":"number","nullable":true},"gates":{"type":"string","title":"Gates","description":"What crossing puts in play — a regime anchor, or condition:<state> for the health-score cutoffs that drive the cascade's dominant input"}},"type":"object","required":["signal","op","cutoff","gates"],"title":"ThresholdCheck","description":"One numeric cutoff the classifier cascade tests, and how far it is from flipping."},"TickerResponse":{"properties":{"symbol":{"type":"string","title":"Symbol"},"price_change":{"type":"number","title":"Price Change","default":0},"price_change_pct":{"type":"number","title":"Price Change Pct","default":0},"weighted_avg_price":{"type":"number","title":"Weighted Avg Price","default":0},"last_price":{"type":"number","title":"Last Price","default":0},"volume":{"type":"number","title":"Volume","default":0},"quote_volume":{"type":"number","title":"Quote Volume","default":0},"open_price":{"type":"number","title":"Open Price","default":0},"high_price":{"type":"number","title":"High Price","default":0},"low_price":{"type":"number","title":"Low Price","default":0},"trades":{"type":"integer","title":"Trades","default":0}},"type":"object","required":["symbol"],"title":"TickerResponse","description":"24hr ticker stats."},"TronIntentRequest":{"properties":{"sender":{"type":"string","title":"Sender"},"plan":{"type":"string","title":"Plan"},"discount_code":{"title":"Discount Code","type":"string","nullable":true}},"type":"object","required":["sender","plan"],"title":"TronIntentRequest"},"ValidateCodeRequest":{"properties":{"code":{"type":"string","title":"Code"}},"type":"object","required":["code"],"title":"ValidateCodeRequest"},"ValidateCodeResponse":{"properties":{"valid":{"type":"boolean","title":"Valid"},"percent_off":{"title":"Percent Off","type":"integer","nullable":true},"prices":{"title":"Prices","additionalProperties":{"type":"number"},"type":"object","nullable":true}},"type":"object","required":["valid"],"title":"ValidateCodeResponse","description":"Public validate response. Uniform {valid: false} for EVERY failure mode\n(unknown/inactive/expired/exhausted) so codes can't be enumerated;\nfor_email is never exposed — binding surfaces only at pay time."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VerifyCode":{"properties":{"code":{"type":"string","title":"Code"}},"type":"object","required":["code"],"title":"VerifyCode"},"VerifyRequest":{"properties":{"wallet_address":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$","title":"Wallet Address"},"signature":{"type":"string","title":"Signature"},"nonce":{"type":"string","title":"Nonce"}},"type":"object","required":["wallet_address","signature","nonce"],"title":"VerifyRequest"},"VerifyResponse":{"properties":{"api_key":{"type":"string","title":"Api Key"},"tier":{"type":"string","title":"Tier"},"expires_at":{"title":"Expires At","type":"string","format":"date-time","nullable":true}},"type":"object","required":["api_key","tier"],"title":"VerifyResponse"},"VolMetricsModel":{"properties":{"rv_cc_7":{"title":"Rv Cc 7","type":"number","nullable":true},"rv_cc_30":{"title":"Rv Cc 30","type":"number","nullable":true},"rv_parkinson_30":{"title":"Rv Parkinson 30","type":"number","nullable":true},"rv_gk_7":{"title":"Rv Gk 7","type":"number","nullable":true},"rv_gk_30":{"title":"Rv Gk 30","type":"number","nullable":true},"rv_1h":{"title":"Rv 1H","type":"number","nullable":true},"vol_pctile_30":{"title":"Vol Pctile 30","type":"number","nullable":true},"vol_pctile_7":{"title":"Vol Pctile 7","type":"number","nullable":true},"rv_z_30":{"title":"Rv Z 30","type":"number","nullable":true},"rv_z_7":{"title":"Rv Z 7","type":"number","nullable":true},"term_structure_ratio":{"title":"Term Structure Ratio","type":"number","nullable":true},"vol_target_multiplier":{"title":"Vol Target Multiplier","type":"number","nullable":true},"days_compressed":{"type":"integer","title":"Days Compressed","default":0},"days_shock":{"type":"integer","title":"Days Shock","default":0},"days_in_regime":{"type":"integer","title":"Days In Regime","default":0},"prev_regime":{"title":"Prev Regime","type":"string","enum":["vol_shock","expanding","compressed","mean_reverting","normal"],"nullable":true},"regime_changed":{"type":"boolean","title":"Regime Changed","default":false},"notional_30":{"title":"Notional 30","type":"number","nullable":true}},"type":"object","title":"VolMetricsModel"},"VolatilityHistoryEntry":{"properties":{"date":{"type":"string","title":"Date"},"close":{"type":"number","title":"Close"},"rv_cc_30":{"title":"Rv Cc 30","type":"number","nullable":true},"rv_gk_30":{"title":"Rv Gk 30","type":"number","nullable":true}},"type":"object","required":["date","close"],"title":"VolatilityHistoryEntry"},"VolatilityIndexHistoryPoint":{"properties":{"date":{"type":"string","title":"Date"},"cvi_realized_30":{"title":"Cvi Realized 30","type":"number","nullable":true},"cvi_realized_7":{"title":"Cvi Realized 7","type":"number","nullable":true},"composite_score":{"title":"Composite Score","type":"number","nullable":true},"sentiment":{"title":"Sentiment","type":"string","nullable":true}},"type":"object","required":["date"],"title":"VolatilityIndexHistoryPoint"},"VolatilityIndexHistoryResponse":{"properties":{"points":{"items":{"$ref":"#/components/schemas/VolatilityIndexHistoryPoint"},"type":"array","title":"Points","default":[]},"count":{"type":"integer","title":"Count","default":0}},"type":"object","title":"VolatilityIndexHistoryResponse","description":"Daily CVI + vol-stress history reconstructed from the daily archive (Pro+)."},"VolatilityIndexResponse":{"properties":{"as_of":{"type":"string","title":"As Of"},"cvi_realized_30":{"title":"Cvi Realized 30","description":"Headline CVI: volume-weighted 30d realized vol (%)","type":"number","nullable":true},"cvi_realized_7":{"title":"Cvi Realized 7","type":"number","nullable":true},"composite_score":{"type":"number","title":"Composite Score","description":"0-100 vol-stress breadth gauge (higher = more stress)","default":50.0},"sentiment":{"type":"string","title":"Sentiment","default":"normal"},"gross_exposure_multiplier":{"type":"number","title":"Gross Exposure Multiplier","default":1.0},"median_vol_pctile_30":{"title":"Median Vol Pctile 30","type":"number","nullable":true},"universe_size":{"type":"integer","title":"Universe Size","default":0},"regime_mix":{"additionalProperties":true,"type":"object","title":"Regime Mix","description":"Regime pct shares across the universe"},"majors":{"items":{"$ref":"#/components/schemas/MajorVolEntry"},"type":"array","title":"Majors","default":[]}},"type":"object","required":["as_of"],"title":"VolatilityIndexResponse","description":"The Crypto Volatility Index headline: market-wide realized CVI + regime\nbreadth + BTC/ETH realized-vs-implied. Open to any valid key."},"VolatilityRegimeDetailResponse":{"properties":{"symbol":{"type":"string","title":"Symbol"},"source":{"type":"string","enum":["binance_spot","hyperliquid_perp"],"title":"Source"},"price":{"type":"number","title":"Price"},"regime":{"type":"string","enum":["vol_shock","expanding","compressed","mean_reverting","normal"],"title":"Regime"},"is_stable":{"type":"boolean","title":"Is Stable","default":false},"vol":{"$ref":"#/components/schemas/VolMetricsModel"},"history":{"items":{"$ref":"#/components/schemas/VolatilityHistoryEntry"},"type":"array","title":"History","default":[]},"timestamp":{"type":"string","title":"Timestamp"}},"type":"object","required":["symbol","source","price","regime","vol","timestamp"],"title":"VolatilityRegimeDetailResponse"},"VolatilityRegimeItem":{"properties":{"symbol":{"type":"string","title":"Symbol"},"source":{"type":"string","enum":["binance_spot","hyperliquid_perp"],"title":"Source"},"price":{"type":"number","title":"Price"},"regime":{"type":"string","enum":["vol_shock","expanding","compressed","mean_reverting","normal"],"title":"Regime"},"is_stable":{"type":"boolean","title":"Is Stable","default":false},"vol":{"$ref":"#/components/schemas/VolMetricsModel"}},"type":"object","required":["symbol","source","price","regime","vol"],"title":"VolatilityRegimeItem"},"VolatilityRegimeRefreshResponse":{"properties":{"refreshed":{"type":"boolean","title":"Refreshed"},"count":{"type":"integer","title":"Count"},"timestamp":{"type":"string","title":"Timestamp"}},"type":"object","required":["refreshed","count","timestamp"],"title":"VolatilityRegimeRefreshResponse"},"VolatilityRegimeResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/VolatilityRegimeItem"},"type":"array","title":"Items"},"count":{"type":"integer","title":"Count"},"universe_size":{"type":"integer","title":"Universe Size"},"timestamp":{"type":"string","title":"Timestamp"}},"type":"object","required":["items","count","universe_size","timestamp"],"title":"VolatilityRegimeResponse"},"VolatilityRegimeScoreResponse":{"properties":{"as_of":{"type":"string","title":"As Of"},"composite_score":{"type":"number","title":"Composite Score"},"sentiment":{"type":"string","title":"Sentiment"},"target_vol":{"type":"number","title":"Target Vol","default":60.0},"gross_exposure_multiplier":{"type":"number","title":"Gross Exposure Multiplier","default":1.0},"median_vol_pctile_30":{"title":"Median Vol Pctile 30","type":"number","nullable":true},"aggregate":{"additionalProperties":true,"type":"object","title":"Aggregate","description":"Regime counts + pct shares across the tracked universe"}},"type":"object","required":["as_of","composite_score","sentiment"],"title":"VolatilityRegimeScoreResponse","description":"Trimmed composite-only companion to /volatility/regime."},"VolumeHistoryPoint":{"properties":{"date":{"type":"string","title":"Date"},"notional":{"type":"number","title":"Notional"}},"type":"object","required":["date","notional"],"title":"VolumeHistoryPoint"},"VolumeHistoryResponse":{"properties":{"history":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"History"}},"type":"object","required":["history"],"title":"VolumeHistoryResponse","description":"Daily volume history derived from the local kline archive."},"VolumeScannerDetailResponse":{"properties":{"symbol":{"type":"string","title":"Symbol"},"price":{"type":"number","title":"Price"},"change_24h":{"title":"Change 24H","type":"number","nullable":true},"volume_change_24h":{"title":"Volume Change 24H","type":"number","nullable":true},"spark_7d":{"items":{"type":"number"},"type":"array","title":"Spark 7D","default":[]},"volume_24h":{"type":"number","title":"Volume 24H"},"avg_volume_30d":{"title":"Avg Volume 30D","type":"number","nullable":true},"median_volume_30d":{"title":"Median Volume 30D","type":"number","nullable":true},"multiplier":{"title":"Multiplier","type":"number","nullable":true},"multiplier_median":{"title":"Multiplier Median","type":"number","nullable":true},"open_interest_usd":{"type":"number","title":"Open Interest Usd","default":0.0},"funding_rate":{"type":"number","title":"Funding Rate","default":0.0},"days_of_history":{"type":"integer","title":"Days Of History","default":0},"band":{"type":"string","enum":["dormant","quiet","normal","elevated","surging","extreme","unknown"],"title":"Band","default":"unknown"},"as_of":{"type":"string","title":"As Of"},"history":{"items":{"$ref":"#/components/schemas/VolumeHistoryPoint"},"type":"array","title":"History","default":[]}},"type":"object","required":["symbol","price","volume_24h","as_of"],"title":"VolumeScannerDetailResponse"},"VolumeScannerItem":{"properties":{"symbol":{"type":"string","title":"Symbol"},"price":{"type":"number","title":"Price"},"change_24h":{"title":"Change 24H","type":"number","nullable":true},"volume_change_24h":{"title":"Volume Change 24H","type":"number","nullable":true},"spark_7d":{"items":{"type":"number"},"type":"array","title":"Spark 7D","default":[]},"volume_24h":{"type":"number","title":"Volume 24H"},"avg_volume_30d":{"title":"Avg Volume 30D","type":"number","nullable":true},"median_volume_30d":{"title":"Median Volume 30D","type":"number","nullable":true},"multiplier":{"title":"Multiplier","type":"number","nullable":true},"multiplier_median":{"title":"Multiplier Median","type":"number","nullable":true},"open_interest_usd":{"type":"number","title":"Open Interest Usd","default":0.0},"funding_rate":{"type":"number","title":"Funding Rate","default":0.0},"days_of_history":{"type":"integer","title":"Days Of History","default":0},"band":{"type":"string","enum":["dormant","quiet","normal","elevated","surging","extreme","unknown"],"title":"Band","default":"unknown"}},"type":"object","required":["symbol","price","volume_24h"],"title":"VolumeScannerItem"},"VolumeScannerResponse":{"properties":{"as_of":{"type":"string","title":"As Of"},"items":{"items":{"$ref":"#/components/schemas/VolumeScannerItem"},"type":"array","title":"Items"},"count":{"type":"integer","title":"Count"},"universe_size":{"type":"integer","title":"Universe Size"},"rated_size":{"type":"integer","title":"Rated Size"},"total_volume_24h":{"type":"number","title":"Total Volume 24H"},"market_multiplier":{"title":"Market Multiplier","type":"number","nullable":true},"surging_count":{"type":"integer","title":"Surging Count","default":0},"window_days":{"type":"integer","title":"Window Days","default":30}},"type":"object","required":["as_of","items","count","universe_size","rated_size","total_volume_24h"],"title":"VolumeScannerResponse"},"WalletSession":{"properties":{"api_key":{"type":"string","title":"Api Key"}},"type":"object","required":["api_key"],"title":"WalletSession"},"WatchlistAddDetailedRequest":{"properties":{"entries":{"items":{"$ref":"#/components/schemas/WatchlistAddEntry"},"type":"array","title":"Entries"}},"type":"object","required":["entries"],"title":"WatchlistAddDetailedRequest"},"WatchlistAddEntry":{"properties":{"address":{"type":"string","title":"Address"},"label":{"title":"Label","type":"string","nullable":true},"notes":{"title":"Notes","type":"string","nullable":true}},"type":"object","required":["address"],"title":"WatchlistAddEntry"},"WatchlistRemoveRequest":{"properties":{"addresses":{"items":{"type":"string"},"type":"array","title":"Addresses"}},"type":"object","required":["addresses"],"title":"WatchlistRemoveRequest"},"WebhookCreate":{"properties":{"url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Url"},"secret":{"type":"string","title":"Secret"},"label":{"type":"string","title":"Label"},"enabled":{"type":"boolean","title":"Enabled","default":true},"addresses":{"title":"Addresses","items":{"type":"string"},"type":"array","nullable":true},"events":{"title":"Events","items":{"type":"string"},"type":"array","nullable":true}},"type":"object","required":["url","secret","label"],"title":"WebhookCreate"},"WebhookOut":{"properties":{"id":{"type":"integer","title":"Id"},"url":{"type":"string","title":"Url"},"label":{"type":"string","title":"Label"},"enabled":{"type":"boolean","title":"Enabled"},"addresses":{"title":"Addresses","items":{"type":"string"},"type":"array","nullable":true},"events":{"title":"Events","items":{"type":"string"},"type":"array","nullable":true},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","url","label","enabled","created_at"],"title":"WebhookOut"},"WebhookUpdate":{"properties":{"url":{"title":"Url","type":"string","maxLength":2083,"minLength":1,"format":"uri","nullable":true},"secret":{"title":"Secret","type":"string","nullable":true},"enabled":{"title":"Enabled","type":"boolean","nullable":true},"addresses":{"title":"Addresses","items":{"type":"string"},"type":"array","nullable":true},"events":{"title":"Events","items":{"type":"string"},"type":"array","nullable":true},"clear_addresses":{"type":"boolean","title":"Clear Addresses","default":false},"clear_events":{"type":"boolean","title":"Clear Events","default":false}},"type":"object","title":"WebhookUpdate"},"WhaleAccumulationScoreResponse":{"properties":{"signal":{"type":"string","title":"Signal"},"counts":{"title":"Counts","additionalProperties":{"type":"integer"},"type":"object","nullable":true},"tracked_tokens":{"title":"Tracked Tokens","items":{"type":"string"},"type":"array","nullable":true},"symbol":{"title":"Symbol","type":"string","nullable":true},"deltas":{"title":"Deltas","additionalProperties":{"$ref":"#/components/schemas/WhaleDeltaWindow"},"type":"object","nullable":true},"reason":{"title":"Reason","type":"string","nullable":true}},"type":"object","required":["signal"],"title":"WhaleAccumulationScoreResponse"},"WhaleDeltaWindow":{"properties":{"available":{"type":"boolean","title":"Available"},"delta":{"title":"Delta","type":"number","nullable":true},"pct_change":{"title":"Pct Change","type":"number","nullable":true}},"type":"object","required":["available"],"title":"WhaleDeltaWindow"},"WhaleHolderRecord":{"properties":{"address":{"type":"string","title":"Address"},"balance":{"type":"number","title":"Balance"},"share_pct":{"type":"number","title":"Share Pct"}},"type":"object","required":["address","balance","share_pct"],"title":"WhaleHolderRecord"},"WhaleSymbolEntry":{"properties":{"non_cex_holder_count":{"type":"integer","title":"Non Cex Holder Count"},"total_balance":{"type":"number","title":"Total Balance"},"total_share_pct":{"type":"number","title":"Total Share Pct"},"top_5":{"items":{"$ref":"#/components/schemas/WhaleHolderRecord"},"type":"array","title":"Top 5"},"deltas":{"additionalProperties":{"$ref":"#/components/schemas/WhaleDeltaWindow"},"type":"object","title":"Deltas"},"accumulation_signal":{"type":"string","title":"Accumulation Signal"}},"type":"object","required":["non_cex_holder_count","total_balance","total_share_pct","top_5","deltas","accumulation_signal"],"title":"WhaleSymbolEntry"},"WhalesResponse":{"properties":{"as_of":{"type":"integer","title":"As Of"},"tracked_tokens":{"items":{"type":"string"},"type":"array","title":"Tracked Tokens"},"total_non_cex_holders":{"type":"integer","title":"Total Non Cex Holders"},"by_symbol":{"additionalProperties":{"$ref":"#/components/schemas/WhaleSymbolEntry"},"type":"object","title":"By Symbol"}},"type":"object","required":["as_of","tracked_tokens","total_non_cex_holders","by_symbol"],"title":"WhalesResponse"},"WindowFlow":{"properties":{"inflow":{"type":"number","title":"Inflow","default":0.0},"outflow":{"type":"number","title":"Outflow","default":0.0},"net":{"type":"number","title":"Net","default":0.0}},"type":"object","title":"WindowFlow"}},"securitySchemes":{"APIKeyHeader":{"type":"apiKey","in":"header","name":"X-API-Key"}}},"servers":[{"url":"https://cryptodataapi.com"}],"tags":[{"name":"Authentication","description":"API key management — create, inspect, rotate, and revoke `cdk_live_` keys."},{"name":"Health","description":"Service liveness probe (no API key required)."},{"name":"Daily Snapshot","description":"One-call daily market overview — health scores, derivatives, sentiment, macro, cycle indicators, and coin profiles. Rebuilt 20:00 UTC."},{"name":"Coins","description":"Coin profiles, search, top lists, and curated category groups."},{"name":"Market Data","description":"Spot klines, tickers, prices, and exchange info."},{"name":"Market Health","description":"Dual-score (long-term + short-term) market health system with component breakdowns and history."},{"name":"Market Intelligence","description":"ETF flows, liquidations, options, exchange balances, Coinbase premium, BTC cycle indicators, and more."},{"name":"Derivatives","description":"Futures funding rates, open interest, and long/short ratios — Binance plus cross-exchange aggregates."},{"name":"Hyperliquid","description":"Hyperliquid perp market data — prices, funding, open interest, candles, L2 books."},{"name":"Hyperliquid Traders","description":"Top-trader leaderboard, wallet positions/signals/trades, watchlists, and copy signals."},{"name":"Liquidity / Market Depth","description":"L2 depth snapshots, OI/price divergence, and the liquidity regime classifier."},{"name":"Indicators","description":"SIGNUM RGG trend radar and the technical/structural regime screener."},{"name":"Quant","description":"HMM regime engine — market and per-coin probabilities, trader positioning, gamma exposure, whale activity, and history."},{"name":"Regimes","description":"Long-horizon 10-state market-cycle taxonomy and the current detected regime."},{"name":"Volatility Regime","description":"Per-asset realized-vol regime classifier, market-wide stress score, and per-symbol detail."},{"name":"Meme Regime","description":"Meme/speculative lifecycle regimes and the market-wide hype score."},{"name":"Event / Catalyst Regime","description":"Forward catalyst calendar — token unlocks, macro prints, depegs — with event-risk scoring."},{"name":"Security / Black Swan Regime","description":"Hack/exploit event feed and the security regime score."},{"name":"Geopolitical / Policy Shock Regime","description":"Policy and geopolitical shock regime with driving headlines."},{"name":"Sentiment & Macro","description":"Fear & Greed index, macro indicators, and stablecoin supply flows."},{"name":"On-Chain Intelligence","description":"Stablecoin reserves, exchange flows, miner reserves, dormancy/MVRV, and whale accumulation."},{"name":"DEX & Meme Coins","description":"Trending DEX pairs, new pools, and token security checks."},{"name":"NFTs","description":"NFT market overview, volume, collections, and correlations."},{"name":"Strategy Baskets","description":"The trading-strategy meta-basket catalogue."},{"name":"Backtesting","description":"Historical archives — daily snapshots, klines, funding, liquidations, and bulk Parquet downloads."},{"name":"Webhooks","description":"Register and manage webhook subscriptions."},{"name":"Payments","description":"Subscription plans, x402 agent subscribe, and invoices."},{"name":"Wallet Auth","description":"Wallet-signature login — challenge, verify, session."},{"name":"Wallet Payments","description":"On-chain USDC plan upgrades and invoices."}]}