# Vextorium ERC-20 Token Approval Scanner

> Vextorium ERC-20 Token Approval Scanner is a paid API for AI agents from api.vextorium.com, paid per call via x402, $0.005/call, status unknown (last checked 2026-10-11).

Scans a wallet's ERC-20 token approvals on a given blockchain, returning live allowances and flagging unlimited ones for review and potential revocation.

## Facts

- Endpoint: POST https://api.vextorium.com/v1/token-approvals?utm_source=zero.xyz
- Price: $0.005/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-11
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/vextorium-erc-20-token-approval-scanner-5f6dd6c9
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_SlSeCH29M7aDUzoEhHDMA

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability vextorium-erc-20-token-approval-scanner-5f6dd6c9 -d '<json body>'
```

Example prompt: Can you scan my wallet 0x9b9B3F22BEBD1e3E528C2759a2ca34cD2e0184A1 on Ethereum and show me all ERC-20 token approvals — especially any unlimited ones I should consider revoking?

## When to prefer this

Use this endpoint when you need to audit a wallet's outstanding ERC-20 token approvals across multiple chains without running your own node. It is purpose-built for approval scanning, automatically covers common spenders like Uniswap routers and Permit2, and flags unlimited allowances — saving the overhead of writing custom event log queries. Prefer it over generic blockchain RPC calls when you want a structured, ready-to-act summary of approval risk for a given wallet.

## Known failure modes

- Arbitrum not supported — its public nodes lack log history; request will fail or return an error for that network
- Some chains' public nodes limit historical log search depth — the result will include a note reporting this limitation
- Invalid wallet address format causes a validation error
- Network enum value not recognized returns a bad request error
- Timeout possible if the block range is very large on a slow public node

## How this service works

Which contracts a wallet has allowed to move its ERC-20 tokens: checks the chain's main tokens (or the ones you pass) over recent blocks plus common spenders (Uniswap routers, Permit2), returning the live allowance and flagging unlimited ones. Find and revoke what you don't use. Usually 2-10 s. Not available on Arbitrum (its public nodes keep no log history); on some chains the public node limits how far back it can search (reported in the result).

## Output

Returns a JSON object containing the wallet address, network, an array of active approvals (each with token, spender, and allowance), a count of unlimited approvals, the number of blocks reviewed, the number of tokens reviewed, and the number of active approvals. Also includes a note suggesting next steps (e.g. using revoke-approval). Returns an empty approvals array if no active approvals are found.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "$schema": "https://json-schema.org/draft/2020-12/schema",
 "required": [
  "input"
 ],
 "properties": {
  "input": {
   "type": "object",
   "required": [
    "type",
    "method",
    "bodyType",
    "body"
   ],
   "properties": {
    "body": {
     "required": [
      "wallet"
     ],
     "properties": {
      "blocks": {
       "type": "integer"
      },
      "tokens": {
       "type": "array",
       "items": {
        "type": "string"
       }
      },
      "wallet": {
       "type": "string"
      },
      "network": {
       "enum": [
        "base",
        "ethereum",
        "arbitrum",
        "optimism",
        "polygon",
        "bnb",
        "avalanche",
        "gnosis",
        "line",
        "scroll",
        "sonic",
        "unichain"
       ],
       "type": "string",
       "description": "Chain (default base)"
      }
     }
    },
    "type": {
     "type": "string",
     "const": "http"
    },
    "method": {
     "enum": [
      "POST"
     ],
     "type": "string"
    },
    "bodyType": {
     "enum": [
      "json",
      "form-data",
      "text"
     ],
     "type": "string"
    }
   },
   "additionalProperties": false
  },
  "output": {
   "type": "object",
   "required": [
    "type"
   ],
   "properties": {
    "type": {
     "type": "string"
    },
    "example": {
     "type": [
      "object",
      "null"
     ],
     "properties": {
      "note": {
       "type": [
        "string",
        "null"
       ]
      },
      "wallet": {
       "type": [
        "string",
        "null"
       ]
      },
      "network": {
       "type": [
        "string",
        "null"
       ]
      },
      "approvals": {
       "type": [
        "array",
        "null"
       ],
       "items": {}
      },
      "unlimited": {
       "type": [
        "number",
        "null"
       ]
      },
      "reviewed_blocks": {
       "type": [
        "number",
        "null"
       ]
      },
      "reviewed_tokens": {
       "type": [
        "number",
        "null"
       ]
      },
      "active_approvals": {
       "type": [
        "number",
        "null"
       ]
      }
     }
    }
   }
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "note": "Review the listed tokens (or the network's main ones) and the usual spenders; to revoke use revoke-approval.",
  "wallet": "0x9b9B3F22BEBD1e3E528C2759a2ca34cD2e0184A1",
  "network": "base",
  "approvals": [],
  "unlimited": 0,
  "reviewed_blocks": 50000,
  "reviewed_tokens": 5,
  "active_approvals": 0
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/vextorium-erc-20-token-approval-scanner-5f6dd6c9/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from api.vextorium.com](https://www.zero.xyz/host/api.vextorium.com/llms.txt)
