Skip to main content
Glama

Verify wallet conditions (signed)

insumer_attest

Evaluate a list of 1 to 10 conditions against a wallet's on-chain state and return one signed attestation: a yes or no for each condition, never the balance.

Instructions

Evaluate a list of 1 to 10 conditions against a wallet's on-chain state and return one signed attestation: a yes or no for each condition, never the balance. One call reads the chain for every condition in the list and returns a single attestation covering all of them, so conditions of different kinds and on different chains are combined in one signed result. A condition states what must be true of the wallet, such as a minimum token balance, ownership of an NFT, an attestation held or a registered agent ID; the type field on each condition lists the kinds available and the fields each one takes. Chains: EVM chains plus Solana, XRPL, Bitcoin, Tron, Stellar and Sui; Bitcoin, Tron, Stellar and Sui support token_balance only. The attestation is signed twice: ES256, with a kid identifying the key, and a post-quantum ML-DSA-65 signature (pqSig, pqKid). Each result includes evaluatedCondition, a SHA-256 conditionHash, and the block (EVM), ledger (XRPL, Stellar) or checkpoint (Sui) it was read at. An attestation expires 30 minutes after it is signed, or 5 minutes when it includes a delegation condition. Costs 1 credit (2 with proof: 'merkle'). An rpc_failure error (503) means a read did not complete and nothing was signed: retry, and never treat it as a no. Current chain and check counts: https://insumermodel.com/llms.txt

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
proofNoSet to 'merkle' for EIP-1186 Merkle proofs (2 credits, refunded to 1 when no proof is delivered). For token_balance or ratio_to_amount against an ERC-20, a storage proof of the balance slot (no subject field); for the same conditions with contractAddress 'native', an account proof whose balance field is the value evaluated (subject 'account_balance'); for account_code, an account proof whose codeHash is the value evaluated (subject 'account_code'); for erc7710_delegation, a storage proof of the revocation slot (subject 'delegation_revocation') on managers with an on-chain-verified layout. Supported EVM chains only (not ZKsync Era, Sei, Viction or XDC Network, and not on non-EVM chains).
formatNoSet to 'jwt' to include a Wallet Auth by InsumerAPI token (ES256-signed JWT) in the response, with its ML-DSA-65 sibling pqJwt beside it. The jwt is verifiable by any standard JWT library using JWKS at /.well-known/jwks.json.
walletNoEVM wallet address (0x...)
suiWalletNoSui wallet address (0x + 64 hex chars). For verifying SUI or other Sui coins (e.g. USDC). Use chainId 'sui' with the Sui coin type as contractAddress: '0x2::sui::SUI' for native SUI, or the full coin type address::module::Name for other coins. The string 'native' is not accepted on Sui.
conditionsYesThe list of 1 to 10 conditions to evaluate. All of them are read in this one call and covered by the one signed attestation.
tronWalletNoTron wallet address (T-prefixed, base58). For verifying TRX or TRC20 tokens (USDT-TRC20). Use chainId 'tron'.
xrplWalletNoXRPL wallet address (r-address). For verifying XRP, trust line tokens (RLUSD, USDC), or NFTs on XRP Ledger.
solanaWalletNoSolana wallet address (base58)
bitcoinWalletNoBitcoin address (P2PKH, P2SH, bech32, or Taproot). For verifying native BTC balance. Use chainId 'bitcoin' with contractAddress 'native'.
stellarWalletNoStellar wallet address (G-prefixed). For verifying XLM or trustline assets (USDC, BENJI, etc.). Use chainId 'stellar' with the asset issuer's G-address as contractAddress and pass assetCode (e.g. 'USDC'). Soroban contract balances not visible; classic trustlines only.
declaredLimitsNoSet to 'omit' to leave decoded caveat limits out of the signed results of erc7710_delegation conditions, so a forwarded attestation does not carry the principal's spending ceiling. met, delegationHash, and conditionHash are byte-identical either way.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
okNotrue when the API call succeeded
dataNoThe endpoint's payload: a signed attestation, trust profile, discount, merchant or token records
keysNoJWKS entries (insumer_jwks)
metaNoResponse metadata such as version and timestamp
errorNoError details when ok is false
itemsNoThe result when the endpoint returns a JSON array
messageNoA plain-text result (insumer_setup), or a message from the API

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changedv1.21.1
    • changedInput schema / properties / conditions / description
      Previous value: -"1-10 on-chain conditions to verify"New value: +"The list of 1 to 10 conditions to evaluate. All of them are read in this one call and covered by the one signed attestation."
    • changedInput schema / properties / conditions / items / properties / delegation / description
      Previous value: -"Required for erc7710_delegation. The signed ERC-7710 delegation to evaluate. Met iff ALL of: attested wallet is the delegate; declared delegator is expectedDelegator; EIP-712 signature verifies (EOA or ERC-1271); unrevoked at the anchored block; every caveat enforcer recognized; any time-window caveat currently satisfied. Recognized enforcers: timestamp (evaluated), erc20_transfer_amount, native_transfer_amount, allowed_targets, limited_calls (the last four are REPORTED as declaredLimits: redemption enforces them, the attestation does not simulate enforcement)."New value: +"Required for erc7710_delegation. The signed ERC-7710 delegation to evaluate. Met iff ALL of: attested wallet is the delegate; declared delegator is expectedDelegator; EIP-712 signature verifies (EOA or ERC-1271); unrevoked at the anchored block; every caveat enforcer recognized; any time-window caveat currently satisfied. Recognized enforcers: timestamp (evaluated), erc20_transfer_amount, native_transfer_amount, allowed_targets, limited_calls (the last four are REPORTED as declaredLimits: redemption enforces them, the attestation does not simulate enforcement). A delegation result that is not met carries failReason, and an attestation that includes a delegation condition expires in 5 minutes instead of 30."
  2. Changed11 schema fields changedv1.17.2
    • changedInput schema / properties / conditions / items / properties / agentId / description
      Previous value: -"Required for erc8004_agent. The ERC-8004 agent ID as a uint256 decimal string — the caller must supply it (the deployed Identity Registry has no wallet-to-agentId reverse lookup). Met iff the attested wallet owns the agent NFT (ownerOf) or is the registry's signature-verified agentWallet binding. Registry 0x8004A169FB4a3325136EB29fA0ceB6D2e539a432 on Base; chainId 8453 only. Honest semantics: registration is permissionless minting — the signed statement implies no vetting, no reputation, no endorsement."New value: +"Required for erc8004_agent. The ERC-8004 agent ID as a uint256 decimal string; the caller must supply it (the deployed Identity Registry has no wallet-to-agentId reverse lookup). Met iff the attested wallet owns the agent NFT (ownerOf) or is the registry's signature-verified agentWallet binding. Registry 0x8004A169FB4a3325136EB29fA0ceB6D2e539a432 on Base; chainId 8453 only. Honest semantics: registration is permissionless minting, so the signed statement implies no vetting, no reputation, no endorsement."
    • addedInput schema / properties / conditions / items / properties / delegate
      Added value: +{
      +  "$ref": "#/properties/wallet",
      +  "description": "For account_code with expect 'eip7702' only (a 400 with any other expect): an EVM address; met iff the wallet's EIP-7702 designator points at it. Echoed in lowercase inside the signed evaluatedCondition as the caller's input; the actual delegation target is never returned."
      +}
    • changedInput schema / properties / conditions / items / properties / delegation / description
      Previous value: -"Required for erc7710_delegation. The signed ERC-7710 delegation to evaluate. Met iff ALL of: attested wallet is the delegate; declared delegator is expectedDelegator; EIP-712 signature verifies (EOA or ERC-1271); unrevoked at the anchored block; every caveat enforcer recognized; any time-window caveat currently satisfied. Recognized enforcers: timestamp (evaluated), erc20_transfer_amount, native_transfer_amount, allowed_targets, limited_calls (the last four are REPORTED as declaredLimits — redemption enforces them, the attestation does not simulate enforcement)."New value: +"Required for erc7710_delegation. The signed ERC-7710 delegation to evaluate. Met iff ALL of: attested wallet is the delegate; declared delegator is expectedDelegator; EIP-712 signature verifies (EOA or ERC-1271); unrevoked at the anchored block; every caveat enforcer recognized; any time-window caveat currently satisfied. Recognized enforcers: timestamp (evaluated), erc20_transfer_amount, native_transfer_amount, allowed_targets, limited_calls (the last four are REPORTED as declaredLimits: redemption enforces them, the attestation does not simulate enforcement)."
    • changedInput schema / properties / conditions / items / properties / delegation / properties / caveats / description
      Previous value: -"Caveats the principal signed (max 16). Every enforcer must be recognized or the condition fails — no override."New value: +"Caveats the principal signed (max 16). Every enforcer must be recognized or the condition fails, with no override."
    • changedInput schema / properties / conditions / items / properties / delegationManager / description
      Previous value: -"Required for erc7710_delegation. DelegationManager contract the delegation was signed against — one of the recognized MetaMask Delegation Framework managers on Base (current default 0xdb9B1e94B5b69Df7e401DDbedE43491141047dB3). chainId 8453 only."New value: +"Required for erc7710_delegation. DelegationManager contract the delegation was signed against: one of the recognized MetaMask Delegation Framework managers on Base (current default 0xdb9B1e94B5b69Df7e401DDbedE43491141047dB3). chainId 8453 only."
    • addedInput schema / properties / conditions / items / properties / expect
      Added value: +{
      +  "description": "Required for account_code: the code state the wallet address itself must be in at the anchored block. 'none' is no code (a plain key account); 'eip7702' is the EIP-7702 delegation designator (a key that has delegated execution to a contract); 'contract' is any other code (a smart-contract wallet, a protocol, a token). The three states are exclusive on a chain. EVM chains only; a non-EVM chainId is rejected with a 400. The result is met or not met, like every type: the code and the delegation target are never returned, in any format or mode. The signed evaluatedCondition is {type, chainId, expect, operator: 'code_state'}. With proof 'merkle', the proof is an EIP-1186 account proof (subject 'account_code') whose codeHash is the proven value.",
      +  "enum": [
      +    "none",
      +    "eip7702",
      +    "contract"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / conditions / items / properties / expectedDelegator / description
      Previous value: -"Required for erc7710_delegation. The principal address the caller asserts authorized this agent. The condition fails unless the delegation's declared delegator matches — without it a self-delegation would read as authority, so there is no structural-only mode."New value: +"Required for erc7710_delegation. The principal address the caller asserts authorized this agent. The condition fails unless the delegation's declared delegator matches. Without it a self-delegation would read as authority, so there is no structural-only mode."
    • changedInput schema / properties / conditions / items / properties / type / description
      Previous value: -"Condition type: token_balance, nft_ownership (EVM, Solana and XRPL), eas_attestation, farcaster_id (Farcaster IdRegistry on Optimism), evm_view_call (single-address-argument view function returning bool; RPC EVM chains only), ratio_to_amount (balance >= multiple * amount; RPC EVM chains only), ratio_to_supply (balance / totalSupply >= minFraction; RPC EVM chains, ERC-20 only), erc8004_agent (registered ERC-8004 agent on Base; agentId required), or erc7710_delegation (signed MetaMask-framework delegation validity on Base; delegationManager, expectedDelegator, and delegation required; max 3 per request)"New value: +"Condition type: token_balance, nft_ownership (EVM, Solana and XRPL), eas_attestation, farcaster_id (Farcaster IdRegistry on Optimism), evm_view_call (single-address-argument view function returning bool; EVM chains only), ratio_to_amount (balance >= multiple * amount; EVM chains only), ratio_to_supply (balance / totalSupply >= minFraction; EVM chains, ERC-20 only), erc8004_agent (registered ERC-8004 agent on Base; agentId required), erc7710_delegation (signed MetaMask-framework delegation validity on Base; delegationManager, expectedDelegator, and delegation required; max 3 per request), or account_code (the code state of the wallet address itself on an EVM chain; expect required, delegate optional with expect 'eip7702'; no contractAddress)"
    • changedInput schema / properties / conditions / items / properties / type / enum
      Previous value: -[
      -  "token_balance",
      -  "nft_ownership",
      -  "eas_attestation",
      -  "farcaster_id",
      -  "evm_view_call",
      -  "ratio_to_amount",
      -  "ratio_to_supply",
      -  "erc8004_agent",
      -  "erc7710_delegation"
      -]New value: +[
      +  "token_balance",
      +  "nft_ownership",
      +  "eas_attestation",
      +  "farcaster_id",
      +  "evm_view_call",
      +  "ratio_to_amount",
      +  "ratio_to_supply",
      +  "erc8004_agent",
      +  "erc7710_delegation",
      +  "account_code"
      +]
    • changedInput schema / properties / proof / description
      Previous value: -"Set to 'merkle' for EIP-1186 Merkle storage proofs (2 credits). For token_balance on supported EVM chains (not ZKsync Era, Sei, Viction or XDC Network, and not on non-EVM chains); for erc7710_delegation, a storage proof of the revocation slot (subject 'delegation_revocation') on managers with an on-chain-verified layout."New value: +"Set to 'merkle' for EIP-1186 Merkle proofs (2 credits, refunded to 1 when no proof is delivered). For token_balance or ratio_to_amount against an ERC-20, a storage proof of the balance slot (no subject field); for the same conditions with contractAddress 'native', an account proof whose balance field is the value evaluated (subject 'account_balance'); for account_code, an account proof whose codeHash is the value evaluated (subject 'account_code'); for erc7710_delegation, a storage proof of the revocation slot (subject 'delegation_revocation') on managers with an on-chain-verified layout. Supported EVM chains only (not ZKsync Era, Sei, Viction or XDC Network, and not on non-EVM chains)."
    • changedInput schema / properties / stellarWallet / description
      Previous value: -"Stellar wallet address (G-prefixed). For verifying XLM or trustline assets (USDC, BENJI, etc.). Use chainId 'stellar' with the asset issuer's G-address as contractAddress and pass assetCode (e.g. 'USDC'). Soroban contract balances not visible — classic trustlines only."New value: +"Stellar wallet address (G-prefixed). For verifying XLM or trustline assets (USDC, BENJI, etc.). Use chainId 'stellar' with the asset issuer's G-address as contractAddress and pass assetCode (e.g. 'USDC'). Soroban contract balances not visible; classic trustlines only."
  3. Changed12 schema fields changedv1.17.1
    • addedInput schema / properties / conditions / items / properties / contractAddress / anyOf
      Added value: +[
      +  {
      +    "maxLength": 200,
      +    "minLength": 1,
      +    "pattern": "^[A-Za-z0-9:_]+$",
      +    "type": "string"
      +  },
      +  {
      +    "maxLength": 600,
      +    "pattern": "^0x[0-9a-fA-F]{1,64}::[A-Za-z_][A-Za-z0-9_]*::[A-Za-z_][A-Za-z0-9_]*<[A-Za-z0-9:_<>, ]+>$",
      +    "type": "string"
      +  }
      +]
    • changedInput schema / properties / conditions / items / properties / contractAddress / description
      Previous value: -"Token or NFT contract address (required for token_balance, nft_ownership, ratio_to_amount, and ratio_to_supply; ratio_to_supply requires an ERC-20 contract, no native). 'native' means the chain's native coin and is for token_balance and ratio_to_amount only. nft_ownership needs the NFT contract address (0x + 40 hex on EVM); 'native' with nft_ownership is rejected with a 400, so use token_balance for the native coin. On Sui, pass a coin type address::module::Name: native SUI is '0x2::sui::SUI', and 'native' is not accepted there."New value: +"Token or NFT contract address (required for token_balance, nft_ownership, ratio_to_amount, and ratio_to_supply; ratio_to_supply requires an ERC-20 contract, no native). 'native' means the chain's native coin and is for token_balance and ratio_to_amount only. nft_ownership needs the NFT contract address (0x + 40 hex on EVM); 'native' with nft_ownership is rejected with a 400, so use token_balance for the native coin. On Sui, pass a coin type address::module::Name: native SUI is '0x2::sui::SUI', and 'native' is not accepted there. A coin type may carry type parameters in angle brackets."
    • removedInput schema / properties / conditions / items / properties / contractAddress / maxLength
      Removed value: -200
    • removedInput schema / properties / conditions / items / properties / contractAddress / minLength
      Removed value: -1
    • removedInput schema / properties / conditions / items / properties / contractAddress / pattern
      Removed value: -"^[A-Za-z0-9:_]+$"
    • removedInput schema / properties / conditions / items / properties / contractAddress / type
      Removed value: -"string"
    • changedInput schema / properties / conditions / items / properties / currency / description
      Previous value: -"XRPL trust line currency code (e.g. 'RLUSD', 'USDC'). Required for XRPL trust line tokens, ignored for other chains."New value: +"XRPL trust line currency code (e.g. 'RLUSD'). Case-sensitive: enter it exactly as the issuer created it. Required for XRPL trust line tokens, ignored for other chains."
    • addedInput schema / properties / conditions / items / properties / currency / minLength
      Added value: +1
    • changedInput schema / properties / conditions / items / properties / currency / pattern
      Previous value: -"^[A-Za-z0-9]+$"New value: +"^[\\x20-\\x7E]+$"
    • changedInput schema / properties / conditions / items / properties / taxon / description
      Previous value: -"XRPL NFToken taxon filter (optional, for nft_ownership on XRPL only). Filters NFTs by issuer + taxon."New value: +"XRPL NFToken taxon filter: an integer from 0 to 4294967295 (optional, for nft_ownership on XRPL only). Filters NFTs by issuer + taxon."
    • addedInput schema / properties / conditions / items / properties / taxon / maximum
      Added value: +4294967295
    • addedInput schema / properties / conditions / items / properties / taxon / minimum
      Added value: +0
  4. Changed39 schema fields changedv1.16.0
    • addedInput schema / properties / bitcoinWallet / pattern
      Added value: +"^(?:[13][1-9A-HJ-NP-Za-km-z]{25,34}|(?:bc1|BC1)[02-9ac-hj-np-zAC-HJ-NP-Z]{11,87})$"
    • addedInput schema / properties / conditions / items / properties / agentId
      Added value: +{
      +  "description": "Required for erc8004_agent. The ERC-8004 agent ID as a uint256 decimal string — the caller must supply it (the deployed Identity Registry has no wallet-to-agentId reverse lookup). Met iff the attested wallet owns the agent NFT (ownerOf) or is the registry's signature-verified agentWallet binding. Registry 0x8004A169FB4a3325136EB29fA0ceB6D2e539a432 on Base; chainId 8453 only. Honest semantics: registration is permissionless minting — the signed statement implies no vetting, no reputation, no endorsement.",
      +  "pattern": "^\\d{1,78}$",
      +  "type": "string"
      +}
    • addedInput schema / properties / conditions / items / properties / amount
      Added value: +{
      +  "$ref": "#/properties/conditions/items/properties/threshold",
      +  "description": "For ratio_to_amount: per-request reference amount in token/display units as a decimal string (e.g. \"100\" for 100 USDC, not base units/wei). Numbers are accepted and coerced. Must be > 0."
      +}
    • addedInput schema / properties / conditions / items / properties / assetCode
      Added value: +{
      +  "description": "Stellar trustline asset code (e.g. 'USDC', 'BENJI'). Required for Stellar non-native (trustline) tokens. Use contractAddress 'native' for XLM. Ignored for other chains. Flows into conditionHash so different assets on the same issuer produce different hashes.",
      +  "pattern": "^[A-Za-z0-9]{1,12}$",
      +  "type": "string"
      +}
    • addedInput schema / properties / conditions / items / properties / attester / $ref
      Added value: +"#/properties/wallet"
    • removedInput schema / properties / conditions / items / properties / attester / type
      Removed value: -"string"
    • changedInput schema / properties / conditions / items / properties / chainId / anyOf
      Previous value: -[
      -  {
      -    "description": "EVM chain ID",
      -    "type": "integer"
      -  },
      -  {
      -    "const": "solana",
      -    "type": "string"
      -  },
      -  {
      -    "const": "xrpl",
      -    "type": "string"
      -  },
      -  {
      -    "const": "bitcoin",
      -    "type": "string"
      -  }
      -]New value: +[
      +  {
      +    "description": "EVM chain ID",
      +    "type": "integer"
      +  },
      +  {
      +    "const": "solana",
      +    "type": "string"
      +  },
      +  {
      +    "const": "xrpl",
      +    "type": "string"
      +  },
      +  {
      +    "const": "bitcoin",
      +    "type": "string"
      +  },
      +  {
      +    "const": "tron",
      +    "type": "string"
      +  },
      +  {
      +    "const": "stellar",
      +    "type": "string"
      +  },
      +  {
      +    "const": "sui",
      +    "type": "string"
      +  }
      +]
    • changedInput schema / properties / conditions / items / properties / chainId / description
      Previous value: -"Chain identifier: EVM chain ID (integer), 'solana', 'xrpl', or 'bitcoin'"New value: +"Chain identifier: EVM chain ID (integer, includes 50 for XDC), 'solana', 'xrpl', 'bitcoin', 'tron', 'stellar', or 'sui'"
    • changedInput schema / properties / conditions / items / properties / contractAddress / description
      Previous value: -"Token or NFT contract address (required for token_balance and nft_ownership)"New value: +"Token or NFT contract address (required for token_balance, nft_ownership, ratio_to_amount, and ratio_to_supply; ratio_to_supply requires an ERC-20 contract, no native). 'native' means the chain's native coin and is for token_balance and ratio_to_amount only. nft_ownership needs the NFT contract address (0x + 40 hex on EVM); 'native' with nft_ownership is rejected with a 400, so use token_balance for the native coin. On Sui, pass a coin type address::module::Name: native SUI is '0x2::sui::SUI', and 'native' is not accepted there."
    • addedInput schema / properties / conditions / items / properties / contractAddress / maxLength
      Added value: +200
    • addedInput schema / properties / conditions / items / properties / contractAddress / minLength
      Added value: +1
    • addedInput schema / properties / conditions / items / properties / contractAddress / pattern
      Added value: +"^[A-Za-z0-9:_]+$"
    • addedInput schema / properties / conditions / items / properties / currency / maxLength
      Added value: +40
    • addedInput schema / properties / conditions / items / properties / currency / pattern
      Added value: +"^[A-Za-z0-9]+$"
    • changedInput schema / properties / conditions / items / properties / decimals / description
      Previous value: -"Token decimals (default 18)"New value: +"Optional. Leave it out: the token's own decimals are always read from the chain. If sent it is only a cross-check, and a value that differs from the token's own decimals is rejected with a 400."
    • addedInput schema / properties / conditions / items / properties / delegation
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Required for erc7710_delegation. The signed ERC-7710 delegation to evaluate. Met iff ALL of: attested wallet is the delegate; declared delegator is expectedDelegator; EIP-712 signature verifies (EOA or ERC-1271); unrevoked at the anchored block; every caveat enforcer recognized; any time-window caveat currently satisfied. Recognized enforcers: timestamp (evaluated), erc20_transfer_amount, native_transfer_amount, allowed_targets, limited_calls (the last four are REPORTED as declaredLimits — redemption enforces them, the attestation does not simulate enforcement).",
      +  "properties": {
      +    "authority": {
      +      "description": "Root authority only (0xffff…ffff, 32 bytes of 0xff). Delegation chains are unsupported.",
      +      "pattern": "^0x[0-9a-fA-F]{64}$",
      +      "type": "string"
      +    },
      +    "caveats": {
      +      "description": "Caveats the principal signed (max 16). Every enforcer must be recognized or the condition fails — no override.",
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "enforcer": {
      +            "description": "Caveat enforcer contract address",
      +            "pattern": "^0x[0-9a-fA-F]{40}$",
      +            "type": "string"
      +          },
      +          "terms": {
      +            "description": "ABI-encoded caveat terms (hex)",
      +            "maxLength": 20000,
      +            "pattern": "^0x[0-9a-fA-F]*$",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "enforcer",
      +          "terms"
      +        ],
      +        "type": "object"
      +      },
      +      "maxItems": 16,
      +      "type": "array"
      +    },
      +    "delegate": {
      +      "description": "Agent wallet the delegation authorizes. Must equal the attested wallet.",
      +      "pattern": "^0x[0-9a-fA-F]{40}$",
      +      "type": "string"
      +    },
      +    "delegator": {
      +      "description": "Principal address that signed the delegation. Must equal expectedDelegator.",
      +      "pattern": "^0x[0-9a-fA-F]{40}$",
      +      "type": "string"
      +    },
      +    "salt": {
      +      "anyOf": [
      +        {
      +          "$ref": "#/properties/conditions/items/properties/agentId"
      +        },
      +        {
      +          "minimum": 0,
      +          "type": "integer"
      +        }
      +      ],
      +      "description": "Delegation salt (decimal string; numbers coerced)"
      +    },
      +    "signature": {
      +      "description": "EIP-712 signature over the delegation (hex). EOA recovery, or ERC-1271 for smart-contract principals.",
      +      "maxLength": 20000,
      +      "pattern": "^0x[0-9a-fA-F]*$",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "delegator",
      +    "delegate",
      +    "authority",
      +    "caveats",
      +    "salt",
      +    "signature"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / properties / conditions / items / properties / delegationManager
      Added value: +{
      +  "$ref": "#/properties/wallet",
      +  "description": "Required for erc7710_delegation. DelegationManager contract the delegation was signed against — one of the recognized MetaMask Delegation Framework managers on Base (current default 0xdb9B1e94B5b69Df7e401DDbedE43491141047dB3). chainId 8453 only."
      +}
    • addedInput schema / properties / conditions / items / properties / expectedDelegator
      Added value: +{
      +  "$ref": "#/properties/wallet",
      +  "description": "Required for erc7710_delegation. The principal address the caller asserts authorized this agent. The condition fails unless the delegation's declared delegator matches — without it a self-delegation would read as authority, so there is no structural-only mode."
      +}
    • addedInput schema / properties / conditions / items / properties / indexer / $ref
      Added value: +"#/properties/wallet"
    • removedInput schema / properties / conditions / items / properties / indexer / type
      Removed value: -"string"
    • addedInput schema / properties / conditions / items / properties / minFraction
      Added value: +{
      +  "$ref": "#/properties/conditions/items/properties/threshold",
      +  "description": "For ratio_to_supply: required share of total supply, a decimal string in (0,1] (e.g. \"0.005\" for 0.5%). Met iff balance / totalSupply() >= minFraction. Numbers are accepted and coerced. For project/governance tokens, not stablecoins."
      +}
    • addedInput schema / properties / conditions / items / properties / multiple
      Added value: +{
      +  "$ref": "#/properties/conditions/items/properties/threshold",
      +  "description": "For ratio_to_amount: collateralization multiple as a decimal string (e.g. \"10\" for 'hold >= 10x the amount'). Met iff balance >= multiple * amount. Numbers are accepted and coerced. Must be > 0."
      +}
    • addedInput schema / properties / conditions / items / properties / schemaId / pattern
      Added value: +"^0x[0-9a-fA-F]{64}$"
    • addedInput schema / properties / conditions / items / properties / selector
      Added value: +{
      +  "description": "Required for evm_view_call. Canonical signature of a view function returning bool, in the form 'functionName(address)' (e.g. 'hasAccess(address)'). Single-address-argument view functions only; the 4-byte selector is derived from this signature.",
      +  "maxLength": 100,
      +  "pattern": "^[A-Za-z_][A-Za-z0-9_]*\\(address\\)$",
      +  "type": "string"
      +}
    • addedInput schema / properties / conditions / items / properties / threshold / anyOf
      Added value: +[
      +  {
      +    "maxLength": 80,
      +    "pattern": "^\\d+(\\.\\d+)?$",
      +    "type": "string"
      +  },
      +  {
      +    "type": "number"
      +  }
      +]
    • changedInput schema / properties / conditions / items / properties / threshold / description
      Previous value: -"Minimum balance required (for token_balance). Must be > 0 when proof is merkle."New value: +"Minimum balance for token_balance, as a decimal string in token/display units (e.g. \"100\", not base units). Numbers are accepted and coerced to a string. Must be > 0 when proof is merkle."
    • removedInput schema / properties / conditions / items / properties / threshold / type
      Removed value: -"number"
    • changedInput schema / properties / conditions / items / properties / type / description
      Previous value: -"Condition type: token_balance, nft_ownership, eas_attestation, or farcaster_id (Farcaster IdRegistry on Optimism)"New value: +"Condition type: token_balance, nft_ownership (EVM, Solana and XRPL), eas_attestation, farcaster_id (Farcaster IdRegistry on Optimism), evm_view_call (single-address-argument view function returning bool; RPC EVM chains only), ratio_to_amount (balance >= multiple * amount; RPC EVM chains only), ratio_to_supply (balance / totalSupply >= minFraction; RPC EVM chains, ERC-20 only), erc8004_agent (registered ERC-8004 agent on Base; agentId required), or erc7710_delegation (signed MetaMask-framework delegation validity on Base; delegationManager, expectedDelegator, and delegation required; max 3 per request)"
    • changedInput schema / properties / conditions / items / properties / type / enum
      Previous value: -[
      -  "token_balance",
      -  "nft_ownership",
      -  "eas_attestation",
      -  "farcaster_id"
      -]New value: +[
      +  "token_balance",
      +  "nft_ownership",
      +  "eas_attestation",
      +  "farcaster_id",
      +  "evm_view_call",
      +  "ratio_to_amount",
      +  "ratio_to_supply",
      +  "erc8004_agent",
      +  "erc7710_delegation"
      +]
    • addedInput schema / properties / declaredLimits
      Added value: +{
      +  "description": "Set to 'omit' to leave decoded caveat limits out of the signed results of erc7710_delegation conditions, so a forwarded attestation does not carry the principal's spending ceiling. met, delegationHash, and conditionHash are byte-identical either way.",
      +  "enum": [
      +    "omit"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / format / description
      Previous value: -"Set to 'jwt' to include a Wallet Auth by InsumerAPI token (ES256-signed JWT) in the response. Verifiable by any standard JWT library using JWKS at /.well-known/jwks.json."New value: +"Set to 'jwt' to include a Wallet Auth by InsumerAPI token (ES256-signed JWT) in the response, with its ML-DSA-65 sibling pqJwt beside it. The jwt is verifiable by any standard JWT library using JWKS at /.well-known/jwks.json."
    • changedInput schema / properties / proof / description
      Previous value: -"Set to 'merkle' for EIP-1186 Merkle storage proofs (2 credits). Proofs available for token_balance on RPC chains only."New value: +"Set to 'merkle' for EIP-1186 Merkle storage proofs (2 credits). For token_balance on supported EVM chains (not ZKsync Era, Sei, Viction or XDC Network, and not on non-EVM chains); for erc7710_delegation, a storage proof of the revocation slot (subject 'delegation_revocation') on managers with an on-chain-verified layout."
    • addedInput schema / properties / solanaWallet / pattern
      Added value: +"^[1-9A-HJ-NP-Za-km-z]{32,44}$"
    • addedInput schema / properties / stellarWallet
      Added value: +{
      +  "description": "Stellar wallet address (G-prefixed). For verifying XLM or trustline assets (USDC, BENJI, etc.). Use chainId 'stellar' with the asset issuer's G-address as contractAddress and pass assetCode (e.g. 'USDC'). Soroban contract balances not visible — classic trustlines only.",
      +  "pattern": "^G[A-Z2-7]{55}$",
      +  "type": "string"
      +}
    • addedInput schema / properties / suiWallet
      Added value: +{
      +  "description": "Sui wallet address (0x + 64 hex chars). For verifying SUI or other Sui coins (e.g. USDC). Use chainId 'sui' with the Sui coin type as contractAddress: '0x2::sui::SUI' for native SUI, or the full coin type address::module::Name for other coins. The string 'native' is not accepted on Sui.",
      +  "pattern": "^0x[0-9a-fA-F]{64}$",
      +  "type": "string"
      +}
    • addedInput schema / properties / tronWallet
      Added value: +{
      +  "description": "Tron wallet address (T-prefixed, base58). For verifying TRX or TRC20 tokens (USDT-TRC20). Use chainId 'tron'.",
      +  "pattern": "^T[1-9A-HJ-NP-Za-km-z]{33}$",
      +  "type": "string"
      +}
    • addedInput schema / properties / wallet / pattern
      Added value: +"^0x[0-9a-fA-F]{40}$"
    • addedInput schema / properties / xrplWallet / pattern
      Added value: +"^r[1-9A-HJ-NP-Za-km-z]{24,34}$"
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": true,
      +  "properties": {
      +    "data": {
      +      "description": "The endpoint's payload: a signed attestation, trust profile, discount, merchant or token records"
      +    },
      +    "error": {
      +      "description": "Error details when ok is false"
      +    },
      +    "items": {
      +      "description": "The result when the endpoint returns a JSON array",
      +      "items": {},
      +      "type": "array"
      +    },
      +    "keys": {
      +      "description": "JWKS entries (insumer_jwks)",
      +      "items": {},
      +      "type": "array"
      +    },
      +    "message": {
      +      "description": "A plain-text result (insumer_setup), or a message from the API"
      +    },
      +    "meta": {
      +      "description": "Response metadata such as version and timestamp"
      +    },
      +    "ok": {
      +      "description": "true when the API call succeeded",
      +      "type": "boolean"
      +    }
      +  },
      +  "type": "object"
      +}
  5. Addedv0.1.0

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavior beyond the annotations: privacy guarantee (never the balance), dual signing scheme (ES256 with kid plus ML-DSA-65 pqSig/pqKid), expiry windows (30 min, 5 min with a delegation condition), cost (1 credit, 2 with merkle), and the critical rpc_failure 503 semantics. With readOnlyHint=false and idempotentHint=false already declared, this richly describes the side-effect profile without contradicting it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose and mostly free of filler; each sentence (cost, expiry, error semantics) earns its place. It is a dense single block that would scan better as bullets, keeping it below a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value explanation is not required, yet the description still covers the essentials an agent needs: signing, expiry, cost, chain coverage, and error handling. Nothing material is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description goes beyond by summarizing cross-cutting constraints the schema only states per-field, e.g. that Bitcoin/Tron/Stellar/Sui support token_balance only and the condition kinds available via the type field. It adds real routing information without re-documenting every parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: evaluate 1-10 conditions against a wallet's on-chain state and return one signed attestation, with the guarantee that the balance is never returned. The scope and output are unambiguous. It does not, however, name the sibling it competes with (e.g. insumer_wallet_trust or insumer_verify), so an agent must infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied rather than stated: the description explains what conditions are and the cost/retry mechanics, but never says when to prefer this over the other wallet-verification siblings. It gives useful operational guidance (rpc_failure 503 means retry and never treat as a no), but no explicit when-not or alternative selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.