# WalletCheck — EVM Wallet Token Approval Auditor

> WalletCheck — EVM Wallet Token Approval Auditor is a paid API for AI agents from api.firstmention.uk, paid per call via x402, $0.01/call, status unknown (last checked 2026-10-29).

Scans an EVM wallet address on Base mainnet for outstanding token approvals (ERC-20 allowances and ERC-721 operator grants), scoring hygiene and returning revocation calldata for each risky approval.

## Facts

- Endpoint: GET https://api.firstmention.uk/s/walletcheck/checks?utm_source=zero.xyz
- Price: $0.01/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-29
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/walletcheck-evm-wallet-token-approval-auditor-8b0cb52d
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_BiDksq8eFwI2-Un0BK90y

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 walletcheck-evm-wallet-token-approval-auditor-8b0cb52d
```

Example prompt: Can you audit my Base wallet 0x4200000000000000000000000000000000000006 for any risky token approvals or unlimited allowances, and give me the revocation calldata for anything suspicious?

## When to prefer this

Use this endpoint when you need on-chain, real-time approval data specifically on Base mainnet with ready-to-use revocation calldata included in the response. Prefer it over generic block explorers when you need machine-readable output with risk scoring and actionable revoke.to/revoke.data fields that an agent can directly submit as a transaction. It is pay-per-call at $0.01 USDC via x402, making it cost-effective for single-wallet spot checks.

## Known failure modes

- Invalid or missing address parameter returns an error (must be 0x-prefixed 40-hex EVM address)
- range_blocks outside 1000–500000 bounds returns a validation error
- Slow response or partial results if a very large block range is requested (coverage.truncated=true, coverage.failedChunks>0)
- Payment failure (402) if x402 USDC payment on Base is not included or insufficient
- Address with extremely high log volume may result in truncated coverage

## How this service works

Pay-per-call HTTP APIs, paid with x402 in USDC on Base (eip155:8453): agentkit, api-change-check, basedue, basewatch, chainread, check-sanctions, chgwatch, company-facts, composite, edgar, feednews, pageaudit, solcheck, token-dd, txpreflight, walletcheck, webmd, webread, websearch, x402index. Each operation describes its service.

## Output

Returns a JSON object with: overall verdict and hygiene score (0-100), ETH balance, outgoing tx count, active approval count, a flags array describing risky approvals in plain English, a detailed outstandingApprovals array (each entry includes token address, symbol, spender, allowance level, last-seen block, and ready-to-send revocation calldata), and coverage metadata (block range scanned, log count, truncation status).

## 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"
   ],
   "properties": {
    "type": {
     "type": "string",
     "const": "http"
    },
    "method": {
     "enum": [
      "GET",
      "HEAD",
      "DELETE"
     ],
     "type": "string"
    },
    "headers": {
     "type": "object",
     "additionalProperties": {
      "type": "string"
     }
    },
    "queryParams": {
     "type": "object",
     "required": [
      "address"
     ],
     "properties": {
      "address": {
       "type": "string",
       "description": "0x-prefixed 40-hex EVM address to check on Base mainnet"
      },
      "range_blocks": {
       "type": "integer",
       "maximum": 500000,
       "minimum": 1000,
       "description": "How many recent blocks to scan for approval events (1000-500000, default 100000). Larger = slower, more complete."
      }
     }
    }
   },
   "additionalProperties": false
  },
  "output": {
   "type": "object",
   "required": [
    "type"
   ],
   "properties": {
    "type": {
     "type": "string"
    },
    "example": {
     "type": "object",
     "properties": {
      "ok": {
       "type": "boolean"
      },
      "chain": {
       "type": "string"
      },
      "flags": {
       "type": "array",
       "items": {
        "type": "string"
       }
      },
      "address": {
       "type": "string"
      },
      "summary": {
       "type": "object",
       "properties": {
        "verdict": {
         "type": "string"
        },
        "balanceEth": {
         "type": "string"
        },
        "isContract": {
         "type": "boolean"
        },
        "hygieneScore": {
         "type": "number"
        },
        "outgoingTxCount": {
         "type": "number"
        },
        "activeApprovalCount": {
         "type": "number"
        }
       }
      },
      "coverage": {
       "type": "object",
       "properties": {
        "toBlock": {
         "type": "number"
        },
        "logsSeen": {
         "type": "number"
        },
        "fromBlock": {
         "type": "number"
        },
        "truncated": {
         "type": "boolean"
        },
        "failedChunks": {
         "type": "number"
        }
       }
      },
      "howToUse": {
       "type": "string"
      },
      "asOfBlock": {
       "type": "number"
      },
      "outstandingApprovals": {
       "type
… (truncated)
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "ok": true,
  "chain": "base",
  "flags": [
   "1 ERC-20 approval(s) with unlimited allowance",
   "1 active operator grant(s) on ERC-721 tokens"
  ],
  "address": "0x4200000000000000000000000000000000000006",
  "summary": {
   "verdict": "review",
   "balanceEth": "0.006703",
   "isContract": true,
   "hygieneScore": 72,
   "outgoingTxCount": 4123,
   "activeApprovalCount": 3
  },
  "coverage": {
   "toBlock": 53042192,
   "logsSeen": 8123,
   "fromBlock": 53000000,
   "truncated": false,
   "failedChunks": 0
  },
  "howToUse": "For each entry flagged unlimited/high/active-operator, send a transaction with revoke.to and revoke.data (gas only) to cancel it.",
  "asOfBlock": 53042192,
  "outstandingApprovals": [
   {
    "kind": "allowance",
    "level": "unlimited",
    "token": "0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA",
    "revoke": {
     "to": "0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA",
     "data": "0x095ea7b3...",
     "meaning": "approve(spender,0)"
    },
    "txHash": "0xabc...",
    "spender": "0x1111111111111111111111111111111111111111",
    "tokenSymbol": "USDC",
    "allowanceRaw": "115792089237316195423570985008687907853269984665640564039457584007913129639935",
    "lastSeenBlock": 53041901
   }
  ]
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/walletcheck-evm-wallet-token-approval-auditor-8b0cb52d/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from api.firstmention.uk](https://www.zero.xyz/host/api.firstmention.uk/llms.txt)
