Swolecharts
Live crypto data · 10 exchanges
Log inSign up

Funding rate, open interest & liquidation API

Free JSON endpoints behind this site's charts: no signup, key optional. Start with BTC history below; endpoint parameters and sample responses follow.

50 endpoints13 series metricsFree, key optionalAs of 02:53 UTC

Quick start

Python, JavaScript and Google Sheets examples

Funding rate API

BTC funding history: v is the OI-weighted 8-hour-equivalent fraction (multiply by 100 for percent).

curl 'https://swolecharts.com/api/series/funding?base=BTC&range=7d&step=1h'

Open interest API

BTC perpetual open interest history: v is USD.

curl 'https://swolecharts.com/api/series/oi?base=BTC&range=7d&step=1h'

For live funding and OI across all coins, use the markets snapshot.

Liquidation data API

BTC liquidation history: long and short arrays contain USD per bucket. Sparse buckets and coverage gaps are not proof of zero activity.

curl 'https://swolecharts.com/api/series/liquidations?base=BTC&range=7d&step=1h'

For rolling totals across all coins: liquidations snapshot (no coin selector). History: t is epoch milliseconds; 7 days, hourly buckets. Add format=csv for CSV.

Endpoints

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.

ParamDefaultDescription
min_oi10000000, 1000000, 10000000 or 100000000 USD.
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.

ParamDefaultDescription
window7d7d or 30d.
venueallall, binance, bybit, hyperliquid, gate, bitget.
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.

ParamDefaultDescription
crequired2–5 distinct crypto bases, comma-separated; max 256 characters. Case/dedup normalized, canonical order. No HIP-3.
mpriceprice or oi.
range30d7d, 30d or 90d; hourly buckets, 4-hourly for 90d.
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.

ParamDefaultDescription
metricrequiredMetric name or alias; see the table below.
basesee selectorCoin, e.g. BTC. Exactly one of base/market; spot-perp-volume allows neither (all coins). Order-book metrics: base only.
marketsee selectorvenue: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.
range1dHow 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.
start—Epoch ms. Needs end unless range is also given.
endnowEpoch ms.
stepautoOne of 1m, 5m, 15m, 1h, 4h, 1d; raised automatically so the response stays under 1500 points (6000 with an API key).
venue—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.
typeperpperp, spot or all (market_id metrics only).
kindaccountsaccounts or top_acct or top_pos or taker_buy (long-short only).
formatjsonjson or csv. CSV: time_utc, unix_ms, a column per field.
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.

ParamDefaultDescription
view—?view=table: perpetual subset; omit for full.
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.

ParamDefaultDescription
baserequiredCoin, e.g. BTC.
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.

ParamDefaultDescription
window30d7d, 30d or all.
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).

ParamDefaultDescription
COINrequirede.g. BTC.
window30d7d, 30d or all.
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.

ParamDefaultDescription
window90d30d or 90d.
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.

ParamDefaultDescription
baserequirede.g. BTC.
range30de.g. 90d, 1y.
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.

ParamDefaultDescription
baserequiredBTC or ETH.
range30de.g. 90d, 1y.
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.

ParamDefaultDescription
coinrequiredbtc or eth.
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.

ParamDefaultDescription
coinrequirede.g. btc.
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.

ParamDefaultDescription
window24h24h or 7d.
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.

ParamDefaultDescription
window7d7d or 30d.
signallall, positive, negative or reversal.
sortdescdesc or asc (current streak).
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

Path (try it)ParamsReturns
/api/hyperliquid/buybacksformatRecorded daily HYPE buybacks.
/api/seasonality/<coin>/volumecoin, years, formatVolume share by UTC hour and session.
/api/watch-stripcMulti-coin price, funding and OI snapshot.
/api/home-majors—BTC and ETH price cards of the home page.
/api/market-movers—24h movers: price, OI, long/short, funding, liquidations; top 5 per list.
/api/staterev, venueSite live feed (alerts, feed status); unversioned.
/api/liquidations/dailyrange, venue, formatDaily long/short liquidation totals.
/api/liquidations/windowwindow, coinRolling-window liquidations by venue and coin.
/api/liquidations/heatmaprange, side, measure, formatLiquidations per coin and time bucket.
/api/funding/oi-weightedrangeMarket OI-weighted and mean funding index.
/api/funding-changeswindowMatched recorded funding quote changes.
/api/funding-averages—Each coin's 1d, 7d and 30d mean funding.
/api/exchanges/market-sharebase, range, formatDaily exchange share of perp OI and volume.
/api/open-interest/totalrangeDaily total perp OI, all coins.
/api/open-interest/altcoinsrangeDaily altcoin perp OI (ex BTC, ETH) and BTC share of total OI.
/api/perp-volume/totalrangeDaily total perp volume, all coins.
/api/hyperliquid/hip3-dexes/volume/history—Daily recorded volume by HIP-3 dex: last 30 complete UTC days plus today.
/api/hyperliquid/open-interest/historyrange, formatHyperliquid OI history, native and HIP-3.
/api/hyperliquid/cohorts/<coin>coin, dim, rangeHyperliquid cohort net positions.
/api/hyperliquid/whalescoinHyperliquid whale positions and moves.
/api/futures-term-structure/historybase, rangeQuarterly futures basis history.
/api/coins/compare/<a>-vs-<b>a, b, m, rangeTwo coins' price or OI, rebased to 100. Unknown coin: 404.
/api/liquidation-levels/<coin>coin, rangeModel estimate (model_version): levels, max pain.
/api/liquidation-heatmap/<coin>coin, range, viewModel estimate (version): liquidation heatmap.
/api/liquidity-heatmap/<coin>coin, range, viewMeasured resting order-book depth by price.
/api/contract-changesvenuePerp listings, delistings, contract changes (30d).
/api/sectors—Seven futures sectors, as /sectors.csv.
/coins.json—Coin index behind /coins (column-major).
/now.txtc, nTop perps by OI, plain text.
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}]}

/api/series metrics

Accepted metric names
MetricAliasesFieldsSelector
basisperp-basis, premium, spot-basisv, annbase (+ optionally venue) or market (perp only); always the perp vs. its spot pair
bid-ask-ratio—v, v2, truncbase (+ optionally venue)
cvdcumulative-volume-deltanet, vbase (+ type=perp|spot|all and optionally venue), or market
fundingfunding-ratevbase (+ type=perp|spot|all and optionally venue), or market
liquidationsliqslong, shortbase (+ type=perp|spot|all and optionally venue), or market
long-shortlong-short-ratiovbase (+ optionally venue) or market (perp only); kind=accounts|top_pos
net-positioningtop-vs-crowd, whale-vs-retailv, top, crowdbase (+ optionally venue) or market (perp only); kind=accounts|top_pos
ob-depth—bid_05, ask_05, bid_1, ask_1, bid_2, ask_2, bid_5, ask_5, truncbase (+ optionally venue)
oiopen-interestvbase (+ type=perp|spot|all and optionally venue), or market
price—vbase (+ type=perp|spot|all and optionally venue), or market
spot-perp-volumespot-vs-perp-volumev, spot, perpbase (+ optionally venue), market (perp only), or neither (all coins)
taker-flownet-flow, taker-buy-sell, taker-net-flowbuy, sell, netbase (+ type=perp|spot|all and optionally venue), or market
volume—vbase (+ type=perp|spot|all and optionally venue), or market

Get a free API key

/api/series/<metric>, /api/coins/overlay, /api/funding-percentiles, /api/open-interest-acceleration, /api/market-movers, /api/funding-persistence, /api/funding-changes, /api/xray/ranking, /api/xray/history, /api/kimchi-premium/history, /api/coinbase-premium/history, /api/futures-term-structure/history, /api/hyperliquid/open-interest/history, /api/hyperliquid/buybacks, /api/seasonality/<coin>/volume, /api/coins/compare/<a>-vs-<b> share the key/IP budget (X-RateLimit-* headers); X-Ray requires public routes. Other endpoints are unmetered.

Optional. On /api/series a key raises 30 to 120 requests/min, 1500 to 6000 points and the range to 10y. Send it as an X-API-Key header (or ?api_key=, never cached). Create a key

AI agents: the same data is available through a free read-only MCP server. Page-level CSV downloads are listed in llms.txt.

Terms

  • Machine-readable contract: OpenAPI 3.1 JSON.
  • Free public endpoints; key optional. CORS enabled; browser-side keys are public.
  • Published data/charts must link to swolecharts.com or the source page.
  • Cache responses using Cache-Control.
  • No SLA, uptime or support guarantee; shape and availability may change.
  • No resale or raw-feed repackaging of derived aggregates.

API FAQ

Do I need an API key?

No. A free key raises the shared rate limit and /api/series history and point limits.

Can I resell this data?

No. Use these derived aggregates with attribution; do not redistribute or resell as a raw feed.

Is there a rate limit?

Per-minute limits: 30 per client network, 120 per key, 300 for same-origin keyless charts; then 429 with Retry-After. X-RateLimit-* headers report usage.

Why did /api/series/<metric> return an empty array?

History may predate tracking (see "gaps"). If "error": "unavailable", retry the database read.