| Internet-Draft | AgentID Protocol | March 2026 |
| Uzua | Expires 15 September 2026 | [Page] |
This document defines the AgentID Protocol, an open standard for establishing, verifying, and managing the identity of autonomous AI agents operating across the Internet. As AI agents increasingly interact with web services, APIs, and each other on behalf of humans and organisations, the industry lacks a universal mechanism to determine which agent is making a request, who is accountable for it, and what it is permitted to do.¶
AgentID introduces the Agent Identity Token (AIT), a signed JWT carrying agent identity, owner verification, capability, and delegation chain claims. The protocol defines agent registration, owner verification levels, service-side access tiers, and transparent delegation chains with scope attenuation. It builds on existing standards including OAuth 2.0, OpenID Connect, JSON Web Token (JWT), and JSON Web Key (JWK), adapting them to the unique requirements of non-human autonomous actors.¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.¶
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 15 September 2026.¶
Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.¶
Today's Internet authentication infrastructure was designed for humans interacting with services through browsers. OAuth 2.0 [RFC6749] enables a user to grant an application limited access to their resources. OpenID Connect [OpenID.Core] enables a user to prove their identity across services. Neither protocol was designed for autonomous software agents that:¶
The result is a proliferation of ad-hoc solutions: raw API keys with no ownership tracing, OAuth tokens repurposed beyond their design intent, workload identity frameworks such as [SPIFFE] that address service-to-service authentication but not agent-specific concerns like owner accountability and delegation chains, and proprietary agent authentication schemes that fragment the ecosystem.¶
AgentID addresses this gap by providing a lightweight, cryptographically secure identity layer purpose-built for autonomous AI agents. It answers three questions that no existing standard addresses comprehensively:¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
Without a standardised agent identity layer, services face the following threats:¶
The protocol MUST satisfy the following requirements:¶
The Agent Identity Token is a signed JSON Web Token (JWT) conforming to [RFC7519], with a custom claim set designed for agent identification. The token is self-contained: any service with access to the issuer's public key can verify the token without contacting the registry.¶
The AIT JOSE header MUST contain the following parameters:¶
{
"alg": "ES256",
"typ": "AIT+jwt",
"kid": "agentidp-2026-03-01"
}
The AIT payload contains the following claims organised into four groups:¶
The following is an example AIT payload:¶
{
"agent_id": "ag_7xK9m2nP4qRtL8",
"agent_name": "AcmeBookingAgent",
"agent_version": "1.2.0",
"owner_id": "own_T1mR4xBq9",
"owner_type": "org",
"owner_name": "Acme Inc",
"verification_level": 2,
"capabilities": ["calendar:read", "calendar:write"],
"delegation_chain": [{
"principal_type": "user",
"principal_id": "usr_abc123",
"granted_at": "2026-03-01T10:00:00Z",
"scopes": ["calendar:read"]
}],
"iss": "https://registry.agentidp.dev",
"sub": "ag_7xK9m2nP4qRtL8",
"aud": "https://api.example.com",
"iat": 1740000000,
"exp": 1740003600,
"jti": "tok_unique_nonce_123"
}
All Agent Identity Tokens MUST be signed using ES256 (ECDSA with the P-256 curve and SHA-256) as defined in [RFC7518] Section 3.4. This algorithm provides strong security with compact signatures suitable for high-frequency agent-to-service communication.¶
Agent key pairs are generated during registration and the public key is published via the registry's JWKS endpoint [RFC7517]. Services verify tokens by fetching the public key from the JWKS endpoint, with aggressive caching (RECOMMENDED TTL: 24 hours).¶
AIT tokens MUST have a maximum lifetime of 24 hours (the difference between exp and iat MUST NOT exceed 86400 seconds). For high-security contexts, a lifetime of 1 hour or less is RECOMMENDED. Short-lived tokens limit the blast radius of key compromise. Agents MUST implement automatic token refresh using their private key.¶
The protocol defines four verification levels providing increasing assurance about the agent owner's identity. Services can set minimum verification requirements per endpoint.¶
Agent registration is a two-phase process: owner verification (performed once) followed by agent creation (performed per agent). A single verified owner MAY register multiple agents.¶
Owners MUST immediately store the agent private key in a secure secrets manager. If the private key is lost, the agent MUST be re-registered with a new key pair.¶
Services consuming AgentID tokens implement access policies based on the claims present in the AIT. The protocol defines three standard access tiers:¶
Services define policies as a set of rules evaluated against AIT claims. The protocol RECOMMENDS the following policy structure:¶
{
"resource": "/api/bookings",
"access_tier": "authenticated",
"min_verification_level": 2,
"required_capabilities": ["calendar:write"],
"rate_limit": {
"requests_per_hour": 100,
"scope": "agent_id"
},
"allowlist": null,
"denylist": ["ag_known_bad_actor"]
}
When Agent A instructs Agent B to perform an action, or when a human user authorises an agent to act on their behalf, the delegation chain is encoded in the AIT so that the receiving service can inspect the full provenance of the request.¶
The delegation_chain claim is an ordered array of delegation objects, from the original principal (index 0) to the most recent delegator. Each entry records who delegated, when, and with what scope restrictions.¶
{
"delegation_chain": [
{
"principal_type": "user",
"principal_id": "usr_john_abc",
"granted_at": "2026-03-01T10:00:00Z",
"scopes": ["calendar:read", "calendar:write"],
"evidence": "oauth2:token_exchange"
},
{
"principal_type": "agent",
"principal_id": "ag_orchestrator_1",
"granted_at": "2026-03-01T10:00:05Z",
"scopes": ["calendar:read"],
"evidence": "ait:delegation"
}
]
}
Each delegation object contains:¶
Each link in the delegation chain MUST have scopes that are equal to or a strict subset of the previous link's scopes. A delegate MUST NOT grant more permissions than it received. This is enforced by both the issuing agent (when constructing the token) and the verifying service (when validating claims).¶
If a verifying service detects a scope attenuation violation, it MUST reject the token with error code AID-009 (DELEGATION_INVALID).¶
The Agent Registry is the trust anchor of the AgentID ecosystem. It stores agent public keys, owner verification records, and revocation status.¶
A compliant registry MUST implement the following endpoints:¶
| Method | Endpoint | Description |
|---|---|---|
| POST | /v1/owners | Register a new owner |
| POST | /v1/owners/{id}/verify | Submit verification evidence |
| POST | /v1/agents | Register a new agent |
| GET | /v1/agents/{agent_id} | Public agent lookup |
| GET | /v1/agents/{agent_id}/public-key | Fetch agent public key (JWK) |
| DELETE | /v1/agents/{agent_id} | Revoke an agent |
| GET | /.well-known/jwks.json | Registry JWKS endpoint |
| GET | /v1/agents/{agent_id}/status | Real-time revocation check |
Agent revocation MUST be immediate. When an owner revokes an agent or the registry suspends one, the agent status is set to "revoked".¶
AgentID is designed to complement, not replace, OAuth 2.0 [RFC6749]. For services that already use OAuth for user authentication, AgentID adds the agent identity layer. A typical integration pattern is:¶
This layered approach allows services to answer "which agent is this?" (AgentID) independently from "what is this user allowing?" (OAuth), providing complete request provenance.¶
Agent private keys MUST be stored in hardware security modules (HSMs) or cloud secret managers in production. Key rotation is supported via key versioning: owners can generate a new key pair without changing the agent_id. Both old and new keys are valid during a configurable overlap period (default: 72 hours).¶
Every AIT includes a unique jti claim. Services SHOULD maintain a jti cache (e.g., with TTL matching token expiry) and reject tokens with previously seen jti values. For stateless verification, the short token lifetime provides an acceptable trade-off.¶
Registries SHOULD implement automated abuse detection monitoring for anomalous patterns. Services can report abusive agent_ids to the registry. A graduated response model is RECOMMENDED: warning, temporary suspension, permanent revocation, owner-level ban.¶
Registries store owner identity information subject to applicable data protection regulations (GDPR, etc.). Owner personal data MUST NOT be exposed via the public agent lookup API unless the owner explicitly opts in. The minimum public disclosure is: owner_type, verification_level, and (for Level 2+) verified_domain.¶
This document requests registration of the "AIT+jwt" media type subtype in the "JSON Web Token Types" sub-registry of the "JSON Web Token (JWT)" registry.¶
This document requests registration of the following claims in the "JSON Web Token Claims" registry:¶
Capabilities follow a resource:action format:¶
form:submit Submit form data form:read Read form structure/schema calendar:read Read calendar events calendar:write Create/update events calendar:delete Delete events email:send Send emails email:read Read inbox storage:read Read files storage:write Upload/modify files payment:initiate Start a payment payment:confirm Confirm a payment¶
Service providers MAY define custom capabilities using reverse-domain notation (e.g., "com.example.booking:create").¶
| Code | Name | Description |
|---|---|---|
| AID-001 | INVALID_TOKEN | AIT signature verification failed |
| AID-002 | TOKEN_EXPIRED | AIT has exceeded its exp claim |
| AID-003 | AGENT_REVOKED | Agent has been revoked |
| AID-004 | AGENT_SUSPENDED | Agent is temporarily suspended |
| AID-005 | INSUFFICIENT_VERIFICATION | Owner verification level below minimum |
| AID-006 | CAPABILITY_DENIED | Agent lacks required capability |
| AID-007 | RATE_LIMIT_EXCEEDED | Per-agent rate limit exceeded |
| AID-008 | NOT_ON_ALLOWLIST | Agent not on service allowlist |
| AID-009 | DELEGATION_INVALID | Scope attenuation violated |
| AID-010 | REPLAY_DETECTED | Token jti previously used |
The authors wish to thank the contributors to the AgentID Protocol specification on GitHub, and the broader community working on AI agent identity and authentication standards.¶