KOL Holders Table — who is in the bag,
live
The KOL holders API returns every tracked KOL, Smart Money and Whale wallet holding a token, with position size, bag percentage, entry market cap and unrealized PnL. Fetch it once over REST or keep it live over a WebSocket stream.


















Build a real-time holders tab with one stream
What it shows
A table of the tracked wallets holding a token and how they are doing. Each row carries the wallet’s profile and its position: tokens held, percent of supply, bag percentage (how much of the peak holding is still held), invested and remaining value, realized and unrealized PnL, and the market cap at which the wallet first entered.
In the full version each row also shows the wallet’s native balance and whether it entered through a coordinated bundle. That is the holders tab known from terminals like Axiom: who is in the token, how large the wallet is, and who is up or down on the position.
How it works
For a live table, subscribe to the holder stream with the token address. You first receive an init event with a snapshot of every tracked holder, then holder_update when a holder trades and position_update when the market cap moves and the unrealized numbers change. Positions are computed server side, so you replace a holder’s position with the latest one instead of adding up trades.
Use mode to control message volume: full sends trades plus price-driven updates, events sends only real trades. In full mode, mc_interval (1 to 30 seconds) limits price updates to one per token per window. To add wallet size and bundle flags, subscribe to the balance and bundle streams on the same connection and merge the events into rows keyed by wallet address. For a one-off snapshot, the REST holders endpoint returns the holders ranked by amount held.
Supported chains: The holder and balance streams and the REST holders endpoint cover Solana, BNB Chain, Base, Ethereum and Robinhood Chain. The full table that merges holder, balance and bundle data is Solana only, because bundle detection is Solana based; unrealized PnL, remaining value and entry market cap are also Solana-only fields and null on other chains.
Quick start
Get a free key from the API dashboard (10,000 credits per month, no credit card), then:
const ws = new WebSocket("wss://stream.cabalspy.xyz?apiKey=YOUR_KEY");
ws.onopen = () => {
ws.send(JSON.stringify({
op: "subscribe", stream: "holder", blockchain: "solana",
token: "3Pkrq4MmLvDXyn1fa3sz5MekKRkZkc1iLDcz5AzWpump",
wallet_types: ["kol", "smart", "whale"], mode: "full",
}));
};
ws.onmessage = (e) => {
const msg = JSON.parse(e.data);
if (msg.event === "init") {
console.log("holders", msg.data.holder_count);
} else if (msg.event === "holder_update") {
const h = msg.data.holder;
console.log(h.profile.name, h.position.bag_pct, h.position.unrealized_pnl_usd);
}
};{
"op": "subscribe",
"stream": "holder",
"blockchain": "solana",
"token": "3Pkrq4MmLvDXyn1fa3sz5MekKRkZkc1iLDcz5AzWpump",
"mode": "full",
"mc_interval": 5
}curl "https://api.cabalspy.xyz/v1/tokens/holders?blockchain=solana&mint=3Pkrq4MmLvDXyn1fa3sz5MekKRkZkc1iLDcz5AzWpump&limit=50&api_key=YOUR_KEY"Who builds this
- Trading terminals — the holders tab on every token page, updating without polling
- Token screeners — a column showing which KOLs and Smart Money wallets are still in
- Copy-trading apps — see whether the wallets you follow are holding or have sold
- Telegram and Discord bots — a holders command that lists KOL positions for a token
Frequently asked questions
01How do I get the KOL holders of a token?
Call GET https://api.cabalspy.xyz/v1/tokens/holders with blockchain and mint. The KOL holders API returns the tracked wallets holding the token, ranked by amount held, each with profile and position (token amount, supply percentage, bag percentage). Pass type (kol, smart or whale) to narrow to one wallet category, or omit it to include all.
02How do I build a real-time holders tab?
Open a WebSocket to wss://stream.cabalspy.xyz and subscribe to the holder stream with the token address. Handle three events: init replaces the table with a full snapshot, holder_update upserts the one holder that just traded, and position_update refreshes positions when the market cap moves. Keep the holders in a map keyed by wallet address and re-render.
03Does the holders table include unrealized PnL and entry market cap?
Yes. The holder stream sends positions with unrealized PnL, remaining value and the market cap at entry. On the REST holders endpoint these live position fields are available on Solana only and are null on other chains; entry market cap is also null for positions opened before entry tracking started.
04How can I reduce WebSocket credit usage for a holders table?
Each delivered event costs 1 credit. Subscribe with mode "events" to receive only real trades, or keep mode "full" and set mc_interval between 1 and 30 seconds to receive at most one price-driven update per token in that window.
05Which chains does the KOL holder stream support?
The holder stream runs on Solana, BNB Chain, Base, Ethereum and Robinhood Chain with an identical event shape. Solana tracks KOL, Smart Money and Whale wallets; BNB Chain, Base and Robinhood Chain track KOL and Smart Money; Ethereum tracks KOL. The combined table with bundle flags is Solana only.
Go deeper
Related use cases
Build KOL Holders Table into your product. Start free today.
10,000 free credits every month, REST and WebSocket access, no credit card. Plans from $49/month.
