vike
API EndpointsHyperliquid

/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": "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:

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

cURL
# the 30-day top traders by realized PnLcurl -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 /leaderboardcurl -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 todaycurl -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 traderscurl -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 lossescurl -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 /leaderboardcurl -s "https://data.vike.io/v1/hyperliquid/leaderboard?window=30d&limit=100" \  -H "X-API-KEY: $VIKE_API_KEY"
Example response
{  "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}