> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cabalspy.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# KOL Real-Time Holding Table

> A live table of everyone holding a token, merging holder positions, native balance and bundle flags. Endpoints, chains, first steps and a cookbook.

A live table of everyone holding a token, updating as they trade and as the market cap moves. Each holder shows their position, bag percentage, unrealized PnL, native balance, and whether they entered through a coordinated bundle. This is the full Axiom style holders tab.

## What it shows

Who holds the token and how they are doing, live. It merges three streams, the holder position, the wallet native balance, and bundle detection, into one row per wallet, so you see the position, the wallet size and the bundle flag together.

## Blockchains

Solana only. The holder position uses live market cap, the balance is native SOL, and bundle detection is Solana based.

## Endpoints

Three streams, merged into one table keyed by wallet.

<CardGroup cols={1}>
  <Card title="WSS holder stream" href="https://docs.cabalspy.xyz/holder">
    Positions, bag percentage and unrealized PnL. This stream owns which rows exist.
  </Card>

  <Card title="WSS balance stream" href="https://docs.cabalspy.xyz/balance-1">
    Native SOL balance per wallet.
  </Card>

  <Card title="WSS bundle stream" href="https://docs.cabalspy.xyz/bundle-1">
    Flags the wallets that entered through a coordinated bundle.
  </Card>
</CardGroup>

## First steps

<Steps>
  <Step title="Get an API key">
    Register at [apidashboard.cabalspy.xyz](https://apidashboard.cabalspy.xyz) and create a key.
  </Step>

  <Step title="Pick a Solana token">
    You need the token mint. This feature is Solana only.
  </Step>

  <Step title="Subscribe to all three streams">
    Open one WebSocket, subscribe to the holder, balance and bundle streams for the token, and merge each event into a row keyed by wallet address.
  </Step>
</Steps>

```javascript Subscribe to all three theme={null}
const ws = new WebSocket("wss://stream.cabalspy.xyz?apiKey=YOUR_KEY");
ws.onopen = () => {
  ws.send(JSON.stringify({ op: "subscribe", stream: "holder", token: "YOUR_MINT", mode: "full" }));
  ws.send(JSON.stringify({ op: "subscribe", stream: "balance", wallet: "*" }));
  ws.send(JSON.stringify({ op: "subscribe", stream: "bundle", token: "YOUR_MINT", mode: "full" }));
};
```

## Build it

<CardGroup cols={2}>
  <Card title="Cookbook, Holder Table (Advanced)" href="https://docs.cabalspy.xyz/Real-Time-Holders-tab-with-balance-and-bundle">
    Merge holder, balance and bundle into one live table, step by step.
  </Card>

  <Card title="GitHub demo" icon="github" href="https://github.com/CabalSpy/kol-realtime-holder-table">
    Open-source, run in minutes.
  </Card>
</CardGroup>
