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.
/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>"
| Parameter | Description |
|---|---|
chainpath · 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. |
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 |
|---|---|---|
clusterCount | integer | null | Count of clusters. null only when no map is available for this token. |
clusteredSupplyPct | number | null | Share of total supply held across all clusters, as a percentage (0-100). null when no map is available. |
mapUpdatedAt | integer | null | Unix seconds when the cluster map was last computed. null when unknown. |
clusters | object[] | Largest share first. Always an array — [] when the count is 0 or null. |
clusters[].rank | integer | 1 = the cluster holding the largest share of supply. |
clusters[].supplyPct | number | null | Share of total supply this cluster's holders hold together, as a percentage (0-100). |
clusters[].amount | number | null | Tokens the cluster holds together, in human-readable units (already decimal-adjusted). |
clusters[].holderCount | integer | null | Number of holder wallets in the cluster; null when the source gave neither a count nor a list. |
clusters[].holders | string[] | null | The cluster's holder wallets; null when the source gave no list. |
clusters[].linkingWalletCount | integer | null | Number of non-holding wallets that connect this cluster's holders; null when the source gave neither a count nor a list. |
clusters[].linkingWallets | string[] | null | Wallets 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[].timeLinkCount | integer | null | Number of timeLinks; null when the source gave neither a count nor a list. |
clusters[].timeLinks | object[] | null | Exchange, 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[].venueAddress | string | The exchange, DEX or contract address the holders used. |
clusters[].timeLinks[].windowId | string | Opaque 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