Wallets API

Wallet approvals brief: counts, spenders and the riskiest approvals

How many approvals a wallet granted, how many are unlimited or to a flagged spender, its spenders, and the 10 riskiest in full. A few KB.

GET/api/external/wallet-analysis/wallet-approvals-brief/{chain}/{address}

What it returns

The brief of wallet-approvals; prefer it unless you need every approval. Same chains and parameters. It counts the approvals, the unlimited ones and those whose spender is flagged, lists the spenders (up to 15, flagged first, then by approvals granted) and the 10 riskiest approvals in full: flagged spender first, then unlimited, then the most recent. truncated is the full answer's: when true the counts are of a subset. Every count and list is null when the approvals could not be asked.

Chains

  • BNB Chain BNB
  • Ethereum ETH
  • Base BASE

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-approvals-brief/BNB/<address>"
Parameters
ParameterDescription
chain

path · string · required

The chain the wallet address belongs to. BNB, ETH and BASE are served; SOL, STABLE, RHC and ARC all return 400. On ETH the answer is capped per request and truncated says whether the cap was reached. CELO, ARB, OP and SCROLL return 400 here.
address

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

Response fields of Wallet approvals brief: counts, spenders and the riskiest approvals
FieldTypeDescription
truncatedbooleanWhether the wallet holds more approvals than one request returns; when true the counts are of a subset.
approvalCountinteger | nullOutstanding approvals; null when the approvals could not be asked.
unlimitedCountinteger | nullApprovals the source classes as unlimited; null when the approvals could not be asked.
flaggedCountinteger | nullApprovals whose spender carries a risk flag; null when the approvals could not be asked.
spenderCountinteger | nullDistinct spenders; null when the approvals could not be asked.
spendersobject[] | nullUp to 15 spenders, flagged first, then by approvals granted.
spenders[].spenderstringThe spender contract.
spenders[].spenderNamestring | nullThe source's name for it, when it has one.
spenders[].spenderFlaggedboolean | nulltrue when any approval to it carries a risk flag; null otherwise, never a confident false.
spenders[].approvalsintegerApprovals this wallet granted it.
approvalsobject[] | nullThe 10 riskiest approvals, each exactly as wallet-approvals lists it: flagged spender first, then unlimited, then the most recent grant.
approvals[].tokenAddressstringThe token contract this approval is for.
approvals[].tokenNamestring | nullThe token's own name, on-chain metadata set by its deployer. null if the source sent nothing.
approvals[].tokenSymbolstring | nullThe token's own symbol/ticker. Same provenance and nullability as tokenName.
approvals[].spenderstringThe contract this approval allows to move tokenAddress on the wallet's behalf.
approvals[].spenderNamestring | nullThe source's own name for the spender contract, e.g. "AllowanceHolder". Not every spender is named. May be a fixed redaction string if the source's own answer named one of this surface's upstream data providers.
approvals[].spenderTagstring | nullThe source's own classifier tag for the spender, e.g. "UniswapV2". Same redaction behaviour as spenderName. Never observed populated in this endpoint's own measurement -- a real value here is unconfirmed on this path.
approvals[].isUnlimitedboolean | nullWhether the source classifies this approval as having no ceiling. This is the source's own bucket, NOT a proof that the allowance equals the maximum -- one measured approval in that bucket was large but not the maximum representable value, so do not read true as an exact ceiling. null only when the source sent neither the sentinel nor any other value (never observed live; defensive).
approvals[].amountstring | nullThe exact allowance as the source's own RAW, UNPARSED string, only when isUnlimited is false. null when the approval is unlimited (no ceiling to report -- never fabricated) or the source gave nothing. This surface has never observed a finite value live on this path, so its numeric shape (decimalised vs raw base units) is unconfirmed and republished as-is rather than guessed at.
approvals[].approvedAtinteger | nullUnix seconds -- when this approval was (most recently) granted. null if the source sent nothing.
approvals[].txHashstring | nullThe transaction hash of the (most recent) approval. null if the source sent nothing.
approvals[].spenderFlaggedboolean | nullWhether the source has a real risk signal on record for the SPENDER contract. NEVER a confident false: the source's risk database holds a verdict only for addresses it has something on, the same rule wallet-risk's own flagged field uses. true only when a real signal fired; null otherwise.
approvals[].spenderRiskFlagsstring[] | nullThe source's own risk-signal names for the spender, e.g. "phishing_activities", "stealing_attack". [] when the risk source answered and nothing fired; null when no risk source answered about this spender.

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