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.
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
| Category | Market data |
|---|---|
| Provider host | allowance.schemasure.com |
| Networks | eip155:8453 |
| Payment schemes | exact |
| Self-reported calls, 30 days | 9 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": {