Hyperliquid OHLCV REST API
Query Hyperliquid OHLCV candles over HTTP with one candle per request using your Dwellir API key.
Use the REST endpoint when you want a simple HTTP lookup for one specific candle.
Endpoint
GET https://api-hyperliquid-index.n.dwellir.com/YOUR_API_KEY/v1/candlesHistorical coverage start
REST candle lookups are intended to cover history back to 2025-07-27T08:00:00Z, which is the first available node_fills_by_block
archive hour.
Query Parameters
| Parameter | Required | Description |
|---|---|---|
market | yes | Hyperliquid market symbol — see market types for the three formats (perp, spot, HIP-3) |
interval | yes | Candle interval, one of 1s, 1m, 5m |
time | yes | Candle bucket-open timestamp in ISO-8601 UTC. This identifies the exact candle you want, for example 2026-03-30T23:00:00Z for the 23:00 1m candle. To retrieve multiple candles, iterate over the bucket-open timestamps you need and request each one separately. |
Examples
Native perp
curl "https://api-hyperliquid-index.n.dwellir.com/YOUR_API_KEY/v1/candles?market=BTC&interval=1m&time=2026-03-30T23:00:00Z"Spot
curl "https://api-hyperliquid-index.n.dwellir.com/YOUR_API_KEY/v1/candles?market=@142&interval=1m&time=2026-03-30T23:00:00Z"HIP-3 perpDex
curl "https://api-hyperliquid-index.n.dwellir.com/YOUR_API_KEY/v1/candles?market=hyna:ETH&interval=1m&time=2026-03-30T23:00:00Z"Response (same shape for all market types):
{
"market": "BTC",
"interval": "1m",
"bucket_start": "2026-03-30T23:00:00Z",
"open": "66745",
"high": "66746",
"low": "66687",
"close": "66687",
"volume": "4.78586",
"trades_count": 256,
"vwap": "66733.634306059987321311"
}Discovering Markets
Use the Info Endpoint to find valid market values before querying candles.
Native perp symbols
Call meta — each entry's name in the universe array is the symbol you need.
curl -X POST 'https://api-hyperliquid-mainnet-info.n.dwellir.com/YOUR_API_KEY/info' \
-H 'Content-Type: application/json' \
-d '{"type":"meta"}'Look for entries like { "name": "BTC", "szDecimals": 5, "maxLeverage": 40 } — use market=BTC.
Spot symbols
Call spotMeta — each pair in the universe array has an index field. Prefix it with @ to get the market symbol.
curl -X POST 'https://api-hyperliquid-mainnet-info.n.dwellir.com/YOUR_API_KEY/info' \
-H 'Content-Type: application/json' \
-d '{"type":"spotMeta"}'To find a specific token's spot pair, cross-reference the tokens and universe arrays:
import requests
data = requests.post(
"https://api-hyperliquid-mainnet-info.n.dwellir.com/YOUR_API_KEY/info",
json={"type": "spotMeta"},
).json()
tokens = {t["index"]: t for t in data["tokens"]}
for pair in data["universe"]:
t0, t1 = pair["tokens"]
if "BTC" in tokens[t0]["name"].upper():
symbol = pair["name"] if pair.get("isCanonical") else f"@{pair['index']}"
print(f"Use market={symbol}") # market=@142HIP-3 perpDex symbols
Call perpDexs — each DEX has an assetToStreamingOiCap array of [symbol, oiCap] pairs. The symbol is what you pass as market.
curl -X POST 'https://api-hyperliquid-mainnet-info.n.dwellir.com/YOUR_API_KEY/info' \
-H 'Content-Type: application/json' \
-d '{"type":"perpDexs"}'Look for entries like ["hyna:ETH", "50000000.0"] — use market=hyna:ETH.
Some HIP-3 DEXs currently available:
| Prefix | Name | Example assets |
|---|---|---|
xyz | XYZ | xyz:AAPL, xyz:GOLD |
flx | Felix Exchange | flx:COPPER, flx:COIN |
hyna | HyENA | hyna:BTC, hyna:ETH |
km | Markets by Kinetiq | km:AAPL, km:BMNR |
cash | dreamcash | cash:EWY, cash:GOLD |
para | Paragon | para:TOTAL2, para:OTHERS |
Behavior
- one request returns one candle
- candle timestamps are UTC bucket-open times
- missing intervals are omitted at the data layer because candles are sparse
How the time parameter works
time is the open time of the candle you want back, not an arbitrary point inside a range. If you want a series of candles, step through
the bucket-open timestamps for the interval you are querying and request each bucket individually.
Current contract is intentionally narrow
The REST API does not provide bulk historical range reads today. Historical retrieval is done as one candle per response.
If you want the full archive for one market and one interval, follow the archive backfill guide. It shows how to step through the archive one candle at a time and resume a long-running export.
Fetching Multiple Candles
Use the time parameter as the iterator. For 1m, advance by one minute per request. For 5m,
advance by five minutes. For 1s, advance by one second.
When to Use REST
- simple backend lookups
- dashboards that fetch known candles by timestamp
- scripts that already work with plain HTTP