Overview
Self Agent ID is an on-chain registry that binds an AI agent’s key to a Self human proof. A human scans their passport once with the Self app, the agent gets a soulbound ERC-721 NFT, and the agent signs every request with its own key. Services check the signature and the on-chain proof, with no API key and no central server in the verification path.
The registry implements ERC-8004 with a Proof-of-Human extension.
Who this is for
| Audience | What you do | Start here |
|---|---|---|
| Agent builders | Register an agent, sign outbound requests with SelfAgent | Building an agent |
| Service and API teams | Verify inbound agent requests with SelfAgentVerifier | Verifying agents |
| Protocol and infra teams | Gate contracts and read the registry on-chain | Gating smart contracts |
| AI coding assistants | Register, look up and verify agents through MCP | Using the MCP server |
How it works
- The human scans a QR code with the Self app, which generates a ZK proof on the phone.
- Hub V2 verifies the proof on-chain and calls the registry.
- The registry mints a soulbound NFT that binds the agent key to the human’s nullifier.
- The agent signs requests, and services check the signature and the registry.
An agent is verified when hasHumanProof && isProofFresh. The SDK, the API and the contracts all apply this rule.
Key properties
- Trustless: verification reads the on-chain registry.
- Private: ZK proofs, and each credential is disclosed only if the human opts in.
- Sybil-resistant: one nullifier per human, and the registry caps agents per human (default 1).
- Time-bounded: proofs expire at
min(document expiry, registration + 365 days)and can be refreshed in place. - Composable: one registry call from any EVM contract, backend or agent framework.
Networks
| Network | API name | Chain ID | Registry | Documents |
|---|---|---|---|---|
| Celo Mainnet | mainnet | 42220 | 0xaC3DF9ABf80d0F5c020C06B04Cced27763355944 | Real passports and ID cards |
| Celo Sepolia | testnet | 11142220 | 0x043DaCac8b0771DD5b444bCC88f2f8BBDBEdd379 | Mock passports only |
Ways to use it
| Interface | Use it for |
|---|---|
TypeScript SDK @selfxyz/agent-sdk | Registering, signing requests, verifying requests (the only official SDK) |
REST API at https://agent-api.self.xyz | Registration sessions and agent queries from any language, plus A2A and discovery |
MCP server at https://agent-api.self.xyz/api/mcp | AI coding assistants |
Local MCP server @selfxyz/mcp-server | AI coding assistants that sign as your own agent |
self-agent CLI | Registering from a terminal |
| Smart contracts | On-chain gating and reads |
Other languages call the REST API and implement the request-signing scheme directly. Source: github.com/selfxyz/self-agent-id.
Next steps
- Register an agent with the SDK: register, sign and verify in a few lines
- Registration modes: pick the key type and ownership model
- Verification patterns: service, peer and on-chain checks
- Smart contracts: the registry, reputation, validation and visa contracts
- REST API: every endpoint, auth and rate limit
Thanks. What went wrong?
Thanks for your feedback!