import { Client } from '@solana-tracker/data-api';
const client = new Client({ apiKey: 'YOUR_API_KEY' });
const data = await client.getPnlV2WalletOverview('FbMxP3GVq8TQ36nbYgx4NP9iygMpwAwFWJwW81ioCiSF');
curl --request GET \
--url https://data.solanatracker.io/v2/pnl/wallets/{wallet} \
--header 'x-api-key: <api-key>'import requests
url = "https://data.solanatracker.io/v2/pnl/wallets/{wallet}"
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}', 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}",
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}"
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}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://data.solanatracker.io/v2/pnl/wallets/{wallet}")
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",
"pnlMode": "strict",
"identity": {
"name": "Cented",
"twitter": "@Cented7",
"avatar": "https://kol-avatar.solanatracker.io/CyaE1VxvBrahnPWkqm5VsdCvyS2QmNht2UFrKJHga54o",
"platforms": [
"axiom",
"bloom"
],
"type": "kol",
"tags": [
"kol",
"axiom",
"bloom"
]
},
"summary": {
"pnl": {
"realized": 10705447.32,
"unrealized": 1395.74,
"total": 10706843.06
},
"invested": 49779099.94,
"proceeds": 60484547.26,
"openPositions": {
"cost": 5118.14,
"value": 7855.98
},
"counts": {
"buys": 196215,
"sells": 138588,
"trades": 334803,
"tokensTraded": 78676,
"tokensHeldEver": 78553
},
"averages": {
"buy": 259.77,
"sell": 436.43
},
"roi": 21.51,
"timing": {
"firstTrade": 1738348560665,
"lastTrade": 1777057718629,
"avgHoldTimeSecs": 20391
}
},
"analysis": {
"winRate": 61.17,
"avgPnlPerAsset": 135.12,
"avgBuyValue": 648.88,
"tokens": {
"closed": 78518,
"winning": 48029,
"losing": 30375
},
"distribution": [
{
"range": ">500%",
"count": 145,
"rate": 0.18
},
{
"range": "200-500%",
"count": 1068,
"rate": 1.36
},
{
"range": "50-200%",
"count": 10662,
"rate": 13.58
},
{
"range": "0-50%",
"count": 36273,
"rate": 46.2
},
{
"range": "-50-0%",
"count": 29252,
"rate": 37.26
},
{
"range": "<-50%",
"count": 1118,
"rate": 1.42
}
]
},
"stats": {
"total": 78676,
"holding": 100,
"sold": 78424,
"profitable": 48041,
"losing": 30370
},
"tags": {
"isArbitrage": false,
"platforms": [
"axiom-flash",
"bloom"
]
},
"updatedAt": "2026-04-24T19:08:38.649Z"
}{
"error": "<string>"
}{
"error": "<string>"
}Get Wallet Summary
Returns the top-level trading summary for a wallet: total PnL, win rate, averages, counts, ROI buckets, platform tags, and summary.timing.avgHoldTimeSecs. Use /positions when you need per-token detail. Pass ?currency=sol or ?currency=eur to convert monetary fields at read time using current spot reference prices.
import { Client } from '@solana-tracker/data-api';
const client = new Client({ apiKey: 'YOUR_API_KEY' });
const data = await client.getPnlV2WalletOverview('FbMxP3GVq8TQ36nbYgx4NP9iygMpwAwFWJwW81ioCiSF');
curl --request GET \
--url https://data.solanatracker.io/v2/pnl/wallets/{wallet} \
--header 'x-api-key: <api-key>'import requests
url = "https://data.solanatracker.io/v2/pnl/wallets/{wallet}"
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}', 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}",
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}"
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}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://data.solanatracker.io/v2/pnl/wallets/{wallet}")
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",
"pnlMode": "strict",
"identity": {
"name": "Cented",
"twitter": "@Cented7",
"avatar": "https://kol-avatar.solanatracker.io/CyaE1VxvBrahnPWkqm5VsdCvyS2QmNht2UFrKJHga54o",
"platforms": [
"axiom",
"bloom"
],
"type": "kol",
"tags": [
"kol",
"axiom",
"bloom"
]
},
"summary": {
"pnl": {
"realized": 10705447.32,
"unrealized": 1395.74,
"total": 10706843.06
},
"invested": 49779099.94,
"proceeds": 60484547.26,
"openPositions": {
"cost": 5118.14,
"value": 7855.98
},
"counts": {
"buys": 196215,
"sells": 138588,
"trades": 334803,
"tokensTraded": 78676,
"tokensHeldEver": 78553
},
"averages": {
"buy": 259.77,
"sell": 436.43
},
"roi": 21.51,
"timing": {
"firstTrade": 1738348560665,
"lastTrade": 1777057718629,
"avgHoldTimeSecs": 20391
}
},
"analysis": {
"winRate": 61.17,
"avgPnlPerAsset": 135.12,
"avgBuyValue": 648.88,
"tokens": {
"closed": 78518,
"winning": 48029,
"losing": 30375
},
"distribution": [
{
"range": ">500%",
"count": 145,
"rate": 0.18
},
{
"range": "200-500%",
"count": 1068,
"rate": 1.36
},
{
"range": "50-200%",
"count": 10662,
"rate": 13.58
},
{
"range": "0-50%",
"count": 36273,
"rate": 46.2
},
{
"range": "-50-0%",
"count": 29252,
"rate": 37.26
},
{
"range": "<-50%",
"count": 1118,
"rate": 1.42
}
]
},
"stats": {
"total": 78676,
"holding": 100,
"sold": 78424,
"profitable": 48041,
"losing": 30370
},
"tags": {
"isArbitrage": false,
"platforms": [
"axiom-flash",
"bloom"
]
},
"updatedAt": "2026-04-24T19:08:38.649Z"
}{
"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.getPnlV2WalletOverview('FbMxP3GVq8TQ36nbYgx4NP9iygMpwAwFWJwW81ioCiSF');
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
How to treat positions flagged by the invalid PnL heuristic. strict zeros them out, adjusted caps them to a cost-basis-aware value, and raw leaves realized PnL untouched. Aliases pnl_mode and mode are also accepted by the API.
strict, adjusted, raw 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 Response
Successful response.
strict, adjusted, raw 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
Aggregated wallet-level PnL summary across all positions.
Show child attributes
Show child attributes
Win/loss analysis computed across all closed positions.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Metadata tags about the wallet.
Show child attributes
Show child attributes
Was this page helpful?