Who traded the token
const url = 'https://api.getchord.xyz/v1/chains/solana/token/example/traders?limit=30&hours=24';const options = {method: 'GET'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://api.getchord.xyz/v1/chains/solana/token/example/traders?limit=30&hours=24'The wallets that traded the token over the window, biggest USD volume first (the top 100; limit slices them): bought, sold, net, trades, and an average-cost PnL over the window. The window is whole UTC hours: the current hour and the hours (1–48) before it, starting at since, so it covers a little more than hours × 3600 seconds. Closed hours come from an hourly (token, wallet) rollup and the current hour from the raw swaps; while the rollup has not reached back to since the whole window is read from raw, and the first read of a busy token can then take tens of seconds or answer 503. The answer is cached on the Solana side: retry after a minute, or ask for fewer hours.
heldAmountis bought minus sold inside the window, not the wallet’s balance.partial: true= the wallet sold more than it bought in the window; those sells have no cost basis.
Chord’s own Solana tape, read-only. No key needed.
- What it reads. The swap events of 11 venues: PumpSwap, the pump.fun bonding curve, Meteora DBC, Meteora DAMM v2, Meteora DLMM, Meteora pools (dynamic AMM v1), Raydium CLMM, Raydium CPMM, Raydium AMM v4, Raydium LaunchLab and Orca Whirlpool. Each swap is checked against the pool vaults’ balance changes in the same transaction.
- What it does not read. Prop AMMs (SolFi, HumidiFi and the like) and order books. SOL/USDC and other major pairs therefore show far less volume than the whole market; the numbers are accurate for pump.fun, Meteora and Raydium style tokens. Transfers are not seen either: wallet PnL is average cost inside the window.
- History. Live since 2026-10-03 12:01 UTC, plus a backfill of the days before.
coverageSinceon/chains/solana/overviewsays from when totals are complete: quote that field, not a date. - Addresses are base58 and case-sensitive. Never lower-case a mint or a wallet: a lower-cased mint is a different string, refused with
400 BAD_ADDRESSwhen it stops being base58 (anLbecomesl) and answered404 TOKEN_NOT_FOUNDotherwise. Solana has no numeric chain id here: the path segment is the literalsolana. - Units. Token amounts are whole tokens (decimals already applied),
quoteAmountis whole units of the pool’s quote (SOL, USDC, USDT or the other token), prices and*Usdfields are US dollars. Timestamps,updatedAtincluded, are Unix seconds. - Names are untrusted.
symbol,nameandimageare whatever the token’s creator wrote; many mints share a symbol and there are no wash or impostor flags. Identify a token by its mint. - Errors.
400 BAD_*for a bad parameter;400 UNSUPPORTED_CHAINif Solana is not public on the deployment and the request has noX-API-Key;503 CHAIN_DATA_UNAVAILABLEwhen the Solana store cannot be read in time and503 CHAIN_NOT_ENABLEDwhen the lane is off: retry later, never read either as “no trades”.
Parameters
Section titled “ Parameters ”Path Parameters
Section titled “Path Parameters”Solana address, base58, case-sensitive. Never lower-case it.
Token mint, base58, exactly as it appears on-chain.
Query Parameters
Section titled “Query Parameters”Whole UTC hours before the current one (see since).
Responses
Section titled “ Responses ”object
Solana address, base58, case-sensitive. Never lower-case it.
Unix time, seconds, UTC.
object
Solana address, base58, case-sensitive. Never lower-case it.
Bought minus sold, USD.
Unix time, seconds, UTC.
Whole tokens.
Unix time, SECONDS, when the Solana box built this answer. Unlike the rest of the API (milliseconds).
Example
{ "chain": "solana", "token": "7VertkgF9KLhxxJXHX6uaWuoYZTP9LdGj2bWmVXVpump", "windowHours": 24, "since": 1791079200, "priceUsd": 0.01420426088276189, "traders": [ { "wallet": "ARu4n5mFdZogZAravu7CcizaojWnS6oqka37gdLT5SZn", "boughtUsd": 2176754.8047437067, "soldUsd": 1884286.4740241242, "netUsd": 292468.3307195825, "trades": 11466, "lastTrade": 1791152541, "heldAmount": 18044940.3278099, "heldValueUsd": 256315.04003008266, "realizedPnlUsd": 30691.394381958165, "unrealizedPnlUsd": -66844.68507145798, "partial": false }, { "wallet": "MriyaNN8TMp6qRWjfr723PK7xgQK7yCt7Kg2v2PQu7X", "boughtUsd": 508194.52591024636, "soldUsd": 519052.2068625818, "netUsd": -10857.680952335417, "trades": 1436, "lastTrade": 1791152211, "heldAmount": 0, "heldValueUsd": 0, "realizedPnlUsd": 10307.184467280762, "unrealizedPnlUsd": 0, "partial": true } ], "updatedAt": 1791167327}BAD_ADDRESS / BAD_LIMIT / BAD_HOURS, or UNSUPPORTED_CHAIN (Solana is not public on this deployment and the request has no X-API-Key).
Every non-2xx body.
object
Stable machine code, e.g. INVALID_PARAMS, NOT_READY, RATE_LIMIT_EXCEEDED.
For humans.
HTTP status, when included.
Example
{ "error": "INVALID_PARAMS", "message": "amount must be an integer string in the token's smallest unit"}TOKEN_NOT_FOUND: this mint has not traded on a venue the tape reads since the tape started.
Every non-2xx body.
object
Stable machine code, e.g. INVALID_PARAMS, NOT_READY, RATE_LIMIT_EXCEEDED.
For humans.
HTTP status, when included.
Example
{ "error": "INVALID_PARAMS", "message": "amount must be an integer string in the token's smallest unit"}Over the per-minute limit (RATE_LIMIT_EXCEEDED). Read X-RateLimit-Reset and back off.
Every non-2xx body.
object
Stable machine code, e.g. INVALID_PARAMS, NOT_READY, RATE_LIMIT_EXCEEDED.
For humans.
HTTP status, when included.
Example
{ "error": "INVALID_PARAMS", "message": "amount must be an integer string in the token's smallest unit"}CHAIN_DATA_UNAVAILABLE (the Solana store did not answer in time) or CHAIN_NOT_ENABLED (the lane is off on this deployment). Retry later; do not treat it as an empty answer.
Every non-2xx body.
object
Stable machine code, e.g. INVALID_PARAMS, NOT_READY, RATE_LIMIT_EXCEEDED.
For humans.
HTTP status, when included.
Example
{ "error": "INVALID_PARAMS", "message": "amount must be an integer string in the token's smallest unit"}