Timerange
curl --request GET \
--url https://api.cabalspy.xyz/v1/transactions/timerangeimport requests
url = "https://api.cabalspy.xyz/v1/transactions/timerange"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.cabalspy.xyz/v1/transactions/timerange', 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/transactions/timerange",
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/transactions/timerange"
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/transactions/timerange")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cabalspy.xyz/v1/transactions/timerange")
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",
"type": "kol",
"mode": "timerange",
"currency": "SOL",
"time_window_seconds": 300,
"count": 1,
"transactions": [
{
"tx_signature": "5xr8abc...",
"mint": "3Pkrq4MmLvDXyn1fa3sz5MekKRkZkc1iLDcz5AzWpump",
"token_name": "invisibull",
"token_supply": 1000000000,
"token_decimals": 6,
"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-04 16:25:34",
"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"
}
}
Transactions
Timerange
Transactions of tracked wallets within a recent time window, up to 60 minutes back, newest first, each with trader profile and position.
GET
/
v1
/
transactions
/
timerange
Timerange
curl --request GET \
--url https://api.cabalspy.xyz/v1/transactions/timerangeimport requests
url = "https://api.cabalspy.xyz/v1/transactions/timerange"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.cabalspy.xyz/v1/transactions/timerange', 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/transactions/timerange",
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/transactions/timerange"
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/transactions/timerange")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cabalspy.xyz/v1/transactions/timerange")
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",
"type": "kol",
"mode": "timerange",
"currency": "SOL",
"time_window_seconds": 300,
"count": 1,
"transactions": [
{
"tx_signature": "5xr8abc...",
"mint": "3Pkrq4MmLvDXyn1fa3sz5MekKRkZkc1iLDcz5AzWpump",
"token_name": "invisibull",
"token_supply": 1000000000,
"token_decimals": 6,
"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-04 16:25:34",
"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 same trade feed as Latest, but bounded to a recent time window instead of a count. Specify how far back to look with seconds and minutes, and get every tracked transaction in that window, newest first.
Use it to fetch all trades in the last N minutes for polling style updates, for example every 30 seconds pull the last 30 seconds of activity.
The window is built from seconds and minutes, summed. The maximum window is 60 minutes, larger requests are capped and a warning is added. Optionally filter by mint to bound the window to a single token.
Query Parameters
string
required
Chain. One of solana, bnb, base, eth.
string
required
Wallet category kol, smart or whale.
integer
Seconds to look back. Combined with minutes.
integer
Minutes to look back. Combined with seconds. Maximum total window is 60 minutes.
string
Optional token mint to filter the window to a single token. Adds a token block.
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/transactions/timerange?blockchain=solana&type=kol&minutes=5&api_key=YOUR_KEY"
import requests
params = {"blockchain": "solana", "type": "kol", "minutes": 5, "api_key": "YOUR_KEY"}
r = requests.get("https://api.cabalspy.xyz/v1/transactions/timerange", params=params)
d = r.json()["data"]
print("window seconds", d["time_window_seconds"], "count", d["count"])
for tx in d["transactions"]:
print(tx["created_at"], tx["transaction_type"], tx["value"])
const p = new URLSearchParams({
blockchain: "solana", type: "kol", minutes: "5", api_key: "YOUR_KEY",
});
const res = await fetch(`https://api.cabalspy.xyz/v1/transactions/timerange?${p}`);
const { data } = await res.json();
console.log("window", data.time_window_seconds, "count", data.count);
Response
boolean
True on success.
object
Show data
Show data
string
Requested chain.
string
Requested wallet type.
string
timerange.
string
Native currency.
integer
The effective window in seconds, after capping.
integer
Number of transactions in the window.
object
Only present when mint is passed. Token block with mint, token_name, blockchain, currency, token_supply, token_decimals.
array
Same transaction shape as the Latest endpoint (tx_signature, mint, token_name, transaction_type, value, value_usd, token_amount, price_per_token, created_at, profile, holdings_after).
array
Present only if the requested window exceeded the 60 minute maximum and was capped.
object
Standard pagination object.
{
"success": true,
"data": {
"blockchain": "solana",
"type": "kol",
"mode": "timerange",
"currency": "SOL",
"time_window_seconds": 300,
"count": 1,
"transactions": [
{
"tx_signature": "5xr8abc...",
"mint": "3Pkrq4MmLvDXyn1fa3sz5MekKRkZkc1iLDcz5AzWpump",
"token_name": "invisibull",
"token_supply": 1000000000,
"token_decimals": 6,
"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-04 16:25:34",
"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 | invalid_parameter | blockchain or type missing or invalid. |
| 401 | unauthorized | API key missing. |
| 403 | forbidden | API key invalid or credits exhausted. |
| 429 | rate_limited | Rate limit exceeded. |
⌘I

