<!-- Markdown copy of https://insumermodel.com/developers/erc-8004-agent-check/ for agents. -->

> Check whether a wallet owns, or is bound to, an ERC-8004 agentId in the Identity Registry on Base. One call returns a signed yes or no, $0.05 over x402.
>
> Page: https://insumermodel.com/developers/erc-8004-agent-check/ · API: https://api.insumermodel.com · OpenAPI: https://insumermodel.com/openapi.json · Index for agents: https://insumermodel.com/llms.txt

[Developers](https://insumermodel.com/developers/) / ERC-8004 agent check

# 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 November 10, 2026

## 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](https://insumermodel.com/check-the-payer/) 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:

```bash
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](https://insumermodel.com/developers/verification/) and [openapi.yaml](https://insumermodel.com/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`](https://insumermodel.com/.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](https://insumermodel.com/pricing/).

## Next

- [Verification docs](https://insumermodel.com/developers/verification/) for every condition type.
- [Check the paying agent's wallet](https://insumermodel.com/check-the-payer/) before you serve an x402 request.
- [AI agent verification](https://insumermodel.com/ai-agent-verification-api/): MCP server, SDKs and how an agent pays.
- [Check a Coinbase Verified Account](https://insumermodel.com/developers/coinbase-verified-account-check/) in the same call.
- [Pricing](https://insumermodel.com/pricing/) for credits and x402 rates.
