agentURI points to a registration file (services, endpoints, wallet), plus a reputation registry for signed feedback and a validation registry for checked work. It is not a payment standard — it answers who an agent is, what counterparties said, and whether anyone verified the work.
Three registries, one ID
Each agent is an NFT: agentId = tokenId, with an owner, an agentURI pointing at an off-chain JSON registration file, and key/value metadata that commonly includes agentWallet. The global ID form:
{namespace}:{chainId}:{identityRegistry}:{agentId}
eip155:8453:0x8004A169FB4a3325136EB29fA0ceB6D2e539a432:2106
| Registry | Address | Job |
|---|---|---|
| Identity | 0x8004A169…a432 | ERC-721 passport + URIStorage + metadata |
| Reputation | 0x8004BAa1…9b63 | Signed feedback, tags, withdrawals — a signal format, not a score product |
| Validation | per chain | Request → validator responds 0–100 with a proof URI (re-execution, zkML, TEE) |
One transfer rule matters for indexers: moving the NFT to a new owner breaks the old payment-wallet binding — index it as an edge break, never a merge.
The counts — and why they disagree
| Cut | Count | Date | Caveat |
|---|---|---|---|
| 8004scan network analytics | 492,792 agents · 27 chains | 2026-09-02 | +1,560 agents/24h; protocol tags 82.2% unknown |
| 8004scan + Token Dispatch | 385,998 · 29 chains | Jul 2026 | 2.24% with a working service; 89.2% no standard call method |
| Cambrian Q2 2026 | 220k+ · 22 networks | mid-2026 | registration ≠ useful agent |
| QuickNode explorer, 30d | 125,587 regs · 30,127 feedbacks | research window | 7 validation requests. Seven. |
| Chain mix (top) | BNB 302k · Base 63k · ETH 31k | 2026-09 | BNB is the mint capital and the spam capital |
Quality warning: the standard is being farmed. Empty NFTs, sports-bot clones, and serial “Trading Agent #N” spam are visible on every explorer. Rank raw agent counts and you are publishing a casino leaderboard.
The reproducible Base crawl — copy this methodology
Universe: the complete Registered log on Base from deployment (2026-02-03) through 2026-08-16 — 63,832 registrations. Even sample of 1,204, public RPC only (repo: maxguryanov/agent-registry-research):
| Stage | n | % of sample |
|---|---|---|
| Registered | 1,204 | 100.0 |
| Non-empty current URI | 760 | 63.1 |
| URI resolves | 646 | 53.7 |
| Valid JSON | 600 | 49.8 |
| Matches 8004 schema | 341 | 28.3 |
| Declares services | 215 | 17.9 |
| Endpoint responds (strict) | 82 | 6.8 95% CI 5.5–8.4% |
The multi-chain academic crawl (arXiv 2606.26028) lands in the same neighborhood: a valid file plus at least one live endpoint on ~3% of Ethereum, ~4% of BSC, ~15% of Base registrations. Always probe the current URI, not the mint URI — many agents update or blank the pointer.
Indexer footguns: public RPCs lie
- Some endpoints return HTTP 200 and an empty array for historical
eth_getLogs. - Some return truncated log sets and still call it success — one Celo public RPC dropped ~19.6% of agents in a test.
- Scan in ~10,000-block windows even when a vendor advertises 200k, and dual-source at least Ethereum and Base.
Any 8004 census must ship a coverage verifier — on-chain census vs stored Registered count, per chain, per day. If they disagree, the dashboard is fiction. Ours ships with the graph; the rules live on the methodology page.
Reputation hygiene
- Never show a raw average score as trust.
- Require feedback tied to a checkable job ID (ERC-8183 escrow or x402 receipt) before it weights rank.
- Ban self-review and obvious review farms; separate “has reviews” from “has validations.”
- An 80+ average on a chain with 300k empty mints is a spam signal, not a quality signal.
What we index from day one
identity.Registered · identity.MetadataSet · identity.URIUpdated
identity.Transfer → break wallet binding
reputation.Feedback / revoke
validation.Request / Response
Then the off-chain join that explorers stop short of: fetch current URI → parse services → probe MCP / A2A / web / x402 endpoints → bind agentWallet → join to balances, x402 payer role, vault deposits, and EIP-7702 code state. NFT → wallet → money. That join is the product.