Contents
Price candles (OHLC)
Price candles (OHLC) of a Hyperliquid coin, oldest first.
/api/v1/candles/{coin}Every keyDescription
Live buckets come from 30-second Hyperliquid mark samples (price: "mark", no volume); history before that from trade candles (Binance perpetual for coins listed there, else Hyperliquid) with volume (volumeUsd = quote volume where the venue reports it, volumeBase in Hyperliquid units, volumeVenue). Gaps stay gaps; complete: false marks a bucket with missing samples or the one still forming. from is clamped to the plan history, to to now minus the feed delay. Licence review: candles made only of Binance trades are left out (gaps) and mixed ones lose the Binance volume; coins without a Hyperliquid market answer 403 source_restricted (meta.restricted).
Who can call it
Available with every key and keyless (X-Blockmetric-Access: public). Keys of Free accounts get free-tier data (real-time feeds, 30 days of history, heatmap over time for every coin over the last 24 hours, liquidation levels now for every coin, the same as the free web plan); Pro and Desk keys the data of their plan; API Dev / API Pro raise the limits.
- No key
- 24 h
- Free
- 30 days
- Pro
- 365 days
- Desk
- 1095 days
- API Dev
- 365 days
- API Pro
- 1095 days
History window per plan. Limits: Authentication & limits.
Parameters
| Parameter | Description |
|---|---|
coinstring · pathrequired | Coin name, e.g. BTC or xyz:TSLA (case-insensitive). |
tfstring | Candle timeframe: 5m, 15m, 1h (default), 4h or 1d (UTC-aligned). 5m and 15m reach back 35 days (our 5-minute samples and 5-minute trade candles are kept that long, then hourly); older 5m / 15m buckets are gaps, so use 1h or coarser.one of 5m, 15m, 1h, 4h, 1d · default 1h |
fromstring | Start (ISO 8601, optional; default: `limit` candles before `to`).ISO 8601, e.g. 2026-10-23T12:00:00Z |
tostring | End, exclusive (ISO 8601, optional; default now).ISO 8601, e.g. 2026-10-23T12:00:00Z |
limitinteger | Number of items, default 500, clamped to 1–5000.1–5000 · default 500 |
fieldsstring | Comma-separated fields of every data.candles item to return, e.g. t,open,high,low,close (case-insensitive). All other fields are left out, so large lists get much smaller; an unknown name answers 400 with the list of fields. Default: every field. |
formatstring | json (default: the { data, meta } envelope) | csv (the rows with a header line; nested values as JSON text) | ndjson (one JSON object per row and line). csv and ndjson carry the meta block in headers: Link rel="next" and X-Blockmetric-Next-Cursor (next page), X-Blockmetric-Next-After (forward polling), X-Blockmetric-Updated-At, X-Blockmetric-Warnings, X-Blockmetric-License. Errors stay JSON.one of json, csv, ndjson · default json |
Response fields
Every success is { data, meta }; these are the fields of data. meta is the same on every endpoint.
| Field | Description |
|---|---|
coinstring | Coin name as on Hyperliquid (BTC, kPEPE, HIP-3 names like xyz:TSLA). |
tf"5m" | "15m" | "1h" | "4h" | "1d" | Bucket interval (5m, 15m, 1h, …). |
candles[]array of objects | Oldest → newest. |
candles[].tstring (ISO 8601) | Bucket start (UTC). |
candles[].opennumber | Open price of the bucket. |
candles[].highnumber | High price of the bucket. |
candles[].lownumber | Low price of the bucket. |
candles[].closenumber | Close price of the bucket. |
candles[].volumeUsdnumber · nullable | Traded quote volume of the bucket where the venue reports it (USD). |
candles[].volumeBasenumber · nullable | Traded volume in base units (Hyperliquid units). |
candles[].volumeVenue"binance" | "hyperliquid" · nullable | Venue the volume was traded on. |
candles[].price"mark" | "trades" | "mixed" | mark = 30-second Hyperliquid mark samples, trades = trade candles of the volume venue, mixed = both within the bucket. |
candles[].completeboolean | false when samples are missing in the bucket, it is still forming, or part of its OHLC is derived (rows from before high/low/open were stored; hourly rows compacted after 35 days, whose sample count is not kept). |
Errors
- 400
invalid_paramInvalid parameter - 401
unauthorizedMissing or invalid API key - 403
plan_requiredPlan does not include this - 403
scope_requiredKey not scoped for this API - 403
ip_not_allowedAddress not on the IP allowlist of the key - 403
origin_not_allowedKey used from a browser origin it does not allow - 403
source_restrictedExchange data not redistributed - 403
https_requiredhttps required - 404
not_foundNot found - 429
rate_limitedPer-minute limit reachedretry - 429
daily_limit_exceededDaily limit reachedretry - 429
stream_limitToo many open streamsretry - 500
internal_errorInternal errorretry
Code snippets in these docs are licensed under MIT-0: copy them into your own code without attribution. The SDKs, CLI and MCP server will be, once published, Apache-2.0; the name Blockmetric is not licensed (forks must be renamed). Data from the API is governed by the API terms; third-party exchange data by the exchange’s terms.