Trader population per chain
Population-level counts of the traders on each chain — the wallet counterpart of the chain header in /config. It is a separate call on purpose: these aggregates live in the wallet-analytics store, and folding them into the bootstrap config would put every page load behind them.
Omit chains for every chain whose wallet data is served.
Query Parameters
comma-separated chain slugs or ids; omit for every served chain
items <= 32Header Parameters
payment methods the client can use, comma-separated, case-insensitive. With x402 in the list, a spent keyless budget answers 402 with the x402 challenge instead of 429.
base64 x402 v2 payment payload for this request. A paid request skips the keyless budget and is settled only when it answers 2xx. The v1 header X-PAYMENT is accepted too.
Response Body
application/json
application/problem+json
application/problem+json
application/json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X GET "https://example.com/wallets/stats"{ "chains": [ { "chain": { "slug": "hyperliquid", "chain_id": 0 }, "wallets_total": 0, "new_wallets_24h": 0, "active_wallets_24h": 0, "human_wallets": 0, "bot_wallets": 0, "wash_traders": 0, "snipers": 0, "copy_eligible": 0, "scammers_total": 0, "scammers_24h": 0, "profitable_wallets_24h": 0, "losing_wallets_24h": 0, "realized_pnl_24h": 0.1, "volume_24h": 0.1, "trades_24h": 0, "top_gainer_24h": { "address": "string", "value": 0.1 }, "top_loser_24h": { "address": "string", "value": 0.1 }, "favorite_token_24h": { "token_address": "string", "symbol": "string", "buys": 0, "buy_usd": 0.1, "buyers": 0 } } ]}Rank traders on one chain GET
Traders ranked over a rolling window, filtered on win rate, volume, holding time, capital tier and behaviour. `exclude_bots` removes market makers as well as bots: their edge is inventory and latency rather than directional skill, so ranking them beside discretionary traders compares two different games. Sorting on `win_rate` only ranks wallets with enough rated positions for the ratio to carry information. A wallet that clearly has winning trades but reports `win_rate` 0 has too small a rated sample — read `trade_win_rate` instead, and `rated_positions` for the sample size.
Behaviour labels for many wallets POST
Batch by construction: a transaction table calls this once per page to mark robot, sniper and sandwich makers, where a per-row call would be one request per visible trade. It is the one wallet read that is a `POST`, because a list of up to 200 addresses does not belong in a query string. Addresses absent from the response carry no labels.