vike

Token screener

Find tokens by activity within a window — rank by volume, net inflow, holder count or smart-money inflow.

GET https://data.vike.io/v1/onchain/tokens/screener

Find tokens by activity within a window — rank by volume, net inflow, holder count or smart-money inflow, with floors on volume and holder count and a smart-money-only toggle.

symbol and name come from our token registry, or are null

Each row's symbol and name are read from the tokens we map: on 2026-10-24 the same screen returned USDC / USD Coin, WBTC and USDT. A token we do not map, and the native coin, comes back with both null, so key your own data on token_address, never on symbol. A symbol can also repeat across chains with a different address.

net_flow_usd is supply minted minus burned, not buying pressure

Every transfer between two wallets counts once as inflow and once as outflow, and transfers from or to the zero address count on neither side. So across all wallets a token's net_flow_usd is the USD value minted on the chain in the window minus the value burned there. A 0.0, as for WBTC and WETH in the example, means no transfer from or to the zero address was recorded in the window, not a quiet token. volume_usd is in_usd plus out_usd, so it counts every transfer twice. With smart_money_only=true or sort=smart_inflow, the figures are the cohort's own: what its wallets received minus what they sent.

A window is whole calendar dates

window counts UTC dates back from today: 24h is yesterday and today, so up to about 48 hours late in the day, and 7d is today plus the 7 dates before it.

The native coin ranks as the zero address

ETH is screened too, as token_address 0x0000000000000000000000000000000000000000. On 2026-10-18 it was the first row for sort=smart_inflow&window=7d. It is not a contract, and /tokens/{token_address}/transfers returns no buyers for it, so skip it before you drill into a screened token.

cURL
# the default screen: the busiest tokens by volume, three of them, over the 24h window (a window is counted in calendar dates, so 24h spans yesterday and today: up to about 48 hours)
curl -H "X-API-Key: $VIKE_API_KEY" \
  "https://data.vike.io/v1/onchain/tokens/screener?limit=3&window=24h"

# which tokens took the biggest net inflow over 7d, largest first (net_flow_usd is minted minus burned, so 0 means neither happened)
curl -H "X-API-Key: $VIKE_API_KEY" \
  "https://data.vike.io/v1/onchain/tokens/screener?sort=net_inflow&window=7d&limit=20"

# the same ranking counting only the smart-money cohort's flow
curl -H "X-API-Key: $VIKE_API_KEY" \
  "https://data.vike.io/v1/onchain/tokens/screener?sort=smart_inflow&window=7d&limit=20"

# volume among smart-money wallets only, the cohort filter without changing the sort
curl -H "X-API-Key: $VIKE_API_KEY" \
  "https://data.vike.io/v1/onchain/tokens/screener?smart_money_only=true&sort=volume&window=30d&limit=20"

# drop thin tokens: at least 1,000,000 USD of volume and 500 distinct wallets active in the window, ranked by wallet count
curl -H "X-API-Key: $VIKE_API_KEY" \
  "https://data.vike.io/v1/onchain/tokens/screener?sort=holders&min_volume_usd=1000000&min_holders=500&window=7d&limit=25"

# the same screen on BSC
curl -H "X-API-Key: $VIKE_API_KEY" \
  "https://data.vike.io/v1/onchain/tokens/screener?chain=bsc&sort=volume&window=24h&limit=10"

# the widest screen the route serves: limit=500 is accepted and applied as 100
curl -H "X-API-Key: $VIKE_API_KEY" \
  "https://data.vike.io/v1/onchain/tokens/screener?sort=volume&window=90d&limit=500"
chainqueryoptional
ethereum | bsc | base | hyperevm. Default ethereum
windowqueryoptional
24h | 7d | 30d | 90d. Default 24h
sortqueryoptional
volume | net_inflow | holders | smart_inflow. Default volume. smart_inflow is ethereum only
min_volume_usdqueryoptional
Drop tokens below this window volume
min_holdersqueryoptional
Drop tokens below this holder count
smart_money_onlyqueryoptional
Boolean. Restrict to smart-money cohort flows. ethereum only: any other chain is a 400
limitqueryoptional
Route default 50; applied cap 100

The complete response for limit=3, captured 2026-09-03, is a bare array. It predates the registry names, so symbol is empty and name is null on every row; these three tokens now come back named.

Example response
[
  {
    "token_address": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
    "symbol": "",
    "name": null,
    "volume_usd": 137340073415.62,
    "net_flow_usd": -36603751.18,
    "in_usd": 68651734832.22,
    "out_usd": 68688338583.4,
    "unique_holders": 262663,
    "tx_count": 1706155
  },
  {
    "token_address": "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599",
    "symbol": "",
    "name": null,
    "volume_usd": 127606890479.48,
    "net_flow_usd": 0.0,
    "in_usd": 63803445239.74,
    "out_usd": 63803445239.74,
    "unique_holders": 2785,
    "tx_count": 72340
  },
  {
    "token_address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
    "symbol": "",
    "name": null,
    "volume_usd": 107747906503.82,
    "net_flow_usd": 0.0,
    "in_usd": 53873953251.91,
    "out_usd": 53873953251.91,
    "unique_holders": 17781,
    "tx_count": 775235
  }
]
Example response
[  {    "token_address": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",    "symbol": "",    "name": null,    "volume_usd": 137340073415.62,    "net_flow_usd": -36603751.18,    "in_usd": 68651734832.22,    "out_usd": 68688338583.4,    "unique_holders": 262663,    "tx_count": 1706155  },  {    "token_address": "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599",    "symbol": "",    "name": null,    "volume_usd": 127606890479.48,    "net_flow_usd": 0.0,    "in_usd": 63803445239.74,    "out_usd": 63803445239.74,    "unique_holders": 2785,    "tx_count": 72340  },  {    "token_address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",    "symbol": "",    "name": null,    "volume_usd": 107747906503.82,    "net_flow_usd": 0.0,    "in_usd": 53873953251.91,    "out_usd": 53873953251.91,    "unique_holders": 17781,    "tx_count": 775235  }]