Is there a Hyperliquid open interest history API?
Not a native one. Anyone searching for a hyperliquid open interest history api runs into the same wall: Hyperliquid's metaAndAssetCtxs request returns the current openInterest, markPx, oraclePx, funding and premium for every perp, and its fundingHistory request returns past funding rates with fundingRate, premium and time. Neither has ever carried historical open interest or mark price. There is no request type that does.
So Hyperliquid OI history is, by construction, a sampled series: a process that called the live endpoint on a timer and kept the answers. Hyperliquid runs one itself: its requester-pays S3 bucket holds a one-minute snapshot of every perp's asset context, OI, mark and oracle included, from 2023-05-20, which we serve as the hl_asset_ctxs archive type. The first thing to ask of any provider, ours included, is when the timer started, because nothing before that date can be recovered from anywhere. Ours started on 2026-03-30, with a 5-minute cadence across the full perp universe. A provider that began sampling earlier will have an earlier start; a provider claiming OI from before it existed as a vendor is reading something else.
From that one archive we serve four views at different grains. The rest of this post is those four, with field names and the exact meaning of every null.
Live: /hyperliquid/open-interest
GET /api/v1/hyperliquid/open-interest returns the current open interest for every listed Hyperliquid perp, from a metaAndAssetCtxs snapshot refreshed every 60 seconds. Any key can call it.
curl "https://cryptodataapi.com/api/v1/hyperliquid/open-interest" \
-H "X-API-Key: cdk_live_your_key"
Each entry in assets carries coin, funding_rate, open_interest (base-coin units), open_interest_usd (which is open_interest times mark_price), mark_price, oracle_price, premium (Hyperliquid's own context field, passed through), day_ntl_vlm and prev_day_px. The envelope has total_oi_usd, as_of (ms, when the snapshot was fetched), generated_at (ms, when the response was built) and coverage with universe_total, delisted_excluded and rows: Hyperliquid keeps delisted perps in its universe with zero OI and funding, and they are dropped here, so coverage explains why rows is smaller than the universe. The total_oi field is base-coin units summed across assets, kept only for compatibility; use total_oi_usd.
This is also the route to use for every perp's funding rate in one call, via assets[].funding_rate.
Daily: /derivatives/hyperliquid/history
GET /api/v1/derivatives/hyperliquid/history?symbol=BTC&days=90 (Pro Plus) is the simplest historical read: one row per UTC day, derived from the 5-minute archive. symbol defaults to BTC and days runs from 1 to 180, default 30.
curl "https://cryptodataapi.com/api/v1/derivatives/hyperliquid/history?symbol=BTC&days=90" \
-H "X-API-Key: cdk_live_your_key"
Response shape, with illustrative values:
{
"symbol": "BTC",
"history": [
{ "date": "2026-07-26", "funding_rate_pct": 0.00125, "open_interest": 31842.5,
"open_interest_usd": 2169234512.4, "mark_price": 68120.0 },
...
]
}
funding_rate_pct is the daily funding rate as a percent, open_interest is in coin units, open_interest_usd is the notional and mark_price the mark. Any of them is null on a day the archive holds no sample for that coin, which for a coin listed after 2026-03-30 is every day before its listing. Data starts 2026-03-30 and always will.
5-minute: /backtesting/funding and its open_interest column
The raw samples behind the daily view are GET /api/v1/backtesting/funding (Pro Plus) at its default grain=snapshot_5m. Despite the name, each default row is a 5-minute sample of the live rate plus open interest and mark price: time, symbol, exchange, funding_rate, open_interest, mark_price, premium, oracle_price and oracle_as_of.
curl "https://cryptodataapi.com/api/v1/backtesting/funding?symbol=ETH&exchange=hyperliquid&start=2026-10-01&end=2026-10-02&limit=288" \
-H "X-API-Key: cdk_live_your_key"
Where open_interest is and is not populated:
| Rows | open_interest | Why |
|---|---|---|
| Hyperliquid, default grain, from 2026-03-30 | Populated, coin units | Sampled from the live asset context every 5 minutes |
| Hyperliquid, default grain, before 2026-03-30 | null | Those rows are hourly settled prints seeded from the deep funding archive, which has no OI |
Hyperliquid, grain=hourly | null | One row per settled payment from fundingHistory, which carries no OI or mark |
| Binance, any grain | null | Our Binance funding rows never carried OI; Binance OI history is /derivatives/binance/open-interest |
The response's grain block says kind: "rate_snapshot" and sum_ok: false on these rows. That is a warning about the funding column: Hyperliquid settles hourly, so there are about 12 samples per settlement and summing them overstates carry about twelve times. Open interest is a level, so the same rows are fine to read as an OI series; just do not sum the rate. oracle_price and premium were added on 2026-10-23 and are null before then. Page with cursor; format=csv is supported.
On the candle clock: /backtesting/hl-funding-bars
For a backtest you rarely want OI at 5-minute stamps; you want it on the bars your signal fires on. GET /api/v1/backtesting/hl-funding-bars (Pro Plus) serves one row per closed 1h, 4h or 1d bar per coin, where time is the bar open and equals the timestamp of the matching /hyperliquid/candles bar. The OI fields per bar are oi_open and oi_close (coin units, the first and last 5-minute sample inside the bar), oi_change_pct, mark_close (multiply by it for notional) and n_snapshots, how many samples the bar held. Funding rides along as funding_sum, n_settlements and funding_rate_mean.
curl "https://cryptodataapi.com/api/v1/backtesting/hl-funding-bars?coin=SOL,ETH&interval=4h&start=2026-08-01&end=2026-09-01" \
-H "X-API-Key: cdk_live_your_key"
Every value was observable by the bar's close, so act on it at the next bar's open and the join has no lookahead. The bar containing now is never served. Windows are capped at 93 days per call; page with cursor. Bars begin where the 5-minute samples do, 2026-03-30, and coverage in the response says so per coin.
A minimal OI-versus-price read on 4h bars:
import httpx
API = "https://cryptodataapi.com/api/v1"
H = {"X-API-Key": "cdk_live_your_key"}
bars = httpx.get(f"{API}/backtesting/hl-funding-bars", headers=H, timeout=60,
params={"coin": "SOL", "interval": "4h", "start": "2026-09-01", "end": "2026-10-01"}).json()["data"]
px = httpx.get(f"{API}/hyperliquid/candles", headers=H, timeout=60,
params={"coin": "SOL", "interval": "4h", "start": "2026-09-01", "end": "2026-10-01"}).json()["candles"]
close_by_t = {c["timestamp"]: c["close"] for c in px}
for b in bars:
if b["oi_change_pct"] is None or b["time"] not in close_by_t:
continue
# OI rising while price falls = new shorts being added, not longs closing
if b["oi_change_pct"] > 1.0 and close_by_t[b["time"]] < b["mark_close"]:
print(b["time"], "fresh shorts into weakness", round(b["oi_change_pct"], 2))
Note that the live candle series only reaches back about 5,000 bars, which on 4h is most of the venue's life but on 1h is about seven months; for older bars join to /backtesting/klines?exchange=hyperliquid&interval=4h on t instead.
Four views of the same archive
| Endpoint | Grain | OI fields | Starts | Tier |
|---|---|---|---|---|
/hyperliquid/open-interest | Now, 60s refresh | open_interest, open_interest_usd, mark_price | - | Any key |
/derivatives/hyperliquid/history | Daily, up to 180 days | open_interest, open_interest_usd, mark_price | 2026-03-30 | Pro Plus |
/backtesting/funding | 5 minutes | open_interest, mark_price | 2026-03-30 (Hyperliquid only) | Pro Plus |
/backtesting/hl-funding-bars | 1h, 4h or 1d bars | oi_open, oi_close, oi_change_pct, mark_close | 2026-03-30 | Pro Plus |
Every start date in that table is the same because every row descends from the same sampler. Minute-scale OI moves are not in any of them; those surface live as oi_delta events on /api/v1/stream, with a signed usd, pct, oi_usd and window_s, and the stream's replay buffer is about two hours, not an archive.
When to use this (and when not to)
Use the daily route for a chart, a dashboard, or a regime feature that only needs the trend of positioning over weeks. One call, 180 days, no paging.
Use the bars for anything that is going to be backtested against price, so that OI and the candle share a clock and you can state exactly when each value became known.
Use the 5-minute rows when you need intraday OI shape within a day, or the oracle_price and premium columns that the coarser views do not carry.
Do not look for Hyperliquid OI before 2026-03-30 here, and be sceptical of it anywhere, because the venue has never served it. Do not read open_interest off Binance rows or grain=hourly rows; it is null there by construction, not by outage. And do not sum funding_rate on the 5-minute rows while you are there for OI; mean(funding_rate) x 24 is the daily carry.
The live read is on every tier, including a free key. The three historical views are Pro Plus at $99 a month ($79 annual). Reference at /docs; the funding side of the same archive is covered in the funding-rate post.
Frequently asked questions
Does Hyperliquid's API provide historical open interest?
No. metaAndAssetCtxs returns only the current openInterest and fundingHistory has never carried open interest or mark price. Any Hyperliquid OI history is a series someone sampled from the live endpoint, including Hyperliquid's own one-minute S3 archive (2023-05-20 on), served here as the hl_asset_ctxs archive type.
How far back does per-coin Hyperliquid open interest history go?
To 2026-03-30 on the daily, 5-minute and candle-bar views, when our 5-minute sampling of the full perp universe began. Earlier OI is Hyperliquid's own one-minute snapshots from its S3 archive, back to 2023-05-20, in the hl_asset_ctxs archive type.
Which endpoint gives daily Hyperliquid open interest for one coin?
GET /api/v1/derivatives/hyperliquid/history?symbol=BTC&days=90 returns one row per day with date, funding_rate_pct, open_interest, open_interest_usd and mark_price, up to 180 days. Pro Plus.
Why is open_interest null on some /backtesting/funding rows?
It is null on Binance rows, on grain=hourly settled-payment rows, and on Hyperliquid rows before 2026-03-30 that were seeded from the hourly funding archive. It is populated on Hyperliquid 5-minute snapshot rows from 2026-03-30.



