Contents
Whale stop / TP map
Stop / take-profit map of the largest tracked Hyperliquid wallets (default the 150 largest by open notional, open orders read every ~40 min): with coin, the trigger orders per price bucket (sell stops below / buy stops above the price, TPs separately), a heatmap overlay (overlay: price, label, side, usd) and coverage; without coin, a per-coin table with the largest stop cluster below and above the price.
/api/v1/whales/stopsEvery keyDescription
Only these wallets and only the main dex, not the whole market. The free key covers 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 | Coin for the bucket map and the overlay (optional; without it: per-coin table). |
Response fields
Every success is { data, meta }; these are the fields of data. meta is the same on every endpoint.
| Field | Description |
|---|---|
coinstring · nullable | The coin of `map` / `overlay`; null = per-coin table. |
mapobject · nullable | Stop / take-profit buckets of the coin (with ?coin=), else null. |
map.coinstring | Coin name as on Hyperliquid (BTC, kPEPE, HIP-3 names like xyz:TSLA). |
map.marknumber · nullable | Hyperliquid mark. |
map.bucketSizenumber | Bucket width (same rule as the liquidation map). |
map.buckets[]array of objects | Buckets within ±30 % of the mark, ascending. |
map.buckets[].pxnumber | Lower edge of the price bucket. |
map.buckets[].topnumber | Upper edge. |
map.buckets[].stopSellUsdnumber | Sell stop orders (trigger when the price falls to them) (USD). |
map.buckets[].stopBuyUsdnumber | Buy stop orders (trigger when the price rises to them) (USD). |
map.buckets[].tpSellUsdnumber | Sell take-profit orders (USD). |
map.buckets[].tpBuyUsdnumber | Buy take-profit orders (USD). |
map.buckets[].ordersinteger | Number of orders. |
map.buckets[].walletsinteger | Number of distinct wallets. |
map.totalsobject | Sums over the rows of this object. |
map.totals.stopSellUsdnumber | Sell stops (USD). |
map.totals.stopBuyUsdnumber | Buy stops (USD). |
map.totals.tpSellUsdnumber | Sell TPs (USD). |
map.totals.tpBuyUsdnumber | Buy TPs (USD). |
map.totals.limitBuyUsdnumber | Resting buy limits (USD). |
map.totals.limitSellUsdnumber | Resting sell limits (USD). |
map.totals.ordersinteger | Number of orders. |
map.totals.walletsinteger | Number of distinct wallets. |
map.coverageobject | Which wallets the stop map covers (the largest tracked wallets in the rotation, main dex only). |
map.coverage.walletsFreshinteger | Wallets whose open orders were read within the freshness limit (default 3 h). |
map.coverage.walletsWithOrdersinteger | Of those, wallets with at least one order (on this coin, when a coin is given). |
map.coverage.oldestFetchstring (ISO 8601) · nullable | Oldest open-orders read among the covered wallets. |
map.coverage.newestFetchstring (ISO 8601) · nullable | Newest open-orders read among the covered wallets. |
map.updatedAtstring (ISO 8601) · nullable | Newest order read. |
overlay[]array of objects | Items to draw on top of the liquidation heatmap. |
overlay[].pricenumber | Bucket middle. |
overlay[].labelstring | Plain-language label. |
overlay[].side"long" | "short" | Position side (for liquidations: the side of the liquidated position). |
overlay[].usdnumber | Orders in the bucket (USD). |
table[]array of objects | Per-coin table (without coin), largest first. |
table[].coinstring | Coin name as on Hyperliquid (BTC, kPEPE, HIP-3 names like xyz:TSLA). |
table[].marknumber · nullable | Hyperliquid mark price. |
table[].stopSellUsdnumber | Sell stops (USD). |
table[].stopBuyUsdnumber | Buy stops (USD). |
table[].tpSellUsdnumber | Sell TPs (USD). |
table[].tpBuyUsdnumber | Buy TPs (USD). |
table[].ordersinteger | Number of orders. |
table[].walletsinteger | Number of distinct wallets. |
table[].nearestBelowobject · nullable | Largest sell-stop bucket below the mark. |
table[].nearestBelow.pxnumber | Price (lower edge of a price bucket where the object is a bucket). |
table[].nearestBelow.usdnumber | Sell stops (USD). |
table[].nearestBelow.distancenumber | Fraction of the mark. |
table[].nearestAboveobject · nullable | Largest buy-stop bucket above the mark. |
table[].nearestAbove.pxnumber | Price (lower edge of a price bucket where the object is a bucket). |
table[].nearestAbove.usdnumber | Buy stops (USD). |
table[].nearestAbove.distancenumber | Fraction of the mark. |
limitedboolean | Rows were left out by the plan (free key: BTC, ETH, HYPE). |
coverageobject | Which wallets the stop map covers (the largest tracked wallets in the rotation, main dex only). |
coverage.walletsFreshinteger | Wallets whose open orders were read within the freshness limit (default 3 h). |
coverage.walletsWithOrdersinteger | Of those, wallets with at least one order (on this coin, when a coin is given). |
coverage.oldestFetchstring (ISO 8601) · nullable | Oldest open-orders read among the covered wallets. |
coverage.newestFetchstring (ISO 8601) · nullable | Newest open-orders read among the covered wallets. |
methodstring | How the figures are computed, in plain words. |
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 - 429
rate_limitedPer-minute limit reachedretry - 429
daily_limit_exceededDaily limit reachedretry - 429
stream_limitToo many open streamsretry - 500
internal_errorInternal errorretry
Methodology
- Whale stops and take-profits (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.