Chain
ERC-20/721 token approval and revoke risk scanner API
Scans an EVM address's ERC-20 Approval and ERC-721/1155 ApprovalForAll logs over public RPC across a capped recent block range, reduces them to current live allowances, flags unlimited approvals and unknown or risky spenders by cross-referencing a curated label set, and returns a prioritized revoke report — the scan plus the risk rules collapsed into one actionable answer. Answers 'Which token approvals does this wallet have live and which are unlimited?', 'What should I revoke first?'.
Price$0.01per request
MethodPOST
Route/v1/chain/approvals
StatusLive
MIME typeapplication/json
Rate limit60/minute
Cache300s public
chainapprovalsallowancerevokeerc20securitydefiwallet
API URL
Integration docshttps://x402.hexl.dev/v1/chain/approvalsExample request
{
"address": "0xabababababababababababababababababababab",
"chain": "base"
}Example response
{
"address": "0xabababababababababababababababababababab",
"approvals": [
{
"token": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"spender": "0xcccccccccccccccccccccccccccccccccccccccc",
"spenderLabel": null,
"spenderCategory": "unknown",
"allowance": "unlimited",
"isUnlimited": true,
"type": "erc20",
"risk": "high",
"riskNote": "unlimited allowance to an unlabelled spender"
},
{
"token": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"spender": "0x7a250d5630b4cf539739df2c5dacb4c659f2488d",
"spenderLabel": "Uniswap V2 Router",
"spenderCategory": "contract",
"allowance": "1000",
"isUnlimited": false,
"type": "erc20",
"risk": "low",
"riskNote": "bounded allowance to contract Uniswap V2 Router"
}
],
"approvalCount": 2,
"unlimitedCount": 1,
"riskyCount": 1,
"recommendation": "Revoke 1 risky approval(s) immediately — 1 are unlimited. Prioritise unknown/high-risk spenders.",
"chain": "base",
"scannedFromBlock": 10200000,
"scannedToBlock": 11500000,
"maxUint256": "115792089237316195423570985008687907853269984665640564039457584007913129639935"
}Input schema
{
"type": "object",
"required": [
"address"
],
"properties": {
"address": {
"type": "string",
"description": "0x-prefixed 40-hex EVM address (token owner) to scan."
},
"chain": {
"type": "string",
"enum": [
"base",
"ethereum",
"arbitrum",
"optimism",
"polygon"
],
"default": "base",
"description": "Chain to scan on."
},
"lookbackBlocks": {
"type": "integer",
"minimum": 1,
"description": "Optional block lookback window (capped server-side)."
}
},
"examples": [
{
"address": "0xabababababababababababababababababababab",
"chain": "base"
}
]
}Output schema
{
"type": "object",
"additionalProperties": true
}