Tokens API

Holder relationships brief: most connected top holders and strongest links

How many of a token's top holders are linked by transfers, the most connected ones, and the strongest links in full. A few KB.

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

What it returns

The brief of holder-relationships; prefer it unless you need every relationship. Same chains and parameters. It counts the relationships, those that moved the queried token itself, and the holders linked to another analysed holder; lists the 10 most connected holders; and gives the 15 strongest relationships in full: the queried token first, then the most transfers, then the most recent. As in the full answer, no relationship found is not evidence the holders are independent.

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-relationships-brief/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 Holder relationships brief: most connected top holders and strongest links
FieldTypeDescription
topHoldersAnalyzedinteger | nullTop holders analysed, as in the full answer. null when the analysis did not run.
relationshipCountinteger | nullRelationships found, as in the full answer. null when the analysis did not run.
sameTokenCountinteger | nullRelationships that moved the queried token itself. null when the analysis did not run.
connectedHolderCountinteger | nullAnalysed holders with a relationship to another analysed holder. null when the analysis did not run.
holdersobject[]Up to 10 holders linked to another analysed holder: most counterparties first, then most relationships, then the larger holder. Empty when none is.
holders[].addressstringThe holder.
holders[].holderRankinteger | nullIts rank among the analysed holders, 1 = largest.
holders[].counterpartiesintegerDistinct other analysed holders it has a relationship with.
holders[].relationshipsintegerRelationships it is a party to, a transfer to itself included.
relationshipsobject[]The 15 strongest relationships, each exactly as holder-relationships lists it: the queried token first, then the most transfers, then the most recent.
relationships[].fromAddressstringOne of the two addresses in this relationship.
relationships[].toAddressstringThe other address. The from/to direction is the source's own reporting of a transfer direction, not a claim about who initiated the relationship in general.
relationships[].fromHolderRankinteger | nullfromAddress's rank (1 = largest) among the topHoldersAnalyzed addresses. null only if it could not be matched back to the analysed list, which should not happen.
relationships[].toHolderRankinteger | nulltoAddress's rank, same caveat as fromHolderRank.
relationships[].relationTypestring | nullThe source's own relationship label. Only "GROUPED_TRANSFER" has ever been observed; passed through raw in case the source adds a new one. null only when absent.
relationships[].isNativeAssetbooleanTrue when the moved asset is the chain's native coin rather than a token.
relationships[].assetChainstring | nullThe source's own chain identifier for the moved asset (its own spelling, not this API's chain enum). null only when the source omitted it entirely.
relationships[].assetAddressstring | nullThe moved asset's address, or the literal string "native" when isNativeAsset is true — passed through as the source reports it rather than translated. null only when the source omitted it entirely.
relationships[].sameTokenAsQueriedbooleanTrue only when this relationship moved the EXACT token this request asked about. THIS IS THE FIELD THAT SEPARATES "these two holders transacted the token in question" FROM "these two holders also happen to share some unrelated transfer" (a common exchange withdrawal, a native-coin gas top-up) — read it before treating any row as evidence about this specific token. Computed from each row's own reported asset, never from the request: this source does not actually scope its answer to the token asked about.
relationships[].totalAssetAmountnumber | nullTotal amount of the asset moved between these two addresses, in the asset's own human-readable units (already decimal-adjusted by the source). NEVER USD — it is a quantity of whatever assetAddress names, and different rows can be different assets with different scales; do not sum across rows with different assetAddress values. null only when the source omitted it.
relationships[].totalTransfersinteger | nullHow many individual transfers this grouped relationship represents. null only when the source omitted it.
relationships[].firstTransferAtinteger | nullUnix seconds of the earliest transfer in this relationship. null only when the source omitted it.
relationships[].lastTransferAtinteger | nullUnix seconds of the most recent transfer in this relationship. null only when the source omitted it.

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