Tokens API

Are the top holders fresh wallets

For a token's 20 largest holders: wallet or contract, whether each bought its position or was sent it, the native coin paid, and how many other tokens it traded before (virgin to established).

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

What it returns

For each of the token's 20 largest holders: whether it is a wallet, a contract or a burn address; how the wallet first got the token (a buy, with the native coin it paid, or a plain transfer, and from whom); and how many other tokens it traded before that, from virgin (none) to established (4 or more). Many virgin wallets among the top holders, or many that were sent their tokens rather than buying them, is a sign the supply was spread by one hand. The history is read from the chain itself; a wallet whose history is too long to read here is left null rather than guessed. holder-packs groups the virgin buyers that bought together.

Chains

  • Solana SOL
  • 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-freshness/SOL/<mint>"
Parameters
ParameterDescription
chain

path · string · required

RHC and SOL; 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 Are the top holders fresh wallets
FieldTypeDescription
asOfstring | nullWhen the holder list was taken (ISO 8601 UTC).
holdersReadintegerHolders read: up to 20, the largest first.
summaryobjectCounts over the holders that are wallets.
summary.virgininteger
summary.shortHistoryinteger
summary.establishedinteger
summary.unreadintegerWallets whose freshness is null.
summary.boughtintegerWallets whose first receipt was a buy.
summary.receivedintegerWallets whose first receipt was a transfer.
holdersobject[]Largest first.
holders[].rankinteger1 = largest holder.
holders[].walletstring
holders[].labelstring | nullWhat the address is when known, e.g. LP; else null.
holders[].amountnumber | nullThe balance in whole tokens.
holders[].addressKindstring | nullwallet (no code or a delegated wallet on RHC; an ordinary keypair address on SOL), contract (a contract; on SOL, a program-owned address such as a pool or a curve), or burn (the zero or dead address; on SOL, the incinerator).
holders[].freshnessstring | nullvirgin: the wallet traded no other token before this one. short-history: 1 to 3 other tokens. established: 4 or more. null for a contract, a burn address, or a wallet whose history is too large to read here.
holders[].priorTokensnumber | nullDistinct other tokens the wallet bought or sold before its entry, counted up to 4 (4 means 4 or more). The native coin, wrapped or not, is not counted; on SOL neither are USDC and USDT. null when freshness is.
holders[].entryobject | nullThe first time the wallet received the token. null for a contract or a burn address, and for a wallet whose first receipt could not be found.
holders[].entry.howstringbought when that transaction was a trade the wallet paid for (a swap router, the launch curve or a pool paid the token out to it); received when it was a plain transfer from another wallet or contract, or a share of somebody else's trade that the wallet paid nothing for.
holders[].entry.atnumber | nullUnix seconds of the block (slot on SOL).
holders[].entry.blockintegerThe block of that transaction; on SOL, its slot.
holders[].entry.txstringIts transaction hash; on SOL, its signature.
holders[].entry.fromstring | nullWho sent the token: the pool, router or wallet.
holders[].entry.nativeInnumber | nullNative coin paid for the tokens in that buy, in whole units (ETH on RHC, SOL on SOL, wrapped included). null for a transfer, and for a buy paid in another token or whose payment cannot be tied to this wallet. The entry is the first receipt, so a small test buy made before the real position shows its own small amount.

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