Tokens API

How far would the price fall if the biggest holders sold?

The price drop if the largest holder cluster, or given wallets, sold everything into the token's launchpad curve, else into its on-chain DEX pools only. SOL, ETH, BNB, BASE, RHC.

GET/api/external/token-analysis/sell-impact/{chain}/{mint}

What it returns

Sells the holdings of the token's largest holder cluster — or of the wallets you name — into the token's current market, and returns the price drop that sale would cause.

The model: constant product. Selling q tokens into a token-side reserve R drops the price by 100 × (1 − (R / (R + q))²) percent. Fees and any buyers arriving meanwhile are ignored.

The reserve `R`: while the token is still on its launchpad bonding curve (pump.fun on SOL, Pons V2 on RHC) it is the curve's token reserve, read from the chain — the curve is the whole market then. Otherwise it is the SUM of the token-side depth of every on-chain DEX pool that lists one, counting only pools where this token is the base side: a seller splitting a sale across constant-product pools meets their combined reserve. Pools that list no depth are left out and counted in poolsWithoutDepth; concentrated-liquidity pools and a truncated list both make the drop read high, never low.

DEX liquidity only: off a curve the drop is measured on on-chain DEX pools alone (reserve.scope dex-pools-only, and note says so). Liquidity on centralized exchanges is not seen, so for a large token that also trades there a real sale would move the price less; for a token that trades only on DEXes the figure is the realistic one.

The holdings `q`: the largest cluster of transfer-connected holders (the first cluster holder-clusters lists), or, with wallets, the sum of those wallets' current balances. priceDropPct is null — never 0 — when either side is unknown: no cluster map for the token, a map with no cluster, or no market with a stated depth.

Price: the sum of what the endpoints it calls would cost called directly — holder-clusters only when wallets is omitted, and pools only when the token is not on its launchpad curve — plus its own chain reads (the curve, and the balances of the wallets you name).

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/sell-impact/SOL/<mint>"
Parameters
ParameterDescription
wallets

query · string · optional

Optional. Comma-separated wallets whose combined holding is sold instead of the largest cluster — base58 on SOL, 0x-prefixed hex elsewhere. Each address at most once, at most 50. Omit it to sell the largest holder cluster.
chain

path · string · required

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 far would the price fall if the biggest holders sold?
FieldTypeDescription
holdingsobject
holdings.basisstringwallets when wallets was given; largest-cluster otherwise.
holdings.tokensnumber | nullTokens sold, decimal-adjusted. null when no cluster is known.
holdings.clusterobject | nullThe cluster sold, on largest-cluster. null on wallets, and when the token has no cluster map or its map holds no cluster.
holdings.cluster.rankintegerAlways 1: the cluster holding the largest share.
holdings.cluster.supplyPctnumber | nullThe cluster's share of total supply, 0-100.
holdings.cluster.holderCountinteger | nullHolder wallets in the cluster.
holdings.walletsobject[] | nullEach named wallet's current balance, in the order given. null on largest-cluster.
holdings.wallets[].walletstring
holdings.wallets[].tokensnumberDecimal-adjusted; 0 when the wallet holds none.
reserveobject
reserve.basisstringbonding-curve while the token trades on its launchpad curve; pools otherwise.
reserve.scopestringWhat the reserve covers. whole-market on bonding-curve: the curve is the token's only market. dex-pools-only on pools: 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 than priceDropPct says.
reserve.venuestring | nullThe launchpad, on bonding-curve; null on pools.
reserve.tokensnumber | nullThe token-side reserve a sale trades against, decimal-adjusted: the curve's, or the sum over the counted pools. null when no pool lists a depth.
reserve.poolsCountedinteger | nullPools whose depth was summed. null on bonding-curve.
reserve.poolsWithoutDepthinteger | nullPools listed without a token-side depth, left out of the sum. null on bonding-curve.
reserve.poolsTruncatedboolean | nullWhether the pool list holds only part of the token's pools. null on bonding-curve.
priceDropPctnumber | nullThe price drop the sale would cause, 0-100, against the reserve reserve.scope describes. null when the holdings or the reserve are unknown.
notestringWhat priceDropPct is measured against, in one sentence: the bonding curve (the whole market), or on-chain DEX pool liquidity only — and, when poolsTruncated is true, that the list was cut short.

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