ToolAssay

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

CategoryMarket data
Provider hosttanod.dev
Networkseip155:137, eip155:42161, eip155:56, eip155:8453, solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp
Payment schemesexact
Self-reported calls, 30 days2 from 2 payers (the provider's figure, not ours)

Our checks, last 30 days

DayResultHTTPAskedTime
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"
}

This page as JSON