Tokens API

Which wallets hold the token together, as clusters?

Groups of connected holder wallets, largest share first: each cluster's share of supply, its wallets, the wallets linking them and the venues used in one time window. Evidence, not proof.

GET/api/external/token-analysis/holder-clusters/{chain}/{mint}

What it returns

Lists every cluster of holder wallets linked to each other — by on-chain transfers, or by using the same exchange, DEX or contract within the same short time window — largest share of supply first: each cluster's combined share, its member wallets, the non-holding wallets that link them by transfers and the venues that link them by timing. A cluster is evidence of common control, never proof of it. clusteredSupplyPct is the same concentration figure cohorts reports as an aggregate; this endpoint shows who is behind it. clusterCount: 0 means a map exists and it holds no cluster; every field is null (and clusters is []) when no map is available for this token — large, widely held tokens such as major stablecoins often have none.

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/holder-clusters/SOL/<mint>"
Parameters
ParameterDescription
chain

path · string · required

SOL, ETH, BNB, BASE and RHC, all proven populated. STABLE and ARC are not indexed by the underlying source on any endpoint. CELO, ARB, OP and SCROLL return 400 here.
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 Which wallets hold the token together, as clusters?
FieldTypeDescription
clusterCountinteger | nullCount of clusters. null only when no map is available for this token.
clusteredSupplyPctnumber | nullShare of total supply held across all clusters, as a percentage (0-100). null when no map is available.
mapUpdatedAtinteger | nullUnix seconds when the cluster map was last computed. null when unknown.
clustersobject[]Largest share first. Always an array — [] when the count is 0 or null.
clusters[].rankinteger1 = the cluster holding the largest share of supply.
clusters[].supplyPctnumber | nullShare of total supply this cluster's holders hold together, as a percentage (0-100).
clusters[].amountnumber | nullTokens the cluster holds together, in human-readable units (already decimal-adjusted).
clusters[].holderCountinteger | nullNumber of holder wallets in the cluster; null when the source gave neither a count nor a list.
clusters[].holdersstring[] | nullThe cluster's holder wallets; null when the source gave no list.
clusters[].linkingWalletCountinteger | nullNumber of non-holding wallets that connect this cluster's holders; null when the source gave neither a count nor a list.
clusters[].linkingWalletsstring[] | nullWallets that hold none of the token but connect the cluster's holders through transfers — the intermediaries a funding path runs through. Never overlaps holders. null when the source gave no list.
clusters[].timeLinkCountinteger | nullNumber of timeLinks; null when the source gave neither a count nor a list.
clusters[].timeLinksobject[] | nullExchange, DEX or contract addresses that link this cluster's holders by timing: the holders used the same venue within the same short time window, as coordinated exchange funding or buying together at launch does. [] when the cluster is linked by transfers only; null when the source gave no list.
clusters[].timeLinks[].venueAddressstringThe exchange, DEX or contract address the holders used.
clusters[].timeLinks[].windowIdstringOpaque id of the time window. Two links with the same venueAddress are two windows of the same venue.

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