/wallets/{address}/trace
Follow the money outward — expand at each hop to the top counterparties by USD volume, up to a chosen depth.
GET https://data.vike.io/v1/onchain/wallets/{address}/traceFollow the money outward. Starting at address, expand at each hop to the top width counterparties
by USD volume, up to depth hops. The response shape is
{root, depth, width, nodes, edges, stats}, where nodes carry
{address, depth, label, wallet_type, total_volume_usd} and edges carry
{from, to, volume_usd, out_usd, in_usd, tx_count}, one edge per pair of wallets.
# follow an exchange wallet's money two hops out, three counterparties per hop, over 30 days
curl -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/onchain/wallets/0x28C6c06298d514Db089934071355E5743bf21d60/trace?depth=2&width=3&window=30d"
# the defaults: 2 hops, 5 counterparties per hop, 30d, transfers of at least 10,000 USD
curl -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/onchain/wallets/0x28C6c06298d514Db089934071355E5743bf21d60/trace"
# one hop, as wide as the route goes: the ten biggest counterparties by USD volume
curl -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/onchain/wallets/0x28C6c06298d514Db089934071355E5743bf21d60/trace?depth=1&width=10"
# include small transfers: min_usd=0 selects the 10,000 default, so pass a small positive floor instead
curl -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/onchain/wallets/0x28C6c06298d514Db089934071355E5743bf21d60/trace?depth=1&width=5&min_usd=0.01"
# a deeper, narrower graph over a short window, to see where this week's money went (cost grows with depth times width)
curl -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/onchain/wallets/0x28C6c06298d514Db089934071355E5743bf21d60/trace?depth=4&width=3&window=7d"
# who the graph reached, with their labels and distance from the root
curl -s -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/onchain/wallets/0x28C6c06298d514Db089934071355E5743bf21d60/trace?depth=2&width=3&window=30d" \
| jq '[.nodes[] | {address, depth, label, wallet_type}]'
# the same trace on BSC
curl -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/onchain/wallets/0x28C6c06298d514Db089934071355E5743bf21d60/trace?chain=bsc&depth=2&width=3&window=30d"addresspathrequiredchainqueryoptionalethereum | bsc | base. Default ethereumdepthqueryoptionalwidthqueryoptionalwindowqueryoptional24h | 7d | 30d | 90d | all. Default 30dmin_usdqueryoptionalA response for the Binance 14 hot wallet, captured 2026-10-19. The full response carries 7 nodes
and 9 edges; the capture carries the root plus its three depth-1 nodes, the first three edges, and
the closing stats block verbatim.
{
"root": "0x28C6c06298d514Db089934071355E5743bf21d60",
"depth": 2,
"width": 3,
"window": "30d",
"min_usd": 10000.0,
"nodes": [
{
"address": "0x28c6c06298d514db089934071355e5743bf21d60",
"depth": 0,
"total_volume_usd": 17594369380.10467,
"label": "binance",
"wallet_type": "cex"
},
{
"address": "0xeae7380dd4cef6fbd1144f49e4d1e6964258a4f4",
"depth": 1,
"total_volume_usd": 9591810600.94734,
"label": "wintermute",
"wallet_type": "market_maker"
},
{
"address": "0x21a31ee1afc51d94c2efccaa2092ad1028285549",
"depth": 1,
"total_volume_usd": 6112217977.436004,
"label": "binance",
"wallet_type": "cex"
},
{
"address": "0xdfd5293d8e347dfe59e90efd55b2956a1343963d",
"depth": 1,
"total_volume_usd": 5631275918.408897,
"label": "binance",
"wallet_type": "cex"
}
],
"edges": [
{
"from": "0x28c6c06298d514db089934071355e5743bf21d60",
"to": "0xeae7380dd4cef6fbd1144f49e4d1e6964258a4f4",
"volume_usd": 6993361528.77,
"out_usd": 0.0,
"in_usd": 6993361528.77,
"tx_count": 8368
},
{
"from": "0x28c6c06298d514db089934071355e5743bf21d60",
"to": "0x21a31ee1afc51d94c2efccaa2092ad1028285549",
"volume_usd": 5489601909.44,
"out_usd": 5489601909.44,
"in_usd": 0.0,
"tx_count": 2658
},
{
"from": "0x28c6c06298d514db089934071355e5743bf21d60",
"to": "0xdfd5293d8e347dfe59e90efd55b2956a1343963d",
"volume_usd": 5111405941.9,
"out_usd": 5111405941.9,
"in_usd": 0.0,
"tx_count": 2700
}
],
"stats": {
"node_count": 7,
"edge_count": 9,
"max_depth_reached": 2
}
}What that summary shape does not tell you, all visible above:
- The echoed request is part of the response.
depth,width,windowand the resolvedmin_usdcome back at the top level, so a response records the floor it was taken under — useful given that omittingmin_usdsilently selects 10,000 rather than 0. fromis the wallet expanded first, not the sender.out_usdflowed fromfromtoto,in_usdfromtotofrom, andvolume_usdis both. The first captured edge isin_usdonly: wintermute sent Binance 14 $6.99B and nothing went back, so "trace" is not outbound-only despite the name.- One edge per pair of wallets. Two wallets that each rank the other among their top
widthshare one edge, sostats.edge_countcounts relationships. Until 2026-10-19 such a pair came back twice, mirrored — this request then read 12 edges for 9 relationships. total_volume_usdis the node's volume inside this graph, the sum of its edges here, not its whole activity: the root's 17.59B is its three edges, and wintermute's 9.59B adds the two edges of its own expansion to the one from the root.depth=2, width=3yielded 7 nodes, not the 1 + 3 + 9 = 13 the arithmetic suggests. A wallet is expanded once, however many neighbours name it, and only counterparties that clearmin_usdcount; readstats.node_countrather than predicting it.max_depth_reachedtells you whether the graph ran out beforedepthdid.
A misspelled window falls back silently; a misspelled chain does not
A misspelled window (or one the route does not take, such as 180d) reads 30 days with a
200 and no warning, so a typo returns plausible data for the wrong question. A misspelled
chain is a 400 (chain 'x' not supported (use ethereum, bsc, or base)). Spell window from the
enum above.
Cost is the product of depth and width, so this is the heaviest route in the namespace; the MCP
tool prices it at 4 credits against a namespace median of 2.