Discover rolling leaderboard scopes
curl --request GET \
--url https://api.polynode.dev/v3/leaderboard/scopes \
--header 'x-api-key: <api-key>'import requests
url = "https://api.polynode.dev/v3/leaderboard/scopes"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.polynode.dev/v3/leaderboard/scopes', 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://api.polynode.dev/v3/leaderboard/scopes",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$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://api.polynode.dev/v3/leaderboard/scopes"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.polynode.dev/v3/leaderboard/scopes")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.polynode.dev/v3/leaderboard/scopes")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"scopes": [
{
"value": "<string>",
"wallet_count": 1,
"ranked_count": 500
}
],
"count": 1,
"total_count": 1,
"limit": 100,
"offset": 5000,
"has_more": true,
"period": "1d",
"scope": "category",
"query": "<string>"
}Leaderboard & Tags
Leaderboard Scopes
Discover and search the categories or tags available to 1-day, 7-day, and 30-day realized-P&L leaderboards.
GET
/
v3
/
leaderboard
/
scopes
Discover rolling leaderboard scopes
curl --request GET \
--url https://api.polynode.dev/v3/leaderboard/scopes \
--header 'x-api-key: <api-key>'import requests
url = "https://api.polynode.dev/v3/leaderboard/scopes"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.polynode.dev/v3/leaderboard/scopes', 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://api.polynode.dev/v3/leaderboard/scopes",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$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://api.polynode.dev/v3/leaderboard/scopes"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.polynode.dev/v3/leaderboard/scopes")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.polynode.dev/v3/leaderboard/scopes")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"scopes": [
{
"value": "<string>",
"wallet_count": 1,
"ranked_count": 500
}
],
"count": 1,
"total_count": 1,
"limit": 100,
"offset": 5000,
"has_more": true,
"period": "1d",
"scope": "category",
"query": "<string>"
}Use this endpoint to build category and tag navigation for rolling trader
leaderboards. It returns only scopes available for the selected period, ordered
by qualifying wallet count descending and then by name.
Counts change as new realized results enter the selected window.
Use a returned
Request
GET /v3/leaderboard/scopes
Query parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
period | string | required | 1d, 7d, or 30d. Aliases day, week, and month are accepted. |
scope | string | required | category or tag. Plural aliases are accepted. |
q | string | none | Case-insensitive literal substring search. Up to 80 visible characters. |
limit | integer | 100 | Number of scopes. Values below 1 use 1; values above 200 use 200. |
offset | integer | 0 | Pagination offset from 0 through 10,000. |
Example
curl "https://api.polynode.dev/v3/leaderboard/scopes?period=7d&scope=category&limit=3" \
-H "x-api-key: $POLYNODE_API_KEY"
{
"scopes": [
{
"value": "sports",
"wallet_count": 7985,
"ranked_count": 1000
},
{
"value": "up-or-down",
"wallet_count": 7634,
"ranked_count": 1000
},
{
"value": "esports",
"wallet_count": 5496,
"ranked_count": 1000
}
],
"count": 3,
"total_count": 329,
"limit": 3,
"offset": 0,
"has_more": true,
"period": "7d",
"scope": "category",
"query": null
}
Response fields
| Field | Type | Description |
|---|---|---|
scopes | array | Categories or tags in this page. |
count | integer | Number of scopes returned. |
total_count | integer | Total scopes matching the selected period, type, and search text. |
limit | integer | Effective page size. |
offset | integer | Effective pagination offset. |
has_more | boolean | Whether another reachable page exists. |
period | string | Canonical period: 1d, 7d, or 30d. |
scope | string | Canonical scope type: category or tag. |
query | string or null | Normalized search text, or null when no search is active. |
Scope rows
| Field | Type | Description |
|---|---|---|
value | string | Category or tag value accepted by the leaderboard. |
wallet_count | integer | Wallets with qualifying realized results in the selected scope and period. |
ranked_count | integer | Ranks available through the corresponding rolling leaderboard, capped at 1,000. |
value as category or tags on
GET /v3/leaderboard. Tag values also work as the
path slug on the tag leaderboard.
Errors
| Status | Error | When it occurs |
|---|---|---|
400 | invalid_period | period is missing or is not a rolling period. |
400 | invalid_scope | scope is missing or is not category or tag. |
400 | invalid_query | Search text is too long or contains a control character. |
400 | scope_offset_too_deep | offset is outside 0 through 10,000. |
401 | authentication error | The API key is missing or invalid. |
503 | leaderboard_unavailable | Scope discovery is temporarily unavailable. |
Authorizations
Query Parameters
Rolling ranking window. Aliases day, week, and month are accepted.
Available options:
1d, 7d, 30d Scope type. Plural aliases are accepted.
Available options:
category, tag Optional case-insensitive literal substring search.
Maximum string length:
80Required range:
1 <= x <= 200Required range:
0 <= x <= 10000Response
Available categories or tags
Show child attributes
Show child attributes
Required range:
x >= 0Required range:
x >= 0Required range:
1 <= x <= 200Required range:
0 <= x <= 10000Available options:
1d, 7d, 30d Available options:
category, tag 
