Contents
Listed wallet detail
One listed wallet: every active listing of the address (category, source, wording, date, link), its last known balances on the scanned EVM chains (native ETH and the curated tokens, at our own prices) and its tracked movements, newest first (every token on Ethereum, Arbitrum and Base, native ETH on Ethereum, Bitcoin; within the plan history).
/api/v1/security/wallets/{address}Every keyDescription
A token outside our curated list is marked unverifiedToken and never priced. The other side of a movement keeps only its own sourced label (exchange proof of reserves, protocol docs) or none. 404 when the address has no active listing.
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 |
|---|---|
addressstring · pathrequired | The address as the source lists it (EVM 0x + 40 hex in any case, Bitcoin, Tron …). |
limitinteger | Number of movements, default 25, clamped to 1–100.1–100 · default 25 |
Response fields
Every success is { data, meta }; these are the fields of data. meta is the same on every endpoint.
| Field | Description |
|---|---|
addressstring | The address as listed. |
networkstring | Address family (evm, bitcoin, tron …). |
trackedboolean | We follow its on-chain movements. |
listings[]array of objects | Every active listing of the address, oldest first. |
listings[].category"sanctioned" | "stolen_funds" | "exploit" | "drainer" | "phishing" | "other" | The source’s classification: sanctioned (OFAC), stolen_funds, exploit, drainer, phishing, other. |
listings[].source"ofac_sdn" | "fbi_ic3" | "incident" | ofac_sdn (OFAC SDN list), fbi_ic3 (FBI / IC3 announcement) or incident (official post-mortem). |
listings[].sourceLabelstring | How the source is named, e.g. "OFAC SDN list", "FBI (IC3 PSA I-022625-PSA)". |
listings[].sourceUrlstring | Link to the listing at the source. |
listings[].sourceDatestring · nullable | Date of the listing (YYYY-MM-DD): the publication for FBI and post-mortems, the first SDN list that contained the address for OFAC. |
listings[].listingstring | The one claim, in the source’s terms: "Listed as <category> by <source>, <date>". |
listings[].detailstring · nullable | The source’s own wording (FBI quote, OFAC sanctions programs, role in the post-mortem). Never a name. |
listings[].assetsstring · nullable | OFAC: the currency tickers of the address fields, e.g. "ETH, USDT". |
listings[].incidentIdinteger · nullable | Curated incident the listing belongs to (/security/incidents/<id>). |
listings[].firstSeenstring (ISO 8601) | When we first imported the listing. |
balances[]array of objects | Last known balances per scanned EVM chain and the Hyperliquid account of the same key. |
balances[].chainstring | ethereum | arbitrum | base | hyperliquid. |
balances[].checkedAtstring (ISO 8601) | When the balances were read. |
balances[].balancesobject | Units per asset (native ETH and the curated tokens with a balance; on hyperliquid the account value in USD as accountValue). |
balances[].usdnumber · nullable | Their value at our prices (USD). |
movements[]array of objects | Tracked movements, newest first, within the plan history. |
movements[].idinteger | Movement id. |
movements[].tsstring (ISO 8601) | Block time. |
movements[].chainstring | ethereum | arbitrum | base | bitcoin. |
movements[].typestring | transfer | exchange_in | exchange_out | exchange_exchange | mint | burn | bridge | dex_buy | dex_sell. |
movements[].assetstring | Asset symbol; "(unverified)" after a symbol outside our curated token list (the token’s own claim). |
movements[].amountnumber | Units of the asset. |
movements[].usdnumber · nullable | Value at our price; null = price unavailable (always for unverified tokens) (USD). |
movements[].priceSourcestring · nullable | Basis of usd, as in /movements. |
movements[].titlestring | Factual one-liner with the short source, e.g. "Listed wallet (OFAC) moved 10 ETH ($30K) to Binance on Ethereum". |
movements[].listedAddressstring | The listed address of the movement. |
movements[].listedSide"from" | "to" | Which side of the movement is the listed address. |
movements[].fromobject | Start of the window (ISO 8601 UTC) or the sending side of a movement. |
movements[].from.addressstring · nullable | Wallet or contract address (EVM lowercase 0x…, or Bitcoin). |
movements[].from.labelstring · nullable | Label with a cited source (exchange proof of reserves, protocol docs), else null. Never a risk label. |
movements[].from.urlstring · nullable | Explorer page. |
movements[].toobject | End of the window (ISO 8601 UTC) or the receiving side of a movement. |
movements[].to.addressstring · nullable | Wallet or contract address (EVM lowercase 0x…, or Bitcoin). |
movements[].to.labelstring · nullable | Label with a cited source, else null. Never a risk label. |
movements[].to.urlstring · nullable | Explorer page. |
movements[].unverifiedTokenboolean | Token outside our curated list: never priced. |
movements[].blockinteger | Block height. |
movements[].txstring | Transaction hash. |
movements[].txUrlstring · nullable | Transaction on the official explorer. |
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.