vike

Recipe 32 of 32

Which holders of a token have not moved in months? (diamond hands)

Rank a token's top 50 wallets by net inflow with /tokens/{token_address}/holders and keep the unlabelled ones whose last_active date is months old, then confirm the balance.

GET /v1/onchain/tokens/{token_address}/holders returns up to 50 wallets ranked by the USD of the token they took in minus what they sent out. Each row carries first_seen and last_active, the first and last day the wallet moved the token. An unlabelled wallet with a large net inflow and an old last_active has held without moving. The parameters are on Token holders and Wallet token balances.

Quick answer

cURL
# PEPE's top 50 accumulators, keeping the unlabelled ones that have not moved PEPE since 1 December 2025
curl -s -H "X-API-Key: $VIKE_API_KEY" \
  "https://data.vike.io/v1/onchain/tokens/0x6982508145454ce325ddbe47a25d4ec3d2311933/holders?limit=50" \
  | jq '[.[] | select(.entity == "" and .last_active < "2025-12-01")]'

Example response

Captured from the live API on 2026-10-24 at 17:19 UTC: the 5 rows the filter kept out of 50.

0xcbc9…068d took in $51.6M of PEPE, at the price of the day, in one transfer on 2024-12-13 and has not moved it since. An unlabelled row reads entity: "". The other 45 rows were labelled wallets, mostly exchanges and custodians, or unlabelled wallets that moved PEPE after the cut-off.

Example response
[
  {
    "wallet": "0xcbc9fad51b83a50dbdc058704fe1355d7b13068d",
    "net_flow_usd": 51597000.0,
    "volume_usd": 51597000.0,
    "tx_count": 1,
    "first_seen": "2024-12-13",
    "last_active": "2024-12-13",
    "entity": "",
    "wallet_type": ""
  },
  {
    "wallet": "0xd7f9f54194c633f36ccd5f3da84ad4a1c38cb2cb",
    "net_flow_usd": 17778073.676632,
    "volume_usd": 42351030.804214,
    "tx_count": 201,
    "first_seen": "2024-06-06",
    "last_active": "2025-03-31",
    "entity": "",
    "wallet_type": ""
  },
  {
    "wallet": "0xe8f2c2d63443a0e403ba35c95dafe513eedbae12",
    "net_flow_usd": 15246206.28,
    "volume_usd": 15246206.28,
    "tx_count": 1,
    "first_seen": "2024-04-04",
    "last_active": "2024-04-04",
    "entity": "",
    "wallet_type": ""
  },
  {
    "wallet": "0x4abfae6c8dc55027ee93ac335172a8028cb4f60f",
    "net_flow_usd": 12894188.832334,
    "volume_usd": 21721833.860786,
    "tx_count": 29,
    "first_seen": "2024-11-14",
    "last_active": "2025-11-06",
    "entity": "",
    "wallet_type": ""
  },
  {
    "wallet": "0x7604187ec263e980cff54d95ae682db3718f1247",
    "net_flow_usd": 12746545.522588,
    "volume_usd": 21455688.545018,
    "tx_count": 26,
    "first_seen": "2024-11-15",
    "last_active": "2025-11-06",
    "entity": "",
    "wallet_type": ""
  }
]

Variations

The whole ranking. Drop the filter to read all 50 rows with their dates.

cURL — all 50
# the full holder ranking
curl -H "X-API-Key: $VIKE_API_KEY" \
  "https://data.vike.io/v1/onchain/tokens/0x6982508145454ce325ddbe47a25d4ec3d2311933/holders?limit=50"

Confirm it still holds. The ranking is not a balance. Read the wallet's current holdings from the chain.

cURL — balance
# what the dormant wallet holds on Ethereum now
curl -H "X-API-Key: $VIKE_API_KEY" \
  "https://data.vike.io/v1/onchain/wallets/0xcbc9fad51b83a50dbdc058704fe1355d7b13068d/balances?chains=ethereum&min_usd=1000"

Who the wallet is. Label the candidates before you call them holders: an unlabelled address can still be an exchange's cold wallet.

cURL — labels
# labels for the dormant candidates
curl -X POST -H "X-API-Key: $VIKE_API_KEY" \
  "https://data.vike.io/v1/onchain/labels/batch?addresses=0xcbc9fad51b83a50dbdc058704fe1355d7b13068d,0xe8f2c2d63443a0e403ba35c95dafe513eedbae12,0xd7f9f54194c633f36ccd5f3da84ad4a1c38cb2cb"

Before you rely on it

Only the top 50 by net inflow

The route ranks wallets by USD in minus USD out at the price of each transfer, and stops at 50 rows. A long-term holder outside that top 50 is not visible here, and the USD ranking is not the balance: a wallet can rank high and hold nothing now. Confirm each candidate with /wallets/{address}/balances.

Not moved this token is not inactive

last_active is the last day the wallet moved this token, in or out, so the wallet can be busy with other tokens. The ranking reads the token's whole history and is slow: this PEPE call took 14.9 seconds.

Ask your agent

Connected to the Vike MCP server (https://vike.io/mcp) in Claude, ChatGPT or Cursor, ask it in plain words. The token_holders tool answers it, at 2 credits a call.

Ask your agent
Which of PEPE's top holders have not moved their PEPE since December 2025?
Example response
[  {    "wallet": "0xcbc9fad51b83a50dbdc058704fe1355d7b13068d",    "net_flow_usd": 51597000.0,    "volume_usd": 51597000.0,    "tx_count": 1,    "first_seen": "2024-12-13",    "last_active": "2024-12-13",    "entity": "",    "wallet_type": ""  },  {    "wallet": "0xd7f9f54194c633f36ccd5f3da84ad4a1c38cb2cb",    "net_flow_usd": 17778073.676632,    "volume_usd": 42351030.804214,    "tx_count": 201,    "first_seen": "2024-06-06",    "last_active": "2025-03-31",    "entity": "",    "wallet_type": ""  },  {    "wallet": "0xe8f2c2d63443a0e403ba35c95dafe513eedbae12",    "net_flow_usd": 15246206.28,    "volume_usd": 15246206.28,    "tx_count": 1,    "first_seen": "2024-04-04",    "last_active": "2024-04-04",    "entity": "",    "wallet_type": ""  },  {    "wallet": "0x4abfae6c8dc55027ee93ac335172a8028cb4f60f",    "net_flow_usd": 12894188.832334,    "volume_usd": 21721833.860786,    "tx_count": 29,    "first_seen": "2024-11-14",    "last_active": "2025-11-06",    "entity": "",    "wallet_type": ""  },  {    "wallet": "0x7604187ec263e980cff54d95ae682db3718f1247",    "net_flow_usd": 12746545.522588,    "volume_usd": 21455688.545018,    "tx_count": 26,    "first_seen": "2024-11-15",    "last_active": "2025-11-06",    "entity": "",    "wallet_type": ""  }]