{"openapi":"3.1.0","info":{"title":"Swolecharts public JSON API","version":"2026-10-20"},"servers":[{"url":"https://swolecharts.com"}],"paths":{"/api/open-interest-acceleration":{"get":{"operationId":"oi_acceleration","summary":"Matched 1h OI acceleration, at most 50 contracts including unavailable rows.","description":"*_fraction: contract-equivalent (0.1 = 10%); acceleration_pp: (recent - previous) * 100 percentage-point change. targets_ms/anchors_ms: boundary/observation epoch ms, anchors ≤5m old. *_usd/minimum: USD, null if unknown. OI order, market-id ties; no HIP-3. unavailable: venue/symbol/base/reason. 400: bad min_oi; 503 + Retry-After: unavailable; empty: 200. Keys as /api/series; URL keys: private, no-store. TTL 120s.","parameters":[{"name":"min_oi","in":"query","required":false,"description":"0, 1000000, 10000000 or 100000000 USD.","schema":{"type":"string","default":"1000000"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"example":{"schema_version":1,"evaluated_at_ms":1791892800000,"targets_ms":[1791885600000,1791889200000,1791892800000],"venues":["binance","bybit","hyperliquid"],"minimum":1000000,"rows":[{"venue":"binance","symbol":"BTCUSDT","base":"BTC","previous_fraction":-0.1,"recent_fraction":0.1,"acceleration_pp":20.0,"previous_usd":-1000000.0,"recent_usd":900000.0,"oi_usd":9900000.0,"anchors_ms":[1791885600000,1791889200000,1791892800000]}],"unavailable":[]},"schema":{"type":"object","properties":{"schema_version":{"type":"integer"},"evaluated_at_ms":{"type":"integer"},"targets_ms":{"type":"array","items":{"type":"integer"}},"venues":{"type":"array","items":{"type":"string"}},"minimum":{"type":"integer"},"rows":{"type":"array","items":{"type":"object","properties":{"venue":{"type":"string"},"symbol":{"type":"string"},"base":{"type":"string"},"previous_fraction":{"type":"number","description":"contract-equivalent (0.1 = 10%)"},"recent_fraction":{"type":"number","description":"contract-equivalent (0.1 = 10%)"},"acceleration_pp":{"type":"number","description":"(recent - previous) * 100 percentage-point change. targets_ms/anchors_ms: boundary/observation epoch ms, anchors ≤5m old. *_usd/minimum: USD, null if unknown. OI order, market-id ties"},"previous_usd":{"type":"number"},"recent_usd":{"type":"number"},"oi_usd":{"type":"number"},"anchors_ms":{"type":"array","items":{"type":"integer"}}},"required":["venue","symbol","base","previous_fraction","recent_fraction","acceleration_pp","previous_usd","recent_usd","oi_usd","anchors_ms"]}},"unavailable":{"type":"array","items":{},"description":"venue/symbol/base/reason. 400: bad min_oi"}},"required":["schema_version","evaluated_at_ms","targets_ms","venues","minimum","rows","unavailable"]}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Data temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}}}}}},"/api/funding-percentiles":{"get":{"operationId":"funding_percentiles","summary":"Own-history funding percentiles for the top 50 perps by OI.","description":"funding_unit: fraction_per_8h (quoted funding, not settlements); percentile: 0..100; *_time_ms: UTC epoch ms; missing values are null, never 0. 400: bad selector; 401: bad key; 429 + Retry-After: rate limit; 503 + Retry-After: unavailable. Empty universe: 200, state empty. Keys as /api/series; TTL 60s.","parameters":[{"name":"window","in":"query","required":false,"description":"7d or 30d.","schema":{"type":"string","default":"7d","enum":["7d","30d"]}},{"name":"venue","in":"query","required":false,"description":"all, binance, bybit, hyperliquid, gate, bitget.","schema":{"type":"string","default":"all","enum":["all","binance","bybit","hyperliquid","gate","bitget"]}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"example":{"schema_version":1,"state":"ok","window":"7d","venue":"all","funding_unit":"fraction_per_8h","rows":[{"base":"BTC","venue":"binance","symbol":"BTCUSDT","oi_usd":8100000000.0,"live_funding":0.0001,"comparison_funding":0.0001,"comparison_time_ms":1792108800000,"percentile":75.0,"reference_count":160,"expected_count":168,"coverage_fraction":0.9523999999999999,"median_funding":8e-05,"p10_funding":-0.0001,"p90_funding":0.0002,"stored_funding":null,"stored_time_ms":null,"row_state":"Ranked"}]},"schema":{"type":"object","properties":{"schema_version":{"type":"integer"},"state":{"type":"string"},"window":{"type":"string"},"venue":{"type":"string"},"funding_unit":{"type":"string","description":"fraction_per_8h (quoted funding, not settlements)"},"rows":{"type":"array","items":{"type":"object","properties":{"base":{"type":"string"},"venue":{"type":"string"},"symbol":{"type":"string"},"oi_usd":{"type":"number"},"live_funding":{"type":"number"},"comparison_funding":{"type":"number"},"comparison_time_ms":{"type":"integer","description":"UTC epoch ms","format":"int64"},"percentile":{"type":"number","description":"0..100"},"reference_count":{"type":"integer"},"expected_count":{"type":"integer"},"coverage_fraction":{"type":"number"},"median_funding":{"type":"number"},"p10_funding":{"type":"number"},"p90_funding":{"type":"number"},"stored_funding":{"type":"null"},"stored_time_ms":{"type":"null","description":"UTC epoch ms"},"row_state":{"type":"string"}},"required":["base","venue","symbol","oi_usd","live_funding","comparison_funding","comparison_time_ms","percentile","reference_count","expected_count","coverage_fraction","median_funding","p10_funding","p90_funding","stored_funding","stored_time_ms","row_state"]}}},"required":["schema_version","state","window","venue","funding_unit","rows"]}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid or revoked API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}}},"503":{"description":"Data temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}}}}}},"/api/coins/overlay":{"get":{"operationId":"coin_overlay","summary":"2–5 crypto coins' aggregate price or OI, rebased to 100.","description":"110 = +10% from the first common positive finite bucket; no interpolation/zero-fill. t/start/end/gaps: UTC epoch ms; step: ms; per-coin gaps null if unknown. /api/series aggregates (summed OI); venue composition can change. No common baseline: insufficient, empty arrays. sources keep db/error and ok/insufficient/unavailable states. 400: bad selectors/unknown coin. Keys, X-RateLimit-*, 401 and 429 + Retry-After as /api/series; keys raise 30 to 120 requests/min but do not change the 7d/30d/90d range or point bounds. TTL 60s/300s (1h/4h), 30s on failure.","parameters":[{"name":"c","in":"query","required":true,"description":"2–5 distinct crypto bases, comma-separated; max 256 characters. Case/dedup normalized, canonical order. No HIP-3.","schema":{"type":"string"}},{"name":"m","in":"query","required":false,"description":"price or oi.","schema":{"type":"string","default":"price","enum":["price","oi"]}},{"name":"range","in":"query","required":false,"description":"7d, 30d or 90d; hourly buckets, 4-hourly for 90d.","schema":{"type":"string","default":"30d","enum":["7d","30d","90d"]}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"example":{"bases":["BTC","ETH","SOL"],"t":[1792101600000,1792105200000],"BTC":[100,102],"ETH":[100,101],"SOL":[100,99]},"schema":{"type":"object","properties":{"bases":{"type":"array","items":{"type":"string"}},"t":{"type":"array","items":{"type":"integer","format":"int64"},"description":"UTC epoch ms"},"BTC":{"type":"array","items":{"type":"integer"}},"ETH":{"type":"array","items":{"type":"integer"}},"SOL":{"type":"array","items":{"type":"integer"}},"state":{},"schema_version":{},"metric":{},"unit":{},"fields":{},"field_map":{},"sources":{},"m":{},"range":{},"start":{},"end":{},"step":{},"gaps":{}},"required":["bases","t","BTC","ETH","SOL"]}}},"headers":{"X-RateLimit-Limit":{"description":"Requests allowed per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"description":"Requests allowed per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"}}}},"401":{"description":"Invalid or revoked API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"description":"Requests allowed per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Requests allowed per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"}}}}}}},"/api/series/{metric}":{"get":{"operationId":"series","summary":"History for one metric as compact time/value arrays.","description":"400: bad input. 404 {\"error\": \"unknown coin\"}: base not in populated metadata. Empty history: 200. Missing/failed database: empty arrays with \"db\": false or \"error\": \"unavailable\". \"gaps\": unrecorded periods. X-RateLimit-* on every response; bad key: 401; rate limit: 429 with Retry-After.","parameters":[{"name":"metric","in":"path","required":true,"description":"Canonical series metric name or accepted alias. See metric definitions and aliases at https://swolecharts.com/developers#metrics.","schema":{"type":"string","enum":["basis","bid-ask-ratio","cumulative-volume-delta","cvd","funding","funding-rate","liqs","liquidations","long-short","long-short-ratio","net-flow","net-positioning","ob-depth","oi","open-interest","perp-basis","premium","price","spot-basis","spot-perp-volume","spot-vs-perp-volume","taker-buy-sell","taker-flow","taker-net-flow","top-vs-crowd","volume","whale-vs-retail"]}},{"name":"base","in":"query","required":false,"description":"Coin, e.g. BTC. Exactly one of base/market; spot-perp-volume allows neither (all coins). Order-book metrics: base only.","schema":{"type":"string"}},{"name":"market","in":"query","required":false,"description":"venue:perp|spot:SYMBOL, e.g. binance:perp:BTCUSDT. Exactly one of base/market; spot-perp-volume allows neither (all coins). Order-book metrics: base only.","schema":{"type":"string"}},{"name":"range","in":"query","required":false,"description":"How far back, e.g. 6h, 30d, 12w, 1y (max 730d; 3650d for long-short and net-positioning, whose Binance history starts in 2020-09, and for funding, whose Hyperliquid history starts in 2023; up to 10y for every metric with an API key). Ignored if start is given.","schema":{"type":"string","default":"1d"}},{"name":"start","in":"query","required":false,"description":"Epoch ms. Needs end unless range is also given.","schema":{"type":"string"}},{"name":"end","in":"query","required":false,"description":"Epoch ms.","schema":{"type":"string","default":"now"}},{"name":"step","in":"query","required":false,"description":"One of 1m, 5m, 15m, 1h, 4h, 1d; raised automatically so the response stays under 1500 points (6000 with an API key).","schema":{"type":"string","default":"auto","enum":["1m","5m","15m","1h","4h","1d","auto"]}},{"name":"venue","in":"query","required":false,"description":"binance, bybit, hyperliquid, bitget, gate, htx, mexc, kucoin, aster, lighter. Ratio metrics without a venue average binance and bybit; with binance or gate they include the hourly backfilled history.","schema":{"type":"string","enum":["binance","bybit","hyperliquid","bitget","gate","htx","mexc","kucoin","aster","lighter"]}},{"name":"type","in":"query","required":false,"description":"perp, spot or all (market_id metrics only).","schema":{"type":"string","default":"perp","enum":["perp","spot","all"]}},{"name":"kind","in":"query","required":false,"description":"accounts or top_acct or top_pos or taker_buy (long-short only).","schema":{"type":"string","default":"accounts","enum":["accounts","top_acct","top_pos","taker_buy"]}},{"name":"format","in":"query","required":false,"description":"json or csv. CSV: time_utc, unix_ms, a column per field.","schema":{"type":"string","default":"json","enum":["json","csv"]}}],"responses":{"200":{"description":"Successful response. CSV starts with a # source comment line, followed by time_utc and unix_ms columns and the data fields.","content":{"application/json":{"example":{"end":1759536000000,"fields":["v"],"t":[1758931200000,1758934800000,1758938400000],"v":[16123456789.0,16205000000.0,16090000000.0],"gaps":[]},"schema":{"type":"object","properties":{"end":{"type":"integer"},"fields":{"type":"array","items":{"type":"string"}},"t":{"type":"array","items":{"type":"integer"}},"v":{"type":"array","items":{"type":"number"}},"gaps":{"type":"array","items":{}},"metric":{},"step":{},"start":{},"source":{},"db":{},"base":{},"market":{},"venue":{},"type":{}},"required":["end","fields","t","v","gaps"]}},"text/csv":{"schema":{"type":"string"}}},"headers":{"X-RateLimit-Limit":{"description":"Requests allowed per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"description":"Requests allowed per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"}}}},"401":{"description":"Invalid or revoked API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"description":"Requests allowed per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"description":"Requests allowed per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Requests allowed per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"}}}}}}},"/api/markets":{"get":{"operationId":"markets","summary":"Every tracked coin now across Binance, Bybit, Hyperliquid, Bitget, Gate, HTX, MEXC, KuCoin, Aster and Lighter: price, 24h volume, OI and funding, markets nested.","description":"Always the full snapshot.","parameters":[],"responses":{"200":{"description":"Successful response","content":{"application/json":{"example":{"coins":[{"base":"BTC","perp_vol24h":29000000000.0,"spot_vol24h":2100000000.0,"oi_usd":16200000000.0,"funding_avg":0.0001,"venues":["binance","bybit","hyperliquid"],"perps":[{"venue":"binance","symbol":"BTCUSDT","quote":"USDT","price":84950.0,"vol24h":20000000000.0,"funding":0.0001,"oi_usd":8000000000.0}],"spots":[],"hip3":false,"cat":["layer-1"]}]},"schema":{"type":"object","properties":{"coins":{"type":"array","items":{"type":"object","properties":{"base":{"type":"string"},"perp_vol24h":{"type":"number"},"spot_vol24h":{"type":"number"},"oi_usd":{"type":"number"},"funding_avg":{"type":"number"},"venues":{"type":"array","items":{"type":"string"}},"perps":{"type":"array","items":{"type":"object","properties":{"venue":{"type":"string"},"symbol":{"type":"string"},"quote":{"type":"string"},"price":{"type":"number"},"vol24h":{"type":"number"},"funding":{"type":"number"},"oi_usd":{"type":"number"}},"required":["venue","symbol","quote","price","vol24h","funding","oi_usd"]}},"spots":{"type":"array","items":{}},"hip3":{"type":"boolean"},"cat":{"type":"array","items":{"type":"string"}}},"required":["base","perp_vol24h","spot_vol24h","oi_usd","funding_avg","venues","perps","spots","hip3","cat"]}},"server_ts":{},"uptime_since":{}},"required":["coins"]}}}}}}},"/api/coin/{base}":{"get":{"operationId":"coin","summary":"One coin now: market row, recent spikes, long/short history and liquidations.","description":"404 with {\"error\": \"unknown coin\"} for a base this site doesn't track.","parameters":[{"name":"base","in":"path","required":true,"description":"Coin, e.g. BTC.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"example":{"market":{"base":"BTC","perp_vol24h":29000000000.0,"spot_vol24h":2100000000.0,"oi_usd":16200000000.0,"funding_avg":0.0001,"venues":["binance","bybit","hyperliquid"],"hip3":false},"liquidations":{"since":1758920945123,"totals":{"24h":{"long":4100000.0,"short":3300000.0,"count":214}}}},"schema":{"type":"object","properties":{"market":{"type":"object","properties":{"base":{"type":"string"},"perp_vol24h":{"type":"number"},"spot_vol24h":{"type":"number"},"oi_usd":{"type":"number"},"funding_avg":{"type":"number"},"venues":{"type":"array","items":{"type":"string"}},"hip3":{"type":"boolean"}},"required":["base","perp_vol24h","spot_vol24h","oi_usd","funding_avg","venues","hip3"]},"liquidations":{"type":"object","properties":{"since":{"type":"integer"},"totals":{"type":"object","properties":{"24h":{"type":"object","properties":{"long":{"type":"number"},"short":{"type":"number"},"count":{"type":"integer"}},"required":["long","short","count"]}},"required":["24h"]}},"required":["since","totals"]},"server_ts":{},"uptime_since":{},"long_short":{},"alerts":{},"hits24h":{},"net_flow24h":{}},"required":["market","liquidations"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/liquidations":{"get":{"operationId":"liquidations","summary":"Rolling 1h/4h/12h/24h liquidation totals by venue and coin, plus the biggest and latest orders since the process started.","description":"Always every coin. One coin's history: /api/series/liquidations?base=...; its rolling totals: /api/coin/{base}.","parameters":[],"responses":{"200":{"description":"Successful response","content":{"application/json":{"example":{"totals":{"24h":{"long":9800000.0,"short":8200000.0,"count":812}},"by_venue":{"binance":{"long":5200000.0,"short":4100000.0,"count":430}},"coins":[{"base":"BTC","24h":{"long":4100000.0,"short":3300000.0}}],"biggest":[{"ts":1759003200000,"venue":"bybit","symbol":"BTCUSDT","base":"BTC","side":"long","usd":380000.0,"price":84200.0}],"recent":[{"ts":1759007345123,"venue":"binance","symbol":"BTCUSDT","base":"BTC","side":"short","usd":15000.0,"price":84950.0}]},"schema":{"type":"object","properties":{"totals":{"type":"object","properties":{"24h":{"type":"object","properties":{"long":{"type":"number"},"short":{"type":"number"},"count":{"type":"integer"}},"required":["long","short","count"]}},"required":["24h"],"description":"/api/coin/{base}"},"by_venue":{"type":"object","properties":{"binance":{"type":"object","properties":{"long":{"type":"number"},"short":{"type":"number"},"count":{"type":"integer"}},"required":["long","short","count"]}},"required":["binance"]},"coins":{"type":"array","items":{"type":"object","properties":{"base":{"type":"string"},"24h":{"type":"object","properties":{"long":{"type":"number"},"short":{"type":"number"}},"required":["long","short"]}},"required":["base","24h"]}},"biggest":{"type":"array","items":{"type":"object","properties":{"ts":{"type":"integer"},"venue":{"type":"string"},"symbol":{"type":"string"},"base":{"type":"string"},"side":{"type":"string"},"usd":{"type":"number"},"price":{"type":"number"}},"required":["ts","venue","symbol","base","side","usd","price"]}},"recent":{"type":"array","items":{"type":"object","properties":{"ts":{"type":"integer"},"venue":{"type":"string"},"symbol":{"type":"string"},"base":{"type":"string"},"side":{"type":"string"},"usd":{"type":"number"},"price":{"type":"number"}},"required":["ts","venue","symbol","base","side","usd","price"]}},"since":{},"server_ts":{},"uptime_since":{},"timeline":{}},"required":["totals","by_venue","coins","biggest","recent"]}}}}}}},"/api/long-short":{"get":{"operationId":"long_short","summary":"Latest Binance and Bybit long/short account and top-trader ratios per coin.","description":"Always every coin, latest reading only. History: /api/series/long-short?base=...&kind=accounts or /api/coin/{base}.","parameters":[],"responses":{"200":{"description":"Successful response","content":{"application/json":{"example":{"coins":[{"base":"BTC","binance_accounts":{"symbol":"BTCUSDT","long":0.62,"ts":1759003200000,"chg_1h":0.01,"chg_4h":-0.02,"chg_24h":0.04},"binance_top_pos":{"symbol":"BTCUSDT","long":0.55,"ts":1759003200000,"chg_1h":-0.003,"chg_4h":0.01,"chg_24h":-0.02}}]},"schema":{"type":"object","properties":{"coins":{"type":"array","items":{"type":"object","properties":{"base":{"type":"string"},"binance_accounts":{"type":"object","properties":{"symbol":{"type":"string"},"long":{"type":"number"},"ts":{"type":"integer"},"chg_1h":{"type":"number"},"chg_4h":{"type":"number"},"chg_24h":{"type":"number"}},"required":["symbol","long","ts","chg_1h","chg_4h","chg_24h"]},"binance_top_pos":{"type":"object","properties":{"symbol":{"type":"string"},"long":{"type":"number"},"ts":{"type":"integer"},"chg_1h":{"type":"number"},"chg_4h":{"type":"number"},"chg_24h":{"type":"number"}},"required":["symbol","long","ts","chg_1h","chg_4h","chg_24h"]}},"required":["base","binance_accounts","binance_top_pos"]}},"server_ts":{}},"required":["coins"]}}}}}}},"/api/order-book-depth":{"get":{"operationId":"order_book_depth","summary":"Bid/ask USD within ±0.1/0.5/1/2% of mid, imbalance and $1M market-order cost (bps), top 20 USDT perps by OI on Binance and Bybit. Derived figures only, never raw books.","description":"Every ~2 minutes, as /order-book-depth. *_truncated: the 500 levels ended inside the band (a lower bound). 503 + Retry-After with {\"error\": ..., \"state\": ...} while loading or with nothing to show yet; it never 500s.","parameters":[],"responses":{"200":{"description":"Successful response","content":{"application/json":{"example":{"bands_pct":[0.1,0.5,1.0,2.0],"venues":[{"venue":"binance","n_universe":20,"markets":[{"symbol":"SOLUSDT","base":"SOL","mid":142.81,"depth":[{"band_pct":0.1,"bid_usd":910000.0,"ask_usd":860000.0,"total_usd":1770000.0,"bid_truncated":false,"ask_truncated":false}],"imbalance":0.04,"imbalance_range_pct":1.0,"cost_buy_bps":1.6,"cost_buy_truncated":false,"cost_sell_bps":1.8,"cost_sell_truncated":false}],"missing":[]}]},"schema":{"type":"object","properties":{"bands_pct":{"type":"array","items":{"type":"number"}},"venues":{"type":"array","items":{"type":"object","properties":{"venue":{"type":"string"},"n_universe":{"type":"integer"},"markets":{"type":"array","items":{"type":"object","properties":{"symbol":{"type":"string"},"base":{"type":"string"},"mid":{"type":"number"},"depth":{"type":"array","items":{"type":"object","properties":{"band_pct":{"type":"number"},"bid_usd":{"type":"number"},"ask_usd":{"type":"number"},"total_usd":{"type":"number"},"bid_truncated":{"type":"boolean","description":"the 500 levels ended inside the band (a lower bound). 503 + Retry-After with {\"error\": ..., \"state\": ...} while loading or with nothing to show yet"},"ask_truncated":{"type":"boolean","description":"the 500 levels ended inside the band (a lower bound). 503 + Retry-After with {\"error\": ..., \"state\": ...} while loading or with nothing to show yet"}},"required":["band_pct","bid_usd","ask_usd","total_usd","bid_truncated","ask_truncated"]}},"imbalance":{"type":"number"},"imbalance_range_pct":{"type":"number"},"cost_buy_bps":{"type":"number"},"cost_buy_truncated":{"type":"boolean","description":"the 500 levels ended inside the band (a lower bound). 503 + Retry-After with {\"error\": ..., \"state\": ...} while loading or with nothing to show yet"},"cost_sell_bps":{"type":"number"},"cost_sell_truncated":{"type":"boolean","description":"the 500 levels ended inside the band (a lower bound). 503 + Retry-After with {\"error\": ..., \"state\": ...} while loading or with nothing to show yet"}},"required":["symbol","base","mid","depth","imbalance","imbalance_range_pct","cost_buy_bps","cost_buy_truncated","cost_sell_bps","cost_sell_truncated"]}},"missing":{"type":"array","items":{}}},"required":["venue","n_universe","markets","missing"]}},"as_of":{},"state":{},"imbalance_band_pct":{},"market_order_usd":{},"levels_per_side":{},"n_books":{},"n_failed":{},"source":{}},"required":["bands_pct","venues"]}}}},"503":{"description":"Data temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}}}}}},"/api/perp-dex-ranking":{"get":{"operationId":"perp_dex_ranking","summary":"Hyperliquid, Aster and Lighter by OI: 24h volume, shares, volume/OI and top 10 markets.","description":"status: live, stale (last good, age_s old), loading or missing; no data: null figures, left out of shares. oi_partial: Aster OI covers its most-traded markets only. As /perp-dex-ranking. 503 + Retry-After with {\"error\": ..., \"state\": ...} while loading or with nothing to show yet; it never 500s.","parameters":[],"responses":{"200":{"description":"Successful response","content":{"application/json":{"example":{"venues":[{"rank":1,"venue":"hyperliquid","name":"Hyperliquid","status":"live","age_s":0,"oi_usd":8000000000.0,"vol24h_usd":4000000000.0,"oi_share":0.816,"vol_share":0.702,"oi_partial":false}]},"schema":{"type":"object","properties":{"venues":{"type":"array","items":{"type":"object","properties":{"rank":{"type":"integer"},"venue":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","description":"live, stale (last good, age_s old), loading or missing"},"age_s":{"type":"integer"},"oi_usd":{"type":"number"},"vol24h_usd":{"type":"number"},"oi_share":{"type":"number"},"vol_share":{"type":"number"},"oi_partial":{"type":"boolean"}},"required":["rank","venue","name","status","age_s","oi_usd","vol24h_usd","oi_share","vol_share","oi_partial"]}},"as_of":{},"total_oi_usd":{},"total_vol24h_usd":{},"n_live":{},"n_venues":{},"source":{},"n_markets":{}},"required":["venues"]}}}},"503":{"description":"Data temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}}}}}},"/api/altcoin-season":{"get":{"operationId":"altcoin_season","summary":"Altcoin season index: share of the top 50 altcoins whose 90-day return beat BTC, its history and each coin's return against BTC.","description":"value: 0-100, last completed UTC day (date); zone: altcoin_season (≥ alt_season_min), bitcoin_season (≤ btc_season_max) or neutral. Returns: fractions. history: [[day_ms (UTC midnight), value], ...], up to 366 days, oldest first. As /altcoin-season-index. 503 + Retry-After with {\"error\": ..., \"state\": ...} while loading or with nothing to show yet; it never 500s.","parameters":[],"responses":{"200":{"description":"Successful response","content":{"application/json":{"example":{"history":[[1790467200000,62.0]],"coins":[{"rank":1,"base":"SOL","symbol":"SOLUSDT","return_90d":0.41,"vs_btc":0.3007,"beat_btc":true}]},"schema":{"type":"object","properties":{"history":{"type":"array","items":{"type":"array","items":{"type":"number"}}},"coins":{"type":"array","items":{"type":"object","properties":{"rank":{"type":"integer"},"base":{"type":"string"},"symbol":{"type":"string"},"return_90d":{"type":"number"},"vs_btc":{"type":"number"},"beat_btc":{"type":"boolean"}},"required":["rank","base","symbol","return_90d","vs_btc","beat_btc"]}},"as_of":{},"source":{},"value":{},"zone":{},"date":{},"value_30d_ago":{},"window_days":{},"alt_season_min":{},"btc_season_max":{},"n_coins":{},"n_beat_btc":{},"n_universe":{},"btc_return":{},"high_1y":{},"low_1y":{},"days_alt_season_1y":{},"days_btc_season_1y":{},"last_cross_alt_season":{},"last_cross_btc_season":{},"excluded":{}},"required":["history","coins"]}}}},"503":{"description":"Data temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}}}}}},"/api/derivatives-fear-greed":{"get":{"operationId":"derivatives_fear_greed","summary":"Daily Derivatives Fear & Greed index (0-100), up to a year, with component scores funding, oi (OI change), ls (long/short) and liq.","description":"Completed UTC days never change; today is provisional. Always 200: \"db\": false or \"error\": true with empty days when the database is unavailable. Method: /derivatives-fear-greed-index.","parameters":[],"responses":{"200":{"description":"Successful response","content":{"application/json":{"example":{"today":{"date":"2026-09-28","value":58,"provisional":true},"days":[{"date":"2026-09-27","value":61,"exact":61.4,"label":"Greed","components":{"funding":66.0,"oi":58.2,"ls":55.1,"liq":66.3}}]},"schema":{"type":"object","properties":{"today":{"type":"object","properties":{"date":{"type":"string"},"value":{"type":"integer"},"provisional":{"type":"boolean"}},"required":["date","value","provisional"]},"days":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string"},"value":{"type":"integer"},"exact":{"type":"number"},"label":{"type":"string"},"components":{"type":"object","properties":{"funding":{"type":"number"},"oi":{"type":"number"},"ls":{"type":"number"},"liq":{"type":"number"}},"required":["funding","oi","ls","liq"]}},"required":["date","value","exact","label","components"]}},"name":{},"formula_version":{},"methodology":{},"db":{},"error":{}},"required":["today","days"]}}}}}}},"/api/spike-stats":{"get":{"operationId":"spike_stats","summary":"Price 5, 15 and 60 minutes after volume spikes: hit rates, quartiles and means by exchange, level, direction and segment.","description":"as_of: epoch ms. 400: bad window; 503 + Retry-After when unavailable (no empty 200).","parameters":[{"name":"window","in":"query","required":false,"description":"7d, 30d or all.","schema":{"type":"string","default":"30d","enum":["7d","30d","all"]}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"example":{"as_of":1759007345123,"since_ms":1758402545123,"horizons_min":[5,15,60],"overall":[{"horizon_min":60,"n":299,"hits":160,"hit_rate":0.535,"q1":-0.0053,"median":0.0011,"q3":0.008,"mean":0.001,"first_ms":1758402600000,"last_ms":1759007100000}],"coins":[{"base":"SOL","n":41,"hits":25,"hit_rate":0.61,"median":0.004}]},"schema":{"type":"object","properties":{"as_of":{"type":"integer","description":"epoch ms. 400: bad window","format":"int64"},"since_ms":{"type":"integer"},"horizons_min":{"type":"array","items":{"type":"integer"}},"overall":{"type":"array","items":{"type":"object","properties":{"horizon_min":{"type":"integer"},"n":{"type":"integer"},"hits":{"type":"integer"},"hit_rate":{"type":"number"},"q1":{"type":"number"},"median":{"type":"number"},"q3":{"type":"number"},"mean":{"type":"number"},"first_ms":{"type":"integer"},"last_ms":{"type":"integer"}},"required":["horizon_min","n","hits","hit_rate","q1","median","q3","mean","first_ms","last_ms"]}},"coins":{"type":"array","items":{"type":"object","properties":{"base":{"type":"string"},"n":{"type":"integer"},"hits":{"type":"integer"},"hit_rate":{"type":"number"},"median":{"type":"number"}},"required":["base","n","hits","hit_rate","median"]}},"window":{},"sample":{},"mixed":{},"low_n":{},"measured":{},"first_ms":{},"last_ms":{},"by":{},"n_coins":{},"best":{},"worst":{},"min_coin_n":{}},"required":["as_of","since_ms","horizons_min","overall","coins"]}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Data temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}}}}}},"/api/spike-stats/{COIN}":{"get":{"operationId":"spike_stats_coin","summary":"The same for one coin, by exchange (HIP-3 separate) and direction, plus its last 20 volume spikes (recent).","description":"Fields as /api/spike-stats plus base and recent[]; no coins, best or worst. 404 for a coin with no recorded spike. as_of: epoch ms. 400: bad window; 503 + Retry-After when unavailable (no empty 200).","parameters":[{"name":"COIN","in":"path","required":true,"description":"e.g. BTC.","schema":{"type":"string"}},{"name":"window","in":"query","required":false,"description":"7d, 30d or all.","schema":{"type":"string","default":"30d","enum":["7d","30d","all"]}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"base":{},"window":{},"as_of":{},"sample":{},"mixed":{},"measured":{},"first_ms":{},"last_ms":{},"horizons_min":{},"low_n":{},"overall":{},"by":{},"recent":{}}}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Data temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}}}}}},"/api/new-listings":{"get":{"operationId":"new_listings","summary":"Binance and Bybit USDT perps listed in the window, newest first, with change since listing (Binance), OI, volume and funding.","description":"503 while the first snapshot loads. as_of: epoch ms. 400: bad window; 503 + Retry-After when unavailable (no empty 200).","parameters":[{"name":"window","in":"query","required":false,"description":"30d or 90d.","schema":{"type":"string","default":"90d","enum":["30d","90d"]}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"example":{"counts":{"binance":7,"bybit":5},"failed":[],"missing":[],"listings":[{"venue":"binance","symbol":"PONSUSDT","base":"PONS","listed_ms":1758873600000,"age_days":1.6,"first_open":0.21,"price":0.25,"change":0.19,"oi_usd":42000000.0,"vol_24h":310000000.0,"funding":0.0001,"live":true}]},"schema":{"type":"object","properties":{"counts":{"type":"object","properties":{"binance":{"type":"integer"},"bybit":{"type":"integer"}},"required":["binance","bybit"]},"failed":{"type":"array","items":{}},"missing":{"type":"array","items":{}},"listings":{"type":"array","items":{"type":"object","properties":{"venue":{"type":"string"},"symbol":{"type":"string"},"base":{"type":"string"},"listed_ms":{"type":"integer"},"age_days":{"type":"number"},"first_open":{"type":"number"},"price":{"type":"number"},"change":{"type":"number"},"oi_usd":{"type":"number"},"vol_24h":{"type":"number"},"funding":{"type":"number"},"live":{"type":"boolean"}},"required":["venue","symbol","base","listed_ms","age_days","first_open","price","change","oi_usd","vol_24h","funding","live"]}},"window":{},"days":{},"as_of":{},"live_as_of":{},"sample":{}},"required":["counts","failed","missing","listings"]}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Data temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}}}}}},"/api/kimchi-premium/history":{"get":{"operationId":"kimchi_history","summary":"Hourly Upbit and Bithumb premium vs Binance for one coin, in percent.","description":"400: bad base or range. Top 20 Korean coins plus BTC, ETH, XRP, SOL. Hourly through 90d, then 4-hour averages. Long ranges up to 10y use adaptively coarser, multi-day buckets to return at most 2,200 points over the full range. step is the actual bucket width in ms. Shared key/IP request budget and X-RateLimit-* headers, as /api/series; 401 for invalid keys, 429 with Retry-After when exhausted. A key raises the request budget only; data ranges and point limits are unchanged.","parameters":[{"name":"base","in":"query","required":true,"description":"e.g. BTC.","schema":{"type":"string"}},{"name":"range","in":"query","required":false,"description":"e.g. 90d, 1y.","schema":{"type":"string","default":"30d"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"example":{"t":[1790668800000],"upbit":[0.412],"bithumb":[0.455]},"schema":{"type":"object","properties":{"t":{"type":"array","items":{"type":"integer"}},"upbit":{"type":"array","items":{"type":"number"}},"bithumb":{"type":"array","items":{"type":"number"}},"base":{},"metric":{},"step":{},"source":{},"unit":{},"fields":{},"db":{},"gaps":{},"start":{},"end":{}},"required":["t","upbit","bithumb"]}}},"headers":{"X-RateLimit-Limit":{"description":"Requests allowed per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"description":"Requests allowed per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"}}}},"401":{"description":"Invalid or revoked API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"description":"Requests allowed per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Requests allowed per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"}}}}}}},"/api/coinbase-premium/history":{"get":{"operationId":"coinbase_premium_history","summary":"Hourly Coinbase USD premium vs Binance spot for BTC or ETH: percent and USD gap.","description":"Shaped like /api/series. 400: bad base or range. Hourly through 90d, 4-hour averages through 366d, then daily. Long ranges up to 10y use adaptively coarser, multi-day buckets to return at most 2,200 points over the full range. step is the actual bucket width in ms. Shared key/IP request budget and X-RateLimit-* headers, as /api/series; 401 for invalid keys, 429 with Retry-After when exhausted. A key raises the request budget only; data ranges and point limits are unchanged.","parameters":[{"name":"base","in":"query","required":true,"description":"BTC or ETH.","schema":{"type":"string","enum":["BTC","ETH"]}},{"name":"range","in":"query","required":false,"description":"e.g. 90d, 1y.","schema":{"type":"string","default":"30d"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"example":{"fields":["premium","gap"],"t":[1790668800000],"premium":[0.031],"gap":[21.5]},"schema":{"type":"object","properties":{"fields":{"type":"array","items":{"type":"string"}},"t":{"type":"array","items":{"type":"integer"}},"premium":{"type":"array","items":{"type":"number"}},"gap":{"type":"array","items":{"type":"number"}},"metric":{},"base":{},"step":{},"unit":{},"source":{},"db":{},"gaps":{},"start":{},"end":{}},"required":["fields","t","premium","gap"]}}},"headers":{"X-RateLimit-Limit":{"description":"Requests allowed per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"description":"Requests allowed per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"}}}},"401":{"description":"Invalid or revoked API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"description":"Requests allowed per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Requests allowed per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"}}}}}}},"/api/heatmap-validation":{"get":{"operationId":"heatmap_validation","summary":"Liquidation heatmap 30-day accuracy: Spearman rho vs a baseline, hit rates, per-coin days.","description":"Updated daily. Horizon keys are strings (\"4\", \"24\"). Methodology. as_of: epoch ms. 400: bad window; 503 + Retry-After when unavailable (no empty 200).","parameters":[],"responses":{"200":{"description":"Successful response","content":{"application/json":{"example":{"horizons_h":[4,24],"sample":{"4":690,"24":610},"overall":{"24":{"rho_model":0.31,"rho_base":0.22,"hit_model":0.42,"verdict":"beats baseline"}},"coins":{"BTC":{"24":{"rho_model":0.35,"daily":[{"day":"2026-09-27","rho_model":0.4}]}}}},"schema":{"type":"object","properties":{"horizons_h":{"type":"array","items":{"type":"integer"}},"sample":{"type":"object","properties":{"4":{"type":"integer"},"24":{"type":"integer"}},"required":["4","24"]},"overall":{"type":"object","properties":{"24":{"type":"object","properties":{"rho_model":{"type":"number"},"rho_base":{"type":"number"},"hit_model":{"type":"number"},"verdict":{"type":"string"}},"required":["rho_model","rho_base","hit_model","verdict"]}},"required":["24"]},"coins":{"type":"object","properties":{"BTC":{"type":"object","properties":{"24":{"type":"object","properties":{"rho_model":{"type":"number"},"daily":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string"},"rho_model":{"type":"number"}},"required":["day","rho_model"]}}},"required":["rho_model","daily"]}},"required":["24"]}},"required":["BTC"]},"as_of":{},"window":{},"from":{},"to":{},"venue":{},"version":{},"min_scored":{},"n_coins":{},"config":{}},"required":["horizons_h","sample","overall","coins"]}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Data temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}}}}}},"/api/options/{coin}":{"get":{"operationId":"options","summary":"BTC/ETH options per expiry: max pain, OI and 24h volume (coins), put/call ratios, USD notional. Every 5 minutes.","description":"Coverage: listed venues only. as_of: oldest included snapshot (epoch ms); stale: over 20 minutes old. 404: unknown coin; 503 + Retry-After: unavailable. Max pain is not a forecast.","parameters":[{"name":"coin","in":"path","required":true,"description":"btc or eth.","schema":{"type":"string","enum":["btc","eth"]}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"example":{"venues":["bybit"],"expiries":[{"expiry":"2026-10-02","expiry_ms":1790928000000,"kind":"weekly","max_pain":77000.0,"max_pain_by_venue":{"bybit":77000.0},"call_oi":910.2,"put_oi":640.8,"pcr_oi":0.704,"pcr_vol":0.798,"notional_usd":121300000.0}]},"schema":{"type":"object","properties":{"venues":{"type":"array","items":{"type":"string"}},"expiries":{"type":"array","items":{"type":"object","properties":{"expiry":{"type":"string"},"expiry_ms":{"type":"integer"},"kind":{"type":"string"},"max_pain":{"type":"number"},"max_pain_by_venue":{"type":"object","properties":{"bybit":{"type":"number"}},"required":["bybit"]},"call_oi":{"type":"number"},"put_oi":{"type":"number"},"pcr_oi":{"type":"number"},"pcr_vol":{"type":"number"},"notional_usd":{"type":"number"}},"required":["expiry","expiry_ms","kind","max_pain","max_pain_by_venue","call_oi","put_oi","pcr_oi","pcr_vol","notional_usd"]}},"coin":{},"as_of":{},"stale":{},"spot":{},"totals":{},"partial_expiries":{}},"required":["venues","expiries"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Data temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}}}}}},"/api/options/{coin}/iv":{"get":{"operationId":"options_iv","summary":"IV per expiry and at 30 days.","description":"IVs: decimals. 404: unknown coin; 503 + Retry-After: unavailable.","parameters":[{"name":"coin","in":"path","required":true,"description":"e.g. btc.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"example":{"venues":["bybit"],"cm_30d":{"atm_iv":0.36,"call25_iv":0.35,"put25_iv":0.39,"rr25":-0.04,"fly25":0.01},"expiries":[{"expiry":"2026-10-02","expiry_ms":1790928000000,"days":4.0,"forward":78210.5,"atm_iv":0.36,"call25_iv":0.35,"put25_iv":0.39,"rr25":-0.04,"fly25":0.01,"atm_iv_by_venue":{"bybit":0.36}}]},"schema":{"type":"object","properties":{"venues":{"type":"array","items":{"type":"string"}},"cm_30d":{"type":"object","properties":{"atm_iv":{"type":"number"},"call25_iv":{"type":"number"},"put25_iv":{"type":"number"},"rr25":{"type":"number"},"fly25":{"type":"number"}},"required":["atm_iv","call25_iv","put25_iv","rr25","fly25"]},"expiries":{"type":"array","items":{"type":"object","properties":{"expiry":{"type":"string"},"expiry_ms":{"type":"integer"},"days":{"type":"number"},"forward":{"type":"number"},"atm_iv":{"type":"number"},"call25_iv":{"type":"number"},"put25_iv":{"type":"number"},"rr25":{"type":"number"},"fly25":{"type":"number"},"atm_iv_by_venue":{"type":"object","properties":{"bybit":{"type":"number"}},"required":["bybit"]}},"required":["expiry","expiry_ms","days","forward","atm_iv","call25_iv","put25_iv","rr25","fly25","atm_iv_by_venue"]}},"coin":{},"as_of":{},"stale":{},"excluded":{}},"required":["venues","cm_30d","expiries"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Data temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}}}}}},"/api/hyperliquid/liquidations":{"get":{"operationId":"hl_liquidations","summary":"Probable Hyperliquid liquidations (tracked wallets): totals, per coin, largest, hourly.","description":"400: bad window. Inferred, tracked wallets only. Page.","parameters":[{"name":"window","in":"query","required":false,"description":"24h or 7d.","schema":{"type":"string","default":"24h","enum":["24h","7d"]}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"example":{"totals":{"long_usd":1200000.0,"short_usd":800000.0,"n_long":14,"n_short":9},"coins":[{"coin":"BTC","long_usd":700000.0,"short_usd":300000.0,"n":8}],"hourly":{"t":[1759003200000],"long":[400000.0],"short":[0.0]}},"schema":{"type":"object","properties":{"totals":{"type":"object","properties":{"long_usd":{"type":"number"},"short_usd":{"type":"number"},"n_long":{"type":"integer"},"n_short":{"type":"integer"}},"required":["long_usd","short_usd","n_long","n_short"]},"coins":{"type":"array","items":{"type":"object","properties":{"coin":{"type":"string"},"long_usd":{"type":"number"},"short_usd":{"type":"number"},"n":{"type":"integer"}},"required":["coin","long_usd","short_usd","n"]}},"hourly":{"type":"object","properties":{"t":{"type":"array","items":{"type":"integer"}},"long":{"type":"array","items":{"type":"number"}},"short":{"type":"array","items":{"type":"number"}}},"required":["t","long","short"]},"window":{},"coverage":{},"db":{},"error":{},"from":{},"to":{},"note":{},"largest":{},"overflow":{},"retained_count":{},"oldest_retained_ms":{},"complete":{},"partial":{},"sample_note":{}},"required":["totals","coins","hourly"]}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/funding-persistence":{"get":{"operationId":"funding_persistence","summary":"Settled funding sign streaks and reversals, top 50 perps by OI.","description":"Settled payments only, never quoted funding or inferred gaps. Rate per interval_h; hours; epoch ms; null if unknown. Empty universe: 200, data_state empty. 400: bad selector; 503 + Retry-After: engine or database down. Keys/429 as /api/series; TTL 60s.","parameters":[{"name":"window","in":"query","required":false,"description":"7d or 30d.","schema":{"type":"string","default":"7d","enum":["7d","30d"]}},{"name":"sign","in":"query","required":false,"description":"all, positive, negative or reversal.","schema":{"type":"string","default":"all","enum":["all","positive","negative","reversal"]}},{"name":"sort","in":"query","required":false,"description":"desc or asc (current streak).","schema":{"type":"string","default":"desc","enum":["desc","asc"]}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"example":{"window":"7d","rows":[{"venue":"binance","symbol":"BTCUSDT","latest_rate":0.0001,"interval_h":8,"stale":false,"sign":1,"current_streak_h":96.0,"last_reversal_ms":1791763200000}]},"schema":{"type":"object","properties":{"window":{"type":"string"},"rows":{"type":"array","items":{"type":"object","properties":{"venue":{"type":"string"},"symbol":{"type":"string"},"latest_rate":{"type":"number"},"interval_h":{"type":"integer"},"stale":{"type":"boolean"},"sign":{"type":"integer"},"current_streak_h":{"type":"number"},"last_reversal_ms":{"type":"integer"}},"required":["venue","symbol","latest_rate","interval_h","stale","sign","current_streak_h","last_reversal_ms"]}},"schema_version":{},"data_state":{},"eligible_count":{},"evaluated_at_ms":{},"sign":{},"sort":{},"rate_unit":{},"duration_unit":{}},"required":["window","rows"]}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}}},"503":{"description":"Data temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}}}}}},"/api/market-movers":{"get":{"operationId":"market_movers","summary":"24h market movers: price, OI, long/short, funding and liquidations; top 5 per list.","description":"as_of/sections.*.as_of: epoch ms; each section contains up/down lists (down null when unavailable and always null for liquidations), unavailable reason or null, nullable note, unit; rows contain base, venue, symbol, value, coin_url (nullable). Price/OI/long-short values are fractions; funding is fraction per 8h; liquidations are USD (venue/symbol empty for coin aggregates). TTL 5s. Shared key/IP request budget and X-RateLimit-* headers, as /api/series; 401 for invalid keys, 429 with Retry-After when exhausted. A key raises the request budget only; data ranges and point limits are unchanged. 200 including unavailable sections.","parameters":[],"responses":{"200":{"description":"Successful response","content":{"application/json":{"example":{"as_of":1700000000000,"sections":{"price":{"as_of":1700000000000,"unit":"fraction","unavailable":null,"note":"Representative recorded market data.","up":[{"base":"BTC","venue":"binance","symbol":"BTCUSDT","value":0.02,"coin_url":"/coin/BTC"}],"down":[{"base":"ETH","venue":"bybit","symbol":"ETHUSDT","value":-0.001,"coin_url":null}]},"oi":{"as_of":1700000000000,"unit":"fraction","unavailable":null,"note":"Representative recorded market data.","up":[{"base":"BTC","venue":"binance","symbol":"BTCUSDT","value":0.05,"coin_url":"/coin/BTC"}],"down":[{"base":"ETH","venue":"bybit","symbol":"ETHUSDT","value":-0.001,"coin_url":null}]},"long_short":{"as_of":null,"unit":"fraction","unavailable":"Long/short ratios are unavailable right now.","note":null,"up":[],"down":null},"funding":{"as_of":1700000000000,"unit":"fraction_per_8h","unavailable":null,"note":"Representative recorded market data.","up":[{"base":"BTC","venue":"binance","symbol":"BTCUSDT","value":0.0001,"coin_url":"/coin/BTC"}],"down":[{"base":"ETH","venue":"bybit","symbol":"ETHUSDT","value":-0.001,"coin_url":null}]},"liquidations":{"as_of":1700000000000,"unit":"usd","unavailable":null,"note":"Representative recorded market data.","up":[{"base":"BTC","venue":"","symbol":"","value":3000000.0,"coin_url":"/coin/BTC"}],"down":null}}},"schema":{"type":"object","properties":{"as_of":{"type":"integer","format":"int64","description":"epoch ms"},"sections":{"type":"object","required":["price","oi","long_short","funding","liquidations"],"properties":{"price":{"type":"object","required":["as_of","unit","unavailable","note","up","down"],"properties":{"as_of":{"type":"integer","format":"int64","description":"epoch ms"},"unit":{"type":"string","enum":["fraction"]},"unavailable":{"type":["string","null"]},"note":{"type":["string","null"]},"up":{"type":"array","maxItems":5,"items":{"type":"object","required":["base","venue","symbol","value","coin_url"],"properties":{"base":{"type":"string"},"venue":{"type":"string"},"symbol":{"type":"string"},"value":{"type":"number"},"coin_url":{"type":["string","null"]}}}},"down":{"type":["array","null"],"maxItems":5,"items":{"type":"object","required":["base","venue","symbol","value","coin_url"],"properties":{"base":{"type":"string"},"venue":{"type":"string"},"symbol":{"type":"string"},"value":{"type":"number"},"coin_url":{"type":["string","null"]}}}}}},"oi":{"type":"object","required":["as_of","unit","unavailable","note","up","down"],"properties":{"as_of":{"type":"integer","format":"int64","description":"epoch ms"},"unit":{"type":"string","enum":["fraction"]},"unavailable":{"type":["string","null"]},"note":{"type":["string","null"]},"up":{"type":"array","maxItems":5,"items":{"type":"object","required":["base","venue","symbol","value","coin_url"],"properties":{"base":{"type":"string"},"venue":{"type":"string"},"symbol":{"type":"string"},"value":{"type":"number"},"coin_url":{"type":["string","null"]}}}},"down":{"type":["array","null"],"maxItems":5,"items":{"type":"object","required":["base","venue","symbol","value","coin_url"],"properties":{"base":{"type":"string"},"venue":{"type":"string"},"symbol":{"type":"string"},"value":{"type":"number"},"coin_url":{"type":["string","null"]}}}}}},"long_short":{"type":"object","required":["as_of","unit","unavailable","note","up","down"],"properties":{"as_of":{"type":["integer","null"],"format":"int64","description":"epoch ms"},"unit":{"type":"string","enum":["fraction"]},"unavailable":{"type":["string","null"]},"note":{"type":["string","null"]},"up":{"type":"array","maxItems":5,"items":{"type":"object","required":["base","venue","symbol","value","coin_url"],"properties":{"base":{"type":"string"},"venue":{"type":"string"},"symbol":{"type":"string"},"value":{"type":"number"},"coin_url":{"type":["string","null"]}}}},"down":{"type":["array","null"],"maxItems":5,"items":{"type":"object","required":["base","venue","symbol","value","coin_url"],"properties":{"base":{"type":"string"},"venue":{"type":"string"},"symbol":{"type":"string"},"value":{"type":"number"},"coin_url":{"type":["string","null"]}}}}}},"funding":{"type":"object","required":["as_of","unit","unavailable","note","up","down"],"properties":{"as_of":{"type":"integer","format":"int64","description":"epoch ms"},"unit":{"type":"string","enum":["fraction_per_8h"]},"unavailable":{"type":["string","null"]},"note":{"type":["string","null"]},"up":{"type":"array","maxItems":5,"items":{"type":"object","required":["base","venue","symbol","value","coin_url"],"properties":{"base":{"type":"string"},"venue":{"type":"string"},"symbol":{"type":"string"},"value":{"type":"number"},"coin_url":{"type":["string","null"]}}}},"down":{"type":["array","null"],"maxItems":5,"items":{"type":"object","required":["base","venue","symbol","value","coin_url"],"properties":{"base":{"type":"string"},"venue":{"type":"string"},"symbol":{"type":"string"},"value":{"type":"number"},"coin_url":{"type":["string","null"]}}}}}},"liquidations":{"type":"object","required":["as_of","unit","unavailable","note","up","down"],"properties":{"as_of":{"type":["integer","null"],"format":"int64","description":"epoch ms"},"unit":{"type":"string","enum":["usd"]},"unavailable":{"type":["string","null"]},"note":{"type":["string","null"]},"up":{"type":"array","maxItems":5,"items":{"type":"object","required":["base","venue","symbol","value","coin_url"],"properties":{"base":{"type":"string"},"venue":{"type":"string"},"symbol":{"type":"string"},"value":{"type":"number"},"coin_url":{"type":["string","null"]}}}},"down":{"type":"null"}}}}}},"required":["as_of","sections"]}}},"headers":{"X-RateLimit-Limit":{"description":"Requests allowed per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"}}}},"401":{"description":"Invalid or revoked API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"description":"Requests allowed per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Requests allowed per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"}}}}}}},"/api/state":{"get":{"operationId":"state","summary":"Site live feed (alerts, feed status); unversioned.","description":"server_ts: epoch ms; uptime: seconds. Internal feed of the scanner page: fields can change without notice and carry no version. Always 200.","parameters":[{"name":"rev","in":"query","required":false,"description":"Only alerts after this revision.","schema":{"type":"string","default":"0"}},{"name":"venue","in":"query","required":false,"description":"binance, bybit or hyperliquid; anything else returns all venues.","schema":{"type":"string","enum":["binance","bybit","hyperliquid"]}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"rev":{},"server_ts":{},"alerts":{},"top":{},"status":{},"uptime":{},"params":{}}}}}}}}},"/api/liquidations/daily":{"get":{"operationId":"liquidations_daily","summary":"Daily long/short liquidation totals.","description":"Shaped like /api/series: t/start/end: UTC day start, epoch ms; step: ms (1 day); long/short: USD. 400: bad range, format or venue. Database down: 200 with error.","parameters":[{"name":"range","in":"query","required":false,"description":"e.g. 7d, 30d, 1y.","schema":{"type":"string","default":"2y"}},{"name":"venue","in":"query","required":false,"description":"One venue, e.g. binance; default all.","schema":{"type":"string"}},{"name":"format","in":"query","required":false,"description":"json, csv.","schema":{"type":"string","default":"json","enum":["json","csv"]}}],"responses":{"200":{"description":"Successful response. CSV starts with a # source comment line, followed by time_utc and unix_ms columns and the data fields.","content":{"application/json":{"schema":{"type":"object","properties":{"metric":{},"step":{"type":"integer","description":"ms (1 day)"},"start":{"type":"integer","format":"int64","description":"UTC day start, epoch ms"},"end":{"type":"integer","format":"int64","description":"UTC day start, epoch ms"},"source":{},"fields":{},"venue":{},"db":{"type":"boolean"},"t":{"type":"array","items":{"type":"integer","format":"int64"},"description":"UTC day start, epoch ms"},"long":{"type":"array","items":{"type":["number","null"]},"description":"USD"},"short":{"type":"array","items":{"type":["number","null"]},"description":"USD"},"gaps":{"type":["array","null"],"items":{"type":"array","items":{"type":"integer","format":"int64"}}}}}},"text/csv":{"schema":{"type":"string"}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/liquidations/window":{"get":{"operationId":"liquidations_window","summary":"Rolling-window liquidations by venue and coin.","description":"since/until/as_of/buckets.t: epoch ms; buckets.step: ms; total/long/short: USD. CORS: *. 400: bad window or coin; 404: unknown coin; 503 + Retry-After: unavailable.","parameters":[{"name":"window","in":"query","required":false,"description":"1h, 4h, 12h, 24h.","schema":{"type":"string","default":"24h","enum":["1h","4h","12h","24h"]}},{"name":"coin","in":"query","required":false,"description":"Coin, e.g. BTC; default all.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"window":{},"coin":{},"since":{},"until":{},"as_of":{},"source":{},"partial":{},"total":{},"long":{},"short":{},"count":{},"largest":{},"venues":{},"coins":{},"buckets":{},"page":{},"daily_card":{}}}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Data temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}}}}}},"/api/liquidations/heatmap":{"get":{"operationId":"liquidations_heatmap","summary":"Liquidations per coin and time bucket.","description":"t/start/end/as_of/tracked_from: epoch ms; step: ms; values: one row per coin, oldest bucket first, USD or count. 400: bad range, side, measure or format.","parameters":[{"name":"range","in":"query","required":false,"description":"7d, 30d, 1y.","schema":{"type":"string","default":"7d","enum":["7d","30d","1y"]}},{"name":"side","in":"query","required":false,"description":"all, long, short.","schema":{"type":"string","default":"all","enum":["all","long","short"]}},{"name":"measure","in":"query","required":false,"description":"usd, count.","schema":{"type":"string","default":"usd","enum":["usd","count"]}},{"name":"format","in":"query","required":false,"description":"json, csv.","schema":{"type":"string","default":"json","enum":["json","csv"]}}],"responses":{"200":{"description":"Successful response. CSV starts with a # source comment line, followed by time_utc and unix_ms columns and the data fields.","content":{"application/json":{"schema":{"type":"object","properties":{"range":{},"side":{},"measure":{},"step":{"type":"integer","description":"ms"},"start":{"type":"integer","format":"int64","description":"epoch ms"},"end":{"type":"integer","format":"int64","description":"epoch ms"},"n":{},"t":{"type":"array","items":{"type":"integer","format":"int64"},"description":"epoch ms"},"coins":{},"total_usd":{},"total_count":{},"values":{"type":"array","items":{"type":"array","items":{"type":["number","null"]}},"description":"one row per coin, oldest bucket first, USD or count"},"max":{},"as_of":{"type":"integer","format":"int64","description":"epoch ms"},"db":{"type":"boolean"},"tracked_from":{"type":["integer","null"],"format":"int64","description":"epoch ms"}}}},"text/csv":{"schema":{"type":"string"}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/funding/oi-weighted":{"get":{"operationId":"funding_oi_weighted","summary":"Market OI-weighted and mean funding index.","description":"oiw/avg: fraction per 8h; t/start/end: epoch ms; step: ms (hourly up to 30d, daily beyond). 400: bad range. Database down: 200 with error.","parameters":[{"name":"range","in":"query","required":false,"description":"e.g. 7d, 30d, 1y; capped at 365d.","schema":{"type":"string","default":"30d"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"metric":{},"step":{"type":"integer","description":"ms (hourly up to 30d, daily beyond)"},"source":{},"fields":{},"db":{"type":"boolean"},"t":{"type":"array","items":{"type":"integer","format":"int64"},"description":"epoch ms"},"oiw":{"type":"array","items":{"type":["number","null"]},"description":"fraction per 8h"},"avg":{"type":"array","items":{"type":["number","null"]},"description":"fraction per 8h"},"gaps":{"type":["array","null"],"items":{"type":"array","items":{"type":"integer","format":"int64"}}},"start":{"type":"integer","format":"int64","description":"epoch ms"},"end":{"type":"integer","format":"int64","description":"epoch ms"}}}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/funding-changes":{"get":{"operationId":"funding_changes","summary":"Matched recorded funding quote changes.","description":"start_fraction/end_fraction: quoted fractions per 8h, not settlements; change_pp: pp (percentage points); oi_usd: USD; *_ms: epoch ms. Up/down capped at 25 each; flat/unavailable at 50. TTL 120s. X-RateLimit-* headers; 401 invalid key; 429 exhausted budget with Retry-After. 400: bad or repeated window; 503 + Retry-After: 30 when unavailable. Metered as /api/series.","parameters":[{"name":"window","in":"query","required":false,"description":"1h, 4h or 24h.","schema":{"type":"string","default":"1h","enum":["1h","4h","24h"]}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"schema_version":{},"evaluated_at_ms":{},"start_ms":{},"window":{},"eligible":{},"matched":{},"up":{},"down":{},"flat":{},"unavailable":{}}}}},"headers":{"X-RateLimit-Limit":{"description":"Requests allowed per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"description":"Requests allowed per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"}}}},"401":{"description":"Invalid or revoked API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"description":"Requests allowed per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Requests allowed per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"}}}},"503":{"description":"Data temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Requests allowed per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"}}}}}}},"/api/funding-averages":{"get":{"operationId":"funding_averages","summary":"Each coin's 1d, 7d and 30d mean funding.","description":"coins: {coin: [1d, 7d, 30d averages (fraction per 8h, null if none), then each window's recorded hours when partial, else null]}; hours: window lengths. Always 200; empty coins while loading.","parameters":[],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"windows":{},"hours":{},"coins":{}}}}}}}}},"/api/exchanges/market-share":{"get":{"operationId":"exchange_market_share","summary":"Exchanges' daily share of perp OI and volume.","description":"t/first_data/markers.t/as_of: epoch ms (t: UTC day start); *_usd: USD; *_share: 0..1, null without data. 400: bad base, range or format.","parameters":[{"name":"base","in":"query","required":false,"description":"all, BTC, ETH.","schema":{"type":"string","default":"all","enum":["all","BTC","ETH"]}},{"name":"range","in":"query","required":false,"description":"30d, 90d, all.","schema":{"type":"string","default":"90d","enum":["30d","90d","all"]}},{"name":"format","in":"query","required":false,"description":"json, csv.","schema":{"type":"string","default":"json","enum":["json","csv"]}}],"responses":{"200":{"description":"Successful response. CSV starts with a # source comment line, followed by time_utc and unix_ms columns and the data fields.","content":{"application/json":{"schema":{"type":"object","properties":{"base":{},"range":{},"resolution":{},"source":{},"t":{"type":"array","items":{"type":"integer","format":"int64"},"description":"epoch ms (t: UTC day start)"},"venues":{},"oi_usd":{},"vol_usd":{},"oi_share":{},"vol_share":{},"markers":{},"as_of":{"type":"integer","format":"int64","description":"epoch ms (t: UTC day start)"}}}},"text/csv":{"schema":{"type":"string"}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/open-interest/total":{"get":{"operationId":"open_interest_total","summary":"Daily total perp OI, all coins.","description":"Shaped like /api/series: t/as_of: epoch ms (t: UTC day start); step: ms; v: USD, MEXC excluded; gaps: [start, end) epoch ms of days without data. 400: bad range.","parameters":[{"name":"range","in":"query","required":false,"description":"30d, 90d, all.","schema":{"type":"string","default":"90d","enum":["30d","90d","all"]}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"metric":{},"base":{},"range":{},"resolution":{},"step":{"type":"integer","description":"ms"},"source":{},"db":{"type":"boolean"},"t":{"type":"array","items":{"type":"integer","format":"int64"},"description":"epoch ms (t: UTC day start)"},"fields":{},"v":{"type":"array","items":{"type":"number"},"description":"USD, MEXC excluded"},"gaps":{"type":["array","null"],"items":{"type":"array","items":{"type":"integer","format":"int64"}},"description":"[start, end) epoch ms of days without data"},"as_of":{"type":"integer","format":"int64","description":"epoch ms (t: UTC day start)"}}}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/open-interest/altcoins":{"get":{"operationId":"open_interest_altcoins","summary":"Daily altcoin perp OI (excluding BTC and ETH) and BTC share of total OI.","description":"Shaped like /api/series: t/as_of: epoch ms (t: UTC day start); step: ms; v: USD; btc_share: BTC OI / total OI (0..1, null for zero total). MEXC excluded. Only days recorded for all coins, BTC and ETH are included; gaps: [start, end) epoch ms of missing days. 2y aliases all. 400: bad range.","parameters":[{"name":"range","in":"query","required":false,"description":"30d, 90d, all.","schema":{"type":"string","default":"90d","enum":["30d","90d","all"]}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"metric":{},"base":{},"range":{},"resolution":{},"step":{"type":"integer","description":"ms"},"source":{},"db":{"type":"boolean"},"t":{"type":"array","items":{"type":"integer","format":"int64"},"description":"epoch ms (t: UTC day start)"},"fields":{},"v":{"type":"array","items":{"type":"number"},"description":"USD"},"btc_share":{"type":"array","items":{"type":["number","null"]},"description":"BTC OI / total OI (0..1, null for zero total). MEXC excluded. Only days recorded for all coins, BTC and ETH are included"},"gaps":{"type":["array","null"],"items":{"type":"array","items":{"type":"integer","format":"int64"}},"description":"[start, end) epoch ms of missing days. 2y aliases all"},"as_of":{"type":"integer","format":"int64","description":"epoch ms (t: UTC day start)"}}}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/perp-volume/total":{"get":{"operationId":"perp_volume_total","summary":"Daily total perp volume, all coins.","description":"Shaped like /api/series: t/as_of: epoch ms (t: UTC day start); step: ms; v: USD, MEXC included; gaps: [start, end) epoch ms of days without data. 400: bad range.","parameters":[{"name":"range","in":"query","required":false,"description":"30d, 90d, all.","schema":{"type":"string","default":"90d","enum":["30d","90d","all"]}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"metric":{},"base":{},"range":{},"resolution":{},"step":{"type":"integer","description":"ms"},"source":{},"db":{"type":"boolean"},"t":{"type":"array","items":{"type":"integer","format":"int64"},"description":"epoch ms (t: UTC day start)"},"fields":{},"v":{"type":"array","items":{"type":"number"},"description":"USD, MEXC included"},"gaps":{"type":["array","null"],"items":{"type":"array","items":{"type":"integer","format":"int64"}},"description":"[start, end) epoch ms of days without data"},"as_of":{"type":"integer","format":"int64","description":"epoch ms (t: UTC day start)"}}}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/hyperliquid/hip3-dexes/volume/history":{"get":{"operationId":"hip3dex_volume_history","summary":"Daily recorded traded volume by HIP-3 dex, last 30 complete UTC days plus today-so-far.","description":"t/start/end/today: epoch ms; v: total USD notional; volume:{dex}: dex USD notional; share[dex] and share:{dex}: fractions of recorded daily total. hours/market_hours/expected_market_hours: per-dex arrays; null means unrecorded. Coverage uses markets observed that day; missing markets or hours can bias shares. Cached 120s. 503 with Retry-After: database unavailable. Empty healthy database: 200 with empty arrays.","parameters":[],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"metric":{},"venue":{},"step":{"type":"integer"},"start":{"type":"integer","format":"int64","description":"epoch ms"},"end":{"type":"integer","format":"int64","description":"epoch ms"},"today":{},"partial":{},"source":{},"basis":{},"coverage":{},"db":{"type":"boolean"},"t":{"type":"array","items":{"type":"integer","format":"int64"},"description":"epoch ms"},"fields":{},"dexes":{},"v":{"type":"array","items":{"type":["number","null"]},"description":"total USD notional"},"share":{},"hours":{},"market_hours":{},"expected_market_hours":{},"gaps":{"type":["array","null"],"items":{"type":"array","items":{"type":"integer","format":"int64"}}}}}}}},"503":{"description":"Data temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}}}}}},"/api/hyperliquid/open-interest/history":{"get":{"operationId":"hyperliquid_oi_history","summary":"Hyperliquid OI history, native and HIP-3.","description":"Shaped like /api/series: v/native/hip3: USD; t/start/end: epoch ms; step: ms. Shared key/IP request budget and X-RateLimit-* headers, as /api/series; 401 for invalid keys, 429 with Retry-After when exhausted. A key raises the request budget only; data ranges and point limits are unchanged. 400: bad range.","parameters":[{"name":"range","in":"query","required":false,"description":"e.g. 7d, 30d, 1y; max 730d.","schema":{"type":"string","default":"30d"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"metric":{},"venue":{},"step":{"type":"integer","description":"ms. Shared key/IP request budget and X-RateLimit-* headers, as /api/series"},"start":{"type":"integer","format":"int64","description":"epoch ms"},"end":{"type":"integer","format":"int64","description":"epoch ms"},"source":{},"fields":{},"t":{"type":"array","items":{"type":"integer","format":"int64"},"description":"epoch ms"},"v":{"type":"array","items":{"type":["number","null"]},"description":"USD"},"native":{"type":"array","items":{"type":["number","null"]},"description":"USD"},"hip3":{"type":"array","items":{"type":["number","null"]},"description":"USD"},"gaps":{"type":["array","null"],"items":{"type":"array","items":{"type":"integer","format":"int64"}}},"db":{"type":"boolean"}}}}},"headers":{"X-RateLimit-Limit":{"description":"Requests allowed per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"description":"Requests allowed per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"}}}},"401":{"description":"Invalid or revoked API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"description":"Requests allowed per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Requests allowed per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"}}}}}}},"/api/hyperliquid/cohorts/{coin}":{"get":{"operationId":"hyperliquid_cohorts","summary":"Hyperliquid cohort net positions.","description":"range and range_s: integer seconds; range_label: e.g. 7d; t: epoch ms; step: ms; one net USD column per cohort in fields (dim=ls: accounts_long and value_long, 0-100, null for a missing hour). 400: bad coin, dim or range; 404: not a native Hyperliquid perp.","parameters":[{"name":"coin","in":"path","required":true,"description":"A native Hyperliquid perp, e.g. BTC, or * for all coins.","schema":{"type":"string"}},{"name":"dim","in":"query","required":false,"description":"size or pnl or ls; ls: share of tracked accounts long (all coins: wallets net long) and of position value long, percent.","schema":{"type":"string","default":"size","enum":["size","pnl","ls"]}},{"name":"range","in":"query","required":false,"description":"e.g. 7d, 30d, 1y; max 730d.","schema":{"type":"string","default":"7d"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"coin":{},"dim":{},"range":{"type":"integer"},"range_s":{"type":"integer","description":"integer seconds"},"range_label":{},"gaps":{"type":["array","null"],"items":{"type":"array","items":{"type":"integer","format":"int64"}}},"t":{"type":"array","items":{"type":"integer","format":"int64"},"description":"epoch ms"},"fields":{},"labels":{},"step":{"type":"integer","description":"ms"}}}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/hyperliquid/whales":{"get":{"operationId":"hyperliquid_whales","summary":"Hyperliquid whale positions and moves.","description":"as_of/checked_at/at: epoch ms; positions: the 100 largest tracked, largest first; liq_distance_pct: percent from the mark, null once crossed; moves: $250K+ changes to $1M+ positions in the last 12h, newest first, at most 50. Refreshed every 5 min; tracked wallets only. 404: unknown coin; 503 + Retry-After: unavailable.","parameters":[{"name":"coin","in":"query","required":false,"description":"e.g. BTC; default all coins.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"example":{"as_of":1792108800000,"coin":"BTC","whale_usd":1000000,"positions":[{"wallet":"0x5b5d51203a0f9079f8aeb098a6523a13f298c060","coin":"BTC","side":"long","size_usd":48250000.0,"entry":108400.0,"mark":112150.0,"upnl":1613000.0,"liq_px":91200.0,"liq_distance_pct":-18.68,"leverage":10,"margin_mode":"cross","checked_at":1792108740000}],"moves":[{"wallet":"0x5b5d51203a0f9079f8aeb098a6523a13f298c060","coin":"BTC","action":"add","side":"long","change_usd":6400000.0,"size_after_usd":48250000.0,"at":1792105200000}],"coverage":{"wallets":412,"positions":1180,"share_of_oi":0.41}},"schema":{"type":"object","properties":{"as_of":{"type":"integer","format":"int64","description":"epoch ms"},"coin":{"type":["string","null"]},"whale_usd":{"type":"integer"},"positions":{"type":"array","maxItems":100,"items":{"type":"object","required":["wallet","coin","side","size_usd","entry","mark","upnl","liq_px","liq_distance_pct","leverage","margin_mode","checked_at"],"properties":{"wallet":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"coin":{"type":"string"},"side":{"type":"string","enum":["long","short"]},"size_usd":{"type":"number"},"entry":{"type":["number","null"],"description":"percent from the mark, null once crossed"},"mark":{"type":["number","null"],"description":"percent from the mark, null once crossed"},"upnl":{"type":["number","null"],"description":"percent from the mark, null once crossed"},"liq_px":{"type":["number","null"],"description":"percent from the mark, null once crossed"},"liq_distance_pct":{"type":["number","null"],"description":"percent from the mark, null once crossed"},"leverage":{"type":["integer","null"]},"margin_mode":{"type":["string","null"],"enum":["cross","isolated",null]},"checked_at":{"type":["integer","null"],"format":"int64","description":"epoch ms"}}},"description":"the 100 largest tracked, largest first"},"moves":{"type":"array","maxItems":50,"items":{"type":"object","required":["wallet","coin","action","side","change_usd","size_after_usd","at"],"properties":{"wallet":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"coin":{"type":"string"},"action":{"type":"string","enum":["open","close","add","cut","flip"]},"side":{"type":"string","enum":["long","short"]},"change_usd":{"type":"number"},"size_after_usd":{"type":"number"},"at":{"type":"integer","format":"int64","description":"epoch ms"}}},"description":"$250K+ changes to $1M+ positions in the last 12h, newest first, at most 50. Refreshed every 5 min"},"coverage":{"type":"object","required":["wallets","positions","share_of_oi"],"properties":{"wallets":{"type":"integer"},"positions":{"type":"integer","description":"the 100 largest tracked, largest first"},"share_of_oi":{"type":["number","null"]}}}},"required":["as_of","coin","whale_usd","positions","moves","coverage"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Data temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}}}}}},"/api/futures-term-structure/history":{"get":{"operationId":"futures_term_structure_history","summary":"Quarterly futures basis history.","description":"front/next: annualized basis, percent; t/start/end/marks.t: epoch ms; step: ms. Shared key/IP request budget and X-RateLimit-* headers, as /api/series; 401 for invalid keys, 429 with Retry-After when exhausted. A key raises the request budget only; data ranges and point limits are unchanged. 400: bad base or range.","parameters":[{"name":"base","in":"query","required":true,"description":"Coin, e.g. BTC.","schema":{"type":"string"}},{"name":"range","in":"query","required":false,"description":"e.g. 7d, 30d, 1y.","schema":{"type":"string","default":"30d"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"metric":{},"base":{},"step":{"type":"integer","description":"ms. Shared key/IP request budget and X-RateLimit-* headers, as /api/series"},"source":{},"unit":{},"fields":{},"db":{"type":"boolean"},"t":{"type":"array","items":{"type":"integer","format":"int64"},"description":"epoch ms"},"front":{"type":"array","items":{"type":["number","null"]},"description":"annualized basis, percent"},"next":{"type":"array","items":{"type":["number","null"]},"description":"annualized basis, percent"},"gaps":{"type":["array","null"],"items":{"type":"array","items":{"type":"integer","format":"int64"}}},"marks":{},"start":{"type":"integer","format":"int64","description":"epoch ms"},"end":{"type":"integer","format":"int64","description":"epoch ms"}}}}},"headers":{"X-RateLimit-Limit":{"description":"Requests allowed per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"description":"Requests allowed per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"}}}},"401":{"description":"Invalid or revoked API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"description":"Requests allowed per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Requests allowed per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"}}}}}}},"/api/coins/compare/{a}-vs-{b}":{"get":{"operationId":"coin_compare","summary":"Two coins' price or OI, rebased to 100. Unknown coins: 404; shared key/IP budget.","description":"a/b: 100 at the first common bucket; t: epoch ms; step: ms (hourly to 30d, 4-hourly for 90d). Shared key/IP request budget and X-RateLimit-* headers, as /api/series; 401 for invalid keys, 429 with Retry-After when exhausted. A key raises the request budget only; data ranges and point limits are unchanged. 400: bad m or range; 404: unknown coin or pair not in canonical order; 503 + Retry-After: coin list loading.","parameters":[{"name":"a","in":"path","required":true,"description":"Coin, e.g. BTC; a and b in the canonical order of /coins/compare.","schema":{"type":"string"}},{"name":"b","in":"path","required":true,"description":"Coin, e.g. ETH.","schema":{"type":"string"}},{"name":"m","in":"query","required":false,"description":"price, oi.","schema":{"type":"string","default":"price","enum":["price","oi"]}},{"name":"range","in":"query","required":false,"description":"7d, 30d, 90d.","schema":{"type":"string","default":"30d","enum":["7d","30d","90d"]}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"metric":{},"fields":{},"t":{"type":"array","items":{"type":"integer","format":"int64"},"description":"epoch ms"},"gaps":{"type":["array","null"],"items":{"type":"array","items":{"type":"integer","format":"int64"}}},"step":{"type":"integer","description":"ms (hourly to 30d, 4-hourly for 90d). Shared key/IP request budget and X-RateLimit-* headers, as /api/series"},"db":{"type":"boolean"},"a":{"type":"array","items":{"type":["number","null"]},"description":"100 at the first common bucket"},"b":{"type":"array","items":{"type":["number","null"]},"description":"100 at the first common bucket"},"base_a":{},"base_b":{},"m":{},"range":{}}}}},"headers":{"X-RateLimit-Limit":{"description":"Requests allowed per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"description":"Requests allowed per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"}}}},"401":{"description":"Invalid or revoked API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"description":"Requests allowed per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"description":"Requests allowed per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Requests allowed per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"}}}},"503":{"description":"Data temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Requests allowed per minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"}}}}}}},"/api/liquidation-levels/{coin}":{"get":{"operationId":"liquidation_levels","summary":"Model estimate (model_version): levels, max pain.","description":"as_of: epoch ms; price, bin_width and levels: USD; model_version: the model that made them. 400: bad range; 404: unknown coin; 503 + Retry-After: still building.","parameters":[{"name":"coin","in":"path","required":true,"description":"Coin, e.g. BTC.","schema":{"type":"string"}},{"name":"range","in":"query","required":false,"description":"12h, 24h, 3d, 7d, 30d.","schema":{"type":"string","default":"24h","enum":["12h","24h","3d","7d","30d"]}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"coin":{},"range":{},"view":{},"estimated":{},"model_version":{},"as_of":{},"price":{},"bin_width":{},"has_data":{},"levels":{},"max_pain":{},"totals":{},"links":{}}}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Data temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}}}}}},"/api/liquidation-heatmap/{coin}":{"get":{"operationId":"liquidation_heatmap","summary":"Model estimate (version): liquidation heatmap.","description":"start/end/as_of/t0: epoch ms; step/dt: ms; y0/price: USD; cells: base64 grid, one byte per cell scaled to cap (USD). 400: bad range or view; 404: unknown coin.","parameters":[{"name":"coin","in":"path","required":true,"description":"Coin, e.g. BTC.","schema":{"type":"string"}},{"name":"range","in":"query","required":false,"description":"12h, 24h, 3d, 7d, 30d.","schema":{"type":"string","default":"24h","enum":["12h","24h","3d","7d","30d"]}},{"name":"view","in":"query","required":false,"description":"all, high.","schema":{"type":"string","default":"all","enum":["all","high"]}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"coin":{},"view":{},"view_label":{},"version":{},"model":{},"prior":{},"start":{"type":"integer","format":"int64","description":"epoch ms"},"end":{"type":"integer","format":"int64","description":"epoch ms"},"step":{"type":"integer","description":"ms"},"as_of":{"type":"integer","format":"int64","description":"epoch ms"},"db":{"type":"boolean"},"error":{},"cols":{},"rows":{},"t0":{"type":["integer","null"],"format":"int64","description":"epoch ms"},"dt":{"type":["integer","null"],"description":"ms"},"y0":{},"ratio":{},"cap":{},"cells":{},"candles":{},"price":{}}}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/liquidity-heatmap/{coin}":{"get":{"operationId":"liquidity_heatmap","summary":"Measured resting order-book depth by price.","description":"t0: epoch ms; dt: ms; y0/px: USD; cells: encoded depth grid scaled to cap. 400: bad range or view; 404: unknown coin; 503 + Retry-After: busy.","parameters":[{"name":"coin","in":"path","required":true,"description":"Coin, e.g. BTC.","schema":{"type":"string"}},{"name":"range","in":"query","required":false,"description":"1h, 4h, 12h, 24h, 7d, 30d, 90d.","schema":{"type":"string","default":"24h","enum":["1h","4h","12h","24h","7d","30d","90d"]}},{"name":"view","in":"query","required":false,"description":"abs, rel.","schema":{"type":"string","default":"abs","enum":["abs","rel"]}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"base":{},"range":{},"view":{},"t0":{"type":"integer","format":"int64","description":"epoch ms"},"dt":{"type":"integer","description":"ms"},"cols":{},"rows":{},"y0":{},"ratio":{},"cells":{},"cap":{},"levels":{},"px":{},"step_bp":{},"n":{},"db":{"type":"boolean"}}}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Data temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}}}}}},"/api/contract-changes":{"get":{"operationId":"contract_changes","summary":"Perp listings, delistings, contract changes (30d).","description":"as_of: ISO 8601 UTC string of request time; as_of_ms/generated_at_ms: epoch ms; event time and delist_time: ISO 8601 UTC. 400: unknown venue.","parameters":[{"name":"venue","in":"query","required":false,"description":"binance, bybit, gate, bitget, kucoin, mexc, hyperliquid, aster.","schema":{"type":"string","enum":["binance","bybit","gate","bitget","kucoin","mexc","hyperliquid","aster"]}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"as_of":{},"as_of_ms":{},"generated_at_ms":{},"available":{},"days":{},"venue":{},"venues":{},"events":{},"more":{},"delistings":{}}}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/coins.json":{"get":{"operationId":"coins_index","summary":"Coin index behind /coins (column-major).","description":"server_ts: epoch ms; vol/oi/liq: whole USD; fund: fraction per 8h; ch/oi1/oi24: fractions; venues and cat: indexes into vn and cn. Always 200.","parameters":[],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"server_ts":{},"v":{},"vn":{},"base":{},"name":{},"vol":{},"oi":{},"fund":{},"px":{},"ch":{},"perp":{},"hip3":{},"venues":{},"oi1":{},"oi24":{},"liq":{},"cn":{},"cat":{}}}}}}}}}},"security":[{},{"ApiKey":[]}],"components":{"securitySchemes":{"ApiKey":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Optional free API key; anonymous requests are supported."}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"},"state":{"type":"string"}}}}}}