import { Client } from '@solana-tracker/data-api';
const client = new Client({ apiKey: 'YOUR_API_KEY' });
const data = await client.getPnlV2WalletHistory('FbMxP3GVq8TQ36nbYgx4NP9iygMpwAwFWJwW81ioCiSF', { period: '30d' });
curl --request GET \
--url https://data.solanatracker.io/v2/pnl/wallets/{wallet}/history \
--header 'x-api-key: <api-key>'import requests
url = "https://data.solanatracker.io/v2/pnl/wallets/{wallet}/history"
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/wallets/{wallet}/history', 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/wallets/{wallet}/history",
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/wallets/{wallet}/history"
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/wallets/{wallet}/history")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://data.solanatracker.io/v2/pnl/wallets/{wallet}/history")
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{
"wallet": "CyaE1VxvBrahnPWkqm5VsdCvyS2QmNht2UFrKJHga54o",
"identity": {
"name": "Cented",
"twitter": "@Cented7",
"avatar": "https://kol-avatar.solanatracker.io/CyaE1VxvBrahnPWkqm5VsdCvyS2QmNht2UFrKJHga54o",
"platforms": [
"axiom",
"bloom"
],
"type": "kol",
"tags": [
"kol",
"axiom",
"bloom"
]
},
"days": [
{
"date": "2026-04-17",
"cumulative": {
"pnl": {
"realized": 10634698.24,
"unrealized": -1834.93,
"total": 10632863.31
},
"cost": 49449916.77,
"proceeds": 60084615.01,
"openPositions": {
"cost": 4125.18,
"value": 3802.94
},
"counts": {
"buys": 193365,
"sells": 137486,
"tokensTraded": 78007
}
},
"activity": {
"pnl": {
"realized": 19119.76
},
"counts": {
"buys": 680,
"sells": 274
},
"volume": {
"costUsd": 85101.2,
"total": 188145.69
},
"averages": {
"buy": 125.15,
"sell": 376.07,
"realizedPnl": 69.78,
"holdTimeSecs": 0.06884671532846717
}
}
},
{
"date": "2026-04-18",
"cumulative": {
"pnl": {
"realized": 10649442.15,
"unrealized": -1762.31,
"total": 10647679.83
},
"cost": 49503916.09,
"proceeds": 60153358.24,
"openPositions": {
"cost": 4172.59,
"value": 4252.19
},
"counts": {
"buys": 193834,
"sells": 137680,
"tokensTraded": 78125
}
},
"activity": {
"pnl": {
"realized": 14625.1
},
"counts": {
"buys": 470,
"sells": 194
},
"volume": {
"costUsd": 53226.11,
"total": 121969.34
},
"averages": {
"buy": 113.25,
"sell": 354.35,
"realizedPnl": 75.39,
"holdTimeSecs": 0.008350515463917524
}
}
}
],
"summary": {
"days": {
"trading": 3,
"positive": 3,
"negative": 0,
"breakEven": 0
},
"totals": {
"realizedPnl": 40077.97,
"volume": 378627.53
},
"winRate": 100,
"totalDays": 8,
"deltas": {
"realized": 21077.02,
"total": 21628.76
}
}
}{
"error": "<string>"
}{
"error": "<string>"
}Get Wallet PnL Calendar
Returns daily wallet snapshots with cumulative PnL plus per-day realized PnL, volume, buy and sell counts, and averages. Use period for quick windows or start and end for exact ranges. Pass ?currency=sol or ?currency=eur to convert monetary fields at read time using historical daily reference rates.
import { Client } from '@solana-tracker/data-api';
const client = new Client({ apiKey: 'YOUR_API_KEY' });
const data = await client.getPnlV2WalletHistory('FbMxP3GVq8TQ36nbYgx4NP9iygMpwAwFWJwW81ioCiSF', { period: '30d' });
curl --request GET \
--url https://data.solanatracker.io/v2/pnl/wallets/{wallet}/history \
--header 'x-api-key: <api-key>'import requests
url = "https://data.solanatracker.io/v2/pnl/wallets/{wallet}/history"
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/wallets/{wallet}/history', 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/wallets/{wallet}/history",
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/wallets/{wallet}/history"
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/wallets/{wallet}/history")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://data.solanatracker.io/v2/pnl/wallets/{wallet}/history")
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{
"wallet": "CyaE1VxvBrahnPWkqm5VsdCvyS2QmNht2UFrKJHga54o",
"identity": {
"name": "Cented",
"twitter": "@Cented7",
"avatar": "https://kol-avatar.solanatracker.io/CyaE1VxvBrahnPWkqm5VsdCvyS2QmNht2UFrKJHga54o",
"platforms": [
"axiom",
"bloom"
],
"type": "kol",
"tags": [
"kol",
"axiom",
"bloom"
]
},
"days": [
{
"date": "2026-04-17",
"cumulative": {
"pnl": {
"realized": 10634698.24,
"unrealized": -1834.93,
"total": 10632863.31
},
"cost": 49449916.77,
"proceeds": 60084615.01,
"openPositions": {
"cost": 4125.18,
"value": 3802.94
},
"counts": {
"buys": 193365,
"sells": 137486,
"tokensTraded": 78007
}
},
"activity": {
"pnl": {
"realized": 19119.76
},
"counts": {
"buys": 680,
"sells": 274
},
"volume": {
"costUsd": 85101.2,
"total": 188145.69
},
"averages": {
"buy": 125.15,
"sell": 376.07,
"realizedPnl": 69.78,
"holdTimeSecs": 0.06884671532846717
}
}
},
{
"date": "2026-04-18",
"cumulative": {
"pnl": {
"realized": 10649442.15,
"unrealized": -1762.31,
"total": 10647679.83
},
"cost": 49503916.09,
"proceeds": 60153358.24,
"openPositions": {
"cost": 4172.59,
"value": 4252.19
},
"counts": {
"buys": 193834,
"sells": 137680,
"tokensTraded": 78125
}
},
"activity": {
"pnl": {
"realized": 14625.1
},
"counts": {
"buys": 470,
"sells": 194
},
"volume": {
"costUsd": 53226.11,
"total": 121969.34
},
"averages": {
"buy": 113.25,
"sell": 354.35,
"realizedPnl": 75.39,
"holdTimeSecs": 0.008350515463917524
}
}
}
],
"summary": {
"days": {
"trading": 3,
"positive": 3,
"negative": 0,
"breakEven": 0
},
"totals": {
"realizedPnl": 40077.97,
"volume": 378627.53
},
"winRate": 100,
"totalDays": 8,
"deltas": {
"realized": 21077.02,
"total": 21628.76
}
}
}{
"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.getPnlV2WalletHistory('FbMxP3GVq8TQ36nbYgx4NP9iygMpwAwFWJwW81ioCiSF', { period: '30d' });
Authorizations
API Key for authentication
Path Parameters
Solana wallet address (base58, 32-44 characters).
^[1-9A-HJ-NP-Za-km-z]{32,44}$Query Parameters
Denomination for monetary fields in the response. Defaults to usd. Pass sol or eur to convert USD snapshot values at read time using ClickHouse reference prices. Historical endpoints use the daily rate for each snapshot date; wallet summary uses current spot. Counts, percentages, timestamps, and ROI are not converted. Invalid values return 400.
usd, sol, eur Quick date range shorthand. Ignored if start/end are set.
1d, 7d, 14d, 30d, 90d, all Start date (YYYY-MM-DD). Defaults to 30 days ago.
End date (YYYY-MM-DD). Defaults to today.
Maximum number of days to return. If more days exist, returns the most recent ones.
x <= 1000Response
Successful response.
Response denomination when ?currency=sol or ?currency=eur is requested. Omitted for the default USD response.
sol, eur Unified wallet identity. Only fields with known values are returned; a wallet can carry multiple tags at once.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Was this page helpful?