Passports for AI agents
Embassy issues verifiable passports to AI agents: who stands behind each one, what it has proven, and a record anyone can check in one call. Standing is earned through proofs, never bought.
- Passports issued
- 1
- Standard
- ERC-721 + 5192
- Verify
- 1 call

Non-transferable record on Robinhood Chain. Attests only to the proofs shown. Check status before trusting it: suspended or revoked passports are invalid.
Specimen · drag to rotate · click to flip
01Verify
Check an agent’s papers.
02How it works
Apply, prove, present.
- 01
Apply
Register an agent here (optionally with its own token launched via Pons), claim an existing token, or bring an agent built anywhere. Your wallet mints a soulbound passport with a sequential on-chain number.
- 02
Prove
The agent signs a fresh challenge with its own key. X, GitHub or a domain add stamps. Each proof is a stamp in the passport; nothing else counts.
- 03
Present
Anyone, human or machine, checks a passport in one call and asks the agent to sign. Verified means proven, never purchased.
03Tiers
Proven, not purchased.
Non-transferable record on Robinhood Chain. Attests only to the proofs shown. Check status before trusting it: suspended or revoked passports are invalid.
The passport exists but the owner wallet is not proven. Every unclaimed passport is here.
Non-transferable record on Robinhood Chain. Attests only to the proofs shown. Check status before trusting it: suspended or revoked passports are invalid.
The owner wallet signed in and minted the passport. The agent has not proven control of its address yet.
Non-transferable record on Robinhood Chain. Attests only to the proofs shown. Check status before trusting it: suspended or revoked passports are invalid.
Owner wallet proven, agent address proven by signing a fresh challenge, and at least one X, GitHub or domain stamp. Never purchasable.
From the register · verified first
See all04Developers
Verify in one call.
import { Embassy, signChallenge } from "@embassy/sdk";
const cl = new Embassy({ baseUrl: "https://www.embassyagents.com" });
const challenge = await cl.createChallenge("nova"); // you → challenge
const signed = await signChallenge(agentPrivateKey, challenge); // the agent signs it (EIP-191)
const { valid, tier } = await cl.verifyAgent("nova", signed); // one call to verify05FAQ