Each curl URL is a live example; sample JSON is trimmed and illustrative.
GET /api/open-interest-acceleration
Matched 1h OI acceleration, at most 50 contracts including unavailable rows.
curl 'https://swolecharts.com/api/open-interest-acceleration?min_oi=1000000'
Sample JSON
{"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":[]}*_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.
GET /api/funding-percentiles
Own-history funding percentiles for the top 50 perps by OI.
curl 'https://swolecharts.com/api/funding-percentiles?window=7d'
Sample JSON
{"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"}]}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.
GET /api/coins/overlay
2–5 crypto coins' aggregate price or OI, rebased to 100.
curl 'https://swolecharts.com/api/coins/overlay?c=BTC,ETH,SOL&m=price&range=7d'
Sample JSON
{"bases":["BTC","ETH","SOL"],"t":[1792101600000,1792105200000],"BTC":[100,102],"ETH":[100,112.5],"SOL":[100,99]}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.
GET /api/series/<metric>
History for one metric as compact time/value arrays.
curl 'https://swolecharts.com/api/series/oi?base=BTC&range=7d&step=1h'
Sample JSON
{"end":1759536000000,"fields":["v"],"t":[1758931200000,1758934800000,1758938400000],"v":[16123456789.0,16205000000.0,16090000000.0],"gaps":[]}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.
GET /api/markets
Spot and perpetual markets.
curl 'https://swolecharts.com/api/markets'
Perps only, not lossless: no spots/spot-only coins. table=1. Equal-length columns per group; perps: sum(coins.nperps) rows. Coin i: sum(nperps[:i]):sum(nperps[:i+1]). Pandas: pd.DataFrame(t["perps"]). server_ts/uptime_since: snapshot/start epoch ms, not observations; price_ts: minute-open epoch seconds; null if unknown.
GET /api/coin/<base>
One coin now: market row, recent spikes, long/short history and liquidations.
curl 'https://swolecharts.com/api/coin/BTC'
404 {"error":"unknown coin"}: untracked base.
GET /api/liquidations
Rolling 1h/4h/12h/24h liquidation totals by venue and coin, plus the biggest and latest orders since the process started.
No query parameters.
curl 'https://swolecharts.com/api/liquidations'
Sample JSON
{"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}]}Always every coin. One coin's history: /api/series/liquidations?base=...; its rolling totals: /api/coin/<base>.
GET /api/long-short
Latest Binance and Bybit long/short account and top-trader ratios per coin.
No query parameters.
curl 'https://swolecharts.com/api/long-short'
Sample JSON
{"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}}]}Always every coin, latest reading only. History: /api/series/long-short?base=...&kind=accounts or /api/coin/<base>.
GET /api/order-book-depth
Top 20 Binance/Bybit USDT perps by OI: bid/ask USD within ±0.1/0.5/1/2% of mid, imbalance and $1M market-order cost (bps). Derived figures only.
No query parameters.
curl 'https://swolecharts.com/api/order-book-depth'
Sample JSON
{"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":[]}]}~2-minute rebuilds, 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; If-None-Match: ETag; keep cached data on 304.
GET /api/perp-dex-ranking
Hyperliquid, Aster and Lighter by OI: 24h volume, shares, volume/OI and top 10 markets.
No query parameters.
curl 'https://swolecharts.com/api/perp-dex-ranking'
Sample JSON
{"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}]}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; If-None-Match: ETag; keep cached data on 304.
GET /api/altcoin-season
Share of top 50 altcoins beating BTC over 90 days: altcoin season index, history and coin returns vs BTC.
No query parameters.
curl 'https://swolecharts.com/api/altcoin-season'
Sample JSON
{"history":[[1790467200000,62.0]],"coins":[{"rank":1,"base":"SOL","symbol":"SOLUSDT","return_90d":0.41,"vs_btc":0.3007,"beat_btc":true}]}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; If-None-Match: ETag; keep cached data on 304.
GET /api/derivatives-fear-greed
Daily Derivatives Fear & Greed index (0-100), up to a year, with component scores funding, oi (OI change), ls (long/short) and liq.
No query parameters.
curl 'https://swolecharts.com/api/derivatives-fear-greed'
Sample JSON
{"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}}]}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.
GET /api/spike-stats
Price 5, 15 and 60 minutes after volume spikes: hit rates, quartiles and means by exchange, level, direction and segment.
curl 'https://swolecharts.com/api/spike-stats?window=7d'
Sample JSON
{"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}]}as_of: epoch ms. 400: bad window; 503 + Retry-After when unavailable (no empty 200).
GET /api/spike-stats/<COIN>
The same for one coin, by exchange (HIP-3 separate) and direction, plus its last 20 volume spikes (recent).
curl 'https://swolecharts.com/api/spike-stats/BTC?window=30d'
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).
GET /api/new-listings
Binance and Bybit USDT perps listed in the window, newest first, with change since listing (Binance), OI, volume and funding.
curl 'https://swolecharts.com/api/new-listings?window=30d'
Sample JSON
{"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}]}503 while the first snapshot loads. as_of: epoch ms. 400: bad window; 503 + Retry-After when unavailable (no empty 200).
GET /api/kimchi-premium/history
Hourly Upbit and Bithumb premium vs Binance for one coin, in percent.
curl 'https://swolecharts.com/api/kimchi-premium/history?base=BTC&range=30d'
Sample JSON
{"t":[1790668800000],"upbit":[0.412],"bithumb":[0.455]}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.
GET /api/coinbase-premium/history
Hourly Coinbase USD premium vs Binance spot for BTC or ETH: percent and USD gap.
curl 'https://swolecharts.com/api/coinbase-premium/history?base=BTC&range=30d'
Sample JSON
{"fields":["premium","gap"],"t":[1790668800000],"premium":[0.031],"gap":[21.5]}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.
GET /api/heatmap-validation
Liquidation heatmap 30-day accuracy: Spearman rho vs a baseline, hit rates, per-coin days.
No query parameters.
curl 'https://swolecharts.com/api/heatmap-validation?window=30d'
Sample JSON
{"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}]}}}}Updated daily. Horizon keys are strings ("4", "24"). Methodology. as_of: epoch ms. 400: bad window; 503 + Retry-After when unavailable (no empty 200).
GET /api/options/<coin>
BTC/ETH options per expiry: max pain, OI and 24h volume (coins), put/call ratios, USD notional. Every 5 minutes.
curl 'https://swolecharts.com/api/options/btc'
Sample JSON
{"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}]}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.
GET /api/options/<coin>/iv
IV per expiry and at 30 days.
curl 'https://swolecharts.com/api/options/btc/iv'
Sample JSON
{"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}}]}IVs: decimals. 404: unknown coin; 503 + Retry-After: unavailable.
GET /api/hyperliquid/liquidations
Probable Hyperliquid liquidations (tracked wallets): totals, per coin, largest, hourly.
curl 'https://swolecharts.com/api/hyperliquid/liquidations?window=24h'
Sample JSON
{"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]}}400: bad window. Inferred, tracked wallets only. Page.
GET /api/funding-persistence
Settled funding sign streaks and reversals, top 50 perps by OI.
curl 'https://swolecharts.com/api/funding-persistence?window=7d'
Sample JSON
{"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}]}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.
More endpoints
curl 'https://swolecharts.com/api/hyperliquid/whales?coin=BTC'
Sample JSON
{"as_of":1792108800000,"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}]}