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.

GET/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>"
Parameters
ParameterDescription
limit

query · 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.
chain

path · string · required

ETH only. The deposit contract is an Ethereum mainnet contract; every other chain returns 400.
address

path · 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.

Response fields of The validator deposits one wallet funded
FieldTypeDescription
addressstringThe address asked about, lower-cased. Case never changes the answer.
depositsobject[]Newest first, descending by deposit index but not contiguous. A real empty array for a wallet that never sent a deposit.
deposits[].indexintegerThe 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[].pubkeystringThe validator’s BLS public key.
deposits[].signaturestring | nullThe deposit’s BLS signature, or null when not reported.
deposits[].withdrawalCredentialsstring | nullThe raw withdrawal-credential bytes, 0x-prefixed.
deposits[].withdrawalCredentialTypestring | nullDerived from the first byte of withdrawalCredentials: bls (0x00), execution (0x01) or compounding (0x02). null for a prefix never observed.
deposits[].withdrawalAddressstring | nullThe 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[].amountWeistringThe 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[].statusstring | nullServed 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[].blockNumberinteger | nullThe block the deposit transaction was mined in.
deposits[].blockTimestampinteger | nullUnix SECONDS the block was mined at.
deposits[].fromAddressstring | nullThe address that sent the deposit transaction — always the wallet asked about, since that is the key.
deposits[].transactionHashstring | nullThe transaction that carried this deposit — one transaction commonly carries dozens, so the same hash repeats down the list.
truncatedbooleantrue 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