Wallets API
Every token a wallet holds
The complete token list of a wallet — fungible tokens and NFTs, with raw amounts and decimals, unpriced — paged 100 at a time. Fungible tokens only on STABLE.
/api/external/wallet-analysis/wallet-token-holdings/{chain}/{address}What it returns
The complete list of tokens this wallet holds — fungible tokens and NFTs, including tokens with no market — 100 per page: ERC-20 tokens first, then the other standards alphabetically, each by token address and token id. Amounts are raw and unpriced, and the native coin is not included. total counts every holding; ask nextPage until it is null. A wallet with thousands of tokens can take over 30 seconds the first time and its later pages answer at once; a few of the very largest (burn addresses) cannot be listed at all and fail rather than answer a partial list. A wallet that holds nothing answers an empty list. On STABLE the list carries fungible (ERC-20) tokens only, no NFT; its USDT0 amount is read from the chain itself, gas payments included. For a priced portfolio on the trading chains, see wallet-portfolio.
Chains
- Ethereum ETH
- Stable STABLE
- Robinhood Chain RHC
- Optimism OP
- Scroll SCROLL
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-holdings/ETH/<address>"
| Parameter | Description |
|---|---|
pagequery · integer · optional | The page, from 1 (at most 1000). A page past the last answers an empty list. |
chainpath · string · required | RHC, ETH, OP, SCROLL or STABLE; every other chain returns 400. On STABLE the list carries fungible (ERC-20) tokens only. |
addresspath · string · required | The wallet — 0x followed by 40 hexadecimal characters, any case. |
Response fields
A JSON response. Every field is always present; null means the value could not be established, never zero.
| Field | Type | Description |
|---|---|---|
address | string | The wallet asked about, lower-cased. |
total | integer | How many holdings the wallet has, across every page. |
page | integer | The page served. |
holdings | object[] | This page of holdings. A real empty array for a wallet that holds nothing. |
holdings[].token | string | The token contract, lower-cased. |
holdings[].standard | string | The token standard: ERC-20, ERC-721, ERC-1155, ERC-404, ERC-7984 and so on. |
holdings[].name | string | null | The token's name; null when it has none. |
holdings[].symbol | string | null | The token's symbol; null when it has none. |
holdings[].decimals | integer | null | Decimals to apply to balanceRaw; null when the token declares none (NFTs, mostly). |
holdings[].tokenId | string | null | For ERC-1155, the id held — one row per id, as a decimal string. null on every other standard: an ERC-721 row is the COUNT of that collection held, not one item. |
holdings[].balanceRaw | string | null | The amount held, raw (decimals NOT applied), as a decimal string. null where the balance is not public — ERC-7984 confidential tokens. |
nextPage | integer | null | The next page to ask for; null on the last page. |
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