SDK
import { Client } from '@solana-tracker/data-api';
const client = new Client({ apiKey: 'YOUR_API_KEY' });
const data = await client.getPnlV2KOLCalendar({ year: 2025, month: 1 });curl --request GET \
--url https://data.solanatracker.io/v2/pnl/leaderboard/kols/calendar \
--header 'x-api-key: <api-key>'import requests
url = "https://data.solanatracker.io/v2/pnl/leaderboard/kols/calendar"
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://data.solanatracker.io/v2/pnl/leaderboard/kols/calendar', 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://data.solanatracker.io/v2/pnl/leaderboard/kols/calendar",
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://data.solanatracker.io/v2/pnl/leaderboard/kols/calendar"
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://data.solanatracker.io/v2/pnl/leaderboard/kols/calendar")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://data.solanatracker.io/v2/pnl/leaderboard/kols/calendar")
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{
"year": 2025,
"month": 4,
"days": {
"1": {
"realizedPnl": 373982.77,
"volume": 9751829.32,
"buys": 12351,
"sells": 12491,
"traders": 208
},
"2": {
"realizedPnl": 229915.33,
"volume": 7904323.76,
"buys": 10781,
"sells": 10773,
"traders": 205
},
"3": {
"realizedPnl": 332834.92,
"volume": 5210481.27,
"buys": 7415,
"sells": 7616,
"traders": 196
},
"4": {
"realizedPnl": 280276.64,
"volume": 5410885.64,
"buys": 8862,
"sells": 8601,
"traders": 191
},
"5": {
"realizedPnl": 239014.53,
"volume": 5111185.32,
"buys": 7546,
"sells": 7734,
"traders": 177
},
"6": {
"realizedPnl": 367056.5,
"volume": 5133816.76,
"buys": 7752,
"sells": 7157,
"traders": 183
},
"7": {
"realizedPnl": 430358.23,
"volume": 6588608.92,
"buys": 10490,
"sells": 11075,
"traders": 196
},
"8": {
"realizedPnl": 491257.05,
"volume": 7579156.8,
"buys": 12258,
"sells": 13028,
"traders": 208
},
"9": {
"realizedPnl": 544439.69,
"volume": 10996111.37,
"buys": 15659,
"sells": 16232,
"traders": 219
},
"10": {
"realizedPnl": 398214.56,
"volume": 8691156.45,
"buys": 12516,
"sells": 12877,
"traders": 214
},
"11": {
"realizedPnl": 555314.07,
"volume": 7896454.15,
"buys": 11895,
"sells": 11820,
"traders": 206
},
"12": {
"realizedPnl": 466797.97,
"volume": 9569468.06,
"buys": 11944,
"sells": 12501,
"traders": 204
},
"13": {
"realizedPnl": 374398.53,
"volume": 8043832.87,
"buys": 10720,
"sells": 10896,
"traders": 194
},
"14": {
"realizedPnl": 699210.41,
"volume": 10746974.96,
"buys": 13478,
"sells": 14118,
"traders": 217
},
"15": {
"realizedPnl": 691944.98,
"volume": 12005395.16,
"buys": 15011,
"sells": 16273,
"traders": 223
},
"16": {
"realizedPnl": 461566.09,
"volume": 12644236.48,
"buys": 15832,
"sells": 17207,
"traders": 224
},
"17": {
"realizedPnl": 537137.83,
"volume": 12102591.98,
"buys": 15823,
"sells": 16267,
"traders": 224
},
"18": {
"realizedPnl": 359642.93,
"volume": 10468593.03,
"buys": 12614,
"sells": 12565,
"traders": 207
},
"19": {
"realizedPnl": 442822.67,
"volume": 8340065.03,
"buys": 10848,
"sells": 10797,
"traders": 205
},
"20": {
"realizedPnl": 400425.97,
"volume": 7433572.65,
"buys": 9784,
"sells": 9559,
"traders": 199
},
"21": {
"realizedPnl": 564925.96,
"volume": 12220263.74,
"buys": 14498,
"sells": 15320,
"traders": 223
},
"22": {
"realizedPnl": 678505.94,
"volume": 12730381.36,
"buys": 17046,
"sells": 17125,
"traders": 229
},
"23": {
"realizedPnl": 661277.23,
"volume": 14199282.07,
"buys": 20795,
"sells": 15759,
"traders": 235
},
"24": {
"realizedPnl": 459717.26,
"volume": 12550219.8,
"buys": 13645,
"sells": 12794,
"traders": 229
},
"25": {
"realizedPnl": 745882.41,
"volume": 15821963.93,
"buys": 16938,
"sells": 15230,
"traders": 235
},
"26": {
"realizedPnl": 649700.16,
"volume": 12371545.96,
"buys": 15655,
"sells": 12922,
"traders": 227
},
"27": {
"realizedPnl": 575217.3,
"volume": 12342470.46,
"buys": 13247,
"sells": 13637,
"traders": 222
},
"28": {
"realizedPnl": 583906.66,
"volume": 12675263.33,
"buys": 16563,
"sells": 14052,
"traders": 225
},
"29": {
"realizedPnl": 835732,
"volume": 16764899.32,
"buys": 18998,
"sells": 17204,
"traders": 238
},
"30": {
"realizedPnl": 1519120.06,
"volume": 13292838.26,
"buys": 17476,
"sells": 15472,
"traders": 238
}
},
"summary": {
"tradingDays": 30,
"positiveDays": 30,
"negativeDays": 0,
"totalRealizedPnl": 15950596.68,
"totalVolume": 306597868.2
}
}{
"error": "<string>"
}{
"error": "<string>"
}Leaderboard
Get KOL Calendar
Returns one row per day for a given month with aggregate KOL realized PnL, volume, trade counts, and active wallet count. Useful for calendar and heatmap views.
GET
/
v2
/
pnl
/
leaderboard
/
kols
/
calendar
SDK
import { Client } from '@solana-tracker/data-api';
const client = new Client({ apiKey: 'YOUR_API_KEY' });
const data = await client.getPnlV2KOLCalendar({ year: 2025, month: 1 });curl --request GET \
--url https://data.solanatracker.io/v2/pnl/leaderboard/kols/calendar \
--header 'x-api-key: <api-key>'import requests
url = "https://data.solanatracker.io/v2/pnl/leaderboard/kols/calendar"
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://data.solanatracker.io/v2/pnl/leaderboard/kols/calendar', 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://data.solanatracker.io/v2/pnl/leaderboard/kols/calendar",
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://data.solanatracker.io/v2/pnl/leaderboard/kols/calendar"
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://data.solanatracker.io/v2/pnl/leaderboard/kols/calendar")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://data.solanatracker.io/v2/pnl/leaderboard/kols/calendar")
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{
"year": 2025,
"month": 4,
"days": {
"1": {
"realizedPnl": 373982.77,
"volume": 9751829.32,
"buys": 12351,
"sells": 12491,
"traders": 208
},
"2": {
"realizedPnl": 229915.33,
"volume": 7904323.76,
"buys": 10781,
"sells": 10773,
"traders": 205
},
"3": {
"realizedPnl": 332834.92,
"volume": 5210481.27,
"buys": 7415,
"sells": 7616,
"traders": 196
},
"4": {
"realizedPnl": 280276.64,
"volume": 5410885.64,
"buys": 8862,
"sells": 8601,
"traders": 191
},
"5": {
"realizedPnl": 239014.53,
"volume": 5111185.32,
"buys": 7546,
"sells": 7734,
"traders": 177
},
"6": {
"realizedPnl": 367056.5,
"volume": 5133816.76,
"buys": 7752,
"sells": 7157,
"traders": 183
},
"7": {
"realizedPnl": 430358.23,
"volume": 6588608.92,
"buys": 10490,
"sells": 11075,
"traders": 196
},
"8": {
"realizedPnl": 491257.05,
"volume": 7579156.8,
"buys": 12258,
"sells": 13028,
"traders": 208
},
"9": {
"realizedPnl": 544439.69,
"volume": 10996111.37,
"buys": 15659,
"sells": 16232,
"traders": 219
},
"10": {
"realizedPnl": 398214.56,
"volume": 8691156.45,
"buys": 12516,
"sells": 12877,
"traders": 214
},
"11": {
"realizedPnl": 555314.07,
"volume": 7896454.15,
"buys": 11895,
"sells": 11820,
"traders": 206
},
"12": {
"realizedPnl": 466797.97,
"volume": 9569468.06,
"buys": 11944,
"sells": 12501,
"traders": 204
},
"13": {
"realizedPnl": 374398.53,
"volume": 8043832.87,
"buys": 10720,
"sells": 10896,
"traders": 194
},
"14": {
"realizedPnl": 699210.41,
"volume": 10746974.96,
"buys": 13478,
"sells": 14118,
"traders": 217
},
"15": {
"realizedPnl": 691944.98,
"volume": 12005395.16,
"buys": 15011,
"sells": 16273,
"traders": 223
},
"16": {
"realizedPnl": 461566.09,
"volume": 12644236.48,
"buys": 15832,
"sells": 17207,
"traders": 224
},
"17": {
"realizedPnl": 537137.83,
"volume": 12102591.98,
"buys": 15823,
"sells": 16267,
"traders": 224
},
"18": {
"realizedPnl": 359642.93,
"volume": 10468593.03,
"buys": 12614,
"sells": 12565,
"traders": 207
},
"19": {
"realizedPnl": 442822.67,
"volume": 8340065.03,
"buys": 10848,
"sells": 10797,
"traders": 205
},
"20": {
"realizedPnl": 400425.97,
"volume": 7433572.65,
"buys": 9784,
"sells": 9559,
"traders": 199
},
"21": {
"realizedPnl": 564925.96,
"volume": 12220263.74,
"buys": 14498,
"sells": 15320,
"traders": 223
},
"22": {
"realizedPnl": 678505.94,
"volume": 12730381.36,
"buys": 17046,
"sells": 17125,
"traders": 229
},
"23": {
"realizedPnl": 661277.23,
"volume": 14199282.07,
"buys": 20795,
"sells": 15759,
"traders": 235
},
"24": {
"realizedPnl": 459717.26,
"volume": 12550219.8,
"buys": 13645,
"sells": 12794,
"traders": 229
},
"25": {
"realizedPnl": 745882.41,
"volume": 15821963.93,
"buys": 16938,
"sells": 15230,
"traders": 235
},
"26": {
"realizedPnl": 649700.16,
"volume": 12371545.96,
"buys": 15655,
"sells": 12922,
"traders": 227
},
"27": {
"realizedPnl": 575217.3,
"volume": 12342470.46,
"buys": 13247,
"sells": 13637,
"traders": 222
},
"28": {
"realizedPnl": 583906.66,
"volume": 12675263.33,
"buys": 16563,
"sells": 14052,
"traders": 225
},
"29": {
"realizedPnl": 835732,
"volume": 16764899.32,
"buys": 18998,
"sells": 17204,
"traders": 238
},
"30": {
"realizedPnl": 1519120.06,
"volume": 13292838.26,
"buys": 17476,
"sells": 15472,
"traders": 238
}
},
"summary": {
"tradingDays": 30,
"positiveDays": 30,
"negativeDays": 0,
"totalRealizedPnl": 15950596.68,
"totalVolume": 306597868.2
}
}{
"error": "<string>"
}{
"error": "<string>"
}SDK Example
import { Client } from '@solana-tracker/data-api';
const client = new Client({ apiKey: 'YOUR_API_KEY' });
const data = await client.getPnlV2KOLCalendar({ year: 2025, month: 1 });
Authorizations
API Key for authentication
Query Parameters
Calendar year. Defaults to the current year.
Calendar month (1-12). Defaults to the current month.
Required range:
1 <= x <= 12Was this page helpful?
⌘I