Bundle Snapshot
curl --request GET \
--url https://api.cabalspy.xyz/v1/bundleimport requests
url = "https://api.cabalspy.xyz/v1/bundle"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.cabalspy.xyz/v1/bundle', 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/bundle",
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/bundle"
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/bundle")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cabalspy.xyz/v1/bundle")
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": {
"blockchain": "solana",
"token": {
"mint": "3Pkrq4MmLvDXyn1fa3sz5MekKRkZkc1iLDcz5AzWpump",
"symbol": "invisibull",
"name": "invisibull",
"supply": 1000000000,
"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,
"pool": "pump",
"on_curve": true,
"bonding_curve_progress": 42.5
},
"bundles": [
{
"bundle_id": "bnd_7f3a2c",
"kol_wallet": "7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW",
"kol_profile": {
"name": "Maze",
"image_url": "https://cabalspy.xyz/images/7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW.png",
"twitter": "https://x.com/MazeCCC",
"telegram": "",
"blockchain": "solana",
"currency": "SOL",
"type": "kol"
},
"confidence": 0.92,
"jito_confirmed": true,
"proof_type": "same_block",
"slot": 301948220,
"wallet_count": 3,
"proof": "slot:301948220",
"verify_hint": "check same slot buys on solscan",
"detected_at": "2026-07-04T16:25:34Z",
"bundle_wallets": [
{
"address": "7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW",
"is_kol": true,
"transaction_type": "buy",
"signature": "5xr8abc...",
"entry_source": "at_discovery",
"position_source": "live",
"profile": {
"name": "Maze",
"image_url": "https://cabalspy.xyz/images/7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW.png",
"twitter": "https://x.com/MazeCCC",
"telegram": "",
"blockchain": "solana",
"currency": "SOL",
"type": "kol"
},
"position": {
"held": 22113972.03,
"peak": 22113972.03,
"bought_tokens": 22113972.03,
"sold_tokens": 0.0,
"bag_pct": 100.0,
"supply_pct": 2.21,
"invested": 1.66,
"invested_usd": 137.44,
"max_single_buy": 1.66,
"buy_txn": 1,
"sell_txn": 0,
"sold_value": 0.0,
"sold_value_usd": 0.0,
"realized_pnl_sol": 0.0,
"realized_pnl_usd": 0.0,
"entry_market_cap": 44.6,
"entry_market_cap_usd": 3673.2,
"unrealized_pnl_sol": -0.099817,
"unrealized_pnl_usd": -8.22,
"unrealized_pnl_pct": -10.12,
"remaining_sol": 0.886537,
"remaining_usd": 73.02,
"first_buy_at": "2026-07-04T16:25:34Z",
"last_activity_at": "2026-07-04T16:40:10Z"
}
},
{
"address": "SideWa11etAbc123...",
"is_kol": false,
"transaction_type": "buy",
"signature": "9kp2def...",
"entry_source": "at_discovery",
"position_source": "live",
"profile": {
"name": "",
"image_url": "",
"twitter": "",
"telegram": "",
"blockchain": "solana",
"currency": "SOL",
"type": null
},
"fee_lamports": 5000,
"block_index": 4,
"adjacent_to_kol": true,
"same_fee": true,
"occurrences": 7,
"position": {
"held": 8000000.0,
"peak": 8000000.0,
"bought_tokens": 8000000.0,
"sold_tokens": 0.0,
"bag_pct": 100.0,
"supply_pct": 0.8,
"invested": 0.6,
"invested_usd": 49.4,
"max_single_buy": 0.6,
"buy_txn": 1,
"sell_txn": 0,
"sold_value": 0.0,
"sold_value_usd": 0.0,
"realized_pnl_sol": 0.0,
"realized_pnl_usd": 0.0,
"entry_market_cap": 44.6,
"entry_market_cap_usd": 3673.2,
"unrealized_pnl_sol": -0.036,
"unrealized_pnl_usd": -2.97,
"unrealized_pnl_pct": -10.12,
"remaining_sol": 0.320,
"remaining_usd": 26.4,
"first_buy_at": "2026-07-04T16:25:34Z",
"last_activity_at": "2026-07-04T16:25:34Z"
}
}
]
}
]
},
"meta": {
"request_id": "req_5162c7cf7f87",
"cached": false,
"cache_age_seconds": 0,
"version": "1.0.0",
"timestamp": "2026-07-06T11:01:57Z"
}
}
Bundle
Bundle Snapshot
Detect coordinated KOL bundles on a Solana token, the side wallets that buy alongside a KOL in the same block, with proof and live positions.
GET
/
v1
/
bundle
Bundle Snapshot
curl --request GET \
--url https://api.cabalspy.xyz/v1/bundleimport requests
url = "https://api.cabalspy.xyz/v1/bundle"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.cabalspy.xyz/v1/bundle', 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/bundle",
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/bundle"
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/bundle")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cabalspy.xyz/v1/bundle")
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": {
"blockchain": "solana",
"token": {
"mint": "3Pkrq4MmLvDXyn1fa3sz5MekKRkZkc1iLDcz5AzWpump",
"symbol": "invisibull",
"name": "invisibull",
"supply": 1000000000,
"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,
"pool": "pump",
"on_curve": true,
"bonding_curve_progress": 42.5
},
"bundles": [
{
"bundle_id": "bnd_7f3a2c",
"kol_wallet": "7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW",
"kol_profile": {
"name": "Maze",
"image_url": "https://cabalspy.xyz/images/7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW.png",
"twitter": "https://x.com/MazeCCC",
"telegram": "",
"blockchain": "solana",
"currency": "SOL",
"type": "kol"
},
"confidence": 0.92,
"jito_confirmed": true,
"proof_type": "same_block",
"slot": 301948220,
"wallet_count": 3,
"proof": "slot:301948220",
"verify_hint": "check same slot buys on solscan",
"detected_at": "2026-07-04T16:25:34Z",
"bundle_wallets": [
{
"address": "7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW",
"is_kol": true,
"transaction_type": "buy",
"signature": "5xr8abc...",
"entry_source": "at_discovery",
"position_source": "live",
"profile": {
"name": "Maze",
"image_url": "https://cabalspy.xyz/images/7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW.png",
"twitter": "https://x.com/MazeCCC",
"telegram": "",
"blockchain": "solana",
"currency": "SOL",
"type": "kol"
},
"position": {
"held": 22113972.03,
"peak": 22113972.03,
"bought_tokens": 22113972.03,
"sold_tokens": 0.0,
"bag_pct": 100.0,
"supply_pct": 2.21,
"invested": 1.66,
"invested_usd": 137.44,
"max_single_buy": 1.66,
"buy_txn": 1,
"sell_txn": 0,
"sold_value": 0.0,
"sold_value_usd": 0.0,
"realized_pnl_sol": 0.0,
"realized_pnl_usd": 0.0,
"entry_market_cap": 44.6,
"entry_market_cap_usd": 3673.2,
"unrealized_pnl_sol": -0.099817,
"unrealized_pnl_usd": -8.22,
"unrealized_pnl_pct": -10.12,
"remaining_sol": 0.886537,
"remaining_usd": 73.02,
"first_buy_at": "2026-07-04T16:25:34Z",
"last_activity_at": "2026-07-04T16:40:10Z"
}
},
{
"address": "SideWa11etAbc123...",
"is_kol": false,
"transaction_type": "buy",
"signature": "9kp2def...",
"entry_source": "at_discovery",
"position_source": "live",
"profile": {
"name": "",
"image_url": "",
"twitter": "",
"telegram": "",
"blockchain": "solana",
"currency": "SOL",
"type": null
},
"fee_lamports": 5000,
"block_index": 4,
"adjacent_to_kol": true,
"same_fee": true,
"occurrences": 7,
"position": {
"held": 8000000.0,
"peak": 8000000.0,
"bought_tokens": 8000000.0,
"sold_tokens": 0.0,
"bag_pct": 100.0,
"supply_pct": 0.8,
"invested": 0.6,
"invested_usd": 49.4,
"max_single_buy": 0.6,
"buy_txn": 1,
"sell_txn": 0,
"sold_value": 0.0,
"sold_value_usd": 0.0,
"realized_pnl_sol": 0.0,
"realized_pnl_usd": 0.0,
"entry_market_cap": 44.6,
"entry_market_cap_usd": 3673.2,
"unrealized_pnl_sol": -0.036,
"unrealized_pnl_usd": -2.97,
"unrealized_pnl_pct": -10.12,
"remaining_sol": 0.320,
"remaining_usd": 26.4,
"first_buy_at": "2026-07-04T16:25:34Z",
"last_activity_at": "2026-07-04T16:25:34Z"
}
}
]
}
]
},
"meta": {
"request_id": "req_5162c7cf7f87",
"cached": false,
"cache_age_seconds": 0,
"version": "1.0.0",
"timestamp": "2026-07-06T11:01:57Z"
}
}
Detect coordinated bundles on a Solana token. A bundle is a KOL wallet plus the side wallets that bought alongside it in the same block, a common pattern for insiders riding a KOL call. For each detected bundle you get the KOL, the side wallets, a confidence score, on chain proof and a live position for every wallet.
Use it to flag tokens where a KOL is buying together with hidden wallets, or to show a bundle breakdown on a token page. Positions (unrealized PnL, remaining value, entry market cap) are computed live at request time.
Bundle detection is Solana only. If no bundles are detected for the token you get a normal 200 with an empty bundles array and the token block, so you can poll. Within each bundle the KOL wallet is marked with is_kol true, and side wallets carry extra proof fields like adjacent_to_kol and same_fee.
Query Parameters
string
required
Must be solana. Bundle detection is only available on Solana.
string
required
The token mint address to inspect for bundles.
string
required
Your API key. Alternatively pass it as an Authorization Bearer header.
Usage Example
curl "https://api.cabalspy.xyz/v1/bundle?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/bundle", params=params)
d = r.json()["data"]
for b in d["bundles"]:
print("KOL", b["kol_wallet"], "confidence", b["confidence"], "wallets", b["wallet_count"])
for w in b["bundle_wallets"]:
pos = w["position"]
print(" ", w["address"], "kol" if w["is_kol"] else "side", "uPNL", pos["unrealized_pnl_sol"])
const p = new URLSearchParams({
blockchain: "solana",
mint: "3Pkrq4MmLvDXyn1fa3sz5MekKRkZkc1iLDcz5AzWpump",
api_key: "YOUR_KEY",
});
const res = await fetch(`https://api.cabalspy.xyz/v1/bundle?${p}`);
const { data } = await res.json();
data.bundles.forEach(b => console.log(b.kol_wallet, b.confidence, b.wallet_count));
Response
boolean
True on success.
object
Show data
Show data
string
Always solana for this endpoint.
object
Show token
Show token
string
Token mint address.
string
Token symbol.
string
Token name.
number
Total supply.
number
Current market cap in SOL.
number
Current market cap in USD.
string
Currency of the market cap value (SOL).
number
Current token price in SOL.
number
Current token price in USD.
number
SOL price in USD used for USD conversions.
string
Liquidity pool identifier.
boolean
Whether the token is still on the bonding curve.
number
Bonding curve progress if on curve.
array
Show bundle
Show bundle
string
Unique bundle identifier.
string
Address of the KOL at the center of the bundle.
object
Profile of the KOL wallet (name, image_url, twitter, telegram, blockchain, currency, type).
number
Confidence score that this is a real coordinated bundle.
boolean
Whether the bundle was confirmed as a Jito bundle on chain.
string
The kind of proof used for detection.
integer
Solana slot of the bundle.
integer
Number of wallets in the bundle.
string
On chain proof reference.
string
Hint for independently verifying the bundle on chain.
string
When the bundle was detected.
array
Show bundle wallet, KOL first then by invested
Show bundle wallet, KOL first then by invested
string
Wallet address.
boolean
True for the KOL wallet, false for side wallets.
string
Last transaction type buy or sell.
string
Last transaction signature.
string
How the entry was detected, for example at_discovery.
string
Source of the position data, live.
object
Wallet profile. For side wallets this may be empty.
integer
Side wallets only. Fee paid in lamports.
integer
Side wallets only. Index within the block.
boolean
Side wallets only. Whether the wallet traded directly next to the KOL.
boolean
Side wallets only. Whether the wallet paid the same fee as the KOL.
integer
Side wallets only. How often this wallet bundled with the KOL.
object
Show position
Show position
number
Tokens currently held.
number
Peak tokens held.
number
Total tokens bought.
number
Total tokens sold.
number
Percent of peak holding still held.
number
Percent of total supply held.
number
Total invested (SOL).
number
Total invested in USD.
number
Largest single buy (SOL).
integer
Number of buys.
integer
Number of sells.
number
Total sold value (SOL).
number
Total sold value in USD.
number
Realized PnL (SOL).
number
Realized PnL in USD.
number
Market cap in SOL when the wallet first bought, frozen.
number
Entry market cap in USD, frozen at buy time.
number
Unrealized PnL on the remaining bag (SOL). Null if market cap is missing.
number
Unrealized PnL in USD.
number
Unrealized PnL percentage.
number
Current value of the remaining bag (SOL).
number
Current value of the remaining bag in USD.
string
Timestamp of the first buy.
string
ISO timestamp of the last activity.
{
"success": true,
"data": {
"blockchain": "solana",
"token": {
"mint": "3Pkrq4MmLvDXyn1fa3sz5MekKRkZkc1iLDcz5AzWpump",
"symbol": "invisibull",
"name": "invisibull",
"supply": 1000000000,
"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,
"pool": "pump",
"on_curve": true,
"bonding_curve_progress": 42.5
},
"bundles": [
{
"bundle_id": "bnd_7f3a2c",
"kol_wallet": "7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW",
"kol_profile": {
"name": "Maze",
"image_url": "https://cabalspy.xyz/images/7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW.png",
"twitter": "https://x.com/MazeCCC",
"telegram": "",
"blockchain": "solana",
"currency": "SOL",
"type": "kol"
},
"confidence": 0.92,
"jito_confirmed": true,
"proof_type": "same_block",
"slot": 301948220,
"wallet_count": 3,
"proof": "slot:301948220",
"verify_hint": "check same slot buys on solscan",
"detected_at": "2026-07-04T16:25:34Z",
"bundle_wallets": [
{
"address": "7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW",
"is_kol": true,
"transaction_type": "buy",
"signature": "5xr8abc...",
"entry_source": "at_discovery",
"position_source": "live",
"profile": {
"name": "Maze",
"image_url": "https://cabalspy.xyz/images/7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW.png",
"twitter": "https://x.com/MazeCCC",
"telegram": "",
"blockchain": "solana",
"currency": "SOL",
"type": "kol"
},
"position": {
"held": 22113972.03,
"peak": 22113972.03,
"bought_tokens": 22113972.03,
"sold_tokens": 0.0,
"bag_pct": 100.0,
"supply_pct": 2.21,
"invested": 1.66,
"invested_usd": 137.44,
"max_single_buy": 1.66,
"buy_txn": 1,
"sell_txn": 0,
"sold_value": 0.0,
"sold_value_usd": 0.0,
"realized_pnl_sol": 0.0,
"realized_pnl_usd": 0.0,
"entry_market_cap": 44.6,
"entry_market_cap_usd": 3673.2,
"unrealized_pnl_sol": -0.099817,
"unrealized_pnl_usd": -8.22,
"unrealized_pnl_pct": -10.12,
"remaining_sol": 0.886537,
"remaining_usd": 73.02,
"first_buy_at": "2026-07-04T16:25:34Z",
"last_activity_at": "2026-07-04T16:40:10Z"
}
},
{
"address": "SideWa11etAbc123...",
"is_kol": false,
"transaction_type": "buy",
"signature": "9kp2def...",
"entry_source": "at_discovery",
"position_source": "live",
"profile": {
"name": "",
"image_url": "",
"twitter": "",
"telegram": "",
"blockchain": "solana",
"currency": "SOL",
"type": null
},
"fee_lamports": 5000,
"block_index": 4,
"adjacent_to_kol": true,
"same_fee": true,
"occurrences": 7,
"position": {
"held": 8000000.0,
"peak": 8000000.0,
"bought_tokens": 8000000.0,
"sold_tokens": 0.0,
"bag_pct": 100.0,
"supply_pct": 0.8,
"invested": 0.6,
"invested_usd": 49.4,
"max_single_buy": 0.6,
"buy_txn": 1,
"sell_txn": 0,
"sold_value": 0.0,
"sold_value_usd": 0.0,
"realized_pnl_sol": 0.0,
"realized_pnl_usd": 0.0,
"entry_market_cap": 44.6,
"entry_market_cap_usd": 3673.2,
"unrealized_pnl_sol": -0.036,
"unrealized_pnl_usd": -2.97,
"unrealized_pnl_pct": -10.12,
"remaining_sol": 0.320,
"remaining_usd": 26.4,
"first_buy_at": "2026-07-04T16:25:34Z",
"last_activity_at": "2026-07-04T16:25:34Z"
}
}
]
}
]
},
"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 is not solana. Bundle detection is Solana only. |
| 401 | unauthorized | API key missing. |
| 403 | forbidden | API key invalid or credits exhausted. |
| 429 | rate_limited | Rate limit exceeded. |
⌘I

