Top traders
Top HL perp traders by the requested metric over a window — the same implementation as the hl_perp_top_traders MCP tool.
GET https://data.vike.io/v1/hyperliquid/tradersTop HL perp traders by the requested metric over a window. Runs the same implementation as the
hl_perp_top_traders tool on the Data MCP server, deliberately: a second ranking that
disagreed with the one the assistant quotes would be worse than a near-duplicate route.
/leaderboard is the richer, cursor-paged version.
A wallet's trade_count here is not its count on /trades/summary
This route counts only completed round trips, filed under the UTC day the position opened:
window=30d is today plus the previous 30 calendar days. A position still open, or one opened
before the window and closed inside it, is not counted.
/wallets/{address}/trades/summary
counts both. On 2026-10-18 the top wallet read 364 trades and $4.19M here against 445 trades and
$8.44M there, and the difference reconciles exactly: 47 open trades carrying $5.06M of PnL already
realised, and 42 trades opened before the window.
# the 30-day top traders by realized PnL
curl -s "https://data.vike.io/v1/hyperliquid/traders?size=3&window=30d" \
-H "X-API-KEY: $VIKE_API_KEY"
# consistent winners: min_win_rate is a percent here (60 is 60%), unlike /leaderboard
curl -s "https://data.vike.io/v1/hyperliquid/traders?sort=win_rate&min_trades=50&min_win_rate=60&size=20" \
-H "X-API-KEY: $VIKE_API_KEY"
# who is winning today
curl -s "https://data.vike.io/v1/hyperliquid/traders?window=1d&sort=pnl&size=10" \
-H "X-API-KEY: $VIKE_API_KEY"
# the best long-side traders
curl -s "https://data.vike.io/v1/hyperliquid/traders?sort=long_pnl&size=10" \
-H "X-API-KEY: $VIKE_API_KEY"
# the other end: the biggest realized losses
curl -s "https://data.vike.io/v1/hyperliquid/traders?sort=pnl&order=asc&size=10" \
-H "X-API-KEY: $VIKE_API_KEY"
# this route returns one page of at most 20 and has no cursor: for a deeper board use /leaderboard
curl -s "https://data.vike.io/v1/hyperliquid/leaderboard?window=30d&limit=100" \
-H "X-API-KEY: $VIKE_API_KEY"windowqueryoptional1d | 7d | 30d | all. Effective default 30dsortqueryoptionalpnl | roi | win_rate | volume | trade_count | drawdown | account_value | long_pnl | short_pnl. Default pnlorderqueryoptionalasc | desc. Default descmin_tradesqueryoptionalmin_win_ratequeryoptionalmin_volumequeryoptionalsizequeryoptional{
"traders": [
{
"address": "0x469e9a7f624b04c24f0e64edf8d8a277e6bf58a5",
"total_realized_pnl": 11019957.254960999,
"roi_pct": 171.466,
"win_rate_pct": 68.0,
"long_win_rate_pct": 67.65,
"short_win_rate_pct": 68.75,
"win_count": 34,
"loss_count": 16,
"trade_count": 50,
"total_volume": 2713401666.424169,
"long_pnl": 2312550.511984,
"short_pnl": 8707406.742976999,
"max_drawdown_pct": 94.6,
"account_value": 6426914.867144,
"avg_leverage": 0.0
},
{
"address": "0x020ca66c30bec2c4fe3861a94e4db4a498a35872",
"total_realized_pnl": 10370849.040764,
"roi_pct": 8509.784,
"win_rate_pct": 52.63,
"long_win_rate_pct": 61.29,
"short_win_rate_pct": 14.29,
"win_count": 20,
"loss_count": 18,
"trade_count": 38,
"total_volume": 3253204219.260309,
"long_pnl": 10933293.431233,
"short_pnl": -562444.390469,
"max_drawdown_pct": 100.0,
"account_value": 121869.70377,
"avg_leverage": 0.0
},
{
"address": "0xf29c6bc1147a841519b382459a6d7a373c6b9971",
"total_realized_pnl": 5770041.65717683,
"roi_pct": 730.578,
"win_rate_pct": 52.08,
"long_win_rate_pct": 55.0,
"short_win_rate_pct": 37.5,
"win_count": 25,
"loss_count": 23,
"trade_count": 48,
"total_volume": 318162641.30574703,
"long_pnl": 5443972.279344831,
"short_pnl": 326069.377832,
"max_drawdown_pct": 98.7,
"account_value": 789791.841119,
"avg_leverage": 0.0
}
],
"total": 31076
}Units: roi_pct is the window's realized PnL divided by the wallet's current account value, in percent
(12.5 is 12.5%). max_drawdown_pct is account-level and all-time, not per window, also in percent;
it is null when the wallet has too little equity history to say. A window is what was realized in it —
the trades closed in the current UTC day and the 1, 7, 30 or 365 days before it.
Two bounds differ from what the parameter table declares
Both bounds are applied silently:
sizeis documented as max 100 and clamped to 20. Asking for 100 returns 20.min_tradesis floored at 3. Omitting it, or passing 0, 1 or 2, all give 3.
An unrecognised sort is not a 400 here
An unrecognised sort falls back to the default PnL ranking silently,
so a typo returns a correct-looking answer sorted by something you did not ask for.
/leaderboard rejects the same mistake outright — the
two routes disagree.
An omitted string parameter and an empty one (&sort=) are treated identically: both fall through
to the default in the table above rather than being rejected.
Find a position
"Who else is in this trade" — open positions matching a coin/side/leverage/entry profile, the reverse lookup from a shared position card.
Leaderboard
The trader leaderboard carrying the full risk-metric set — drawdown, Calmar, recovery factor, profit factor, expectancy and streaks beside PnL.