API ReferenceHolder Streams
Planned

Holder Streams

Live holder updates — per-balance-change events and periodic concentration summaries — pushed the moment they happen, instead of polling Holder Summary.

⚠️

Holder streams aren’t bridged to the public WebSocket yet. The events below are produced internally today; the client channels are on the roadmap. Until then, poll GET /v1/token/{mint}/holders/summary (15s cache).

Balance updates

Planned channel token:{mint}:holders — one event per balance change on the token.

FieldTypeDescription
walletstringHolder whose balance changed
mintstringToken mint
balance_rawnumberNew raw balance after the change
slotnumberSlot of the change
event_indexnumberIntra-slot ordinal
tsnumberUnix ms
sourcestringhot (live swap) or hydrator (backfill insert)
classstringhuman · pool · curve · program_account (Holder Labels)

Concentration summaries

Planned channel token:{mint}:holders:summary — the full summary, re-emitted on change (roughly every 30s, only when the holder picture actually moves).

FieldTypeDescription
mintstringToken mint
distinct_countnumberDistinct non-zero holders
total_balance_rawnumberSum of holder balances
supply_rawnumber | nullOn-chain supply, raw units
hydration_statusstringborn_forward · hydrating · hydrated · partial_forward
concentrationobjecttop_10_pct / top_50_pct / top_100_pct
top_narrayTop holders, each with wallet, balance_raw, pct_of_total, class, labels
tsnumberUnix ms

The summary stream is deduplicated — it only fires when the fingerprint (counts, totals, top-N, concentration) changes, so an idle token stays quiet. This mirrors the REST + Streaming Model: backfill with the summary endpoint, then keep it live off the stream once it ships.