Contents
Whale movements (on-chain + Hyperliquid)
Whale movements, newest first, in one feed: large on-chain transfers (Ethereum, Arbitrum, Base from $1M, stablecoins from $5M; Bitcoin from $1M, change excluded), exchange in- and outflows (exchanges’ own proof-of-reserves addresses), stablecoin mints / burns, bridge transfers, large swaps on the biggest Uniswap v3 / Aerodrome pools (from $500K) and Hyperliquid whale position changes and large Hyperliquid trades (from $1M).
Description
Labels only from cited sources; every other wallet is named by its address. USD: stablecoins at their latest fresh Chainlink answer (USDT, USDC, DAI / USD), WBTC at the Hyperliquid BTC mark × Chainlink WBTC / BTC, other assets at the Hyperliquid mark; no fresh price → usd null and priceSource "unavailable" (such items never pass minUsd). priceSource and details.value say which. CEX trade prints are not included.
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 |
|---|---|
typestring | Comma list of transfer | exchange_in | exchange_out | exchange_exchange | mint | burn | bridge | dex_buy | dex_sell | perp_position | big_trade (optional, default all). |
chainstring | ethereum | arbitrum | base | bitcoin | hyperliquid (optional).one of ethereum, arbitrum, base, bitcoin, hyperliquid |
assetstring | Asset symbol, e.g. BTC, ETH, USDT, USDC (ETH also finds WETH, BTC finds WBTC, USDT finds USDT0) (optional). |
minUsdnumber | Minimum value in USD on top of the feed thresholds, default 0.≥ 0 · default 0 |
labelledboolean | true = only items with a labelled sender or receiver.one of true, false · default false |
addressstring | Only movements of this EVM or Bitcoin address (includes smaller transfers of addresses watched by alert rules). |
sincestring | ISO time; clamped to the plan history.ISO 8601, e.g. 2026-10-23T12:00:00Z |
limitinteger | Number of items, default 50, clamped to 1–500.1–500 · default 50 |
cursorstring | Next page: the value of meta.nextCursor from the previous response (keep the other parameters unchanged). Cursors are signed: an edited cursor answers 400; paging stops at the plan history. |
fieldsstring | Comma-separated fields of every item to return, e.g. ts,type,asset,usd,from,to (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 |
|---|---|
[].idstring | "m<id>" on-chain movement, "p<id>" Hyperliquid position change, "t<id>" Hyperliquid trade print. |
[].tsstring (ISO 8601) | Block time (on-chain) or event time. |
[].typestring (enum) | Type of the item (enum of this field). |
[].chainstring | ethereum | arbitrum | base | bitcoin | hyperliquid. |
[].assetstring | Asset symbol (USDT, USDC, ETH, WETH, BTC, WBTC, …) or Hyperliquid coin. |
[].amountnumber · nullable | Units of the asset. |
[].usdnumber · nullable | Value at our price: stablecoins at the fresh Chainlink answer, WBTC at Hyperliquid BTC mark × Chainlink WBTC / BTC, other assets at the Hyperliquid mark; null = price unavailable (USD). |
[].priceSourcestring · nullable | Basis of usd: "chainlink:USDC/USD" (Chainlink feed answer; details.value names the answer and its round time), "hl:ETH" (Hyperliquid mark), "hl:BTC*chainlink:WBTC/BTC", "unavailable" (no fresh price, usd null), "hyperliquid" (position / trade value). |
[].titlestring | Factual one-liner, e.g. "50M USDT ($50M) moved to Binance from 0x12ab…cd34 on Ethereum" (a wallet without a sourced label is named by its address). |
[].contextstring · nullable | Context from our own records, e.g. "largest USDC mint this week". |
[].fromobject · nullable | Start of the window (ISO 8601 UTC) or the sending side of a movement. |
[].from.addressstring · nullable | Wallet or contract address (EVM lowercase 0x…, or Bitcoin). |
[].from.labelstring · nullable | Label with a cited source, else null (no sourced label). |
[].from.urlstring · nullable | Explorer page. |
[].toobject · nullable | End of the window (ISO 8601 UTC) or the receiving side of a movement. |
[].to.addressstring · nullable | Wallet or contract address (EVM lowercase 0x…, or Bitcoin). |
[].to.labelstring · nullable | Display label: a public label with a cited source, else the self-chosen leaderboard name (unverified). |
[].to.urlstring · nullable | Link (absolute URL). |
[].txUrlstring · nullable | Transaction on the public block explorer of its chain. |
[].detailsobject | Readable details (chain, amount, value basis, block, venue, label source …). |
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
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.