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.

GET/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>"
Parameters
ParameterDescription
chain

path · string · required

The chain the token lives on. SOL, ETH, BNB, BASE and RHC; every other chain returns 400.
mint

path · 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.

Response fields of How risky is this token's holder base, in one verdict?
FieldTypeDescription
verdictstring | nullWhat the parts that answered say, in one sentence. null when none had anything to say.
operatorsobject | nullThe 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.holdersReadintegerThe largest holders read (up to 20), contracts and pools included.
operators.operatorCountintegerThe groups they fall into once linked holders are joined.
operators.linkedHoldersintegerHolders that share a group with at least one other.
operators.largestGroupintegerHolders in the largest group.
operators.linkedBystring[]What was read to link them: clusters (the same holder cluster), packs (the same buying pack).
clustersobject | nullFrom holder-clusters. null when the token has no cluster map.
clusters.countintegerClusters in the map.
clusters.clusteredSupplyPctnumber | nullThe share of supply all clusters hold, 0-100.
clusters.largestobject | nullThe cluster holding the largest share; null when the map holds none.
clusters.largest.supplyPctnumber | nullIts share of supply, 0-100.
clusters.largest.holderCountinteger | nullHolder wallets in it.
sellImpactobject | nullFrom sell-impact: the largest cluster selling everything now. null when the drop is unknown.
sellImpact.priceDropPctnumberThe price drop that sale would cause, 0-100.
sellImpact.tokensSoldnumber | nullTokens sold, decimal-adjusted.
sellImpact.reserveBasisstringbonding-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.venuestring | nullThe launchpad, on bonding-curve; null on pools.
freshnessobject | nullFrom holder-freshness: how the 20 largest holders first got the token and whether they traded before. RHC and SOL.
freshness.holdersReadintegerHolders read, contracts included.
freshness.virginintegerHolder wallets with no other token traded before this one.
freshness.shortHistoryintegerHolder wallets with 1-3 other tokens traded before.
freshness.establishedintegerHolder wallets with a longer history.
freshness.unreadintegerHolder wallets whose history could not be read.
freshness.boughtintegerHolder wallets whose first receipt of the token was a buy.
freshness.receivedintegerHolder wallets whose first receipt of the token was a transfer.
packsobject | nullFresh 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.countintegerPacks among the holders read.
packs.walletsintegerHolder wallets in a pack.
packs.largestintegerWallets in the largest pack; 0 when there is none.
snipersobject | nullFrom token-snipers: the wallets that bought in the launch window. RHC launchpad tokens.
snipers.completebooleanfalse while the launch window is still open: more snipers can come.
snipers.sniperCountinteger
snipers.inLaunchBlockintegerSnipers that bought in the launch block itself.
snipers.stillHoldingintegerSnipers still holding more than 1% of what they bought.
snipers.heldPctnumberThe share of the launch supply the snipers hold now, 0-100.
cohortsobject | nullFrom cohorts: shares of supply by holder cohort, 0-100. null when every share is unknown.
cohorts.devHoldingPctnumber | null
cohorts.snipersPctnumber | null
cohorts.bundlersPctnumber | null
cohorts.insidersPctnumber | null
cohorts.freshWalletsPctnumber | null
partsobjectWhat 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-clustersstring
parts.sell-impactstring
parts.cohortsstring
parts.holder-freshnessstring
parts.top-holdersstring
parts.token-snipersstring

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