Trader signals API

Which tracked traders are in this token, and are they still holding?

Leaderboard-ranked trader wallets that traded one token: first buy, cost, proceeds, holdings and whether they still hold. On Solana it can read their live balances instead of the snapshot.

GET/api/external/signals/signals-whos-in/{chain}/{mint}

What it returns

Every tracked trader — a wallet ranked on a public trader leaderboard — that bought or sold one token, one row per wallet: its first buy (time, size, price, market cap), buy and sell counts, cost and proceeds, the holdings it is known to keep, whether it is still holding, and which ranked traders the wallet belongs to. Built from each tracked wallet's full trade history in the token; coverage.complete is true when that history was read for every tracked wallet. When it is false the answer covers only the trades recorded since each board started being followed (coverage.since), so a wallet that traded the token earlier can be missing. A token no tracked trader touched answers an empty holders list. By default holdings is the recorded snapshot: the last balance measured, carried forward by the trades after it. live=true reads each wallet's on-chain balance right now instead (SOL only, the 150 most recently active wallets): those rows answer holdingsBasis "live" and holdingsAt the moment of the read, a wallet that left by transfer reads as exited, and coverage.live says how many were read, failed or skipped. A live answer takes about 2 s.

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/signals/signals-whos-in/SOL/<mint>"
Parameters
ParameterDescription
live

query · boolean · optional

true reads each wallet's on-chain balance right now (SOL only, up to 150 wallets, about 2 s). Default false: the recorded snapshot.
chain

path · string · required

The chain the token lives on. Served on SOL, BNB, ETH, BASE, 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 Which tracked traders are in this token, and are they still holding?
FieldTypeDescription
chainstringThe chain asked about.
addressstringThe token, as matched (lower-cased on EVM chains).
generatedAtinteger | nullWhen this answer was built, unix seconds.
summaryobjectWallets by status. Each count is null when not reported.
summary.walletsinteger | nullWallets listed.
summary.holdinginteger | nullWallets that bought and never sold.
summary.partialinteger | nullWallets that sold part.
summary.exitedinteger | nullWallets that sold everything.
summary.unknowninteger | nullWallets whose position cannot be told from the trades on record.
holdersobject[]One row per wallet.
holders[].walletstringThe wallet.
holders[].firstBuyobject | nullIts first buy on record. null when it only sold on record.
holders[].firstBuy.atinteger | nullWhen, unix seconds.
holders[].firstBuy.txHashstring | nullThe transaction. null when not reported.
holders[].firstBuy.usdAmountnumber | nullIts size in USD. null when not reported.
holders[].firstBuy.priceUsdnumber | nullThe token price in USD. null when not reported.
holders[].firstBuy.marketCapUsdnumber | nullThe token's market cap in USD. null when not reported.
holders[].lastTradeAtinteger | nullIts latest trade on record, unix seconds.
holders[].buysinteger | nullBuys on record.
holders[].sellsinteger | nullSells on record.
holders[].tokensBoughtnumber | nullTokens bought. null when any buy lacks the figure.
holders[].tokensSoldnumber | nullTokens sold. null when any sell lacks the figure.
holders[].costUsdnumber | nullUSD spent buying. null when any buy lacks the figure.
holders[].proceedsUsdnumber | nullUSD taken selling. null when any sell lacks the figure.
holders[].holdingsnumber | nullTokens it is known to hold. null when no balance is known.
holders[].holdingsAtinteger | nullWhen that balance was measured, unix seconds.
holders[].holdingsBasisstring | nullWhere the balance comes from: "reported" by the board, read from the "transaction" itself, computed from the full trade "history", or a "live" balance read. null when none.
holders[].holdingsDerivedboolean | nullWhether the balance was carried forward from an older measurement by later trades.
holders[].statusstring | nullHolding, partly sold, fully exited, or unknown from the trades on record.
holders[].sourcesstring[]The boards that reported its trades.
holders[].tradersobject[]The ranked traders this wallet belongs to. Empty when none claims it.
holders[].traders[].idstringThe trader, "<SOURCE>:<id>" — the subject signals-trader takes.
holders[].traders[].sourcestringThe board that tracks the trader.
holders[].traders[].handlestring | nullThe name the trader goes by on that board.
holders[].traders[].xHandlestring | nullThe trader's X (Twitter) username. null when not linked.
holders[].traders[].avatarUrlstring | nullThe trader's picture. null when none.
holders[].traders[].resolutionstring | nullHow the wallet is tied to the trader: "native", "confirmed" or "candidate".
holders[].traders[].placementobject | nullThe trader's best standing board placement. null when no board lists them now.
holders[].traders[].placement.boardstringThe board period: 24h, 7d or 30d.
holders[].traders[].placement.rankinteger | nullThe rank on it, 1 = best.
holders[].traders[].placement.pnlUsdnumber | nullThe PnL in USD the board ranks on. null when not reported.
holders[].traders[].placement.pnlNativenumber | nullThe PnL in the chain's native coin. null when not reported.
coverageobject
coverage.sinceobjectPer board, its oldest trade on record (unix seconds): how far back an incomplete answer reaches.
coverage.completebooleanTrue when every tracked wallet's full trade history in this token was read; false when the answer covers the trades on record only.
coverage.liveobjectWhat the live balance read covered. requested and used are false on a default answer.
coverage.live.requestedbooleanWhether live=true was asked.
coverage.live.usedbooleanWhether balances were read now. false when not asked, or when the chain is not served live.
coverage.live.checkedinteger | nullWallets whose balance was read now.
coverage.live.failedinteger | nullWallets whose read failed; they keep the recorded figure.
coverage.live.skippedinteger | nullWallets past the 150-wallet cap, least recently active first; they keep the recorded figure.
coverage.live.reasonstring | nullWhy the read did not run or was partial: "not_configured", "unsupported_network" or "partial_failure". null when it ran in full or was not asked.

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