Tokens API
How risky is this token's holder base, in one verdict?
One sentence on who holds the token — operators behind the largest holders, the largest cluster's share and sell impact, fresh wallets, snipers — each part broken out.
/api/external/token-analysis/token-holder-risk/{chain}/{mint}What it returns
Puts together what several endpoints of this API say about who holds a token, and states it in one sentence — e.g. "20 largest holders → 4 operators; the largest cluster (7 wallets) holds 38% of supply, and selling it into DEX liquidity could move the price −45%". Each part is returned as its own field, null when that part has no data on this token or chain, and parts says what became of each call.
The parts: holder-clusters (transfer-connected holders), sell-impact (the price drop if the largest cluster sold — into its launchpad bonding curve, or into on-chain DEX liquidity only, which the verdict says), cohorts (dev, sniper, bundler, insider and fresh-wallet shares), holder-freshness (how fresh the 20 largest holders are, and the packs that bought together — RHC and SOL), token-snipers (who bought in the launch window — RHC), and top-holders (the 20 largest holders, where holder-freshness does not give them).
Operators: the largest holders, joined when two of them sit in the same holder cluster or bought in the same pack. Fewer operators than holders means fewer hands control the top of the book than it looks.
No score. The parts are not weighed into one number: no weighting of them has been calibrated against what tokens went on to do, so each part is returned as measured.
Price: the sum of what the endpoints it calls would cost called directly, each charged only when it answers; holder-clusters is read once although sell-impact reads it too, and top-holders is called only where holder-freshness gives no holder list.
Chains
- Solana SOL
- BNB Chain BNB
- Ethereum ETH
- Base BASE
- Robinhood Chain RHC
Request
Send your key in the x-dex-data-key header. Replace each <placeholder> with a real value.
curl -H "x-dex-data-key: $DEXDATA_API_KEY" \ "https://api.dexdata.io/api/external/token-analysis/token-holder-risk/SOL/<mint>"
| Parameter | Description |
|---|---|
chainpath · string · required | The chain the token lives on. SOL, ETH, BNB, BASE and RHC; every other chain returns 400. |
mintpath · string · required | The token mint address (Solana) or contract address (EVM). |
Response fields
A JSON response. Every field is always present; null means the value could not be established, never zero.
| Field | Type | Description |
|---|---|---|
verdict | string | null | What the parts that answered say, in one sentence. null when none had anything to say. |
operators | object | null | The largest holders grouped by what links them. null when no holder list was read, or neither the clusters nor the packs answered — then no link was looked for. |
operators.holdersRead | integer | The largest holders read (up to 20), contracts and pools included. |
operators.operatorCount | integer | The groups they fall into once linked holders are joined. |
operators.linkedHolders | integer | Holders that share a group with at least one other. |
operators.largestGroup | integer | Holders in the largest group. |
operators.linkedBy | string[] | What was read to link them: clusters (the same holder cluster), packs (the same buying pack). |
clusters | object | null | From holder-clusters. null when the token has no cluster map. |
clusters.count | integer | Clusters in the map. |
clusters.clusteredSupplyPct | number | null | The share of supply all clusters hold, 0-100. |
clusters.largest | object | null | The cluster holding the largest share; null when the map holds none. |
clusters.largest.supplyPct | number | null | Its share of supply, 0-100. |
clusters.largest.holderCount | integer | null | Holder wallets in it. |
sellImpact | object | null | From sell-impact: the largest cluster selling everything now. null when the drop is unknown. |
sellImpact.priceDropPct | number | The price drop that sale would cause, 0-100. |
sellImpact.tokensSold | number | null | Tokens sold, decimal-adjusted. |
sellImpact.reserveBasis | string | bonding-curve while the token trades on its launchpad curve, its whole market; pools otherwise: on-chain DEX liquidity only — liquidity on centralized exchanges is not seen, so for a token that also trades there a real sale would move the price less. |
sellImpact.venue | string | null | The launchpad, on bonding-curve; null on pools. |
freshness | object | null | From holder-freshness: how the 20 largest holders first got the token and whether they traded before. RHC and SOL. |
freshness.holdersRead | integer | Holders read, contracts included. |
freshness.virgin | integer | Holder wallets with no other token traded before this one. |
freshness.shortHistory | integer | Holder wallets with 1-3 other tokens traded before. |
freshness.established | integer | Holder wallets with a longer history. |
freshness.unread | integer | Holder wallets whose history could not be read. |
freshness.bought | integer | Holder wallets whose first receipt of the token was a buy. |
freshness.received | integer | Holder wallets whose first receipt of the token was a transfer. |
packs | object | null | Fresh holder wallets that bought together at about the same size (the packs holder-packs lists), from the same read as freshness. null when freshness is. |
packs.count | integer | Packs among the holders read. |
packs.wallets | integer | Holder wallets in a pack. |
packs.largest | integer | Wallets in the largest pack; 0 when there is none. |
snipers | object | null | From token-snipers: the wallets that bought in the launch window. RHC launchpad tokens. |
snipers.complete | boolean | false while the launch window is still open: more snipers can come. |
snipers.sniperCount | integer | |
snipers.inLaunchBlock | integer | Snipers that bought in the launch block itself. |
snipers.stillHolding | integer | Snipers still holding more than 1% of what they bought. |
snipers.heldPct | number | The share of the launch supply the snipers hold now, 0-100. |
cohorts | object | null | From cohorts: shares of supply by holder cohort, 0-100. null when every share is unknown. |
cohorts.devHoldingPct | number | null | |
cohorts.snipersPct | number | null | |
cohorts.bundlersPct | number | null | |
cohorts.insidersPct | number | null | |
cohorts.freshWalletsPct | number | null | |
parts | object | What became of each part: answered; no-data (it had nothing on this token); unavailable (it does not serve this chain here); failed; not-called (not needed — top-holders when holder-freshness gave the holder list). Only answered parts are charged. |
parts.holder-clusters | string | |
parts.sell-impact | string | |
parts.cohorts | string | |
parts.holder-freshness | string | |
parts.top-holders | string | |
parts.token-snipers | string |
Start building with DexData today
Sign in, create a key and make your first call in a minute. Free credits every month, and you only pay for calls that succeed.
Get a free API key