Wallets API
Wallet transaction ledgers
A wallet's own normal and internal transaction ledgers in a window — native-currency moves and contract calls, not swaps. Different from wallet activity, which reports only trade (swap) events.
/api/external/wallet-analysis/wallet-transactions/{chain}/{address}What it returns
Two INDEPENDENT ledgers, always both fetched: normal (native-currency moves and contract calls this wallet sent or received directly) and internal (EVM message-calls traced inside another transaction — e.g. this wallet receiving ETH from a contract's internal logic, not a direct send). Neither is a fallback of the other. normalCoveredFrom/internalCoveredFrom are null ONLY when that specific ledger could not be reached at all — a wallet with genuinely ZERO internal transactions, ever, still reports a non-null internalCoveredFrom alongside an empty internal array; those are different, distinguishable answers. On SOL only normal exists: internal is always empty with internalCoveredFrom: null, failed transactions are not listed, and transactions that touched only the wallet's token accounts are.
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-transactions/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 rows to return per ledger, newest-first within the window. Capped at 50 (enforced after the API-key gate; see above). Applied INDEPENDENTLY to normal and internal — each may return up to this many rows. |
chainpath · string · required | The chain the wallet address belongs to. Served on SOL, BNB, ETH, BASE, STABLE, RHC; ARC returns 400 — no wired source reports per-wallet transaction ledgers there. 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 |
|---|---|---|
normal | object[] | |
normal[].at | number | Unix SECONDS. |
normal[].from | string | null | The sender. On SOL, the account that paid the fee. |
normal[].to | string | null | The recipient. Always null on SOL, where a transaction has no single recipient. |
normal[].valueNative | number | null | Decimalized native-currency amount (the chain's own gas token). On SOL, the wallet's own net SOL change in that transaction, fee excluded and signed: negative when SOL left the wallet, 0 when none moved. |
normal[].isError | boolean | null | true when the transaction reverted, false when it succeeded, null when not reported. |
normal[].txHash | string | null | |
normalCoveredFrom | number | null | The earliest instant the normal-transaction ledger actually reached, clamped to the requested from. null only when this ledger could not be reached at all — a confirmed-empty ledger still reports a non-null value here. |
normalTruncated | boolean | |
internal | object[] | |
internal[].at | number | Unix SECONDS. |
internal[].from | string | null | |
internal[].to | string | null | |
internal[].valueNative | number | null | |
internal[].type | string | null | The reported call-type label ("call", "create", "create2", …), passed through verbatim. |
internal[].isError | boolean | null | |
internal[].txHash | string | null | |
internalCoveredFrom | number | null | Same meaning as normalCoveredFrom, independently tracked for the internal ledger. |
internalTruncated | boolean |
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