Agent ID Standard 1.0
Current · 31 October 2026 · supersedes drafts 0.1–0.3 of February 2026 (archive). The key words MUST, SHOULD and MAY are to be read as in RFC 2119.
1. Purpose
An Agent ID says three things about an artificial agent: that it exists as a persistent entity, whom it acts for, and within what scope. It does not authenticate sessions, grant access or govern behaviour; those stay with the systems the agent works in.
2. Identifier
aiid: followed by 14 decimal digits, e.g. aiid:00000000000005. The registry assigns numbers in sequence. A number MUST NOT be reused or reassigned, also after revocation.
3. Record
| standard | "aiid/1.0" |
|---|---|
| aiid | the identifier |
| name, kind | what the agent is called and what sort of agent it is |
| status | active, suspended or revoked; with status_reason when not active |
| principal | whom it acts for: {type: human|organization, name, url?}, or {type, disclosed: false, commitment} when the principal is private |
| operator | who runs it, if not the principal; may be null |
| scope | summary (one sentence), may, may_not, conditions — lists of plain statements |
| registered_at, updated_at | UTC, ISO 8601 |
| version | 1, then +1 with every change |
| seq, prev | position in the registry log and the hash of the entry before it (§5) |
| contact, anchors, legacy | optional: where to write; external proofs of existence (e.g. a blockchain transaction); an earlier record of the same agent |
| proof | {alg: "Ed25519", key, value} (§4) |
4. Signature
The signed bytes are the record without proof, serialized by the JSON Canonicalization Scheme (RFC 8785). value is the Ed25519 signature, base64url without padding. key is a URL of a key set and a fragment naming a key in it. A key set is JSON: {"keys": [{"id", "alg": "Ed25519", "public"}]}, the public key as 32 raw bytes in base64url. The registry key set is /.well-known/aiid-registry.json. Keys are added, never removed: a retired key still verifies what it signed.
5. Log
Every issued record and every later version is appended to registry/log.jsonl, one signed entry per line. seq counts from 1; prev is "sha256:" plus the hex SHA-256 of the canonical form of the previous entry, proof included (null for the first). A verifier replays the log: every signature MUST hold and every prev MUST match. The file registry/v1/<number>.json is the latest version of each record.
The registry SHOULD anchor the head of the log in a public blockchain, so that its past cannot be rewritten even by the registry. aiagentid.org stamps each new head in Bitcoin through OpenTimestamps: the file registry/anchors/<entries>.txt holds the head, .ots beside it the proof, registry/anchors.json lists them. One anchor covers every entry up to it.
6. Status
A change of status is a new version with status_reason. A suspended agent may become active again; a revoked one MUST NOT. While an agent is not active, nothing it does is within its declared scope.
7. Attribution
An action of the agent is declared to be taken on behalf of its principal only if, at that time, the agent was active and the action fell within its scope — permitted by may, not excluded by may_not, and meeting the conditions. An action outside the declared scope is not attributable to the principal through this record. The record is a public declaration; what follows from it in law is for the law where the action happens.
8. Private principals
When the principal is a private person, the record SHOULD NOT name them. commitment is a keyed hash (e.g. HMAC-SHA256) of a stable identifier of the principal, held by the operator, who MUST confirm or disclose the principal only at the principal's request or by law.
9. Self-declared records
A record signed with a key published on the declarer's own domain is valid in the same way: it proves that the domain's owner declares it. It MAY carry an aiid only if the registry has assigned one to it.
10. Presenting an Agent ID
An agent SHOULD state its Agent ID where it acts: a header Agent-ID in e-mail and HTTP, the field agent_id in an A2A agent card, or in words. A verifier fetches https://aiagentid.org/registry/v1/<number>.json and checks it.