Skip to main content
Track the native balance of tracked wallets in real time. Whenever a wallet trades, CabalSpy reads its on-chain balance and streams the new value, along with the previous balance so you can show the change. This stream runs on Solana, BNB, Base, Ethereum and Robinhood. The event shape is identical on every chain, only the native currency changes. On subscribe you get a snapshot of known balances. Subscribing to a specific wallet that is not yet cached triggers an immediate on-demand balance fetch.
On Solana the balance is read from the chain on every trade. On EVM chains it is streamed, which also catches plain transfers and bridge deposits, not just trades. In exchange an EVM update can land a few hundred milliseconds after the trade that caused it.

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, currencies and wallet types

The balance you receive is always the chain native asset. Decimals and the raw unit differ per chain, so read them from the payload rather than assuming. Leaving blockchain out defaults to solana, which keeps existing integrations working unchanged.
amount_raw is a string, not a number. On EVM chains a wei value exceeds what a JSON number can hold exactly, so parse it with BigInt or a decimal library. Use amount for display.
On EVM chains, wallet addresses are matched case-insensitively and are returned lowercased.

Subscribe

To start receiving balances, send a subscribe message after the connection opens. You choose a chain and which wallet to watch.
Watch one wallet on Solana
Watch one wallet on Base
The wallet field decides what you watch. Use a wallet address to follow one wallet, or the value ”*” to follow every tracked wallet of the chosen types. If you watch a single wallet that CabalSpy has not cached yet, its balance is fetched immediately.
Watch all KOL wallets on BNB
string
required
The operation. Use subscribe to start.
string
required
Set to balance for this stream.
string
Chain. One of solana, bnb, base, eth, rh. Defaults to solana.
string
required
Which wallet to watch. Either a wallet address for one wallet, or ”*” for all tracked wallets of the chosen types.
array
Which wallet types to include when you use ”*”. See the table above. Defaults to every type the chain supports. Ignored when you watch a single wallet.

Unsubscribe and other operations

To stop watching a wallet, send the same chain and wallet with op unsubscribe.
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

Events

init on subscribe with a balance snapshot, then balance_update whenever a watched wallet balance changes.
string
init or balance_update.
object

Billing

Each delivered balance_update counts against your plan. A wildcard subscription across all wallets can produce many updates, watch specific wallets when you can.

Heartbeat

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