Tracker
curl --request GET \
--url https://api.cabalspy.xyz/v1/wallets/trackerimport requests
url = "https://api.cabalspy.xyz/v1/wallets/tracker"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.cabalspy.xyz/v1/wallets/tracker', 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://api.cabalspy.xyz/v1/wallets/tracker",
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://api.cabalspy.xyz/v1/wallets/tracker"
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://api.cabalspy.xyz/v1/wallets/tracker")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cabalspy.xyz/v1/wallets/tracker")
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{
"success": true,
"data": {
"wallet": "7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW",
"profile": {
"name": "Maze",
"image_url": "https://cabalspy.xyz/images/7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW.png",
"twitter": "https://x.com/MazeCCC",
"telegram": "",
"blockchain": "solana",
"currency": "SOL",
"type": "kol",
"active_hours": [13, 14, 15, 20, 21]
},
"period_stats": {
"period": "7d",
"total_buy": 180.25,
"total_buy_usd": 14840.6,
"total_sell": 132.25,
"total_sell_usd": 10890.65,
"volume": 312.5,
"volume_usd": 25731.25,
"realized_pnl": 48.2,
"realized_pnl_usd": 3968.6,
"realized_pnl_percentage": 26.74,
"buy_txn": 22,
"sell_txn": 18,
"largest_buy": 22.0,
"best_trade_pnl": 31.4,
"worst_trade_pnl": -8.9,
"win_count": 14,
"loss_count": 4,
"avg_hold_time_minutes": 84.5
},
"period_win_rate_distribution": {
"win_rate": 14,
"win_rate_percentage": 77.78,
"above_500": 1,
"above_100_to_500": 4,
"above_zero_to_100": 9,
"below_zero": 4
},
"period_active_tokens": {
"active_tokens_count": 3,
"avg_position_size": 4.12,
"still_holding_count": 3
},
"period_active_tokens_list": [
{
"token_name": "invisibull",
"buy_value": 1.66,
"buy_value_usd": 137.44,
"sell_value": 0.0,
"sell_value_usd": 0.0,
"buy_tokens": 22113972.03,
"sell_tokens": 0.0,
"remaining_tokens": 22113972.03,
"realized_pnl": -1.66,
"realized_pnl_usd": -137.44,
"realized_pnl_percentage": -100.0,
"bag_pct": 100.0,
"supply_pct": 2.21
}
],
"period_history_tokens": [
{
"token_name": "Pengu",
"buy_value": 1.48,
"buy_value_usd": 121.98,
"sell_value": 1.15,
"sell_value_usd": 95.46,
"buy_tokens": 266294.3,
"sell_tokens": 266294.3,
"realized_pnl": -0.32,
"realized_pnl_usd": -26.52,
"realized_pnl_percentage": -21.62
}
],
"period_realized_pnl_chart": [
{ "timestamp": "2026-07-01T00:00:00Z", "realized_pnl": 12.4, "realized_pnl_usd": 1020.6 },
{ "timestamp": "2026-07-04T00:00:00Z", "realized_pnl": 48.2, "realized_pnl_usd": 3968.6 }
],
"period_trades": [
{
"signature": "5xr8...",
"mint": "3Pkrq4MmLvDXyn1fa3sz5MekKRkZkc1iLDcz5AzWpump",
"token_symbol": "invisibull",
"transaction_type": "buy",
"value": 1.66,
"currency": "SOL",
"wallet_type": "kol",
"created_at": "2026-07-04T16:25:34Z"
}
]
},
"meta": {
"request_id": "req_5162c7cf7f87",
"cached": true,
"cache_age_seconds": 42,
"version": "1.0.0",
"timestamp": "2026-07-06T11:01:57Z"
}
}
Wallet data
Tracker
Full trading profile for one wallet over a period, with period stats, win rate distribution, active and historical tokens, a realized PnL chart and recent trades.
GET
/
v1
/
wallets
/
tracker
Tracker
curl --request GET \
--url https://api.cabalspy.xyz/v1/wallets/trackerimport requests
url = "https://api.cabalspy.xyz/v1/wallets/tracker"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.cabalspy.xyz/v1/wallets/tracker', 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://api.cabalspy.xyz/v1/wallets/tracker",
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://api.cabalspy.xyz/v1/wallets/tracker"
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://api.cabalspy.xyz/v1/wallets/tracker")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cabalspy.xyz/v1/wallets/tracker")
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{
"success": true,
"data": {
"wallet": "7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW",
"profile": {
"name": "Maze",
"image_url": "https://cabalspy.xyz/images/7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW.png",
"twitter": "https://x.com/MazeCCC",
"telegram": "",
"blockchain": "solana",
"currency": "SOL",
"type": "kol",
"active_hours": [13, 14, 15, 20, 21]
},
"period_stats": {
"period": "7d",
"total_buy": 180.25,
"total_buy_usd": 14840.6,
"total_sell": 132.25,
"total_sell_usd": 10890.65,
"volume": 312.5,
"volume_usd": 25731.25,
"realized_pnl": 48.2,
"realized_pnl_usd": 3968.6,
"realized_pnl_percentage": 26.74,
"buy_txn": 22,
"sell_txn": 18,
"largest_buy": 22.0,
"best_trade_pnl": 31.4,
"worst_trade_pnl": -8.9,
"win_count": 14,
"loss_count": 4,
"avg_hold_time_minutes": 84.5
},
"period_win_rate_distribution": {
"win_rate": 14,
"win_rate_percentage": 77.78,
"above_500": 1,
"above_100_to_500": 4,
"above_zero_to_100": 9,
"below_zero": 4
},
"period_active_tokens": {
"active_tokens_count": 3,
"avg_position_size": 4.12,
"still_holding_count": 3
},
"period_active_tokens_list": [
{
"token_name": "invisibull",
"buy_value": 1.66,
"buy_value_usd": 137.44,
"sell_value": 0.0,
"sell_value_usd": 0.0,
"buy_tokens": 22113972.03,
"sell_tokens": 0.0,
"remaining_tokens": 22113972.03,
"realized_pnl": -1.66,
"realized_pnl_usd": -137.44,
"realized_pnl_percentage": -100.0,
"bag_pct": 100.0,
"supply_pct": 2.21
}
],
"period_history_tokens": [
{
"token_name": "Pengu",
"buy_value": 1.48,
"buy_value_usd": 121.98,
"sell_value": 1.15,
"sell_value_usd": 95.46,
"buy_tokens": 266294.3,
"sell_tokens": 266294.3,
"realized_pnl": -0.32,
"realized_pnl_usd": -26.52,
"realized_pnl_percentage": -21.62
}
],
"period_realized_pnl_chart": [
{ "timestamp": "2026-07-01T00:00:00Z", "realized_pnl": 12.4, "realized_pnl_usd": 1020.6 },
{ "timestamp": "2026-07-04T00:00:00Z", "realized_pnl": 48.2, "realized_pnl_usd": 3968.6 }
],
"period_trades": [
{
"signature": "5xr8...",
"mint": "3Pkrq4MmLvDXyn1fa3sz5MekKRkZkc1iLDcz5AzWpump",
"token_symbol": "invisibull",
"transaction_type": "buy",
"value": 1.66,
"currency": "SOL",
"wallet_type": "kol",
"created_at": "2026-07-04T16:25:34Z"
}
]
},
"meta": {
"request_id": "req_5162c7cf7f87",
"cached": true,
"cache_age_seconds": 42,
"version": "1.0.0",
"timestamp": "2026-07-06T11:01:57Z"
}
}
The deepest view of a single wallet. For a chosen period it returns the wallet profile, aggregate period statistics, a win rate distribution across profit buckets, the tokens it is actively holding, the tokens it fully traded through, a realized PnL chart over time, and the most recent individual trades.
Use it to build a wallet detail page in your terminal, a KOL profile card, or a copytrade research view. All data is served from a permanently cached, WebSocket driven store.
Choose the window with period, one of 6h, 1d, 7d or 30d. The profile aggregates only trades inside that window, while lifetime figures where present cover the whole history.
Query Parameters
string
required
Chain of the wallet. One of solana, bnb, base, eth.
string
required
The wallet address to profile.
string
default:"1d"
Aggregation window, one of 6h, 1d, 7d or 30d.
string
required
Your API key. Alternatively pass it as an Authorization Bearer header.
Usage Example
curl "https://api.cabalspy.xyz/v1/wallets/tracker?blockchain=solana&address=7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW&period=7d&api_key=YOUR_KEY"
import requests
params = {
"blockchain": "solana",
"address": "7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW",
"period": "7d",
"api_key": "YOUR_KEY",
}
r = requests.get("https://api.cabalspy.xyz/v1/wallets/tracker", params=params)
d = r.json()["data"]
ps = d["period_stats"]
print(d["profile"]["name"], "realized pnl", ps["realized_pnl"], d["profile"]["currency"])
print("active tokens", d["period_active_tokens"]["active_tokens_count"])
const p = new URLSearchParams({
blockchain: "solana",
address: "7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW",
period: "7d",
api_key: "YOUR_KEY",
});
const res = await fetch(`https://api.cabalspy.xyz/v1/wallets/tracker?${p}`);
const { data } = await res.json();
console.log(data.profile.name, "pnl", data.period_stats.realized_pnl);
Response
boolean
True on success.
object
Show data
Show data
string
The profiled wallet address.
object
object
Show period_stats
Show period_stats
string
The requested window.
number
Buy volume in the period (native).
number
Buy volume in USD.
number
Sell volume in the period (native).
number
Sell volume in USD.
number
Buy plus sell volume (native).
number
Buy plus sell volume in USD.
number
Realized PnL in the period (native).
number
Realized PnL in USD.
number
Realized PnL as a percentage.
integer
Number of buys.
integer
Number of sells.
number
Largest single buy in the period (native).
number
Best single trade realized PnL.
number
Worst single trade realized PnL.
integer
Winning closed positions.
integer
Losing closed positions.
number
Average holding time in minutes.
object
object
array
Show active token
Show active token
string
Token name.
number
Total bought (native).
number
Total bought in USD.
number
Total sold (native).
number
Total sold in USD.
number
Tokens bought.
number
Tokens sold.
number
Tokens still held.
number
Realized PnL on this token (native).
number
Realized PnL in USD.
number
Realized PnL percentage.
number
Percent of peak holding still held.
number
Percent of total supply held.
array
array
{
"success": true,
"data": {
"wallet": "7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW",
"profile": {
"name": "Maze",
"image_url": "https://cabalspy.xyz/images/7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW.png",
"twitter": "https://x.com/MazeCCC",
"telegram": "",
"blockchain": "solana",
"currency": "SOL",
"type": "kol",
"active_hours": [13, 14, 15, 20, 21]
},
"period_stats": {
"period": "7d",
"total_buy": 180.25,
"total_buy_usd": 14840.6,
"total_sell": 132.25,
"total_sell_usd": 10890.65,
"volume": 312.5,
"volume_usd": 25731.25,
"realized_pnl": 48.2,
"realized_pnl_usd": 3968.6,
"realized_pnl_percentage": 26.74,
"buy_txn": 22,
"sell_txn": 18,
"largest_buy": 22.0,
"best_trade_pnl": 31.4,
"worst_trade_pnl": -8.9,
"win_count": 14,
"loss_count": 4,
"avg_hold_time_minutes": 84.5
},
"period_win_rate_distribution": {
"win_rate": 14,
"win_rate_percentage": 77.78,
"above_500": 1,
"above_100_to_500": 4,
"above_zero_to_100": 9,
"below_zero": 4
},
"period_active_tokens": {
"active_tokens_count": 3,
"avg_position_size": 4.12,
"still_holding_count": 3
},
"period_active_tokens_list": [
{
"token_name": "invisibull",
"buy_value": 1.66,
"buy_value_usd": 137.44,
"sell_value": 0.0,
"sell_value_usd": 0.0,
"buy_tokens": 22113972.03,
"sell_tokens": 0.0,
"remaining_tokens": 22113972.03,
"realized_pnl": -1.66,
"realized_pnl_usd": -137.44,
"realized_pnl_percentage": -100.0,
"bag_pct": 100.0,
"supply_pct": 2.21
}
],
"period_history_tokens": [
{
"token_name": "Pengu",
"buy_value": 1.48,
"buy_value_usd": 121.98,
"sell_value": 1.15,
"sell_value_usd": 95.46,
"buy_tokens": 266294.3,
"sell_tokens": 266294.3,
"realized_pnl": -0.32,
"realized_pnl_usd": -26.52,
"realized_pnl_percentage": -21.62
}
],
"period_realized_pnl_chart": [
{ "timestamp": "2026-07-01T00:00:00Z", "realized_pnl": 12.4, "realized_pnl_usd": 1020.6 },
{ "timestamp": "2026-07-04T00:00:00Z", "realized_pnl": 48.2, "realized_pnl_usd": 3968.6 }
],
"period_trades": [
{
"signature": "5xr8...",
"mint": "3Pkrq4MmLvDXyn1fa3sz5MekKRkZkc1iLDcz5AzWpump",
"token_symbol": "invisibull",
"transaction_type": "buy",
"value": 1.66,
"currency": "SOL",
"wallet_type": "kol",
"created_at": "2026-07-04T16:25:34Z"
}
]
},
"meta": {
"request_id": "req_5162c7cf7f87",
"cached": true,
"cache_age_seconds": 42,
"version": "1.0.0",
"timestamp": "2026-07-06T11:01:57Z"
}
}
Errors
| Status | Code | Meaning |
|---|---|---|
| 400 | missing_parameter | address is missing. |
| 400 | invalid_parameter | blockchain or period invalid. |
| 401 | unauthorized | API key missing. |
| 403 | forbidden | API key invalid or credits exhausted. |
| 429 | rate_limited | Rate limit exceeded. |
⌘I

