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.
/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>"
| Parameter | Description |
|---|---|
chainpath · 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. |
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 |
|---|---|---|
truncated | boolean | Whether the wallet holds more approvals than one request returns; when true the counts are of a subset. |
approvalCount | integer | null | Outstanding approvals; null when the approvals could not be asked. |
unlimitedCount | integer | null | Approvals the source classes as unlimited; null when the approvals could not be asked. |
flaggedCount | integer | null | Approvals whose spender carries a risk flag; null when the approvals could not be asked. |
spenderCount | integer | null | Distinct spenders; null when the approvals could not be asked. |
spenders | object[] | null | Up to 15 spenders, flagged first, then by approvals granted. |
spenders[].spender | string | The spender contract. |
spenders[].spenderName | string | null | The source's name for it, when it has one. |
spenders[].spenderFlagged | boolean | null | true when any approval to it carries a risk flag; null otherwise, never a confident false. |
spenders[].approvals | integer | Approvals this wallet granted it. |
approvals | object[] | null | The 10 riskiest approvals, each exactly as wallet-approvals lists it: flagged spender first, then unlimited, then the most recent grant. |
approvals[].tokenAddress | string | The token contract this approval is for. |
approvals[].tokenName | string | null | The token's own name, on-chain metadata set by its deployer. null if the source sent nothing. |
approvals[].tokenSymbol | string | null | The token's own symbol/ticker. Same provenance and nullability as tokenName. |
approvals[].spender | string | The contract this approval allows to move tokenAddress on the wallet's behalf. |
approvals[].spenderName | string | null | The 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[].spenderTag | string | null | The 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[].isUnlimited | boolean | null | Whether 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[].amount | string | null | The 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[].approvedAt | integer | null | Unix seconds -- when this approval was (most recently) granted. null if the source sent nothing. |
approvals[].txHash | string | null | The transaction hash of the (most recent) approval. null if the source sent nothing. |
approvals[].spenderFlagged | boolean | null | Whether 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[].spenderRiskFlags | string[] | null | The 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