Transactions
curl --request GET \
--url https://api.cabalspy.xyz/v1/tokens/transactionsimport requests
url = "https://api.cabalspy.xyz/v1/tokens/transactions"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.cabalspy.xyz/v1/tokens/transactions', 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/transactions",
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/transactions"
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/transactions")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cabalspy.xyz/v1/tokens/transactions")
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
},
"transactions": [
{
"tx_signature": "5xr8abc...",
"transaction_type": "buy",
"value": 1.66,
"value_usd": 137.44,
"currency": "SOL",
"token_amount": 22113972.03,
"price_per_token": 7.5e-8,
"price_per_token_usd": 6.2e-6,
"created_at": "2026-07-04T16:25:34Z",
"profile": {
"name": "Maze",
"image_url": "https://cabalspy.xyz/images/7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW.png",
"twitter": "https://x.com/MazeCCC",
"telegram": "",
"blockchain": "solana",
"currency": "SOL",
"type": "kol"
},
"holdings_after": {
"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
}
}
]
},
"pagination": {
"limit": 50,
"total": 1,
"has_more": false,
"next_cursor": null
},
"meta": {
"request_id": "req_5162c7cf7f87",
"cached": false,
"cache_age_seconds": 0,
"version": "1.0.0",
"timestamp": "2026-07-06T11:01:57Z"
}
}
Tokens
Transactions
The individual buy and sell transactions of tracked wallets on one token, newest first, each with the holder position after the trade.
GET
/
v1
/
tokens
/
transactions
Transactions
curl --request GET \
--url https://api.cabalspy.xyz/v1/tokens/transactionsimport requests
url = "https://api.cabalspy.xyz/v1/tokens/transactions"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.cabalspy.xyz/v1/tokens/transactions', 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/transactions",
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/transactions"
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/transactions")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cabalspy.xyz/v1/tokens/transactions")
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
},
"transactions": [
{
"tx_signature": "5xr8abc...",
"transaction_type": "buy",
"value": 1.66,
"value_usd": 137.44,
"currency": "SOL",
"token_amount": 22113972.03,
"price_per_token": 7.5e-8,
"price_per_token_usd": 6.2e-6,
"created_at": "2026-07-04T16:25:34Z",
"profile": {
"name": "Maze",
"image_url": "https://cabalspy.xyz/images/7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW.png",
"twitter": "https://x.com/MazeCCC",
"telegram": "",
"blockchain": "solana",
"currency": "SOL",
"type": "kol"
},
"holdings_after": {
"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
}
}
]
},
"pagination": {
"limit": 50,
"total": 1,
"has_more": false,
"next_cursor": null
},
"meta": {
"request_id": "req_5162c7cf7f87",
"cached": false,
"cache_age_seconds": 0,
"version": "1.0.0",
"timestamp": "2026-07-06T11:01:57Z"
}
}
The individual buy and sell transactions of tracked wallets on one token, newest first. Each entry carries the trader profile, the trade value and token amount, and the holder position after that trade, so you can replay how positions built up or unwound.
Use it to render a live trade tape for a token, the scrolling feed of who bought or sold and when. The token block carries the current market cap.
These are individual events, not positions, so they do not carry unrealized PnL. Each transaction includes holdings_after, the holder bag right after that trade. The list is newest first and paginated with limit. Current market cap in the token block is Solana only.
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 kol, smart or whale. Omit to include all categories.
integer
Maximum number of transactions to return.
string
required
Your API key. Alternatively pass it as an Authorization Bearer header.
Usage Example
curl "https://api.cabalspy.xyz/v1/tokens/transactions?blockchain=solana&mint=3Pkrq4MmLvDXyn1fa3sz5MekKRkZkc1iLDcz5AzWpump&limit=50&api_key=YOUR_KEY"
import requests
params = {
"blockchain": "solana",
"mint": "3Pkrq4MmLvDXyn1fa3sz5MekKRkZkc1iLDcz5AzWpump",
"limit": 50, "api_key": "YOUR_KEY",
}
r = requests.get("https://api.cabalspy.xyz/v1/tokens/transactions", params=params)
d = r.json()["data"]
for tx in d["transactions"]:
print(tx["created_at"], tx["transaction_type"], tx["profile"]["name"], tx["value"])
const p = new URLSearchParams({
blockchain: "solana",
mint: "3Pkrq4MmLvDXyn1fa3sz5MekKRkZkc1iLDcz5AzWpump",
limit: "50", api_key: "YOUR_KEY",
});
const res = await fetch(`https://api.cabalspy.xyz/v1/tokens/transactions?${p}`);
const { data } = await res.json();
data.transactions.forEach(tx =>
console.log(tx.created_at, tx.transaction_type, tx.value));
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 USD conversions. Solana only.
array
Show transaction, newest first
Show transaction, newest first
string
Transaction signature.
string
buy or sell.
number
Trade value (native).
number
Trade value in USD.
string
Native currency.
number
Number of tokens in the trade.
number
Price per token (native).
number
Price per token in USD.
string
ISO timestamp of the trade.
object
Wallet profile of the trader (name, image_url, twitter, telegram, blockchain, currency, type).
{
"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
},
"transactions": [
{
"tx_signature": "5xr8abc...",
"transaction_type": "buy",
"value": 1.66,
"value_usd": 137.44,
"currency": "SOL",
"token_amount": 22113972.03,
"price_per_token": 7.5e-8,
"price_per_token_usd": 6.2e-6,
"created_at": "2026-07-04T16:25:34Z",
"profile": {
"name": "Maze",
"image_url": "https://cabalspy.xyz/images/7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW.png",
"twitter": "https://x.com/MazeCCC",
"telegram": "",
"blockchain": "solana",
"currency": "SOL",
"type": "kol"
},
"holdings_after": {
"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
}
}
]
},
"pagination": {
"limit": 50,
"total": 1,
"has_more": false,
"next_cursor": null
},
"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

