curl --request GET \
--url https://core-api.adipredictstreet.com/api/leaderboardimport requests
url = "https://core-api.adipredictstreet.com/api/leaderboard"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://core-api.adipredictstreet.com/api/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://core-api.adipredictstreet.com/api/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://core-api.adipredictstreet.com/api/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://core-api.adipredictstreet.com/api/leaderboard")
.asString();require 'uri'
require 'net/http'
url = URI("https://core-api.adipredictstreet.com/api/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{
"period": "today",
"snapshotAt": "2023-11-07T05:31:56Z",
"total": 123,
"entries": [
{
"rank": 17,
"vaultAddress": "<string>",
"username": "<string>",
"pnl": "125.50",
"volume": "4200.00"
}
],
"nextCursor": "<string>",
"me": {
"rank": 17,
"vaultAddress": "<string>",
"username": "<string>",
"pnl": "125.50",
"volume": "4200.00"
}
}{
"error": {
"code": "bad_request",
"message": "<string>",
"details": {},
"trace_id": "<string>"
},
"status": 400
}Wallet leaderboard ranked by realised PnL or volume
Returns the leaderboard snapshot for the requested period plus the caller’s own row when authenticated.
Variant 3 PnL semantics — open positions do NOT contribute to PnL. Only sells, on-chain MERGE legs, and market resolutions move the number, so ranks stay stable between snapshots even when prices move.
Tail-ranking — every active user with a deployed vault appears in every period snapshot. Wallets with no realised activity in the period sort to the bottom under the (pnl=0, volume=0, vault ASC) tie-break and receive a real (numerically last) rank.
Sort field — pnl (default) ranks by realised PnL desc; volume re-orders the same period snapshot by notional traded desc and re-stamps the in-page rank.
Search routing — when search looks like a 0x-hex prefix the lookup filters wallets; anything else filters usernames. Both branches use a case-insensitive prefix match backed by functional indexes.
curl --request GET \
--url https://core-api.adipredictstreet.com/api/leaderboardimport requests
url = "https://core-api.adipredictstreet.com/api/leaderboard"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://core-api.adipredictstreet.com/api/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://core-api.adipredictstreet.com/api/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://core-api.adipredictstreet.com/api/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://core-api.adipredictstreet.com/api/leaderboard")
.asString();require 'uri'
require 'net/http'
url = URI("https://core-api.adipredictstreet.com/api/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{
"period": "today",
"snapshotAt": "2023-11-07T05:31:56Z",
"total": 123,
"entries": [
{
"rank": 17,
"vaultAddress": "<string>",
"username": "<string>",
"pnl": "125.50",
"volume": "4200.00"
}
],
"nextCursor": "<string>",
"me": {
"rank": 17,
"vaultAddress": "<string>",
"username": "<string>",
"pnl": "125.50",
"volume": "4200.00"
}
}{
"error": {
"code": "bad_request",
"message": "<string>",
"details": {},
"trace_id": "<string>"
},
"status": 400
}Query Parameters
Which period to rank — defaults to today.
today, week, month, all Sort field. pnl (default) returns the canonical PnL leaderboard; volume re-orders the same period snapshot by notional traded desc.
pnl, volume Optional case-insensitive prefix. Routes to wallet search when the value looks 0x-hex, username search otherwise.
Page size, 1–50; defaults to 20.
1 <= x <= 50Opaque cursor returned by a previous page.
Response
OK
today, week, month, all Wall-clock at which the recompute cron sampled the data feeding this page. Frontends can render "snapshot 2 min ago" directly off this field.
Total entries in the leaderboard for this period — independent of the page slice. Drives page-count rendering.
Show child attributes
Show child attributes
Opaque keyset cursor for the next page; null on the last page.
The authenticated caller's row for the same period. Populated when the request carries a valid Privy JWT or API key AND the wallet has a deployed vault. rank is null when the caller has no realised activity yet (pnl="0", volume="0"); the FE should render an "unranked" personal block in that case. null for anonymous traffic, or for authed callers whose vault has not been deployed.
Show child attributes
Show child attributes