Holder Summary & Concentration
Distinct holder count and three-tier supply concentration for any token, served from indexed holder state and updated continuously as transfers land — no batch jobs.
REST
L1 GET /v1/token/{mint}/holders/summary
| Field | Type | Description |
|---|---|---|
mint | string | Token mint |
distinctCount | number | Distinct wallets with a non-zero balance |
totalBalanceRaw | string | Sum of all holder balances, raw units (string for precision) |
supplyRaw | string | null | On-chain mint supply, raw units; null until the mint is validated |
top10Pct / top50Pct / top100Pct | number | null | Supply share held by the top 10 / 50 / 100 wallets |
hydrationStatus | string | Completeness of the holder set (see below) |
lastUpdatedSlot / lastUpdatedTsMs | number | Slot / time of the last balance change |
asOfTsMs | number | When this response was computed |
curl -H "Authorization: Bearer $API_KEY" \
"https://api.conyr.ai/v1/token/EPjFWd.../holders/summary"{
"mint": "EPjFWd...",
"distinctCount": 18420,
"totalBalanceRaw": "999850000000000",
"supplyRaw": "1000000000000000",
"top10Pct": 24.6,
"top50Pct": 41.2,
"top100Pct": 52.9,
"hydrationStatus": "hydrated",
"lastUpdatedSlot": 245678901,
"lastUpdatedTsMs": 1709654400000,
"asOfTsMs": 1709654400123
}top{N}Pct is null when fewer than N distinct holders exist — always render it next to distinctCount so the denominator is clear. When supplyRaw is null (unvalidated mint), use totalBalanceRaw as the denominator. Balances are raw-unit strings to preserve precision in JS. Cached 15s.
Hydration status
Because Conyr is forward-only, hydrationStatus tells you how complete the holder set is for a given token.
| Value | Meaning | How to render |
|---|---|---|
hydrating | Initial holder set is still being collected | Spinner; concentration may be unstable |
hydrated | Full holder set has been observed | Display normally |
born_forward | Token first appeared after Conyr started indexing | Display normally — captured from the first transfer |
partial_forward | Backfill incomplete; only forward state is authoritative | Treat concentration as a lower bound; show a disclaimer |
Need a live push instead of polling this endpoint? See Holder Streams.