chainpeek (Tanod) live token approvals of a wallet
chainpeek (Tanod) live token approvals of a wallet: ERC-20 and Permit2 allowances with risk flags and unsigned revoke transactions, on Base or Ethereum. Use when an agent must list and revoke its wallet's live token approvals, on a schedule or after a risky signature.
Answeringour last check, 2026-10-18
1 of 1checks answered this week
369 msmedian answer time
$0.005listed price per call
$0.005price it asked us
Paid test badge: not yet. The checks above are free: we call the tool without paying and read the payment request it sends back. The Verified badge needs paid calls whose answers match the promised output, and nobody can buy a badge.
Endpoint
POST https://tanod.dev/v1/chain/approvals
| Category | Market data |
|---|---|
| Provider host | tanod.dev |
| Networks | eip155:137, eip155:42161, eip155:56, eip155:8453, solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp |
| Payment schemes | exact |
| Self-reported calls, 30 days | 2 from 2 payers (the provider's figure, not ours) |
Our checks, last 30 days
| Day | Result | HTTP | Asked | Time |
|---|---|---|---|---|
| 2026-10-18 | valid payment request | 402 | $0.005 | 369 ms |
Example input (from the provider)
{
"body": {
"chain": "base",
"spenders": [
"0x8F2E6A1c3B9d7e5F0A4C2b8D6E1f3a9c7B5d0E24"
],
"wallet": "0x5A0b54D5dc17e0AadC383d2db43B0a0D3E029c4c"
},
"bodyType": "json",
"method": "POST",
"type": "http"
}
Promised output schema (from the provider)
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"input": {
"additionalProperties": false,
"properties": {
"body": {
"additionalProperties": false,
"properties": {
"chain": {
"description": "base or ethereum (the chains with built-in USDC and USDT here).",
"enum": [
"base",
"ethereum"
],
"type": "string"
},
"lookback_blocks": {
"default": 6000,
"description": "Latest blocks scanned for approval events (0-6,000; default 6,000, about 3.3 hours on Base and 20 hours on Ethereum). 0 scans nothing and checks `spenders` and Permit2 only.",
"maximum": 6000,
"minimum": 0,
"type": "integer"
},
"spenders": {
"anyOf": [
{
"items": {
"pattern": "^0x[0-9a-fA-F]{40}$",
"type": "string"
},
"maxItems": 50,
"minItems": 1,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Up to 50 spender addresses whose ERC-20 and Permit2 allowances are read directly on every audited token, however old (tokens x spenders at most 200). The full-coverage path for spenders you know."
},
"stale_days": {
"default": 90,
"description": "An allowance is stale when the spender pulled nothing from the wallet in this many days (1-3,650; default 90).",
"maximum": 3650,
"minimum": 1,
"type": "integer"
},
"tokens": {
"anyOf": [
{
"items": {
"pattern": "^0x[0-9a-fA-F]{40}$",
"type": "string"
},
"maxItems": 50,
"minItems": 1,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Up to 50 token contracts to audit. Default: USDC, USDT and up to 18 tokens the wallet has sent (from its transfer history)."
},
"wallet": {
"description": "The wallet whose approvals are audited (0x + 40 hex).",
"pattern": "^0x[0-9a-fA-F]{40}$",
"type": "string"
}
},
"required": [
"chain",
"wallet"
],
"type": "object"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"type": {
"const": "http",
"type": "string"
}
},
"required": [
"type",
"method",
"bodyType",
"body"
],
"type": "object"
},
"output": {
"properties": {
"example": {
"description": "Abridged to fit the header. Full example: the 402 JSON body. Full schema: https://tanod.dev/openapi.json POST /v1/chain/approvals",
"properties": {
"allowances": {
"type": "array"
},
"allowances_total": {
"type": "integer"
},
"block": {
"type": [
"integer",
"null"
]
},
"block_timestamp": {
"type": [
"integer",
"null"
]
},
"chain": {
"type": "string"
},
"checked": {
"type": "object"
},
"history": {
"type": "object"
},
"limits": {
"type": "array"
},
"reasons": {
"type": "array"
},
"risk": {
"type": "string"
},
"rpc_calls": {
"type": "integer"
},
"rules": {
"type": "object"
},
"stale_days": {
"type": "integer"
},
"tokens": {
"type": "array"
},
"wallet": {
"type": "string"
}
},
"required": [
"chain",
"wallet",
"risk",
"reasons",
"allowances",
"allowances_total",
"tokens",
"checked",
"history",
"stale_days",
"rules",
"limits"
],
"type": "object"
},
"type": {
"type": "string"
}
},
"required": [
"type"
],
"type": "object"
}
},
"required": [
"input"
],
"type": "object"
}