Wallets API
A wallet's own raw token-transfer events
Every raw token-transfer event a wallet made or received across every token it touched -- plain moves, mints and burns, not just its trades. SOL, RHC, ETH, BNB, BASE and STABLE.
/api/external/wallet-analysis/wallet-token-transfers/{chain}/{address}What it returns
Every raw token-transfer event this wallet was a party to — a plain move, a mint (from the zero address) or a burn (to the zero address) — NOT just the swap-decoded trade events wallet-activity reports. Same item shape as transfers: {at, from, to, amountToken, txHash}. coveredFrom is the earliest instant this response covers COMPLETELY, and truncated says whether that is later than the requested from (there may be earlier transfers this response does not contain). How far one page reaches depends on the chain and on which source answered. Usually the source applies the [from, to] window itself, so a page that did not fill covers the whole window — coveredFrom is from and truncated is false, including an EMPTY window, which is a confirmed "no transfers in this range"; a page that filled can end part-way through a block, so its oldest second is left out and coveredFrom is the first second it holds completely. A window ending after now is read up to now, and on ETH, BNB and BASE a window longer than 30 days may be answered for its newest 30 days only, with truncated saying so. On RHC the first source asked cannot be given a window, so coveredFrom is the oldest instant its single page reached, clamped to from, and null when that page was empty: a wallet with no token-transfer history and one the source never resolved look the same there. coveredFrom is also null when no source could be reached, on every chain. Either way transfers itself is a real [], never omitted or replaced by an error. What counts as a transfer differs by chain, and is reported as each chain has it: on RHC the feed is NOT filtered by token standard, so a non-fungible transfer can appear in it; those carry no decimals, so amountToken is null for them. On ETH, BNB, BASE and STABLE the feed holds fungible-token transfers only, and a move of the chain's own native coin is NOT a token transfer there. On SOL, where the native coin is itself modelled as a mint, native moves ARE in the feed and are usually most of it; a single transaction also commonly contributes several rows there. A null amountToken therefore means "no fungible amount could be established for this row" — the source reported no decimals, or (RHC) the row was not a fungible-token move — and never a withheld or zero amount. A zero-value transfer is a real event and publishes 0.
Chains
- Solana SOL
- BNB Chain BNB
- Ethereum ETH
- Stable STABLE
- 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/wallet-analysis/wallet-token-transfers/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 transfers to return, newest-first within the window. Capped at 50 (enforced after the API-key gate; see above). A request is answered from ONE page of the source, so it can come back with fewer rows than limit even when more exist — never silent: coveredFrom/truncated report exactly how much of the window was actually covered. |
chainpath · string · required | The chain the wallet address belongs to. SOL, RHC, ETH, BNB, BASE or STABLE; every other chain returns 400 — no wired source reports per-wallet raw token transfers there. |
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 |
|---|---|---|
transfers | object[] | |
transfers[].at | number | Unix SECONDS. |
transfers[].from | string | null | The sending address. A mint shows the zero address here. |
transfers[].to | string | null | The receiving address. A burn shows the zero address here. |
transfers[].amountToken | number | null | Decimalized amount of whichever token moved in this row. null only when the source did not report a decimals count for it — never divided by an assumed value. |
transfers[].txHash | string | null | |
coveredFrom | number | null | The earliest instant transfers covers completely, Unix seconds. Equal to the requested from when the whole window was covered (on ETH/BNB/BASE/STABLE, also for a confirmed-empty window); LATER than from when the source's one page ran out first. null when there was nothing to anchor it to — see the summary above. |
truncated | boolean | true when coveredFrom is later than the requested from — there may be transfers between from and coveredFrom not in this response. Independent of limit. |
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