Wallets API
The validator deposits one wallet funded
The validator deposits sent BY one Ethereum wallet: validator public key, amount, withdrawal address and activation status. Keyed on the depositor, not the withdrawal address.
/api/external/wallet-analysis/wallet-beacon-deposits/{chain}/{address}What it returns
Every beacon-chain validator deposit SENT by this wallet, newest first: the deposit index, the validator public key, the withdrawal credentials and address, the amount in wei (a decimal string), whether the deposit is still pending activation, and the block and transaction that carried it. The key is the depositor. An address is matched against the sender of the deposit transaction and nothing else — an address that only ever appears as a validator’s withdrawal address answers an empty list here, and a staking service’s deposits are listed under the service, not under its customers. A wallet that never deposited is a real empty list, not an error: an address always exists. truncated is true when this wallet has more deposits than the ones listed.
Chains
- Ethereum ETH
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-beacon-deposits/ETH/<address>"
| Parameter | Description |
|---|---|
limitquery · integer · optional | How many deposits to return: 1 to 50. Defaults to 10. The ceiling is one source page; a wallet with more deposits than that answers truncated: true rather than an error. |
chainpath · string · required | ETH only. The deposit contract is an Ethereum mainnet contract; every other chain returns 400. |
addresspath · string · required | The wallet address that SENT the deposits — 0x followed by 40 hexadecimal characters, any case. This is the depositor, not the withdrawal address a validator's stake returns to: an address that only ever appears as a withdrawal address answers an empty list here. |
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 address asked about, lower-cased. Case never changes the answer. |
deposits | object[] | Newest first, descending by deposit index but not contiguous. A real empty array for a wallet that never sent a deposit. |
deposits[].index | integer | The deposit index: one per deposit accepted by the deposit contract, counting up from 0 across the WHOLE chain. This list descends, but with gaps — every deposit anyone else made in between takes an index too (measured: 2561605 then 2455408 on adjacent rows). |
deposits[].pubkey | string | The validator’s BLS public key. |
deposits[].signature | string | null | The deposit’s BLS signature, or null when not reported. |
deposits[].withdrawalCredentials | string | null | The raw withdrawal-credential bytes, 0x-prefixed. |
deposits[].withdrawalCredentialType | string | null | Derived from the first byte of withdrawalCredentials: bls (0x00), execution (0x01) or compounding (0x02). null for a prefix never observed. |
deposits[].withdrawalAddress | string | null | The execution-layer address this validator’s stake returns to — frequently NOT the wallet asked about: a staking service deposits from one account on behalf of many. null exactly when withdrawalCredentialType is bls, a real "no execution withdrawal address" rather than missing data. |
deposits[].amountWei | string | The deposit amount in WEI, as a decimal string. Never assume 32 ETH: amounts measured across the chain ran from 7.59 to 1800 ETH. Kept as a string and never pre-divided: at 18 decimals the value routinely exceeds what a JSON number holds exactly. |
deposits[].status | string | null | Served exactly as the source reports it. "pending" and "completed" are the only values observed — a pending deposit is one still in the activation queue — and the exact point a deposit flips is not measured, so this is a free string, not a closed enum. |
deposits[].blockNumber | integer | null | The block the deposit transaction was mined in. |
deposits[].blockTimestamp | integer | null | Unix SECONDS the block was mined at. |
deposits[].fromAddress | string | null | The address that sent the deposit transaction — always the wallet asked about, since that is the key. |
deposits[].transactionHash | string | null | The transaction that carried this deposit — one transaction commonly carries dozens, so the same hash repeats down the list. |
truncated | boolean | true when this wallet has MORE deposits than the ones listed — either limit cut the list, or the wallet has staked more than one source page holds. Raise limit first; past that, this wallet’s full history is deeper than this endpoint reaches. |
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