How do I check that a wallet is a registered ERC-8004 agent?

InsumerAPI checks whether a wallet owns, or is bound to, a given ERC-8004 agentId in the Identity Registry on Base and returns a signed yes or no. One call costs $0.05 over x402 with no API key, or 1 credit ($0.04) with a key, and a yes means registered and nothing more, because anyone can register.

Updated

The check

Send the wallet and an erc8004_agent condition with the agentId you expect to POST /v1/attest. InsumerAPI reads the ERC-8004 Identity Registry on Base (0x8004A169FB4a3325136EB29fA0ceB6D2e539a432, chainId 8453) and answers met: true when the wallet owns that agent NFT or is the agent wallet the registry has bound to it.

You supply the agentId. The registry has no lookup from a wallet to its agent ID, so the question is always "is this wallet agent N?", never "which agent is this wallet?".

What a yes means

Registering an ERC-8004 agent is open to anyone. A yes means the wallet is registered in that registry at that agent ID, owned by or bound to that wallet, and nothing more: no vetting, no reputation, no endorsement. Add other conditions in the same call if you need more, such as a valid ERC-7710 delegation or a minimum holding.

The result also carries agentExists (whether the agent NFT exists at all) and matchedVia: owner, agent_wallet or none. The registry clears the agent wallet binding when the agent NFT changes hands, so a later check reflects the transfer.

One call

POST /v1/attest
curl -X POST https://api.insumermodel.com/v1/attest \
  -H "X-API-Key: $INSUMER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "wallet": "0xAGENT_WALLET",
    "conditions": [
      {
        "type": "erc8004_agent",
        "chainId": 8453,
        "agentId": "123",
        "label": "Registered agent 123"
      }
    ]
  }'

No key? Drop the X-API-Key line. The first reply is an x402 quote; pay it in USDC and retry with the PAYMENT-SIGNATURE header.

Each entry in results carries met, registry, agentId, wallet, agentExists, matchedVia and a conditionHash. Field details are in the verification docs and openapi.yaml.

Keep the answer

Every answer is signed twice: ES256 and a post-quantum ML-DSA-65 signature. Anyone can check it offline against the public keys at /.well-known/jwks.json. An attestation is good for 30 minutes. Merkle proofs are not available for this condition type.

Cost

$0.05 a call over x402 with no API key, or 1 credit with a key ($0.04 at the base rate, down to $0.02 at volume). A free key comes with 10 verifications plus 100 requests a day. Details on pricing.

Next