/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": "0x020ca66c30bec2c4fe3861a94e4db4a498a35872",
"total_realized_pnl": 771490.2187940001,
"roi_pct": 1752.226,
"win_rate_pct": 67.88,
"long_win_rate_pct": 72.16,
"short_win_rate_pct": 61.76,
"win_count": 112,
"loss_count": 53,
"trade_count": 165,
"total_volume": 132982230.79802103,
"long_pnl": 569640.7646920001,
"short_pnl": 201849.454102,
"max_drawdown_pct": 10000.0,
"account_value": 4402914.84891,
"avg_leverage": 0.0
},
{
"address": "0x25773676902085225ae5751075e4161369334897",
"total_realized_pnl": 720180.041582607,
"roi_pct": 4309.738,
"win_rate_pct": 52.71,
"long_win_rate_pct": 52.63,
"short_win_rate_pct": 52.78,
"win_count": 13157,
"loss_count": 11805,
"trade_count": 24962,
"total_volume": 2447047515.9331417,
"long_pnl": 391309.8679779798,
"short_pnl": 328870.17360462697,
"max_drawdown_pct": 10000.0,
"account_value": 1671052.77246,
"avg_leverage": 0.0
},
{
"address": "0xfc27136e42af1732ddc9ce2605ea9bff1b959d9d",
"total_realized_pnl": 449283.75011699996,
"roi_pct": 261.879,
"win_rate_pct": 50.26,
"long_win_rate_pct": 49.96,
"short_win_rate_pct": 50.54,
"win_count": 2549,
"loss_count": 2523,
"trade_count": 5072,
"total_volume": 356717539.01556593,
"long_pnl": 455601.4763099999,
"short_pnl": -6317.726193000033,
"max_drawdown_pct": 10000.0,
"account_value": 17156179.333347,
"avg_leverage": 0.0
}
],
"total": 18587
}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.
/positions/match
"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.