GET /v1/analytics/leaderboard
Filters
Combine filters to zero in on the traders that matter to your strategy.| Parameter | Type | Description |
|---|---|---|
time_frame | string | Rolling window for stats: 1H, 4H, 1D, 3D, 7D, 30D. Default: 30D. |
sort_by | string | Rank by pnl, roi, win_rate, or market_count. Default: pnl. |
tag | string | Market category: all, sports, crypto, geopolitics, politics, finance, esports, pop-culture, tech, economy, weather, elections, tweets-markets, basketball, hockey, soccer, tennis, counter-strike-2, dota-2, league-of-legends, 5M, 15M. Default: all. Note: The sports tag filters for traditional sports only and does not include esports data. |
min_win_rate / max_win_rate | float | Win rate range (0–100). |
min_roi / max_roi | float | ROI percentage range. |
last_active_hours | int | Only include traders who placed an order in the last N hours. |
min_market_count / max_market_count | int | Filter by number of markets traded in the window. |
min_pnl | int | Minimum PnL filter in USDC. |
limit | int | Results per page. Default: 50, max: 100. |
offset | int | Pagination offset. Default: 0. |
On the Demo tier,
limit is capped at 20 and offset must be 0. Upgrade your plan to paginate beyond the first page.Code examples
import PolyEdgeClient from './polyedge.js';
const client = new PolyEdgeClient('YOUR_API_KEY');
const leaderboard = await client.getLeaderboard({
time_frame: '7D',
tag: 'crypto',
sort_by: 'roi',
min_win_rate: 55,
min_market_count: 5,
limit: 10,
});
for (const trader of leaderboard.traders) {
console.log(`#${trader.rank} ${trader.profile.name}`);
console.log(` ROI: ${trader.roi}% | Win rate: ${trader.win_rate}% | Markets: ${trader.markets_count}`);
}
from polyedge import PolyEdgeClient
client = PolyEdgeClient('YOUR_API_KEY')
leaderboard = client.get_leaderboard({
'time_frame': '7D',
'tag': 'crypto',
'sort_by': 'roi',
'min_win_rate': 55,
'min_market_count': 5,
'limit': 10,
})
for trader in leaderboard['traders']:
print(f"#{trader['rank']} {trader['profile']['name']}")
print(f" ROI: {trader['roi']}% | Win rate: {trader['win_rate']}% | Markets: {trader['markets_count']}")
curl -G "https://api.polyedge.dev/v1/analytics/leaderboard" \
-H "X-PolyEdge-Key: YOUR_API_KEY" \
--data-urlencode "time_frame=7D" \
--data-urlencode "tag=crypto" \
--data-urlencode "sort_by=roi" \
--data-urlencode "min_win_rate=55" \
--data-urlencode "min_market_count=5" \
--data-urlencode "limit=10"
Response fields
Each object in thetraders array contains:
| Field | Type | Description |
|---|---|---|
rank | int | Position on the leaderboard for the requested window. |
profile | object | Trader metadata: address, name, profile_image, x_username, profile_created_at, last_trade_at. |
total_pnl | string | Raw profit and loss in micro-USDC (divide by 1e6 for USDC). |
total_volume | string | Total volume traded in micro-USDC. |
roi | float | Return on investment as a percentage. |
win_rate | float | Percentage of markets that resolved in the trader’s favour. |
markets_count | int | Number of markets traded in the window. |
wins_count | int | Number of markets won in the window. |
Example response
{
"traders": [
{
"profile": {
"address": "0x96cfcb0c30942cfcd1cdf76c7d408794d66b1acb",
"name": "mintblade",
"profile_image": "",
"x_username": "",
"profile_created_at": "2026-06-02T14:47:45.193735Z",
"last_trade_at": "2026-06-16T01:04:03Z"
},
"total_pnl": "9109604596452",
"total_volume": "8522915083091",
"roi": 106.88,
"win_rate": 100,
"rank": 1,
"markets_count": 4,
"wins_count": 4
}
],
"total_count": 229094
}
Combine
min_win_rate, min_roi, and a short time_frame (e.g. 1D) to surface traders who are hot right now rather than those coasting on months-old gains. Then cross-reference with last_active_hours to confirm they are still active before you copy a position.