Tokens API

Bundler and sniper holding size, over time

How much of the token the bundler and sniper cohorts hold, and how many wallets carry each tag, snapshotted over time; an absolute token amount, not a percentage of supply. Solana only.

GET/api/external/token-analysis/cohort-history/{chain}/{mint}

Chains

  • Solana SOL

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/cohort-history/SOL/<mint>?interval=1m&from=<from>&to=<to>"
Parameters
ParameterDescription
interval

query · string · required

Snapshot spacing: minute, hour or day buckets.1m1h1d
from

query · integer · required

Window start, Unix SECONDS. Inclusive.
to

query · integer · required

Window end, Unix SECONDS. Inclusive. At most 100 points fit in one request PER COHORT, and the ceiling is PER INTERVAL: roughly 100 days at 1d, 4.2 at 1h, 0.07 (100 minutes) at 1m. A wider window returns 400 naming the real ceiling for the interval asked for, rather than a silently truncated series — split a longer read into multiple calls.
chain

path · string · required

Solana only; every other chain returns 400. No other wired source keeps a tagged-cohort holdings history.
mint

path · string · required

The token mint address.

Response fields

A JSON response. Every field is always present; null means the value could not be established, never zero.

Response fields of Bundler and sniper holding size, over time
FieldType
intervalstring
bundlerobject
bundler.pointsobject[]
bundler.points[].atnumber
bundler.points[].holderCountinteger | null
bundler.points[].holdingAmountnumber | null
bundler.changeobject
bundler.change.fromAtnumber | null
bundler.change.fromHoldingAmountnumber | null
bundler.change.toAtnumber | null
bundler.change.toHoldingAmountnumber | null
bundler.change.changeAmountnumber | null
bundler.change.changePctnumber | null
sniperobject
sniper.pointsobject[]
sniper.points[].atnumber
sniper.points[].holderCountinteger | null
sniper.points[].holdingAmountnumber | null
sniper.changeobject
sniper.change.fromAtnumber | null
sniper.change.fromHoldingAmountnumber | null
sniper.change.toAtnumber | null
sniper.change.toHoldingAmountnumber | null
sniper.change.changeAmountnumber | null
sniper.change.changePctnumber | null

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