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

# Follow KOL trades

> Show a live feed of trades by known KOL wallets across every chain.

The identity feed collects trades by notable wallets across every token and chain. Use it for a "what are KOLs buying" feed, copy-trading alerts, or a signal in your own ranking.

| Feed | `identity` value | Covers |
| - | - | - |
| KOLs | `kol` | Wallets labelled as key opinion leaders |
| fomo.family | `fomoscan` | Wallets with a public fomo.family profile |

## 1. Subscribe to new trades

Subscribe first, and buffer updates until the ack arrives and the recent trades are loaded, so no trade falls between the two. See [REST reads and their streams](/concepts/rest-and-streams).

```json theme={null}
{ "action": "subscribe", "channel": "spot.trades", "filters": { "identity": "kol" } }
```

The subscription covers every chain. Drop trades on chains you do not show by checking `data.chain`.

## 2. Load recent trades

After the ack, load the latest trades:

```bash theme={null}
curl "https://{{API_HOST}}/v1/trades?identity=kol&chains=solana,base&limit=50" \
  -H "Authorization: Bearer $API_KEY"
```

Leave out `chains` to cover every chain. The response is a [paged](/concepts/pagination) trade list, newest first. Merge the buffered updates into it, and skip any update whose `id` you already hold.

## 3. Show who traded

Each trade's `identities` list carries the trader's public profiles:

```json theme={null}
{
  "trader": "7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5",
  "side": "buy",
  "volume": { "native": "25.4", "usd": "4541.20" },
  "symbol": "Bonk",
  "flags": ["kol", "whale"],
  "identities": [
    { "source": "codex", "displayName": "Example Trader", "handle": "exampletrader", "avatar": "https://…", "twitter": "exampletrader", "telegram": null, "farcaster": null }
  ]
}
```

| Show | Field |
| - | - |
| Name | The first identity's `displayName`, falling back to `handle`, then to a shortened `trader` |
| Avatar | `avatar`, which can be `null` |
| Profile link | `twitter` as `https://x.com/{handle}` |
| Buy or sell | `side` |
| Size | `volume.usd` |
| Token | `symbol` and `token`; `symbol` can be empty for a brand-new token |

## Narrow the feed

Add `flags` to keep only trades by wallets that carry another [classification](/resources/glossary#wallet-classifications) too. For example, KOL trades by whales only:

```json theme={null}
{ "action": "subscribe", "channel": "spot.trades", "filters": { "identity": "kol", "flags": ["whale"] } }
```

To follow one wallet instead of a whole feed, subscribe in `wallet` mode: `{ "chain": "solana", "wallet": "<address>" }`.

## Alerts

For alerts, act on updates rather than polling. A simple rule, such as "a KOL bought more than \$5,000 of a token under 1 hour old", needs the trade from the stream and the token's `createdAt`, which you can read once per token from `GET /v1/tokens/{chain}/{address}` and cache.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.