vike
API EndpointsOn-chain

/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}/trace

Follow 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.

cURL
# 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"
addresspathrequired
Root wallet to trace from
chainqueryoptional
ethereum | bsc | base. Default ethereum
depthqueryoptional
Hops to follow. Default 2, clamped to 1–5
widthqueryoptional
Top N counterparties per hop. Default 5, clamped to 1–10
windowqueryoptional
24h | 7d | 30d | 90d | all. Default 30d
min_usdqueryoptional
Minimum USD per transfer to follow. Default 10,000

A 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.

Example response
{
  "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, window and the resolved min_usd come back at the top level, so a response records the floor it was taken under — useful given that omitting min_usd silently selects 10,000 rather than 0.
  • from is the wallet expanded first, not the sender. out_usd flowed from from to to, in_usd from to to from, and volume_usd is both. The first captured edge is in_usd only: 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 width share one edge, so stats.edge_count counts relationships. Until 2026-10-19 such a pair came back twice, mirrored — this request then read 12 edges for 9 relationships.
  • total_volume_usd is 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=3 yielded 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 clear min_usd count; read stats.node_count rather than predicting it. max_depth_reached tells you whether the graph ran out before depth did.

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.

cURL
# follow an exchange wallet's money two hops out, three counterparties per hop, over 30 dayscurl -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 USDcurl -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 volumecurl -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 insteadcurl -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 rootcurl -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 BSCcurl -H "X-API-Key: $VIKE_API_KEY" \  "https://data.vike.io/v1/onchain/wallets/0x28C6c06298d514Db089934071355E5743bf21d60/trace?chain=bsc&depth=2&width=3&window=30d"
Example response
{  "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  }}