Skip to main content
Live trade signals as they form. When enough tracked wallets of a type buy the same token, an entry signal fires. When enough of them exit, an exit signal fires. Each signal carries the cluster of wallets, the token with live market cap, per wallet positions with unrealized PnL, and the trigger trade. You define the thresholds when you subscribe, per wallet type, so the same stream can drive a simple two KOL alert or a gated KOL plus Smart Money strategy with win rate and token age filters.

Endpoint

Connect to wss://stream.cabalspy.xyz.

Authentication

Provide your API key as a query parameter, wss://stream.cabalspy.xyz?apiKey=YOUR_KEY, or as a header, Authorization: Bearer YOUR_KEY. Invalid keys are closed with code 1008.

Chains and wallet types

Smart Money is not available on eth, so a smart block on that chain has no effect. min_buy and every value in the payload are denominated in the chain native currency, so a min_buy of 0.5 means 0.5 SOL on Solana and 0.5 BNB on BNB Chain. Live market cap, entry market cap and unrealized PnL are now delivered on every chain. On BNB, Base, Ethereum and Robinhood these fields used to be null and are now filled.

Subscribe

To start receiving signals, send a subscribe message after the connection opens. You pick a chain, a token to watch, and the rules that decide when a signal fires. The simplest subscription fires an entry when three or more KOL wallets buy the same token, and an exit when only one is left holding.
Simple KOL cluster
The token field is ”*” for all tokens, or a single token mint or contract address to watch one token. The rules live in a kol block and, if you want Smart Money too, a smart block. Each block has the same shape. Inside a block, entry_at is a list of wallet counts that each fire an entry signal. For example entry_at of [3, 5] fires once when the third qualifying wallet buys, and again when the fifth does. exit_at is a list of remaining holder counts that fire an exit, so [1] fires when only one qualifying wallet is still holding. min_buy is the smallest buy, in native currency, for a wallet to count. max_wallet_buy is an optional upper limit per wallet.
KOL and Smart Money together, with filters
The same cluster on BNB, min_buy is in BNB
When you provide both a kol and a smart block, the entry gate is an AND. Every configured type must reach its own entry_at minimum before an entry signal fires.
string
required
The operation. Use subscribe to start.
string
required
Set to signal for this stream.
string
required
Chain. One of solana, bnb, base, eth, rh. Smart Money is not available on eth.
string
Which token to watch. Either ”*” for all tokens, or a single token mint or contract address.
object
KOL rules. Fields: min_buy (minimum buy per wallet, native currency), entry_at (list of wallet counts that fire an entry, up to 3 values), exit_at (list of remaining holder counts that fire an exit, up to 2 values), max_wallet_buy (optional per wallet cap).
object
Smart Money rules, same shape as kol. Only where Smart Money is supported.
number
Only count wallets whose lifetime win rate is at least this percentage.
array
Whitelist. Only these wallet addresses count toward a cluster.
array
Blacklist. These wallet addresses never count.
number
Only fire for tokens at least this many hours old, measured from the first tracked buy.
number
Only fire for tokens at most this many hours old.
If you send threshold fields at the top level without a kol or smart block, they are treated as the KOL block, so older integrations keep working. The subscribe reply echoes back the rules it parsed and any warnings, for example an unknown field, or a win rate filter you asked for while win rate data is temporarily unavailable.

Unsubscribe and other operations

To stop, send op unsubscribe with the same chain and token. This removes the subscription for that token regardless of which types you configured.
Unsubscribe
To see your active subscriptions, send op subscriptions. To check the connection is alive, send op ping and you get a pong back.
List your subscriptions

Event

Each fired signal delivers a signal event.
string
signal.
object
Market cap, entry_market_cap and unrealized PnL are only filled while a current market cap for the token is known. If a token has not traded since the stream started, these stay null until its first price arrives.

Billing

Signals are billed more heavily than a single event because each one aggregates a whole cluster. Every delivered signal deducts a fixed number of credits and is logged.

Heartbeat

The server sends WebSocket pings and expects pong, which standard clients answer automatically. You can also send op ping at any time.