Stats
curl --request GET \
--url https://api.cabalspy.xyz/v1/tokens/statsimport requests
url = "https://api.cabalspy.xyz/v1/tokens/stats"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.cabalspy.xyz/v1/tokens/stats', 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/tokens/stats",
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/tokens/stats"
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/tokens/stats")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cabalspy.xyz/v1/tokens/stats")
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": {
"token": {
"mint": "3Pkrq4MmLvDXyn1fa3sz5MekKRkZkc1iLDcz5AzWpump",
"token_name": "invisibull",
"blockchain": "solana",
"currency": "SOL",
"token_supply": 1000000000,
"token_decimals": 6,
"market_cap": 40.08,
"market_cap_usd": 3301.2,
"market_cap_currency": "SOL",
"price": 4.008e-8,
"price_usd": 3.3e-6,
"sol_price_usd": 82.36
},
"total_holders": {
"kol_count": 1,
"smart_count": 0,
"whale_count": 0,
"still_holding_count": 1
},
"total_holdings": {
"token_amount": 22113972.03,
"token_amount_peak": 22113972.03,
"supply_pct": 2.211397,
"supply_pct_peak": 2.211397
},
"total_statistics": {
"total_buy": 1.66,
"total_buy_usd": 137.44,
"total_sell": 0.0,
"total_sell_usd": 0.0,
"net_flow": 1.66,
"net_flow_usd": 137.44,
"total_volume": 1.66,
"total_volume_usd": 137.44,
"avg_position_size": 1.66,
"largest_position": 1.66,
"buying_pressure": 100.0,
"first_entry_time": "2026-07-04T16:25:34Z",
"first_entry_type": "buy",
"first_entry_wallet_address": "7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW",
"latest_entry_time": "2026-07-04T16:25:34Z",
"latest_entry_type": "buy",
"latest_entry_wallet_address": "7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW",
"time_since_first_entry_hours": 42.6
},
"traders": [
{
"profile": {
"name": "Maze",
"image_url": "https://cabalspy.xyz/images/7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW.png",
"twitter": "https://x.com/MazeCCC",
"telegram": "",
"blockchain": "solana",
"currency": "SOL",
"type": "kol"
},
"trader_stats": {
"buy": 1.66,
"buy_usd": 137.44,
"sell": 0.0,
"sell_usd": 0.0,
"volume_buy": 1.66,
"volume_buy_usd": 137.44,
"volume_sell": 0.0,
"volume_sell_usd": 0.0,
"realized_pnl": 0.0,
"realized_pnl_usd": 0.0,
"realized_pnl_percentage": 0.0,
"buy_count": 1,
"sell_count": 0,
"buy_tokens": 22113972.03,
"sell_tokens": 0.0,
"avg_buy_price": 7.5e-8,
"first_trade_at": "2026-07-04T16:25:34Z",
"last_trade_at": "2026-07-04T16:25:34Z"
},
"trader_holdings": {
"token_amount": 22113972.03,
"token_amount_peak": 22113972.03,
"supply_pct": 2.211397,
"supply_pct_peak": 2.211397,
"bag_pct": 100.0,
"still_holding": true,
"unrealized_pnl_sol": -0.099817,
"unrealized_pnl_usd": -8.22,
"unrealized_pnl_pct": -10.12,
"remaining_sol": 0.886537,
"remaining_usd": 73.02,
"entry_market_cap": 44.6,
"entry_market_cap_usd": 3673.2
}
}
]
},
"meta": {
"request_id": "req_5162c7cf7f87",
"cached": false,
"cache_age_seconds": 0,
"version": "1.0.0",
"timestamp": "2026-07-06T11:01:57Z"
}
}
Tokens
Stats
Aggregate trading statistics for one token across tracked wallets, with current market cap, holder totals, flow stats and a per trader breakdown.
GET
/
v1
/
tokens
/
stats
Stats
curl --request GET \
--url https://api.cabalspy.xyz/v1/tokens/statsimport requests
url = "https://api.cabalspy.xyz/v1/tokens/stats"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.cabalspy.xyz/v1/tokens/stats', 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/tokens/stats",
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/tokens/stats"
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/tokens/stats")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cabalspy.xyz/v1/tokens/stats")
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": {
"token": {
"mint": "3Pkrq4MmLvDXyn1fa3sz5MekKRkZkc1iLDcz5AzWpump",
"token_name": "invisibull",
"blockchain": "solana",
"currency": "SOL",
"token_supply": 1000000000,
"token_decimals": 6,
"market_cap": 40.08,
"market_cap_usd": 3301.2,
"market_cap_currency": "SOL",
"price": 4.008e-8,
"price_usd": 3.3e-6,
"sol_price_usd": 82.36
},
"total_holders": {
"kol_count": 1,
"smart_count": 0,
"whale_count": 0,
"still_holding_count": 1
},
"total_holdings": {
"token_amount": 22113972.03,
"token_amount_peak": 22113972.03,
"supply_pct": 2.211397,
"supply_pct_peak": 2.211397
},
"total_statistics": {
"total_buy": 1.66,
"total_buy_usd": 137.44,
"total_sell": 0.0,
"total_sell_usd": 0.0,
"net_flow": 1.66,
"net_flow_usd": 137.44,
"total_volume": 1.66,
"total_volume_usd": 137.44,
"avg_position_size": 1.66,
"largest_position": 1.66,
"buying_pressure": 100.0,
"first_entry_time": "2026-07-04T16:25:34Z",
"first_entry_type": "buy",
"first_entry_wallet_address": "7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW",
"latest_entry_time": "2026-07-04T16:25:34Z",
"latest_entry_type": "buy",
"latest_entry_wallet_address": "7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW",
"time_since_first_entry_hours": 42.6
},
"traders": [
{
"profile": {
"name": "Maze",
"image_url": "https://cabalspy.xyz/images/7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW.png",
"twitter": "https://x.com/MazeCCC",
"telegram": "",
"blockchain": "solana",
"currency": "SOL",
"type": "kol"
},
"trader_stats": {
"buy": 1.66,
"buy_usd": 137.44,
"sell": 0.0,
"sell_usd": 0.0,
"volume_buy": 1.66,
"volume_buy_usd": 137.44,
"volume_sell": 0.0,
"volume_sell_usd": 0.0,
"realized_pnl": 0.0,
"realized_pnl_usd": 0.0,
"realized_pnl_percentage": 0.0,
"buy_count": 1,
"sell_count": 0,
"buy_tokens": 22113972.03,
"sell_tokens": 0.0,
"avg_buy_price": 7.5e-8,
"first_trade_at": "2026-07-04T16:25:34Z",
"last_trade_at": "2026-07-04T16:25:34Z"
},
"trader_holdings": {
"token_amount": 22113972.03,
"token_amount_peak": 22113972.03,
"supply_pct": 2.211397,
"supply_pct_peak": 2.211397,
"bag_pct": 100.0,
"still_holding": true,
"unrealized_pnl_sol": -0.099817,
"unrealized_pnl_usd": -8.22,
"unrealized_pnl_pct": -10.12,
"remaining_sol": 0.886537,
"remaining_usd": 73.02,
"entry_market_cap": 44.6,
"entry_market_cap_usd": 3673.2
}
}
]
},
"meta": {
"request_id": "req_5162c7cf7f87",
"cached": false,
"cache_age_seconds": 0,
"version": "1.0.0",
"timestamp": "2026-07-06T11:01:57Z"
}
}
Everything CabalSpy knows about how tracked wallets trade one token. Returns the token block with its current market cap, holder totals by wallet type, aggregate flow statistics, and a per trader breakdown with each trader stats and live position.
Use it to build a token detail page that shows which KOLs and smart money are in a token, how much they hold, and whether they are buying or selling right now.
Market cap, price and the live position fields (unrealized PnL, remaining value) are only present on Solana. On other chains those fields are null. Pass a single type to narrow to one wallet category, or omit type to aggregate all categories.
Query Parameters
string
required
Chain of the token. One of solana, bnb, base, eth.
string
required
The token mint or contract address.
string
Optional wallet category to narrow the breakdown kol, smart or whale. Omit to aggregate across all categories available on the chain.
string
required
Your API key. Alternatively pass it as an Authorization Bearer header.
Usage Example
curl "https://api.cabalspy.xyz/v1/tokens/stats?blockchain=solana&mint=3Pkrq4MmLvDXyn1fa3sz5MekKRkZkc1iLDcz5AzWpump&api_key=YOUR_KEY"
import requests
params = {
"blockchain": "solana",
"mint": "3Pkrq4MmLvDXyn1fa3sz5MekKRkZkc1iLDcz5AzWpump",
"api_key": "YOUR_KEY",
}
r = requests.get("https://api.cabalspy.xyz/v1/tokens/stats", params=params)
d = r.json()["data"]
print("market cap", d["token"]["market_cap"], d["token"]["market_cap_currency"])
for t in d["traders"]:
h = t["trader_holdings"]
print(t["profile"]["name"], "bag", h["bag_pct"], "uPNL", h.get("unrealized_pnl_sol"))
const p = new URLSearchParams({
blockchain: "solana",
mint: "3Pkrq4MmLvDXyn1fa3sz5MekKRkZkc1iLDcz5AzWpump",
api_key: "YOUR_KEY",
});
const res = await fetch(`https://api.cabalspy.xyz/v1/tokens/stats?${p}`);
const { data } = await res.json();
console.log("market cap", data.token.market_cap);
Response
boolean
True on success.
object
Show data
Show data
object
Show token
Show token
string
Token mint or contract address.
string
Token name.
string
Chain.
string
Native currency.
number
Total supply.
integer
Token decimals.
number
Current market cap in native currency. Solana only, null otherwise.
number
Current market cap in USD. Solana only, null otherwise.
string
Currency of the market cap value (SOL), or null.
number
Current token price in native currency. Solana only.
number
Current token price in USD. Solana only.
number
SOL price in USD used for the USD conversions. Solana only.
object
object
object
Show total_statistics
Show total_statistics
number
Total bought (native).
number
Total bought in USD.
number
Total sold (native).
number
Total sold in USD.
number
Buy minus sell (native). Positive means net accumulation.
number
Net flow in USD.
number
Buy plus sell volume (native).
number
Buy plus sell volume in USD.
number
Average position size (native).
number
Largest single position (native).
number
Buy share of total volume, an indicator of pressure.
string
When the first tracked wallet entered.
string
buy or sell of the first entry.
string
Address of the first entrant.
string
When the most recent tracked wallet entered.
string
buy or sell of the latest entry.
string
Address of the latest entrant.
number
Hours since the first entry.
array
Show trader, sorted by buy volume highest first
Show trader, sorted by buy volume highest first
object
Wallet profile (name, image_url, twitter, telegram, blockchain, currency, type).
object
Show trader_stats
Show trader_stats
number
Total bought (native).
number
Total bought in USD.
number
Total sold (native).
number
Total sold in USD.
number
Buy volume (native).
number
Buy volume in USD.
number
Sell volume (native).
number
Sell volume in USD.
number
Realized PnL on this token (native).
number
Realized PnL in USD.
number
Realized PnL percentage.
integer
Number of buys.
integer
Number of sells.
number
Tokens bought.
number
Tokens sold.
number
Average buy price.
string
ISO timestamp of the first trade.
string
ISO timestamp of the last trade.
object
Show trader_holdings
Show trader_holdings
number
Tokens currently held.
number
Peak tokens held.
number
Percent of supply held.
number
Peak percent of supply held.
number
Percent of peak holding still held.
boolean
Whether the trader still holds.
number
Unrealized PnL on the remaining bag (native). Solana only. Frozen to 0 once fully sold.
number
Unrealized PnL in USD. Solana only.
number
Unrealized PnL percentage. Solana only.
number
Current value of the remaining bag (native). Solana only.
number
Current value of the remaining bag in USD. Solana only.
number
Market cap in SOL when the wallet first bought, frozen. Solana only, null for older positions.
number
Entry market cap in USD, frozen at buy time. Solana only, null for older positions.
{
"success": true,
"data": {
"token": {
"mint": "3Pkrq4MmLvDXyn1fa3sz5MekKRkZkc1iLDcz5AzWpump",
"token_name": "invisibull",
"blockchain": "solana",
"currency": "SOL",
"token_supply": 1000000000,
"token_decimals": 6,
"market_cap": 40.08,
"market_cap_usd": 3301.2,
"market_cap_currency": "SOL",
"price": 4.008e-8,
"price_usd": 3.3e-6,
"sol_price_usd": 82.36
},
"total_holders": {
"kol_count": 1,
"smart_count": 0,
"whale_count": 0,
"still_holding_count": 1
},
"total_holdings": {
"token_amount": 22113972.03,
"token_amount_peak": 22113972.03,
"supply_pct": 2.211397,
"supply_pct_peak": 2.211397
},
"total_statistics": {
"total_buy": 1.66,
"total_buy_usd": 137.44,
"total_sell": 0.0,
"total_sell_usd": 0.0,
"net_flow": 1.66,
"net_flow_usd": 137.44,
"total_volume": 1.66,
"total_volume_usd": 137.44,
"avg_position_size": 1.66,
"largest_position": 1.66,
"buying_pressure": 100.0,
"first_entry_time": "2026-07-04T16:25:34Z",
"first_entry_type": "buy",
"first_entry_wallet_address": "7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW",
"latest_entry_time": "2026-07-04T16:25:34Z",
"latest_entry_type": "buy",
"latest_entry_wallet_address": "7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW",
"time_since_first_entry_hours": 42.6
},
"traders": [
{
"profile": {
"name": "Maze",
"image_url": "https://cabalspy.xyz/images/7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW.png",
"twitter": "https://x.com/MazeCCC",
"telegram": "",
"blockchain": "solana",
"currency": "SOL",
"type": "kol"
},
"trader_stats": {
"buy": 1.66,
"buy_usd": 137.44,
"sell": 0.0,
"sell_usd": 0.0,
"volume_buy": 1.66,
"volume_buy_usd": 137.44,
"volume_sell": 0.0,
"volume_sell_usd": 0.0,
"realized_pnl": 0.0,
"realized_pnl_usd": 0.0,
"realized_pnl_percentage": 0.0,
"buy_count": 1,
"sell_count": 0,
"buy_tokens": 22113972.03,
"sell_tokens": 0.0,
"avg_buy_price": 7.5e-8,
"first_trade_at": "2026-07-04T16:25:34Z",
"last_trade_at": "2026-07-04T16:25:34Z"
},
"trader_holdings": {
"token_amount": 22113972.03,
"token_amount_peak": 22113972.03,
"supply_pct": 2.211397,
"supply_pct_peak": 2.211397,
"bag_pct": 100.0,
"still_holding": true,
"unrealized_pnl_sol": -0.099817,
"unrealized_pnl_usd": -8.22,
"unrealized_pnl_pct": -10.12,
"remaining_sol": 0.886537,
"remaining_usd": 73.02,
"entry_market_cap": 44.6,
"entry_market_cap_usd": 3673.2
}
}
]
},
"meta": {
"request_id": "req_5162c7cf7f87",
"cached": false,
"cache_age_seconds": 0,
"version": "1.0.0",
"timestamp": "2026-07-06T11:01:57Z"
}
}
Errors
| Status | Code | Meaning |
|---|---|---|
| 400 | missing_parameter | mint is missing. |
| 400 | invalid_parameter | blockchain or type invalid. |
| 401 | unauthorized | API key missing. |
| 403 | forbidden | API key invalid or credits exhausted. |
| 429 | rate_limited | Rate limit exceeded. |
⌘I

