ToolAssay

Decide whether to grant an ERC-20, NFT or Permit2 allowance before signing it

Decide whether to grant an ERC-20, NFT or Permit2 allowance before signing it. Send owner, token, spender and amount, or the unsigned approve, setApprovalForAll or Permit2 calldata. Returns allow, warn, block or unknown with the allowance already on chain, the requested scope and the rule behind it, whether this raises or lowers exposure, and whether the spender is a contract, upgradeable or denylisted. Returns unknown rather than guessing. Not a guarantee a spender is honest.

Not tested: has real-world effectsour last check, 2026-09-24
0 of 0checks answered this week
n/amedian answer time
$0.015listed price per call
n/aprice 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://allowance.schemasure.com/v1/guard/allowance

CategoryMarket data
Provider hostallowance.schemasure.com
Networkseip155:8453
Payment schemesexact
Self-reported calls, 30 days9 from 1 payers (the provider's figure, not ours)

Our checks, last 30 days

We never call tools that send, buy, move money or file anything, not even without paying.

Example input (from the provider)

{
  "body": {
    "calldata": {
      "data": "0x095ea7b30000000000000000000000002626664c2603336e57b271c5c0b26f421741e4810000000000000000000000000000000000000000000000000000000000000000",
      "from": "0x9F2C5E4A8db1C3a7E6B0d4f8C1E2a5b7D9C0e3F4",
      "to": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
    }
  },
  "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": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "additionalProperties": false,
          "description": "Send exactly one of approval or calldata. Unrecognised fields are rejected rather than ignored, so a misspelled amount is an error and not a silently different question.",
          "oneOf": [
            {
              "required": [
                "approval"
              ]
            },
            {
              "required": [
                "calldata"
              ]
            }
          ],
          "properties": {
            "approval": {
              "additionalProperties": false,
              "description": "The grant you are about to make, described directly.",
              "properties": {
                "amount": {
                  "description": "Base units, not a human amount: 1 USDC is \"1000000\". Use \"all\" only with kind approval_for_all, and \"0\" to revoke.",
                  "examples": [
                    "1000000",
                    "all",
                    "0"
                  ],
                  "pattern": "^(?:[0-9]+|0x[0-9a-fA-F]+|all)$",
                  "type": "string"
                },
                "expiration": {
                  "description": "Unix seconds. Permit2 only: a plain ERC-20 allowance never expires, so declaring one on any other kind is rejected.",
                  "type": "string"
                },
                "kind": {
                  "default": "erc20",
                  "description": "increase and decrease are relative to the allowance already on chain, so their direction is known even when that allowance cannot be read.",
                  "enum": [
                    "erc20",
                    "increase",
                    "decrease",
                    "approval_for_all",
                    "permit2",
                    "eip2612"
                  ],
                  "type": "string"
                },
                "owner": {
                  "description": "The account whose balance the spender would be able to move.",
                  "pattern": "^0x[0-9a-fA-F]{40}$",
                  "type": "string"
                },
                "spender": {
                  "pattern": "^0x[0-9a-fA-F]{40}$",
                  "type": "string"
                },
                "token": {
                  "description": "The token or NFT collection. For a Permit2 grant this is still the token.",
                  "pattern": "^0x[0-9a-fA-F]{40}$",
                  "type": "string"
                }
              },
              "required": [
                "owner",
                "token",
                "spender",
                "amount"
              ],
              "type": "object"
            },
            "calldata": {
              "additionalProperties": false,
              "description": "The unsigned call you are about to sign. Decodes 7 approval functions.",
              "properties": {
                "data": {
                  "description": "approve, increaseAllowance, decreaseAllowance, setApprovalForAll, an EIP-2612 permit, or either Permit2 form. Anything else is rejected as UNSUPPORTED and not charged.",
                  "pattern": "^0x[0-9a-fA-F]{8,}$",
                  "type": "string"
                },
                "from": {
                  "pattern": "^0x[0-9a-fA-F]{40}$",
                  "type": "string"
                },
                "to": {
                  "description": "The token, or Permit2 (0x000000000022D473030F116dDEE9F6B43aC78BA3) for a Permit2 grant.",
                  "pattern": "^0x[0-9a-fA-F]{40}$",
                  "type": "string"
                }
              },
              "required": [
                "from",
                "to",
                "data"
              ],
              "type": "object"
            }
          },
          "title": "AllowanceGuardRequest",
          "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": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "properties": {
            "data_versions": {
              "type": "object"
            },
            "evidence": {
              "items": {
                "type": "object"
              },
              "type": "array"
            },
            "ok": {
              "type": "boolean"
            },
            "policy_version": {
              "type": "string"
            },
            "request_hash": {
              "type": "string"
            },
            "result": {
              "properties": {
                "classification": {
                  "description": "scope plus the basis naming the rule that produced it.",
                  "properties": {
                    "scope": {
                      "enum": [
                        "infinite",
                        "effectively_infinite",
                        "bounded"
                      ],
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "current": {
                  "description": "The allowance the spender already holds, or null.",
                  "type": "object"
                },
                "delta": {
            

This page as JSON