API changelog
Current version 1.24.0. Within /api/v1 changes are additive: new endpoints, optional parameters and fields. Breaking changes ship as /api/v2.
1.24.0 · 2026-11-05
Smaller answers: fields= and CSV / NDJSON on every row list
- added fields on the row lists (/markets, /funding, /liquidations, /positions/top, /whales/feed, /radar/events, /coins, /candles/{coin}, /long-short, /whales, /traders, /tape, /screener, /funding/predicted, /funding/spreads, /security/incidents, /security/wallets, /movements): a comma-separated list of row fields, e.g. ?fields=coin,mark,fundingApr. Every other field of each row is left out; for /candles/{coin} and /traders the rows are data.candles and data.rows. An unknown name answers 400 invalid_param (param fields) with the list of fields.
- added format=csv | ndjson on the same endpoints: only the rows, as CSV with a header line (nested values as JSON text, empty cell for null) or as one JSON object per line. The meta block comes in headers: Link rel="next" and X-Blockmetric-Next-Cursor, X-Blockmetric-Next-After, X-Blockmetric-Updated-At, X-Blockmetric-Warnings, X-Blockmetric-Restricted, X-Blockmetric-License (all exposed to browsers). ETag and If-None-Match work as for JSON; NDJSON is gzip-compressed when Accept-Encoding allows it. format=json (the default) is the envelope as before.
- changed Cursors do not depend on fields or format: a meta.nextCursor of a JSON page also continues a CSV listing with the same filters. Requests without the new parameters answer exactly as before.
- added SDKs 0.3.0: fields on the row-list methods, text() for CSV / NDJSON with the next cursor; the Python SDK now asks for gzip.
1.23.0 · 2026-11-04
Free key: heatmap of every coin for 24 hours; large liquidations kept 3 years
- changed GET /heatmap/{coin} and its layers (/open-interest): the free key and keyless access cover every coin (no more 403 outside BTC, ETH and HYPE) for the last 24 hours, with tf=15m or 1h; tf=4h and windows over 24 hours need Pro, Desk or an API plan (403 plan_required / 400 invalid_param), and so do columns finer than 15 minutes through the old stepMinutes parameter (403 plan_required). Pro and API Dev read 1 year, Desk and API Pro 3 years, as before. The other endpoints keep the free key's 30 days.
- changed GET /liquidations: every single liquidation is kept 120 days as before; after that the liquidations of $10,000 or more are kept 3 years and listed too (a window reaching back further returns only those for the older part). GET /liquidations/summary: largest also considers them when the window has compacted hours (hourlySumsBefore); totals, counts and the series are unchanged and count every liquidation once.
1.22.0 · 2026-11-04
Heatmap: measured values only, 1-minute columns kept 30 days
- changed GET /heatmap/{coin}: columns are measured snapshots only. Live columns start on 2026-11-03 14:15 UTC; before that a column without a live snapshot shows the daily snapshot of every open Hyperliquid position (daily_fill / daily_snapshot), after it such a column (an update, a collector outage) shows the same daily snapshot until the next live column. Columns reconstructed from fills (reconstructed / reconstructed_fills and the recon* fields) are no longer returned; the enum values stay so existing clients keep parsing.
- changed GET /heatmap/{coin}?tf=1m: the 1-minute layer of the top 20 coins is kept 30 days instead of 7, so end can page back a month.
- changed GET /liquidations/summary: hours up to 26280 (1,095 days, the longest plan history) instead of 9600; each plan stays clamped to its own history. Older hours come from the hourly sums; the series starts at the first stored hour.
Earlier releases (22): the preview phase before launch
While the API was in preview, some of these releases tightened validation (for example a removed parameter value now answering 400). From the public launch on, the versioning policy applies without exceptions.
1.21.0 · 2026-11-03
Heatmap: dYdX, GMX and Lighter RH layers
- added GET /heatmap/{coin}?venue=dydx: every open dYdX v4 position from a full scan of the chain (every subaccount, every 5 minutes), with the liquidation price we compute from the dYdX margin rules (cross margin: other prices held constant; isolated positions exact), placed against the oracle price.
- added GET /heatmap/{coin}?venue=gmx: every open GMX v2 position on Arbitrum and Avalanche (the on-chain position list, every 5 minutes), with the liquidation price we compute every round from the contract state (collateral, PnL, pending fees, closing fee and price impact against the minimum collateral), placed against the oracle price.
- added GET /heatmap/{coin}?venue=lighter_rh: tracked accounts on the Lighter RH instance with the liquidation price Lighter reports. Only markets of coins we already list are included.
- changed GET /heatmap/{coin}?venue=all adds the dYdX, GMX and Lighter RH layers when they have the coin; data.venueColumns lists them like the other venues.
1.20.0 · 2026-11-03
Heatmap layers: open interest per price band, wallets in a band, cluster hit rates
- added GET /heatmap/{coin}/open-interest: where open interest was added and removed on the exchanges per price band (hours up to 35 days, end, venue, bandPct). From the open interest and mark price the exchanges publish, in 5-minute steps of our collection, valued in contracts at the step price; no leverage or liquidation price is assumed. Licence review: venue=all only, bands published where at least two withheld exchanges contributed.
- added GET /heatmap/{coin}/wallets: the tracked Hyperliquid wallets with their liquidation price in a band right now (lo + hi, price, or clusters=N for the largest levels above and below the mark), with size, side, leverage, liquidation price, liqDistance and the wallet page url.
- added GET /scoreboard: the cluster scoreboard per coin and horizon (4, 24, 72 hours); with coin also the big clusters of the current liquidation map and how often past clusters of the same coin, side and distance band were reached (n, reached, rate, 95 % Wilson interval; no rate below 10, small below 30, scope all_coins when the coin has too few).
1.19.0 · 2026-11-03
Heatmap: intraday columns reconstructed from fills
- changed GET /heatmap/{coin} with an intraday tf (1m to 12h, Hyperliquid): a column without a live snapshot now shows the levels of all positions reconstructed from fills between two daily snapshots when they exist (columnSource reconstructed, the 15-min step at or before the column, replayed from the nearer snapshot); the daily snapshot (daily_fill) remains the fallback. Live columns, the price grid and data.clusters are unchanged.
- added GET /heatmap/{coin}: data.dataSource per column (live | reconstructed_fills | daily_snapshot | null) and, for reconstructed columns, data.reconBaseAt, reconSinceBaseSec, reconAssumedShare and reconQuality (the gate verdict of that coin and day).
- added GET /heatmap/{coin}?columns=live: only the columns of the live collection; reconstructed and daily stand-ins become gaps.
1.18.0 · 2026-11-03
Smart money: three leaderboard lists instead of one
- changed GET /smart-money: smart money is now the union of three Hyperliquid leaderboard lists, each counted after the filters: the top 1,000 by all-time PnL (before: the top 500), the top 500 by 30-day PnL (account $100K+, 30-day ROI 5 %+, profitable all-time) and the top 250 by all-time ROI (account and all-time PnL $1M+), at most 2,000 wallets. Only rows of the newest leaderboard run count. Convergence events and positioning use the new set; event titles read "N smart-money wallets opened or added …".
- added GET /smart-money: data.lists (wallets per list and the lowest value that made it), data.leaderboardAt, the list settings in data.settings, data.excluded.notTrading (all-time PnL above 20 × the all-time volume: token holdings, airdrops) and data.events[].wallets[].lists (the lists of each wallet at the time of the event).
- fixed GET /funding/predicted: nextFundingTime is the next settlement at or after the request time; during each hour it showed the hour that had already started (Hyperliquid reports it that way until the hour ends).
- fixed GET /traders: rows[].pnl and rows[].vlm (USD per window) are rounded to cents like every other money field.
- fixed Keyless access (X-Blockmetric-Access: public): a request answered 429 no longer counts against the minute and day windows (as with keys).
- fixed If-None-Match: the ETag as clients behind the CDN receive it (W/"…-gzip" when the client sends no Accept-Encoding, e.g. curl) now answers 304 too; before, only the compressed form did.
1.17.0 · 2026-11-03
Listed wallets: OFAC, FBI and official post-mortems, with their movements
- added GET /security/wallets: wallets listed by an official source (the OFAC SDN list, re-read daily with automatic delistings; FBI / IC3 announcements; addresses an official incident post-mortem names), each with the source’s category, wording, date and link ("Listed as <category> by <source>, <date>"), last tracked movement and balance. Filters category, network, source, q, movedDays; paginated.
- added GET /security/wallets/{address}: every active listing of one address, its last known balances on Ethereum, Arbitrum and Base and its tracked movements (every token on the EVM chains, native ETH, Bitcoin), the other side of a move only with its own sourced label. 404 without an active listing.
- added New radar event kinds (radar/events, webhooks, stream): risk_wallet_move (a listed wallet moved at least $100K in one transaction) and risk_wallet_listed (addresses newly listed by OFAC or published with an incident). New meta.sources values ofac_sdn and fbi_ic3.
1.16.0 · 2026-11-03
Heatmap: daily history of every Hyperliquid position at tf=1d
- changed GET /heatmap/{coin} with tf=1d (Hyperliquid): every day the daily history covers shows its snapshot of every open Hyperliquid position (shortly after 00:00 UTC, the same 0.5 % buckets); the tracked wallets fill only the days it does not cover yet (normally today). The window reaches as far back as the plan history and the price rows span the lowest to the highest column mark ± 30 %. Other intervals and venues are unchanged.
- added GET /heatmap/{coin}: data.columnSource (tf=1d on Hyperliquid) says per column whether its snapshot is from the daily history of all positions (all_positions) or from the tracked wallets (tracked). The two differ in scale.
- added GET /heatmap/{coin} with an intraday tf (1m to 12h, Hyperliquid): a column without a live snapshot shows the newest daily snapshot of all positions before its end when it is at most 24 hours older (data.columnSource daily_fill); before, such columns were gaps. Live columns, the price grid and data.clusters are unchanged.
1.15.0 · 2026-10-28
Blockmetric Sentiment: our own sentiment index
- added GET /sentiment: Blockmetric Sentiment, our own 0–100 market sentiment index from data we collect (BTC momentum and volatility, funding, open interest change, long/short ratio, liquidation imbalance, whale positioning), each input ranked against its own past year. The current value with the score, weight and points of every input, and the daily history at 00:00 UTC (days, clamped to the plan history).
- removed The source id of the third-party sentiment index is no longer a value of meta.sources; the index it fed was replaced by GET /sentiment.
1.14.0 · 2026-10-27
One contract for every endpoint: strict parameters, day limits in headers, GET /me, licence review of exchange data
- changed Licence review of exchange data: raw rows of Binance and Bybit (single liquidations, tape prints, order books and walls, per-venue taker flow, tickers on /markets, funding per venue, published long/short ratios, candles of exchange-only coins) are no longer redistributed through the API while the review of their terms is pending. Asking for such a venue answers 403 source_restricted; meta.restricted lists the withheld venues on the endpoints concerned. Aggregates stay where they cannot be turned back into one exchange’s value: totals per venue and hour, open interest over venues (null where exactly one withheld exchange is in the sum), flow totals in bars of at least 5 minutes, funding spreads only with at least 3 venues and no published rate at either end (aprSpread null otherwise; /funding/spreads lists only such rows).
- changed Radar events under the licence review: single liquidation orders of Binance and Bybit (big_liquidation, the record "largest single liquidation") are not published: not in GET /radar/events, the stream or webhooks (a page can hold fewer than limit items; keep paging with meta.nextCursor). Their funding and open-interest events keep venue and direction without the exchange’s figures. liq_cascade and liq_extreme leave out the amounts of withheld exchanges and keep their totals only when at least two of them are in the sum. The same rule now applies to the site’s downloads, widgets and shared images (see /data-sources).
- added GET /me: the calling key (masked), plan, limits, usage of the current minute and UTC day, overage and the history window. Not counted against the limits and never 429.
- added Day limit in every response: X-RateLimit-Limit-Day, X-RateLimit-Remaining-Day, X-RateLimit-Reset-Day, and both windows in the IETF draft format (RateLimit-Policy, RateLimit). X-Blockmetric-Overage: billed marks calls billed beyond the day limit; X-Blockmetric-Key-Expires warns during the last 14 days of a key with an expiry; X-Blockmetric-Api-Version names the contract version.
- changed Unknown query parameters answer 400 invalid_param with the closest known name ("Did you mean limit?") instead of being ignored. Values outside their range are still clamped, and now named in meta.warnings.
- added Errors carry retryable (true for 429 and 5xx) and, when the error is about one parameter, param.
- added meta.access (historyDays, historyFrom) on every response; meta.nextUrl (the complete next-page URL) next to meta.nextCursor.
- added GET /liquidations and GET /tape: side and minUsd filters (liquidations), from / to (ISO) windows and forward polling with after=<id> (oldest first, meta.nextAfter) for bots.
- added GET /security/incidents is paginated (cursor, newest 500 items). GET /heatmap/{coin}: clusters=N adds the largest buckets above and below the mark.
- changed Cursors are signed together with the endpoint and its filters: a cursor of another endpoint or taken to other filters answers 400 (the /movements cursor is signed too).
- changed Coins without a Hyperliquid market answer 404 on /liqmap, /heatmap, /orderbook and /flow instead of an empty 200. GET /heatmap/{coin}: end without tf, or an invalid end, answers 400 instead of being ignored.
- changed Numbers carry no binary float noise (0.10950000000000001 → 0.1095): non-integers have at most 12 significant digits (from 0.001 up at most 10 decimals); USD amounts under other names (accountValue, unrealizedPnl, marginUsed, usdDelta …) are rounded to cents like the …Usd fields.
- changed GET /liquidations/summary: the hourly series starts at the first covered hour (meta.warnings names the cut); totals still cover the whole window. meta.source names the venues of the rows returned.
- added Unit-true aliases for fields named …Pct that hold fractions: walls[].distance / minDistance and depth[].band (/orderbook), bucketFraction / rangeFraction (/heatmap), risk.maxDrawdown (/traders); camelCase manyPositions / restingOrders / highFills (/smart-money excluded). The old names stay, marked deprecated in the OpenAPI document.
- added The event envelope (webhooks, stream) carries createdAt (ISO 8601) next to created (unix seconds).
- security Keys belong on a server: a request with a key from a browser (Origin header) answers 403 origin_not_allowed unless the key lists that origin under allowed browser origins. Keyless public access stays open to every origin.
- fixed GET /exchange-flows: coverageFrom no longer reports 1970 (two hours stored with block time 0 were removed and are ignored).
- fixed Webhooks are documented for API Dev (2 endpoints) and API Pro (10) everywhere (x-plan api_dev).
- changed GET /stats: jobs lists only the collector jobs behind a public data feed, each with feed (the id of GET /status feeds[], which carries the plain-English label); internal maintenance jobs are left out, as on /status.
- added Paths under /api outside /api/v1 (for example /api/v2/coins) answer 404 not_found in the JSON error format with a pointer to /api/v1, instead of the HTML error page.
- added OpenAPI: every response field has a description (data dictionary), methodology links per operation (externalDocs), info.contact and info.license.
1.13.0 · 2026-10-27
Data feeds on /status, ready-made credit line, clearer errors
- added GET /status: feeds, the data feeds as on the status page (id, label such as "Binance liquidations", state ok / warn / bad / off, lastUpdate). The overall status follows them; a feed that has not delivered data yet (off) does not count against it.
- deprecated GET /status: jobs. It lists only the collector jobs behind a data feed (internal maintenance jobs are left out); use feeds.
- added meta.attribution on every response: the finished credit line ("Data by Blockmetric · Source: Hyperliquid · Binance") and the link it must carry. Display licences (API Pro) show it next to the data.
- changed USD amounts (fields ending in usd / Usd) are rounded to cents instead of carrying float noise such as 1447.5939440999998.
- changed ?venue= of a venue that is switched off (okx) answers 400 invalid_param with the enabled venues instead of an empty list. GET /stats names the venues it counts (source aggregate).
- added Other methods than GET answer 405 method_not_allowed in the error format, with an Allow header.
- added GET /heatmap/{coin}: requests with stepMinutes carry the Deprecation and Link headers.
- changed Error messages: 401 without a key names the keyless header and the free key; ip_not_allowed names the address the request came from; rate_limited names the time the next minute starts.
- fixed Docs: the free key reads 30 days of history (keyless 24 h); parameter texts, llms.txt and the MCP notes said 24 h.
1.12.0 · 2026-10-26
Heatmap intervals 1m to 1d, liquidation history to 400 days
- added GET /heatmap/{coin}: tf = 1m, 5m, 15m (default), 1h, 4h, 12h or 1d (UTC aligned) and end (ISO 8601) to page back in time. Intervals follow the plan: free key 15m / 1h / 4h, keyless 15m / 1h, Pro and API Dev add 5m / 12h / 1d, Desk and API Pro add 1m (top 20 coins by open interest, kept 7 days). Outside the plan: 403 plan_required.
- added GET /heatmap/{coin}: new fields tf, stepMinutes, layer (fine = 0.1 % buckets within ±10 %, wide = 0.5 % within ±50 %), bucketPct, rangePct, snapshotAt (exact snapshot time per column), live and the freshness per column (freshUsdShare, ageP50Sec).
- changed GET /heatmap/{coin}: a column now shows the levels at its start (the first snapshot inside it; the running column the newest one) and its mark is the mark stored with that snapshot. hours reaches the plan history (the 180-day cap is gone); with tf it is also limited by the column cap of the interval and more answers 400 invalid_param instead of a silently coarser step. Without tf the old automatic step stays.
- deprecated GET /heatmap/{coin}: stepMinutes. It keeps working without tf (old automatic step); together with tf it answers 400.
- added GET /liquidations/summary: hours up to 9600 (400 days). Single events are kept 120 days, older hours as hourly sums per venue, coin and side; hourlySumsBefore marks where the sums start (largest is a single event after it).
- changed Plan limits (2026-10-26): free keys read 30 days of history (keyless public access stays 24 h); personal keys Pro 20 requests/min and 5,000/day, Desk 30/min and 10,000/day; webhooks for API Dev (2 endpoints), API Pro 10 endpoints and 2 live streams.
1.11.0 · 2026-10-26
Key scopes
- added API keys have scopes: api (this data API) and node (the node gateway, where offered). Existing keys keep the api scope. A key without the api scope answers 403 scope_required; scopes are set per key on /account/api.
1.10.0 · 2026-10-26
API key hardening: checksum keys, expiry, IP allowlists
- security New keys end in a CRC32 checksum (bm_live_ + 44 random + 6 checksum characters, base58 without 0/O/I/l): typos are rejected before any lookup and leaked keys are recognisable by secret scanners. Only this format is accepted.
- added Optional per key: name, expiry date and IP allowlist (CIDR, IPv4 and IPv6). Requests from other addresses answer 403 ip_not_allowed; expired keys answer 401 unauthorized.
- security API keys in the URL (?api_key=, ?key=, ?token= … or any value starting with the key prefix) are refused with 400 invalid_param; keys are only accepted in the Authorization or x-api-key header. Plain http answers 403 https_required.
- security Repeated invalid keys from one network answer 429 rate_limited for up to 10 minutes.
1.9.0 · 2026-10-23
Real data only: estimated layer removed, Hyperliquid liquidations confirmed by fills
- removed GET /heatmap/{coin}: layer=est and layer=both (the estimated CEX liquidation layer, a model from open interest and an assumed leverage mix) and the `est` object. Both values now answer 400 invalid_param; layer=real (the default) is unchanged.
- changed Hyperliquid liquidations (GET /liquidations, /liquidations/summary, radar events whale_liquidated, webhooks, stream) are only published once Hyperliquid’s own fills of the wallet carry the liquidation marker (userFillsByTime, fill.liquidation.liquidatedUser = the wallet). Time, price and size are those of the liquidation fills; earlier rows that were only inferred from a vanished position were withdrawn.
- changed On-chain stablecoin values (GET /movements, /exchange-flows) use the latest fresh Chainlink price of the stablecoin instead of $1; without one the value is null (priceSource "unavailable") and the transfer is left out of USD totals and thresholds.
- fixed GET /liquidations/summary: hours that were not covered by every enabled stream are null instead of 0.
1.8.0 · 2026-10-23
Whale movements and exchange flows
- added GET /movements: one feed of large on-chain transfers (Ethereum, Arbitrum, Base, Bitcoin), exchange in- and outflows, stablecoin mints / burns, bridge transfers, large DEX swaps and Hyperliquid whale positions and trades; filters type, chain, asset, minUsd, labelled, address; cursor pagination.
- added GET /exchange-flows: inflow, outflow and net per exchange and asset over a window (proof-of-reserves addresses, all transfer sizes on the EVM chains).
- added New radar event kinds (radar/events, webhooks, stream): big_transfer, stablecoin_mint, stablecoin_burn, dex_whale_trade (from $10M; stablecoin transfers from $100M, mints / burns from $25M; DEX swaps from $2M; data.movementId links to /movements).
1.7.0 · 2026-10-23
Security incidents and new radar event kinds
- added GET /security/incidents: detector events of the security kinds plus curated incidents (own words, primary-source links), filterable by origin, type, chain and severity.
- added New radar event kinds (radar/events, webhooks, stream): hl_market_change, hl_manipulation, hl_adl, oracle_deviation, vault_drawdown, liq_extreme, protocol_outflow, incident.
- changed depeg events now come from Chainlink price feeds read on-chain (source "chainlink"); DefiLlama-based depegs stay off.
1.6.0 · 2026-10-23
Data licence in every response, uptime in /status
- added meta.license on every response: licence tier of the key (personal, internal, display), whether the data may be shown to third parties, the required attribution ("Data by Blockmetric"), redistribution and the end-user cap (see /terms#api-license).
- added info.x-license in the OpenAPI document: the licence ladder in machine-readable form.
- added GET /status: uptime (measured availability of the API, the core data and both together for 24 h / 7 / 30 / 90 days and the current SLA month) and incidents (open and last 7 days).
- changed The free key now covers the heatmap, liquidation map and whale stop map of HYPE in addition to BTC and ETH.
1.5.0 · 2026-10-23
Screener and funding tools
- added GET /screener: every Hyperliquid coin with price change 1h / 24h, open interest and its change, current and predicted funding, long/short, 24h liquidations, nearest liquidation cluster, RSI(14) 1h / 4h and realised volatility; sortable.
- added GET /funding/predicted: predicted next funding of Hyperliquid, Binance and Bybit per coin (rate, annualised, interval, next funding time).
- added GET /funding/spreads: highest vs lowest venue per coin, annualised and per day, for current or predicted rates, with the open interest of the thinner leg.
1.4.0 · 2026-10-23
Order flow: order book, walls, CVD, tape
- added GET /orderbook/{coin}: resting liquidity per price bucket (Hyperliquid l2Book fine + coarse layer, Binance / Bybit local books), depth and imbalance within 1 / 2 / 5 %, walls with their lifecycle (active, pulled before touch, filled), and with `hours` the book heatmap over time (paid plans; free key: BTC, ETH, current book).
- added GET /flow/{coin}: taker buy / sell volume, delta and CVD per venue (Binance spot separately), by print size and for tracked Hyperliquid whales, plus the volume profile (POC, value area) of the window (free key: BTC, ETH, last hour).
- added GET /tape: large taker prints across venues with the Hyperliquid taker address (cursor pagination; free key: BTC, ETH, last hour).
1.3.0 · 2026-10-23
Hyperliquid whale intelligence
- added GET /whales/stops: stop / take-profit map of the largest tracked wallets (bucket map, heatmap overlay, per-coin table; free key: BTC, ETH).
- added GET /traders: trader leaderboard with day / week / month / all-time PnL and ROI, observed win rate and holding time, drawdown, Sharpe and style tags (free key: top 25, leaderboard columns).
- added GET /cohorts: long / short positioning by size and PnL cohort with the trend over 15 min to 7 days and position changes by cohort.
- added GET /smart-money: convergence events of top-PnL wallets (market makers, vaults and hedged books filtered out) and their positioning.
- added Radar event kind smart_money (filters of /radar/events, webhooks and the stream).
1.2.0 · 2026-10-23
Data sources and attribution
- added meta.sources on every response: the data sources the response is built from (ids as listed on /data-sources).
- changed Data of switched-off sources is left out of every response, including totals, boards and radar events stored earlier.
1.1.0 · 2026-10-23
Developer experience: new endpoints, pagination, caching, keys for every account
- added GET /heatmap/{coin}: liquidation heatmap over time from tracked Hyperliquid positions (free tier: BTC, ETH).
- added GET /liquidations/summary: totals per venue and coin, largest liquidation, hourly series.
- added GET /long-short: Hyperliquid positioning plus Binance, Bybit and OKX account ratios.
- added GET /whales: whale leaderboard with public labels and their sources.
- added Cursor pagination (limit + cursor, meta.nextCursor) on /liquidations, /whales/feed, /radar/events and /positions/top.
- added ETag on every 200 and If-None-Match → 304 Not Modified.
- added X-Request-Id on every response; error bodies carry doc_url (error catalogue) and request_id.
- added CORS for GET with Authorization and OPTIONS preflight (keep keys on your server in production).
- added Public GET /status (data freshness per source) and GET /openapi.json / /openapi.yaml (OpenAPI 3.1).
- added API Pro: signed webhooks (Blockmetric-Signature) and the live stream GET /stream (Server-Sent Events, Last-Event-ID resume).
- added A personal developer key for every account (Free, Pro, Desk: 10 requests/min, 1,000/day, non-commercial); daily limits for all plans.
- changed Successful responses are revalidatable (Cache-Control: private, no-cache instead of no-store).
- changed Keys use the prefix bm_live_.
1.0.0 · 2026-10-23
First version of the REST API
- added GET /markets, /funding, /liquidations, /liqmap/{coin}, /positions/top, /whales/feed, /wallets/{address}, /radar/events, /stats and /coins with Bearer keys and per-minute limits per account.
Versioning policy
The major version is in the path. /api/v1 only grows; a breaking change ships as /api/v2, and /api/v1 keeps working for at least six months after that.
Breaking: never inside v1
- Removing or renaming an endpoint, a parameter, a parameter value or a response field
- Changing the type or the unit of a field (a number becoming a string, a fraction becoming a percentage)
- A new required parameter, or a stricter rule that rejects a request that used to work
- Changing what a parameter value means or what a default returns
Additive: may ship any day
- New endpoints, new optional parameters and new response fields
- New values in open lists (event kinds, venues, sources): handle unknown values gracefully
- New error codes for new situations, new response headers
- Better messages: branch on error.code, never on the message text
Deprecations
A deprecated endpoint or parameter keeps working and answers with Deprecation, Sunset (the removal date) and a Link to its replacement. The changelog announces it first.
No endpoint is deprecated right now.
Stay informed
- RSS feed (every release)
- OpenAPI document (info.version is the current version)
- Status (incidents and data freshness)