/leaderboard
The Polymarket wallet leaderboard — wallets ranked by realized P&L, hit rate, volume or trade count, lifetime or over a window, with bot and whale tags and the confidence interval on the hit rate.
GET https://data.vike.io/v1/polymarket/leaderboardPolymarket wallets ranked by realized P&L, hit rate, volume or trade count, for all time or over a
window, optionally inside one market category. It is the board vike.io/polymarket shows, served as an
array of rows from the hourly leaderboard table, not from the raw tape. It is the same answer the
polymarket_leaderboard MCP tool gives — the route runs that tool.
# the default board: lifetime realized P&L, largest first, wallets with at least 20 resolved markets, 20 rows
curl -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/polymarket/leaderboard"
# the last 30 days in crypto markets, ranked by the P&L of markets that resolved inside them, with small-trade bots left out (an average trade of at least $20)
curl -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/polymarket/leaderboard?category=Crypto&window=30d&sort=realized_pnl_window&min_avg_usd=20&limit=2"
# the biggest losers of all time
curl -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/polymarket/leaderboard?sort=realized_pnl_asc&limit=10"
# the most active by resolved markets, second page of 20: offset is rows to skip and rank continues at 21
curl -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/polymarket/leaderboard?sort=resolved&limit=20&offset=20"
# thin records too: with min_resolved=0 a wallet with two resolved markets can appear, and its hit_rate means little
curl -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/polymarket/leaderboard?min_resolved=0&sort=last_seen&limit=20"
# the board is rebuilt once an hour, so a research series is a stored one: keep each response with its timestamp
curl -s -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/polymarket/leaderboard?limit=50" -o "leaderboard-$(date -u +%Y%m%dT%H).json"categoryqueryoptionalall (default), Crypto, Sports, Politics, Pop-Culture or Tech. Every figure is recomputed on that category's markets only. Any other value is a 400.windowqueryoptional24h, 7d, 30d or all. Default all. The period behind trades_window, volume_window_usd and realized_pnl_window_usd (P&L of the markets that RESOLVED inside it), and what the *_window sorts rank on. 24h, 7d and 30d are rebuilt hourly and a market's resolution time can be corrected later, so they can be revised; all is not affected. Any other value is a 400.sortqueryoptionalrealized_pnl (default, lifetime USD, largest first), realized_pnl_asc (biggest losers first), realized_pnl_window and realized_pnl_window_asc (P&L inside window), hit_rate (highest first, nulls last; the top is often wallets that buy near-certain outcomes just under $1, a 100% rate on a sliver of P&L, so set realized_pnl_usd against volume_all_usd before reading it as skill), resolved (most resolved markets), volume_24h and trades_24h (USD volume and trade count inside window; the names are historical), volume_all, trades_all, markets (lifetime), last_seen (most recent first). Ties break on the wallet address. Any other value is a 400.min_resolvedqueryoptional20, so a hit_rate rests on a real sample; 0 includes wallets too thin for one.min_volume_usdqueryoptional0.min_avg_usdqueryoptional0. 20 leaves out every wallet tagged bot.limitqueryoptionaloffsetqueryoptional400: narrow with category or a min_* filter instead.A real response for the second request, cut to its first row.
[
{
"rank": 1,
"proxy_wallet": "0x32ed2e546b187ca15e2841edc82b22c713cf8ec3",
"pseudonym": "",
"display_name": "",
"realized_pnl_usd": 486847.83,
"realized_pnl_window_usd": 106260.86,
"resolved_markets": 93972,
"hit_rate": 0.544339,
"hit_rate_ci": 0.003184,
"volume_all_usd": 12839471.17,
"volume_window_usd": 3092527.93,
"trades_all": 599277,
"trades_window": 112219,
"avg_trade_usd": 21.42,
"markets": 94080,
"first_seen": "2026-06-11T18:16:39.000Z",
"last_seen": "2026-10-19T15:00:15.000Z",
"tags": ["whale", "hot"]
}
]Reading it
- Money is USD, ratios are fractions.
realized_pnl_usdis lifetime P&L realized on resolved markets.realized_pnl_window_usd,volume_window_usdandtrades_windowcoverwindow, and equal the lifetime fields whenwindow=all. An open position contributes nothing until its market resolves, and a market that resolved invalid is excluded from P&L, hit rate and the resolved count. USD is rounded to the cent and ratios to six places. hit_rateis a fraction from 0 to 1, volume-weighted, andnullwhere undefined.0.62is 62%. It is the share of the wallet's resolved dollar volume that sat in markets where it made money, not a count of wins. A wallet with no resolved volume hashit_rate: null, never0; a real0.0means every resolved dollar sat in a losing market.- A high
hit_rateis not skill by itself. A wallet that buys near-certain outcomes just under $1 wins nearly every market for a sliver of profit, sohit_rate: 1.0beside a smallrealized_pnl_usdon a largevolume_all_usdis an arbitrage pattern. Sorting byhit_rateputs these first; set the P&L against the volume before reading a rate as an edge. hit_rate_ciis a plus-or-minus half-width, as a fraction. It is the half-width of the 95% Wilson interval, withhit_ratetreated as a proportion overresolved_markets:0.544339with0.003184reads as 54.4% give or take 0.3 points. Becausehit_rateis volume-weighted rather than a count, the interval is indicative, not exact. It isnullwherehit_rateis. A wide one means a thin record.- The default asks for 20 resolved markets, and the top of a category can still be bots.
min_resolveddefaults to20so a rate rests on a real sample;0lists every wallet. Even so, the wallets with the most resolved markets in Crypto carry hundreds of thousands of them at an average trade of cents to about ten dollars: on 2026-10-19 the five at the top ofcategory=Crypto&sort=resolvedwere all taggedbot.tagsholdsbot(an average trade under $20 over at least 100 trades),whale(lifetime volume of $100,000 or more), andhotorcold(lifetime P&L of +$1,000 or −$1,000 over at least five resolved markets). They are rules on these figures, not a classification of anyone.min_avg_usd=20leaves out everybot. first_seenis not an age. It is the wallet's first trade in the recorded tape, which starts on 2026-01-01. A wallet that traded earlier, or went quiet and came back, shows a later date, so do not call one new on the strength of it. The website'snewtag is not served for that reason.- Windows are rebuilt hourly and can be revised.
24h,7dand30dare hour-granular, and a market's resolution time is corrected retroactively when the chain shows a different close than the one first recorded, so a windowed figure can move between two calls. The lifetime figures andwindow=alldo not depend on a resolution time. Read a windowed rank as of the hour you fetched it. - Paging is by offset on a board that moves.
offsetskips rows (0 to 1000) andrankcontinues across pages. Ties break on the wallet address, so one request returns one page. The board is rebuilt hourly, so a page fetched after a rebuild can repeat or skip a wallet; for a snapshot, fetch within one hour. An empty array means no wallet passes the filters. - Wallet addresses are public on-chain data, and
pseudonymanddisplay_nameare Polymarket's own profile fields, empty for many wallets. Nothing here identifies a person. - It sorts the whole board on every call. Expect a second or so, not milliseconds, and cache the
answer: it changes once an hour. For one wallet's equity curve and positions use
/wallets/{address}.
Errors
| Status | When |
|---|---|
400 | category, window or sort is not one of the values above; limit is not a positive integer; offset is not an integer from 0 to 1000; min_resolved, min_volume_usd or min_avg_usd is negative, not a number, or not finite; or an unknown query parameter is sent. The body is {"error": "…"}. A limit above 50 is not an error: it is capped at 50. |
401 / 429 | No or bad credential, or the hourly budget is spent — see Authentication and Rate limits. |
503 | The store behind it is unavailable. The body carries no driver text. |
/smart_money
Polymarket smart-money signals — markets with the largest net inflow from the profitable-wallet cohort, or markets that cohort bought well below the mid.
/market_stats
Aggregate recorded activity for one outcome token in a single row — the cheap orientation call before you request the tape itself.