Agent Card and ERC-8004: How to Check They Belong Together
Anyone can register an agent and point it at somebody else’s card. One file on the card’s domain tells you which entry it accepts.

IN 30 SECONDS
Binding an Agent Card to an ERC-8004 entry is checking the link both ways: the file names the card, and the card’s domain names the entry. Then you run eight checks and stop at identity.
KEY TAKEAWAYS · 3
- You tie the card and the entry yourself: the registration file lists the card’s URL, and the card’s domain lists the entry back.
- The return check is optional in the ERC-8004 Draft and not needed on a shared domain. Without the return check or a shared domain, anyone can point an entry at your card.
- The last of the eight checks is to stop: you know who published the agent, not that it may act.
On this page
How do you tie the card to the on-chain entry?
IN SHORT Neither document points to the other with a signature, so you check the link yourself, in both directions.
WORDS TO KNOW
- Agent Card
- A small JSON file in which an agent describes itself. It may be signed.
- ERC-8004 entry
- An on-chain record from the ERC-8004 Draft: a transferable token with an owner and a link to a file.
- Registration file
- The file an ERC-8004 entry links to. It lists the agent’s services, such as its card URL.
The core A2A Agent Card A small JSON file in which an agent describes itself. It may be signed. See the glossary has no field for an on-chain registry. And an ERC-8004 entry An on-chain record from the ERC-8004 Draft: a transferable token with an owner and a link to a file. See the glossary, from a Draft that can still change (read the current file before you build), links to a registration file that lists the card’s URL.
BINDING CARD AND ENTRY
Step 1. Read the registry. Get the owner, the link and the payment wallet.
- Read the registry Get the owner, the link and the payment wallet.
- Fetch the file Download the file the link points to.
- Forward check It must list this agentId and this exact card URL.
- Verify the card Check the card’s signature with the key you pinned (my policy).
- Return check The card’s domain must list the same registry and agentId back, unless it shares the file’s domain.
IN PLAIN WORDS
The entry says “my card is here”. The card’s domain confirms “that entry is mine”, unless both share one domain.
For that optional return check, the domain publishes /.well-known/agent-registration.json with the same registry and agentId. If the card sits on the same domain as the Registration file The file an ERC-8004 entry links to. It lists the agent’s services, such as its card URL. See the glossary, the Draft says the check isn’t needed, because domain control is already shown.
Without either, anyone can register an agent and point it at somebody else’s card. Also, the Draft’s own example says A2A 0.3.0, while the current release is v1.0.1, from May 2026: trust the protocolVersion in the card’s supportedInterfaces.
Coming up next: What does a fake link look like in practice?
A worked example: same card, two entries
IN SHORT The same real card can sit behind two entries, and here only the return check tells you which one the card’s domain accepts.
A WORKED EXAMPLE
Illustrative numbers
PASSExample Ops’ agent, checked end to end
INPUT
- Card
- https://agent.example/.well-known/agent-card.json
- Entry
- agentId 42 on eip155:1:0x742...
WHAT HAPPENS
- The card’s signature verifies with the pinned key.
- The registration file lists agentId 42 and this card URL.
- agent.example’s agent-registration.json lists agentId 42 back.
OUTPUT
- Result
- bound: the card’s domain lists this entry
- Still to check
- mandate and live caller
NOT BOUNDSomeone else registers agentId 977, pointing at the same card
INPUT
- Entry
- agentId 977, another owner
- Card
- same URL as above
WHAT HAPPENS
- The card still verifies: it is the real card.
- The new file lists the card URL: the forward check passes.
- agent.example’s list names only agentId 42.
OUTPUT
- Result
- reject agentId 977 as this agent
Anyone can reuse a signed card and link to it. Only the card’s domain can publish the file that lists the entry back.
Coming up next: So in what order do you run all of this?
The checklist I’d run before trusting an agent
IN SHORT Eight checks I’d run in a fixed order, each with an action when it fails, and the last one is to stop: identity, not permission.
ITEM GET
Never let the document pick its own trust anchor
FAQ
No. It shows who registered the agent, who owns the registration and which file it points to. ERC-8004 is a Draft that says it cannot cryptographically guarantee that advertised capabilities are functional and non-malicious. Authority comes from a mandate: who delegated, for what scope, cap and expiry.
Sources, re-read on 7 October 2026: ERC-8004 (Draft), A2A specification v1.0.1. Not legal advice.
STAGE CLEAR
What you now know
- You bind a card and an entry by checking the link both ways.
- The return check catches an entry that points at someone else’s card.
- Eight checks in order end with a stop: identity, not permission.
Check yourself
Tap or click a question to see the answer.
The registration file sits on the card’s own domain, which has no agent-registration.json. Do you reject the binding?
Not for that reason. On a shared domain the Draft says the return check isn’t needed: domain control is already shown.
You finished every stage published so far in this series. Back to the series map
Web3 x AI engineer, former CTO of Integra. Named author (1 of 5) of ERC-3643, first author of ERC-6960, co-author of ERC-7410, and co-author of ERC-8203, which is still a draft.
Have a project to ship or a role to fill?
Discuss your project or roleMy work at the web3 x AI intersectionOpen-source tools I build
Follow the engineering notes
Get new articles on production AI and smart contracts by email.