Contents
Trader leaderboard
Trader leaderboard from the official Hyperliquid leaderboard (PnL, ROI and volume of day / week / month / all-time; PnL is the change of the account with its sub-accounts and spot balances, so deposits and withdrawals do not count) plus what we observed: win rate and holding time from our position polls, max drawdown and Sharpe from Hyperliquid portfolio history (top traders), style tags and cohorts.
Description
Only single trading accounts are listed (no vaults, dust or accounts without trading; ROI / Sharpe / drawdown sorts need more, rules says what applies). Names are self-chosen unless labelSource is a URL. Free keys: the top 100 of any sort with every column (full: false: no search, style filter or paging).
Who can call it
Available with every key and keyless (X-Blockmetric-Access: public). Keys of Free accounts get free-tier data (real-time feeds, 30 days of history, heatmap over time for every coin over the last 24 hours, liquidation levels now for every coin, the same as the free web plan); Pro and Desk keys the data of their plan; API Dev / API Pro raise the limits.
- No key
- 24 h
- Free
- 30 days
- Pro
- 365 days
- Desk
- 1095 days
- API Dev
- 365 days
- API Pro
- 1095 days
History window per plan. Limits: Authentication & limits.
Parameters
| Parameter | Description |
|---|---|
sortstring | pnl_day | pnl_week | pnl_month (default) | pnl_all | roi_week | roi_month | roi_all | account_value | vlm_month | sharpe | drawdown (smallest first).one of pnl_day, pnl_week, pnl_month, pnl_all, roi_week, roi_month, roi_all, account_value, vlm_month, sharpe, drawdown · default pnl_month |
searchstring | Address prefix (0x…) or part of a displayed name (paid plans). |
stylestring | scalper | swing | position | high_turnover | high_leverage | mostly_long | mostly_short (paid plans).one of scalper, swing, position, high_turnover, high_leverage, mostly_long, mostly_short |
minAccountValuenumber | Minimum account value in USD (paid plans).≥ 0 · default 0 |
limitinteger | Number of items, default 50, clamped to 1–500.1–500 · default 50 |
cursorstring | Next page: the value of meta.nextCursor from the previous response (keep the other parameters unchanged). Cursors are signed: an edited cursor answers 400; paging stops at the plan history. |
fieldsstring | Comma-separated fields of every data.rows item to return, e.g. rank,address,pnl,roi (case-insensitive). All other fields are left out, so large lists get much smaller; an unknown name answers 400 with the list of fields. Default: every field. |
formatstring | json (default: the { data, meta } envelope) | csv (the rows with a header line; nested values as JSON text) | ndjson (one JSON object per row and line). csv and ndjson carry the meta block in headers: Link rel="next" and X-Blockmetric-Next-Cursor (next page), X-Blockmetric-Next-After (forward polling), X-Blockmetric-Updated-At, X-Blockmetric-Warnings, X-Blockmetric-License. Errors stay JSON.one of json, csv, ndjson · default json |
Response fields
Every success is { data, meta }; these are the fields of data. meta is the same on every endpoint.
| Field | Description |
|---|---|
rows[]array of objects | The rows of this view. |
rows[].rankinteger | Rank in the current sort. |
rows[].addressstring | Hyperliquid address, lowercase. |
rows[].labelstring · nullable | Public label, else the self-chosen leaderboard name (unverified). |
rows[].labelSourcestring · nullable | Source URL of a public label, or "hyperliquid-leaderboard". |
rows[].accountValuenumber · nullable | Account value (USD). |
rows[].pnlobject | Hyperliquid leaderboard PnL per window (USD): the account with its sub-accounts and spot balances, deposits / withdrawals not counted. |
rows[].pnl.daynumber · nullable | Last 24 hours. |
rows[].pnl.weeknumber · nullable | Last 7 days. |
rows[].pnl.monthnumber · nullable | Last 30 days. |
rows[].pnl.allTimenumber · nullable | All time. |
rows[].roiobject | Hyperliquid leaderboard ROI per window (fraction). |
rows[].roi.daynumber · nullable | Last 24 hours. |
rows[].roi.weeknumber · nullable | Last 7 days. |
rows[].roi.monthnumber · nullable | Last 30 days. |
rows[].roi.allTimenumber · nullable | All time. |
rows[].vlmobject | Traded volume per window (USD). |
rows[].vlm.daynumber · nullable | Last 24 hours. |
rows[].vlm.weeknumber · nullable | Last 7 days. |
rows[].vlm.monthnumber · nullable | Last 30 days. |
rows[].vlm.allTimenumber · nullable | All time. |
rows[].observedobject | From the opens and closes our position polls saw (empty for free keys). |
rows[].observed.closesinteger | Position closes we observed. |
rows[].observed.winsinteger | Of those, closes with a profit. |
rows[].observed.winRatenumber · nullable | wins / closes, from 10 closes on. |
rows[].observed.avgHoldMinnumber · nullable | Average holding time in minutes (open → close pairs), from 3 pairs on. |
rows[].observed.holdsinteger | Open→close pairs seen. |
rows[].observed.sincestring (ISO 8601) · nullable | First observed event. |
rows[].riskobject · nullable | Risk figures from the Hyperliquid portfolio history (top traders), else null. |
rows[].risk.maxDrawdownUsdnumber · nullable | Largest peak-to-trough fall of the account value in USD. |
rows[].risk.maxDrawdownPctnumber · nullable | Fraction of the account value at the peak (0.17 = 17 %). Deprecated: use maxDrawdown (same value). |
rows[].risk.maxDrawdownnumber · nullable | Largest fall as a fraction of the account value at the peak (0.17 = 17 %). |
rows[].risk.sharpenumber · nullable | Annualised mean / standard deviation of the 30-day portfolio returns, no risk-free rate. |
rows[].risk.fetchedAtstring (ISO 8601) · nullable | When the portfolio history was read. |
rows[].bookobject · nullable | Open tracked positions of the wallet, else null. |
rows[].book.positionsUsdnumber | Open tracked notional (USD). |
rows[].book.positionsinteger | Number of positions. |
rows[].book.longSharenumber · nullable | Long notional / total. |
rows[].book.avgLeveragenumber · nullable | Notional-weighted. |
rows[].styles[]array of string (enum) | Style tags from observed behaviour (scalper, swing, position, high_turnover, high_leverage, mostly_long, mostly_short). |
rows[].sizeCohort"shrimp" | "fish" | "dolphin" | "shark" | "whale" · nullable | Size cohort by account value: shrimp < $10K, fish, dolphin, shark, whale ≥ $10M. |
rows[].pnlCohort"top" | "profitable" | "flat" | "losing" | "rekt" · nullable | PnL cohort by all-time PnL: top ≥ +$1M, profitable, flat, losing, rekt ≤ −$1M. |
rows[].updatedAtstring (ISO 8601) | Leaderboard row time. |
totalinteger | Rows matching the filters. |
updatedAtstring (ISO 8601) · nullable | Newest leaderboard run. |
riskUpdatedAtstring (ISO 8601) · nullable | Newest portfolio read (drawdown, Sharpe). |
fullboolean | false = free key: the top 100 of the chosen sort, every column, no search, style filter or paging. |
rulesstring | Who the chosen sort lists. |
methodstring | How the figures are computed, in plain words. |
Errors
- 400
invalid_paramInvalid parameter - 401
unauthorizedMissing or invalid API key - 403
plan_requiredPlan does not include this - 403
scope_requiredKey not scoped for this API - 403
ip_not_allowedAddress not on the IP allowlist of the key - 403
origin_not_allowedKey used from a browser origin it does not allow - 403
source_restrictedExchange data not redistributed - 403
https_requiredhttps required - 429
rate_limitedPer-minute limit reachedretry - 429
daily_limit_exceededDaily limit reachedretry - 429
stream_limitToo many open streamsretry - 500
internal_errorInternal errorretry
Methodology
- Smart money (how it is computed and its limits)
Code snippets in these docs are licensed under MIT-0: copy them into your own code without attribution. The SDKs, CLI and MCP server will be, once published, Apache-2.0; the name Blockmetric is not licensed (forks must be renamed). Data from the API is governed by the API terms; third-party exchange data by the exchange’s terms.