Skip to main content
POST
/
v2
/
pnl
/
wallets
/
batch
SDK
import { Client } from '@solana-tracker/data-api';

const client = new Client({ apiKey: 'YOUR_API_KEY' });

const data = await client.batchPnlV2WalletSummaries(['FbMxP3GVq8TQ36nbYgx4NP9iygMpwAwFWJwW81ioCiSF']);
curl --request POST \
  --url https://data.solanatracker.io/v2/pnl/wallets/batch \
  --header 'Content-Type: application/json' \
  --header 'x-api-key: <api-key>' \
  --data '
{
  "wallets": [
    "CyaE1VxvBrahnPWkqm5VsdCvyS2QmNht2UFrKJHga54o",
    "vines1vzrYbzLMRdu58ou5XTby4qAqVRLmqo36NKPTg"
  ]
}
'
import requests

url = "https://data.solanatracker.io/v2/pnl/wallets/batch"

payload = { "wallets": ["CyaE1VxvBrahnPWkqm5VsdCvyS2QmNht2UFrKJHga54o", "vines1vzrYbzLMRdu58ou5XTby4qAqVRLmqo36NKPTg"] }
headers = {
    "x-api-key": "<api-key>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
const options = {
  method: 'POST',
  headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
  body: JSON.stringify({
    wallets: [
      'CyaE1VxvBrahnPWkqm5VsdCvyS2QmNht2UFrKJHga54o',
      'vines1vzrYbzLMRdu58ou5XTby4qAqVRLmqo36NKPTg'
    ]
  })
};

fetch('https://data.solanatracker.io/v2/pnl/wallets/batch', 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/batch",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => json_encode([
    'wallets' => [
        'CyaE1VxvBrahnPWkqm5VsdCvyS2QmNht2UFrKJHga54o',
        'vines1vzrYbzLMRdu58ou5XTby4qAqVRLmqo36NKPTg'
    ]
  ]),
  CURLOPT_HTTPHEADER => [
    "Content-Type: application/json",
    "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"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://data.solanatracker.io/v2/pnl/wallets/batch"

	payload := strings.NewReader("{\n  \"wallets\": [\n    \"CyaE1VxvBrahnPWkqm5VsdCvyS2QmNht2UFrKJHga54o\",\n    \"vines1vzrYbzLMRdu58ou5XTby4qAqVRLmqo36NKPTg\"\n  ]\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("x-api-key", "<api-key>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.post("https://data.solanatracker.io/v2/pnl/wallets/batch")
  .header("x-api-key", "<api-key>")
  .header("Content-Type", "application/json")
  .body("{\n  \"wallets\": [\n    \"CyaE1VxvBrahnPWkqm5VsdCvyS2QmNht2UFrKJHga54o\",\n    \"vines1vzrYbzLMRdu58ou5XTby4qAqVRLmqo36NKPTg\"\n  ]\n}")
  .asString();
require 'uri'
require 'net/http'

url = URI("https://data.solanatracker.io/v2/pnl/wallets/batch")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"wallets\": [\n    \"CyaE1VxvBrahnPWkqm5VsdCvyS2QmNht2UFrKJHga54o\",\n    \"vines1vzrYbzLMRdu58ou5XTby4qAqVRLmqo36NKPTg\"\n  ]\n}"

response = http.request(request)
puts response.read_body
{
  "count": 1,
  "wallets": [
    {
      "wallet": "CyaE1VxvBrahnPWkqm5VsdCvyS2QmNht2UFrKJHga54o",
      "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": 8614.39,
          "value": 10010.13
        },
        "counts": {
          "buys": 193041,
          "sells": 141762,
          "trades": 334803,
          "tokensTraded": 78676,
          "tokensHeldEver": 78195
        },
        "averages": {
          "buy": 257.87,
          "sell": 426.66
        },
        "roi": 21.51,
        "timing": {
          "firstTrade": 1713909067699,
          "lastTrade": 1777034218124
        }
      },
      "tags": {
        "isArbitrage": false,
        "platforms": [
          "axiom",
          "bloom"
        ]
      },
      "updatedAt": 1777034218124
    }
  ],
  "notFound": [
    "vines1vzrYbzLMRdu58ou5XTby4qAqVRLmqo36NKPTg"
  ]
}
{
  "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.batchPnlV2WalletSummaries(['FbMxP3GVq8TQ36nbYgx4NP9iygMpwAwFWJwW81ioCiSF']);

Authorizations

x-api-key
string
header
required

API Key for authentication

Body

application/json
wallets
string[]
required

Wallet addresses to summarize. Up to 100 unique valid wallets are processed.

Maximum array length: 100
Example:
[
  "CyaE1VxvBrahnPWkqm5VsdCvyS2QmNht2UFrKJHga54o",
  "vines1vzrYbzLMRdu58ou5XTby4qAqVRLmqo36NKPTg"
]

Response

Wallet summaries found.

count
integer

Number of wallets returned.

wallets
object[]
notFound
string[]

Valid wallets with no indexed summary. Omitted when empty.

invalid
string[]

Wallet addresses that failed Base58 validation. Omitted when empty.

truncated
object

Returned when more than 100 unique valid wallets are submitted.