Skip to main content
The core realtime stream. Every time a tracked wallet buys or sells, you receive a position_update event with the trade and the wallet running position on that token, including held amount, bag percentage and supply percentage. All CabalSpy streams share one WebSocket endpoint. You open a single connection, authenticate, then subscribe to as many channels as you like. This page covers the transactions channel.

Endpoint

Connect to wss://stream.cabalspy.xyz. Pass your API key either as a query parameter or as a Bearer header.

Authentication

Provide your API key one of two ways when opening the connection. As a query parameter, wss://stream.cabalspy.xyz?apiKey=YOUR_KEY. Or as a header, Authorization: Bearer YOUR_KEY. A connection without a valid key is closed immediately with code 1008. On connect you receive a welcome message listing the available streams and example subscriptions. After that you drive everything with subscribe messages.

Chains and wallet types

Each chain tracks a different set of wallet categories, and reports values in its own native currency. Asking for a wallet type a chain does not track is rejected with an error naming the types it does track. On EVM chains, contract addresses are matched case-insensitively.

Subscribe

To start receiving trades, send a subscribe message after the connection opens. You choose a chain, a wallet type, and optionally one token to narrow to.
Subscribe to all KOL trades on Solana
The token field decides how much you get. Use the value ”*” to receive trades on every token, or a token mint address (Solana) or contract address (BNB, Base, ETH, Robinhood) to receive only trades on that one token.
Subscribe to one token only
string
required
The operation. Use subscribe to start.
string
required
Set to tx for this stream.
string
required
Chain. One of solana, bnb, base, eth, rh.
string
required
Wallet category. See the table above. Solana has kol, smart, whale. BNB, Base and Robinhood have kol, smart. ETH has kol.
string
Which token to watch. Either ”*” for all tokens, or a single token mint or contract address to narrow to one token. Defaults to all tokens.

Unsubscribe and other operations

To stop a subscription, send the same fields with op unsubscribe.
Unsubscribe
To see what you are currently subscribed to, send op subscriptions. To check the connection is alive, send op ping and you get a pong back.
List your subscriptions

Event

Each matching trade delivers a position_update event.
boolean
Always true for stream events.
string
The channel that produced the event, for example tx.solana.kol.
string
position_update.
object

Billing

Each delivered event counts against your plan, the same way a request does. A subscribe to a busy wildcard channel can produce many events, so scope your token filter when you can.

Heartbeat

The server sends WebSocket pings on an interval and expects your client to answer with pong, which browsers and standard clients do automatically. A connection that stops answering is closed. You can also send op ping at any time to check liveness.