Lookup
curl --request GET \
--url https://api.cabalspy.xyz/v1/wallets/lookupimport requests
url = "https://api.cabalspy.xyz/v1/wallets/lookup"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.cabalspy.xyz/v1/wallets/lookup', 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/wallets/lookup",
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/wallets/lookup"
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/wallets/lookup")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cabalspy.xyz/v1/wallets/lookup")
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": {
"found": true,
"wallet_address": "7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW",
"name": "Maze",
"image_url": "https://cabalspy.xyz/images/7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW.png",
"twitter": "https://x.com/MazeCCC",
"telegram": "",
"copytrade_link": "https://t.me/WizGandalfBot?start=r-U7TSHAWUWN-7j7AA",
"type": "kol",
"blockchain": "solana",
"currency": "SOL"
},
"meta": {
"request_id": "req_5162c7cf7f87",
"cached": false,
"cache_age_seconds": 0,
"version": "1.0.0",
"timestamp": "2026-07-06T11:01:57Z"
}
}
{
"success": true,
"data": {
"found": false,
"wallet_address": "SomeUntrackedAddress1111111111111111111111"
},
"meta": {
"request_id": "req_9aa1917e433b",
"cached": false,
"cache_age_seconds": 0,
"version": "1.0.0",
"timestamp": "2026-07-06T11:02:10Z"
}
}
Wallet data
Lookup
Look up any wallet address across all chains and wallet types to check if CabalSpy tracks it and return its KOL, Smart or Whale profile.
GET
/
v1
/
wallets
/
lookup
Lookup
curl --request GET \
--url https://api.cabalspy.xyz/v1/wallets/lookupimport requests
url = "https://api.cabalspy.xyz/v1/wallets/lookup"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.cabalspy.xyz/v1/wallets/lookup', 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/wallets/lookup",
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/wallets/lookup"
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/wallets/lookup")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cabalspy.xyz/v1/wallets/lookup")
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": {
"found": true,
"wallet_address": "7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW",
"name": "Maze",
"image_url": "https://cabalspy.xyz/images/7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW.png",
"twitter": "https://x.com/MazeCCC",
"telegram": "",
"copytrade_link": "https://t.me/WizGandalfBot?start=r-U7TSHAWUWN-7j7AA",
"type": "kol",
"blockchain": "solana",
"currency": "SOL"
},
"meta": {
"request_id": "req_5162c7cf7f87",
"cached": false,
"cache_age_seconds": 0,
"version": "1.0.0",
"timestamp": "2026-07-06T11:01:57Z"
}
}
{
"success": true,
"data": {
"found": false,
"wallet_address": "SomeUntrackedAddress1111111111111111111111"
},
"meta": {
"request_id": "req_9aa1917e433b",
"cached": false,
"cache_age_seconds": 0,
"version": "1.0.0",
"timestamp": "2026-07-06T11:02:10Z"
}
}
Given just an address, this finds out whether CabalSpy tracks it and, if so, returns its profile plus which chain and category (kol, smart, whale) it belongs to. Use it to label an arbitrary address in your UI, for example to show a name and avatar next to a wallet that appears in a transaction feed.
You do not pass a blockchain or type. The lookup searches all chains and types for you and returns the first match. Always check the found field, it is false when the address is not tracked.
Query Parameters
string
required
The wallet address to look up. Searched across every tracked chain and wallet type.
string
required
Your API key. Alternatively pass it as an Authorization Bearer header.
Usage Example
curl "https://api.cabalspy.xyz/v1/wallets/lookup?address=7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW&api_key=YOUR_KEY"
import requests
params = {"address": "7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW", "api_key": "YOUR_KEY"}
r = requests.get("https://api.cabalspy.xyz/v1/wallets/lookup", params=params)
data = r.json()["data"]
if data["found"]:
print(data["name"], "-", data["type"], "on", data["blockchain"])
else:
print("Not tracked")
const p = new URLSearchParams({
address: "7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW", api_key: "YOUR_KEY",
});
const res = await fetch(`https://api.cabalspy.xyz/v1/wallets/lookup?${p}`);
const { data } = await res.json();
console.log(data.found ? `${data.name} (${data.type})` : "Not tracked");
Response
boolean
True on success. The request worked, regardless of whether the wallet was found.
object
Show data
Show data
boolean
Whether the address is tracked by CabalSpy. When false, only found and wallet_address are returned.
string
The looked up address.
string
Display name (may be empty).
string
Avatar URL.
string
Twitter or X link.
string
Telegram link.
string
Copytrade link.
string
Wallet type where it was found kol, smart or whale.
string
Chain where it was found.
string
Native currency of that chain.
{
"success": true,
"data": {
"found": true,
"wallet_address": "7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW",
"name": "Maze",
"image_url": "https://cabalspy.xyz/images/7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW.png",
"twitter": "https://x.com/MazeCCC",
"telegram": "",
"copytrade_link": "https://t.me/WizGandalfBot?start=r-U7TSHAWUWN-7j7AA",
"type": "kol",
"blockchain": "solana",
"currency": "SOL"
},
"meta": {
"request_id": "req_5162c7cf7f87",
"cached": false,
"cache_age_seconds": 0,
"version": "1.0.0",
"timestamp": "2026-07-06T11:01:57Z"
}
}
{
"success": true,
"data": {
"found": false,
"wallet_address": "SomeUntrackedAddress1111111111111111111111"
},
"meta": {
"request_id": "req_9aa1917e433b",
"cached": false,
"cache_age_seconds": 0,
"version": "1.0.0",
"timestamp": "2026-07-06T11:02:10Z"
}
}
Errors
A wallet not found is not an error, you get 200 with found false. The errors below concern the request itself.| Status | Code | Meaning |
|---|---|---|
| 400 | missing_parameter | The address query parameter is missing. |
| 401 | unauthorized | API key missing. |
| 403 | forbidden | API key invalid or credits exhausted. |
| 429 | rate_limited | Rate limit exceeded. |
⌘I

