Choose the window with period, one of 6h, 1d, 7d or 30d. Windows are rolling, counted back from now. The PnL chart starts at 0 at the beginning of the period and ends at the period’s realized PnL, with one point every 15 minutes.
Query Parameters
string
required
Chain of the wallet. One of solana, bnb, base, eth, rh.
string
required
A wallet verified on this chain by one of your users.
string
default:"1d"
Aggregation window, one of 6h, 1d, 7d or 30d.
string
default:"instance"
global allows any CabalSpy ID wallet. Enterprise plan only.string
Your Instance ID. Only needed when your account has several instances.
string
required
Your API key. Alternatively pass it as an Authorization Bearer header.
Usage Example
curl "https://api-id.cabalspy.xyz/v1/wallets/tracker?blockchain=solana&address=7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW&period=7d" \
-H "Authorization: Bearer YOUR_KEY"
import requests
params = {
"blockchain": "solana",
"address": "7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW",
"period": "7d",
}
r = requests.get("https://api-id.cabalspy.xyz/v1/wallets/tracker", params=params,
headers={"Authorization": "Bearer YOUR_KEY"})
d = r.json()["data"]
ps = d["period_stats"]
print(d["profile"]["username"], "realized pnl", ps["realized_pnl"], d["profile"]["currency"])
print("win rate", d["period_win_rate_distribution"]["win_rate_percentage"], "%")
const p = new URLSearchParams({
blockchain: "solana",
address: "7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW",
period: "7d",
});
const res = await fetch(`https://api-id.cabalspy.xyz/v1/wallets/tracker?${p}`, {
headers: { Authorization: "Bearer YOUR_KEY" },
});
const { data } = await res.json();
console.log(data.profile.username, "pnl", data.period_stats.realized_pnl_usd);
Response
boolean
True on success.
object
Show data
Show data
string
The profiled wallet address.
object
Show profile
Show profile
string
The owner’s CabalSpy ID.
string
X handle, or
tg.<telegram username> / id.<10 hex characters> for users without X.string
Display name.
string
Avatar URL.
string
X profile link, null without X.
string
Link to the owner’s verified Telegram account (
https://t.me/<username>), or an empty string.string
Chain.
string
Native currency.
string
Always csid.
boolean
Whether the owner holds the KOL badge.
string
The hours of the day (UTC) with most of the trades of the last 30 days, for example “13:00-21:00 UTC”. Empty without trades.
string
Public CabalSpy ID profile.
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), sells minus buys.
number
Realized PnL in USD.
number
Realized PnL as a percentage of the buy volume.
integer
Number of buys.
integer
Number of sells.
number
Largest single buy in the period (native).
number
Best realized PnL on a single token.
number
Worst realized PnL on a single token.
integer
Winning closed positions.
integer
Losing closed positions.
number
Average time from first buy to first sell, in minutes.
object
Show period_win_rate_distribution
Show period_win_rate_distribution
integer
Winning closed positions. A position is closed once at least 99 percent of the bought tokens are sold.
integer
Closed positions.
number
Wins divided by closed positions, as a percentage.
integer
Tokens sold for at least 5x the buy.
integer
Tokens sold for 2x to 5x.
integer
Tokens sold for more than 1x and less than 2x.
integer
Tokens sold at a loss.
object
array
Show token
Show token
string
Token mint or contract.
string
Token name.
string
Token symbol.
string
Token logo URL.
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 bought minus tokens sold in the period.
number
Realized PnL on this token (native).
number
Realized PnL in USD.
number
Realized PnL percentage.
string
Native currency.
array
array
Show trade
Show trade
string
Transaction signature or hash.
string
Token mint or contract.
string
Token symbol or name.
string
Token logo URL.
string
buy or sell.
number
Trade value (native), on buys. Sells carry sell_value instead.
number
Trade value in USD, on buys. Sells carry sell_value_usd instead.
number
Tokens bought or sold.
string
ISO timestamp of the trade.
{
"success": true,
"data": {
"wallet": "7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW",
"profile": {
"csid_id": "0b7c4a52-3f1e-4f43-9d0a-2b5e7c1d9a11",
"username": "MazeCCC",
"name": "Maze",
"image_url": "https://pbs.twimg.com/profile_images/.../photo.jpg",
"twitter": "https://x.com/MazeCCC",
"telegram": "",
"blockchain": "solana",
"currency": "SOL",
"type": "csid",
"kol": true,
"active_hours": "13:00-21:00 UTC",
"profile_url": "https://id.cabalspy.xyz/u/MazeCCC"
},
"period_stats": {
"period": "7d",
"total_buy": 180.25,
"total_buy_usd": 14840.6,
"total_sell": 228.45,
"total_sell_usd": 18809.2,
"volume": 408.7,
"volume_usd": 33649.8,
"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_count": 14,
"closed_count": 18,
"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": 8.19,
"still_holding_count": 3
},
"period_history_tokens": [
{
"mint": "3Pkrq4MmLvDXyn1fa3sz5MekKRkZkc1iLDcz5AzWpump",
"token_name": "invisibull",
"token_symbol": "invisibull",
"token_logo": "https://...",
"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,
"realized_pnl": -1.66,
"realized_pnl_usd": -137.44,
"realized_pnl_percentage": -100.0,
"currency": "SOL",
"remaining_tokens": 22113972.03
}
],
"period_realized_pnl_chart": [
{ "timestamp": "2026-10-06T08:00:00Z", "realized_pnl": 0.0, "realized_pnl_usd": 0.0 },
{ "timestamp": "2026-10-06T08:15:00Z", "realized_pnl": 0.0, "realized_pnl_usd": 0.0 },
{ "timestamp": "2026-10-13T08:00:00Z", "realized_pnl": 48.2, "realized_pnl_usd": 3968.6 }
],
"period_trades": [
{
"mint": "3Pkrq4MmLvDXyn1fa3sz5MekKRkZkc1iLDcz5AzWpump",
"token_name": "invisibull",
"token_logo": "https://...",
"transaction_type": "buy",
"buy_token": null,
"sell_token": null,
"buy_value": 1.66,
"buy_value_usd": 137.44,
"token_amount": 22113972.03,
"created_at": "2026-10-12T16:25:34Z",
"tx_signature": "5xr8..."
}
]
},
"meta": {
"request_id": "req_5162c7cf7f87",
"cached": false,
"cache_age_seconds": 0,
"version": "v1",
"timestamp": "2026-10-13T08:00:00Z"
}
}
Errors
| Status | Code | Meaning |
|---|---|---|
| 400 | missing_parameter | blockchain or address is missing. |
| 400 | invalid_parameter | blockchain, period or address invalid. |
| 401 | missing_api_key | API key missing. |
| 403 | invalid_api_key | API key invalid or not enabled for CabalSpy ID. |
| 403 | scope_not_allowed | scope=global needs the Enterprise plan. |
| 404 | wallet_not_found | The wallet is not verified on this chain by one of your users. |
| 429 | rate_limit_exceeded | Rate limit exceeded. |

