vike
API EndpointsHyperliquid

/leaderboard/flow-adjusted

Ranked on fills-derived realized PnL, with external flow reported beside it.

GET https://data.vike.io/v1/hyperliquid/leaderboard/flow-adjusted

Ranked on fills-derived realized PnL, with external flow reported beside it.

Truncated: traders holds 3 rows (limit=3); the first is shown in full, including the deposit and withdrawal figures and the flow_unbalanced flag described below.

cURL
# who earned the most from trading in 30 days, deposits excluded by construction
curl -s "https://data.vike.io/v1/hyperliquid/leaderboard/flow-adjusted?limit=3&window=30d" \
  -H "X-API-KEY: $VIKE_API_KEY"

# next page of the first call: NEXT is its nextCursor, passed back verbatim with the same window
curl -s "https://data.vike.io/v1/hyperliquid/leaderboard/flow-adjusted?window=30d&limit=3&cursor=$NEXT" \
  -H "X-API-KEY: $VIKE_API_KEY"

# this week's board
curl -s "https://data.vike.io/v1/hyperliquid/leaderboard/flow-adjusted?window=7d&limit=25" \
  -H "X-API-KEY: $VIKE_API_KEY"

# the all-time board, the largest page the route serves
curl -s "https://data.vike.io/v1/hyperliquid/leaderboard/flow-adjusted?window=all&limit=500" \
  -H "X-API-KEY: $VIKE_API_KEY"

# drop the wallets whose attribution is unreliable; the route reports flow_unbalanced but never filters on it
curl -s "https://data.vike.io/v1/hyperliquid/leaderboard/flow-adjusted?window=30d&limit=100" \
  -H "X-API-KEY: $VIKE_API_KEY" \
  | jq '.traders[] | select(.flow_unbalanced | not) | {wallet, rank, total_realized_pnl}'
windowqueryoptional
1d | 7d | 30d | all. Default 30d
limitqueryoptional
Default 25, max 500
cursorqueryoptional
Keyset cursor
Example response
{
  "traders": [
    {
      "wallet": "0x9bbb821a51d9c0ef24dd8592e9caad7fc469bbf2",
      "rank": 1,
      "account_value": 0.0,
      "total_realized_pnl": 2152061.802894,
      "cum_realized_pnl": 4018227.3687610077,
      "roi": 0.0,
      "pnl_pct": null,
      "total_volume": 45909810.173497,
      "total_fee": 3873.5595550000003,
      "trade_count": 10,
      "win_count": 7,
      "loss_count": 3,
      "win_rate": 0.699999988079071,
      "long_win_rate": 0.6000000238418579,
      "short_win_rate": 0.800000011920929,
      "long_pnl": 1163849.598942,
      "short_pnl": 988212.203952,
      "profit_factor": 32.784751892089844,
      "expectancy": 215206.18028939998,
      "max_drawdown_pct": 154.60000610351562,
      "current_drawdown_pct": 100.0,
      "calmar_ratio": 0.0,
      "recovery_factor": 999.0,
      "max_win_streak": 7,
      "max_loss_streak": 3,
      "avg_leverage": 0.0,
      "avg_duration_seconds": 82171,
      "size_cohort": "shrimp",
      "pnl_cohort": "3x smart",
      "pnl_cohort_tag": "consistent_winner",
      "style_cohort_tag": "whale_hunter",
      "attributed": {
        "trading_pnl_total": -225513.68282699987,
        "realized_trading_pnl": -296967.9990569999,
        "delta_unrealized_pnl": 71454.31623000004,
        "funding_paid_usd": 0.0,
        "delta_account_value": -858691.0119069999,
        "account_value_eod": 0.0,
        "active_days": 2,
        "last_day": "2026-08-24",
        "perps_trading_pnl": -225513.6828269998
      },
      "flow": {
        "deposit_usd": 0.0,
        "withdraw_usd": 0.0,
        "net_external_flow_usd": -633177.32908,
        "net_total_flow_usd": -633177.32908
      },
      "flow_unbalanced": true
    }
  ],
  "totalCount": 145165,
  "nextCursor": "eyJrIjoiZmxvd2FkanwzMGQiLCJyIjozLCJ2IjoxMTc5NzcxLjYzNzU2Mjk5OTcsInciOiIweDAwNGVkY2Q0MDM2MGUyOTNlNGNmMjYwZDJlYmRmOGM3MDc2YzFiYjgifQ",
  "ranked_by": "total_realized_pnl (fills-derived; excludes deposits by construction)"
}

An account-value delta is not a trading result: a wallet that deposits $1M and loses $50k reads as +$950k on any equity-delta ranking. The rank here comes from the sum of closed round-trip PnL, which excludes deposits by construction — there is no flow term in it to corrupt. Deposits, withdrawals and the daily attribution figures come back in the same row, so a caller can see what was excluded rather than trust that something was.

flow_unbalanced is a per-row honesty flag, not a filter

flow_unbalanced is true when the wallet had a send in the window, which is when the attributed block beside the rank is unreliable — the ledger records send one-sided (measured 2026-08-04: 1,010,263 negative rows against 835,295 positive over 30 days, netting −$1.27B, while spotTransfer, internalTransfer and subAccountTransfer each net about 0). The rank itself does not depend on attribution and is unaffected. The flag is reported and never used to filter: active traders move money constantly, and excluding them would empty the board rather than clean it.

cURL
# who earned the most from trading in 30 days, deposits excluded by constructioncurl -s "https://data.vike.io/v1/hyperliquid/leaderboard/flow-adjusted?limit=3&window=30d" \  -H "X-API-KEY: $VIKE_API_KEY"# next page of the first call: NEXT is its nextCursor, passed back verbatim with the same windowcurl -s "https://data.vike.io/v1/hyperliquid/leaderboard/flow-adjusted?window=30d&limit=3&cursor=$NEXT" \  -H "X-API-KEY: $VIKE_API_KEY"# this week's boardcurl -s "https://data.vike.io/v1/hyperliquid/leaderboard/flow-adjusted?window=7d&limit=25" \  -H "X-API-KEY: $VIKE_API_KEY"# the all-time board, the largest page the route servescurl -s "https://data.vike.io/v1/hyperliquid/leaderboard/flow-adjusted?window=all&limit=500" \  -H "X-API-KEY: $VIKE_API_KEY"# drop the wallets whose attribution is unreliable; the route reports flow_unbalanced but never filters on itcurl -s "https://data.vike.io/v1/hyperliquid/leaderboard/flow-adjusted?window=30d&limit=100" \  -H "X-API-KEY: $VIKE_API_KEY" \  | jq '.traders[] | select(.flow_unbalanced | not) | {wallet, rank, total_realized_pnl}'
Example response
{  "traders": [    {      "wallet": "0x9bbb821a51d9c0ef24dd8592e9caad7fc469bbf2",      "rank": 1,      "account_value": 0.0,      "total_realized_pnl": 2152061.802894,      "cum_realized_pnl": 4018227.3687610077,      "roi": 0.0,      "pnl_pct": null,      "total_volume": 45909810.173497,      "total_fee": 3873.5595550000003,      "trade_count": 10,      "win_count": 7,      "loss_count": 3,      "win_rate": 0.699999988079071,      "long_win_rate": 0.6000000238418579,      "short_win_rate": 0.800000011920929,      "long_pnl": 1163849.598942,      "short_pnl": 988212.203952,      "profit_factor": 32.784751892089844,      "expectancy": 215206.18028939998,      "max_drawdown_pct": 154.60000610351562,      "current_drawdown_pct": 100.0,      "calmar_ratio": 0.0,      "recovery_factor": 999.0,      "max_win_streak": 7,      "max_loss_streak": 3,      "avg_leverage": 0.0,      "avg_duration_seconds": 82171,      "size_cohort": "shrimp",      "pnl_cohort": "3x smart",      "pnl_cohort_tag": "consistent_winner",      "style_cohort_tag": "whale_hunter",      "attributed": {        "trading_pnl_total": -225513.68282699987,        "realized_trading_pnl": -296967.9990569999,        "delta_unrealized_pnl": 71454.31623000004,        "funding_paid_usd": 0.0,        "delta_account_value": -858691.0119069999,        "account_value_eod": 0.0,        "active_days": 2,        "last_day": "2026-08-24",        "perps_trading_pnl": -225513.6828269998      },      "flow": {        "deposit_usd": 0.0,        "withdraw_usd": 0.0,        "net_external_flow_usd": -633177.32908,        "net_total_flow_usd": -633177.32908      },      "flow_unbalanced": true    }  ],  "totalCount": 145165,  "nextCursor": "eyJrIjoiZmxvd2FkanwzMGQiLCJyIjozLCJ2IjoxMTc5NzcxLjYzNzU2Mjk5OTcsInciOiIweDAwNGVkY2Q0MDM2MGUyOTNlNGNmMjYwZDJlYmRmOGM3MDc2YzFiYjgifQ",  "ranked_by": "total_realized_pnl (fills-derived; excludes deposits by construction)"}