Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/cabalspy-xyz:cabalspy-xyz-signals-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: CabalSpy Signals API
version: 1.0.0
description: 'REST API for CabalSpy on-chain labeled wallet data: tracked KOL, Smart Money and Whale wallets on Solana, BNB Chain, Base, Ethereum and Robinhood Chain (blockchain values: solana, bnb, base, eth, rh), with wallet profiles, leaderboards, PnL, token holders and transactions, bundle detection (Solana only), live signals and analytics.
Wallet type availability per chain: Solana has kol, smart, whale. BNB, Base and Robinhood Chain have kol, smart. ETH has kol.
Authentication: every request needs an API key, passed either as the api_key query parameter or as an Authorization Bearer header (the two are equivalent). Get a free key at https://apidashboard.cabalspy.xyz/.
Credits: a REST request costs 10 credits on every plan. The free tier includes 10,000 credits per month; credits reset on the first of every month.
Rate limits: requests per second by plan are 5 (Free), 20 (Starter), 50 (Pro) and 100 (Business). Exceeding the limit returns 429 rate_limited; wait and retry.
Responses share an envelope: success, data, meta (request_id, cached, cache_age_seconds, version, timestamp) and, on some endpoints, pagination.
Real-time data is available separately over WebSocket at wss://stream.cabalspy.xyz (not described by this document; 1 credit per event received).'
termsOfService: https://www.cabalspy.xyz/terms/
contact:
name: CabalSpy
email: contact@cabalspy.xyz
servers:
- url: https://api.cabalspy.xyz/v1
security:
- ApiKeyQuery: []
- BearerAuth: []
tags:
- name: Signals
description: Live and historical cluster, entry and exit signals.
paths:
/signals:
get:
operationId: getSignals
summary: Live signals
description: Live trade signals derived from tracked wallet activity in a recent window. cluster mode surfaces tokens where several tracked wallets are buying at once; entry and exit return individual buy and sell events in the transactions feed shape (with holdings_after). The documented response schema describes cluster mode. Costs 10 credits per request.
tags:
- Signals
externalDocs:
url: https://docs.cabalspy.xyz/signals
parameters:
- name: blockchain
in: query
required: true
description: Chain. One of solana, bnb, base, eth.
schema:
type: string
enum:
- solana
- bnb
- base
- eth
- rh
- name: type
in: query
required: true
description: Wallet category kol, smart or whale.
schema:
type: string
enum:
- kol
- smart
- whale
- name: mode
in: query
required: true
description: Signal mode. One of cluster, entry, exit.
schema:
type: string
enum:
- cluster
- entry
- exit
- name: min_wallets
in: query
required: false
description: cluster mode. Minimum number of wallets buying the same token to form a cluster.
schema:
type: integer
- name: min_value
in: query
required: false
description: Minimum trade value to consider (native).
schema:
type: number
- name: hours
in: query
required: false
description: Time window in hours to look back for signals.
schema:
type: number
- name: limit
in: query
required: false
description: Maximum number of signals to return.
schema:
type: integer
responses:
'200':
description: Successful response.
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
description: True on success.
data:
type: object
properties:
blockchain:
type: string
wallet_types:
type: array
items: {}
description: The wallet types included.
currency:
type: string
filters:
type: object
additionalProperties: true
description: The applied filters (min_win_rate, include_wallets, exclude_wallets, min_token_age_hours, max_token_age_hours).
signals:
type: array
description: Signals. Item shape shown is for cluster mode.
items:
type: object
properties:
token:
type: object
additionalProperties: true
description: Token block (mint, token_name, blockchain, currency, token_supply, token_decimals).
signal_type:
type: string
description: cluster.
signal_strength:
type: string
description: strong or medium, based on how many wallets qualified.
currency:
type: string
gate:
type: object
additionalProperties: true
description: Whether the gate was met and the thresholds used.
window:
type: object
properties:
hours:
type: number
wallet_count:
type: integer
by_type:
type: object
additionalProperties: true
description: Wallet counts split by type.
total_invested:
type: number
total_invested_usd:
type: number
first_buy_at:
type: string
latest_buy_at:
type: string
time_span_minutes:
type: number
additionalProperties: true
token_stats:
type: object
additionalProperties: true
description: Whole history token stats (total_buyers, still_holding_count, active_count, total_volume, total_volume_usd, net_flow, holders_by_type, first_entry_time).
wallets:
type: array
items:
type: object
properties:
profile:
$ref: '#/components/schemas/Profile'
wallet_type:
type: string
win_rate:
type:
- number
- 'null'
description: Lifetime win rate, only when min_win_rate was requested, otherwise null.
window_invested:
type: number
window_invested_usd:
type: number
window_buy_txn:
type: integer
window_sell_txn:
type: integer
sold_in_window:
type: boolean
bought_at:
type: string
realized_pnl:
type: number
realized_pnl_usd:
type: number
realized_pnl_percentage:
type: number
bag_pct:
type: number
supply_pct:
type: number
still_holding:
type: boolean
is_active:
type: boolean
description: True when bag_pct is above 1 percent.
additionalProperties: true
additionalProperties: true
pagination:
$ref: '#/components/schemas/Pagination'
additionalProperties: true
pagination:
$ref: '#/components/schemas/Pagination'
meta:
$ref: '#/components/schemas/Meta'
additionalProperties: true
example:
success: true
data:
blockchain: solana
wallet_types:
- kol
currency: SOL
filters:
min_win_rate: null
include_wallets: null
exclude_wallets: null
min_token_age_hours: null
max_token_age_hours: null
signals:
- token:
mint: 3Pkrq4MmLvDXyn1fa3sz5MekKRkZkc1iLDcz5AzWpump
token_name: invisibull
blockchain: solana
currency: SOL
token_supply: 1000000000
token_decimals: 6
signal_type: cluster
signal_strength: strong
currency: SOL
gate:
met: true
wallet_types:
- kol
thresholds:
kol: 3
window:
hours: 1
wallet_count: 5
by_type:
kol: 5
total_invested: 12.4
total_invested_usd: 1021.4
first_buy_at: '2026-07-06T10:20:00Z'
latest_buy_at: '2026-07-06T10:52:00Z'
time_span_minutes: 32.0
token_stats:
total_buyers: 12
still_holding_count: 8
active_count: 7
total_volume: 44.6
total_volume_usd: 3673.2
net_flow: 30.1
holders_by_type:
kol_count: 5
smart_count: 0
whale_count: 0
first_entry_time: '2026-07-06T09:58:00Z'
wallets:
- profile:
name: Maze
image_url: https://cabalspy.xyz/images/7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW.png
twitter: https://x.com/MazeCCC
telegram: ''
blockchain: solana
currency: SOL
type: kol
wallet_type: kol
win_rate: null
window_invested: 3.2
window_invested_usd: 263.6
window_buy_txn: 1
window_sell_txn: 0
sold_in_window: false
bought_at: '2026-07-06T10:20:00Z'
realized_pnl: 0.0
realized_pnl_usd: 0.0
realized_pnl_percentage: 0.0
bag_pct: 100.0
supply_pct: 0.32
still_holding: true
is_active: 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'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'429':
$ref: '#/components/responses/RateLimited'
/signals/history:
get:
operationId: getSignalsHistory
summary: Signals history
description: Historical cluster signals that would have fired on past days, for backtesting a cluster strategy. Each entry carries the token, how many wallets clustered, how much they invested, the day and triggered_at. Costs 10 credits per request.
tags:
- Signals
externalDocs:
url: https://docs.cabalspy.xyz/signals-history
parameters:
- name: blockchain
in: query
required: true
description: Chain. One of solana, bnb, base, eth.
schema:
type: string
enum:
- solana
- bnb
- base
- eth
- rh
- name: type
in: query
required: true
description: Wallet category kol, smart or whale.
schema:
type: string
enum:
- kol
- smart
- whale
- name: days
in: query
required: false
description: How many past days to include.
schema:
type: integer
- name: limit
in: query
required: false
description: Maximum number of signals to return.
schema:
type: integer
responses:
'200':
description: Successful response.
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
description: True on success.
data:
type: object
properties:
blockchain:
type: string
wallet_types:
type: array
items: {}
description: The wallet types included.
days:
type: integer
description: The number of past days included.
filters:
type: object
additionalProperties: true
description: Applied filters (min_win_rate, include_wallets, exclude_wallets).
signals:
type: array
items:
type: object
properties:
mint:
type: string
token_name:
type: string
token_supply:
type: number
signal_type:
type: string
description: cluster.
signal_strength:
type: string
description: strong or medium.
wallet_count:
type: integer
by_type:
type: object
additionalProperties: true
description: Wallet counts split by type.
total_invested:
type: number
total_invested_usd:
type:
- number
- 'null'
description: Total invested in USD, or null if no price was available.
currency:
type: string
triggered_at:
type: string
description: When the first buy of the cluster happened.
day:
type: string
description: The day this signal belongs to.
window:
type: string
description: The aggregation window, 1d.
would_have_fired:
type: boolean
description: Whether the signal would have fired under the thresholds.
additionalProperties: true
additionalProperties: true
meta:
$ref: '#/components/schemas/Meta'
additionalProperties: true
example:
success: true
data:
blockchain: solana
wallet_types:
- kol
days: 7
filters:
min_win_rate: null
include_wallets: null
exclude_wallets: null
signals:
- mint: 3Pkrq4MmLvDXyn1fa3sz5MekKRkZkc1iLDcz5AzWpump
token_name: invisibull
token_supply: 1000000000
signal_type: cluster
signal_strength: strong
wallet_count: 5
by_type:
kol: 5
total_invested: 12.4
total_invested_usd: 1021.4
currency: SOL
triggered_at: '2026-07-04T16:25:34Z'
day: '2026-07-04'
window: 1d
would_have_fired: true
meta:
request_id: req_5162c7cf7f87
cached: false
cache_age_seconds: 0
version: 1.0.0
timestamp: '2026-07-06T11:01:57Z'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'429':
$ref: '#/components/responses/RateLimited'
components:
responses:
BadRequest:
description: Bad request. Code missing_parameter (a required parameter is missing) or invalid_parameter (a parameter is missing or has an invalid value, for example a chain and wallet type combination that does not exist such as eth with whale).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
RateLimited:
description: Code rate_limited. Rate limit exceeded (the plan's requests-per-second limit), wait and retry.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
Forbidden:
description: Code forbidden. API key invalid or credits exhausted.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
Unauthorized:
description: Code unauthorized. API key missing.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
schemas:
Error:
type: object
description: Error response. The documentation specifies the HTTP status and an error code (missing_parameter, invalid_parameter, unauthorized, forbidden, not_found, rate_limited) but not the exact body layout, so no fields are asserted here.
additionalProperties: true
Profile:
type: object
description: Wallet profile.
properties:
name:
type: string
description: Display name (may be empty).
image_url:
type: string
description: Avatar URL.
twitter:
type: string
description: Twitter or X link.
telegram:
type: string
description: Telegram link.
blockchain:
type: string
description: Chain.
currency:
type: string
description: Native currency.
type:
type:
- string
- 'null'
description: Wallet type kol, smart or whale.
additionalProperties: true
Meta:
type: object
description: Request metadata returned with every response.
properties:
request_id:
type: string
cached:
type: boolean
cache_age_seconds:
type: integer
version:
type: string
timestamp:
type: string
additionalProperties: true
Pagination:
type: object
description: Standard pagination object. Depending on the endpoint it appears inside data or next to data at the top level of the response.
properties:
limit:
type:
- integer
- 'null'
description: Requested page size (null means all).
total:
type: integer
description: Total number of items.
has_more:
type: boolean
description: Whether more pages follow.
next_cursor:
type:
- string
- 'null'
description: Cursor for the next page (null means end).
additionalProperties: true
securitySchemes:
ApiKeyQuery:
type: apiKey
in: query
name: api_key
description: Your API key as the api_key query parameter.
BearerAuth:
type: http
scheme: bearer
description: Your API key as an Authorization Bearer header.
externalDocs:
description: CabalSpy API documentation
url: https://docs.cabalspy.xyz/