GET /leaderboard: PnL Leaderboard
curl --request GET \
--url https://partner-api.bravadotrade.com/trader-analytics/leaderboardimport requests
url = "https://partner-api.bravadotrade.com/trader-analytics/leaderboard"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://partner-api.bravadotrade.com/trader-analytics/leaderboard', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://partner-api.bravadotrade.com/trader-analytics/leaderboard",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://partner-api.bravadotrade.com/trader-analytics/leaderboard"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://partner-api.bravadotrade.com/trader-analytics/leaderboard")
.asString();require 'uri'
require 'net/http'
url = URI("https://partner-api.bravadotrade.com/trader-analytics/leaderboard")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"results": [
{
"rank": 123,
"trader": "<string>",
"username": {},
"avatar": {},
"bravado_user_id": {},
"pnl_usdc": "<string>",
"volume_usdc": "<string>",
"trades": 123,
"win_rate": "<string>",
"category": {},
"category_share": {},
"category_basis": "<string>"
}
],
"window": "<string>",
"total": 123,
"has_more": true,
"totals": {
"traders": 123,
"volume_usdc": "<string>",
"trades": 123,
"realized_pnl": "<string>",
"unrealized_pnl": "<string>",
"total_pnl": "<string>",
"profitable_traders": 123,
"unprofitable_traders": 123
}
}Trader Data API
GET /leaderboard: PnL Leaderboard
Returns traders ranked by realized PnL for the requested rolling window, computed under PMWAS.
GET
/
trader-analytics
/
leaderboard
GET /leaderboard: PnL Leaderboard
curl --request GET \
--url https://partner-api.bravadotrade.com/trader-analytics/leaderboardimport requests
url = "https://partner-api.bravadotrade.com/trader-analytics/leaderboard"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://partner-api.bravadotrade.com/trader-analytics/leaderboard', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://partner-api.bravadotrade.com/trader-analytics/leaderboard",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://partner-api.bravadotrade.com/trader-analytics/leaderboard"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://partner-api.bravadotrade.com/trader-analytics/leaderboard")
.asString();require 'uri'
require 'net/http'
url = URI("https://partner-api.bravadotrade.com/trader-analytics/leaderboard")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"results": [
{
"rank": 123,
"trader": "<string>",
"username": {},
"avatar": {},
"bravado_user_id": {},
"pnl_usdc": "<string>",
"volume_usdc": "<string>",
"trades": 123,
"win_rate": "<string>",
"category": {},
"category_share": {},
"category_basis": "<string>"
}
],
"window": "<string>",
"total": 123,
"has_more": true,
"totals": {
"traders": 123,
"volume_usdc": "<string>",
"trades": 123,
"realized_pnl": "<string>",
"unrealized_pnl": "<string>",
"total_pnl": "<string>",
"profitable_traders": 123,
"unprofitable_traders": 123
}
}Sign each request with a fresh HMAC signature. The cURL and HTTP header values below are placeholders, not reusable credentials. For runnable signing code, use request signing examples. Python examples use the signed session from that page; Node.js examples use its
bravadoFetch helper.GET /leaderboard/volume.
GET https://partner-api.bravadotrade.com/trader-analytics/leaderboard
Query Parameters
string
default:"30d"
Rolling time window over which to compute PnL. One of
24h, 7d, 30d, all.integer
default:"100"
Number of traders to return. Maximum 500.
integer
default:"0"
Offset for pagination. See Pagination.
string
Filter: keep only wallets whose dominant category (by volume) equals this value. One of
Politics, Crypto, Sports, Science, Tech, Entertainment, Earnings, Finance, Geopolitics, World, Elections, Weather, Other. Not “rank within category X” — and on sub-day windows (1h/4h/24h) this matches the wallet’s all-time dominance, not its dominance within that window. See the same param on GET /leaderboard/volume for the full semantics (window/venue/backfill restrictions are identical on both boards).Response
array
Show LeaderboardRow fields
Show LeaderboardRow fields
integer
1-based rank in the window.
string
Polygon wallet address.
string | null
Polymarket display name if the wallet has one.
string | null
Avatar image URL.
string | null
Internal Bravado user identifier if this wallet is provisioned through Bravado.
string
Realized PnL in USDC over the window, net of fees. String for precision.
string
Total USDC notional traded in the window.
integer
Trade events in the window.
string
Fraction of closed positions with positive realized PnL. String between “0” and “1”.
string | null
The wallet’s dominant category (by volume) — for this board’s window on day-grained windows, or the wallet’s all-time dominant category on
window=all and on sub-day boards (1h/4h/24h, which have no day-grained answer to give). null when unknown — see category_basis; see GET /leaderboard/volume for full field semantics (identical on both boards).string | null
category’s share of the wallet’s own volume_usdc in the window. Present only alongside category.string
Why
category is present or absent: all_time, all_time_fallback (sub-day boards — see GET /leaderboard/volume), window_daily, no_classifiable_volume, backfill_incomplete, or unsupported_venue.string
Echo of the window parameter used for the response.
integer
Total number of traders matching the window.
boolean
True if additional pages exist.
object | null
Board-wide aggregate over the same candidate set as
total (window, min_trades, is_mm_bot/exclude_bots, and — for the PnL sums — basis) — for a stat-strip header, not for paging. null only if it could not be computed.Show PnLLeaderboardTotals fields
Show PnLLeaderboardTotals fields
integer
Always equal to the response’s
total.string
Sum of
volume_usdc over the candidate set.integer
Sum of
trades over the candidate set.string
Sum of realized PnL over the candidate set (respects
?basis=).string
Sum of current open mark-to-market over the candidate set.
string
Sum of
realized_pnl + unrealized_pnl over the candidate set.integer
Count of wallets in the candidate set with
total_pnl > 0.integer
Count of wallets in the candidate set with
total_pnl < 0.Errors
| Status | When |
|---|---|
400 Bad Request | Invalid window, limit, offset, or category value, or category requested for a window/venue it isn’t available on yet |
401 Unauthorized | Missing or invalid HMAC credentials |
429 Too Many Requests | Rate limit exceeded, see Retry-After header |
Example
curl -G https://partner-api.bravadotrade.com/trader-analytics/leaderboard \
-H "X-BRAVADO-API-KEY: $BRAVADO_API_KEY" \
-H "X-BRAVADO-TIMESTAMP: <unix-ms>" \
-H "X-BRAVADO-SIGNATURE: <signature-for-this-request>" \
-d window=30d \
-d limit=20
{
"window": "30d",
"results": [
{
"rank": 1,
"trader": "0xabc123...def456",
"username": "topPlayer",
"avatar": "https://polymarket.com/avatars/topPlayer.png",
"bravado_user_id": null,
"pnl_usdc": "42580.120000",
"volume_usdc": "1250000.000000",
"trades": 218,
"win_rate": "0.61"
}
],
"total": 100,
"has_more": true
}
Related
GET /leaderboard/volumefor volume-ranked results.GET /traders/{address}for per-trader detail.- Guide: Build a PnL leaderboard.