vike
API EndpointsHyperliquid

/hype/holders

The HYPE holder leaderboard — spot balance plus staked, per wallet.

GET https://data.vike.io/v1/hyperliquid/hype/holders

The HYPE holder leaderboard — spot balance plus staked, per wallet. A wallet appearing in only one of the two sources is still a holder, so the two are unioned rather than joined.

cURL
# the biggest HYPE holders, spot plus staked
curl -s "https://data.vike.io/v1/hyperliquid/hype/holders?limit=3" \
  -H "X-API-KEY: $VIKE_API_KEY"

# the board from the small end: rank counts in the requested direction, so 1 is the smallest
curl -s "https://data.vike.io/v1/hyperliquid/hype/holders?order=asc&limit=100" \
  -H "X-API-KEY: $VIKE_API_KEY"

# the largest page the route serves
curl -s "https://data.vike.io/v1/hyperliquid/hype/holders?limit=500" \
  -H "X-API-KEY: $VIKE_API_KEY"

# next page: NEXT is the previous response's nextCursor, passed back verbatim
curl -s "https://data.vike.io/v1/hyperliquid/hype/holders?limit=500&cursor=$NEXT" \
  -H "X-API-KEY: $VIKE_API_KEY"

# concentration: the share of the page's HYPE held by its ten largest holders
curl -s "https://data.vike.io/v1/hyperliquid/hype/holders?limit=100" \
  -H "X-API-KEY: $VIKE_API_KEY" \
  | jq '.holders | (map(.total_amount) | add) as $all | ((.[:10] | map(.total_amount) | add) / $all)'

# which large holders are also top realized-PnL traders; pnl_cohort is resolved at query time, so it is today's label
curl -s "https://data.vike.io/v1/hyperliquid/hype/holders?limit=100" \
  -H "X-API-KEY: $VIKE_API_KEY" \
  | jq '.holders[] | select((.pnl_cohort // "") | test("smart")) | {wallet, rank, total_amount, pnl_cohort}'
orderqueryoptional
asc | desc. Default desc
limitqueryoptional
Default 100, max 500
cursorqueryoptional
Keyset cursor
Example response
{
  "holders": [
    {
      "wallet": "0x43e9abea1910387c4292bca4b94de81462f8a251",
      "rank": 1,
      "spot_amount": 3.00327328,
      "spot_amount_usd": 246.15128130208,
      "staked_amount": 241107400.82591507,
      "staked_amount_usd": 19761403679.092823,
      "total_amount": 241107403.82918835,
      "total_amount_usd": 19761403925.244106,
      "account_value": 0.0,
      "size_cohort": null,
      "pnl_cohort": "unknown"
    },
    {
      "wallet": "0xd57ecca444a9acb7208d286be439de12dd09de5d",
      "rank": 2,
      "spot_amount": 4.4E-7,
      "spot_amount_usd": 0.00003606284,
      "staked_amount": 60365562.87615384,
      "staked_amount_usd": 4947621898.892445,
      "total_amount": 60365562.87615428,
      "total_amount_usd": 4947621898.892481,
      "account_value": 0.0,
      "size_cohort": null,
      "pnl_cohort": "unknown"
    },
    {
      "wallet": "0x2222222222222222222222222222222222222222",
      "rank": 3,
      "spot_amount": 54535484.50059421,
      "spot_amount_usd": 4469782845.153202,
      "staked_amount": 0.0,
      "staked_amount_usd": 0.0,
      "total_amount": 54535484.50059421,
      "total_amount_usd": 4469782845.153202,
      "account_value": 0.0,
      "size_cohort": null,
      "pnl_cohort": "unknown"
    }
  ],
  "hype_price_usd": 81.961,
  "label_basis": "current",
  "label_computed": {
    "grading": "realized",
    "label_basis": "current",
    "when": "at query time",
    "lookahead": false,
    "source": "live wallet realized-PnL ladder",
    "detail": "Balances are last-known FINAL state and the label is resolved now: row and label are both 'now'. There is no time axis here, so a current label cannot contaminate an earlier row — the lookahead hazard the liquidation listing declares does not exist on this shape.",
    "caveat": "Balances are last-known, not simultaneous: each wallet carries whatever its most recent poll saw, so a stale balance can sit beside a fresh label."
  },
  "nextCursor": "eyJyYW5rIjozLCJ0b3RhbCI6NTQ1MzU0ODQuNTAwNTk0MjEsInciOiIweDIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIifQ"
}

rank is position in the requested ordering: 1 is the largest holder under order=desc and the smallest under order=asc.

Balances are last-known and the USD column is not

The balance columns and the USD column are not equally fresh. The USD figure applies a single current HYPE price to every row rather than each row's own recorded mark_price — a wallet last polled in June would otherwise carry a June price and the column would be non-comparable row to row. The balance itself is still whatever was last seen, so a stale balance can sit beside a fresh price. Staked balance is amount_delegated only; pending_rewards is excluded because it is 0 across the whole table today, and folding it in would silently change the definition the day it stops being 0.

pnl_cohort here is a current label, which is right for a leaderboard: Label basis.

cURL
# the biggest HYPE holders, spot plus stakedcurl -s "https://data.vike.io/v1/hyperliquid/hype/holders?limit=3" \  -H "X-API-KEY: $VIKE_API_KEY"# the board from the small end: rank counts in the requested direction, so 1 is the smallestcurl -s "https://data.vike.io/v1/hyperliquid/hype/holders?order=asc&limit=100" \  -H "X-API-KEY: $VIKE_API_KEY"# the largest page the route servescurl -s "https://data.vike.io/v1/hyperliquid/hype/holders?limit=500" \  -H "X-API-KEY: $VIKE_API_KEY"# next page: NEXT is the previous response's nextCursor, passed back verbatimcurl -s "https://data.vike.io/v1/hyperliquid/hype/holders?limit=500&cursor=$NEXT" \  -H "X-API-KEY: $VIKE_API_KEY"# concentration: the share of the page's HYPE held by its ten largest holderscurl -s "https://data.vike.io/v1/hyperliquid/hype/holders?limit=100" \  -H "X-API-KEY: $VIKE_API_KEY" \  | jq '.holders | (map(.total_amount) | add) as $all | ((.[:10] | map(.total_amount) | add) / $all)'# which large holders are also top realized-PnL traders; pnl_cohort is resolved at query time, so it is today's labelcurl -s "https://data.vike.io/v1/hyperliquid/hype/holders?limit=100" \  -H "X-API-KEY: $VIKE_API_KEY" \  | jq '.holders[] | select((.pnl_cohort // "") | test("smart")) | {wallet, rank, total_amount, pnl_cohort}'
Example response
{  "holders": [    {      "wallet": "0x43e9abea1910387c4292bca4b94de81462f8a251",      "rank": 1,      "spot_amount": 3.00327328,      "spot_amount_usd": 246.15128130208,      "staked_amount": 241107400.82591507,      "staked_amount_usd": 19761403679.092823,      "total_amount": 241107403.82918835,      "total_amount_usd": 19761403925.244106,      "account_value": 0.0,      "size_cohort": null,      "pnl_cohort": "unknown"    },    {      "wallet": "0xd57ecca444a9acb7208d286be439de12dd09de5d",      "rank": 2,      "spot_amount": 4.4E-7,      "spot_amount_usd": 0.00003606284,      "staked_amount": 60365562.87615384,      "staked_amount_usd": 4947621898.892445,      "total_amount": 60365562.87615428,      "total_amount_usd": 4947621898.892481,      "account_value": 0.0,      "size_cohort": null,      "pnl_cohort": "unknown"    },    {      "wallet": "0x2222222222222222222222222222222222222222",      "rank": 3,      "spot_amount": 54535484.50059421,      "spot_amount_usd": 4469782845.153202,      "staked_amount": 0.0,      "staked_amount_usd": 0.0,      "total_amount": 54535484.50059421,      "total_amount_usd": 4469782845.153202,      "account_value": 0.0,      "size_cohort": null,      "pnl_cohort": "unknown"    }  ],  "hype_price_usd": 81.961,  "label_basis": "current",  "label_computed": {    "grading": "realized",    "label_basis": "current",    "when": "at query time",    "lookahead": false,    "source": "live wallet realized-PnL ladder",    "detail": "Balances are last-known FINAL state and the label is resolved now: row and label are both 'now'. There is no time axis here, so a current label cannot contaminate an earlier row — the lookahead hazard the liquidation listing declares does not exist on this shape.",    "caveat": "Balances are last-known, not simultaneous: each wallet carries whatever its most recent poll saw, so a stale balance can sit beside a fresh label."  },  "nextCursor": "eyJyYW5rIjozLCJ0b3RhbCI6NTQ1MzU0ODQuNTAwNTk0MjEsInciOiIweDIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIifQ"}