vike

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/traders

Top 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.

cURL
# 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"
windowqueryoptional
1d | 7d | 30d | all. Effective default 30d
sortqueryoptional
pnl | roi | win_rate | volume | trade_count | drawdown | account_value | long_pnl | short_pnl. Default pnl
orderqueryoptional
asc | desc. Default desc
min_tradesqueryoptional
Minimum closed trades. Floored at 3: omitting it or passing 0, 1 or 2 gives 3
min_win_ratequeryoptional
Percent, 0–100, not a fraction
min_volumequeryoptional
Minimum total volume
sizequeryoptional
Declared max 100, but clamped to 20 — asking for 100 returns 20
Example response
{
  "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:

  • size is documented as max 100 and clamped to 20. Asking for 100 returns 20.
  • min_trades is 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.

Example response
{  "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}