{"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-10-08"},"paths":{"/api/v1/health":{"get":{"tags":["Health"],"summary":"Health Check","description":"Basic health check endpoint (no auth required).","operationId":"health_check_api_v1_health_get","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_get","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\nShares key_limits_block with the mint and /resend-verify, so the three\nsurfaces cannot disagree about what this key may do.\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/catalog/groups":{"get":{"tags":["Indicators"],"summary":"List Indicator Groups","description":"Every indicator group with its description, count and the CDA endpoints\nthat serve it or its inputs.","operationId":"list_indicator_groups_api_v1_indicators_catalog_groups_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndicatorGroupsResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/indicators/catalog":{"get":{"tags":["Indicators"],"summary":"List Indicators","description":"Every catalogue indicator (optionally one group): what it measures,\naliases and the endpoints behind it.","operationId":"list_indicators_api_v1_indicators_catalog_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"group","in":"query","required":false,"schema":{"description":"Group slug from /indicators/catalog/groups, e.g. volatility","title":"Group","type":"string","nullable":true},"description":"Group slug from /indicators/catalog/groups, e.g. volatility"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndicatorsCatalogResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/indicators/catalog/{slug}":{"get":{"tags":["Indicators"],"summary":"Get Indicator","description":"One indicator in full: definition summary, strategies that use it, the\nCDA endpoints behind it, its AlgoBrain page path and an AI-agent prompt.","operationId":"get_indicator_api_v1_indicators_catalog__slug__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndicatorDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/indicators/signum-rgg":{"get":{"tags":["Indicators"],"summary":"Get Signum Rgg","description":"SIGNUM_RGG trend radar across all live Hyperliquid perps + liquid 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. Recomputed hourly (:05 UTC).\n\n**Bar contract:** ``color`` / ``days_in_color`` / ``adx`` / ``flipped_at`` /\n``price`` are read from **completed** daily bars (``computed_from`` = the\nlast completed UTC day, ``is_final: true``). ``color_live`` / ``adx_live`` /\n``days_in_color_live`` include the forming UTC bar and can change intraday.\n\n**flip_alert** is true when the last 4 closed 1h bars ALL carry a colour\ndifferent from the daily ``color`` (``intraday_disagrees`` is the same\nvalue; ``flip_alert_reason`` names it). ``recent_flip`` = ``days_in_color\n<= 3``. ``intraday_timeframe`` is always ``\"1h\"``.\n\n**pegged** rows (stablecoins, $1-pinned tokens) stay in the list but are\nexcluded from every breadth aggregate and top list on ``/daily``.\n\nUniverse: Hyperliquid wins the dedupe on overlap; Binance spot fills the\ngaps (pairs with >=$100k 24h quote volume). ``universe_size`` is the full\nrow count before filters; page with ``offset`` + ``limit`` (max 1000).","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":1000,"minimum":1,"default":250,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Rows to skip after sorting (pagination)","default":0,"title":"Offset"},"description":"Rows to skip after sorting (pagination)"}],"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\n``history`` is the completed-bar colour per day (same contract as the list\nroute). ``intraday_history`` (the per-bar 1h series) is **only populated\nwith ``?intraday=true``** — it costs a live candle pull, memoised per\nsymbol for 30 minutes; without the flag the response is served entirely\nfrom the hourly cache. ``h4_history`` (the per-bar 4h series on the UTC grid of\n``/hyperliquid/candles?interval=4h``, completed bars only) is populated with\n``?h4=true`` from the same memoised pull.\n\nAn exact Hyperliquid universe name (``kPEPE``) resolves to the HL perp row;\nthe plain ticker (``PEPE``) resolves to the plain-ticker row, and\n``kBONK``-style names fall back to the plain symbol when no HL row exists.","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"}},{"name":"intraday","in":"query","required":false,"schema":{"type":"boolean","description":"Attach the ~60d per-bar 1h intraday_history (one live candle pull per symbol per 30 min; omitted by default)","default":false,"title":"Intraday"},"description":"Attach the ~60d per-bar 1h intraday_history (one live candle pull per symbol per 30 min; omitted by default)"},{"name":"h4","in":"query","required":false,"schema":{"type":"boolean","description":"Attach h4_history: the per-bar 4h SIGNUM series (last 90 completed 4h bars), aggregated from the same 1h pull as `intraday` — asking for both costs one fetch","default":false,"title":"H4"},"description":"Attach h4_history: the per-bar 4h SIGNUM series (last 90 completed 4h bars), aggregated from the same 1h pull as `intraday` — asking for both costs one fetch"}],"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, RSI(14) extremes on\ndaily + 1h timeframes, and `sr` — up to 3 support + 3 resistance levels\nper side, from swing-high/low pivots on the daily series, nearest to\ncurrent price first. A level's `strength` is how many pivots clustered\ninto it; `dist_pct` is its signed % distance from mark (negative =\nsupport, positive = resistance). Levels further than 30% from mark are\ndropped as not actionable.\n\n``breadth`` reports compression breadth over the FULL universe regardless\nof filters: ``{total, in_squeeze, pct_in_squeeze,\npct_in_squeeze_pctile_30d, history_days}`` — the percentile ranks today's\nsqueeze share against the last 30 archived daily values (null until 10\ndays are archived).\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/indicators/heatmap":{"get":{"tags":["Indicators"],"summary":"Get Indicator Heatmap","description":"One-call scan table for a coin universe (Pro) — what otherwise takes one call per coin.\n\nEach row joins the SIGNUM_RGG daily colour (``signum``, ``days_in_color``, ``adx``),\nrolling hourly moves (``pct_1h``, ``pct_4h``, ``pct_24h``), 30-day notional liquidity\n(``notional_30`` — mean daily USD volume, the same field as ``/volatility/regime``\n``vol.notional_30``) and the daily 200-SMA position (``above_sma200``,\n``dist_from_200_pct`` — from ``/indicators/technical``). Served from data the API already\nholds, so the whole universe is one instant call and spends no exchange rate limit.\n\n**The moves are rolling windows over COMPLETED hourly bars.** ``pct_4h`` is the change from\nthe close four hours before the last completed hourly close to that close — it is NOT the\nopen-to-close of a 4h bar, so it is not aligned to 00/04/08 UTC. ``as_of`` is the close\ntime of that last completed bar. They refresh hourly (:05 UTC) with SIGNUM_RGG, so during\nthe hour they describe the last full hour, not the forming one. ``price`` is that bar's\nclose. A window whose bar is missing from the series is ``null``. ``pct_4h_bar`` IS the\nclock-aligned move: open to close of the last closed UTC 4h bar, ending at\n``bar_4h_as_of``. The top-level ``moves`` object states this in every response.\n\n``signum`` / ``days_in_color`` / ``adx`` are the completed-DAILY read, the same bar\ncontract as ``/indicators/signum-rgg``. ``signum_4h`` / ``bars_in_color_4h`` are the same\ncascade over COMPLETED 4h bars on the ``/hyperliquid/candles?interval=4h`` grid (null when\nunder 30 complete 4h bars). Pegged / stablecoin rows are excluded.\n\nFilters: ``min_notional_30`` (liquidity floor), ``color``, ``color_4h``, ``above_sma200``. Sort with\n``sort`` (default ``notional_30``); ``sort=pct`` orders by the move named by ``interval``.\nRows lacking the sort value go last. ``source`` defaults to ``hyperliquid_perp``.\n\nExample: ``?min_notional_30=3000000&color=green&above_sma200=true&sort=pct&interval=4h``.","operationId":"get_indicator_heatmap_api_v1_indicators_heatmap_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"source","in":"query","required":false,"schema":{"enum":["hyperliquid_perp","binance_spot","all"],"type":"string","description":"Universe. `all` adds the Binance-spot fill.","default":"hyperliquid_perp","title":"Source"},"description":"Universe. `all` adds the Binance-spot fill."},{"name":"interval","in":"query","required":false,"schema":{"enum":["1h","4h"],"type":"string","description":"Which move `sort=pct` orders by (`pct_1h` or `pct_4h`). Every row always carries all three moves.","default":"4h","title":"Interval"},"description":"Which move `sort=pct` orders by (`pct_1h` or `pct_4h`). Every row always carries all three moves."},{"name":"min_notional_30","in":"query","required":false,"schema":{"description":"Liquidity floor: drop rows whose 30-day mean daily USD notional is below this (rows with unknown liquidity are dropped too).","title":"Min Notional 30","type":"number","minimum":0,"nullable":true},"description":"Liquidity floor: drop rows whose 30-day mean daily USD notional is below this (rows with unknown liquidity are dropped too)."},{"name":"color","in":"query","required":false,"schema":{"title":"Color","enum":["red","grey","green"],"type":"string","nullable":true}},{"name":"color_4h","in":"query","required":false,"schema":{"description":"Filter on the 4h SIGNUM colour (`signum_4h`).","title":"Color 4H","enum":["red","grey","green"],"type":"string","nullable":true},"description":"Filter on the 4h SIGNUM colour (`signum_4h`)."},{"name":"above_sma200","in":"query","required":false,"schema":{"description":"true = above the daily 200-SMA, false = below.","title":"Above Sma200","type":"boolean","nullable":true},"description":"true = above the daily 200-SMA, false = below."},{"name":"sort","in":"query","required":false,"schema":{"enum":["notional_30","pct","days_in_color","adx","symbol"],"type":"string","default":"notional_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/HeatmapResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/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/hyperliquid/history":{"get":{"tags":["Derivatives"],"summary":"Hyperliquid Derivatives History","description":"Daily Hyperliquid funding rate + open interest history, derived from our\nown 5-min `bt_funding` archive (captured since 2026-03-30 — nothing earlier\nexists anywhere, HL's funding-history API has never carried OI). Pro Plus.","operationId":"hyperliquid_derivatives_history_api_v1_derivatives_hyperliquid_history_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"symbol","in":"query","required":false,"schema":{"type":"string","description":"Hyperliquid coin, e.g. BTC","default":"BTC","title":"Symbol"},"description":"Hyperliquid coin, e.g. BTC"},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":180,"minimum":1,"default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HyperliquidDerivativesHistoryResponse"}}}},"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 for ONE coin across Binance + Hyperliquid.\n\nPer-coin by design (`?coin=`, default BTC). The public /funding-rates board\nlists every Hyperliquid perp; for that universe over REST use\n`GET /api/v1/hyperliquid/open-interest` (`assets[].funding_rate`).\n\n`hyperliquid.history_count` is the number of recent HL settlements fetched\nalongside the live rate. Read it with `history_status`: `ok` (history\npresent), `warming` (the fetch is still running — retry in a few seconds; the\nlive `current_rate` is unaffected), `unavailable` (HL returned nothing, or the\ncoin is not an HL perp). `0` with `warming` is not a stuck feed.","operationId":"cross_exchange_funding_api_v1_derivatives_funding_rates_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"coin","in":"query","required":false,"schema":{"type":"string","description":"One coin per call, e.g. BTC, ETH, SOL","default":"BTC","title":"Coin"},"description":"One coin per call, e.g. BTC, ETH, SOL"}],"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 — plus the fee schedule.\n\n``fees`` is Hyperliquid's published schedule as fractions of notional\n(``perps.taker`` 0.00045 = 0.045%): base-tier ``perps`` / ``spot`` rates, the\nfull ``volume_tiers`` table, and ``as_of`` / ``source`` so you can check it.\nIt is venue-wide — HL has no per-coin fee — and static on our side.","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.\n\n``as_of`` (ms) is when the ``allMids`` snapshot was fetched from HL (the\ncache refreshes every 60s, stale-while-refresh); ``generated_at`` (ms) is\nwhen this response was built.","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":{"description":"HL coin name (default BTC)","title":"Coin","type":"string","nullable":true},"description":"HL coin name (default BTC)"},{"name":"symbol","in":"query","required":false,"schema":{"description":"Alias for `coin` (the rest of the API says `symbol`). Send one or the other.","title":"Symbol","type":"string","nullable":true},"description":"Alias for `coin` (the rest of the API says `symbol`). Send one or the other."},{"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.\n\n``as_of`` (ms) is when the ``metaAndAssetCtxs`` snapshot behind every row\nwas fetched (60s cadence); ``generated_at`` (ms) is when this response was\nbuilt. ``open_interest_usd = open_interest x mark_price``; ``premium`` is\nHL's own context field. ``coverage`` explains the row count: HL keeps\ndelisted perps in its universe and they are excluded here.","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/batch":{"get":{"tags":["Hyperliquid"],"summary":"Get Candles Batch","description":"Trailing OHLCV candles for up to 25 coins in ONE call — the same bars\n``/hyperliquid/candles`` serves per coin, keyed by coin under ``series``.\n\nTrailing ``limit`` only; for an explicit ``start``/``end`` range use the\nsingle-coin route. Every coin must be in HL's universe (400 ``unknown_coin``\notherwise — nothing is silently dropped). On a cold cache a series that has\nnot arrived within ~8s is listed in ``pending`` instead of holding the\nwhole response, and ``retry_after_s`` says how long to wait (scaled to how many\nare still fetching): their fetches keep running and are cached, so retry just\nthe ``pending`` coins after that. A cold coin costs Hyperliquid rate limit\n(~20 weight, whatever ``limit`` is), so a first pull of many coins takes a\nwhile and repeat pulls are instant; for a whole-universe scan that needs no\ncandles at all, use ``/indicators/heatmap``. ``atr`` and\n``forming_bar_timestamp`` behave as on ``/hyperliquid/candles``.\n\nThe contract: ``complete`` is true iff every requested coin is in ``series``; a\ncoin is never in both ``series`` and ``pending``. ``wait`` (0-25s, default 8)\nholds longer for a caller that prefers one call over a poll. ``closed_only=true``\nreturns the last ``limit`` COMPLETED bars — the read for a strategy that acts on a\nclosed bar — and is served from any series fetched since the latest close, so the\nliquid coins pre-warmed just after each 4h close stay instant for the whole bar.\nFees for sizing are on ``/hyperliquid/meta`` (``fees``); funding + OI on the same\nbar grid are ``/backtesting/hl-funding-bars`` (join on ``timestamp``).","operationId":"get_candles_batch_api_v1_hyperliquid_candles_batch_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"coins","in":"query","required":false,"schema":{"description":"Comma list of HL coin names, e.g. ETH,SOL,BNB (up to 25)","title":"Coins","type":"string","nullable":true},"description":"Comma list of HL coin names, e.g. ETH,SOL,BNB (up to 25)"},{"name":"symbols","in":"query","required":false,"schema":{"description":"Alias for `coins`. Send one or the other.","title":"Symbols","type":"string","nullable":true},"description":"Alias for `coins`. Send one or the other."},{"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"}},{"name":"atr","in":"query","required":false,"schema":{"description":"Add a Wilder ATR of this period to every bar as `atr` (e.g. 14). Null for the first `atr` bars of the window; pull at least ~10x the period for a converged value.","title":"Atr","type":"integer","maximum":200,"minimum":2,"nullable":true},"description":"Add a Wilder ATR of this period to every bar as `atr` (e.g. 14). Null for the first `atr` bars of the window; pull at least ~10x the period for a converged value."},{"name":"closed_only","in":"query","required":false,"schema":{"type":"boolean","description":"true = COMPLETED bars only: the last `limit` closed bars, no forming bar. Served from any series fetched since the latest bar close, so it stays warm for the whole bar (the default trailing window is re-fetched every few minutes).","default":false,"title":"Closed Only"},"description":"true = COMPLETED bars only: the last `limit` closed bars, no forming bar. Served from any series fetched since the latest bar close, so it stays warm for the whole bar (the default trailing window is re-fetched every few minutes)."},{"name":"wait","in":"query","required":false,"schema":{"description":"Seconds to hold for cold series before answering with `pending` (0-25, default 8).","title":"Wait","type":"number","maximum":25,"minimum":0,"nullable":true},"description":"Seconds to hold for cold series before answering with `pending` (0-25, default 8)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HLCandleBatchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/hyperliquid/candles":{"get":{"tags":["Hyperliquid"],"summary":"Get Candles","description":"OHLCV candles for a coin — trailing ``limit`` bars, or an explicit range.\n\n**These are Hyperliquid's own bars** (``candleSnapshot``) — the execution\ntruth for an HL book: signal, size and mark a Hyperliquid position from this\nseries. ``/api/v1/backtesting/klines`` is our archive of the same venue's 1m\nbars for deep history, not a second price source. For several coins at once\nuse ``/hyperliquid/candles/batch``.\n\n``coin`` is HL's own name, matched case-insensitively (``symbol`` is accepted\nas an alias, and a ``USDT`` / ``-PERP`` suffix is tolerated). A name HL does\nnot list is a 400 ``unknown_coin`` and an unrecognised query parameter a 400\n``unknown_parameter`` — never a silent default-coin reply.\n\n``atr=14`` adds a Wilder ATR to every bar (``atr``; null for the first\n``atr`` bars) computed on this exact series, so every agent uses the same\nnumber. The LAST bar is usually still forming: ``forming_bar_timestamp``\nnames it (null when the last bar has closed) — drop it, and its ``atr``,\nfor completed-bar signals.\n\nPass ``start`` (and optionally ``end``) as epoch milliseconds or ISO-8601\nto fetch a fixed window instead of the trailing ``limit``; ranges longer\nthan one candleSnapshot page are paginated, up to **15,000 bars** per call\n(400 above that — narrow the window or step the interval up). Explicit\nranges bypass the 60s response cache and spend live HL weight (20 per\n1,500-bar page), so poll them sparingly.\n\n**Retention is Hyperliquid's, not ours:** HL serves roughly 4 days of 1m\nbars and progressively more at coarser intervals; a ``start`` older than\nthat simply returns fewer bars. For multi-month 1m history use\n``/api/v1/backtesting/klines?exchange=hyperliquid&start=&end=`` (our own\narchive since 2026-03-30).\n\n``start`` / ``end`` in the response echo the resolved window (ms) for a\nrange request and are null for a trailing pull.","operationId":"get_candles_api_v1_hyperliquid_candles_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"coin","in":"query","required":false,"schema":{"description":"HL coin name, e.g. BTC, SOL, kPEPE (default BTC)","title":"Coin","type":"string","nullable":true},"description":"HL coin name, e.g. BTC, SOL, kPEPE (default BTC)"},{"name":"symbol","in":"query","required":false,"schema":{"description":"Alias for `coin` (the rest of the API says `symbol`). Send one or the other.","title":"Symbol","type":"string","nullable":true},"description":"Alias for `coin` (the rest of the API says `symbol`). Send one or the other."},{"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"}},{"name":"start","in":"query","required":false,"schema":{"description":"Range start — epoch ms or ISO-8601. With `start`/`end` the trailing `limit` is ignored; the range is capped at 15,000 bars.","title":"Start","type":"string","nullable":true},"description":"Range start — epoch ms or ISO-8601. With `start`/`end` the trailing `limit` is ignored; the range is capped at 15,000 bars."},{"name":"end","in":"query","required":false,"schema":{"description":"Range end — epoch ms or ISO-8601 (default: now)","title":"End","type":"string","nullable":true},"description":"Range end — epoch ms or ISO-8601 (default: now)"},{"name":"atr","in":"query","required":false,"schema":{"description":"Add a Wilder ATR of this period to every bar as `atr` (e.g. 14). Null for the first `atr` bars of the window; pull at least ~10x the period for a converged value.","title":"Atr","type":"integer","maximum":200,"minimum":2,"nullable":true},"description":"Add a Wilder ATR of this period to every bar as `atr` (e.g. 14). Null for the first `atr` bars of the window; pull at least ~10x the period for a converged value."}],"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.\n\n``ts`` (ms) is Hyperliquid's own timestamp for the book snapshot (from the\n``l2Book`` payload's ``time`` field) — null only if HL omitted it. The\ncollector dedupes identical requests for 3s, so two calls inside that\nwindow return the same ``ts``.","operationId":"get_l2_book_api_v1_hyperliquid_l2_book_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"coin","in":"query","required":false,"schema":{"description":"HL coin name (default BTC)","title":"Coin","type":"string","nullable":true},"description":"HL coin name (default BTC)"},{"name":"symbol","in":"query","required":false,"schema":{"description":"Alias for `coin` (the rest of the API says `symbol`). Send one or the other.","title":"Symbol","type":"string","nullable":true},"description":"Alias for `coin` (the rest of the API says `symbol`). Send one or the other."}],"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``.\n\n``as_of`` (ms) is the fetch instant of the ``metaAndAssetCtxs`` snapshot\nbehind funding / OI / mark / oracle / volume; ``price_as_of`` is the same\nfor the ``allMids`` mid ``price``; ``generated_at`` is when this response\nwas built. Both snapshots refresh every 60s.","operationId":"get_summary_api_v1_hyperliquid_summary_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"coin","in":"query","required":false,"schema":{"description":"HL coin name (default BTC)","title":"Coin","type":"string","nullable":true},"description":"HL coin name (default BTC)"},{"name":"symbol","in":"query","required":false,"schema":{"description":"Alias for `coin` (the rest of the API says `symbol`). Send one or the other.","title":"Symbol","type":"string","nullable":true},"description":"Alias for `coin` (the rest of the API says `symbol`). Send one or the other."}],"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/trade-flow":{"get":{"tags":["Hyperliquid"],"summary":"Get Trade Flow","description":"Per-minute taker buy/sell flow for one perp, newest last, dense.\n\nEvery row is one closed UTC minute. ``buy_notional`` / ``sell_notional``\nare USD notional by AGGRESSOR side (HL ``B`` = taker bought, ``A`` = taker\nsold); their sum is the minute's total traded notional. ``vwap`` is that\nminute's notional-weighted price; ``max_fill_usd`` the largest single\nfill; ``large_fill_share`` the share of notional from fills at or above\n``large_fill_usd`` (``null`` when none qualify). ``cvd_usd`` is the\ncumulative buy-minus-sell notional running from ``window_start`` — it\nresets per request, so compare rows within one response only.\n\n``partial: true`` means our socket did not watch the whole minute (a\nreconnect, a deploy). Such minutes come back with ``null`` notional when\nnothing was captured, and are NOT back-filled — HL's public stream has no\nreplay. A covered minute with no fills is a genuine zero (``0.0``,\n``partial: false``). ``stream.coverage_pct`` is the share of the last 60\nminutes fully watched.\n\nThe current, still-open minute is never included. 503\n``trade_flow_warming`` until the first bucket closes (about a minute\nafter the collector starts); 404 for a coin HL does not list. Pro.","operationId":"get_trade_flow_api_v1_hyperliquid_trade_flow_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"coin","in":"query","required":false,"schema":{"type":"string","description":"HL coin name (BTC, ETH, kPEPE — case-sensitive after the first letter for k-prefixed perps)","default":"BTC","title":"Coin"},"description":"HL coin name (BTC, ETH, kPEPE — case-sensitive after the first letter for k-prefixed perps)"},{"name":"minutes","in":"query","required":false,"schema":{"type":"integer","maximum":1440,"minimum":1,"description":"Trailing window in whole minutes (max 24h)","default":60,"title":"Minutes"},"description":"Trailing window in whole minutes (max 24h)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HLTradeFlowResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/hyperliquid/trade-flow/universe":{"get":{"tags":["Hyperliquid"],"summary":"Get Trade Flow Universe","description":"Taker flow for EVERY Hyperliquid perp over one window, biggest first.\n\n``taker_buy_ratio`` is buy notional over total (0..1; ``null`` for a coin\nwith no fills). ``large_fill_share`` is the share of the window's notional\nfrom fills at or above ``large_fill_usd``. ``partial_minutes`` counts the\nwindow's minutes our socket did not fully watch — the same for every row,\nsince coverage is per connection, not per coin. Coins with zero fills in\nthe window are omitted. ``as_of`` is the window's end (the last closed\nminute). Pro Plus.","operationId":"get_trade_flow_universe_api_v1_hyperliquid_trade_flow_universe_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"window","in":"query","required":false,"schema":{"type":"string","pattern":"^(15m|1h|4h)$","description":"15m, 1h or 4h","default":"1h","title":"Window"},"description":"15m, 1h or 4h"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HLTradeFlowUniverseResponse"}}}},"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/algobrain/search":{"get":{"tags":["AlgoBrain"],"summary":"Search Algobrain","description":"Search the AlgoBrain strategy wiki (~5k pages: strategies, the Hyperliquid\nsignal baskets, concepts, methodology) — BM25-ranked, title/alias/tag matches\nweighted above body text.\n\nEach result carries ``path``, ``title``, ``type``, ``tags``, a ``snippet``\naround the match, a relevance ``score`` (higher is better; null when ``q`` is\nempty and only filters apply) and ``read`` — the ``/algobrain/page`` URL for\nthe full markdown. Give ``q`` or at least one filter. All tiers. Content is CC BY 4.0.\n\nStrategy pages also carry ``strategy``: the authors' frontmatter —\n``backtest_status``, ``horizon``, ``strategy_type``, ``complexity``,\n``crowding_risk``, ``markets``, ``edge_source`` and the ESTIMATES\n``expected_sharpe`` / ``expected_max_drawdown`` / ``breakeven_cost_bps``, labelled\n``expected_sharpe_source: \"author_estimate\"``. They are literature expectations, not\nresults measured on any venue, so results are never ranked by them; filter on\n``backtest_status`` (e.g. ``cost-corrected``, ``walk-forward-validated``, ``live``)\nto find the pages with the most evidence behind them. ``strategy`` is null on\nnon-strategy pages. Each strategy filter is an any-of match (``horizon=swing``\nalso finds ``swing|position`` pages).","operationId":"search_algobrain_api_v1_algobrain_search_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200,"description":"Free-text query, e.g. `atr trailing stop trend following`","default":"","title":"Q"},"description":"Free-text query, e.g. `atr trailing stop trend following`"},{"name":"type","in":"query","required":false,"schema":{"description":"Page type filter: strategy, concept, entity, market, …","title":"Type","type":"string","nullable":true},"description":"Page type filter: strategy, concept, entity, market, …"},{"name":"tag","in":"query","required":false,"schema":{"description":"Exact tag filter, e.g. mean-reversion","title":"Tag","type":"string","nullable":true},"description":"Exact tag filter, e.g. mean-reversion"},{"name":"category","in":"query","required":false,"schema":{"description":"Top-level wiki folder, e.g. strategies, strategy-development, concepts","title":"Category","type":"string","nullable":true},"description":"Top-level wiki folder, e.g. strategies, strategy-development, concepts"},{"name":"backtest_status","in":"query","required":false,"schema":{"description":"Strategy pages by the authors' evidence label: untested, naive-backtested, cost-corrected, walk-forward-validated, paper-traded, pilot, live, paused, retired","title":"Backtest Status","type":"string","nullable":true},"description":"Strategy pages by the authors' evidence label: untested, naive-backtested, cost-corrected, walk-forward-validated, paper-traded, pilot, live, paused, retired"},{"name":"horizon","in":"query","required":false,"schema":{"description":"Holding style: scalp, intraday, swing, position, long-term. NOT a bar interval (the wiki has no 1h/4h field)","title":"Horizon","type":"string","nullable":true},"description":"Holding style: scalp, intraday, swing, position, long-term. NOT a bar interval (the wiki has no 1h/4h field)"},{"name":"strategy_type","in":"query","required":false,"schema":{"description":"quantitative, hybrid, algorithmic, technical, fundamental, …","title":"Strategy Type","type":"string","nullable":true},"description":"quantitative, hybrid, algorithmic, technical, fundamental, …"},{"name":"complexity","in":"query","required":false,"schema":{"description":"beginner, intermediate, advanced","title":"Complexity","type":"string","nullable":true},"description":"beginner, intermediate, advanced"},{"name":"crowding_risk","in":"query","required":false,"schema":{"description":"low, medium, high","title":"Crowding Risk","type":"string","nullable":true},"description":"low, medium, high"},{"name":"market","in":"query","required":false,"schema":{"description":"Market the strategy is written for, e.g. crypto, options","title":"Market","type":"string","nullable":true},"description":"Market the strategy is written for, e.g. crypto, options"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlgoBrainSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/algobrain/page":{"get":{"tags":["AlgoBrain"],"summary":"Read Algobrain Page","description":"One AlgoBrain page as markdown (frontmatter parsed into fields), by the\n``path`` a search result gave you. 404 ``page_not_found`` for an unknown path.\nAll tiers. Content is CC BY 4.0.","operationId":"read_algobrain_page_api_v1_algobrain_page_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"path","in":"query","required":true,"schema":{"type":"string","maxLength":300,"description":"A result's `path`, e.g. wiki/strategies/atr-trailing-stop.md","title":"Path"},"description":"A result's `path`, e.g. wiki/strategies/atr-trailing-stop.md"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlgoBrainPageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/algobrain/stats":{"get":{"tags":["AlgoBrain"],"summary":"Algobrain Stats","description":"Size and freshness of the hosted AlgoBrain index: page counts by category\nand type, ``built_at`` (unix s) and the wiki ``source_commit`` it was built\nfrom. All tiers.","operationId":"algobrain_stats_api_v1_algobrain_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlgoBrainStatsResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/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 tracked coin.\n\n**Tracked universe is the top 25 Hyperliquid perps by 24h notional** (re-\nselected each sweep), not every coin — an untracked coin 404s. The current\nset is the ``coins`` list on ``/liquidity/depth``.\n\n``minutes`` is a **time** window measured back from now, not a row count.\nSampling runs on a ~2-minute timer and can skip, so ``count`` is the number of\nsnapshots that actually landed in the window — expect roughly ``minutes / 2``,\nfewer after a stall. Each record carries ``ts`` so staleness is visible.\n\nEach record carries ``depth_usd.bid`` / ``depth_usd.ask`` per band\n(10/25/50/100 bps) plus ``imbalance_10bps``. ``levels_truncated`` flags,\nper band per side, when the deepest level in HL's ~20-level snapshot still\nsat inside the band — that band's ``depth_usd`` is then a lower bound on\nthe true resting depth, not the depth.","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 wall-clock minutes of history (max 24h)","default":60,"title":"Minutes"},"description":"Trailing wall-clock 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"}}}}},"x-price-usdc":"0.015","x-payment":"x402","x-payment-route-id":"market"}},"/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.\n\n`by_type` is a partition (each account in exactly one class). `by_tag`\n(`smart_money`, `high_leverage`; same shape) are orthogonal overlays — an\naccount can carry both tags or neither, in any class — so they are NOT a\nbreakdown of any `by_type` bucket. `positions_as_of` (unix ms) is the\nliqmap poll cycle the positions come from (top level) and, per coin, the\nnewest poll time among that coin's contributing accounts.\n`meta.classifier_version` is the tagging rule-set id (CalVer); a bump\nthere, not the market, may move accounts between classes.","operationId":"get_quant_positioning_api_v1_quant_positioning_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"symbol","in":"query","required":false,"schema":{"description":"Filter to one coin (BTC) or a comma list (BTC,ETH,SOL)","title":"Symbol","type":"string","nullable":true},"description":"Filter to one coin (BTC) or a comma list (BTC,ETH,SOL)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/quant/positioning/ladder":{"get":{"tags":["Quant"],"summary":"Get Quant Positioning Ladder","description":"Full-universe liquidation ladder for one coin, split by account class (Pro Plus).\n\nEvery account >= $100k in the HL universe, binned on a 0.5%-of-mark grid\n(clamped ±50%):\n\n* `bins` / `flip` — all classes (the full book);\n* `bins_directional` / `flip_directional` — market-maker + vault liqs\n  excluded (the cleaner walls; MM liquidations are hedged noise);\n* `bins_by_class` — `{market_maker, whale, other}` on the same grid; an\n  account's class is its primary tag, so the three sum to `bins`;\n* `levels` — the 3 nearest non-empty all-class clusters above and below\n  mark: `{price, dist_pct (signed vs mark), total_usd, side (dominant\n  liquidation side — long = downside fuel), n_accounts}`.\n\nSame builder as the archived `liquidation_map` snapshot type (which carries\n`bins_by_class` from 2026-09-09), so live and history agree. `positions_as_of`\nis the liqmap poll cycle the ladder is built from.","operationId":"get_quant_positioning_ladder_api_v1_quant_positioning_ladder_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"symbol","in":"query","required":true,"schema":{"type":"string","description":"One coin, e.g. BTC","title":"Symbol"},"description":"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\n**2026-09-09 additions.** `regime.coverage` (`full` | `funding_only` |\n`none`) + `regime.insufficient_mm_coverage` say how much evidence the state\nrests on (118/231 coins carry < 10 MM accounts — a `funding_only` state is a\nfunding read, not a positioning read); per-coin `coverage {bands,\nmm_n_accounts, has_flip, history_days}`. `regime.rules_version` = `\"2\"`:\nthe skew leg now scores from `distribution_context.mm_skew_pctile`\n(≥90/≤10 one-sided, 25–75 balanced) with the raw `market_skew` rule as the\nfallback while a coin's history is `warming` (`regime.inputs.skew_source`\nsays which). `regime.since` = when the current state was first committed.\n`regime.inputs.funding_pinned` flags a funding series glued to HL's 1.25e-5\ninterest baseline (then `funding_rate_pctile` is null — the rank would be\nmeaningless). `distribution_context.mm_skew_z` / `sample_ts`. `levels` =\nthe 3 nearest liquidation clusters above/below mark across EVERY account\nclass. `positions_as_of` (unix ms) top-level and per coin.\n`meta.regime_rules` publishes every threshold and weight;\n`meta.classifier_version` the tagging rule-set. `symbol` accepts a comma\nlist (`BTC,ETH`).\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/gex/history":{"get":{"tags":["Quant"],"summary":"Get Quant Gex History","description":"Hourly history of the `/quant/gex` scalars for one coin (Pro).\n\nServes the same trailing-30-day ring that powers `distribution_context`:\none sample per ~hour of `near_density` (near-mark cluster density, %),\n`abs_dist_to_flip` / `dist_to_flip_pct` (% of mark), `mm_skew`\n(`mm_net_delta / mm_gross`), `mm_gross` (USD), `mm_n_accounts`,\n`regime_score`, `funding_rate` (hourly fraction) and `oi_change_pct`.\nA metric is `null` for a sample where it was unavailable (e.g. no MM\nbook that hour).\n\nHonest scope: this is an in-memory ring on the collector — at most ~720\nsamples (30 days), forward-only, and the timestamped tail starts\n2026-09-09 (earlier samples still feed the percentiles but carry no\ntimestamp). For anything older, or for the full per-coin entry with\nbins, use the archived `gamma_exposure` snapshot type via\n`/backtesting/snapshots` (5-min, since 2026-07-06). `meta.first_sample_ts`\n/ `last_sample_ts` bound what exists.","operationId":"get_quant_gex_history_api_v1_quant_gex_history_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"symbol","in":"query","required":true,"schema":{"type":"string","description":"One coin, e.g. BTC","title":"Symbol"},"description":"One coin, e.g. BTC"},{"name":"from","in":"query","required":false,"schema":{"description":"ISO 8601 or unix ms (inclusive)","title":"From","type":"string","nullable":true},"description":"ISO 8601 or unix ms (inclusive)"},{"name":"to","in":"query","required":false,"schema":{"description":"ISO 8601 or unix ms (inclusive)","title":"To","type":"string","nullable":true},"description":"ISO 8601 or unix ms (inclusive)"},{"name":"grain","in":"query","required":false,"schema":{"type":"string","description":"Sample grain — only 1h is served","default":"1h","title":"Grain","enum":["1h"]},"description":"Sample grain — only 1h is served"}],"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`.\n\nCadence: served by the HL collector (5-min batch liqmap cycle) since\n2026-09-09; `positions_as_of` (unix ms) is the poll cycle the positions\ncome from, so the refresh cadence is self-evident from the payload.\n`summary.by_tag_usd` (`smart_money`, `high_leverage`) are orthogonal\noverlays; `top_coins[].long_pct_pctile_30d` ranks the live long share vs\nthe coin's own trailing 30 days (null until 2 days of samples).","operationId":"get_quant_whales_api_v1_quant_whales_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"APIKeyHeader":[]}],"x-price-usdc":"0.03","x-payment":"x402","x-payment-route-id":"whales"}},"/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\n`live_only=true` returns observed points only (`meta.first_live_date` is\nthe first observed UTC day in the store, reported either way).\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"},{"name":"live_only","in":"query","required":false,"schema":{"type":"boolean","description":"Drop the modeled (source=seed) points; meta.first_live_date says where observed history starts","default":false,"title":"Live Only"},"description":"Drop the modeled (source=seed) points; meta.first_live_date says where observed history starts"}],"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.\n`catalog_version` is the versioned guarantee behind that: unchanged means\nevery `id` still maps to the same `label` you can see here — safe to pin\n`regime.id` directly rather than re-resolving `label` each call.","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":[]}],"x-price-usdc":"0.01","x-payment":"x402","x-payment-route-id":"regimes_current"}},"/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/strategies/groups":{"get":{"tags":["Strategies"],"summary":"List Strategy Groups","description":"Every strategy group with its description and strategy count.","operationId":"list_strategy_groups_api_v1_strategies_groups_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StrategyGroupsResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/strategies":{"get":{"tags":["Strategies"],"summary":"List Strategies","description":"Every catalogue strategy (optionally one group): summary, timeframe,\nindicators used and the CDA endpoints that feed it. Prompts and the full\nplaybook fields are on /strategies/{slug}.","operationId":"list_strategies_api_v1_strategies_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"group","in":"query","required":false,"schema":{"description":"Group slug from /strategies/groups, e.g. funding-carry-basis","title":"Group","type":"string","nullable":true},"description":"Group slug from /strategies/groups, e.g. funding-carry-basis"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StrategiesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/strategies/{slug}":{"get":{"tags":["Strategies"],"summary":"Get Strategy","description":"One strategy in full: edge mechanism, data inputs, indicators, feeding\nendpoints, backtest status, AlgoBrain playbook path and two AI-agent\nprompts (build it, backtest it).","operationId":"get_strategy_api_v1_strategies__slug__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StrategyDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/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\n**``vol_target_multiplier`` is ABSOLUTE**: ``60 / rv_gk_30`` (close-to-close\nfallback) clamped to ``[0.25, 3.0]`` — not a percentile of the coin's own\nhistory. A coin with 30d vol >= 240% pins at 0.25 for as long as that holds\n(``vol.multiplier_at_floor``, ``vol.multiplier_floor_days``). For a\n**shock gate use ``vol.rv_z_7 >= 2``** (7d vol two sigmas above its own\ntrailing 90d) or ``vol_pctile_7``; ``vol_shock`` itself is relative (7d GK\nat/above the 90th percentile of the coin's own 90d).\n\nA coin needs ``MIN_BARS`` = 40 daily bars to be classified. Rows whose\ncandle fetch failed this cycle are carried over from the previous build\n(``stale_cycles`` > 0, max 8 cycles) rather than vanishing.\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, up to a year (**Pro Plus**).\n\nOne point per UTC day in ``[today - days, today]``. From 2026-08-24 values\ncome from each day's live archived snapshot. Earlier days are reconstructed\nfrom daily klines with the live formula and carry ``backfilled: true`` — CVI\nwas only archived from 2026-07-23, and until 2026-08-24 the live universe\nstill counted delisted exchange pairs with frozen prices, which roughly\ndoubled the published index. Reconstructed days use today's coin universe.\nToday appears once the 20:00 UTC snapshot is built.","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"}}}}},"x-price-usdc":"0.008","x-payment":"x402","x-payment-route-id":"event_calendar"}},"/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/stream":{"get":{"tags":["Event Stream"],"summary":"Live event stream (SSE)","description":"Real-time market events over Server-Sent Events: liquidations (OKX, Bybit,\nHyperliquid; $250+), $1M+ CEX whale transfers, Hyperliquid top-trader position\nchanges ($25K+), and funding moves, open-interest moves and 1-minute price\nmoves (0.10%+, perps trading $1M+/day) for every Hyperliquid perp.\n\nEach message's `data` is one JSON event: `id`, `ts` (event time, ms),\n`recv_ts` (when we saw it, ms), `type`, `venue`, `symbol`, plus type fields:\nliquidation `side` (the LIQUIDATED position side) + `usd` (+ `px`, `sz` on\nHyperliquid); whale_transfer `exchange`, `chain`, `direction` (inflow/outflow),\n`amount`, `usd`; whale_position `action` (entry/exit/increase/decrease), `side`,\n`size`, `usd` (notional of the change at entry price), `address`, `change_pct`;\nfunding `rate_1h`, `prev_rate_1h`, `settle` (true = the hourly settlement\nprint); oi_delta `usd` (signed change), `pct`, `window_s` (~60 = minute move,\n~300 = 5-minute jump), `oi_usd`; price_move `pct`, `price`, `prev_price`,\n`window_s`.\n\nPro and Pro Plus. Free keys: `/stream/recent` (JSON, any key) or the keyless\n`/stream/delayed` preview. Up to 3 concurrent streams per key.","operationId":"stream_events_api_v1_stream_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"types","in":"query","required":false,"schema":{"description":"Comma-separated event types: liquidation, whale_transfer, whale_position, funding, oi_delta, price_move. Default: all.","title":"Types","type":"string","nullable":true},"description":"Comma-separated event types: liquidation, whale_transfer, whale_position, funding, oi_delta, price_move. Default: all."},{"name":"symbols","in":"query","required":false,"schema":{"description":"Comma-separated base coins (BTC,ETH,SOL). Default: all.","title":"Symbols","type":"string","nullable":true},"description":"Comma-separated base coins (BTC,ETH,SOL). Default: all."},{"name":"min_usd","in":"query","required":false,"schema":{"type":"number","minimum":0,"description":"Drop events smaller than this USD size. Applies to events that carry `usd` (liquidation, whale_transfer, whale_position, oi_delta); funding and price_move always pass.","default":0,"title":"Min Usd"},"description":"Drop events smaller than this USD size. Applies to events that carry `usd` (liquidation, whale_transfer, whale_position, oi_delta); funding and price_move always pass."},{"name":"since_id","in":"query","required":false,"schema":{"description":"Replay buffered events after this id before going live (~2h ring). The Last-Event-ID header does the same and wins when both are sent.","title":"Since Id","type":"integer","minimum":0,"nullable":true},"description":"Replay buffered events after this id before going live (~2h ring). The Last-Event-ID header does the same and wins when both are sent."}],"responses":{"200":{"description":"Server-Sent Events. One JSON event per `data:` line, `id:` set for resume; `: ping` comments every 15s.","content":{"text/event-stream":{}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/stream/recent":{"get":{"tags":["Event Stream"],"summary":"Recent events (JSON)","description":"The newest events from the live stream as JSON, oldest first. Same event\nshape as `GET /stream`. `last_id` is the id to pass as `since_id` when\nopening the stream, so a client can backfill and then go live without a gap\nor a duplicate. Any key, Free included.","operationId":"stream_recent_api_v1_stream_recent_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Newest N events (1-500).","default":100,"title":"Limit"},"description":"Newest N events (1-500)."},{"name":"types","in":"query","required":false,"schema":{"description":"Comma-separated event types: liquidation, whale_transfer, whale_position, funding, oi_delta, price_move. Default: all.","title":"Types","type":"string","nullable":true},"description":"Comma-separated event types: liquidation, whale_transfer, whale_position, funding, oi_delta, price_move. Default: all."},{"name":"symbols","in":"query","required":false,"schema":{"description":"Comma-separated base coins (BTC,ETH,SOL). Default: all.","title":"Symbols","type":"string","nullable":true},"description":"Comma-separated base coins (BTC,ETH,SOL). Default: all."},{"name":"min_usd","in":"query","required":false,"schema":{"type":"number","minimum":0,"description":"Drop events smaller than this USD size. Applies to events that carry `usd` (liquidation, whale_transfer, whale_position, oi_delta); funding and price_move always pass.","default":0,"title":"Min Usd"},"description":"Drop events smaller than this USD size. Applies to events that carry `usd` (liquidation, whale_transfer, whale_position, oi_delta); funding and price_move always pass."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/stream/delayed":{"get":{"tags":["Event Stream"],"summary":"Delayed event preview (no key)","description":"A free, keyless preview of the stream: the events from a 5-minute window\nthat ended 30 minutes ago (`window_start`/`window_end`, event time, ms),\noldest first, at most 300. `server_now` lets a client replay them at their\noriginal pace (`ts + delay_ms`). `events_per_min` is the window's rate.\nCached for 60s. For real-time events use `GET /stream` (Pro).","operationId":"stream_delayed_api_v1_stream_delayed_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/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":"US spot-ETF daily net flow for BTC, ETH or SOL, **keyed by trade date**.\n\n``flows`` holds SETTLED days only (the full Farside \"Total\" for that US\ntrade date), oldest first; ``latest`` is the newest of them. The day still\nbeing reported — Farside fills a new row issuer by issuer, IBIT and FBTC\nlast — is returned separately as ``in_progress`` (``status: \"partial\"``,\nwith how many funds have reported) and never counts toward ``flows``.\n\nRebuilt 2026-09-25: this used to return the newest row's Total while most\nissuers had not reported, stamped with the fetch time, so the figure was a\npartial sum on most weekdays (23 Sep 2026 BTC read +$32.4M; the settled\nTotal is +$346.9M).\n\nSources: Farside (primary) with SoSoValue as an independent backup that\nfills any day Farside has not settled or could not be fetched; each row\nnames its ``source``. ``source_health`` shows the last success/failure of\neach feed. ``xrp`` is not supported (no free source publishes it) and\nanswers 400.","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"},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Settled trade days to return in `flows` (newest N, oldest first). Default 1 = the latest settled day.","default":1,"title":"Days"},"description":"Settled trade days to return in `flows` (newest N, oldest first). Default 1 = the latest settled day."}],"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"}}}}},"x-price-usdc":"0.01","x-payment":"x402","x-payment-route-id":"etf_flows"}},"/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\n``as_of`` (unix seconds) is when the liquidation snapshot behind ``data``\nwas last refreshed. Each row also carries ``liq_1h_vs_7d_median``\n``{long, short, total, hours_7d}``: the trailing hour's liquidated notional\nover the **median hourly notional of the prior 7 days** for that coin\n(1.0 = a normal hour), computed from the exact Hyperliquid fill tape on\nboth sides of the ratio — see ``baseline`` for the exact definition. Null\nper side when the 7d median is zero, per row when fewer than 24 hours of\ntape exist, and for every row on a box without the backtesting archive.\n\n**Row grain:** each row's USD fields are trailing-window LEVELS (see\n``grain``: ``kind: rolling_window``, ``sum_ok: false``) — polling this every\nfew minutes and summing or differencing the answers double-counts. For\nincremental flow use the Pro ``/backtesting/hl-liquidation-bars``, built from\nthe Hyperliquid fill tape. ``count`` is the number of liquidation events in\nthe 24h window and ``source`` the venues they came from (``row_count_meaning``).\n\n**Order:** rows are sorted by ``liquidation_usd_24h``, largest first, so\n``limit`` keeps the coins with the most liquidated notional. AsterDEX-native\nrows (``exchange=asterdex``) follow the aggregate rows.\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 — currently a no-op reserved for future filtering; only perps data is returned","default":"perps","title":"Type"},"description":"Instrument type — currently a no-op reserved for future filtering; only perps data is returned"},{"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"}}}}},"x-price-usdc":"0.01","x-payment":"x402","x-payment-route-id":"liquidations"}},"/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 — currently a no-op reserved for future filtering; only perps data is returned","default":"perps","title":"Type"},"description":"Instrument type — currently a no-op reserved for future filtering; only perps data is returned"},{"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 — currently a no-op reserved for future filtering; only perps data is returned","default":"perps","title":"Type"},"description":"Instrument type — currently a no-op reserved for future filtering; only perps data is returned"},{"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).\n\n``buy_ratio`` is a PERCENT (0..100) of taker volume that was buying, per\nexchange leg. Two legs exist: ``Binance`` (BTC only, from its public\ntaker-volume endpoint) and, since 2026-09-09, ``Hyperliquid`` — the\ncollector's own trade tape (see ``/hyperliquid/trade-flow``), notional\nweighted over the trailing 4h, for every HL perp with fills. A coin only\nHL carries gets its own top-level entry whose aggregate is the HL figure.\nNo Hyperliquid leg at all means the tape is warming or the pull is not\nconfigured — never that HL had no trades.","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\n- ``premium`` — Hyperliquid's own ``premium`` context field (mark vs oracle\n  premium), passed through unchanged.\n- ``as_of`` — ms timestamp of the ``metaAndAssetCtxs`` snapshot the row came\n  from (one call covers the whole universe, so every row shares it).\n\nTop level: ``generated_at`` (ms, when this payload was assembled),\n``prices_as_of`` / ``funding_oi_as_of`` (ms fetch instants of the two HL\nsnapshots) and ``coverage`` = ``{universe_total, delisted_excluded, rows}``\n— HL keeps delisted perps in its universe with a mark but no OI/funding, and\nthey are excluded here, which is why ``rows`` (~177) is below the ~232\nuniverse. Refresh cadence: 1 minute. Thinly-traded perps may emit\n``open_interest = 0`` legitimately when no positions 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/signum-rgg":{"get":{"tags":["Backtesting"],"summary":"Get Signum Rgg Archive","description":"Per-day SIGNUM_RGG colour state for the full universe, from the daily archive.\n\nThin wrapper over ``/backtesting/daily-snapshots/{date}`` that returns only\nits ``signum_rgg`` block, split into ``summary`` (counts, breadth, top\nlists) and the full ``by_symbol`` map (colour, signed score, ADX/DI,\ndays_in_color, flipped_at, price, ``hl_symbol`` join key). Available for\nevery archived day (the block has been stored since 2026-03-02).\n\n``computed_from`` (present on days archived from 2026-09-09) is the last\nCOMPLETED daily bar the colours were read from; the archive is built at\n20:00 UTC, so a day's block carries the colours completed through the\nprevious UTC close. Days before that were archived with the forming bar\nincluded. Same auth gate as ``daily-snapshots``. 404 (with ``Retry-After``\nwhile today's build is pending) when the day has no snapshot, and 404\nwhen a snapshot exists but predates the SIGNUM block.","operationId":"get_signum_rgg_archive_api_v1_backtesting_signum_rgg_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string","description":"Archived day, YYYY-MM-DD (UTC)","title":"Date"},"description":"Archived day, YYYY-MM-DD (UTC)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignumRggArchiveResponse"}}}},"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.\n\n``grain`` says what a row is (one closed 1m bar), ``coverage`` where local\nrows start and stop for this symbol, and ``next_cursor`` / ``has_more``\npage the window without re-fetching a boundary bar.","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":"cursor","in":"query","required":false,"schema":{"description":"Opaque page cursor — the `next_cursor` of the previous response, verbatim. Resumes strictly after the last row served, keyed on the table's full primary key, so a page boundary inside a same-millisecond burst loses nothing (unlike `start = last.time + 1`). `start` / `end` still bound the window.","title":"Cursor","type":"string","nullable":true},"description":"Opaque page cursor — the `next_cursor` of the previous response, verbatim. Resumes strictly after the last row served, keyed on the table's full primary key, so a page boundary inside a same-millisecond burst loses nothing (unlike `start = last.time + 1`). `start` / `end` still bound the window."},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"json or csv. CSV has no envelope: paging state travels in the `X-Has-More` / `X-Next-Cursor` response headers.","default":"json","title":"Format"},"description":"json or csv. CSV has no envelope: paging state travels in the `X-Has-More` / `X-Next-Cursor` response headers."}],"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":"Historical funding — the 5-minute rate snapshots (with OI / mark) or, with\n``grain=hourly``, the settled hourly Hyperliquid payments.\n\nRead ``grain`` on the response before aggregating: the default rows sample\nthe live hourly rate ~12 times per settlement, so summing them overstates\ncarry ~12x. The honest daily carry from the snapshot series is\n``mean(funding_rate) x 24``; the exact figure is ``sum(funding_rate)`` over\nthe ``grain=hourly`` rows. ``coverage`` gives local retention for the\nsymbol; ``next_cursor`` / ``has_more`` page the window.","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"}},{"name":"grain","in":"query","required":false,"schema":{"type":"string","description":"`snapshot_5m` (default): the LIVE rate sampled every 5 minutes, plus open interest and mark — a rate series, NOT payments; do not sum it. `hourly`: one row per settled Hyperliquid funding print (HL `fundingHistory`, the carry actually paid), with `premium`; hyperliquid only, filled daily for the previous UTC day.","default":"snapshot_5m","title":"Grain"},"description":"`snapshot_5m` (default): the LIVE rate sampled every 5 minutes, plus open interest and mark — a rate series, NOT payments; do not sum it. `hourly`: one row per settled Hyperliquid funding print (HL `fundingHistory`, the carry actually paid), with `premium`; hyperliquid only, filled daily for the previous UTC day."},{"name":"cursor","in":"query","required":false,"schema":{"description":"Opaque page cursor — the `next_cursor` of the previous response, verbatim. Resumes strictly after the last row served, keyed on the table's full primary key, so a page boundary inside a same-millisecond burst loses nothing (unlike `start = last.time + 1`). `start` / `end` still bound the window.","title":"Cursor","type":"string","nullable":true},"description":"Opaque page cursor — the `next_cursor` of the previous response, verbatim. Resumes strictly after the last row served, keyed on the table's full primary key, so a page boundary inside a same-millisecond burst loses nothing (unlike `start = last.time + 1`). `start` / `end` still bound the window."},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"json or csv. CSV has no envelope: paging state travels in the `X-Has-More` / `X-Next-Cursor` response headers.","default":"json","title":"Format"},"description":"json or csv. CSV has no envelope: paging state travels in the `X-Has-More` / `X-Next-Cursor` response headers."}],"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":"Venue-merged liquidation totals — a ROLLING 24-HOUR level sampled every\n5 minutes (OKX + Bybit + Hyperliquid), not that interval's flow.\n\nEach row answers \"how much was liquidated in the 24h ending at this\nsample\"; summing rows, or differencing consecutive ones, does not recover a\nburst. For incremental 5m / 15m / 1h flow from exact fills use\n``/backtesting/hl-liquidation-bars``; for the fills themselves,\n``/backtesting/hl-liquidations``. Rows are ordered (time, symbol) and\n``next_cursor`` resumes exactly there.","operationId":"get_liquidations_api_v1_backtesting_liquidations_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"symbol","in":"query","required":false,"schema":{"type":"string","description":"One symbol, or a comma list (BTC,ETH,SOL — up to 25; every value rides the index). Omit for all symbols.","title":"Symbol"},"description":"One symbol, or a comma list (BTC,ETH,SOL — up to 25; every value rides the index). Omit for all symbols."},{"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":"cursor","in":"query","required":false,"schema":{"description":"Opaque page cursor — the `next_cursor` of the previous response, verbatim. Resumes strictly after the last row served, keyed on the table's full primary key, so a page boundary inside a same-millisecond burst loses nothing (unlike `start = last.time + 1`). `start` / `end` still bound the window.","title":"Cursor","type":"string","nullable":true},"description":"Opaque page cursor — the `next_cursor` of the previous response, verbatim. Resumes strictly after the last row served, keyed on the table's full primary key, so a page boundary inside a same-millisecond burst loses nothing (unlike `start = last.time + 1`). `start` / `end` still bound the window."},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"json or csv. CSV has no envelope: paging state travels in the `X-Has-More` / `X-Next-Cursor` response headers.","default":"json","title":"Format"},"description":"json or csv. CSV has no envelope: paging state travels in the `X-Has-More` / `X-Next-Cursor` response headers."}],"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, liquidated user and tx hash — unlike ``/backtesting/liquidations``'\nvenue-merged rolling-24h totals. Rows are ordered by the full ``(time, tid)``\nkey and ``next_cursor`` resumes exactly there: one liquidation order sweeping\nN book levels is N rows at ONE ``time``, so ``start = last.time + 1`` paging\nsilently drops the siblings that fell past a page boundary — use the cursor.\n\nLive capture began 2026-07-23 (``coverage.local_first`` is authoritative);\nthe ``hl_liquidations`` daily Parquet archive additionally holds a pilot\nbackfill 2026-04-24 → 2026-05-05. A window that starts before local\nretention returns ``[]`` with ``coverage.archive_hint`` set rather than\nsilently. Pro (Pro Plus included) since 2026-09-07; the archive itself stays\nPro Plus. Bucketed flow from these fills: ``/backtesting/hl-liquidation-bars``.","operationId":"get_hl_liquidations_api_v1_backtesting_hl_liquidations_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"coin","in":"query","required":false,"schema":{"type":"string","description":"One HL universe coin name (BTC, kPEPE) or a comma list (up to 25; every value rides the index). Omit for all coins.","title":"Coin"},"description":"One HL universe coin name (BTC, kPEPE) or a comma list (up to 25; every value rides the index). Omit for all coins."},{"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":"cursor","in":"query","required":false,"schema":{"description":"Opaque page cursor — the `next_cursor` of the previous response, verbatim. Resumes strictly after the last row served, keyed on the table's full primary key, so a page boundary inside a same-millisecond burst loses nothing (unlike `start = last.time + 1`). `start` / `end` still bound the window.","title":"Cursor","type":"string","nullable":true},"description":"Opaque page cursor — the `next_cursor` of the previous response, verbatim. Resumes strictly after the last row served, keyed on the table's full primary key, so a page boundary inside a same-millisecond burst loses nothing (unlike `start = last.time + 1`). `start` / `end` still bound the window."},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"json or csv. CSV has no envelope: paging state travels in the `X-Has-More` / `X-Next-Cursor` response headers.","default":"json","title":"Format"},"description":"json or csv. CSV has no envelope: paging state travels in the `X-Has-More` / `X-Next-Cursor` response headers."}],"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/hl-liquidation-bars":{"get":{"tags":["Backtesting"],"summary":"Get Hl Liquidation Bars","description":"Incremental liquidation flow per closed bucket, summed from the exact\nHyperliquid fill tape — the burst clock ``/backtesting/liquidations``'\nrolling-24h level cannot give you.\n\nEach row is one UTC clock-aligned ``interval`` bucket: ``long_usd`` /\n``short_usd`` (notional liquidated on each side), ``total_usd``,\n``n_long`` / ``n_short`` (fills) and ``max_fill_usd``. Buckets with no fills\nare not returned. ``start`` and ``end`` are floored to the grid, so the\nbucket containing ``now`` is never served — its fills are still forming and\nlive on ``/backtesting/hl-liquidations``. Omit ``coin`` for one market-wide\nrow per bucket (``coin`` null, window ≤ 31 days); give a coin or comma list\nfor per-coin rows (window ≤ 93 days).\n\nEvery bar is auditable: the ``audit`` block says how to pull the raw fills\nthat summed to it. Same tier as the tape (Pro, Pro Plus included).","operationId":"get_hl_liquidation_bars_api_v1_backtesting_hl_liquidation_bars_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"coin","in":"query","required":false,"schema":{"type":"string","description":"One HL coin name (BTC, kPEPE) or a comma list (up to 25) for per-coin bars. Omit for ONE market-wide series summed over every perp.","title":"Coin"},"description":"One HL coin name (BTC, kPEPE) or a comma list (up to 25) for per-coin bars. Omit for ONE market-wide series summed over every perp."},{"name":"interval","in":"query","required":false,"schema":{"type":"string","description":"Bucket width: 5m, 15m or 1h (UTC clock-aligned)","default":"15m","title":"Interval"},"description":"Bucket width: 5m, 15m or 1h (UTC clock-aligned)"},{"name":"start","in":"query","required":true,"schema":{"type":"string","description":"Start time (ISO 8601 or unix ms); floored to the interval","title":"Start"},"description":"Start time (ISO 8601 or unix ms); floored to the interval"},{"name":"end","in":"query","required":false,"schema":{"type":"string","description":"End time (ISO 8601 or unix ms, defaults to now); floored to the interval, EXCLUSIVE","title":"End"},"description":"End time (ISO 8601 or unix ms, defaults to now); floored to the interval, EXCLUSIVE"},{"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":"cursor","in":"query","required":false,"schema":{"description":"Opaque page cursor — the `next_cursor` of the previous response, verbatim. Resumes strictly after the last row served, keyed on the table's full primary key, so a page boundary inside a same-millisecond burst loses nothing (unlike `start = last.time + 1`). `start` / `end` still bound the window.","title":"Cursor","type":"string","nullable":true},"description":"Opaque page cursor — the `next_cursor` of the previous response, verbatim. Resumes strictly after the last row served, keyed on the table's full primary key, so a page boundary inside a same-millisecond burst loses nothing (unlike `start = last.time + 1`). `start` / `end` still bound the window."},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"json or csv. CSV has no envelope: paging state travels in the `X-Has-More` / `X-Next-Cursor` response headers.","default":"json","title":"Format"},"description":"json or csv. CSV has no envelope: paging state travels in the `X-Has-More` / `X-Next-Cursor` response headers."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestHLLiquidationBarsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/backtesting/hl-funding-bars":{"get":{"tags":["Backtesting"],"summary":"Get Hl Funding Bars","description":"Hyperliquid funding and open interest aligned to the candle clock — one\nrow per closed bar per coin, so a funding/OI condition can be tested against\nthe same 4h bar a price signal fires on.\n\n``time`` is the bar open and equals the ``timestamp`` of the matching\n``/hyperliquid/candles`` bar (join on it). Per bar: ``funding_sum`` (carry\nactually settled in ``(time, time + interval]`` — a settlement at 16:00 pays\nfor the hour before it, so it belongs to the bar that closes at 16:00) with\n``n_settlements``; ``funding_rate_mean`` (mean live hourly rate over the\nbar); ``oi_open`` / ``oi_close`` / ``oi_change_pct`` (base-coin units, first\nand last 5-min sample in the bar) and ``mark_close``.\n\nPoint-in-time: every value was observable by the bar's close — act on it at\nthe NEXT bar's open. Bars start where our 5-min snapshots do (2026-03-30;\nsee ``coverage``) — Hyperliquid publishes no historical OI, so nothing\nearlier can exist; older settled funding alone is ``/backtesting/funding?\ngrain=hourly``. ``funding_sum`` is null for the most recent day until its\nprints are archived. Window ≤ 93 days per call. Pro Plus.","operationId":"get_hl_funding_bars_api_v1_backtesting_hl_funding_bars_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"coin","in":"query","required":true,"schema":{"type":"string","description":"One HL coin name (BTC, kPEPE) or a comma list (up to 25; every value rides the index).","title":"Coin"},"description":"One HL coin name (BTC, kPEPE) or a comma list (up to 25; every value rides the index)."},{"name":"interval","in":"query","required":false,"schema":{"type":"string","description":"Bar width: 1h, 4h or 1d — the same UTC grid as /hyperliquid/candles","default":"4h","title":"Interval"},"description":"Bar width: 1h, 4h or 1d — the same UTC grid as /hyperliquid/candles"},{"name":"start","in":"query","required":true,"schema":{"type":"string","description":"Start time (ISO 8601 or unix ms); floored to the interval","title":"Start"},"description":"Start time (ISO 8601 or unix ms); floored to the interval"},{"name":"end","in":"query","required":false,"schema":{"type":"string","description":"End time (ISO 8601 or unix ms, defaults to now); floored to the interval, EXCLUSIVE","title":"End"},"description":"End time (ISO 8601 or unix ms, defaults to now); floored to the interval, EXCLUSIVE"},{"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":"cursor","in":"query","required":false,"schema":{"description":"Opaque page cursor — the `next_cursor` of the previous response, verbatim. Resumes strictly after the last row served, keyed on the table's full primary key, so a page boundary inside a same-millisecond burst loses nothing (unlike `start = last.time + 1`). `start` / `end` still bound the window.","title":"Cursor","type":"string","nullable":true},"description":"Opaque page cursor — the `next_cursor` of the previous response, verbatim. Resumes strictly after the last row served, keyed on the table's full primary key, so a page boundary inside a same-millisecond burst loses nothing (unlike `start = last.time + 1`). `start` / `end` still bound the window."},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"json or csv. CSV has no envelope: paging state travels in the `X-Has-More` / `X-Next-Cursor` response headers.","default":"json","title":"Format"},"description":"json or csv. CSV has no envelope: paging state travels in the `X-Has-More` / `X-Next-Cursor` response headers."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestHLFundingBarsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/backtesting/hl-trade-flow":{"get":{"tags":["Backtesting"],"summary":"Get Hl Trade Flow","description":"Query the archived Hyperliquid trade tape: 1-minute taker buy/sell\nbuckets per perp.\n\nEach row is one closed UTC minute for one coin — ``buy_notional`` /\n``sell_notional`` by aggressor side, ``n_trades``, ``vwap``,\n``max_fill_usd``, ``large_fill_share`` (fills >= $25k) and ``partial``\n(the collector's socket did not watch the whole minute; such minutes are\nnever back-filled). Same row shape as the live ``/hyperliquid/trade-flow``\nminus its served-only ``cvd_usd``. Minutes with no fills are NOT stored.\nServes the local retention window; the full history is archived daily as\nthe ``hl_trade_flow`` data type (one Parquet per day, all coins — see\n``/backtesting/archives``). Coverage begins 2026-09-09. Pro (Pro Plus\nincluded), matching ``/hl-liquidations``; the archive stays Pro Plus.","operationId":"get_hl_trade_flow_api_v1_backtesting_hl_trade_flow_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"coin","in":"query","required":false,"schema":{"type":"string","description":"One HL coin name (BTC, kPEPE) or a comma list (up to 25; every value rides the index). Omit for all coins.","title":"Coin"},"description":"One HL coin name (BTC, kPEPE) or a comma list (up to 25; every value rides the index). Omit for all coins."},{"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":"cursor","in":"query","required":false,"schema":{"description":"Opaque page cursor — the `next_cursor` of the previous response, verbatim. Resumes strictly after the last row served, keyed on the table's full primary key, so a page boundary inside a same-millisecond burst loses nothing (unlike `start = last.time + 1`). `start` / `end` still bound the window.","title":"Cursor","type":"string","nullable":true},"description":"Opaque page cursor — the `next_cursor` of the previous response, verbatim. Resumes strictly after the last row served, keyed on the table's full primary key, so a page boundary inside a same-millisecond burst loses nothing (unlike `start = last.time + 1`). `start` / `end` still bound the window."},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"json or csv. CSV has no envelope: paging state travels in the `X-Has-More` / `X-Next-Cursor` response headers.","default":"json","title":"Format"},"description":"json or csv. CSV has no envelope: paging state travels in the `X-Has-More` / `X-Next-Cursor` response headers."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestHLTradeFlowResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/backtesting/liquidation-density":{"get":{"tags":["Backtesting"],"summary":"Get Liquidation Density","description":"Hyperliquid liquidation density near the mark, as a time series.\n\nPer coin per point: ``mark``, and for bands of ±0.5 / 1 / 2 / 3 / 5% of\nmark the USD of long positions liquidating BELOW the mark\n(``long_below``) and shorts liquidating ABOVE it (``short_above``) —\nplus the same split by ``trader_type`` (vault, market_maker, whale,\nsmart_money, high_leverage, other) and by ``leverage`` bucket\n(3/5/10/20/25/40/50/100x). Derived from the archived ``liquidation_levels``\n+ ``liquidation_map`` snapshots: ~2 KB a point instead of ~1 MB a snapshot.\nHistory starts 2026-06-26 (the full-universe feed); ≤ 93 days per call.\nCSV carries the all-account bands only. Pro Plus.","operationId":"get_liquidation_density_api_v1_backtesting_liquidation_density_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"coin","in":"query","required":true,"schema":{"type":"string","description":"One HL coin name (BTC, HYPE, kPEPE) or a comma list (up to 25).","title":"Coin"},"description":"One HL coin name (BTC, HYPE, kPEPE) or a comma list (up to 25)."},{"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).","title":"End"},"description":"End time (ISO 8601 or unix ms, defaults to now). EXCLUSIVE — the range is [start, end)."},{"name":"interval","in":"query","required":false,"schema":{"type":"string","description":"5m (every archived snapshot) or 1h (the first snapshot of each hour).","default":"1h","title":"Interval"},"description":"5m (every archived snapshot) or 1h (the first snapshot of each hour)."},{"name":"splits","in":"query","required":false,"schema":{"type":"string","description":"Breakdowns to include: any of trader_type, leverage (comma list), or `none` for the all-account bands only (~10x smaller).","default":"trader_type,leverage","title":"Splits"},"description":"Breakdowns to include: any of trader_type, leverage (comma list), or `none` for the all-account bands only (~10x smaller)."},{"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":"cursor","in":"query","required":false,"schema":{"description":"Opaque page cursor — the `next_cursor` of the previous response, verbatim. Resumes strictly after the last row served, keyed on the table's full primary key, so a page boundary inside a same-millisecond burst loses nothing (unlike `start = last.time + 1`). `start` / `end` still bound the window.","title":"Cursor","type":"string","nullable":true},"description":"Opaque page cursor — the `next_cursor` of the previous response, verbatim. Resumes strictly after the last row served, keyed on the table's full primary key, so a page boundary inside a same-millisecond burst loses nothing (unlike `start = last.time + 1`). `start` / `end` still bound the window."},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"json or csv. CSV has no envelope: paging state travels in the `X-Has-More` / `X-Next-Cursor` response headers.","default":"json","title":"Format"},"description":"json or csv. CSV has no envelope: paging state travels in the `X-Has-More` / `X-Next-Cursor` response headers."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestLiqDensityResponse"}}}},"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, hl_trade_flow, snapshots, klines_deep, or funding_deep. Use 'daily' for consolidated per-exchange bundles; 'hl_liquidations' is the per-event Hyperliquid liquidation tape and 'hl_trade_flow' the 1-min HL taker buy/sell buckets (both 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, hl_trade_flow, snapshots, klines_deep, or funding_deep. Use 'daily' for consolidated per-exchange bundles; 'hl_liquidations' is the per-event Hyperliquid liquidation tape and 'hl_trade_flow' the 1-min HL taker buy/sell buckets (both 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, hl_trade_flow, snapshots, klines_deep, or funding_deep. Use 'daily' for consolidated bundles; 'hl_liquidations' for the per-event HL liquidation tape; 'hl_trade_flow' for the 1-min HL taker buckets; '*_deep' for deep monthly cold history.","default":"klines","title":"Data Type"},"description":"Data type: daily, klines, funding, liquidations, hl_liquidations, hl_trade_flow, snapshots, klines_deep, or funding_deep. Use 'daily' for consolidated bundles; 'hl_liquidations' for the per-event HL liquidation tape; 'hl_trade_flow' for the 1-min HL taker buckets; '*_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/backtesting/archives/purchase":{"get":{"tags":["Backtesting"],"summary":"Buy one archived object over x402 (pay per resource)","description":"One archived Parquet / JSON object for one USDC payment — no key needed.\n\n**Flow:** call once to get a `402` quoting the price for exactly this object\n(a missing object is a `404` *before* any quote, so you can never pay for a\nfile that is not there); sign the amount; call again with `x-payment`. The\nresponse is a pre-signed download URL valid for one hour.\n\nA **Pro Plus** key gets the same URL free (parity with `/archives/download`,\nwhich lists whole ranges). Prices per `data_type` are in\n`GET /api/v1/pricing` → `resources`.","operationId":"purchase_archive_object_api_v1_backtesting_archives_purchase_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"data_type","in":"query","required":true,"schema":{"type":"string","description":"klines, funding, liquidations, hl_liquidations, hl_trade_flow, daily, snapshots, klines_deep, funding_deep","title":"Data Type"},"description":"klines, funding, liquidations, hl_liquidations, hl_trade_flow, daily, snapshots, klines_deep, funding_deep"},{"name":"exchange","in":"query","required":false,"schema":{"type":"string","description":"klines / funding / daily / *_deep","title":"Exchange"},"description":"klines / funding / daily / *_deep"},{"name":"symbol","in":"query","required":false,"schema":{"type":"string","description":"klines / funding / liquidations / *_deep","title":"Symbol"},"description":"klines / funding / liquidations / *_deep"},{"name":"date","in":"query","required":false,"schema":{"type":"string","description":"YYYY-MM-DD for daily-file types","title":"Date"},"description":"YYYY-MM-DD for daily-file types"},{"name":"month","in":"query","required":false,"schema":{"type":"string","description":"YYYY-MM for *_deep monthly files","title":"Month"},"description":"YYYY-MM for *_deep monthly files"},{"name":"interval","in":"query","required":false,"schema":{"type":"string","description":"klines_deep only: 1h, 4h, 1d","title":"Interval"},"description":"klines_deep only: 1h, 4h, 1d"},{"name":"bundle","in":"query","required":false,"schema":{"type":"string","description":"daily only: klines or funding","title":"Bundle"},"description":"daily only: klines or funding"},{"name":"snapshot_type","in":"query","required":false,"schema":{"type":"string","description":"snapshots only: the snapshot data type name","title":"Snapshot Type"},"description":"snapshots only: the snapshot data type name"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"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.\n\nThis is a LIVE feed of the last 500 large transfers (roughly the last 10h).\nThe full history — every row, from 2026-10-08 — is the `exchange_flow_spikes`\ntype on `/api/v1/backtesting/snapshots`; each snapshot is the batch of rows\nfirst seen in that 5-minute tick, so concatenating a range lists each\ntransfer once.","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"}},{"name":"symbol","in":"query","required":false,"schema":{"description":"Only this token (e.g. ETH, USDT)","title":"Symbol","type":"string","nullable":true},"description":"Only this token (e.g. ETH, USDT)"},{"name":"exchange","in":"query","required":false,"schema":{"description":"Only this exchange (e.g. binance)","title":"Exchange","type":"string","nullable":true},"description":"Only this exchange (e.g. binance)"},{"name":"chain","in":"query","required":false,"schema":{"description":"Only this chain (eth, btc, sol, tron, bsc, base, arb, op)","title":"Chain","type":"string","nullable":true},"description":"Only this chain (eth, btc, sol, tron, bsc, base, arb, op)"},{"name":"direction","in":"query","required":false,"schema":{"description":"inflow | outflow","title":"Direction","type":"string","pattern":"^(inflow|outflow)$","nullable":true},"description":"inflow | outflow"},{"name":"source","in":"query","required":false,"schema":{"description":"transfer (decoded Transfer event) | balance_delta (inferred from a wallet balance change)","title":"Source","type":"string","pattern":"^(transfer|balance_delta)$","nullable":true},"description":"transfer (decoded Transfer event) | balance_delta (inferred from a wallet balance change)"}],"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`.\n\n`whale_accumulation` is currently always unavailable (whale tracking is\ndisabled, see `/on-chain/whales`): it reports `reason: \"no_data\"`, its\n`score` of 50 is a placeholder and it carries weight 0, so it does not move\nthe composite. `exchange_flow` scores the USDT/USDC/DAI 24h net only; before\n2026-10-08 it also summed other tokens in their native units, so its\n`reason` magnitudes from then are not dollars.","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}/history":{"get":{"tags":["On-Chain Intelligence"],"summary":"Get Exchange Flow History","description":"Archived CEX inflow/outflow for `symbol`, back to 2026-05-28.\n\nThe rolling windows on `/exchange-flows/{symbol}` have been sampled every\n~30 minutes since 2026-05-28. Each point is one sample: the trailing 1h and\n24h inflow/outflow/net summed across chains (and exchanges, unless\n`exchange` is given), plus the 1h window per exchange. `interval=1h` keeps\nthe last sample in each UTC hour; `raw` returns every sample (their 1h\nwindows overlap). At most 93 days per request.\n\nAmounts are in the token's own units (USD only for USDT/USDC/DAI) — the same\nunits as the live endpoint.","operationId":"get_exchange_flow_history_api_v1_on_chain_exchange_flows__symbol__history_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","title":"Symbol"}},{"name":"start","in":"query","required":false,"schema":{"description":"ISO 8601, unix seconds or unix ms. Default: 7 days before `end`","title":"Start","type":"string","nullable":true},"description":"ISO 8601, unix seconds or unix ms. Default: 7 days before `end`"},{"name":"end","in":"query","required":false,"schema":{"description":"ISO 8601, unix seconds or unix ms (EXCLUSIVE). Default: now","title":"End","type":"string","nullable":true},"description":"ISO 8601, unix seconds or unix ms (EXCLUSIVE). Default: now"},{"name":"interval","in":"query","required":false,"schema":{"type":"string","pattern":"^(1h|raw)$","description":"1h (last sample per UTC hour) | raw (every sample)","default":"1h","title":"Interval"},"description":"1h (last sample per UTC hour) | raw (every sample)"},{"name":"exchange","in":"query","required":false,"schema":{"description":"Only this exchange (e.g. binance)","title":"Exchange","type":"string","nullable":true},"description":"Only this exchange (e.g. binance)"},{"name":"chain","in":"query","required":false,"schema":{"description":"Only this chain (e.g. eth, tron)","title":"Chain","type":"string","nullable":true},"description":"Only this chain (e.g. eth, tron)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExchangeFlowHistoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/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 what the first payment costs per plan.\n\nCodes apply to card and dashboard crypto checkout only — never to x402\npurchases. A bounded code is \"percent_off for duration_months months\": a\nmonthly plan takes the full percentage on each of those months, and an\nannual plan takes those months' share of it off the first year.\n\nPublic (checkout UIs call it pre-auth). Every anonymous failure mode returns\nthe identical `{\"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.\n\nWith an `X-API-Key` header the answer is for that key's account: `prices`\nand `duration_months` reflect the discounted months it has left, and a code\nits email or wallet has already used up returns `valid: false` with\n`reason: \"already_used\"`. The dashboard calls this right before an EVM\nwallet transfer, which is sent before the server ever sees the payment.\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\nAlways list price: discount codes are not accepted here (400) — they apply only to\ncard or crypto checkout from the logged-in dashboard.\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/pricing":{"get":{"tags":["Pricing"],"summary":"Agent pricing: passes, per-request and per-resource USDC prices","description":"Every way an agent can pay over x402, with exact USDC prices.\n\n- **subscriptions**: monthly / annual Pro and Pro Plus (`POST /payments/agent-subscribe`)\n- **passes**: Pro or Pro Plus for 1h / 1d / 7d (same endpoint, `plan=pass_*`)\n- **per_request**: listed endpoints that answer `402` with no key and serve\n  one response per settled payment\n- **resources**: archived Parquet / JSON objects via\n  `GET /backtesting/archives/purchase`\n- **how_to_pay**: the four-step x402 flow\n\nNo API key required. Cached at the edge for 5 minutes.","operationId":"get_pricing_api_v1_pricing_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/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":"Issue an EIP-4361 (Sign-In with Ethereum) challenge for a wallet address.\n\nSign `message` verbatim with personal_sign (EIP-191) and send the signature\nplus `nonce` to /wallet/verify before `expires_at`. The nonce is single-use.","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},"rate_limit_scope":{"title":"Rate Limit Scope","type":"string","nullable":true},"upgrade":{"title":"Upgrade","additionalProperties":true,"type":"object","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."},"daily_limit":{"title":"Daily Limit","type":"integer","nullable":true},"per_minute_limit":{"title":"Per Minute Limit","type":"integer","nullable":true},"rate_limit_scope":{"title":"Rate Limit Scope","type":"string","nullable":true},"email_verified":{"type":"boolean","title":"Email Verified","default":false},"verified_daily_limit":{"title":"Verified Daily Limit","type":"integer","nullable":true},"next_step":{"title":"Next Step","type":"string","nullable":true},"upgrade":{"title":"Upgrade","additionalProperties":true,"type":"object","nullable":true},"next_calls":{"title":"Next Calls","additionalProperties":true,"type":"object","nullable":true}},"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).\n\nCarries the SAME limits block as APIKeyInfo (built by\nsrc.services.tier_copy.key_limits_block). Until 2026-08-26 this returned the\nkey and nothing else: a caller minting from outside the website — which is\noverwhelmingly an AI agent via the MCP tool — learned neither the 100/day cap\nit had just landed on nor that confirming the address lifts it, until a 429\ntold it. All fields below are additive with defaults, so an existing consumer\nparsing this model is unaffected."},"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."},"AgentPrompt":{"properties":{"title":{"type":"string","title":"Title"},"prompt":{"type":"string","title":"Prompt","description":"Copy-paste prompt for an AI agent; uses real CDA endpoint paths"}},"type":"object","required":["title","prompt"],"title":"AgentPrompt"},"AgentSubscribeRequest":{"properties":{"plan":{"type":"string","enum":["monthly","monthly_plus","annual","annual_plus","pass_1h","pass_1d","pass_7d","pass_1h_plus","pass_1d_plus","pass_7d_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)."},"AlgoBrainPageResponse":{"properties":{"path":{"type":"string","title":"Path"},"title":{"type":"string","title":"Title"},"type":{"title":"Type","type":"string","nullable":true},"status":{"title":"Status","type":"string","nullable":true},"category":{"title":"Category","type":"string","nullable":true},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]},"updated":{"title":"Updated","type":"string","nullable":true},"markdown":{"type":"string","title":"Markdown"},"url":{"type":"string","title":"Url"},"license":{"type":"string","title":"License"}},"type":"object","required":["path","title","markdown","url","license"],"title":"AlgoBrainPageResponse"},"AlgoBrainSearchResponse":{"properties":{"query":{"type":"string","title":"Query"},"count":{"type":"integer","title":"Count"},"results":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Results"},"license":{"type":"string","title":"License"},"source":{"type":"string","title":"Source"}},"type":"object","required":["query","count","results","license","source"],"title":"AlgoBrainSearchResponse"},"AlgoBrainStatsResponse":{"properties":{"total_pages":{"type":"integer","title":"Total Pages"},"built_at":{"title":"Built At","type":"integer","nullable":true},"source_commit":{"title":"Source Commit","type":"string","nullable":true},"by_category":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Category"},"by_type":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Type"},"by_backtest_status":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Backtest Status","default":{}},"license":{"type":"string","title":"License"},"source":{"type":"string","title":"Source"}},"type":"object","required":["total_pages","by_category","by_type","license","source"],"title":"AlgoBrainStatsResponse"},"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},"premium":{"title":"Premium","type":"number","nullable":true}},"type":"object","required":["time","symbol","exchange"],"title":"BacktestFundingEntry","description":"``premium`` is set on ``grain=hourly`` rows only; ``open_interest`` /\n``mark_price`` on the 5-min snapshot rows only (HL has no historical source\nfor either at settlement time)."},"BacktestFundingResponse":{"properties":{"grain":{"$ref":"#/components/schemas/GrainDescriptor","nullable":true},"coverage":{"$ref":"#/components/schemas/CoverageInfo","nullable":true},"next_cursor":{"title":"Next Cursor","type":"string","nullable":true},"has_more":{"type":"boolean","title":"Has More","default":false},"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"},"BacktestHLFundingBar":{"properties":{"time":{"type":"integer","title":"Time"},"coin":{"type":"string","title":"Coin"},"funding_sum":{"title":"Funding Sum","type":"number","nullable":true},"n_settlements":{"type":"integer","title":"N Settlements","default":0},"funding_rate_mean":{"title":"Funding Rate Mean","type":"number","nullable":true},"oi_open":{"title":"Oi Open","type":"number","nullable":true},"oi_close":{"title":"Oi Close","type":"number","nullable":true},"oi_change_pct":{"title":"Oi Change Pct","type":"number","nullable":true},"mark_close":{"title":"Mark Close","type":"number","nullable":true},"n_snapshots":{"type":"integer","title":"N Snapshots","default":0}},"type":"object","required":["time","coin"],"title":"BacktestHLFundingBar","description":"Hyperliquid funding + open interest for one closed bar on the HL candle\ngrid — ``time`` equals the matching candle's ``timestamp``.\n\n``funding_sum`` is the carry actually settled over the bar (sum of the hourly\nprints that landed in ``(time, time + interval]``); it is null with\n``n_settlements`` 0 until those prints are archived (daily, for the previous\nUTC day) — ``funding_rate_mean`` (mean live hourly rate over the bar's 5-min\nsamples) is there immediately. OI is in base-coin units; multiply by\n``mark_close`` for notional."},"BacktestHLFundingBarsResponse":{"properties":{"grain":{"$ref":"#/components/schemas/GrainDescriptor","nullable":true},"coverage":{"$ref":"#/components/schemas/CoverageInfo","nullable":true},"next_cursor":{"title":"Next Cursor","type":"string","nullable":true},"has_more":{"type":"boolean","title":"Has More","default":false},"coin":{"type":"string","title":"Coin"},"interval":{"type":"string","title":"Interval"},"count":{"type":"integer","title":"Count"},"data":{"items":{"$ref":"#/components/schemas/BacktestHLFundingBar"},"type":"array","title":"Data"},"join":{"additionalProperties":{"type":"string"},"type":"object","title":"Join"}},"type":"object","required":["coin","interval","count","data","join"],"title":"BacktestHLFundingBarsResponse"},"BacktestHLLiquidationBar":{"properties":{"time":{"type":"integer","title":"Time"},"coin":{"title":"Coin","type":"string","nullable":true},"long_usd":{"type":"number","title":"Long Usd"},"short_usd":{"type":"number","title":"Short Usd"},"total_usd":{"type":"number","title":"Total Usd"},"n_long":{"type":"integer","title":"N Long"},"n_short":{"type":"integer","title":"N Short"},"max_fill_usd":{"title":"Max Fill Usd","type":"number","nullable":true}},"type":"object","required":["time","long_usd","short_usd","total_usd","n_long","n_short"],"title":"BacktestHLLiquidationBar","description":"One closed bucket of Hyperliquid liquidation flow, summed from the exact\nfills served by ``/backtesting/hl-liquidations``. ``coin`` is null on the\nmarket-wide series. Buckets with no fills are not returned."},"BacktestHLLiquidationBarsResponse":{"properties":{"grain":{"$ref":"#/components/schemas/GrainDescriptor","nullable":true},"coverage":{"$ref":"#/components/schemas/CoverageInfo","nullable":true},"next_cursor":{"title":"Next Cursor","type":"string","nullable":true},"has_more":{"type":"boolean","title":"Has More","default":false},"coin":{"title":"Coin","type":"string","nullable":true},"interval":{"type":"string","title":"Interval"},"count":{"type":"integer","title":"Count"},"data":{"items":{"$ref":"#/components/schemas/BacktestHLLiquidationBar"},"type":"array","title":"Data"},"audit":{"additionalProperties":{"type":"string"},"type":"object","title":"Audit"}},"type":"object","required":["coin","interval","count","data","audit"],"title":"BacktestHLLiquidationBarsResponse"},"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":{"grain":{"$ref":"#/components/schemas/GrainDescriptor","nullable":true},"coverage":{"$ref":"#/components/schemas/CoverageInfo","nullable":true},"next_cursor":{"title":"Next Cursor","type":"string","nullable":true},"has_more":{"type":"boolean","title":"Has More","default":false},"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"},"BacktestHLTradeFlowBucket":{"properties":{"time":{"type":"integer","title":"Time"},"coin":{"type":"string","title":"Coin"},"buy_notional":{"title":"Buy Notional","type":"number","nullable":true},"sell_notional":{"title":"Sell Notional","type":"number","nullable":true},"n_trades":{"title":"N Trades","type":"integer","nullable":true},"vwap":{"title":"Vwap","type":"number","nullable":true},"max_fill_usd":{"title":"Max Fill Usd","type":"number","nullable":true},"large_fill_share":{"title":"Large Fill Share","type":"number","nullable":true},"partial":{"type":"boolean","title":"Partial"}},"type":"object","required":["time","coin","buy_notional","sell_notional","n_trades","vwap","max_fill_usd","large_fill_share","partial"],"title":"BacktestHLTradeFlowBucket","description":"One archived 1-min HL taker bucket — the live /hyperliquid/trade-flow\nrow minus ``cvd_usd`` (a served-only running sum). ``partial`` marks a\nminute the collector's socket did not fully watch."},"BacktestHLTradeFlowResponse":{"properties":{"grain":{"$ref":"#/components/schemas/GrainDescriptor","nullable":true},"coverage":{"$ref":"#/components/schemas/CoverageInfo","nullable":true},"next_cursor":{"title":"Next Cursor","type":"string","nullable":true},"has_more":{"type":"boolean","title":"Has More","default":false},"coin":{"title":"Coin","type":"string","nullable":true},"count":{"type":"integer","title":"Count"},"data":{"items":{"$ref":"#/components/schemas/BacktestHLTradeFlowBucket"},"type":"array","title":"Data"}},"type":"object","required":["coin","count","data"],"title":"BacktestHLTradeFlowResponse"},"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":{"grain":{"$ref":"#/components/schemas/GrainDescriptor","nullable":true},"coverage":{"$ref":"#/components/schemas/CoverageInfo","nullable":true},"next_cursor":{"title":"Next Cursor","type":"string","nullable":true},"has_more":{"type":"boolean","title":"Has More","default":false},"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"},"BacktestLiqDensityPoint":{"properties":{"time":{"type":"integer","title":"Time"},"coin":{"type":"string","title":"Coin"},"snapshot_time":{"type":"integer","title":"Snapshot Time"},"mark":{"title":"Mark","type":"number","nullable":true},"long_below":{"additionalProperties":{"type":"number"},"type":"object","title":"Long Below"},"short_above":{"additionalProperties":{"type":"number"},"type":"object","title":"Short Above"},"by_trader_type":{"title":"By Trader Type","additionalProperties":{"$ref":"#/components/schemas/LiqDensitySides"},"type":"object","nullable":true},"by_leverage":{"title":"By Leverage","additionalProperties":{"$ref":"#/components/schemas/LiqDensitySides"},"type":"object","nullable":true}},"type":"object","required":["time","coin","snapshot_time","mark","long_below","short_above"],"title":"BacktestLiqDensityPoint","description":"One coin at one sampled 5-min liquidation-map snapshot."},"BacktestLiqDensityResponse":{"properties":{"grain":{"$ref":"#/components/schemas/GrainDescriptor","nullable":true},"coverage":{"$ref":"#/components/schemas/CoverageInfo","nullable":true},"next_cursor":{"title":"Next Cursor","type":"string","nullable":true},"has_more":{"type":"boolean","title":"Has More","default":false},"coin":{"type":"string","title":"Coin"},"interval":{"type":"string","title":"Interval"},"bands_pct":{"items":{"type":"number"},"type":"array","title":"Bands Pct"},"count":{"type":"integer","title":"Count"},"data":{"items":{"$ref":"#/components/schemas/BacktestLiqDensityPoint"},"type":"array","title":"Data"}},"type":"object","required":["coin","interval","bands_pct","count","data"],"title":"BacktestLiqDensityResponse"},"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":{"grain":{"$ref":"#/components/schemas/GrainDescriptor","nullable":true},"coverage":{"$ref":"#/components/schemas/CoverageInfo","nullable":true},"next_cursor":{"title":"Next Cursor","type":"string","nullable":true},"has_more":{"type":"boolean","title":"Has More","default":false},"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_funding_hourly_rows":{"type":"integer","title":"Bt Funding Hourly Rows","default":0},"bt_liquidations_rows":{"type":"integer","title":"Bt Liquidations Rows","default":0},"bt_hl_liquidation_events_rows":{"type":"integer","title":"Bt Hl Liquidation Events 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},"limits":{"$ref":"#/components/schemas/BacktestingLimits","nullable":true}},"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"},"BacktestingLimits":{"properties":{"edge_requests_per_second_per_key":{"type":"integer","title":"Edge Requests Per Second Per Key"},"edge_burst":{"type":"integer","title":"Edge Burst"},"heavy_read_concurrency":{"type":"integer","title":"Heavy Read Concurrency"},"heavy_read_queue_seconds":{"type":"number","title":"Heavy Read Queue Seconds"},"max_rows_per_page":{"type":"integer","title":"Max Rows Per Page"},"public_edge_timeout_seconds":{"type":"integer","title":"Public Edge Timeout Seconds"},"note":{"type":"string","title":"Note"}},"type":"object","required":["edge_requests_per_second_per_key","edge_burst","heavy_read_concurrency","heavy_read_queue_seconds","max_rows_per_page","public_edge_timeout_seconds","note"],"title":"BacktestingLimits","description":"The bulkhead's real operating limits, so a consumer can pace a pull\ninstead of discovering them by being shed."},"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"},"chain_id":{"title":"Chain Id","type":"integer","nullable":true}},"type":"object","required":["wallet_address"],"title":"ChallengeRequest"},"ChallengeResponse":{"properties":{"message":{"type":"string","title":"Message"},"nonce":{"type":"string","title":"Nonce"},"expires_at":{"title":"Expires At","type":"string","format":"date-time","nullable":true}},"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},"levels_truncated":{"title":"Levels Truncated","description":"{bid: {10bps: bool, ...}, ask: {...}} — band saturated the returned book levels; its depth_usd is a lower bound","additionalProperties":{"additionalProperties":{"type":"boolean"},"type":"object"},"type":"object","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."},"CoverageInfo":{"properties":{"local_first":{"title":"Local First","type":"integer","nullable":true},"local_last":{"title":"Local Last","type":"integer","nullable":true},"archive_hint":{"title":"Archive Hint","type":"string","nullable":true}},"type":"object","title":"CoverageInfo","description":"Local retention bounds (ms) for the queried scope. ``archive_hint`` is set\nwhen the window starts before ``local_first`` — those rows are not missing,\nthey live in the daily Parquet archive."},"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"},"units":{"type":"string","title":"Units","default":"USD"},"latest":{"title":"Latest"},"in_progress":{"title":"In Progress"},"count":{"type":"integer","title":"Count","default":0},"flows":{"title":"Flows"},"sources":{"title":"Sources"},"source_health":{"title":"Source Health"}},"type":"object","required":["asset","flows"],"title":"ETFFlowsResponse","description":"US spot-ETF daily net flows, keyed by trade date (settled days only in\n``flows``; the day still reporting is ``in_progress``)."},"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"},"ExchangeFlowHistoryResponse":{"properties":{"symbol":{"type":"string","title":"Symbol"},"unit":{"type":"string","title":"Unit","description":"Unit of every amount — the token itself; USD only for USDT/USDC/DAI"},"exchange_filter":{"title":"Exchange Filter","type":"string","nullable":true},"chain_filter":{"title":"Chain Filter","type":"string","nullable":true},"interval":{"type":"string","title":"Interval","description":"1h (last sample per UTC hour) | raw (every ~30-min sample)"},"start":{"type":"integer","title":"Start"},"end":{"type":"integer","title":"End"},"count":{"type":"integer","title":"Count"},"points":{"items":{"$ref":"#/components/schemas/FlowHistoryPoint"},"type":"array","title":"Points"}},"type":"object","required":["symbol","unit","interval","start","end","count","points"],"title":"ExchangeFlowHistoryResponse"},"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},"stats":{"$ref":"#/components/schemas/ExchangeStats","nullable":true}},"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"},"ExchangeStats":{"properties":{"open_interest_usd":{"title":"Open Interest Usd","type":"number","nullable":true},"volume_24h_usd":{"title":"Volume 24H Usd","type":"number","nullable":true},"funding_rate_apr_pct":{"title":"Funding Rate Apr Pct","type":"number","nullable":true},"market_count":{"title":"Market Count","type":"integer","nullable":true},"note":{"title":"Note","type":"string","nullable":true},"source":{"title":"Source","type":"string","nullable":true}},"type":"object","title":"ExchangeStats","description":"Live, venue-native stats — currently populated for `lighter` and\n`asterdex` only (their own public APIs, refreshed every 5 min); `null` on\nevery other exchange for now, not \"zero\". Not the BTC-only cross-exchange\nOI/funding comparison the `/open-interest` and `/funding-rates` endpoints\nalready serve for Binance/Bybit/OKX/Hyperliquid — this is each venue's own\naggregate across its full perp book."},"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."},"FlowHistoryPoint":{"properties":{"ts":{"type":"integer","title":"Ts","description":"Unix seconds the sample was taken; the 1h/24h windows are trailing from here"},"inflow_1h":{"type":"number","title":"Inflow 1H"},"outflow_1h":{"type":"number","title":"Outflow 1H"},"net_1h":{"type":"number","title":"Net 1H","description":"inflow - outflow (positive = net deposits to exchanges)"},"inflow_24h":{"type":"number","title":"Inflow 24H"},"outflow_24h":{"type":"number","title":"Outflow 24H"},"net_24h":{"type":"number","title":"Net 24H"},"chains":{"items":{"type":"string"},"type":"array","title":"Chains","description":"Chains contributing to this sample"},"per_exchange_1h":{"additionalProperties":{"$ref":"#/components/schemas/WindowFlow"},"type":"object","title":"Per Exchange 1H","description":"The trailing-1h window per exchange"}},"type":"object","required":["ts","inflow_1h","outflow_1h","net_1h","inflow_24h","outflow_24h","net_24h","chains","per_exchange_1h"],"title":"FlowHistoryPoint"},"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."},"GrainDescriptor":{"properties":{"kind":{"type":"string","title":"Kind"},"cadence":{"title":"Cadence","type":"string","nullable":true},"is_cumulative":{"type":"boolean","title":"Is Cumulative","default":false},"sum_ok":{"type":"boolean","title":"Sum Ok","default":false},"window":{"title":"Window","type":"string","nullable":true},"settlements_per_day":{"title":"Settlements Per Day","type":"integer","nullable":true},"note":{"type":"string","title":"Note"}},"type":"object","required":["kind","note"],"title":"GrainDescriptor","description":"What ONE ROW of a series is, stated on the payload so it cannot be mis-summed.\n\n``kind``: ``event`` (one fill), ``bar`` (a closed bucket), ``rate_snapshot``\n(the live rate sampled on a timer), ``rolling_window`` (a trailing total\nsampled on a timer), ``settled_payment`` (one settlement print).\n``sum_ok`` — adding rows across time is meaningful. ``is_cumulative`` — a row\nalready contains its predecessors' flow. ``settlements_per_day`` is set for\nfunding series only."},"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."},"HLCandleBatchResponse":{"properties":{"interval":{"type":"string","title":"Interval"},"limit":{"type":"integer","title":"Limit"},"series":{"additionalProperties":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"type":"object","title":"Series"},"count":{"type":"integer","title":"Count"},"pending":{"items":{"type":"string"},"type":"array","title":"Pending","default":[]},"complete":{"type":"boolean","title":"Complete","default":true},"retry_after_s":{"title":"Retry After S","type":"integer","nullable":true},"closed_only":{"type":"boolean","title":"Closed Only","default":false},"atr_period":{"title":"Atr Period","type":"integer","nullable":true},"forming_bar_timestamp":{"title":"Forming Bar Timestamp","type":"integer","nullable":true}},"type":"object","required":["interval","limit","series","count"],"title":"HLCandleBatchResponse","description":"Trailing candles for several coins, keyed by HL coin name."},"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"},"start":{"title":"Start","type":"integer","nullable":true},"end":{"title":"End","type":"integer","nullable":true},"atr_period":{"title":"Atr Period","type":"integer","nullable":true},"forming_bar_timestamp":{"title":"Forming Bar Timestamp","type":"integer","nullable":true}},"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":[]},"ts":{"title":"Ts","type":"integer","nullable":true}},"type":"object","required":["coin"],"title":"HLL2BookResponse","description":"Hyperliquid L2 order book."},"HLMetaResponse":{"properties":{"universe":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Universe","default":[]},"fees":{"title":"Fees","additionalProperties":true,"type":"object","nullable":true}},"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},"as_of":{"title":"As Of","type":"integer","nullable":true},"generated_at":{"title":"Generated At","type":"integer","nullable":true},"coverage":{"title":"Coverage","additionalProperties":{"type":"integer"},"type":"object","nullable":true}},"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"},"as_of":{"title":"As Of","type":"integer","nullable":true},"generated_at":{"title":"Generated At","type":"integer","nullable":true}},"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},"as_of":{"title":"As Of","type":"integer","nullable":true},"price_as_of":{"title":"Price As Of","type":"integer","nullable":true},"generated_at":{"title":"Generated At","type":"integer","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."},"HLTradeFlowBucket":{"properties":{"time":{"type":"integer","title":"Time","description":"Minute start, unix ms (UTC)"},"coin":{"type":"string","title":"Coin"},"buy_notional":{"title":"Buy Notional","description":"USD notional where the taker BOUGHT (HL side B)","type":"number","nullable":true},"sell_notional":{"title":"Sell Notional","description":"USD notional where the taker SOLD (HL side A)","type":"number","nullable":true},"n_trades":{"title":"N Trades","type":"integer","nullable":true},"vwap":{"title":"Vwap","description":"Notional-weighted price for the minute","type":"number","nullable":true},"max_fill_usd":{"title":"Max Fill Usd","description":"Largest single fill, USD","type":"number","nullable":true},"large_fill_share":{"title":"Large Fill Share","description":"Share (0..1) of notional from fills >= large_fill_usd; null when none","type":"number","nullable":true},"partial":{"type":"boolean","title":"Partial","description":"True when our socket did not cover the whole minute"},"cvd_usd":{"title":"Cvd Usd","description":"Running buy-minus-sell notional from window_start (served only)","type":"number","nullable":true}},"type":"object","required":["time","coin","buy_notional","sell_notional","n_trades","vwap","max_fill_usd","large_fill_share","partial"],"title":"HLTradeFlowBucket","description":"One closed UTC minute of taker flow for one perp.\n\nEvery numeric field is ``null`` (and ``partial`` is true) for a minute the\nstream did not watch; a watched minute with no fills is all zeros with\n``vwap`` / ``large_fill_share`` null."},"HLTradeFlowResponse":{"properties":{"coin":{"type":"string","title":"Coin"},"minutes":{"type":"integer","title":"Minutes"},"bucket":{"type":"string","title":"Bucket","default":"1m"},"large_fill_usd":{"type":"number","title":"Large Fill Usd"},"window_start":{"type":"integer","title":"Window Start"},"window_end":{"type":"integer","title":"Window End","description":"Exclusive; the open minute is never included"},"stream":{"$ref":"#/components/schemas/HLTradeFlowStream"},"data":{"items":{"$ref":"#/components/schemas/HLTradeFlowBucket"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["coin","minutes","large_fill_usd","window_start","window_end","stream","data","count"],"title":"HLTradeFlowResponse"},"HLTradeFlowStream":{"properties":{"connected":{"type":"boolean","title":"Connected"},"connected_since":{"title":"Connected Since","description":"unix ms, or null when disconnected","type":"integer","nullable":true},"coverage_pct":{"type":"number","title":"Coverage Pct","description":"Share (0..100) of the last 60 minutes fully watched"}},"type":"object","required":["connected","connected_since","coverage_pct"],"title":"HLTradeFlowStream"},"HLTradeFlowUniverseResponse":{"properties":{"window":{"type":"string","title":"Window"},"window_minutes":{"type":"integer","title":"Window Minutes"},"large_fill_usd":{"type":"number","title":"Large Fill Usd"},"as_of":{"type":"integer","title":"As Of","description":"Window end (last closed minute), unix ms"},"data":{"items":{"$ref":"#/components/schemas/HLTradeFlowUniverseRow"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["window","window_minutes","large_fill_usd","as_of","data","count"],"title":"HLTradeFlowUniverseResponse"},"HLTradeFlowUniverseRow":{"properties":{"coin":{"type":"string","title":"Coin"},"buy_notional":{"type":"number","title":"Buy Notional"},"sell_notional":{"type":"number","title":"Sell Notional"},"taker_buy_ratio":{"title":"Taker Buy Ratio","description":"buy / (buy + sell), 0..1","type":"number","nullable":true},"n_trades":{"type":"integer","title":"N Trades"},"large_fill_share":{"title":"Large Fill Share","type":"number","nullable":true},"partial_minutes":{"type":"integer","title":"Partial Minutes","description":"Window minutes our socket did not fully watch (same for every row)"}},"type":"object","required":["coin","buy_notional","sell_notional","taker_buy_ratio","n_trades","large_fill_share","partial_minutes"],"title":"HLTradeFlowUniverseRow"},"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."},"HeatmapResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/HeatmapRow"},"type":"array","title":"Items"},"count":{"type":"integer","title":"Count"},"universe_size":{"type":"integer","title":"Universe Size"},"interval":{"type":"string","title":"Interval"},"as_of":{"title":"As Of","type":"string","nullable":true},"bar_4h_as_of":{"title":"Bar 4H As Of","type":"string","nullable":true},"moves":{"additionalProperties":{"type":"string"},"type":"object","title":"Moves","default":{}},"timestamp":{"type":"string","title":"Timestamp"}},"type":"object","required":["items","count","universe_size","interval","timestamp"],"title":"HeatmapResponse"},"HeatmapRow":{"properties":{"symbol":{"type":"string","title":"Symbol"},"source":{"type":"string","enum":["binance_spot","hyperliquid_perp"],"title":"Source"},"price":{"title":"Price","type":"number","nullable":true},"pct_1h":{"title":"Pct 1H","type":"number","nullable":true},"pct_4h":{"title":"Pct 4H","type":"number","nullable":true},"pct_24h":{"title":"Pct 24H","type":"number","nullable":true},"pct_4h_bar":{"title":"Pct 4H Bar","type":"number","nullable":true},"signum":{"type":"string","enum":["red","grey","green"],"title":"Signum"},"days_in_color":{"type":"integer","title":"Days In Color"},"adx":{"type":"number","title":"Adx"},"signum_4h":{"title":"Signum 4H","type":"string","enum":["red","grey","green"],"nullable":true},"bars_in_color_4h":{"title":"Bars In Color 4H","type":"integer","nullable":true},"notional_30":{"title":"Notional 30","type":"number","nullable":true},"above_sma200":{"title":"Above Sma200","type":"boolean","nullable":true},"dist_from_200_pct":{"title":"Dist From 200 Pct","type":"number","nullable":true}},"type":"object","required":["symbol","source","signum","days_in_color","adx"],"title":"HeatmapRow"},"HyperliquidDerivativesHistoryResponse":{"properties":{"symbol":{"type":"string","title":"Symbol"},"history":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"History"}},"type":"object","required":["symbol","history"],"title":"HyperliquidDerivativesHistoryResponse","description":"Daily Hyperliquid funding + open interest history derived from the\n5-min ``bt_funding`` archive. No ``long_short_ratio``/top-trader fields —\nthose are Binance/CoinGlass-only, with no Hyperliquid equivalent."},"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+."},"IndicatorDetail":{"properties":{"slug":{"type":"string","title":"Slug","description":"Stable id; also the anchor on /trading-indicators/{group}"},"name":{"type":"string","title":"Name"},"group":{"type":"string","title":"Group"},"summary":{"type":"string","title":"Summary"},"aliases":{"items":{"type":"string"},"type":"array","title":"Aliases"},"endpoints":{"items":{"type":"string"},"type":"array","title":"Endpoints"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"},"difficulty":{"title":"Difficulty","type":"string","nullable":true},"used_by":{"items":{"$ref":"#/components/schemas/StrategyRef"},"type":"array","title":"Used By","description":"Catalogue strategies that use this indicator (up to 12)"},"wiki_path":{"type":"string","title":"Wiki Path","description":"Full definition: GET /api/v1/algobrain/page?path={wiki_path}"},"prompts":{"items":{"$ref":"#/components/schemas/AgentPrompt"},"type":"array","title":"Prompts"},"source":{"type":"string","title":"Source"}},"type":"object","required":["slug","name","group","summary","aliases","endpoints","tags","used_by","wiki_path","prompts","source"],"title":"IndicatorDetail"},"IndicatorGroupInfo":{"properties":{"slug":{"type":"string","title":"Slug"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"indicator_count":{"type":"integer","title":"Indicator Count"},"endpoints":{"items":{"type":"string"},"type":"array","title":"Endpoints","description":"CDA endpoints that serve this group's indicators or their raw inputs"}},"type":"object","required":["slug","name","description","indicator_count","endpoints"],"title":"IndicatorGroupInfo"},"IndicatorGroupsResponse":{"properties":{"groups":{"items":{"$ref":"#/components/schemas/IndicatorGroupInfo"},"type":"array","title":"Groups"},"group_count":{"type":"integer","title":"Group Count"},"indicator_count":{"type":"integer","title":"Indicator Count"},"source":{"type":"string","title":"Source"}},"type":"object","required":["groups","group_count","indicator_count","source"],"title":"IndicatorGroupsResponse"},"IndicatorRef":{"properties":{"slug":{"type":"string","title":"Slug"},"name":{"type":"string","title":"Name"},"group":{"type":"string","title":"Group"}},"type":"object","required":["slug","name","group"],"title":"IndicatorRef"},"IndicatorSummary":{"properties":{"slug":{"type":"string","title":"Slug","description":"Stable id; also the anchor on /trading-indicators/{group}"},"name":{"type":"string","title":"Name"},"group":{"type":"string","title":"Group"},"summary":{"type":"string","title":"Summary"},"aliases":{"items":{"type":"string"},"type":"array","title":"Aliases"},"endpoints":{"items":{"type":"string"},"type":"array","title":"Endpoints"}},"type":"object","required":["slug","name","group","summary","aliases","endpoints"],"title":"IndicatorSummary"},"IndicatorsCatalogResponse":{"properties":{"group":{"title":"Group","type":"string","nullable":true},"count":{"type":"integer","title":"Count"},"indicators":{"items":{"$ref":"#/components/schemas/IndicatorSummary"},"type":"array","title":"Indicators"},"source":{"type":"string","title":"Source"}},"type":"object","required":["group","count","indicators","source"],"title":"IndicatorsCatalogResponse"},"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."},"LiqDensitySides":{"properties":{"long_below":{"additionalProperties":{"type":"number"},"type":"object","title":"Long Below"},"short_above":{"additionalProperties":{"type":"number"},"type":"object","title":"Short Above"}},"type":"object","required":["long_below","short_above"],"title":"LiqDensitySides","description":"Liquidatable notional (USD) inside each band of the mark, keyed by band\nhalf-width in percent (\"0.5\", \"1\", \"2\", \"3\", \"5\"). Bands are cumulative —\n\"2\" includes \"1\". ``long_below`` = long positions whose liquidation price\nis below the mark (fuel for a down-move); ``short_above`` = shorts whose\nliquidation price is above it (fuel for an up-move)."},"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"},"as_of":{"title":"As Of","description":"Unix seconds the liquidation snapshot was refreshed","type":"integer","nullable":true},"coverage":{"title":"Coverage","additionalProperties":true,"type":"object","nullable":true},"baseline":{"title":"Baseline","description":"Definition of the per-row liq_1h_vs_7d_median ratios","additionalProperties":true,"type":"object","nullable":true},"grain":{"title":"Grain","description":"What a row's USD fields ARE: rolling trailing-window levels (kind=rolling_window, sum_ok=false) — never sum or difference successive polls","additionalProperties":true,"type":"object","nullable":true},"row_count_meaning":{"title":"Row Count Meaning","description":"What each row's `count` counts (liquidation events in the 24h window)","type":"string","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.\n\n``as_of`` is the unix-seconds refresh time of the snapshot behind ``data``.\n``baseline`` describes the per-row ``liq_1h_vs_7d_median`` ratio block\n(source, window, and what null means)."},"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},"current":{"description":"Alias for `regime` — the nowcast, identical across horizons. Prefer this field when you just want 'what regime are we in right now.'","$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},"current":{"description":"Alias for `regime` — the nowcast, identical across horizons. Prefer this field when you just want 'what regime are we in right now.'","$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.\n\n`regime` is the nowcast (present state), not a per-horizon forecast — it is\ncomputed once and is therefore byte-identical across `horizon` values for\nthe same scope at the same instant. `current` is an unambiguous alias for\nthe same object, added so callers don't have to infer that from re-reading\n`regime` at two horizons; the horizon-specific forecast lives in\n`probabilities.regime_transitions` and `tomorrow`."},"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"},"in_regime_since":{"title":"In Regime Since","description":"ISO open time of the first closed 1h bar of the current label run (= last bar − (candles_in_regime − 1) h). Null while warming.","type":"string","nullable":true},"pending":{"title":"Pending","description":"Hysteresis challenger streak {label, count, needed}; null when no challenger is accumulating bars","additionalProperties":true,"type":"object","nullable":true},"hysteresis":{"title":"Hysteresis","description":"Switch rule constants {margin, bars, override, incumbent_floor, min_dwell_bars=0} — there is no minimum dwell","additionalProperties":true,"type":"object","nullable":true}},"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"},"catalog_version":{"type":"string","title":"Catalog Version","description":"CalVer of this id<->label mapping. The mapping is a stable, versioned contract — relabeling an existing id or reordering ids only happens alongside a bump here (and a CHANGELOG entry). Safe to key off `regime.id` directly as long as this version is unchanged; appending a new id at the end does not bump it."}},"type":"object","required":["regimes","count","catalog_version"],"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."},"ResolveRequest":{"properties":{"id":{"type":"string","maxLength":255,"minLength":1,"title":"Id"},"note":{"title":"Note","type":"string","maxLength":2000,"nullable":true},"hours":{"type":"integer","maximum":2160.0,"minimum":1.0,"title":"Hours","default":168}},"type":"object","required":["id"],"title":"ResolveRequest"},"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"},"SRLevelModel":{"properties":{"price":{"type":"number","title":"Price"},"strength":{"type":"integer","title":"Strength","description":"Swing-pivot touches clustered into this level"},"dist_pct":{"type":"number","title":"Dist Pct","description":"Signed % distance from current price"}},"type":"object","required":["price","strength","dist_pct"],"title":"SRLevelModel"},"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"},"SignumRggArchiveResponse":{"properties":{"date":{"type":"string","title":"Date"},"as_of":{"title":"As Of","type":"string","nullable":true},"computed_from":{"title":"Computed From","type":"string","nullable":true},"summary":{"additionalProperties":true,"type":"object","title":"Summary"},"by_symbol":{"additionalProperties":true,"type":"object","title":"By Symbol"}},"type":"object","required":["date","summary","by_symbol"],"title":"SignumRggArchiveResponse","description":"One archived day of the SIGNUM_RGG universe block."},"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},"color_live":{"title":"Color Live","description":"Colour including the forming UTC bar (the pre-2026-09-09 read)","type":"string","enum":["red","grey","green"],"nullable":true},"adx_live":{"title":"Adx Live","type":"number","nullable":true},"days_in_color_live":{"title":"Days In Color Live","type":"integer","nullable":true},"is_final":{"type":"boolean","title":"Is Final","description":"Always true: headline fields are from completed bars","default":true},"computed_from":{"title":"Computed From","description":"YYYY-MM-DD of the last completed daily bar the headline fields use","type":"string","nullable":true},"pegged":{"type":"boolean","title":"Pegged","description":"Stablecoin / $1-pinned token; excluded from breadth + top lists","default":false},"intraday_disagrees":{"type":"boolean","title":"Intraday Disagrees","description":"Alias of flip_alert: last 4 closed 1h bars all disagree with color","default":false},"recent_flip":{"type":"boolean","title":"Recent Flip","description":"days_in_color <= 3","default":false},"flip_alert_reason":{"title":"Flip Alert Reason","description":"\"intraday_disagrees\" when flip_alert is true, else null","type":"string","nullable":true},"h4_color":{"title":"H4 Color","description":"4h SIGNUM colour, completed 4h bars only","type":"string","enum":["red","grey","green"],"nullable":true},"h4_adx":{"title":"H4 Adx","type":"number","nullable":true},"h4_plus_di":{"title":"H4 Plus Di","type":"number","nullable":true},"h4_minus_di":{"title":"H4 Minus Di","type":"number","nullable":true},"h4_bars_in_color":{"title":"H4 Bars In Color","description":"Completed 4h bars since the 4h colour last changed","type":"integer","nullable":true},"h4_computed_from":{"title":"H4 Computed From","description":"ISO open time of the last completed 4h bar used","type":"string","nullable":true},"history":{"items":{"$ref":"#/components/schemas/SignumHistoryEntry"},"type":"array","title":"History"},"intraday_history":{"items":{"$ref":"#/components/schemas/SignumIntradayHistoryEntry"},"type":"array","title":"Intraday History","default":[]},"h4_history":{"items":{"$ref":"#/components/schemas/SignumIntradayHistoryEntry"},"type":"array","title":"H4 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},"color_live":{"title":"Color Live","description":"Colour including the forming UTC bar (the pre-2026-09-09 read)","type":"string","enum":["red","grey","green"],"nullable":true},"adx_live":{"title":"Adx Live","type":"number","nullable":true},"days_in_color_live":{"title":"Days In Color Live","type":"integer","nullable":true},"is_final":{"type":"boolean","title":"Is Final","description":"Always true: headline fields are from completed bars","default":true},"computed_from":{"title":"Computed From","description":"YYYY-MM-DD of the last completed daily bar the headline fields use","type":"string","nullable":true},"pegged":{"type":"boolean","title":"Pegged","description":"Stablecoin / $1-pinned token; excluded from breadth + top lists","default":false},"intraday_disagrees":{"type":"boolean","title":"Intraday Disagrees","description":"Alias of flip_alert: last 4 closed 1h bars all disagree with color","default":false},"recent_flip":{"type":"boolean","title":"Recent Flip","description":"days_in_color <= 3","default":false},"flip_alert_reason":{"title":"Flip Alert Reason","description":"\"intraday_disagrees\" when flip_alert is true, else null","type":"string","nullable":true},"h4_color":{"title":"H4 Color","description":"4h SIGNUM colour, completed 4h bars only","type":"string","enum":["red","grey","green"],"nullable":true},"h4_adx":{"title":"H4 Adx","type":"number","nullable":true},"h4_plus_di":{"title":"H4 Plus Di","type":"number","nullable":true},"h4_minus_di":{"title":"H4 Minus Di","type":"number","nullable":true},"h4_bars_in_color":{"title":"H4 Bars In Color","description":"Completed 4h bars since the 4h colour last changed","type":"integer","nullable":true},"h4_computed_from":{"title":"H4 Computed From","description":"ISO open time of the last completed 4h bar used","type":"string","nullable":true}},"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"},"offset":{"type":"integer","title":"Offset","default":0},"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"},"source":{"type":"string","title":"Source","description":"How the row was observed. `transfer`: a decoded Transfer event with a real counterparty address. `balance_delta`: inferred from a change in a CEX wallet's balance between polls (native ETH/BTC, Solana) — exchange-internal hot/cold rebalancing is indistinguishable from a client deposit, so filter with `source=transfer` for whale-sized deposits only","default":"transfer"}},"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."},"StrategiesResponse":{"properties":{"group":{"title":"Group","description":"The ?group filter applied, or null for all groups","type":"string","nullable":true},"count":{"type":"integer","title":"Count"},"strategies":{"items":{"$ref":"#/components/schemas/StrategySummary"},"type":"array","title":"Strategies"},"source":{"type":"string","title":"Source"}},"type":"object","required":["group","count","strategies","source"],"title":"StrategiesResponse"},"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."},"StrategyDetail":{"properties":{"slug":{"type":"string","title":"Slug","description":"Stable id; also the anchor on /trading-strategies/{group}"},"name":{"type":"string","title":"Name"},"group":{"type":"string","title":"Group"},"summary":{"type":"string","title":"Summary"},"timeframe":{"type":"string","title":"Timeframe","description":"scalp | intraday | day | swing | position | long-term"},"complexity":{"title":"Complexity","description":"beginner | intermediate | advanced","type":"string","nullable":true},"indicators":{"items":{"$ref":"#/components/schemas/IndicatorRef"},"type":"array","title":"Indicators","description":"Indicators the playbook links to or requires; empty when it declares none"},"endpoints":{"items":{"type":"string"},"type":"array","title":"Endpoints","description":"CDA endpoints that feed the strategy's inputs"},"edge":{"type":"string","title":"Edge","description":"Why the edge exists (the playbook's edge mechanism); empty when not stated"},"edge_source":{"items":{"type":"string"},"type":"array","title":"Edge Source"},"markets":{"items":{"type":"string"},"type":"array","title":"Markets"},"data_required":{"items":{"type":"string"},"type":"array","title":"Data Required","description":"Raw data inputs as the playbook names them"},"backtest_status":{"title":"Backtest Status","description":"The playbook's own validation status, e.g. untested, cost-corrected, live","type":"string","nullable":true},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"},"wiki_path":{"type":"string","title":"Wiki Path","description":"Full playbook: GET /api/v1/algobrain/page?path={wiki_path}"},"prompts":{"items":{"$ref":"#/components/schemas/AgentPrompt"},"type":"array","title":"Prompts"},"source":{"type":"string","title":"Source"}},"type":"object","required":["slug","name","group","summary","timeframe","indicators","endpoints","edge","edge_source","markets","data_required","tags","wiki_path","prompts","source"],"title":"StrategyDetail"},"StrategyGroupInfo":{"properties":{"slug":{"type":"string","title":"Slug"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"strategy_count":{"type":"integer","title":"Strategy Count"}},"type":"object","required":["slug","name","description","strategy_count"],"title":"StrategyGroupInfo"},"StrategyGroupsResponse":{"properties":{"groups":{"items":{"$ref":"#/components/schemas/StrategyGroupInfo"},"type":"array","title":"Groups"},"group_count":{"type":"integer","title":"Group Count"},"strategy_count":{"type":"integer","title":"Strategy Count"},"source":{"type":"string","title":"Source"}},"type":"object","required":["groups","group_count","strategy_count","source"],"title":"StrategyGroupsResponse"},"StrategyRef":{"properties":{"slug":{"type":"string","title":"Slug"},"name":{"type":"string","title":"Name"},"group":{"type":"string","title":"Group"}},"type":"object","required":["slug","name","group"],"title":"StrategyRef"},"StrategySummary":{"properties":{"slug":{"type":"string","title":"Slug","description":"Stable id; also the anchor on /trading-strategies/{group}"},"name":{"type":"string","title":"Name"},"group":{"type":"string","title":"Group"},"summary":{"type":"string","title":"Summary"},"timeframe":{"type":"string","title":"Timeframe","description":"scalp | intraday | day | swing | position | long-term"},"complexity":{"title":"Complexity","description":"beginner | intermediate | advanced","type":"string","nullable":true},"indicators":{"items":{"$ref":"#/components/schemas/IndicatorRef"},"type":"array","title":"Indicators","description":"Indicators the playbook links to or requires; empty when it declares none"},"endpoints":{"items":{"type":"string"},"type":"array","title":"Endpoints","description":"CDA endpoints that feed the strategy's inputs"}},"type":"object","required":["slug","name","group","summary","timeframe","indicators","endpoints"],"title":"StrategySummary"},"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","pass_1h","pass_1d","pass_7d","pass_1h_plus","pass_1d_plus","pass_7d_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"},"SupportResistanceModel":{"properties":{"support":{"items":{"$ref":"#/components/schemas/SRLevelModel"},"type":"array","title":"Support","description":"Nearest-to-price first; each dist_pct is negative","default":[]},"resistance":{"items":{"$ref":"#/components/schemas/SRLevelModel"},"type":"array","title":"Resistance","description":"Nearest-to-price first; each dist_pct is positive","default":[]}},"type":"object","title":"SupportResistanceModel"},"TechnicalBreadth":{"properties":{"total":{"type":"integer","title":"Total"},"in_squeeze":{"type":"integer","title":"In Squeeze"},"pct_in_squeeze":{"type":"number","title":"Pct In Squeeze"},"pct_in_squeeze_pctile_30d":{"title":"Pct In Squeeze Pctile 30D","description":"Percentile (0-100) of today's pct_in_squeeze vs the last 30 archived daily values; null when fewer than 10 days are archived","type":"number","nullable":true},"history_days":{"type":"integer","title":"History Days","description":"Archived days behind the percentile","default":0}},"type":"object","required":["total","in_squeeze","pct_in_squeeze"],"title":"TechnicalBreadth","description":"Compression breadth across the FULL universe (pre-filter)."},"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"},"sr":{"$ref":"#/components/schemas/SupportResistanceModel","default":{"support":[],"resistance":[]}},"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"},"sr":{"$ref":"#/components/schemas/SupportResistanceModel","default":{"support":[],"resistance":[]}}},"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"},"breadth":{"$ref":"#/components/schemas/TechnicalBreadth","nullable":true}},"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},"duration_months":{"title":"Duration Months","type":"integer","nullable":true},"prices":{"title":"Prices","additionalProperties":{"type":"number"},"type":"object","nullable":true},"reason":{"title":"Reason","type":"string","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"},"message":{"title":"Message","type":"string","nullable":true}},"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},"multiplier_at_floor":{"type":"boolean","title":"Multiplier At Floor","description":"True when vol_target_multiplier is pinned at its 0.25 floor (30d realized vol >= 240%). The multiplier is absolute (60 / rv), not a percentile.","default":false},"multiplier_floor_days":{"type":"integer","title":"Multiplier Floor Days","description":"Consecutive latest daily bars the multiplier has sat at the floor (0 when not at the floor)","default":0}},"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},"backfilled":{"type":"boolean","title":"Backfilled","description":"True when any value was reconstructed from daily klines rather than taken from a verified live capture — every point before 2026-08-24.","default":false}},"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, up to 365 days (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"},"stale_cycles":{"type":"integer","title":"Stale Cycles","description":"Consecutive 30-min rebuild cycles this row was carried over from the previous build because its candle fetch failed (0 = computed this cycle)","default":0},"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"},"stale_cycles":{"type":"integer","title":"Stale Cycles","description":"Consecutive 30-min rebuild cycles this row was carried over from the previous build because its candle fetch failed (0 = computed this cycle)","default":0}},"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","maxLength":255,"minLength":1,"title":"Secret"},"label":{"type":"string","maxLength":100,"minLength":1,"title":"Label"},"enabled":{"type":"boolean","title":"Enabled","default":true},"addresses":{"title":"Addresses","items":{"type":"string","maxLength":128,"minLength":1},"type":"array","maxItems":200,"nullable":true},"events":{"title":"Events","items":{"type":"string","maxLength":32,"minLength":1},"type":"array","maxItems":10,"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","maxLength":255,"minLength":1,"nullable":true},"enabled":{"title":"Enabled","type":"boolean","nullable":true},"addresses":{"title":"Addresses","items":{"type":"string","maxLength":128,"minLength":1},"type":"array","maxItems":200,"nullable":true},"events":{"title":"Events","items":{"type":"string","maxLength":32,"minLength":1},"type":"array","maxItems":10,"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":"Event Stream","description":"Live market events — liquidations, $1M+ whale transfers, funding prints, OI jumps — over Server-Sent Events (Pro), as recent JSON (any key), or as a keyless 30-minute-delayed preview."},{"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."}]}