Example 2 of 32
Label 100 addresses in one call: who are they, and are any flagged or sanctioned?
One call labels up to 100 addresses and screens them for sanctioned, exploit and phishing addresses: POST them to /labels/batch and each row comes back with its entity, wallet type and risk flag.
POST /v1/onchain/labels/batch takes the addresses in the query string, with no request body. It returns one row per input
address, in input order: entity, wallet_type, confidence, risk_flag, four 30-day activity fields, the
lower-cased wallet and found. Up to 100 addresses go in one call, and a risk_flag filter turns the same call
into a screen for flagged wallets. The full parameter list is on Batch wallet labels.
Quick answer
# entity, type and risk flag for five addresses in one call
curl -X POST -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/onchain/labels/batch?addresses=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045,0xeae7380dd4cef6fbd1144f49e4d1e6964258a4f4,0xbbbbbbbbbb9cc5e90e3b3af64bdaf62c37eeffcb,0x47666Fab8bd0Ac7003bce3f5C3585383F09486E2,0xA160cdAB225685dA1d56aa342Ad8841c3b53f291"Example response
Captured from the live API on 2026-10-24 at 17:19 UTC, the whole response.
The rows follow the input order and each echoes its wallet, lower-cased, so compare addresses case-insensitively.
risk_flag is the empty string on a clean row. The Bybit exploiter reads exploit and the Tornado Cash pool
sanctioned.
[
{
"entity": "vitalik buterin",
"wallet_type": "dex",
"confidence": "medium",
"risk_flag": "",
"net_30d_usd": -70023.25164,
"volume_30d_usd": 70046.74836,
"tx_30d": 454,
"tokens_30d_count": 157,
"wallet": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
"found": true
},
{
"entity": "wintermute",
"wallet_type": "market_maker",
"confidence": "medium",
"risk_flag": "",
"net_30d_usd": 2113236.042409,
"volume_30d_usd": 2508838843.170737,
"tx_30d": 14678,
"tokens_30d_count": 100,
"wallet": "0xeae7380dd4cef6fbd1144f49e4d1e6964258a4f4",
"found": true
},
{
"entity": "morpho",
"wallet_type": "vault",
"confidence": "high",
"risk_flag": "",
"net_30d_usd": -357800362.784802,
"volume_30d_usd": 2359366854024.6597,
"tx_30d": 409814,
"tokens_30d_count": 235,
"wallet": "0xbbbbbbbbbb9cc5e90e3b3af64bdaf62c37eeffcb",
"found": true
},
{
"entity": "bybit",
"wallet_type": "cex",
"confidence": "medium",
"risk_flag": "exploit",
"net_30d_usd": null,
"volume_30d_usd": null,
"tx_30d": null,
"tokens_30d_count": null,
"wallet": "0x47666fab8bd0ac7003bce3f5c3585383f09486e2",
"found": true
},
{
"entity": "tornadocash",
"wallet_type": "flagged",
"confidence": "medium",
"risk_flag": "sanctioned",
"net_30d_usd": null,
"volume_30d_usd": null,
"tx_30d": null,
"tokens_30d_count": null,
"wallet": "0xa160cdab225685da1d56aa342ad8841c3b53f291",
"found": true
}
]Variations
Screen a list for risk flags. Keep only the rows whose risk_flag is set, such as sanctioned or exploit.
# the flagged addresses of a list, with their flag
curl -s -X POST -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/onchain/labels/batch?addresses=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045,0x47666Fab8bd0Ac7003bce3f5C3585383F09486E2,0xA160cdAB225685dA1d56aa342Ad8841c3b53f291" \
| jq '[.[] | select((.risk_flag // "") != "") | {wallet, entity, risk_flag}]'Which source flagged it. For an Ethereum address,
/labels/{address}/provenance lists each label source's own
claim beside the consensus. On 2026-10-24 four sources named the Tornado Cash router, one of them in a blocked
category.
# every source's claim about one flagged address, plus the consensus
curl -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/onchain/labels/0xd90e2f925da726b50c4ed8d0fb90ad053324f31b/provenance"Another chain. Labels and flags are read from the chain you name only (default ethereum), so the same address
can be flagged on one chain and not on another. The 30-day fields are read for that chain too, bsc included.
# the same lookup against Base's labels
curl -X POST -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/onchain/labels/batch?chain=base&addresses=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045,0xeae7380dd4cef6fbd1144f49e4d1e6964258a4f4"More than 100 addresses. Split the list. BATCH_2 is the second hundred, joined with commas.
# addresses 101 to 200, in a second call
curl -X POST -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/onchain/labels/batch?addresses=$BATCH_2"Before you rely on it
risk_flag is what a label source said
risk_flag comes from our label sources: sanctions lists and mixer labels give sanctioned, hack reports
exploit, phishing reports phishing. It is not a live check against an official sanctions list, and a label can
outlive the listing behind it. There is no frozen-by-issuer flag: a stablecoin issuer's blacklist is not covered.
An empty risk_flag only says no source flagged the address, and found: false says we hold no label at all:
neither one clears an address.
A hacker's entity can name the victim
The Bybit exploiter row's entity is bybit: the label names the victim, and the capture shows
wallet_type: cex from before 2026-10-25. An address flagged exploit is now typed flagged instead of cex, but
the entity can still carry the victim's name until the label rebuild lands, so filter on risk_flag before you
treat a row as an exchange.
The captured 30-day fields predate the live ones
net_30d_usd, volume_30d_usd, tx_30d and tokens_30d_count used to come from an offline build that had stopped
updating: vitalik.eth and Morpho returned the same four values on 2026-09-03 and on 2026-10-24, and the Bybit and
Tornado Cash rows were null. Since 2026-10-25 they are computed live over the last 30 calendar days, the window
/wallets/{address} calls 30d, and are null only for an address with no label. The windows beyond 30 days come
from /wallets/{address}.
A rejected batch is a 400
More than 100 addresses, or none, is a 400 with a detail message and is not billed. A batch where every address
is malformed answers 200 with [], so check the length as well as the status.
Ask your agent
Connected to the Vike MCP server (https://vike.io/mcp) in Claude, ChatGPT or Cursor, ask it in plain words.
The wallet_batch_labels tool answers it, at 2 credits a call.
Label these addresses and flag any that are sanctioned or linked to an exploit: 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045, 0x47666Fab8bd0Ac7003bce3f5C3585383F09486E2