Contents
Open interest added per price band
Where open interest was added and removed on the exchanges (Binance, Bybit; OKX while enabled), per price band: the "open interest added at this price" layer of the heatmap.
/api/v1/heatmap/{coin}/open-interestEvery keyDescription
Built only from what the exchanges publish and our collector stores every minute (open interest and the exchange's own mark price, kept in 5-minute buckets for 35 days): for two consecutive 5-minute buckets of one exchange, the change of open interest in contracts, valued at the bucket's price (the middle of its high and low), goes into the price band of that price. addedUsd = the positive changes, removedUsd = the negative ones, netUsd = added minus removed, steps = 5-minute steps with a change. No leverage is assumed and no liquidation price is estimated: this is not a position map. Limits: only the net change per 5 minutes is visible (openings and closings inside one step offset each other); a new contract always has a long and a short side, so added open interest does not say who bought; a step whose price range crosses a band edge counts in the band of its middle price (spanningSteps); a gap in our collection is never bridged; Binance open interest of coins outside the top 60 is read in rotation, so a change can land a few minutes late. Licence review: venue=binance / bybit answers 403 source_restricted; venue=all (default) publishes the sum over the exchanges per band where at least two withheld exchanges contributed to it (otherwise the band keeps its steps and venues and has null amounts, withheld: true), byVenue lists only exchanges that are not withheld, and totals add up the published bands. Same coins per plan as /heatmap/{coin} (free key: BTC, ETH and HYPE).
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 as on Hyperliquid, e.g. BTC (case-insensitive). Exchange listings are matched to it (kPEPE = 1000PEPE). |
hoursinteger | Window in hours, default 24, clamped to 1 to 840 (35 days of 5-minute open interest) and to the plan's heatmap history (free key and keyless the last 24 hours, Pro / API Dev 1 year, Desk / API Pro 3 years; meta.warnings says so).1–840 · default 24 |
endstring | End of the window (ISO 8601, default now), rounded up to the end of its 5-minute step (from / to say which steps were read). Clamped to now and to the readable history.ISO 8601, e.g. 2026-10-23T12:00:00Z |
venuestring | all (default: every enabled exchange, summed per band) | binance | bybit | okx (one exchange; 403 source_restricted while its licence review is pending, 400 when switched off).one of all, binance, bybit, okx · default all |
bandPctnumber | Band width in percent of the price, default 0.5 (a round step near it, like the heatmap rows), 0.1 to 5.0.1–5 · default 0.5 |
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). |
venue"all" | "binance" | "bybit" | "okx" | The venue asked for (all = every enabled exchange, summed per band). |
venues[]array of "binance" | "bybit" | "okx" | Exchanges read for this answer (enabled ones). |
fromstring (ISO 8601) | Window start. |
tostring (ISO 8601) | Window end. |
hoursinteger | Window in hours. |
marknumber · nullable | Hyperliquid mark now (the band width is a round step near bandFraction of it). |
bandSizenumber | Width of a price band (USD); 0 without a price. |
bandFractionnumber | Band width asked for, fraction of the price (0.005 = 0.5 %). |
stepMinutesinteger | Length of one step: two consecutive 5-minute buckets of our collection. |
stepsinteger | Steps with a change of open interest in the window (all exchanges read). |
spanningStepsinteger | Of those, steps whose price range crossed a band edge (counted in the band of their middle price). |
firstStepstring (ISO 8601) · nullable | First step with data in the window. |
lastStepstring (ISO 8601) · nullable | Last step with data in the window. |
fullResolutionDaysinteger | Days of 5-minute open interest kept (older history is hourly and not used). |
totalsobject | Sums over the rows of this object. |
totals.addedUsdnumber | Open interest added over the published bands (USD). |
totals.removedUsdnumber | Open interest removed over the published bands (USD). |
totals.netUsdnumber | addedUsd minus removedUsd (USD). |
totals.withheldBandsinteger | Bands without amounts (licence review: a single withheld exchange would be readable from them). |
bands[]array of objects | Price bands with a change, lowest first. |
bands[].priceLonumber | Lower edge of the band (USD, inclusive). |
bands[].priceHinumber | Upper edge of the band (USD, exclusive). |
bands[].addedUsdnumber · nullable | Open interest added while the price was in this band: the sum of the positive 5-minute changes, in contracts valued at the step price; null = withheld (USD). |
bands[].removedUsdnumber · nullable | Open interest removed while the price was in this band (sum of the negative changes, as a positive number); null = withheld (USD). |
bands[].netUsdnumber · nullable | addedUsd minus removedUsd; null = withheld (USD). |
bands[].stepsinteger | 5-minute steps with a change whose price was in this band. |
bands[].venues[]array of "binance" | "bybit" | "okx" | Exchanges with a change in this band. |
bands[].byVenueobject | Per exchange (only exchanges that are not withheld by the licence review). |
bands[].byVenue.binanceobject | The part of binance in this band. |
bands[].byVenue.bybitobject | The part of bybit in this band. |
bands[].byVenue.okxobject | The part of okx in this band. |
bands[].withheldboolean | true: amounts left out: with the licence review pending, the sum over the exchanges of this band would be one exchange's own figure. |
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
Methodology
- Open interest (how it is computed and its limits)
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.