Wallets API
Wallet trade activity
Every swap a wallet made across every token it touched, in a bounded window — swaps only, so airdrops, bridges and treasury moves do not appear here.
/api/external/wallet-analysis/wallet-activity/{chain}/{address}What it returns
Scope, stated plainly: this reports TRADE (swap) events only — a wallet buying or selling a token. It does NOT report airdrops, bridges, treasury sends, staking moves, mints or burns, or any other raw wallet-to-wallet transfer; a wallet that only received an airdrop in the window gets back an empty trades here, not an error. That different question — every raw token-transfer event this wallet made or received, across every token it touched — is answered by wallet-token-transfers; transfers cannot answer it, being token-scoped rather than wallet-scoped.
Chains
- Solana SOL
- BNB Chain BNB
- Ethereum ETH
- Stable STABLE
- Base BASE
- Robinhood Chain RHC
- Arc ARC
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/wallet-analysis/wallet-activity/SOL/<address>?from=<from>&to=<to>&limit=<limit>"
| Parameter | Description |
|---|---|
fromquery · integer · required | Window start, Unix SECONDS. Inclusive. |
toquery · integer · required | Window end, Unix SECONDS. Inclusive. |
limitquery · integer · required | Most events to return, newest-first within the window. Capped at 200 (enforced after the API-key gate; see above). A wide window costs no more than a narrow one: each answer is one page regardless of how wide [from, to] is. On SOL, ETH, BNB and BASE an answer can hold at most 100 events when the primary source is unavailable; a full page then comes back with truncated: true. On ARC an answer covers at most the newest 30 days of the window, and a longer window comes back with truncated: true; the same holds on any chain when the other sources are unavailable. |
chainpath · string · required | The chain the wallet address belongs to. CELO, ARB, OP and SCROLL return 400 here. |
addresspath · string · required | The wallet address. |
Response fields
A JSON response. Every field is always present; null means the value could not be established, never zero.
| Field | Type | Description |
|---|---|---|
trades | object[] | |
trades[].at | number | Unix SECONDS. |
trades[].tokenAddress | string | The token this event concerns. NOT fixed across rows — a wallet can touch many. |
trades[].counterTokenAddress | string | null | What tokenAddress was traded against on this row. |
trades[].side | string | Whether the wallet bought or sold tokenAddress. |
trades[].amountToken | number | null | Decimalized amount of tokenAddress that changed hands. |
trades[].priceUsd | number | null | null when this row's price could not be trusted — a literal 0 from the source, never a real free trade, or, when the primary source is unavailable, the two sides of the trade valued more than 5% apart in USD — NOT when the trade did not happen. amountToken, side and txHash are still real on a null-priced row. |
trades[].volumeUsd | number | null | null whenever priceUsd is null — never re-derived from a rejected price. |
trades[].txHash | string | null | |
coveredFrom | number | null | The earliest instant actually covered by trades, Unix seconds. Equal to the requested from when the source's page reached back that far; LATER than from when this wallet made more trades than one page holds. Equal to the requested from too when the source answered a genuinely quiet window — an empty trades with a non-null coveredFrom IS a confirmed answer. null only when nothing answered trades at all (the source could not be reached) — a different claim from a confirmed-quiet window, and never paired with a populated trades. |
truncated | boolean | true when coveredFrom is later than the requested from — there may be trades between the requested from and coveredFrom that are NOT in this response. Narrow the window and retry to see them. |
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