{
 "generated": "2026-11-13",
 "vocab": {
  "steps": [
   {
    "id": "discover",
    "order": 1,
    "label": "Discover",
    "question": "What is here, and where?",
    "analog": "sitemap, .well-known",
    "definition": "How an agent learns that a resource, tool or agent exists at an origin, and where to find its description."
   },
   {
    "id": "identify",
    "order": 2,
    "label": "Identify",
    "question": "Who is this agent? Who is this site?",
    "analog": "TLS certificate, WHOIS",
    "definition": "How an agent proves who it is to a site, and how a site or another agent proves who it is back."
   },
   {
    "id": "permit",
    "order": 3,
    "label": "Permit",
    "question": "What may the agent do here?",
    "analog": "robots.txt, terms of use",
    "definition": "How a site states what agents may read, train on, or do, and how agents obtain authorisation to act."
   },
   {
    "id": "read",
    "order": 4,
    "label": "Read",
    "question": "Give me the content",
    "analog": "HTML, RSS",
    "definition": "Representations of a site's content made for machine readers rather than browsers."
   },
   {
    "id": "act",
    "order": 5,
    "label": "Act",
    "question": "Do something for me",
    "analog": "forms, REST APIs",
    "definition": "How an agent invokes a capability a site or tool exposes."
   },
   {
    "id": "coordinate",
    "order": 6,
    "label": "Coordinate",
    "question": "Talk to another agent",
    "analog": "none; agent-to-agent is new",
    "definition": "How agents delegate to, negotiate with, and message other agents."
   },
   {
    "id": "pay",
    "order": 7,
    "label": "Pay",
    "question": "Settle the bill",
    "analog": "HTTP 402, finally used",
    "definition": "How an agent pays for a resource, authorises a payment on a person's behalf, or completes a purchase."
   },
   {
    "id": "present",
    "order": 8,
    "label": "Present",
    "question": "Show a human the result",
    "analog": "the browser",
    "definition": "How an agent renders output or a live interaction to a person."
   },
   {
    "id": "account",
    "order": 9,
    "label": "Account",
    "question": "Prove what happened; be judged",
    "analog": "logs, audit trails",
    "definition": "How actions are recorded, verified after the fact, attributed and measured."
   }
  ],
  "parties": [
   {
    "id": "agent-site",
    "label": "agent ↔ site",
    "definition": "An agent interacting with a website or API origin."
   },
   {
    "id": "agent-agent",
    "label": "agent ↔ agent",
    "definition": "Two agents interacting directly."
   },
   {
    "id": "agent-human",
    "label": "agent ↔ human",
    "definition": "An agent presenting to, or taking instruction from, a person."
   },
   {
    "id": "agent-payment",
    "label": "agent ↔ payment network",
    "definition": "An agent and a payment rail, wallet, or card network."
   },
   {
    "id": "agent-registry",
    "label": "agent ↔ registry",
    "definition": "An agent and a third-party index or registry."
   }
  ],
  "form": [
   {
    "id": "well-known-file",
    "label": "well-known file",
    "definition": "A fixed-path file under /.well-known/ or the site root."
   },
   {
    "id": "http-header",
    "label": "HTTP header",
    "definition": "A request or response header."
   },
   {
    "id": "endpoint",
    "label": "endpoint",
    "definition": "An HTTP or RPC endpoint with a defined message format."
   },
   {
    "id": "dns-record",
    "label": "DNS record",
    "definition": "A record type or name convention in DNS."
   },
   {
    "id": "onchain-registry",
    "label": "on-chain registry",
    "definition": "A smart contract acting as a registry."
   },
   {
    "id": "document-format",
    "label": "document format",
    "definition": "A file format or document convention."
   },
   {
    "id": "browser-api",
    "label": "browser API",
    "definition": "A JavaScript API available to pages in a browser."
   }
  ],
  "track": [
   {
    "id": "ietf",
    "label": "IETF",
    "definition": "Internet Engineering Task Force draft or RFC."
   },
   {
    "id": "w3c",
    "label": "W3C",
    "definition": "W3C working or community group output."
   },
   {
    "id": "linux-foundation",
    "label": "Linux Foundation",
    "definition": "A Linux Foundation project or sub-foundation."
   },
   {
    "id": "industry-body",
    "label": "industry body",
    "definition": "A trade association such as IAB Tech Lab."
   },
   {
    "id": "vendor-consortium",
    "label": "vendor consortium",
    "definition": "Several vendors publishing jointly without a standards body."
   },
   {
    "id": "single-vendor",
    "label": "single vendor",
    "definition": "One company controls the specification."
   },
   {
    "id": "community",
    "label": "community",
    "definition": "Open community project with no formal governance."
   },
   {
    "id": "academic",
    "label": "academic",
    "definition": "Research output without a standards process."
   }
  ],
  "scope": [
   {
    "id": "general",
    "label": "general",
    "definition": "Applies to any site or agent."
   },
   {
    "id": "commerce",
    "label": "commerce",
    "definition": "Buying and selling goods or services."
   },
   {
    "id": "advertising",
    "label": "advertising",
    "definition": "Ad buying, measurement, or attribution."
   },
   {
    "id": "payments",
    "label": "payments",
    "definition": "Moving money."
   },
   {
    "id": "coding-tools",
    "label": "coding tools",
    "definition": "Developer tooling and editors."
   }
  ],
  "phase": [
   {
    "id": "idea",
    "label": "idea",
    "definition": "Proposed, no specification text."
   },
   {
    "id": "draft",
    "label": "draft",
    "definition": "Specification text exists and is changing."
   },
   {
    "id": "working-group",
    "label": "working group",
    "definition": "Adopted by a standards working group."
   },
   {
    "id": "review",
    "label": "review",
    "definition": "In formal review or last call."
   },
   {
    "id": "candidate",
    "label": "candidate",
    "definition": "Feature-complete, seeking implementations."
   },
   {
    "id": "stable",
    "label": "stable",
    "definition": "Published as stable or final."
   },
   {
    "id": "living",
    "label": "living",
    "definition": "Continuously updated with no versioned finals."
   },
   {
    "id": "deprecated",
    "label": "deprecated",
    "definition": "Superseded or discouraged by its issuer."
   },
   {
    "id": "replaced",
    "label": "replaced",
    "definition": "Replaced by a working-group or successor document."
   },
   {
    "id": "withdrawn",
    "label": "withdrawn",
    "definition": "Withdrawn or archived."
   },
   {
    "id": "unknown",
    "label": "unknown",
    "definition": "Not established."
   }
  ],
  "implementation": [
   {
    "id": "none-found",
    "label": "none found",
    "definition": "No implementation located."
   },
   {
    "id": "prototype",
    "label": "prototype",
    "definition": "Reference or experimental implementation only."
   },
   {
    "id": "developer-trial",
    "label": "developer trial",
    "definition": "Behind a flag or origin trial."
   },
   {
    "id": "shipping",
    "label": "shipping",
    "definition": "At least one production implementation."
   },
   {
    "id": "multi-implementation",
    "label": "multi-implementation",
    "definition": "Independent production implementations from more than one party."
   },
   {
    "id": "deprecated",
    "label": "deprecated",
    "definition": "Implementations being removed."
   },
   {
    "id": "unknown",
    "label": "unknown",
    "definition": "Not established."
   }
  ],
  "adoption": [
   {
    "id": "unmeasured",
    "label": "unmeasured",
    "definition": "Nobody has published a count."
   },
   {
    "id": "claimed",
    "label": "claimed",
    "definition": "A party asserts adoption; the claimant is named."
   },
   {
    "id": "observed",
    "label": "observed",
    "definition": "We or a third party have seen instances but not counted systematically."
   },
   {
    "id": "measured",
    "label": "measured",
    "definition": "Counted by a documented probe run."
   },
   {
    "id": "unknown",
    "label": "unknown",
    "definition": "Not established."
   }
  ],
  "evidence": [
   {
    "id": "VERIFIED",
    "label": "verified",
    "definition": "Primary source, or two independent secondary sources, checked by us."
   },
   {
    "id": "REPORTED",
    "label": "reported",
    "definition": "One secondary source."
   },
   {
    "id": "THIN",
    "label": "thin",
    "definition": "Existence established; detail not."
   }
  ],
  "freshness": [
   {
    "id": "current",
    "label": "current",
    "definition": "Verified within the review cadence."
   },
   {
    "id": "review-due",
    "label": "review due",
    "definition": "Past cadence; not yet re-checked."
   },
   {
    "id": "stale",
    "label": "stale",
    "definition": "Past twice the cadence."
   },
   {
    "id": "source-unavailable",
    "label": "source unavailable",
    "definition": "Primary source no longer resolves."
   }
  ],
  "use_cases": [
   {
    "id": "discover-my-api",
    "label": "Let agents discover my API or service",
    "definition": "Publish where an agent can find what an origin offers."
   },
   {
    "id": "expose-tools-to-agents",
    "label": "Expose tools to agents",
    "definition": "Let a model call functions or actions you host."
   },
   {
    "id": "let-agents-act-on-my-site",
    "label": "Let agents act on my website",
    "definition": "Forms, bookings and tasks performed by agents in a browser or via a page-level API."
   },
   {
    "id": "serve-content-to-agents",
    "label": "Serve readable content to agents",
    "definition": "Give agents a machine-friendly version of pages and documents."
   },
   {
    "id": "prove-agent-identity",
    "label": "Prove an agent's identity",
    "definition": "Let a server verify which agent, operator or workload is calling."
   },
   {
    "id": "delegate-user-authority",
    "label": "Delegate a user's authority to an agent",
    "definition": "Scoped, revocable permission for an agent to act for a person."
   },
   {
    "id": "control-ai-crawling",
    "label": "Control AI crawling and training use",
    "definition": "State what automated systems may do with your content."
   },
   {
    "id": "accept-agent-payments",
    "label": "Accept payments from agents",
    "definition": "Charge an agent per request or per purchase."
   },
   {
    "id": "agent-checkout",
    "label": "Let agents buy on behalf of a person",
    "definition": "Mandates, carts and checkout flows for agent purchases."
   },
   {
    "id": "agent-to-agent-messaging",
    "label": "Let agents talk to other agents",
    "definition": "Discover, message and delegate between independent agents."
   },
   {
    "id": "agent-naming",
    "label": "Name and resolve agents",
    "definition": "Stable names or records that resolve to an agent's endpoint."
   },
   {
    "id": "render-agent-ui",
    "label": "Render agent output as a user interface",
    "definition": "Structured UI that a client renders from an agent."
   },
   {
    "id": "audit-agent-actions",
    "label": "Audit what an agent did",
    "definition": "Tamper-evident records of actions and the authority behind them."
   },
   {
    "id": "attribute-agent-traffic",
    "label": "Attribute and measure agent traffic",
    "definition": "Know which agents visited and what they did."
   },
   {
    "id": "describe-agent-capabilities",
    "label": "Describe an agent's capabilities",
    "definition": "Cards, manifests and schemas that say what an agent can do."
   }
  ],
  "audience": [
   {
    "id": "site-owner",
    "label": "Site or API owner",
    "definition": "Runs a website, API or shop that agents will use."
   },
   {
    "id": "agent-builder",
    "label": "Agent builder",
    "definition": "Builds agents or the frameworks they run on."
   },
   {
    "id": "platform",
    "label": "Platform or infrastructure",
    "definition": "CDNs, identity providers, payment networks, registries."
   },
   {
    "id": "standards-body",
    "label": "Standards and policy",
    "definition": "People shaping or tracking the specifications themselves."
   }
  ]
 },
 "records": [
  {
   "acronym": "MCP",
   "adoption": {
    "level": "observed",
    "by": "Hugging Face, Cloudflare Docs, GitHub, Stripe, Linear, Claude, Visual Studio Code, Cursor, and 14 other verified implementations",
    "probe_run": null
   },
   "aliases": [],
   "analog": "Language Server Protocol",
   "audience": [
    "agent-builder",
    "platform",
    "standards-body"
   ],
   "collisions": [
    "Microsoft Cloud Partner",
    "Master Control Program"
   ],
   "discovery": {
    "mechanism": "Operator-published remote URL. Optional Server Card at the recommended <streamable-http-url>/server-card. Official MCP Registry is in preview.",
    "path": "No required path in the base protocol. server.json may name a remote server URL. Optional Server Card recommended at <streamable-http-url>/server-card. Registry is in preview."
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Model Context Protocol Specification (2026-07-28)*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Model Context Protocol (MCP) is an open protocol that enables seamless integration between LLM applications and external data sources and tools. / The protocol uses JSON-RPC 2.0 messages to establish communication between / Version 2025-11-25 / Version 2024-11-05 / This specification defines the authoritative protocol requirements, based on the TypeScript schema in schema.ts . / Extensions are always opt-in and require explicit support from both client and server / MCP takes some inspiration from the Language Server Protocol , which standardizes how to add support for programming languages across a whole ecosystem of development tools. / The protocol uses JSON-RPC 2.0 messages to establish communication between: Hosts : LLM applications that initiate connections Clients : Connectors within the host application Servers : Services that provide context and capabilities / Expose tools and capabilities to AI systems / Skills over MCP : Rich, structured instructions for agent workflows, discovered and consumed through MCP",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://www.anthropic.com/news/model-context-protocol",
     "claim": "Anthropic, *Introducing the Model Context Protocol*, 2024-11-25",
     "date": "2024-11-25",
     "quote": "Every new data source requires its own custom implementation, making truly connected systems difficult to scale. / 2024-11-25 / It provides a universal, open standard for connecting AI systems with data sources / constrained by their isolation from data—trapped behind information silos and legacy systems. Every new data source requires its own custom implementation, making truly connected systems difficult to scale.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://www.linuxfoundation.org/press/linux-foundation-announces-the-formation-of-the-agentic-ai-foundation",
     "claim": "The Linux Foundation, *Linux Foundation Announces the Formation of the Agentic AI Foundation (AAIF), Anchored by New Project Contributions Including Model Context Protocol (MCP), goose and AGENTS.md*, 2025-12-09",
     "date": "2025-12-09",
     "quote": "today announced the formation of the Agentic AI Foundation (AAIF), and founding contributions of three leading projects driving innovation in open source AI; Anthropic’s Model Context Protocol (MCP), Block's goose, and OpenAI's AGENTS.md / When we open sourced it in November 2024, we hoped other developers would find it as useful as we did / SAN FRANCISCO, Dec. 9, 2025 – The Linux Foundation , the nonprofit organization enabling mass innovation through open source, today announced the formation of the Agentic AI Foundation (AAIF) / founding contributions of three leading projects driving innovation in open source AI; Anthropic’s Model Context Protocol (MCP)",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28/basic/transports/stdio",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *stdio Transport — Model Context Protocol Specification (2026-07-28)*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "In the stdio transport, the client launches the MCP server as a subprocess. / The server reads JSON-RPC messages from stdin and writes JSON-RPC messages to stdout. / Messages are delimited by newlines, and MUST NOT contain embedded newlines. / Each message is a single JSON-RPC request, notification, or response. / The server MUST NOT write anything to its stdout that is not a valid MCP message. / The server MAY write UTF-8 strings to stderr / SHOULD NOT assume stderr output indicates error conditions. / The wire format (one newline-delimited JSON-RPC message per line over a reliable bidirectional byte stream) works unchanged over Unix domain sockets, TCP connections, or any similar channel.",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28/basic/transports/streamable-http",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Streamable HTTP Transport — Model Context Protocol Specification (2026-07-28)*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "The client sends every JSON-RPC request or notification as its own HTTP POST. / The server MUST provide a single HTTP endpoint path (hereafter referred to as the MCP endpoint ) that supports POST. / the server MUST return either Content-Type: application/json (a single JSON object) or Content-Type: text/event-stream (an SSE response stream). / Streamable HTTP was introduced in protocol version 2025-03-26 as a replacement for the HTTP+SSE transport from protocol version 2024-11-05. / Removal of the GET stream endpoint. Removal of protocol-level sessions. / The client MUST include an Accept header listing both application/json and text/event-stream as supported content types. / Every POST request to the MCP endpoint MUST include an MCP-Protocol-Version header. / The body of the HTTP POST MUST be a single JSON-RPC request or notification. The client MUST NOT send JSON-RPC responses. / The header value MUST match the io.modelcontextprotocol/protocolVersion field carried in the request body's _meta. / Mcp-Method method All requests Mcp-Name params.name or params.uri tools/call , resources/read , prompts/get / the server MUST return either Content-Type: application/json (a single JSON object) or Content-Type: text/event-stream (an SSE response stream). The client MUST support both. / a Server-Sent Events (SSE) stream scoped to that request, carrying request-related notifications followed by the final response. / the server MUST return HTTP status code 202 Accepted with no body. / This is a change from Streamable HTTP in protocol versions 2025-03-26 through 2025-11-25 / servers could assign a session via the Mcp-Session-Id header (terminated with HTTP DELETE), clients could open a standalone SSE stream with HTTP GET",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28/changelog",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Key Changes (2026-07-28) — Model Context Protocol Specification*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Make MCP stateless: remove the initialize / notifications/initialized handshake. / Remove protocol-level sessions and the Mcp-Session-Id header from the Streamable HTTP transport. / previous revision, 2025-11-25 / Every request now carries its protocol version and client capabilities in _meta ( io.modelcontextprotocol/protocolVersion , io.modelcontextprotocol/clientCapabilities ). / Servers that need cross-call state use explicit, server-minted handles passed as ordinary tool arguments / resources/subscribe / resources/unsubscribe with subscriptions/listen / Remove ping, logging/setLevel, and notifications/roots/list_changed / Remove SSE stream resumability and message redelivery (the Last-Event-ID header and SSE event IDs) from the Streamable HTTP transport / Servers return an InputRequiredResult (resultType: \"input_required\") / Deprecate the roots, sampling, and logging features (SEP-2577) / Change resource not found error code from -32002 to -32602 (Invalid params) to align with JSON-RPC specification. / authorization servers SHOULD include the iss parameter in authorization responses per RFC 9207, and MCP clients MUST validate a present iss against the recorded issuer before redeeming the authorization code ( SEP-2468 ). / Clarify that client credentials are bound to the authorization server that issued them: clients MUST key persisted credentials by the issuer identifier, MUST NOT reuse them with a different authorization server / MUST NOT reuse them with a different authorization server, and MUST re-register when the authorization server changes ( SEP-2352 ).",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28/basic/versioning",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Versioning and Compatibility — Model Context Protocol Specification (2026-07-28)*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Legacy : protocol versions that establish a session with an initialize handshake ( 2025-11-25 and earlier). / Modern : protocol versions that convey version, identity, and capabilities as per-request metadata (revision 2026-07-28 and later). / There is no negotiation handshake. Every request carries its protocol version, and the server accepts or rejects each request independently / Every request declares the protocol version it is using in its _meta field. On HTTP, this is also carried in the MCP-Protocol-Version header / Extensions are advertised in the extensions field of capabilities / io.modelcontextprotocol/tasks / it MUST respond with an UnsupportedProtocolVersionError listing the versions it does support / \"supported\": [ \"2026-07-28\", \"2025-11-25\" ] / The client SHOULD select a mutually supported version from the supported list and retry the request",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://blog.modelcontextprotocol.io/posts/mcp-roadmap/",
     "claim": "David Soria Parra and Den Delimarsky (Model Context Protocol Blog), *The New MCP Roadmap*, 2026-08-22",
     "date": "2026-08-22",
     "quote": "The new roadmap is organized into five priority areas. Several of them pick up work that the previous version of the roadmap listed as being on the horizon, including server-initiated events, result type improvements, and agent identity",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://blog.modelcontextprotocol.io/posts/ruby-sdk-tier-1/",
     "claim": "Koichi Ito (Model Context Protocol Blog), *The Official Ruby SDK for MCP Reaches Tier 1*, 2026-10-30",
     "date": "2026-10-30",
     "quote": "The official Ruby SDK for the Model Context Protocol is now a Tier 1 SDK under the MCP SDK tiering system, with full support for the 2026-07-28 MCP specification and a 100% conformance pass rate across both scored spec versions. / And as the specification evolves, the Ruby SDK team has committed to supporting the next MCP spec, targeted for late March 2027 , by its release date.",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://blog.modelcontextprotocol.io/posts/2026-07-28/",
     "claim": "David Soria Parra and Den Delimarsky (MCP Blog), *MCP 2026-07-28 Specification Release*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "David Soria Parra Member of Technical Staff, Co-Inventor of MCP / Any request can now land on any server instance behind a plain round-robin load balancer without needing shared storage. / We leverage it with Foundry toolbox unified MCP endpoint that brings together tools while centralizing governance, identity, and observability. With stateless operations, Tasks for long-running work, and enterprise-managed identity, the next generation of MCP makes it easier than ever to build secure, scalable, production-ready agent systems. / All four Tier 1 SDKs speak 2026-07-28 as of today: TypeScript Python Go C# Beyond the Tier 1 set, the Rust SDK supports the new spec in beta. / Cloudflare’s Agents SDK supports the spec from day zero, so developers can run MCP servers directly in Workers, call tools without transport-session overhead, and enable richer flows like elicitation for approvals. / Across our Tier 1 SDKs, we’re seeing close to half-a-billion downloads a month, with both TypeScript and Python SDKs crossing the 1 billion total downloads threshold.",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://modelcontextprotocol.io/community/governance",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Governance and Stewardship — Model Context Protocol*, 2026-10-30",
     "date": "2026-10-30",
     "quote": "Justin Spahr-Summers (Co-Inventor, Lead Maintainer Emeritus) / Lead Maintainers are the final decision makers (also known as BDFL - Benevolent Dictator for Life). / All code and specification contributions to the project must be made using the Apache License, Version 2.0 / All documentation (excluding specifications) will be made available under Creative Commons Attribution 4.0 International license",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Current : the current protocol version, which is ready for use and may continue to receive backwards compatible changes. / The current protocol version is 2026-07-28 .",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://ruby.sdk.modelcontextprotocol.io/protocol-versions/",
     "claim": "MCP Ruby SDK, *Protocol Versions*, checked 2026-10-30",
     "date": null,
     "quote": "2026-07-28 Modern Stateless lifecycle: no handshake, version carried on every request (SEP-2575)",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28/basic",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Base Protocol Overview — Model Context Protocol Specification (2026-07-28)*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "All messages between MCP clients and servers MUST follow the JSON-RPC 2.0 specification. / Server Features : Resources, prompts, and tools exposed by servers / Client Features : Elicitation, sampling and root directory lists provided by clients / JSON-RPC 2.0 reserves the range -32000 to -32099 for implementation-defined server errors. MCP partitions this range as follows: -32000 to -32019 - legacy. / -32020 to -32099 - reserved for the MCP specification. Error codes in this sub-range are defined exclusively by the MCP specification and recorded in the schema. / -32020 HeaderMismatch -32021 MissingRequiredClientCapability -32022 UnsupportedProtocolVersion / -32002 - Resource not found (2025-11-25 and earlier; replaced by -32602 ) / -32042 - URL elicitation required (2025-11-25 only).",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://modelcontextprotocol.io/registry/about",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *About the Official MCP Registry*, 2026-10-30",
     "date": "2026-10-30",
     "quote": "Server metadata is stored in a standardized server.json format / The MCP Registry is the official centralized metadata repository for publicly accessible MCP servers / The MCP Registry is intended to be consumed primarily by downstream aggregators, such as MCP server marketplaces. / The MCP Registry is currently in preview.",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://modelcontextprotocol.io/seps/2127-mcp-server-cards",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *SEP-2127: MCP Server Cards — HTTP Server Discovery*, 2026-01-21",
     "date": "2026-01-21",
     "quote": "Cards themselves can be hosted at any unreserved URI, with <streamable-http-url>/server-card reserved as the recommended location. / Cards themselves can be hosted at any unreserved URI, with /server-card reserved as the recommended location.",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28/basic/patterns/mrtr",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Multi Round-Trip Requests — Model Context Protocol Specification (2026-07-28)*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "InputRequiredResult / resultType\": \"input_required\" / prompts/get Yes resources/read Yes tools/call Yes / Servers MUST send server-to-client requests (such as roots/list , sampling/createMessage , or elicitation/create ) using the MRTR pattern. / The previous pattern of server-initiated requests is no longer supported.",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28/architecture",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Architecture — Model Context Protocol Specification (2026-07-28)*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Servers should not be able to read the whole conversation, nor \"see into\" other servers / The Model Context Protocol (MCP) follows a client-host-server architecture where each host can run multiple client instances. MCP is a stateless protocol: every request is self-contained and carries its own protocol version and capabilities. / A host application creates and manages multiple clients, with each client having a 1:1 relationship with a particular server. / Can be local processes or remote services / Clients include their capabilities in _meta.io.modelcontextprotocol/clientCapabilities on every request. / Servers advertise their capabilities in response to server/discover",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28/basic/authorization",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Authorization — Model Context Protocol Specification (2026-07-28)*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Authorization is OPTIONAL for MCP implementations. / Implementations using an STDIO transport SHOULD NOT follow this specification, and instead retrieve credentials from the environment. / OAuth 2.1 / MCP servers MUST implement OAuth 2.0 Protected Resource Metadata ( RFC9728 ). / MCP clients MUST implement Resource Indicators for OAuth 2.0 as defined in RFC 8707 / Implementations using an HTTP-based transport SHOULD conform to this specification. / A protected MCP server acts as an OAuth 2.1 resource server / MCP clients MUST use OAuth 2.0 Protected Resource Metadata for authorization server discovery. / MUST be included in both authorization requests and token requests. / aligns with the resource parameter in RFC 9728 / OAuth 2.0 Dynamic Client Registration Protocol ( RFC7591 )",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28/server/discover",
     "claim": "Model Context Protocol, *Discovery — Model Context Protocol Specification (2026-07-28)*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "`server/discover` lets a client query a server’s supported protocol versions, capabilities, and identity before sending any other requests. Servers **MUST** implement it. / server/discover lets a client query a server's supported protocol versions, capabilities, and identity before sending any other requests. Servers MUST implement it. / supportedVersions / Calling server/discover is optional for clients / On stdio, there is no per-request HTTP status code to drive fallback. / legacy ( initialize handshake) servers SHOULD send server/discover first / serverInfo is self-reported by the server and is not verified by the protocol. It is intended for display, logging, and debugging. Clients SHOULD NOT use it to change their behavior, and SHOULD NOT rely on it for security decisions",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28/client/sampling",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Sampling — Model Context Protocol Specification (2026-07-28)*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "The Sampling feature is deprecated as of protocol version 2026-07-28 ( SEP-2577 ). / existing implementations SHOULD migrate to integrating directly with LLM provider APIs. / request LLM sampling (\"completions\" or \"generations\") from language models via clients. / with no server API keys necessary. / Servers can request text, audio, or image-based interactions",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28/client/roots",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Roots — Model Context Protocol Specification (2026-07-28)*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "The Roots feature is deprecated as of protocol version 2026-07-28 ( SEP-2577 ). / existing implementations SHOULD migrate to passing directories or files via tool parameters, resource URIs, or server configuration. / expose filesystem \"roots\" to servers. / They are informational guidance rather than an access-control mechanism. / The protocol does not enforce that servers stay within roots.",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28/deprecated",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Deprecated Features Registry — Model Context Protocol Specification (2026-07-28)*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "First revision released on or after 2027-07-28 / Logging SEP-2577 2026-07-28 / Dynamic Client Registration / Dynamic Client Registration PR #2858 2026-07-28 Client ID Metadata Documents",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28/server/tools",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Tools — Model Context Protocol Specification (2026-07-28)*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Tools in MCP are designed to be model-controlled , meaning that the language model can discover and invoke tools automatically based on its contextual understanding and the user's prompts. / there SHOULD always be a human in the loop with the ability to deny tool invocations. / Servers that support tools MUST declare the tools capability / To discover available tools, clients send a tools/list request. / MUST NOT vary per-connection or as a side effect of other requests on the connection. / The set MAY vary by the authorization presented on the request / Servers MAY respond to tools/call with an InputRequiredResult / resultType\": \"input_required\" / For trust & safety and security, clients MUST consider tool annotations to be untrusted unless they come from trusted servers.",
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28/server/resources",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Resources — Model Context Protocol Specification (2026-07-28)*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Resources in MCP are designed to be application-driven / such as files, database schemas, or application-specific information. / Each resource is uniquely identified by a URI / clients send a resources/list request. / resources/read / \"resources\": { \"listChanged\": true, \"subscribe\": true } / Clients subscribe to change notifications for specific resources by sending a / notifications.resourceSubscriptions",
     "ref": 25
    },
    {
     "label": "[26]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28/server/prompts",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Prompts — Model Context Protocol Specification (2026-07-28)*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Prompts are designed to be user-controlled , meaning they are exposed from servers to clients with the intention of the user being able to explicitly select them for use. / as slash commands / clients send a prompts/list request. / prompts/get / MUST NOT vary per-connection",
     "ref": 26
    },
    {
     "label": "[27]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28/client/elicitation",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Elicitation — Model Context Protocol Specification (2026-07-28)*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "The Model Context Protocol (MCP) provides a standardized way for servers to request additional information from users through the client during interactions. / Form mode : Servers can request structured data from users with optional JSON schemas to validate responses / URL mode : Servers can direct users to external URLs for sensitive interactions that must not pass through the MCP client / Servers MUST use URL mode for interactions involving such sensitive information / passwords, API keys, access tokens, or payment credentials / echoed requestState",
     "ref": 27
    },
    {
     "label": "[28]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28/basic/security_best_practices",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Security Best Practices — Model Context Protocol (2026-07-28)*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "MCP Servers MUST NOT accept any tokens that were not explicitly issued for the MCP server / Local MCP servers with inadequate restrictions or from untrusted sources introduce several critical security risks: Arbitrary code execution",
     "ref": 28
    },
    {
     "label": "[29]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28/basic/authorization/client-registration",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Client Registration — Model Context Protocol Specification (2026-07-28)*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "enables clients to use HTTPS URLs as client identifiers / client_id_metadata_document_supported / The metadata document MUST include at least the following properties: client_id , client_name , redirect_uris",
     "ref": 29
    },
    {
     "label": "[30]",
     "url": "https://webmachinelearning.github.io/webmcp/",
     "claim": "Web Machine Learning Community Group (editors Brandon Walderman, Khushal Sagar, Dominic Farolino, and Samuel Dallstream), *WebMCP*, Draft Community Group Report, 11 November 2026",
     "date": null,
     "quote": "partial interface Document { [ SecureContext , SameObject ] readonly attribute ModelContext modelContext ; };",
     "ref": 30
    },
    {
     "label": "[31]",
     "url": "https://modelcontextprotocol.io/seps/1865-mcp-apps-interactive-user-interfaces-for-mcp",
     "claim": "Model Context Protocol (MCP), *SEP-1865: MCP Apps — Interactive User Interfaces for MCP*, 2026-01-26",
     "date": "2026-01-26",
     "quote": "declaring UI resources via the ui:// URI scheme, associating them with tools through metadata, and facilitating bi-directional communication",
     "ref": 31
    },
    {
     "label": "[32]",
     "url": "https://huggingface.co/mcp",
     "claim": "Hugging Face, *Live MCP endpoint*, 2026-10-30",
     "date": "2026-10-30",
     "quote": "\"supportedVersions\":[\"2026-07-28\"],\"capabilities\":{\"tools\":{\"listChanged\":false},\"resources\":{\"listChanged\":false,\"subscribe\":false},\"extensions\":{\"io.modelcontextprotocol/skills\":{\"directoryRead\":true}}} / \"_meta\":{\"io.modelcontextprotocol/serverInfo\":{\"name\":\"huggingface.co/mcp\",\"version\":\"0.4.31\",\"title\":\"Hugging Face\"",
     "ref": 32
    },
    {
     "label": "[33]",
     "url": "https://huggingface.co/docs/hub/agents-mcp",
     "claim": "Hugging Face, *Hugging Face MCP Server*, checked 2026-10-30",
     "date": null,
     "quote": "Hugging Face MCP Server: https://huggingface.co/mcp",
     "ref": 33
    },
    {
     "label": "[34]",
     "url": "https://docs.mcp.cloudflare.com/mcp",
     "claim": "Cloudflare, *Live MCP endpoint*, 2026-10-30",
     "date": "2026-10-30",
     "quote": "{\"result\":{\"supportedVersions\":[\"2026-07-28\"],\"capabilities\":{\"tools\":{\"listChanged\":true},\"prompts\":{\"listChanged\":true}},\"resultType\":\"complete\",\"ttlMs\":0,\"cacheScope\":\"private\",\"_meta\":{\"io.modelcontextprotocol/serverInfo\":{\"name\":\"docs-ai-search\",\"version\":\"0.5.0\"}}},\"jsonrpc\":\"2.0\",\"id\":1}",
     "ref": 34
    },
    {
     "label": "[35]",
     "url": "https://developers.cloudflare.com/agents/model-context-protocol/cloudflare/servers-for-cloudflare/",
     "claim": "Cloudflare, *Cloudflare's own MCP servers*, checked 2026-10-30",
     "date": null,
     "quote": "https://docs.mcp.cloudflare.com/mcp",
     "ref": 35
    },
    {
     "label": "[36]",
     "url": "https://api.githubcopilot.com/mcp/",
     "claim": "GitHub, *Live MCP endpoint*, 2026-10-30",
     "date": "2026-10-30",
     "quote": "www-authenticate: Bearer error=\"invalid_request\", error_description=\"No access token was provided in this request\", resource_metadata=\"https://api.githubcopilot.com/.well-known/oauth-protected-resource/mcp/\"",
     "ref": 36
    },
    {
     "label": "[37]",
     "url": "https://github.com/github/github-mcp-server",
     "claim": "GitHub, *github/github-mcp-server*, checked 2026-10-30",
     "date": null,
     "quote": "The GitHub MCP Server connects AI tools directly to GitHub's platform. / For non-interactive stdio deployments, see **[GitHub App Authentication](docs/github-app-auth.md)**.",
     "ref": 37
    },
    {
     "label": "[38]",
     "url": "https://mcp.stripe.com",
     "claim": "Stripe, *Live MCP endpoint*, 2026-10-30",
     "date": "2026-10-30",
     "quote": "www-authenticate: Bearer resource_metadata=\"https://mcp.stripe.com/.well-known/oauth-protected-resource\" / {\"error\":\"Unauthorized. See https://docs.stripe.com/mcp for usage instructions.\",\"error_code\":\"missing_api_key\",\"error_description\":\"No valid API key provided.\"}",
     "ref": 38
    },
    {
     "label": "[39]",
     "url": "https://docs.stripe.com/mcp",
     "claim": "Stripe, *Model Context Protocol (MCP)*, checked 2026-10-30",
     "date": null,
     "quote": "Stripe’s MCP server supports two authentication methods: OAuth : Use OAuth when a client accesses Stripe on behalf of your Stripe user account. Agent API keys : Use an agent API key when an AI application needs independent, persistent access to Stripe.",
     "ref": 39
    },
    {
     "label": "[40]",
     "url": "https://mcp.linear.app/mcp",
     "claim": "Linear, *Live MCP endpoint*, 2026-10-30",
     "date": "2026-10-30",
     "quote": "www-authenticate: Bearer realm=\"OAuth\", resource_metadata=\"https://mcp.linear.app/.well-known/oauth-protected-resource/mcp\", scope=\"read write\"",
     "ref": 40
    },
    {
     "label": "[41]",
     "url": "https://linear.app/docs/mcp",
     "claim": "Linear, *MCP server*, checked 2026-10-30",
     "date": null,
     "quote": "Read-write access is provided through https://mcp.linear.app/mcp by default. For read-only access, you have two options: Connect to https://mcp.linear.app/mcp/readonly , which only ever exposes read tools.",
     "ref": 41
    },
    {
     "label": "[42]",
     "url": "https://registry.modelcontextprotocol.io/v0.1/servers/com.atlassian%2Fatlassian-mcp-server/versions/2.0.0",
     "claim": "Official MCP Registry, *com.atlassian/atlassian-mcp-server version 2.0.0 (Official MCP Registry)*, version 2.0.0 (publishedAt 2026-09-09T17:53:32.01107Z; retained snapshot fetched 2026-10-30)",
     "date": null,
     "quote": "\"name\":\"com.atlassian/atlassian-mcp-server\",\"description\":\"Connect to Atlassian Jira, Confluence, Loom, and more to search, create, and manage your work.\",\"title\":\"Atlassian Rovo MCP Server\",\"repository\":{\"url\":\"https://github.com/atlassian/atlassian-mcp-server\",\"source\":\"github\"},\"version\":\"2.0.0\",\"websiteUrl\":\"https://support.atlassian.com/atlassian-rovo-mcp-server/docs/getting-started-with-the-atlassian-remote-mcp-server/\",\"remotes\":[{\"type\":\"streamable-http\",\"url\":\"https://mcp.atlassian.com/v2/mcp\"},{\"type\":\"streamable-http\",\"url\":\"https://mcp.atlassian.com/v1/mcp/authv2\"}]",
     "ref": 42
    },
    {
     "label": "[43]",
     "url": "https://registry.modelcontextprotocol.io/v0.1/servers/com.notion%2Fmcp/versions/1.0.1",
     "claim": "Official MCP Registry, *com.notion/mcp version 1.0.1 (Official MCP Registry)*, version 1.0.1 (publishedAt 2025-09-11T22:25:50.737872Z; retained snapshot fetched 2026-10-30)",
     "date": null,
     "quote": "\"name\":\"com.notion/mcp\",\"description\":\"Official Notion MCP server\",\"repository\":{},\"version\":\"1.0.1\",\"remotes\":[{\"type\":\"streamable-http\",\"url\":\"https://mcp.notion.com/mcp\"},{\"type\":\"sse\",\"url\":\"https://mcp.notion.com/sse\"}]",
     "ref": 43
    },
    {
     "label": "[44]",
     "url": "https://registry.modelcontextprotocol.io/v0.1/servers/io.github.microsoft%2Fplaywright-mcp/versions/0.0.82",
     "claim": "Official MCP Registry, *io.github.microsoft/playwright-mcp version 0.0.82 (Official MCP Registry)*, version 0.0.82 (publishedAt 2026-09-18T23:41:20.46032Z; retained snapshot fetched 2026-10-30)",
     "date": null,
     "quote": "\"name\":\"io.github.microsoft/playwright-mcp\",\"description\":\"Playwright Tools for MCP\",\"repository\":{\"url\":\"https://github.com/microsoft/playwright-mcp\",\"source\":\"github\"},\"version\":\"0.0.82\",\"packages\":[{\"registryType\":\"npm\",\"identifier\":\"@playwright/mcp\",\"version\":\"0.0.82\",\"transport\":{\"type\":\"stdio\"}}]",
     "ref": 44
    },
    {
     "label": "[45]",
     "url": "https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp",
     "claim": "Anthropic, *Get started with custom connectors using remote MCP*, modified 2026-10-30",
     "date": null,
     "quote": "Local MCP servers configured in Claude Desktop via claude_desktop_config.json are a separate mechanism and do use your local network, but those aren't available in Cowork or claude.ai. / Under OAuth client , choose how Claude identifies itself to the server’s authorization server: “Use Claude’s published identity (Recommended),” “Register automatically,” or “Use your own OAuth client.”",
     "ref": 45
    },
    {
     "label": "[46]",
     "url": "https://claude.com/resources/articles/bringing-mcp-2026-07-28-to-claude",
     "claim": "Anthropic, *MCP 2026-07-28 spec: stateless core, coming to Claude*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "The fifth spec release of the Model Context Protocol, MCP 2026-07-28 , is live today. The latest spec moves MCP to a stateless core, while hardening authorization and graduating official extensions. Support is being rolled out across Claude products.",
     "ref": 46
    },
    {
     "label": "[47]",
     "url": "https://code.visualstudio.com/blogs/2025/06/12/full-mcp-spec-support",
     "claim": "Microsoft / Harald Kirschner, Connor Peet and Tyler Leonhardt, *The Complete MCP Experience: Full Specification Support in VS Code*, 2025-06-12",
     "date": "2025-06-12",
     "quote": "Beyond the initial tools and workspace awareness we introduced in May , you can now use authorization, prompts, resources, and sampling. / Combined with streamable HTTP transport (which landed in our previous version), this enables remote MCP servers that can scale independently while maintaining enterprise-grade security.",
     "ref": 47
    },
    {
     "label": "[48]",
     "url": "https://cursor.com/changelog/1-0",
     "claim": "Cursor, *Cursor 1.0*, 2025-06-04",
     "date": "2025-06-04",
     "quote": "You can now set up MCP servers in Cursor with one click, and together with OAuth support, you can easily authenticate servers that support it.",
     "ref": 48
    },
    {
     "label": "[49]",
     "url": "https://blog.google/innovation-and-ai/technology/developers-tools/introducing-gemini-cli-open-source-ai-agent/",
     "claim": "Google, *Gemini CLI: your open-source AI agent*, published 2025-06-25; modified 2026-01-07",
     "date": null,
     "quote": "Extend Gemini CLI’s capabilities through built-in support for the Model Context Protocol (MCP) or bundled extensions / Because Gemini CLI is fully open source (Apache 2.0) , developers can inspect the code to understand how it works and verify its security implications.",
     "ref": 49
    },
    {
     "label": "[50]",
     "url": "https://modelcontextprotocol.io/registry/registry-aggregators",
     "claim": "Model Context Protocol, *MCP Registry Aggregators*, checked 2026-10-30",
     "date": null,
     "quote": "A subregistry is an aggregator that also implements the OpenAPI spec defined by the MCP Registry. / The base URL for the MCP Registry REST API is https://registry.modelcontextprotocol.io. / GET /v0.1/servers - List all servers. GET /v0.1/servers/{serverName}/versions - List all versions of a server. GET /v0.1/servers/{serverName}/versions/{version} - Get a specific version of a server. Use the special version latest",
     "ref": 50
    },
    {
     "label": "[51]",
     "url": "https://github.blog/ai-and-ml/github-copilot/meet-the-github-mcp-registry-the-fastest-way-to-discover-mcp-servers/",
     "claim": "Toby Padilla, GitHub Blog, *Meet the GitHub MCP Registry: The fastest way to discover MCP Servers*, published 2025-09-16",
     "date": null,
     "quote": "\"datePublished\":\"2025-09-16T09:27:54-07:00\" / self-publish MCP servers directly to the OSS MCP Community Registry / those servers will automatically appear in the GitHub MCP Registry",
     "ref": 51
    },
    {
     "label": "[52]",
     "url": "https://glama.ai/mcp/methodology",
     "claim": "Glama, *How Glama indexes the MCP ecosystem*, checked 2026-10-30",
     "date": null,
     "quote": "Glama ingests and re-publishes everything in the official registry, and layers its own sandbox-derived data on top / the behavioural analysis, the schema captures from actual server runs, the TDQS scores",
     "ref": 52
    },
    {
     "label": "[53]",
     "url": "https://www.pulsemcp.com/work-with-us",
     "claim": "PulseMCP, *Work With Us*, checked 2026-10-30",
     "date": null,
     "quote": "We ingest from the official registry and supplement with our own indexing across the web",
     "ref": 53
    },
    {
     "label": "[54]",
     "url": "https://www.pulsemcp.com/posts/newsletter-claude-code-competition-ai-fundraising-abounds-mcp-registry-launch",
     "claim": "PulseMCP, *Claude Code has competition, AI fundraising abounds, Official MCP Registry launched*, published 2025-09-09",
     "date": null,
     "quote": "we’re setting PulseMCP up as a sub-registry of the official registry / use our data (like estimated downloads, standardized names and descriptions) to curate your MCP marketplaces",
     "ref": 54
    },
    {
     "label": "[55]",
     "url": "https://www.pulsemcp.com/servers/",
     "claim": "PulseMCP, *MCP Server Directory*, checked 2026-11-06",
     "date": null,
     "quote": "New server submissions and listing changes are still paused while we rework how we ingest and manage listings.",
     "ref": 55
    },
    {
     "label": "[56]",
     "url": "https://mcpcensus.com/compare/mcp-registries",
     "claim": "MCP Census (Jaco Veldsman), *MCP registries compared*, 2026-11-04",
     "date": "2026-11-04",
     "quote": "returns PASS, REVIEW, BLOCK or UNKNOWN / 57,777 server rows (read 4 November 2026) / Updated 2026-11-04 / 115,336 servers (page title, 4 November 2026). Tags include Remote 45,340, Local 43,442 / 21,602 servers / 300+ / stopped on 31 October 2026 / Every statement about another site comes from the pages in the Sources list, read on 4 November 2026. / 21,602 servers (page, undated; the title says / the API, Connect, accounts, CLI and proxy URLs stopped on 31 October 2026",
     "ref": 56
    },
    {
     "label": "[57]",
     "url": "https://modelcontextprotocol.io/docs/sdk",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Official MCP SDKs*, 2026-10-30",
     "date": "2026-10-30",
     "quote": "Build MCP servers and clients using our official SDKs in TypeScript, Python, Go, Kotlin, Swift, Java, C#, Ruby, Rust, and PHP. / TypeScript modelcontextprotocol/typescript-sdk Tier 1 Python modelcontextprotocol/python-sdk Tier 1 C# modelcontextprotocol/csharp-sdk Tier 1 Go modelcontextprotocol/go-sdk Tier 1 Rust modelcontextprotocol/rust-sdk Tier 1 Ruby modelcontextprotocol/ruby-sdk Tier 1",
     "ref": 57
    },
    {
     "label": "[58]",
     "url": "https://modelcontextprotocol.io/docs/tools/inspector",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *MCP Inspector*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "It ships as a single package, @modelcontextprotocol/inspector , providing three clients behind one binary / All three are built on the same shared core, so a connection behaves identically across them: the same transports, the same configuration files, the same OAuth state on disk, and the same protocol-era negotiation (legacy vs. modern 2026-07-28). / npx @modelcontextprotocol/inspector --cli node path/to/server/index.js --method tools/list / npx @modelcontextprotocol/inspector --tui node path/to/server/index.js",
     "ref": 58
    },
    {
     "label": "[59]",
     "url": "https://developers.cloudflare.com/agents/model-context-protocol/",
     "claim": "Cloudflare, *Model Context Protocol (MCP) · Cloudflare Agents docs*, checked 2026-10-30",
     "date": null,
     "quote": "Remote MCP connections : MCP clients connect to MCP servers over the Internet, establishing a connection using Streamable HTTP , and authorizing the MCP client access to resources on the user's account using OAuth . / When a token lacks a scope, return an insufficientScope() challenge so the client asks the user to approve it (step-up authorization) instead of requesting every scope up front.",
     "ref": 59
    },
    {
     "label": "[60]",
     "url": "https://raw.githubusercontent.com/modelcontextprotocol/mcpb/main/README.md",
     "claim": "Model Context Protocol, *MCP Bundles (MCPB) Specification & Toolchain README*, 2026-10-30",
     "date": "2026-10-30",
     "quote": "MCP Bundles (`.mcpb`) are zip archives containing a local MCP server and a `manifest.json` that describes the server and its capabilities. / `@anthropic-ai/dxt` package will be moved to `@anthropic-ai/mcpb`",
     "ref": 60
    },
    {
     "label": "[61]",
     "url": "https://blog.modelcontextprotocol.io/posts/2025-11-25-first-mcp-anniversary/",
     "claim": "Model Context Protocol Blog, *One Year of MCP: November 2025 Spec Release*, 2025-11-25",
     "date": "2025-11-25",
     "quote": "It's the central index for all available MCP servers that now has close to two thousand entries since its announcement in September. / That's a 407% growth from the initial batch of servers we onboarded that same month.",
     "ref": 61
    },
    {
     "label": "[62]",
     "url": "https://www.anthropic.com/news/donating-the-model-context-protocol-and-establishing-of-the-agentic-ai-foundation",
     "claim": "Anthropic, *Donating the Model Context Protocol and establishing the Agentic AI Foundation*, 2025-12-09",
     "date": "2025-12-09",
     "quote": "Across the ecosystem: There are now more than 10,000 active public MCP servers, covering everything from developer tools to Fortune 500 deployments;",
     "ref": 62
    },
    {
     "label": "[63]",
     "url": "https://www.localcan.com/blog/state-of-mcp-server-development",
     "claim": "Jarek Ceborski, LocalCan, *State of MCP Server Development: October 2026*, 2026-10-15",
     "date": "2026-10-15",
     "quote": "Every number below was measured or checked on 14 October 2026 / The official MCP Registry lists 43,012 active servers / 59.6% are remote-only, 34.6% ship only as a package you run yourself, 4.7% offer both, and 1.1% list neither",
     "ref": 63
    },
    {
     "label": "[64]",
     "url": "https://www.apideck.com/blog/mcp-server-directories",
     "claim": "Apideck, *MCP server directories*, 2026-10-31",
     "date": "2026-10-31",
     "quote": "Every count below is from 31 October 2026. / The registry held 53,541 servers on 31 October 2026 / 113,204 open-source servers and 40,151 remote connectors on 31 October / PulseMCP listed 21,614 servers / MCP Market showed 50,999 servers / The Cursor Marketplace linked about 490 plugins on 31 October",
     "ref": 64
    },
    {
     "label": "[65]",
     "url": "https://arxiv.org/html/2611.06897v1",
     "claim": "Khalid Tounoussi, Mohammed Sayagh, Ali Ouni, and Yutaro Kashiwa, *MCP-Eco: A Linked Dataset of MCP Servers, Consumers, and Development Activity*, 2026-11-04",
     "date": "2026-11-04",
     "quote": "exported the release to Parquet on 2026-06-23 / 78,302 candidate server projects / The crawler queries the APIs of the official MCP registry, Glama, Smithery, PulseMCP. For MCP.so, it reads server listing pages found through sitemaps.",
     "ref": 65
    }
   ],
   "form": "endpoint",
   "governance": "Agentic AI Foundation (AAIF), a directed fund under the Linux Foundation, since 2025-12-09; a Series of LF Projects, LLC; Lead Maintainers are the final decision makers",
   "group": null,
   "hatnote_md": "This article covers the Model Context Protocol (MCP) for host-to-server context and tool exchange. For the browser DOM API, see [WebMCP](/protocols/webmcp/); for server discovery, see [Official MCP Registry](/protocols/mcp-registry/) and [MCP Server Cards](/protocols/mcp-server-cards/).",
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against modelcontextprotocol.io/specification/2026-07-28, github.com/modelcontextprotocol/experimental-ext-server-card, github.com/modelcontextprotocol/registry, modelcontextprotocol.io/docs/2026-07-28/sdk, modelcontextprotocol.io/docs/extensions/apps, en.wikipedia.org/wiki/Model_Context_Protocol, workos.com MCP-2026 blog"
    },
    {
     "date": "2026-10-16",
     "note": "Server Cards (SEP-2127) Final 6 Oct 2026; Skills over MCP (SEP-2640) Final 13 Sep 2026; next spec release cadence under discussion (SEP-3398)"
    },
    {
     "date": "2026-10-17",
     "note": "prose brought in line with the infobox and history: SEP-2127 Server Cards are Final (2026-10-06), not experimental; reserved location, media type and the superseded /.well-known/mcp.json noted"
    },
    {
     "date": "2026-10-20",
     "note": "server-card evidence line marked superseded (SEP-2127 Final; repo renamed to ext-server-card)"
    },
    {
     "date": "2026-10-20",
     "note": "probe now uses server/discover for 2026-07-28 with initialize as the legacy fallback; SEP-2127 card is Final; three registry censuses recorded with their units and dates"
    },
    {
     "date": "2026-10-28",
     "note": "Re-verified record against 27 sources on 2026-10-28: 5 live remote MCP endpoints (Hugging Face and Cloudflare via server/discover HTTP 200; GitHub Copilot, Stripe, and Linear via HTTP 401 + RFC 9728 OAuth protected-resource metadata HTTP 200), 7 client vendor statements, and 3 press sources."
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "mcp",
   "implementation": "multi-implementation",
   "last_verified": "2026-11-11",
   "name": "Model Context Protocol",
   "native_status": "Open protocol. The current version, 2026-07-28, is ready for use. The next specification is targeted for late March 2027.",
   "origin": {
    "date": "2024-11-25",
    "org": "Anthropic"
   },
   "pairs_with": [
    "a2a",
    "webmcp",
    "mcp-apps",
    "mcp-registry",
    "ag-ui",
    "anthropic-agent-skills-format"
   ],
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "living",
   "prerequisites": [],
   "probe": {
    "method": "POST",
    "on_absent": "Connection refused, 404, or a non-JSON-RPC response means no MCP server is exposed at that endpoint. SEP-2127 is Final: GET {endpoint}/server-card as application/mcp-server-card+json is a static discovery signal, discovered via /.well-known/ai-catalog.json. /.well-known/mcp.json is the legacy SEP-1649 path. When the static card and a live server/discover response disagree, the live call wins.",
    "parse": "For protocol 2026-07-28, POST a JSON-RPC 2.0 request with method server/discover. The 2026-07-28 specification made MCP stateless and retired initialize, initialized, and Mcp-Session-Id. Each request carries the MCP-Protocol-Version header, and the method and tool name travel in Mcp-Method and Mcp-Name. server/discover is optional; any other request can land on any instance. On success, the returned protocol version (for example 2026-07-28) and the server name prove an MCP server is present. For servers that still speak 2025-11-25 and earlier, fall back to the legacy initialize handshake and read response.result.protocolVersion and response.result.serverInfo.name.",
    "path": "{endpoint}/mcp"
   },
   "question": "How does an AI application call tools and pull structured context, prompts, and data from an external server?",
   "scope": "general",
   "spec_url": "https://modelcontextprotocol.io/specification/2026-07-28",
   "step": "act",
   "summary_md": "The **Model Context Protocol** (**MCP**) is an open protocol that uses `JSON-RPC 2.0` messages to connect LLM host applications with servers that provide context and capabilities. Anthropic introduced it on 2024-11-25 as a universal, open standard for connecting AI systems with data sources. The Linux Foundation's Agentic AI Foundation (AAIF) now stewards MCP as a founding project, alongside Block's goose and OpenAI's AGENTS.md. On `stdio`, the client launches the MCP server as a subprocess; the server reads JSON-RPC messages from `stdin` and writes JSON-RPC messages to `stdout`, delimited by newlines. On Streamable HTTP, every JSON-RPC request is its own HTTP `POST` to a single MCP endpoint, and the server answers with either `Content-Type: application/json` or `Content-Type: text/event-stream`. The 2025-11-25 revision serves as the legacy Streamable HTTP session baseline (succeeding 2025-03-26 and 2024-11-05), while the 2026-07-28 revision retires the `initialize` / `notifications/initialized` handshake, `Mcp-Session-Id` headers, and standalone GET SSE streams. A roadmap published on 2026-08-22 organizes later specification work into five priority areas, picking up server-initiated events, result type improvements, and agent identity, together with HTTP-native transport and SDK developer experience. On 2026-10-30 the official Ruby SDK reached Tier 1, with full support for the 2026-07-28 specification and a 100% conformance pass rate across both scored spec versions. The Ruby SDK team has committed to supporting the next MCP specification, targeted for late March 2027, by its release date.",
   "track": "linux-foundation",
   "use_cases": [
    "expose-tools-to-agents",
    "describe-agent-capabilities",
    "discover-my-api",
    "render-agent-ui"
   ],
   "version": {
    "date": "2026-07-28",
    "label": "2026-07-28"
   },
   "watch": [
    {
     "type": "page",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28/index",
     "selector": "main",
     "cadence": "weekly"
    },
    {
     "type": "github",
     "repo": "modelcontextprotocol/modelcontextprotocol",
     "mode": "tag"
    },
    {
     "type": "feed",
     "url": "https://blog.modelcontextprotocol.io/index.xml"
    },
    {
     "type": "page",
     "url": "https://modelcontextprotocol.io/specification/versioning",
     "selector": "main"
    }
   ],
   "tier": "flagship",
   "lifecycle_status": "active",
   "wire_archetype": "harnesses_rpc_ui",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-11",
   "v05_hatnote_html_md": "This article covers the Model Context Protocol (MCP) for host-to-server context and tool exchange. For the browser DOM API, see [WebMCP](/protocols/webmcp/); for server discovery, see [Official MCP Registry](/protocols/mcp-registry/) and [MCP Server Cards](/protocols/mcp-server-cards/). [1]",
   "v05_elevator_pitch_md": "MCP is a universal connector standard that lets AI applications (such as Claude, VS Code, or Cursor) plug into external data sources and tools (such as GitHub, Stripe, or Notion) without custom point-to-point integration code. Instead of building a bespoke connector for every AI host and external service, developers expose one MCP server with standardized `tools`, `resources`, and `prompts` that any MCP-compatible host can call over local `stdio` or HTTP. [1][2]",
   "v05_lead_md": "The **Model Context Protocol** (**MCP**) is an open protocol that uses `JSON-RPC 2.0` messages to connect LLM host applications with servers that provide context and capabilities. Anthropic introduced it on 2024-11-25 as a universal, open standard for connecting AI systems with data sources. The Linux Foundation's Agentic AI Foundation (AAIF) now stewards MCP as a founding project, alongside Block's goose and OpenAI's AGENTS.md. [1][2][3] On `stdio`, the client launches the MCP server as a subprocess; the server reads JSON-RPC messages from `stdin` and writes JSON-RPC messages to `stdout`, delimited by newlines. On Streamable HTTP, every JSON-RPC request is its own HTTP `POST` to a single MCP endpoint, and the server answers with either `Content-Type: application/json` or `Content-Type: text/event-stream`. [4][5] The 2025-11-25 revision serves as the legacy Streamable HTTP session baseline (succeeding 2025-03-26 and 2024-11-05), while the 2026-07-28 revision retires the `initialize` / `notifications/initialized` handshake, `Mcp-Session-Id` headers, and standalone GET SSE streams. [5][6][7] A roadmap published on 2026-08-22 organizes later specification work into five priority areas, picking up server-initiated events, result type improvements, and agent identity, together with HTTP-native transport and SDK developer experience. [8] On 2026-10-30 the official Ruby SDK reached Tier 1, with full support for the 2026-07-28 specification and a 100% conformance pass rate across both scored spec versions. [9] The Ruby SDK team has committed to supporting the next MCP specification, targeted for late March 2027, by its release date. [9]",
   "v05_identity_sentence_md": "The **Model Context Protocol** (**MCP**) is an open protocol that uses `JSON-RPC 2.0` messages to connect LLM host applications with servers that provide context and capabilities. Anthropic introduced it on 2024-11-25 as a universal, open standard for connecting AI systems with data sources. The Linux Foundation's Agentic AI Foundation (AAIF) now stewards MCP as a founding project, alongside Block's goose and OpenAI's AGENTS.md. [1][2][3]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Act](/category/act/) (`act`)"
    },
    {
     "label": "Form",
     "value_md": "Endpoint (`endpoint`)"
    },
    {
     "label": "Originated by",
     "value_md": "Anthropic; co-invented by David Soria Parra and Justin Spahr-Summers (open-sourced November 2024) [3][10][11]"
    },
    {
     "label": "Governed by",
     "value_md": "Agentic AI Foundation (AAIF) under the Linux Foundation since 2025-12-09; Lead Maintainers hold final decision authority [3][11]"
    },
    {
     "label": "Track",
     "value_md": "Foundation / Consortium Specification (`linux-foundation`); founding project of the Agentic AI Foundation [3]"
    },
    {
     "label": "Status",
     "value_md": "Active open standard; current stateless specification version `2026-07-28` is ready for use; next specification targeted for late March 2027 [9][12]"
    },
    {
     "label": "Version",
     "value_md": "`2026-07-28` (stateless core); prior handshake revisions: `2025-11-25`, `2025-06-18`, `2025-03-26`, and `2024-11-05`; next specification targeted for late March 2027 [1][9][13]"
    },
    {
     "label": "Message format",
     "value_md": "JSON-RPC 2.0 requests, responses, and notifications (`application/json` and `text/event-stream`) [5][14]"
    },
    {
     "label": "Transports",
     "value_md": "`stdio` (newline-delimited JSON-RPC over subprocess streams) and Streamable HTTP (`POST` to one MCP endpoint) [4][5]"
    },
    {
     "label": "Specification",
     "value_md": "[Model Context Protocol Specification (2026-07-28)](https://modelcontextprotocol.io/specification/2026-07-28) [1]"
    },
    {
     "label": "Found at",
     "value_md": "Operator endpoint URL or `server.json` in [Official MCP Registry](/protocols/mcp-registry/); optional [MCP Server Card](/protocols/mcp-server-cards/) at any unreserved URI (with `<streamable-http-url>/server-card` reserved as the recommended location) [15][16]"
    },
    {
     "label": "Licence",
     "value_md": "Apache License 2.0 for outbound code and specifications; CC BY 4.0 for non-specification documentation [11]"
    }
   ],
   "v05_problem_md": "Before MCP, connecting AI assistants to external content repositories and legacy systems required a custom integration for every data source, isolating models behind information silos. Even after MCP standardized JSON-RPC host-to-server connectors, revisions through 2025-11-25 opened a stateful session via an `initialize` handshake and `Mcp-Session-Id` header, preventing follow-up requests from landing freely on any instance behind a plain round-robin load balancer without shared storage. [2][6][7][10] Revision 2026-07-28 puts `io.modelcontextprotocol/protocolVersion` and `io.modelcontextprotocol/clientCapabilities` in `_meta` on every JSON-RPC request, and Streamable HTTP repeats that version in `MCP-Protocol-Version`. A server that needs more input during `tools/call`, `resources/read`, or `prompts/get` returns `InputRequiredResult` with `input_required` instead of starting its own JSON-RPC request. [5][6][17] Servers remain isolated from the full conversation and from other connected servers, while optional protocol extensions require explicit opt-in from both client and server. HTTP authorization is optional and uses OAuth 2.1 Protected Resource Metadata (`RFC 9728`) and Resource Indicators (`RFC 8707`), whereas `stdio` retrieves credentials from the environment. [1][18][19]",
   "v05_mechanism_delta_md": "Revision 2026-07-28 puts `io.modelcontextprotocol/protocolVersion` and `io.modelcontextprotocol/clientCapabilities` in `_meta` on every JSON-RPC request, and Streamable HTTP repeats that version in `MCP-Protocol-Version`. A server that needs more input during `tools/call`, `resources/read`, or `prompts/get` returns `InputRequiredResult` with `input_required` instead of starting its own JSON-RPC request. [5][6][17]",
   "v05_scope_boundary_md": "Servers remain isolated from the full conversation and from other connected servers, while optional protocol extensions require explicit opt-in from both client and server. HTTP authorization is optional and uses OAuth 2.1 Protected Resource Metadata (`RFC 9728`) and Resource Indicators (`RFC 8707`), whereas `stdio` retrieves credentials from the environment. [1][18][19]",
   "v05_fuzzy_additions": [
    {
     "id": "server-discovery-and-stateless-transports-on-stdio-and-streamable-http",
     "heading": "Server discovery and stateless transports on stdio and Streamable HTTP",
     "body_md": "Revision 2026-07-28 replaces the stateful `initialize` session used in 2025-11-25 and earlier with stateless per-request metadata. There is no negotiation handshake: every request declares its protocol version in `_meta` (and, on HTTP, in `MCP-Protocol-Version`) alongside `_meta.io.modelcontextprotocol/clientCapabilities`, and the server accepts or rejects each request independently. Servers advertise supported capabilities and optional `extensions` such as `io.modelcontextprotocol/tasks` through `server/discover`. [7][18]",
     "bullets": [
      {
       "label": "Discover and version mismatch",
       "text_md": "Servers MUST implement `server/discover` (returning `supportedVersions`). Clients MAY skip `server/discover` and handle `UnsupportedProtocolVersionError` (for example, `\"supported\": [ \"2026-07-28\", \"2025-11-25\" ]`), then SHOULD retry a mutually supported version. On `stdio`, a dual-era client SHOULD send `server/discover` before `initialize`. [7][20]"
      },
      {
       "label": "Streamable HTTP request",
       "text_md": "One MCP endpoint supports `POST`. Each JSON-RPC message is its own HTTP POST. Accept MUST list `application/json` and `text/event-stream`. The body is one request or notification, never a response. `MCP-Protocol-Version` MUST match `io.modelcontextprotocol/protocolVersion` in `_meta`. `Mcp-Method` names the method; `Mcp-Name` carries `params.name` or `params.uri` for `tools/call`, `resources/read`, and `prompts/get`. [5]"
      },
      {
       "label": "JSON, SSE, retired sessions, and 2026-07-28 breaking changes",
       "text_md": "A request returns `Content-Type: application/json` or `Content-Type: text/event-stream`; clients MUST support both, and SSE stays scoped to that POST until the final response. Accepted notifications return `202 Accepted` with no body. Revision 2026-07-28 removes `Mcp-Session-Id` sessions and standalone GET SSE streams so cross-call state uses explicit server-minted handles passed as ordinary tool arguments; it also replaces `resources/subscribe` and `resources/unsubscribe` with `subscriptions/listen`, removes `ping`, `logging/setLevel`, `notifications/roots/list_changed`, and `Last-Event-ID` SSE stream resumability, and requires a `resultType` discriminator (`complete` vs. `input_required` in `InputRequiredResult`). [5][6]"
      },
      {
       "label": "`stdio` subprocess framing",
       "text_md": "`stdio` launches the server as a subprocess. JSON-RPC on `stdin` and `stdout` is one newline-delimited message, with no embedded newlines, and `stdout` carries nothing else. Logs MAY use `stderr` and are not an error signal. `stdio` SHOULD NOT follow the HTTP authorization specification; credentials come from the environment. [4][19]"
      }
     ]
    },
    {
     "id": "server-primitives-client-primitives-oauth-2-1-and-security-considerations",
     "heading": "Server primitives, client primitives, OAuth 2.1, and security considerations",
     "body_md": "Servers expose resources, prompts, and tools; clients may expose elicitation, `sampling`, and `roots`. Revision 2026-07-28 deprecates `sampling`, `roots`, and `logging` (`SEP-2577`), along with OAuth Dynamic Client Registration (`PR #2858`), with earliest removal in the first revision released on or after 2027-07-28: implementations SHOULD replace `sampling` with direct LLM provider APIs and pass directories or files via tool parameters or resource URIs instead of `roots`. Server-to-client calls (`roots/list`, `sampling/createMessage`, and `elicitation/create`) MUST use the Multi Round-Trip Requests (`MRTR`) pattern rather than server-initiated requests. [6][14][17][21][22][23]",
     "bullets": [
      {
       "label": "Model-controlled tools",
       "text_md": "Tools are model-controlled, and a person SHOULD be able to deny a call. Servers declare the `tools` capability. `tools/list` MUST NOT vary per-connection, though it MAY follow the request's authorization. `tools/call` MAY return `InputRequiredResult` with `input_required` when the tool needs more input. [24]"
      },
      {
       "label": "Resources, prompts, and JSON-RPC 2.0 server error codes",
       "text_md": "Resources are application-driven and identified by a URI; clients call `resources/list` and `resources/read`, while servers that advertise the `resources` `listChanged` or `subscribe` capability flags deliver resource-specific update notifications when clients subscribe via `subscriptions/listen` (`notifications.resourceSubscriptions`). Prompts are user-controlled templates—often surfaced as slash commands—accessed via `prompts/list` and `prompts/get` (neither list may vary per-connection). MCP partitions the JSON-RPC 2.0 server-error block (`-32000` to `-32099`) into `-32000` to `-32019` for legacy implementation-defined server errors (where `-32002` was used in 2025-11-25 and earlier for resource not found before 2026-07-28 standardized `-32602`) and `-32020` to `-32099` reserved for the MCP specification (`-32020` `HeaderMismatch`, `-32021` `MissingRequiredClientCapability`, `-32022` `UnsupportedProtocolVersion`, plus reserved 2025-11-25 code `-32042` for URL elicitation required). [6][14][25][26]"
      },
      {
       "label": "Elicitation, sampling, roots, and security considerations",
       "text_md": "Elicitation runs inside another call: Form mode takes structured data with an optional JSON schema, while URL mode is required for passwords, API keys, access tokens, and payment credentials so they do not pass through the client, and on resumption the server checks the echoed `requestState` before returning a final result. `sampling` requests model output via the client without server API keys, and `roots` are informational filesystem guidance that the protocol does not enforce. For trust, safety, and security, `serverInfo` is self-reported and unverified (clients SHOULD NOT use it to change behavior or make security decisions), and clients MUST consider tool annotations untrusted unless received from trusted servers. MCP servers MUST NOT accept tokens not explicitly issued for the server, and local `stdio` servers from untrusted sources carry arbitrary code execution risks. [20][21][22][24][27][28]"
      },
      {
       "label": "OAuth 2.1 resource metadata",
       "text_md": "Authorization is OPTIONAL; `stdio` SHOULD NOT follow it. Servers MUST publish `RFC 9728` Protected Resource Metadata, which clients use to discover the authorization server. `RFC 8707` requires `resource` on authorization and token requests, set to the canonical URI. `client_id` is an HTTPS URL when `client_id_metadata_document_supported` is set, and the document MUST include `client_id`, `client_name`, and `redirect_uris`. `RFC 7591` is deprecated as of 2026-07-28. Authorization servers SHOULD include the `iss` parameter in authorization responses per `RFC 9207`, and MCP clients MUST validate a present `iss` against the recorded issuer before redeeming the authorization code (`SEP-2468`). Client credentials are bound to the issuing authorization server: clients MUST key persisted credentials by the issuer identifier and MUST NOT reuse them with a different authorization server (`SEP-2352`). [6][19][23][29]"
      }
     ]
    }
   ],
   "v05_diagram": {
    "title": "Client-host-server architecture",
    "heading": "Client-host-server architecture",
    "mermaid": "flowchart LR\n  subgraph Host[\"Host application\"]\n    Coord[\"Coordinator: consent, auth, context\"]\n    C1[\"Client 1\"]\n    C2[\"Client 2\"]\n    Coord --> C1\n    Coord --> C2\n  end\n  S1[\"Server: local process\"]\n  S2[\"Server: remote service\"]\n  C1 <-->|\"JSON-RPC, 1:1\"| S1\n  C2 <-->|\"JSON-RPC, 1:1\"| S2",
    "caption_md": "A host application creates and manages multiple clients, each with a `1:1` relationship to one server. Those servers can be local processes or remote services. MCP is a stateless protocol built on `JSON-RPC`: every request is self-contained and carries its own protocol version and capabilities. [18]"
   },
   "v05_wire_artifact": {
    "title": "server/discover request and response (2026-07-28)",
    "heading": "server/discover request and response (2026-07-28)",
    "lang": "json",
    "code": "{\n  \"jsonrpc\": \"2.0\",\n  \"id\": \"discover-1\",\n  \"method\": \"server/discover\",\n  \"params\": {\n    \"_meta\": {\n      \"io.modelcontextprotocol/protocolVersion\": \"2026-07-28\",\n      \"io.modelcontextprotocol/clientInfo\": {\n        \"name\": \"ExampleClient\",\n        \"version\": \"1.0.0\"\n      },\n      \"io.modelcontextprotocol/clientCapabilities\": {}\n    }\n  }\n}\n\n{\n  \"jsonrpc\": \"2.0\",\n  \"id\": \"discover-1\",\n  \"result\": {\n    \"resultType\": \"complete\",\n    \"supportedVersions\": [\"2026-07-28\"],\n    \"capabilities\": {\n      \"tools\": {},\n      \"resources\": {}\n    },\n    \"_meta\": {\n      \"io.modelcontextprotocol/serverInfo\": {\n        \"name\": \"ExampleServer\",\n        \"version\": \"1.0.0\"\n      }\n    },\n    \"instructions\": \"This server provides weather and resource utilities.\",\n    \"ttlMs\": 3600000,\n    \"cacheScope\": \"public\"\n  }\n}",
    "caption_md": "`server/discover` request and response (servers MUST implement `server/discover`; clients MAY skip it before sending other requests). The result carries protocol version `2026-07-28`, capabilities, and identity in `_meta`, with `ttlMs` and `cacheScope`, in place of the legacy `initialize` handshake. [20]"
   },
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "JSON-RPC 2.0 Specification",
      "spec_or_rfc": "JSON-RPC 2.0",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "Profiles JSON-RPC 2.0 over stdio or Streamable HTTP POST with stateless per-request version and capability metadata in `_meta`. [6][14]"
     },
     {
      "name": "Language Server Protocol (LSP)",
      "spec_or_rfc": "LSP",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "Adapts LSP's reusable client-server architecture from IDE language intelligence to AI host integration with tools, resources, and prompts. [1]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "a2a",
      "target_name": "Agent2Agent Protocol (A2A)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "A2A delegates multi-turn tasks between opaque peer agents, whereas MCP connects a host client to server tools and resources. [1]"
     },
     {
      "target_id": "webmcp",
      "target_name": "WebMCP",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "WebMCP registers page-scoped tools on `document.modelContext` in browser JavaScript, whereas MCP connects hosts to stdio or HTTP servers. [4][5][30]"
     },
     {
      "target_id": "mcp-apps",
      "target_name": "MCP Apps",
      "relation_type": "has_component",
      "relation_label": "Has component",
      "delta_md": "SEP-1865 extension declaring interactive `ui://` resources linked to tools for bidirectional host-iframe communication. [31]"
     },
     {
      "target_id": "mcp-registry",
      "target_name": "Official MCP Registry",
      "relation_type": "has_component",
      "relation_label": "Has component",
      "delta_md": "Centralized preview metadata index publishing `server.json` records for public MCP packages and remote server URLs. [15]"
     },
     {
      "target_id": "ag-ui",
      "target_name": "Agent-User Interaction Protocol (AG-UI)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "AG-UI streams agent-to-frontend UI state events over HTTP, whereas MCP connects the backend agent host to tool servers. [1]"
     },
     {
      "target_id": "anthropic-agent-skills-format",
      "target_name": "Agent Skills",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Packages filesystem `SKILL.md` workflow instructions, which MCP also exposes dynamically through the optional Skills over MCP extension. [1]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (22 probed or cited examples across 4 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).",
    "side_a": {
     "visible": true,
     "heading": "MCP Servers (Remote Endpoints & Local Packages)",
     "col4_header": "Transport, Capabilities & Scope",
     "note_md": "HTTP 200 and HTTP 401 probe responses and vendor documentation establish endpoint presence or declared support as of the stated check date rather than verified 2026-07-28 wire conformance. [7]",
     "rows": [
      {
       "actor": "Hugging Face",
       "role": "Remote MCP server",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Streamable HTTP at `https://huggingface.co/mcp` returning `2026-07-28`, `tools`, `resources`, and `io.modelcontextprotocol/skills`.",
       "source_md": "[huggingface.co/mcp](https://huggingface.co/mcp) [32] · [HF Hub MCP docs](https://huggingface.co/docs/hub/agents-mcp) [33]"
      },
      {
       "actor": "Cloudflare Docs",
       "role": "Remote MCP server",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Streamable HTTP at `https://docs.mcp.cloudflare.com/mcp` (`docs-ai-search` `0.5.0`) advertising `2026-07-28`, `tools`, and `prompts`.",
       "source_md": "[docs.mcp.cloudflare.com/mcp](https://docs.mcp.cloudflare.com/mcp) [34] · [Cloudflare MCP servers](https://developers.cloudflare.com/agents/model-context-protocol/cloudflare/servers-for-cloudflare/) [35]"
      },
      {
       "actor": "GitHub",
       "role": "Remote & local MCP server",
       "status": "Live (HTTP 401)",
       "status_display": "Live (HTTP 401) · checked 2026-10-30",
       "col4_md": "Remote HTTP server at `https://api.githubcopilot.com/mcp/` with OAuth `resource_metadata` challenge and Go `stdio` server.",
       "source_md": "[api.githubcopilot.com/mcp/](https://api.githubcopilot.com/mcp/) [36] · [github/github-mcp-server](https://github.com/github/github-mcp-server) [37]"
      },
      {
       "actor": "Stripe",
       "role": "Remote & local MCP server",
       "status": "Live (HTTP 401)",
       "status_display": "Live (HTTP 401) · checked 2026-10-30",
       "col4_md": "Remote server at `https://mcp.stripe.com` with OAuth `resource_metadata` challenge, Agent API keys, and `missing_api_key` error.",
       "source_md": "[mcp.stripe.com](https://mcp.stripe.com) [38] · [Stripe MCP docs](https://docs.stripe.com/mcp) [39]"
      },
      {
       "actor": "Linear",
       "role": "Remote MCP server",
       "status": "Live (HTTP 401)",
       "status_display": "Live (HTTP 401) · checked 2026-10-30",
       "col4_md": "Streamable HTTP at `https://mcp.linear.app/mcp` with OAuth 2.1 `resource_metadata` challenge and `https://mcp.linear.app/mcp/readonly`.",
       "source_md": "[mcp.linear.app/mcp](https://mcp.linear.app/mcp) [40] · [Linear MCP docs](https://linear.app/docs/mcp) [41]"
      },
      {
       "actor": "Atlassian Rovo",
       "role": "Remote MCP server",
       "status": "Listed",
       "status_display": "Listed · as of 2026-09-09",
       "col4_md": "Registry entry `com.atlassian/atlassian-mcp-server` (`2.0.0`) advertising `streamable-http` at `https://mcp.atlassian.com/v2/mcp` and `https://mcp.atlassian.com/v1/mcp/authv2`.",
       "source_md": "[MCP Registry (v2.0.0)](https://registry.modelcontextprotocol.io/v0.1/servers/com.atlassian%2Fatlassian-mcp-server/versions/2.0.0) [42]"
      },
      {
       "actor": "Notion",
       "role": "Remote MCP server",
       "status": "Listed",
       "status_display": "Listed · as of 2025-09-11",
       "col4_md": "Registry entry `com.notion/mcp` (`1.0.1`) advertising `streamable-http` (`https://mcp.notion.com/mcp`) and `sse` (`https://mcp.notion.com/sse`).",
       "source_md": "[MCP Registry (v1.0.1)](https://registry.modelcontextprotocol.io/v0.1/servers/com.notion%2Fmcp/versions/1.0.1) [43]"
      },
      {
       "actor": "Microsoft Playwright",
       "role": "Local MCP server",
       "status": "Listed",
       "status_display": "Listed · as of 2026-09-18",
       "col4_md": "Registry entry `io.github.microsoft/playwright-mcp` (`0.0.82`) distributing npm package `@playwright/mcp` over local `stdio`.",
       "source_md": "[MCP Registry (v0.0.82)](https://registry.modelcontextprotocol.io/v0.1/servers/io.github.microsoft%2Fplaywright-mcp/versions/0.0.82) [44]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "AI Host Applications & IDEs",
     "col4_header": "Transport, Capabilities & Scope",
     "note_md": "Vendor documentation and release notes establish declared client and harness support rather than verified 2026-07-28 wire conformance. [7]",
     "rows": [
      {
       "actor": "Claude",
       "role": "AI host application",
       "status": "Partial",
       "status_display": "Partial · as of 2026-10-30",
       "col4_md": "Remote MCP connectors (OAuth or headers) and local `claude_desktop_config.json` servers; stateless `2026-07-28` rollout in progress.",
       "source_md": "[Claude remote MCP connectors](https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp) [45] · [Bringing MCP 2026-07-28 to Claude](https://claude.com/resources/articles/bringing-mcp-2026-07-28-to-claude) [46]"
      },
      {
       "actor": "Visual Studio Code",
       "role": "IDE host",
       "status": "Supported",
       "status_display": "Supported · as of 2025-06-12",
       "col4_md": "Supports `streamable HTTP` and local transports, OAuth resource-server authorization, `tools`, `prompts`, `resources`, and `sampling`.",
       "source_md": "[VS Code full MCP spec support](https://code.visualstudio.com/blogs/2025/06/12/full-mcp-spec-support) [47]"
      },
      {
       "actor": "Cursor",
       "role": "IDE host",
       "status": "Supported",
       "status_display": "Supported · as of 2025-06-04",
       "col4_md": "Supports one-click MCP server installation and OAuth authentication in Cursor `1.0`.",
       "source_md": "[Cursor 1.0 changelog](https://cursor.com/changelog/1-0) [48]"
      },
      {
       "actor": "Gemini CLI",
       "role": "CLI coding agent",
       "status": "Supported",
       "status_display": "Supported · as of 2025-06-25",
       "col4_md": "Open-source (`Apache 2.0`) terminal agent with built-in Model Context Protocol client support and bundled extensions.",
       "source_md": "[Introducing Gemini CLI](https://blog.google/innovation-and-ai/technology/developers-tools/introducing-gemini-cli-open-source-ai-agent/) [49]"
      },
      {
       "actor": "Microsoft Foundry",
       "role": "Enterprise agent platform",
       "status": "Supported (release announcement)",
       "status_display": "Supported (release announcement) · as of 2026-07-28",
       "col4_md": "Release announcement claims unified MCP endpoint with stateless `2026-07-28` and `Tasks`; no independent feature-matrix verification.",
       "source_md": "[MCP 2026-07-28 release blog](https://blog.modelcontextprotocol.io/posts/2026-07-28/) [10]"
      }
     ]
    },
    "additional_tables": [
     {
      "visible": true,
      "heading": "Registries, Directories & Discovery Indexes",
      "col4_header": "Catalog & ingestion model",
      "note_md": "Discovery catalogs and sub-registries that index `server.json` metadata or crawl public MCP server packages (see also [MCP Registry](/protocols/mcp-registry/)). [15][50]",
      "rows": [
       {
        "actor": "Official MCP Registry",
        "role": "Central metadata repository",
        "status": "Supported (preview)",
        "status_display": "Supported (preview) · checked 2026-10-30",
        "col4_md": "Official `server.json` catalog (`GET /v0.1/servers`) at `https://registry.modelcontextprotocol.io` for downstream aggregators.",
        "source_md": "[The MCP Registry](https://modelcontextprotocol.io/registry/about) [15] · [MCP Registry Aggregators](https://modelcontextprotocol.io/registry/registry-aggregators) [50]"
       },
       {
        "actor": "GitHub MCP Registry",
        "role": "Sub-registry & IDE directory",
        "status": "Supported",
        "status_display": "Supported · as of 2025-09-16",
        "col4_md": "Ingests servers self-published to the OSS MCP Community Registry into GitHub and VS Code.",
        "source_md": "[Meet the GitHub MCP Registry](https://github.blog/ai-and-ml/github-copilot/meet-the-github-mcp-registry-the-fastest-way-to-discover-mcp-servers/) [51]"
       },
       {
        "actor": "Glama",
        "role": "Aggregator & sandbox index",
        "status": "Supported",
        "status_display": "Supported · checked 2026-10-30",
        "col4_md": "Ingests the official registry and layers sandbox schema captures, behavioral analysis, and TDQS scores.",
        "source_md": "[Glama MCP methodology](https://glama.ai/mcp/methodology) [52]"
       },
       {
        "actor": "PulseMCP",
        "role": "Sub-registry & directory",
        "status": "Partial",
        "status_display": "Partial · as of 2025-09-09",
        "col4_md": "Ingests the Official MCP Registry as a downstream sub-registry supplemented with web indexing; live directory temporarily pauses new submissions.",
        "source_md": "[PulseMCP Work With Us](https://www.pulsemcp.com/work-with-us) [53] · [PulseMCP Official Registry launch](https://www.pulsemcp.com/posts/newsletter-claude-code-competition-ai-fundraising-abounds-mcp-registry-launch) [54] · [PulseMCP server directory](https://www.pulsemcp.com/servers/) [55]"
       },
       {
        "actor": "MCP Census",
        "role": "Trust-layer census over registries",
        "status": "Listed",
        "status_display": "Listed · as of 2026-11-04",
        "col4_md": "Trust layer returning PASS, REVIEW, BLOCK, or UNKNOWN; `57,777` rows.",
        "source_md": "[MCP registries compared](https://mcpcensus.com/compare/mcp-registries) [56]"
       }
      ]
     },
     {
      "visible": true,
      "heading": "SDKs, Runtimes & Developer Tooling",
      "col4_header": "Supported languages / packaging",
      "note_md": "Reference protocol SDKs, serverless hosting frameworks, local archive formats, and conformance debuggers used to build and test MCP clients and servers. [57]",
      "rows": [
       {
        "actor": "Official MCP SDKs",
        "role": "Client & server SDKs",
        "status": "Partial",
        "status_display": "Partial · as of 2026-10-30",
        "col4_md": "Current `Tier 1` roster lists 6 official SDKs (`TypeScript`, `Python`, `C#`, `Go`, `Rust`, and `Ruby`), plus Tier 2 `Java` and Tier 3 `Kotlin`, `Swift`, and `PHP` (July 2026 release covered `TypeScript`, `Python`, `Go`, `C#`, and `Rust` beta). The official Ruby SDK reached Tier 1 on 2026-10-30, with full support for the 2026-07-28 specification and a 100% conformance pass rate across both scored spec versions.",
        "source_md": "[Official MCP SDKs](https://modelcontextprotocol.io/docs/sdk) [57] · [MCP 2026-07-28 release blog](https://blog.modelcontextprotocol.io/posts/2026-07-28/) [10] · [MCP Ruby SDK versions](https://ruby.sdk.modelcontextprotocol.io/protocol-versions/) [13] · [Ruby SDK reaches Tier 1](https://blog.modelcontextprotocol.io/posts/ruby-sdk-tier-1/) [9]"
       },
       {
        "actor": "MCP Inspector",
        "role": "Developer testing client",
        "status": "Supported",
        "status_display": "Supported · as of 2026-07-28",
        "col4_md": "Reference `@modelcontextprotocol/inspector` package providing Web, `--cli`, and `--tui` clients across `stdio` and HTTP for `2026-07-28`.",
        "source_md": "[MCP Inspector docs](https://modelcontextprotocol.io/docs/tools/inspector) [58]"
       },
       {
        "actor": "Cloudflare Agents SDK",
        "role": "Server & client runtime",
        "status": "Supported",
        "status_display": "Supported · as of 2026-10-27",
        "col4_md": "Workers runtime supporting stateless `2026-07-28` MCP servers, `Streamable HTTP`, `insufficientScope()` OAuth challenges, and `MCPClientManager`.",
        "source_md": "[Cloudflare Agents MCP docs](https://developers.cloudflare.com/agents/model-context-protocol/) [59] · [MCP 2026-07-28 blog](https://blog.modelcontextprotocol.io/posts/2026-07-28/) [10]"
       },
       {
        "actor": "MCP Bundles (MCPB)",
        "role": "Local server bundle format",
        "status": "Supported",
        "status_display": "Supported · checked 2026-10-30",
        "col4_md": "Zip archive format (`.mcpb`, formerly `.dxt`) bundling a local MCP server with `manifest.json` via `@anthropic-ai/mcpb`.",
        "source_md": "[modelcontextprotocol/mcpb](https://raw.githubusercontent.com/modelcontextprotocol/mcpb/main/README.md) [60]"
       }
      ]
     }
    ],
    "censuses": [
     {
      "label": "One Year of MCP (2025-11-25)",
      "as_of": "2025-11-25",
      "value_md": "Close to 2,000 server entries indexed in the Official MCP Registry as of November 25, 2025, representing 407% growth from the initial batch onboarded at the registry's September 2025 launch. [61]"
     },
     {
      "label": "Anthropic AAIF donation announcement (2025-12-09)",
      "as_of": "2025-12-09",
      "value_md": "More than 10,000 active public MCP servers published across the ecosystem as of December 9, 2025, when Anthropic donated MCP to the Linux Foundation's Agentic AI Foundation. [62]"
     },
     {
      "label": "MCP 2026-07-28 release announcement",
      "as_of": "2026-07-28",
      "value_md": "Close to 500 million monthly downloads across official Tier 1 MCP SDKs as of July 28, 2026, with both the TypeScript and Python SDKs surpassing 1 billion total downloads. [10]"
     },
     {
      "label": "MCP registries compared (read 4 November 2026)",
      "as_of": "2026-11-04",
      "value_md": "On 4 November 2026 the MCP Census comparison records Glama at 115,336 servers (Remote 45,340, Local 43,442), its own census at 57,777 server rows, PulseMCP at 21,602 servers, and the Docker MCP Catalog at 300+ servers. Smithery's API, Connect, accounts, CLI, and proxy URLs stopped on 31 October 2026. [56]"
     },
     {
      "label": "State of MCP Server Development (LocalCan, checked 14 October 2026)",
      "as_of": "2026-10-14",
      "value_md": "LocalCan's census, measured on 14 October 2026, counts 43,012 active servers in the official MCP Registry. Across that set, 59.6% are remote-only, 34.6% ship only as a package, 4.7% offer both, and 1.1% list neither. [63]"
     },
     {
      "label": "MCP server directories (Apideck, 31 October 2026)",
      "as_of": "2026-10-31",
      "value_md": "Apideck's 31 October 2026 table counts the official registry API at 53,541 servers, Glama at 113,204 servers and 40,151 connectors, PulseMCP at 21,614, MCP Market at 50,999, and the Cursor Marketplace at about 490 plugins. [64]"
     },
     {
      "label": "MCP-Eco (arXiv HTML, Parquet export 2026-06-23)",
      "as_of": "2026-06-23",
      "value_md": "The MCP-Eco frozen release, exported to Parquet on 2026-06-23, covers 78,302 candidate server projects. Its crawler queries the official MCP registry, Glama, Smithery, and PulseMCP, and reads MCP.so listing pages found through sitemaps. [65]"
     }
    ],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "mcp-server-cards",
     "target_name": "MCP Server Cards",
     "relation_label": "Has component",
     "delta": "SEP-2127 is the MCP extension whose Server Card is read with `GET <endpoint>/server-card` before the client connects, and the card omits the tools, resources, and prompts the live server still provides.",
     "item_md": "**[MCP Server Cards](/protocols/mcp-server-cards/)** (Has component) — SEP-2127 is the MCP extension whose Server Card is read with `GET <endpoint>/server-card` before the client connects, and the card omits the tools, resources, and prompts the live server still provides."
    },
    {
     "item_md": "**Depended on by:** [Ad Context Protocol (AdCP)](/protocols/adcp/), [Agentic Real Time Framework](/protocols/artf/), [Coral Protocol (CoralOS)](/protocols/coral-protocol/), [Discovery of Model Context Protocol Servers via DNS TXT Records](/protocols/mcp-dns-discovery/), [KYA-OS (Know Your Agent Operating System)](/protocols/kya-os/), [OpenAI Apps SDK manifests](/protocols/openai-apps-sdk-manifests/), [Per-Call Proof for Local Tool Invocation by AI Agents](/protocols/local-tool-call-proof/)"
    },
    {
     "item_md": "**Peer alternatives:** [Agent Protocol](/protocols/agent-protocol-aief/), [agents.json](/protocols/agents-json/)"
    },
    {
     "item_md": "**Complements:** [A2UI (Agent to UI) Protocol](/protocols/a2ui/), [Agent Client Protocol](/protocols/agent-client-protocol/), [Agentic Commerce Protocol](/protocols/agentic-commerce-protocol/), [AGENTS.md](/protocols/agents-md/), [ERC-8004: Trustless Agents](/protocols/erc-8004/), [L402](/protocols/l402/), [OAuth Client ID Metadata Document](/protocols/oauth-cimd/), [OAuth Protected Resource and Authorization Server Metadata (as used for agent authorization)](/protocols/oauth-metadata-for-agents/), [Open Responses](/protocols/open-responses/), [Universal Commerce Protocol (UCP)](/protocols/ucp/), and [32 more in the protocol directory](/protocols/)"
    },
    {
     "item_md": "**[Act protocols](/category/act/)** — Category index for `act` standards."
    }
   ],
   "v05_compiled_md": "---\nid: mcp\ntitle: \"Model Context Protocol\"\ntier: flagship\nlifecycle_status: active\ncategory: act\nform: endpoint\nwire_archetype: harnesses_rpc_ui\nspec_url: https://modelcontextprotocol.io/specification/2026-07-28\nlast_checked: 2026-11-11\n---\n\n# Model Context Protocol\n\n**Category:** [Act](/category/act/) (`act`) · **Form:** Endpoint (`endpoint`) · **Last checked:** 2026-11-11\n\n> *This article covers the Model Context Protocol (MCP) for host-to-server context and tool exchange. For the browser DOM API, see [WebMCP](/protocols/webmcp/); for server discovery, see [Official MCP Registry](/protocols/mcp-registry/) and [MCP Server Cards](/protocols/mcp-server-cards/). [1]*\n\n> **In brief:** MCP is a universal connector standard that lets AI applications (such as Claude, VS Code, or Cursor) plug into external data sources and tools (such as GitHub, Stripe, or Notion) without custom point-to-point integration code. Instead of building a bespoke connector for every AI host and external service, developers expose one MCP server with standardized `tools`, `resources`, and `prompts` that any MCP-compatible host can call over local `stdio` or HTTP. [1][2]\n\nThe **Model Context Protocol** (**MCP**) is an open protocol that uses `JSON-RPC 2.0` messages to connect LLM host applications with servers that provide context and capabilities. Anthropic introduced it on 2024-11-25 as a universal, open standard for connecting AI systems with data sources. The Linux Foundation's Agentic AI Foundation (AAIF) now stewards MCP as a founding project, alongside Block's goose and OpenAI's AGENTS.md. [1][2][3] On `stdio`, the client launches the MCP server as a subprocess; the server reads JSON-RPC messages from `stdin` and writes JSON-RPC messages to `stdout`, delimited by newlines. On Streamable HTTP, every JSON-RPC request is its own HTTP `POST` to a single MCP endpoint, and the server answers with either `Content-Type: application/json` or `Content-Type: text/event-stream`. [4][5] The 2025-11-25 revision serves as the legacy Streamable HTTP session baseline (succeeding 2025-03-26 and 2024-11-05), while the 2026-07-28 revision retires the `initialize` / `notifications/initialized` handshake, `Mcp-Session-Id` headers, and standalone GET SSE streams. [5][6][7] A roadmap published on 2026-08-22 organizes later specification work into five priority areas, picking up server-initiated events, result type improvements, and agent identity, together with HTTP-native transport and SDK developer experience. [8] On 2026-10-30 the official Ruby SDK reached Tier 1, with full support for the 2026-07-28 specification and a 100% conformance pass rate across both scored spec versions. [9] The Ruby SDK team has committed to supporting the next MCP specification, targeted for late March 2027, by its release date. [9]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Act](/category/act/) (`act`) |\n| **Form** | Endpoint (`endpoint`) |\n| **Originated by** | Anthropic; co-invented by David Soria Parra and Justin Spahr-Summers (open-sourced November 2024) [3][10][11] |\n| **Governed by** | Agentic AI Foundation (AAIF) under the Linux Foundation since 2025-12-09; Lead Maintainers hold final decision authority [3][11] |\n| **Track** | Foundation / Consortium Specification (`linux-foundation`); founding project of the Agentic AI Foundation [3] |\n| **Status** | Active open standard; current stateless specification version `2026-07-28` is ready for use; next specification targeted for late March 2027 [9][12] |\n| **Version** | `2026-07-28` (stateless core); prior handshake revisions: `2025-11-25`, `2025-06-18`, `2025-03-26`, and `2024-11-05`; next specification targeted for late March 2027 [1][9][13] |\n| **Message format** | JSON-RPC 2.0 requests, responses, and notifications (`application/json` and `text/event-stream`) [5][14] |\n| **Transports** | `stdio` (newline-delimited JSON-RPC over subprocess streams) and Streamable HTTP (`POST` to one MCP endpoint) [4][5] |\n| **Specification** | [Model Context Protocol Specification (2026-07-28)](https://modelcontextprotocol.io/specification/2026-07-28) [1] |\n| **Found at** | Operator endpoint URL or `server.json` in [Official MCP Registry](/protocols/mcp-registry/); optional [MCP Server Card](/protocols/mcp-server-cards/) at any unreserved URI (with `<streamable-http-url>/server-card` reserved as the recommended location) [15][16] |\n| **Licence** | Apache License 2.0 for outbound code and specifications; CC BY 4.0 for non-specification documentation [11] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Server discovery and stateless transports on stdio and Streamable HTTP](#server-discovery-and-stateless-transports-on-stdio-and-streamable-http)\n3. [Server primitives, client primitives, OAuth 2.1, and security considerations](#server-primitives-client-primitives-oauth-2-1-and-security-considerations)\n4. [Counterparts and related standards](#counterparts-and-related-standards)\n5. [Adoption and ecosystem](#adoption-and-ecosystem)\n6. [See also](#see-also)\n7. [References](#references)\n\n---\n\n## Problem and scope\n\nBefore MCP, connecting AI assistants to external content repositories and legacy systems required a custom integration for every data source, isolating models behind information silos. Even after MCP standardized JSON-RPC host-to-server connectors, revisions through 2025-11-25 opened a stateful session via an `initialize` handshake and `Mcp-Session-Id` header, preventing follow-up requests from landing freely on any instance behind a plain round-robin load balancer without shared storage. [2][6][7][10] Revision 2026-07-28 puts `io.modelcontextprotocol/protocolVersion` and `io.modelcontextprotocol/clientCapabilities` in `_meta` on every JSON-RPC request, and Streamable HTTP repeats that version in `MCP-Protocol-Version`. A server that needs more input during `tools/call`, `resources/read`, or `prompts/get` returns `InputRequiredResult` with `input_required` instead of starting its own JSON-RPC request. [5][6][17] Servers remain isolated from the full conversation and from other connected servers, while optional protocol extensions require explicit opt-in from both client and server. HTTP authorization is optional and uses OAuth 2.1 Protected Resource Metadata (`RFC 9728`) and Resource Indicators (`RFC 8707`), whereas `stdio` retrieves credentials from the environment. [1][18][19]\n\n### Client-host-server architecture\n\n```mermaid\nflowchart LR\n  subgraph Host[\"Host application\"]\n    Coord[\"Coordinator: consent, auth, context\"]\n    C1[\"Client 1\"]\n    C2[\"Client 2\"]\n    Coord --> C1\n    Coord --> C2\n  end\n  S1[\"Server: local process\"]\n  S2[\"Server: remote service\"]\n  C1 <-->|\"JSON-RPC, 1:1\"| S1\n  C2 <-->|\"JSON-RPC, 1:1\"| S2\n```\n\n*A host application creates and manages multiple clients, each with a `1:1` relationship to one server. Those servers can be local processes or remote services. MCP is a stateless protocol built on `JSON-RPC`: every request is self-contained and carries its own protocol version and capabilities. [18]*\n\n### server/discover request and response (2026-07-28)\n\n```json\n{\n  \"jsonrpc\": \"2.0\",\n  \"id\": \"discover-1\",\n  \"method\": \"server/discover\",\n  \"params\": {\n    \"_meta\": {\n      \"io.modelcontextprotocol/protocolVersion\": \"2026-07-28\",\n      \"io.modelcontextprotocol/clientInfo\": {\n        \"name\": \"ExampleClient\",\n        \"version\": \"1.0.0\"\n      },\n      \"io.modelcontextprotocol/clientCapabilities\": {}\n    }\n  }\n}\n\n{\n  \"jsonrpc\": \"2.0\",\n  \"id\": \"discover-1\",\n  \"result\": {\n    \"resultType\": \"complete\",\n    \"supportedVersions\": [\"2026-07-28\"],\n    \"capabilities\": {\n      \"tools\": {},\n      \"resources\": {}\n    },\n    \"_meta\": {\n      \"io.modelcontextprotocol/serverInfo\": {\n        \"name\": \"ExampleServer\",\n        \"version\": \"1.0.0\"\n      }\n    },\n    \"instructions\": \"This server provides weather and resource utilities.\",\n    \"ttlMs\": 3600000,\n    \"cacheScope\": \"public\"\n  }\n}\n```\n\n*`server/discover` request and response (servers MUST implement `server/discover`; clients MAY skip it before sending other requests). The result carries protocol version `2026-07-28`, capabilities, and identity in `_meta`, with `ttlMs` and `cacheScope`, in place of the legacy `initialize` handshake. [20]*\n\n---\n\n## Server discovery and stateless transports on stdio and Streamable HTTP\n\nRevision 2026-07-28 replaces the stateful `initialize` session used in 2025-11-25 and earlier with stateless per-request metadata. There is no negotiation handshake: every request declares its protocol version in `_meta` (and, on HTTP, in `MCP-Protocol-Version`) alongside `_meta.io.modelcontextprotocol/clientCapabilities`, and the server accepts or rejects each request independently. Servers advertise supported capabilities and optional `extensions` such as `io.modelcontextprotocol/tasks` through `server/discover`. [7][18]\n\n- **Discover and version mismatch:** Servers MUST implement `server/discover` (returning `supportedVersions`). Clients MAY skip `server/discover` and handle `UnsupportedProtocolVersionError` (for example, `\"supported\": [ \"2026-07-28\", \"2025-11-25\" ]`), then SHOULD retry a mutually supported version. On `stdio`, a dual-era client SHOULD send `server/discover` before `initialize`. [7][20]\n- **Streamable HTTP request:** One MCP endpoint supports `POST`. Each JSON-RPC message is its own HTTP POST. Accept MUST list `application/json` and `text/event-stream`. The body is one request or notification, never a response. `MCP-Protocol-Version` MUST match `io.modelcontextprotocol/protocolVersion` in `_meta`. `Mcp-Method` names the method; `Mcp-Name` carries `params.name` or `params.uri` for `tools/call`, `resources/read`, and `prompts/get`. [5]\n- **JSON, SSE, retired sessions, and 2026-07-28 breaking changes:** A request returns `Content-Type: application/json` or `Content-Type: text/event-stream`; clients MUST support both, and SSE stays scoped to that POST until the final response. Accepted notifications return `202 Accepted` with no body. Revision 2026-07-28 removes `Mcp-Session-Id` sessions and standalone GET SSE streams so cross-call state uses explicit server-minted handles passed as ordinary tool arguments; it also replaces `resources/subscribe` and `resources/unsubscribe` with `subscriptions/listen`, removes `ping`, `logging/setLevel`, `notifications/roots/list_changed`, and `Last-Event-ID` SSE stream resumability, and requires a `resultType` discriminator (`complete` vs. `input_required` in `InputRequiredResult`). [5][6]\n- **`stdio` subprocess framing:** `stdio` launches the server as a subprocess. JSON-RPC on `stdin` and `stdout` is one newline-delimited message, with no embedded newlines, and `stdout` carries nothing else. Logs MAY use `stderr` and are not an error signal. `stdio` SHOULD NOT follow the HTTP authorization specification; credentials come from the environment. [4][19]\n\n---\n\n## Server primitives, client primitives, OAuth 2.1, and security considerations\n\nServers expose resources, prompts, and tools; clients may expose elicitation, `sampling`, and `roots`. Revision 2026-07-28 deprecates `sampling`, `roots`, and `logging` (`SEP-2577`), along with OAuth Dynamic Client Registration (`PR #2858`), with earliest removal in the first revision released on or after 2027-07-28: implementations SHOULD replace `sampling` with direct LLM provider APIs and pass directories or files via tool parameters or resource URIs instead of `roots`. Server-to-client calls (`roots/list`, `sampling/createMessage`, and `elicitation/create`) MUST use the Multi Round-Trip Requests (`MRTR`) pattern rather than server-initiated requests. [6][14][17][21][22][23]\n\n- **Model-controlled tools:** Tools are model-controlled, and a person SHOULD be able to deny a call. Servers declare the `tools` capability. `tools/list` MUST NOT vary per-connection, though it MAY follow the request's authorization. `tools/call` MAY return `InputRequiredResult` with `input_required` when the tool needs more input. [24]\n- **Resources, prompts, and JSON-RPC 2.0 server error codes:** Resources are application-driven and identified by a URI; clients call `resources/list` and `resources/read`, while servers that advertise the `resources` `listChanged` or `subscribe` capability flags deliver resource-specific update notifications when clients subscribe via `subscriptions/listen` (`notifications.resourceSubscriptions`). Prompts are user-controlled templates—often surfaced as slash commands—accessed via `prompts/list` and `prompts/get` (neither list may vary per-connection). MCP partitions the JSON-RPC 2.0 server-error block (`-32000` to `-32099`) into `-32000` to `-32019` for legacy implementation-defined server errors (where `-32002` was used in 2025-11-25 and earlier for resource not found before 2026-07-28 standardized `-32602`) and `-32020` to `-32099` reserved for the MCP specification (`-32020` `HeaderMismatch`, `-32021` `MissingRequiredClientCapability`, `-32022` `UnsupportedProtocolVersion`, plus reserved 2025-11-25 code `-32042` for URL elicitation required). [6][14][25][26]\n- **Elicitation, sampling, roots, and security considerations:** Elicitation runs inside another call: Form mode takes structured data with an optional JSON schema, while URL mode is required for passwords, API keys, access tokens, and payment credentials so they do not pass through the client, and on resumption the server checks the echoed `requestState` before returning a final result. `sampling` requests model output via the client without server API keys, and `roots` are informational filesystem guidance that the protocol does not enforce. For trust, safety, and security, `serverInfo` is self-reported and unverified (clients SHOULD NOT use it to change behavior or make security decisions), and clients MUST consider tool annotations untrusted unless received from trusted servers. MCP servers MUST NOT accept tokens not explicitly issued for the server, and local `stdio` servers from untrusted sources carry arbitrary code execution risks. [20][21][22][24][27][28]\n- **OAuth 2.1 resource metadata:** Authorization is OPTIONAL; `stdio` SHOULD NOT follow it. Servers MUST publish `RFC 9728` Protected Resource Metadata, which clients use to discover the authorization server. `RFC 8707` requires `resource` on authorization and token requests, set to the canonical URI. `client_id` is an HTTPS URL when `client_id_metadata_document_supported` is set, and the document MUST include `client_id`, `client_name`, and `redirect_uris`. `RFC 7591` is deprecated as of 2026-07-28. Authorization servers SHOULD include the `iss` parameter in authorization responses per `RFC 9207`, and MCP clients MUST validate a present `iss` against the recorded issuer before redeeming the authorization code (`SEP-2468`). Client credentials are bound to the issuing authorization server: clients MUST key persisted credentials by the issuer identifier and MUST NOT reuse them with a different authorization server (`SEP-2352`). [6][19][23][29]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **JSON-RPC 2.0 Specification** | `JSON-RPC 2.0` | Profiles classic standard | Profiles JSON-RPC 2.0 over stdio or Streamable HTTP POST with stateless per-request version and capability metadata in `_meta`. [6][14] |\n| **Language Server Protocol (LSP)** | `LSP` | Analogous to classic standard | Adapts LSP's reusable client-server architecture from IDE language intelligence to AI host integration with tools, resources, and prompts. [1] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Agent2Agent Protocol (A2A)](/protocols/a2a/)** | Complements | A2A delegates multi-turn tasks between opaque peer agents, whereas MCP connects a host client to server tools and resources. [1] |\n| **[WebMCP](/protocols/webmcp/)** | Peer alternative | WebMCP registers page-scoped tools on `document.modelContext` in browser JavaScript, whereas MCP connects hosts to stdio or HTTP servers. [4][5][30] |\n| **[MCP Apps](/protocols/mcp-apps/)** | Has component | SEP-1865 extension declaring interactive `ui://` resources linked to tools for bidirectional host-iframe communication. [31] |\n| **[Official MCP Registry](/protocols/mcp-registry/)** | Has component | Centralized preview metadata index publishing `server.json` records for public MCP packages and remote server URLs. [15] |\n| **[Agent-User Interaction Protocol (AG-UI)](/protocols/ag-ui/)** | Complements | AG-UI streams agent-to-frontend UI state events over HTTP, whereas MCP connects the backend agent host to tool servers. [1] |\n| **[Agent Skills](/protocols/anthropic-agent-skills-format/)** | Complements | Packages filesystem `SKILL.md` workflow instructions, which MCP also exposes dynamically through the optional Skills over MCP extension. [1] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (22 probed or cited examples across 4 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).*\n\n### MCP Servers (Remote Endpoints & Local Packages)\n\nHTTP 200 and HTTP 401 probe responses and vendor documentation establish endpoint presence or declared support as of the stated check date rather than verified 2026-07-28 wire conformance. [7]\n\n| Actor | Role | Status | Transport, Capabilities & Scope | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Hugging Face** | Remote MCP server | Live (HTTP 200) · checked 2026-10-30 | Streamable HTTP at `https://huggingface.co/mcp` returning `2026-07-28`, `tools`, `resources`, and `io.modelcontextprotocol/skills`. | [huggingface.co/mcp](https://huggingface.co/mcp) [32] · [HF Hub MCP docs](https://huggingface.co/docs/hub/agents-mcp) [33] |\n| **Cloudflare Docs** | Remote MCP server | Live (HTTP 200) · checked 2026-10-30 | Streamable HTTP at `https://docs.mcp.cloudflare.com/mcp` (`docs-ai-search` `0.5.0`) advertising `2026-07-28`, `tools`, and `prompts`. | [docs.mcp.cloudflare.com/mcp](https://docs.mcp.cloudflare.com/mcp) [34] · [Cloudflare MCP servers](https://developers.cloudflare.com/agents/model-context-protocol/cloudflare/servers-for-cloudflare/) [35] |\n| **GitHub** | Remote & local MCP server | Live (HTTP 401) · checked 2026-10-30 | Remote HTTP server at `https://api.githubcopilot.com/mcp/` with OAuth `resource_metadata` challenge and Go `stdio` server. | [api.githubcopilot.com/mcp/](https://api.githubcopilot.com/mcp/) [36] · [github/github-mcp-server](https://github.com/github/github-mcp-server) [37] |\n| **Stripe** | Remote & local MCP server | Live (HTTP 401) · checked 2026-10-30 | Remote server at `https://mcp.stripe.com` with OAuth `resource_metadata` challenge, Agent API keys, and `missing_api_key` error. | [mcp.stripe.com](https://mcp.stripe.com) [38] · [Stripe MCP docs](https://docs.stripe.com/mcp) [39] |\n| **Linear** | Remote MCP server | Live (HTTP 401) · checked 2026-10-30 | Streamable HTTP at `https://mcp.linear.app/mcp` with OAuth 2.1 `resource_metadata` challenge and `https://mcp.linear.app/mcp/readonly`. | [mcp.linear.app/mcp](https://mcp.linear.app/mcp) [40] · [Linear MCP docs](https://linear.app/docs/mcp) [41] |\n| **Atlassian Rovo** | Remote MCP server | Listed · as of 2026-09-09 | Registry entry `com.atlassian/atlassian-mcp-server` (`2.0.0`) advertising `streamable-http` at `https://mcp.atlassian.com/v2/mcp` and `https://mcp.atlassian.com/v1/mcp/authv2`. | [MCP Registry (v2.0.0)](https://registry.modelcontextprotocol.io/v0.1/servers/com.atlassian%2Fatlassian-mcp-server/versions/2.0.0) [42] |\n| **Notion** | Remote MCP server | Listed · as of 2025-09-11 | Registry entry `com.notion/mcp` (`1.0.1`) advertising `streamable-http` (`https://mcp.notion.com/mcp`) and `sse` (`https://mcp.notion.com/sse`). | [MCP Registry (v1.0.1)](https://registry.modelcontextprotocol.io/v0.1/servers/com.notion%2Fmcp/versions/1.0.1) [43] |\n| **Microsoft Playwright** | Local MCP server | Listed · as of 2026-09-18 | Registry entry `io.github.microsoft/playwright-mcp` (`0.0.82`) distributing npm package `@playwright/mcp` over local `stdio`. | [MCP Registry (v0.0.82)](https://registry.modelcontextprotocol.io/v0.1/servers/io.github.microsoft%2Fplaywright-mcp/versions/0.0.82) [44] |\n\n### AI Host Applications & IDEs\n\nVendor documentation and release notes establish declared client and harness support rather than verified 2026-07-28 wire conformance. [7]\n\n| Actor | Role | Status | Transport, Capabilities & Scope | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Claude** | AI host application | Partial · as of 2026-10-30 | Remote MCP connectors (OAuth or headers) and local `claude_desktop_config.json` servers; stateless `2026-07-28` rollout in progress. | [Claude remote MCP connectors](https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp) [45] · [Bringing MCP 2026-07-28 to Claude](https://claude.com/resources/articles/bringing-mcp-2026-07-28-to-claude) [46] |\n| **Visual Studio Code** | IDE host | Supported · as of 2025-06-12 | Supports `streamable HTTP` and local transports, OAuth resource-server authorization, `tools`, `prompts`, `resources`, and `sampling`. | [VS Code full MCP spec support](https://code.visualstudio.com/blogs/2025/06/12/full-mcp-spec-support) [47] |\n| **Cursor** | IDE host | Supported · as of 2025-06-04 | Supports one-click MCP server installation and OAuth authentication in Cursor `1.0`. | [Cursor 1.0 changelog](https://cursor.com/changelog/1-0) [48] |\n| **Gemini CLI** | CLI coding agent | Supported · as of 2025-06-25 | Open-source (`Apache 2.0`) terminal agent with built-in Model Context Protocol client support and bundled extensions. | [Introducing Gemini CLI](https://blog.google/innovation-and-ai/technology/developers-tools/introducing-gemini-cli-open-source-ai-agent/) [49] |\n| **Microsoft Foundry** | Enterprise agent platform | Supported (release announcement) · as of 2026-07-28 | Release announcement claims unified MCP endpoint with stateless `2026-07-28` and `Tasks`; no independent feature-matrix verification. | [MCP 2026-07-28 release blog](https://blog.modelcontextprotocol.io/posts/2026-07-28/) [10] |\n\n### Registries, Directories & Discovery Indexes\n\nDiscovery catalogs and sub-registries that index `server.json` metadata or crawl public MCP server packages (see also [MCP Registry](/protocols/mcp-registry/)). [15][50]\n\n| Actor | Role | Status | Catalog & ingestion model | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Official MCP Registry** | Central metadata repository | Supported (preview) · checked 2026-10-30 | Official `server.json` catalog (`GET /v0.1/servers`) at `https://registry.modelcontextprotocol.io` for downstream aggregators. | [The MCP Registry](https://modelcontextprotocol.io/registry/about) [15] · [MCP Registry Aggregators](https://modelcontextprotocol.io/registry/registry-aggregators) [50] |\n| **GitHub MCP Registry** | Sub-registry & IDE directory | Supported · as of 2025-09-16 | Ingests servers self-published to the OSS MCP Community Registry into GitHub and VS Code. | [Meet the GitHub MCP Registry](https://github.blog/ai-and-ml/github-copilot/meet-the-github-mcp-registry-the-fastest-way-to-discover-mcp-servers/) [51] |\n| **Glama** | Aggregator & sandbox index | Supported · checked 2026-10-30 | Ingests the official registry and layers sandbox schema captures, behavioral analysis, and TDQS scores. | [Glama MCP methodology](https://glama.ai/mcp/methodology) [52] |\n| **PulseMCP** | Sub-registry & directory | Partial · as of 2025-09-09 | Ingests the Official MCP Registry as a downstream sub-registry supplemented with web indexing; live directory temporarily pauses new submissions. | [PulseMCP Work With Us](https://www.pulsemcp.com/work-with-us) [53] · [PulseMCP Official Registry launch](https://www.pulsemcp.com/posts/newsletter-claude-code-competition-ai-fundraising-abounds-mcp-registry-launch) [54] · [PulseMCP server directory](https://www.pulsemcp.com/servers/) [55] |\n| **MCP Census** | Trust-layer census over registries | Listed · as of 2026-11-04 | Trust layer returning PASS, REVIEW, BLOCK, or UNKNOWN; `57,777` rows. | [MCP registries compared](https://mcpcensus.com/compare/mcp-registries) [56] |\n\n### SDKs, Runtimes & Developer Tooling\n\nReference protocol SDKs, serverless hosting frameworks, local archive formats, and conformance debuggers used to build and test MCP clients and servers. [57]\n\n| Actor | Role | Status | Supported languages / packaging | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Official MCP SDKs** | Client & server SDKs | Partial · as of 2026-10-30 | Current `Tier 1` roster lists 6 official SDKs (`TypeScript`, `Python`, `C#`, `Go`, `Rust`, and `Ruby`), plus Tier 2 `Java` and Tier 3 `Kotlin`, `Swift`, and `PHP` (July 2026 release covered `TypeScript`, `Python`, `Go`, `C#`, and `Rust` beta). The official Ruby SDK reached Tier 1 on 2026-10-30, with full support for the 2026-07-28 specification and a 100% conformance pass rate across both scored spec versions. | [Official MCP SDKs](https://modelcontextprotocol.io/docs/sdk) [57] · [MCP 2026-07-28 release blog](https://blog.modelcontextprotocol.io/posts/2026-07-28/) [10] · [MCP Ruby SDK versions](https://ruby.sdk.modelcontextprotocol.io/protocol-versions/) [13] · [Ruby SDK reaches Tier 1](https://blog.modelcontextprotocol.io/posts/ruby-sdk-tier-1/) [9] |\n| **MCP Inspector** | Developer testing client | Supported · as of 2026-07-28 | Reference `@modelcontextprotocol/inspector` package providing Web, `--cli`, and `--tui` clients across `stdio` and HTTP for `2026-07-28`. | [MCP Inspector docs](https://modelcontextprotocol.io/docs/tools/inspector) [58] |\n| **Cloudflare Agents SDK** | Server & client runtime | Supported · as of 2026-10-27 | Workers runtime supporting stateless `2026-07-28` MCP servers, `Streamable HTTP`, `insufficientScope()` OAuth challenges, and `MCPClientManager`. | [Cloudflare Agents MCP docs](https://developers.cloudflare.com/agents/model-context-protocol/) [59] · [MCP 2026-07-28 blog](https://blog.modelcontextprotocol.io/posts/2026-07-28/) [10] |\n| **MCP Bundles (MCPB)** | Local server bundle format | Supported · checked 2026-10-30 | Zip archive format (`.mcpb`, formerly `.dxt`) bundling a local MCP server with `manifest.json` via `@anthropic-ai/mcpb`. | [modelcontextprotocol/mcpb](https://raw.githubusercontent.com/modelcontextprotocol/mcpb/main/README.md) [60] |\n\n### Ecosystem censuses\n\n- **One Year of MCP (2025-11-25)** (*as of 2025-11-25*): Close to 2,000 server entries indexed in the Official MCP Registry as of November 25, 2025, representing 407% growth from the initial batch onboarded at the registry's September 2025 launch. [61]\n- **Anthropic AAIF donation announcement (2025-12-09)** (*as of 2025-12-09*): More than 10,000 active public MCP servers published across the ecosystem as of December 9, 2025, when Anthropic donated MCP to the Linux Foundation's Agentic AI Foundation. [62]\n- **MCP 2026-07-28 release announcement** (*as of 2026-07-28*): Close to 500 million monthly downloads across official Tier 1 MCP SDKs as of July 28, 2026, with both the TypeScript and Python SDKs surpassing 1 billion total downloads. [10]\n- **MCP registries compared (read 4 November 2026)** (*as of 2026-11-04*): On 4 November 2026 the MCP Census comparison records Glama at 115,336 servers (Remote 45,340, Local 43,442), its own census at 57,777 server rows, PulseMCP at 21,602 servers, and the Docker MCP Catalog at 300+ servers. Smithery's API, Connect, accounts, CLI, and proxy URLs stopped on 31 October 2026. [56]\n- **State of MCP Server Development (LocalCan, checked 14 October 2026)** (*as of 2026-10-14*): LocalCan's census, measured on 14 October 2026, counts 43,012 active servers in the official MCP Registry. Across that set, 59.6% are remote-only, 34.6% ship only as a package, 4.7% offer both, and 1.1% list neither. [63]\n- **MCP server directories (Apideck, 31 October 2026)** (*as of 2026-10-31*): Apideck's 31 October 2026 table counts the official registry API at 53,541 servers, Glama at 113,204 servers and 40,151 connectors, PulseMCP at 21,614, MCP Market at 50,999, and the Cursor Marketplace at about 490 plugins. [64]\n- **MCP-Eco (arXiv HTML, Parquet export 2026-06-23)** (*as of 2026-06-23*): The MCP-Eco frozen release, exported to Parquet on 2026-06-23, covers 78,302 candidate server projects. Its crawler queries the official MCP registry, Glama, Smithery, and PulseMCP, and reads MCP.so listing pages found through sitemaps. [65]\n\n---\n\n## See also\n\n- **[MCP Server Cards](/protocols/mcp-server-cards/)** *(Has component)* — SEP-2127 is the MCP extension whose Server Card is read with `GET <endpoint>/server-card` before the client connects, and the card omits the tools, resources, and prompts the live server still provides.\n- **Depended on by:** [Ad Context Protocol (AdCP)](/protocols/adcp/), [Agentic Real Time Framework](/protocols/artf/), [Coral Protocol (CoralOS)](/protocols/coral-protocol/), [Discovery of Model Context Protocol Servers via DNS TXT Records](/protocols/mcp-dns-discovery/), [KYA-OS (Know Your Agent Operating System)](/protocols/kya-os/), [OpenAI Apps SDK manifests](/protocols/openai-apps-sdk-manifests/), [Per-Call Proof for Local Tool Invocation by AI Agents](/protocols/local-tool-call-proof/)\n- **Peer alternatives:** [Agent Protocol](/protocols/agent-protocol-aief/), [agents.json](/protocols/agents-json/)\n- **Complements:** [A2UI (Agent to UI) Protocol](/protocols/a2ui/), [Agent Client Protocol](/protocols/agent-client-protocol/), [Agentic Commerce Protocol](/protocols/agentic-commerce-protocol/), [AGENTS.md](/protocols/agents-md/), [ERC-8004: Trustless Agents](/protocols/erc-8004/), [L402](/protocols/l402/), [OAuth Client ID Metadata Document](/protocols/oauth-cimd/), [OAuth Protected Resource and Authorization Server Metadata (as used for agent authorization)](/protocols/oauth-metadata-for-agents/), [Open Responses](/protocols/open-responses/), [Universal Commerce Protocol (UCP)](/protocols/ucp/), and [32 more in the protocol directory](/protocols/)\n- **Category:** [Act protocols](/category/act/)\n\n---\n\n## References\n\n1. Model Context Protocol (AAIF / Linux Foundation), *Model Context Protocol Specification (2026-07-28)* (2026-07-28) — <https://modelcontextprotocol.io/specification/2026-07-28>\n2. Anthropic, *Introducing the Model Context Protocol* (2024-11-25) — <https://www.anthropic.com/news/model-context-protocol>\n3. The Linux Foundation, *Linux Foundation Announces the Formation of the Agentic AI Foundation (AAIF), Anchored by New Project Contributions Including Model Context Protocol (MCP), goose and AGENTS.md* (2025-12-09) — <https://www.linuxfoundation.org/press/linux-foundation-announces-the-formation-of-the-agentic-ai-foundation>\n4. Model Context Protocol (AAIF / Linux Foundation), *stdio Transport — Model Context Protocol Specification (2026-07-28)* (2026-07-28) — <https://modelcontextprotocol.io/specification/2026-07-28/basic/transports/stdio>\n5. Model Context Protocol (AAIF / Linux Foundation), *Streamable HTTP Transport — Model Context Protocol Specification (2026-07-28)* (2026-07-28) — <https://modelcontextprotocol.io/specification/2026-07-28/basic/transports/streamable-http>\n6. Model Context Protocol (AAIF / Linux Foundation), *Key Changes (2026-07-28) — Model Context Protocol Specification* (2026-07-28) — <https://modelcontextprotocol.io/specification/2026-07-28/changelog>\n7. Model Context Protocol (AAIF / Linux Foundation), *Versioning and Compatibility — Model Context Protocol Specification (2026-07-28)* (2026-07-28) — <https://modelcontextprotocol.io/specification/2026-07-28/basic/versioning>\n8. David Soria Parra and Den Delimarsky (Model Context Protocol Blog), *The New MCP Roadmap* (2026-08-22) — <https://blog.modelcontextprotocol.io/posts/mcp-roadmap/>\n9. Koichi Ito (Model Context Protocol Blog), *The Official Ruby SDK for MCP Reaches Tier 1* (2026-10-30) — <https://blog.modelcontextprotocol.io/posts/ruby-sdk-tier-1/>\n10. David Soria Parra and Den Delimarsky (MCP Blog), *MCP 2026-07-28 Specification Release* (2026-07-28) — <https://blog.modelcontextprotocol.io/posts/2026-07-28/>\n11. Model Context Protocol (AAIF / Linux Foundation), *Governance and Stewardship — Model Context Protocol* (2026-10-30) — <https://modelcontextprotocol.io/community/governance>\n12. Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation* (2026-07-28) — <https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning>\n13. MCP Ruby SDK, *Protocol Versions* (checked 2026-10-30) — <https://ruby.sdk.modelcontextprotocol.io/protocol-versions/>\n14. Model Context Protocol (AAIF / Linux Foundation), *Base Protocol Overview — Model Context Protocol Specification (2026-07-28)* (2026-07-28) — <https://modelcontextprotocol.io/specification/2026-07-28/basic>\n15. Model Context Protocol (AAIF / Linux Foundation), *About the Official MCP Registry* (2026-10-30) — <https://modelcontextprotocol.io/registry/about>\n16. Model Context Protocol (AAIF / Linux Foundation), *SEP-2127: MCP Server Cards — HTTP Server Discovery* (2026-01-21) — <https://modelcontextprotocol.io/seps/2127-mcp-server-cards>\n17. Model Context Protocol (AAIF / Linux Foundation), *Multi Round-Trip Requests — Model Context Protocol Specification (2026-07-28)* (2026-07-28) — <https://modelcontextprotocol.io/specification/2026-07-28/basic/patterns/mrtr>\n18. Model Context Protocol (AAIF / Linux Foundation), *Architecture — Model Context Protocol Specification (2026-07-28)* (2026-07-28) — <https://modelcontextprotocol.io/specification/2026-07-28/architecture>\n19. Model Context Protocol (AAIF / Linux Foundation), *Authorization — Model Context Protocol Specification (2026-07-28)* (2026-07-28) — <https://modelcontextprotocol.io/specification/2026-07-28/basic/authorization>\n20. Model Context Protocol, *Discovery — Model Context Protocol Specification (2026-07-28)* (2026-07-28) — <https://modelcontextprotocol.io/specification/2026-07-28/server/discover>\n21. Model Context Protocol (AAIF / Linux Foundation), *Sampling — Model Context Protocol Specification (2026-07-28)* (2026-07-28) — <https://modelcontextprotocol.io/specification/2026-07-28/client/sampling>\n22. Model Context Protocol (AAIF / Linux Foundation), *Roots — Model Context Protocol Specification (2026-07-28)* (2026-07-28) — <https://modelcontextprotocol.io/specification/2026-07-28/client/roots>\n23. Model Context Protocol (AAIF / Linux Foundation), *Deprecated Features Registry — Model Context Protocol Specification (2026-07-28)* (2026-07-28) — <https://modelcontextprotocol.io/specification/2026-07-28/deprecated>\n24. Model Context Protocol (AAIF / Linux Foundation), *Tools — Model Context Protocol Specification (2026-07-28)* (2026-07-28) — <https://modelcontextprotocol.io/specification/2026-07-28/server/tools>\n25. Model Context Protocol (AAIF / Linux Foundation), *Resources — Model Context Protocol Specification (2026-07-28)* (2026-07-28) — <https://modelcontextprotocol.io/specification/2026-07-28/server/resources>\n26. Model Context Protocol (AAIF / Linux Foundation), *Prompts — Model Context Protocol Specification (2026-07-28)* (2026-07-28) — <https://modelcontextprotocol.io/specification/2026-07-28/server/prompts>\n27. Model Context Protocol (AAIF / Linux Foundation), *Elicitation — Model Context Protocol Specification (2026-07-28)* (2026-07-28) — <https://modelcontextprotocol.io/specification/2026-07-28/client/elicitation>\n28. Model Context Protocol (AAIF / Linux Foundation), *Security Best Practices — Model Context Protocol (2026-07-28)* (2026-07-28) — <https://modelcontextprotocol.io/specification/2026-07-28/basic/security_best_practices>\n29. Model Context Protocol (AAIF / Linux Foundation), *Client Registration — Model Context Protocol Specification (2026-07-28)* (2026-07-28) — <https://modelcontextprotocol.io/specification/2026-07-28/basic/authorization/client-registration>\n30. Web Machine Learning Community Group (editors Brandon Walderman, Khushal Sagar, Dominic Farolino, and Samuel Dallstream), *WebMCP* (Draft Community Group Report, 11 November 2026) — <https://webmachinelearning.github.io/webmcp/>\n31. Model Context Protocol (MCP), *SEP-1865: MCP Apps — Interactive User Interfaces for MCP* (2026-01-26) — <https://modelcontextprotocol.io/seps/1865-mcp-apps-interactive-user-interfaces-for-mcp>\n32. Hugging Face, *Live MCP endpoint* (2026-10-30) — <https://huggingface.co/mcp>\n33. Hugging Face, *Hugging Face MCP Server* (checked 2026-10-30) — <https://huggingface.co/docs/hub/agents-mcp>\n34. Cloudflare, *Live MCP endpoint* (2026-10-30) — <https://docs.mcp.cloudflare.com/mcp>\n35. Cloudflare, *Cloudflare's own MCP servers* (checked 2026-10-30) — <https://developers.cloudflare.com/agents/model-context-protocol/cloudflare/servers-for-cloudflare/>\n36. GitHub, *Live MCP endpoint* (2026-10-30) — <https://api.githubcopilot.com/mcp/>\n37. GitHub, *github/github-mcp-server* (checked 2026-10-30) — <https://github.com/github/github-mcp-server>\n38. Stripe, *Live MCP endpoint* (2026-10-30) — <https://mcp.stripe.com>\n39. Stripe, *Model Context Protocol (MCP)* (checked 2026-10-30) — <https://docs.stripe.com/mcp>\n40. Linear, *Live MCP endpoint* (2026-10-30) — <https://mcp.linear.app/mcp>\n41. Linear, *MCP server* (checked 2026-10-30) — <https://linear.app/docs/mcp>\n42. Official MCP Registry, *com.atlassian/atlassian-mcp-server version 2.0.0 (Official MCP Registry)* (version 2.0.0 (publishedAt 2026-09-09T17:53:32.01107Z; retained snapshot fetched 2026-10-30)) — <https://registry.modelcontextprotocol.io/v0.1/servers/com.atlassian%2Fatlassian-mcp-server/versions/2.0.0>\n43. Official MCP Registry, *com.notion/mcp version 1.0.1 (Official MCP Registry)* (version 1.0.1 (publishedAt 2025-09-11T22:25:50.737872Z; retained snapshot fetched 2026-10-30)) — <https://registry.modelcontextprotocol.io/v0.1/servers/com.notion%2Fmcp/versions/1.0.1>\n44. Official MCP Registry, *io.github.microsoft/playwright-mcp version 0.0.82 (Official MCP Registry)* (version 0.0.82 (publishedAt 2026-09-18T23:41:20.46032Z; retained snapshot fetched 2026-10-30)) — <https://registry.modelcontextprotocol.io/v0.1/servers/io.github.microsoft%2Fplaywright-mcp/versions/0.0.82>\n45. Anthropic, *Get started with custom connectors using remote MCP* (modified 2026-10-30) — <https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp>\n46. Anthropic, *MCP 2026-07-28 spec: stateless core, coming to Claude* (2026-07-28) — <https://claude.com/resources/articles/bringing-mcp-2026-07-28-to-claude>\n47. Microsoft / Harald Kirschner, Connor Peet and Tyler Leonhardt, *The Complete MCP Experience: Full Specification Support in VS Code* (2025-06-12) — <https://code.visualstudio.com/blogs/2025/06/12/full-mcp-spec-support>\n48. Cursor, *Cursor 1.0* (2025-06-04) — <https://cursor.com/changelog/1-0>\n49. Google, *Gemini CLI: your open-source AI agent* (published 2025-06-25; modified 2026-01-07) — <https://blog.google/innovation-and-ai/technology/developers-tools/introducing-gemini-cli-open-source-ai-agent/>\n50. Model Context Protocol, *MCP Registry Aggregators* (checked 2026-10-30) — <https://modelcontextprotocol.io/registry/registry-aggregators>\n51. Toby Padilla, GitHub Blog, *Meet the GitHub MCP Registry: The fastest way to discover MCP Servers* (published 2025-09-16) — <https://github.blog/ai-and-ml/github-copilot/meet-the-github-mcp-registry-the-fastest-way-to-discover-mcp-servers/>\n52. Glama, *How Glama indexes the MCP ecosystem* (checked 2026-10-30) — <https://glama.ai/mcp/methodology>\n53. PulseMCP, *Work With Us* (checked 2026-10-30) — <https://www.pulsemcp.com/work-with-us>\n54. PulseMCP, *Claude Code has competition, AI fundraising abounds, Official MCP Registry launched* (published 2025-09-09) — <https://www.pulsemcp.com/posts/newsletter-claude-code-competition-ai-fundraising-abounds-mcp-registry-launch>\n55. PulseMCP, *MCP Server Directory* (checked 2026-11-06) — <https://www.pulsemcp.com/servers/>\n56. MCP Census (Jaco Veldsman), *MCP registries compared* (2026-11-04) — <https://mcpcensus.com/compare/mcp-registries>\n57. Model Context Protocol (AAIF / Linux Foundation), *Official MCP SDKs* (2026-10-30) — <https://modelcontextprotocol.io/docs/sdk>\n58. Model Context Protocol (AAIF / Linux Foundation), *MCP Inspector* (2026-07-28) — <https://modelcontextprotocol.io/docs/tools/inspector>\n59. Cloudflare, *Model Context Protocol (MCP) · Cloudflare Agents docs* (checked 2026-10-30) — <https://developers.cloudflare.com/agents/model-context-protocol/>\n60. Model Context Protocol, *MCP Bundles (MCPB) Specification & Toolchain README* (2026-10-30) — <https://raw.githubusercontent.com/modelcontextprotocol/mcpb/main/README.md>\n61. Model Context Protocol Blog, *One Year of MCP: November 2025 Spec Release* (2025-11-25) — <https://blog.modelcontextprotocol.io/posts/2025-11-25-first-mcp-anniversary/>\n62. Anthropic, *Donating the Model Context Protocol and establishing the Agentic AI Foundation* (2025-12-09) — <https://www.anthropic.com/news/donating-the-model-context-protocol-and-establishing-of-the-agentic-ai-foundation>\n63. Jarek Ceborski, LocalCan, *State of MCP Server Development: October 2026* (2026-10-15) — <https://www.localcan.com/blog/state-of-mcp-server-development>\n64. Apideck, *MCP server directories* (2026-10-31) — <https://www.apideck.com/blog/mcp-server-directories>\n65. Khalid Tounoussi, Mohammed Sayagh, Ali Ouni, and Yutaro Kashiwa, *MCP-Eco: A Linked Dataset of MCP Servers, Consumers, and Development Activity* (2026-11-04) — <https://arxiv.org/html/2611.06897v1>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "A2A",
   "adoption": {
    "level": "observed",
    "by": "Telnyx (Telnyx Assistant), Redocly, Pangram, Ticket Fairy, Warp (Warp Freight), Google (Gemini Enterprise), Microsoft (Foundry Agent Service), Microsoft (Copilot Studio), and 12 other verified implementations",
    "probe_run": null
   },
   "aliases": [],
   "analog": "none",
   "collisions": [
    "Account-to-Account payments (A2A, banking)"
   ],
   "discovery": {
    "mechanism": "Agent Card",
    "path": "GET https://{server_domain}/.well-known/agent-card.json (registered with IANA as a permanent well-known URI on 2025-08-01; renamed from /.well-known/agent.json in v0.3.0 via PR #841 on 2025-07-29), registry/catalog lookup, or direct configuration"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://a2a-protocol.org/latest/specification/",
     "claim": "A2A Protocol (The Linux Foundation), *Agent2Agent (A2A) Protocol Specification*, latest released version 1.0.0; checked 2026-10-30",
     "date": null,
     "quote": "The Agent2Agent (A2A) Protocol is an open standard designed to facilitate communication and interoperability between independent, potentially opaque AI agent systems. / A2A Servers MUST make an Agent Card available. / Enable agents to delegate tasks, exchange context, and work together on complex user requests. / Securely exchange information to achieve user goals without needing access to each other's internal state, memory, or tools. / In an ecosystem where agents might be built using different frameworks, languages, or by different vendors, A2A provides a common language and interaction model. / Its primary goal is to enable agents to: Discover each other's capabilities. Negotiate interaction modalities (text, files, structured data). Manage collaborative tasks. / Latest Released Version 1.0.0 Previous Versions 0.3.0 0.2.6 0.1.0 / The core ones officially supported are JSONRPC, GRPC and HTTP+JSON. / The JSON-RPC protocol binding provides a simple, HTTP-based interface using JSON-RPC 2.0 for method calls and Server-Sent Events for streaming. / The gRPC Protocol Binding provides a high-performance, strongly-typed interface using Protocol Buffers over HTTP/2. / The HTTP+JSON protocol binding provides a RESTful interface using standard HTTP methods and JSON payloads. / Header field name: A2A-Version / Header field name: A2A-Extensions / URI suffix: agent-card.json Change controller: A2A Protocol Working Group / This section provides registration templates for the A2A protocol's media type, HTTP headers, and well-known URI, intended for submission to the Internet Assigned Numbers Authority (IANA). / Type name: application Subtype name: a2a+json / Agent2Agent (A2A) Protocol Specification / Well-Known URI: Accessing https://{server_domain}/.well-known/agent-card.json / Copyright 2026 The Linux Foundation. Licensed under the Apache License, Version 2.0. / agents might be built using different frameworks, languages, or by different vendors / Bridge the communication gap between disparate agentic systems. / supportedInterfaces array of AgentInterface / The first entry in supportedInterfaces represents the preferred interface / Method Naming: PascalCase method names matching gRPC conventions (e.g., SendMessage, GetTask) / TASK_STATE_SUBMITTED Indicates that a task has been successfully submitted and acknowledged. / TASK_STATE_WORKING Indicates that a task is actively being processed by the agent. / Task: The fundamental unit of work managed by A2A, identified by a unique ID. Tasks are stateful and progress through a defined lifecycle. / Streaming: Server-Sent Events (text/event-stream) / Push Notifications: Asynchronous task updates delivered via server-initiated HTTP POST requests to a client-provided webhook URL, for long-running or disconnected scenarios. / Opaque Execution: Agents collaborate based on declared capabilities and exchanged information, without needing to share their internal thoughts, plans, or tool implementations. / without needing access to each other's internal state, memory, or tools. / A2A and MCP are complementary protocols designed for different aspects of agentic systems: / Model Context Protocol (MCP): Focuses on standardizing how AI models and agents connect to and interact with tools, APIs, data sources, and other external resources. / A2A Client: An application or agent that initiates requests to an A2A Server on behalf of a user or another system. / A2A Server (Remote Agent): An agent or agentic system that exposes an A2A-compliant endpoint, processing tasks and providing responses. / Agent Card: A JSON metadata document published by an A2A Server, describing its identity, capabilities, skills, service endpoint, and authentication requirements. / Well-Known URI: Accessing `https://{server_domain}/.well-known/agent-card.json` / The agent MAY create a new Task to process the provided message asynchronously or MAY return a direct Message response for simple interactions. The operation MUST return immediately with either task information or response message. / A2A Servers MUST make an Agent Card available. The Agent Card describes the server's identity, capabilities, skills, and interaction requirements. / Agent Cards MAY be signed using JSON Web Signatures (JWS) as specified in the AgentCardSignature object (Section 4.4.7) / Clients SHOULD verify signatures when present / Registries/Catalogs: Querying curated catalogs of agents / Direct Configuration: Pre-configured Agent Card URLs or content / Declares a combination of a target URL, transport and protocol version for interacting with the agent. / url string Yes The URL or address where this interface is available. / The security scheme details used for authenticating with this agent. / This endpoint is available only if AgentCard.capabilities.extendedAgentCard is true. / Retrieves a potentially more detailed version of the Agent Card after the client has authenticated. / The Get Extended Agent Card operation MUST require authentication / JSON Canonicalization Scheme (JCS) / Clients retrieving this extended card SHOULD replace their cached public Agent Card with the content received from this endpoint / The primary operation for initiating agent interactions. / Similar to Send Message but with real-time streaming of updates during processing. / Retrieves the current state (including status, artifacts, and optionally history) of a previously initiated task. / Requests the cancellation of an ongoing task. The server will attempt to cancel the task, but success is not guaranteed / Part: The smallest unit of content within a Message or Artifact. Parts can contain text, file references, or structured data. / Artifact: An output (e.g., a document, image, structured data) generated by the agent as a result of a task, composed of Parts. / ListTasks / SubscribeToTask / CreateTaskPushNotificationConfig / GetTaskPushNotificationConfig / ListTaskPushNotificationConfigs / DeleteTaskPushNotificationConfig / Clients send a message to an agent and receive either a task that tracks the processing or a direct response message. / The agent MAY create a new Task to process the provided message asynchronously or MAY return a direct Message response for simple interactions. / Task processing MAY continue asynchronously after the response when a Task is returned. / TASK_STATE_INPUT_REQUIRED Indicates that the agent requires additional user input to proceed. This is an interrupted state. / TASK_STATE_AUTH_REQUIRED Indicates that authentication is required to proceed. This is an interrupted state. / TASK_STATE_COMPLETED Indicates that a task has finished successfully. This is a terminal state. / TASK_STATE_FAILED Indicates that a task has finished with an error. This is a terminal state. / TASK_STATE_CANCELED Indicates that a task was canceled before completion. This is a terminal state. / TASK_STATE_REJECTED Indicates that the agent has decided to not perform the task. / Subsequent events following a Task MAY include stream of TaskStatusUpdateEvent and TaskArtifactUpdateEvent objects / Part represents a container for a section of communication content. Parts can be purely textual, some sort of file (image, video, etc) or a structured data blob (i.e. JSON). / Streaming: Real-time, incremental updates for tasks (status changes, artifact chunks) delivered via protocol-specific streaming mechanisms. / Implementations MUST scope results to the caller's authorized access boundaries / PushNotificationConfig.authentication / Agents SHOULD validate webhook URLs to prevent SSRF (Server-Side Request Forgery) attacks / Reject private IP ranges (127.0.0.0/8, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) / Reject localhost and link-local addresses / Clients MUST validate webhook authenticity / Clients SHOULD process notifications idempotently / Event Ordering: All implementations MUST deliver events in the order they were generated. / An agent MAY serve multiple concurrent streams to one or more clients for the same task. / Push notifications are delivered via HTTP POST to client-registered webhook endpoints. / Retrieves the current state (including status, artifacts, and optionally history) of a previously initiated task. This is typically used for polling the status of a task initiated with Send Message, or for fetching the final state of a task after being notified via a push notification or after a stream has ended. / Service: Implement the A2AService gRPC service / Content-Type: application/a2a+json SHOULD be used for requests and responses / Each interface MUST accurately declare its transport protocol and URL / protocolVersion string Yes The version of the A2A protocol this interface exposes. / SDK language bindings, schemas, and any other derived forms MUST be regenerated from the proto (directly or via code generation) rather than edited manually. / Initializing search A2A Python Go Java JS.NET Rust Home Documentation Extensions Specification",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://a2a-protocol.org/latest/blog/2026/08/27/a-new-chapter-for-a2a-joining-the-agentic-ai-foundation/",
     "claim": "A2A Protocol, *A New Chapter for A2A: Joining the Agentic AI Foundation*, 2026-08-27",
     "date": "2026-08-27",
     "quote": "Before A2A, handing off work between agents built on different frameworks required writing custom integration code from scratch for every new pairing. / The Agent2Agent (A2A) protocol has officially been accepted as a Growth Stage project at the Agentic AI Foundation (AAIF). / While the Model Context Protocol (MCP) serves as the vertical integration layer connecting agents to internal tools and databases, A2A acts as the horizontal protocol enabling peer-to-peer collaboration. / A2A is supported by major frameworks including LangGraph, CrewAI, Pydantic AI, AG2, and IBM BeeAI / backed by over 150 organizations",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://developers.googleblog.com/en/a2a-a-new-era-of-agent-interoperability/",
     "claim": "Rao Surapaneni, Miku Jha, Michael Vakoc, and Todd Segal (Google), *Announcing the Agent2Agent Protocol (A2A)*, 2025-04-09",
     "date": "2025-04-09",
     "quote": "Today, we're launching a new, open protocol called Agent2Agent (A2A) / \"datePublished\": \"2025-04-09\" / APRIL 9, 2025 / with support and contributions from more than 50 technology partners / and leading service providers including Accenture, BCG, Capgemini, Cognizant, Deloitte, HCLTech, Infosys, KPMG, McKinsey, PwC, TCS, and Wipro",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://a2a-protocol.org/v0.3.0/specification/",
     "claim": "A2A Protocol, *Agent2Agent (A2A) Protocol Official Specification v0.3.0*, v0.3.0",
     "date": null,
     "quote": "`https://{server_domain}/.well-known/agent-card.json` / https://{server_domain}/.well-known/agent-card.json",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://www.iana.org/assignments/well-known-uris",
     "claim": "IANA, *Well-Known URIs*, agent-card.json registered 2025-08-01",
     "date": null,
     "quote": "agent-card.json / 2025-08-01 / agent-card.json https://a2a-protocol.org/latest/specification/ permanent Linux Foundation 2025-08-01",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://github.com/a2aproject/A2A/pull/841",
     "claim": "holtskinner (a2aproject/A2A), *Change Well-Known URI for Agent Card hosting from agent.json to agent-card.json (PR #841)*, merged 2025-07-29",
     "date": null,
     "quote": "from `/.well-known/agent.json` to `/.well-known/agent-card.json` / I've updated the recommended and example well-known URI for hosting Agent Cards from /.well-known/agent.json to /.well-known/agent-card.json / \"mergedTime\":\"2025-07-29T18:45:00Z\"",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://github.com/a2aproject/A2A/blob/main/CHANGELOG.md",
     "claim": "a2aproject, *A2A CHANGELOG.md*, 1.0.1 (2026-05-26); 1.0.0 (2026-03-12); 0.3.0 (2025-07-30)",
     "date": null,
     "quote": "0.3.0 (2025-07-30) / 1.0.1 (2026-05-26) … prefer application/a2a+json in HTTP binding / \"text\":\"1.0.0 (2026-03-12)\" / 1.0.1 (2026-05-26) / 1.0.0 (2026-03-12) / 0.3.0 (2025-07-30) … Change Well-Known URI for Agent Card hosting from `agent.json` to `agent-card.json` / \"text\":\"0.3.0 (2025-07-30)\" / Change Well-Known URI for Agent Card hosting from agent.json to agent-card.json",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://a2a-protocol.org/latest/whats-new-v1/",
     "claim": "A2A Protocol (The Linux Foundation), *What's New in v1.0*, checked 2026-10-30",
     "date": null,
     "quote": "preferredTransport and additionalInterfaces consolidated into supportedInterfaces[] / Each interface has url, protocolBinding, and protocolVersion / Send Message (message/send → SendMessage) / Send Streaming Message (message/stream → SendStreamingMessage) / Get Task (tasks/get → GetTask) / Cancel Task (tasks/cancel → CancelTask)",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://www.linuxfoundation.org/press/linux-foundation-launches-the-agent2agent-protocol-project-to-enable-secure-intelligent-communication-between-ai-agents",
     "claim": "The Linux Foundation, *Linux Foundation Launches the Agent2Agent Protocol Project to Enable Secure, Intelligent Communication Between AI Agents*, 2025-06-23",
     "date": "2025-06-23",
     "quote": "today announced the launch of the Agent2Agent (A2A) project, an open protocol created by Google / \"datePublished\": \"2025-06-23T15:00:00.000Z\" / June 23, 2025 / 2025-06-23 / with growing support from more than 100 leading technology companies",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://developers.googleblog.com/en/google-cloud-donates-a2a-to-linux-foundation/",
     "claim": "Rao Surapaneni, Todd Segal, and Michael Vakoc (Google Cloud), *Google Cloud donates A2A to Linux Foundation*, 2025-06-23",
     "date": "2025-06-23",
     "quote": "seeded with Google's transfer of the groundbreaking Agent2Agent (A2A) protocol specification, accompanying SDKs, and developer tooling.",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://aaif.io/blog/a2a-joins-aaif",
     "claim": "Agentic AI Foundation, *A2A joins AAIF's open agentic stack*, published 2026-08-17; modified 2026-09-24",
     "date": null,
     "quote": "In August 2025, IBM's Agent Communication Protocol merged into A2A / \"datePublished\":\"2026-08-17\" / A2A v1.0, the first stable specification, shipped in March 2026. / Agent2Agent (A2A), the open standard for inter-agent communication, is joining the Agentic AI Foundation (AAIF) as a hosted project. / Google Cloud and PayPal are extending A2A into agentic commerce through the Agent Payments Protocol (AP2). Shopping and merchant agents communicate over A2A / Google Cloud supports developing and deploying A2A agents through ADK, Agent Engine, Cloud Run, and GKE. / It's backed by over 150 organizations / A2A's 150+ partner organizations include direct competitors.",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://raw.githubusercontent.com/i-am-bee/acp/main/README.md",
     "claim": "IBM BeeAI (i-am-bee/acp), *Agent Communication Protocol (ACP) README*, checked 2026-10-31",
     "date": null,
     "quote": "ACP is now part of A2A under the Linux Foundation / ACP is now part of A2A under the Linux Foundation! / acp-sdk",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://github.com/aaif/project-proposals/issues/37",
     "claim": "Agentic AI Foundation, *[Project Proposal] Agent2Agent Protocol (A2A) · Issue #37*, Technical Committee 2026-07-15; Governing Board 2026-08-04",
     "date": null,
     "quote": "The GB has approved A2A as a Growth Stage project for inclusion into the AAIF. / 2026-07-15T21:20:03Z … The AAIF TC has approved A2A as a Growth Stage project / 2026-08-04T16:26:05Z … The GB has approved A2A as a Growth Stage project for inclusion into the AAIF. / Cisco spearheaded the AGNTCY project / Google ADK (Agent Development Kit): Native A2A support in the ADK running anywhere, especially on Agent Platform Runtime (the evolution of Vertex AI Agent Engine), with first-class RemoteA2aAgent and to_a2a() helpers. / BeeAI Framework (IBM): The successor to IBM's deprecated ACP, BeeAI now ships native A2AServer and A2AAgent adapters, completing the ACP→A2A migration for the BeeAI platform. / Every deployed LangGraph agent gets a hosted A2A endpoint at /a2a/{assistant_id} with an auto-generated Agent Card, streaming via SSE, and LangSmith distributed tracing across multi-agent A2A conversations. / CrewAI + AMP: Production A2A hosting on the CrewAI AMP platform - A2AServerConfig provisions distributed state, enterprise auth (OIDC, OAuth2, mTLS), REST/JSON-RPC/gRPC transports, and signed webhook push notifications. / Pydantic AI: Native support via the FastA2A library, using.to_a2a() to convert any Pydantic AI agent into an ASGI A2A application in two lines of code. / AG2 (formerly AutoGen): Expose or connect agent swarms via A2A; the AG2 repo is tagged with a2a as a core capability.",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://github.com/a2aproject/A2A/commit/40cffc57314d1c84e47c5efe8301d6387880c3f8",
     "claim": "a2aproject, *Add Agent Card media type registration template (commit 40cffc57)*, 2026-10-27",
     "date": "2026-10-27",
     "quote": "`application/a2a-agent-card+json`, matching the A2A Agent Card media\\ntype advertised by AI Catalog, for inclusion in the 1.1 release. / These templates do not imply that IANA registration has been completed. / for inclusion in the 1.1 release. / \"date\":\"2026-10-27T16:07:05Z\"",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://github.com/a2aproject/A2A/blob/main/GOVERNANCE.md",
     "claim": "a2aproject, *Agent2Agent (A2A) Governance (GOVERNANCE.md)*, checked 2026-10-30",
     "date": null,
     "quote": "The Agent2Agent project is governed by the Technical Steering Committee. The Committee has nine seats, each held by the following companies:",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://github.com/a2aproject/A2A/releases/tag/v1.0.1",
     "claim": "a2aproject, *Release v1.0.1*, 2026-05-28 (changelog 2026-05-26)",
     "date": null,
     "quote": "published_at\": \"2026-05-28T11:34:36Z\" / 1.0.1 (2026-05-26)",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://a2a-protocol.org/latest/topics/agent-discovery/",
     "claim": "A2A Protocol, *Agent Discovery*, checked 2026-11-06",
     "date": null,
     "quote": "A2A standardizes agent self-descriptions through the Agent Card. / The Agent Card is a JSON document that serves as a digital \"business card\" for an A2A Server (the remote agent). / https://{agent-server-domain}/.well-known/agent-card.json / following the principles of RFC 8615 / The current A2A specification does not prescribe a standard API for curated registries. / Includes `name`, `description`, and `provider` information. / Lists supported features such as `streaming` or `pushNotifications`. / Describes the agent's tasks using `AgentSkill` objects / The curated registry acts as a central repository, allowing clients to query and discover agents based on criteria like \"skills\" or \"tags\". / Client applications utilize hardcoded details, configuration files, environment variables, or proprietary APIs for discovery. / Proprietary API-based discovery also lacks standardization. / We recommend the use of authenticated extended agent cards for sensitive information or for serving a more detailed version of the card. / The A2A specification strongly recommends the use of out-of-band dynamic credentials rather than embedding static secrets within the Agent Card.",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://github.com/protocol-registries/well-known-uris/issues/66",
     "claim": "protocol-registries/well-known-uris, *Well-Known URI registration for agent.json (issue 66)*, 2025-06-11",
     "date": "2025-06-11",
     "quote": "URI suffix: `.well-known/agent.json` / Change controller: Linux Foundation / `agent.json` is an extremely generic name for a vendor proposal. / users in production who are using `agent.json` / Yes, we will update the spec to use agent-card.json in version 0.3.0 / See a2aproject/A2A#841 for the update / Yes, we should proceed with the registration for `.well-known/agent-card.json` / Protocol Version 0.3.0 has been published with the new Well-Known URI",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://arxiv.org/abs/2609.10871",
     "claim": "Alireza Lotfi, Mirza Masfiqur Rahman, Imtiaz Karim, and Elisa Bertino, *A2ABreak: Systematic Security Analysis of the A2A Protocol (arXiv:2609.10871)*, submitted 9 Sep 2026; last revised 24 Oct 2026 (v3); fetched 2026-11-11",
     "date": null,
     "quote": "A2ABreak: Systematic Security Analysis of the A2A Protocol / last revised 24 Oct 2026 (this version, v3) / producing a unified model of 37 states and 76 transitions from 929 formalized statements / Our analysis uncovers 11 new vulnerabilities, each exploitable by a specification-compliant adversary without requiring any implementation flaw.",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://arxiv.org/html/2609.10871v3",
     "claim": "Alireza Lotfi, Mirza Masfiqur Rahman, Imtiaz Karim, and Elisa Bertino, *A2ABreak: Systematic Security Analysis of the A2A Protocol (v3 HTML)*, 24 October 2026 (v3)",
     "date": null,
     "quote": "This work targets protocol-level security analysis of the A2A specification v1.0.0",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://slim.agntcy.org/latest/slim/integrations/a2a/",
     "claim": "AGNTCY SLIM Documentation, *A2A over SLIM*, fetched 2026-10-30",
     "date": null,
     "quote": "SLIM provides a fourth, experimental binding: SLIMRPC. Instead of HTTP, it uses SLIM's encrypted session layer as the transport",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://github.com/a2aproject/a2a-rs/tree/main/a2a-slimrpc",
     "claim": "a2aproject, *a2a-slimrpc: SLIMRPC transport binding for A2A*, fetched 2026-10-30",
     "date": null,
     "quote": "The peer keys are set only when the session uses MLS (the SLIMRPC default), since MLS is what verifies the token.",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://datatracker.ietf.org/doc/draft-mpsb-agntcy-slim/",
     "claim": "IETF Datatracker, *Secure Low-Latency Interactive Messaging (SLIM) (draft-mpsb-agntcy-slim)*, fetched 2026-10-30",
     "date": null,
     "quote": "Cohn-Gordon, \"The Messaging Layer Security (MLS) Protocol\", RFC 9420, DOI 10.17487/RFC9420,",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://datatracker.ietf.org/wg/agentproto/about/",
     "claim": "IETF, *Agent Communication Protocols (agentproto) Working Group*, fetched 2026-11-11",
     "date": null,
     "quote": "State Active / Applications and Real-Time Area (art) / charter-ietf-agentproto-01 Approved / Chairs Leslie Daigle, Orie Steele / The agentic dialog management protocol neither replaces application-layer agent communication protocols nor defines a new transport protocol. / The dialog context is defined so that existing application-layer agent communication protocols (e.g., the Model Context Protocol (MCP) and the Agent2Agent (A2A) protocol) can carry it using their own mechanisms.",
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://www.ietf.org/archive/id/draft-manyfolks-agentproto-arch-00.txt",
     "claim": "J. Rosenberg, Z. Sarker, T. Reddy, K. Yao, D. Liu, and S. Krishnan, *Architecture for AI Agent Communications on the Internet (draft-manyfolks-agentproto-arch-00)*, 30 October 2026; fetched 2026-11-11",
     "date": null,
     "quote": "30 October 2026 / draft-manyfolks-agentproto-arch-00 / It provides the foundational architectural elements for the Agent Communications Protocol (ACP) - also known as agentproto - a new protocol to be developed in the IETF. / ACP enables communication between user agent clients and AI agents, between AI Agents and other AI Agents, or between AI Agents and tools.",
     "ref": 25
    },
    {
     "label": "[26]",
     "url": "https://telnyx.com/.well-known/agent-card.json",
     "claim": "Telnyx, *Telnyx Assistant Agent Card*, 2026-11-03",
     "date": "2026-11-03",
     "quote": "\"name\": \"Telnyx Assistant\" / \"version\": \"1.1.0\" / \"supportedInterfaces\" / https://api.telnyx.com/v2/support_agent/public/a2a / \"protocolBinding\": \"JSONRPC\" / \"protocolVersion\": \"1.0\" / \"protocolVersion\": \"0.3\" / \"preferredTransport\": \"JSONRPC\" / \"streaming\": false / responses are delivered via task-state polling (tasks/get) / \"id\": \"public-pricing\" … \"id\": \"country-coverage\" … \"id\": \"product-and-evaluation\" … \"id\": \"ask-docs\" … \"id\": \"platform-status\" … \"id\": \"feature-requests\"",
     "ref": 26
    },
    {
     "label": "[27]",
     "url": "https://redocly.com/.well-known/agent-card.json",
     "claim": "Redocly, *Redocly Agent Card*, 2026-10-30",
     "date": "2026-10-30",
     "quote": "https://redocly.com/a2a / \"version\":\"0.0.1\" / \"preferredTransport\":\"HTTP+JSON\" / \"protocolVersion\":\"0.3.0\" / \"streaming\":false,\"pushNotifications\":false / \"id\":\"recheck-config\" … \"id\":\"recheck-lint\" … \"id\":\"redocly\" … \"id\":\"redocly-api-docs\" … \"id\":\"redocly-authoring\" … \"id\":\"redocly-cli\" … \"id\":\"redocly-lint-rules\" / https://redocly.com/mcp / Model Context Protocol server exposing the documentation tools and skills.",
     "ref": 27
    },
    {
     "label": "[28]",
     "url": "https://www.pangram.com/.well-known/agent-card.json",
     "claim": "Pangram, *Pangram Agent Card*, 2026-10-30",
     "date": "2026-10-30",
     "quote": "Pangram AI detection agent. Detects AI-generated text and images; live detection calls the Pangram APIs with a user-provided x-api-key / \"supportedInterfaces\":[{\"url\":\"https://www.pangram.com/a2a\",\"protocolBinding\":\"JSONRPC\",\"protocolVersion\":\"1.0\"}] / \"version\":\"1.0.0\" … \"streaming\":false,\"pushNotifications\":false,\"extendedAgentCard\":false / detect-ai-text / detect-ai-image",
     "ref": 28
    },
    {
     "label": "[29]",
     "url": "https://www.ticketfairy.com/.well-known/agent-card.json",
     "claim": "Ticket Fairy, *Ticket Fairy Agent Card*, 2026-10-30",
     "date": "2026-10-30",
     "quote": "Ticket Fairy events and ticket checkout / \"version\": \"1.0.0\" / https://www.ticketfairy.com/agentic/a2a / \"protocolBinding\": \"JSONRPC\" / \"protocolVersion\": \"1.0\" / search_events / Send SendMessage with role ROLE_USER / A2A-Version: 1.0 … UCP-Agent, Content-Digest and RFC 9421 HTTP Message Signatures / ticket-checkout / https://a2ui.org/a2a-extension/a2ui/v0.8 / https://ucp.dev/2026-08-25/specification/reference",
     "ref": 29
    },
    {
     "label": "[30]",
     "url": "https://www.wearewarp.com/.well-known/agent-card.json",
     "claim": "Warp, *Warp Freight Agent Card*, 2026-10-30",
     "date": "2026-10-30",
     "quote": "a2a-version: 1.0.0 / \"name\":\"Warp Freight\" / \"version\":\"0.23.0\" / https://www.wearewarp.com/api/a2a/jsonrpc / \"protocolBinding\":\"JSONRPC\" / \"protocolVersion\":\"1.0\" / warpApiKey / \"scheme\":\"bearer\" / \"id\":\"get_ltl_freight_quote\" … \"id\":\"get_ftl_freight_quote\" … \"id\":\"get_box_truck_quote\" … \"id\":\"get_cargo_van_quote\" … \"id\":\"track_shipment\" … \"id\":\"get_lane_rate_history\" … \"id\":\"book_shipment\"",
     "ref": 30
    },
    {
     "label": "[31]",
     "url": "https://aws.amazon.com/blogs/machine-learning/introducing-agent-to-agent-protocol-support-in-amazon-bedrock-agentcore-runtime/",
     "claim": "Madhur Prashant et al. (AWS Machine Learning Blog), *Introducing agent-to-agent protocol support in Amazon Bedrock AgentCore Runtime*, 2025-11-11",
     "date": "2025-11-11",
     "quote": "We recently announced the support for Agent-to-Agent (A2A) protocol on Amazon Bedrock AgentCore Runtime. / 11 NOV 2025 / JSON-RPC 2.0 / stateless HTTP server on port 9000 and supporting JSON-RPC messaging. The runtime acts as a transparent proxy, passing JSON-RPC requests and responses unchanged / Supports authenticated agent card at /.well-known/agent-card.json / Amazon Bedrock AgentCore Runtime supports secure authentication via AWS SigV4 and OAuth 2.0",
     "ref": 31
    },
    {
     "label": "[32]",
     "url": "https://architecture.learning.sap.com/news/2026/10/27/a2a-agent-gateway-interoperability",
     "claim": "PVN PavanKumar (SAP Architecture Center), *Third-party agents can now interoperate with SAP Agents via the Agent Gateway*, 2026-10-27",
     "date": "2026-10-27",
     "quote": "SAP announces the October 2026 general availability of inbound Agent2Agent (A2A) interoperability / 2026-10-27 / The Agent Gateway implements discovery based on the open Agentic Resource Discovery (ARD) specification / Customers can discover available SAP Agents and Assistants, each with its identifier, AgentCard URL, and metadata. / Creates a single-tenant OpenID Connect (OIDC) Agent Identity for the registered consumer. / Creates an access control list (ACL) specifying which SAP Agents the consumer is permitted to invoke",
     "ref": 32
    },
    {
     "label": "[33]",
     "url": "https://docs.cloud.google.com/gemini/enterprise/docs/release-notes",
     "claim": "Google Cloud, *Gemini Enterprise release notes*, A2A GA entry 2026-08-17",
     "date": null,
     "quote": "August 17, 2026 / General availability for registering A2UI and A2A agents with Gemini Enterprise, including A2UI version v0.9 support / The feature is generally available (GA) instead of Public Preview. / the Agent2Agent (A2A) Protocol for communication with Gemini Enterprise / v0.8",
     "ref": 33
    },
    {
     "label": "[34]",
     "url": "https://learn.microsoft.com/en-us/azure/foundry/agents/how-to/tools/agent-to-agent",
     "claim": "Microsoft, *Connect to an A2A agent endpoint from Foundry Agent Service*, last updated 2026-10-28",
     "date": null,
     "quote": "Use the generally available a2a tool type for new integrations. The earlier a2a_preview tool type remains in preview for existing integrations. / a2a (A2ATool or A2AToolboxTool) 1.0 Generally available (GA) a2a_preview (A2APreviewTool or A2APreviewToolboxTool) 0.3 Preview / Foundry agent targets support generally available A2A protocol version 1.0 and preview version 0.3. Version 1.0 uses JSON-RPC. Only text modality is supported, and streaming responses aren't supported. / send_credentials_for_agent_card / When the target supports the agent identity acting with the user, use AgentOnBehalfOfUser. This authentication type is in preview. / Last updated on 2026-10-28 / Create an A2A server by using the official A2A SDK for your language (Python, .NET, or JavaScript). … Serve an agent card at /.well-known/agent-card.json that describes your agent's capabilities.",
     "ref": 34
    },
    {
     "label": "[35]",
     "url": "https://learn.microsoft.com/en-us/microsoft-copilot-studio/add-agent-agent-to-agent",
     "claim": "Microsoft, *Connect to an agent over the Agent2Agent (A2A) protocol*, last updated 2026-08-26",
     "date": null,
     "quote": "By using A2A, Copilot Studio can delegate tasks to another agent, not just call APIs. / Once you enter your endpoint URL, if your agent has a valid agent card on the standard .well-known URL, Copilot Studio automatically pulls the name and description for your agent from the card / You can also try to navigate to your agent's card in your browser (located at your agent's endpoint + /.well-known/agent.json). / \"method\": \"message/send\", \"params\": { \"message\": { \"contextId\": / copilotstudio.microsoft.com/a2a/chathistory / Last updated on 2026-08-26",
     "ref": 35
    },
    {
     "label": "[36]",
     "url": "https://architecture.learning.sap.com/docs/ref-arch/ae6821",
     "claim": "SAP Architecture Center, *Integrating AI Agents with Joule (Outbound A2A)*, last updated 2026-10-26",
     "date": null,
     "quote": "Within this scenario, you add a Joule Dialog Function with an action of type agent-request. / Joule acts as an A2A client. / It sends a request to your agent's A2A endpoint / the bidirectional communication with 3rd-party and self-hosted agents through Agent Gateway is not yet supported / Last updated on Oct 26, 2026 / not yet generally available (GA)",
     "ref": 36
    },
    {
     "label": "[37]",
     "url": "https://a2a-protocol.org/oauth/a2a-cli.json",
     "claim": "a2aproject, *A2A CLI OAuth Client ID Metadata Document*, fetched 2026-11-11",
     "date": null,
     "quote": "\"client_id\": \"https://a2a-protocol.org/oauth/a2a-cli.json\" / \"client_name\": \"A2A CLI\",\n  \"client_uri\": \"https://github.com/a2aproject/a2a-cli\", / \"grant_types\": [\n    \"authorization_code\",\n    \"refresh_token\",\n    \"urn:ietf:params:oauth:grant-type:device_code\"\n  ] / \"token_endpoint_auth_method\": \"none\"",
     "ref": 37
    },
    {
     "label": "[38]",
     "url": "https://www.linuxfoundation.org/press/a2a-protocol-surpasses-150-organizations-lands-in-major-cloud-platforms-and-sees-enterprise-production-use-in-first-year",
     "claim": "The Linux Foundation, *A2A Protocol Surpasses 150 Organizations*, 2026-04-09",
     "date": "2026-04-09",
     "quote": "April 9, 2026 / expanded from a single Python implementation to five production-ready languages, including JavaScript, Java, Go, and .NET / more than 150 organizations supporting the standard / grown from more than 50 to over 150 / surpassed 22,000 GitHub stars",
     "ref": 38
    },
    {
     "label": "[39]",
     "url": "https://agentpeering.com/docs/faq",
     "claim": "AgentPeering, *Frequently Asked Questions*, checked 2026-11-06",
     "date": null,
     "quote": "agentpeering.com is a free, vendor-neutral registry / prove they own its domain / uptime monitoring, latency tracking and a trust score / speaks A2A v0.3 / message/send / still accepts v0.2 / tasks/send / no official affiliation with Google, the Linux Foundation",
     "ref": 39
    }
   ],
   "form": "endpoint",
   "governance": "Agentic AI Foundation (AAIF) under the Linux Foundation (donated to the Linux Foundation on 2025-06-23; AAIF Growth Stage project approved by Technical Committee 2026-07-15 and Governing Board 2026-08-04, announced 2026-08-17); nine-seat Technical Steering Committee (Google, Microsoft, Cisco, Amazon Web Services, Salesforce, ServiceNow, SAP, IBM, and Bloomberg)",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against a2a-protocol.org/latest/specification/, github.com/a2aproject/A2A README and agent-discovery.md, and the LF/A2A one-year press release (prnewswire)"
    },
    {
     "date": "2026-10-16",
     "note": "A2A v1.0.1 released on 2026-05-28 (v1.0.0 on 2026-03-12); governance is the Linux Foundation with a Technical Steering Committee of AWS, Cisco, Google, IBM Research, Microsoft, Salesforce, SAP and ServiceNow"
    },
    {
     "date": "2026-10-20",
     "note": "AAIF membership (17 August 2026) added beside the Linux Foundation TSC; probe accepts v1.0 supportedInterfaces cards and legacy v0.3 cards; four card-version censuses recorded with their frames"
    },
    {
     "date": "2026-10-21",
     "note": "a2a-sdk 1.2.3 published 2026-10-19"
    },
    {
     "date": "2026-10-28",
     "note": "Re-verified record against 24 sources on 2026-10-28: 5 live /.well-known/agent-card.json endpoints (Telnyx, Redocly, Pangram, Ticket Fairy, Warp Freight), 6 vendor implementations, and 3 press sources."
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "a2a",
   "implementation": "multi-implementation",
   "last_verified": "2026-11-12",
   "name": "Agent2Agent Protocol (A2A)",
   "native_status": "Stable: v1.0 is the first stable specification (shipped March 2026); latest release 1.0.1 (2026-05-28)",
   "origin": {
    "date": "2025-04-09",
    "org": "Google"
   },
   "part_of": null,
   "parties": [
    "agent-agent"
   ],
   "phase": "stable",
   "probe": {
    "method": "GET",
    "on_absent": "404 or non-JSON response means no public Agent Card is hosted at this well-known path; the origin may still run A2A behind auth or a registry",
    "parse": "Accept either card shape and record which one was seen. A v1.0 card places url, protocolBinding, and protocolVersion inside supportedInterfaces[] (preferredTransport and additionalInterfaces fold into that array). A legacy v0.3 card carries a top-level url. name may be present on either shape.",
    "path": "{origin}/.well-known/agent-card.json"
   },
   "question": "How do two independent agents, built on different frameworks, discover each other and delegate a task to completion?",
   "scope": "general",
   "spec_url": "https://a2a-protocol.org/latest/specification/",
   "step": "coordinate",
   "summary_md": "The **Agent2Agent Protocol** (**A2A**) is an open standard originated by Google on April 9, 2025 (`2025-04-09`) for capability discovery and task delegation between independent, opaque AI agent systems across different frameworks and vendor stacks without exposing internal memory, state, or tool implementations. An A2A client fetches the server's JSON Agent Card at `https://{server_domain}/.well-known/agent-card.json` (permanently registered with IANA on `2025-08-01`, renamed from `/.well-known/agent.json` in `0.3.0`) and invokes PascalCase operations (`SendMessage`, `SendStreamingMessage`, `GetTask`, `CancelTask`) over one of three core `supportedInterfaces` bindings: JSON-RPC 2.0 over HTTP(S) (`JSONRPC`) with Server-Sent Events (`text/event-stream`), gRPC (`GRPC`), or RESTful `HTTP+JSON` (`application/a2a+json`) carrying the `A2A-Version` header. Transferred to the Linux Foundation on June 23, 2025 (`2025-06-23`), A2A merged IBM's Agent Communication Protocol in August 2025, reached its first stable release (`1.0.0`) on March 12, 2026 (`2026-03-12`, followed by `1.0.1` on `2026-05-26`), and was approved as an Agentic AI Foundation (AAIF) Growth Stage project in August 2026 (`2026-08-17`). Release candidate v1.1.0-rc adds an IANA media-type registration template for `application/a2a-agent-card+json`, for inclusion in the 1.1 release (commit dated 2026-10-27). Inclusion of the template does not mean IANA registration is complete.",
   "track": "linux-foundation",
   "version": {
    "date": "2026-05-28",
    "label": "1.0.1"
   },
   "watch": [
    {
     "type": "page",
     "url": "https://a2a-protocol.org/latest/specification/",
     "selector": "main",
     "cadence": "weekly"
    },
    {
     "type": "github",
     "repo": "a2aproject/A2A",
     "mode": "release"
    },
    {
     "type": "pypi",
     "pkg": "a2a-sdk"
    }
   ],
   "use_cases": [
    "agent-to-agent-messaging",
    "describe-agent-capabilities",
    "discover-my-api"
   ],
   "audience": [
    "agent-builder",
    "platform",
    "standards-body"
   ],
   "pairs_with": [
    "mcp",
    "agent-communication-protocol",
    "agent-connect-protocol",
    "ap2"
   ],
   "prerequisites": [],
   "hatnote_md": "This page covers the Agent2Agent Protocol (A2A), the open protocol for capability discovery via an Agent Card and inter-agent task delegation. It is distinct from Account-to-Account (A2A) bank payments. For host-to-tool context integration, see [Model Context Protocol](/protocols/mcp/); for agent payment authorization built on A2A, see [Agent Payments Protocol (AP2)](/protocols/ap2/).",
   "tier": "flagship",
   "lifecycle_status": "published_standard",
   "wire_archetype": "harnesses_rpc_ui",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "This page covers the Agent2Agent Protocol (A2A), the open protocol for capability discovery via an Agent Card and inter-agent task delegation. It is distinct from Account-to-Account (A2A) bank payments. For host-to-tool context integration, see [Model Context Protocol](/protocols/mcp/); for agent payment authorization built on A2A, see [Agent Payments Protocol (AP2)](/protocols/ap2/). [1]",
   "v05_elevator_pitch_md": "A2A is a peer-to-peer interoperability standard that lets independent AI agents built on different frameworks or vendor stacks discover each other's skills and delegate multi-turn tasks without exposing their internal memory, prompts, or private tools. Instead of writing custom point-to-point glue code for every cross-vendor agent pairing, a client reads a remote agent's JSON Agent Card at `/.well-known/agent-card.json` and coordinates stateful work through standardized operations such as `SendMessage`, `SendStreamingMessage`, and `GetTask`. [1][2]",
   "v05_lead_md": "The **Agent2Agent Protocol** (**A2A**) is an open standard originated by Google on April 9, 2025 (`2025-04-09`) for capability discovery and task delegation between independent, opaque AI agent systems across different frameworks and vendor stacks without exposing internal memory, state, or tool implementations. [1][3] An A2A client fetches the server's JSON Agent Card at `https://{server_domain}/.well-known/agent-card.json` (permanently registered with IANA on `2025-08-01`, renamed from `/.well-known/agent.json` in `0.3.0`) and invokes PascalCase operations (`SendMessage`, `SendStreamingMessage`, `GetTask`, `CancelTask`) over one of three core `supportedInterfaces` bindings: JSON-RPC 2.0 over HTTP(S) (`JSONRPC`) with Server-Sent Events (`text/event-stream`), gRPC (`GRPC`), or RESTful `HTTP+JSON` (`application/a2a+json`) carrying the `A2A-Version` header. [4][5][6][7][8] Transferred to the Linux Foundation on June 23, 2025 (`2025-06-23`), A2A merged IBM's Agent Communication Protocol in August 2025, reached its first stable release (`1.0.0`) on March 12, 2026 (`2026-03-12`, followed by `1.0.1` on `2026-05-26`), and was approved as an Agentic AI Foundation (AAIF) Growth Stage project in August 2026 (`2026-08-17`). [7][9][10][11][12][13] Release candidate v1.1.0-rc adds an IANA media-type registration template for `application/a2a-agent-card+json`, for inclusion in the 1.1 release (commit dated 2026-10-27). Inclusion of the template does not mean IANA registration is complete. [14]",
   "v05_identity_sentence_md": "The **Agent2Agent Protocol** (**A2A**) is an open standard originated by Google on April 9, 2025 (`2025-04-09`) for capability discovery and task delegation between independent, opaque AI agent systems across different frameworks and vendor stacks without exposing internal memory, state, or tool implementations. [1][3]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Coordinate](/category/coordinate/) (`coordinate`)"
    },
    {
     "label": "Form",
     "value_md": "Endpoint (`endpoint`)"
    },
    {
     "label": "Originated by",
     "value_md": "Google (launched 2025-04-09) [3]"
    },
    {
     "label": "Governed by",
     "value_md": "Agentic AI Foundation (AAIF) under the Linux Foundation (Linux Foundation project launched 2025-06-23; AAIF Growth Stage approved by Technical Committee 2026-07-15 and Governing Board 2026-08-04, announced 2026-08-17); nine-seat Technical Steering Committee [9][11][13][15]"
    },
    {
     "label": "Track",
     "value_md": "Foundation / Consortium Specification (`linux-foundation`); AAIF Growth Stage hosted project [2][11]"
    },
    {
     "label": "Status",
     "value_md": "Active open standard; v1.0 is the first stable specification (March 2026); latest release `1.0.1` (changelog `2026-05-26`, GitHub release `2026-05-28`) [11][16]"
    },
    {
     "label": "Version",
     "value_md": "`1.0.1` (changelog `2026-05-26`; GitHub release `2026-05-28`); `1.0.0` (`2026-03-12`); `0.3.0` (`2025-07-30`); release candidate v1.1.0-rc in progress (commit 2026-10-27). The specification page header still lists `1.0.0` as Latest Released Version (previous: `0.3.0`, `0.2.6`, `0.1.0`). [1][7][14][16]"
    },
    {
     "label": "Message format",
     "value_md": "JSON-RPC 2.0 over HTTP(S) (`JSONRPC`) with Server-Sent Events (`text/event-stream`); gRPC (`GRPC`, Protocol Buffers over HTTP/2); RESTful `HTTP+JSON` (`application/a2a+json` preferred in `1.0.1`) [1][7]"
    },
    {
     "label": "Headers",
     "value_md": "`A2A-Version`, `A2A-Extensions` [1]"
    },
    {
     "label": "IANA registration",
     "value_md": "`agent-card.json` in IANA Well-Known URIs (`permanent`, `2025-08-01`, change controller `Linux Foundation`; spec section 14.3 template names `A2A Protocol Working Group`). Section 14.1–14.2 provide registration templates for `application/a2a+json`, `A2A-Version`, and `A2A-Extensions`. Release candidate v1.1.0-rc adds a registration template for `application/a2a-agent-card+json` (commit 2026-10-27); inclusion of the template does not mean IANA registration is complete. [1][5][14]"
    },
    {
     "label": "Specification",
     "value_md": "[Agent2Agent (A2A) Protocol Specification](https://a2a-protocol.org/latest/specification/) [1]"
    },
    {
     "label": "Found at",
     "value_md": "`GET https://{server_domain}/.well-known/agent-card.json` (renamed from `/.well-known/agent.json` in `0.3.0` on `2025-07-30`), registry/catalog lookup, or direct configuration [1][7]"
    },
    {
     "label": "Licence",
     "value_md": "Apache License, Version 2.0 [1]"
    }
   ],
   "v05_problem_md": "Before A2A, handing off work between agents built on different frameworks required custom integration code for every new pairing. Those agents might use different languages or come from different vendors, with no common interaction model to bridge disparate agentic systems. [1][2] An A2A server publishes an Agent Card whose `supportedInterfaces` entries each declare a `protocolBinding` and `protocolVersion`. Clients call `SendMessage` or `SendStreamingMessage` to initiate or continue work, and use `GetTask` and `CancelTask` against a stateful Task across states such as `TASK_STATE_SUBMITTED` and `TASK_STATE_WORKING`. [1] For long-running or disconnected work, the server can stream incremental updates with `text/event-stream` or deliver asynchronous updates by HTTP POST to a client-provided webhook. [1] Agents stay opaque: they collaborate from declared capabilities and exchanged information, without sharing internal thoughts, plans, tool implementations, state, or memory. MCP, not A2A, standardizes how an agent connects to tools, APIs, and other resources. [1]",
   "v05_mechanism_delta_md": "An A2A server publishes an Agent Card whose `supportedInterfaces` entries each declare a `protocolBinding` and `protocolVersion`. Clients call `SendMessage` or `SendStreamingMessage` to initiate or continue work, and use `GetTask` and `CancelTask` against a stateful Task across states such as `TASK_STATE_SUBMITTED` and `TASK_STATE_WORKING`. [1] For long-running or disconnected work, the server can stream incremental updates with `text/event-stream` or deliver asynchronous updates by HTTP POST to a client-provided webhook. [1]",
   "v05_scope_boundary_md": "Agents stay opaque: they collaborate from declared capabilities and exchanged information, without sharing internal thoughts, plans, tool implementations, state, or memory. MCP, not A2A, standardizes how an agent connects to tools, APIs, and other resources. [1]",
   "v05_fuzzy_additions": [
    {
     "id": "discovery-and-the-well-known-agent-card",
     "heading": "Discovery and the well-known Agent Card",
     "body_md": "A2A standardizes self-description in an Agent Card, a JSON business card for the remote agent, and leaves discovery to the deployment. A client that knows the domain GETs `/.well-known/agent-card.json`, following RFC 8615. Curated registries and direct configuration are allowed, but the current A2A specification does not prescribe a standard API for curated registries. [1][17]",
     "bullets": [
      {
       "label": "Supported interfaces",
       "text_md": "An Agent Card lists `name`, `description`, and `provider`, plus an ordered `supportedInterfaces` array. Each `AgentInterface` has `url`, `protocolBinding`, and `protocolVersion`; the first entry is preferred. v1.0 replaced `preferredTransport` and `additionalInterfaces` with `supportedInterfaces[]`, beside `streaming`, `pushNotifications`, `securitySchemes`, and `AgentSkill` entries. [1][8][17]"
      },
      {
       "label": "No standard registry API",
       "text_md": "A curated registry is an intermediary catalog. Servers publish Agent Cards to it, and clients query by skills, tags, provider, or capabilities. The specification does not define that registry API. Direct configuration, including hardcoded URLs or proprietary APIs, also lacks a standard discovery method. [17]"
      },
      {
       "label": "Well-known path rename",
       "text_md": "Issue #66 initially requested `.well-known/agent.json` (citing existing production deployments) with the Linux Foundation as change controller, then adopted `agent-card.json` after reviewers noted `agent.json` was too generic. PR #841, merged 2025-07-29, changed `/.well-known/agent.json` to `/.well-known/agent-card.json`. Changelog `0.3.0` (2025-07-30) records that break. The `v0.3.0` specification publishes `https://{server_domain}/.well-known/agent-card.json`, and IANA registered `agent-card.json` as permanent on 2025-08-01. [4][5][6][7][18]"
      },
      {
       "label": "Extended Agent Cards",
       "text_md": "`securitySchemes` names the schemes used to authenticate to the agent. If `AgentCard.capabilities.extendedAgentCard` is true, `GetExtendedAgentCard` (which MUST require authentication) returns a more detailed card after authentication, and clients should replace the cached public card for that session. Agent Cards MAY also be signed using JSON Web Signatures (`JWS`, RFC 7515) over RFC 8785 `JCS` canonical JSON, and clients SHOULD verify `signatures` when present. Authenticated extended cards are recommended for sensitive skills, using out-of-band dynamic credentials rather than static secrets in the card. [1][17]"
      }
     ]
    },
    {
     "id": "task-lifecycle-message-parts-and-transport-bindings",
     "heading": "Task lifecycle, message parts, and transport bindings",
     "body_md": "A Task is the stateful unit of work. Clients open it with `SendMessage` or `SendStreamingMessage`, read it with `GetTask`, and may cancel it with `CancelTask`. Content rides in typed `Part` containers, and outputs come back as `Artifact` objects. Live updates use Server-Sent Events or a webhook. The same operations bind to JSON-RPC 2.0, gRPC, and `HTTP+JSON`. [1]",
     "bullets": [
      {
       "label": "Lifecycle operations",
       "text_md": "`SendMessage` returns a Task or a direct Message, and processing may continue afterward. States run through `TASK_STATE_SUBMITTED`, `TASK_STATE_WORKING`, interrupted `TASK_STATE_INPUT_REQUIRED` and `TASK_STATE_AUTH_REQUIRED`, and terminal `TASK_STATE_COMPLETED`, `TASK_STATE_FAILED`, `TASK_STATE_CANCELED`, and `TASK_STATE_REJECTED`. `SendStreamingMessage` emits `TaskStatusUpdateEvent` and `TaskArtifactUpdateEvent` objects. `GetTask` reads status, artifacts, and optional history, while `ListTasks` lists tasks visible within the caller's authorization scope. `CancelTask` requests cancellation, which is not guaranteed, `SubscribeToTask` resubscribes to an active task stream, and `CreateTaskPushNotificationConfig`, `GetTaskPushNotificationConfig`, `ListTaskPushNotificationConfigs`, and `DeleteTaskPushNotificationConfig` manage webhook push configurations. [1]"
      },
      {
       "label": "Message parts",
       "text_md": "A `Part` is the smallest unit of content in a Message or Artifact: a container for text, a file such as an image or video, or a structured JSON blob. An `Artifact` is task output, a document, image, or structured data, composed of Parts. [1]"
      },
      {
       "label": "Streaming and webhooks",
       "text_md": "Streaming sends real-time updates for status changes and artifact chunks. The JSON-RPC binding uses Server-Sent Events (`text/event-stream`), delivers events in generation order, and may broadcast one task on multiple concurrent streams. Push notifications POST asynchronous updates to a client webhook for disconnected clients. `GetTask` reads the final state afterward. Under §13 Security Considerations, implementations MUST enforce authorization checks on every operation and scope `ListTasks`, `GetTask`, and task mutations to the caller's authorized access boundaries even when `contextId` or filter parameters are omitted (§13.1); webhook-calling agents MUST include `PushNotificationConfig.authentication` credentials and SHOULD validate webhook URLs against SSRF by rejecting private IP ranges (`127.0.0.0/8`, `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`), localhost, and link-local addresses, while webhook-receiving clients MUST validate webhook authenticity and SHOULD process notifications idempotently (§13.2). An unrefereed arXiv preprint, A2ABreak (arXiv:2609.10871, last revised 24 Oct 2026, v3), models the `1.0.0` protocol as 37 states and 76 transitions and claims 11 new vulnerabilities, each exploitable by a specification-compliant adversary without requiring any implementation flaw. Those findings are preprint claims, not an established specification defect. [1][19][20]"
      },
      {
       "label": "Three protocol bindings",
       "text_md": "`JSONRPC` is JSON-RPC 2.0 over HTTP(S), with PascalCase methods such as `SendMessage` and `GetTask` and streaming on `text/event-stream`. `GRPC` uses Protocol Buffers over HTTP/2 and the `A2AService` service. `HTTP+JSON` is REST with JSON payloads and prefers `application/a2a+json`. Clients select the first supported `supportedInterfaces` entry, including its `protocolBinding` and `protocolVersion`. [1]"
      }
     ]
    }
   ],
   "v05_diagram": {
    "title": "Discovery and task lifecycle",
    "heading": "Discovery and task lifecycle",
    "mermaid": "flowchart TD\n  Client[\"A2A Client\"] -->|\"GET /.well-known/agent-card.json, registry, or direct config\"| Card[\"Agent Card\"]\n  Card -->|\"First supported interface: JSONRPC, GRPC, or HTTP+JSON\"| Send[\"Send Message\"]\n  Send --> Direct[\"Direct Message\"]\n  Send --> Task[\"Task\"]\n  Task --> Submitted[\"TASK_STATE_SUBMITTED\"]\n  Submitted --> Working[\"TASK_STATE_WORKING\"]\n  Working --> NeedInput[\"INPUT_REQUIRED or AUTH_REQUIRED\"]\n  NeedInput --> Working\n  Working --> Terminal[\"COMPLETED, FAILED, CANCELED, or REJECTED\"]\n  Task -->|\"Poll, stream, or webhook\"| Client",
    "caption_md": "An A2A Client fetches `/.well-known/agent-card.json`, selects the first supported interface (`JSONRPC`, `GRPC`, or `HTTP+JSON`), and sends a message. The server returns either a direct message or a stateful task that moves through `TASK_STATE_SUBMITTED`, `TASK_STATE_WORKING`, `TASK_STATE_INPUT_REQUIRED` or `TASK_STATE_AUTH_REQUIRED`, and a terminal state (`TASK_STATE_COMPLETED`, `TASK_STATE_FAILED`, `TASK_STATE_CANCELED`, or `TASK_STATE_REJECTED`), with updates by poll, stream, or webhook. [1]"
   },
   "v05_wire_artifact": {
    "title": "Sample Agent Card",
    "heading": "Sample Agent Card",
    "lang": "json",
    "code": "{\n  \"name\": \"GeoSpatial Route Planner Agent\",\n  \"description\": \"Provides advanced route planning, traffic analysis, and custom map generation services. This agent can calculate optimal routes, estimate travel times considering real-time traffic, and create personalized maps with points of interest.\",\n  \"supportedInterfaces\": [\n    {\"url\": \"https://georoute-agent.example.com/a2a/v1\", \"protocolBinding\": \"JSONRPC\", \"protocolVersion\": \"1.0\"},\n    {\"url\": \"https://georoute-agent.example.com/a2a/grpc\", \"protocolBinding\": \"GRPC\", \"protocolVersion\": \"1.0\"},\n    {\"url\": \"https://georoute-agent.example.com/a2a/json\", \"protocolBinding\": \"HTTP+JSON\", \"protocolVersion\": \"1.0\"}\n  ],\n  \"provider\": {\n    \"organization\": \"Example Geo Services Inc.\",\n    \"url\": \"https://www.examplegeoservices.com\"\n  },\n  \"iconUrl\": \"https://georoute-agent.example.com/icon.png\",\n  \"version\": \"1.2.0\",\n  \"documentationUrl\": \"https://docs.examplegeoservices.com/georoute-agent/api\",\n  \"capabilities\": {\n    \"streaming\": true,\n    \"pushNotifications\": true,\n    \"extendedAgentCard\": true\n  },\n  \"securitySchemes\": {\n    \"google\": {\n      \"openIdConnectSecurityScheme\": {\n        \"openIdConnectUrl\": \"https://accounts.google.com/.well-known/openid-configuration\"\n      }\n    }\n  },\n  \"securityRequirements\": [{ \"schemes\": { \"google\": { \"list\": [\"openid\", \"profile\", \"email\"] } } }],\n  \"defaultInputModes\": [\"application/json\", \"text/plain\"],\n  \"defaultOutputModes\": [\"application/json\", \"image/png\"],\n  \"skills\": [\n    {\n      \"id\": \"route-optimizer-traffic\",\n      \"name\": \"Traffic-Aware Route Optimizer\",\n      \"description\": \"Calculates the optimal driving route between two or more locations, taking into account real-time traffic conditions, road closures, and user preferences (e.g., avoid tolls, prefer highways).\",\n      \"tags\": [\"maps\", \"routing\", \"navigation\", \"directions\", \"traffic\"],\n      \"examples\": [\n        \"Plan a route from '1600 Amphitheatre Parkway, Mountain View, CA' to 'San Francisco International Airport' avoiding tolls.\",\n        \"{\\\"origin\\\": {\\\"lat\\\": 37.422, \\\"lng\\\": -122.084}, \\\"destination\\\": {\\\"lat\\\": 37.7749, \\\"lng\\\": -122.4194}, \\\"preferences\\\": [\\\"avoid_ferries\\\"]}\"\n      ],\n      \"inputModes\": [\"application/json\", \"text/plain\"],\n      \"outputModes\": [\n        \"application/json\",\n        \"application/vnd.geo+json\",\n        \"text/html\"\n      ]\n    },\n    {\n      \"id\": \"custom-map-generator\",\n      \"name\": \"Personalized Map Generator\",\n      \"description\": \"Creates custom map images or interactive map views based on user-defined points of interest, routes, and style preferences. Can overlay data layers.\",\n      \"tags\": [\"maps\", \"customization\", \"visualization\", \"cartography\"],\n      \"examples\": [\n        \"Generate a map of my upcoming road trip with all planned stops highlighted.\",\n        \"Show me a map visualizing all coffee shops within a 1-mile radius of my current location.\"\n      ],\n      \"inputModes\": [\"application/json\"],\n      \"outputModes\": [\n        \"image/png\",\n        \"image/jpeg\",\n        \"application/json\",\n        \"text/html\"\n      ]\n    }\n  ],\n  \"signatures\": [\n    {\n      \"protected\": \"eyJhbGciOiJFUzI1NiIsInR5cCI6IkpPU0UiLCJraWQiOiJrZXktMSIsImprdSI6Imh0dHBzOi8vZXhhbXBsZS5jb20vYWdlbnQvandrcy5qc29uIn0\",\n      \"signature\": \"QFdkNLNszlGj3z3u0YQGt_T9LixY3qtdQpZmsTdDHDe3fXV9y9-B3m2-XgCpzuhiLt8E0tV6HXoZKHv4GtHgKQ\"\n    }\n  ]\n}",
    "caption_md": "Sample Agent Card for the GeoSpatial Route Planner Agent (§8.5 illustrative specification example). It declares `supportedInterfaces` for `JSONRPC`, `GRPC`, and `HTTP+JSON`, plus `capabilities`, `securitySchemes`, `skills`, and optional `signatures` (Agent Cards MAY be signed using JWS over RFC 8785 canonical JSON, and clients SHOULD verify signatures when present). [1]"
   },
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "JSON-RPC 2.0 Specification",
      "spec_or_rfc": "JSON-RPC 2.0",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "Profiles JSON-RPC 2.0 over HTTP(S) (`JSONRPC` binding) for task method calls (`SendMessage`, `GetTask`, `CancelTask`) paired with Server-Sent Events (`text/event-stream`) for streaming updates. [1]"
     },
     {
      "name": "Well-Known URIs (RFC 8615)",
      "spec_or_rfc": "RFC 8615",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "Registers the permanent IANA well-known URI suffix `agent-card.json` (2025-08-01), fetched via HTTP `GET` at `https://{server_domain}/.well-known/agent-card.json` for Agent Card discovery. [1][5]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "MCP provides the vertical integration layer connecting an agent to external tools, APIs, and resources, whereas A2A provides the horizontal peer-to-peer protocol for capability discovery and task delegation between opaque agents. [1][2]"
     },
     {
      "target_id": "agent-communication-protocol",
      "target_name": "Agent Communication Protocol",
      "relation_type": "supersedes",
      "relation_label": "Supersedes",
      "delta_md": "IBM's Agent Communication Protocol (ACP) for the BeeAI platform officially merged into A2A under the Linux Foundation in August 2025, winding down standalone ACP development in favor of A2A. [11][12]"
     },
     {
      "target_id": "agent-connect-protocol",
      "target_name": "Agent Connect Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Within Cisco's AGNTCY stack (which deprecated standalone Agent Connect Protocol in favor of A2A), SLIM (Secure Low-Latency Interactive Messaging) carries A2A messages via the experimental SLIMRPC binding, using Messaging Layer Security (MLS, RFC 9420) by default for end-to-end session encryption. [13][21][22][23]"
     },
     {
      "target_id": "ap2",
      "target_name": "Agent Payments Protocol (AP2)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "AP2 extends A2A into agentic commerce by adding payment authorization while shopping and merchant agents communicate over A2A for discovery, pricing, and fulfillment. [11]"
     },
     {
      "target_id": "agentproto",
      "target_name": "IETF agentproto WG",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "The IETF agentproto Working Group (Agent Communication Protocols) is Active in the Applications and Real-Time Area (art) under approved charter `charter-ietf-agentproto-01` (chairs Leslie Daigle and Orie Steele), which scopes the WG to dialog-context correlation and lifecycle management that complements rather than replaces application-layer agent communication protocols (explicitly naming MCP and A2A as capable of carrying dialog context) and defines no new transport protocol. Individual `draft-manyfolks-agentproto-arch-00` (30 October 2026) proposes an Agent Communications Protocol (ACP) architecture for communication among user agent clients, AI agents, and tools. [24][25]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (20 probed or cited examples across 4 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).",
    "side_a": {
     "visible": true,
     "heading": "Public A2A agents & managed server runtimes",
     "col4_header": "Agent Card endpoint, transport & role",
     "note_md": null,
     "rows": [
      {
       "actor": "Telnyx (Telnyx Assistant)",
       "role": "Public A2A agent",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-11-03",
       "col4_md": "Live Agent Card binding `JSONRPC` (`1.0` and `0.3`) at `https://api.telnyx.com/v2/support_agent/public/a2a` with `tasks/get` polling.",
       "source_md": "[Telnyx Assistant Agent Card](https://telnyx.com/.well-known/agent-card.json) [26]"
      },
      {
       "actor": "Redocly",
       "role": "Public A2A agent",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Live Agent Card advertising `protocolVersion` `0.3.0` (`preferredTransport` `HTTP+JSON`) at `https://redocly.com/a2a` and MCP extension `https://redocly.com/mcp`.",
       "source_md": "[Redocly Agent Card](https://redocly.com/.well-known/agent-card.json) [27]"
      },
      {
       "actor": "Pangram",
       "role": "Public A2A agent",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Live Agent Card binding `JSONRPC` (`protocolVersion` `1.0`) at `https://www.pangram.com/a2a` for `detect-ai-text` and `detect-ai-image` with `x-api-key`.",
       "source_md": "[Pangram Agent Card](https://www.pangram.com/.well-known/agent-card.json) [28]"
      },
      {
       "actor": "Ticket Fairy",
       "role": "Public A2A agent",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Live Agent Card binding `JSONRPC` (`protocolVersion` `1.0`) at `https://www.ticketfairy.com/agentic/a2a` with `search_events`, `ticket-checkout`, A2UI `v0.8`, and UCP.",
       "source_md": "[Ticket Fairy Agent Card](https://www.ticketfairy.com/.well-known/agent-card.json) [29]"
      },
      {
       "actor": "Warp (Warp Freight)",
       "role": "Public A2A agent",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Live Agent Card binding `JSONRPC` (`protocolVersion` `1.0`) at `https://www.wearewarp.com/api/a2a/jsonrpc` with `bearer` `warpApiKey` and freight skills.",
       "source_md": "[Warp Freight Agent Card](https://www.wearewarp.com/.well-known/agent-card.json) [30]"
      },
      {
       "actor": "AWS (Bedrock AgentCore Runtime)",
       "role": "Managed agent runtime",
       "status": "Supported (release announcement)",
       "status_display": "Supported (release announcement) · as of 2025-11-11",
       "col4_md": "November 2025 blog announces container runtime (`port 9000`) proxying `JSON-RPC 2.0` and authenticated `/.well-known/agent-card.json`.",
       "source_md": "[AWS, AgentCore A2A support (11 NOV 2025)](https://aws.amazon.com/blogs/machine-learning/introducing-agent-to-agent-protocol-support-in-amazon-bedrock-agentcore-runtime/) [31]"
      },
      {
       "actor": "SAP (Agent Gateway)",
       "role": "Enterprise agent gateway",
       "status": "Supported (release announcement)",
       "status_display": "Supported (release announcement) · as of 2026-10-27",
       "col4_md": "October 2026 announcement of inbound A2A gateway combining `AgentCard` URLs with Agentic Resource Discovery (`ARD`).",
       "source_md": "[SAP, Agent Gateway A2A (2026-10-27)](https://architecture.learning.sap.com/news/2026/10/27/a2a-agent-gateway-interoperability) [32]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Client orchestrators & enterprise host platforms",
     "col4_header": "Outbound client role & auth",
     "note_md": null,
     "rows": [
      {
       "actor": "Google (Gemini Enterprise)",
       "role": "Client orchestrator",
       "status": "Supported (release announcement)",
       "status_display": "Supported (release announcement) · as of 2026-08-17",
       "col4_md": "August 2026 release note announces general availability for registering external `A2A` and `A2UI` (`v0.9`, `v0.8`) agents.",
       "source_md": "[Google Cloud, Gemini Enterprise release notes](https://docs.cloud.google.com/gemini/enterprise/docs/release-notes) [33]"
      },
      {
       "actor": "Microsoft (Foundry Agent Service)",
       "role": "Client orchestrator & target",
       "status": "Partial",
       "status_display": "Partial · as of 2026-10-28",
       "col4_md": "GA `a2a` tool for `v1.0` `JSON-RPC` (text-only, no streaming) and preview `a2a_preview` tool for `v0.3`.",
       "source_md": "[Microsoft Learn, Foundry A2A tool](https://learn.microsoft.com/en-us/azure/foundry/agents/how-to/tools/agent-to-agent) [34]"
      },
      {
       "actor": "Microsoft (Copilot Studio)",
       "role": "Client orchestrator",
       "status": "Partial",
       "status_display": "Partial · as of 2026-08-26",
       "col4_md": "Delegates tasks via `message/send` (`contextId`) and auto-reads metadata from the legacy pre-v0.3 `/.well-known/agent.json` card path.",
       "source_md": "[Microsoft Learn, Copilot Studio A2A](https://learn.microsoft.com/en-us/microsoft-copilot-studio/add-agent-agent-to-agent) [35]"
      },
      {
       "actor": "SAP (Joule)",
       "role": "Outbound A2A client",
       "status": "Partial",
       "status_display": "Partial · as of 2026-10-26",
       "col4_md": "Outbound `agent-request` client with webhook push notifications; bidirectional third-party `Agent Gateway` communication not yet GA.",
       "source_md": "[SAP Architecture Center, Joule outbound A2A](https://architecture.learning.sap.com/docs/ref-arch/ae6821) [36]"
      },
      {
       "actor": "A2A CLI",
       "role": "Official CLI client",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-11-11",
       "col4_md": "Live OAuth Client ID Metadata Document (HTTP 200) names client A2A CLI (`client_id` `https://a2a-protocol.org/oauth/a2a-cli.json`, `client_uri` `https://github.com/a2aproject/a2a-cli`) with grants `authorization_code`, `refresh_token`, and `urn:ietf:params:oauth:grant-type:device_code`, and `token_endpoint_auth_method` `none`.",
       "source_md": "[A2A CLI OAuth client metadata](https://a2a-protocol.org/oauth/a2a-cli.json) [37]"
      }
     ]
    },
    "additional_tables": [
     {
      "visible": true,
      "heading": "Official SDKs & agent frameworks",
      "col4_header": "Language / framework surface",
      "note_md": null,
      "rows": [
       {
        "actor": "Official A2A SDKs",
        "role": "Official client & server SDKs",
        "status": "Supported",
        "status_display": "Supported · as of 2026-10-28",
        "col4_md": "Proto-generated official client and server SDKs across six languages: `Python`, `Go`, `Java`, `JS`, `.NET`, and `Rust`.",
        "source_md": "[A2A specification](https://a2a-protocol.org/latest/specification/) [1] · [Microsoft Learn, official A2A SDK](https://learn.microsoft.com/en-us/azure/foundry/agents/how-to/tools/agent-to-agent) [34] · [Linux Foundation one-year A2A release](https://www.linuxfoundation.org/press/a2a-protocol-surpasses-150-organizations-lands-in-major-cloud-platforms-and-sees-enterprise-production-use-in-first-year) [38]"
       },
       {
        "actor": "Google ADK",
        "role": "Agent framework",
        "status": "Listed",
        "status_display": "Listed · as of 2026-08-04",
        "col4_md": "AAIF proposal lists native `Google ADK` client and server support across local runtimes and `Agent Platform Runtime`.",
        "source_md": "[AAIF project proposal #37](https://github.com/aaif/project-proposals/issues/37) [13] · [AAIF, A2A joins AAIF](https://aaif.io/blog/a2a-joins-aaif) [11]"
       },
       {
        "actor": "IBM BeeAI",
        "role": "Agent framework",
        "status": "Listed",
        "status_display": "Listed · as of 2026-08-17",
        "col4_md": "Merged deprecated `ACP` into `A2A` (August 2025); `BeeAI Framework` ships native client and server adapters.",
        "source_md": "[BeeAI ACP README](https://raw.githubusercontent.com/i-am-bee/acp/main/README.md) [12] · [AAIF, A2A joins AAIF](https://aaif.io/blog/a2a-joins-aaif) [11] · [A2A, joining the Agentic AI Foundation](https://a2a-protocol.org/latest/blog/2026/08/27/a-new-chapter-for-a2a-joining-the-agentic-ai-foundation/) [2] · [AAIF project proposal #37](https://github.com/aaif/project-proposals/issues/37) [13]"
       },
       {
        "actor": "LangGraph",
        "role": "Agent framework",
        "status": "Listed",
        "status_display": "Listed · as of 2026-08-27",
        "col4_md": "AAIF proposal lists hosted `/a2a/{assistant_id}` endpoints with auto-generated Agent Cards, `SSE` streaming, and `LangSmith` tracing.",
        "source_md": "[A2A, joining the Agentic AI Foundation](https://a2a-protocol.org/latest/blog/2026/08/27/a-new-chapter-for-a2a-joining-the-agentic-ai-foundation/) [2] · [AAIF project proposal #37](https://github.com/aaif/project-proposals/issues/37) [13]"
       },
       {
        "actor": "CrewAI",
        "role": "Agent framework",
        "status": "Listed",
        "status_display": "Listed · as of 2026-08-27",
        "col4_md": "AAIF proposal lists `CrewAI AMP` production hosting across `REST`/`JSON-RPC`/`gRPC` transports with `OIDC`, `OAuth2`, and `mTLS`.",
        "source_md": "[A2A, joining the Agentic AI Foundation](https://a2a-protocol.org/latest/blog/2026/08/27/a-new-chapter-for-a2a-joining-the-agentic-ai-foundation/) [2] · [AAIF project proposal #37](https://github.com/aaif/project-proposals/issues/37) [13]"
       },
       {
        "actor": "Pydantic AI",
        "role": "Agent framework",
        "status": "Listed",
        "status_display": "Listed · as of 2026-08-27",
        "col4_md": "AAIF proposal lists native `FastA2A` library integration exposing `Pydantic AI` agents as `ASGI` A2A applications.",
        "source_md": "[A2A, joining the Agentic AI Foundation](https://a2a-protocol.org/latest/blog/2026/08/27/a-new-chapter-for-a2a-joining-the-agentic-ai-foundation/) [2] · [AAIF project proposal #37](https://github.com/aaif/project-proposals/issues/37) [13]"
       },
       {
        "actor": "AG2",
        "role": "Agent framework",
        "status": "Listed",
        "status_display": "Listed · as of 2026-08-27",
        "col4_md": "A2A blog and AAIF proposal list `AG2` (formerly `AutoGen`) agent swarm connections tagged with `a2a`.",
        "source_md": "[A2A, joining the Agentic AI Foundation](https://a2a-protocol.org/latest/blog/2026/08/27/a-new-chapter-for-a2a-joining-the-agentic-ai-foundation/) [2] · [AAIF project proposal #37](https://github.com/aaif/project-proposals/issues/37) [13]"
       }
      ]
     },
     {
      "visible": true,
      "heading": "Public A2A registries & directories",
      "col4_header": "Verification & protocol surface",
      "note_md": null,
      "rows": [
       {
        "actor": "AgentPeering",
        "role": "Independent public A2A registry",
        "status": "Supported",
        "status_display": "Supported · checked 2026-11-06",
        "col4_md": "Independent vendor-neutral A2A registry verifying domain ownership, monitoring uptime, and speaking `v0.3` `message/send` (plus `v0.2` `tasks/send`).",
        "source_md": "[AgentPeering FAQ](https://agentpeering.com/docs/faq) [39]"
       }
      ]
     }
    ],
    "censuses": [
     {
      "label": "Google Developers Blog, Announcing A2A (2025-04-09)",
      "as_of": "2025-04-09",
      "value_md": "More than 50 technology and enterprise service partners (including Atlassian, Box, Cohere, Intuit, LangChain, MongoDB, PayPal, Salesforce, SAP, ServiceNow, UKG, Workday, Accenture, BCG, Capgemini, Cognizant, Deloitte, HCLTech, Infosys, KPMG, McKinsey, PwC, TCS, and Wipro) announced at A2A's initial launch on April 9, 2025. [3]"
     },
     {
      "label": "Linux Foundation, A2A project launch (2025-06-23)",
      "as_of": "2025-06-23",
      "value_md": "More than 100 technology companies reported as supporting the Agent2Agent protocol when Google donated the specification, SDKs, and developer tooling to the Linux Foundation on June 23, 2025. [9]"
     },
     {
      "label": "AAIF, A2A joins AAIF (2026-08-17)",
      "as_of": "2026-08-17",
      "value_md": "Over 150 partner organizations across cloud providers, enterprise SaaS platforms, and agent frameworks reported as backing A2A when it joined the Agentic AI Foundation (AAIF) as a Growth Stage project in August 2026. [2][11]"
     },
     {
      "label": "Linux Foundation one-year A2A press release (9 April 2026)",
      "as_of": "2026-04-09",
      "value_md": "On April 9, 2026 the Linux Foundation reported that supporting organizations had grown from more than 50 to over 150, the core repository had surpassed 22,000 GitHub stars, and official SDKs had expanded from Python to five production-ready languages (Python, JavaScript, Java, Go, and .NET), later joined by Rust on the specification site. [1][38]"
     }
    ],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**Depended on by:** [Ad Context Protocol (AdCP)](/protocols/adcp/)"
    },
    {
     "item_md": "**Peer alternatives:** [Agent Interaction & Transaction Protocol (AITP)](/protocols/aitp/), [Agent Network Protocol](/protocols/anp/), [Agent Protocol](/protocols/agent-protocol-aief/), [Agora Protocol](/protocols/agora-protocol/), [Coral Protocol (CoralOS)](/protocols/coral-protocol/), [Eclipse LMOS (Language Model Operating System)](/protocols/lmos/), [ERC-8001: Agent Coordination Framework](/protocols/erc-8001/), [GB/Z 185 Artificial intelligence — Agent interconnection](/protocols/gbz-185-agent-interconnection/), [MCP Server Cards](/protocols/mcp-server-cards/), [Natural Language Interaction Protocol (NLIP)](/protocols/nlip/)"
    },
    {
     "item_md": "**Complements:** [A2UI (Agent to UI) Protocol](/protocols/a2ui/), [Agent Client Protocol](/protocols/agent-client-protocol/), [Agent-User Interaction Protocol (AG-UI)](/protocols/ag-ui/), [ERC-8004: Trustless Agents](/protocols/erc-8004/), [Open Responses](/protocols/open-responses/), [Universal Commerce Protocol (UCP)](/protocols/ucp/), [Agent Directory Service](/protocols/ads/), [Agent Identity Protocol (AIP): Verifiable Delegation for AI Agent Systems](/protocols/aip-delegation-chain/), [Agent Name Service v2 (ANS)](/protocols/ans/), [Agent Registration and Discovery Protocol](/protocols/ardp/), and [16 more in the protocol directory](/protocols/)"
    },
    {
     "item_md": "**[Coordinate protocols](/category/coordinate/)** — Category index for `coordinate` standards."
    }
   ],
   "v05_compiled_md": "---\nid: a2a\ntitle: \"Agent2Agent Protocol (A2A)\"\ntier: flagship\nlifecycle_status: published_standard\ncategory: coordinate\nform: endpoint\nwire_archetype: harnesses_rpc_ui\nspec_url: https://a2a-protocol.org/latest/specification/\nlast_checked: 2026-11-12\n---\n\n# Agent2Agent Protocol (A2A)\n\n**Category:** [Coordinate](/category/coordinate/) (`coordinate`) · **Form:** Endpoint (`endpoint`) · **Last checked:** 2026-11-12\n\n> *This page covers the Agent2Agent Protocol (A2A), the open protocol for capability discovery via an Agent Card and inter-agent task delegation. It is distinct from Account-to-Account (A2A) bank payments. For host-to-tool context integration, see [Model Context Protocol](/protocols/mcp/); for agent payment authorization built on A2A, see [Agent Payments Protocol (AP2)](/protocols/ap2/). [1]*\n\n> **In brief:** A2A is a peer-to-peer interoperability standard that lets independent AI agents built on different frameworks or vendor stacks discover each other's skills and delegate multi-turn tasks without exposing their internal memory, prompts, or private tools. Instead of writing custom point-to-point glue code for every cross-vendor agent pairing, a client reads a remote agent's JSON Agent Card at `/.well-known/agent-card.json` and coordinates stateful work through standardized operations such as `SendMessage`, `SendStreamingMessage`, and `GetTask`. [1][2]\n\nThe **Agent2Agent Protocol** (**A2A**) is an open standard originated by Google on April 9, 2025 (`2025-04-09`) for capability discovery and task delegation between independent, opaque AI agent systems across different frameworks and vendor stacks without exposing internal memory, state, or tool implementations. [1][3] An A2A client fetches the server's JSON Agent Card at `https://{server_domain}/.well-known/agent-card.json` (permanently registered with IANA on `2025-08-01`, renamed from `/.well-known/agent.json` in `0.3.0`) and invokes PascalCase operations (`SendMessage`, `SendStreamingMessage`, `GetTask`, `CancelTask`) over one of three core `supportedInterfaces` bindings: JSON-RPC 2.0 over HTTP(S) (`JSONRPC`) with Server-Sent Events (`text/event-stream`), gRPC (`GRPC`), or RESTful `HTTP+JSON` (`application/a2a+json`) carrying the `A2A-Version` header. [4][5][6][7][8] Transferred to the Linux Foundation on June 23, 2025 (`2025-06-23`), A2A merged IBM's Agent Communication Protocol in August 2025, reached its first stable release (`1.0.0`) on March 12, 2026 (`2026-03-12`, followed by `1.0.1` on `2026-05-26`), and was approved as an Agentic AI Foundation (AAIF) Growth Stage project in August 2026 (`2026-08-17`). [7][9][10][11][12][13] Release candidate v1.1.0-rc adds an IANA media-type registration template for `application/a2a-agent-card+json`, for inclusion in the 1.1 release (commit dated 2026-10-27). Inclusion of the template does not mean IANA registration is complete. [14]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Coordinate](/category/coordinate/) (`coordinate`) |\n| **Form** | Endpoint (`endpoint`) |\n| **Originated by** | Google (launched 2025-04-09) [3] |\n| **Governed by** | Agentic AI Foundation (AAIF) under the Linux Foundation (Linux Foundation project launched 2025-06-23; AAIF Growth Stage approved by Technical Committee 2026-07-15 and Governing Board 2026-08-04, announced 2026-08-17); nine-seat Technical Steering Committee [9][11][13][15] |\n| **Track** | Foundation / Consortium Specification (`linux-foundation`); AAIF Growth Stage hosted project [2][11] |\n| **Status** | Active open standard; v1.0 is the first stable specification (March 2026); latest release `1.0.1` (changelog `2026-05-26`, GitHub release `2026-05-28`) [11][16] |\n| **Version** | `1.0.1` (changelog `2026-05-26`; GitHub release `2026-05-28`); `1.0.0` (`2026-03-12`); `0.3.0` (`2025-07-30`); release candidate v1.1.0-rc in progress (commit 2026-10-27). The specification page header still lists `1.0.0` as Latest Released Version (previous: `0.3.0`, `0.2.6`, `0.1.0`). [1][7][14][16] |\n| **Message format** | JSON-RPC 2.0 over HTTP(S) (`JSONRPC`) with Server-Sent Events (`text/event-stream`); gRPC (`GRPC`, Protocol Buffers over HTTP/2); RESTful `HTTP+JSON` (`application/a2a+json` preferred in `1.0.1`) [1][7] |\n| **Headers** | `A2A-Version`, `A2A-Extensions` [1] |\n| **IANA registration** | `agent-card.json` in IANA Well-Known URIs (`permanent`, `2025-08-01`, change controller `Linux Foundation`; spec section 14.3 template names `A2A Protocol Working Group`). Section 14.1–14.2 provide registration templates for `application/a2a+json`, `A2A-Version`, and `A2A-Extensions`. Release candidate v1.1.0-rc adds a registration template for `application/a2a-agent-card+json` (commit 2026-10-27); inclusion of the template does not mean IANA registration is complete. [1][5][14] |\n| **Specification** | [Agent2Agent (A2A) Protocol Specification](https://a2a-protocol.org/latest/specification/) [1] |\n| **Found at** | `GET https://{server_domain}/.well-known/agent-card.json` (renamed from `/.well-known/agent.json` in `0.3.0` on `2025-07-30`), registry/catalog lookup, or direct configuration [1][7] |\n| **Licence** | Apache License, Version 2.0 [1] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Discovery and the well-known Agent Card](#discovery-and-the-well-known-agent-card)\n3. [Task lifecycle, message parts, and transport bindings](#task-lifecycle-message-parts-and-transport-bindings)\n4. [Counterparts and related standards](#counterparts-and-related-standards)\n5. [Adoption and ecosystem](#adoption-and-ecosystem)\n6. [See also](#see-also)\n7. [References](#references)\n\n---\n\n## Problem and scope\n\nBefore A2A, handing off work between agents built on different frameworks required custom integration code for every new pairing. Those agents might use different languages or come from different vendors, with no common interaction model to bridge disparate agentic systems. [1][2] An A2A server publishes an Agent Card whose `supportedInterfaces` entries each declare a `protocolBinding` and `protocolVersion`. Clients call `SendMessage` or `SendStreamingMessage` to initiate or continue work, and use `GetTask` and `CancelTask` against a stateful Task across states such as `TASK_STATE_SUBMITTED` and `TASK_STATE_WORKING`. [1] For long-running or disconnected work, the server can stream incremental updates with `text/event-stream` or deliver asynchronous updates by HTTP POST to a client-provided webhook. [1] Agents stay opaque: they collaborate from declared capabilities and exchanged information, without sharing internal thoughts, plans, tool implementations, state, or memory. MCP, not A2A, standardizes how an agent connects to tools, APIs, and other resources. [1]\n\n### Discovery and task lifecycle\n\n```mermaid\nflowchart TD\n  Client[\"A2A Client\"] -->|\"GET /.well-known/agent-card.json, registry, or direct config\"| Card[\"Agent Card\"]\n  Card -->|\"First supported interface: JSONRPC, GRPC, or HTTP+JSON\"| Send[\"Send Message\"]\n  Send --> Direct[\"Direct Message\"]\n  Send --> Task[\"Task\"]\n  Task --> Submitted[\"TASK_STATE_SUBMITTED\"]\n  Submitted --> Working[\"TASK_STATE_WORKING\"]\n  Working --> NeedInput[\"INPUT_REQUIRED or AUTH_REQUIRED\"]\n  NeedInput --> Working\n  Working --> Terminal[\"COMPLETED, FAILED, CANCELED, or REJECTED\"]\n  Task -->|\"Poll, stream, or webhook\"| Client\n```\n\n*An A2A Client fetches `/.well-known/agent-card.json`, selects the first supported interface (`JSONRPC`, `GRPC`, or `HTTP+JSON`), and sends a message. The server returns either a direct message or a stateful task that moves through `TASK_STATE_SUBMITTED`, `TASK_STATE_WORKING`, `TASK_STATE_INPUT_REQUIRED` or `TASK_STATE_AUTH_REQUIRED`, and a terminal state (`TASK_STATE_COMPLETED`, `TASK_STATE_FAILED`, `TASK_STATE_CANCELED`, or `TASK_STATE_REJECTED`), with updates by poll, stream, or webhook. [1]*\n\n### Sample Agent Card\n\n```json\n{\n  \"name\": \"GeoSpatial Route Planner Agent\",\n  \"description\": \"Provides advanced route planning, traffic analysis, and custom map generation services. This agent can calculate optimal routes, estimate travel times considering real-time traffic, and create personalized maps with points of interest.\",\n  \"supportedInterfaces\": [\n    {\"url\": \"https://georoute-agent.example.com/a2a/v1\", \"protocolBinding\": \"JSONRPC\", \"protocolVersion\": \"1.0\"},\n    {\"url\": \"https://georoute-agent.example.com/a2a/grpc\", \"protocolBinding\": \"GRPC\", \"protocolVersion\": \"1.0\"},\n    {\"url\": \"https://georoute-agent.example.com/a2a/json\", \"protocolBinding\": \"HTTP+JSON\", \"protocolVersion\": \"1.0\"}\n  ],\n  \"provider\": {\n    \"organization\": \"Example Geo Services Inc.\",\n    \"url\": \"https://www.examplegeoservices.com\"\n  },\n  \"iconUrl\": \"https://georoute-agent.example.com/icon.png\",\n  \"version\": \"1.2.0\",\n  \"documentationUrl\": \"https://docs.examplegeoservices.com/georoute-agent/api\",\n  \"capabilities\": {\n    \"streaming\": true,\n    \"pushNotifications\": true,\n    \"extendedAgentCard\": true\n  },\n  \"securitySchemes\": {\n    \"google\": {\n      \"openIdConnectSecurityScheme\": {\n        \"openIdConnectUrl\": \"https://accounts.google.com/.well-known/openid-configuration\"\n      }\n    }\n  },\n  \"securityRequirements\": [{ \"schemes\": { \"google\": { \"list\": [\"openid\", \"profile\", \"email\"] } } }],\n  \"defaultInputModes\": [\"application/json\", \"text/plain\"],\n  \"defaultOutputModes\": [\"application/json\", \"image/png\"],\n  \"skills\": [\n    {\n      \"id\": \"route-optimizer-traffic\",\n      \"name\": \"Traffic-Aware Route Optimizer\",\n      \"description\": \"Calculates the optimal driving route between two or more locations, taking into account real-time traffic conditions, road closures, and user preferences (e.g., avoid tolls, prefer highways).\",\n      \"tags\": [\"maps\", \"routing\", \"navigation\", \"directions\", \"traffic\"],\n      \"examples\": [\n        \"Plan a route from '1600 Amphitheatre Parkway, Mountain View, CA' to 'San Francisco International Airport' avoiding tolls.\",\n        \"{\\\"origin\\\": {\\\"lat\\\": 37.422, \\\"lng\\\": -122.084}, \\\"destination\\\": {\\\"lat\\\": 37.7749, \\\"lng\\\": -122.4194}, \\\"preferences\\\": [\\\"avoid_ferries\\\"]}\"\n      ],\n      \"inputModes\": [\"application/json\", \"text/plain\"],\n      \"outputModes\": [\n        \"application/json\",\n        \"application/vnd.geo+json\",\n        \"text/html\"\n      ]\n    },\n    {\n      \"id\": \"custom-map-generator\",\n      \"name\": \"Personalized Map Generator\",\n      \"description\": \"Creates custom map images or interactive map views based on user-defined points of interest, routes, and style preferences. Can overlay data layers.\",\n      \"tags\": [\"maps\", \"customization\", \"visualization\", \"cartography\"],\n      \"examples\": [\n        \"Generate a map of my upcoming road trip with all planned stops highlighted.\",\n        \"Show me a map visualizing all coffee shops within a 1-mile radius of my current location.\"\n      ],\n      \"inputModes\": [\"application/json\"],\n      \"outputModes\": [\n        \"image/png\",\n        \"image/jpeg\",\n        \"application/json\",\n        \"text/html\"\n      ]\n    }\n  ],\n  \"signatures\": [\n    {\n      \"protected\": \"eyJhbGciOiJFUzI1NiIsInR5cCI6IkpPU0UiLCJraWQiOiJrZXktMSIsImprdSI6Imh0dHBzOi8vZXhhbXBsZS5jb20vYWdlbnQvandrcy5qc29uIn0\",\n      \"signature\": \"QFdkNLNszlGj3z3u0YQGt_T9LixY3qtdQpZmsTdDHDe3fXV9y9-B3m2-XgCpzuhiLt8E0tV6HXoZKHv4GtHgKQ\"\n    }\n  ]\n}\n```\n\n*Sample Agent Card for the GeoSpatial Route Planner Agent (§8.5 illustrative specification example). It declares `supportedInterfaces` for `JSONRPC`, `GRPC`, and `HTTP+JSON`, plus `capabilities`, `securitySchemes`, `skills`, and optional `signatures` (Agent Cards MAY be signed using JWS over RFC 8785 canonical JSON, and clients SHOULD verify signatures when present). [1]*\n\n---\n\n## Discovery and the well-known Agent Card\n\nA2A standardizes self-description in an Agent Card, a JSON business card for the remote agent, and leaves discovery to the deployment. A client that knows the domain GETs `/.well-known/agent-card.json`, following RFC 8615. Curated registries and direct configuration are allowed, but the current A2A specification does not prescribe a standard API for curated registries. [1][17]\n\n- **Supported interfaces:** An Agent Card lists `name`, `description`, and `provider`, plus an ordered `supportedInterfaces` array. Each `AgentInterface` has `url`, `protocolBinding`, and `protocolVersion`; the first entry is preferred. v1.0 replaced `preferredTransport` and `additionalInterfaces` with `supportedInterfaces[]`, beside `streaming`, `pushNotifications`, `securitySchemes`, and `AgentSkill` entries. [1][8][17]\n- **No standard registry API:** A curated registry is an intermediary catalog. Servers publish Agent Cards to it, and clients query by skills, tags, provider, or capabilities. The specification does not define that registry API. Direct configuration, including hardcoded URLs or proprietary APIs, also lacks a standard discovery method. [17]\n- **Well-known path rename:** Issue #66 initially requested `.well-known/agent.json` (citing existing production deployments) with the Linux Foundation as change controller, then adopted `agent-card.json` after reviewers noted `agent.json` was too generic. PR #841, merged 2025-07-29, changed `/.well-known/agent.json` to `/.well-known/agent-card.json`. Changelog `0.3.0` (2025-07-30) records that break. The `v0.3.0` specification publishes `https://{server_domain}/.well-known/agent-card.json`, and IANA registered `agent-card.json` as permanent on 2025-08-01. [4][5][6][7][18]\n- **Extended Agent Cards:** `securitySchemes` names the schemes used to authenticate to the agent. If `AgentCard.capabilities.extendedAgentCard` is true, `GetExtendedAgentCard` (which MUST require authentication) returns a more detailed card after authentication, and clients should replace the cached public card for that session. Agent Cards MAY also be signed using JSON Web Signatures (`JWS`, RFC 7515) over RFC 8785 `JCS` canonical JSON, and clients SHOULD verify `signatures` when present. Authenticated extended cards are recommended for sensitive skills, using out-of-band dynamic credentials rather than static secrets in the card. [1][17]\n\n---\n\n## Task lifecycle, message parts, and transport bindings\n\nA Task is the stateful unit of work. Clients open it with `SendMessage` or `SendStreamingMessage`, read it with `GetTask`, and may cancel it with `CancelTask`. Content rides in typed `Part` containers, and outputs come back as `Artifact` objects. Live updates use Server-Sent Events or a webhook. The same operations bind to JSON-RPC 2.0, gRPC, and `HTTP+JSON`. [1]\n\n- **Lifecycle operations:** `SendMessage` returns a Task or a direct Message, and processing may continue afterward. States run through `TASK_STATE_SUBMITTED`, `TASK_STATE_WORKING`, interrupted `TASK_STATE_INPUT_REQUIRED` and `TASK_STATE_AUTH_REQUIRED`, and terminal `TASK_STATE_COMPLETED`, `TASK_STATE_FAILED`, `TASK_STATE_CANCELED`, and `TASK_STATE_REJECTED`. `SendStreamingMessage` emits `TaskStatusUpdateEvent` and `TaskArtifactUpdateEvent` objects. `GetTask` reads status, artifacts, and optional history, while `ListTasks` lists tasks visible within the caller's authorization scope. `CancelTask` requests cancellation, which is not guaranteed, `SubscribeToTask` resubscribes to an active task stream, and `CreateTaskPushNotificationConfig`, `GetTaskPushNotificationConfig`, `ListTaskPushNotificationConfigs`, and `DeleteTaskPushNotificationConfig` manage webhook push configurations. [1]\n- **Message parts:** A `Part` is the smallest unit of content in a Message or Artifact: a container for text, a file such as an image or video, or a structured JSON blob. An `Artifact` is task output, a document, image, or structured data, composed of Parts. [1]\n- **Streaming and webhooks:** Streaming sends real-time updates for status changes and artifact chunks. The JSON-RPC binding uses Server-Sent Events (`text/event-stream`), delivers events in generation order, and may broadcast one task on multiple concurrent streams. Push notifications POST asynchronous updates to a client webhook for disconnected clients. `GetTask` reads the final state afterward. Under §13 Security Considerations, implementations MUST enforce authorization checks on every operation and scope `ListTasks`, `GetTask`, and task mutations to the caller's authorized access boundaries even when `contextId` or filter parameters are omitted (§13.1); webhook-calling agents MUST include `PushNotificationConfig.authentication` credentials and SHOULD validate webhook URLs against SSRF by rejecting private IP ranges (`127.0.0.0/8`, `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`), localhost, and link-local addresses, while webhook-receiving clients MUST validate webhook authenticity and SHOULD process notifications idempotently (§13.2). An unrefereed arXiv preprint, A2ABreak (arXiv:2609.10871, last revised 24 Oct 2026, v3), models the `1.0.0` protocol as 37 states and 76 transitions and claims 11 new vulnerabilities, each exploitable by a specification-compliant adversary without requiring any implementation flaw. Those findings are preprint claims, not an established specification defect. [1][19][20]\n- **Three protocol bindings:** `JSONRPC` is JSON-RPC 2.0 over HTTP(S), with PascalCase methods such as `SendMessage` and `GetTask` and streaming on `text/event-stream`. `GRPC` uses Protocol Buffers over HTTP/2 and the `A2AService` service. `HTTP+JSON` is REST with JSON payloads and prefers `application/a2a+json`. Clients select the first supported `supportedInterfaces` entry, including its `protocolBinding` and `protocolVersion`. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **JSON-RPC 2.0 Specification** | `JSON-RPC 2.0` | Profiles classic standard | Profiles JSON-RPC 2.0 over HTTP(S) (`JSONRPC` binding) for task method calls (`SendMessage`, `GetTask`, `CancelTask`) paired with Server-Sent Events (`text/event-stream`) for streaming updates. [1] |\n| **Well-Known URIs (RFC 8615)** | `RFC 8615` | Profiles classic standard | Registers the permanent IANA well-known URI suffix `agent-card.json` (2025-08-01), fetched via HTTP `GET` at `https://{server_domain}/.well-known/agent-card.json` for Agent Card discovery. [1][5] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | MCP provides the vertical integration layer connecting an agent to external tools, APIs, and resources, whereas A2A provides the horizontal peer-to-peer protocol for capability discovery and task delegation between opaque agents. [1][2] |\n| **[Agent Communication Protocol](/protocols/agent-communication-protocol/)** | Supersedes | IBM's Agent Communication Protocol (ACP) for the BeeAI platform officially merged into A2A under the Linux Foundation in August 2025, winding down standalone ACP development in favor of A2A. [11][12] |\n| **[Agent Connect Protocol](/protocols/agent-connect-protocol/)** | Complements | Within Cisco's AGNTCY stack (which deprecated standalone Agent Connect Protocol in favor of A2A), SLIM (Secure Low-Latency Interactive Messaging) carries A2A messages via the experimental SLIMRPC binding, using Messaging Layer Security (MLS, RFC 9420) by default for end-to-end session encryption. [13][21][22][23] |\n| **[Agent Payments Protocol (AP2)](/protocols/ap2/)** | Complements | AP2 extends A2A into agentic commerce by adding payment authorization while shopping and merchant agents communicate over A2A for discovery, pricing, and fulfillment. [11] |\n| **IETF agentproto WG** | Complements | The IETF agentproto Working Group (Agent Communication Protocols) is Active in the Applications and Real-Time Area (art) under approved charter `charter-ietf-agentproto-01` (chairs Leslie Daigle and Orie Steele), which scopes the WG to dialog-context correlation and lifecycle management that complements rather than replaces application-layer agent communication protocols (explicitly naming MCP and A2A as capable of carrying dialog context) and defines no new transport protocol. Individual `draft-manyfolks-agentproto-arch-00` (30 October 2026) proposes an Agent Communications Protocol (ACP) architecture for communication among user agent clients, AI agents, and tools. [24][25] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (20 probed or cited examples across 4 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).*\n\n### Public A2A agents & managed server runtimes\n\n| Actor | Role | Status | Agent Card endpoint, transport & role | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Telnyx (Telnyx Assistant)** | Public A2A agent | Live (HTTP 200) · checked 2026-11-03 | Live Agent Card binding `JSONRPC` (`1.0` and `0.3`) at `https://api.telnyx.com/v2/support_agent/public/a2a` with `tasks/get` polling. | [Telnyx Assistant Agent Card](https://telnyx.com/.well-known/agent-card.json) [26] |\n| **Redocly** | Public A2A agent | Live (HTTP 200) · checked 2026-10-30 | Live Agent Card advertising `protocolVersion` `0.3.0` (`preferredTransport` `HTTP+JSON`) at `https://redocly.com/a2a` and MCP extension `https://redocly.com/mcp`. | [Redocly Agent Card](https://redocly.com/.well-known/agent-card.json) [27] |\n| **Pangram** | Public A2A agent | Live (HTTP 200) · checked 2026-10-30 | Live Agent Card binding `JSONRPC` (`protocolVersion` `1.0`) at `https://www.pangram.com/a2a` for `detect-ai-text` and `detect-ai-image` with `x-api-key`. | [Pangram Agent Card](https://www.pangram.com/.well-known/agent-card.json) [28] |\n| **Ticket Fairy** | Public A2A agent | Live (HTTP 200) · checked 2026-10-30 | Live Agent Card binding `JSONRPC` (`protocolVersion` `1.0`) at `https://www.ticketfairy.com/agentic/a2a` with `search_events`, `ticket-checkout`, A2UI `v0.8`, and UCP. | [Ticket Fairy Agent Card](https://www.ticketfairy.com/.well-known/agent-card.json) [29] |\n| **Warp (Warp Freight)** | Public A2A agent | Live (HTTP 200) · checked 2026-10-30 | Live Agent Card binding `JSONRPC` (`protocolVersion` `1.0`) at `https://www.wearewarp.com/api/a2a/jsonrpc` with `bearer` `warpApiKey` and freight skills. | [Warp Freight Agent Card](https://www.wearewarp.com/.well-known/agent-card.json) [30] |\n| **AWS (Bedrock AgentCore Runtime)** | Managed agent runtime | Supported (release announcement) · as of 2025-11-11 | November 2025 blog announces container runtime (`port 9000`) proxying `JSON-RPC 2.0` and authenticated `/.well-known/agent-card.json`. | [AWS, AgentCore A2A support (11 NOV 2025)](https://aws.amazon.com/blogs/machine-learning/introducing-agent-to-agent-protocol-support-in-amazon-bedrock-agentcore-runtime/) [31] |\n| **SAP (Agent Gateway)** | Enterprise agent gateway | Supported (release announcement) · as of 2026-10-27 | October 2026 announcement of inbound A2A gateway combining `AgentCard` URLs with Agentic Resource Discovery (`ARD`). | [SAP, Agent Gateway A2A (2026-10-27)](https://architecture.learning.sap.com/news/2026/10/27/a2a-agent-gateway-interoperability) [32] |\n\n### Client orchestrators & enterprise host platforms\n\n| Actor | Role | Status | Outbound client role & auth | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Google (Gemini Enterprise)** | Client orchestrator | Supported (release announcement) · as of 2026-08-17 | August 2026 release note announces general availability for registering external `A2A` and `A2UI` (`v0.9`, `v0.8`) agents. | [Google Cloud, Gemini Enterprise release notes](https://docs.cloud.google.com/gemini/enterprise/docs/release-notes) [33] |\n| **Microsoft (Foundry Agent Service)** | Client orchestrator & target | Partial · as of 2026-10-28 | GA `a2a` tool for `v1.0` `JSON-RPC` (text-only, no streaming) and preview `a2a_preview` tool for `v0.3`. | [Microsoft Learn, Foundry A2A tool](https://learn.microsoft.com/en-us/azure/foundry/agents/how-to/tools/agent-to-agent) [34] |\n| **Microsoft (Copilot Studio)** | Client orchestrator | Partial · as of 2026-08-26 | Delegates tasks via `message/send` (`contextId`) and auto-reads metadata from the legacy pre-v0.3 `/.well-known/agent.json` card path. | [Microsoft Learn, Copilot Studio A2A](https://learn.microsoft.com/en-us/microsoft-copilot-studio/add-agent-agent-to-agent) [35] |\n| **SAP (Joule)** | Outbound A2A client | Partial · as of 2026-10-26 | Outbound `agent-request` client with webhook push notifications; bidirectional third-party `Agent Gateway` communication not yet GA. | [SAP Architecture Center, Joule outbound A2A](https://architecture.learning.sap.com/docs/ref-arch/ae6821) [36] |\n| **A2A CLI** | Official CLI client | Live (HTTP 200) · checked 2026-11-11 | Live OAuth Client ID Metadata Document (HTTP 200) names client A2A CLI (`client_id` `https://a2a-protocol.org/oauth/a2a-cli.json`, `client_uri` `https://github.com/a2aproject/a2a-cli`) with grants `authorization_code`, `refresh_token`, and `urn:ietf:params:oauth:grant-type:device_code`, and `token_endpoint_auth_method` `none`. | [A2A CLI OAuth client metadata](https://a2a-protocol.org/oauth/a2a-cli.json) [37] |\n\n### Official SDKs & agent frameworks\n\n| Actor | Role | Status | Language / framework surface | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Official A2A SDKs** | Official client & server SDKs | Supported · as of 2026-10-28 | Proto-generated official client and server SDKs across six languages: `Python`, `Go`, `Java`, `JS`, `.NET`, and `Rust`. | [A2A specification](https://a2a-protocol.org/latest/specification/) [1] · [Microsoft Learn, official A2A SDK](https://learn.microsoft.com/en-us/azure/foundry/agents/how-to/tools/agent-to-agent) [34] · [Linux Foundation one-year A2A release](https://www.linuxfoundation.org/press/a2a-protocol-surpasses-150-organizations-lands-in-major-cloud-platforms-and-sees-enterprise-production-use-in-first-year) [38] |\n| **Google ADK** | Agent framework | Listed · as of 2026-08-04 | AAIF proposal lists native `Google ADK` client and server support across local runtimes and `Agent Platform Runtime`. | [AAIF project proposal #37](https://github.com/aaif/project-proposals/issues/37) [13] · [AAIF, A2A joins AAIF](https://aaif.io/blog/a2a-joins-aaif) [11] |\n| **IBM BeeAI** | Agent framework | Listed · as of 2026-08-17 | Merged deprecated `ACP` into `A2A` (August 2025); `BeeAI Framework` ships native client and server adapters. | [BeeAI ACP README](https://raw.githubusercontent.com/i-am-bee/acp/main/README.md) [12] · [AAIF, A2A joins AAIF](https://aaif.io/blog/a2a-joins-aaif) [11] · [A2A, joining the Agentic AI Foundation](https://a2a-protocol.org/latest/blog/2026/08/27/a-new-chapter-for-a2a-joining-the-agentic-ai-foundation/) [2] · [AAIF project proposal #37](https://github.com/aaif/project-proposals/issues/37) [13] |\n| **LangGraph** | Agent framework | Listed · as of 2026-08-27 | AAIF proposal lists hosted `/a2a/{assistant_id}` endpoints with auto-generated Agent Cards, `SSE` streaming, and `LangSmith` tracing. | [A2A, joining the Agentic AI Foundation](https://a2a-protocol.org/latest/blog/2026/08/27/a-new-chapter-for-a2a-joining-the-agentic-ai-foundation/) [2] · [AAIF project proposal #37](https://github.com/aaif/project-proposals/issues/37) [13] |\n| **CrewAI** | Agent framework | Listed · as of 2026-08-27 | AAIF proposal lists `CrewAI AMP` production hosting across `REST`/`JSON-RPC`/`gRPC` transports with `OIDC`, `OAuth2`, and `mTLS`. | [A2A, joining the Agentic AI Foundation](https://a2a-protocol.org/latest/blog/2026/08/27/a-new-chapter-for-a2a-joining-the-agentic-ai-foundation/) [2] · [AAIF project proposal #37](https://github.com/aaif/project-proposals/issues/37) [13] |\n| **Pydantic AI** | Agent framework | Listed · as of 2026-08-27 | AAIF proposal lists native `FastA2A` library integration exposing `Pydantic AI` agents as `ASGI` A2A applications. | [A2A, joining the Agentic AI Foundation](https://a2a-protocol.org/latest/blog/2026/08/27/a-new-chapter-for-a2a-joining-the-agentic-ai-foundation/) [2] · [AAIF project proposal #37](https://github.com/aaif/project-proposals/issues/37) [13] |\n| **AG2** | Agent framework | Listed · as of 2026-08-27 | A2A blog and AAIF proposal list `AG2` (formerly `AutoGen`) agent swarm connections tagged with `a2a`. | [A2A, joining the Agentic AI Foundation](https://a2a-protocol.org/latest/blog/2026/08/27/a-new-chapter-for-a2a-joining-the-agentic-ai-foundation/) [2] · [AAIF project proposal #37](https://github.com/aaif/project-proposals/issues/37) [13] |\n\n### Public A2A registries & directories\n\n| Actor | Role | Status | Verification & protocol surface | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **AgentPeering** | Independent public A2A registry | Supported · checked 2026-11-06 | Independent vendor-neutral A2A registry verifying domain ownership, monitoring uptime, and speaking `v0.3` `message/send` (plus `v0.2` `tasks/send`). | [AgentPeering FAQ](https://agentpeering.com/docs/faq) [39] |\n\n### Ecosystem censuses\n\n- **Google Developers Blog, Announcing A2A (2025-04-09)** (*as of 2025-04-09*): More than 50 technology and enterprise service partners (including Atlassian, Box, Cohere, Intuit, LangChain, MongoDB, PayPal, Salesforce, SAP, ServiceNow, UKG, Workday, Accenture, BCG, Capgemini, Cognizant, Deloitte, HCLTech, Infosys, KPMG, McKinsey, PwC, TCS, and Wipro) announced at A2A's initial launch on April 9, 2025. [3]\n- **Linux Foundation, A2A project launch (2025-06-23)** (*as of 2025-06-23*): More than 100 technology companies reported as supporting the Agent2Agent protocol when Google donated the specification, SDKs, and developer tooling to the Linux Foundation on June 23, 2025. [9]\n- **AAIF, A2A joins AAIF (2026-08-17)** (*as of 2026-08-17*): Over 150 partner organizations across cloud providers, enterprise SaaS platforms, and agent frameworks reported as backing A2A when it joined the Agentic AI Foundation (AAIF) as a Growth Stage project in August 2026. [2][11]\n- **Linux Foundation one-year A2A press release (9 April 2026)** (*as of 2026-04-09*): On April 9, 2026 the Linux Foundation reported that supporting organizations had grown from more than 50 to over 150, the core repository had surpassed 22,000 GitHub stars, and official SDKs had expanded from Python to five production-ready languages (Python, JavaScript, Java, Go, and .NET), later joined by Rust on the specification site. [1][38]\n\n---\n\n## See also\n\n- **Depended on by:** [Ad Context Protocol (AdCP)](/protocols/adcp/)\n- **Peer alternatives:** [Agent Interaction & Transaction Protocol (AITP)](/protocols/aitp/), [Agent Network Protocol](/protocols/anp/), [Agent Protocol](/protocols/agent-protocol-aief/), [Agora Protocol](/protocols/agora-protocol/), [Coral Protocol (CoralOS)](/protocols/coral-protocol/), [Eclipse LMOS (Language Model Operating System)](/protocols/lmos/), [ERC-8001: Agent Coordination Framework](/protocols/erc-8001/), [GB/Z 185 Artificial intelligence — Agent interconnection](/protocols/gbz-185-agent-interconnection/), [MCP Server Cards](/protocols/mcp-server-cards/), [Natural Language Interaction Protocol (NLIP)](/protocols/nlip/)\n- **Complements:** [A2UI (Agent to UI) Protocol](/protocols/a2ui/), [Agent Client Protocol](/protocols/agent-client-protocol/), [Agent-User Interaction Protocol (AG-UI)](/protocols/ag-ui/), [ERC-8004: Trustless Agents](/protocols/erc-8004/), [Open Responses](/protocols/open-responses/), [Universal Commerce Protocol (UCP)](/protocols/ucp/), [Agent Directory Service](/protocols/ads/), [Agent Identity Protocol (AIP): Verifiable Delegation for AI Agent Systems](/protocols/aip-delegation-chain/), [Agent Name Service v2 (ANS)](/protocols/ans/), [Agent Registration and Discovery Protocol](/protocols/ardp/), and [16 more in the protocol directory](/protocols/)\n- **Category:** [Coordinate protocols](/category/coordinate/)\n\n---\n\n## References\n\n1. A2A Protocol (The Linux Foundation), *Agent2Agent (A2A) Protocol Specification* (latest released version 1.0.0; checked 2026-10-30) — <https://a2a-protocol.org/latest/specification/>\n2. A2A Protocol, *A New Chapter for A2A: Joining the Agentic AI Foundation* (2026-08-27) — <https://a2a-protocol.org/latest/blog/2026/08/27/a-new-chapter-for-a2a-joining-the-agentic-ai-foundation/>\n3. Rao Surapaneni, Miku Jha, Michael Vakoc, and Todd Segal (Google), *Announcing the Agent2Agent Protocol (A2A)* (2025-04-09) — <https://developers.googleblog.com/en/a2a-a-new-era-of-agent-interoperability/>\n4. A2A Protocol, *Agent2Agent (A2A) Protocol Official Specification v0.3.0* (v0.3.0) — <https://a2a-protocol.org/v0.3.0/specification/>\n5. IANA, *Well-Known URIs* (agent-card.json registered 2025-08-01) — <https://www.iana.org/assignments/well-known-uris>\n6. holtskinner (a2aproject/A2A), *Change Well-Known URI for Agent Card hosting from agent.json to agent-card.json (PR #841)* (merged 2025-07-29) — <https://github.com/a2aproject/A2A/pull/841>\n7. a2aproject, *A2A CHANGELOG.md* (1.0.1 (2026-05-26); 1.0.0 (2026-03-12); 0.3.0 (2025-07-30)) — <https://github.com/a2aproject/A2A/blob/main/CHANGELOG.md>\n8. A2A Protocol (The Linux Foundation), *What's New in v1.0* (checked 2026-10-30) — <https://a2a-protocol.org/latest/whats-new-v1/>\n9. The Linux Foundation, *Linux Foundation Launches the Agent2Agent Protocol Project to Enable Secure, Intelligent Communication Between AI Agents* (2025-06-23) — <https://www.linuxfoundation.org/press/linux-foundation-launches-the-agent2agent-protocol-project-to-enable-secure-intelligent-communication-between-ai-agents>\n10. Rao Surapaneni, Todd Segal, and Michael Vakoc (Google Cloud), *Google Cloud donates A2A to Linux Foundation* (2025-06-23) — <https://developers.googleblog.com/en/google-cloud-donates-a2a-to-linux-foundation/>\n11. Agentic AI Foundation, *A2A joins AAIF's open agentic stack* (published 2026-08-17; modified 2026-09-24) — <https://aaif.io/blog/a2a-joins-aaif>\n12. IBM BeeAI (i-am-bee/acp), *Agent Communication Protocol (ACP) README* (checked 2026-10-31) — <https://raw.githubusercontent.com/i-am-bee/acp/main/README.md>\n13. Agentic AI Foundation, *[Project Proposal] Agent2Agent Protocol (A2A) · Issue #37* (Technical Committee 2026-07-15; Governing Board 2026-08-04) — <https://github.com/aaif/project-proposals/issues/37>\n14. a2aproject, *Add Agent Card media type registration template (commit 40cffc57)* (2026-10-27) — <https://github.com/a2aproject/A2A/commit/40cffc57314d1c84e47c5efe8301d6387880c3f8>\n15. a2aproject, *Agent2Agent (A2A) Governance (GOVERNANCE.md)* (checked 2026-10-30) — <https://github.com/a2aproject/A2A/blob/main/GOVERNANCE.md>\n16. a2aproject, *Release v1.0.1* (2026-05-28 (changelog 2026-05-26)) — <https://github.com/a2aproject/A2A/releases/tag/v1.0.1>\n17. A2A Protocol, *Agent Discovery* (checked 2026-11-06) — <https://a2a-protocol.org/latest/topics/agent-discovery/>\n18. protocol-registries/well-known-uris, *Well-Known URI registration for agent.json (issue 66)* (2025-06-11) — <https://github.com/protocol-registries/well-known-uris/issues/66>\n19. Alireza Lotfi, Mirza Masfiqur Rahman, Imtiaz Karim, and Elisa Bertino, *A2ABreak: Systematic Security Analysis of the A2A Protocol (arXiv:2609.10871)* (submitted 9 Sep 2026; last revised 24 Oct 2026 (v3); fetched 2026-11-11) — <https://arxiv.org/abs/2609.10871>\n20. Alireza Lotfi, Mirza Masfiqur Rahman, Imtiaz Karim, and Elisa Bertino, *A2ABreak: Systematic Security Analysis of the A2A Protocol (v3 HTML)* (24 October 2026 (v3)) — <https://arxiv.org/html/2609.10871v3>\n21. AGNTCY SLIM Documentation, *A2A over SLIM* (fetched 2026-10-30) — <https://slim.agntcy.org/latest/slim/integrations/a2a/>\n22. a2aproject, *a2a-slimrpc: SLIMRPC transport binding for A2A* (fetched 2026-10-30) — <https://github.com/a2aproject/a2a-rs/tree/main/a2a-slimrpc>\n23. IETF Datatracker, *Secure Low-Latency Interactive Messaging (SLIM) (draft-mpsb-agntcy-slim)* (fetched 2026-10-30) — <https://datatracker.ietf.org/doc/draft-mpsb-agntcy-slim/>\n24. IETF, *Agent Communication Protocols (agentproto) Working Group* (fetched 2026-11-11) — <https://datatracker.ietf.org/wg/agentproto/about/>\n25. J. Rosenberg, Z. Sarker, T. Reddy, K. Yao, D. Liu, and S. Krishnan, *Architecture for AI Agent Communications on the Internet (draft-manyfolks-agentproto-arch-00)* (30 October 2026; fetched 2026-11-11) — <https://www.ietf.org/archive/id/draft-manyfolks-agentproto-arch-00.txt>\n26. Telnyx, *Telnyx Assistant Agent Card* (2026-11-03) — <https://telnyx.com/.well-known/agent-card.json>\n27. Redocly, *Redocly Agent Card* (2026-10-30) — <https://redocly.com/.well-known/agent-card.json>\n28. Pangram, *Pangram Agent Card* (2026-10-30) — <https://www.pangram.com/.well-known/agent-card.json>\n29. Ticket Fairy, *Ticket Fairy Agent Card* (2026-10-30) — <https://www.ticketfairy.com/.well-known/agent-card.json>\n30. Warp, *Warp Freight Agent Card* (2026-10-30) — <https://www.wearewarp.com/.well-known/agent-card.json>\n31. Madhur Prashant et al. (AWS Machine Learning Blog), *Introducing agent-to-agent protocol support in Amazon Bedrock AgentCore Runtime* (2025-11-11) — <https://aws.amazon.com/blogs/machine-learning/introducing-agent-to-agent-protocol-support-in-amazon-bedrock-agentcore-runtime/>\n32. PVN PavanKumar (SAP Architecture Center), *Third-party agents can now interoperate with SAP Agents via the Agent Gateway* (2026-10-27) — <https://architecture.learning.sap.com/news/2026/10/27/a2a-agent-gateway-interoperability>\n33. Google Cloud, *Gemini Enterprise release notes* (A2A GA entry 2026-08-17) — <https://docs.cloud.google.com/gemini/enterprise/docs/release-notes>\n34. Microsoft, *Connect to an A2A agent endpoint from Foundry Agent Service* (last updated 2026-10-28) — <https://learn.microsoft.com/en-us/azure/foundry/agents/how-to/tools/agent-to-agent>\n35. Microsoft, *Connect to an agent over the Agent2Agent (A2A) protocol* (last updated 2026-08-26) — <https://learn.microsoft.com/en-us/microsoft-copilot-studio/add-agent-agent-to-agent>\n36. SAP Architecture Center, *Integrating AI Agents with Joule (Outbound A2A)* (last updated 2026-10-26) — <https://architecture.learning.sap.com/docs/ref-arch/ae6821>\n37. a2aproject, *A2A CLI OAuth Client ID Metadata Document* (fetched 2026-11-11) — <https://a2a-protocol.org/oauth/a2a-cli.json>\n38. The Linux Foundation, *A2A Protocol Surpasses 150 Organizations* (2026-04-09) — <https://www.linuxfoundation.org/press/a2a-protocol-surpasses-150-organizations-lands-in-major-cloud-platforms-and-sees-enterprise-production-use-in-first-year>\n39. AgentPeering, *Frequently Asked Questions* (checked 2026-11-06) — <https://agentpeering.com/docs/faq>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "ACP",
   "adoption": {
    "level": "observed",
    "by": "Google Gemini CLI, Block goose, GitHub Copilot CLI, AWS Kiro, Zed, JetBrains IDEs, CodeCompanion.nvim, Emacs agent-shell, and 3 other verified implementations",
    "probe_run": null
   },
   "aliases": [],
   "analog": "Language Server Protocol",
   "collisions": [
    "Agent Communication Protocol (IBM)",
    "Agentic Commerce Protocol (OpenAI/Stripe)",
    "Agent Connect Protocol (AGNTCY)"
   ],
   "discovery": {
    "mechanism": "Local agent launched by the client as a subprocess over stdin and stdout; curated ACP Registry index at https://cdn.agentclientprotocol.com/registry/v1/latest/registry.json",
    "path": "No fixed URL on the agent; registry index at https://cdn.agentclientprotocol.com/registry/v1/latest/registry.json (plus JetBrains-specific indices)"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://zed.dev/blog/bring-your-own-agent-to-zed",
     "claim": "Nathan Sobo (Zed Industries), *Bring Your Own Agent to Zed — Featuring Gemini CLI*, published 2025-08-27",
     "date": null,
     "quote": "You can now interact with third-party agents directly within Zed. To make this possible, we created the Agent Client Protocol (ACP) / Just as the Language Server Protocol unbundled language intelligence from monolithic IDEs, our goal with the Agent Client Protocol is to enable you to switch between multiple agents without switching your editor. / Nathan Sobo August 27th, 2025 / we created the Agent Client Protocol (ACP), and we've partnered with Google to integrate Gemini CLI as the initial reference implementation. / we've partnered with Google to integrate Gemini CLI as the initial reference implementation.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://blog.jetbrains.com/ai/2025/10/jetbrains-zed-open-interoperability-for-ai-coding-agents-in-your-ide/",
     "claim": "Denis Shiryaev (JetBrains), *JetBrains × Zed: Open Interoperability for AI Coding Agents in Your IDE*, published 2025-10-06",
     "date": null,
     "quote": "an open protocol that lets AI coding agents work inside editors / an open protocol that lets AI coding agents work inside editors, including JetBrains IDEs, if both are ACP-compatible. / we're collaborating with Zed on the Agent Client Protocol (ACP) – an open protocol that lets AI coding agents work inside editors, including JetBrains IDEs, if both are ACP-compatible.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://agentclientprotocol.com/get-started/introduction",
     "claim": "Agent Client Protocol, *Introduction*, checked 2026-10-30",
     "date": null,
     "quote": "The Agent Client Protocol (ACP) standardizes communication between code editors/IDEs and coding agents and is suitable for both local and remote scenarios. / Full support for remote agents is a work in progress. / AI coding agents and editors are tightly coupled but interoperability isn't the default. / Each editor must build custom integrations for every agent they want to support, and agents must implement editor-specific APIs to reach users. / Integration overhead: Every new agent-editor combination requires custom work / Limited compatibility: Agents work with only a subset of available editors / Developer lock-in: Choosing an agent often means accepting their available interfaces / The protocol re-uses the JSON representations used in MCP where possible, but includes custom types for useful agentic coding UX elements, like displaying diffs. / The Agent Client Protocol (ACP) standardizes communication between code editors/IDEs and coding agents / includes custom types for useful agentic coding UX elements, like displaying diffs.",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://agentclientprotocol.com/protocol/v1/overview",
     "claim": "Agent Client Protocol, *Overview (protocol v1)*, checked 2026-10-30",
     "date": null,
     "quote": "Client → Agent: session/prompt to send user message / initialize Negotiate versions and exchange capabilities. / Client → Agent: initialize to establish connection / Client → Agent: session/new to create a new session / Client → Agent: session/load to resume an existing session if supported / Agent → Client: session/update notifications for progress updates and user-facing notices / Agent → Client: File operations or permission requests as needed / the Agent sends the session/prompt response with a stop reason / The protocol follows the JSON-RPC 2.0 specification with two types of messages / Methods are request-response pairs that expect a result or error. Notifications are one-way messages that don't expect a response. / The protocol follows the JSON-RPC 2.0 specification with two types of messages: Methods are request-response pairs that expect a result or error. Notifications are one-way messages that don’t expect a response. / Client → Agent: `initialize` to establish connection / Client → Agent: `session/new` to create a new session / Client → Agent: `session/load` to resume an existing session if supported / Client → Agent: `session/prompt` to send user message / Agent → Client: `session/update` notifications for progress updates and user-facing notices / Agents are programs that use generative AI to autonomously modify code. They typically run as subprocesses of the Client. / Clients provide the interface between users and agents. They are typically code editors (IDEs, text editors) but can also be other UIs for interacting with agents. / The Agent Client Protocol allows Agents and Clients to communicate by exposing methods that each side can call and sending notifications to inform each other of events. / The protocol follows the JSON-RPC 2.0 specification with two types of messages: Methods are request-response pairs that expect a result or error. / Notifications are one-way messages that don't expect a response. / Client: completes an advertised authentication flow if required. For example, authenticate for an Agent-handled method or launch and reconnect for a terminal method / authenticate Authenticate with the Agent (if required). / logout End the current authenticated state (requires agentCapabilities.auth.logout capability). / terminal/create Create a new terminal (requires terminal capability). / Client → Agent: session/cancel to interrupt processing if needed / session/request_permission Request user authorization for tool calls. / fs/read_text_file Read file contents (requires fs.readTextFile capability). / fs/write_text_file Write file contents (requires fs.writeTextFile capability). / terminal/output Get terminal output and exit status (requires terminal capability). / terminal/release Release a terminal (requires terminal capability). / terminal/wait_for_exit Wait for terminal command to exit (requires terminal capability). / terminal/kill Kill terminal command without releasing (requires terminal capability). / fs/read_text_file Read file contents / terminal/create Create a new terminal / session/update Send session updates to inform the Client of changes",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://agentclientprotocol.com/community/governance",
     "claim": "Agent Client Protocol, *Governance*, checked 2026-10-30",
     "date": null,
     "quote": "ACP is jointly governed by Zed and JetBrains, who collaborate to ensure the protocol serves the broader ecosystem. We aim to operate transparently and make decisions in the best interests of ACP and its community, while working toward transitioning to an independent foundation. / The following is an interim governance model to provide clearer roles and responsibilities between the various parties collaborating on ACP. / ACP has two lead maintainers: Ben Brandt (Zed Industries) and Sergey Ignatov (JetBrains). / All repositories in the ACP organization should be licensed under the Apache 2.0 License. This project does not require a Contributor License Agreement (CLA).",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://agentclientprotocol.com/protocol/v1/transports",
     "claim": "Agent Client Protocol, *Transports (protocol v1)*, checked 2026-10-30",
     "date": null,
     "quote": "The client launches the agent as a subprocess. The agent reads JSON-RPC messages from its standard input (stdin) and sends messages to its standard output (stdout). / Messages are delimited by newlines (\\n), and MUST NOT contain embedded newlines. / JSON-RPC messages MUST be UTF-8 encoded. / stdio, communication over standard in and standard out. / The protocol currently defines one transport mechanism for agent-client communication: stdio, communication over standard in and standard out. A remote transport based on Streamable HTTP is being specified in the transport RFD. Agents and clients SHOULD support stdio whenever possible. / The protocol currently defines one transport mechanism for agent-client communication: stdio, communication over standard in and standard out. / A remote transport based on Streamable HTTP is being specified in the transport RFD. / ACP uses JSON-RPC to encode messages. JSON-RPC messages MUST be UTF-8 encoded. / The client launches the agent as a subprocess. / The agent reads JSON-RPC messages from its standard input (stdin) and sends messages to its standard output (stdout). / Agents and clients SHOULD support stdio whenever possible.",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://github.com/agentclientprotocol/agent-client-protocol",
     "claim": "agentclientprotocol, *Agent Client Protocol (ACP)*, repository created 2025-06-23; checked 2026-10-30",
     "date": null,
     "quote": "The current stable ACP protocol version is 1 / ACP wire compatibility is determined separately by the protocol version exchanged during initialize via protocolVersion. / \"created_at\": \"2025-06-23T17:39:36Z\" / The current stable ACP protocol version is … 1 / ACP wire compatibility is determined separately by the protocol version exchanged during … initialize … via … protocolVersion / \"name\": \"Apache License 2.0\", \"spdx_id\": \"Apache-2.0\" / to determine the ACP wire protocol shape and breaking-compatibility level. / Within a protocol version, use the exchanged capabilities to decide which optional ACP messages and features are supported. / Kotlin : acp-kotlin / Java : java-sdk / Python : python-sdk / Rust : agent-client-protocol / TypeScript : @agentclientprotocol/sdk",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://agentclientprotocol.com/protocol/v1/session-setup",
     "claim": "Agent Client Protocol, *Session Setup (protocol v1)*, checked 2026-10-30",
     "date": null,
     "quote": "\"protocolVersion\": 1, \"agentCapabilities\": { \"loadSession\": true } / When creating a session, Clients MAY include connection details for MCP servers that the Agent should connect to. / Clients create a new session by calling the session/new method with / \"sessionId\": \"sess_abc123def456\" / If loadSession is false or not present, the Agent does not support loading sessions and Clients MUST NOT attempt to call session/load. / If the Agent requires authentication, session/new may fail with an auth_required error until the Client completes the authentication flow. / The working directory for the session / A list of MCP servers the Agent should connect to / \"method\": \"session/new\", \"params\": { \"cwd\": \"/home/user/project\", \"mcpServers\" / The Agent MUST respond with a unique Session ID that identifies this conversation / To load an existing session, Clients MUST call the session/load method with / The Agent MUST replay the entire conversation to the Client in the form of session/update notifications",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://agentclientprotocol.com/updates",
     "claim": "Agent Client Protocol, *Updates*, checked 2026-10-30",
     "date": null,
     "quote": "June 25, 2026 SDKs Rust and TypeScript SDKs Reach 1.0 / both the Rust and TypeScript ACP SDKs reached version 1.0.0",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://agentclientprotocol.com/announcements/acp-v2-draft",
     "claim": "Agent Client Protocol, *ACP v2 is available in Draft*, published 2026-07-20",
     "date": null,
     "quote": "Published: July 20, 2026 Today is a day the ACP team has been working towards for months, and we are excited to share the first Draft of version 2 of the Agent Client Protocol.",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://github.com/agentclientprotocol/agent-client-protocol/releases",
     "claim": "Agent Client Protocol, *agentclientprotocol/agent-client-protocol releases*, checked 2026-11-09",
     "date": null,
     "quote": "\"tag_name\":\"v1.15.1\",\"target_commitish\":\"main\",\"name\":\"Rust Crate v1.15.1\",\"draft\":false,\"immutable\":false,\"prerelease\":false,\"created_at\":\"2026-11-02T10:51:44Z\",\"updated_at\":\"2026-11-02T10:51:45Z\" / \"tag_name\":\"schema-v1.29.1\",\"target_commitish\":\"main\",\"name\":\"Schema v1.29.1\",\"draft\":false,\"immutable\":false,\"prerelease\":false,\"created_at\":\"2026-11-02T10:51:46Z\" / \"tag_name\":\"schema-v2.0.0-alpha.13\",\"target_commitish\":\"main\",\"name\":\"Schema v2.0.0-alpha.13\",\"draft\":false,\"immutable\":false,\"prerelease\":true,\"created_at\":\"2026-11-02T10:51:48Z\" / \"tag_name\": \"v1.13.0\", \"target_commitish\": \"main\", \"name\": \"Rust Crate v1.13.0\", \"draft\": false, \"immutable\": false, \"prerelease\": false, \"created_at\": \"2026-10-27T21:56:48Z\", \"updated_at\": \"2026-10-27T21:56:49Z\", \"published_at\": \"2026-10-27T21:56:49Z\" / \"tag_name\": \"schema-v1.27.0\", \"target_commitish\": \"main\", \"name\": \"Schema v1.27.0\", \"draft\": false, \"immutable\": false, \"prerelease\": false, \"created_at\": \"2026-10-27T21:56:50Z\", \"updated_at\": \"2026-10-27T21:56:58Z\", \"published_at\": \"2026-10-27T21:56:51Z\" / \"tag_name\": \"schema-v2.0.0-alpha.10\", \"target_commitish\": \"main\", \"name\": \"Schema v2.0.0-alpha.10\", \"draft\": false, \"immutable\": false, \"prerelease\": true, \"created_at\": \"2026-10-27T21:56:51Z\", \"updated_at\": \"2026-10-27T21:57:01Z\", \"published_at\": \"2026-10-27T21:56:53Z\" / \"tag_name\": \"v1.0.0\" / \"tag_name\": \"v1.13.0\" / \"tag_name\": \"schema-v1.27.0\"",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://github.com/agentclientprotocol/agent-client-protocol/releases/tag/schema-v1.31.0",
     "claim": "agentclientprotocol (acp-release-bot), *Schema v1.31.0*, published 2026-11-10",
     "date": null,
     "quote": "schema-v1.31.0 … released this 10 Nov 20:46 … (unstable) add session/options and initial config option values ( #2792 )",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://agentclientprotocol.com/rfds/about",
     "claim": "Agent Client Protocol, *Requests for Dialog (RFDs)*, checked 2026-10-30",
     "date": null,
     "quote": "The project currently has a design team with the Zed team as the lead (BDFL).",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://agentclientprotocol.com/announcements/transports-working-group",
     "claim": "Agent Client Protocol, *Transports Working Group*, published 2026-04-22",
     "date": null,
     "quote": "We have started work on a Draft RFD for how this could work both via WebSockets and HTTP.",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://agentclientprotocol.com/protocol/v1/content",
     "claim": "Agent Client Protocol, *Content (protocol v1)*, checked 2026-10-30",
     "date": null,
     "quote": "ACP's ContentBlock is compatible with, and a superset of, the Model Context Protocol (MCP) 2025-06-18 ContentBlock / User prompts sent via session/prompt / Language model output streamed through session/update notifications / so Agents can forward content from MCP tool outputs unchanged. / All Agents MUST support text content blocks when included in prompts. / \"type\": \"text\" / \"type\": \"resource_link\" / All Agents MUST support resource links when included in prompts.",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://github.com/agentclientprotocol/registry",
     "claim": "agentclientprotocol, *ACP Registry*, checked 2026-10-30",
     "date": null,
     "quote": "https://cdn.agentclientprotocol.com/registry/v1/latest/registry.json / JetBrains IDEs use a dedicated index, plus an opt-in preview channel / https://cdn.agentclientprotocol.com/registry/v1/latest/registry-for-jetbrains.json / https://cdn.agentclientprotocol.com/registry/v1/latest/registry-for-jetbrains-preview.json / https://cdn.agentclientprotocol.com/registry/v1/latest/registry-for-jetbrains-air.json / All agents are verified via CI to ensure they return valid authMethods in the ACP handshake. / Agent versions are automatically updated via a cron job that runs hourly. It checks for new releases across all supported distribution types (npm, PyPI, GitHub releases) and commits updates directly to main",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://agentclientprotocol.com/rfds/mcp-over-acp",
     "claim": "Agent Client Protocol, *MCP-over-ACP: Stateless MCP Requests over ACP*, checked 2026-10-30",
     "date": null,
     "quote": "Let an ACP client or proxy supply tools to an agent using the ACP connection it already has. / Declare an MCP server with \"type\": \"acp\", then send independent MCP requests to its serverId. / Results, request-scoped notifications, and cancellation travel over ACP without a second process or network endpoint. / This draft targets MCP 2026-07-28 only. / ACP initialization and sessions remain unchanged, but there is no MCP initialization handshake",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://agentclientprotocol.com/announcements/client-system-prompt-stabilized",
     "claim": "Agent Client Protocol, *Client-provided system prompts are stabilized*, published 2026-11-06",
     "date": null,
     "quote": "Clients can send system-level instructions on session setup in the stable ACP protocol surfaces. … Published: November 6, 2026 … Completed, stabilizing the `systemPrompt` field on session setup requests and the `systemPrompt` session capability.",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://agentclientprotocol.com/announcements/acp-agent-registry-stabilized",
     "claim": "Agent Client Protocol, *ACP Registry is stabilized*, published 2026-03-09",
     "date": null,
     "quote": "The registry gives ACP clients a standard way to discover, install, and configure compatible agents. / Published: March 9, 2026 The ACP Registry RFD has moved to Completed and the initial version of the registry is stabilized. / It introduces a curated catalog and a shared manifest format so editors and other clients do not need to invent their own integration metadata.",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://goose-docs.ai/docs/gdk/acp/",
     "claim": "goose, *Build an app with goose (ACP)*, checked 2026-10-30",
     "date": null,
     "quote": "Permission callbacks are not a sandbox: goose's configured mode determines when approval is requested, and its tools run with the backend's access to the machine. / Connect over stdio Launch goose acp as a subprocess. Its stdin and stdout carry ACP messages / goose serve exposes ACP over HTTP and WebSocket. / http://127.0.0.1:3284/acp / This is also how goose Desktop talks to its backend.",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://zed.dev/docs/ai/sandboxing",
     "claim": "Zed, *Sandboxing*, checked 2026-11-08",
     "date": null,
     "quote": "Sandboxing applies only to Zed Agent. It does not sandbox Zed itself, language servers, extensions, tasks, your normal terminal tabs, External Agents, or Terminal Threads.",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://agentclientprotocol.com/get-started/registry",
     "claim": "Agent Client Protocol, *ACP Registry*, checked 2026-10-30",
     "date": null,
     "quote": "curl https://cdn.agentclientprotocol.com/registry/v1/latest/registry.json / The registry JSON contains all agent metadata including distribution information for automatic installation. / Claude Agent ACP wrapper for Anthropic's Claude / Codex ACP adapter for OpenAI's coding assistant / This is a curated set of agents, including only the ones that support authentication. / Clients can fetch the registry programmatically / https://cdn.agentclientprotocol.com/registry/v1/latest/registry.json",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://cdn.agentclientprotocol.com/registry/v1/latest/registry.json",
     "claim": "Agent Client Protocol, *ACP registry.json (v1 latest)*, checked 2026-11-06",
     "date": null,
     "quote": "\"version\": \"1.0.0\", \"agents\" / \"distribution\": { \"npx\": { \"package\" / \"binary\": { \"darwin-aarch64\" / \"version\": \"1.0.0\" / \"agents\"",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://zed.dev/blog/acp-registry",
     "claim": "Ben Brandt (Zed Industries), *The ACP Registry is Live*, published 2026-01-28",
     "date": null,
     "quote": "Zed and JetBrains IDEs now have built-in registry support so users can easily install / Zed and JetBrains IDEs now have built-in registry support",
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28",
     "claim": "Model Context Protocol, *Specification (2026-07-28)*, version 2026-07-28",
     "date": null,
     "quote": "The protocol uses JSON-RPC 2.0 messages to establish communication between: Hosts : LLM applications that initiate connections Clients : Connectors within the host application Servers : Services that provide context and capabilities / Servers offer any of the following features to clients: Resources : Context and data, for the user or the AI model to use Prompts : Templated messages and workflows for users Tools : Functions for the AI model to execute",
     "ref": 25
    },
    {
     "label": "[26]",
     "url": "https://a2a-protocol.org/latest/specification/",
     "claim": "A2A Protocol, *Agent2Agent (A2A) Protocol Specification*, checked 2026-10-30",
     "date": null,
     "quote": "GET /.well-known/agent-card.json / JSON-RPC Protocol Binding … gRPC Protocol Binding … HTTP+JSON/REST Protocol Binding",
     "ref": 26
    },
    {
     "label": "[27]",
     "url": "https://docs.ag-ui.com/spec/1.0/index",
     "claim": "Agent User Interaction Protocol, *Specification 1.0*, modified 2026-09-17",
     "date": null,
     "quote": "Run input - the one message that travels from application to agent. / Transports - HTTP + SSE, HTTP + Protobuf",
     "ref": 27
    },
    {
     "label": "[28]",
     "url": "https://www.copilotkit.ai/blog/introducing-ag-ui-the-protocol-where-agents-meet-users",
     "claim": "CopilotKit, *Introducing AG-UI: The Protocol Where Agents Meet Users*, checked 2026-10-30",
     "date": null,
     "quote": "Your client makes a single POST to the agent endpoint, then listens to a unified event stream.",
     "ref": 28
    },
    {
     "label": "[29]",
     "url": "https://agents.md/",
     "claim": "AGENTS.md, *AGENTS.md*, checked 2026-10-30",
     "date": null,
     "quote": "Think of AGENTS.md as a README for agents: a dedicated, predictable place to provide the context and instructions to help AI coding agents work on your project. / Create an AGENTS.md file at the root of the repository.",
     "ref": 29
    },
    {
     "label": "[30]",
     "url": "https://geminicli.com/docs/cli/acp-mode/",
     "claim": "Google (Gemini CLI), *ACP Mode*, checked 2026-10-30",
     "date": null,
     "quote": "ACP (Agent Client Protocol) mode is a special operational mode of Gemini CLI designed for programmatic control, primarily for IDE and other developer tool integrations. / The entire communication happens over standard input/output (stdio) using the JSON-RPC 2.0 protocol. / gemini --acp / Gemini CLI is an ACP-compatible agent and can be found in this registry.",
     "ref": 30
    },
    {
     "label": "[31]",
     "url": "https://docs.github.com/en/copilot/reference/copilot-cli-reference/acp-server",
     "claim": "GitHub, *Copilot CLI ACP server*, checked 2026-10-30",
     "date": null,
     "quote": "ACP support in GitHub Copilot CLI is in public preview and subject to change. / Use the --acp option of the copilot command to start the CLI's ACP server. / You can specify the transport mode with either the --stdio or --port options. / --available-tools=TOOL... / --excluded-tools=TOOL... / --effort=LEVEL, --reasoning-effort=LEVEL",
     "ref": 31
    },
    {
     "label": "[32]",
     "url": "https://github.blog/changelog/2026-01-28-acp-support-in-copilot-cli-is-now-in-public-preview/",
     "claim": "Allison (GitHub Changelog), *ACP support in Copilot CLI is now in public preview*, published 2026-01-28",
     "date": null,
     "quote": "2026-01-28",
     "ref": 32
    },
    {
     "label": "[33]",
     "url": "https://thenewstack.io/kiro-agent-client-protocol/",
     "claim": "Janakiram MSV (The New Stack), *Free agents: How AWS Kiro could untie agents from editors*, published 2026-08-06",
     "date": null,
     "quote": "AWS chose the Agent Client Protocol (ACP) as the interface between Kiro's clients and Kiro's own agent. / The team introduced more than 20 agent-callable methods, 15 client-callable methods, and 20 notification types, all namespaced under _kiro/. It also implemented a WebSocket transport for web and iOS clients while continuing to use ACP's standard stdio transport for local execution.",
     "ref": 33
    },
    {
     "label": "[34]",
     "url": "https://zed.dev/docs/ai/external-agents",
     "claim": "Zed, *External Agents*, checked 2026-10-30",
     "date": null,
     "quote": "External Agents are agents that integrate with Zed through the Agent Client Protocol (ACP). / Zed hosts the thread in the Agent Panel and Threads Sidebar / Open the registry with zed: acp registry / \"agent_servers\": {",
     "ref": 34
    },
    {
     "label": "[35]",
     "url": "https://blog.jetbrains.com/ai/2026/01/acp-agent-registry/",
     "claim": "Jan-Niklas Wortmann (JetBrains), *ACP Agent Registry Is Live: Find and Connect AI Coding Agents in Your JetBrains IDE*, published 2026-01-28",
     "date": null,
     "quote": "The ACP Registry is available now in JetBrains IDE versions 2025.3 and later.",
     "ref": 35
    },
    {
     "label": "[36]",
     "url": "https://codecompanion.olimorris.dev/agent-client-protocol",
     "claim": "CodeCompanion.nvim, *Agent Client Protocol (ACP)*, checked 2026-10-30",
     "date": null,
     "quote": "CodeCompanion implements it so you can work with agents like Claude Code and Codex from the chat buffer. / JSON-RPC 2.0, streaming responses, message buffering / Create, list and load sessions / readTextFile / writeTextFile / Show an agent's execution plan / Give the agent a Neovim terminal",
     "ref": 36
    },
    {
     "label": "[37]",
     "url": "https://github.com/olimorris/codecompanion.nvim/blob/main/CHANGELOG.md",
     "claim": "olimorris (CodeCompanion.nvim), *CHANGELOG.md*, 17.18.0 dated 2025-08-27; page checked 2026-10-30",
     "date": null,
     "quote": "17.18.0 (2025-08-27) / add support for Agent Client Protocol",
     "ref": 37
    },
    {
     "label": "[38]",
     "url": "https://xenodium.com/introducing-agent-shell",
     "claim": "Álvaro Ramírez (xenodium), *Introducing Emacs agent-shell (powered by ACP)*, published 2025-09-25",
     "date": null,
     "quote": "September 25, 2025 Introducing Emacs agent-shell (powered by ACP) / I introduced acp.el, an Emacs lisp implementation of ACP (Agent Client Protocol) / agent-shell is a native Emacs shell, powered by comint-mode / Today, I have an initial version of agent-shell I can share.",
     "ref": 38
    },
    {
     "label": "[39]",
     "url": "https://github.com/agentclientprotocol/claude-agent-acp",
     "claim": "agentclientprotocol, *claude-agent-acp*, checked 2026-10-30",
     "date": null,
     "quote": "npm install @agentclientprotocol/claude-agent-acp@preview / This tool implements an ACP agent by using the official Claude Agent SDK / Context @-mentions / Interactive (and background) terminals / /mcp in the chat",
     "ref": 39
    },
    {
     "label": "[40]",
     "url": "https://github.com/agentclientprotocol/codex-acp",
     "claim": "agentclientprotocol, *codex-acp*, checked 2026-10-30",
     "date": null,
     "quote": "npx -y @agentclientprotocol/codex-acp / codex-acp is a stdio ACP agent server. It starts the Codex App Server, translates ACP requests into Codex operations, and maps Codex events back into the client. / Native ACP subagent sessions (after capability negotiation) / Mid-turn input through the _session/steering extension",
     "ref": 40
    }
   ],
   "form": "endpoint",
   "governance": "Jointly governed by Zed and JetBrains under an interim governance model while working toward transitioning to an independent foundation; lead maintainers Ben Brandt (Zed Industries) and Sergey Ignatov (JetBrains) hold final decision authority alongside the ACP steering group and public Requests for Dialog (RFD) process",
   "group": "Protocols called ACP",
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against agentclientprotocol.com/get-started/introduction, agentclientprotocol.com/updates, agentclientprotocol.com/rfds/about"
    },
    {
     "date": "2026-09-06",
     "note": "collisions updated to add Agent Connect Protocol (Cisco/AGNTCY), verified against github.com/agntcy/acp-spec, spec.acp.agntcy.org"
    },
    {
     "date": "2026-10-16",
     "note": "Agent Client Protocol v1.11.0 (schema v1.25.0) released on 2026-10-09; v2 is unstable"
    },
    {
     "date": "2026-10-28",
     "note": "Verified specification record (v1.13.0 / schema v1.27.0 / schema v2.0.0-alpha.10, 40 primary/secondary sources)"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "agent-client-protocol",
   "implementation": "multi-implementation",
   "last_verified": "2026-11-12",
   "name": "Agent Client Protocol",
   "native_status": "Active open protocol. Protocol version 1 is stable; version 2 published in Draft on 2026-07-20; full support for remote agents is a work in progress.",
   "origin": {
    "date": "2025-08-27",
    "org": "Zed Industries"
   },
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "stable",
   "probe": {
    "method": "stdio",
    "on_absent": "process exits, writes non-JSON-RPC output, or times out: the binary does not speak ACP",
    "parse": "response result containing protocolVersion and agentCapabilities confirms an ACP-speaking agent",
    "path": "spawn {agent-binary} and send a JSON-RPC 2.0 initialize request per the ACP schema over stdin/stdout"
   },
   "question": "How does a code editor invoke and converse with an interchangeable coding agent it did not build?",
   "scope": "coding-tools",
   "spec_url": "https://agentclientprotocol.com/protocol/v1/overview",
   "step": "act",
   "summary_md": "The **Agent Client Protocol** (**ACP**) is an open protocol that standardizes communication between code editors or IDEs and AI coding agents across local and remote environments. Launched by Zed Industries on August 27, 2025 with Google's Gemini CLI as its initial reference implementation, ACP is jointly governed by Zed and JetBrains while transitioning toward an independent foundation. On the baseline `stdio` transport, the editor launches the agent as a subprocess exchanging newline-delimited `UTF-8` JSON-RPC 2.0 messages over `stdin` and `stdout`. The client calls `initialize`, `session/new` (or `session/load`), and `session/prompt`, while the agent streams `session/update` notifications and requests file or permission operations before returning a stop reason. Stable wire version `1` (`protocolVersion` in `initialize`) reached `1.0.0` Rust and TypeScript SDKs on June 25, 2026, followed by Draft v2 on July 20, 2026 and the `v1.15.1` crate, `schema-v1.29.1`, and `schema-v2.0.0-alpha.13` releases on November 2, 2026. Schema `schema-v1.31.0`, released November 10, 2026, adds unstable `session/options` and initial config option values.",
   "track": "vendor-consortium",
   "version": {
    "label": "1 (JSON Schema schema-v1.31.0; Rust crate v1.15.1; v2 Draft schema-v2.0.0-alpha.13)",
    "date": "2026-11-10"
   },
   "watch": [
    {
     "type": "page",
     "url": "https://agentclientprotocol.com/get-started/introduction",
     "selector": "main",
     "cadence": "weekly"
    },
    {
     "type": "github",
     "repo": "agentclientprotocol/agent-client-protocol",
     "mode": "release",
     "version": false
    }
   ],
   "use_cases": [
    "describe-agent-capabilities",
    "render-agent-ui",
    "agent-to-agent-messaging"
   ],
   "audience": [
    "agent-builder",
    "platform"
   ],
   "pairs_with": [
    "mcp",
    "a2a",
    "ag-ui",
    "agents-md"
   ],
   "prerequisites": [],
   "hatnote_md": "This article covers the Agent Client Protocol (ACP) for editor-to-coding-agent sessions. It is distinct from OpenAI and Stripe's [Agentic Commerce Protocol](/protocols/agentic-commerce-protocol/), IBM's [Agent Communication Protocol](/protocols/agent-communication-protocol/) (merged into [A2A](/protocols/a2a/)), and AGNTCY's [Agent Connect Protocol](/protocols/agent-connect-protocol/). For host-to-tool context integration, see [Model Context Protocol](/protocols/mcp/).",
   "tier": "flagship",
   "lifecycle_status": "published_standard",
   "wire_archetype": "harnesses_rpc_ui",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "This article covers the Agent Client Protocol (ACP) for editor-to-coding-agent sessions. It is distinct from OpenAI and Stripe's [Agentic Commerce Protocol](/protocols/agentic-commerce-protocol/), IBM's [Agent Communication Protocol](/protocols/agent-communication-protocol/) (merged into [A2A](/protocols/a2a/)), and AGNTCY's [Agent Connect Protocol](/protocols/agent-connect-protocol/). For host-to-tool context integration, see [Model Context Protocol](/protocols/mcp/). [1][2]",
   "v05_elevator_pitch_md": "ACP is an editor-to-agent interoperability standard—analogous to the Language Server Protocol—that lets code editors and IDEs (such as Zed and JetBrains IDEs) run any compatible AI coding agent (such as Gemini CLI). Instead of writing bespoke plugins that lock each coding agent to a single editor UI, the editor communicates with the agent over `stdio` using JSON-RPC methods (`initialize`, `session/new`, `session/prompt`, and `session/update`) to stream prompts, diffs, and tool approvals. [1][3][4]",
   "v05_lead_md": "The **Agent Client Protocol** (**ACP**) is an open protocol that standardizes communication between code editors or IDEs and AI coding agents across local and remote environments. [2][3] Launched by Zed Industries on August 27, 2025 with Google's Gemini CLI as its initial reference implementation, ACP is jointly governed by Zed and JetBrains while transitioning toward an independent foundation. [1][5] On the baseline `stdio` transport, the editor launches the agent as a subprocess exchanging newline-delimited `UTF-8` JSON-RPC 2.0 messages over `stdin` and `stdout`. [6] The client calls `initialize`, `session/new` (or `session/load`), and `session/prompt`, while the agent streams `session/update` notifications and requests file or permission operations before returning a stop reason. [4] Stable wire version `1` (`protocolVersion` in `initialize`) reached `1.0.0` Rust and TypeScript SDKs on June 25, 2026, followed by Draft v2 on July 20, 2026 and the `v1.15.1` crate, `schema-v1.29.1`, and `schema-v2.0.0-alpha.13` releases on November 2, 2026. [7][8][9][10][11] Schema `schema-v1.31.0`, released November 10, 2026, adds unstable `session/options` and initial config option values. [12]",
   "v05_identity_sentence_md": "The **Agent Client Protocol** (**ACP**) is an open protocol that standardizes communication between code editors or IDEs and AI coding agents across local and remote environments. [2][3] Launched by Zed Industries on August 27, 2025 with Google's Gemini CLI as its initial reference implementation, ACP is jointly governed by Zed and JetBrains while transitioning toward an independent foundation. [1][5]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Act](/category/act/) (`act`)"
    },
    {
     "label": "Form",
     "value_md": "Endpoint (`endpoint`)"
    },
    {
     "label": "Originated by",
     "value_md": "Zed Industries (Nathan Sobo), announced 2025-08-27 with Google's Gemini CLI as initial reference implementation (GitHub repo created 2025-06-23) [1][7]"
    },
    {
     "label": "Governed by",
     "value_md": "Zed and JetBrains under an interim governance model while working toward an independent foundation; lead maintainers: Ben Brandt (Zed Industries) and Sergey Ignatov (JetBrains) [5]"
    },
    {
     "label": "Track",
     "value_md": "Vendor / Spec-Site Standard (`vendor-consortium`); specification changes advance via public Requests for Dialog (RFDs) [13]"
    },
    {
     "label": "Status",
     "value_md": "Active open standard; protocol version `1` is stable, version `2` was published in Draft on 2026-07-20, and remote-agent support is a work in progress [3][7][10]"
    },
    {
     "label": "Version",
     "value_md": "Protocol version `1` (wire `protocolVersion` negotiated during `initialize`); latest schema `schema-v1.31.0`, published 2026-11-10, adds unstable `session/options` and initial config option values (after Rust crate `v1.15.1`, `schema-v1.29.1`, and prerelease `schema-v2.0.0-alpha.13` on 2026-11-02, following `v1.13.0`, `schema-v1.27.0`, and `schema-v2.0.0-alpha.10` on 2026-10-27) [7][11][12]"
    },
    {
     "label": "Transports",
     "value_md": "`stdio` (newline-delimited UTF-8 JSON-RPC over subprocess `stdin`/`stdout`); remote transport based on Streamable HTTP and WebSockets in RFD specification [6][14]"
    },
    {
     "label": "Message format",
     "value_md": "JSON-RPC 2.0 request-response methods and one-way notifications; `ContentBlock` is a superset of the MCP `2025-06-18` `ContentBlock` [4][15]"
    },
    {
     "label": "Specification",
     "value_md": "[Protocol overview (v1)](https://agentclientprotocol.com/protocol/v1/overview) [4]"
    },
    {
     "label": "Found at",
     "value_md": "No fixed agent URL (client spawns subprocess over `stdin`/`stdout`); ACP Registry index at `https://cdn.agentclientprotocol.com/registry/v1/latest/registry.json` [6][16]"
    },
    {
     "label": "Licence",
     "value_md": "Apache License 2.0 (no Contributor License Agreement required) [5][7]"
    }
   ],
   "v05_problem_md": "Without a shared editor-agent protocol, AI coding agents and editors are tightly coupled: each editor must build custom integrations for every agent it supports, and agents must implement editor-specific APIs to reach users, resulting in integration overhead, limited editor compatibility, and developer lock-in. [3] Just as the Language Server Protocol unbundled language intelligence from monolithic IDEs, ACP decouples coding agents from editor UIs so developers can switch agents without switching editors. It reuses Model Context Protocol (MCP) JSON representations where possible while adding coding-specific UX types (such as diffs) and allowing clients to pass MCP server connection configurations at session creation. [1][3][8] ACP v1 standardizes only the local `stdio` subprocess transport; remote transports over Streamable HTTP and WebSockets and stateless tool tunneling (`MCP-over-ACP`) remain under active specification in Working Group draft RFDs. [6][14][17]",
   "v05_mechanism_delta_md": "Just as the Language Server Protocol unbundled language intelligence from monolithic IDEs, ACP decouples coding agents from editor UIs so developers can switch agents without switching editors. It reuses Model Context Protocol (MCP) JSON representations where possible while adding coding-specific UX types (such as diffs) and allowing clients to pass MCP server connection configurations at session creation. [1][3][8]",
   "v05_scope_boundary_md": "ACP v1 standardizes only the local `stdio` subprocess transport; remote transports over Streamable HTTP and WebSockets and stateless tool tunneling (`MCP-over-ACP`) remain under active specification in Working Group draft RFDs. [6][14][17]",
   "v05_fuzzy_additions": [
    {
     "id": "json-rpc-session-lifecycle-and-transport-framing",
     "heading": "JSON-RPC session lifecycle and transport framing",
     "body_md": "The protocol allows agents and clients to communicate by exposing methods that each side can call and by sending notifications to inform each other of events. It follows the JSON-RPC 2.0 specification: methods are request-response pairs that expect a result or error, and notifications are one-way messages that do not expect a response. [4]",
     "bullets": [
      {
       "label": "Version negotiation",
       "text_md": "Clients call `initialize` to establish the connection, negotiate versions, and exchange capabilities. The result carries `protocolVersion` and `agentCapabilities`, including `loadSession`. If `loadSession` is false or not present, clients MUST NOT call `session/load`. Negotiated `protocolVersion` fixes the wire shape, and exchanged capabilities select optional messages. [4][7][8]"
      },
      {
       "label": "Optional authenticate",
       "text_md": "If the agent requires it, the client completes an advertised authentication flow before creating a session, such as `authenticate` or a terminal launch-and-reconnect. Until that flow finishes, `session/new` may fail with `auth_required`. `logout` ends the authenticated state when `agentCapabilities.auth.logout` is advertised. [4][8]"
      },
      {
       "label": "Session ids and MCP servers",
       "text_md": "`session/new` sends the working directory and `mcpServers`, the MCP servers the agent should connect to, and the agent MUST respond with a unique `sessionId`. `session/load` is allowed only after `loadSession` is advertised, and it sends `sessionId`, `cwd`, and `mcpServers` again so the agent can replay the conversation as `session/update` notifications. The Client-Provided System Prompt RFD moved to Completed on November 6, 2026, stabilizing client `systemPrompt` on session setup requests and the `systemPrompt` session capability in the stable ACP protocol surfaces, including v1 session setup. [8][18]"
      },
      {
       "label": "stdio versus remote drafts",
       "text_md": "All ACP JSON-RPC 2.0 messages MUST be `UTF-8` encoded; on `stdio` (which agents and clients SHOULD support whenever possible), the client spawns the agent as a subprocess and frames `stdin` and `stdout` messages with newline delimiters (`\\n`) and no embedded newlines. For remote agents, the Transports Working Group is specifying a Streamable HTTP transport RFD alongside a Draft RFD covering both WebSockets and HTTP. [6][14]"
      }
     ]
    },
    {
     "id": "prompt-turns-client-callbacks-and-the-acp-registry",
     "heading": "Prompt turns, client callbacks, and the ACP Registry",
     "body_md": "Each user turn is a prompt: the client sends content blocks, the agent streams updates, and the agent calls back into the editor for permissions, files, and terminals. The stabilized ACP Agent Registry is the catalog clients use to discover and install agents. [4][19]",
     "bullets": [
      {
       "label": "Prompt turns",
       "text_md": "`session/prompt` sends user content blocks, and model output streams through `session/update` notifications. `ContentBlock` is a superset of the MCP `2025-06-18` `ContentBlock`, so agents can forward MCP tool output unchanged. As a baseline, all agents must support both `text` and `resource_link` content blocks when included in prompts. The turn ends with a `session/prompt` stop reason, or the client sends `session/cancel`. [4][15]"
      },
      {
       "label": "Client callbacks",
       "text_md": "The agent requests tool authorization with `session/request_permission`. File reads and writes use `fs/read_text_file` and `fs/write_text_file` when the client advertised `fs.readTextFile` and `fs.writeTextFile`. Terminal management uses the `terminal/create`, `terminal/output`, `terminal/wait_for_exit`, `terminal/kill`, and `terminal/release` methods, each requiring the `terminal` capability. Because ACP agents run as local subprocesses with the host user's access to the machine, `session/request_permission` and client capability callbacks are cooperative rather than an OS sandbox: `goose` documentation states that permission callbacks are not a sandbox and tools run with the backend's access to the machine, and Zed's sandboxing documentation states that Zed Agent sandboxing does not sandbox `External Agents`. [4][20][21]"
      },
      {
       "label": "MCP-over-ACP",
       "text_md": "The `MCP-over-ACP` draft lets a client or proxy supply tools on the ACP connection it already has, by declaring an MCP server of type `acp` and sending requests to its `serverId`. Results and cancellation travel over ACP with no second process or network endpoint. It targets MCP `2026-07-28` only, and ACP initialization and sessions remain unchanged. [17]"
      },
      {
       "label": "Registry manifest",
       "text_md": "On March 9, 2026 the registry stabilized, with a curated catalog and a shared manifest format for discovery, install, and configuration. Clients fetch `registry.json`, where top-level `version` is `1.0.0` and each agent can include `distribution` data such as an `npx` package or a `binary` archive. Zed and JetBrains IDEs ship built-in registry support. [19][22][23][24]"
      }
     ]
    }
   ],
   "v05_diagram": {
    "title": "Client and agent session flow",
    "heading": "Client and agent session flow",
    "mermaid": "sequenceDiagram\n  participant Client as Editor Client\n  participant Agent as Coding Agent\n  Client->>Agent: initialize\n  Agent-->>Client: protocolVersion and agentCapabilities\n  opt Authentication required\n    Client->>Agent: authenticate\n    Agent-->>Client: authenticated\n  end\n  Client->>Agent: session/new or session/load\n  Agent-->>Client: sessionId\n  Client->>Agent: session/prompt\n  Agent-->>Client: session/update notifications\n  opt Workspace callbacks or cancellation\n    Agent->>Client: file ops or session/request_permission\n    Client-->>Agent: callback result or session/cancel\n  end\n  Agent-->>Client: session/prompt response with stop reason",
    "caption_md": "An editor `Client` initializes a session with an `Agent` (`initialize`, optional `authenticate`, and `session/new` or `session/load`), then sends user turns via `session/prompt`; the agent streams `session/update` notifications and invokes editor file or permission callbacks before returning a final stop reason (unless interrupted by `session/cancel`). [4]"
   },
   "v05_wire_artifact": {
    "title": "session/new request",
    "heading": "session/new request",
    "lang": "json",
    "code": "{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"session/new\",\n  \"params\": {\n    \"cwd\": \"/home/user/project\",\n    \"mcpServers\": [\n      {\n        \"name\": \"filesystem\",\n        \"command\": \"/path/to/mcp-server\",\n        \"args\": [\n          \"--stdio\"\n        ],\n        \"env\": []\n      }\n    ]\n  }\n}",
    "caption_md": "A `session/new` JSON-RPC 2.0 request supplies the workspace path (`cwd`) and MCP server launch configurations (`mcpServers`); the agent responds on the matching `id` with a unique `sessionId` (for example, `\"sess_abc123def456\"`). [8]"
   },
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "JSON-RPC 2.0 Specification",
      "spec_or_rfc": "JSON-RPC 2.0",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "Profiles JSON-RPC 2.0 bidirectional request-response methods and one-way `session/update` notifications for multi-turn coding sessions, adding reverse agent-to-editor callbacks (`session/request_permission`, `fs/read_text_file`, `fs/write_text_file`, and `terminal/create`). [4]"
     },
     {
      "name": "Language Server Protocol (LSP)",
      "spec_or_rfc": "LSP",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "Whereas the Language Server Protocol (LSP) unbundled static language intelligence (autocomplete, diagnostics, go-to-definition) from monolithic IDEs, ACP applies the same client-server decoupling to multi-turn AI coding agents so developers can switch agents without switching editors. [1]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "MCP uses JSON-RPC 2.0 between a host, the host's client, and a server that can offer resources, prompts, and tools. ACP is the editor-to-coding-agent session; when an ACP client creates a session, it may include connection details for MCP servers the agent should connect to. [3][8][25]"
     },
     {
      "target_id": "a2a",
      "target_name": "Agent2Agent Protocol (A2A)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "A2A coordinates task delegation between opaque remote agents discovered via `GET /.well-known/agent-card.json` over HTTP or gRPC, whereas ACP couples an interactive code editor UI to a coding agent with workspace diff, file, and terminal callbacks. [3][26]"
     },
     {
      "target_id": "ag-ui",
      "target_name": "Agent-User Interaction Protocol (AG-UI)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "AG-UI streams frontend UI state events from a backend agent after an HTTP `POST` (`HTTP + SSE` or `HTTP + Protobuf`), whereas ACP mediates an IDE coding session in which the agent also calls back into the editor for file reads/writes, terminals, and tool permissions. [4][27][28]"
     },
     {
      "target_id": "agents-md",
      "target_name": "AGENTS.md",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "`AGENTS.md` is a static repository-root Markdown file providing project instructions and conventions, whereas ACP defines the live bidirectional session wire protocol between the code editor and the coding agent. [3][29]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (11 probed or cited examples across 3 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).",
    "side_a": {
     "visible": true,
     "heading": "Native ACP coding agents",
     "col4_header": "Transport, capabilities & scope",
     "note_md": null,
     "rows": [
      {
       "actor": "Google Gemini CLI",
       "role": "Native CLI coding agent (reference implementation)",
       "status": "Supported",
       "status_display": "Supported · as of 2025-08-27",
       "col4_md": "Native `gemini --acp` mode speaking `JSON-RPC 2.0` over `stdio`; initial ACP reference implementation with Zed.",
       "source_md": "[Gemini CLI ACP mode](https://geminicli.com/docs/cli/acp-mode/) [30] · [Bring Your Own Agent to Zed](https://zed.dev/blog/bring-your-own-agent-to-zed) [1]"
      },
      {
       "actor": "Block goose",
       "role": "Native CLI coding agent & desktop client",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Native `goose acp` subprocess over `stdio` and `goose serve` daemon at `http://127.0.0.1:3284/acp`.",
       "source_md": "[goose ACP guide](https://goose-docs.ai/docs/gdk/acp/) [20]"
      },
      {
       "actor": "GitHub Copilot CLI",
       "role": "Native CLI coding agent",
       "status": "Supported (preview)",
       "status_display": "Supported (preview) · as of 2026-01-28",
       "col4_md": "Public preview `--acp` server on `copilot` over `--stdio` (default) or `--port` TCP, launched 2026-01-28.",
       "source_md": "[Copilot CLI ACP server](https://docs.github.com/en/copilot/reference/copilot-cli-reference/acp-server) [31] · [Copilot CLI ACP public preview](https://github.blog/changelog/2026-01-28-acp-support-in-copilot-cli-is-now-in-public-preview/) [32]"
      },
      {
       "actor": "AWS Kiro",
       "role": "Standalone coding agent & client harness",
       "status": "Supported (release announcement)",
       "status_display": "Supported (release announcement) · as of 2026-08-06",
       "col4_md": "Uses ACP over local `stdio` and `WebSocket` between Kiro clients and agent with `_kiro/` extensions.",
       "source_md": "[AWS Kiro on ACP (The New Stack)](https://thenewstack.io/kiro-agent-client-protocol/) [33]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Editors & IDE host clients",
     "col4_header": "Host surface & transport",
     "note_md": null,
     "rows": [
      {
       "actor": "Zed",
       "role": "Native code editor client (co-steward)",
       "status": "Supported",
       "status_display": "Supported · as of 2026-01-28",
       "col4_md": "Native ACP client hosting `External Agents` in the `Agent Panel` with built-in `zed: acp registry`.",
       "source_md": "[Zed External Agents](https://zed.dev/docs/ai/external-agents) [34] · [The ACP Registry is Live](https://zed.dev/blog/acp-registry) [24]"
      },
      {
       "actor": "JetBrains IDEs",
       "role": "Native IDE client (co-steward)",
       "status": "Supported",
       "status_display": "Supported · as of 2026-01-28",
       "col4_md": "Built-in ACP client and `ACP Registry` in JetBrains IDEs `2025.3`+ consuming `registry-for-jetbrains.json`.",
       "source_md": "[JetBrains and Zed on ACP](https://blog.jetbrains.com/ai/2025/10/jetbrains-zed-open-interoperability-for-ai-coding-agents-in-your-ide/) [2] · [ACP Agent Registry in JetBrains IDEs](https://blog.jetbrains.com/ai/2026/01/acp-agent-registry/) [35] · [ACP Registry repository](https://github.com/agentclientprotocol/registry) [16]"
      },
      {
       "actor": "CodeCompanion.nvim",
       "role": "Community Neovim client plugin",
       "status": "Partial",
       "status_display": "Partial · as of 2025-08-27",
       "col4_md": "Neovim plugin supporting `JSON-RPC 2.0` sessions, `readTextFile`, and `writeTextFile`; omits agent plans and terminals.",
       "source_md": "[CodeCompanion ACP](https://codecompanion.olimorris.dev/agent-client-protocol) [36] · [CodeCompanion changelog](https://github.com/olimorris/codecompanion.nvim/blob/main/CHANGELOG.md) [37]"
      },
      {
       "actor": "Emacs agent-shell",
       "role": "Community Emacs client package",
       "status": "Development",
       "status_display": "Development · as of 2025-09-25",
       "col4_md": "Initial native Emacs shell on `comint-mode` built on the `acp.el` Emacs Lisp ACP client.",
       "source_md": "[Introducing Emacs agent-shell](https://xenodium.com/introducing-agent-shell) [38]"
      }
     ]
    },
    "additional_tables": [
     {
      "visible": true,
      "heading": "External bridge adapters & official SDKs",
      "col4_header": "Target runtime / SDK languages",
      "note_md": null,
      "rows": [
       {
        "actor": "Claude Agent (claude-agent-acp)",
        "role": "External ACP adapter (Claude Agent SDK)",
        "status": "Listed integration",
        "status_display": "Listed integration · checked 2026-10-30",
        "col4_md": "External adapter (`@agentclientprotocol/claude-agent-acp`) wrapping the `Claude Agent SDK` with `@-mentions`, terminals, subagents, and `/mcp`.",
        "source_md": "[claude-agent-acp](https://github.com/agentclientprotocol/claude-agent-acp) [39] · [ACP Registry](https://agentclientprotocol.com/get-started/registry) [22]"
       },
       {
        "actor": "OpenAI Codex (codex-acp)",
        "role": "External ACP adapter (Codex App Server)",
        "status": "Listed integration",
        "status_display": "Listed integration · checked 2026-10-30",
        "col4_md": "External `stdio` adapter (`@agentclientprotocol/codex-acp`) translating ACP requests into `Codex App Server` operations.",
        "source_md": "[codex-acp](https://github.com/agentclientprotocol/codex-acp) [40] · [ACP Registry](https://agentclientprotocol.com/get-started/registry) [22]"
       },
       {
        "actor": "Official ACP SDKs",
        "role": "Official client & agent SDKs",
        "status": "Supported",
        "status_display": "Supported · as of 2026-11-02",
        "col4_md": "Official client and agent SDKs: Rust `agent-client-protocol` (`v1.15.1`), TypeScript `@agentclientprotocol/sdk`, Python `python-sdk`, Kotlin `acp-kotlin`, Java `java-sdk`.",
        "source_md": "[ACP repository](https://github.com/agentclientprotocol/agent-client-protocol) [7] · [ACP updates](https://agentclientprotocol.com/updates) [9] · [ACP releases](https://github.com/agentclientprotocol/agent-client-protocol/releases) [11]"
       }
      ]
     }
    ],
    "censuses": [
     {
      "label": "Official ACP Registry (Available Agents index)",
      "as_of": "2026-10-30",
      "value_md": "43 authenticated coding agents and external ACP adapters—including Gemini CLI, goose, GitHub Copilot, Junie, Kimi CLI, Mistral Vibe, OpenCode, OpenCode V2, Qwen Code, Claude Agent, and Codex—are listed in the curated Available Agents directory and verified in CI to return valid `authMethods` during the ACP handshake, with package versions synced hourly across npm, PyPI, and GitHub releases. [16][22]"
     },
     {
      "label": "cdn.agentclientprotocol.com registry.json (version 1.0.0)",
      "as_of": "2026-11-06",
      "value_md": "45 agent manifest entries appear in the top-level `agents` array of `registry.json` (`version` `1.0.0`) at `https://cdn.agentclientprotocol.com/registry/v1/latest/registry.json`. [23]"
     }
    ],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "open-responses",
     "target_name": "Open Responses",
     "relation_label": "Peer alternative",
     "delta": "ACP is JSON-RPC 2.0 over a local agent subprocess. Open Responses is HTTP `/v1/responses`, with an optional 2026-04-24 WebSocket.",
     "item_md": "**[Open Responses](/protocols/open-responses/)** (Peer alternative) — ACP is JSON-RPC 2.0 over a local agent subprocess. Open Responses is HTTP `/v1/responses`, with an optional 2026-04-24 WebSocket."
    },
    {
     "item_md": "**[Act protocols](/category/act/)** — Category index for `act` standards."
    }
   ],
   "v05_compiled_md": "---\nid: agent-client-protocol\ntitle: \"Agent Client Protocol\"\ntier: flagship\nlifecycle_status: published_standard\ncategory: act\nform: endpoint\nwire_archetype: harnesses_rpc_ui\nspec_url: https://agentclientprotocol.com/protocol/v1/overview\nlast_checked: 2026-11-12\n---\n\n# Agent Client Protocol\n\n**Category:** [Act](/category/act/) (`act`) · **Form:** Endpoint (`endpoint`) · **Last checked:** 2026-11-12\n\n> *This article covers the Agent Client Protocol (ACP) for editor-to-coding-agent sessions. It is distinct from OpenAI and Stripe's [Agentic Commerce Protocol](/protocols/agentic-commerce-protocol/), IBM's [Agent Communication Protocol](/protocols/agent-communication-protocol/) (merged into [A2A](/protocols/a2a/)), and AGNTCY's [Agent Connect Protocol](/protocols/agent-connect-protocol/). For host-to-tool context integration, see [Model Context Protocol](/protocols/mcp/). [1][2]*\n\n> **In brief:** ACP is an editor-to-agent interoperability standard—analogous to the Language Server Protocol—that lets code editors and IDEs (such as Zed and JetBrains IDEs) run any compatible AI coding agent (such as Gemini CLI). Instead of writing bespoke plugins that lock each coding agent to a single editor UI, the editor communicates with the agent over `stdio` using JSON-RPC methods (`initialize`, `session/new`, `session/prompt`, and `session/update`) to stream prompts, diffs, and tool approvals. [1][3][4]\n\nThe **Agent Client Protocol** (**ACP**) is an open protocol that standardizes communication between code editors or IDEs and AI coding agents across local and remote environments. [2][3] Launched by Zed Industries on August 27, 2025 with Google's Gemini CLI as its initial reference implementation, ACP is jointly governed by Zed and JetBrains while transitioning toward an independent foundation. [1][5] On the baseline `stdio` transport, the editor launches the agent as a subprocess exchanging newline-delimited `UTF-8` JSON-RPC 2.0 messages over `stdin` and `stdout`. [6] The client calls `initialize`, `session/new` (or `session/load`), and `session/prompt`, while the agent streams `session/update` notifications and requests file or permission operations before returning a stop reason. [4] Stable wire version `1` (`protocolVersion` in `initialize`) reached `1.0.0` Rust and TypeScript SDKs on June 25, 2026, followed by Draft v2 on July 20, 2026 and the `v1.15.1` crate, `schema-v1.29.1`, and `schema-v2.0.0-alpha.13` releases on November 2, 2026. [7][8][9][10][11] Schema `schema-v1.31.0`, released November 10, 2026, adds unstable `session/options` and initial config option values. [12]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Act](/category/act/) (`act`) |\n| **Form** | Endpoint (`endpoint`) |\n| **Originated by** | Zed Industries (Nathan Sobo), announced 2025-08-27 with Google's Gemini CLI as initial reference implementation (GitHub repo created 2025-06-23) [1][7] |\n| **Governed by** | Zed and JetBrains under an interim governance model while working toward an independent foundation; lead maintainers: Ben Brandt (Zed Industries) and Sergey Ignatov (JetBrains) [5] |\n| **Track** | Vendor / Spec-Site Standard (`vendor-consortium`); specification changes advance via public Requests for Dialog (RFDs) [13] |\n| **Status** | Active open standard; protocol version `1` is stable, version `2` was published in Draft on 2026-07-20, and remote-agent support is a work in progress [3][7][10] |\n| **Version** | Protocol version `1` (wire `protocolVersion` negotiated during `initialize`); latest schema `schema-v1.31.0`, published 2026-11-10, adds unstable `session/options` and initial config option values (after Rust crate `v1.15.1`, `schema-v1.29.1`, and prerelease `schema-v2.0.0-alpha.13` on 2026-11-02, following `v1.13.0`, `schema-v1.27.0`, and `schema-v2.0.0-alpha.10` on 2026-10-27) [7][11][12] |\n| **Transports** | `stdio` (newline-delimited UTF-8 JSON-RPC over subprocess `stdin`/`stdout`); remote transport based on Streamable HTTP and WebSockets in RFD specification [6][14] |\n| **Message format** | JSON-RPC 2.0 request-response methods and one-way notifications; `ContentBlock` is a superset of the MCP `2025-06-18` `ContentBlock` [4][15] |\n| **Specification** | [Protocol overview (v1)](https://agentclientprotocol.com/protocol/v1/overview) [4] |\n| **Found at** | No fixed agent URL (client spawns subprocess over `stdin`/`stdout`); ACP Registry index at `https://cdn.agentclientprotocol.com/registry/v1/latest/registry.json` [6][16] |\n| **Licence** | Apache License 2.0 (no Contributor License Agreement required) [5][7] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [JSON-RPC session lifecycle and transport framing](#json-rpc-session-lifecycle-and-transport-framing)\n3. [Prompt turns, client callbacks, and the ACP Registry](#prompt-turns-client-callbacks-and-the-acp-registry)\n4. [Counterparts and related standards](#counterparts-and-related-standards)\n5. [Adoption and ecosystem](#adoption-and-ecosystem)\n6. [See also](#see-also)\n7. [References](#references)\n\n---\n\n## Problem and scope\n\nWithout a shared editor-agent protocol, AI coding agents and editors are tightly coupled: each editor must build custom integrations for every agent it supports, and agents must implement editor-specific APIs to reach users, resulting in integration overhead, limited editor compatibility, and developer lock-in. [3] Just as the Language Server Protocol unbundled language intelligence from monolithic IDEs, ACP decouples coding agents from editor UIs so developers can switch agents without switching editors. It reuses Model Context Protocol (MCP) JSON representations where possible while adding coding-specific UX types (such as diffs) and allowing clients to pass MCP server connection configurations at session creation. [1][3][8] ACP v1 standardizes only the local `stdio` subprocess transport; remote transports over Streamable HTTP and WebSockets and stateless tool tunneling (`MCP-over-ACP`) remain under active specification in Working Group draft RFDs. [6][14][17]\n\n### Client and agent session flow\n\n```mermaid\nsequenceDiagram\n  participant Client as Editor Client\n  participant Agent as Coding Agent\n  Client->>Agent: initialize\n  Agent-->>Client: protocolVersion and agentCapabilities\n  opt Authentication required\n    Client->>Agent: authenticate\n    Agent-->>Client: authenticated\n  end\n  Client->>Agent: session/new or session/load\n  Agent-->>Client: sessionId\n  Client->>Agent: session/prompt\n  Agent-->>Client: session/update notifications\n  opt Workspace callbacks or cancellation\n    Agent->>Client: file ops or session/request_permission\n    Client-->>Agent: callback result or session/cancel\n  end\n  Agent-->>Client: session/prompt response with stop reason\n```\n\n*An editor `Client` initializes a session with an `Agent` (`initialize`, optional `authenticate`, and `session/new` or `session/load`), then sends user turns via `session/prompt`; the agent streams `session/update` notifications and invokes editor file or permission callbacks before returning a final stop reason (unless interrupted by `session/cancel`). [4]*\n\n### session/new request\n\n```json\n{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"session/new\",\n  \"params\": {\n    \"cwd\": \"/home/user/project\",\n    \"mcpServers\": [\n      {\n        \"name\": \"filesystem\",\n        \"command\": \"/path/to/mcp-server\",\n        \"args\": [\n          \"--stdio\"\n        ],\n        \"env\": []\n      }\n    ]\n  }\n}\n```\n\n*A `session/new` JSON-RPC 2.0 request supplies the workspace path (`cwd`) and MCP server launch configurations (`mcpServers`); the agent responds on the matching `id` with a unique `sessionId` (for example, `\"sess_abc123def456\"`). [8]*\n\n---\n\n## JSON-RPC session lifecycle and transport framing\n\nThe protocol allows agents and clients to communicate by exposing methods that each side can call and by sending notifications to inform each other of events. It follows the JSON-RPC 2.0 specification: methods are request-response pairs that expect a result or error, and notifications are one-way messages that do not expect a response. [4]\n\n- **Version negotiation:** Clients call `initialize` to establish the connection, negotiate versions, and exchange capabilities. The result carries `protocolVersion` and `agentCapabilities`, including `loadSession`. If `loadSession` is false or not present, clients MUST NOT call `session/load`. Negotiated `protocolVersion` fixes the wire shape, and exchanged capabilities select optional messages. [4][7][8]\n- **Optional authenticate:** If the agent requires it, the client completes an advertised authentication flow before creating a session, such as `authenticate` or a terminal launch-and-reconnect. Until that flow finishes, `session/new` may fail with `auth_required`. `logout` ends the authenticated state when `agentCapabilities.auth.logout` is advertised. [4][8]\n- **Session ids and MCP servers:** `session/new` sends the working directory and `mcpServers`, the MCP servers the agent should connect to, and the agent MUST respond with a unique `sessionId`. `session/load` is allowed only after `loadSession` is advertised, and it sends `sessionId`, `cwd`, and `mcpServers` again so the agent can replay the conversation as `session/update` notifications. The Client-Provided System Prompt RFD moved to Completed on November 6, 2026, stabilizing client `systemPrompt` on session setup requests and the `systemPrompt` session capability in the stable ACP protocol surfaces, including v1 session setup. [8][18]\n- **stdio versus remote drafts:** All ACP JSON-RPC 2.0 messages MUST be `UTF-8` encoded; on `stdio` (which agents and clients SHOULD support whenever possible), the client spawns the agent as a subprocess and frames `stdin` and `stdout` messages with newline delimiters (`\\n`) and no embedded newlines. For remote agents, the Transports Working Group is specifying a Streamable HTTP transport RFD alongside a Draft RFD covering both WebSockets and HTTP. [6][14]\n\n---\n\n## Prompt turns, client callbacks, and the ACP Registry\n\nEach user turn is a prompt: the client sends content blocks, the agent streams updates, and the agent calls back into the editor for permissions, files, and terminals. The stabilized ACP Agent Registry is the catalog clients use to discover and install agents. [4][19]\n\n- **Prompt turns:** `session/prompt` sends user content blocks, and model output streams through `session/update` notifications. `ContentBlock` is a superset of the MCP `2025-06-18` `ContentBlock`, so agents can forward MCP tool output unchanged. As a baseline, all agents must support both `text` and `resource_link` content blocks when included in prompts. The turn ends with a `session/prompt` stop reason, or the client sends `session/cancel`. [4][15]\n- **Client callbacks:** The agent requests tool authorization with `session/request_permission`. File reads and writes use `fs/read_text_file` and `fs/write_text_file` when the client advertised `fs.readTextFile` and `fs.writeTextFile`. Terminal management uses the `terminal/create`, `terminal/output`, `terminal/wait_for_exit`, `terminal/kill`, and `terminal/release` methods, each requiring the `terminal` capability. Because ACP agents run as local subprocesses with the host user's access to the machine, `session/request_permission` and client capability callbacks are cooperative rather than an OS sandbox: `goose` documentation states that permission callbacks are not a sandbox and tools run with the backend's access to the machine, and Zed's sandboxing documentation states that Zed Agent sandboxing does not sandbox `External Agents`. [4][20][21]\n- **MCP-over-ACP:** The `MCP-over-ACP` draft lets a client or proxy supply tools on the ACP connection it already has, by declaring an MCP server of type `acp` and sending requests to its `serverId`. Results and cancellation travel over ACP with no second process or network endpoint. It targets MCP `2026-07-28` only, and ACP initialization and sessions remain unchanged. [17]\n- **Registry manifest:** On March 9, 2026 the registry stabilized, with a curated catalog and a shared manifest format for discovery, install, and configuration. Clients fetch `registry.json`, where top-level `version` is `1.0.0` and each agent can include `distribution` data such as an `npx` package or a `binary` archive. Zed and JetBrains IDEs ship built-in registry support. [19][22][23][24]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **JSON-RPC 2.0 Specification** | `JSON-RPC 2.0` | Profiles classic standard | Profiles JSON-RPC 2.0 bidirectional request-response methods and one-way `session/update` notifications for multi-turn coding sessions, adding reverse agent-to-editor callbacks (`session/request_permission`, `fs/read_text_file`, `fs/write_text_file`, and `terminal/create`). [4] |\n| **Language Server Protocol (LSP)** | `LSP` | Analogous to classic standard | Whereas the Language Server Protocol (LSP) unbundled static language intelligence (autocomplete, diagnostics, go-to-definition) from monolithic IDEs, ACP applies the same client-server decoupling to multi-turn AI coding agents so developers can switch agents without switching editors. [1] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | MCP uses JSON-RPC 2.0 between a host, the host's client, and a server that can offer resources, prompts, and tools. ACP is the editor-to-coding-agent session; when an ACP client creates a session, it may include connection details for MCP servers the agent should connect to. [3][8][25] |\n| **[Agent2Agent Protocol (A2A)](/protocols/a2a/)** | Complements | A2A coordinates task delegation between opaque remote agents discovered via `GET /.well-known/agent-card.json` over HTTP or gRPC, whereas ACP couples an interactive code editor UI to a coding agent with workspace diff, file, and terminal callbacks. [3][26] |\n| **[Agent-User Interaction Protocol (AG-UI)](/protocols/ag-ui/)** | Peer alternative | AG-UI streams frontend UI state events from a backend agent after an HTTP `POST` (`HTTP + SSE` or `HTTP + Protobuf`), whereas ACP mediates an IDE coding session in which the agent also calls back into the editor for file reads/writes, terminals, and tool permissions. [4][27][28] |\n| **[AGENTS.md](/protocols/agents-md/)** | Complements | `AGENTS.md` is a static repository-root Markdown file providing project instructions and conventions, whereas ACP defines the live bidirectional session wire protocol between the code editor and the coding agent. [3][29] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (11 probed or cited examples across 3 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).*\n\n### Native ACP coding agents\n\n| Actor | Role | Status | Transport, capabilities & scope | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Google Gemini CLI** | Native CLI coding agent (reference implementation) | Supported · as of 2025-08-27 | Native `gemini --acp` mode speaking `JSON-RPC 2.0` over `stdio`; initial ACP reference implementation with Zed. | [Gemini CLI ACP mode](https://geminicli.com/docs/cli/acp-mode/) [30] · [Bring Your Own Agent to Zed](https://zed.dev/blog/bring-your-own-agent-to-zed) [1] |\n| **Block goose** | Native CLI coding agent & desktop client | Supported · checked 2026-10-30 | Native `goose acp` subprocess over `stdio` and `goose serve` daemon at `http://127.0.0.1:3284/acp`. | [goose ACP guide](https://goose-docs.ai/docs/gdk/acp/) [20] |\n| **GitHub Copilot CLI** | Native CLI coding agent | Supported (preview) · as of 2026-01-28 | Public preview `--acp` server on `copilot` over `--stdio` (default) or `--port` TCP, launched 2026-01-28. | [Copilot CLI ACP server](https://docs.github.com/en/copilot/reference/copilot-cli-reference/acp-server) [31] · [Copilot CLI ACP public preview](https://github.blog/changelog/2026-01-28-acp-support-in-copilot-cli-is-now-in-public-preview/) [32] |\n| **AWS Kiro** | Standalone coding agent & client harness | Supported (release announcement) · as of 2026-08-06 | Uses ACP over local `stdio` and `WebSocket` between Kiro clients and agent with `_kiro/` extensions. | [AWS Kiro on ACP (The New Stack)](https://thenewstack.io/kiro-agent-client-protocol/) [33] |\n\n### Editors & IDE host clients\n\n| Actor | Role | Status | Host surface & transport | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Zed** | Native code editor client (co-steward) | Supported · as of 2026-01-28 | Native ACP client hosting `External Agents` in the `Agent Panel` with built-in `zed: acp registry`. | [Zed External Agents](https://zed.dev/docs/ai/external-agents) [34] · [The ACP Registry is Live](https://zed.dev/blog/acp-registry) [24] |\n| **JetBrains IDEs** | Native IDE client (co-steward) | Supported · as of 2026-01-28 | Built-in ACP client and `ACP Registry` in JetBrains IDEs `2025.3`+ consuming `registry-for-jetbrains.json`. | [JetBrains and Zed on ACP](https://blog.jetbrains.com/ai/2025/10/jetbrains-zed-open-interoperability-for-ai-coding-agents-in-your-ide/) [2] · [ACP Agent Registry in JetBrains IDEs](https://blog.jetbrains.com/ai/2026/01/acp-agent-registry/) [35] · [ACP Registry repository](https://github.com/agentclientprotocol/registry) [16] |\n| **CodeCompanion.nvim** | Community Neovim client plugin | Partial · as of 2025-08-27 | Neovim plugin supporting `JSON-RPC 2.0` sessions, `readTextFile`, and `writeTextFile`; omits agent plans and terminals. | [CodeCompanion ACP](https://codecompanion.olimorris.dev/agent-client-protocol) [36] · [CodeCompanion changelog](https://github.com/olimorris/codecompanion.nvim/blob/main/CHANGELOG.md) [37] |\n| **Emacs agent-shell** | Community Emacs client package | Development · as of 2025-09-25 | Initial native Emacs shell on `comint-mode` built on the `acp.el` Emacs Lisp ACP client. | [Introducing Emacs agent-shell](https://xenodium.com/introducing-agent-shell) [38] |\n\n### External bridge adapters & official SDKs\n\n| Actor | Role | Status | Target runtime / SDK languages | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Claude Agent (claude-agent-acp)** | External ACP adapter (Claude Agent SDK) | Listed integration · checked 2026-10-30 | External adapter (`@agentclientprotocol/claude-agent-acp`) wrapping the `Claude Agent SDK` with `@-mentions`, terminals, subagents, and `/mcp`. | [claude-agent-acp](https://github.com/agentclientprotocol/claude-agent-acp) [39] · [ACP Registry](https://agentclientprotocol.com/get-started/registry) [22] |\n| **OpenAI Codex (codex-acp)** | External ACP adapter (Codex App Server) | Listed integration · checked 2026-10-30 | External `stdio` adapter (`@agentclientprotocol/codex-acp`) translating ACP requests into `Codex App Server` operations. | [codex-acp](https://github.com/agentclientprotocol/codex-acp) [40] · [ACP Registry](https://agentclientprotocol.com/get-started/registry) [22] |\n| **Official ACP SDKs** | Official client & agent SDKs | Supported · as of 2026-11-02 | Official client and agent SDKs: Rust `agent-client-protocol` (`v1.15.1`), TypeScript `@agentclientprotocol/sdk`, Python `python-sdk`, Kotlin `acp-kotlin`, Java `java-sdk`. | [ACP repository](https://github.com/agentclientprotocol/agent-client-protocol) [7] · [ACP updates](https://agentclientprotocol.com/updates) [9] · [ACP releases](https://github.com/agentclientprotocol/agent-client-protocol/releases) [11] |\n\n### Ecosystem censuses\n\n- **Official ACP Registry (Available Agents index)** (*as of 2026-10-30*): 43 authenticated coding agents and external ACP adapters—including Gemini CLI, goose, GitHub Copilot, Junie, Kimi CLI, Mistral Vibe, OpenCode, OpenCode V2, Qwen Code, Claude Agent, and Codex—are listed in the curated Available Agents directory and verified in CI to return valid `authMethods` during the ACP handshake, with package versions synced hourly across npm, PyPI, and GitHub releases. [16][22]\n- **cdn.agentclientprotocol.com registry.json (version 1.0.0)** (*as of 2026-11-06*): 45 agent manifest entries appear in the top-level `agents` array of `registry.json` (`version` `1.0.0`) at `https://cdn.agentclientprotocol.com/registry/v1/latest/registry.json`. [23]\n\n---\n\n## See also\n\n- **[Open Responses](/protocols/open-responses/)** *(Peer alternative)* — ACP is JSON-RPC 2.0 over a local agent subprocess. Open Responses is HTTP `/v1/responses`, with an optional 2026-04-24 WebSocket.\n- **Category:** [Act protocols](/category/act/)\n\n---\n\n## References\n\n1. Nathan Sobo (Zed Industries), *Bring Your Own Agent to Zed — Featuring Gemini CLI* (published 2025-08-27) — <https://zed.dev/blog/bring-your-own-agent-to-zed>\n2. Denis Shiryaev (JetBrains), *JetBrains × Zed: Open Interoperability for AI Coding Agents in Your IDE* (published 2025-10-06) — <https://blog.jetbrains.com/ai/2025/10/jetbrains-zed-open-interoperability-for-ai-coding-agents-in-your-ide/>\n3. Agent Client Protocol, *Introduction* (checked 2026-10-30) — <https://agentclientprotocol.com/get-started/introduction>\n4. Agent Client Protocol, *Overview (protocol v1)* (checked 2026-10-30) — <https://agentclientprotocol.com/protocol/v1/overview>\n5. Agent Client Protocol, *Governance* (checked 2026-10-30) — <https://agentclientprotocol.com/community/governance>\n6. Agent Client Protocol, *Transports (protocol v1)* (checked 2026-10-30) — <https://agentclientprotocol.com/protocol/v1/transports>\n7. agentclientprotocol, *Agent Client Protocol (ACP)* (repository created 2025-06-23; checked 2026-10-30) — <https://github.com/agentclientprotocol/agent-client-protocol>\n8. Agent Client Protocol, *Session Setup (protocol v1)* (checked 2026-10-30) — <https://agentclientprotocol.com/protocol/v1/session-setup>\n9. Agent Client Protocol, *Updates* (checked 2026-10-30) — <https://agentclientprotocol.com/updates>\n10. Agent Client Protocol, *ACP v2 is available in Draft* (published 2026-07-20) — <https://agentclientprotocol.com/announcements/acp-v2-draft>\n11. Agent Client Protocol, *agentclientprotocol/agent-client-protocol releases* (checked 2026-11-09) — <https://github.com/agentclientprotocol/agent-client-protocol/releases>\n12. agentclientprotocol (acp-release-bot), *Schema v1.31.0* (published 2026-11-10) — <https://github.com/agentclientprotocol/agent-client-protocol/releases/tag/schema-v1.31.0>\n13. Agent Client Protocol, *Requests for Dialog (RFDs)* (checked 2026-10-30) — <https://agentclientprotocol.com/rfds/about>\n14. Agent Client Protocol, *Transports Working Group* (published 2026-04-22) — <https://agentclientprotocol.com/announcements/transports-working-group>\n15. Agent Client Protocol, *Content (protocol v1)* (checked 2026-10-30) — <https://agentclientprotocol.com/protocol/v1/content>\n16. agentclientprotocol, *ACP Registry* (checked 2026-10-30) — <https://github.com/agentclientprotocol/registry>\n17. Agent Client Protocol, *MCP-over-ACP: Stateless MCP Requests over ACP* (checked 2026-10-30) — <https://agentclientprotocol.com/rfds/mcp-over-acp>\n18. Agent Client Protocol, *Client-provided system prompts are stabilized* (published 2026-11-06) — <https://agentclientprotocol.com/announcements/client-system-prompt-stabilized>\n19. Agent Client Protocol, *ACP Registry is stabilized* (published 2026-03-09) — <https://agentclientprotocol.com/announcements/acp-agent-registry-stabilized>\n20. goose, *Build an app with goose (ACP)* (checked 2026-10-30) — <https://goose-docs.ai/docs/gdk/acp/>\n21. Zed, *Sandboxing* (checked 2026-11-08) — <https://zed.dev/docs/ai/sandboxing>\n22. Agent Client Protocol, *ACP Registry* (checked 2026-10-30) — <https://agentclientprotocol.com/get-started/registry>\n23. Agent Client Protocol, *ACP registry.json (v1 latest)* (checked 2026-11-06) — <https://cdn.agentclientprotocol.com/registry/v1/latest/registry.json>\n24. Ben Brandt (Zed Industries), *The ACP Registry is Live* (published 2026-01-28) — <https://zed.dev/blog/acp-registry>\n25. Model Context Protocol, *Specification (2026-07-28)* (version 2026-07-28) — <https://modelcontextprotocol.io/specification/2026-07-28>\n26. A2A Protocol, *Agent2Agent (A2A) Protocol Specification* (checked 2026-10-30) — <https://a2a-protocol.org/latest/specification/>\n27. Agent User Interaction Protocol, *Specification 1.0* (modified 2026-09-17) — <https://docs.ag-ui.com/spec/1.0/index>\n28. CopilotKit, *Introducing AG-UI: The Protocol Where Agents Meet Users* (checked 2026-10-30) — <https://www.copilotkit.ai/blog/introducing-ag-ui-the-protocol-where-agents-meet-users>\n29. AGENTS.md, *AGENTS.md* (checked 2026-10-30) — <https://agents.md/>\n30. Google (Gemini CLI), *ACP Mode* (checked 2026-10-30) — <https://geminicli.com/docs/cli/acp-mode/>\n31. GitHub, *Copilot CLI ACP server* (checked 2026-10-30) — <https://docs.github.com/en/copilot/reference/copilot-cli-reference/acp-server>\n32. Allison (GitHub Changelog), *ACP support in Copilot CLI is now in public preview* (published 2026-01-28) — <https://github.blog/changelog/2026-01-28-acp-support-in-copilot-cli-is-now-in-public-preview/>\n33. Janakiram MSV (The New Stack), *Free agents: How AWS Kiro could untie agents from editors* (published 2026-08-06) — <https://thenewstack.io/kiro-agent-client-protocol/>\n34. Zed, *External Agents* (checked 2026-10-30) — <https://zed.dev/docs/ai/external-agents>\n35. Jan-Niklas Wortmann (JetBrains), *ACP Agent Registry Is Live: Find and Connect AI Coding Agents in Your JetBrains IDE* (published 2026-01-28) — <https://blog.jetbrains.com/ai/2026/01/acp-agent-registry/>\n36. CodeCompanion.nvim, *Agent Client Protocol (ACP)* (checked 2026-10-30) — <https://codecompanion.olimorris.dev/agent-client-protocol>\n37. olimorris (CodeCompanion.nvim), *CHANGELOG.md* (17.18.0 dated 2025-08-27; page checked 2026-10-30) — <https://github.com/olimorris/codecompanion.nvim/blob/main/CHANGELOG.md>\n38. Álvaro Ramírez (xenodium), *Introducing Emacs agent-shell (powered by ACP)* (published 2025-09-25) — <https://xenodium.com/introducing-agent-shell>\n39. agentclientprotocol, *claude-agent-acp* (checked 2026-10-30) — <https://github.com/agentclientprotocol/claude-agent-acp>\n40. agentclientprotocol, *codex-acp* (checked 2026-10-30) — <https://github.com/agentclientprotocol/codex-acp>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "ACP",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "aliases": [
    "Agent Communication Protocol",
    "ACP"
   ],
   "analog": "none",
   "collisions": [
    "Agent Client Protocol (Zed)",
    "Agentic Commerce Protocol (OpenAI/Stripe)",
    "Agent Connect Protocol (AGNTCY)"
   ],
   "discovery": {
    "mechanism": "GET /agents (Agent Discovery endpoint)",
    "path": "/agents"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://github.com/i-am-bee/acp",
     "claim": "BeeAI project (i-am-bee), *i-am-bee/acp*, archived Aug 27, 2025; fetched 2026-10-31",
     "date": null,
     "quote": "This repository was archived by the owner on Aug 27, 2025. It is now read-only. ... ACP is now part of A2A under the Linux Foundation / \"full_name\": \"i-am-bee/acp\" ... \"created_at\": \"2025-04-03T08:40:43Z\" / \"pushed_at\": \"2025-08-25T18:42:36Z\" ... \"archived\": true / This repository was archived by the owner on Aug 27, 2025. It is now read-only. / 100%;\\\"\\u003e\\u003c/a\\u003e\\n\\u003ca href=\\\"https://github.com/i-am-bee/beeai-framework?tab=Apache-2.0-1-ov-file#readme\\\"\\u003e\\u003cimg / \"url\": \"https://api.github.com/users/i-am-bee\", / \"full_name\": \"i-am-bee/acp\" / 🛠️ \\u003ca href=\\\"https://github.com/i-am-bee/beeai-platform/blob/main/docs/community-and-support/acp-a2a-migration-guide.mdx\\\"\\u003eMigration / data-snippet-clipboard-copy-content=\\\"curl -X POST http://localhost:8000/runs \\\\\\n -H \\u0026quot;Content-Type: application/json\\u0026quot; \\\\\\n -d '{\\n \\u0026quot;agent_name\\u0026quot;:",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://raw.githubusercontent.com/i-am-bee/acp/main/README.md",
     "claim": "BeeAI project (i-am-bee), *Agent Communication Protocol README*, fetched 2026-10-31",
     "date": null,
     "quote": "ACP is an open protocol for communication between AI agents, applications, and humans. / ACP enables agents to: - Send and receive rich messages - like text, code, files, or media - Respond in real time, in the background, or as a stream - Let others discover what they can do - Collaborate on long-running tasks - Share state with each other when needed / Developed by contributors to the BeeAI project, this initiative is part of the Linux Foundation AI & Data program. / ACP is now part of A2A under the Linux Foundation! / Modern AI agents are often built in isolation, across different frameworks, teams, and infrastructures. This fragmentation slows innovation and makes it harder for agents to work together effectively. / ACP solves this by enabling agents to communicate and coordinate using multimodal messages. ... A single agent execution with specific inputs. Supports sync or streaming, with intermediate and final output. ... Let agents pause to request information from the client and resume, enabling interactive exchanges where the agent can wait for external input (data, actions, etc.) before continuing. / A model describing an agent's capabilities-its name, description, and optional metadata and status-for discovery and composition without exposing implementation details.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://raw.githubusercontent.com/i-am-bee/acp/main/docs/spec/openapi.yaml",
     "claim": "BeeAI project (i-am-bee), *ACP OpenAPI specification 0.2.0*, version 0.2.0; fetched 2026-10-31",
     "date": null,
     "quote": "The Agent Communication Protocol (ACP) provides a standardized RESTful API for managing, orchestrating, and executing AI agents. It supports synchronous, asynchronous, and streamed agent interactions, with both stateless and stateful execution modes. ... version: 0.2.0 / Returns a ping. ... summary: Agent Discovery description: Returns a list of agents. ... Returns a manifest of the specified agent. ... Create and start a new run for the specified agent. ... Resume a paused or awaiting run. ... Cancel the specified run. / license: name: Apache 2.0 ... version: 0.2.0 / openapi: 3.1.1 info: title: ACP - Agent Communication Protocol description: >- The Agent Communication / immediate) content: application/json: schema: $ref: \"#/components/schemas/Run\" text/event-stream: schema: $ref: \"#/components/schemas/Event\" \"202\": description: Run accepted / responses: \"200\":description: Ping successful content: application/json: schema: type: object default: $ref: \"#/components/responses/Error\" /agents: get: / license: name: Apache 2.0 url: https://www.apache.org/licenses/LICENSE-2.0.html / enum: - created - in-progress - awaiting - cancelling - cancelled - completed - failed description: Status of the run RunMode: type: string enum: [sync, async, stream] description: Mode of the request / A part of a message, containing a specific `content_type` and either inline `content` or `content_url`, or neither. Only one of `content` or `content_url` can be provided. / history: type: array items: type: string format: uri state: type: string format: uri required: - id - history / enum: - server_error - invalid_input - not_found / openapi: 3.1.1 info: title: ACP - Agent Communication Protocol",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://github.com/i-am-bee/acp/releases/tag/v1.0.3",
     "claim": "BeeAI project (i-am-bee), *Release v1.0.3*, published 2025-08-21; fetched 2026-10-31",
     "date": null,
     "quote": "\"tag_name\": \"v1.0.3\" ... \"published_at\": \"2025-08-21T05:31:04Z\" ... fix(python): revert cachetools version bump to avoid conflicts",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://spec.openapis.org/oas/v3.1.0.html",
     "claim": "OpenAPI Initiative, *OpenAPI Specification v3.1.0*, 2021-02-15",
     "date": "2021-02-15",
     "quote": "OpenAPI Specification v3.1.0 Version 3.1.0",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://aaif.io/blog/a2a-joins-aaif",
     "claim": "Agentic AI Foundation, *A2A joins AAIF's open agentic stack*, published 2026-08-17; modified 2026-09-24",
     "date": null,
     "quote": "A2A v1.0, the first stable specification, shipped in March 2026.",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Current : the current protocol version, which is ready for use and may continue to receive backwards compatible changes.",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://github.com/agntcy/oasf/releases",
     "claim": "AGNTCY, *agntcy/oasf releases*, checked 2026-10-31",
     "date": null,
     "quote": "\"html_url\": \"https://github.com/agntcy/oasf/releases/tag/v1.1.0\", \"id\": 352159727, \"author\": { \"login\": \"github-actions[bot]\", \"id\": 41898282, \"node_id\": \"MDM6Qm90NDE4OTgyODI=\", \"avatar_url\":",
     "ref": 8
    }
   ],
   "form": "endpoint",
   "governance": "Formerly IBM BeeAI; archived, functionality merged into A2A under the Linux Foundation",
   "group": "Protocols called ACP",
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against github.com/i-am-bee/acp (archived banner, archive date) and its OpenAPI spec; set phase withdrawn as merged into A2A"
    },
    {
     "date": "2026-09-06",
     "note": "collisions updated to add Agent Connect Protocol (Cisco/AGNTCY), verified against github.com/agntcy/acp-spec, spec.acp.agntcy.org"
    },
    {
     "date": "2026-10-16",
     "note": "IBM's Agent Communication Protocol is deprecated (merged into A2A)"
    },
    {
     "date": "2026-10-16",
     "note": "version v1.0.3"
    },
    {
     "date": "2026-10-16",
     "note": "No push since 2025-08-25 (over 180 days)"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "agent-communication-protocol",
   "implementation": "none-found",
   "last_verified": "2026-11-12",
   "name": "Agent Communication Protocol",
   "native_status": "\"ACP is now part of A2A under the Linux Foundation\" (repository banner)",
   "origin": {
    "date": "2025",
    "org": "IBM (BeeAI)"
   },
   "part_of": null,
   "parties": [
    "agent-agent",
    "agent-human"
   ],
   "phase": "replaced",
   "probe": {
    "method": "GET",
    "on_absent": "Expected: the protocol was retired in August 2025 and superseded by A2A, so absence is the normal case",
    "parse": "JSON array of agent objects would confirm a live ACP server; in practice the repository is archived and this is not expected to resolve on new deployments",
    "path": "{origin}/agents"
   },
   "question": "How did agents, applications, and people exchange multimodal REST messages before merging into A2A?",
   "scope": "general",
   "spec_url": "https://github.com/i-am-bee/acp",
   "step": "coordinate",
   "summary_md": "**Agent Communication Protocol** (`ACP`) is an open protocol for communication between AI agents, applications, and humans. It enables agents to send and receive rich messages such as text, code, files, or media, to respond in real time, in the background, or as a stream, to let others discover what they can do, to collaborate on long-running tasks, and to share state with each other when needed. The `i-am-bee/acp` repository was created on 2025-04-03. Contributors to the BeeAI project developed the initiative as part of the Linux Foundation AI & Data program. The README states that ACP is now part of A2A under the Linux Foundation. OpenAPI version `0.2.0` describes a standardized RESTful API for managing, orchestrating, and executing AI agents. It supports synchronous, asynchronous, and streamed agent interactions, with both stateless and stateful execution modes. `/ping` returns a ping, `/agents` returns a list of agents, and `/agents/{name}` returns a manifest of the specified agent. `/runs` creates and starts a new run for the specified agent. A paused or awaiting run is resumed at `/runs/{run_id}`, and the specified run is cancelled at `/runs/{run_id}/cancel`. The OpenAPI license name is Apache 2.0 and the info `version` is `0.2.0`. Release `v1.0.3` was published on 2025-08-21, and the release body is `fix(python): revert cachetools version bump to avoid conflicts`. The `i-am-bee/acp` repository received its final push on `2025-08-25` and was archived by its owner as read-only on Aug 27, 2025.",
   "track": "linux-foundation",
   "version": {
    "label": "v1.0.3",
    "date": "2025-08-21"
   },
   "watch": [
    {
     "type": "github",
     "repo": "i-am-bee/acp",
     "mode": "release"
    }
   ],
   "use_cases": [
    "agent-to-agent-messaging",
    "describe-agent-capabilities"
   ],
   "audience": [
    "agent-builder",
    "platform"
   ],
   "pairs_with": [
    "a2a",
    "mcp",
    "oasf"
   ],
   "prerequisites": [],
   "hatnote_md": "*This page is about IBM and BeeAI's Agent Communication Protocol (`i-am-bee/acp`), an OpenAPI 3.1.1 REST and SSE specification (`/agents`, `/runs`) whose repository was archived into A2A under the Linux Foundation in August 2025. It is not AGNTCY's [Agent Connect Protocol](/protocols/agent-connect-protocol/) or Zed's [Agent Client Protocol](/protocols/agent-client-protocol/).*",
   "tier": "spec_brief",
   "lifecycle_status": "superseded",
   "wire_archetype": "harnesses_rpc_ui",
   "status_notice_md": "**Status notice (Merged & Archived):** The IBM / BeeAI Agent Communication Protocol (`ACP`) repository was archived read-only on `2025-08-27` after merging into [Agent2Agent (A2A)](/protocols/a2a/) under the Linux Foundation.",
   "superseded_by": [
    {
     "doc": "Agent2Agent (A2A)",
     "protocol_id": "a2a",
     "url": "https://agenticweb.wiki/protocols/a2a/"
    }
   ],
   "replaced_by": {
    "doc": "Agent2Agent (A2A)",
    "page": "/protocols/a2a/"
   },
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "**Status notice (Merged & Archived):** The IBM / BeeAI Agent Communication Protocol (`ACP`) repository was archived read-only on `2025-08-27` after merging into [Agent2Agent (A2A)](/protocols/a2a/) under the Linux Foundation. This page is about IBM and BeeAI's Agent Communication Protocol (`i-am-bee/acp`), an OpenAPI 3.1.1 REST and SSE specification (`/agents`, `/runs`) whose repository was archived into A2A under the Linux Foundation in August 2025. It is not AGNTCY's [Agent Connect Protocol](/protocols/agent-connect-protocol/) or Zed's [Agent Client Protocol](/protocols/agent-client-protocol/). [1]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Agent Communication Protocol** (`ACP`) is an open protocol for communication between AI agents, applications, and humans. It enables agents to send and receive rich messages such as text, code, files, or media, to respond in real time, in the background, or as a stream, to let others discover what they can do, to collaborate on long-running tasks, and to share state with each other when needed. [2] The `i-am-bee/acp` repository was created on 2025-04-03. [1] Contributors to the BeeAI project developed the initiative as part of the Linux Foundation AI & Data program. The README states that ACP is now part of A2A under the Linux Foundation. [2] OpenAPI version `0.2.0` describes a standardized RESTful API for managing, orchestrating, and executing AI agents. It supports synchronous, asynchronous, and streamed agent interactions, with both stateless and stateful execution modes. [3] `/ping` returns a ping, `/agents` returns a list of agents, and `/agents/{name}` returns a manifest of the specified agent. `/runs` creates and starts a new run for the specified agent. A paused or awaiting run is resumed at `/runs/{run_id}`, and the specified run is cancelled at `/runs/{run_id}/cancel`. [3] The OpenAPI license name is Apache 2.0 and the info `version` is `0.2.0`. Release `v1.0.3` was published on 2025-08-21, and the release body is `fix(python): revert cachetools version bump to avoid conflicts`. [3][4] The `i-am-bee/acp` repository received its final push on `2025-08-25` and was archived by its owner as read-only on Aug 27, 2025. [1]",
   "v05_identity_sentence_md": "**Agent Communication Protocol** (`ACP`) is an open protocol for communication between AI agents, applications, and humans. It enables agents to send and receive rich messages such as text, code, files, or media, to respond in real time, in the background, or as a stream, to let others discover what they can do, to collaborate on long-running tasks, and to share state with each other when needed. [2] The `i-am-bee/acp` repository was created on 2025-04-03. [1] Contributors to the BeeAI project developed the initiative as part of the Linux Foundation AI & Data program. The README states that ACP is now part of A2A under the Linux Foundation. [2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Coordinate](/category/coordinate/) (`coordinate`)"
    },
    {
     "label": "Form",
     "value_md": "Endpoint (`endpoint`)"
    },
    {
     "label": "Originated by",
     "value_md": "IBM / BeeAI Project (`i-am-bee`) [1]"
    },
    {
     "label": "Governed by",
     "value_md": "IBM BeeAI Project (`i-am-bee`), archived 2025-08-27 and merged into A2A under the Linux Foundation [1][2]"
    },
    {
     "label": "Track",
     "value_md": "Open-source project specification (`i-am-bee/acp`, archived and merged into A2A under the Linux Foundation) [1][2]"
    },
    {
     "label": "Status",
     "value_md": "Archived (`2025-08-27`, read-only); README states \"ACP is now part of A2A under the Linux Foundation\" [1][2]"
    },
    {
     "label": "Version",
     "value_md": "OpenAPI Spec `0.2.0`; final SDK/repo release `v1.0.3` (2025-08-21, archived) [1][3][4]"
    },
    {
     "label": "Wire format",
     "value_md": "HTTP/1.1 or HTTP/2 REST (`application/json`) and Server-Sent Events (`text/event-stream`) defined in OpenAPI 3.1.1 [3]"
    },
    {
     "label": "Specification",
     "value_md": "https://github.com/i-am-bee/acp [1]"
    },
    {
     "label": "Found at",
     "value_md": "`GET /agents`, `GET /agents/{name}`, `GET /ping`, `Content-Type: application/json` [1][3]"
    },
    {
     "label": "Licence",
     "value_md": "Apache License 2.0 (`i-am-bee/acp`) [1][3]"
    }
   ],
   "v05_problem_md": "Modern AI agents are often built in isolation, across different frameworks, teams, and infrastructures. This fragmentation slows innovation and makes it harder for agents to work together effectively. [2] ACP solves this by enabling agents to communicate and coordinate using multimodal messages. A run is a single agent execution with specific inputs and supports sync or streaming, with intermediate and final output. Await lets an agent pause to request information from the client and resume, so the agent can wait for external input before continuing. [2] Run mode is `sync`, `async`, or `stream`. Run status is `created`, `in-progress`, `awaiting`, `cancelling`, `cancelled`, `completed`, or `failed`. [3] An agent manifest describes the agent's name, description, and optional metadata and status for discovery and composition without exposing implementation details. [2] A message part contains a specific `content_type` and either inline `content` or `content_url`, or neither, and only one of `content` or `content_url` can be provided. [3] Session `history` is an array of URI strings and `state` is a URI, and the required session fields are `id` and `history`. [3] An error `code` is `server_error`, `invalid_input`, or `not_found`. [3]",
   "v05_mechanism_delta_md": "ACP solves this by enabling agents to communicate and coordinate using multimodal messages. A run is a single agent execution with specific inputs and supports sync or streaming, with intermediate and final output. Await lets an agent pause to request information from the client and resume, so the agent can wait for external input before continuing. [2] Run mode is `sync`, `async`, or `stream`. Run status is `created`, `in-progress`, `awaiting`, `cancelling`, `cancelled`, `completed`, or `failed`. [3]",
   "v05_scope_boundary_md": "An agent manifest describes the agent's name, description, and optional metadata and status for discovery and composition without exposing implementation details. [2] A message part contains a specific `content_type` and either inline `content` or `content_url`, or neither, and only one of `content` or `content_url` can be provided. [3] Session `history` is an array of URI strings and `state` is a URI, and the required session fields are `id` and `history`. [3] An error `code` is `server_error`, `invalid_input`, or `not_found`. [3]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "OpenAPI Specification 3.1",
      "spec_or_rfc": "OpenAPI 3.1.1",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "IBM ACP's last published OpenAPI document, v0.2.0, exposed GET /ping, GET /agents with limit and offset, and a /runs family including POST /runs, and the repository was archived on 27 August 2025 with the banner that ACP is now part of A2A. [1][3][5]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "a2a",
      "target_name": "Agent2Agent Protocol (A2A)",
      "relation_type": "superseded_by",
      "relation_label": "Superseded by",
      "delta_md": "IBM ACP is superseded by A2A at the governance level: its repository was archived on 27 August 2025 with the banner that ACP is now part of A2A under the Linux Foundation, while its wire surface remained an OpenAPI REST API at GET /ping, GET /agents, and POST /runs rather than A2A's JSON-RPC 2.0 and /.well-known/agent-card.json surface. [1][6]"
     },
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "IBM ACP addressed remote agents with GET /agents and POST /runs on its archived OpenAPI surface, while MCP addresses tools, resources, and prompt templates over JSON-RPC 2.0 on stdio or Streamable HTTP. [1][7]"
     },
     {
      "target_id": "oasf",
      "target_name": "Open Agentic Schema Framework",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "OASF is the AGNTCY schema for agent skills, domains, and modules, and IBM ACP's /agents path is not described as using that schema. [1][8]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "nlip",
     "target_name": "Natural Language Interaction Protocol (NLIP)",
     "relation_label": "Peer alternative",
     "delta": "ACP's repository was archived by the owner on 27 August 2025 and states that ACP is now part of A2A under the Linux Foundation. Its OpenAPI document exposes GET /agents and POST /runs. NLIP's HTTP binding accepts an ECMA-430 JSON message with POST at the path /nlip.",
     "item_md": "**[Natural Language Interaction Protocol (NLIP)](/protocols/nlip/)** (Peer alternative) — ACP's repository was archived by the owner on 27 August 2025 and states that ACP is now part of A2A under the Linux Foundation. Its OpenAPI document exposes GET /agents and POST /runs. NLIP's HTTP binding accepts an ECMA-430 JSON message with POST at the path /nlip."
    },
    {
     "target_id": "agtp",
     "target_name": "Agent Transfer Protocol",
     "relation_label": "Complements",
     "delta": "AGTP draft-10 frames ACP as an AGMP layer above AGTP's transport-level semantic methods and agent identity, while IBM ACP's archived OpenAPI surface was GET /agents and POST /runs before the repository was archived into A2A on 2025-08-27.",
     "item_md": "**[Agent Transfer Protocol](/protocols/agtp/)** (Complements) — AGTP draft-10 frames ACP as an AGMP layer above AGTP's transport-level semantic methods and agent identity, while IBM ACP's archived OpenAPI surface was GET /agents and POST /runs before the repository was archived into A2A on 2025-08-27."
    },
    {
     "item_md": "**[Coordinate protocols](/category/coordinate/)** — Category index for `coordinate` standards."
    }
   ],
   "v05_compiled_md": "---\nid: agent-communication-protocol\ntitle: \"Agent Communication Protocol\"\ntier: spec_brief\nlifecycle_status: superseded\ncategory: coordinate\nform: endpoint\nwire_archetype: harnesses_rpc_ui\nspec_url: https://github.com/i-am-bee/acp\nlast_checked: 2026-11-12\n---\n\n# Agent Communication Protocol\n\n**Category:** [Coordinate](/category/coordinate/) (`coordinate`) · **Form:** Endpoint (`endpoint`) · **Last checked:** 2026-11-12\n\n> ***Status notice (Merged & Archived):** The IBM / BeeAI Agent Communication Protocol (`ACP`) repository was archived read-only on `2025-08-27` after merging into [Agent2Agent (A2A)](/protocols/a2a/) under the Linux Foundation. This page is about IBM and BeeAI's Agent Communication Protocol (`i-am-bee/acp`), an OpenAPI 3.1.1 REST and SSE specification (`/agents`, `/runs`) whose repository was archived into A2A under the Linux Foundation in August 2025. It is not AGNTCY's [Agent Connect Protocol](/protocols/agent-connect-protocol/) or Zed's [Agent Client Protocol](/protocols/agent-client-protocol/). [1]*\n\n**Agent Communication Protocol** (`ACP`) is an open protocol for communication between AI agents, applications, and humans. It enables agents to send and receive rich messages such as text, code, files, or media, to respond in real time, in the background, or as a stream, to let others discover what they can do, to collaborate on long-running tasks, and to share state with each other when needed. [2] The `i-am-bee/acp` repository was created on 2025-04-03. [1] Contributors to the BeeAI project developed the initiative as part of the Linux Foundation AI & Data program. The README states that ACP is now part of A2A under the Linux Foundation. [2] OpenAPI version `0.2.0` describes a standardized RESTful API for managing, orchestrating, and executing AI agents. It supports synchronous, asynchronous, and streamed agent interactions, with both stateless and stateful execution modes. [3] `/ping` returns a ping, `/agents` returns a list of agents, and `/agents/{name}` returns a manifest of the specified agent. `/runs` creates and starts a new run for the specified agent. A paused or awaiting run is resumed at `/runs/{run_id}`, and the specified run is cancelled at `/runs/{run_id}/cancel`. [3] The OpenAPI license name is Apache 2.0 and the info `version` is `0.2.0`. Release `v1.0.3` was published on 2025-08-21, and the release body is `fix(python): revert cachetools version bump to avoid conflicts`. [3][4] The `i-am-bee/acp` repository received its final push on `2025-08-25` and was archived by its owner as read-only on Aug 27, 2025. [1]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Coordinate](/category/coordinate/) (`coordinate`) |\n| **Form** | Endpoint (`endpoint`) |\n| **Originated by** | IBM / BeeAI Project (`i-am-bee`) [1] |\n| **Governed by** | IBM BeeAI Project (`i-am-bee`), archived 2025-08-27 and merged into A2A under the Linux Foundation [1][2] |\n| **Track** | Open-source project specification (`i-am-bee/acp`, archived and merged into A2A under the Linux Foundation) [1][2] |\n| **Status** | Archived (`2025-08-27`, read-only); README states \"ACP is now part of A2A under the Linux Foundation\" [1][2] |\n| **Version** | OpenAPI Spec `0.2.0`; final SDK/repo release `v1.0.3` (2025-08-21, archived) [1][3][4] |\n| **Wire format** | HTTP/1.1 or HTTP/2 REST (`application/json`) and Server-Sent Events (`text/event-stream`) defined in OpenAPI 3.1.1 [3] |\n| **Specification** | https://github.com/i-am-bee/acp [1] |\n| **Found at** | `GET /agents`, `GET /agents/{name}`, `GET /ping`, `Content-Type: application/json` [1][3] |\n| **Licence** | Apache License 2.0 (`i-am-bee/acp`) [1][3] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nModern AI agents are often built in isolation, across different frameworks, teams, and infrastructures. This fragmentation slows innovation and makes it harder for agents to work together effectively. [2] ACP solves this by enabling agents to communicate and coordinate using multimodal messages. A run is a single agent execution with specific inputs and supports sync or streaming, with intermediate and final output. Await lets an agent pause to request information from the client and resume, so the agent can wait for external input before continuing. [2] Run mode is `sync`, `async`, or `stream`. Run status is `created`, `in-progress`, `awaiting`, `cancelling`, `cancelled`, `completed`, or `failed`. [3] An agent manifest describes the agent's name, description, and optional metadata and status for discovery and composition without exposing implementation details. [2] A message part contains a specific `content_type` and either inline `content` or `content_url`, or neither, and only one of `content` or `content_url` can be provided. [3] Session `history` is an array of URI strings and `state` is a URI, and the required session fields are `id` and `history`. [3] An error `code` is `server_error`, `invalid_input`, or `not_found`. [3]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **OpenAPI Specification 3.1** | `OpenAPI 3.1.1` | Profiles classic standard | IBM ACP's last published OpenAPI document, v0.2.0, exposed GET /ping, GET /agents with limit and offset, and a /runs family including POST /runs, and the repository was archived on 27 August 2025 with the banner that ACP is now part of A2A. [1][3][5] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Agent2Agent Protocol (A2A)](/protocols/a2a/)** | Superseded by | IBM ACP is superseded by A2A at the governance level: its repository was archived on 27 August 2025 with the banner that ACP is now part of A2A under the Linux Foundation, while its wire surface remained an OpenAPI REST API at GET /ping, GET /agents, and POST /runs rather than A2A's JSON-RPC 2.0 and /.well-known/agent-card.json surface. [1][6] |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | IBM ACP addressed remote agents with GET /agents and POST /runs on its archived OpenAPI surface, while MCP addresses tools, resources, and prompt templates over JSON-RPC 2.0 on stdio or Streamable HTTP. [1][7] |\n| **[Open Agentic Schema Framework](/protocols/oasf/)** | Complements | OASF is the AGNTCY schema for agent skills, domains, and modules, and IBM ACP's /agents path is not described as using that schema. [1][8] |\n\n---\n\n## See also\n\n- **[Natural Language Interaction Protocol (NLIP)](/protocols/nlip/)** *(Peer alternative)* — ACP's repository was archived by the owner on 27 August 2025 and states that ACP is now part of A2A under the Linux Foundation. Its OpenAPI document exposes GET /agents and POST /runs. NLIP's HTTP binding accepts an ECMA-430 JSON message with POST at the path /nlip.\n- **[Agent Transfer Protocol](/protocols/agtp/)** *(Complements)* — AGTP draft-10 frames ACP as an AGMP layer above AGTP's transport-level semantic methods and agent identity, while IBM ACP's archived OpenAPI surface was GET /agents and POST /runs before the repository was archived into A2A on 2025-08-27.\n- **Category:** [Coordinate protocols](/category/coordinate/)\n\n---\n\n## References\n\n1. BeeAI project (i-am-bee), *i-am-bee/acp* (archived Aug 27, 2025; fetched 2026-10-31) — <https://github.com/i-am-bee/acp>\n2. BeeAI project (i-am-bee), *Agent Communication Protocol README* (fetched 2026-10-31) — <https://raw.githubusercontent.com/i-am-bee/acp/main/README.md>\n3. BeeAI project (i-am-bee), *ACP OpenAPI specification 0.2.0* (version 0.2.0; fetched 2026-10-31) — <https://raw.githubusercontent.com/i-am-bee/acp/main/docs/spec/openapi.yaml>\n4. BeeAI project (i-am-bee), *Release v1.0.3* (published 2025-08-21; fetched 2026-10-31) — <https://github.com/i-am-bee/acp/releases/tag/v1.0.3>\n5. OpenAPI Initiative, *OpenAPI Specification v3.1.0* (2021-02-15) — <https://spec.openapis.org/oas/v3.1.0.html>\n6. Agentic AI Foundation, *A2A joins AAIF's open agentic stack* (published 2026-08-17; modified 2026-09-24) — <https://aaif.io/blog/a2a-joins-aaif>\n7. Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation* (2026-07-28) — <https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning>\n8. AGNTCY, *agntcy/oasf releases* (checked 2026-10-31) — <https://github.com/agntcy/oasf/releases>\n"
  },
  {
   "acronym": "ACP",
   "adoption": {
    "level": "observed",
    "by": "Etsy, Shopify, Walmart, Salesforce (Agentforce Commerce), commercetools, OpenAI (ChatGPT Instant Checkout), Target, Sephora, Nordstrom, Lowe's, Best Buy, The Home Depot, and Wayfair, Stripe, and 3 other verified implementations",
    "probe_run": null
   },
   "aliases": [
    "ACP",
    "Agentic Commerce Protocol"
   ],
   "analog": "Checkout API",
   "collisions": [
    "Agent Client Protocol (Zed)",
    "Agent Communication Protocol (IBM)",
    "ERC-8183 (also informally called Agentic Commerce Protocol)",
    "Agent Connect Protocol (AGNTCY)"
   ],
   "discovery": {
    "mechanism": "well-known",
    "path": "GET https://{domain}/.well-known/acp.json, the discovery document added in version 2026-04-17. No site was found serving it: the path returned HTTP 404 on www.etsy.com, www.shopify.com, www.urbanoutfitters.com, www.target.com, www.sephora.com, www.walmart.com, www.nordstrom.com, www.wayfair.com and www.agenticcommerce.dev (checked 2026-10-28)"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://web.archive.org/web/20261022061422/https://openai.com/index/buy-it-in-chatgpt/",
     "claim": "OpenAI, *Buy it in ChatGPT: Instant Checkout and the Agentic Commerce Protocol*, 2025-09-29 (Wayback snapshot 2026-10-22)",
     "date": null,
     "quote": "September 29, 2025 / Instant Checkout, powered by the Agentic Commerce Protocol, built with Stripe / built with Stripe / accept agentic payments either by using Stripe's new Shared Payment Token API / or adopting the Delegated Payments Spec in the Agentic Commerce Protocol / without changing their existing payment processor. / U.S. ChatGPT Plus, Pro, and Free users can now buy directly from U.S. Etsy sellers / Today, Instant Checkout supports single-item purchases. / over a million Shopify merchants, like Glossier, SKIMS, Spanx and Vuori, coming soon.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://lfaidata.foundation/communityblog/2025/08/29/acp-joins-forces-with-a2a-under-the-linux-foundations-lf-ai-data/",
     "claim": "Kate Blair and Todd Segal, LF AI & Data, *ACP Joins Forces with A2A*, 2025-08-29",
     "date": "2025-08-29",
     "quote": "August 29, 2025 / IBM Research launched the Agent Communication Protocol (ACP) in March 2025 to power its BeeAI platform / ACP is officially merging with the A2A under the Linux Foundation",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://zed.dev/blog/bring-your-own-agent-to-zed",
     "claim": "Nathan Sobo, Zed, *Bring Your Own Agent to Zed — Featuring Gemini CLI*, 2025-08-27",
     "date": "2025-08-27",
     "quote": "August 27th, 2025 / we created the Agent Client Protocol (ACP) / interact with third-party agents directly within Zed",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://github.com/agntcy/acp-spec",
     "claim": "AGNTCY, *Agent Connect Protocol specification*, checked 2026-10-28",
     "date": null,
     "quote": "Agent Connect Protocol / defines a standard interface to invoke and configure remote agents over an API",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://eips.ethereum.org/EIPS/eip-8183",
     "claim": "Davide Crapis, Bryan Lim, Tay Weixiong, and Chooi Zuhwa, *ERC-8183: Agentic Commerce*, created 2026-02-25",
     "date": null,
     "quote": "Created 2026-02-25 / This specification defines the Agentic Commerce Protocol: a job with escrowed budget",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://ap2-protocol.org/ap2/specification/",
     "claim": "Google, *Agent Payments Protocol specification*, v0.2; checked 2026-10-30",
     "date": null,
     "quote": "Checkout Mandate / Payment Mandate / creating a user-signed mandate / Agentic Payment Protocol (v0.2) / The Trusted Surface role is a UI surface that is trusted to get informed user consent for an intent before creating a user-signed mandate.",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://github.com/agentic-commerce-protocol/agentic-commerce-protocol/blob/main/README.md",
     "claim": "OpenAI and Stripe, *Agentic Commerce Protocol README*, checked 2026-10-28",
     "date": null,
     "quote": "The Agentic Commerce Protocol (ACP) is an interaction model and open standard for connecting buyers, their AI agents, and businesses to complete purchases seamlessly. / The specification is maintained by OpenAI and Stripe and is currently in beta. / 2026-04-17/ # Cart, feed, orders, authentication, and MCP / All contributors must sign a CLA before contributions can be accepted. / ACP uses date-based versioning in YYYY-MM-DD format. / 2026-01-30/ # Extensions, discounts, payment handlers",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://github.com/agentic-commerce-protocol/agentic-commerce-protocol/blob/main/rfcs/rfc.agentic_checkout.md",
     "claim": "OpenAI and Stripe, *RFC: Agentic Checkout — Merchant REST API*, Status Draft; Version 2026-01-16; checked 2026-10-28",
     "date": null,
     "quote": "1. Create - POST /checkout_sessions initializes a session from items and optional buyer/address. / Orders are processed entirely on the merchant's existing commerce stack. / POST /checkout_sessions/{checkout_session_id} → 200 OK / GET /checkout_sessions/{checkout_session_id} → 200 OK (or 404 if not found) / 4. Complete - POST /checkout_sessions/{id}/complete finalizes with a payment method and MUST create an order. / POST /checkout_sessions/{checkout_session_id}/cancel → 200 OK when canceled, 405 if already completed or canceled. / Clients MUST include an Idempotency-Key header on every POST request (create, update, complete, cancel). / Status: Draft / Version: 2026-01-16 / Authorization: Bearer <token> (REQUIRED) / Content-Type: application/json (REQUIRED on requests with body) / Idempotency-Key: <string> (REQUIRED on all POST requests; opaque string, max 255 characters, UUID v4 recommended) / Request-Id: <string> (RECOMMENDED) / API-Version: 2026-01-16 (REQUIRED) / This RFC defines the Agentic Checkout Specification (ACS), a standardized REST API contract that merchants SHOULD implement to support experiences across agent platforms. / 2. Update - POST /checkout_sessions/{id} applies changes (items, address, fulfillment option). / 3. Retrieve - GET /checkout_sessions/{id} returns latest authoritative state. / 4. Complete - POST /checkout_sessions/{id}/complete finalizes with a payment method and must create an order. / 5. Cancel - POST /checkout_sessions/{id}/cancel / RFC: Agentic Checkout / The merchant remains the system of record for all orders, payments, taxes, and compliance. / Keep payments on merchant rails; optional delegated payments are covered separately. / Out of scope: PSP authorization/capture semantics, returns/exchanges workflows, tax configuration, fraud modeling details. / 1. **Create** — `POST /checkout_sessions` initializes a session from items and optional buyer/address. / 2. **Update** — `POST /checkout_sessions/{id}` applies changes (items, address, fulfillment option). / 3. **Retrieve** — `GET /checkout_sessions/{id}` returns latest authoritative state. / 4. **Complete** — `POST /checkout_sessions/{id}/complete` finalizes with a payment method and **MUST** create an order. / 5. **Cancel** — `POST /checkout_sessions/{id}/cancel` cancels if the session is not yet completed/canceled. / Keep **payments on merchant rails**; optional delegated payments are covered separately. / Scope: Checkout session lifecycle and webhook integration / Provide a stable, versioned API surface (API-Version: 2026-01-16) that ChatGPT calls to create, update, retrieve, complete, and cancel checkout sessions. / Ensure ChatGPT renders an authoritative cart state on every response. / Signature: <base64url> (RECOMMENDED) / Timestamp: <RFC3339> (RECOMMENDED) / Server SHOULD publish acceptable signature algorithms out‑of‑band; client SHOULD sign requests (Signature) over canonical JSON with an accompanying Timestamp (RFC 3339). / Order lifecycle updates (order_create, order_update) MUST be emitted to the application's webhook receiver (see Agentic Checkout Webhooks API RFC/OAS). / POST /checkout_sessions → 201 Created / status: not_ready_for_payment | ready_for_payment | completed | canceled | in_progress / line_items[] with base_amount, discount, subtotal, tax, total (all integers) / Response returns full authoritative state as in Create. / Response MUST include status: completed and an order with id, checkout_session_id, and permalink_url. / Server MUST set session.status to authentication_required when authentication (e.g., 3DS) is required. / When status is authentication_required, the session response MUST include authentication_metadata. / the client MUST attempt authentication using the provided metadata and MUST return the authentication_result / The key is an opaque string, max 255 characters; UUID v4 is RECOMMENDED. / \"code\": \"idempotency_key_required\" / The replayed response SHOULD include the header Idempotent-Replayed: true. / Same key + identical body → server MUST return the original response with the same HTTP status code. / Servers MUST retain idempotency key → response mappings for at least 24 hours. / Webhooks: Verify HMAC (Merchant-Signature) on webhook calls (see separate Webhooks RFC/OAS). / PCI/PII: Do not log full PAN/CVC; redact addresses as required by policy. TLS 1.3 MUST be used.",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://github.com/agentic-commerce-protocol/agentic-commerce-protocol/blob/main/rfcs/rfc.delegate_payment.md",
     "claim": "OpenAI and Stripe, *RFC: Delegate Payment API*, Status Draft; Version 2025-09-29; checked 2026-10-28",
     "date": null,
     "quote": "The token may then be used by the merchant's existing PSP only within explicit Allowance constraints. / POST /agentic_commerce/delegate_payment / This RFC defines a single, MUST-implement HTTP endpoint that issues a delegated vault token for a payment credential. / Status: Draft / Version: 2025-09-29 / RFC: Agentic Commerce - Delegate Payment API / This RFC defines a **single, MUST-implement** HTTP endpoint that issues a **delegated vault token** for a payment credential. / allowance | Allowance | ✅ | Constraints on how the token may be used. / reason: MUST be one_time / max_amount: integer, minor units (e.g., $20 → 2000) / currency: string, lowercase ISO-4217 (e.g., usd) / checkout_session_id: string / merchant_id: string (≤256) / expires_at: RFC 3339 timestamp / The token MUST become invalid at or after allowance.expires_at. / The returned token MUST ONLY be usable within the provided Allowance (reason, max_amount, currency, expiry). / Out of scope: PSP-specific authorization/capture, multi-use tokens beyond allowance, refund semantics. / Payments, settlement, and compliance remain on the merchant's rails. / PII/PCI: Card data handling MUST follow applicable PCI DSS requirements; logs MUST NOT contain full PAN or CVC. / Transport: All requests MUST use HTTPS/TLS 1.3. / issues a delegated vault token for a payment credential. / delegated vault token for a payment credential / issues a delegated vault token for a payment credential",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://stripe.com/blog/developing-an-open-standard-for-agentic-commerce",
     "claim": "Jeff Weinstein and Steve Kaliski, Stripe, *Developing an open standard for agentic commerce*, 2025-09-29",
     "date": "2025-09-29",
     "quote": "codeveloped by Stripe and OpenAI / Developing an open standard for agentic commerce September 29, 2025 / September 29, 2025 / Jeff Weinstein / Steve Kaliski / ACP is open source, Apache 2.0 licensed, and community-designed.",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://github.com/agentic-commerce-protocol/agentic-commerce-protocol/blob/main/docs/governance.md",
     "claim": "OpenAI and Stripe, *ACP governance*, checked 2026-10-28",
     "date": null,
     "quote": "The TSC has up to 7 seats. / The TSC has up to 7 seats. Each seat is held by one organization, including OpenAI and Stripe. / TSC seats are appointed by the Founding Maintainers (OpenAI and Stripe) / the Founding Maintainers (OpenAI and Stripe) reserve a limited veto authority over TSC decisions. / the Founding Maintainers' veto authority may be exercised as a last resort. / The veto can only be used to block a change, never to override the TSC and force one through. / | 1 | OpenAI | aravindrao-openai | / | 2 | Stripe | prasad-stripe | / | 3 | Meta | lhwa |",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://github.com/agentic-commerce-protocol/agentic-commerce-protocol/blob/main/rfcs/rfc.discovery.md",
     "claim": "OpenAI and Stripe, *RFC: ACP discovery document*, Status Proposal; version unreleased; checked 2026-10-28",
     "date": null,
     "quote": "This RFC introduces a well-known discovery document (/.well-known/acp.json) for the Agentic Commerce Protocol (ACP). / Status: Proposal / Version: unreleased / without requiring authentication. / The document allows agents to determine whether a seller supports ACP, which protocol version is available, what transports are offered, and what capabilities the seller provides, all before creating a checkout session and without requiring authentication. / /.well-known/acp.json",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://github.com/agentic-commerce-protocol/agentic-commerce-protocol/blob/main/changelog/2026-04-17.md",
     "claim": "OpenAI and Stripe, *Changelog 2026-04-17*, 2026-04-17; checked 2026-10-28",
     "date": null,
     "quote": "API Version: 2026-04-17 / Previous version 2026-01-30 deprecated / Added -- pre-checkout cart management for incremental basket building. / transports field advertises available transport bindings (rest, mcp) / an unreleased Feed API surface / Added -- discovery document at /.well-known/acp.json for pre-session capability checks. / Header value is t=<unix_seconds>,v1=<64_hex> / Signed payload is timestamp + \".\" + raw_body; HMAC-SHA256 with shared secret. / Recommended tolerance 300 seconds. / Specifies the Merchant-Signature header format for agentic checkout webhooks and adds replay protection. / POST /feeds for merchants to create feed metadata on an Agent-hosted feed service / This RFC defines a standardized REST API contract for delegated consumer authentication. / Automatically includes newly added schemas like schema.discount.json and schema.extension.json / OrderConfirmation: Added optional order_notes to echo order notes on confirmation. / This release promotes the accumulated unreleased ACP changes since 2026-01-30. / POST /carts -- Create a new cart with line items and optional buyer information. / GET /carts/{id} -- Retrieve the current state of a cart. / PUT /carts/{id} -- Update a cart (full replacement of line items). / POST /carts/{id}/cancel -- Cancel a cart and return its final state. / Carts have no status lifecycle - they either exist or return 404. / Carts have no payment data - payment is a checkout concern. / Totals on carts are estimates (e.g., tax may be omitted if address is unknown). / \"carts\" added to the capabilities.services enum in the discovery document (/.well-known/acp.json). / PATCH /feeds/{id}/products for merchants to partially upsert products by Product.id into the Agent-hosted feed / The Feed API is a push model: merchants push product catalog metadata and product records to Agents, rather than Agents pulling catalog data from merchant-hosted endpoints. / This RFC defines a standardized REST API contract for delegated consumer authentication. It enables agents to execute 3DS2 browser-based authentication directly with merchant specified authentication providers. / Established a session-based authentication lifecycle (Create → Authenticate → Retrieve) to manage 3DS2 states across asynchronous browser actions. / Added support for asynchronous notifications, including Fingerprint completion, Challenge results, and an optional RReq webhook to prevent browser-to-backend race conditions. / Cart-to-checkout conversion (via cart_id) and extension support (e.g., discounts) are deferred to follow-up SEPs. / Added optional order_notes (string, maxLength 5000) to CheckoutSessionCreateRequest, CheckoutSessionUpdateRequest, and CheckoutSessionCompleteRequest for delivery instructions, gift messages, and customer comments. / Added optional client_reference_id: reference provided by the client (agent/platform) when completing checkout; the merchant stores it on the order and returns it so the platform can reconcile its transaction / The Feed API is a push model: merchants push product catalog metadata and product records to Agents / pre-checkout cart management for incremental basket building",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://github.com/agentic-commerce-protocol/agentic-commerce-protocol/blob/main/rfcs/rfc.product_feeds.md",
     "claim": "OpenAI and Stripe, *RFC: Product Feeds*, Status Proposal; version unreleased; checked 2026-10-28",
     "date": null,
     "quote": "Status: Proposal / Version: unreleased",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://github.com/agentic-commerce-protocol/agentic-commerce-protocol",
     "claim": "OpenAI and Stripe, *agentic-commerce-protocol repository*, created 2025-09-29; checked 2026-10-28",
     "date": null,
     "quote": "\"created_at\": \"2025-09-29T04:09:29Z\" / The specification is currently maintained by OpenAI and Stripe. / The Agentic Commerce Protocol (ACP) is an interaction model and open standard for connecting buyers, their AI agents, and businesses to complete purchases seamlessly. / \"spdx_id\": \"Apache-2.0\"",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://github.com/agentic-commerce-protocol/agentic-commerce-protocol/commits/HEAD/docs/governance.md",
     "claim": "GitHub API, *Commit history of docs/governance.md*, checked 2026-10-28",
     "date": null,
     "quote": "\"date\": \"2025-12-02T00:44:03Z\" / Add Governance, Principles & process docs (#43) / \"date\": \"2026-03-10T17:28:47Z\" / ADMIN: Revised governance model (#173) / \"date\": \"2026-04-24T16:44:27Z\" / ADMIN: Add Meta as TSC member (#236)",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://github.com/agentic-commerce-protocol/agentic-commerce-protocol/blob/main/MAINTAINERS.md",
     "claim": "OpenAI and Stripe, *MAINTAINERS.md*, checked 2026-10-28",
     "date": null,
     "quote": "OpenAI / Stripe / Meta",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://web.archive.org/web/20261012013103/https://openai.com/index/powering-product-discovery-in-chatgpt/",
     "claim": "OpenAI, *Powering Product Discovery in ChatGPT*, 2026-03-24 (Wayback snapshot 2026-10-12)",
     "date": null,
     "quote": "March 24, 2026 / allowing merchants to use their own checkout experiences / focus our efforts on product discovery / We’ve found that the initial version of Instant Checkout did not offer the level of flexibility that we aspire to provide, so we’re allowing merchants to use their own checkout experiences while we focus our efforts on product discovery. / Walmart is introducing an in-ChatGPT app experience that takes users from discovery in ChatGPT into a tailored Walmart environment that supports account linking, loyalty and Walmart payments. / Target, Sephora, Nordstrom, Lowe's, Best Buy, The Home Depot, and Wayfair have integrated into ACP for discovery. / Through ACP, merchants share product feeds and promotions",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://developers.openai.com/commerce",
     "claim": "OpenAI, *Agentic Commerce Protocol*, checked 2026-11-11",
     "date": null,
     "quote": "Agentic Commerce Protocol (ACP) is an open standard that serves as the connective layer between merchants and ChatGPT users. It enables ChatGPT to ingest structured catalog data, understand merchant inventory, and surface relevant products in context. / Agentic Commerce Protocol (ACP) is an open standard that serves as the connective layer between merchants and ChatGPT users.",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://github.com/agentic-commerce-protocol/agentic-commerce-protocol/blob/main/changelog/2025-09-29.md",
     "claim": "OpenAI and Stripe, *Changelog 2025-09-29*, 2025-09-29; checked 2026-10-28",
     "date": null,
     "quote": "Initial release of the Agentic Commerce Protocol specification.",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://www.agenticcommerce.dev/",
     "claim": "Agentic Commerce Protocol, *Agentic Commerce Protocol*, checked 2026-10-29",
     "date": null,
     "quote": "Publish your checkout configuration with a traditional API or MCP. / ACP is open source and community-designed under the Apache 2.0 license. / As transactions move from websites to AI workflows, the internet needs a new set of standards for open and secure commerce. / Let your users discover and transact directly with businesses in your application, without being the merchant of record. / while using your existing commerce infrastructure. / Create and control agent-facing endpoints that integrate with your existing commerce backend and payment processor. / Stripe is the first compatible PSP with its Shared Payment Token.",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://docs.stripe.com/agentic-commerce/concepts/shared-payment-tokens",
     "claim": "Stripe, *Shared payment tokens*, checked 2026-10-28",
     "date": null,
     "quote": "Public preview / Shared payment tokens (SPTs) grant sellers scoped access to customers' payment methods for agent-initiated purchases. / After you receive a granted SharedPaymentToken, you can process the payment with Stripe or use the SPT with a third-party processor. / payment_method_data[shared_payment_granted_token]=spt_123 / usage_limits[currency]=usd / usage_limits[max_amount]=1000 / usage_limits[expires_at]=1798761600 / SPTs are available to agents, customers, and sellers in the US, Canada, and select European countries.",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://www.shopify.com/news/agentic-commerce-momentum",
     "claim": "Shopify, *Millions of merchants can sell in AI chats*, 2026-03-24",
     "date": "2026-03-24",
     "quote": "Crucially, merchants remain the merchant of record, retaining ownership of customer relationships and data. / March 24, 2026 / complete purchases via an in-app browser. / On desktop, ChatGPT links out directly to the merchant's store in a separate browser tab. / merchants remain the merchant of record",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://ucp.dev/latest/specification/overview/",
     "claim": "Universal Commerce Protocol, *Overview*, checked 2026-10-30",
     "date": null,
     "quote": "fetch business profile from /.well-known/ucp / URI advertised in UCP-Agent / REST transport (core) … Model Context Protocol (MCP) … Agent-to-Agent Protocol (A2A) … Embedded Protocol (EP)",
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://github.com/x402-foundation/x402/blob/main/specs/x402-specification-v2.md",
     "claim": "x402 Foundation, *X402 Protocol Specification*, Protocol Version 2; checked 2026-10-30",
     "date": null,
     "quote": "X402 Protocol Specification / Protocol Version: 2 / base64-encoded PAYMENT-REQUIRED response header / PAYMENT-SIGNATURE header is required / Facilitator interface: standard APIs for payment verification and settlement",
     "ref": 25
    },
    {
     "label": "[26]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28",
     "claim": "Model Context Protocol, *Specification*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "The protocol uses JSON-RPC 2.0 messages to establish communication between / prompts … resources … tools",
     "ref": 26
    },
    {
     "label": "[27]",
     "url": "https://developer.visa.com/docs/trusted-agent-protocol/trusted-agent-protocol-specifications",
     "claim": "Visa, *Trusted Agent Protocol specifications*, checked 2026-10-30",
     "date": null,
     "quote": "HTTP message signatures defined by RCF 9421 / This proves the agent's participation in the payment scheme specific program.",
     "ref": 27
    },
    {
     "label": "[28]",
     "url": "https://web.archive.org/web/20251220210109/https://www.etsy.com/news/meeting-buyers-where-they-are-etsy-partners-with-openai-to-enable-ai-powered-shopping",
     "claim": "Rafe Colburn, Etsy, *Meeting Buyers Where They Are: Etsy partners with OpenAI to enable AI-powered shopping*, 2025-09-29 (Wayback snapshot 2025-12-20)",
     "date": null,
     "quote": "Sep 29, 2025 / Starting today, ChatGPT users in the U.S. can discover, browse, and purchase items on Etsy directly through ChatGPT.",
     "ref": 28
    },
    {
     "label": "[29]",
     "url": "https://chatgpt.com/merchants/",
     "claim": "OpenAI, *ChatGPT merchants*, checked 2026-10-29",
     "date": null,
     "quote": "If you sell through Shopify or Etsy, your catalog is already integrated / purchases are completed on merchant-owned websites or apps.",
     "ref": 29
    },
    {
     "label": "[30]",
     "url": "https://www.shopify.com/news/shopify-open-ai-commerce",
     "claim": "Shopify, *Shopify and OpenAI bring commerce to ChatGPT*, 2025-09-29",
     "date": "2025-09-29",
     "quote": "September 29, 2025 / Shopify merchants will be able to sell directly through ChatGPT conversations",
     "ref": 30
    },
    {
     "label": "[31]",
     "url": "https://web.archive.org/web/20260302064248/https://help.openai.com/en/articles/6825453-chatgpt-release-notes/",
     "claim": "OpenAI Help Center, *ChatGPT release notes*, entry 2025-11-20; Wayback snapshot 2026-03-02",
     "date": null,
     "quote": "November 20, 2025 / Instant Checkout now rolling out to Shopify merchants / You can now find and buy from Shopify merchants starting with Spanx, Skims, and Glossier / You can now find and buy from Shopify merchants starting with Spanx, Skims, and Glossier through Instant Checkout in ChatGPT.",
     "ref": 31
    },
    {
     "label": "[32]",
     "url": "https://corporate.walmart.com/news/2025/10/14/walmart-partners-with-openai-to-create-ai-first-shopping-experiences",
     "claim": "Walmart, *Walmart Partners with OpenAI to Create AI-First Shopping Experiences*, 2025-10-14",
     "date": "2025-10-14",
     "quote": "Oct. 14, 2025 / allowing customers and members to soon shop Walmart through ChatGPT using Instant Checkout.",
     "ref": 32
    },
    {
     "label": "[33]",
     "url": "https://www.salesforce.com/news/press-releases/2025/10/14/stripe-openai-agentic-commerce-protocol-announcement/?bc=OTH",
     "claim": "Salesforce, *Salesforce Announces Support for Agentic Commerce Protocol with Stripe*, 2025-10-14",
     "date": "2025-10-14",
     "quote": "October 14, 2025 / today announced a collaboration with Stripe and OpenAI to build an Instant Checkout integration guided by the new Agentic Commerce Protocol (ACP).",
     "ref": 33
    },
    {
     "label": "[34]",
     "url": "https://commercetools.com/press-releases/commercetools-partners-with-stripe-to-launch-acp",
     "claim": "commercetools, *commercetools partners with Stripe in its launch of the ACP*, 2025-09-30",
     "date": "2025-09-30",
     "quote": "September 30, 2025 / joined Stripe and OpenAI as a launch partner of the Agentic Commerce Protocol (ACP).",
     "ref": 34
    },
    {
     "label": "[35]",
     "url": "https://docs.adyen.com/online-payments/agentic-commerce/agent-platform/agentic-payments-acp",
     "claim": "Adyen, *Agentic Payments integration with ACP checkout flow*, checked 2026-10-29",
     "date": null,
     "quote": "Learn to delegate payments to Adyen from your agent platform in the ACP checkout flow. / The merchant uses the token to process the payment with Adyen.",
     "ref": 35
    },
    {
     "label": "[36]",
     "url": "https://github.com/agentic-commerce-protocol/agentic-commerce-protocol/blob/main/changelog/2026-01-16.md",
     "claim": "OpenAI and Stripe, *Changelog 2026-01-16*, 2026-01-16; checked 2026-10-28",
     "date": null,
     "quote": "Added adyen to the provider enum for both PaymentProvider and AuthenticationProvider",
     "ref": 36
    },
    {
     "label": "[37]",
     "url": "https://developer.paypal.com/agent-ready/agentic-commerce-protocol",
     "claim": "PayPal Developer, *Agentic Commerce Protocol integration*, last updated 2026-10-29",
     "date": null,
     "quote": "Last updated: October 29, 2026 / Use this guide to build a custom ChatGPT app that accepts payments using the Agentic Commerce Protocol (ACP) and the ChatGPT Apps SDK. / configuring Braintree as your payment provider, processing delegated payment tokens",
     "ref": 37
    },
    {
     "label": "[38]",
     "url": "https://www.checkout.com/newsroom/checkout-adopts-acp-backed-by-openai-to-power-agentic-commerce-for-enterprise-merchants",
     "claim": "Checkout.com, *Checkout adopts ACP, backed by OpenAI, to power agentic commerce for enterprise merchants*, 2025-11-25",
     "date": "2025-11-25",
     "quote": "November 25, 2025 / today announced its support for the Agentic Commerce Protocol (ACP)",
     "ref": 38
    }
   ],
   "form": "endpoint",
   "governance": "A Technical Steering Committee (TSC) of up to 7 seats, one per organization, appointed by the Founding Maintainers, OpenAI and Stripe, who keep a veto \"as a last resort\". Seats held on 2026-10-28: OpenAI, Stripe and Meta; the commit adding Meta is dated 2026-04-24. The governance document was first added on 2025-12-02 and replaced by a revised model on 2026-03-10. Apache-2.0 licence; contributors must sign a CLA",
   "group": "Protocols called ACP",
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against agentic-commerce-protocol GitHub repo (README, docs/governance.md, MAINTAINERS.md, spec/2026-04-17), developers.openai.com/commerce, docs.stripe.com/agentic-commerce"
    },
    {
     "date": "2026-09-06",
     "note": "collisions updated to add Agent Connect Protocol (Cisco/AGNTCY), verified against github.com/agntcy/acp-spec, spec.acp.agntcy.org"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "agentic-commerce-protocol",
   "implementation": "multi-implementation",
   "last_verified": "2026-11-11",
   "name": "Agentic Commerce Protocol",
   "native_status": "Beta. The checkout and delegate-payment RFCs are marked Draft, the product-feeds and discovery RFCs Proposal. On 2026-03-24 OpenAI let merchants use their own checkouts in ChatGPT and shifted its ACP use towards product discovery. OpenAI's commerce documentation describes ACP as an open standard that serves as the connective layer between merchants and ChatGPT users, enabling ChatGPT to ingest structured catalog data, understand merchant inventory, and surface relevant products in context.",
   "origin": {
    "org": "OpenAI and Stripe",
    "date": "2025-09-29"
   },
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "living",
   "probe": {
    "method": "POST",
    "on_absent": "Absence proves nothing generalizable: ACP endpoints and auth are negotiated per integration and not advertised at a fixed public path, so a failed probe only shows this origin/path pair is not configured, not that ACP is unsupported.",
    "parse": "Response includes an API-Version response/negotiation and a CheckoutSession object per the 2026-04-17 OpenAPI schema",
    "path": "{origin}/checkout_sessions"
   },
   "question": "How do a buyer's agent and a merchant complete a deterministic, programmatic checkout without the agent becoming the merchant of record?",
   "scope": "commerce",
   "spec_url": "https://github.com/agentic-commerce-protocol/agentic-commerce-protocol",
   "step": "pay",
   "summary_md": "**Agentic Commerce Protocol** (`ACP`) is an open standard codeveloped by OpenAI and Stripe (announced September 29, 2025) for connecting buyers, AI agents, and businesses to complete purchases on the merchant's existing commerce stack. OpenAI and Stripe maintain the beta specification alongside a Technical Steering Committee of up to 7 seats. The buyer's agent drives five merchant REST operations on `checkout_sessions` (create `POST /checkout_sessions`, update `POST /checkout_sessions/{checkout_session_id}`, retrieve `GET /checkout_sessions/{checkout_session_id}`, complete `POST /checkout_sessions/{id}/complete`, and cancel `POST /checkout_sessions/{checkout_session_id}/cancel`, abbreviated `{id}` in RFC summaries) with a mandatory `Idempotency-Key` header on every POST. Delegated payment uses `POST /agentic_commerce/delegate_payment` to issue a scoped vault token, and agents read `/.well-known/acp.json` before creating a session. Dated snapshot `2026-04-17` (deprecating `2026-01-30`) ships normative OpenAPI and JSON Schema artifacts in `spec/2026-04-17/` for pre-checkout cart management, feed, order confirmation, delegated authentication, discovery (`transports` advertising `rest` and `mcp`), and MCP, whereas the prose RFC Markdown files `rfcs/rfc.product_feeds.md` and `rfcs/rfc.discovery.md` on `main` still carry `Status: Proposal` (`Version: unreleased`).",
   "track": "vendor-consortium",
   "version": {
    "label": "2026-04-17",
    "date": "2026-04-17"
   },
   "watch": [
    {
     "type": "github",
     "repo": "agentic-commerce-protocol/agentic-commerce-protocol",
     "mode": "tag"
    }
   ],
   "use_cases": [
    "agent-checkout",
    "accept-agent-payments"
   ],
   "audience": [
    "platform",
    "agent-builder"
   ],
   "pairs_with": [
    "ucp",
    "ap2",
    "x402",
    "mcp",
    "tap"
   ],
   "prerequisites": [],
   "hatnote_md": "This page is about the Agentic Commerce Protocol (ACP), the open checkout protocol that OpenAI and Stripe announced on 2025-09-29 with Instant Checkout in ChatGPT. It is not the Agent Communication Protocol (ACP) that IBM Research launched for its BeeAI Platform in March 2025 and that an LF AI & Data post of 2025-08-29 says is officially merging with A2A under the Linux Foundation (see [Agent Communication Protocol](/protocols/agent-communication-protocol/) and [Agent2Agent Protocol (A2A)](/protocols/a2a/)). It is not the Agent Client Protocol (ACP) that Zed created, in a post dated 2025-08-27, so third-party agents can be used inside the editor (see [Agent Client Protocol](/protocols/agent-client-protocol/)). It is not AGNTCY's Agent Connect Protocol (ACP), which defines a standard interface to invoke and configure remote agents over an API (see [Agent Connect Protocol](/protocols/agent-connect-protocol/)), nor ERC-8183, created 2026-02-25, whose specification also calls itself the Agentic Commerce Protocol and describes a job with an escrowed budget. For a user-signed Checkout Mandate and Payment Mandate, see [Agent Payments Protocol (AP2)](/protocols/ap2/).",
   "tier": "flagship",
   "lifecycle_status": "active",
   "wire_archetype": "payments_onchain",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-11",
   "v05_hatnote_html_md": "This page is about the Agentic Commerce Protocol (ACP), the open checkout protocol that OpenAI and Stripe announced on 2025-09-29 with Instant Checkout in ChatGPT. It is not the Agent Communication Protocol (ACP) that IBM Research launched for its BeeAI Platform in March 2025 and that an LF AI & Data post of 2025-08-29 says is officially merging with A2A under the Linux Foundation (see [Agent Communication Protocol](/protocols/agent-communication-protocol/) and [Agent2Agent Protocol (A2A)](/protocols/a2a/)). It is not the Agent Client Protocol (ACP) that Zed created, in a post dated 2025-08-27, so third-party agents can be used inside the editor (see [Agent Client Protocol](/protocols/agent-client-protocol/)). It is not AGNTCY's Agent Connect Protocol (ACP), which defines a standard interface to invoke and configure remote agents over an API (see [Agent Connect Protocol](/protocols/agent-connect-protocol/)), nor ERC-8183, created 2026-02-25, whose specification also calls itself the Agentic Commerce Protocol and describes a job with an escrowed budget. For a user-signed Checkout Mandate and Payment Mandate, see [Agent Payments Protocol (AP2)](/protocols/ap2/). [1][2][3][4][5][6]",
   "v05_elevator_pitch_md": "ACP (Agentic Commerce Protocol) lets AI assistants purchase goods directly from online retailers on a buyer's behalf while keeping the seller as the merchant of record. Instead of forcing AI platforms to act as marketplace resellers or scrape web checkout forms, businesses expose standardized `POST /checkout_sessions` REST endpoints and accept scoped vault tokens issued via `POST /agentic_commerce/delegate_payment` on their existing payment rails. [7][8][9]",
   "v05_lead_md": "**Agentic Commerce Protocol** (`ACP`) is an open standard codeveloped by OpenAI and Stripe (announced September 29, 2025) for connecting buyers, AI agents, and businesses to complete purchases on the merchant's existing commerce stack. OpenAI and Stripe maintain the beta specification alongside a Technical Steering Committee of up to 7 seats. [7][8][10][11] The buyer's agent drives five merchant REST operations on `checkout_sessions` (create `POST /checkout_sessions`, update `POST /checkout_sessions/{checkout_session_id}`, retrieve `GET /checkout_sessions/{checkout_session_id}`, complete `POST /checkout_sessions/{id}/complete`, and cancel `POST /checkout_sessions/{checkout_session_id}/cancel`, abbreviated `{id}` in RFC summaries) with a mandatory `Idempotency-Key` header on every POST. Delegated payment uses `POST /agentic_commerce/delegate_payment` to issue a scoped vault token, and agents read `/.well-known/acp.json` before creating a session. [8][9][12] Dated snapshot `2026-04-17` (deprecating `2026-01-30`) ships normative OpenAPI and JSON Schema artifacts in `spec/2026-04-17/` for pre-checkout cart management, feed, order confirmation, delegated authentication, discovery (`transports` advertising `rest` and `mcp`), and MCP, whereas the prose RFC Markdown files `rfcs/rfc.product_feeds.md` and `rfcs/rfc.discovery.md` on `main` still carry `Status: Proposal` (`Version: unreleased`). [7][12][13][14]",
   "v05_identity_sentence_md": "**Agentic Commerce Protocol** (`ACP`) is an open standard codeveloped by OpenAI and Stripe (announced September 29, 2025) for connecting buyers, AI agents, and businesses to complete purchases on the merchant's existing commerce stack. OpenAI and Stripe maintain the beta specification alongside a Technical Steering Committee of up to 7 seats. [7][8][10][11]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Pay](/category/pay/) (`pay`)"
    },
    {
     "label": "Form",
     "value_md": "Endpoint (`endpoint`)"
    },
    {
     "label": "Originated by",
     "value_md": "OpenAI and Stripe, announced September 29, 2025 (repository created September 29, 2025; codeveloped by Stripe and OpenAI with Jeff Weinstein and Steve Kaliski at Stripe). [1][10][15]"
    },
    {
     "label": "Governed by",
     "value_md": "Up to 7 TSC seats (OpenAI `aravindrao-openai`, Stripe `prasad-stripe`, Meta `lhwa`), appointed by founding maintainers with a last-resort veto that can only be used to block a change, never to override the TSC and force one through. CLA required. [7][11][16][17]"
    },
    {
     "label": "Track",
     "value_md": "Vendor consortium (`vendor-consortium`). OpenAI and Stripe maintain the specification and appoint the Technical Steering Committee. [7][11]"
    },
    {
     "label": "Status",
     "value_md": "Beta spec: checkout and delegate-payment RFCs are Draft; feeds and discovery RFCs are unreleased Proposals. On March 24, 2026 OpenAI focused its ChatGPT shopping efforts on product discovery and merchant checkout experiences. OpenAI's commerce docs call ACP an open standard that serves as the connective layer between merchants and ChatGPT users, enabling ChatGPT to ingest structured catalog data, understand merchant inventory, and surface relevant products in context. [7][8][9][12][14][18][19]"
    },
    {
     "label": "Version",
     "value_md": "Latest stable snapshot `2026-04-17` (deprecates `2026-01-30`); checkout RFC Markdown on `main` remains titled Version `2026-01-16` (Delegate Payment RFC `2025-09-29`). [7][8][9][13][20]"
    },
    {
     "label": "Headers",
     "value_md": "`Authorization: Bearer` (required), `Content-Type: application/json` (required with body), `Idempotency-Key` (required on all `POST`), `Request-Id` (recommended), and `API-Version` (required `YYYY-MM-DD` release snapshot selector—latest stable `2026-04-17`, illustrated as `2026-01-16` in `rfcs/rfc.agentic_checkout.md`). [7][8][13]"
    },
    {
     "label": "Message format",
     "value_md": "Merchant REST checkout. Requests that carry a body use `Content-Type: application/json`. Session operations are create, update, retrieve, complete, and cancel. [8]"
    },
    {
     "label": "Transports",
     "value_md": "Changelog 2026-04-17: discovery `transports` advertises `rest` and `mcp`. Checkout configuration can be published via API or MCP. [13][21]"
    },
    {
     "label": "Token format",
     "value_md": "Delegate Payment issues a delegated vault token under an allowance. Stripe shared payment tokens (public preview) scope agent-initiated purchases. [9][22]"
    },
    {
     "label": "Specification",
     "value_md": "[Agentic Commerce Protocol repository](https://github.com/agentic-commerce-protocol/agentic-commerce-protocol), including the [Agentic Checkout RFC](https://github.com/agentic-commerce-protocol/agentic-commerce-protocol/blob/main/rfcs/rfc.agentic_checkout.md) and the [Delegate Payment RFC](https://github.com/agentic-commerce-protocol/agentic-commerce-protocol/blob/main/rfcs/rfc.delegate_payment.md). OpenAI's [commerce documentation](https://developers.openai.com/commerce) calls ACP an open standard connective layer between merchants and ChatGPT users. [8][9][15][19]"
    },
    {
     "label": "Found at",
     "value_md": "`GET /.well-known/acp.json` (added in the 2026-04-17 changelog for pre-session capability checks; the discovery RFC is Status Proposal, version unreleased). [12][13]"
    },
    {
     "label": "Licence",
     "value_md": "Apache-2.0 (repository and RFC specifications; contributors must sign a CLA). [7][10][15][21]"
    }
   ],
   "v05_problem_md": "As transactions move from websites to AI workflows, agent checkout has no common standard. An application that lets its users buy from a business would otherwise have to be the merchant of record. A business would otherwise leave its existing commerce infrastructure instead of publishing agent-facing endpoints on its current backend and payment processor. [21] The merchant remains the system of record for orders, payments, taxes, and compliance, and payments stay on merchant rails. A delegated vault token may be used by the merchant's existing PSP only within explicit allowance constraints. Stripe shared payment tokens grant sellers scoped access to customers' payment methods for agent-initiated purchases. [8][9][22] The checkout RFC leaves PSP authorization and capture semantics, returns and exchanges, tax configuration, and fraud modeling out of scope. A merchant accepts the agent payment either by using Stripe's Shared Payment Token API or by adopting the Delegated Payments Spec, without changing its existing payment processor. [1][8]",
   "v05_mechanism_delta_md": "The merchant remains the system of record for orders, payments, taxes, and compliance, and payments stay on merchant rails. A delegated vault token may be used by the merchant's existing PSP only within explicit allowance constraints. Stripe shared payment tokens grant sellers scoped access to customers' payment methods for agent-initiated purchases. [8][9][22]",
   "v05_scope_boundary_md": "The checkout RFC leaves PSP authorization and capture semantics, returns and exchanges, tax configuration, and fraud modeling out of scope. A merchant accepts the agent payment either by using Stripe's Shared Payment Token API or by adopting the Delegated Payments Spec, without changing its existing payment processor. [1][8]",
   "v05_fuzzy_additions": [
    {
     "id": "checkout-session-lifecycle-headers-and-webhook-events",
     "heading": "Checkout session lifecycle, headers, and webhook events",
     "body_md": "Agentic Checkout is the merchant REST session for the checkout session lifecycle and webhook integration, versioned via the required `API-Version` (`YYYY-MM-DD`) header (latest stable snapshot `2026-04-17`; `rfcs/rfc.agentic_checkout.md` on `main` illustrates `API-Version: 2026-01-16`). Every response returns the authoritative cart state. `API-Version` and `Authorization: Bearer` are required on each call, `Idempotency-Key` is required on every POST, and `Signature` (`RECOMMENDED`, where the server `SHOULD` publish acceptable signature algorithms out-of-band and the client `SHOULD` sign requests) covers the canonical JSON with an accompanying `Timestamp` (`RECOMMENDED`). [7][8][13]",
     "bullets": [
      {
       "label": "Create and update",
       "text_md": "`POST /checkout_sessions` creates a session from items and an optional buyer or address and returns 201 Created, with `status`, a `line_items` array whose amount fields (`base_amount`, `discount`, `subtotal`, `tax`, and `total`) are integers, fulfillment options, totals, and messages. `POST /checkout_sessions/{checkout_session_id}` (abbreviated `{id}` in RFC summaries) updates items, address, or fulfillment option and returns 200 OK with the full authoritative cart. [8]"
      },
      {
       "label": "Retrieve, complete, and cancel",
       "text_md": "`GET /checkout_sessions/{checkout_session_id}` (`{id}`) returns the latest authoritative state, or 404 if missing. `POST /checkout_sessions/{checkout_session_id}/complete` (`POST /checkout_sessions/{id}/complete`) finalizes with a payment method, MUST create an order, sets `status` to `completed`, and returns `order` fields `id`, `checkout_session_id`, and `permalink_url`. `POST /checkout_sessions/{checkout_session_id}/cancel` returns 200 when canceled and 405 if already completed or canceled. [8]"
      },
      {
       "label": "Status and headers",
       "text_md": "`status` is `not_ready_for_payment`, `ready_for_payment`, `authentication_required`, `completed`, `canceled`, or `in_progress`. When authentication such as 3-D Secure is required, the server sets `authentication_required` and includes `authentication_metadata` in the session response, while the client must send `authentication_result` on `POST /checkout_sessions/{id}/complete`. Required POST headers are `API-Version` (selecting the dated `YYYY-MM-DD` release snapshot—latest stable `2026-04-17`, shown as `2026-01-16` in `rfc.agentic_checkout.md`) and `Idempotency-Key` (opaque, at most 255 characters). `Signature` and `Timestamp` are recommended. A missing key returns HTTP 400 `idempotency_key_required`. Replay returns the original response, should include `Idempotent-Replayed: true`, and servers must retain idempotency mappings for at least 24 hours. [7][8][13]"
      },
      {
       "label": "Merchant order webhooks",
       "text_md": "The merchant MUST emit `order_create` and `order_update` to the application webhook receiver. Receivers check HMAC `Merchant-Signature`. Version `2026-04-17` sets that header to `t=<unix_seconds>,v1=<64_hex>`, signs timestamp, a period, and the raw body with HMAC-SHA256, and rejects timestamps outside a 300-second window. [8][13]"
      }
     ]
    },
    {
     "id": "delegated-payment-allowance-shared-payment-tokens-and-2026-04-17-extensions",
     "heading": "Delegated payment allowance, Shared Payment Tokens, and 2026-04-17 extensions",
     "body_md": "`POST /agentic_commerce/delegate_payment` issues a delegated vault token the merchant's PSP may use only inside `allowance`. A granted `SharedPaymentToken` is charged on Stripe or sent to a third-party processor. Snapshot `2026-04-17` ships OpenAPI and JSON Schema artifacts under `spec/2026-04-17/` for cart, feed, orders, delegated authentication, discovery, and the extensions schema, while the prose RFC documents for product feeds and discovery on `main` remain marked `Proposal` (`unreleased`). [7][9][12][13][14][22]",
     "bullets": [
      {
       "label": "Allowance constraints",
       "text_md": "`allowance` is required. `reason` MUST be `one_time`. `max_amount` is minor units (20 dollars is 2000). `currency` is lowercase ISO-4217 such as `usd`. `checkout_session_id` and `merchant_id` (at most 256 characters) bind the grant. `expires_at` is RFC 3339, and the token is invalid at or after `allowance.expires_at`. [9]"
      },
      {
       "label": "SharedPaymentToken and vaulting",
       "text_md": "A `SharedPaymentToken` grants the seller scoped access to the customer's payment method for an agent-initiated purchase. The seller processes it on Stripe or with a third-party processor by setting `payment_method_data[shared_payment_granted_token]` on a PaymentIntent. Sandbox limits are `usage_limits[currency]`, `usage_limits[max_amount]`, and `usage_limits[expires_at]`. The vault token keeps settlement on the merchant's rails without changing the existing payment processor. [1][9][22]"
      },
      {
       "label": "Cart, feed, and delegated authentication",
       "text_md": "`2026-04-17` promotes changes since `2026-01-30` into `spec/2026-04-17/` OpenAPI and JSON Schema artifacts covering cart, feed, orders, authentication, discovery, and MCP, even though `rfcs/rfc.product_feeds.md` and `rfcs/rfc.discovery.md` on `main` still carry `Status: Proposal` (`unreleased`). `POST /carts`, `GET /carts/{id}`, `PUT /carts/{id}`, and `POST /carts/{id}/cancel` manage a cart with no status lifecycle, no payment data, and estimated totals. Agents check `carts` on `/.well-known/acp.json`. The push-model Agent-hosted Feed API uses `POST /feeds` and `PATCH /feeds/{id}/products`. Delegate Authentication runs 3DS2 through Create, Authenticate, and Retrieve, plus fingerprint and challenge webhooks. [7][12][13][14]"
      },
      {
       "label": "Extensions, confirmation, security, and merchant liability",
       "text_md": "`2026-01-30` holds extensions, discounts, and payment handlers, and `2026-04-17` still ships `schema.extension.json` beside `schema.discount.json`. `cart_id` checkout conversion and discount extensions are deferred. Confirmation adds `order_notes` on `OrderConfirmation` and `client_reference_id` so the platform can reconcile its transaction with the merchant order. Both checkout and delegated-payment endpoints require `TLS 1.3`, card data handling must follow applicable `PCI DSS` requirements, logs must not contain full `PAN` or `CVC` (with addresses redacted as required by policy), and merchants remain the system and merchant of record for all orders, payments, taxes, compliance, and customer relationships. [7][8][9][13][23]"
      }
     ]
    }
   ],
   "v05_diagram": {
    "title": "Checkout session operations",
    "heading": "Checkout session operations",
    "mermaid": "sequenceDiagram\n    participant Client as Client (ChatGPT)\n    participant Merchant as Merchant server\n    Client->>Merchant: POST /checkout_sessions\n    Merchant-->>Client: 201 Created, authoritative cart\n    opt Update\n        Client->>Merchant: POST /checkout_sessions/{id}\n        Merchant-->>Client: 200 OK, authoritative state\n    end\n    opt Retrieve\n        Client->>Merchant: GET /checkout_sessions/{id}\n        Merchant-->>Client: 200 OK, or 404 if not found\n    end\n    alt Complete\n        Client->>Merchant: POST /checkout_sessions/{id}/complete\n        Merchant-->>Client: 200 OK, status completed, and order\n    else Cancel\n        Client->>Merchant: POST /checkout_sessions/{id}/cancel\n        Merchant-->>Client: 200 OK, or 405 if already completed or canceled\n    end",
    "caption_md": "Merchant server checkout operations: `POST /checkout_sessions`, `POST /checkout_sessions/{id}`, `GET /checkout_sessions/{id}`, `POST /checkout_sessions/{id}/complete`, and `POST /checkout_sessions/{id}/cancel`. [8]"
   },
   "v05_wire_artifact": {
    "title": "POST /agentic_commerce/delegate_payment 201 delegated vault token",
    "heading": "POST /agentic_commerce/delegate_payment 201 delegated vault token",
    "lang": "json",
    "code": "{\n  \"id\": \"vt_01J8Z3WXYZ9ABC\",\n  \"created\": \"2025-09-29T11:00:00Z\",\n  \"metadata\": {\n    \"source\": \"agent_checkout\",\n    \"merchant_id\": \"acme\",\n    \"idempotency_key\": \"idem_abc123\"\n  }\n}",
    "caption_md": "`POST /agentic_commerce/delegate_payment` returns a delegated vault token. The success `id` in this example is `vt_01J8Z3WXYZ9ABC`. [9]"
   },
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "Well-Known URIs (RFC 8615)",
      "spec_or_rfc": "RFC 8615",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "ACP's discovery RFC introduces `/.well-known/acp.json` so an agent can check ACP support, protocol version, transports, and seller capabilities before creating a checkout session, without authentication. [12]"
     },
     {
      "name": "W3C Payment Request API",
      "spec_or_rfc": "Payment Request API",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "ACP checkout RFC defines create, update, retrieve, complete, and cancel on `/checkout_sessions`, paid by a delegated vault token or Stripe shared payment token: the merchant REST counterpart of Payment Request. [8][9][22]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "ucp",
      "target_name": "Universal Commerce Protocol (UCP)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "UCP clients fetch `/.well-known/ucp` and `UCP-Agent` profile, with REST, MCP, A2A, and embedded transports. ACP discovers via `/.well-known/acp.json` and pays with a delegated vault token or Stripe shared payment token. [9][12][22][24]"
     },
     {
      "target_id": "ap2",
      "target_name": "Agent Payments Protocol (AP2)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "AP2 v0.2 defines Checkout and Payment Mandates after a trusted surface obtains informed user consent for an intent before creating a user-signed mandate. ACP keeps the merchant as system of record and pays via a delegated vault token or Stripe SPT. [6][8][9][22]"
     },
     {
      "target_id": "x402",
      "target_name": "x402",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "x402 v2 puts requirements in base64 `PAYMENT-REQUIRED`, requires `PAYMENT-SIGNATURE`, and settles via a facilitator. ACP is the merchant session API (create, update, complete, cancel) paid by a delegated vault token. [8][9][25]"
     },
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "MCP uses JSON-RPC 2.0 among hosts, clients, and servers for prompts, resources, and tools. ACP 2026-04-17 advertises `rest` and `mcp`, a Feed API (prose RFC marked unreleased), and cart; Delegate Payment issues delegated vault tokens. [9][13][14][26]"
     },
     {
      "target_id": "tap",
      "target_name": "Trusted Agent Protocol (TAP)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "TAP signs with HTTP message signatures to prove agent's payment-scheme participation. ACP Delegate Payment issues a delegated vault token; Stripe shared payment tokens grant scoped access for agent-initiated purchases. [9][22][27]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (11 probed or cited examples across 3 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).",
    "side_a": {
     "visible": true,
     "heading": "Merchants & commerce platforms",
     "col4_header": "Checkout surface & merchant rollout",
     "note_md": null,
     "rows": [
      {
       "actor": "Etsy",
       "role": "Marketplace",
       "status": "Supported",
       "status_display": "Supported · as of 2026-03-24",
       "col4_md": "Launched in-ChatGPT Instant Checkout for U.S. Etsy items on 2025-09-29; following OpenAI's 2026-03-24 shift, Etsy catalogs remain integrated while purchases complete on merchant-owned websites or apps.",
       "source_md": "[Etsy News (Sep 29, 2025)](https://web.archive.org/web/20251220210109/https://www.etsy.com/news/meeting-buyers-where-they-are-etsy-partners-with-openai-to-enable-ai-powered-shopping) [28] · [ChatGPT merchants](https://chatgpt.com/merchants/) [29] · [OpenAI (March 24, 2026)](https://web.archive.org/web/20261012013103/https://openai.com/index/powering-product-discovery-in-chatgpt/) [18]"
      },
      {
       "actor": "Shopify",
       "role": "Platform",
       "status": "Supported",
       "status_display": "Supported · as of 2026-03-24",
       "col4_md": "Instant Checkout for Shopify merchants (rolling out from November 20, 2025); on March 24, 2026 OpenAI shifted to merchant checkout experiences while focusing on product discovery, and Shopify states buyers finish in-app on mobile or in a separate browser tab on desktop while merchants stay merchant of record.",
       "source_md": "[Shopify News (September 29, 2025)](https://www.shopify.com/news/shopify-open-ai-commerce) [30] · [ChatGPT release notes (November 20, 2025)](https://web.archive.org/web/20260302064248/https://help.openai.com/en/articles/6825453-chatgpt-release-notes/) [31] · [Shopify News (March 24, 2026)](https://www.shopify.com/news/agentic-commerce-momentum) [23] · [OpenAI (March 24, 2026)](https://web.archive.org/web/20261012013103/https://openai.com/index/powering-product-discovery-in-chatgpt/) [18]"
      },
      {
       "actor": "Walmart",
       "role": "Enterprise retailer",
       "status": "Supported",
       "status_display": "Supported · as of 2026-03-24",
       "col4_md": "Announced ChatGPT Instant Checkout partnership on October 14, 2025; introduced tailored in-ChatGPT app with account linking, loyalty, and Walmart payments on March 24, 2026.",
       "source_md": "[Walmart News (October 14, 2025)](https://corporate.walmart.com/news/2025/10/14/walmart-partners-with-openai-to-create-ai-first-shopping-experiences) [32] · [OpenAI (March 24, 2026)](https://web.archive.org/web/20261012013103/https://openai.com/index/powering-product-discovery-in-chatgpt/) [18]"
      },
      {
       "actor": "Salesforce (Agentforce Commerce)",
       "role": "Commerce platform",
       "status": "Supported",
       "status_display": "Supported · as of 2025-10-14",
       "col4_md": "Collaborated with Stripe and OpenAI to build an Instant Checkout integration guided by ACP (announced October 14, 2025).",
       "source_md": "[Salesforce Press Release (October 14, 2025)](https://www.salesforce.com/news/press-releases/2025/10/14/stripe-openai-agentic-commerce-protocol-announcement/?bc=OTH) [33]"
      },
      {
       "actor": "commercetools",
       "role": "Commerce platform",
       "status": "Supported",
       "status_display": "Supported · as of 2025-09-30",
       "col4_md": "Joined Stripe and OpenAI as an ACP launch partner for enterprise merchants (announced September 30, 2025).",
       "source_md": "[commercetools Press Release (September 30, 2025)](https://commercetools.com/press-releases/commercetools-partners-with-stripe-to-launch-acp) [34]"
      },
      {
       "actor": "Target, Sephora, Nordstrom, Lowe's, Best Buy, The Home Depot, and Wayfair",
       "role": "Merchant cohort",
       "status": "Partial",
       "status_display": "Partial · as of 2026-03-24",
       "col4_md": "Discovery only, not checkout, for Target, Sephora, Nordstrom, Lowe's, Best Buy, The Home Depot, and Wayfair.",
       "source_md": "[OpenAI, Powering Product Discovery in ChatGPT (March 24, 2026)](https://web.archive.org/web/20261012013103/https://openai.com/index/powering-product-discovery-in-chatgpt/) [18]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Buying agents & AI checkout surfaces",
     "col4_header": "Checkout flow & credential orchestration",
     "note_md": null,
     "rows": [
      {
       "actor": "OpenAI (ChatGPT Instant Checkout)",
       "role": "Buying agent / AI surface (Co-author)",
       "status": "Partial",
       "status_display": "Partial · as of 2026-03-24",
       "col4_md": "U.S. Plus, Pro, and Free users: single-item Etsy checkout, then merchant checkout and discovery.",
       "source_md": "[OpenAI, Buy it in ChatGPT (September 29, 2025)](https://web.archive.org/web/20261022061422/https://openai.com/index/buy-it-in-chatgpt/) [1] · [OpenAI, Powering Product Discovery in ChatGPT (March 24, 2026)](https://web.archive.org/web/20261012013103/https://openai.com/index/powering-product-discovery-in-chatgpt/) [18] · [ChatGPT merchants](https://chatgpt.com/merchants/) [29]"
      }
     ]
    },
    "additional_tables": [
     {
      "visible": true,
      "heading": "Payment processors & delegated token rails",
      "col4_header": "Shared Payment Token (SPT) / rail role",
      "note_md": null,
      "rows": [
       {
        "actor": "Stripe",
        "role": "Payment rail (Co-author)",
        "status": "Supported",
        "status_display": "Supported · checked 2026-10-30",
        "col4_md": "Codeveloped ACP; public-preview Shared Payment Tokens in the US, Canada, and select European countries.",
        "source_md": "[Stripe Blog (September 29, 2025)](https://stripe.com/blog/developing-an-open-standard-for-agentic-commerce) [10] · [Stripe shared payment tokens](https://docs.stripe.com/agentic-commerce/concepts/shared-payment-tokens) [22] · [Agentic Commerce Protocol](https://www.agenticcommerce.dev/) [21]"
       },
       {
        "actor": "Adyen",
        "role": "Payment rail",
        "status": "Supported",
        "status_display": "Supported · as of 2026-01-16",
        "col4_md": "ACP checkout delegates the payment token to Adyen (`adyen` provider enum, 2026-01-16).",
        "source_md": "[Adyen ACP checkout docs](https://docs.adyen.com/online-payments/agentic-commerce/agent-platform/agentic-payments-acp) [35] · [ACP changelog 2026-01-16](https://github.com/agentic-commerce-protocol/agentic-commerce-protocol/blob/main/changelog/2026-01-16.md) [36]"
       },
       {
        "actor": "PayPal (Braintree)",
        "role": "Payment rail",
        "status": "Supported",
        "status_display": "Supported · as of 2026-10-29",
        "col4_md": "ChatGPT app accepts ACP payments via Braintree delegated payment tokens (guide updated 2026-10-29).",
        "source_md": "[PayPal Developer guide (last updated October 29, 2026)](https://developer.paypal.com/agent-ready/agentic-commerce-protocol) [37]"
       },
       {
        "actor": "Checkout.com",
        "role": "Payment rail",
        "status": "Supported",
        "status_display": "Supported · as of 2025-11-25",
        "col4_md": "Adopted ACP to power agentic commerce payments for enterprise merchants (announced November 25, 2025).",
        "source_md": "[Checkout.com Newsroom (November 25, 2025)](https://www.checkout.com/newsroom/checkout-adopts-acp-backed-by-openai-to-power-agentic-commerce-for-enterprise-merchants) [38]"
       }
      ]
     }
    ],
    "censuses": [
     {
      "label": "OpenAI (September 29, 2025) & ChatGPT release notes (November 20, 2025)",
      "as_of": "2025-11-20",
      "value_md": "Instant Checkout launched on September 29, 2025 for U.S. ChatGPT Plus, Pro, and Free users purchasing from U.S. Etsy sellers, with over a million Shopify merchants (including Glossier, SKIMS, Spanx, and Vuori) announced at launch and rolling out in ChatGPT starting November 20, 2025. [1][31]"
     },
     {
      "label": "Stripe SPT documentation & enterprise partner announcements (Sept–Nov 2025)",
      "as_of": "2025-11-25",
      "value_md": "Stripe launched public-preview Shared Payment Tokens (SPTs) across the US, Canada, and select European countries alongside Day-1 and Q4 2025 platform integrations across Etsy, Shopify, commercetools, Salesforce Agentforce Commerce, Walmart, and Checkout.com. [21][22][33][34][38]"
     },
     {
      "label": "OpenAI & Shopify announcements (March 24, 2026)",
      "as_of": "2026-03-24",
      "value_md": "On March 24, 2026, OpenAI shifted ChatGPT physical-goods shopping from standalone in-chat Instant Checkout to merchant-owned checkout experiences (in-app browser on mobile and direct store tab on desktop for Shopify and Etsy catalogs) while expanding ACP catalog discovery to Target, Sephora, Nordstrom, Lowe's, Best Buy, The Home Depot, and Wayfair. [18][23]"
     }
    ],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "mpp",
     "target_name": "Machine Payments Protocol (MPP)",
     "relation_label": "Complements",
     "delta": "ACP, maintained by OpenAI and Stripe, connects buyers, agents, and businesses for checkout; MPP pays for one HTTP resource.",
     "item_md": "**[Machine Payments Protocol (MPP)](/protocols/mpp/)** (Complements) — ACP, maintained by OpenAI and Stripe, connects buyers, agents, and businesses for checkout; MPP pays for one HTTP resource."
    },
    {
     "target_id": "agtp",
     "target_name": "Agent Transfer Protocol",
     "relation_label": "Complements",
     "delta": "AGTP draft-10 defines governance and authority headers alongside its eight Tier 1 Core Methods (such as BOOK and DELEGATE), while the Agentic Commerce Protocol is the separate OpenAI and Stripe checkout protocol.",
     "item_md": "**[Agent Transfer Protocol](/protocols/agtp/)** (Complements) — AGTP draft-10 defines governance and authority headers alongside its eight Tier 1 Core Methods (such as BOOK and DELEGATE), while the Agentic Commerce Protocol is the separate OpenAI and Stripe checkout protocol."
    },
    {
     "target_id": "vi",
     "target_name": "Verifiable Intent",
     "relation_label": "Complements",
     "delta": "The Agentic Commerce Protocol moves the order with the merchant, and Verifiable Intent supplies the SD-JWT (RFC 9901) L1, L2, and L3 mandate chain for that order.",
     "item_md": "**[Verifiable Intent](/protocols/vi/)** (Complements) — The Agentic Commerce Protocol moves the order with the merchant, and Verifiable Intent supplies the SD-JWT (RFC 9901) L1, L2, and L3 mandate chain for that order."
    },
    {
     "target_id": "agent-attribution-protocol",
     "target_name": "Agent Attribution Protocol",
     "relation_label": "Complements",
     "delta": "The Agentic Commerce Protocol completes the merchant order, while AAP uses checkout() to route the user to checkout and matches merchant conversions reported via the conversions API back to the Rako-signed AAP Code from recommend().",
     "item_md": "**[Agent Attribution Protocol](/protocols/agent-attribution-protocol/)** (Complements) — The Agentic Commerce Protocol completes the merchant order, while AAP uses checkout() to route the user to checkout and matches merchant conversions reported via the conversions API back to the Rako-signed AAP Code from recommend()."
    },
    {
     "item_md": "**[Pay protocols](/category/pay/)** — Category index for `pay` standards."
    }
   ],
   "v05_compiled_md": "---\nid: agentic-commerce-protocol\ntitle: \"Agentic Commerce Protocol\"\ntier: flagship\nlifecycle_status: active\ncategory: pay\nform: endpoint\nwire_archetype: payments_onchain\nspec_url: https://github.com/agentic-commerce-protocol/agentic-commerce-protocol\nlast_checked: 2026-11-11\n---\n\n# Agentic Commerce Protocol\n\n**Category:** [Pay](/category/pay/) (`pay`) · **Form:** Endpoint (`endpoint`) · **Last checked:** 2026-11-11\n\n> *This page is about the Agentic Commerce Protocol (ACP), the open checkout protocol that OpenAI and Stripe announced on 2025-09-29 with Instant Checkout in ChatGPT. It is not the Agent Communication Protocol (ACP) that IBM Research launched for its BeeAI Platform in March 2025 and that an LF AI & Data post of 2025-08-29 says is officially merging with A2A under the Linux Foundation (see [Agent Communication Protocol](/protocols/agent-communication-protocol/) and [Agent2Agent Protocol (A2A)](/protocols/a2a/)). It is not the Agent Client Protocol (ACP) that Zed created, in a post dated 2025-08-27, so third-party agents can be used inside the editor (see [Agent Client Protocol](/protocols/agent-client-protocol/)). It is not AGNTCY's Agent Connect Protocol (ACP), which defines a standard interface to invoke and configure remote agents over an API (see [Agent Connect Protocol](/protocols/agent-connect-protocol/)), nor ERC-8183, created 2026-02-25, whose specification also calls itself the Agentic Commerce Protocol and describes a job with an escrowed budget. For a user-signed Checkout Mandate and Payment Mandate, see [Agent Payments Protocol (AP2)](/protocols/ap2/). [1][2][3][4][5][6]*\n\n> **In brief:** ACP (Agentic Commerce Protocol) lets AI assistants purchase goods directly from online retailers on a buyer's behalf while keeping the seller as the merchant of record. Instead of forcing AI platforms to act as marketplace resellers or scrape web checkout forms, businesses expose standardized `POST /checkout_sessions` REST endpoints and accept scoped vault tokens issued via `POST /agentic_commerce/delegate_payment` on their existing payment rails. [7][8][9]\n\n**Agentic Commerce Protocol** (`ACP`) is an open standard codeveloped by OpenAI and Stripe (announced September 29, 2025) for connecting buyers, AI agents, and businesses to complete purchases on the merchant's existing commerce stack. OpenAI and Stripe maintain the beta specification alongside a Technical Steering Committee of up to 7 seats. [7][8][10][11] The buyer's agent drives five merchant REST operations on `checkout_sessions` (create `POST /checkout_sessions`, update `POST /checkout_sessions/{checkout_session_id}`, retrieve `GET /checkout_sessions/{checkout_session_id}`, complete `POST /checkout_sessions/{id}/complete`, and cancel `POST /checkout_sessions/{checkout_session_id}/cancel`, abbreviated `{id}` in RFC summaries) with a mandatory `Idempotency-Key` header on every POST. Delegated payment uses `POST /agentic_commerce/delegate_payment` to issue a scoped vault token, and agents read `/.well-known/acp.json` before creating a session. [8][9][12] Dated snapshot `2026-04-17` (deprecating `2026-01-30`) ships normative OpenAPI and JSON Schema artifacts in `spec/2026-04-17/` for pre-checkout cart management, feed, order confirmation, delegated authentication, discovery (`transports` advertising `rest` and `mcp`), and MCP, whereas the prose RFC Markdown files `rfcs/rfc.product_feeds.md` and `rfcs/rfc.discovery.md` on `main` still carry `Status: Proposal` (`Version: unreleased`). [7][12][13][14]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Pay](/category/pay/) (`pay`) |\n| **Form** | Endpoint (`endpoint`) |\n| **Originated by** | OpenAI and Stripe, announced September 29, 2025 (repository created September 29, 2025; codeveloped by Stripe and OpenAI with Jeff Weinstein and Steve Kaliski at Stripe). [1][10][15] |\n| **Governed by** | Up to 7 TSC seats (OpenAI `aravindrao-openai`, Stripe `prasad-stripe`, Meta `lhwa`), appointed by founding maintainers with a last-resort veto that can only be used to block a change, never to override the TSC and force one through. CLA required. [7][11][16][17] |\n| **Track** | Vendor consortium (`vendor-consortium`). OpenAI and Stripe maintain the specification and appoint the Technical Steering Committee. [7][11] |\n| **Status** | Beta spec: checkout and delegate-payment RFCs are Draft; feeds and discovery RFCs are unreleased Proposals. On March 24, 2026 OpenAI focused its ChatGPT shopping efforts on product discovery and merchant checkout experiences. OpenAI's commerce docs call ACP an open standard that serves as the connective layer between merchants and ChatGPT users, enabling ChatGPT to ingest structured catalog data, understand merchant inventory, and surface relevant products in context. [7][8][9][12][14][18][19] |\n| **Version** | Latest stable snapshot `2026-04-17` (deprecates `2026-01-30`); checkout RFC Markdown on `main` remains titled Version `2026-01-16` (Delegate Payment RFC `2025-09-29`). [7][8][9][13][20] |\n| **Headers** | `Authorization: Bearer` (required), `Content-Type: application/json` (required with body), `Idempotency-Key` (required on all `POST`), `Request-Id` (recommended), and `API-Version` (required `YYYY-MM-DD` release snapshot selector—latest stable `2026-04-17`, illustrated as `2026-01-16` in `rfcs/rfc.agentic_checkout.md`). [7][8][13] |\n| **Message format** | Merchant REST checkout. Requests that carry a body use `Content-Type: application/json`. Session operations are create, update, retrieve, complete, and cancel. [8] |\n| **Transports** | Changelog 2026-04-17: discovery `transports` advertises `rest` and `mcp`. Checkout configuration can be published via API or MCP. [13][21] |\n| **Token format** | Delegate Payment issues a delegated vault token under an allowance. Stripe shared payment tokens (public preview) scope agent-initiated purchases. [9][22] |\n| **Specification** | [Agentic Commerce Protocol repository](https://github.com/agentic-commerce-protocol/agentic-commerce-protocol), including the [Agentic Checkout RFC](https://github.com/agentic-commerce-protocol/agentic-commerce-protocol/blob/main/rfcs/rfc.agentic_checkout.md) and the [Delegate Payment RFC](https://github.com/agentic-commerce-protocol/agentic-commerce-protocol/blob/main/rfcs/rfc.delegate_payment.md). OpenAI's [commerce documentation](https://developers.openai.com/commerce) calls ACP an open standard connective layer between merchants and ChatGPT users. [8][9][15][19] |\n| **Found at** | `GET /.well-known/acp.json` (added in the 2026-04-17 changelog for pre-session capability checks; the discovery RFC is Status Proposal, version unreleased). [12][13] |\n| **Licence** | Apache-2.0 (repository and RFC specifications; contributors must sign a CLA). [7][10][15][21] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Checkout session lifecycle, headers, and webhook events](#checkout-session-lifecycle-headers-and-webhook-events)\n3. [Delegated payment allowance, Shared Payment Tokens, and 2026-04-17 extensions](#delegated-payment-allowance-shared-payment-tokens-and-2026-04-17-extensions)\n4. [Counterparts and related standards](#counterparts-and-related-standards)\n5. [Adoption and ecosystem](#adoption-and-ecosystem)\n6. [See also](#see-also)\n7. [References](#references)\n\n---\n\n## Problem and scope\n\nAs transactions move from websites to AI workflows, agent checkout has no common standard. An application that lets its users buy from a business would otherwise have to be the merchant of record. A business would otherwise leave its existing commerce infrastructure instead of publishing agent-facing endpoints on its current backend and payment processor. [21] The merchant remains the system of record for orders, payments, taxes, and compliance, and payments stay on merchant rails. A delegated vault token may be used by the merchant's existing PSP only within explicit allowance constraints. Stripe shared payment tokens grant sellers scoped access to customers' payment methods for agent-initiated purchases. [8][9][22] The checkout RFC leaves PSP authorization and capture semantics, returns and exchanges, tax configuration, and fraud modeling out of scope. A merchant accepts the agent payment either by using Stripe's Shared Payment Token API or by adopting the Delegated Payments Spec, without changing its existing payment processor. [1][8]\n\n### Checkout session operations\n\n```mermaid\nsequenceDiagram\n    participant Client as Client (ChatGPT)\n    participant Merchant as Merchant server\n    Client->>Merchant: POST /checkout_sessions\n    Merchant-->>Client: 201 Created, authoritative cart\n    opt Update\n        Client->>Merchant: POST /checkout_sessions/{id}\n        Merchant-->>Client: 200 OK, authoritative state\n    end\n    opt Retrieve\n        Client->>Merchant: GET /checkout_sessions/{id}\n        Merchant-->>Client: 200 OK, or 404 if not found\n    end\n    alt Complete\n        Client->>Merchant: POST /checkout_sessions/{id}/complete\n        Merchant-->>Client: 200 OK, status completed, and order\n    else Cancel\n        Client->>Merchant: POST /checkout_sessions/{id}/cancel\n        Merchant-->>Client: 200 OK, or 405 if already completed or canceled\n    end\n```\n\n*Merchant server checkout operations: `POST /checkout_sessions`, `POST /checkout_sessions/{id}`, `GET /checkout_sessions/{id}`, `POST /checkout_sessions/{id}/complete`, and `POST /checkout_sessions/{id}/cancel`. [8]*\n\n### POST /agentic_commerce/delegate_payment 201 delegated vault token\n\n```json\n{\n  \"id\": \"vt_01J8Z3WXYZ9ABC\",\n  \"created\": \"2025-09-29T11:00:00Z\",\n  \"metadata\": {\n    \"source\": \"agent_checkout\",\n    \"merchant_id\": \"acme\",\n    \"idempotency_key\": \"idem_abc123\"\n  }\n}\n```\n\n*`POST /agentic_commerce/delegate_payment` returns a delegated vault token. The success `id` in this example is `vt_01J8Z3WXYZ9ABC`. [9]*\n\n---\n\n## Checkout session lifecycle, headers, and webhook events\n\nAgentic Checkout is the merchant REST session for the checkout session lifecycle and webhook integration, versioned via the required `API-Version` (`YYYY-MM-DD`) header (latest stable snapshot `2026-04-17`; `rfcs/rfc.agentic_checkout.md` on `main` illustrates `API-Version: 2026-01-16`). Every response returns the authoritative cart state. `API-Version` and `Authorization: Bearer` are required on each call, `Idempotency-Key` is required on every POST, and `Signature` (`RECOMMENDED`, where the server `SHOULD` publish acceptable signature algorithms out-of-band and the client `SHOULD` sign requests) covers the canonical JSON with an accompanying `Timestamp` (`RECOMMENDED`). [7][8][13]\n\n- **Create and update:** `POST /checkout_sessions` creates a session from items and an optional buyer or address and returns 201 Created, with `status`, a `line_items` array whose amount fields (`base_amount`, `discount`, `subtotal`, `tax`, and `total`) are integers, fulfillment options, totals, and messages. `POST /checkout_sessions/{checkout_session_id}` (abbreviated `{id}` in RFC summaries) updates items, address, or fulfillment option and returns 200 OK with the full authoritative cart. [8]\n- **Retrieve, complete, and cancel:** `GET /checkout_sessions/{checkout_session_id}` (`{id}`) returns the latest authoritative state, or 404 if missing. `POST /checkout_sessions/{checkout_session_id}/complete` (`POST /checkout_sessions/{id}/complete`) finalizes with a payment method, MUST create an order, sets `status` to `completed`, and returns `order` fields `id`, `checkout_session_id`, and `permalink_url`. `POST /checkout_sessions/{checkout_session_id}/cancel` returns 200 when canceled and 405 if already completed or canceled. [8]\n- **Status and headers:** `status` is `not_ready_for_payment`, `ready_for_payment`, `authentication_required`, `completed`, `canceled`, or `in_progress`. When authentication such as 3-D Secure is required, the server sets `authentication_required` and includes `authentication_metadata` in the session response, while the client must send `authentication_result` on `POST /checkout_sessions/{id}/complete`. Required POST headers are `API-Version` (selecting the dated `YYYY-MM-DD` release snapshot—latest stable `2026-04-17`, shown as `2026-01-16` in `rfc.agentic_checkout.md`) and `Idempotency-Key` (opaque, at most 255 characters). `Signature` and `Timestamp` are recommended. A missing key returns HTTP 400 `idempotency_key_required`. Replay returns the original response, should include `Idempotent-Replayed: true`, and servers must retain idempotency mappings for at least 24 hours. [7][8][13]\n- **Merchant order webhooks:** The merchant MUST emit `order_create` and `order_update` to the application webhook receiver. Receivers check HMAC `Merchant-Signature`. Version `2026-04-17` sets that header to `t=<unix_seconds>,v1=<64_hex>`, signs timestamp, a period, and the raw body with HMAC-SHA256, and rejects timestamps outside a 300-second window. [8][13]\n\n---\n\n## Delegated payment allowance, Shared Payment Tokens, and 2026-04-17 extensions\n\n`POST /agentic_commerce/delegate_payment` issues a delegated vault token the merchant's PSP may use only inside `allowance`. A granted `SharedPaymentToken` is charged on Stripe or sent to a third-party processor. Snapshot `2026-04-17` ships OpenAPI and JSON Schema artifacts under `spec/2026-04-17/` for cart, feed, orders, delegated authentication, discovery, and the extensions schema, while the prose RFC documents for product feeds and discovery on `main` remain marked `Proposal` (`unreleased`). [7][9][12][13][14][22]\n\n- **Allowance constraints:** `allowance` is required. `reason` MUST be `one_time`. `max_amount` is minor units (20 dollars is 2000). `currency` is lowercase ISO-4217 such as `usd`. `checkout_session_id` and `merchant_id` (at most 256 characters) bind the grant. `expires_at` is RFC 3339, and the token is invalid at or after `allowance.expires_at`. [9]\n- **SharedPaymentToken and vaulting:** A `SharedPaymentToken` grants the seller scoped access to the customer's payment method for an agent-initiated purchase. The seller processes it on Stripe or with a third-party processor by setting `payment_method_data[shared_payment_granted_token]` on a PaymentIntent. Sandbox limits are `usage_limits[currency]`, `usage_limits[max_amount]`, and `usage_limits[expires_at]`. The vault token keeps settlement on the merchant's rails without changing the existing payment processor. [1][9][22]\n- **Cart, feed, and delegated authentication:** `2026-04-17` promotes changes since `2026-01-30` into `spec/2026-04-17/` OpenAPI and JSON Schema artifacts covering cart, feed, orders, authentication, discovery, and MCP, even though `rfcs/rfc.product_feeds.md` and `rfcs/rfc.discovery.md` on `main` still carry `Status: Proposal` (`unreleased`). `POST /carts`, `GET /carts/{id}`, `PUT /carts/{id}`, and `POST /carts/{id}/cancel` manage a cart with no status lifecycle, no payment data, and estimated totals. Agents check `carts` on `/.well-known/acp.json`. The push-model Agent-hosted Feed API uses `POST /feeds` and `PATCH /feeds/{id}/products`. Delegate Authentication runs 3DS2 through Create, Authenticate, and Retrieve, plus fingerprint and challenge webhooks. [7][12][13][14]\n- **Extensions, confirmation, security, and merchant liability:** `2026-01-30` holds extensions, discounts, and payment handlers, and `2026-04-17` still ships `schema.extension.json` beside `schema.discount.json`. `cart_id` checkout conversion and discount extensions are deferred. Confirmation adds `order_notes` on `OrderConfirmation` and `client_reference_id` so the platform can reconcile its transaction with the merchant order. Both checkout and delegated-payment endpoints require `TLS 1.3`, card data handling must follow applicable `PCI DSS` requirements, logs must not contain full `PAN` or `CVC` (with addresses redacted as required by policy), and merchants remain the system and merchant of record for all orders, payments, taxes, compliance, and customer relationships. [7][8][9][13][23]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **Well-Known URIs (RFC 8615)** | `RFC 8615` | Profiles classic standard | ACP's discovery RFC introduces `/.well-known/acp.json` so an agent can check ACP support, protocol version, transports, and seller capabilities before creating a checkout session, without authentication. [12] |\n| **W3C Payment Request API** | `Payment Request API` | Analogous to classic standard | ACP checkout RFC defines create, update, retrieve, complete, and cancel on `/checkout_sessions`, paid by a delegated vault token or Stripe shared payment token: the merchant REST counterpart of Payment Request. [8][9][22] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Universal Commerce Protocol (UCP)](/protocols/ucp/)** | Peer alternative | UCP clients fetch `/.well-known/ucp` and `UCP-Agent` profile, with REST, MCP, A2A, and embedded transports. ACP discovers via `/.well-known/acp.json` and pays with a delegated vault token or Stripe shared payment token. [9][12][22][24] |\n| **[Agent Payments Protocol (AP2)](/protocols/ap2/)** | Complements | AP2 v0.2 defines Checkout and Payment Mandates after a trusted surface obtains informed user consent for an intent before creating a user-signed mandate. ACP keeps the merchant as system of record and pays via a delegated vault token or Stripe SPT. [6][8][9][22] |\n| **[x402](/protocols/x402/)** | Peer alternative | x402 v2 puts requirements in base64 `PAYMENT-REQUIRED`, requires `PAYMENT-SIGNATURE`, and settles via a facilitator. ACP is the merchant session API (create, update, complete, cancel) paid by a delegated vault token. [8][9][25] |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | MCP uses JSON-RPC 2.0 among hosts, clients, and servers for prompts, resources, and tools. ACP 2026-04-17 advertises `rest` and `mcp`, a Feed API (prose RFC marked unreleased), and cart; Delegate Payment issues delegated vault tokens. [9][13][14][26] |\n| **[Trusted Agent Protocol (TAP)](/protocols/tap/)** | Complements | TAP signs with HTTP message signatures to prove agent's payment-scheme participation. ACP Delegate Payment issues a delegated vault token; Stripe shared payment tokens grant scoped access for agent-initiated purchases. [9][22][27] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (11 probed or cited examples across 3 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).*\n\n### Merchants & commerce platforms\n\n| Actor | Role | Status | Checkout surface & merchant rollout | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Etsy** | Marketplace | Supported · as of 2026-03-24 | Launched in-ChatGPT Instant Checkout for U.S. Etsy items on 2025-09-29; following OpenAI's 2026-03-24 shift, Etsy catalogs remain integrated while purchases complete on merchant-owned websites or apps. | [Etsy News (Sep 29, 2025)](https://web.archive.org/web/20251220210109/https://www.etsy.com/news/meeting-buyers-where-they-are-etsy-partners-with-openai-to-enable-ai-powered-shopping) [28] · [ChatGPT merchants](https://chatgpt.com/merchants/) [29] · [OpenAI (March 24, 2026)](https://web.archive.org/web/20261012013103/https://openai.com/index/powering-product-discovery-in-chatgpt/) [18] |\n| **Shopify** | Platform | Supported · as of 2026-03-24 | Instant Checkout for Shopify merchants (rolling out from November 20, 2025); on March 24, 2026 OpenAI shifted to merchant checkout experiences while focusing on product discovery, and Shopify states buyers finish in-app on mobile or in a separate browser tab on desktop while merchants stay merchant of record. | [Shopify News (September 29, 2025)](https://www.shopify.com/news/shopify-open-ai-commerce) [30] · [ChatGPT release notes (November 20, 2025)](https://web.archive.org/web/20260302064248/https://help.openai.com/en/articles/6825453-chatgpt-release-notes/) [31] · [Shopify News (March 24, 2026)](https://www.shopify.com/news/agentic-commerce-momentum) [23] · [OpenAI (March 24, 2026)](https://web.archive.org/web/20261012013103/https://openai.com/index/powering-product-discovery-in-chatgpt/) [18] |\n| **Walmart** | Enterprise retailer | Supported · as of 2026-03-24 | Announced ChatGPT Instant Checkout partnership on October 14, 2025; introduced tailored in-ChatGPT app with account linking, loyalty, and Walmart payments on March 24, 2026. | [Walmart News (October 14, 2025)](https://corporate.walmart.com/news/2025/10/14/walmart-partners-with-openai-to-create-ai-first-shopping-experiences) [32] · [OpenAI (March 24, 2026)](https://web.archive.org/web/20261012013103/https://openai.com/index/powering-product-discovery-in-chatgpt/) [18] |\n| **Salesforce (Agentforce Commerce)** | Commerce platform | Supported · as of 2025-10-14 | Collaborated with Stripe and OpenAI to build an Instant Checkout integration guided by ACP (announced October 14, 2025). | [Salesforce Press Release (October 14, 2025)](https://www.salesforce.com/news/press-releases/2025/10/14/stripe-openai-agentic-commerce-protocol-announcement/?bc=OTH) [33] |\n| **commercetools** | Commerce platform | Supported · as of 2025-09-30 | Joined Stripe and OpenAI as an ACP launch partner for enterprise merchants (announced September 30, 2025). | [commercetools Press Release (September 30, 2025)](https://commercetools.com/press-releases/commercetools-partners-with-stripe-to-launch-acp) [34] |\n| **Target, Sephora, Nordstrom, Lowe's, Best Buy, The Home Depot, and Wayfair** | Merchant cohort | Partial · as of 2026-03-24 | Discovery only, not checkout, for Target, Sephora, Nordstrom, Lowe's, Best Buy, The Home Depot, and Wayfair. | [OpenAI, Powering Product Discovery in ChatGPT (March 24, 2026)](https://web.archive.org/web/20261012013103/https://openai.com/index/powering-product-discovery-in-chatgpt/) [18] |\n\n### Buying agents & AI checkout surfaces\n\n| Actor | Role | Status | Checkout flow & credential orchestration | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **OpenAI (ChatGPT Instant Checkout)** | Buying agent / AI surface (Co-author) | Partial · as of 2026-03-24 | U.S. Plus, Pro, and Free users: single-item Etsy checkout, then merchant checkout and discovery. | [OpenAI, Buy it in ChatGPT (September 29, 2025)](https://web.archive.org/web/20261022061422/https://openai.com/index/buy-it-in-chatgpt/) [1] · [OpenAI, Powering Product Discovery in ChatGPT (March 24, 2026)](https://web.archive.org/web/20261012013103/https://openai.com/index/powering-product-discovery-in-chatgpt/) [18] · [ChatGPT merchants](https://chatgpt.com/merchants/) [29] |\n\n### Payment processors & delegated token rails\n\n| Actor | Role | Status | Shared Payment Token (SPT) / rail role | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Stripe** | Payment rail (Co-author) | Supported · checked 2026-10-30 | Codeveloped ACP; public-preview Shared Payment Tokens in the US, Canada, and select European countries. | [Stripe Blog (September 29, 2025)](https://stripe.com/blog/developing-an-open-standard-for-agentic-commerce) [10] · [Stripe shared payment tokens](https://docs.stripe.com/agentic-commerce/concepts/shared-payment-tokens) [22] · [Agentic Commerce Protocol](https://www.agenticcommerce.dev/) [21] |\n| **Adyen** | Payment rail | Supported · as of 2026-01-16 | ACP checkout delegates the payment token to Adyen (`adyen` provider enum, 2026-01-16). | [Adyen ACP checkout docs](https://docs.adyen.com/online-payments/agentic-commerce/agent-platform/agentic-payments-acp) [35] · [ACP changelog 2026-01-16](https://github.com/agentic-commerce-protocol/agentic-commerce-protocol/blob/main/changelog/2026-01-16.md) [36] |\n| **PayPal (Braintree)** | Payment rail | Supported · as of 2026-10-29 | ChatGPT app accepts ACP payments via Braintree delegated payment tokens (guide updated 2026-10-29). | [PayPal Developer guide (last updated October 29, 2026)](https://developer.paypal.com/agent-ready/agentic-commerce-protocol) [37] |\n| **Checkout.com** | Payment rail | Supported · as of 2025-11-25 | Adopted ACP to power agentic commerce payments for enterprise merchants (announced November 25, 2025). | [Checkout.com Newsroom (November 25, 2025)](https://www.checkout.com/newsroom/checkout-adopts-acp-backed-by-openai-to-power-agentic-commerce-for-enterprise-merchants) [38] |\n\n### Ecosystem censuses\n\n- **OpenAI (September 29, 2025) & ChatGPT release notes (November 20, 2025)** (*as of 2025-11-20*): Instant Checkout launched on September 29, 2025 for U.S. ChatGPT Plus, Pro, and Free users purchasing from U.S. Etsy sellers, with over a million Shopify merchants (including Glossier, SKIMS, Spanx, and Vuori) announced at launch and rolling out in ChatGPT starting November 20, 2025. [1][31]\n- **Stripe SPT documentation & enterprise partner announcements (Sept–Nov 2025)** (*as of 2025-11-25*): Stripe launched public-preview Shared Payment Tokens (SPTs) across the US, Canada, and select European countries alongside Day-1 and Q4 2025 platform integrations across Etsy, Shopify, commercetools, Salesforce Agentforce Commerce, Walmart, and Checkout.com. [21][22][33][34][38]\n- **OpenAI & Shopify announcements (March 24, 2026)** (*as of 2026-03-24*): On March 24, 2026, OpenAI shifted ChatGPT physical-goods shopping from standalone in-chat Instant Checkout to merchant-owned checkout experiences (in-app browser on mobile and direct store tab on desktop for Shopify and Etsy catalogs) while expanding ACP catalog discovery to Target, Sephora, Nordstrom, Lowe's, Best Buy, The Home Depot, and Wayfair. [18][23]\n\n---\n\n## See also\n\n- **[Machine Payments Protocol (MPP)](/protocols/mpp/)** *(Complements)* — ACP, maintained by OpenAI and Stripe, connects buyers, agents, and businesses for checkout; MPP pays for one HTTP resource.\n- **[Agent Transfer Protocol](/protocols/agtp/)** *(Complements)* — AGTP draft-10 defines governance and authority headers alongside its eight Tier 1 Core Methods (such as BOOK and DELEGATE), while the Agentic Commerce Protocol is the separate OpenAI and Stripe checkout protocol.\n- **[Verifiable Intent](/protocols/vi/)** *(Complements)* — The Agentic Commerce Protocol moves the order with the merchant, and Verifiable Intent supplies the SD-JWT (RFC 9901) L1, L2, and L3 mandate chain for that order.\n- **[Agent Attribution Protocol](/protocols/agent-attribution-protocol/)** *(Complements)* — The Agentic Commerce Protocol completes the merchant order, while AAP uses checkout() to route the user to checkout and matches merchant conversions reported via the conversions API back to the Rako-signed AAP Code from recommend().\n- **Category:** [Pay protocols](/category/pay/)\n\n---\n\n## References\n\n1. OpenAI, *Buy it in ChatGPT: Instant Checkout and the Agentic Commerce Protocol* (2025-09-29 (Wayback snapshot 2026-10-22)) — <https://web.archive.org/web/20261022061422/https://openai.com/index/buy-it-in-chatgpt/>\n2. Kate Blair and Todd Segal, LF AI & Data, *ACP Joins Forces with A2A* (2025-08-29) — <https://lfaidata.foundation/communityblog/2025/08/29/acp-joins-forces-with-a2a-under-the-linux-foundations-lf-ai-data/>\n3. Nathan Sobo, Zed, *Bring Your Own Agent to Zed — Featuring Gemini CLI* (2025-08-27) — <https://zed.dev/blog/bring-your-own-agent-to-zed>\n4. AGNTCY, *Agent Connect Protocol specification* (checked 2026-10-28) — <https://github.com/agntcy/acp-spec>\n5. Davide Crapis, Bryan Lim, Tay Weixiong, and Chooi Zuhwa, *ERC-8183: Agentic Commerce* (created 2026-02-25) — <https://eips.ethereum.org/EIPS/eip-8183>\n6. Google, *Agent Payments Protocol specification* (v0.2; checked 2026-10-30) — <https://ap2-protocol.org/ap2/specification/>\n7. OpenAI and Stripe, *Agentic Commerce Protocol README* (checked 2026-10-28) — <https://github.com/agentic-commerce-protocol/agentic-commerce-protocol/blob/main/README.md>\n8. OpenAI and Stripe, *RFC: Agentic Checkout — Merchant REST API* (Status Draft; Version 2026-01-16; checked 2026-10-28) — <https://github.com/agentic-commerce-protocol/agentic-commerce-protocol/blob/main/rfcs/rfc.agentic_checkout.md>\n9. OpenAI and Stripe, *RFC: Delegate Payment API* (Status Draft; Version 2025-09-29; checked 2026-10-28) — <https://github.com/agentic-commerce-protocol/agentic-commerce-protocol/blob/main/rfcs/rfc.delegate_payment.md>\n10. Jeff Weinstein and Steve Kaliski, Stripe, *Developing an open standard for agentic commerce* (2025-09-29) — <https://stripe.com/blog/developing-an-open-standard-for-agentic-commerce>\n11. OpenAI and Stripe, *ACP governance* (checked 2026-10-28) — <https://github.com/agentic-commerce-protocol/agentic-commerce-protocol/blob/main/docs/governance.md>\n12. OpenAI and Stripe, *RFC: ACP discovery document* (Status Proposal; version unreleased; checked 2026-10-28) — <https://github.com/agentic-commerce-protocol/agentic-commerce-protocol/blob/main/rfcs/rfc.discovery.md>\n13. OpenAI and Stripe, *Changelog 2026-04-17* (2026-04-17; checked 2026-10-28) — <https://github.com/agentic-commerce-protocol/agentic-commerce-protocol/blob/main/changelog/2026-04-17.md>\n14. OpenAI and Stripe, *RFC: Product Feeds* (Status Proposal; version unreleased; checked 2026-10-28) — <https://github.com/agentic-commerce-protocol/agentic-commerce-protocol/blob/main/rfcs/rfc.product_feeds.md>\n15. OpenAI and Stripe, *agentic-commerce-protocol repository* (created 2025-09-29; checked 2026-10-28) — <https://github.com/agentic-commerce-protocol/agentic-commerce-protocol>\n16. GitHub API, *Commit history of docs/governance.md* (checked 2026-10-28) — <https://github.com/agentic-commerce-protocol/agentic-commerce-protocol/commits/HEAD/docs/governance.md>\n17. OpenAI and Stripe, *MAINTAINERS.md* (checked 2026-10-28) — <https://github.com/agentic-commerce-protocol/agentic-commerce-protocol/blob/main/MAINTAINERS.md>\n18. OpenAI, *Powering Product Discovery in ChatGPT* (2026-03-24 (Wayback snapshot 2026-10-12)) — <https://web.archive.org/web/20261012013103/https://openai.com/index/powering-product-discovery-in-chatgpt/>\n19. OpenAI, *Agentic Commerce Protocol* (checked 2026-11-11) — <https://developers.openai.com/commerce>\n20. OpenAI and Stripe, *Changelog 2025-09-29* (2025-09-29; checked 2026-10-28) — <https://github.com/agentic-commerce-protocol/agentic-commerce-protocol/blob/main/changelog/2025-09-29.md>\n21. Agentic Commerce Protocol, *Agentic Commerce Protocol* (checked 2026-10-29) — <https://www.agenticcommerce.dev/>\n22. Stripe, *Shared payment tokens* (checked 2026-10-28) — <https://docs.stripe.com/agentic-commerce/concepts/shared-payment-tokens>\n23. Shopify, *Millions of merchants can sell in AI chats* (2026-03-24) — <https://www.shopify.com/news/agentic-commerce-momentum>\n24. Universal Commerce Protocol, *Overview* (checked 2026-10-30) — <https://ucp.dev/latest/specification/overview/>\n25. x402 Foundation, *X402 Protocol Specification* (Protocol Version 2; checked 2026-10-30) — <https://github.com/x402-foundation/x402/blob/main/specs/x402-specification-v2.md>\n26. Model Context Protocol, *Specification* (2026-07-28) — <https://modelcontextprotocol.io/specification/2026-07-28>\n27. Visa, *Trusted Agent Protocol specifications* (checked 2026-10-30) — <https://developer.visa.com/docs/trusted-agent-protocol/trusted-agent-protocol-specifications>\n28. Rafe Colburn, Etsy, *Meeting Buyers Where They Are: Etsy partners with OpenAI to enable AI-powered shopping* (2025-09-29 (Wayback snapshot 2025-12-20)) — <https://web.archive.org/web/20251220210109/https://www.etsy.com/news/meeting-buyers-where-they-are-etsy-partners-with-openai-to-enable-ai-powered-shopping>\n29. OpenAI, *ChatGPT merchants* (checked 2026-10-29) — <https://chatgpt.com/merchants/>\n30. Shopify, *Shopify and OpenAI bring commerce to ChatGPT* (2025-09-29) — <https://www.shopify.com/news/shopify-open-ai-commerce>\n31. OpenAI Help Center, *ChatGPT release notes* (entry 2025-11-20; Wayback snapshot 2026-03-02) — <https://web.archive.org/web/20260302064248/https://help.openai.com/en/articles/6825453-chatgpt-release-notes/>\n32. Walmart, *Walmart Partners with OpenAI to Create AI-First Shopping Experiences* (2025-10-14) — <https://corporate.walmart.com/news/2025/10/14/walmart-partners-with-openai-to-create-ai-first-shopping-experiences>\n33. Salesforce, *Salesforce Announces Support for Agentic Commerce Protocol with Stripe* (2025-10-14) — <https://www.salesforce.com/news/press-releases/2025/10/14/stripe-openai-agentic-commerce-protocol-announcement/?bc=OTH>\n34. commercetools, *commercetools partners with Stripe in its launch of the ACP* (2025-09-30) — <https://commercetools.com/press-releases/commercetools-partners-with-stripe-to-launch-acp>\n35. Adyen, *Agentic Payments integration with ACP checkout flow* (checked 2026-10-29) — <https://docs.adyen.com/online-payments/agentic-commerce/agent-platform/agentic-payments-acp>\n36. OpenAI and Stripe, *Changelog 2026-01-16* (2026-01-16; checked 2026-10-28) — <https://github.com/agentic-commerce-protocol/agentic-commerce-protocol/blob/main/changelog/2026-01-16.md>\n37. PayPal Developer, *Agentic Commerce Protocol integration* (last updated 2026-10-29) — <https://developer.paypal.com/agent-ready/agentic-commerce-protocol>\n38. Checkout.com, *Checkout adopts ACP, backed by OpenAI, to power agentic commerce for enterprise merchants* (2025-11-25) — <https://www.checkout.com/newsroom/checkout-adopts-acp-backed-by-openai-to-power-agentic-commerce-for-enterprise-merchants>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "UCP",
   "adoption": {
    "level": "observed",
    "by": "Shopify, Allbirds, Glossier, Monos, Steve Madden, Google (AI Mode in Search & Gemini app), Google Pay, Universal-Commerce-Protocol Official SDKs, and 12 other verified implementations",
    "probe_run": null
   },
   "aliases": [
    "Universal Commerce Protocol"
   ],
   "analog": "Machine-readable commerce capability profile at /.well-known/ucp for checkout, cart, order, and identity linking",
   "audience": [
    "platform",
    "site-owner",
    "agent-builder"
   ],
   "collisions": [
    "Universal Computer Protocol (SMSC protocol)",
    "Oracle Universal Connection Pool"
   ],
   "discovery": {
    "mechanism": "GET /.well-known/ucp on the business's own domain",
    "path": "GET /.well-known/ucp on the business's own domain: \"Businesses publish their profile at /.well-known/ucp; platforms publish their profile at the URI advertised in UCP-Agent.\""
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://developers.googleblog.com/en/under-the-hood-universal-commerce-protocol-ucp/",
     "claim": "Amit Handa and Ashish Gupta (Google Developers Blog), *Under the Hood: Universal Commerce Protocol (UCP)*, published 2026-01-11",
     "date": null,
     "quote": "The Universal Commerce Protocol (UCP) is a new, open-source standard for agentic commerce, co-developed by Google and industry leaders.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://shopify.engineering/ucp",
     "claim": "Shopify Engineering, *Building the Universal Commerce Protocol*, published 2026-01-11",
     "date": null,
     "quote": "We co-developed UCP with Google to create an open standard for AI agents to connect and transact with any merchant. / 2026-01-11T14:17:01Z / We co-developed UCP with Google / Co-developed with Google. Supported by Etsy, Target, Walmart, Wayfair, and millions of Shopify merchants.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://www.shopify.com/news/ai-commerce-at-scale",
     "claim": "Shopify, *The agentic commerce platform: Shopify connects any merchant to every AI conversation*, published 2026-01-11",
     "date": null,
     "quote": "January 11, 2026 / \"datePublished\":\"2026-01-11T14:58:43Z\"",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://blog.google/products/ads-commerce/agentic-commerce-ai-tools-protocol-retailers-platforms/",
     "claim": "Vidhya Srinivasan (Google), *New tech and tools for retailers to succeed in an agentic shopping era*, published 2026-01-11",
     "date": null,
     "quote": "\"datePublished\": \"2026-01-11T15:00:00+00:00\" / UCP was co-developed with industry leaders including Shopify, Etsy, Wayfair, Target and Walmart / endorsed by more than 20 others across the ecosystem like Adyen, American Express, Best Buy, Flipkart, Macy's Inc., Mastercard, Stripe, The Home Depot, Visa and Zalando.",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://ucp.dev/latest/specification/overview/",
     "claim": "Universal Commerce Protocol, *Overview*, specification version aliased latest; fetched 2026-10-30",
     "date": null,
     "quote": "A profile document is a JSON object with a required ucp member. / Businesses publish their profile at /.well-known/ucp; platforms publish their profile at the URI advertised in UCP-Agent. / The ucp member contains protocol metadata: protocol version, services, optional capabilities, and payment handlers. / Platforms MUST include their profile URI in every request using the transport-appropriate mechanism. / HTTP Transport: Platforms MUST use Dictionary Structured Field syntax (RFC 8941) in the UCP-Agent header: / Platforms MAY fetch the business profile from /.well-known/ucp before initiating requests. / UCP supports HTTP/1.1 (or higher) using RESTful patterns. / UCP supports MCP protocol, which operates over JSON-RPC. / A business MAY expose an A2A agent that supports UCP as an A2A Extension / A business MAY embed an interface onto an eligible host / UCP uses date-based versioning in the format YYYY-MM-DD. / Platforms MUST use Dictionary Structured Field syntax (RFC 8941) in the UCP-Agent header / Requests and responses MUST use application/json. / endpoint SHOULD NOT have a trailing slash / Content-Type: application/json / UCP supports multiple transport protocols. / UCP separates protocol version selection from capability negotiation. A Business advertises its current protocol version and links to profiles for older supported versions. / Businesses MUST compute the intersection of platform and business capabilities. / Businesses MUST include the ucp field in every response containing: version: The UCP version used to process the request capabilities: Array of active capabilities for this response / Businesses publish their profile at /.well-known/ucp. An example: / Platforms MUST use Dictionary Structured Field syntax (RFC 8941) in the UCP-Agent header: / All capability and service names MUST use the format: {reverse-domain}.{service}.{capability} / {reverse-domain} - Authority identifier derived from domain ownership / dev.ucp.shopping.checkout ucp.dev shopping checkout / Protocol version selection chooses one complete Business profile first. Capability negotiation then selects active capabilities and extensions by exact version intersection within that profile. / select the highest version (latest date) / Extensions use the extends field to declare their parent(s): / Extensions MAY extend multiple parent capabilities by using an array: / For single-parent extensions (extends: \"string\"): parent must be present / at least one parent must be present / how it modifies base types using allOf composition. / Platforms MUST resolve schemas client-side by fetching and composing base schemas with active extension schemas. / separates Payment Instruments (what is accepted) from Payment Handlers (the specifications for how instruments are processed) / Payment Handlers are specifications (not entities) / com.google.pay, dev.shopify.shop_pay / entity like Google Pay, Shop Pay / Businesses MUST filter the handlers list based on the context of the cart / Businesses publish their profile at /.well-known/ucp / MCP requests use the tools/call method",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://raw.githubusercontent.com/agentic-commerce-protocol/agentic-commerce-protocol/main/README.md",
     "claim": "OpenAI and Stripe, *Agentic Commerce Protocol (ACP) README*, fetched 2026-10-30",
     "date": null,
     "quote": "The specification is maintained by OpenAI and Stripe and is currently in beta. / The Agentic Commerce Protocol (ACP) is an interaction model and open standard for connecting buyers, their AI agents, and businesses to complete purchases seamlessly.",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://ucp.dev/documentation/ucp-and-ap2/",
     "claim": "Universal Commerce Protocol, *UCP and AP2*, fetched 2026-10-30",
     "date": null,
     "quote": "UCP is fully compatible with Agent Payments Protocol (AP2).",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://ucp.dev/latest/specification/payment/extensions/ap2-mandates/",
     "claim": "Universal Commerce Protocol, *AP2 Mandates Extension*, fetched 2026-10-30",
     "date": null,
     "quote": "user intents and authorizations using Verifiable Digital Credentials / the secure exchange of user intents and authorizations using Verifiable Digital Credentials. / Businesses MUST embed a cryptographic signature in checkout responses / Platforms MUST provide cryptographically signed proofs (Mandates) during the complete operation / the session is Security Locked. / dev.ucp.common.payment.ap2_mandate to their capabilities list in /.well-known/ucp. / \"version\": \"2026-08-25\"",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://blog.google/products-and-platforms/products/shopping/universal-cart-launch/",
     "claim": "Suresh Ganapathy (Google), *Google's new Universal Cart launches today in the U.S.*, published 2026-10-15",
     "date": null,
     "quote": "checkout powered by the Universal Commerce Protocol (UCP) / merchants like Nike, Sephora, Target, Ulta Beauty, Walmart, Wayfair, and many Shopify merchants / \"datePublished\": \"2026-10-15T13:00:00+00:00\" / Today, Universal Cart is rolling out in the U.S. across Google Search and in the Gemini app. / You can securely check out with Google Pay in just a few taps",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://wiki.wireshark.org/UCP",
     "claim": "Wireshark Wiki, *Universal Computer Protocol (UCP)*, fetched 2026-10-30",
     "date": null,
     "quote": "Universal Computer Protocol (UCP) / transferring Short Messages between a Short Message Service Centre (SMSC)",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://docs.oracle.com/en/database/oracle/oracle-database/26/jjucp/intro.html",
     "claim": "Oracle, *Introduction to UCP (Universal Connection Pool)*, fetched 2026-10-30",
     "date": null,
     "quote": "Overview of Universal Connection Pool / A connection pool is a cache of database connection objects.",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://ucp.dev/documentation/core-concepts/",
     "claim": "Universal Commerce Protocol, *Core Concepts*, fetched 2026-10-30",
     "date": null,
     "quote": "The Universal Commerce Protocol (UCP) is an open standard for interoperability between commerce entities. / Each capability is identified by a reverse-domain name (e.g., dev.ucp.shopping.checkout) and carries a date-based version. / A Business declares which transport bindings it supports within each service; Platforms pick whichever fits their context - an AI agent may prefer MCP, a traditional web app may use REST. / Capability negotiation follows a server-selects architecture. / The business determines the active capabilities by computing the intersection of its own declared capabilities with those in the platform's profile / Select the highest (latest date). If no mutual version exists, exclude the capability. / Capabilities are declared in the Business's UCP profile at /.well-known/ucp, negotiated by exact version, and confirmed in every response so that the Platform always knows the active feature set for a given interaction. / In transactional contexts, the business typically acts as the Merchant of Record (MoR), retaining financial liability and ownership of the transaction - though UCP's capability model is not limited to transactional use cases. / Capabilities are declared in the Business's UCP profile at /.well-known/ucp / The business determines the active capabilities by computing the intersection / A single service can be accessed via multiple transport bindings: / REST OpenAPI 3.1.0 Standard server-to-server integrations MCP OpenRPC / Every UCP-defined service declares an explicit version equal to the selected ucp.version / Transport bindings have no separate version. / UCP defines the interactions between four distinct actors, each playing a specific role in the interaction lifecycle. / The platform is any entity that consumes capabilities exposed by a business / The entity exposing capabilities. / particularly payment instruments / The financial infrastructure provider that processes payments on behalf of businesses. / \"Payment Credential Provider\" refers to the CP and/or PSP roles defined above; depending on the payment handler, they may be the same entity or distinct. / Discovering business capabilities via profiles / acting on behalf of its principal within the bounds of negotiated capabilities. / Publishing a UCP profile, declaring supported services, capabilities and extensions / typically acts as the Merchant of Record (MoR), retaining financial liability and ownership of the transaction",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://raw.githubusercontent.com/Universal-Commerce-Protocol/.github/main/GOVERNANCE.md",
     "claim": "UCP Authors, *GOVERNANCE.md*, fetched 2026-10-30",
     "date": null,
     "quote": "GC serves as the ultimate owner of all UCP assets. / Google acts as the custodian of the UCP.dev domain, holding and managing it to foster adoption of UCP. / Includes a total of 5 members. / Includes 1 permanent member from each founding organization (Google & Shopify) each having 1 vote (total 2 votes). / Includes 3 elected members from any organization / Google holds proxy vote for all open seats until Dec 2028 / May choose to review and veto a DTC decision or recommendation. / needs to sign a contributor license",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://ucp.dev/latest/specification/embedded-protocol/",
     "claim": "Universal Commerce Protocol, *Embedded protocol*, fetched 2026-10-30",
     "date": null,
     "quote": "The Embedded Protocol (EP) is a UCP transport binding that enables a host to embed a business's interface in an iframe or webview and exchange structured messages over that channel. / The Embedded Protocol (EP) is a UCP transport binding that enables a host to embed a business's interface in an iframe or webview / All EP messages MUST use JSON-RPC 2.0 format (RFC 7159). / in an iframe or webview / embed a business's interface in an iframe or webview",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://ucp.dev/versions.json",
     "claim": "Universal Commerce Protocol, *versions.json*, last-modified 2026-10-29; fetched 2026-10-30",
     "date": null,
     "quote": "\"version\": \"2026-08-25\" / \"aliases\": [ \"latest\" ] / { \"version\": \"draft\", \"title\": \"draft\", \"aliases\": [] } / \"version\": \"2026-04-08\" / \"version\": \"2026-01-23\" / \"version\": \"2026-01-11\" / \"version\": \"draft\" / { \"version\": \"2026-08-25\", \"title\": \"2026-08-25\", \"aliases\": [ \"latest\" ] }",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://github.com/Universal-Commerce-Protocol/ucp/releases",
     "claim": "Universal-Commerce-Protocol, *Releases, Universal-Commerce-Protocol/ucp*, fetched 2026-10-30",
     "date": null,
     "quote": "\"tag_name\": \"v2026-08-25\", \"target_commitish\": \"release/2026-08-25\", \"name\": \"Release v2026-08-25\", \"draft\": false, \"immutable\": false, \"prerelease\": false, \"created_at\": \"2026-08-25T13:47:10Z\", \"updated_at\": \"2026-10-23T12:05:14Z\", \"published_at\": \"2026-08-25T13:53:03Z\" / \"tag_name\": \"v2026-04-08\", \"target_commitish\": \"release/2026-04-08\", \"name\": \"Release v2026-04-08\", \"draft\": false, \"immutable\": false, \"prerelease\": false, \"created_at\": \"2026-04-13T14:51:29Z\", \"updated_at\": \"2026-10-23T12:04:19Z\", \"published_at\": \"2026-04-09T01:48:20Z\" / \"tag_name\": \"v2026-01-23\", \"target_commitish\": \"release/2026-01-23\", \"name\": \"Release v2026-01-23\", \"draft\": false, \"immutable\": false, \"prerelease\": false, \"created_at\": \"2026-01-23T22:46:40Z\", \"updated_at\": \"2026-01-23T22:48:51Z\", \"published_at\": \"2026-01-23T22:48:51Z\" / \"tag_name\": \"v2026-01-11\", \"target_commitish\": \"release/2026-01-11\", \"name\": \"Release v2026-01-11\", \"draft\": false, \"immutable\": false, \"prerelease\": false, \"created_at\": \"2026-01-23T17:55:22Z\", \"updated_at\": \"2026-01-23T17:58:21Z\", \"published_at\": \"2026-01-23T17:58:21Z\" / Release v2026-08-25",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://ucp.dev/documentation/announcements/",
     "claim": "Universal Commerce Protocol, *Announcements*, fetched 2026-10-30",
     "date": null,
     "quote": "August 25, 2026: Protocol Release v2026-08-25 / April 8, 2026: Protocol Release v2026-04-08 / January 11, 2026: Protocol Release v2026-01-11 / April 28, 2026: Stripe Joins the Governing Council / Stripe has joined the UCP Governing Council as a new member, joining existing permanent members Google and Shopify. / July 16, 2026: Food Technical Council (Food TC) Formed / Initial members include Block (Square), DoorDash, Google, Toast, and Uber Eats. / August 11, 2026: Lodging Technical Council (Lodging TC) Formed / inaugural members Amadeus, Booking.com, Expedia, Google, Hilton, Marriott, and Trip.com / We are excited to welcome inaugural members Adyen NV, Ant International, Coinbase, Global Payments, Google, PayPal, Shopify, and Stripe to the Payments TC. / We have released version v2026-08-25 of the protocol. / September 25, 2026: UCP Lodging: Booking Capability Draft Spec Release / the initial draft version of the Lodging Booking capability (dev.ucp.lodging.booking) / September 2, 2026: Payments Technical Council (Payments TC) Formed / Stripe has joined the UCP Governing Council as a new member",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://github.com/Universal-Commerce-Protocol/ucp",
     "claim": "Universal-Commerce-Protocol, *ucp: Specification and documentation for the Universal Commerce Protocol*, repository created 2025-12-31; fetched 2026-10-30",
     "date": null,
     "quote": "\"createdAt\":\"2025-12-31T02:17:21.000Z\" / \"homepage\": \"https://ucp.dev\" / spdxId\":\"Apache-2.0\"",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://raw.githubusercontent.com/Universal-Commerce-Protocol/.github/main/MAINTAINERS.md",
     "claim": "UCP Authors, *UCP Maintainers*, fetched 2026-10-30",
     "date": null,
     "quote": "Shopping Tech Council / The Governance Council is responsible for the overall adoption and health of the protocol. / Amit Handa / Ilya Grigorik / Twum Djin / Stripe / to be elected / | Twum Djin | Stripe | / Jose Mendez | Adyen NV",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://ucp.dev/draft/specification/lodging/booking/",
     "claim": "Universal Commerce Protocol, *Lodging Booking capability (draft)*, fetched 2026-10-30",
     "date": null,
     "quote": "Capability Name: dev.ucp.lodging.booking",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://raw.githubusercontent.com/Universal-Commerce-Protocol/ucp/main/README.md",
     "claim": "Universal Commerce Protocol, *Universal Commerce Protocol (UCP) README*, fetched 2026-10-30",
     "date": null,
     "quote": "skip release branches and only build the current draft / Businesses can offer Capabilities via REST APIs, MCP (Model Context Protocol), or A2A, depending on their infrastructure. / Checkout: Facilitates checkout sessions including cart management and tax calculation / Identity Linking: Enables platforms to obtain authorization to perform actions on a user's behalf via OAuth 2.0. / Order: Webhook-based updates for order lifecycle events / Payment Token Exchange: Protocols for PSPs and Credential Providers to securely exchange payment tokens and credentials. / UCP is an open-source project under the Apache License 2.0 / As commerce becomes increasingly agentic and distributed, the ability for different systems to interoperate without custom, one-off integrations is vital.",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://ucp.dev/latest/specification/shopping/checkout/a2a/",
     "claim": "Universal Commerce Protocol, *Checkout A2A binding*, fetched 2026-10-30",
     "date": null,
     "quote": "Businesses supporting UCP must advertise the extension and any optional capabilities in their A2A Agent Card",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://www.iana.org/assignments/well-known-uris",
     "claim": "IANA, *Well-Known URIs Registry*, updated 2026-10-26",
     "date": null,
     "quote": "ucp https://ucp.dev/latest/specification/overview/#profile-structure provisional Ilya Grigorik 2026-10-26",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://blog.google/products-and-platforms/platforms/google-pay/agent-payments-protocol-fido-alliance/",
     "claim": "Google, *Google donates Agent Payments Protocol to FIDO Alliance*, 2026-04-28",
     "date": "2026-04-28",
     "quote": "Google donates the Agent Payments Protocol (AP2) to the FIDO Alliance / \"datePublished\": \"2026-04-28T13:00:00+00:00\"",
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/specification.md",
     "claim": "Agent Payments Protocol (google-agentic-commerce), *Agentic Payment Protocol (v0.2)*, fetched 2026-10-30",
     "date": null,
     "quote": "AP2 operates as a security feature within a Commerce Protocol. / AP2 is designed explicitly to be compatible with the Universal Commerce Protocol (UCP) and integrates seamlessly.",
     "ref": 25
    },
    {
     "label": "[26]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28",
     "claim": "Model Context Protocol, *Specification, 2026-07-28*, specification date 2026-07-28; fetched 2026-10-30",
     "date": null,
     "quote": "The protocol uses JSON-RPC 2.0 messages",
     "ref": 26
    },
    {
     "label": "[27]",
     "url": "https://ucp.dev/latest/specification/shopping/checkout/mcp/",
     "claim": "Universal Commerce Protocol, *Checkout MCP binding*, fetched 2026-10-30",
     "date": null,
     "quote": "Businesses advertise MCP transport availability through their UCP profile at /.well-known/ucp.",
     "ref": 27
    },
    {
     "label": "[28]",
     "url": "https://a2a-protocol.org/latest/specification/",
     "claim": "A2A Protocol, *Overview*, fetched 2026-10-30",
     "date": null,
     "quote": "JSON-RPC Protocol Binding / Agent Card",
     "ref": 28
    },
    {
     "label": "[29]",
     "url": "https://www.rfc-editor.org/info/rfc9421/",
     "claim": "A. Backman, J. Richer, and M. Sporny, *RFC 9421: HTTP Message Signatures*, fetched 2026-10-30",
     "date": null,
     "quote": "RFC 9421: HTTP Message Signatures",
     "ref": 29
    },
    {
     "label": "[30]",
     "url": "https://ucp.dev/latest/specification/signatures/",
     "claim": "Universal Commerce Protocol, *Signatures*, fetched 2026-10-30",
     "date": null,
     "quote": "This specification defines how to sign and verify UCP messages using RFC 9421 HTTP Message Signatures. / EdDSA is an additive option that unlocks Web Bot Auth (WBA) interop.",
     "ref": 30
    },
    {
     "label": "[31]",
     "url": "https://www.shopify.com/news/agentic-commerce-momentum",
     "claim": "Shopify, *Millions of merchants can sell in AI chats*, published 2026-03-24",
     "date": null,
     "quote": "select brands have started selling in AI Mode in Google Search and the Gemini app, powered by the Universal Commerce Protocol (UCP) / the open standard we co-developed with Google / \"datePublished\":\"2026-03-24T16:00:15Z\"",
     "ref": 31
    },
    {
     "label": "[32]",
     "url": "https://www.allbirds.com/.well-known/ucp",
     "claim": "Allbirds, *UCP profile at /.well-known/ucp*, fetched 2026-10-30",
     "date": null,
     "quote": "\"version\":\"2026-08-25\" / weareallbirds.myshopify.com / \"transport\":\"mcp\" / \"transport\":\"embedded\" / com.google.pay / dev.shopify.card / dev.shopify.shop_pay / dev.ucp.shopping.checkout / dev.ucp.common.identity_linking / \"dev.ucp.common\":",
     "ref": 32
    },
    {
     "label": "[33]",
     "url": "https://www.glossier.com/.well-known/ucp",
     "claim": "Glossier, *UCP profile at /.well-known/ucp*, fetched 2026-10-30",
     "date": null,
     "quote": "\"version\":\"2026-08-25\" / glossier-admin.myshopify.com / \"transport\":\"mcp\" / \"transport\":\"embedded\" / com.google.pay / dev.shopify.card / dev.shopify.shop_pay / dev.ucp.shopping.checkout / dev.ucp.common.identity_linking / \"dev.ucp.common\":",
     "ref": 33
    },
    {
     "label": "[34]",
     "url": "https://www.monos.com/.well-known/ucp",
     "claim": "Monos, *UCP profile at /.well-known/ucp*, fetched 2026-10-30",
     "date": null,
     "quote": "\"version\":\"2026-08-25\" / monostravel.myshopify.com / \"transport\":\"mcp\" / \"transport\":\"embedded\" / com.google.pay / dev.shopify.card / dev.shopify.shop_pay / dev.ucp.shopping.checkout / dev.ucp.common.identity_linking / \"dev.ucp.common\":",
     "ref": 34
    },
    {
     "label": "[35]",
     "url": "https://www.stevemadden.com/.well-known/ucp",
     "claim": "Steve Madden, *UCP profile at /.well-known/ucp*, fetched 2026-10-30",
     "date": null,
     "quote": "\"version\":\"2026-08-25\" / stevemadden.myshopify.com / \"transport\":\"mcp\" / \"transport\":\"embedded\" / com.google.pay / dev.shopify.card / dev.shopify.shop_pay / dev.ucp.shopping.checkout / dev.ucp.common.identity_linking",
     "ref": 35
    },
    {
     "label": "[36]",
     "url": "https://fentybeauty.com/.well-known/ucp",
     "claim": "Fenty Beauty, *UCP profile at /.well-known/ucp*, fetched 2026-10-30",
     "date": null,
     "quote": "\"version\":\"2026-08-25\" / fentybeautyshop.myshopify.com / \"transport\":\"mcp\" / \"transport\":\"embedded\" / com.google.pay / dev.shopify.card / dev.shopify.shop_pay / dev.ucp.shopping.checkout / dev.ucp.common.identity_linking",
     "ref": 36
    },
    {
     "label": "[37]",
     "url": "https://www.ikea.com/.well-known/ucp",
     "claim": "IKEA, *UCP profile at /.well-known/ucp*, fetched 2026-10-30",
     "date": null,
     "quote": "\"version\": \"2026-04-08\" / \"2026-08-25\": \"https://ucp.checkout.ingka.com/.well-known/ucp/2026-08-25\" / \"environment\": \"TEST\" / com.google.pay / \"endpoint\": \"https://ucp.checkout.ingka.com/api/us/mcp/messages\" / \"endpoint\": \"https://ucp.checkout.ingka.com/api/us/2026-04-08/rest\" / \"transport\": \"rest\" / dev.ucp.shopping.checkout / dev.ucp.shopping.fulfillment / \"alg\": \"ES256\" / \"version\": \"2026-01-23\"",
     "ref": 37
    },
    {
     "label": "[38]",
     "url": "https://docs.stripe.com/agentic-commerce/protocols/ucp",
     "claim": "Stripe, *Universal Commerce Protocol*, fetched 2026-10-30",
     "date": null,
     "quote": "with support for checkout, identity linking, order tracking, and secure payment token exchange (Stripe is a member of the UCP Tech Council).",
     "ref": 38
    },
    {
     "label": "[39]",
     "url": "https://docs.adyen.com/online-payments/agentic-commerce/agent-platform/ai-agent-integration-ucp",
     "claim": "Adyen, *AI agent API integration with UCP*, fetched 2026-10-30",
     "date": null,
     "quote": "Integrate with the Adyen Agentic API to enable your AI agent platform to make transactions with Adyen merchants using the Universal Commerce Protocol (UCP). / Session operations also require UCP HTTP Message Signatures (RFC 9421) for request integrity and origin verification.",
     "ref": 39
    },
    {
     "label": "[40]",
     "url": "https://corporate.target.com/press/fact-sheet/2026/06/conversational-ai",
     "claim": "Target, *How Target is Shaping Shopping Experiences in Conversational AI*, updated 2026-06-18",
     "date": null,
     "quote": "Shoppers can now browse product listings and buy items directly from Target in Google Search, including AI Mode, and the Gemini app. / The capability comes thanks to the Universal Commerce Protocol (UCP) / Updated 6:00am CT | Jun 18, 2026",
     "ref": 40
    },
    {
     "label": "[41]",
     "url": "https://blog.google/products/ads-commerce/digital-advertising-commerce-2026/",
     "claim": "Vidhya Srinivasan (Google), *What to expect in digital advertising and commerce in 2026*, published 2026-02-11",
     "date": null,
     "quote": "UCP-powered checkout is rolling out now, letting US shoppers buy items from Etsy and Wayfair, right in AI Mode in Search and the Gemini app (with Shopify, Target, and Walmart coming soon). / \"datePublished\": \"2026-02-11T16:00:00+00:00\"",
     "ref": 41
    },
    {
     "label": "[42]",
     "url": "https://www.digitalcommerce360.com/2026/10/12/newegg-adds-google-ucp-checkout-integration/",
     "claim": "Brian Warmoth (Digital Commerce 360), *Newegg adds Google UCP checkout integration*, published 2026-10-12",
     "date": null,
     "quote": "\"datePublished\":\"2026-10-12T22:15:02+00:00\" / announcing that it has integrated Google's Universal Commerce Protocol (UCP) for online checkout. / Newegg remains the merchant of record",
     "ref": 42
    },
    {
     "label": "[43]",
     "url": "https://developers.google.com/merchant/ucp/faq",
     "claim": "Google for Developers, *Google Universal Commerce Protocol (UCP) Guide, FAQ*, fetched 2026-10-30",
     "date": null,
     "quote": "At launch, your UCP integration will power experiences on AI Mode in Google Search, as well as both the Gemini web application and the Gemini mobile app.",
     "ref": 43
    },
    {
     "label": "[44]",
     "url": "https://developers.google.com/pay/api/universal-commerce-protocol/google-pay-payment-handler",
     "claim": "Google for Developers, *Google Pay payment handler for Universal Commerce Protocol*, fetched 2026-10-30",
     "date": null,
     "quote": "Google Pay payment handler for Universal Commerce Protocol (UCP) enables users and merchants to use Google Pay as a credential provider on Google AI surfaces like Gemini and AI Mode. / Google Pay payment handler is identified by the name com.google.pay inside the payment_handlers object.",
     "ref": 44
    },
    {
     "label": "[45]",
     "url": "https://github.com/orgs/Universal-Commerce-Protocol/repositories",
     "claim": "GitHub API, Universal-Commerce-Protocol, *Organization repositories*, fetched 2026-10-30",
     "date": null,
     "quote": "\"name\": \"python-sdk\" / The official Python SDK for UCP / \"name\": \"js-sdk\" / The official JavaScript SDK for UCP / \"name\": \"conformance\" / Conformance Tests for UCP",
     "ref": 45
    },
    {
     "label": "[46]",
     "url": "https://ucpregistry.com/",
     "claim": "UCP Registry, *The Universal Commerce Protocol Registry*, checked 2026-11-06",
     "date": null,
     "quote": "Free Chrome extension that detects UCP manifests on any store you visit. Shows capabilities, payment handlers, transports, AI bot policies, and spec version in one click. / Works on Chrome, Edge, and Brave. / Buy now, pay later platform enabling merchants to offer flexible installment payment options at checkout. / Global payment processing platform providing online payment solutions, fraud detection, and multi-currency support for merchants worldwide. / Vintage-Racewear.com offers a curated collection of vintage motorsport racing jackets and apparel with UCP-enabled order, checkout, discount, and fulfillment. / Verified 204 days ago",
     "ref": 46
    },
    {
     "label": "[47]",
     "url": "https://ucp.dev/",
     "claim": "Universal Commerce Protocol, *Universal Commerce Protocol*, checked 2026-11-06",
     "date": null,
     "quote": "Co-developed by industry leaders / Expedia Group / Booking.com / Uber Eats / DoorDash / Salesforce",
     "ref": 47
    }
   ],
   "form": "well-known-file",
   "governance": "A Governing Council (GC) of five seats: one permanent seat each for the founding organizations, Google and Shopify, and three elected seats. On 2026-10-28 the seats were held by Google, Shopify and Stripe, with two open; Stripe joined on 2026-04-28. GOVERNANCE.md says \"GC serves as the ultimate owner of all UCP assets. Google acts as the custodian of the UCP.dev domain, holding and managing it to foster adoption of UCP.\" and \"Google holds proxy vote for all open seats until Dec 2028 to facilitate rapid early stage growth & adoption of the protocol.\". Four Domain Tech Councils write the specification: Shopping, Food (formed 2026-07-16; initial members Block (Square), DoorDash, Google, Toast and Uber Eats), Lodging (formed 2026-08-11; inaugural members Amadeus, Booking.com, Expedia, Google, Hilton, Marriott and Trip.com) and Payments (formed 2026-09-02; inaugural members Adyen NV, Ant International, Coinbase, Global Payments, Google, PayPal, Shopify and Stripe); of the GC, GOVERNANCE.md says \"May choose to review and veto a DTC decision or recommendation.\". Apache-2.0 licence; contributors sign a CLA",
   "group": null,
   "hatnote_md": "This page is about the Universal Commerce Protocol (UCP) co-developed by Google and Shopify. It is not the [Agentic Commerce Protocol](https://agenticweb.wiki/protocols/agentic-commerce-protocol/) (ACP) maintained by OpenAI and Stripe, nor the [Agent Payments Protocol (AP2)](https://agenticweb.wiki/protocols/ap2/) (which integrates with UCP via the AP2 Mandates extension). It is also distinct from Google's UCP-powered Universal Cart consumer feature, the SMSC Universal Computer Protocol, and Oracle's Universal Connection Pool.",
   "history": [
    {
     "date": "2026-10-28",
     "note": "Verified record against 41 primary and secondary sources."
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "ucp",
   "implementation": "multi-implementation",
   "last_verified": "2026-11-06",
   "name": "Universal Commerce Protocol (UCP)",
   "native_status": "Live. Dated releases since 2026-01-11; ucp.dev also publishes a \"draft\" version, which on 2026-10-28 held the Lodging Booking capability (dev.ucp.lodging.booking), announced as a draft on 2026-09-25",
   "origin": {
    "date": "2026-01-11",
    "org": "Google and Shopify"
   },
   "pairs_with": [
    "agentic-commerce-protocol",
    "ap2",
    "mcp",
    "a2a",
    "http-message-signatures"
   ],
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "living",
   "prerequisites": [],
   "probe": {
    "method": "GET",
    "on_absent": "A missing or non-JSON response at /.well-known/ucp means the origin does not declare UCP capabilities.",
    "parse": "200 response with a UCP profile JSON document declaring supported Capabilities and Services",
    "path": "{origin}/.well-known/ucp"
   },
   "question": "Can an agent discover a business's commerce capabilities, build a cart, and check out interoperably across shopping, lodging, and food ordering?",
   "scope": "commerce",
   "spec_url": "https://ucp.dev/latest/specification/overview/",
   "step": "pay",
   "summary_md": "**Universal Commerce Protocol** (`UCP`) is an open standard co-developed by Google and Shopify (announced 2026-01-11 and governed by a five-seat Governing Council) that enables AI agents, platforms, and merchants to interoperate across commerce workflows. Each participant publishes a JSON profile document containing a required `ucp` object that declares the protocol version, supported services, optional capabilities, and payment handlers. Businesses publish their profile at `/.well-known/ucp`, while platforms advertise their profile URI in every request via the `UCP-Agent` header (formatted over HTTP using RFC 8941 Dictionary Structured Field syntax). Services declared in a business profile can bind to REST over HTTP/1.1+, Model Context Protocol (`MCP`) over JSON-RPC, Agent2Agent (`A2A`) extensions, or the iframe-based Embedded Protocol (`EP`). UCP uses date-based versioning (`YYYY-MM-DD`), with `2026-08-25` designated as `latest` alongside prior releases (`2026-04-08`, `2026-01-23`, and `2026-01-11`) and an active `draft` specification track.",
   "track": "vendor-consortium",
   "use_cases": [
    "agent-checkout",
    "delegate-user-authority",
    "audit-agent-actions"
   ],
   "version": {
    "date": "2026-08-25",
    "label": "2026-08-25, marked \"latest\" on ucp.dev. Releases on GitHub: v2026-08-25 (published 2026-08-25), v2026-04-08 (published 2026-04-09 UTC), v2026-01-23 (published 2026-01-23) and v2026-01-11 (published on GitHub on 2026-01-23; the announcements page dates the release 2026-01-11)"
   },
   "watch": [
    {
     "cadence": "weekly",
     "selector": "main",
     "type": "page",
     "url": "https://ucp.dev/documentation/core-concepts/"
    },
    {
     "repo": "Universal-Commerce-Protocol/ucp",
     "type": "github"
    }
   ],
   "tier": "flagship",
   "lifecycle_status": "active",
   "wire_archetype": "payments_onchain",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-06",
   "v05_hatnote_html_md": "This page is about the Universal Commerce Protocol (UCP) co-developed by Google and Shopify. It is not the [Agentic Commerce Protocol](/protocols/agentic-commerce-protocol/) (ACP) maintained by OpenAI and Stripe, nor the [Agent Payments Protocol (AP2)](/protocols/ap2/) (which integrates with UCP via the AP2 Mandates extension). It is also distinct from Google's UCP-powered Universal Cart consumer feature, the SMSC Universal Computer Protocol, and Oracle's Universal Connection Pool. [1][2][3][4][5][6][7][8][9][10][11]",
   "v05_elevator_pitch_md": "UCP (Universal Commerce Protocol) is a cross-platform discovery and capability-negotiation standard that allows AI shopping platforms, consumer agents, and online merchants to transact across REST, MCP, and A2A transports while the seller remains the merchant of record. Instead of building custom point-to-point integrations for every retail platform, a business publishes its supported services and payment handlers at `/.well-known/ucp` and computes the active capability intersection (such as `dev.ucp.shopping.checkout`) against the caller's `UCP-Agent` profile header. [5][12]",
   "v05_lead_md": "**Universal Commerce Protocol** (`UCP`) is an open standard co-developed by Google and Shopify (announced 2026-01-11 and governed by a five-seat Governing Council) that enables AI agents, platforms, and merchants to interoperate across commerce workflows. Each participant publishes a JSON profile document containing a required `ucp` object that declares the protocol version, supported services, optional capabilities, and payment handlers. [2][3][4][5][12][13] Businesses publish their profile at `/.well-known/ucp`, while platforms advertise their profile URI in every request via the `UCP-Agent` header (formatted over HTTP using RFC 8941 Dictionary Structured Field syntax). Services declared in a business profile can bind to REST over HTTP/1.1+, Model Context Protocol (`MCP`) over JSON-RPC, Agent2Agent (`A2A`) extensions, or the iframe-based Embedded Protocol (`EP`). [5][12][14] UCP uses date-based versioning (`YYYY-MM-DD`), with `2026-08-25` designated as `latest` alongside prior releases (`2026-04-08`, `2026-01-23`, and `2026-01-11`) and an active `draft` specification track. [5][15][16][17]",
   "v05_identity_sentence_md": "**Universal Commerce Protocol** (`UCP`) is an open standard co-developed by Google and Shopify (announced 2026-01-11 and governed by a five-seat Governing Council) that enables AI agents, platforms, and merchants to interoperate across commerce workflows. Each participant publishes a JSON profile document containing a required `ucp` object that declares the protocol version, supported services, optional capabilities, and payment handlers. [2][3][4][5][12][13]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Pay](/category/pay/) (`pay`)"
    },
    {
     "label": "Form",
     "value_md": "Well-known file (`well-known-file`)"
    },
    {
     "label": "Originated by",
     "value_md": "Google and Shopify, announced 2026-01-11; GitHub repository created 2025-12-31. [2][3][4][18]"
    },
    {
     "label": "Governed by",
     "value_md": "Five-seat Governing Council (permanent founding seats for Google and Shopify, plus Stripe as elected member; Google holds proxy votes for open seats until Dec 2028). [13][17][19]"
    },
    {
     "label": "Track",
     "value_md": "Vendor consortium (`vendor-consortium`), co-developed by founding members Google and Shopify. [2][13]"
    },
    {
     "label": "Status",
     "value_md": "Released `2026-08-25` (`latest` alias); `draft` track includes the `dev.ucp.lodging.booking` capability. [15][17][20]"
    },
    {
     "label": "Version",
     "value_md": "Release `2026-08-25` (aliased as `latest`), alongside an active `draft` build branch. [15][16][21]"
    },
    {
     "label": "Found at",
     "value_md": "Businesses publish profiles at `/.well-known/ucp`; platforms publish profiles at the URI advertised in `UCP-Agent`. [5]"
    },
    {
     "label": "Headers",
     "value_md": "`UCP-Agent` (required RFC 8941 Dictionary Structured Field on REST requests) and `Content-Type: application/json` (required on requests and responses; endpoint URIs should omit trailing slashes). [5]"
    },
    {
     "label": "Transports",
     "value_md": "REST over HTTP/1.1+, Model Context Protocol (MCP) over JSON-RPC, optional Agent2Agent (A2A) extension, and the Embedded Protocol (EP) iframe or webview binding. [5][14][21][22]"
    },
    {
     "label": "Message format",
     "value_md": "JSON profile object with a required `ucp` member declaring protocol version, services, optional capabilities, and payment handlers. [5][21]"
    },
    {
     "label": "Specification",
     "value_md": "[Overview](https://ucp.dev/latest/specification/overview/) (`latest` = `2026-08-25`). [12][15][18]"
    },
    {
     "label": "Licence",
     "value_md": "Apache License 2.0 (contributors sign a contributor license agreement). [13][18][21]"
    },
    {
     "label": "IANA registration",
     "value_md": "Provisional well-known URI suffix `ucp` (`/.well-known/ucp`), registered `2026-10-26` (contact: Ilya Grigorik). [23]"
    }
   ],
   "v05_problem_md": "As commerce becomes increasingly agentic and distributed, the ability for different systems to interoperate without custom, one-off integrations is vital. [21] Capability negotiation follows a server-selects architecture: a business computes the intersection between its own `/.well-known/ucp` profile and the caller's platform profile across reverse-domain capabilities (such as `dev.ucp.shopping.checkout`), selecting the latest mutually supported date version and confirming the active feature set in every response. [12] In transactional contexts, the business typically acts as the Merchant of Record (MoR), retaining financial liability and ownership of the transaction, though UCP's capability model is not limited to transactional use cases. [12]",
   "v05_mechanism_delta_md": "Capability negotiation follows a server-selects architecture: a business computes the intersection between its own `/.well-known/ucp` profile and the caller's platform profile across reverse-domain capabilities (such as `dev.ucp.shopping.checkout`), selecting the latest mutually supported date version and confirming the active feature set in every response. [12]",
   "v05_scope_boundary_md": "In transactional contexts, the business typically acts as the Merchant of Record (MoR), retaining financial liability and ownership of the transaction, though UCP's capability model is not limited to transactional use cases. [12]",
   "v05_fuzzy_additions": [
    {
     "id": "well-known-profile-discovery-capability-intersection-and-transport-bindings",
     "heading": "Well-known profile discovery, capability intersection, and transport bindings",
     "body_md": "Before initiating a request, a platform may fetch a merchant's `/.well-known/ucp` document and must include its own profile URI in every request via the transport-appropriate `UCP-Agent` mechanism. After computing the capability intersection between the two profiles, the business must return a `ucp` object in every response containing the active `version` and `capabilities` array. [5]",
     "bullets": [
      {
       "label": "Reverse-domain capability names",
       "text_md": "All capability and service identifiers must follow the `{reverse-domain}.{service}.{capability}` grammar, where `{reverse-domain}` is an authority identifier derived from domain ownership; for example, `dev.ucp.shopping.checkout` pairs authority `ucp.dev` with service `shopping` in the profile at `/.well-known/ucp`. [5][12]"
      },
      {
       "label": "Date-based version intersection",
       "text_md": "Negotiation proceeds in two phases using `YYYY-MM-DD` date strings: protocol version selection first chooses one complete business profile, and capability negotiation then selects active capabilities and extensions by exact version intersection within that profile, picking the highest (latest date) match. [5][12]"
      },
      {
       "label": "Extensions and schema composition",
       "text_md": "Extensions declare parent capabilities via the `extends` field (as a single string or an array of parent names, at least one of which must be present in the active intersection) and modify base JSON Schemas using `allOf` composition, which platforms must resolve and compose client-side. [5]"
      },
      {
       "label": "REST, MCP, A2A, and Embedded bindings",
       "text_md": "A single service entry inherits `ucp.version` and can expose multiple transport bindings—REST (OpenAPI 3.1.0), MCP (OpenRPC), A2A extensions, and Embedded Protocol (`EP`)—without separate per-binding versions; `EP` embeds a merchant interface inside an iframe or webview and exchanges JSON-RPC 2.0 messages. [5][12][14]"
      }
     ]
    },
    {
     "id": "payment-handlers-ap2-mandates-and-ecosystem-governance",
     "heading": "Payment handlers, AP2 mandates, and ecosystem governance",
     "body_md": "UCP models transactions across four distinct actor roles: the platform (which consumes business capabilities), the business (which exposes them), the credential provider (CP, which manages sensitive payment instruments), and the payment service provider (PSP, which processes payments on behalf of businesses; CP and PSP are collectively termed the Payment Credential Provider). [12]",
     "bullets": [
      {
       "label": "Actor duties and Domain Technical Councils",
       "text_md": "In an interaction, the platform discovers business profiles and invokes capabilities on behalf of its principal within negotiated bounds, while the business publishes its profile and declares supported services, capabilities, and extensions. Specification work is divided across four Domain Tech Councils: Shopping, Food (formed July 16, 2026), Lodging (formed August 11, 2026), and Payments (formed September 2, 2026). [12][13][17][19]"
      },
      {
       "label": "Instruments versus payment handlers",
       "text_md": "UCP separates Payment Instruments (what payment methods are accepted) from Payment Handlers (the specifications for how instruments are processed, which are specifications rather than legal entities). Reverse-domain handler identifiers such as `com.google.pay` and `dev.shopify.shop_pay` correspond to Google Pay and Shop Pay, and businesses must filter advertised handlers based on the cart context. [5]"
      },
      {
       "label": "AP2 mandates and the FIDO donation",
       "text_md": "The AP2 Mandates extension (`dev.ucp.common.payment.ap2_mandate` in `/.well-known/ucp`, version `2026-08-25`) exchanges user intents and authorizations as Verifiable Digital Credentials: when a session is Security Locked, businesses must embed a cryptographic signature in checkout responses and platforms must supply signed mandates during completion. Google donated AP2 to the FIDO Alliance on 2026-04-28. [8][24]"
      },
      {
       "label": "Dated releases through 2026-08-25",
       "text_md": "Following the initial `2026-01-11` launch and `2026-01-23` update, UCP published `v2026-04-08` (tagged 2026-04-09 on GitHub) and `v2026-08-25` (`latest`), alongside an active `draft` track. Ultimate ownership of all UCP assets rests with the Governing Council, where Stripe joined founding members Google and Shopify on April 28, 2026. [13][15][16][17]"
      }
     ]
    }
   ],
   "v05_diagram": {
    "title": "Discovery and capability intersection",
    "heading": "Discovery and capability intersection",
    "mermaid": "sequenceDiagram\n  participant Platform\n  participant Business\n  opt Discovery\n    Platform->>Business: fetch /.well-known/ucp\n    Business-->>Platform: business profile\n  end\n  Platform->>Business: UCP-Agent profile URI\n  Note over Business: fetch platform profile, capability intersection\n  Business-->>Platform: ucp version and capabilities",
    "caption_md": "The platform may fetch `/.well-known/ucp`, then sends its profile URI in `UCP-Agent`. The business returns `version` and `capabilities`. [5]"
   },
   "v05_wire_artifact": {
    "title": "Business profile at `/.well-known/ucp`",
    "heading": "Business profile at `/.well-known/ucp`",
    "lang": "json",
    "code": "{\n  \"ucp\": {\n    \"version\": \"2026-08-25\",\n    \"services\": {\n      \"dev.ucp.shopping\": [\n        {\n          \"version\": \"2026-08-25\",\n          \"spec\": \"https://ucp.dev/2026-08-25/specification/overview/\",\n          \"transport\": \"rest\",\n          \"endpoint\": \"https://business.example.com/ucp/v1\",\n          \"schema\": \"https://ucp.dev/2026-08-25/services/shopping/rest.openapi.json\"\n        },\n        {\n          \"version\": \"2026-08-25\",\n          \"spec\": \"https://ucp.dev/2026-08-25/specification/overview/\",\n          \"transport\": \"mcp\",\n          \"endpoint\": \"https://business.example.com/ucp/mcp\",\n          \"schema\": \"https://ucp.dev/2026-08-25/services/shopping/mcp.openrpc.json\"\n        },\n        {\n          \"version\": \"2026-08-25\",\n          \"spec\": \"https://ucp.dev/2026-08-25/specification/overview/\",\n          \"transport\": \"a2a\",\n          \"endpoint\": \"https://business.example.com/.well-known/agent-card.json\"\n        },\n        {\n          \"version\": \"2026-08-25\",\n          \"spec\": \"https://ucp.dev/2026-08-25/specification/overview/\",\n          \"transport\": \"embedded\",\n          \"schema\": \"https://ucp.dev/2026-08-25/services/shopping/embedded.openrpc.json\"\n        }\n      ]\n    },\n    \"capabilities\": {\n      \"dev.ucp.shopping.checkout\": [\n        {\n          \"version\": \"2026-08-25\",\n          \"spec\": \"https://ucp.dev/2026-08-25/specification/shopping/checkout\",\n          \"schema\": \"https://ucp.dev/2026-08-25/schemas/shopping/checkout.json\"\n        }\n      ],\n      \"dev.ucp.shopping.fulfillment\": [\n        {\n          \"version\": \"2026-08-25\",\n          \"spec\": \"https://ucp.dev/2026-08-25/specification/shopping/extensions/fulfillment\",\n          \"schema\": \"https://ucp.dev/2026-08-25/schemas/shopping/fulfillment.json\",\n          \"extends\": \"dev.ucp.shopping.checkout\"\n        }\n      ],\n      \"dev.ucp.shopping.discount\": [\n        {\n          \"version\": \"2026-08-25\",\n          \"spec\": \"https://ucp.dev/2026-08-25/specification/shopping/extensions/discount\",\n          \"schema\": \"https://ucp.dev/2026-08-25/schemas/shopping/discount.json\",\n          \"extends\": \"dev.ucp.shopping.checkout\"\n        }\n      ],\n      \"dev.ucp.common.identity_linking\": [\n        {\n          \"version\": \"2026-08-25\",\n          \"spec\": \"https://ucp.dev/2026-08-25/specification/common/identity-linking/\",\n          \"schema\": \"https://ucp.dev/2026-08-25/schemas/common/identity_linking.json\",\n          \"config\": {\n            \"providers\": {\n              \"com.example.idp\": [\n                { \"type\": \"oauth2\", \"auth_url\": \"https://accounts.example.com/\" }\n              ]\n            },\n            \"scopes\": {\n              \"dev.ucp.shopping.order:read\":   {},\n              \"dev.ucp.shopping.order:manage\": {}\n            }\n          }\n        }\n      ]\n    },\n    \"payment_handlers\": {\n      \"com.example.processor_tokenizer\": [\n        {\n          \"id\": \"processor_tokenizer\",\n          \"version\": \"2026-08-25\",\n          \"spec\": \"https://example.com/specs/payments/processor_tokenizer\",\n          \"schema\": \"https://example.com/specs/payments/merchant_tokenizer.json\",\n          \"available_instruments\": [\n            {\n              \"type\": \"card\",\n              \"constraints\": {\n                \"properties\": { \"brand\": { \"enum\": [\"visa\", \"mastercard\", \"amex\"] } }\n              }\n            }\n          ],\n          \"config\": {\n            \"type\": \"CARD\",\n            \"tokenization_specification\": {\n              \"type\": \"PUSH\",\n              \"parameters\": {\n                \"token_retrieval_url\": \"https://api.psp.example.com/v1/tokens\"\n              }\n            }\n          }\n        }\n      ]\n    }\n  },\n  \"keys\": [\n    {\n      \"kid\": \"poqkLGiymh_W0uP6PZFw-dvez3QJT5SolqXBCW38r0U\",\n      \"kty\": \"OKP\",\n      \"crv\": \"Ed25519\",\n      \"x\": \"JrQLj5P_89iXES9-vFgrIy29clF9CC_oPPsw3c5D0bs\",\n      \"use\": \"sig\",\n      \"alg\": \"EdDSA\"\n    },\n    {\n      \"kid\": \"business_2025\",\n      \"kty\": \"EC\",\n      \"crv\": \"P-256\",\n      \"x\": \"qIVYZVLCrPZHGHjP17CTW0_-D9Lfw0EkjqF7xB4FivA\",\n      \"y\": \"Mc4nN9LTDOBhfoUeg8Ye9WedFRhnZXZJA12Qp0zZ6F0\",\n      \"use\": \"sig\",\n      \"alg\": \"ES256\"\n    }\n  ]\n}",
    "caption_md": "Business profile published at `/.well-known/ucp`, with `version` `2026-08-25`, `services`, `capabilities`, `payment_handlers`, and `keys`. [5]"
   },
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "Well-Known URIs (RFC 8615)",
      "spec_or_rfc": "RFC 8615",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "Business profile at /.well-known/ucp; platform profile URI is advertised in UCP-Agent. [5]"
     },
     {
      "name": "W3C Payment Request API & Web Checkout",
      "spec_or_rfc": "W3C Payment Request",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "UCP lists payment handlers on /.well-known/ucp; Payment Request is the browser checkout API. [5][14]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "agentic-commerce-protocol",
      "target_name": "Agentic Commerce Protocol",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ACP (OpenAI and Stripe, beta) uses its own checkout; UCP publishes /.well-known/ucp payment handlers. [5][6]"
     },
     {
      "target_id": "ap2",
      "target_name": "Agent Payments Protocol (AP2)",
      "relation_type": "depended_on_by",
      "relation_label": "Depended on by",
      "delta_md": "AP2 is a compatible security feature; UCP's AP2 Mandates extension carries verifiable credentials. [7][8][25]"
     },
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "MCP is JSON-RPC 2.0; UCP checkout advertises MCP and calls tools/call. [5][26][27]"
     },
     {
      "target_id": "a2a",
      "target_name": "Agent2Agent Protocol (A2A)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "A2A is Agent Card JSON-RPC; UCP checkout must be advertised on that card. [22][28]"
     },
     {
      "target_id": "http-message-signatures",
      "target_name": "HTTP Message Signatures",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "RFC 9421 signs HTTP messages; UCP signs its messages and adds EdDSA for Web Bot Auth. [29][30]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (20 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).",
    "side_a": {
     "visible": true,
     "heading": "Merchants, platforms & payment processors",
     "col4_header": "`/.well-known/ucp` profile capabilities, transport & payment handlers",
     "note_md": null,
     "rows": [
      {
       "actor": "Shopify",
       "role": "Platform (Co-author)",
       "status": "Supported",
       "status_display": "Supported · as of 2026-03-24",
       "col4_md": "Select brands sell in AI Mode and Gemini on co-developed UCP.",
       "source_md": "[Shopify News (datePublished 2026-03-24)](https://www.shopify.com/news/agentic-commerce-momentum) [31] · [Shopify Engineering, UCP](https://shopify.engineering/ucp) [2]"
      },
      {
       "actor": "Allbirds",
       "role": "Seller (Shopify merchant)",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "`2026-08-25` via `mcp` and `embedded`; `com.google.pay`, `dev.shopify.card`, `dev.shopify.shop_pay`.",
       "source_md": "[Allbirds UCP profile](https://www.allbirds.com/.well-known/ucp) [32]"
      },
      {
       "actor": "Glossier",
       "role": "Seller (Shopify merchant)",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "`2026-08-25` via `mcp` and `embedded`; `com.google.pay`, `dev.shopify.card`, `dev.shopify.shop_pay`.",
       "source_md": "[Glossier UCP profile](https://www.glossier.com/.well-known/ucp) [33]"
      },
      {
       "actor": "Monos",
       "role": "Seller (Shopify merchant)",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "`2026-08-25` via `mcp` and `embedded`; `com.google.pay`, `dev.shopify.card`, `dev.shopify.shop_pay`.",
       "source_md": "[Monos UCP profile](https://www.monos.com/.well-known/ucp) [34]"
      },
      {
       "actor": "Steve Madden",
       "role": "Seller (Shopify merchant)",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "`2026-08-25` via `mcp` and `embedded`; `com.google.pay`, `dev.shopify.card`, `dev.shopify.shop_pay`.",
       "source_md": "[Steve Madden UCP profile](https://www.stevemadden.com/.well-known/ucp) [35]"
      },
      {
       "actor": "Fenty Beauty",
       "role": "Seller (Shopify merchant)",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "`2026-08-25` via `mcp` and `embedded`; `com.google.pay`, `dev.shopify.card`, `dev.shopify.shop_pay`.",
       "source_md": "[Fenty Beauty UCP profile](https://fentybeauty.com/.well-known/ucp) [36]"
      },
      {
       "actor": "IKEA (Ingka)",
       "role": "Retailer (Custom UCP endpoint)",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Active `2026-04-08` on `mcp` and `rest`; `com.google.pay` environment is `TEST`.",
       "source_md": "[IKEA UCP profile](https://www.ikea.com/.well-known/ucp) [37]"
      },
      {
       "actor": "Stripe",
       "role": "Payment processor (Governing Council)",
       "status": "Supported",
       "status_display": "Supported · as of 2026-09-02",
       "col4_md": "Checkout, identity linking, order tracking, and payment-token exchange.",
       "source_md": "[Stripe UCP docs (checked 2026-10-30)](https://docs.stripe.com/agentic-commerce/protocols/ucp) [38] · [UCP announcements](https://ucp.dev/documentation/announcements/) [17] · [UCP MAINTAINERS.md](https://raw.githubusercontent.com/Universal-Commerce-Protocol/.github/main/MAINTAINERS.md) [19]"
      },
      {
       "actor": "Adyen",
       "role": "Payment processor",
       "status": "Supported",
       "status_display": "Supported · as of 2026-09-02",
       "col4_md": "Agentic API transacts with Adyen merchants; sessions require RFC 9421.",
       "source_md": "[Adyen UCP docs (checked 2026-10-30)](https://docs.adyen.com/online-payments/agentic-commerce/agent-platform/ai-agent-integration-ucp) [39] · [UCP announcements](https://ucp.dev/documentation/announcements/) [17] · [UCP MAINTAINERS.md](https://raw.githubusercontent.com/Universal-Commerce-Protocol/.github/main/MAINTAINERS.md) [19]"
      },
      {
       "actor": "Visa",
       "role": "Payment network (endorser)",
       "status": "Listed",
       "status_display": "Listed · as of 2026-01-11",
       "col4_md": "Named among more than 20 launch endorsers on 2026-01-11.",
       "source_md": "[Google, UCP launch (2026-01-11)](https://blog.google/products/ads-commerce/agentic-commerce-ai-tools-protocol-retailers-platforms/) [4]"
      },
      {
       "actor": "Mastercard",
       "role": "Payment network (endorser)",
       "status": "Listed",
       "status_display": "Listed · as of 2026-01-11",
       "col4_md": "Launch-post endorser on 2026-01-11; no handler id in that sentence.",
       "source_md": "[Google, UCP launch (2026-01-11)](https://blog.google/products/ads-commerce/agentic-commerce-ai-tools-protocol-retailers-platforms/) [4]"
      },
      {
       "actor": "Target",
       "role": "Retailer (co-developer)",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-15",
       "col4_md": "Buy in Google Search AI Mode and Gemini via UCP; Universal Cart merchant.",
       "source_md": "[Target fact sheet (updated Jun 18, 2026)](https://corporate.target.com/press/fact-sheet/2026/06/conversational-ai) [40] · [Google, UCP launch (2026-01-11)](https://blog.google/products/ads-commerce/agentic-commerce-ai-tools-protocol-retailers-platforms/) [4] · [Google, Universal Cart (2026-10-15)](https://blog.google/products-and-platforms/products/shopping/universal-cart-launch/) [9]"
      },
      {
       "actor": "Wayfair",
       "role": "Retailer (co-developer)",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-15",
       "col4_md": "Co-developer; 2026-02-11 UCP checkout rollout; Universal Cart merchant.",
       "source_md": "[Google, UCP launch (2026-01-11)](https://blog.google/products/ads-commerce/agentic-commerce-ai-tools-protocol-retailers-platforms/) [4] · [Google, advertising and commerce (2026-02-11)](https://blog.google/products/ads-commerce/digital-advertising-commerce-2026/) [41] · [Google, Universal Cart (2026-10-15)](https://blog.google/products-and-platforms/products/shopping/universal-cart-launch/) [9]"
      },
      {
       "actor": "Walmart",
       "role": "Retailer (co-developer)",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-15",
       "col4_md": "Co-developer; coming soon on 2026-02-11; listed on Universal Cart.",
       "source_md": "[Google, UCP launch (2026-01-11)](https://blog.google/products/ads-commerce/agentic-commerce-ai-tools-protocol-retailers-platforms/) [4] · [Google, advertising and commerce (2026-02-11)](https://blog.google/products/ads-commerce/digital-advertising-commerce-2026/) [41] · [Google, Universal Cart (2026-10-15)](https://blog.google/products-and-platforms/products/shopping/universal-cart-launch/) [9]"
      },
      {
       "actor": "Etsy",
       "role": "Retailer (co-developer)",
       "status": "Supported",
       "status_display": "Supported · as of 2026-02-11",
       "col4_md": "Co-developer; 2026-02-11 UCP checkout for US shoppers in AI Mode.",
       "source_md": "[Google, UCP launch (2026-01-11)](https://blog.google/products/ads-commerce/agentic-commerce-ai-tools-protocol-retailers-platforms/) [4] · [Google, advertising and commerce (2026-02-11)](https://blog.google/products/ads-commerce/digital-advertising-commerce-2026/) [41] · [Shopify Engineering, UCP](https://shopify.engineering/ucp) [2]"
      },
      {
       "actor": "Newegg",
       "role": "Retailer",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-12",
       "col4_md": "Integrated UCP for online checkout (2026-10-12) as merchant of record.",
       "source_md": "[Digital Commerce 360, Newegg UCP checkout (2026-10-12)](https://www.digitalcommerce360.com/2026/10/12/newegg-adds-google-ucp-checkout-integration/) [42]"
      },
      {
       "actor": "PayPal",
       "role": "Payment processor (Payments TC)",
       "status": "Listed",
       "status_display": "Listed · as of 2026-09-02",
       "col4_md": "Inaugural member of the UCP Payments Technical Council (formed September 2, 2026).",
       "source_md": "[UCP announcements](https://ucp.dev/documentation/announcements/) [17]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Buying agents, wallets & client SDKs",
     "col4_header": "Supported capabilities, payment handler & conformance",
     "note_md": null,
     "rows": [
      {
       "actor": "Google (AI Mode in Search & Gemini app)",
       "role": "Buying agent / AI surface (Co-author)",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-15",
       "col4_md": "U.S. Universal Cart on Search and Gemini; checkout powered by UCP.",
       "source_md": "[Google, Universal Cart (2026-10-15)](https://blog.google/products-and-platforms/products/shopping/universal-cart-launch/) [9] · [Google Merchant UCP FAQ](https://developers.google.com/merchant/ucp/faq) [43]"
      },
      {
       "actor": "Google Pay",
       "role": "Wallet",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-15",
       "col4_md": "`com.google.pay` on Gemini and AI Mode; checkout in Universal Cart.",
       "source_md": "[Google Pay UCP handler (checked 2026-10-30)](https://developers.google.com/pay/api/universal-commerce-protocol/google-pay-payment-handler) [44] · [Google, Universal Cart (2026-10-15)](https://blog.google/products-and-platforms/products/shopping/universal-cart-launch/) [9]"
      },
      {
       "actor": "Universal-Commerce-Protocol Official SDKs",
       "role": "Client SDK & conformance suite",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-30",
       "col4_md": "Official `python-sdk`, `js-sdk`, and `conformance` repositories.",
       "source_md": "[GitHub org repos (checked 2026-10-30)](https://github.com/orgs/Universal-Commerce-Protocol/repositories) [45]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [
     {
      "label": "Shopify merchant /.well-known/ucp profiles",
      "as_of": "2026-10-30",
      "value_md": "Five probed Shopify storefronts (Allbirds, Glossier, Monos, Steve Madden, and Fenty Beauty) each declare ucp version 2026-08-25. [32][33][34][35][36]"
     },
     {
      "label": "Google, UCP launch",
      "as_of": "2026-01-11",
      "value_md": "The launch post says UCP was endorsed by more than 20 others across the ecosystem, and names Adyen, American Express, Best Buy, Flipkart, Macy's Inc., Mastercard, Stripe, The Home Depot, Visa and Zalando. [4]"
     },
     {
      "label": "ucp.dev versions.json",
      "as_of": "2026-08-25",
      "value_md": "ucp.dev versions.json aliases latest to version 2026-08-25 and lists a separate draft entry with an empty aliases array. [15]"
     },
     {
      "label": "UCP Registry",
      "as_of": "2026-11-06",
      "value_md": "The UCP Registry lists the UCP Checker Extension, a Chrome, Edge, and Brave scanner that shows capabilities, payment handlers, transports, AI bot policies, and spec version. Verified entries on the same directory include Affirm, Checkout.com, and vintage-racewear.com (Shopify; UCP-enabled order, checkout, discount, and fulfillment; 133ms). [46]"
     },
     {
      "label": "ucp.dev homepage",
      "as_of": "2026-11-06",
      "value_md": "The UCP homepage co-developer roster names Google, Shopify, Etsy, Wayfair, Target, Walmart, Amazon, Microsoft, Meta, Salesforce, Stripe, Amadeus, Booking.com, Expedia Group, Hilton, Marriott, Trip.com, DoorDash, Square, Toast, and Uber Eats. [47]"
     }
    ],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "ap2-checkout-mandate",
     "target_name": "AP2 Checkout Mandate",
     "relation_label": "Depended on by",
     "delta": "AP2 v0.2 Checkout Mandate rides on UCP's profile and optional AP2 Mandates extension.",
     "item_md": "**[AP2 Checkout Mandate](/protocols/ap2-checkout-mandate/)** (Depended on by) — AP2 v0.2 Checkout Mandate rides on UCP's profile and optional AP2 Mandates extension."
    },
    {
     "target_id": "emv-agentic-payments",
     "target_name": "EMV® Agentic Payments – Framework for Specifications",
     "relation_label": "Complements",
     "delta": "UCP is a /.well-known/ucp profile with payment handlers; EMV is a card-scheme draft framework.",
     "item_md": "**[EMV® Agentic Payments – Framework for Specifications](/protocols/emv-agentic-payments/)** (Complements) — UCP is a /.well-known/ucp profile with payment handlers; EMV is a card-scheme draft framework."
    },
    {
     "target_id": "amp-ant",
     "target_name": "Agentic Mobile Protocol (AMP)",
     "relation_label": "Complements",
     "delta": "UCP publishes /.well-known/ucp handlers; AMP uses Agent ID, mandates, and a CGCP token.",
     "item_md": "**[Agentic Mobile Protocol (AMP)](/protocols/amp-ant/)** (Complements) — UCP publishes /.well-known/ucp handlers; AMP uses Agent ID, mandates, and a CGCP token."
    },
    {
     "target_id": "vi",
     "target_name": "Verifiable Intent",
     "relation_label": "Complements",
     "delta": "UCP is the checkout surface; Verifiable Intent adds an SD-JWT consent chain.",
     "item_md": "**[Verifiable Intent](/protocols/vi/)** (Complements) — UCP is the checkout surface; Verifiable Intent adds an SD-JWT consent chain."
    },
    {
     "target_id": "agent-attribution-protocol",
     "target_name": "Agent Attribution Protocol",
     "relation_label": "Complements",
     "delta": "UCP is the commerce surface; an AAP Code attributes a recommend() offer.",
     "item_md": "**[Agent Attribution Protocol](/protocols/agent-attribution-protocol/)** (Complements) — UCP is the commerce surface; an AAP Code attributes a recommend() offer."
    },
    {
     "item_md": "**[Pay protocols](/category/pay/)** — Category index for `pay` standards."
    }
   ],
   "v05_compiled_md": "---\nid: ucp\ntitle: \"Universal Commerce Protocol (UCP)\"\ntier: flagship\nlifecycle_status: active\ncategory: pay\nform: well-known-file\nwire_archetype: payments_onchain\nspec_url: https://ucp.dev/latest/specification/overview/\nlast_checked: 2026-11-06\n---\n\n# Universal Commerce Protocol (UCP)\n\n**Category:** [Pay](/category/pay/) (`pay`) · **Form:** Well-known file (`well-known-file`) · **Last checked:** 2026-11-06\n\n> *This page is about the Universal Commerce Protocol (UCP) co-developed by Google and Shopify. It is not the [Agentic Commerce Protocol](/protocols/agentic-commerce-protocol/) (ACP) maintained by OpenAI and Stripe, nor the [Agent Payments Protocol (AP2)](/protocols/ap2/) (which integrates with UCP via the AP2 Mandates extension). It is also distinct from Google's UCP-powered Universal Cart consumer feature, the SMSC Universal Computer Protocol, and Oracle's Universal Connection Pool. [1][2][3][4][5][6][7][8][9][10][11]*\n\n> **In brief:** UCP (Universal Commerce Protocol) is a cross-platform discovery and capability-negotiation standard that allows AI shopping platforms, consumer agents, and online merchants to transact across REST, MCP, and A2A transports while the seller remains the merchant of record. Instead of building custom point-to-point integrations for every retail platform, a business publishes its supported services and payment handlers at `/.well-known/ucp` and computes the active capability intersection (such as `dev.ucp.shopping.checkout`) against the caller's `UCP-Agent` profile header. [5][12]\n\n**Universal Commerce Protocol** (`UCP`) is an open standard co-developed by Google and Shopify (announced 2026-01-11 and governed by a five-seat Governing Council) that enables AI agents, platforms, and merchants to interoperate across commerce workflows. Each participant publishes a JSON profile document containing a required `ucp` object that declares the protocol version, supported services, optional capabilities, and payment handlers. [2][3][4][5][12][13] Businesses publish their profile at `/.well-known/ucp`, while platforms advertise their profile URI in every request via the `UCP-Agent` header (formatted over HTTP using RFC 8941 Dictionary Structured Field syntax). Services declared in a business profile can bind to REST over HTTP/1.1+, Model Context Protocol (`MCP`) over JSON-RPC, Agent2Agent (`A2A`) extensions, or the iframe-based Embedded Protocol (`EP`). [5][12][14] UCP uses date-based versioning (`YYYY-MM-DD`), with `2026-08-25` designated as `latest` alongside prior releases (`2026-04-08`, `2026-01-23`, and `2026-01-11`) and an active `draft` specification track. [5][15][16][17]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Pay](/category/pay/) (`pay`) |\n| **Form** | Well-known file (`well-known-file`) |\n| **Originated by** | Google and Shopify, announced 2026-01-11; GitHub repository created 2025-12-31. [2][3][4][18] |\n| **Governed by** | Five-seat Governing Council (permanent founding seats for Google and Shopify, plus Stripe as elected member; Google holds proxy votes for open seats until Dec 2028). [13][17][19] |\n| **Track** | Vendor consortium (`vendor-consortium`), co-developed by founding members Google and Shopify. [2][13] |\n| **Status** | Released `2026-08-25` (`latest` alias); `draft` track includes the `dev.ucp.lodging.booking` capability. [15][17][20] |\n| **Version** | Release `2026-08-25` (aliased as `latest`), alongside an active `draft` build branch. [15][16][21] |\n| **Found at** | Businesses publish profiles at `/.well-known/ucp`; platforms publish profiles at the URI advertised in `UCP-Agent`. [5] |\n| **Headers** | `UCP-Agent` (required RFC 8941 Dictionary Structured Field on REST requests) and `Content-Type: application/json` (required on requests and responses; endpoint URIs should omit trailing slashes). [5] |\n| **Transports** | REST over HTTP/1.1+, Model Context Protocol (MCP) over JSON-RPC, optional Agent2Agent (A2A) extension, and the Embedded Protocol (EP) iframe or webview binding. [5][14][21][22] |\n| **Message format** | JSON profile object with a required `ucp` member declaring protocol version, services, optional capabilities, and payment handlers. [5][21] |\n| **Specification** | [Overview](https://ucp.dev/latest/specification/overview/) (`latest` = `2026-08-25`). [12][15][18] |\n| **Licence** | Apache License 2.0 (contributors sign a contributor license agreement). [13][18][21] |\n| **IANA registration** | Provisional well-known URI suffix `ucp` (`/.well-known/ucp`), registered `2026-10-26` (contact: Ilya Grigorik). [23] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Well-known profile discovery, capability intersection, and transport bindings](#well-known-profile-discovery-capability-intersection-and-transport-bindings)\n3. [Payment handlers, AP2 mandates, and ecosystem governance](#payment-handlers-ap2-mandates-and-ecosystem-governance)\n4. [Counterparts and related standards](#counterparts-and-related-standards)\n5. [Adoption and ecosystem](#adoption-and-ecosystem)\n6. [See also](#see-also)\n7. [References](#references)\n\n---\n\n## Problem and scope\n\nAs commerce becomes increasingly agentic and distributed, the ability for different systems to interoperate without custom, one-off integrations is vital. [21] Capability negotiation follows a server-selects architecture: a business computes the intersection between its own `/.well-known/ucp` profile and the caller's platform profile across reverse-domain capabilities (such as `dev.ucp.shopping.checkout`), selecting the latest mutually supported date version and confirming the active feature set in every response. [12] In transactional contexts, the business typically acts as the Merchant of Record (MoR), retaining financial liability and ownership of the transaction, though UCP's capability model is not limited to transactional use cases. [12]\n\n### Discovery and capability intersection\n\n```mermaid\nsequenceDiagram\n  participant Platform\n  participant Business\n  opt Discovery\n    Platform->>Business: fetch /.well-known/ucp\n    Business-->>Platform: business profile\n  end\n  Platform->>Business: UCP-Agent profile URI\n  Note over Business: fetch platform profile, capability intersection\n  Business-->>Platform: ucp version and capabilities\n```\n\n*The platform may fetch `/.well-known/ucp`, then sends its profile URI in `UCP-Agent`. The business returns `version` and `capabilities`. [5]*\n\n### Business profile at `/.well-known/ucp`\n\n```json\n{\n  \"ucp\": {\n    \"version\": \"2026-08-25\",\n    \"services\": {\n      \"dev.ucp.shopping\": [\n        {\n          \"version\": \"2026-08-25\",\n          \"spec\": \"https://ucp.dev/2026-08-25/specification/overview/\",\n          \"transport\": \"rest\",\n          \"endpoint\": \"https://business.example.com/ucp/v1\",\n          \"schema\": \"https://ucp.dev/2026-08-25/services/shopping/rest.openapi.json\"\n        },\n        {\n          \"version\": \"2026-08-25\",\n          \"spec\": \"https://ucp.dev/2026-08-25/specification/overview/\",\n          \"transport\": \"mcp\",\n          \"endpoint\": \"https://business.example.com/ucp/mcp\",\n          \"schema\": \"https://ucp.dev/2026-08-25/services/shopping/mcp.openrpc.json\"\n        },\n        {\n          \"version\": \"2026-08-25\",\n          \"spec\": \"https://ucp.dev/2026-08-25/specification/overview/\",\n          \"transport\": \"a2a\",\n          \"endpoint\": \"https://business.example.com/.well-known/agent-card.json\"\n        },\n        {\n          \"version\": \"2026-08-25\",\n          \"spec\": \"https://ucp.dev/2026-08-25/specification/overview/\",\n          \"transport\": \"embedded\",\n          \"schema\": \"https://ucp.dev/2026-08-25/services/shopping/embedded.openrpc.json\"\n        }\n      ]\n    },\n    \"capabilities\": {\n      \"dev.ucp.shopping.checkout\": [\n        {\n          \"version\": \"2026-08-25\",\n          \"spec\": \"https://ucp.dev/2026-08-25/specification/shopping/checkout\",\n          \"schema\": \"https://ucp.dev/2026-08-25/schemas/shopping/checkout.json\"\n        }\n      ],\n      \"dev.ucp.shopping.fulfillment\": [\n        {\n          \"version\": \"2026-08-25\",\n          \"spec\": \"https://ucp.dev/2026-08-25/specification/shopping/extensions/fulfillment\",\n          \"schema\": \"https://ucp.dev/2026-08-25/schemas/shopping/fulfillment.json\",\n          \"extends\": \"dev.ucp.shopping.checkout\"\n        }\n      ],\n      \"dev.ucp.shopping.discount\": [\n        {\n          \"version\": \"2026-08-25\",\n          \"spec\": \"https://ucp.dev/2026-08-25/specification/shopping/extensions/discount\",\n          \"schema\": \"https://ucp.dev/2026-08-25/schemas/shopping/discount.json\",\n          \"extends\": \"dev.ucp.shopping.checkout\"\n        }\n      ],\n      \"dev.ucp.common.identity_linking\": [\n        {\n          \"version\": \"2026-08-25\",\n          \"spec\": \"https://ucp.dev/2026-08-25/specification/common/identity-linking/\",\n          \"schema\": \"https://ucp.dev/2026-08-25/schemas/common/identity_linking.json\",\n          \"config\": {\n            \"providers\": {\n              \"com.example.idp\": [\n                { \"type\": \"oauth2\", \"auth_url\": \"https://accounts.example.com/\" }\n              ]\n            },\n            \"scopes\": {\n              \"dev.ucp.shopping.order:read\":   {},\n              \"dev.ucp.shopping.order:manage\": {}\n            }\n          }\n        }\n      ]\n    },\n    \"payment_handlers\": {\n      \"com.example.processor_tokenizer\": [\n        {\n          \"id\": \"processor_tokenizer\",\n          \"version\": \"2026-08-25\",\n          \"spec\": \"https://example.com/specs/payments/processor_tokenizer\",\n          \"schema\": \"https://example.com/specs/payments/merchant_tokenizer.json\",\n          \"available_instruments\": [\n            {\n              \"type\": \"card\",\n              \"constraints\": {\n                \"properties\": { \"brand\": { \"enum\": [\"visa\", \"mastercard\", \"amex\"] } }\n              }\n            }\n          ],\n          \"config\": {\n            \"type\": \"CARD\",\n            \"tokenization_specification\": {\n              \"type\": \"PUSH\",\n              \"parameters\": {\n                \"token_retrieval_url\": \"https://api.psp.example.com/v1/tokens\"\n              }\n            }\n          }\n        }\n      ]\n    }\n  },\n  \"keys\": [\n    {\n      \"kid\": \"poqkLGiymh_W0uP6PZFw-dvez3QJT5SolqXBCW38r0U\",\n      \"kty\": \"OKP\",\n      \"crv\": \"Ed25519\",\n      \"x\": \"JrQLj5P_89iXES9-vFgrIy29clF9CC_oPPsw3c5D0bs\",\n      \"use\": \"sig\",\n      \"alg\": \"EdDSA\"\n    },\n    {\n      \"kid\": \"business_2025\",\n      \"kty\": \"EC\",\n      \"crv\": \"P-256\",\n      \"x\": \"qIVYZVLCrPZHGHjP17CTW0_-D9Lfw0EkjqF7xB4FivA\",\n      \"y\": \"Mc4nN9LTDOBhfoUeg8Ye9WedFRhnZXZJA12Qp0zZ6F0\",\n      \"use\": \"sig\",\n      \"alg\": \"ES256\"\n    }\n  ]\n}\n```\n\n*Business profile published at `/.well-known/ucp`, with `version` `2026-08-25`, `services`, `capabilities`, `payment_handlers`, and `keys`. [5]*\n\n---\n\n## Well-known profile discovery, capability intersection, and transport bindings\n\nBefore initiating a request, a platform may fetch a merchant's `/.well-known/ucp` document and must include its own profile URI in every request via the transport-appropriate `UCP-Agent` mechanism. After computing the capability intersection between the two profiles, the business must return a `ucp` object in every response containing the active `version` and `capabilities` array. [5]\n\n- **Reverse-domain capability names:** All capability and service identifiers must follow the `{reverse-domain}.{service}.{capability}` grammar, where `{reverse-domain}` is an authority identifier derived from domain ownership; for example, `dev.ucp.shopping.checkout` pairs authority `ucp.dev` with service `shopping` in the profile at `/.well-known/ucp`. [5][12]\n- **Date-based version intersection:** Negotiation proceeds in two phases using `YYYY-MM-DD` date strings: protocol version selection first chooses one complete business profile, and capability negotiation then selects active capabilities and extensions by exact version intersection within that profile, picking the highest (latest date) match. [5][12]\n- **Extensions and schema composition:** Extensions declare parent capabilities via the `extends` field (as a single string or an array of parent names, at least one of which must be present in the active intersection) and modify base JSON Schemas using `allOf` composition, which platforms must resolve and compose client-side. [5]\n- **REST, MCP, A2A, and Embedded bindings:** A single service entry inherits `ucp.version` and can expose multiple transport bindings—REST (OpenAPI 3.1.0), MCP (OpenRPC), A2A extensions, and Embedded Protocol (`EP`)—without separate per-binding versions; `EP` embeds a merchant interface inside an iframe or webview and exchanges JSON-RPC 2.0 messages. [5][12][14]\n\n---\n\n## Payment handlers, AP2 mandates, and ecosystem governance\n\nUCP models transactions across four distinct actor roles: the platform (which consumes business capabilities), the business (which exposes them), the credential provider (CP, which manages sensitive payment instruments), and the payment service provider (PSP, which processes payments on behalf of businesses; CP and PSP are collectively termed the Payment Credential Provider). [12]\n\n- **Actor duties and Domain Technical Councils:** In an interaction, the platform discovers business profiles and invokes capabilities on behalf of its principal within negotiated bounds, while the business publishes its profile and declares supported services, capabilities, and extensions. Specification work is divided across four Domain Tech Councils: Shopping, Food (formed July 16, 2026), Lodging (formed August 11, 2026), and Payments (formed September 2, 2026). [12][13][17][19]\n- **Instruments versus payment handlers:** UCP separates Payment Instruments (what payment methods are accepted) from Payment Handlers (the specifications for how instruments are processed, which are specifications rather than legal entities). Reverse-domain handler identifiers such as `com.google.pay` and `dev.shopify.shop_pay` correspond to Google Pay and Shop Pay, and businesses must filter advertised handlers based on the cart context. [5]\n- **AP2 mandates and the FIDO donation:** The AP2 Mandates extension (`dev.ucp.common.payment.ap2_mandate` in `/.well-known/ucp`, version `2026-08-25`) exchanges user intents and authorizations as Verifiable Digital Credentials: when a session is Security Locked, businesses must embed a cryptographic signature in checkout responses and platforms must supply signed mandates during completion. Google donated AP2 to the FIDO Alliance on 2026-04-28. [8][24]\n- **Dated releases through 2026-08-25:** Following the initial `2026-01-11` launch and `2026-01-23` update, UCP published `v2026-04-08` (tagged 2026-04-09 on GitHub) and `v2026-08-25` (`latest`), alongside an active `draft` track. Ultimate ownership of all UCP assets rests with the Governing Council, where Stripe joined founding members Google and Shopify on April 28, 2026. [13][15][16][17]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **Well-Known URIs (RFC 8615)** | `RFC 8615` | Profiles classic standard | Business profile at /.well-known/ucp; platform profile URI is advertised in UCP-Agent. [5] |\n| **W3C Payment Request API & Web Checkout** | `W3C Payment Request` | Analogous to classic standard | UCP lists payment handlers on /.well-known/ucp; Payment Request is the browser checkout API. [5][14] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Agentic Commerce Protocol](/protocols/agentic-commerce-protocol/)** | Peer alternative | ACP (OpenAI and Stripe, beta) uses its own checkout; UCP publishes /.well-known/ucp payment handlers. [5][6] |\n| **[Agent Payments Protocol (AP2)](/protocols/ap2/)** | Depended on by | AP2 is a compatible security feature; UCP's AP2 Mandates extension carries verifiable credentials. [7][8][25] |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | MCP is JSON-RPC 2.0; UCP checkout advertises MCP and calls tools/call. [5][26][27] |\n| **[Agent2Agent Protocol (A2A)](/protocols/a2a/)** | Complements | A2A is Agent Card JSON-RPC; UCP checkout must be advertised on that card. [22][28] |\n| **[HTTP Message Signatures](/protocols/http-message-signatures/)** | Complements | RFC 9421 signs HTTP messages; UCP signs its messages and adds EdDSA for Web Bot Auth. [29][30] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (20 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).*\n\n### Merchants, platforms & payment processors\n\n| Actor | Role | Status | `/.well-known/ucp` profile capabilities, transport & payment handlers | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Shopify** | Platform (Co-author) | Supported · as of 2026-03-24 | Select brands sell in AI Mode and Gemini on co-developed UCP. | [Shopify News (datePublished 2026-03-24)](https://www.shopify.com/news/agentic-commerce-momentum) [31] · [Shopify Engineering, UCP](https://shopify.engineering/ucp) [2] |\n| **Allbirds** | Seller (Shopify merchant) | Live (HTTP 200) · checked 2026-10-30 | `2026-08-25` via `mcp` and `embedded`; `com.google.pay`, `dev.shopify.card`, `dev.shopify.shop_pay`. | [Allbirds UCP profile](https://www.allbirds.com/.well-known/ucp) [32] |\n| **Glossier** | Seller (Shopify merchant) | Live (HTTP 200) · checked 2026-10-30 | `2026-08-25` via `mcp` and `embedded`; `com.google.pay`, `dev.shopify.card`, `dev.shopify.shop_pay`. | [Glossier UCP profile](https://www.glossier.com/.well-known/ucp) [33] |\n| **Monos** | Seller (Shopify merchant) | Live (HTTP 200) · checked 2026-10-30 | `2026-08-25` via `mcp` and `embedded`; `com.google.pay`, `dev.shopify.card`, `dev.shopify.shop_pay`. | [Monos UCP profile](https://www.monos.com/.well-known/ucp) [34] |\n| **Steve Madden** | Seller (Shopify merchant) | Live (HTTP 200) · checked 2026-10-30 | `2026-08-25` via `mcp` and `embedded`; `com.google.pay`, `dev.shopify.card`, `dev.shopify.shop_pay`. | [Steve Madden UCP profile](https://www.stevemadden.com/.well-known/ucp) [35] |\n| **Fenty Beauty** | Seller (Shopify merchant) | Live (HTTP 200) · checked 2026-10-30 | `2026-08-25` via `mcp` and `embedded`; `com.google.pay`, `dev.shopify.card`, `dev.shopify.shop_pay`. | [Fenty Beauty UCP profile](https://fentybeauty.com/.well-known/ucp) [36] |\n| **IKEA (Ingka)** | Retailer (Custom UCP endpoint) | Live (HTTP 200) · checked 2026-10-30 | Active `2026-04-08` on `mcp` and `rest`; `com.google.pay` environment is `TEST`. | [IKEA UCP profile](https://www.ikea.com/.well-known/ucp) [37] |\n| **Stripe** | Payment processor (Governing Council) | Supported · as of 2026-09-02 | Checkout, identity linking, order tracking, and payment-token exchange. | [Stripe UCP docs (checked 2026-10-30)](https://docs.stripe.com/agentic-commerce/protocols/ucp) [38] · [UCP announcements](https://ucp.dev/documentation/announcements/) [17] · [UCP MAINTAINERS.md](https://raw.githubusercontent.com/Universal-Commerce-Protocol/.github/main/MAINTAINERS.md) [19] |\n| **Adyen** | Payment processor | Supported · as of 2026-09-02 | Agentic API transacts with Adyen merchants; sessions require RFC 9421. | [Adyen UCP docs (checked 2026-10-30)](https://docs.adyen.com/online-payments/agentic-commerce/agent-platform/ai-agent-integration-ucp) [39] · [UCP announcements](https://ucp.dev/documentation/announcements/) [17] · [UCP MAINTAINERS.md](https://raw.githubusercontent.com/Universal-Commerce-Protocol/.github/main/MAINTAINERS.md) [19] |\n| **Visa** | Payment network (endorser) | Listed · as of 2026-01-11 | Named among more than 20 launch endorsers on 2026-01-11. | [Google, UCP launch (2026-01-11)](https://blog.google/products/ads-commerce/agentic-commerce-ai-tools-protocol-retailers-platforms/) [4] |\n| **Mastercard** | Payment network (endorser) | Listed · as of 2026-01-11 | Launch-post endorser on 2026-01-11; no handler id in that sentence. | [Google, UCP launch (2026-01-11)](https://blog.google/products/ads-commerce/agentic-commerce-ai-tools-protocol-retailers-platforms/) [4] |\n| **Target** | Retailer (co-developer) | Supported · as of 2026-10-15 | Buy in Google Search AI Mode and Gemini via UCP; Universal Cart merchant. | [Target fact sheet (updated Jun 18, 2026)](https://corporate.target.com/press/fact-sheet/2026/06/conversational-ai) [40] · [Google, UCP launch (2026-01-11)](https://blog.google/products/ads-commerce/agentic-commerce-ai-tools-protocol-retailers-platforms/) [4] · [Google, Universal Cart (2026-10-15)](https://blog.google/products-and-platforms/products/shopping/universal-cart-launch/) [9] |\n| **Wayfair** | Retailer (co-developer) | Supported · as of 2026-10-15 | Co-developer; 2026-02-11 UCP checkout rollout; Universal Cart merchant. | [Google, UCP launch (2026-01-11)](https://blog.google/products/ads-commerce/agentic-commerce-ai-tools-protocol-retailers-platforms/) [4] · [Google, advertising and commerce (2026-02-11)](https://blog.google/products/ads-commerce/digital-advertising-commerce-2026/) [41] · [Google, Universal Cart (2026-10-15)](https://blog.google/products-and-platforms/products/shopping/universal-cart-launch/) [9] |\n| **Walmart** | Retailer (co-developer) | Supported · as of 2026-10-15 | Co-developer; coming soon on 2026-02-11; listed on Universal Cart. | [Google, UCP launch (2026-01-11)](https://blog.google/products/ads-commerce/agentic-commerce-ai-tools-protocol-retailers-platforms/) [4] · [Google, advertising and commerce (2026-02-11)](https://blog.google/products/ads-commerce/digital-advertising-commerce-2026/) [41] · [Google, Universal Cart (2026-10-15)](https://blog.google/products-and-platforms/products/shopping/universal-cart-launch/) [9] |\n| **Etsy** | Retailer (co-developer) | Supported · as of 2026-02-11 | Co-developer; 2026-02-11 UCP checkout for US shoppers in AI Mode. | [Google, UCP launch (2026-01-11)](https://blog.google/products/ads-commerce/agentic-commerce-ai-tools-protocol-retailers-platforms/) [4] · [Google, advertising and commerce (2026-02-11)](https://blog.google/products/ads-commerce/digital-advertising-commerce-2026/) [41] · [Shopify Engineering, UCP](https://shopify.engineering/ucp) [2] |\n| **Newegg** | Retailer | Supported · as of 2026-10-12 | Integrated UCP for online checkout (2026-10-12) as merchant of record. | [Digital Commerce 360, Newegg UCP checkout (2026-10-12)](https://www.digitalcommerce360.com/2026/10/12/newegg-adds-google-ucp-checkout-integration/) [42] |\n| **PayPal** | Payment processor (Payments TC) | Listed · as of 2026-09-02 | Inaugural member of the UCP Payments Technical Council (formed September 2, 2026). | [UCP announcements](https://ucp.dev/documentation/announcements/) [17] |\n\n### Buying agents, wallets & client SDKs\n\n| Actor | Role | Status | Supported capabilities, payment handler & conformance | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Google (AI Mode in Search & Gemini app)** | Buying agent / AI surface (Co-author) | Supported · as of 2026-10-15 | U.S. Universal Cart on Search and Gemini; checkout powered by UCP. | [Google, Universal Cart (2026-10-15)](https://blog.google/products-and-platforms/products/shopping/universal-cart-launch/) [9] · [Google Merchant UCP FAQ](https://developers.google.com/merchant/ucp/faq) [43] |\n| **Google Pay** | Wallet | Supported · as of 2026-10-15 | `com.google.pay` on Gemini and AI Mode; checkout in Universal Cart. | [Google Pay UCP handler (checked 2026-10-30)](https://developers.google.com/pay/api/universal-commerce-protocol/google-pay-payment-handler) [44] · [Google, Universal Cart (2026-10-15)](https://blog.google/products-and-platforms/products/shopping/universal-cart-launch/) [9] |\n| **Universal-Commerce-Protocol Official SDKs** | Client SDK & conformance suite | Supported · as of 2026-10-30 | Official `python-sdk`, `js-sdk`, and `conformance` repositories. | [GitHub org repos (checked 2026-10-30)](https://github.com/orgs/Universal-Commerce-Protocol/repositories) [45] |\n\n### Ecosystem censuses\n\n- **Shopify merchant /.well-known/ucp profiles** (*as of 2026-10-30*): Five probed Shopify storefronts (Allbirds, Glossier, Monos, Steve Madden, and Fenty Beauty) each declare ucp version 2026-08-25. [32][33][34][35][36]\n- **Google, UCP launch** (*as of 2026-01-11*): The launch post says UCP was endorsed by more than 20 others across the ecosystem, and names Adyen, American Express, Best Buy, Flipkart, Macy's Inc., Mastercard, Stripe, The Home Depot, Visa and Zalando. [4]\n- **ucp.dev versions.json** (*as of 2026-08-25*): ucp.dev versions.json aliases latest to version 2026-08-25 and lists a separate draft entry with an empty aliases array. [15]\n- **UCP Registry** (*as of 2026-11-06*): The UCP Registry lists the UCP Checker Extension, a Chrome, Edge, and Brave scanner that shows capabilities, payment handlers, transports, AI bot policies, and spec version. Verified entries on the same directory include Affirm, Checkout.com, and vintage-racewear.com (Shopify; UCP-enabled order, checkout, discount, and fulfillment; 133ms). [46]\n- **ucp.dev homepage** (*as of 2026-11-06*): The UCP homepage co-developer roster names Google, Shopify, Etsy, Wayfair, Target, Walmart, Amazon, Microsoft, Meta, Salesforce, Stripe, Amadeus, Booking.com, Expedia Group, Hilton, Marriott, Trip.com, DoorDash, Square, Toast, and Uber Eats. [47]\n\n---\n\n## See also\n\n- **[AP2 Checkout Mandate](/protocols/ap2-checkout-mandate/)** *(Depended on by)* — AP2 v0.2 Checkout Mandate rides on UCP's profile and optional AP2 Mandates extension.\n- **[EMV® Agentic Payments – Framework for Specifications](/protocols/emv-agentic-payments/)** *(Complements)* — UCP is a /.well-known/ucp profile with payment handlers; EMV is a card-scheme draft framework.\n- **[Agentic Mobile Protocol (AMP)](/protocols/amp-ant/)** *(Complements)* — UCP publishes /.well-known/ucp handlers; AMP uses Agent ID, mandates, and a CGCP token.\n- **[Verifiable Intent](/protocols/vi/)** *(Complements)* — UCP is the checkout surface; Verifiable Intent adds an SD-JWT consent chain.\n- **[Agent Attribution Protocol](/protocols/agent-attribution-protocol/)** *(Complements)* — UCP is the commerce surface; an AAP Code attributes a recommend() offer.\n- **Category:** [Pay protocols](/category/pay/)\n\n---\n\n## References\n\n1. Amit Handa and Ashish Gupta (Google Developers Blog), *Under the Hood: Universal Commerce Protocol (UCP)* (published 2026-01-11) — <https://developers.googleblog.com/en/under-the-hood-universal-commerce-protocol-ucp/>\n2. Shopify Engineering, *Building the Universal Commerce Protocol* (published 2026-01-11) — <https://shopify.engineering/ucp>\n3. Shopify, *The agentic commerce platform: Shopify connects any merchant to every AI conversation* (published 2026-01-11) — <https://www.shopify.com/news/ai-commerce-at-scale>\n4. Vidhya Srinivasan (Google), *New tech and tools for retailers to succeed in an agentic shopping era* (published 2026-01-11) — <https://blog.google/products/ads-commerce/agentic-commerce-ai-tools-protocol-retailers-platforms/>\n5. Universal Commerce Protocol, *Overview* (specification version aliased latest; fetched 2026-10-30) — <https://ucp.dev/latest/specification/overview/>\n6. OpenAI and Stripe, *Agentic Commerce Protocol (ACP) README* (fetched 2026-10-30) — <https://raw.githubusercontent.com/agentic-commerce-protocol/agentic-commerce-protocol/main/README.md>\n7. Universal Commerce Protocol, *UCP and AP2* (fetched 2026-10-30) — <https://ucp.dev/documentation/ucp-and-ap2/>\n8. Universal Commerce Protocol, *AP2 Mandates Extension* (fetched 2026-10-30) — <https://ucp.dev/latest/specification/payment/extensions/ap2-mandates/>\n9. Suresh Ganapathy (Google), *Google's new Universal Cart launches today in the U.S.* (published 2026-10-15) — <https://blog.google/products-and-platforms/products/shopping/universal-cart-launch/>\n10. Wireshark Wiki, *Universal Computer Protocol (UCP)* (fetched 2026-10-30) — <https://wiki.wireshark.org/UCP>\n11. Oracle, *Introduction to UCP (Universal Connection Pool)* (fetched 2026-10-30) — <https://docs.oracle.com/en/database/oracle/oracle-database/26/jjucp/intro.html>\n12. Universal Commerce Protocol, *Core Concepts* (fetched 2026-10-30) — <https://ucp.dev/documentation/core-concepts/>\n13. UCP Authors, *GOVERNANCE.md* (fetched 2026-10-30) — <https://raw.githubusercontent.com/Universal-Commerce-Protocol/.github/main/GOVERNANCE.md>\n14. Universal Commerce Protocol, *Embedded protocol* (fetched 2026-10-30) — <https://ucp.dev/latest/specification/embedded-protocol/>\n15. Universal Commerce Protocol, *versions.json* (last-modified 2026-10-29; fetched 2026-10-30) — <https://ucp.dev/versions.json>\n16. Universal-Commerce-Protocol, *Releases, Universal-Commerce-Protocol/ucp* (fetched 2026-10-30) — <https://github.com/Universal-Commerce-Protocol/ucp/releases>\n17. Universal Commerce Protocol, *Announcements* (fetched 2026-10-30) — <https://ucp.dev/documentation/announcements/>\n18. Universal-Commerce-Protocol, *ucp: Specification and documentation for the Universal Commerce Protocol* (repository created 2025-12-31; fetched 2026-10-30) — <https://github.com/Universal-Commerce-Protocol/ucp>\n19. UCP Authors, *UCP Maintainers* (fetched 2026-10-30) — <https://raw.githubusercontent.com/Universal-Commerce-Protocol/.github/main/MAINTAINERS.md>\n20. Universal Commerce Protocol, *Lodging Booking capability (draft)* (fetched 2026-10-30) — <https://ucp.dev/draft/specification/lodging/booking/>\n21. Universal Commerce Protocol, *Universal Commerce Protocol (UCP) README* (fetched 2026-10-30) — <https://raw.githubusercontent.com/Universal-Commerce-Protocol/ucp/main/README.md>\n22. Universal Commerce Protocol, *Checkout A2A binding* (fetched 2026-10-30) — <https://ucp.dev/latest/specification/shopping/checkout/a2a/>\n23. IANA, *Well-Known URIs Registry* (updated 2026-10-26) — <https://www.iana.org/assignments/well-known-uris>\n24. Google, *Google donates Agent Payments Protocol to FIDO Alliance* (2026-04-28) — <https://blog.google/products-and-platforms/platforms/google-pay/agent-payments-protocol-fido-alliance/>\n25. Agent Payments Protocol (google-agentic-commerce), *Agentic Payment Protocol (v0.2)* (fetched 2026-10-30) — <https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/specification.md>\n26. Model Context Protocol, *Specification, 2026-07-28* (specification date 2026-07-28; fetched 2026-10-30) — <https://modelcontextprotocol.io/specification/2026-07-28>\n27. Universal Commerce Protocol, *Checkout MCP binding* (fetched 2026-10-30) — <https://ucp.dev/latest/specification/shopping/checkout/mcp/>\n28. A2A Protocol, *Overview* (fetched 2026-10-30) — <https://a2a-protocol.org/latest/specification/>\n29. A. Backman, J. Richer, and M. Sporny, *RFC 9421: HTTP Message Signatures* (fetched 2026-10-30) — <https://www.rfc-editor.org/info/rfc9421/>\n30. Universal Commerce Protocol, *Signatures* (fetched 2026-10-30) — <https://ucp.dev/latest/specification/signatures/>\n31. Shopify, *Millions of merchants can sell in AI chats* (published 2026-03-24) — <https://www.shopify.com/news/agentic-commerce-momentum>\n32. Allbirds, *UCP profile at /.well-known/ucp* (fetched 2026-10-30) — <https://www.allbirds.com/.well-known/ucp>\n33. Glossier, *UCP profile at /.well-known/ucp* (fetched 2026-10-30) — <https://www.glossier.com/.well-known/ucp>\n34. Monos, *UCP profile at /.well-known/ucp* (fetched 2026-10-30) — <https://www.monos.com/.well-known/ucp>\n35. Steve Madden, *UCP profile at /.well-known/ucp* (fetched 2026-10-30) — <https://www.stevemadden.com/.well-known/ucp>\n36. Fenty Beauty, *UCP profile at /.well-known/ucp* (fetched 2026-10-30) — <https://fentybeauty.com/.well-known/ucp>\n37. IKEA, *UCP profile at /.well-known/ucp* (fetched 2026-10-30) — <https://www.ikea.com/.well-known/ucp>\n38. Stripe, *Universal Commerce Protocol* (fetched 2026-10-30) — <https://docs.stripe.com/agentic-commerce/protocols/ucp>\n39. Adyen, *AI agent API integration with UCP* (fetched 2026-10-30) — <https://docs.adyen.com/online-payments/agentic-commerce/agent-platform/ai-agent-integration-ucp>\n40. Target, *How Target is Shaping Shopping Experiences in Conversational AI* (updated 2026-06-18) — <https://corporate.target.com/press/fact-sheet/2026/06/conversational-ai>\n41. Vidhya Srinivasan (Google), *What to expect in digital advertising and commerce in 2026* (published 2026-02-11) — <https://blog.google/products/ads-commerce/digital-advertising-commerce-2026/>\n42. Brian Warmoth (Digital Commerce 360), *Newegg adds Google UCP checkout integration* (published 2026-10-12) — <https://www.digitalcommerce360.com/2026/10/12/newegg-adds-google-ucp-checkout-integration/>\n43. Google for Developers, *Google Universal Commerce Protocol (UCP) Guide, FAQ* (fetched 2026-10-30) — <https://developers.google.com/merchant/ucp/faq>\n44. Google for Developers, *Google Pay payment handler for Universal Commerce Protocol* (fetched 2026-10-30) — <https://developers.google.com/pay/api/universal-commerce-protocol/google-pay-payment-handler>\n45. GitHub API, Universal-Commerce-Protocol, *Organization repositories* (fetched 2026-10-30) — <https://github.com/orgs/Universal-Commerce-Protocol/repositories>\n46. UCP Registry, *The Universal Commerce Protocol Registry* (checked 2026-11-06) — <https://ucpregistry.com/>\n47. Universal Commerce Protocol, *Universal Commerce Protocol* (checked 2026-11-06) — <https://ucp.dev/>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "AP2",
   "adoption": {
    "level": "observed",
    "by": "Google, Adyen, Mastercard, PayPal, Coinbase, Salesforce, ServiceNow, and 56 named launch partners in v0.1.0; donated to FIDO Alliance",
    "probe_run": null
   },
   "aliases": [],
   "analog": "Signed payment authorization / purchase order",
   "collisions": [],
   "discovery": {
    "mechanism": "A2A Agent Card extension",
    "path": "No well-known file. Under the v0.1 A2A extension an agent lists AP2 in its A2A Agent Card extensions with the URI https://github.com/google-agentic-commerce/ap2/tree/v0.1. That URI is an identifier: fetched as a web page it returned HTTP 404 on 2026-10-28. No v0.2 discovery URI was found"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://cloud.google.com/blog/products/ai-machine-learning/announcing-agents-to-payments-ap2-protocol",
     "claim": "Stavan Parikh and Rao Surapaneni (Google Cloud), *Announcing Agent Payments Protocol (AP2)*, published 2025-09-16",
     "date": null,
     "quote": "Today, Google announced the Agent Payments Protocol (AP2) / \"datePublished\":\"2025-09-16\" / we have extended the core constructs of AP2 and launched the A2A x402 extension, a production-ready solution for agent-based crypto payments. / Today, Google announced the Agent Payments Protocol (AP2), an open protocol developed with leading payments and technology companies / September 16, 2025 / Stavan Parikh / Rao Surapaneni / The protocol can be used as an extension of the Agent2Agent (A2A) protocol and Model Context Protocol (MCP). / AP2 builds trust by using Mandates-tamper-proof, cryptographically-signed digital contracts that serve as verifiable proof of a user's instructions. / including Adyen, American Express, Ant International, Coinbase, Etsy, Forter, Intuit, JCB, Mastercard, Mysten Labs, Paypal, Revolut, Salesforce, ServiceNow, UnionPay International, Worldpay, and more. / launched the A2A x402 extension, a production-ready solution for agent-based crypto payments.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://blog.google/products-and-platforms/platforms/google-pay/agent-payments-protocol-fido-alliance/",
     "claim": "Stavan Parikh (Google), *Google donates Agent Payments Protocol to FIDO Alliance*, published 2026-04-28",
     "date": null,
     "quote": "we're donating the Agent Payments Protocol (AP2) to the FIDO Alliance / \"datePublished\": \"2026-04-28T13:00:00+00:00\" / We're donating Agent Payments Protocol to the FIDO Alliance to support the future of secure, agentic payments. / We're donating Agent Payments Protocol to the FIDO Alliance to support the future of secure, agentic payments.\", \"datePublished\": \"2026-04-28T13:00:00+00:00\" / we're donating the Agent Payments Protocol (AP2) to the FIDO Alliance, a renowned industry association focused on creating open standards. / Today on GitHub, we're also releasing AP2 v.0.2",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://github.com/agentic-commerce-protocol/agentic-commerce-protocol",
     "claim": "OpenAI and Stripe, *Agentic Commerce Protocol*, fetched 2026-10-30",
     "date": null,
     "quote": "The specification is currently maintained by OpenAI and Stripe. / The Agentic Commerce Protocol (ACP) is an interaction model and open standard for connecting buyers, their AI agents, and businesses to complete purchases seamlessly.",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://web.archive.org/web/20261022061422/https://openai.com/index/buy-it-in-chatgpt/",
     "claim": "OpenAI, *Buy it in ChatGPT: Instant Checkout and the Agentic Commerce Protocol*, archived 2026-10-22",
     "date": null,
     "quote": "powered by the Agentic Commerce Protocol, built with Stripe.",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://github.com/visa/trusted-agent-protocol",
     "claim": "Visa, *Trusted Agent Protocol*, fetched 2026-10-30",
     "date": null,
     "quote": "Visa's Trusted Agent Protocol provides a standardized, cryptographic method for an AI agent to prove its identity and associated authorization directly to merchants.",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://github.com/x402-foundation/x402/blob/main/specs/x402-specification-v2.md",
     "claim": "x402, *X402 Protocol Specification*, protocol version 2; fetched 2026-10-30",
     "date": null,
     "quote": "This specification defines the core x402 protocol for internet-native payments. / PAYMENT-SIGNATURE header is required",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/specification.md",
     "claim": "Google (google-agentic-commerce), *Agentic Payment Protocol (v0.2)*, fetched 2026-10-30",
     "date": null,
     "quote": "AP2 is designed explicitly to be compatible with the Universal Commerce Protocol (UCP) and integrates seamlessly. / The Agentic Payment Protocol (AP2) provides a protocol to secure Agent-performed payment transactions. ... A Checkout Mandate and Receipt for securing *what* is being purchased. - A linked Payment Mandate and Receipt for the *payment* of the Checkout. / The Agentic Payment Protocol (AP2) provides a protocol to secure Agent-performed payment transactions. / When a Shopping Agent has a Checkout JWT for the closed Checkout from the Merchant, they construct the Checkout and Payment Mandate Content and pass it to a Trusted Surface for display to the user and signing. / Human Not Present (Autonomous): The User sees and approves a set of constraints over what closed Checkout and Payment would meet their intent. The Shopping Agent then assembles and approves a closed Checkout and Payment Mandate on their behalf using these open Mandates. ... In the Autonomous case, the closed Mandates are signed by an Agent key. / Agentic Payment Protocol (v0.2) / AP2 specifies the use of SD-JWTs for securing the Payment and Checkout Mandates. / Mandates are the core means that AP2 uses to authorize agents. ... AP2 defines two Mandate types: Checkout Mandate and Payment Mandate. / AP2 operates as a security feature within a Commerce Protocol. The exact details of the Commerce Protocol (e.g., catalog APIs, checkout updates, and specific APIs for communication between the different roles) are outside the scope of AP2. / AP2 defines two Mandate types: Checkout Mandate and Payment Mandate. / Verifiers of Mandates always receive a closed Payment and Checkout Mandate, regardless of the mode. / AP2 defines two Mandate types: Checkout Mandate and Payment Mandate. ... Verifiers of Mandates *always* receive a closed Payment and Checkout Mandate, regardless of the mode. / In the Autonomous case, the closed Mandates are signed by an Agent key. Trust in this key is provided by open Mandates that are signed by the User or a trust list of Agent Providers. / as a schema version number (e.g. `mandate.payment.1`, `mandate.checkout.open.1`). Implementations MUST match the exact `vct` / The Payment Mandate is bound to a particular Checkout using the cryptographic hash of the Checkout JWT. To prevent rainbow table attacks, the Checkout JWT MUST be signed using a digital signature scheme (e.g., ECDSA) and not a deterministic signature (e.g., Ed25519). / Only constraints relevant to the closed Mandates are shared with the verifier. / Once the Merchant Payment Processor has accepted or rejected the Payment Mandate, a signed Payment Receipt MUST be returned to the Shopping Agent, Credential Provider, and possibly Networks. / AP2 considers five roles, who have different responsibilities from a processing and verification perspective. ... Shopping Agent (SA) ... Credential Provider (CP) ... Merchant (M) ... Merchant Payment Processor (MPP) ... Trusted Surface (TS) ... The following role MUST be non-agentic: - Trusted Surface / The following role MUST be non-agentic: - Trusted Surface ... When this document refers to validation or processing for a particular role, it MUST happen in deterministic code regardless of whether the role is agentic or not.",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/checkout_mandate.md",
     "claim": "Google (google-agentic-commerce), *Checkout Mandate*, fetched 2026-10-30",
     "date": null,
     "quote": "\"alg\": \"ES256\", \"typ\": \"kb+sd-jwt\" ... \"vct\": \"mandate.checkout.1\" / Closed Checkout Mandate SD-JWT plus disclosures / A closed Checkout Mandate MUST use the value mandate.checkout.1 for the vct claim and an open Checkout Mandate MUST use the value mandate.checkout.open.1. / checkout_hash is the base64url-encoded hash of the value of checkout_jwt. The algorithm used MUST be the same as the SD-JWT, as defined by the _sd_alg claim in the base payload, or sha-256 if not present. checkout_jwt is the merchant-signed JWT containing the details of the checkout. / \"alg\": \"ES256\", \"typ\": \"kb+sd-jwt\" / \"issuer_signed_jwt\": { \"header\": { \"alg\": \"ES256\", \"typ\": \"kb+sd-jwt\" } / \"disclosures\": [ { \"digest\": \"FzLoxbbtgQGYZxoSM2NJYJtkFTSsdfUBoVEQ12k7JN8\" / The Checkout Mandate is a Mandate used for authorizing the completion of a checkout. / The Checkout Mandate Content is created by the Shopping Agent, rendered to the User by the Trusted Surface and verified by the Merchant.",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/index.md",
     "claim": "Google (google-agentic-commerce), *Agent Payments Protocol (AP2)*, fetched 2026-10-30",
     "date": null,
     "quote": "Agent Payments Protocol (AP2) is an open protocol for the emerging Agent Economy. It's designed to enable secure, reliable, and interoperable agent commerce for developers, merchants, and the payments industry. / Standardization of the specification will continue within the Agentic Authentication Technical and Payments Technical Working Groups in FIDO. / Our public GitHub repo hosts the lastest version of AP2 specification, documentation and SDK. / The protocol is available as an extension for the open-source Agent2Agent (A2A) protocol and Universal Commerce Protocol / Today's payment systems assume a human is directly clicking \"buy\" on a trusted website. When an autonomous agent initiates a payment, this core assumption is broken, leading to critical questions that current systems cannot answer: - Authorization: How can we verify that a user gave an agent specific authority for a particular purchase? - Authenticity: How can a merchant be sure an agent's request accurately reflects the user's true intent, without errors or AI \"hallucinations\"? - Accountability: If a fraudulent or incorrect transaction occurs, who is accountable / The protocol is available as an extension for the open-source Agent2Agent (A2A) protocol and Universal Commerce Protocol with more integrations in progress. ... MCP ... Human Not Present x402 ... Standardization of the specification will continue within the Agentic Authentication Technical and Payments Technical Working Groups in FIDO. / Today's payment systems assume a human is directly clicking \"buy\" on a trusted website. When an autonomous agent initiates a payment, this core assumption is broken",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://github.com/google-agentic-commerce/AP2/releases",
     "claim": "google-agentic-commerce, *Releases · google-agentic-commerce/AP2*, v0.1.0 (2025-09-16); v0.2.0 released 28 Apr",
     "date": null,
     "quote": "GarethCOliver released this 28 Apr 12:40 v0.2.0 ... This is the second release of AP2. It focuses on providing Human Not Present flows. ... 0.1.0 (2025-09-16) Features Create Agent Payments Protocol (AP2) / 0.1.0 (2025-09-16) / Create Agent Payments Protocol (AP2) / GarethCOliver released this 28 Apr 12:40 v0.2.0 / This is the second release of AP2. It focuses on providing Human Not Present flows.",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://github.com/google-agentic-commerce/AP2",
     "claim": "google-agentic-commerce, *Agent Payments Protocol (AP2)*, fetched 2026-10-30",
     "date": null,
     "quote": "\"created_at\": \"2025-05-30T19:37:20Z\" / \"homepage\": \"https://ap2-protocol.org/\" / \"name\": \"Apache License 2.0\" / \"spdx_id\": \"Apache-2.0\" / The protocol's core objects are defined under code/sdk/python/ap2/ / A PyPI package will be published at a later time. / uv pip install git+https://github.com/google-agentic-commerce/AP2.git@main / This repository contains code samples and demos of the Agent Payments Protocol.",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://fidoalliance.org/fido-alliance-to-develop-standards-for-trusted-ai-agent-interactions/",
     "claim": "FIDO Alliance, *FIDO Alliance to Develop Standards for Trusted AI Agent Interactions*, published 2026-04-28; modified 2026-10-19",
     "date": null,
     "quote": "the FIDO Alliance is developing specifications for agent-initiated commerce within its Payments Technical Working Group, chaired by members from Mastercard and Visa. / Google has contributed its Agent Payments Protocol (AP2), which introduces a model for secure delegation, verifiable authorization and trusted transaction execution. / These contributions will be reviewed and further developed through the FIDO Alliance's collaborative standards process within the Payments Technical Working Group. / through the newly formed Agentic Authentication Technical Working Group and the Payments Technical Working Group. / Mastercard has contributed its Verifiable Intent framework, co-developed with Google and designed to work with AP2",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://www.w3.org/2026/09/ecommerce-agents/slides/Jean_Luc_Di_Manno_FIDO.pdf",
     "claim": "FIDO Alliance, *FIDO Agentic Payment Specifications*, PDF created 2026-09-09",
     "date": null,
     "quote": "CreationDate(D:20260909090452+02'00') / September 2026: AP2/VI specs moved to public repository for review. / Targeting End 2026: Harmonize AP2 and VI specifications. / Mid-2027: Publish first version of consolidated specifications.",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/agent_authorization.md",
     "claim": "Google (google-agentic-commerce), *Agent Authorization*, fetched 2026-10-30",
     "date": null,
     "quote": "While this document specifies using OpenID4VP with SD-JWT VCs, other VDC formats such as ISO mDocs (ISO18013-5) and protocols such as 18013-7 Annex C could be made to fulfill the same role. / other VDC formats such as ISO mDocs (ISO18013-5)",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://raw.githubusercontent.com/google-agentic-commerce/AP2/v0.1.0/docs/a2a-extension.md",
     "claim": "Google (google-agentic-commerce), *A2A Extension for AP2 (v0.1)*, tag v0.1.0 (2025-09-16)",
     "date": null,
     "quote": "The URI for this extension is https://github.com/google-agentic-commerce/ap2/tree/v0.1. / Agents that support the AP2 extension MUST use this URI. / The URI for this extension is https://github.com/google-agentic-commerce/ap2/tree/v0.1. Agents that support the AP2 extension MUST use this URI. / This is an Agent2Agent (A2A) extension implementing the Agent Payments Protocol (AP2).",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://ap2-protocol.org/ap2/specification/",
     "claim": "Google (google-agentic-commerce), *Agentic Payment Protocol (v0.2)*, fetched 2026-10-30",
     "date": null,
     "quote": "Agentic Payment Protocol (v0.2)",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://raw.githubusercontent.com/google-agentic-commerce/AP2/v0.1.0/docs/specification.md",
     "claim": "Google (google-agentic-commerce), *Agent Payments Protocol (AP2), v0.1.0 specification*, tag v0.1.0 (2025-09-16)",
     "date": null,
     "quote": "The primary VCs in this framework are the Cart Mandate, the Intent Mandate and the Payment Mandate. / The Cart Mandate is the foundational credential that captures the user's authorization for a purchase when the human is present ... The Intent Mandate is a separate verifiable credential which is critical for scenarios where the human is not present / AI Agent presence and transaction modality (Human Present v/s Not Present) signals must always be shared / Through payload encryption and a role-based architecture, agents involved in the shopping process are prevented from accessing sensitive payment card industry (PCI) data or other personally identifiable information (PII)",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://www.rfc-editor.org/rfc/rfc9901.html",
     "claim": "D. Fett, K. Yasuda, B. Campbell (IETF), *Selective Disclosure for JSON Web Tokens (RFC 9901)*, 2025-11",
     "date": null,
     "quote": "Selective Disclosure for JSON Web Tokens",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://arxiv.org/abs/2608.23858",
     "claim": "Avital Aviv, Parth A. Gandh, Ron Bitton, and Asaf Shabtai, *Beyond the Mandate: A Systematic Security Analysis of the Agent Payments Protocol (AP2)*, submitted 24 Aug 2026",
     "date": null,
     "quote": "arXiv:2608.23858 ... Agent interactions and external inputs that shape a transaction before authorization remain outside that protection, including Agent-to-Agent Protocol (A2A) messages and Model Context Protocol (MCP) tool calls. / Submitted on 24 Aug 2026 / Because no complete public AP2 deployment was available, we build a testbed spanning all five architectures",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://ucp.dev/latest/specification/payment/extensions/ap2-mandates/",
     "claim": "Universal Commerce Protocol, *AP2 Mandates Extension*, example profile version 2026-08-25; fetched 2026-10-30",
     "date": null,
     "quote": "Businesses declare support by adding dev.ucp.common.payment.ap2_mandate to their capabilities list in /.well-known/ucp. / The business MUST include ap2.merchant_authorization in all checkout responses. / The business MUST NOT accept a complete_checkout request that lacks ap2.checkout_mandate. / Mandates are SD-JWT credentials with Key Binding (+kb). / payment.instruments[*].credential.token",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://ucp.dev/2026-01-11/specification/ap2-mandates/",
     "claim": "Universal Commerce Protocol, *AP2 Mandates Extension*, specification version 2026-01-11",
     "date": null,
     "quote": "Businesses declare support by adding dev.ucp.shopping.ap2_mandate to their capabilities list ... \"extends\": \"dev.ucp.shopping.checkout\"",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://raw.githubusercontent.com/google-agentic-commerce/AP2/v0.1.0/docs/topics/ap2-a2a-and-mcp.md",
     "claim": "Google (google-agentic-commerce), *AP2, A2A, and MCP*, tag v0.1.0 (2025-09-16)",
     "date": null,
     "quote": "Developers can implement their own tools to integrate with providers. We are working on MCP servers for AP2. / A2A: Agents communicate with other Agents (tasks and messages) / AP2: Agents communicate about payments (mandates)",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://raw.githubusercontent.com/google-agentic-commerce/AP2/v0.1.0/docs/topics/ap2-and-x402.md",
     "claim": "Google (google-agentic-commerce), *AP2 and x402*, tag v0.1.0 (2025-09-16)",
     "date": null,
     "quote": "The Agent Payments Protocol (AP2) and x402 are complementary. ... A core principle of AP2 is its payment-method-agnostic and future-proof design. The initial version supports common \"pull\" payment methods like credit/debit cards, with a roadmap to include \"push\" payments like real-time bank transfers and digital currencies. / The Agent Payments Protocol (AP2) and x402 are complementary.",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/faq.md",
     "claim": "Google (google-agentic-commerce), *Frequently Asked Questions*, fetched 2026-10-30",
     "date": null,
     "quote": "While the Universal Commerce Protocol orchestrates the broader purchase lifecycle, AP2 is the specialized payment layer responsible for authorizing and signing transactions. / We built sample agents around the core AP2 python library that demonstrate a rich shopping experience. / These samples mock actual payment service providers so you can explore with no dependencies. / We are working on an SDK and a MCP server right now, in collaboration with payment service providers. Check back soon. / like the Checkout Mandate and Payment Mandate",
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://verifiableintent.dev/spec/",
     "claim": "Verifiable Intent Working Group, *Verifiable Intent specification*, 0.1-draft; date 2026-02-18",
     "date": null,
     "quote": "Verifiable Intent (VI) defines a layered SD-JWT credential format that creates a cryptographically verifiable chain binding an AI agent's commercial actions to an end-user's explicitly stated purchase intent.",
     "ref": 25
    },
    {
     "label": "[26]",
     "url": "https://singlefax.com/.well-known/agent-card.json",
     "claim": "Monocube LLC (SingleFax), *SingleFax A2A agent card*, fetched 2026-10-30",
     "date": null,
     "quote": "\"organization\":\"Monocube LLC (SingleFax)\" / \"uri\":\"https://github.com/google-agentic-commerce/AP2/tree/v0.1.0\",\"required\":true / \"roles\":[\"merchant\"],\"version\":\"0.1.0\",\"checkout_modes\":[\"human_present\"] / \"payment_methods\":[\"stripe_shared_payment_token\"]",
     "ref": 26
    },
    {
     "label": "[27]",
     "url": "https://singlefax.com/ap2.md",
     "claim": "SingleFax (Monocube LLC), *SingleFax AP2 payments*, fetched 2026-10-30",
     "date": null,
     "quote": "SingleFax implements the human-present merchant flow of AP2 v0.1.0 / This flow accepts Stripe Shared Payment Tokens (SPTs); it does not spend saved cards or existing account credit. / Supply a product ID and an unsigned AP2 IntentMandate / The response contains id, status and ap2.mandates.CartMandate. / JSON containing ap2.mandates.PaymentMandate / AP2 v0.2 and purchases without the user present are not negotiated.",
     "ref": 27
    },
    {
     "label": "[28]",
     "url": "https://api.algovoi.co.uk/ap2/extensions",
     "claim": "AlgoVoi, *AlgoVoi AP2 extensions*, fetched 2026-10-30",
     "date": null,
     "quote": "\"ap2_version\":\"0.1\" / Adds multi-chain blockchain payment methods to AP2 v0.1: Algorand, VOI, Hedera, Stellar, Base, Solana, Tempo, and ARC. / Use as PaymentMethodData.supported_methods to advertise crypto payment acceptance. / Adds optional max_price and max_quantity fields to IntentMandate via a private extension namespace, enabling automated price bound enforcement at the gateway.",
     "ref": 28
    },
    {
     "label": "[29]",
     "url": "https://api.algovoi.co.uk/.well-known/agent-card.json",
     "claim": "AlgoVoi, *AlgoVoi Payment Agent card*, fetched 2026-10-30",
     "date": null,
     "quote": "\"name\":\"AlgoVoi Payment Agent\" / gates access to resources using x402, MPP (IETF), or AP2 (Google Agentic Payments) protocols.",
     "ref": 29
    },
    {
     "label": "[30]",
     "url": "https://api.algovoi.co.uk/openapi.json",
     "claim": "AlgoVoi, *AlgoVoi Gateway OpenAPI*, fetched 2026-10-30",
     "date": null,
     "quote": "\"title\":\"AlgoVoi Gateway\" / Public-facing x402 payment gateway.",
     "ref": 30
    },
    {
     "label": "[31]",
     "url": "https://www.allbirds.com/.well-known/ucp",
     "claim": "Allbirds, *UCP business profile (/.well-known/ucp)*, profile version 2026-08-25; fetched 2026-10-30",
     "date": null,
     "quote": "{\"ucp\":{\"version\":\"2026-08-25\" / dev.ucp.shopping.checkout",
     "ref": 31
    },
    {
     "label": "[32]",
     "url": "https://www.ikea.com/.well-known/ucp",
     "claim": "IKEA, *UCP business profile (/.well-known/ucp)*, profile version 2026-04-08; fetched 2026-10-30",
     "date": null,
     "quote": "\"supported_versions\": { \"2026-08-25\": \"https://ucp.checkout.ingka.com/.well-known/ucp/2026-08-25\" }, \"version\": \"2026-04-08\" / dev.ucp.shopping.checkout / dev.ucp.shopping.fulfillment / \"version\": \"2026-04-08\"",
     "ref": 32
    },
    {
     "label": "[33]",
     "url": "https://raw.githubusercontent.com/google-agentic-commerce/AP2/v0.1.0/docs/partners.md",
     "claim": "Google Agentic Commerce, *AP2 partners (v0.1.0 docs/partners.md)*, v0.1.0 tag snapshot; fetched 2026-11-12",
     "date": null,
     "quote": "Below is a list of partners who are part of the AP2 community and are helping build, codify, and adopt A2A as the standard protocol for AI agent payments. / -   [1Password](https://1password.com/) / -   [manus.ai](https://manus.ai/) / -   [Adyen](https://www.adyen.com/) / -   [PayPal](https://www.paypal.com/)",
     "ref": 33
    }
   ],
   "form": "endpoint",
   "governance": "FIDO Alliance, since Google donated AP2 on 2026-04-28. Google: \"Transitioning ownership to the FIDO Alliance ensures AP2 remains platform-agnostic and community-led, while accelerating adoption of secure agentic payments.\" FIDO develops it in its Payments Technical Working Group, chaired by members from Mastercard and Visa, and Google says the work also continues in FIDO's Agentic Authentication Technical Working Group. Google's GitHub repository still hosts the specification, documentation and SDK",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against google-agentic-commerce/AP2 (README, CONTRIBUTING.md, docs/ap2/specification.md, docs/ap2/checkout_mandate.md) and Google Cloud blog launch announcement; folded in ap2-checkout-mandate as a component rather than a separate protocol"
    },
    {
     "date": "2026-10-16",
     "note": "AP2 v0.2.0 released on 2026-04-28, and AP2 was donated to the FIDO Alliance (Payments TWG and Agentic Authentication TWG) the same day"
    },
    {
     "date": "2026-10-29",
     "note": "Re-verified record against 35 sources on 2026-10-29: 2 live AP2 v0.1 endpoints (SingleFax, AlgoVoi), UCP AP2 Mandates extension check, 6 payment network/processor statements, and 3 research/press sources."
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "ap2",
   "implementation": "multi-implementation",
   "last_verified": "2026-11-12",
   "name": "Agent Payments Protocol (AP2)",
   "native_status": "Pre-1.0. FIDO's September 2026 slides say: \"September 2026: AP2/VI specs moved to public repository for review.\" \"Targeting End 2026: Harmonize AP2 and VI specifications. Mid-2027: Publish first version of consolidated specifications.\" The dates after September 2026 are targets",
   "origin": {
    "date": "2025-09-16",
    "org": "Google"
   },
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "candidate",
   "probe": {
    "method": "none",
    "on_absent": "There is no generic HTTP probe for AP2: a Merchant, Credential Provider, or Merchant Payment Processor supports AP2 only if it accepts and validates AP2 Checkout/Payment Mandates inside its own commerce protocol's message flow (e.g. as a UCP payment handler), which cannot be detected by an unauthenticated GET against the origin.",
    "parse": "not applicable — AP2 is a client-side/in-band mandate format, not an origin-exposed endpoint or file",
    "path": "none"
   },
   "question": "Did the user actually authorize what this agent is about to buy and pay for, and can the merchant prove it later?",
   "scope": "payments",
   "spec_url": "https://ap2-protocol.org/ap2/specification/",
   "step": "pay",
   "summary_md": "The Agentic Payment Protocol (AP2) provides a protocol to secure agent-performed payment transactions. It is an open protocol for the emerging Agent Economy, designed to enable secure, reliable, and interoperable agent commerce. The Shopping Agent passes Checkout and Payment Mandate content from the merchant's Checkout JWT to a Trusted Surface for the user to sign. In Human Not Present mode, the user approves constraints, and an agent key signs the closed Mandates. GitHub shows `v0.2.0` as the second release, focused on Human Not Present flows, and `v0.1.0` (`2025-09-16`) as the release that created the protocol. On `2026-04-28`, Google's post says it is donating the Agent Payments Protocol to the FIDO Alliance.",
   "track": "industry-body",
   "version": {
    "date": "2026-04-28",
    "label": "v0.2.0"
   },
   "watch": [
    {
     "type": "github",
     "repo": "google-agentic-commerce/AP2",
     "mode": "release"
    },
    {
     "type": "page",
     "url": "https://ap2-protocol.org/",
     "selector": "main"
    }
   ],
   "use_cases": [
    "agent-checkout",
    "delegate-user-authority",
    "audit-agent-actions"
   ],
   "audience": [
    "platform",
    "agent-builder"
   ],
   "pairs_with": [
    "ap2-checkout-mandate",
    "ucp",
    "a2a",
    "vi",
    "x402",
    "agentic-commerce-protocol"
   ],
   "prerequisites": [
    "ucp"
   ],
   "hatnote_md": "This page is about the Agent Payments Protocol (AP2), announced by Google on 2025-09-16 and donated to the FIDO Alliance on 2026-04-28. It is not the Agentic Commerce Protocol (ACP), maintained by OpenAI and Stripe; see [Agentic Commerce Protocol](https://agenticweb.wiki/protocols/agentic-commerce-protocol/). It is not Visa's Trusted Agent Protocol (TAP), with which an agent proves its identity and associated authorization directly to merchants; see [Visa Trusted Agent Protocol](https://agenticweb.wiki/protocols/tap/). For the separate A2A x402 extension and the x402 payment protocol, see [x402](https://agenticweb.wiki/protocols/x402/). For the Universal Commerce Protocol, which the AP2 v0.2 specification is designed to be compatible with, see [Universal Commerce Protocol](https://agenticweb.wiki/protocols/ucp/).",
   "tier": "flagship",
   "lifecycle_status": "active",
   "wire_archetype": "payments_onchain",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "This page is about the Agent Payments Protocol (AP2), announced by Google on 2025-09-16 and donated to the FIDO Alliance on 2026-04-28. It is not the Agentic Commerce Protocol (ACP), maintained by OpenAI and Stripe; see [Agentic Commerce Protocol](/protocols/agentic-commerce-protocol/). It is not Visa's Trusted Agent Protocol (TAP), with which an agent proves its identity and associated authorization directly to merchants; see [Visa Trusted Agent Protocol](/protocols/tap/). For the separate A2A x402 extension and the x402 payment protocol, see [x402](/protocols/x402/). For the Universal Commerce Protocol, which the AP2 v0.2 specification is designed to be compatible with, see [Universal Commerce Protocol](/protocols/ucp/). [1][2][3][4][5][6][7]",
   "v05_elevator_pitch_md": "Agent Payments Protocol (`AP2`, also titled *Agentic Payment Protocol* in the `v0.2` specification) is an open payment-authorization protocol originated by Google and donated to the FIDO Alliance that binds agent-initiated purchases to cryptographically signed `Checkout Mandate` and `Payment Mandate` credentials. Across Human Present (`Direct`) and Human Not Present (`Autonomous`) flows, it uses Selective Disclosure JWTs (`typ: \"kb+sd-jwt\"`, `ES256`) so merchants verify authorized cart contents (`mandate.checkout.1`) and credential providers and payment processors verify payment authorization without exposing raw PCI credentials to the shopping agent. [2][7][8]",
   "v05_lead_md": "The Agentic Payment Protocol (AP2) provides a protocol to secure agent-performed payment transactions. It is an open protocol for the emerging Agent Economy, designed to enable secure, reliable, and interoperable agent commerce. [7][9] The Shopping Agent passes Checkout and Payment Mandate content from the merchant's Checkout JWT to a Trusted Surface for the user to sign. In Human Not Present mode, the user approves constraints, and an agent key signs the closed Mandates. [7] GitHub shows `v0.2.0` as the second release, focused on Human Not Present flows, and `v0.1.0` (`2025-09-16`) as the release that created the protocol. On `2026-04-28`, Google's post says it is donating the Agent Payments Protocol to the FIDO Alliance. [2][10]",
   "v05_identity_sentence_md": "The Agentic Payment Protocol (AP2) provides a protocol to secure agent-performed payment transactions. It is an open protocol for the emerging Agent Economy, designed to enable secure, reliable, and interoperable agent commerce. [7][9]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Pay](/category/pay/) (`pay`)"
    },
    {
     "label": "Form",
     "value_md": "Endpoint (`endpoint`)"
    },
    {
     "label": "Originated by",
     "value_md": "Google (Stavan Parikh, VP/GM, Payments, and Rao Surapaneni, VP/GM, Business Applications Platform), announced September 16, 2025. The `google-agentic-commerce/AP2` repository was created 2025-05-30. [1][11]"
    },
    {
     "label": "Governed by",
     "value_md": "FIDO Alliance, after Google's donation on 2026-04-28. FIDO is developing agent-initiated commerce specifications in its Payments Technical Working Group, chaired by members from Mastercard and Visa. Google's docs say standardization continues in FIDO's Agentic Authentication Technical Working Group and Payments Technical Working Group, and that the public GitHub repository hosts the specification, documentation, and SDK. [2][9][12]"
    },
    {
     "label": "Track",
     "value_md": "Industry body (FIDO Alliance). Google's docs say standardization of the specification continues in the Agentic Authentication Technical and Payments Technical Working Groups in FIDO. [9][12]"
    },
    {
     "label": "Status",
     "value_md": "Public specification titled Agentic Payment Protocol (v0.2). FIDO's September 2026 W3C workshop presentation (`Jean_Luc_Di_Manno_FIDO.pdf`, PDF creation timestamp 2026-09-09, Slide 6) states: \"September 2026: AP2/VI specs moved to public repository for review,\" and labels later steps as targets: harmonize the AP2 and VI specifications at the end of 2026, and publish a first version of the consolidated specifications in mid-2027. [7][13]"
    },
    {
     "label": "Version",
     "value_md": "v0.1.0 (2025-09-16), the release that created the protocol, and v0.2.0, which GitHub shows as released 28 Apr and describes as the second release, focused on Human Not Present flows. Google's post dated 2026-04-28 says it is releasing AP2 v.0.2 that day. The current specification heading is Agentic Payment Protocol (v0.2). [2][7][10]"
    },
    {
     "label": "Message format",
     "value_md": "Mandates secured as SD-JWTs. The authorization document specifies OpenID4VP with SD-JWT verifiable credentials, and says other verifiable digital credential formats such as ISO mDocs (ISO 18013-5) could be made to fulfill the same role. [7][14]"
    },
    {
     "label": "Transports",
     "value_md": "Extension of Agent2Agent (A2A) and the Model Context Protocol (MCP), and of the Universal Commerce Protocol. `v0.1` defines an A2A extension URI of `https://github.com/google-agentic-commerce/ap2/tree/v0.1`, which supporting agents MUST use; `v0.2` defines no A2A binding (`v0.1` only). [1][9][15]"
    },
    {
     "label": "Specification",
     "value_md": "[Agentic Payment Protocol (v0.2)](https://ap2-protocol.org/ap2/specification/) [7][16]"
    },
    {
     "label": "Found at",
     "value_md": "[ap2-protocol.org](https://ap2-protocol.org/) (repository homepage) and [google-agentic-commerce/AP2](https://github.com/google-agentic-commerce/AP2), which the docs say hosts the specification, documentation, and SDK. [9][11]"
    },
    {
     "label": "Licence",
     "value_md": "Apache License 2.0 (`Apache-2.0`) on the `google-agentic-commerce/AP2` repository. [11]"
    }
   ],
   "v05_problem_md": "Today's payment systems assume a human is directly clicking buy on a trusted website. When an autonomous agent initiates a payment, this core assumption is broken, and current systems cannot answer authorization, authenticity, and accountability. [9] AP2 builds trust with mandates: tamper-proof, cryptographically signed digital contracts that serve as verifiable proof of a user's instructions. Mandates are the means AP2 uses to authorize agents, and the specification defines two types, the Checkout Mandate and the Payment Mandate. [1][7] AP2 operates as a security feature within a Commerce Protocol. Catalog APIs, checkout updates, and the specific APIs for communication between the different roles are outside the scope of AP2. [7]",
   "v05_mechanism_delta_md": "AP2 builds trust with mandates: tamper-proof, cryptographically signed digital contracts that serve as verifiable proof of a user's instructions. Mandates are the means AP2 uses to authorize agents, and the specification defines two types, the Checkout Mandate and the Payment Mandate. [1][7]",
   "v05_scope_boundary_md": "AP2 operates as a security feature within a Commerce Protocol. Catalog APIs, checkout updates, and the specific APIs for communication between the different roles are outside the scope of AP2. [7]",
   "v05_fuzzy_additions": [
    {
     "id": "mandate-lifecycle-checkout-vs-payment-mandates-and-sd-jwt-cryptographic-bindings",
     "heading": "Mandate lifecycle, Checkout vs Payment Mandates, and SD-JWT cryptographic bindings",
     "body_md": "While `AP2` `v0.1.0` (`2025-09-16`) modeled authorizations around three W3C Verifiable Credentials (`CartMandate`, `IntentMandate`, and `PaymentMandate`), `AP2` `v0.2` (`v0.2.0`, `2026-04-28`) consolidates agent authorization onto two linked Selective Disclosure JWT (`RFC 9901`) credential families—the Checkout Mandate and the Payment Mandate—paired with signed Receipts for dispute evidence. Across both `Direct` (Human Present) and `Autonomous` (Human Not Present) modes, verifiers always receive closed mandates whose schema version is pinned via a mandatory numeric suffix on `vct`. [7][10][17][18]",
     "bullets": [
      {
       "label": "Closed and open Checkout Mandates (`mandate.checkout.1` / `mandate.checkout.open.1`)",
       "text_md": "Replacing `v0.1.0`'s separate `CartMandate` and `IntentMandate`, a closed Checkout Mandate MUST set `vct` to `mandate.checkout.1` and bind the merchant-signed `checkout_jwt` via its base64url-encoded `checkout_hash` (`_sd_alg` `sha-256` by default). In `Autonomous` mode, the user first signs an open Checkout Mandate (`vct` `mandate.checkout.open.1`) over merchant and line-item constraints with the Shopping Agent's public key in `cnf`, allowing the agent key to sign the final closed mandate. [7][8][17]"
      },
      {
       "label": "Linked Payment Mandate (`mandate.payment.1`) and non-deterministic cart signing",
       "text_md": "The Payment Mandate (`mandate.payment.1`) gives the Credential Provider, payment network, and Merchant Payment Processor cryptographic proof that the Shopping Agent is authorized to pay for a specific Checkout, bound via the cryptographic hash of the Checkout JWT while conveying agent presence and modality signals. To prevent rainbow-table attacks against selective disclosures, the Checkout JWT MUST use a non-deterministic signature scheme such as `ECDSA` (`ES256`) rather than deterministic `Ed25519`. [7][8][17]"
      },
      {
       "label": "`kb+sd-jwt` key binding and selective disclosure",
       "text_md": "Mandate tokens use JOSE header `typ` `kb+sd-jwt` (`ES256`) with salted `disclosures` digests so only constraints relevant to a given verifier are revealed: the Merchant inspects line items and `checkout_jwt` without seeing raw payment credentials, while payment rails verify authorization constraints without full shopping-session transcripts. [7][8]"
      },
      {
       "label": "Receipts and pre-authorization boundary",
       "text_md": "Upon completion or rejection, the Merchant returns a Checkout Receipt and the Merchant Payment Processor MUST return a signed Payment Receipt for audit and dispute resolution. Security analysis (`arXiv:2608.23858`) notes that pre-authorization LLM inputs—such as `A2A` messages and `MCP` tool calls—remain outside mandate signature protection. [7][19]"
      }
     ]
    },
    {
     "id": "role-separation-payment-processor-rails-and-ucp-a2a-x402-integration",
     "heading": "Role separation, payment processor rails, and UCP / A2A / x402 integration",
     "body_md": "AP2 `v0.2` partitions transaction trust across four operational parties—Shopping Agent, Merchant, Credential Provider, and Merchant Payment Processor—plus a mandatory non-agentic Trusted Surface that collects informed user consent. Designed as a payment-method-agnostic security layer inside host commerce and agent transports, AP2 integrates with Universal Commerce Protocol (`UCP`), Agent2Agent (`A2A`), Model Context Protocol (`MCP`), and `x402` digital-currency flows under FIDO Alliance governance. [7][9]",
     "bullets": [
      {
       "label": "Deterministic verification and PCI isolation",
       "text_md": "While the Shopping Agent is expected to be an LLM-driven agent (and Merchant, Credential Provider, and Merchant Payment Processor MAY be agentic or non-agentic), the Trusted Surface MUST be non-agentic and every role's mandate validation MUST execute in deterministic code. Role separation and payload encryption keep sensitive PCI and PII payment credentials inside Credential Providers and payment processors rather than the Shopping Agent. [7][17]"
      },
      {
       "label": "UCP checkout capability and MCP tooling",
       "text_md": "AP2 `v0.2` is designed to pair directly with UCP: merchants advertise support in `/.well-known/ucp` via `dev.ucp.common.payment.ap2_mandate` in `ucp.dev/latest` (earlier `dev.ucp.shopping.ap2_mandate` extending `dev.ucp.shopping.checkout` in UCP `2026-01-11`). Developers can also expose AP2 provider integrations through MCP tools and servers. [7][20][21][22]"
      },
      {
       "label": "A2A extension (`v0.1`) and `x402` payment rails",
       "text_md": "In the `v0.1.0` A2A extension, supporting agents MUST advertise extension URI `https://github.com/google-agentic-commerce/ap2/tree/v0.1` (version 0.2 delegates transport to the host commerce protocol). Because AP2 is payment-method agnostic across pull cards and push rails, it pairs with `x402` (`google-agentic-commerce/a2a-x402`) for digital-currency settlement alongside partners including Adyen, American Express, Coinbase, Mastercard, PayPal, and Worldpay. [1][15][23]"
      },
      {
       "label": "FIDO Alliance donation and working groups",
       "text_md": "On `2026-04-28`—alongside the `v0.2.0` release—Google contributed Agent Payments Protocol to the FIDO Alliance, where ongoing specification work sits under the Agentic Authentication Technical Working Group and the Payments Technical Working Group. [2][10][12]"
      }
     ]
    }
   ],
   "v05_diagram": {
    "title": "Direct and Autonomous Checkout and Payment Mandates",
    "heading": "Direct and Autonomous Checkout and Payment Mandates",
    "mermaid": "sequenceDiagram\n    participant SA as Shopping Agent\n    participant TS as Trusted Surface\n    participant CP as Credential Provider\n    participant Merchant\n    participant MPP as Merchant Payment Processor\n    alt Direct, Human Present\n        Merchant-->>SA: merchant-signed JWT containing the Checkout\n        SA->>TS: Checkout and Payment Mandate Content\n        TS-->>SA: signed Checkout and Payment Mandates\n    else Autonomous, Human Not Present\n        SA->>TS: open Checkout and Payment Mandate Content\n        Note over TS: cnf is the agent's public key\n        TS-->>SA: user-signed open Mandate\n        Note over SA: signs the closed Mandates with its Agent Key\n    end\n    SA->>CP: Payment Mandate\n    CP-->>SA: payment credential\n    SA->>Merchant: payment credential and a Checkout Mandate\n    Merchant->>MPP: initiates payment\n    Merchant-->>SA: Checkout Receipt\n    MPP-->>SA: Payment Receipt",
    "caption_md": "`Human Present` direct mode and `Human Not Present` autonomous mode. The Shopping Agent passes Checkout Mandate and Payment Mandate content to the Trusted Surface. Autonomous open mandates include the agent's public key as `cnf`. Verifiers always receive a closed Payment Mandate and a closed Checkout Mandate. [7]"
   },
   "v05_wire_artifact": {
    "title": "Closed Checkout Mandate (`kb+sd-jwt`, `vct: mandate.checkout.1`)",
    "heading": "Closed Checkout Mandate (`kb+sd-jwt`, `vct: mandate.checkout.1`)",
    "lang": "json",
    "code": "{\n  \"issuer_signed_jwt\": {\n    \"header\": {\n      \"alg\": \"ES256\",\n      \"typ\": \"kb+sd-jwt\"\n    },\n    \"payload\": {\n      \"delegate_payload\": [\n        {\n          \"...\": \"7VLY-eKTFSShLoZRXY5jXcD2UHm1JvPmoANYRqqxy34\"\n        }\n      ],\n      \"iat\": 1777342376,\n      \"aud\": \"merchant\",\n      \"nonce\": \"b9c8d7e6f5a4b3c2d1e0f9a8b7c6d5e4\",\n      \"sd_hash\": \"FzLoxbbtgQGYZxoSM2NJYJtkFTSsdfUBoVEQ12k7JN8\",\n      \"_sd_alg\": \"sha-256\"\n    }\n  },\n  \"disclosures\": [\n    {\n      \"digest\": \"FzLoxbbtgQGYZxoSM2NJYJtkFTSsdfUBoVEQ12k7JN8\",\n      \"decoded\": [\n        \"w-n1leFT6z8rHTNHwr5Wow\",\n        \"checkout_jwt\",\n        {\n          \"header\": {\n            \"alg\": \"ES256\",\n            \"typ\": \"JWT\"\n          },\n          \"payload\": {\n            \"order_id\": \"09414145-b7bi-432e-bf5c-ha0ba0bc4580\",\n            \"merchant\": {\n              \"id\": \"merchant_1\",\n              \"name\": \"Demo Merchant\",\n              \"website\": \"https://demo-merchant.example\"\n            },\n            \"line_items\": [\n              {\n                \"id\": \"line_1\",\n                \"product\": {\n                  \"id\": \"supershoe_limited_edition_gold_sneaker_womens_9_0\",\n                  \"title\": \"SuperShoe Limited Edition Gold — Women's 9\",\n                  \"price\": 199.0,\n                  \"currency\": \"USD\"\n                },\n                \"quantity\": 1\n              }\n            ],\n            \"total_price\": 199.0,\n            \"currency\": \"USD\",\n            \"shipping_policy\": \"Standard Shipping\",\n            \"return_policy\": \"30-day returns\"\n          }\n        }\n      ]\n    },\n    {\n      \"digest\": \"7VLY-eKTFSShLoZRXY5jXcD2UHm1JvPmoANYRqqxy34\",\n      \"decoded\": [\n        \"szhpxKrgGJwyqMEN9WI5Sw\",\n        {\n          \"_sd\": [\n            \"3A9UyZJofw2eMP-Lx2tYaNpCcuB8elnhwwLhZLwqFFM\"\n          ],\n          \"vct\": \"mandate.checkout.1\",\n          \"checkout_hash\": \"NivWhuqfzcvZNapvIEJ2-3tsdQLkiuIcye2g46WVgX8\"\n        }\n      ]\n    }\n  ]\n}",
    "caption_md": "Closed Checkout Mandate SD-JWT (`alg` `ES256`, `typ` `kb+sd-jwt`, `_sd_alg` `sha-256`) plus decoded disclosures: one disclosure reveals the merchant-signed `checkout_jwt` order payload, while the delegate disclosure binds `vct` `mandate.checkout.1` and `checkout_hash`. [8]"
   },
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "Selective Disclosure for JWTs (SD-JWT, RFC 9901)",
      "spec_or_rfc": "RFC 9901",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "AP2 v0.2 specifies SD-JWTs for securing the Payment and Checkout Mandates. AP2's authorization document also names other verifiable digital credential formats, such as ISO mDocs (ISO 18013-5), that could be made to fulfill the same role. [7][14]"
     },
     {
      "name": "EMV 3-D Secure",
      "spec_or_rfc": "EMV 3-D Secure",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "Whereas classic web payment flows assume a human is directly clicking buy on a trusted website, AP2 authorizes agent-initiated transactions with a signed Checkout Mandate or Payment Mandate secured as an SD-JWT in v0.2. [7][9]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "ap2-checkout-mandate",
      "target_name": "AP2 Checkout Mandate",
      "relation_type": "has_component",
      "relation_label": "Has component",
      "delta_md": "The Checkout Mandate is an AP2 component, specified as a mandate for authorizing completion of a checkout. The Shopping Agent creates the mandate content, the Trusted Surface renders it to the user, and the Merchant verifies it. The v0.2 specification pairs that object with the Payment Mandate. [7][8]"
     },
     {
      "target_id": "ucp",
      "target_name": "Universal Commerce Protocol (UCP)",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "UCP is the commerce protocol that AP2 v0.2 is designed to be compatible with and to integrate with. AP2's FAQ calls AP2 the specialized payment layer for authorizing and signing transactions, while UCP orchestrates the broader purchase lifecycle. UCP's AP2 Mandates extension is how a business adds `dev.ucp.common.payment.ap2_mandate` to its `/.well-known/ucp` capabilities list. [7][20][24]"
     },
     {
      "target_id": "a2a",
      "target_name": "Agent2Agent Protocol (A2A)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "A2A is the agent-to-agent protocol that AP2 extends. Under the v0.1 A2A extension, the extension URI is `https://github.com/google-agentic-commerce/ap2/tree/v0.1`, and agents that support AP2 MUST use that URI. The v0.1 topic note treats A2A as tasks and messages between agents, and AP2 as how agents communicate about payments. [15][22]"
     },
     {
      "target_id": "vi",
      "target_name": "Verifiable Intent",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "Verifiable Intent is the framework Mastercard contributed to the FIDO Alliance, co-developed with Google and designed to work with AP2. The VI specification describes it as a layered SD-JWT credential format that binds an agent's commercial actions to a user's purchase intent. FIDO's slide deck targets harmonizing the AP2 and VI specifications by the end of 2026 and publishing a first consolidated version in mid-2027. AP2 v0.2, on its own specification, secures its checkout and payment mandates as SD-JWTs. [7][12][13][25]"
     },
     {
      "target_id": "x402",
      "target_name": "x402",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "x402 is the internet-native payment protocol whose v2 specification defines a payment payload and names the `PAYMENT-SIGNATURE` header. Google's AP2 launch describes crypto payment through a separate A2A x402 extension, and the AP2 x402 topic calls AP2 and x402 complementary. AP2 v0.2 secures its checkout and payment mandates as SD-JWTs. [1][6][7][23]"
     },
     {
      "target_id": "agentic-commerce-protocol",
      "target_name": "Agentic Commerce Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "ACP is an open standard, maintained by OpenAI and Stripe, for connecting buyers, their AI agents, and businesses to complete purchases. AP2 is the mandate protocol for authorizing agent payments. In v0.1, AP2 is discovered by an A2A extension URI rather than by a path named in that extension document. [3][7][15]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (4 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).",
    "side_a": {
     "visible": true,
     "heading": "Merchants, payment gateways & protocol extensions",
     "col4_header": "Mandate type (`Checkout Mandate` / `CartMandate`, `Payment Mandate` / `PaymentMandate`, `IntentMandate`) & rail",
     "note_md": null,
     "rows": [
      {
       "actor": "SingleFax (Monocube LLC)",
       "role": "Merchant",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Monocube LLC publishes the SingleFax agent card with a required AP2 extension at `https://github.com/google-agentic-commerce/AP2/tree/v0.1.0`, role `merchant`, version `0.1.0`, checkout mode `human_present`, and payment method `stripe_shared_payment_token`. singlefax.com/ap2.md says SingleFax implements the human-present merchant flow of AP2 v0.1.0 and accepts Stripe Shared Payment Tokens (SPTs). The cart request carries an unsigned `IntentMandate`; the response includes `ap2.mandates.CartMandate`; prepare sends `ap2.mandates.PaymentMandate`. AP2 v0.2 and purchases without the user present are not negotiated.",
       "source_md": "[SingleFax agent card (fetched 2026-10-30)](https://singlefax.com/.well-known/agent-card.json) [26] · [SingleFax AP2 payments (fetched 2026-10-30)](https://singlefax.com/ap2.md) [27]"
      },
      {
       "actor": "AlgoVoi",
       "role": "Payment gateway",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "The extensions document sets `ap2_version` to `0.1`. AlgoVoi Crypto Payment Method adds multi-chain methods for Algorand, VOI, Hedera, Stellar, Base, Solana, Tempo, and ARC, used as `PaymentMethodData.supported_methods`. AlgoVoi Intent Bounds adds optional max_price and max_quantity fields to `IntentMandate`. The AlgoVoi Payment Agent card says it gates access using x402, MPP (IETF), or AP2. The host OpenAPI document titles the service AlgoVoi Gateway, a public-facing x402 payment gateway.",
       "source_md": "[AlgoVoi AP2 extensions (fetched 2026-10-30)](https://api.algovoi.co.uk/ap2/extensions) [28] · [AlgoVoi Payment Agent card (fetched 2026-10-30)](https://api.algovoi.co.uk/.well-known/agent-card.json) [29] · [AlgoVoi Gateway OpenAPI (fetched 2026-10-30)](https://api.algovoi.co.uk/openapi.json) [30]"
      },
      {
       "actor": "Universal Commerce Protocol (UCP) AP2 Mandates Extension",
       "role": "Protocol extension",
       "status": "Supported",
       "status_display": "Supported · as of 2026-08-25",
       "col4_md": "Businesses declare support by adding `dev.ucp.common.payment.ap2_mandate` to their capabilities list in `/.well-known/ucp`. When that capability is in the intersection, the business MUST include `ap2.merchant_authorization` on checkout responses and MUST NOT accept `complete_checkout` without `ap2.checkout_mandate`. Mandates are SD-JWT credentials; the extension places `checkout_mandate` at `ap2.checkout_mandate` and `payment_mandate` at `payment.instruments[*].credential.token`. Allbirds' `/.well-known/ucp` (version 2026-08-25) lists `dev.ucp.shopping.checkout`, and IKEA's `/.well-known/ucp` (version 2026-04-08, with 2026-08-25 under `supported_versions`) lists `dev.ucp.shopping.checkout` and `dev.ucp.shopping.fulfillment`; neither declares `dev.ucp.common.payment.ap2_mandate`.",
       "source_md": "[UCP AP2 Mandates Extension (fetched 2026-10-30)](https://ucp.dev/latest/specification/payment/extensions/ap2-mandates/) [20] · [allbirds.com UCP profile (fetched 2026-10-30)](https://www.allbirds.com/.well-known/ucp) [31] · [ikea.com UCP profile (fetched 2026-10-30)](https://www.ikea.com/.well-known/ucp) [32]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Buying agents, wallets & client SDKs",
     "col4_header": "Supported mandates & SDK surface",
     "note_md": null,
     "rows": [
      {
       "actor": "google-agentic-commerce/AP2 Python package",
       "role": "Client SDK",
       "status": "Partial",
       "status_display": "Partial · as of 2026-10-30",
       "col4_md": "The repository defines the protocol's core objects under `code/sdk/python/ap2/`, with Pydantic models and canonical JSON schemas. A PyPI package will be published at a later time; until then the documented install is `uv pip install git+https://github.com/google-agentic-commerce/AP2.git@main`. The FAQ says sample agents were built around the core AP2 python library, that those samples mock actual payment service providers, and that an SDK and a MCP server are still in progress with payment service providers. That FAQ names the Checkout Mandate and the Payment Mandate as verifiable credentials.",
       "source_md": "[google-agentic-commerce/AP2 (fetched 2026-10-30)](https://github.com/google-agentic-commerce/AP2) [11] · [AP2 FAQ (fetched 2026-10-30)](https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/faq.md) [24]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [
     {
      "label": "arXiv 2608.23858",
      "as_of": "2026-08-24",
      "value_md": "A security analysis submitted on 24 Aug 2026 says no complete public AP2 deployment was available, so the authors built a testbed instead. [19]"
     },
     {
      "label": "allbirds.com and ikea.com UCP profiles",
      "as_of": "2026-10-30",
      "value_md": "0 of 2 UCP business profiles fetched on 2026-10-30 (allbirds.com version 2026-08-25, ikea.com version 2026-04-08) declare dev.ucp.common.payment.ap2_mandate. [20][31][32]"
     },
     {
      "label": "AP2 v0.1.0 docs/partners.md",
      "as_of": null,
      "value_md": "The tagged v0.1.0 docs/partners.md snapshot lists 56 named launch-community partners in the AP2 community, from 1Password through manus.ai (including Adyen and PayPal); its introductory line referred to adopting A2A (which AP2 v0.1 extended) for AI agent payments. [33]"
     }
    ],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Machine Payments Protocol (MPP)](/protocols/mpp/)** *(Complements)* — MPP moves the HTTP request's payment via an Authorization: Payment credential, while AP2 is the SD-JWT Checkout Mandate that records delegated authority and is not the WWW-Authenticate challenge."
    },
    {
     "item_md": "**[VCAP: Verified Commerce for Agent Protocols](/protocols/vcap/)** *(Complements)* — VCAP binds release and refund to machine-checkable delivery evidence, while AP2 is the SD-JWT Checkout Mandate and does not define those escrow transitions."
    },
    {
     "item_md": "**[s402](/protocols/s402/)** *(Deprecated; formerly a profile/extension)* — Retired in September 2026 in favor of standard x402; s402 marked its profile with the extensions.s402 key on the x402 v2 402 envelope over Sui transactions rather than AP2 SD-JWT Checkout Mandates."
    },
    {
     "item_md": "**[EMV® Agentic Payments – Framework for Specifications](/protocols/emv-agentic-payments/)** *(Complements)* — AP2 already specifies an SD-JWT Checkout Mandate and Payment Mandate a merchant can verify, while this EMVCo draft is a framework for future specifications, including possible later changes to 3-D Secure, and has no mandate syntax."
    },
    {
     "item_md": "**[Agent-Initiated Payment Gating](/protocols/agentic-payments-gating-model/)** *(Complements)* — The draft cites AP2 as the mandate for delegated authority at the gate, while its own text is the task state machine and not the SD-JWT Checkout Mandate."
    },
    {
     "item_md": "**[Agentic Mobile Protocol (AMP)](/protocols/amp-ant/)** *(Peer alternative)* — AMP assurance data is an SD-JWT across three layers, followed by an Alipay+ CGCP Payment Token longer than 24 bits, while AP2's checkout credential is an SD-JWT verifiable credential for the Checkout Mandate signed on a Trusted Surface."
    },
    {
     "item_md": "**[KYAPay Token](/protocols/kyapay-token/)** *(Peer alternative)* — KYAPay binds the authorizing party, the agent platform, and a coin or card instrument inside one JWT, while AP2's checkout authorization is an SD-JWT verifiable credential for the Checkout Mandate."
    },
    {
     "item_md": "**[Agent Commerce Kit (ACK)](/protocols/agent-commerce-kit/)** *(Peer alternative)* — ACK-Pay's published proof of payment is a W3C VC receipt and ACK-ID is the DID identity layer, while AP2's proof of authorization is an SD-JWT Checkout Mandate signed on a Trusted Surface."
    },
    {
     "item_md": "**[Agent Network Protocol (ANP)](/protocols/anp/)** *(Complements)* — `ANP-10` (`Version: 1.1`, `Status: Draft / not released`) adapts `AP2` `v0.1.0` `CartMandate` and `PaymentMandate` objects (plus `DeliveryReceipt`) signed with `JWT`/`JWS` for `did:wba` agents (`IntentMandate` deferred / not supported; `SD-JWT` listed as an unchecked future roadmap item), rather than `AP2` `v0.2` `Checkout Mandate` and `Payment Mandate` `SD-JWT`s (`mandate.checkout.1` / `mandate.payment.1`)."
    },
    {
     "item_md": "**[Agent Interaction & Transaction Protocol (AITP)](/protocols/aitp/)** *(Peer alternative)* — AITP defines its own quote and payment JSON capability messages in AITP-01: Payments (Spec Status: Ideation, Implementation Status: In Development) and does not reference AP2, whereas AP2 is Google's verifiable-credential mandate protocol."
    },
    {
     "item_md": "**[Agent-to-Wallet Protocol for Digital Credentials (A2WP)](/protocols/a2wp/)** *(Complements)* — AP2 is the verifiable-credential mandate protocol, while A2WP is the agent-to-wallet hand-off of OpenID4VCI and OpenID4VP requests and leaves transport out of scope."
    },
    {
     "item_md": "**[Trusted Agent Protocol (TAP)](/protocols/tap/)** *(Complements)* — AP2 carries checkout and payment mandates for a purchase, while TAP authenticates the agent HTTP call to the merchant with the message signature and Visa ID Token."
    },
    {
     "item_md": "**[ERC-8226 Regulated Agent Mandate](/protocols/erc-8226/)** *(Peer alternative)* — AP2 mandates are off-chain checkout and payment credentials presented to a merchant or network, while an ERC-8226 mandate is an on-chain IAgentMandate record checked inside the token call."
    },
    {
     "item_md": "**[Agent Attribution Protocol (AAP)](/protocols/agent-attribution-protocol/)** *(Complements)* — AP2 authorizes a payment with checkout and payment mandates, while AAP's Rako-signed AAP Code attributes a recommend() event to a later checkout() conversion."
    },
    {
     "item_md": "**[Agent Delegation Receipts](/protocols/agent-delegation-receipts/)** *(Complements)* — AP2 payment mandates authorize a checkout, while a delegation receipt is a JWS over JCS JSON, or a COSE_Sign1, that binds the operator-instruction hash before the agent acts."
    },
    {
     "item_md": "**[Agent Decision Commitments for Payments (ADC)](/protocols/agent-decision-commitment/)** *(Depended on by)* — AP2 is the payment-mandate protocol ADC binds to, and the added claim is decision_context, a salted hash commitment registered with a SCITT transparency service."
    },
    {
     "item_md": "**[ERC-8196: AI Agent Authenticated Wallet](/protocols/erc-8196/)** *(Complements)* — AP2 authorizes a checkout with payment mandates, and ERC-8196 is the ERC-4337 wallet that executes an agent transaction only when cryptographic proof shows the action matches the registered policy."
    },
    {
     "item_md": "**[Pay protocols](/category/pay/)** — Category index for `pay` standards."
    }
   ],
   "v05_compiled_md": "---\nid: ap2\ntitle: \"Agent Payments Protocol (AP2)\"\ntier: flagship\nlifecycle_status: active\ncategory: pay\nform: endpoint\nwire_archetype: payments_onchain\nspec_url: https://ap2-protocol.org/ap2/specification/\nlast_checked: 2026-11-12\n---\n\n# Agent Payments Protocol (AP2)\n\n**Category:** [Pay](/category/pay/) (`pay`) · **Form:** Endpoint (`endpoint`) · **Last checked:** 2026-11-12\n\n> *This page is about the Agent Payments Protocol (AP2), announced by Google on 2025-09-16 and donated to the FIDO Alliance on 2026-04-28. It is not the Agentic Commerce Protocol (ACP), maintained by OpenAI and Stripe; see [Agentic Commerce Protocol](/protocols/agentic-commerce-protocol/). It is not Visa's Trusted Agent Protocol (TAP), with which an agent proves its identity and associated authorization directly to merchants; see [Visa Trusted Agent Protocol](/protocols/tap/). For the separate A2A x402 extension and the x402 payment protocol, see [x402](/protocols/x402/). For the Universal Commerce Protocol, which the AP2 v0.2 specification is designed to be compatible with, see [Universal Commerce Protocol](/protocols/ucp/). [1][2][3][4][5][6][7]*\n\n> **In brief:** Agent Payments Protocol (`AP2`, also titled *Agentic Payment Protocol* in the `v0.2` specification) is an open payment-authorization protocol originated by Google and donated to the FIDO Alliance that binds agent-initiated purchases to cryptographically signed `Checkout Mandate` and `Payment Mandate` credentials. Across Human Present (`Direct`) and Human Not Present (`Autonomous`) flows, it uses Selective Disclosure JWTs (`typ: \"kb+sd-jwt\"`, `ES256`) so merchants verify authorized cart contents (`mandate.checkout.1`) and credential providers and payment processors verify payment authorization without exposing raw PCI credentials to the shopping agent. [2][7][8]\n\nThe Agentic Payment Protocol (AP2) provides a protocol to secure agent-performed payment transactions. It is an open protocol for the emerging Agent Economy, designed to enable secure, reliable, and interoperable agent commerce. [7][9] The Shopping Agent passes Checkout and Payment Mandate content from the merchant's Checkout JWT to a Trusted Surface for the user to sign. In Human Not Present mode, the user approves constraints, and an agent key signs the closed Mandates. [7] GitHub shows `v0.2.0` as the second release, focused on Human Not Present flows, and `v0.1.0` (`2025-09-16`) as the release that created the protocol. On `2026-04-28`, Google's post says it is donating the Agent Payments Protocol to the FIDO Alliance. [2][10]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Pay](/category/pay/) (`pay`) |\n| **Form** | Endpoint (`endpoint`) |\n| **Originated by** | Google (Stavan Parikh, VP/GM, Payments, and Rao Surapaneni, VP/GM, Business Applications Platform), announced September 16, 2025. The `google-agentic-commerce/AP2` repository was created 2025-05-30. [1][11] |\n| **Governed by** | FIDO Alliance, after Google's donation on 2026-04-28. FIDO is developing agent-initiated commerce specifications in its Payments Technical Working Group, chaired by members from Mastercard and Visa. Google's docs say standardization continues in FIDO's Agentic Authentication Technical Working Group and Payments Technical Working Group, and that the public GitHub repository hosts the specification, documentation, and SDK. [2][9][12] |\n| **Track** | Industry body (FIDO Alliance). Google's docs say standardization of the specification continues in the Agentic Authentication Technical and Payments Technical Working Groups in FIDO. [9][12] |\n| **Status** | Public specification titled Agentic Payment Protocol (v0.2). FIDO's September 2026 W3C workshop presentation (`Jean_Luc_Di_Manno_FIDO.pdf`, PDF creation timestamp 2026-09-09, Slide 6) states: \"September 2026: AP2/VI specs moved to public repository for review,\" and labels later steps as targets: harmonize the AP2 and VI specifications at the end of 2026, and publish a first version of the consolidated specifications in mid-2027. [7][13] |\n| **Version** | v0.1.0 (2025-09-16), the release that created the protocol, and v0.2.0, which GitHub shows as released 28 Apr and describes as the second release, focused on Human Not Present flows. Google's post dated 2026-04-28 says it is releasing AP2 v.0.2 that day. The current specification heading is Agentic Payment Protocol (v0.2). [2][7][10] |\n| **Message format** | Mandates secured as SD-JWTs. The authorization document specifies OpenID4VP with SD-JWT verifiable credentials, and says other verifiable digital credential formats such as ISO mDocs (ISO 18013-5) could be made to fulfill the same role. [7][14] |\n| **Transports** | Extension of Agent2Agent (A2A) and the Model Context Protocol (MCP), and of the Universal Commerce Protocol. `v0.1` defines an A2A extension URI of `https://github.com/google-agentic-commerce/ap2/tree/v0.1`, which supporting agents MUST use; `v0.2` defines no A2A binding (`v0.1` only). [1][9][15] |\n| **Specification** | [Agentic Payment Protocol (v0.2)](https://ap2-protocol.org/ap2/specification/) [7][16] |\n| **Found at** | [ap2-protocol.org](https://ap2-protocol.org/) (repository homepage) and [google-agentic-commerce/AP2](https://github.com/google-agentic-commerce/AP2), which the docs say hosts the specification, documentation, and SDK. [9][11] |\n| **Licence** | Apache License 2.0 (`Apache-2.0`) on the `google-agentic-commerce/AP2` repository. [11] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Mandate lifecycle, Checkout vs Payment Mandates, and SD-JWT cryptographic bindings](#mandate-lifecycle-checkout-vs-payment-mandates-and-sd-jwt-cryptographic-bindings)\n3. [Role separation, payment processor rails, and UCP / A2A / x402 integration](#role-separation-payment-processor-rails-and-ucp-a2a-x402-integration)\n4. [Counterparts and related standards](#counterparts-and-related-standards)\n5. [Adoption and ecosystem](#adoption-and-ecosystem)\n6. [See also](#see-also)\n7. [References](#references)\n\n---\n\n## Problem and scope\n\nToday's payment systems assume a human is directly clicking buy on a trusted website. When an autonomous agent initiates a payment, this core assumption is broken, and current systems cannot answer authorization, authenticity, and accountability. [9] AP2 builds trust with mandates: tamper-proof, cryptographically signed digital contracts that serve as verifiable proof of a user's instructions. Mandates are the means AP2 uses to authorize agents, and the specification defines two types, the Checkout Mandate and the Payment Mandate. [1][7] AP2 operates as a security feature within a Commerce Protocol. Catalog APIs, checkout updates, and the specific APIs for communication between the different roles are outside the scope of AP2. [7]\n\n### Direct and Autonomous Checkout and Payment Mandates\n\n```mermaid\nsequenceDiagram\n    participant SA as Shopping Agent\n    participant TS as Trusted Surface\n    participant CP as Credential Provider\n    participant Merchant\n    participant MPP as Merchant Payment Processor\n    alt Direct, Human Present\n        Merchant-->>SA: merchant-signed JWT containing the Checkout\n        SA->>TS: Checkout and Payment Mandate Content\n        TS-->>SA: signed Checkout and Payment Mandates\n    else Autonomous, Human Not Present\n        SA->>TS: open Checkout and Payment Mandate Content\n        Note over TS: cnf is the agent's public key\n        TS-->>SA: user-signed open Mandate\n        Note over SA: signs the closed Mandates with its Agent Key\n    end\n    SA->>CP: Payment Mandate\n    CP-->>SA: payment credential\n    SA->>Merchant: payment credential and a Checkout Mandate\n    Merchant->>MPP: initiates payment\n    Merchant-->>SA: Checkout Receipt\n    MPP-->>SA: Payment Receipt\n```\n\n*`Human Present` direct mode and `Human Not Present` autonomous mode. The Shopping Agent passes Checkout Mandate and Payment Mandate content to the Trusted Surface. Autonomous open mandates include the agent's public key as `cnf`. Verifiers always receive a closed Payment Mandate and a closed Checkout Mandate. [7]*\n\n### Closed Checkout Mandate (`kb+sd-jwt`, `vct: mandate.checkout.1`)\n\n```json\n{\n  \"issuer_signed_jwt\": {\n    \"header\": {\n      \"alg\": \"ES256\",\n      \"typ\": \"kb+sd-jwt\"\n    },\n    \"payload\": {\n      \"delegate_payload\": [\n        {\n          \"...\": \"7VLY-eKTFSShLoZRXY5jXcD2UHm1JvPmoANYRqqxy34\"\n        }\n      ],\n      \"iat\": 1777342376,\n      \"aud\": \"merchant\",\n      \"nonce\": \"b9c8d7e6f5a4b3c2d1e0f9a8b7c6d5e4\",\n      \"sd_hash\": \"FzLoxbbtgQGYZxoSM2NJYJtkFTSsdfUBoVEQ12k7JN8\",\n      \"_sd_alg\": \"sha-256\"\n    }\n  },\n  \"disclosures\": [\n    {\n      \"digest\": \"FzLoxbbtgQGYZxoSM2NJYJtkFTSsdfUBoVEQ12k7JN8\",\n      \"decoded\": [\n        \"w-n1leFT6z8rHTNHwr5Wow\",\n        \"checkout_jwt\",\n        {\n          \"header\": {\n            \"alg\": \"ES256\",\n            \"typ\": \"JWT\"\n          },\n          \"payload\": {\n            \"order_id\": \"09414145-b7bi-432e-bf5c-ha0ba0bc4580\",\n            \"merchant\": {\n              \"id\": \"merchant_1\",\n              \"name\": \"Demo Merchant\",\n              \"website\": \"https://demo-merchant.example\"\n            },\n            \"line_items\": [\n              {\n                \"id\": \"line_1\",\n                \"product\": {\n                  \"id\": \"supershoe_limited_edition_gold_sneaker_womens_9_0\",\n                  \"title\": \"SuperShoe Limited Edition Gold — Women's 9\",\n                  \"price\": 199.0,\n                  \"currency\": \"USD\"\n                },\n                \"quantity\": 1\n              }\n            ],\n            \"total_price\": 199.0,\n            \"currency\": \"USD\",\n            \"shipping_policy\": \"Standard Shipping\",\n            \"return_policy\": \"30-day returns\"\n          }\n        }\n      ]\n    },\n    {\n      \"digest\": \"7VLY-eKTFSShLoZRXY5jXcD2UHm1JvPmoANYRqqxy34\",\n      \"decoded\": [\n        \"szhpxKrgGJwyqMEN9WI5Sw\",\n        {\n          \"_sd\": [\n            \"3A9UyZJofw2eMP-Lx2tYaNpCcuB8elnhwwLhZLwqFFM\"\n          ],\n          \"vct\": \"mandate.checkout.1\",\n          \"checkout_hash\": \"NivWhuqfzcvZNapvIEJ2-3tsdQLkiuIcye2g46WVgX8\"\n        }\n      ]\n    }\n  ]\n}\n```\n\n*Closed Checkout Mandate SD-JWT (`alg` `ES256`, `typ` `kb+sd-jwt`, `_sd_alg` `sha-256`) plus decoded disclosures: one disclosure reveals the merchant-signed `checkout_jwt` order payload, while the delegate disclosure binds `vct` `mandate.checkout.1` and `checkout_hash`. [8]*\n\n---\n\n## Mandate lifecycle, Checkout vs Payment Mandates, and SD-JWT cryptographic bindings\n\nWhile `AP2` `v0.1.0` (`2025-09-16`) modeled authorizations around three W3C Verifiable Credentials (`CartMandate`, `IntentMandate`, and `PaymentMandate`), `AP2` `v0.2` (`v0.2.0`, `2026-04-28`) consolidates agent authorization onto two linked Selective Disclosure JWT (`RFC 9901`) credential families—the Checkout Mandate and the Payment Mandate—paired with signed Receipts for dispute evidence. Across both `Direct` (Human Present) and `Autonomous` (Human Not Present) modes, verifiers always receive closed mandates whose schema version is pinned via a mandatory numeric suffix on `vct`. [7][10][17][18]\n\n- **Closed and open Checkout Mandates (`mandate.checkout.1` / `mandate.checkout.open.1`):** Replacing `v0.1.0`'s separate `CartMandate` and `IntentMandate`, a closed Checkout Mandate MUST set `vct` to `mandate.checkout.1` and bind the merchant-signed `checkout_jwt` via its base64url-encoded `checkout_hash` (`_sd_alg` `sha-256` by default). In `Autonomous` mode, the user first signs an open Checkout Mandate (`vct` `mandate.checkout.open.1`) over merchant and line-item constraints with the Shopping Agent's public key in `cnf`, allowing the agent key to sign the final closed mandate. [7][8][17]\n- **Linked Payment Mandate (`mandate.payment.1`) and non-deterministic cart signing:** The Payment Mandate (`mandate.payment.1`) gives the Credential Provider, payment network, and Merchant Payment Processor cryptographic proof that the Shopping Agent is authorized to pay for a specific Checkout, bound via the cryptographic hash of the Checkout JWT while conveying agent presence and modality signals. To prevent rainbow-table attacks against selective disclosures, the Checkout JWT MUST use a non-deterministic signature scheme such as `ECDSA` (`ES256`) rather than deterministic `Ed25519`. [7][8][17]\n- **`kb+sd-jwt` key binding and selective disclosure:** Mandate tokens use JOSE header `typ` `kb+sd-jwt` (`ES256`) with salted `disclosures` digests so only constraints relevant to a given verifier are revealed: the Merchant inspects line items and `checkout_jwt` without seeing raw payment credentials, while payment rails verify authorization constraints without full shopping-session transcripts. [7][8]\n- **Receipts and pre-authorization boundary:** Upon completion or rejection, the Merchant returns a Checkout Receipt and the Merchant Payment Processor MUST return a signed Payment Receipt for audit and dispute resolution. Security analysis (`arXiv:2608.23858`) notes that pre-authorization LLM inputs—such as `A2A` messages and `MCP` tool calls—remain outside mandate signature protection. [7][19]\n\n---\n\n## Role separation, payment processor rails, and UCP / A2A / x402 integration\n\nAP2 `v0.2` partitions transaction trust across four operational parties—Shopping Agent, Merchant, Credential Provider, and Merchant Payment Processor—plus a mandatory non-agentic Trusted Surface that collects informed user consent. Designed as a payment-method-agnostic security layer inside host commerce and agent transports, AP2 integrates with Universal Commerce Protocol (`UCP`), Agent2Agent (`A2A`), Model Context Protocol (`MCP`), and `x402` digital-currency flows under FIDO Alliance governance. [7][9]\n\n- **Deterministic verification and PCI isolation:** While the Shopping Agent is expected to be an LLM-driven agent (and Merchant, Credential Provider, and Merchant Payment Processor MAY be agentic or non-agentic), the Trusted Surface MUST be non-agentic and every role's mandate validation MUST execute in deterministic code. Role separation and payload encryption keep sensitive PCI and PII payment credentials inside Credential Providers and payment processors rather than the Shopping Agent. [7][17]\n- **UCP checkout capability and MCP tooling:** AP2 `v0.2` is designed to pair directly with UCP: merchants advertise support in `/.well-known/ucp` via `dev.ucp.common.payment.ap2_mandate` in `ucp.dev/latest` (earlier `dev.ucp.shopping.ap2_mandate` extending `dev.ucp.shopping.checkout` in UCP `2026-01-11`). Developers can also expose AP2 provider integrations through MCP tools and servers. [7][20][21][22]\n- **A2A extension (`v0.1`) and `x402` payment rails:** In the `v0.1.0` A2A extension, supporting agents MUST advertise extension URI `https://github.com/google-agentic-commerce/ap2/tree/v0.1` (version 0.2 delegates transport to the host commerce protocol). Because AP2 is payment-method agnostic across pull cards and push rails, it pairs with `x402` (`google-agentic-commerce/a2a-x402`) for digital-currency settlement alongside partners including Adyen, American Express, Coinbase, Mastercard, PayPal, and Worldpay. [1][15][23]\n- **FIDO Alliance donation and working groups:** On `2026-04-28`—alongside the `v0.2.0` release—Google contributed Agent Payments Protocol to the FIDO Alliance, where ongoing specification work sits under the Agentic Authentication Technical Working Group and the Payments Technical Working Group. [2][10][12]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **Selective Disclosure for JWTs (SD-JWT, RFC 9901)** | `RFC 9901` | Profiles classic standard | AP2 v0.2 specifies SD-JWTs for securing the Payment and Checkout Mandates. AP2's authorization document also names other verifiable digital credential formats, such as ISO mDocs (ISO 18013-5), that could be made to fulfill the same role. [7][14] |\n| **EMV 3-D Secure** | `EMV 3-D Secure` | Analogous to classic standard | Whereas classic web payment flows assume a human is directly clicking buy on a trusted website, AP2 authorizes agent-initiated transactions with a signed Checkout Mandate or Payment Mandate secured as an SD-JWT in v0.2. [7][9] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[AP2 Checkout Mandate](/protocols/ap2-checkout-mandate/)** | Has component | The Checkout Mandate is an AP2 component, specified as a mandate for authorizing completion of a checkout. The Shopping Agent creates the mandate content, the Trusted Surface renders it to the user, and the Merchant verifies it. The v0.2 specification pairs that object with the Payment Mandate. [7][8] |\n| **[Universal Commerce Protocol (UCP)](/protocols/ucp/)** | Builds on | UCP is the commerce protocol that AP2 v0.2 is designed to be compatible with and to integrate with. AP2's FAQ calls AP2 the specialized payment layer for authorizing and signing transactions, while UCP orchestrates the broader purchase lifecycle. UCP's AP2 Mandates extension is how a business adds `dev.ucp.common.payment.ap2_mandate` to its `/.well-known/ucp` capabilities list. [7][20][24] |\n| **[Agent2Agent Protocol (A2A)](/protocols/a2a/)** | Complements | A2A is the agent-to-agent protocol that AP2 extends. Under the v0.1 A2A extension, the extension URI is `https://github.com/google-agentic-commerce/ap2/tree/v0.1`, and agents that support AP2 MUST use that URI. The v0.1 topic note treats A2A as tasks and messages between agents, and AP2 as how agents communicate about payments. [15][22] |\n| **[Verifiable Intent](/protocols/vi/)** | Peer alternative | Verifiable Intent is the framework Mastercard contributed to the FIDO Alliance, co-developed with Google and designed to work with AP2. The VI specification describes it as a layered SD-JWT credential format that binds an agent's commercial actions to a user's purchase intent. FIDO's slide deck targets harmonizing the AP2 and VI specifications by the end of 2026 and publishing a first consolidated version in mid-2027. AP2 v0.2, on its own specification, secures its checkout and payment mandates as SD-JWTs. [7][12][13][25] |\n| **[x402](/protocols/x402/)** | Complements | x402 is the internet-native payment protocol whose v2 specification defines a payment payload and names the `PAYMENT-SIGNATURE` header. Google's AP2 launch describes crypto payment through a separate A2A x402 extension, and the AP2 x402 topic calls AP2 and x402 complementary. AP2 v0.2 secures its checkout and payment mandates as SD-JWTs. [1][6][7][23] |\n| **[Agentic Commerce Protocol](/protocols/agentic-commerce-protocol/)** | Complements | ACP is an open standard, maintained by OpenAI and Stripe, for connecting buyers, their AI agents, and businesses to complete purchases. AP2 is the mandate protocol for authorizing agent payments. In v0.1, AP2 is discovered by an A2A extension URI rather than by a path named in that extension document. [3][7][15] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (4 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).*\n\n### Merchants, payment gateways & protocol extensions\n\n| Actor | Role | Status | Mandate type (`Checkout Mandate` / `CartMandate`, `Payment Mandate` / `PaymentMandate`, `IntentMandate`) & rail | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **SingleFax (Monocube LLC)** | Merchant | Live (HTTP 200) · checked 2026-10-30 | Monocube LLC publishes the SingleFax agent card with a required AP2 extension at `https://github.com/google-agentic-commerce/AP2/tree/v0.1.0`, role `merchant`, version `0.1.0`, checkout mode `human_present`, and payment method `stripe_shared_payment_token`. singlefax.com/ap2.md says SingleFax implements the human-present merchant flow of AP2 v0.1.0 and accepts Stripe Shared Payment Tokens (SPTs). The cart request carries an unsigned `IntentMandate`; the response includes `ap2.mandates.CartMandate`; prepare sends `ap2.mandates.PaymentMandate`. AP2 v0.2 and purchases without the user present are not negotiated. | [SingleFax agent card (fetched 2026-10-30)](https://singlefax.com/.well-known/agent-card.json) [26] · [SingleFax AP2 payments (fetched 2026-10-30)](https://singlefax.com/ap2.md) [27] |\n| **AlgoVoi** | Payment gateway | Live (HTTP 200) · checked 2026-10-30 | The extensions document sets `ap2_version` to `0.1`. AlgoVoi Crypto Payment Method adds multi-chain methods for Algorand, VOI, Hedera, Stellar, Base, Solana, Tempo, and ARC, used as `PaymentMethodData.supported_methods`. AlgoVoi Intent Bounds adds optional max_price and max_quantity fields to `IntentMandate`. The AlgoVoi Payment Agent card says it gates access using x402, MPP (IETF), or AP2. The host OpenAPI document titles the service AlgoVoi Gateway, a public-facing x402 payment gateway. | [AlgoVoi AP2 extensions (fetched 2026-10-30)](https://api.algovoi.co.uk/ap2/extensions) [28] · [AlgoVoi Payment Agent card (fetched 2026-10-30)](https://api.algovoi.co.uk/.well-known/agent-card.json) [29] · [AlgoVoi Gateway OpenAPI (fetched 2026-10-30)](https://api.algovoi.co.uk/openapi.json) [30] |\n| **Universal Commerce Protocol (UCP) AP2 Mandates Extension** | Protocol extension | Supported · as of 2026-08-25 | Businesses declare support by adding `dev.ucp.common.payment.ap2_mandate` to their capabilities list in `/.well-known/ucp`. When that capability is in the intersection, the business MUST include `ap2.merchant_authorization` on checkout responses and MUST NOT accept `complete_checkout` without `ap2.checkout_mandate`. Mandates are SD-JWT credentials; the extension places `checkout_mandate` at `ap2.checkout_mandate` and `payment_mandate` at `payment.instruments[*].credential.token`. Allbirds' `/.well-known/ucp` (version 2026-08-25) lists `dev.ucp.shopping.checkout`, and IKEA's `/.well-known/ucp` (version 2026-04-08, with 2026-08-25 under `supported_versions`) lists `dev.ucp.shopping.checkout` and `dev.ucp.shopping.fulfillment`; neither declares `dev.ucp.common.payment.ap2_mandate`. | [UCP AP2 Mandates Extension (fetched 2026-10-30)](https://ucp.dev/latest/specification/payment/extensions/ap2-mandates/) [20] · [allbirds.com UCP profile (fetched 2026-10-30)](https://www.allbirds.com/.well-known/ucp) [31] · [ikea.com UCP profile (fetched 2026-10-30)](https://www.ikea.com/.well-known/ucp) [32] |\n\n### Buying agents, wallets & client SDKs\n\n| Actor | Role | Status | Supported mandates & SDK surface | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **google-agentic-commerce/AP2 Python package** | Client SDK | Partial · as of 2026-10-30 | The repository defines the protocol's core objects under `code/sdk/python/ap2/`, with Pydantic models and canonical JSON schemas. A PyPI package will be published at a later time; until then the documented install is `uv pip install git+https://github.com/google-agentic-commerce/AP2.git@main`. The FAQ says sample agents were built around the core AP2 python library, that those samples mock actual payment service providers, and that an SDK and a MCP server are still in progress with payment service providers. That FAQ names the Checkout Mandate and the Payment Mandate as verifiable credentials. | [google-agentic-commerce/AP2 (fetched 2026-10-30)](https://github.com/google-agentic-commerce/AP2) [11] · [AP2 FAQ (fetched 2026-10-30)](https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/faq.md) [24] |\n\n### Ecosystem censuses\n\n- **arXiv 2608.23858** (*as of 2026-08-24*): A security analysis submitted on 24 Aug 2026 says no complete public AP2 deployment was available, so the authors built a testbed instead. [19]\n- **allbirds.com and ikea.com UCP profiles** (*as of 2026-10-30*): 0 of 2 UCP business profiles fetched on 2026-10-30 (allbirds.com version 2026-08-25, ikea.com version 2026-04-08) declare dev.ucp.common.payment.ap2_mandate. [20][31][32]\n- **AP2 v0.1.0 docs/partners.md**: The tagged v0.1.0 docs/partners.md snapshot lists 56 named launch-community partners in the AP2 community, from 1Password through manus.ai (including Adyen and PayPal); its introductory line referred to adopting A2A (which AP2 v0.1 extended) for AI agent payments. [33]\n\n---\n\n## See also\n\n- **[Machine Payments Protocol (MPP)](/protocols/mpp/)** *(Complements)* — MPP moves the HTTP request's payment via an Authorization: Payment credential, while AP2 is the SD-JWT Checkout Mandate that records delegated authority and is not the WWW-Authenticate challenge.\n- **[VCAP: Verified Commerce for Agent Protocols](/protocols/vcap/)** *(Complements)* — VCAP binds release and refund to machine-checkable delivery evidence, while AP2 is the SD-JWT Checkout Mandate and does not define those escrow transitions.\n- **[s402](/protocols/s402/)** *(Deprecated; formerly a profile/extension)* — Retired in September 2026 in favor of standard x402; s402 marked its profile with the extensions.s402 key on the x402 v2 402 envelope over Sui transactions rather than AP2 SD-JWT Checkout Mandates.\n- **[EMV® Agentic Payments – Framework for Specifications](/protocols/emv-agentic-payments/)** *(Complements)* — AP2 already specifies an SD-JWT Checkout Mandate and Payment Mandate a merchant can verify, while this EMVCo draft is a framework for future specifications, including possible later changes to 3-D Secure, and has no mandate syntax.\n- **[Agent-Initiated Payment Gating](/protocols/agentic-payments-gating-model/)** *(Complements)* — The draft cites AP2 as the mandate for delegated authority at the gate, while its own text is the task state machine and not the SD-JWT Checkout Mandate.\n- **[Agentic Mobile Protocol (AMP)](/protocols/amp-ant/)** *(Peer alternative)* — AMP assurance data is an SD-JWT across three layers, followed by an Alipay+ CGCP Payment Token longer than 24 bits, while AP2's checkout credential is an SD-JWT verifiable credential for the Checkout Mandate signed on a Trusted Surface.\n- **[KYAPay Token](/protocols/kyapay-token/)** *(Peer alternative)* — KYAPay binds the authorizing party, the agent platform, and a coin or card instrument inside one JWT, while AP2's checkout authorization is an SD-JWT verifiable credential for the Checkout Mandate.\n- **[Agent Commerce Kit (ACK)](/protocols/agent-commerce-kit/)** *(Peer alternative)* — ACK-Pay's published proof of payment is a W3C VC receipt and ACK-ID is the DID identity layer, while AP2's proof of authorization is an SD-JWT Checkout Mandate signed on a Trusted Surface.\n- **[Agent Network Protocol (ANP)](/protocols/anp/)** *(Complements)* — `ANP-10` (`Version: 1.1`, `Status: Draft / not released`) adapts `AP2` `v0.1.0` `CartMandate` and `PaymentMandate` objects (plus `DeliveryReceipt`) signed with `JWT`/`JWS` for `did:wba` agents (`IntentMandate` deferred / not supported; `SD-JWT` listed as an unchecked future roadmap item), rather than `AP2` `v0.2` `Checkout Mandate` and `Payment Mandate` `SD-JWT`s (`mandate.checkout.1` / `mandate.payment.1`).\n- **[Agent Interaction & Transaction Protocol (AITP)](/protocols/aitp/)** *(Peer alternative)* — AITP defines its own quote and payment JSON capability messages in AITP-01: Payments (Spec Status: Ideation, Implementation Status: In Development) and does not reference AP2, whereas AP2 is Google's verifiable-credential mandate protocol.\n- **[Agent-to-Wallet Protocol for Digital Credentials (A2WP)](/protocols/a2wp/)** *(Complements)* — AP2 is the verifiable-credential mandate protocol, while A2WP is the agent-to-wallet hand-off of OpenID4VCI and OpenID4VP requests and leaves transport out of scope.\n- **[Trusted Agent Protocol (TAP)](/protocols/tap/)** *(Complements)* — AP2 carries checkout and payment mandates for a purchase, while TAP authenticates the agent HTTP call to the merchant with the message signature and Visa ID Token.\n- **[ERC-8226 Regulated Agent Mandate](/protocols/erc-8226/)** *(Peer alternative)* — AP2 mandates are off-chain checkout and payment credentials presented to a merchant or network, while an ERC-8226 mandate is an on-chain IAgentMandate record checked inside the token call.\n- **[Agent Attribution Protocol (AAP)](/protocols/agent-attribution-protocol/)** *(Complements)* — AP2 authorizes a payment with checkout and payment mandates, while AAP's Rako-signed AAP Code attributes a recommend() event to a later checkout() conversion.\n- **[Agent Delegation Receipts](/protocols/agent-delegation-receipts/)** *(Complements)* — AP2 payment mandates authorize a checkout, while a delegation receipt is a JWS over JCS JSON, or a COSE_Sign1, that binds the operator-instruction hash before the agent acts.\n- **[Agent Decision Commitments for Payments (ADC)](/protocols/agent-decision-commitment/)** *(Depended on by)* — AP2 is the payment-mandate protocol ADC binds to, and the added claim is decision_context, a salted hash commitment registered with a SCITT transparency service.\n- **[ERC-8196: AI Agent Authenticated Wallet](/protocols/erc-8196/)** *(Complements)* — AP2 authorizes a checkout with payment mandates, and ERC-8196 is the ERC-4337 wallet that executes an agent transaction only when cryptographic proof shows the action matches the registered policy.\n- **Category:** [Pay protocols](/category/pay/)\n\n---\n\n## References\n\n1. Stavan Parikh and Rao Surapaneni (Google Cloud), *Announcing Agent Payments Protocol (AP2)* (published 2025-09-16) — <https://cloud.google.com/blog/products/ai-machine-learning/announcing-agents-to-payments-ap2-protocol>\n2. Stavan Parikh (Google), *Google donates Agent Payments Protocol to FIDO Alliance* (published 2026-04-28) — <https://blog.google/products-and-platforms/platforms/google-pay/agent-payments-protocol-fido-alliance/>\n3. OpenAI and Stripe, *Agentic Commerce Protocol* (fetched 2026-10-30) — <https://github.com/agentic-commerce-protocol/agentic-commerce-protocol>\n4. OpenAI, *Buy it in ChatGPT: Instant Checkout and the Agentic Commerce Protocol* (archived 2026-10-22) — <https://web.archive.org/web/20261022061422/https://openai.com/index/buy-it-in-chatgpt/>\n5. Visa, *Trusted Agent Protocol* (fetched 2026-10-30) — <https://github.com/visa/trusted-agent-protocol>\n6. x402, *X402 Protocol Specification* (protocol version 2; fetched 2026-10-30) — <https://github.com/x402-foundation/x402/blob/main/specs/x402-specification-v2.md>\n7. Google (google-agentic-commerce), *Agentic Payment Protocol (v0.2)* (fetched 2026-10-30) — <https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/specification.md>\n8. Google (google-agentic-commerce), *Checkout Mandate* (fetched 2026-10-30) — <https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/checkout_mandate.md>\n9. Google (google-agentic-commerce), *Agent Payments Protocol (AP2)* (fetched 2026-10-30) — <https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/index.md>\n10. google-agentic-commerce, *Releases · google-agentic-commerce/AP2* (v0.1.0 (2025-09-16); v0.2.0 released 28 Apr) — <https://github.com/google-agentic-commerce/AP2/releases>\n11. google-agentic-commerce, *Agent Payments Protocol (AP2)* (fetched 2026-10-30) — <https://github.com/google-agentic-commerce/AP2>\n12. FIDO Alliance, *FIDO Alliance to Develop Standards for Trusted AI Agent Interactions* (published 2026-04-28; modified 2026-10-19) — <https://fidoalliance.org/fido-alliance-to-develop-standards-for-trusted-ai-agent-interactions/>\n13. FIDO Alliance, *FIDO Agentic Payment Specifications* (PDF created 2026-09-09) — <https://www.w3.org/2026/09/ecommerce-agents/slides/Jean_Luc_Di_Manno_FIDO.pdf>\n14. Google (google-agentic-commerce), *Agent Authorization* (fetched 2026-10-30) — <https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/agent_authorization.md>\n15. Google (google-agentic-commerce), *A2A Extension for AP2 (v0.1)* (tag v0.1.0 (2025-09-16)) — <https://raw.githubusercontent.com/google-agentic-commerce/AP2/v0.1.0/docs/a2a-extension.md>\n16. Google (google-agentic-commerce), *Agentic Payment Protocol (v0.2)* (fetched 2026-10-30) — <https://ap2-protocol.org/ap2/specification/>\n17. Google (google-agentic-commerce), *Agent Payments Protocol (AP2), v0.1.0 specification* (tag v0.1.0 (2025-09-16)) — <https://raw.githubusercontent.com/google-agentic-commerce/AP2/v0.1.0/docs/specification.md>\n18. D. Fett, K. Yasuda, B. Campbell (IETF), *Selective Disclosure for JSON Web Tokens (RFC 9901)* (2025-11) — <https://www.rfc-editor.org/rfc/rfc9901.html>\n19. Avital Aviv, Parth A. Gandh, Ron Bitton, and Asaf Shabtai, *Beyond the Mandate: A Systematic Security Analysis of the Agent Payments Protocol (AP2)* (submitted 24 Aug 2026) — <https://arxiv.org/abs/2608.23858>\n20. Universal Commerce Protocol, *AP2 Mandates Extension* (example profile version 2026-08-25; fetched 2026-10-30) — <https://ucp.dev/latest/specification/payment/extensions/ap2-mandates/>\n21. Universal Commerce Protocol, *AP2 Mandates Extension* (specification version 2026-01-11) — <https://ucp.dev/2026-01-11/specification/ap2-mandates/>\n22. Google (google-agentic-commerce), *AP2, A2A, and MCP* (tag v0.1.0 (2025-09-16)) — <https://raw.githubusercontent.com/google-agentic-commerce/AP2/v0.1.0/docs/topics/ap2-a2a-and-mcp.md>\n23. Google (google-agentic-commerce), *AP2 and x402* (tag v0.1.0 (2025-09-16)) — <https://raw.githubusercontent.com/google-agentic-commerce/AP2/v0.1.0/docs/topics/ap2-and-x402.md>\n24. Google (google-agentic-commerce), *Frequently Asked Questions* (fetched 2026-10-30) — <https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/faq.md>\n25. Verifiable Intent Working Group, *Verifiable Intent specification* (0.1-draft; date 2026-02-18) — <https://verifiableintent.dev/spec/>\n26. Monocube LLC (SingleFax), *SingleFax A2A agent card* (fetched 2026-10-30) — <https://singlefax.com/.well-known/agent-card.json>\n27. SingleFax (Monocube LLC), *SingleFax AP2 payments* (fetched 2026-10-30) — <https://singlefax.com/ap2.md>\n28. AlgoVoi, *AlgoVoi AP2 extensions* (fetched 2026-10-30) — <https://api.algovoi.co.uk/ap2/extensions>\n29. AlgoVoi, *AlgoVoi Payment Agent card* (fetched 2026-10-30) — <https://api.algovoi.co.uk/.well-known/agent-card.json>\n30. AlgoVoi, *AlgoVoi Gateway OpenAPI* (fetched 2026-10-30) — <https://api.algovoi.co.uk/openapi.json>\n31. Allbirds, *UCP business profile (/.well-known/ucp)* (profile version 2026-08-25; fetched 2026-10-30) — <https://www.allbirds.com/.well-known/ucp>\n32. IKEA, *UCP business profile (/.well-known/ucp)* (profile version 2026-04-08; fetched 2026-10-30) — <https://www.ikea.com/.well-known/ucp>\n33. Google Agentic Commerce, *AP2 partners (v0.1.0 docs/partners.md)* (v0.1.0 tag snapshot; fetched 2026-11-12) — <https://raw.githubusercontent.com/google-agentic-commerce/AP2/v0.1.0/docs/partners.md>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "aliases": [],
   "analog": "Signed purchase order",
   "collisions": [],
   "discovery": {
    "mechanism": "none — see ap2",
    "path": "none"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/specification.md",
     "claim": "Google Agentic Commerce, *Agentic Payment Protocol (v0.2) Specification*, v0.2.0; fetched 2026-10-31",
     "date": null,
     "quote": "AP2 defines two Mandate types: Checkout Mandate and Payment Mandate. / A Checkout Mandate and Receipt for securing *what* is being purchased. - A linked Payment Mandate and Receipt for the *payment* of the Checkout. / Each AP2 Mandate type identifies its schema using the vct claim. The vct value includes a numeric suffix that acts as a schema version number (e.g. mandate.payment.1, mandate.checkout.open.1). Implementations MUST match the exact vct string, including the version suffix. / Agentic Payment Protocol (v0.2) The Agentic Payment Protocol (AP2) provides a protocol to secure Agent-performed payment transactions. It makes use of the Agent Authorization model. This specification describes the following: The different roles of entities within AP2. The verification responsibilities of these roles. A Checkout Mandate and Receipt for securing what is being purchased. A linked Payment Mandate and Receipt for the payment of the Checkout. / The Agentic Payment Protocol (AP2) provides a protocol to secure Agent-performed / as a schema version number (e.g. `mandate.payment.1`, `mandate.checkout.open.1`). Implementations MUST match the exact `vct` / as a security feature within a Commerce Protocol. The exact details of the Commerce / When communication happens between two non-agentic Roles, standard web security is sufficient to ensure integrity. However, when either role is agentic, then the Agent itself is a potential attacker. As such, additional tamper-evident mechanisms are needed to ensure secure communication. / The Checkout Mandate is designed to provide the Merchant cryptographic proof that the Shopping Agent is authorized to purchase the Checkout that it has assembled. / The Merchant MUST provide a merchant-signed JWT containing the Checkout to the Shopping Agent. The closed Checkout Mandate is bound to this Checkout JWT using a cryptographic hash. / Once the Merchant has accepted or rejected the Checkout Mandate, it MUST return a Checkout Receipt. / AP2 operates as a security feature within a Commerce Protocol. The exact details of the Commerce Protocol (e.g., catalog APIs, checkout updates, and specific APIs for communication between the different roles) are outside the scope of AP2. / Trusted Surface (TS): The Trusted Surface role is a UI surface that is trusted to get informed user consent for an Intent before creating a user-signed Mandate. / Conceptually, it is possible to use this protocol to support delegation of Mandates from one Shopping Agent to another. This is outside the scope of the current specification. / Providing an automated method to retrieve the Checkout Mandate, from either the Shopping Agent or the Merchant, would provide substantial utility to the ecosystem. The exact details are outside the scope of the current version, but would be done by using the Payment Mandate transaction_id as the key to request it. / Agentic Payment Protocol (v0.2) / AP2 specifies the use of SD-JWTs for securing the Payment and Checkout Mandates. ... mandate.payment.1, mandate.checkout.open.1",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/checkout_mandate.md",
     "claim": "Google Agentic Commerce, *AP2 Specification: Checkout Mandate*, v0.2.0; fetched 2026-10-31",
     "date": null,
     "quote": "The closed Checkout Mandate ... mandate.checkout.1 / The Checkout Mandate is a Mandate used for authorizing the completion of a checkout. / The Checkout Mandate Content is created by the Shopping Agent, rendered to the User by the Trusted Surface and verified by the Merchant. / The Merchant creates a signed Checkout object which is included in closed Checkout Mandate Content. / A closed Checkout Mandate MUST use the value mandate.checkout.1 for the vct claim and an open Checkout Mandate MUST use the value mandate.checkout.open.1. / \"header\": { \"alg\": \"ES256\", \"typ\": \"kb+sd-jwt\" } / checkout_hash is the base64url-encoded hash of the value of checkout_jwt. The algorithm used MUST be the same as the SD-JWT, as defined by the _sd_alg claim in the base payload, or sha-256 if not present. / checkout_jwt is the merchant-signed JWT containing the details of the checkout. / Versioning for how the version suffix works. ## Mandate Schema The closed Checkout Mandate / }} Examples Open Checkout Mandate SD-JWT plus disclosures json {\"issuer_signed_jwt\":{\"header\":{\"alg\":\"ES256\",\"typ\":\"example+sd-jwt\",\"kid\":\"agent-provider-key-1\" }, \"payload\":{\"delegate_payload\":{\" / conforms to the following schema: {{ schema_fields('checkout_mandate', 'ap2', show_sd=True) }} checkout_hash is the base64url-encoded / with the Universal Commerce Protocol this MUST be the Checkout object. ## Constraints The / The details of the payload are outside the scope of this specification, when used with the Universal Commerce Protocol this MUST be the Checkout object. / mandate.checkout.1 for the vct claim and an open Checkout Mandate MUST use the value mandate.checkout.open.1.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://github.com/google-agentic-commerce/AP2/releases/tag/v0.2.0",
     "claim": "Google Agentic Commerce, *AP2 Release v0.2.0*, released 2026-04-28; fetched 2026-10-31",
     "date": null,
     "quote": "This is the second release of AP2. It focuses on providing Human Not Present flows. / Release v0.2.0 · google-agentic-commerce/AP2 · GitHub Skip to content {\"props\":{\"docsUrl\":\"https://docs.github.com/get-started/accessibility/keyboard-shortcuts\"}} {\"props\":{}} / Oct 2026 03:34:22 GMT content-type: text/html; charset=utf-8 vary: X-PJAX, X-PJAX-Container, Turbo-Visit, Turbo-Frame, X-Requested-With, X-GitHub-Client-Version,",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/README.md",
     "claim": "Google Agentic Commerce, *Agent Payments Protocol (AP2) Repository README*, fetched 2026-10-31",
     "date": null,
     "quote": "Agent Payments Protocol (AP2) / the package directly using this command: sh uv pip install git+https://github.com/google-agentic-commerce/AP2.git@main connection: close content-length: / Oct 2026 03:39:23 GMT source-age: 0 Agent Payments Protocol (AP2) !Apache License(LICENSE) !Ask DeepWiki(https://deepwiki.com/google-agentic-commerce/AP2)",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://github.com/google-agentic-commerce/AP2",
     "claim": "Google Agentic Commerce, *GitHub API repository metadata for google-agentic-commerce/AP2*, created 2025-05-30; fetched 2026-10-31",
     "date": null,
     "quote": "\"created_at\": \"2025-05-30T19:37:20Z\" / \"full_name\": \"google-agentic-commerce/AP2\", / \"https://api.github.com/users/google-agentic-commerce/received_events\", \"type\": \"Organization\", \"user_view_type\": \"public\", \"site_admin\": false }, \"html_url\": \"https://github.com/google-agentic-commerce/AP2\", / \"name\": \"Apache License 2.0\", \"spdx_id\": \"Apache-2.0\"",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://fidoalliance.org/fido-alliance-to-develop-standards-for-trusted-ai-agent-interactions/",
     "claim": "FIDO Alliance, *FIDO Alliance to Develop Standards for Trusted AI Agent Interactions*, published 2026-04-28; modified 2026-10-19",
     "date": null,
     "quote": "Google has contributed its Agent Payments Protocol (AP2), which introduces a model for secure delegation, verifiable authorization and trusted transaction execution. / the FIDO Alliance is developing specifications for agent-initiated commerce within its Payments Technical Working Group, chaired by members from Mastercard and Visa.",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/index.md",
     "claim": "Google Agentic Commerce, *Agent Payments Protocol (AP2) Documentation Index*, fetched 2026-10-30",
     "date": null,
     "quote": "Standardization of the specification will continue within the Agentic Authentication Technical and Payments Technical Working Groups in FIDO.",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://www.rfc-editor.org/rfc/rfc9901.html",
     "claim": "IETF, *RFC 9901: Selective Disclosure for JSON Web Tokens*, IETF RFC",
     "date": null,
     "quote": "This specification defines a mechanism for the selective disclosure of individual elements of a JSON data structure used as the payload of a JSON Web Signature (JWS).",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://ucp.dev/documentation/announcements/",
     "claim": "Universal Commerce Protocol, *Announcements*, fetched 2026-10-30",
     "date": null,
     "quote": "August 25, 2026: Protocol Release v2026-08-25",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://verifiableintent.dev/spec/",
     "claim": "Verifiable Intent Working Group, *Verifiable Intent (VI) — Specification Overview (v0.1-draft)*, 2026-02-18 (v0.1-draft); fetched 2026-10-31",
     "date": null,
     "quote": "Overview¶ Version: 0.1-draft Status: Draft Date: 2026-02-18 Authors: Verifiable Intent Working Group Abstract¶ Verifiable",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://developer.visa.com/docs/trusted-agent-protocol/trusted-agent-protocol-specifications",
     "claim": "Visa, *Trusted Agent Protocol specifications*, checked 2026-10-30",
     "date": null,
     "quote": "By accessing, downloading, or using this specification, you agree to the terms and conditions outlined in the Visa Trusted Agent Protocol Product Terms.",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://www.emvco.com/resources/emv-agentic-payments-framework-for-specifications-v1-0-draft-comment-period-ends-30-sept-2026/",
     "claim": "EMVCo, *EMV Agentic Payments - Framework for Specifications v1.0 DRAFT: Comment period ends 30-Sept 2026*, published 2026-08-30; modified 2026-08-31",
     "date": null,
     "quote": "Comment period ends 30-Sept 2026",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/application/10-anp-agent-payment-protocol-specification.md",
     "claim": "Agent Network Protocol, *ANP-10: Agent Payment Protocol Specification (v1.1 Draft)*, checked 2026-10-30",
     "date": null,
     "quote": "Document ID: ANP-10 - Title: ANP Agent Payment Protocol Specification - Status: Draft / not released - Version: 1.1 / Original AP2 Protocol: An open protocol released by Google in September 2025 ... CartMandate, PaymentMandate, and DeliveryReceipt 3. Using JWT/JWS standard for authorization signatures ... did:wba for agent identity authentication ... IntentMandate | Supports pre-authorized autonomous agent shopping | Not supported (planned) ... - [ ] Support SD-JWT",
     "ref": 13
    }
   ],
   "form": "document-format",
   "governance": "Contributed by Google to the FIDO Alliance on 2026-04-28, with standardization continuing in FIDO's Agentic Authentication Technical and Payments Technical Working Groups while `google-agentic-commerce/AP2` hosts the public specification and SDK.",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified: confirmed this is a component of ap2's specification.md, not a distinct protocol; set phase=withdrawn and merged content into ap2"
    },
    {
     "date": "2026-10-16",
     "note": "version v0.2.0"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "ap2-checkout-mandate",
   "implementation": "none-found",
   "last_verified": "2026-11-12",
   "name": "AP2 Checkout Mandate",
   "native_status": "Active component (AP2 v0.2.0); supersedes v0.1 CartMandate (not an independently published protocol)",
   "origin": {
    "date": null,
    "org": "Google AP2"
   },
   "part_of": "ap2",
   "parties": [
    "agent-site"
   ],
   "phase": "candidate",
   "probe": {
    "method": "none",
    "on_absent": "Not applicable — AP2 CheckoutMandate (mandate.checkout.1) travels in-band as a kb+sd-jwt Verifiable Credential inside a commerce protocol checkout flow rather than an origin-exposed HTTP endpoint.",
    "parse": "not applicable — in-band mandate credential, see ap2",
    "path": "none"
   },
   "question": "What exactly did the user approve for checkout?",
   "scope": "payments",
   "spec_url": "https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/checkout_mandate.md",
   "step": "pay",
   "summary_md": "**AP2 Checkout Mandate** is the Mandate defined in the **Agentic Payment Protocol** (`AP2`, also titled **Agent Payments Protocol** in the parent repository) specification for authorizing the completion of a checkout and securing what is being purchased, paired with a linked Payment Mandate and Checkout Receipt. The Checkout Mandate Content is created by the Shopping Agent, rendered to the User by the Trusted Surface, and verified by the Merchant, while the Merchant creates a signed Checkout object that is included in closed Checkout Mandate Content. Secured as an SD-JWT (`typ` `kb+sd-jwt`, `alg` `ES256`), a closed Checkout Mandate MUST use `mandate.checkout.1` for the `vct` claim and an open Checkout Mandate MUST use `mandate.checkout.open.1`. In a closed Checkout Mandate, `checkout_jwt` is the merchant-signed JWT containing the details of the checkout, and `checkout_hash` is the base64url-encoded hash of `checkout_jwt` computed with the algorithm in the `_sd_alg` claim or `sha-256` if not present. Each AP2 Mandate type identifies its schema using a numeric version suffix on the `vct` claim, and implementations MUST match the exact `vct` string including the version suffix. The `google-agentic-commerce/AP2` repository was created on 2025-05-30 under the `Apache-2.0` license, and release `v0.2.0` on 2026-04-28 (`Agentic Payment Protocol (v0.2)`) is the second release of AP2 focusing on Human Not Present flows and centering the protocol on the linked `Checkout Mandate` and `Payment Mandate` pair.",
   "track": "industry-body",
   "version": {
    "label": "v0.2.0",
    "date": "2026-04-28"
   },
   "watch": [
    {
     "type": "github",
     "repo": "google-agentic-commerce/AP2",
     "mode": "release"
    }
   ],
   "use_cases": [
    "agent-checkout",
    "delegate-user-authority",
    "audit-agent-actions"
   ],
   "audience": [
    "agent-builder",
    "platform"
   ],
   "pairs_with": [
    "ap2",
    "ucp",
    "vi",
    "tap",
    "emv-agentic-payments"
   ],
   "prerequisites": [
    "ap2"
   ],
   "hatnote_md": "This page covers the AP2 Checkout Mandate (`mandate.checkout.1` and `mandate.checkout.open.1`), the active checkout-authorization component introduced in [Agent Payments Protocol (AP2)](/protocols/ap2/) `v0.2.0` (`2026-04-28`) to replace v0.1's `CartMandate`. For the full four-party protocol and the companion `PaymentMandate` (`mandate.payment.1`), see [Agent Payments Protocol (AP2)](/protocols/ap2/).",
   "tier": "spec_brief",
   "lifecycle_status": "active",
   "wire_archetype": "payments_onchain",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "This page covers the AP2 Checkout Mandate (`mandate.checkout.1` and `mandate.checkout.open.1`), the active checkout-authorization component introduced in [Agent Payments Protocol (AP2)](/protocols/ap2/) `v0.2.0` (`2026-04-28`) to replace v0.1's `CartMandate`. For the full four-party protocol and the companion `PaymentMandate` (`mandate.payment.1`), see [Agent Payments Protocol (AP2)](/protocols/ap2/). [1][2][3]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**AP2 Checkout Mandate** is the Mandate defined in the **Agentic Payment Protocol** (`AP2`, also titled **Agent Payments Protocol** in the parent repository) specification for authorizing the completion of a checkout and securing what is being purchased, paired with a linked Payment Mandate and Checkout Receipt. [1][2][4] The Checkout Mandate Content is created by the Shopping Agent, rendered to the User by the Trusted Surface, and verified by the Merchant, while the Merchant creates a signed Checkout object that is included in closed Checkout Mandate Content. [2] Secured as an SD-JWT (`typ` `kb+sd-jwt`, `alg` `ES256`), a closed Checkout Mandate MUST use `mandate.checkout.1` for the `vct` claim and an open Checkout Mandate MUST use `mandate.checkout.open.1`. [2] In a closed Checkout Mandate, `checkout_jwt` is the merchant-signed JWT containing the details of the checkout, and `checkout_hash` is the base64url-encoded hash of `checkout_jwt` computed with the algorithm in the `_sd_alg` claim or `sha-256` if not present. [2] Each AP2 Mandate type identifies its schema using a numeric version suffix on the `vct` claim, and implementations MUST match the exact `vct` string including the version suffix. [1] The `google-agentic-commerce/AP2` repository was created on 2025-05-30 under the `Apache-2.0` license, and release `v0.2.0` on 2026-04-28 (`Agentic Payment Protocol (v0.2)`) is the second release of AP2 focusing on Human Not Present flows and centering the protocol on the linked `Checkout Mandate` and `Payment Mandate` pair. [1][3][5]",
   "v05_identity_sentence_md": "**AP2 Checkout Mandate** is the Mandate defined in the **Agentic Payment Protocol** (`AP2`, also titled **Agent Payments Protocol** in the parent repository) specification for authorizing the completion of a checkout and securing what is being purchased, paired with a linked Payment Mandate and Checkout Receipt. [1][2][4] The Checkout Mandate Content is created by the Shopping Agent, rendered to the User by the Trusted Surface, and verified by the Merchant, while the Merchant creates a signed Checkout object that is included in closed Checkout Mandate Content. [2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Pay](/category/pay/) (`pay`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "Google (`google-agentic-commerce/AP2`) [4][5]"
    },
    {
     "label": "Governed by",
     "value_md": "FIDO Alliance (Agentic Authentication and Payments Technical Working Groups, following Google's `2026-04-28` AP2 contribution); public specification and SDK hosted in `google-agentic-commerce/AP2` [1][4][5][6][7]"
    },
    {
     "label": "Track",
     "value_md": "Industry consortium specification (FIDO Alliance Agentic Authentication and Payments Technical Working Groups) [6][7]"
    },
    {
     "label": "Status",
     "value_md": "Active component (`AP2 v0.2.0`, released `2026-04-28`); supersedes v0.1 `CartMandate` (not an independently published protocol) [1][2][3]"
    },
    {
     "label": "Version",
     "value_md": "AP2 `v0.2.0` (released 2026-04-28); schema version `vct` `mandate.checkout.1` (closed) and `mandate.checkout.open.1` (open) [1][2][3]"
    },
    {
     "label": "Wire format",
     "value_md": "Selective Disclosure JSON Web Token (`SD-JWT`, `ES256`, `_sd_alg: sha-256`) wrapping a merchant-signed `checkout_jwt` or open constraint disclosures [2]"
    },
    {
     "label": "Specification",
     "value_md": "https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/checkout_mandate.md [2]"
    },
    {
     "label": "Found at",
     "value_md": "Embedded within Commerce Protocol flows (such as Universal Commerce Protocol `Checkout` objects) and identified on the wire by the `vct` claim [1][2]"
    },
    {
     "label": "Licence",
     "value_md": "Apache License 2.0 (`Apache-2.0`) [5]"
    }
   ],
   "v05_problem_md": "When communication happens between two non-agentic roles, standard web security is sufficient to ensure integrity, but when either role is handled by a non-deterministic LLM, the agent itself is a potential attacker and additional tamper-evident mechanisms are needed. [1] The Checkout Mandate provides the Merchant cryptographic proof that the Shopping Agent is authorized to purchase the Checkout it has assembled, binding the closed Checkout Mandate to the merchant-signed Checkout JWT using a cryptographic hash. [1] Once the Merchant has accepted or rejected the Checkout Mandate, it MUST return a Checkout Receipt. [1] AP2 operates as a security feature within a Commerce Protocol (`checkout_jwt` MUST be the Checkout object when used with `UCP`), and because the Shopping Agent creates `Checkout Mandate Content` before rendering, the Trusted Surface UI role is required to obtain informed user consent before creating a user-signed Mandate. [1][2] Delegation of Mandates from one Shopping Agent to another and automated retrieval of a Checkout Mandate using the Payment Mandate `transaction_id` are outside the scope of the current version. [1]",
   "v05_mechanism_delta_md": "The Checkout Mandate provides the Merchant cryptographic proof that the Shopping Agent is authorized to purchase the Checkout it has assembled, binding the closed Checkout Mandate to the merchant-signed Checkout JWT using a cryptographic hash. [1] Once the Merchant has accepted or rejected the Checkout Mandate, it MUST return a Checkout Receipt. [1]",
   "v05_scope_boundary_md": "AP2 operates as a security feature within a Commerce Protocol (`checkout_jwt` MUST be the Checkout object when used with `UCP`), and because the Shopping Agent creates `Checkout Mandate Content` before rendering, the Trusted Surface UI role is required to obtain informed user consent before creating a user-signed Mandate. [1][2] Delegation of Mandates from one Shopping Agent to another and automated retrieval of a Checkout Mandate using the Payment Mandate `transaction_id` are outside the scope of the current version. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "Selective Disclosure for JWTs (SD-JWT, RFC 9901)",
      "spec_or_rfc": "RFC 9901",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "The Checkout Mandate is the AP2 v0.2 SD-JWT verifiable credential defined in docs/ap2/checkout_mandate.md, paired with a Checkout Receipt, and this record has no separate endpoint or well-known file. [2][8]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "ap2",
      "target_name": "Agent Payments Protocol (AP2)",
      "relation_type": "part_of",
      "relation_label": "Part of",
      "delta_md": "The checkout mandate is the topic page docs/ap2/checkout_mandate.md inside the AP2 v0.2 specification, defining the Checkout Mandate object and its Checkout Receipt, and it has no separate endpoint or well-known file. [1][2]"
     },
     {
      "target_id": "ucp",
      "target_name": "Universal Commerce Protocol (UCP)",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "The Checkout Mandate is one of the two AP2 v0.2 mandates, and AP2 v0.2 is built to work inside UCP, so the mandate rides on UCP's /.well-known/ucp profile and optional AP2 Mandates extension rather than defining its own transport. [2][9]"
     },
     {
      "target_id": "vi",
      "target_name": "Verifiable Intent",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "Verifiable Intent is a separate Mastercard credential that FIDO plans to consolidate with AP2 in 2027, while this object is the AP2 Checkout Mandate and its Checkout Receipt. [2][10]"
     },
     {
      "target_id": "tap",
      "target_name": "Trusted Agent Protocol (TAP)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "TAP checks an agent by a signature on the merchant request, while the checkout mandate is the user-signed Checkout Mandate, produced on a Trusted Surface, over one merchant checkout. [2][11]"
     },
     {
      "target_id": "emv-agentic-payments",
      "target_name": "EMV® Agentic Payments – Framework for Specifications",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "The EMV Agentic Payments draft proposes Intent Services and defines no message syntax, while the checkout mandate is the concrete Checkout Mandate object and Checkout Receipt inside AP2. [2][12]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "agent-decision-commitment",
     "target_name": "Agent Decision Commitments for Payments",
     "relation_label": "Complements",
     "delta": "The checkout mandate authorizes the cart, and decision_context is an additional selectively disclosable claim, registered with SCITT, about the model inputs behind that cart. [2]",
     "item_md": "**[Agent Decision Commitments for Payments](/protocols/agent-decision-commitment/)** (Complements) — The checkout mandate authorizes the cart, and decision_context is an additional selectively disclosable claim, registered with SCITT, about the model inputs behind that cart. [2]"
    },
    {
     "target_id": "anp",
     "target_name": "Agent Network Protocol",
     "relation_label": "Complements",
     "delta": "`ANP-10` (`Version: 1.1`, `Status: Draft / not released`) adapts `AP2` `v0.1` `CartMandate` and `PaymentMandate` objects (plus `DeliveryReceipt`) signed with `JWT`/`JWS` for `did:wba` agents (`IntentMandate` not supported / planned; `SD-JWT` listed as an unchecked future roadmap item), rather than binding to this `AP2` `v0.2` `mandate.checkout.1` / `mandate.checkout.open.1` `SD-JWT` schema. [1][2][13]",
     "item_md": "**[Agent Network Protocol](/protocols/anp/)** (Complements) — `ANP-10` (`Version: 1.1`, `Status: Draft / not released`) adapts `AP2` `v0.1` `CartMandate` and `PaymentMandate` objects (plus `DeliveryReceipt`) signed with `JWT`/`JWS` for `did:wba` agents (`IntentMandate` not supported / planned; `SD-JWT` listed as an unchecked future roadmap item), rather than binding to this `AP2` `v0.2` `mandate.checkout.1` / `mandate.checkout.open.1` `SD-JWT` schema. [1][2][13]"
    },
    {
     "item_md": "**[Pay protocols](/category/pay/)** — Category index for `pay` standards."
    }
   ],
   "v05_compiled_md": "---\nid: ap2-checkout-mandate\ntitle: \"AP2 Checkout Mandate\"\ntier: spec_brief\nlifecycle_status: active\ncategory: pay\nform: document-format\nwire_archetype: payments_onchain\nspec_url: https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/checkout_mandate.md\nlast_checked: 2026-11-12\n---\n\n# AP2 Checkout Mandate\n\n**Category:** [Pay](/category/pay/) (`pay`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-11-12\n\n> *This page covers the AP2 Checkout Mandate (`mandate.checkout.1` and `mandate.checkout.open.1`), the active checkout-authorization component introduced in [Agent Payments Protocol (AP2)](/protocols/ap2/) `v0.2.0` (`2026-04-28`) to replace v0.1's `CartMandate`. For the full four-party protocol and the companion `PaymentMandate` (`mandate.payment.1`), see [Agent Payments Protocol (AP2)](/protocols/ap2/). [1][2][3]*\n\n**AP2 Checkout Mandate** is the Mandate defined in the **Agentic Payment Protocol** (`AP2`, also titled **Agent Payments Protocol** in the parent repository) specification for authorizing the completion of a checkout and securing what is being purchased, paired with a linked Payment Mandate and Checkout Receipt. [1][2][4] The Checkout Mandate Content is created by the Shopping Agent, rendered to the User by the Trusted Surface, and verified by the Merchant, while the Merchant creates a signed Checkout object that is included in closed Checkout Mandate Content. [2] Secured as an SD-JWT (`typ` `kb+sd-jwt`, `alg` `ES256`), a closed Checkout Mandate MUST use `mandate.checkout.1` for the `vct` claim and an open Checkout Mandate MUST use `mandate.checkout.open.1`. [2] In a closed Checkout Mandate, `checkout_jwt` is the merchant-signed JWT containing the details of the checkout, and `checkout_hash` is the base64url-encoded hash of `checkout_jwt` computed with the algorithm in the `_sd_alg` claim or `sha-256` if not present. [2] Each AP2 Mandate type identifies its schema using a numeric version suffix on the `vct` claim, and implementations MUST match the exact `vct` string including the version suffix. [1] The `google-agentic-commerce/AP2` repository was created on 2025-05-30 under the `Apache-2.0` license, and release `v0.2.0` on 2026-04-28 (`Agentic Payment Protocol (v0.2)`) is the second release of AP2 focusing on Human Not Present flows and centering the protocol on the linked `Checkout Mandate` and `Payment Mandate` pair. [1][3][5]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Pay](/category/pay/) (`pay`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | Google (`google-agentic-commerce/AP2`) [4][5] |\n| **Governed by** | FIDO Alliance (Agentic Authentication and Payments Technical Working Groups, following Google's `2026-04-28` AP2 contribution); public specification and SDK hosted in `google-agentic-commerce/AP2` [1][4][5][6][7] |\n| **Track** | Industry consortium specification (FIDO Alliance Agentic Authentication and Payments Technical Working Groups) [6][7] |\n| **Status** | Active component (`AP2 v0.2.0`, released `2026-04-28`); supersedes v0.1 `CartMandate` (not an independently published protocol) [1][2][3] |\n| **Version** | AP2 `v0.2.0` (released 2026-04-28); schema version `vct` `mandate.checkout.1` (closed) and `mandate.checkout.open.1` (open) [1][2][3] |\n| **Wire format** | Selective Disclosure JSON Web Token (`SD-JWT`, `ES256`, `_sd_alg: sha-256`) wrapping a merchant-signed `checkout_jwt` or open constraint disclosures [2] |\n| **Specification** | https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/checkout_mandate.md [2] |\n| **Found at** | Embedded within Commerce Protocol flows (such as Universal Commerce Protocol `Checkout` objects) and identified on the wire by the `vct` claim [1][2] |\n| **Licence** | Apache License 2.0 (`Apache-2.0`) [5] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nWhen communication happens between two non-agentic roles, standard web security is sufficient to ensure integrity, but when either role is handled by a non-deterministic LLM, the agent itself is a potential attacker and additional tamper-evident mechanisms are needed. [1] The Checkout Mandate provides the Merchant cryptographic proof that the Shopping Agent is authorized to purchase the Checkout it has assembled, binding the closed Checkout Mandate to the merchant-signed Checkout JWT using a cryptographic hash. [1] Once the Merchant has accepted or rejected the Checkout Mandate, it MUST return a Checkout Receipt. [1] AP2 operates as a security feature within a Commerce Protocol (`checkout_jwt` MUST be the Checkout object when used with `UCP`), and because the Shopping Agent creates `Checkout Mandate Content` before rendering, the Trusted Surface UI role is required to obtain informed user consent before creating a user-signed Mandate. [1][2] Delegation of Mandates from one Shopping Agent to another and automated retrieval of a Checkout Mandate using the Payment Mandate `transaction_id` are outside the scope of the current version. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **Selective Disclosure for JWTs (SD-JWT, RFC 9901)** | `RFC 9901` | Profiles classic standard | The Checkout Mandate is the AP2 v0.2 SD-JWT verifiable credential defined in docs/ap2/checkout_mandate.md, paired with a Checkout Receipt, and this record has no separate endpoint or well-known file. [2][8] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Agent Payments Protocol (AP2)](/protocols/ap2/)** | Part of | The checkout mandate is the topic page docs/ap2/checkout_mandate.md inside the AP2 v0.2 specification, defining the Checkout Mandate object and its Checkout Receipt, and it has no separate endpoint or well-known file. [1][2] |\n| **[Universal Commerce Protocol (UCP)](/protocols/ucp/)** | Builds on | The Checkout Mandate is one of the two AP2 v0.2 mandates, and AP2 v0.2 is built to work inside UCP, so the mandate rides on UCP's /.well-known/ucp profile and optional AP2 Mandates extension rather than defining its own transport. [2][9] |\n| **[Verifiable Intent](/protocols/vi/)** | Peer alternative | Verifiable Intent is a separate Mastercard credential that FIDO plans to consolidate with AP2 in 2027, while this object is the AP2 Checkout Mandate and its Checkout Receipt. [2][10] |\n| **[Trusted Agent Protocol (TAP)](/protocols/tap/)** | Complements | TAP checks an agent by a signature on the merchant request, while the checkout mandate is the user-signed Checkout Mandate, produced on a Trusted Surface, over one merchant checkout. [2][11] |\n| **[EMV® Agentic Payments – Framework for Specifications](/protocols/emv-agentic-payments/)** | Complements | The EMV Agentic Payments draft proposes Intent Services and defines no message syntax, while the checkout mandate is the concrete Checkout Mandate object and Checkout Receipt inside AP2. [2][12] |\n\n---\n\n## See also\n\n- **[Agent Decision Commitments for Payments](/protocols/agent-decision-commitment/)** *(Complements)* — The checkout mandate authorizes the cart, and decision_context is an additional selectively disclosable claim, registered with SCITT, about the model inputs behind that cart. [2]\n- **[Agent Network Protocol](/protocols/anp/)** *(Complements)* — `ANP-10` (`Version: 1.1`, `Status: Draft / not released`) adapts `AP2` `v0.1` `CartMandate` and `PaymentMandate` objects (plus `DeliveryReceipt`) signed with `JWT`/`JWS` for `did:wba` agents (`IntentMandate` not supported / planned; `SD-JWT` listed as an unchecked future roadmap item), rather than binding to this `AP2` `v0.2` `mandate.checkout.1` / `mandate.checkout.open.1` `SD-JWT` schema. [1][2][13]\n- **Category:** [Pay protocols](/category/pay/)\n\n---\n\n## References\n\n1. Google Agentic Commerce, *Agentic Payment Protocol (v0.2) Specification* (v0.2.0; fetched 2026-10-31) — <https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/specification.md>\n2. Google Agentic Commerce, *AP2 Specification: Checkout Mandate* (v0.2.0; fetched 2026-10-31) — <https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/checkout_mandate.md>\n3. Google Agentic Commerce, *AP2 Release v0.2.0* (released 2026-04-28; fetched 2026-10-31) — <https://github.com/google-agentic-commerce/AP2/releases/tag/v0.2.0>\n4. Google Agentic Commerce, *Agent Payments Protocol (AP2) Repository README* (fetched 2026-10-31) — <https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/README.md>\n5. Google Agentic Commerce, *GitHub API repository metadata for google-agentic-commerce/AP2* (created 2025-05-30; fetched 2026-10-31) — <https://github.com/google-agentic-commerce/AP2>\n6. FIDO Alliance, *FIDO Alliance to Develop Standards for Trusted AI Agent Interactions* (published 2026-04-28; modified 2026-10-19) — <https://fidoalliance.org/fido-alliance-to-develop-standards-for-trusted-ai-agent-interactions/>\n7. Google Agentic Commerce, *Agent Payments Protocol (AP2) Documentation Index* (fetched 2026-10-30) — <https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/index.md>\n8. IETF, *RFC 9901: Selective Disclosure for JSON Web Tokens* (IETF RFC) — <https://www.rfc-editor.org/rfc/rfc9901.html>\n9. Universal Commerce Protocol, *Announcements* (fetched 2026-10-30) — <https://ucp.dev/documentation/announcements/>\n10. Verifiable Intent Working Group, *Verifiable Intent (VI) — Specification Overview (v0.1-draft)* (2026-02-18 (v0.1-draft); fetched 2026-10-31) — <https://verifiableintent.dev/spec/>\n11. Visa, *Trusted Agent Protocol specifications* (checked 2026-10-30) — <https://developer.visa.com/docs/trusted-agent-protocol/trusted-agent-protocol-specifications>\n12. EMVCo, *EMV Agentic Payments - Framework for Specifications v1.0 DRAFT: Comment period ends 30-Sept 2026* (published 2026-08-30; modified 2026-08-31) — <https://www.emvco.com/resources/emv-agentic-payments-framework-for-specifications-v1-0-draft-comment-period-ends-30-sept-2026/>\n13. Agent Network Protocol, *ANP-10: Agent Payment Protocol Specification (v1.1 Draft)* (checked 2026-10-30) — <https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/application/10-anp-agent-payment-protocol-specification.md>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "x402",
   "adoption": {
    "level": "observed",
    "by": "CoinGecko, CoinMarketCap, Bitrefill, AWS (Amazon Bedrock AgentCore payments), Cloudflare Agents SDK, Vercel x402-mcp, Coinbase CDP Facilitator, Stripe, and 5 other verified implementations",
    "probe_run": null
   },
   "aliases": [
    "x402 Protocol",
    "x402 Payment Protocol"
   ],
   "analog": "HTTP 402 Payment Required, finally implemented",
   "collisions": [],
   "discovery": {
    "mechanism": "HTTP 402 response carrying payment requirements in a header",
    "path": "No fixed path: a resource signals x402 per request by answering HTTP 402. Discovery is through the Bazaar, a /discovery/resources listing that facilitators may offer; Coinbase's is public at https://api.cdp.coinbase.com/platform/v2/x402/discovery/resources (checked 2026-10-28)"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.rfc-editor.org/rfc/rfc9110.html",
     "claim": "R. Fielding, M. Nottingham, and J. Reschke (eds.), *RFC 9110: HTTP Semantics*, June 2022",
     "date": null,
     "quote": "15.5.3. 402 Payment Required The 402 (Payment Required) status code is reserved for future use.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://docs.lightning.engineering/the-lightning-network/l402/protocol-specification",
     "claim": "Lightning Labs, *L402 Protocol Specification*, fetched 2026-10-30",
     "date": null,
     "quote": "Alongside the 402 status code, the server should specify the WWW-Authenticate header ([RFC 7235], Section 4.1) field to indicate the L402 authentication scheme and the macaroon needed for the client to form a complete L402.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://docs.stripe.com/payments/machine/x402",
     "claim": "Stripe, *x402*, fetched 2026-10-30",
     "date": null,
     "quote": "To accept card payments alongside stablecoin payments, you should also integrate with the Machine Payments Protocol (MPP) . / When a client requests a paid resource, your server returns an HTTP 402 response with payment details, including a Stripe deposit address. The client pays, then retries the request with authorization. After the facilitator settles the payment on-chain, Stripe records it as a PaymentIntent . / curl https://api.stripe.com/v1/crypto/deposit_addresses / Stripe-Version: 2026-05-27.preview / scheme : \"exact\" , price : \"$0.01\" , network : \"eip155:8453\" / mode : \"transaction_verification\" / Stablecoin payments are available to businesses in all US states, except New York. … Go to your Payment methods settings in the Dashboard and request the Stablecoins and Crypto payment method.",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://github.com/x402-foundation/x402/blob/main/specs/x402-specification-v2.md",
     "claim": "x402 Foundation, *x402 Protocol Specification*, v2.0 dated 2025-12-9",
     "date": null,
     "quote": "x402 is an open payment standard that enables clients to pay for external resources. / Resource Server: A service that requires payment for access to protected resources (APIs, content, data, etc.) / Client: Any application or agent that requests access to protected resources / PaymentRequirements, PaymentPayload, SettlementResponse / which depends on the transport mechanism (e.g., HTTP, MCP, A2A) / Blockchain network identifier in CAIP-2 format / Required payment amount in atomic token units / Token contract address or ISO 4217 currency code for fiat / v2.0 | 2025-12-9 | Protocol v2: CAIP-2 networks, restructured PaymentPayload/Required, ResourceInfo separation, extensions support / paymentFlow / auth-capture / exact, upto, and batch-settlement; see specs/schemes/ / batch-settlement, and auth-capture / authorization (default) | verify → resource → settle → respond / upfront | settle → resource → respond / escrow | settle → resource → settle → respond / For HTTP, the canonical wire location is the base64-encoded PAYMENT-REQUIRED response header / X402 Protocol Specification Protocol Version: 2 / POST /verify / POST /settle / GET /supported / Each PaymentRequirements object in the accepts array contains / scheme | string | Required | Payment scheme identifier / The `accepted` field contains a `PaymentRequirements` object / The `payload` field contains scheme-specific data. / it validates payment state but MUST NOT commit payment state or write onchain state. / Durably commits payment state for the request / delegate blockchain operations to trusted third parties or host the endpoints themselves. / including `exact`, `upto`, `batch-settlement`, and `auth-capture` / Out of Scope: This specification does not include: - Transport-specific implementations (covered in transport specifications) - Specific implementation patterns (covered in application notes) - Framework-specific integrations - Client-side budget management - Session handling mechanisms / GET /discovery/resources / List discoverable x402 resources from the Bazaar. / though the discovered resources may use any x402-supported transport. / 1. **Client Request**: Client makes a request to a resource server / 2. **Payment Required Response**: If no valid payment is attached, the server responds with a payment required signal and payment requirements / 3. **Payment Authorization Request**: Client submits a signed payment authorization in the subsequent request / 4. **Settlement Response**: Server verifies the payment authorization and initiates blockchain settlement / This cycle describes the default `authorization` payment flow, in which the payment is verified before the resource executes and settled afterward. / The resolved flow determines which of the facilitator's read-only `/verify` (section 7.1) and state-committing `/settle` (section 7.2) run, and in what order, around the resource server's execution of the protected request. / | `authorization` (default) | verify → resource → settle → respond | Read-only verify before the resource executes; funds move only after it completes successfully. | / This allows resource servers to delegate blockchain operations to trusted third parties or host the endpoints themselves. / /verify is read-only: it validates payment state but must not commit payment state or write onchain state. / | upfront | settle → resource → respond | Payment is durably committed before the resource executes, giving the server finality first. / These are completely independent of both transport mechanism and payment scheme. / When a resource server requires payment, it responds with a payment required signal containing the `PaymentRequired` object. / How to construct the `payload` field within `PaymentPayload` / Schemes are independent of the underlying transport mechanism. / for example `eip3009` vs `permit2` / `authorization` (default) | verify → resource → settle → respond / extra.paymentFlow / EIP-712 signature for authorization / EIP-3009 authorization parameters / 32-byte random nonce to prevent replay attacks / `validAfter` | `string` | Required | Unix timestamp when authorization becomes valid / `validBefore` | `string` | Required | Unix timestamp when authorization expires / in the `upto` scheme, the `amount` field in `paymentRequirements` represents the maximum authorized amount at verification time, but the actual amount to settle at settlement time. / The settlement transaction was broadcast but its confirmation could not be established / MUST be non-empty when `errorReason` is `settlement_pending` / signature | string | Required | EIP-712 signature for authorization / authorization | object | Required | EIP-3009 authorization parameters",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://blog.cloudflare.com/x402/",
     "claim": "Will Allen, Cam Whiteside, Rohin Lohe, and Steve James, Cloudflare, *Launching the x402 Foundation with Coinbase, and support for x402 transactions*, September 23, 2025",
     "date": null,
     "quote": "Clients and servers capable of interpreting the x402 protocol are able to transact without the need for accounts, subscriptions, or API keys. / September 23, 2025 / Cloudflare is partnering with Coinbase to create the x402 Foundation. / Without a specification for how to format and respond to those response codes, content creators, publishers, and website operators lack adequate tools to convey their payment requests. / we are shipping a set of features to allow developers to use x402 in the Agents SDK and our MCP integrations, as well as proposing a new deferred payment scheme.",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://vercel.com/blog/introducing-x402-mcp-open-protocol-payments-for-mcp-tools",
     "claim": "Ethan Niser, Vercel, *Introducing x402-mcp: Open protocol payments for MCP tools*, 12 Sep 2025",
     "date": null,
     "quote": "The current model requires pre-registering with every API, managing keys, and maintaining separate billing relationships. / We built x402-mcp to integrate x402 payments with Model Context Protocol (MCP) servers and the Vercel AI SDK. / import { paymentMiddleware } from \"x402-next\" / import { wrapFetchWithPayment } from \"x402-fetch\"",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://www.coinbase.com/developer-platform/discover/launches/x402",
     "claim": "Erik Reppel, Nemil Dalal, and Dan Kim, Coinbase, *Introducing x402: a new standard for internet-native payments*, May 6, 2025",
     "date": null,
     "quote": "May 6, 2025 / Coinbase is launching x402, a payment protocol that enables instant stablecoin payments directly over HTTP. / Introducing x402: a new standard for internet-native payments May 6, 2025 By: Erik Reppel, Nemil Dalal, Dan Kim",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://github.com/x402-foundation/x402/blob/main/specs/transports-v1/http.md",
     "claim": "x402 Foundation, *HTTP transport for x402 v1*, fetched 2026-10-30",
     "date": null,
     "quote": "HTTP 402 status code with JSON response body / Servers communicate payment settlement results using the `X-PAYMENT-RESPONSE` header. / Clients send payment data using the `X-PAYMENT` HTTP header. / Clients send payment data using the X-PAYMENT HTTP header. / Servers communicate payment settlement results using the X-PAYMENT-RESPONSE header. / **Data Format**: `PaymentRequirementsResponse` schema in response body / \"maxAmountRequired\": \"10000\" / \"network\": \"base-sepolia\"",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://x402.org/x402-v2-launch/",
     "claim": "Erik Reppel, Carson Roscoe, and Josh Nickerson, *Introducing x402 V2: Evolving the Standard for Internet-native Payments*, published December 11, 2025; updated June 24th, 2026",
     "date": null,
     "quote": "Moving all payment data to headers for the HTTP transport, freeing up response body to be used alongside a 402 status code and Payment Required header / December 11, 2025",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://www.linuxfoundation.org/press/linux-foundation-is-launching-the-x402-foundation-and-welcoming-the-contribution-of-the-x402-protocol",
     "claim": "Linux Foundation, *Linux Foundation is Launching the x402 Foundation and Welcoming the Contribution of the x402 Protocol*, April 2, 2026",
     "date": null,
     "quote": "April 2, 2026 – The Linux Foundation, t he nonprofit organization enabling mass innovation through open source, today announced it is launching the x402 Foundation / The x402 protocol, created by Coinbase, is moving to the Linux Foundation.",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://github.com/x402-foundation/x402/blob/main/TSC.md",
     "claim": "x402 Foundation, *Technical Steering Committee*, fetched 2026-10-30",
     "date": null,
     "quote": "|Coinbase, Inc. | Erik Reppel | |Cloudflare, Inc. | Rohin Lohe | |Stripe, Inc. | Steve Kaliski | / Stripe, Inc. | Steve Kaliski",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://www.linuxfoundation.org/press/linux-foundation-announces-operational-launch-of-x402-foundation-to-standardize-internet-native-payments-for-ai-agents-and-applications",
     "claim": "Linux Foundation, *Linux Foundation Announces Operational Launch of x402 Foundation to Standardize Internet-Native Payments for AI Agents and Applications*, July 14, 2026",
     "date": null,
     "quote": "The Linux Foundation today announced the operational launch of the x402 Foundation, a new open-governance body formed to steward the x402 protocol / The Foundation is now fully active under formal, open governance to steward the x402 protocol / SAN FRANCISCO, July 14, 2026 – The Linux Foundation , the nonprofit organization enabling mass innovation through open source, today announced the operational launch of the x402 Foundation / Foundation gathers 40 members dedicated to building an open, vendor-neutral payment standard over HTTP",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://x402.org/linux-foundation-appoints-michael-hursta-as-executive-director-of-the-x402-foundation/",
     "claim": "Linux Foundation, *Linux Foundation Appoints Michael Hursta as Executive Director of the x402 Foundation*, Oct. 1, 2026",
     "date": null,
     "quote": "The Linux Foundation appointed payments veteran Michael Hursta as Executive Director of the x402 Foundation. / Hursta will lead 50+ member organizations advancing x402, an open standard for internet-native payments",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://x402.org/",
     "claim": "x402 Foundation, *x402*, fetched 2026-10-30",
     "date": null,
     "quote": "x402 a Series of LF Projects, LLC",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://github.com/x402-foundation/x402/blob/main/specs/x402-specification-v1.md",
     "claim": "x402 Foundation, *x402 Protocol Specification*, Protocol Version: 1",
     "date": null,
     "quote": "Protocol Version: 1",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://github.com/x402-foundation/x402/commits/HEAD/specs/x402-specification-v2.md",
     "claim": "x402 Foundation, *Commit history for specs/x402-specification-v2.md*, 2026-10-26",
     "date": "2026-10-26",
     "quote": "\"date\":\"2026-10-26T12:11:08Z\"},\"message\":\"docs(specs): document facilitator error messages (#3947)\"",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://github.com/x402-foundation/x402/blob/main/specs/transports-v2/http.md",
     "claim": "x402 Foundation, *HTTP transport for x402 v2*, fetched 2026-10-30",
     "date": null,
     "quote": "HTTP 402 status code with PAYMENT-REQUIRED header / Clients send payment data using the PAYMENT-SIGNATURE HTTP header. / Servers communicate payment settlement results using the PAYMENT-RESPONSE header. / The HTTP transport implements x402 payment flows over standard HTTP/HTTPS protocols. / The `PAYMENT-REQUIRED` header is the canonical HTTP transport location for the `PaymentRequired` object. / All x402 protocol information is communicated through headers (`PAYMENT-REQUIRED`, `PAYMENT-SIGNATURE`, `PAYMENT-RESPONSE`). / None of the three headers above is CORS-safelisted. A cross-origin `fetch()` / cannot read `PAYMENT-REQUIRED` or `PAYMENT-RESPONSE` unless the / response names them in `Access-Control-Expose-Headers` / cannot send `PAYMENT-SIGNATURE` unless the preflight allows it. / Invalid Payment  | 400         | Malformed payment payload or requirements / Payment Failed   | 402         | Payment verification or settlement failed / Server Error     | 500         | Internal server error during payment processing",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://docs.x402.org/core-concepts/network-and-token-support",
     "claim": "x402 Foundation, *Networks and Token Support*, fetched 2026-10-30",
     "date": null,
     "quote": "x402 uses CAIP-2 standard network identifiers ( namespace:reference ) for unambiguous cross-chain support / eip155:8453 for Base / x402 supports tokens on EVM, Solana, TON, Algorand (AVM), Stellar, Aptos, Hedera, Keeta, NEAR, Concordium, XRPL, Cardano, Sui, and Canton networks / EVM Any ERC-20 token EIP-3009 or Permit2 Solana Any SPL or Token-2022 token SPL Transfer / x402 supports tokens on EVM, Solana, TON, Algorand (AVM), Stellar, Aptos, Hedera, Keeta, NEAR, Concordium, XRPL, Cardano, Sui, and Canton networks:",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://github.com/x402-foundation/x402/blob/main/specs/transports-v2/a2a.md",
     "claim": "x402 Foundation, *Transport: A2A (Agent-to-Agent Protocol)*, fetched 2026-10-30",
     "date": null,
     "quote": "The A2A transport implements x402 payment flows over the Agent-to-Agent protocol using JSON-RPC messages and task-based state management. / Array of `SettlementResponse` schemas in `x402.payment.receipts` metadata field / Task with `state: \"input-required\"` and `x402.payment.status: \"payment-required\"` / PaymentRequired schema in `x402.payment.required` metadata field / PaymentPayload schema in `x402.payment.payload` metadata field / **Mechanism**: Message with `x402.payment.payload` metadata field and `taskId` for correlation / \"method\": \"message/send\" / `payment-submitted` | Payment payload received by server / `payment-verified` | Payment payload verified by server / `payment-completed` | Payment settled on-chain successfully / `payment-failed` | Payment verification or settlement failed / `payment-rejected` | Client rejected payment requirements / PaymentRequired schema in x402.payment.required metadata field / PaymentPayload schema in x402.payment.payload metadata field",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://raw.githubusercontent.com/x402-foundation/x402/main/specs/transports-v2/mcp.md",
     "claim": "x402 Foundation, *Transport: MCP (Model Context Protocol)*, fetched 2026-11-05",
     "date": null,
     "quote": "Client retries the tool call with payment in `_meta[\"x402/payment\"]` / Server returns tool result with settlement info in `_meta[\"x402/payment-response\"]` / **Data Format**: `PaymentPayload` schema / servers MUST return a tool result with `isError: true` containing the `PaymentRequired` data. / `structuredContent`** (REQUIRED): Direct `PaymentRequired` object / `content[0].text`** (REQUIRED): JSON-encoded string of the same `PaymentRequired` object / JSON.stringify(structuredContent) / Clients SHOULD prefer `structuredContent` when available, falling back to parsing `content[0].text` / Check if `result.structuredContent` exists and contains `x402Version` and `accepts` fields / Payment Invalid | Tool result with `isError: true` | Payment verification failed / Settlement Failed | Tool result with `isError: true` / Clients send payment data using the MCP `_meta` field with key `x402/payment`. / **Mechanism**: `_meta[\"x402/payment\"]` field in request parameters / Servers communicate payment settlement results using the `_meta[\"x402/payment-response\"]` field. / **Data Format**: `SettlementResponse` schema / If settlement fails after the tool has already executed, the server should not return the tool's content - only the payment error.",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://docs.x402.org/extensions/bazaar",
     "claim": "x402 Foundation, *Bazaar (Discovery Layer)*, fetched 2026-10-30",
     "date": null,
     "quote": "The x402 Bazaar is the discovery layer for the x402 ecosystem - a machine-readable catalog",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://github.com/x402-foundation/x402",
     "claim": "x402 Foundation, *x402*, Apache-2.0; fetched 2026-10-30",
     "date": null,
     "quote": "Apache-2.0 license",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://github.com/x402-foundation/x402/blob/main/specs/schemes/exact/scheme_exact_evm.md",
     "claim": "x402 Foundation, *Exact Scheme Specification for EVM (EIP-3009 and Permit2)*, 2026",
     "date": null,
     "quote": "the Facilitator cannot modify the amount or destination. They serve only as the transaction broadcaster. / If no `assetTransferMethod` is specified in `PaymentRequired.extra`, clients should default to `\"eip3009\"`. / Tokens with native `transferWithAuthorization` (e.g., USDC). / The 65-byte signature of the `transferWithAuthorization` operation. / `authorization`: The parameters required to reconstruct the signed message. / `extra.name` (required): The EIP-712 domain name of the token contract. / `extra.version` (required): The EIP-712 domain version of the token contract. / One-time use / 1. Race Condition Risk: A facilitator may be vulnerable to a race condition where the client invalidates their delegation between simulation and transaction execution, causing the facilitator to pay gas for a failed transaction. / Tokens without EIP-3009. Uses a Proxy + Permit2. / **Universal Fallback** (Works for any ERC-20). / This asset transfer method uses the `permitWitnessTransferFrom` / to enforce receiver address security via the \"Witness\" pattern. / The `spender` in the signature is the / x402ExactPermit2Proxy / The user submits a standard on-chain `approve(Permit2)` transaction paying their own gas. / erc20ApprovalGasSponsoring / If the token supports EIP-2612, the user signs a permit authorizing Permit2. / Facilitator calls `x402ExactPermit2Proxy.settleWithPermit()` / eip2612GasSponsoring / The `eip3009` asset transfer method uses the `transferWithAuthorization` function",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://github.com/x402-foundation/x402/blob/main/specs/schemes/exact/scheme_exact_svm.md",
     "claim": "x402 Foundation, *Exact Scheme Specification for Solana SVM (SPL TransferChecked)*, 2026",
     "date": null,
     "quote": "The transfer MAY appear either as a top-level instruction or as an inner instruction (CPI) emitted by another program. / `spl-token` `TransferChecked` / `token-2022` `TransferChecked` / A transfer of at least `PaymentRequirements.amount` / Of the asset identified by `PaymentRequirements.asset` / To the recipient identified by `PaymentRequirements.payTo` / The transfer MAY appear either as a top-level instruction or as an inner instruction (CPI) / Across all top-level instructions and the full CPI trace, **exactly one** transfer MUST match the requirements / When `extra.splits` is present, this rule applies **per payment leg** / Split legs MUST match their declared `amount` **exactly** / Clients MUST include a Memo instruction containing either the value of `extra.memo` (when present) or a random nonce (at least 16 bytes, hex-encoded for UTF-8 compliance). / Only `SetComputeUnitLimit` (discriminator 2) and `SetComputeUnitPrice` (discriminator 3) SHOULD be accepted / any `ComputeBudgetProgram` instructions / The `feePayer` MUST NOT appear in the `accounts` list of any instruction / The `feePayer` MUST NOT be used as an authority, source, or delegate for any transfer.",
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://github.com/x402-foundation/x402/pull/3074",
     "claim": "x402 Foundation, *Pull Request #3074: Buffer response body until settlement succeeds in PaymentFilter*, 2026-09-04",
     "date": "2026-09-04",
     "quote": "buffer response body until settlement succeeds",
     "ref": 25
    },
    {
     "label": "[26]",
     "url": "https://www.usenix.org/system/files/usenixsecurity26-wang-qinying.pdf",
     "claim": "Qinying Wang (EPFL), Yong Yang (Zhejiang University), Yuan Chen (Independent Researcher), Shouling Ji (Zhejiang University), and Mathias Payer (EPFL), *When HTTP 402 Meets the Blockchain: Risks on Emerging x402 Payments (USENIX Security '26)*, August 12–14, 2026",
     "date": null,
     "quote": "identifying eight security rules for facilitators as critical payment infrastructure. Based on our analysis of rule violations, we derive four new attack vectors, including Free Shopping, Asset Theft, Service Denial, and Gas Abuse. / apply it to 15 major x402 facilitators collectively used by over 60K sellers and 360K buyers. Alarmingly, we find violations in all evaluated facilitators. / apply it to 15 major x402 facilitators collectively used by over 60K sellers and 360K buyers. Alarmingly, we find violations in all evaluated facilitators. We responsibly disclosed our findings to the affected parties, who acknowledged the issues and adopted mitigations, including changes by Coinbase. Finally, we complement our controlled testing with an empirical measurement of over 119 million recent Base and Solana transactions / Qinying Wang, EPFL; Yong Yang, Zhejiang University; Yuan Chen, Independent Researcher; Shouling Ji, Zhejiang University; Mathias Payer, EPFL",
     "ref": 26
    },
    {
     "label": "[27]",
     "url": "https://github.com/x402-foundation/x402/blob/main/specs/schemes/batch-settlement/scheme_batch_settlement.md",
     "claim": "x402 Foundation, *Batch-Settlement Scheme Specification*, 2026-05",
     "date": null,
     "quote": "`batch-settlement` is a payment scheme in which the client provides a cryptographic payment commitment at request time / The commitment is accepted, access is granted immediately / The actual charge is communicated via the `PAYMENT-RESPONSE`. / pre-funded escrow, a payment channel, or a delegated authorization against a wallet balance / verified identity associated with a billing account / ### Capital-backed / ### Credit-backed",
     "ref": 27
    },
    {
     "label": "[28]",
     "url": "https://docs.x402.org/extensions/builder-code",
     "claim": "x402 Foundation, *Builder Code (ERC-8021)*, fetched 2026-11-11",
     "date": null,
     "quote": "builder-code extension enables on-chain attribution tracking for x402 payments by appending ERC-8021 Schema 2 builder codes to settlement transaction calldata.",
     "ref": 28
    },
    {
     "label": "[29]",
     "url": "https://docs.x402.org/extensions/payment-identifier",
     "claim": "x402 Foundation, *Payment-Identifier (Idempotency)*, fetched 2026-11-11",
     "date": null,
     "quote": "payment-identifier extension enables idempotency for x402 payments, allowing clients to safely retry requests without duplicate payment processing.",
     "ref": 29
    },
    {
     "label": "[30]",
     "url": "https://docs.x402.org/extensions/sign-in-with-x",
     "claim": "x402 Foundation, *Sign-In-With-X (SIWX)*, fetched 2026-11-11",
     "date": null,
     "quote": "Sign-In-With-X (SIWX) extension implements CAIP-122 for chain-agnostic wallet authentication. It allows clients to prove control of a wallet that previously paid for a resource, enabling access without requiring repurchase.",
     "ref": 30
    },
    {
     "label": "[31]",
     "url": "https://docs.x402.org/extensions/offer-receipt",
     "claim": "x402 Foundation, *Signed Offers and Receipts*, fetched 2026-11-11",
     "date": null,
     "quote": "The Offer & Receipt extension adds cryptographic proof-of-interaction to x402 payment flows.",
     "ref": 31
    },
    {
     "label": "[32]",
     "url": "https://aws.amazon.com/blogs/machine-learning/amazon-bedrock-agentcore-payments-is-now-generally-available-enabling-agents-to-transact-safely-and-autonomously-at-scale/",
     "claim": "Chethan Shriyan and Madhu Samhitha Vangara, AWS, *Amazon Bedrock AgentCore payments is now generally available*, 18 AUG 2026",
     "date": null,
     "quote": "At GA, we have expanded protocol support to include the Machine Payment Protocol (MPP), another standard for machine payments co-authored by Stripe and Tempo / AgentCore payments addresses this by integrating with Coinbase and Stripe Privy wallets, enabling developers to set up payment capabilities by providing Coinbase or Privy API keys and secrets. / Additionally, we have introduced support for the “upto” scheme within x402, which enables an agent to set a spending ceiling rather than committing to a fixed price. / (as with the “exact” scheme supported today). / AgentCore exposes pay-per-use x402 endpoints offered by Coinbase as an MCP server via AgentCore Gateway",
     "ref": 32
    },
    {
     "label": "[33]",
     "url": "https://cloud.google.com/blog/products/ai-machine-learning/announcing-agents-to-payments-ap2-protocol",
     "claim": "Stavan Parikh and Rao Surapaneni, Google Cloud, *Announcing Agent Payments Protocol (AP2)*, September 16, 2025",
     "date": null,
     "quote": "launched the A2A x402 extension , a production-ready solution for agent-based crypto payments.",
     "ref": 33
    },
    {
     "label": "[34]",
     "url": "https://github.com/google-agentic-commerce/a2a-x402",
     "claim": "google-agentic-commerce/a2a-x402, *A2A x402 Extension*, fetched 2026-10-30",
     "date": null,
     "quote": "The A2A x402 Extension brings cryptocurrency payments to the Agent-to-Agent (A2A) protocol, enabling agents to monetize their services through on-chain payments. / Language-specific implementations (e.g., python/, typescript/)",
     "ref": 34
    },
    {
     "label": "[35]",
     "url": "https://www.trmlabs.com/trm-tech-blog/whos-actually-paying-measuring-ai-agent-payments-onchain",
     "claim": "Noah Hodge, TRM Labs, *Who's Actually Paying? Measuring AI Agent Payments Onchain*, September 9, 2026",
     "date": null,
     "quote": "OpenAI and Stripe’s ACP connects AI assistants to merchants so users can complete purchases within a conversation. / x402 makes payment part of a web request, allowing software to pay for a resource through an on-chain transaction. / The strict test keeps only those that also sustained the pattern across months and either registered in a public agent registry (ERC-8004) or paid more than one seller. / Across Base, Solana, and Polygon, TRM identified roughly USD 52.7 million across 198.9 million settlement transactions mediated by known x402 facilitators since May 2025. / Applied to the USD 25.62 million of screened x402 commerce, the two tests put the share that appears to be agentic at between 0.6% and 7.5% . / USD 52.47 million of USD 52.68 million (99.6%) settled in USDC",
     "ref": 35
    },
    {
     "label": "[36]",
     "url": "https://stripe.com/blog/10-lessons",
     "claim": "Roshan Sadanani, Stripe, *10 things we learned building for the first generation of agentic commerce*, March 12, 2026",
     "date": null,
     "quote": "we launched the Agentic Commerce Protocol (ACP), an open checkout specification that lets buyers, AI agents, and sellers transact through APIs / We’re starting with support for x402 using USDC on Base, with more protocols coming.",
     "ref": 36
    },
    {
     "label": "[37]",
     "url": "https://eips.ethereum.org/EIPS/eip-8004",
     "claim": "Ethereum Improvement Proposals, *ERC-8004: Trustless Agents*, 2025-08-13",
     "date": "2025-08-13",
     "quote": "Identity Registry Reputation Registry Validation Registry / This protocol proposes to use blockchains to discover, choose, and interact with agents across organizational boundaries without pre-existing trust",
     "ref": 37
    },
    {
     "label": "[38]",
     "url": "https://docs.x402.org/dev-tools/facilitators",
     "claim": "x402 Foundation, *Facilitators*, fetched 2026-10-30",
     "date": null,
     "quote": "The table below lists selected production options; it is not an exhaustive catalog.",
     "ref": 38
    },
    {
     "label": "[39]",
     "url": "https://pro-api.coingecko.com/api/v3/x402/onchain/search/pools?query=weth",
     "claim": "CoinGecko, *Onchain DEX pool search*, HTTP 402; fetched 2026-10-30",
     "date": null,
     "quote": "HTTP 402 PAYMENT-REQUIRED decoded: {\"x402Version\":2,\"resource\":{\"url\":\"https://pro-api.coingecko.com/api/v3/x402/onchain/search/pools\" / {\"scheme\":\"exact\",\"network\":\"eip155:8453\",\"amount\":\"5000\",\"asset\":\"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\"payTo\":\"0x110cdBba7FE6434Ec4CE3464CC523942ad6Fb784\",\"maxTimeoutSeconds\":60,\"extra\":{\"name\":\"USD Coin\",\"version\":\"2\"}} / {\"scheme\":\"exact\",\"network\":\"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\",\"amount\":\"5000\",\"asset\":\"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\" / {\"scheme\":\"exact\",\"network\":\"eip155:137\",\"amount\":\"5000\",\"asset\":\"0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359\" / \"extensions\":{\"bazaar\":",
     "ref": 39
    },
    {
     "label": "[40]",
     "url": "https://pro-api.coinmarketcap.com/x402/v3/cryptocurrency/quotes/latest?id=1",
     "claim": "CoinMarketCap, *Cryptocurrency quotes latest*, HTTP 402; fetched 2026-10-30",
     "date": null,
     "quote": "HTTP 402 PAYMENT-REQUIRED decoded: {\"x402Version\":2,\"resource\":{\"url\":\"https://pro-api.coinmarketcap.com/x402/v3/cryptocurrency/quotes/latest\" / {\"scheme\":\"exact\",\"network\":\"eip155:56\",\"asset\":\"0xcE24439F2D9C6a2289F741120FE202248B666666\" / \"assetTransferMethod\":\"permit2-exact\" / {\"scheme\":\"exact\",\"network\":\"eip155:8453\",\"asset\":\"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\"payTo\":\"0x3C5f3a6cE224BB89D72f5EB4232ecC27F67B3eeA\",\"maxTimeoutSeconds\":30,\"extra\":{\"name\":\"USD Coin\",\"version\":\"2\",\"x402PaymentConfigId\":\"699dbab79f32ffde650104aa\",\"assetTransferMethod\":\"eip3009\"},\"amount\":\"10000\"} / \"name\":\"World Liberty Financial USD\" / \"name\":\"Tether USD\" / \"name\":\"United Stables\"",
     "ref": 40
    },
    {
     "label": "[41]",
     "url": "https://api.bitrefill.com/x402/gift-cards/search?q=amazon",
     "claim": "Bitrefill, *Gift-card search*, HTTP 402; fetched 2026-10-30",
     "date": null,
     "quote": "HTTP 402 PAYMENT-REQUIRED decoded: {\"x402Version\":2,\"error\":\"Payment required\",\"resource\":{\"url\":\"https://api.bitrefill.com/x402/gift-cards/search?q=amazon\" / {\"scheme\":\"exact\",\"network\":\"eip155:8453\",\"amount\":\"2000\",\"asset\":\"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\" / {\"scheme\":\"exact\",\"network\":\"eip155:42161\",\"amount\":\"2000\" / {\"scheme\":\"exact\",\"network\":\"eip155:137\",\"amount\":\"2000\" / {\"scheme\":\"exact\",\"network\":\"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\",\"amount\":\"2000\" / {\"scheme\":\"exact\",\"network\":\"lnbtc:000000000019d6689c085ae165831e93\",\"amount\":\"3000\",\"asset\":\"BTC\",\"payTo\":\"03c913d061dfe0adbfd87c0e98e66033be0dbbb2413de26bd363c63970480a9a80\",\"maxTimeoutSeconds\":300,\"extra\":{\"assetTransferMethod\":\"bolt11\",\"paymentFlow\":\"upfront\"",
     "ref": 41
    },
    {
     "label": "[42]",
     "url": "https://blog.cloudflare.com/wallets/",
     "claim": "Cloudflare, *Announcing Cloudflare Wallets: The programmable wallet for the agentic Internet*, August 4, 2026",
     "date": null,
     "quote": "If you want to pay or get paid for services behind Monetization Gateway and other x402-compatible endpoints , you’ll need a wallet. Cloudflare Wallets will allow you to store stablecoins, purchase services, and receive funds across the web.",
     "ref": 42
    },
    {
     "label": "[43]",
     "url": "https://docs.cdp.coinbase.com/x402/seller/facilitator",
     "claim": "Coinbase Developer Platform, *CDP Facilitator*, fetched 2026-10-30",
     "date": null,
     "quote": "The CDP Facilitator handles that work as a hosted service: it validates signed payments, screens transactions, submits settlement onchain, and reports the result to your resource server. / The CDP Facilitator has processed more than 100 million transactions and $28 million in payment volume across Base and Solana alone. Built-in screening. OFAC and Know Your Transaction (KYT) checks identify and decline payments involving sanctioned or high-risk addresses. / The CDP Facilitator supports all ERC-20 tokens on its EVM networks through EIP-3009 or Permit2, and SPL tokens on Solana. The following table shows x402 v2 support: Network CAIP-2 identifier Schemes Base eip155:8453 exact , upto , batch-settlement Base Sepolia eip155:84532 exact , upto , batch-settlement Polygon eip155:137 exact , upto , batch-settlement Arbitrum eip155:42161 exact , upto , batch-settlement Monad eip155:143 exact , upto , batch-settlement World eip155:480 exact , upto , batch-settlement World Sepolia eip155:4801 exact , upto , batch-settlement Solana solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp exact , upto",
     "ref": 43
    },
    {
     "label": "[44]",
     "url": "https://blog.cloudflare.com/monetization-gateway-beta/",
     "claim": "Cloudflare, *Monetization Gateway beta: charge AI agents for consumption with HTTP 402*, September 30, 2026",
     "date": null,
     "quote": "Today, we’re making the Cloudflare Monetization Gateway available as part of a closed beta, and showcasing four customer use cases that are in production today. / We handle the rest: payment verification and settlement through Coinbase's x402 Facilitator , failures and retries, analytics, and keeping up with changes to the x402 protocol. Payments settle on the Base blockchain using USDC, a stablecoin pegged to the U.S. dollar. / --header \"Payment-Method: x402\"",
     "ref": 44
    },
    {
     "label": "[45]",
     "url": "https://pkg.go.dev/github.com/x402-foundation/x402/go/v2",
     "claim": "Go Packages, *github.com/x402-foundation/x402/go/v2*, v2.30.0, published Nov 4, 2026",
     "date": null,
     "quote": "Go implementation of the x402 protocol - a standard for HTTP 402 Payment Required responses with cryptocurrency micropayments. / evm/auth-capture / svm/paymentchannels",
     "ref": 45
    },
    {
     "label": "[46]",
     "url": "https://github.com/Merit-Systems/x402scan",
     "claim": "Merit Systems, *x402scan*, fetched 2026-11-06",
     "date": null,
     "quote": "x402scan lets you explore the ecosystem of x402 servers, see their transaction volumes and directly access their resources through an embedded wallet. / It's live at x402scan.com. / Shared facilitator configuration",
     "ref": 46
    },
    {
     "label": "[47]",
     "url": "https://stablecoin.com/402/ecosystem",
     "claim": "Stablecoin.com, *x402 ecosystem directory*, fetched 2026-11-06",
     "date": null,
     "quote": "Varies by scheme and facilitator / Listed by x402 as the default testnet facilitator. / Independent Rust facilitator listed in the x402 ecosystem.",
     "ref": 47
    },
    {
     "label": "[48]",
     "url": "https://www.chainalysis.com/blog/x402-agentic-payments-adoption/",
     "claim": "Chainalysis Team, *Agentic Payments Cross the Threshold: Inside x402's Path to Meaningful Adoption*, June 3, 2026",
     "date": null,
     "quote": "Agentic payments on Base crossed 100 million transactions in approximately three quarters, surging from near-zero in Q3 2025 before moderating in early 2026. / Transactions of $1+ now represent 95% of total volume transferred, up from 49% in early 2025.",
     "ref": 48
    },
    {
     "label": "[49]",
     "url": "https://financetracked.com/ai-agent-payments",
     "claim": "Adewale Amure, FinanceTracked (citing Visa & Artemis), *AI Agent Payments: Where Does the Real Usage Lie?*, published 2026-09-18; citing Visa & Artemis report published July 16, 2026, data through 2026-04-21",
     "date": null,
     "quote": "A joint report from Visa and Artemis, published 16 July with data to 21 April, adjusted x402’s volume to about $15 million across 109.6 million transactions, with roughly 422,000 buyers and about 5,300 sellers. / That study filtered and identified wash and test activity rather than modeling which transactions came from agents.",
     "ref": 49
    },
    {
     "label": "[50]",
     "url": "https://v12.sh/blog/x402",
     "claim": "V12 Security, *25 Vulnerabilities in the x402 Protocol: Inside Three Critical Findings*, 2026-10-22",
     "date": "2026-10-22",
     "quote": "V12 found 25 vulnerabilities / We reported the 3 critical and 13 high severity findings to the x402 team on August 12, 2026. The 3 critical vulnerabilities were fixed by August 20th.",
     "ref": 50
    },
    {
     "label": "[51]",
     "url": "https://24klabs.ai/wall",
     "claim": "24K Labs, *The Gold-402 Index*, fetched 2026-11-06",
     "date": null,
     "quote": "731 curated x402 services, every one live‑knocked before it was listed. / 479 carry a dated knock / APIs & Services 348 / A knock is one HTTP request that got an answer — it is not a delivery test.",
     "ref": 51
    },
    {
     "label": "[52]",
     "url": "https://s402-protocol.org/specification",
     "claim": "s402, *s402 Wire Format Specification (retired September 2026)*, 2026-09",
     "date": null,
     "quote": "s402 was retired in September 2026. It was an HTTP 402 payment protocol for agents on Sui, and x402 has since become the industry standard. For new work, use x402",
     "ref": 52
    },
    {
     "label": "[53]",
     "url": "https://github.com/s402-protocol/core/blob/main/AGENTS.md",
     "claim": "s402, *s402-protocol/core — AGENTS.md*, 2026-09-04",
     "date": "2026-09-04",
     "quote": "`payment-required` carries an x402 V2 `PaymentRequired` envelope on every route / its envelope-level fields ride in `extensions.s402`",
     "ref": 53
    }
   ],
   "form": "http-header",
   "governance": "The x402 Foundation, a Linux Foundation project (\"x402 a Series of LF Projects, LLC\"). The Linux Foundation announced it on 2026-04-02 with the contribution of the protocol from Coinbase, and announced its operational launch and the completed contribution on 2026-07-14, with 40 member organisations by then. Premier members (2026-07-14): Adyen, AWS, American Express, Circle, Cloudflare, Coinbase, Fiserv, Google, Mastercard, Monad Foundation, MoonPay, Ripple, Shopify, Solana Foundation, Stellar Development Foundation, Stripe and Visa. Michael Hursta was appointed Executive Director on 2026-10-01. The Technical Steering Committee lists Coinbase, Cloudflare and Stripe",
   "group": "HTTP 402 family",
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against x402.org (homepage, /announcement), x402-foundation/x402 specs/transports-v2/http.md"
    },
    {
     "date": "2026-10-16",
     "note": "The Linux Foundation appointed Michael Hursta as executive director of the x402 Foundation, effective 2026-10-01; the foundation has 50+ members"
    },
    {
     "date": "2026-10-28",
     "note": "Re-verified record against 27 sources on 2026-10-28: 5 live HTTP 402 x402 v2 endpoints (CoinGecko, CoinMarketCap, Bitrefill, Apify, OneSource), 5 vendor implementations, and 2 independent coverage sources."
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "x402",
   "implementation": "multi-implementation",
   "last_verified": "2026-11-11",
   "name": "x402",
   "native_status": "In production use; the Foundation calls it \"an open, neutral standard for internet-native payments\"",
   "origin": {
    "date": "2025-05-06",
    "org": "Coinbase"
   },
   "part_of": null,
   "parties": [
    "agent-site",
    "agent-payment"
   ],
   "phase": "living",
   "probe": {
    "method": "GET",
    "on_absent": "A 200 or a 402 without a PAYMENT-REQUIRED header means this specific path is not (or no longer) gated by x402 v2 over HTTP; the same origin could still use x402 over the MCP or other transports, or the legacy v1 header shape, so the probe only rules out v2/HTTP on the probed path.",
    "parse": "HTTP 402 status with a base64-encoded PaymentRequired object in the PAYMENT-REQUIRED response header (x402 v2 HTTP transport)",
    "path": "{origin}/{paid-path}"
   },
   "question": "How can an HTTP client pay per-request or per-resource, in stablecoins, without accounts, API keys, or signup?",
   "scope": "payments",
   "spec_url": "https://github.com/x402-foundation/x402/blob/main/specs/x402-specification-v2.md",
   "step": "pay",
   "summary_md": "**x402** is an open payment standard originated by Coinbase on May 6, 2025 that enables applications and autonomous agents to pay resource servers inline for protected APIs, content, and data. Its transport-independent core schemas (`PaymentRequirements`, `PaymentPayload`, and `SettlementResponse`) bind a `CAIP-2` network, atomic `amount`, and `asset` across HTTP, MCP, and A2A transports. On HTTP in v2, the server challenges an unpaid request with `402 Payment Required` and `PAYMENT-REQUIRED`, the client submits `PaymentPayload` in `PAYMENT-SIGNATURE`, verification (`POST /verify`) and settlement (`POST /settle`) execute according to `paymentFlow` (`authorization` by default, or `upfront` / `escrow`), and the server returns `PAYMENT-RESPONSE` on `200 OK`. Announced December 11, 2025, `v2.0` (`2025-12-9`) replaced v1's HTTP 402 response body and `X-PAYMENT` / `X-PAYMENT-RESPONSE` headers with `CAIP-2` identifiers and `extensions`, and on April 2, 2026 the protocol transferred to the Linux Foundation's x402 Foundation under a Technical Steering Committee of Coinbase, Cloudflare, and Stripe.",
   "track": "linux-foundation",
   "version": {
    "date": "2025-12-09",
    "label": "2.0"
   },
   "watch": [
    {
     "type": "github",
     "repo": "x402-foundation/x402",
     "mode": "release",
     "version": false
    }
   ],
   "use_cases": [
    "accept-agent-payments",
    "agent-checkout"
   ],
   "audience": [
    "agent-builder",
    "site-owner",
    "platform"
   ],
   "pairs_with": [
    "mpp",
    "l402",
    "ap2",
    "agentic-commerce-protocol",
    "erc-8004"
   ],
   "prerequisites": [],
   "hatnote_md": "For the reserved HTTP status code, see [HTTP 402 Payment Required](/terms/http-402-payment-required/). Not to be confused with [L402](/protocols/l402/) (`WWW-Authenticate: L402` macaroon and Lightning invoice) or [Machine Payments Protocol (MPP)](/protocols/mpp/).",
   "tier": "flagship",
   "lifecycle_status": "active",
   "wire_archetype": "payments_onchain",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-11",
   "v05_hatnote_html_md": "For the reserved HTTP status code, see [HTTP 402 Payment Required](/terms/http-402-payment-required/). Not to be confused with [L402](/protocols/l402/) (`WWW-Authenticate: L402` macaroon and Lightning invoice) or [Machine Payments Protocol (MPP)](/protocols/mpp/). [1][2][3]",
   "v05_elevator_pitch_md": "x402 is an open payment protocol that lets AI agents and software clients pay per request for APIs, data feeds, and web content directly over HTTP, MCP, or A2A without human checkout flows. Instead of forcing developers to pre-register accounts, manage API keys, and maintain separate subscriptions with every provider, a server returns an HTTP `402 Payment Required` challenge with `PaymentRequirements` and fulfills the request as soon as the client attaches a signed `PaymentPayload`. [4][5][6]",
   "v05_lead_md": "**x402** is an open payment standard originated by Coinbase on May 6, 2025 that enables applications and autonomous agents to pay resource servers inline for protected APIs, content, and data. [4][7] Its transport-independent core schemas (`PaymentRequirements`, `PaymentPayload`, and `SettlementResponse`) bind a `CAIP-2` network, atomic `amount`, and `asset` across HTTP, MCP, and A2A transports. On HTTP in v2, the server challenges an unpaid request with `402 Payment Required` and `PAYMENT-REQUIRED`, the client submits `PaymentPayload` in `PAYMENT-SIGNATURE`, verification (`POST /verify`) and settlement (`POST /settle`) execute according to `paymentFlow` (`authorization` by default, or `upfront` / `escrow`), and the server returns `PAYMENT-RESPONSE` on `200 OK`. [4][8][9] Announced December 11, 2025, `v2.0` (`2025-12-9`) replaced v1's HTTP 402 response body and `X-PAYMENT` / `X-PAYMENT-RESPONSE` headers with `CAIP-2` identifiers and `extensions`, and on April 2, 2026 the protocol transferred to the Linux Foundation's x402 Foundation under a Technical Steering Committee of Coinbase, Cloudflare, and Stripe. [4][8][9][10][11]",
   "v05_identity_sentence_md": "**x402** is an open payment standard originated by Coinbase on May 6, 2025 that enables applications and autonomous agents to pay resource servers inline for protected APIs, content, and data. [4][7]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Pay](/category/pay/) (`pay`)"
    },
    {
     "label": "Form",
     "value_md": "HTTP header (`http-header`)"
    },
    {
     "label": "Originated by",
     "value_md": "Coinbase (Erik Reppel, Nemil Dalal, Dan Kim; May 6, 2025); x402 Foundation co-founded with Cloudflare (September 23, 2025). [5][7]"
    },
    {
     "label": "Governed by",
     "value_md": "x402 Foundation (Linux Foundation); Technical Steering Committee: Coinbase, Cloudflare, and Stripe; Executive Director: Michael Hursta. [11][12][13]"
    },
    {
     "label": "Track",
     "value_md": "Foundation / Consortium Specification (`x402 a Series of LF Projects, LLC`, under Linux Foundation open governance). [12][14]"
    },
    {
     "label": "Status",
     "value_md": "Production open standard; x402 Foundation operational under Linux Foundation (40 members at July 14, 2026 operational launch; 50+ member organizations by October 2026). [12][13]"
    },
    {
     "label": "Version",
     "value_md": "v2.0 (specification header dated 2025-12-9; launched December 11, 2025; `specs/x402-specification-v2.md` on `main` revised through 2026-10-26 with `paymentFlow` and `auth-capture` additions without a version bump); v1 launched May 6, 2025. [4][7][9][15][16]"
    },
    {
     "label": "Headers",
     "value_md": "v2: `PAYMENT-REQUIRED`, `PAYMENT-SIGNATURE`, `PAYMENT-RESPONSE`; v1: `X-PAYMENT`, `X-PAYMENT-RESPONSE` (with HTTP 402 JSON body). [8][17]"
    },
    {
     "label": "Schemes",
     "value_md": "`exact`, `upto`, `batch-settlement`, and `auth-capture` (`specs/schemes/`); payment flows: `authorization` (default), `upfront`, and `escrow`. [4]"
    },
    {
     "label": "Networks",
     "value_md": "CAIP-2 identifiers (`namespace:reference`, e.g., `eip155:8453`) across EVM, Solana, TON, Algorand, Stellar, Aptos, Hedera, Keeta, NEAR, Concordium, XRPL, Cardano, Sui, and Canton. [18]"
    },
    {
     "label": "Transports",
     "value_md": "HTTP/HTTPS, Model Context Protocol (MCP), and Agent-to-Agent (A2A) JSON-RPC task metadata. [4][17][19]"
    },
    {
     "label": "Message format",
     "value_md": "Transport-specific JSON representations: Base64 JSON objects in HTTP headers; structured JSON objects in MCP `_meta` with text fallbacks. [4][20]"
    },
    {
     "label": "Token format",
     "value_md": "On-chain token contract address (e.g., ERC-20 via EIP-3009/Permit2, SPL) or ISO 4217 fiat currency code. [4][18]"
    },
    {
     "label": "Specification",
     "value_md": "[x402 Protocol Specification v2](https://github.com/x402-foundation/x402/blob/main/specs/x402-specification-v2.md) and [v1](https://github.com/x402-foundation/x402/blob/main/specs/x402-specification-v1.md) [4][15]"
    },
    {
     "label": "Found at",
     "value_md": "Per-resource HTTP 402 response headers; Facilitator `/verify`, `/settle`, `/supported`, and optional Bazaar `/discovery/resources` catalog. [4][21]"
    },
    {
     "label": "Licence",
     "value_md": "Apache-2.0 [22]"
    }
   ],
   "v05_problem_md": "RFC 9110 reserves the 402 (Payment Required) status code for future use and defines no challenge or settlement record. Without a specification for how to format and respond to that status, publishers lack adequate tools to convey a payment request. Clients that interpret a defined protocol transact without accounts, subscriptions, or API keys. Automated clients otherwise pre-register with every API, manage keys, and maintain separate billing relationships. [1][5][6] x402 standardizes those messages. Each object in `accepts` is a `PaymentRequirements` record naming `scheme`, `network`, `amount`, `asset`, and `payTo`. The client submits a `PaymentPayload` whose `accepted` field is the chosen requirement and whose `payload` carries the scheme-specific signature. `POST /verify` validates payment state without writing onchain state, and `POST /settle` durably commits it, whether a facilitator or the resource server hosts the endpoints. The schemes specified from the core document are `exact`, `upto`, `batch-settlement`, and `auth-capture`. [4] Transport-specific implementations, framework-specific integrations, client-side budget management, and session handling mechanisms sit outside the core specification. Finding a resource is a separate surface: `GET /discovery/resources` lists Bazaar entries, and the discovered resources may use any x402-supported transport. [4]",
   "v05_mechanism_delta_md": "x402 standardizes those messages. Each object in `accepts` is a `PaymentRequirements` record naming `scheme`, `network`, `amount`, `asset`, and `payTo`. The client submits a `PaymentPayload` whose `accepted` field is the chosen requirement and whose `payload` carries the scheme-specific signature. `POST /verify` validates payment state without writing onchain state, and `POST /settle` durably commits it, whether a facilitator or the resource server hosts the endpoints. The schemes specified from the core document are `exact`, `upto`, `batch-settlement`, and `auth-capture`. [4]",
   "v05_scope_boundary_md": "Transport-specific implementations, framework-specific integrations, client-side budget management, and session handling mechanisms sit outside the core specification. Finding a resource is a separate surface: `GET /discovery/resources` lists Bazaar entries, and the discovered resources may use any x402-supported transport. [4]",
   "v05_fuzzy_additions": [
    {
     "id": "transport-carriers-for-the-payment-objects",
     "heading": "Transport carriers for the payment objects",
     "body_md": "Transports share the `PaymentRequired`, `PaymentPayload`, and `SettlementResponse` schemas. While HTTP v2 encodes the challenge in the `PAYMENT-REQUIRED` response header, MCP, A2A, and HTTP v1 carry the same payment objects in transport-specific fields. [4][17][19][20]",
     "bullets": [
      {
       "label": "MCP tool-result challenge",
       "text_md": "The server returns `isError` true with `PaymentRequired` in `structuredContent` and in `content[0].text`, defined as `JSON.stringify` of `structuredContent`. Clients read `structuredContent` when `x402Version` and `accepts` are present, and parse `content[0].text` otherwise. Failed verification and failed settlement use that same `isError` result. [20]"
      },
      {
       "label": "MCP payment and receipt keys",
       "text_md": "The client sends `PaymentPayload` in `_meta[\"x402/payment\"]` on the tool call. The server returns `SettlementResponse` in `_meta[\"x402/payment-response\"]`. If settlement fails after the tool has executed, the server sets `isError` true and should not return the tool content, only the payment error. [20]"
      },
      {
       "label": "A2A task metadata",
       "text_md": "The agent sets `state` to `input-required` and `x402.payment.status` to `payment-required`, with `PaymentRequired` in `x402.payment.required`. The client sends `PaymentPayload` in `x402.payment.payload` on `message/send` with `taskId`. Receipts are `SettlementResponse` values in `x402.payment.receipts`. Status moves through `payment-submitted`, `payment-verified`, `payment-completed`, `payment-failed`, and `payment-rejected`. [19]"
      },
      {
       "label": "HTTP v1 fields and browser exposure",
       "text_md": "The v1 body is a `PaymentRequirementsResponse` with `maxAmountRequired` and a network such as `base-sepolia`. v2 headers are not CORS-safelisted: `fetch` needs `Access-Control-Expose-Headers` to read `PAYMENT-REQUIRED` and `PAYMENT-RESPONSE`, and a preflight that allows `PAYMENT-SIGNATURE`. HTTP 400 is malformed input, HTTP 402 a failed check, and HTTP 500 a server fault. [8][17]"
      }
     ]
    },
    {
     "id": "per-network-exact-payloads-and-sibling-schemes",
     "heading": "Per-network exact payloads and sibling schemes",
     "body_md": "A payment `scheme` defines how to construct the `payload` inside `PaymentPayload`, while `extra.paymentFlow` selects verification and settlement ordering (`authorization` by default). EVM `exact` sets `assetTransferMethod` to `eip3009` or `permit2`, where the facilitator acts solely as transaction broadcaster without modifying amount or destination, and Solana `exact` verifies an SPL token transfer instruction. [4][23][24] x402 supports tokens on EVM, Solana, TON, Algorand (AVM), Stellar, Aptos, Hedera, Keeta, NEAR, Concordium, XRPL, Cardano, Sui, and Canton networks, identified with CAIP-2 (`namespace:reference`). Newer families include Keeta (`keeta:21378`), Concordium, XRPL (`xrpl:0`), and Cardano. [18]",
     "bullets": [
      {
       "label": "EVM eip3009 transferWithAuthorization",
       "text_md": "`eip3009` is the default `assetTransferMethod` for tokens with `transferWithAuthorization`. The `payload` carries a 65-byte `signature` and an `authorization` of `from`, `to`, `value`, `validAfter`, `validBefore`, and a 32-byte random `nonce`. `extra.name` and `extra.version` are the EIP-712 domain. The authorization is one-time use. Because facilitator `/verify` is read-only and does not lock funds or consume the `nonce` on-chain before `/settle` executes, concurrent requests carrying the same signed authorization can pass `/verify` before settlement (a race condition risk between simulation and execution) unless the server serializes or deduplicates on the `nonce`, buffers the response body until settlement succeeds (as in reference middleware pull request `3074`), or uses the `upfront` payment flow for irreversible actions. [4][23][25][26]"
      },
      {
       "label": "EVM permit2 and the proxy witness",
       "text_md": "`permit2` covers an ERC-20 without EIP-3009. The client signs `permitWitnessTransferFrom` with `spender` equal to `x402ExactPermit2Proxy`, so the witness binds the receiver. A one-time `approve` of Permit2 is paid by the user, sponsored via `erc20ApprovalGasSponsoring`, or replaced by an EIP-2612 signature that `settleWithPermit` submits under `eip2612GasSponsoring`. [23]"
      },
      {
       "label": "Solana TransferChecked, memo nonce, and CPI",
       "text_md": "SVM `exact` uses `spl-token` or `token-2022` `TransferChecked` for at least `PaymentRequirements.amount` of `asset` to `payTo`, top-level or as an inner `CPI`. Exactly one transfer must match. `extra.splits` gives each leg its own transfer, and a split `amount` must match exactly. The Memo holds `extra.memo` or a random nonce of at least 16 bytes (>= 16 bytes, hex-encoded). `ComputeBudgetProgram` allows `SetComputeUnitLimit` and `SetComputeUnitPrice`. `feePayer` must not appear in any instruction `accounts` list and must not be an authority, source, or delegate. [24]"
      },
      {
       "label": "Sibling schemes and protocol extensions",
       "text_md": "`upto` treats `amount` as the maximum at verification and the settled amount later. `batch-settlement` submits a cryptographic commitment, grants access immediately, and returns the charge in `PAYMENT-RESPONSE`. Backing is `capital-backed` (escrow, a channel, or a delegated wallet) or `credit-backed` (a billing identity), with `auth-capture` also named. Unconfirmed settlement sets `errorReason` to `settlement_pending` with a non-empty `transaction`. Published extensions add `builder-code` (appending ERC-8021 Schema 2 builder codes to settlement transaction calldata for on-chain attribution) and `payment-identifier` (making x402 payments idempotent across client retries). Two further extensions define Sign-In-With-X (`sign-in-with-x`, implementing CAIP-122 wallet authentication so prior payers access resources without repurchase) and `offer-receipt` (adding cryptographic proof-of-interaction to x402 payment flows). [4][27][28][29][30][31]"
      }
     ]
    }
   ],
   "v05_diagram": {
    "title": "Default authorization payment flow",
    "heading": "Default authorization payment flow",
    "mermaid": "sequenceDiagram\n    participant Client\n    participant RS as Resource Server\n    participant Facilitator\n    Client->>RS: 1. Client Request\n    RS-->>Client: 2. Payment Required Response\n    Client->>RS: 3. Payment Authorization Request\n    Note over RS,Facilitator: authorization default: verify, then resource, then settle, then respond\n    RS->>Facilitator: POST /verify\n    Note over RS: Resource executes after read-only verify\n    RS->>Facilitator: POST /settle\n    RS-->>Client: 4. Settlement Response",
    "caption_md": "Default `authorization` flow. Read-only `/verify` runs before the resource executes, then `/settle`, then the settlement response. Because `/verify` is read-only and MUST NOT commit payment state or write onchain state, funds move only when `/settle` executes (`upfront` commits payment via `/settle` before the resource executes, and `escrow` runs an initial `/settle` before the resource executes). The resource server may host `/verify` and `/settle` itself. `upfront` and `escrow` are different orderings. [4]"
   },
   "v05_wire_artifact": {
    "title": "Canonical HTTP 402 PAYMENT-REQUIRED decoded payload (x402 v2)",
    "heading": "Canonical HTTP 402 PAYMENT-REQUIRED decoded payload (x402 v2)",
    "lang": "json",
    "code": "{\n  \"x402Version\": 2,\n  \"error\": \"PAYMENT-SIGNATURE header is required\",\n  \"resource\": {\n    \"url\": \"https://api.example.com/premium-data\",\n    \"description\": \"Access to premium market data\",\n    \"mimeType\": \"application/json\"\n  },\n  \"accepts\": [\n    {\n      \"scheme\": \"exact\",\n      \"network\": \"eip155:84532\",\n      \"amount\": \"10000\",\n      \"asset\": \"0x036CbD53842c5426634e7929541eC2318f3dCF7e\",\n      \"payTo\": \"0x209693Bc6afc0C5328bA36FaF03C514EF312287C\",\n      \"maxTimeoutSeconds\": 60,\n      \"extra\": {\n        \"name\": \"USDC\",\n        \"version\": \"2\"\n      }\n    }\n  ]\n}",
    "caption_md": "Canonical `PaymentRequired` JSON object decoded from the base64 `PAYMENT-REQUIRED` HTTP `402` response header in the x402 v2 HTTP transport specification (`eip155:84532`, `exact` scheme, `10000` atomic `USDC` units). [17]"
   },
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "HTTP 402 Payment Required",
      "spec_or_rfc": "RFC 9110",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "RFC 9110 reserves HTTP 402 without wire headers; x402 v2 binds it to `PAYMENT-REQUIRED`, `PAYMENT-SIGNATURE`, and `PAYMENT-RESPONSE`. [1][17]"
     },
     {
      "name": "EIP-712 Typed Data & EIP-3009 Transfer With Authorization",
      "spec_or_rfc": "EIP-3009",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "x402's EVM `exact` scheme wraps an EIP-712 signature and EIP-3009 authorization parameters inside the transport `PaymentPayload`. [4][23]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "mpp",
      "target_name": "Machine Payments Protocol (MPP)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "Co-authored by Stripe and Tempo for card and stablecoin machine payments alongside x402 in Stripe and AWS AgentCore. [3][32]"
     },
     {
      "target_id": "l402",
      "target_name": "L402",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "L402 challenges via `WWW-Authenticate: L402` with a macaroon and BOLT 11 Lightning invoice instead of CAIP-2 `PAYMENT-REQUIRED` headers. [2][17]"
     },
     {
      "target_id": "ap2",
      "target_name": "Agent Payments Protocol (AP2)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "AP2 verifies user-authorized agent mandates, while the `a2a-x402` extension settles on-chain cryptocurrency payments over A2A tasks. [33][34]"
     },
     {
      "target_id": "agentic-commerce-protocol",
      "target_name": "Agentic Commerce Protocol",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "OpenAI and Stripe's ACP handles conversational merchant checkout, whereas x402 settles per-request API payments inline over HTTP 402. [35][36]"
     },
     {
      "target_id": "erc-8004",
      "target_name": "ERC-8004: Trustless Agents",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Defines on-chain Identity, Reputation, and Validation registries for cross-organization agent discovery; TRM Labs' strict x402 payment model uses `ERC-8004` registration as one attribution heuristic alongside multi-seller payment patterns. [35][37]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (13 probed or cited examples across 4 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).",
    "side_a": {
     "visible": true,
     "heading": "Paywalled origins & API sellers",
     "col4_header": "Observed challenge & accepted assets",
     "note_md": "Facilitator and resource-server rows reflect vendor-declared capabilities, documentation, and `/supported` or HTTP 402 endpoint probes rather than audited protocol conformance; see the USENIX Security '26 facilitator study and V12 audit in the ecosystem censuses and notes below. [26][38]",
     "rows": [
      {
       "actor": "CoinGecko",
       "role": "Seller",
       "status": "Live (HTTP 402)",
       "status_display": "Live (HTTP 402) · checked 2026-10-30",
       "col4_md": "HTTP 402 `PAYMENT-REQUIRED` (`x402Version` 2, `exact`) accepting USDC across Base, Solana, and Polygon.",
       "source_md": "[CoinGecko onchain pool search (HTTP 402)](https://pro-api.coingecko.com/api/v3/x402/onchain/search/pools?query=weth) [39] · [x402 networks and token support](https://docs.x402.org/core-concepts/network-and-token-support) [18]"
      },
      {
       "actor": "CoinMarketCap",
       "role": "Seller",
       "status": "Live (HTTP 402)",
       "status_display": "Live (HTTP 402) · checked 2026-10-30",
       "col4_md": "HTTP 402 `PAYMENT-REQUIRED` (`x402Version` 2, `exact`, `eip3009` / `permit2-exact`) on `eip155:8453` (USDC) and `eip155:56` (4 stablecoins).",
       "source_md": "[CoinMarketCap quotes (HTTP 402)](https://pro-api.coinmarketcap.com/x402/v3/cryptocurrency/quotes/latest?id=1) [40]"
      },
      {
       "actor": "Bitrefill",
       "role": "Seller",
       "status": "Live (HTTP 402)",
       "status_display": "Live (HTTP 402) · checked 2026-10-30",
       "col4_md": "HTTP 402 `PAYMENT-REQUIRED` (`x402Version` 2, `exact`) on `eip155:8453`, `eip155:42161`, `eip155:137`, Solana, and Lightning (`bolt11`, `upfront`).",
       "source_md": "[Bitrefill gift-card search (HTTP 402)](https://api.bitrefill.com/x402/gift-cards/search?q=amazon) [41] · [x402 networks and token support](https://docs.x402.org/core-concepts/network-and-token-support) [18]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Buyer harnesses & cloud runtimes",
     "col4_header": "Runtime integration & payment flow",
     "note_md": null,
     "rows": [
      {
       "actor": "AWS (Amazon Bedrock AgentCore payments)",
       "role": "Agent platform / runtime",
       "status": "Supported",
       "status_display": "Supported · as of 2026-08-18",
       "col4_md": "GA runtime supporting x402 `exact` and `upto` with Coinbase/Privy USDC wallets and AgentCore Gateway MCP discovery.",
       "source_md": "[AWS ML Blog (18 AUG 2026)](https://aws.amazon.com/blogs/machine-learning/amazon-bedrock-agentcore-payments-is-now-generally-available-enabling-agents-to-transact-safely-and-autonomously-at-scale/) [32]"
      },
      {
       "actor": "Cloudflare Agents SDK",
       "role": "Agent SDK / runtime",
       "status": "Supported",
       "status_display": "Supported · as of 2026-08-04",
       "col4_md": "Supports x402 transactions in Cloudflare Agents SDK and MCP integrations, paired with Cloudflare Wallets for stablecoin payments.",
       "source_md": "[Cloudflare Blog (September 23, 2025)](https://blog.cloudflare.com/x402/) [5] · [Cloudflare Wallets (August 4, 2026)](https://blog.cloudflare.com/wallets/) [42]"
      },
      {
       "actor": "Vercel x402-mcp",
       "role": "SDK integration",
       "status": "Supported",
       "status_display": "Supported · as of 2025-09-12",
       "col4_md": "Integrates x402 payments into MCP servers and Vercel AI SDK alongside `x402-fetch` and `x402-next` middleware.",
       "source_md": "[Vercel Blog (12 Sep 2025)](https://vercel.com/blog/introducing-x402-mcp-open-protocol-payments-for-mcp-tools) [6]"
      }
     ]
    },
    "additional_tables": [
     {
      "visible": true,
      "heading": "Payment facilitators, gateways & reference SDKs",
      "col4_header": "Supported schemes, networks & surface",
      "note_md": null,
      "rows": [
       {
        "actor": "Coinbase CDP Facilitator",
        "role": "Payment rail (Originator)",
        "status": "Supported",
        "status_display": "Supported · as of 2026-10-30",
        "col4_md": "Hosted `exact`, `upto`, and `batch-settlement` facilitator on `eip155:8453`, `eip155:137`, `eip155:42161`, and Solana with OFAC/KYT screening.",
        "source_md": "[Coinbase CDP Facilitator](https://docs.cdp.coinbase.com/x402/seller/facilitator) [43]"
       },
       {
        "actor": "Stripe",
        "role": "Payment rail (TSC member)",
        "status": "Supported",
        "status_display": "Supported · as of 2026-10-30",
        "col4_md": "Accepts `exact` USDC on Base (`2026-05-27.preview` `transaction_verification`); requires Dashboard approval and US (ex-NY) or 30+ country eligibility.",
        "source_md": "[Stripe x402 docs](https://docs.stripe.com/payments/machine/x402) [3] · [Stripe Blog (March 12, 2026)](https://stripe.com/blog/10-lessons) [36] · [x402 Technical Steering Committee](https://github.com/x402-foundation/x402/blob/main/TSC.md) [11]"
       },
       {
        "actor": "Cloudflare Monetization Gateway",
        "role": "Platform",
        "status": "Experimental",
        "status_display": "Experimental · as of 2026-09-30",
        "col4_md": "Closed-beta HTTP 402 edge paywall and AI Gateway (`Payment-Method: x402`) settling USDC on Base via Coinbase's Facilitator.",
        "source_md": "[Cloudflare Blog (September 30, 2026)](https://blog.cloudflare.com/monetization-gateway-beta/) [44]"
       },
       {
        "actor": "x402 Go SDK",
        "role": "Reference SDK",
        "status": "Supported",
        "status_display": "Supported · as of 2026-11-04",
        "col4_md": "Reference `go/v2` module implementing EVM (`exact`, `upto`, `batch-settlement`, `auth-capture`) and SVM (`exact`, `upto`, `batch-settlement`, `paymentchannels`) packages.",
        "source_md": "[pkg.go.dev x402 go/v2 (v2.30.0, Nov 4, 2026)](https://pkg.go.dev/github.com/x402-foundation/x402/go/v2) [45]"
       },
       {
        "actor": "Google Cloud (a2a-x402)",
        "role": "Protocol extension",
        "status": "Supported",
        "status_display": "Supported · as of 2025-09-16",
        "col4_md": "Carries x402 payloads over A2A JSON-RPC tasks via `x402.payment.required` and `x402.payment.payload` metadata in Python and TypeScript.",
        "source_md": "[Google Cloud Blog (September 16, 2025)](https://cloud.google.com/blog/products/ai-machine-learning/announcing-agents-to-payments-ap2-protocol) [33] · [a2a-x402 GitHub](https://github.com/google-agentic-commerce/a2a-x402) [34] · [x402 A2A transport](https://github.com/x402-foundation/x402/blob/main/specs/transports-v2/a2a.md) [19]"
       }
      ]
     },
     {
      "visible": true,
      "heading": "Ecosystem explorers and directories",
      "col4_header": "Index scope",
      "note_md": null,
      "rows": [
       {
        "actor": "x402scan",
        "role": "Ecosystem explorer",
        "status": "Listed",
        "status_display": "Listed · checked 2026-11-06",
        "col4_md": "Explorer of x402 servers, volumes, and facilitator configuration.",
        "source_md": "[x402scan repository](https://github.com/Merit-Systems/x402scan) [46]"
       },
       {
        "actor": "stablecoin.com x402 ecosystem",
        "role": "Ecosystem directory",
        "status": "Listed",
        "status_display": "Listed · checked 2026-11-06",
        "col4_md": "Directory of facilitators, payment schemes, and settlement chains.",
        "source_md": "[stablecoin.com x402 ecosystem](https://stablecoin.com/402/ecosystem) [47]"
       }
      ]
     }
    ],
    "censuses": [
     {
      "label": "TRM Labs, Measuring AI Agent Payments Onchain",
      "as_of": "2026-09-09",
      "value_md": "TRM Labs measured roughly USD 52.7 million across 198.9 million settlement transactions mediated by known x402 facilitators across Base, Solana, and Polygon since May 2025, with USD 52.47 million of USD 52.68 million (99.6%) settled in USDC; across USD 25.62 million of anomaly-screened commerce, 0.6% to 7.5% matched strict-to-permissive autonomous agent criteria. [35]"
     },
     {
      "label": "Chainalysis, Inside x402's Path to Meaningful Adoption",
      "as_of": "2026-06-03",
      "value_md": "Chainalysis reported that x402 transactions on Base crossed 100 million cumulative transactions over approximately three quarters through Q1 2026, with transactions of $1 or more representing 95% of total volume transferred (up from 49% in early 2025). [48]"
     },
     {
      "label": "USENIX Security '26 (Wang et al., EPFL, Zhejiang University & Independent Researcher)",
      "as_of": "2026-08",
      "value_md": "Evaluated 15 major x402 facilitators collectively used by over 60,000 sellers and 360,000 buyers; the study formalized eight security rules for facilitator authorization correctness and execution safety and derived four attack vectors from rule violations—Free Shopping, Asset Theft, Service Denial, and Gas Abuse—across all evaluated facilitators, followed by responsible disclosure and vendor mitigations (including changes by Coinbase), alongside an empirical measurement of over 119M Base and Solana transactions. [26]"
     },
     {
      "label": "Visa & Artemis (FinanceTracked, AI Agent Payments)",
      "as_of": "2026-04-21",
      "value_md": "A joint Visa and Artemis report (published July 16, 2026, with data through April 21, 2026) adjusted x402 organic volume to about `$15 million` across `109.6 million` transactions, roughly `422,000` buyers, and about `5,300` sellers after filtering wash and test activity. [49]"
     },
     {
      "label": "V12 Security Audit & PR #3074 Settlement Buffering",
      "as_of": "2026-10-22",
      "value_md": "In a post published on Oct 22, 2026, V12 documented 25 vulnerabilities across x402 implementations (spanning payment bypass, session takeover, and token theft), after reporting 3 critical and 13 high severity findings to the x402 team on August 12, 2026 (with the 3 critical vulnerabilities fixed by August 20th); reference middleware merged pull request 3074 on Sep 4, 2026 (`PaymentFilter`) to buffer downstream HTTP response bodies until facilitator settlement succeeds. [25][50]"
     },
     {
      "label": "Third-party live-knock index",
      "as_of": "2026-11-06",
      "value_md": "Lists 731 curated x402 services knocked before listing (including 348 in APIs & Services and 479 carrying a dated knock), noting that a knock represents a single HTTP response rather than an end-to-end delivery test. [51]"
     }
    ],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "s402",
     "target_name": "s402",
     "relation_label": "Deprecated → x402; formerly a Sui profile/extension of x402",
     "delta": "An HTTP 402 payment protocol for agents on Sui that carried x402 v2's `PaymentRequired` envelope in `payment-required` with Sui-specific fields in `extensions.s402` and added `prepaid`, `stream`, `escrow`, and `unlock` schemes; `s402` was retired in September 2026, directing new work to `x402`. [52][53]",
     "item_md": "**[s402](/protocols/s402/)** (Deprecated → x402; formerly a Sui profile/extension of x402) — An HTTP 402 payment protocol for agents on Sui that carried x402 v2's `PaymentRequired` envelope in `payment-required` with Sui-specific fields in `extensions.s402` and added `prepaid`, `stream`, `escrow`, and `unlock` schemes; `s402` was retired in September 2026, directing new work to `x402`. [52][53]"
    },
    {
     "item_md": "**Peer alternatives:** [Agent Commerce Kit (ACK)](/protocols/agent-commerce-kit/), [Agentic Mobile Protocol (AMP)](/protocols/amp-ant/), [Agora (agent marketplace protocol)](/protocols/agora-commerce-protocol/), [ERC-8183: Agentic Commerce](/protocols/erc-8183/), [KYAPay Token](/protocols/kyapay-token/), [Trusted Agent Protocol (TAP)](/protocols/tap/)"
    },
    {
     "item_md": "**Complements:** [Cloudflare Pay Per Crawl](/protocols/cloudflare-pay-per-crawl/), [Agent-Initiated Payment Gating](/protocols/agentic-payments-gating-model/), [agents.txt](/protocols/agents-txt/), [auth.md](/protocols/auth-md/), [Coral Protocol (CoralOS)](/protocols/coral-protocol/), [ERC-8444: Agentic Resource Discovery (ARD) Onchain](/protocols/erc-8444/), [VCAP: Verified Commerce for Agent Protocols](/protocols/vcap/), [x401: HTTP Proof Requirement Protocol](/protocols/x401/)"
    },
    {
     "item_md": "**[Pay protocols](/category/pay/)** — Category index for `pay` standards."
    }
   ],
   "v05_compiled_md": "---\nid: x402\ntitle: \"x402\"\ntier: flagship\nlifecycle_status: active\ncategory: pay\nform: http-header\nwire_archetype: payments_onchain\nspec_url: https://github.com/x402-foundation/x402/blob/main/specs/x402-specification-v2.md\nlast_checked: 2026-11-11\n---\n\n# x402\n\n**Category:** [Pay](/category/pay/) (`pay`) · **Form:** HTTP header (`http-header`) · **Last checked:** 2026-11-11\n\n> *For the reserved HTTP status code, see [HTTP 402 Payment Required](/terms/http-402-payment-required/). Not to be confused with [L402](/protocols/l402/) (`WWW-Authenticate: L402` macaroon and Lightning invoice) or [Machine Payments Protocol (MPP)](/protocols/mpp/). [1][2][3]*\n\n> **In brief:** x402 is an open payment protocol that lets AI agents and software clients pay per request for APIs, data feeds, and web content directly over HTTP, MCP, or A2A without human checkout flows. Instead of forcing developers to pre-register accounts, manage API keys, and maintain separate subscriptions with every provider, a server returns an HTTP `402 Payment Required` challenge with `PaymentRequirements` and fulfills the request as soon as the client attaches a signed `PaymentPayload`. [4][5][6]\n\n**x402** is an open payment standard originated by Coinbase on May 6, 2025 that enables applications and autonomous agents to pay resource servers inline for protected APIs, content, and data. [4][7] Its transport-independent core schemas (`PaymentRequirements`, `PaymentPayload`, and `SettlementResponse`) bind a `CAIP-2` network, atomic `amount`, and `asset` across HTTP, MCP, and A2A transports. On HTTP in v2, the server challenges an unpaid request with `402 Payment Required` and `PAYMENT-REQUIRED`, the client submits `PaymentPayload` in `PAYMENT-SIGNATURE`, verification (`POST /verify`) and settlement (`POST /settle`) execute according to `paymentFlow` (`authorization` by default, or `upfront` / `escrow`), and the server returns `PAYMENT-RESPONSE` on `200 OK`. [4][8][9] Announced December 11, 2025, `v2.0` (`2025-12-9`) replaced v1's HTTP 402 response body and `X-PAYMENT` / `X-PAYMENT-RESPONSE` headers with `CAIP-2` identifiers and `extensions`, and on April 2, 2026 the protocol transferred to the Linux Foundation's x402 Foundation under a Technical Steering Committee of Coinbase, Cloudflare, and Stripe. [4][8][9][10][11]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Pay](/category/pay/) (`pay`) |\n| **Form** | HTTP header (`http-header`) |\n| **Originated by** | Coinbase (Erik Reppel, Nemil Dalal, Dan Kim; May 6, 2025); x402 Foundation co-founded with Cloudflare (September 23, 2025). [5][7] |\n| **Governed by** | x402 Foundation (Linux Foundation); Technical Steering Committee: Coinbase, Cloudflare, and Stripe; Executive Director: Michael Hursta. [11][12][13] |\n| **Track** | Foundation / Consortium Specification (`x402 a Series of LF Projects, LLC`, under Linux Foundation open governance). [12][14] |\n| **Status** | Production open standard; x402 Foundation operational under Linux Foundation (40 members at July 14, 2026 operational launch; 50+ member organizations by October 2026). [12][13] |\n| **Version** | v2.0 (specification header dated 2025-12-9; launched December 11, 2025; `specs/x402-specification-v2.md` on `main` revised through 2026-10-26 with `paymentFlow` and `auth-capture` additions without a version bump); v1 launched May 6, 2025. [4][7][9][15][16] |\n| **Headers** | v2: `PAYMENT-REQUIRED`, `PAYMENT-SIGNATURE`, `PAYMENT-RESPONSE`; v1: `X-PAYMENT`, `X-PAYMENT-RESPONSE` (with HTTP 402 JSON body). [8][17] |\n| **Schemes** | `exact`, `upto`, `batch-settlement`, and `auth-capture` (`specs/schemes/`); payment flows: `authorization` (default), `upfront`, and `escrow`. [4] |\n| **Networks** | CAIP-2 identifiers (`namespace:reference`, e.g., `eip155:8453`) across EVM, Solana, TON, Algorand, Stellar, Aptos, Hedera, Keeta, NEAR, Concordium, XRPL, Cardano, Sui, and Canton. [18] |\n| **Transports** | HTTP/HTTPS, Model Context Protocol (MCP), and Agent-to-Agent (A2A) JSON-RPC task metadata. [4][17][19] |\n| **Message format** | Transport-specific JSON representations: Base64 JSON objects in HTTP headers; structured JSON objects in MCP `_meta` with text fallbacks. [4][20] |\n| **Token format** | On-chain token contract address (e.g., ERC-20 via EIP-3009/Permit2, SPL) or ISO 4217 fiat currency code. [4][18] |\n| **Specification** | [x402 Protocol Specification v2](https://github.com/x402-foundation/x402/blob/main/specs/x402-specification-v2.md) and [v1](https://github.com/x402-foundation/x402/blob/main/specs/x402-specification-v1.md) [4][15] |\n| **Found at** | Per-resource HTTP 402 response headers; Facilitator `/verify`, `/settle`, `/supported`, and optional Bazaar `/discovery/resources` catalog. [4][21] |\n| **Licence** | Apache-2.0 [22] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Transport carriers for the payment objects](#transport-carriers-for-the-payment-objects)\n3. [Per-network exact payloads and sibling schemes](#per-network-exact-payloads-and-sibling-schemes)\n4. [Counterparts and related standards](#counterparts-and-related-standards)\n5. [Adoption and ecosystem](#adoption-and-ecosystem)\n6. [See also](#see-also)\n7. [References](#references)\n\n---\n\n## Problem and scope\n\nRFC 9110 reserves the 402 (Payment Required) status code for future use and defines no challenge or settlement record. Without a specification for how to format and respond to that status, publishers lack adequate tools to convey a payment request. Clients that interpret a defined protocol transact without accounts, subscriptions, or API keys. Automated clients otherwise pre-register with every API, manage keys, and maintain separate billing relationships. [1][5][6] x402 standardizes those messages. Each object in `accepts` is a `PaymentRequirements` record naming `scheme`, `network`, `amount`, `asset`, and `payTo`. The client submits a `PaymentPayload` whose `accepted` field is the chosen requirement and whose `payload` carries the scheme-specific signature. `POST /verify` validates payment state without writing onchain state, and `POST /settle` durably commits it, whether a facilitator or the resource server hosts the endpoints. The schemes specified from the core document are `exact`, `upto`, `batch-settlement`, and `auth-capture`. [4] Transport-specific implementations, framework-specific integrations, client-side budget management, and session handling mechanisms sit outside the core specification. Finding a resource is a separate surface: `GET /discovery/resources` lists Bazaar entries, and the discovered resources may use any x402-supported transport. [4]\n\n### Default authorization payment flow\n\n```mermaid\nsequenceDiagram\n    participant Client\n    participant RS as Resource Server\n    participant Facilitator\n    Client->>RS: 1. Client Request\n    RS-->>Client: 2. Payment Required Response\n    Client->>RS: 3. Payment Authorization Request\n    Note over RS,Facilitator: authorization default: verify, then resource, then settle, then respond\n    RS->>Facilitator: POST /verify\n    Note over RS: Resource executes after read-only verify\n    RS->>Facilitator: POST /settle\n    RS-->>Client: 4. Settlement Response\n```\n\n*Default `authorization` flow. Read-only `/verify` runs before the resource executes, then `/settle`, then the settlement response. Because `/verify` is read-only and MUST NOT commit payment state or write onchain state, funds move only when `/settle` executes (`upfront` commits payment via `/settle` before the resource executes, and `escrow` runs an initial `/settle` before the resource executes). The resource server may host `/verify` and `/settle` itself. `upfront` and `escrow` are different orderings. [4]*\n\n### Canonical HTTP 402 PAYMENT-REQUIRED decoded payload (x402 v2)\n\n```json\n{\n  \"x402Version\": 2,\n  \"error\": \"PAYMENT-SIGNATURE header is required\",\n  \"resource\": {\n    \"url\": \"https://api.example.com/premium-data\",\n    \"description\": \"Access to premium market data\",\n    \"mimeType\": \"application/json\"\n  },\n  \"accepts\": [\n    {\n      \"scheme\": \"exact\",\n      \"network\": \"eip155:84532\",\n      \"amount\": \"10000\",\n      \"asset\": \"0x036CbD53842c5426634e7929541eC2318f3dCF7e\",\n      \"payTo\": \"0x209693Bc6afc0C5328bA36FaF03C514EF312287C\",\n      \"maxTimeoutSeconds\": 60,\n      \"extra\": {\n        \"name\": \"USDC\",\n        \"version\": \"2\"\n      }\n    }\n  ]\n}\n```\n\n*Canonical `PaymentRequired` JSON object decoded from the base64 `PAYMENT-REQUIRED` HTTP `402` response header in the x402 v2 HTTP transport specification (`eip155:84532`, `exact` scheme, `10000` atomic `USDC` units). [17]*\n\n---\n\n## Transport carriers for the payment objects\n\nTransports share the `PaymentRequired`, `PaymentPayload`, and `SettlementResponse` schemas. While HTTP v2 encodes the challenge in the `PAYMENT-REQUIRED` response header, MCP, A2A, and HTTP v1 carry the same payment objects in transport-specific fields. [4][17][19][20]\n\n- **MCP tool-result challenge:** The server returns `isError` true with `PaymentRequired` in `structuredContent` and in `content[0].text`, defined as `JSON.stringify` of `structuredContent`. Clients read `structuredContent` when `x402Version` and `accepts` are present, and parse `content[0].text` otherwise. Failed verification and failed settlement use that same `isError` result. [20]\n- **MCP payment and receipt keys:** The client sends `PaymentPayload` in `_meta[\"x402/payment\"]` on the tool call. The server returns `SettlementResponse` in `_meta[\"x402/payment-response\"]`. If settlement fails after the tool has executed, the server sets `isError` true and should not return the tool content, only the payment error. [20]\n- **A2A task metadata:** The agent sets `state` to `input-required` and `x402.payment.status` to `payment-required`, with `PaymentRequired` in `x402.payment.required`. The client sends `PaymentPayload` in `x402.payment.payload` on `message/send` with `taskId`. Receipts are `SettlementResponse` values in `x402.payment.receipts`. Status moves through `payment-submitted`, `payment-verified`, `payment-completed`, `payment-failed`, and `payment-rejected`. [19]\n- **HTTP v1 fields and browser exposure:** The v1 body is a `PaymentRequirementsResponse` with `maxAmountRequired` and a network such as `base-sepolia`. v2 headers are not CORS-safelisted: `fetch` needs `Access-Control-Expose-Headers` to read `PAYMENT-REQUIRED` and `PAYMENT-RESPONSE`, and a preflight that allows `PAYMENT-SIGNATURE`. HTTP 400 is malformed input, HTTP 402 a failed check, and HTTP 500 a server fault. [8][17]\n\n---\n\n## Per-network exact payloads and sibling schemes\n\nA payment `scheme` defines how to construct the `payload` inside `PaymentPayload`, while `extra.paymentFlow` selects verification and settlement ordering (`authorization` by default). EVM `exact` sets `assetTransferMethod` to `eip3009` or `permit2`, where the facilitator acts solely as transaction broadcaster without modifying amount or destination, and Solana `exact` verifies an SPL token transfer instruction. [4][23][24] x402 supports tokens on EVM, Solana, TON, Algorand (AVM), Stellar, Aptos, Hedera, Keeta, NEAR, Concordium, XRPL, Cardano, Sui, and Canton networks, identified with CAIP-2 (`namespace:reference`). Newer families include Keeta (`keeta:21378`), Concordium, XRPL (`xrpl:0`), and Cardano. [18]\n\n- **EVM eip3009 transferWithAuthorization:** `eip3009` is the default `assetTransferMethod` for tokens with `transferWithAuthorization`. The `payload` carries a 65-byte `signature` and an `authorization` of `from`, `to`, `value`, `validAfter`, `validBefore`, and a 32-byte random `nonce`. `extra.name` and `extra.version` are the EIP-712 domain. The authorization is one-time use. Because facilitator `/verify` is read-only and does not lock funds or consume the `nonce` on-chain before `/settle` executes, concurrent requests carrying the same signed authorization can pass `/verify` before settlement (a race condition risk between simulation and execution) unless the server serializes or deduplicates on the `nonce`, buffers the response body until settlement succeeds (as in reference middleware pull request `3074`), or uses the `upfront` payment flow for irreversible actions. [4][23][25][26]\n- **EVM permit2 and the proxy witness:** `permit2` covers an ERC-20 without EIP-3009. The client signs `permitWitnessTransferFrom` with `spender` equal to `x402ExactPermit2Proxy`, so the witness binds the receiver. A one-time `approve` of Permit2 is paid by the user, sponsored via `erc20ApprovalGasSponsoring`, or replaced by an EIP-2612 signature that `settleWithPermit` submits under `eip2612GasSponsoring`. [23]\n- **Solana TransferChecked, memo nonce, and CPI:** SVM `exact` uses `spl-token` or `token-2022` `TransferChecked` for at least `PaymentRequirements.amount` of `asset` to `payTo`, top-level or as an inner `CPI`. Exactly one transfer must match. `extra.splits` gives each leg its own transfer, and a split `amount` must match exactly. The Memo holds `extra.memo` or a random nonce of at least 16 bytes (>= 16 bytes, hex-encoded). `ComputeBudgetProgram` allows `SetComputeUnitLimit` and `SetComputeUnitPrice`. `feePayer` must not appear in any instruction `accounts` list and must not be an authority, source, or delegate. [24]\n- **Sibling schemes and protocol extensions:** `upto` treats `amount` as the maximum at verification and the settled amount later. `batch-settlement` submits a cryptographic commitment, grants access immediately, and returns the charge in `PAYMENT-RESPONSE`. Backing is `capital-backed` (escrow, a channel, or a delegated wallet) or `credit-backed` (a billing identity), with `auth-capture` also named. Unconfirmed settlement sets `errorReason` to `settlement_pending` with a non-empty `transaction`. Published extensions add `builder-code` (appending ERC-8021 Schema 2 builder codes to settlement transaction calldata for on-chain attribution) and `payment-identifier` (making x402 payments idempotent across client retries). Two further extensions define Sign-In-With-X (`sign-in-with-x`, implementing CAIP-122 wallet authentication so prior payers access resources without repurchase) and `offer-receipt` (adding cryptographic proof-of-interaction to x402 payment flows). [4][27][28][29][30][31]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **HTTP 402 Payment Required** | `RFC 9110` | Profiles classic standard | RFC 9110 reserves HTTP 402 without wire headers; x402 v2 binds it to `PAYMENT-REQUIRED`, `PAYMENT-SIGNATURE`, and `PAYMENT-RESPONSE`. [1][17] |\n| **EIP-712 Typed Data & EIP-3009 Transfer With Authorization** | `EIP-3009` | Profiles classic standard | x402's EVM `exact` scheme wraps an EIP-712 signature and EIP-3009 authorization parameters inside the transport `PaymentPayload`. [4][23] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Machine Payments Protocol (MPP)](/protocols/mpp/)** | Peer alternative | Co-authored by Stripe and Tempo for card and stablecoin machine payments alongside x402 in Stripe and AWS AgentCore. [3][32] |\n| **[L402](/protocols/l402/)** | Peer alternative | L402 challenges via `WWW-Authenticate: L402` with a macaroon and BOLT 11 Lightning invoice instead of CAIP-2 `PAYMENT-REQUIRED` headers. [2][17] |\n| **[Agent Payments Protocol (AP2)](/protocols/ap2/)** | Complements | AP2 verifies user-authorized agent mandates, while the `a2a-x402` extension settles on-chain cryptocurrency payments over A2A tasks. [33][34] |\n| **[Agentic Commerce Protocol](/protocols/agentic-commerce-protocol/)** | Peer alternative | OpenAI and Stripe's ACP handles conversational merchant checkout, whereas x402 settles per-request API payments inline over HTTP 402. [35][36] |\n| **[ERC-8004: Trustless Agents](/protocols/erc-8004/)** | Complements | Defines on-chain Identity, Reputation, and Validation registries for cross-organization agent discovery; TRM Labs' strict x402 payment model uses `ERC-8004` registration as one attribution heuristic alongside multi-seller payment patterns. [35][37] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (13 probed or cited examples across 4 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).*\n\n### Paywalled origins & API sellers\n\nFacilitator and resource-server rows reflect vendor-declared capabilities, documentation, and `/supported` or HTTP 402 endpoint probes rather than audited protocol conformance; see the USENIX Security '26 facilitator study and V12 audit in the ecosystem censuses and notes below. [26][38]\n\n| Actor | Role | Status | Observed challenge & accepted assets | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **CoinGecko** | Seller | Live (HTTP 402) · checked 2026-10-30 | HTTP 402 `PAYMENT-REQUIRED` (`x402Version` 2, `exact`) accepting USDC across Base, Solana, and Polygon. | [CoinGecko onchain pool search (HTTP 402)](https://pro-api.coingecko.com/api/v3/x402/onchain/search/pools?query=weth) [39] · [x402 networks and token support](https://docs.x402.org/core-concepts/network-and-token-support) [18] |\n| **CoinMarketCap** | Seller | Live (HTTP 402) · checked 2026-10-30 | HTTP 402 `PAYMENT-REQUIRED` (`x402Version` 2, `exact`, `eip3009` / `permit2-exact`) on `eip155:8453` (USDC) and `eip155:56` (4 stablecoins). | [CoinMarketCap quotes (HTTP 402)](https://pro-api.coinmarketcap.com/x402/v3/cryptocurrency/quotes/latest?id=1) [40] |\n| **Bitrefill** | Seller | Live (HTTP 402) · checked 2026-10-30 | HTTP 402 `PAYMENT-REQUIRED` (`x402Version` 2, `exact`) on `eip155:8453`, `eip155:42161`, `eip155:137`, Solana, and Lightning (`bolt11`, `upfront`). | [Bitrefill gift-card search (HTTP 402)](https://api.bitrefill.com/x402/gift-cards/search?q=amazon) [41] · [x402 networks and token support](https://docs.x402.org/core-concepts/network-and-token-support) [18] |\n\n### Buyer harnesses & cloud runtimes\n\n| Actor | Role | Status | Runtime integration & payment flow | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **AWS (Amazon Bedrock AgentCore payments)** | Agent platform / runtime | Supported · as of 2026-08-18 | GA runtime supporting x402 `exact` and `upto` with Coinbase/Privy USDC wallets and AgentCore Gateway MCP discovery. | [AWS ML Blog (18 AUG 2026)](https://aws.amazon.com/blogs/machine-learning/amazon-bedrock-agentcore-payments-is-now-generally-available-enabling-agents-to-transact-safely-and-autonomously-at-scale/) [32] |\n| **Cloudflare Agents SDK** | Agent SDK / runtime | Supported · as of 2026-08-04 | Supports x402 transactions in Cloudflare Agents SDK and MCP integrations, paired with Cloudflare Wallets for stablecoin payments. | [Cloudflare Blog (September 23, 2025)](https://blog.cloudflare.com/x402/) [5] · [Cloudflare Wallets (August 4, 2026)](https://blog.cloudflare.com/wallets/) [42] |\n| **Vercel x402-mcp** | SDK integration | Supported · as of 2025-09-12 | Integrates x402 payments into MCP servers and Vercel AI SDK alongside `x402-fetch` and `x402-next` middleware. | [Vercel Blog (12 Sep 2025)](https://vercel.com/blog/introducing-x402-mcp-open-protocol-payments-for-mcp-tools) [6] |\n\n### Payment facilitators, gateways & reference SDKs\n\n| Actor | Role | Status | Supported schemes, networks & surface | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Coinbase CDP Facilitator** | Payment rail (Originator) | Supported · as of 2026-10-30 | Hosted `exact`, `upto`, and `batch-settlement` facilitator on `eip155:8453`, `eip155:137`, `eip155:42161`, and Solana with OFAC/KYT screening. | [Coinbase CDP Facilitator](https://docs.cdp.coinbase.com/x402/seller/facilitator) [43] |\n| **Stripe** | Payment rail (TSC member) | Supported · as of 2026-10-30 | Accepts `exact` USDC on Base (`2026-05-27.preview` `transaction_verification`); requires Dashboard approval and US (ex-NY) or 30+ country eligibility. | [Stripe x402 docs](https://docs.stripe.com/payments/machine/x402) [3] · [Stripe Blog (March 12, 2026)](https://stripe.com/blog/10-lessons) [36] · [x402 Technical Steering Committee](https://github.com/x402-foundation/x402/blob/main/TSC.md) [11] |\n| **Cloudflare Monetization Gateway** | Platform | Experimental · as of 2026-09-30 | Closed-beta HTTP 402 edge paywall and AI Gateway (`Payment-Method: x402`) settling USDC on Base via Coinbase's Facilitator. | [Cloudflare Blog (September 30, 2026)](https://blog.cloudflare.com/monetization-gateway-beta/) [44] |\n| **x402 Go SDK** | Reference SDK | Supported · as of 2026-11-04 | Reference `go/v2` module implementing EVM (`exact`, `upto`, `batch-settlement`, `auth-capture`) and SVM (`exact`, `upto`, `batch-settlement`, `paymentchannels`) packages. | [pkg.go.dev x402 go/v2 (v2.30.0, Nov 4, 2026)](https://pkg.go.dev/github.com/x402-foundation/x402/go/v2) [45] |\n| **Google Cloud (a2a-x402)** | Protocol extension | Supported · as of 2025-09-16 | Carries x402 payloads over A2A JSON-RPC tasks via `x402.payment.required` and `x402.payment.payload` metadata in Python and TypeScript. | [Google Cloud Blog (September 16, 2025)](https://cloud.google.com/blog/products/ai-machine-learning/announcing-agents-to-payments-ap2-protocol) [33] · [a2a-x402 GitHub](https://github.com/google-agentic-commerce/a2a-x402) [34] · [x402 A2A transport](https://github.com/x402-foundation/x402/blob/main/specs/transports-v2/a2a.md) [19] |\n\n### Ecosystem explorers and directories\n\n| Actor | Role | Status | Index scope | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **x402scan** | Ecosystem explorer | Listed · checked 2026-11-06 | Explorer of x402 servers, volumes, and facilitator configuration. | [x402scan repository](https://github.com/Merit-Systems/x402scan) [46] |\n| **stablecoin.com x402 ecosystem** | Ecosystem directory | Listed · checked 2026-11-06 | Directory of facilitators, payment schemes, and settlement chains. | [stablecoin.com x402 ecosystem](https://stablecoin.com/402/ecosystem) [47] |\n\n### Ecosystem censuses\n\n- **TRM Labs, Measuring AI Agent Payments Onchain** (*as of 2026-09-09*): TRM Labs measured roughly USD 52.7 million across 198.9 million settlement transactions mediated by known x402 facilitators across Base, Solana, and Polygon since May 2025, with USD 52.47 million of USD 52.68 million (99.6%) settled in USDC; across USD 25.62 million of anomaly-screened commerce, 0.6% to 7.5% matched strict-to-permissive autonomous agent criteria. [35]\n- **Chainalysis, Inside x402's Path to Meaningful Adoption** (*as of 2026-06-03*): Chainalysis reported that x402 transactions on Base crossed 100 million cumulative transactions over approximately three quarters through Q1 2026, with transactions of $1 or more representing 95% of total volume transferred (up from 49% in early 2025). [48]\n- **USENIX Security '26 (Wang et al., EPFL, Zhejiang University & Independent Researcher)** (*as of 2026-08*): Evaluated 15 major x402 facilitators collectively used by over 60,000 sellers and 360,000 buyers; the study formalized eight security rules for facilitator authorization correctness and execution safety and derived four attack vectors from rule violations—Free Shopping, Asset Theft, Service Denial, and Gas Abuse—across all evaluated facilitators, followed by responsible disclosure and vendor mitigations (including changes by Coinbase), alongside an empirical measurement of over 119M Base and Solana transactions. [26]\n- **Visa & Artemis (FinanceTracked, AI Agent Payments)** (*as of 2026-04-21*): A joint Visa and Artemis report (published July 16, 2026, with data through April 21, 2026) adjusted x402 organic volume to about `$15 million` across `109.6 million` transactions, roughly `422,000` buyers, and about `5,300` sellers after filtering wash and test activity. [49]\n- **V12 Security Audit & PR #3074 Settlement Buffering** (*as of 2026-10-22*): In a post published on Oct 22, 2026, V12 documented 25 vulnerabilities across x402 implementations (spanning payment bypass, session takeover, and token theft), after reporting 3 critical and 13 high severity findings to the x402 team on August 12, 2026 (with the 3 critical vulnerabilities fixed by August 20th); reference middleware merged pull request 3074 on Sep 4, 2026 (`PaymentFilter`) to buffer downstream HTTP response bodies until facilitator settlement succeeds. [25][50]\n- **Third-party live-knock index** (*as of 2026-11-06*): Lists 731 curated x402 services knocked before listing (including 348 in APIs & Services and 479 carrying a dated knock), noting that a knock represents a single HTTP response rather than an end-to-end delivery test. [51]\n\n---\n\n## See also\n\n- **[s402](/protocols/s402/)** *(Deprecated → x402; formerly a Sui profile/extension of x402)* — An HTTP 402 payment protocol for agents on Sui that carried x402 v2's `PaymentRequired` envelope in `payment-required` with Sui-specific fields in `extensions.s402` and added `prepaid`, `stream`, `escrow`, and `unlock` schemes; `s402` was retired in September 2026, directing new work to `x402`. [52][53]\n- **Peer alternatives:** [Agent Commerce Kit (ACK)](/protocols/agent-commerce-kit/), [Agentic Mobile Protocol (AMP)](/protocols/amp-ant/), [Agora (agent marketplace protocol)](/protocols/agora-commerce-protocol/), [ERC-8183: Agentic Commerce](/protocols/erc-8183/), [KYAPay Token](/protocols/kyapay-token/), [Trusted Agent Protocol (TAP)](/protocols/tap/)\n- **Complements:** [Cloudflare Pay Per Crawl](/protocols/cloudflare-pay-per-crawl/), [Agent-Initiated Payment Gating](/protocols/agentic-payments-gating-model/), [agents.txt](/protocols/agents-txt/), [auth.md](/protocols/auth-md/), [Coral Protocol (CoralOS)](/protocols/coral-protocol/), [ERC-8444: Agentic Resource Discovery (ARD) Onchain](/protocols/erc-8444/), [VCAP: Verified Commerce for Agent Protocols](/protocols/vcap/), [x401: HTTP Proof Requirement Protocol](/protocols/x401/)\n- **Category:** [Pay protocols](/category/pay/)\n\n---\n\n## References\n\n1. R. Fielding, M. Nottingham, and J. Reschke (eds.), *RFC 9110: HTTP Semantics* (June 2022) — <https://www.rfc-editor.org/rfc/rfc9110.html>\n2. Lightning Labs, *L402 Protocol Specification* (fetched 2026-10-30) — <https://docs.lightning.engineering/the-lightning-network/l402/protocol-specification>\n3. Stripe, *x402* (fetched 2026-10-30) — <https://docs.stripe.com/payments/machine/x402>\n4. x402 Foundation, *x402 Protocol Specification* (v2.0 dated 2025-12-9) — <https://github.com/x402-foundation/x402/blob/main/specs/x402-specification-v2.md>\n5. Will Allen, Cam Whiteside, Rohin Lohe, and Steve James, Cloudflare, *Launching the x402 Foundation with Coinbase, and support for x402 transactions* (September 23, 2025) — <https://blog.cloudflare.com/x402/>\n6. Ethan Niser, Vercel, *Introducing x402-mcp: Open protocol payments for MCP tools* (12 Sep 2025) — <https://vercel.com/blog/introducing-x402-mcp-open-protocol-payments-for-mcp-tools>\n7. Erik Reppel, Nemil Dalal, and Dan Kim, Coinbase, *Introducing x402: a new standard for internet-native payments* (May 6, 2025) — <https://www.coinbase.com/developer-platform/discover/launches/x402>\n8. x402 Foundation, *HTTP transport for x402 v1* (fetched 2026-10-30) — <https://github.com/x402-foundation/x402/blob/main/specs/transports-v1/http.md>\n9. Erik Reppel, Carson Roscoe, and Josh Nickerson, *Introducing x402 V2: Evolving the Standard for Internet-native Payments* (published December 11, 2025; updated June 24th, 2026) — <https://x402.org/x402-v2-launch/>\n10. Linux Foundation, *Linux Foundation is Launching the x402 Foundation and Welcoming the Contribution of the x402 Protocol* (April 2, 2026) — <https://www.linuxfoundation.org/press/linux-foundation-is-launching-the-x402-foundation-and-welcoming-the-contribution-of-the-x402-protocol>\n11. x402 Foundation, *Technical Steering Committee* (fetched 2026-10-30) — <https://github.com/x402-foundation/x402/blob/main/TSC.md>\n12. Linux Foundation, *Linux Foundation Announces Operational Launch of x402 Foundation to Standardize Internet-Native Payments for AI Agents and Applications* (July 14, 2026) — <https://www.linuxfoundation.org/press/linux-foundation-announces-operational-launch-of-x402-foundation-to-standardize-internet-native-payments-for-ai-agents-and-applications>\n13. Linux Foundation, *Linux Foundation Appoints Michael Hursta as Executive Director of the x402 Foundation* (Oct. 1, 2026) — <https://x402.org/linux-foundation-appoints-michael-hursta-as-executive-director-of-the-x402-foundation/>\n14. x402 Foundation, *x402* (fetched 2026-10-30) — <https://x402.org/>\n15. x402 Foundation, *x402 Protocol Specification* (Protocol Version: 1) — <https://github.com/x402-foundation/x402/blob/main/specs/x402-specification-v1.md>\n16. x402 Foundation, *Commit history for specs/x402-specification-v2.md* (2026-10-26) — <https://github.com/x402-foundation/x402/commits/HEAD/specs/x402-specification-v2.md>\n17. x402 Foundation, *HTTP transport for x402 v2* (fetched 2026-10-30) — <https://github.com/x402-foundation/x402/blob/main/specs/transports-v2/http.md>\n18. x402 Foundation, *Networks and Token Support* (fetched 2026-10-30) — <https://docs.x402.org/core-concepts/network-and-token-support>\n19. x402 Foundation, *Transport: A2A (Agent-to-Agent Protocol)* (fetched 2026-10-30) — <https://github.com/x402-foundation/x402/blob/main/specs/transports-v2/a2a.md>\n20. x402 Foundation, *Transport: MCP (Model Context Protocol)* (fetched 2026-11-05) — <https://raw.githubusercontent.com/x402-foundation/x402/main/specs/transports-v2/mcp.md>\n21. x402 Foundation, *Bazaar (Discovery Layer)* (fetched 2026-10-30) — <https://docs.x402.org/extensions/bazaar>\n22. x402 Foundation, *x402* (Apache-2.0; fetched 2026-10-30) — <https://github.com/x402-foundation/x402>\n23. x402 Foundation, *Exact Scheme Specification for EVM (EIP-3009 and Permit2)* (2026) — <https://github.com/x402-foundation/x402/blob/main/specs/schemes/exact/scheme_exact_evm.md>\n24. x402 Foundation, *Exact Scheme Specification for Solana SVM (SPL TransferChecked)* (2026) — <https://github.com/x402-foundation/x402/blob/main/specs/schemes/exact/scheme_exact_svm.md>\n25. x402 Foundation, *Pull Request #3074: Buffer response body until settlement succeeds in PaymentFilter* (2026-09-04) — <https://github.com/x402-foundation/x402/pull/3074>\n26. Qinying Wang (EPFL), Yong Yang (Zhejiang University), Yuan Chen (Independent Researcher), Shouling Ji (Zhejiang University), and Mathias Payer (EPFL), *When HTTP 402 Meets the Blockchain: Risks on Emerging x402 Payments (USENIX Security '26)* (August 12–14, 2026) — <https://www.usenix.org/system/files/usenixsecurity26-wang-qinying.pdf>\n27. x402 Foundation, *Batch-Settlement Scheme Specification* (2026-05) — <https://github.com/x402-foundation/x402/blob/main/specs/schemes/batch-settlement/scheme_batch_settlement.md>\n28. x402 Foundation, *Builder Code (ERC-8021)* (fetched 2026-11-11) — <https://docs.x402.org/extensions/builder-code>\n29. x402 Foundation, *Payment-Identifier (Idempotency)* (fetched 2026-11-11) — <https://docs.x402.org/extensions/payment-identifier>\n30. x402 Foundation, *Sign-In-With-X (SIWX)* (fetched 2026-11-11) — <https://docs.x402.org/extensions/sign-in-with-x>\n31. x402 Foundation, *Signed Offers and Receipts* (fetched 2026-11-11) — <https://docs.x402.org/extensions/offer-receipt>\n32. Chethan Shriyan and Madhu Samhitha Vangara, AWS, *Amazon Bedrock AgentCore payments is now generally available* (18 AUG 2026) — <https://aws.amazon.com/blogs/machine-learning/amazon-bedrock-agentcore-payments-is-now-generally-available-enabling-agents-to-transact-safely-and-autonomously-at-scale/>\n33. Stavan Parikh and Rao Surapaneni, Google Cloud, *Announcing Agent Payments Protocol (AP2)* (September 16, 2025) — <https://cloud.google.com/blog/products/ai-machine-learning/announcing-agents-to-payments-ap2-protocol>\n34. google-agentic-commerce/a2a-x402, *A2A x402 Extension* (fetched 2026-10-30) — <https://github.com/google-agentic-commerce/a2a-x402>\n35. Noah Hodge, TRM Labs, *Who's Actually Paying? Measuring AI Agent Payments Onchain* (September 9, 2026) — <https://www.trmlabs.com/trm-tech-blog/whos-actually-paying-measuring-ai-agent-payments-onchain>\n36. Roshan Sadanani, Stripe, *10 things we learned building for the first generation of agentic commerce* (March 12, 2026) — <https://stripe.com/blog/10-lessons>\n37. Ethereum Improvement Proposals, *ERC-8004: Trustless Agents* (2025-08-13) — <https://eips.ethereum.org/EIPS/eip-8004>\n38. x402 Foundation, *Facilitators* (fetched 2026-10-30) — <https://docs.x402.org/dev-tools/facilitators>\n39. CoinGecko, *Onchain DEX pool search* (HTTP 402; fetched 2026-10-30) — <https://pro-api.coingecko.com/api/v3/x402/onchain/search/pools?query=weth>\n40. CoinMarketCap, *Cryptocurrency quotes latest* (HTTP 402; fetched 2026-10-30) — <https://pro-api.coinmarketcap.com/x402/v3/cryptocurrency/quotes/latest?id=1>\n41. Bitrefill, *Gift-card search* (HTTP 402; fetched 2026-10-30) — <https://api.bitrefill.com/x402/gift-cards/search?q=amazon>\n42. Cloudflare, *Announcing Cloudflare Wallets: The programmable wallet for the agentic Internet* (August 4, 2026) — <https://blog.cloudflare.com/wallets/>\n43. Coinbase Developer Platform, *CDP Facilitator* (fetched 2026-10-30) — <https://docs.cdp.coinbase.com/x402/seller/facilitator>\n44. Cloudflare, *Monetization Gateway beta: charge AI agents for consumption with HTTP 402* (September 30, 2026) — <https://blog.cloudflare.com/monetization-gateway-beta/>\n45. Go Packages, *github.com/x402-foundation/x402/go/v2* (v2.30.0, published Nov 4, 2026) — <https://pkg.go.dev/github.com/x402-foundation/x402/go/v2>\n46. Merit Systems, *x402scan* (fetched 2026-11-06) — <https://github.com/Merit-Systems/x402scan>\n47. Stablecoin.com, *x402 ecosystem directory* (fetched 2026-11-06) — <https://stablecoin.com/402/ecosystem>\n48. Chainalysis Team, *Agentic Payments Cross the Threshold: Inside x402's Path to Meaningful Adoption* (June 3, 2026) — <https://www.chainalysis.com/blog/x402-agentic-payments-adoption/>\n49. Adewale Amure, FinanceTracked (citing Visa & Artemis), *AI Agent Payments: Where Does the Real Usage Lie?* (published 2026-09-18; citing Visa & Artemis report published July 16, 2026, data through 2026-04-21) — <https://financetracked.com/ai-agent-payments>\n50. V12 Security, *25 Vulnerabilities in the x402 Protocol: Inside Three Critical Findings* (2026-10-22) — <https://v12.sh/blog/x402>\n51. 24K Labs, *The Gold-402 Index* (fetched 2026-11-06) — <https://24klabs.ai/wall>\n52. s402, *s402 Wire Format Specification (retired September 2026)* (2026-09) — <https://s402-protocol.org/specification>\n53. s402, *s402-protocol/core — AGENTS.md* (2026-09-04) — <https://github.com/s402-protocol/core/blob/main/AGENTS.md>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "L402",
   "adoption": {
    "level": "observed",
    "by": "Lightning Labs (Lightning Loop & Aperture), Lightning Enable, Alby (l402.space), Lightning Faucet, Tierion (boltwall), Lightning Labs (lnget, L402sdk, LangChainBitcoin), Alby (getAlby/cli), Lightning Enable (lightning-enable-mcp), and 2 other verified implementations",
    "probe_run": null
   },
   "aliases": [
    "LSAT"
   ],
   "analog": "HTTP 402 plus a bearer credential (like an API key you buy per-use)",
   "collisions": [],
   "discovery": {
    "mechanism": "HTTP 402 response carrying a WWW-Authenticate challenge",
    "path": "No fixed path: a resource signals L402 per request by answering HTTP 402 with an L402 WWW-Authenticate challenge"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://raw.githubusercontent.com/lightninglabs/L402/master/protocol-specification.md",
     "claim": "Lightning Labs, *L402 Protocol Specification*, fetched 2026-10-30",
     "date": null,
     "quote": "The L402 protocol was formerly known as LSAT. / WWW-Authenticate: L402 macaroon=\"<base64>\", invoice=\"<bolt11>\" / When a server requires payment for a resource, it MUST respond with HTTP 402 and include a WWW-Authenticate header / L402 combines the HTTP 402 Payment Required status code with Lightning Network invoice payments to create a challenge-response protocol for paid API access. / This document specifies the L402 authentication scheme for HTTP and gRPC. / the client pays the invoice to obtain a preimage, then presents the credential and preimage together as proof of payment. / When a server requires payment for a resource, it MUST respond with HTTP 402 and include a WWW-Authenticate header of the form: / invoice (REQUIRED): A BOLT 11 payment request. / Authorization: L402 <base64(macaroon)>:<hex(preimage)> / Servers SHOULD send both LSAT and L402 scheme names in WWW-Authenticate challenge headers. / The LSAT header SHOULD appear first for compatibility with older client implementations. / Clients and servers MUST accept both LSAT and L402 in Authorization headers. / it MUST respond with HTTP 402 and include a WWW-Authenticate header / The scheme name is \"L402\" (case-insensitive). / L402 combines the HTTP 402 Payment Required status code with Lightning Network invoice payments / invoice (REQUIRED): A BOLT 11 payment request. The client MUST pay this invoice to obtain the preimage / The credential is a macaroon (an HMAC-chain bearer token) that cryptographically commits to the invoice's payment hash. / The L402 scheme is registered under the HTTP Authentication Framework specified in RFC 7235. / L402 Protocol Specification / Officially, the HTTP specification marks 402 as \"reserved for future use\", but this document assumes the future has arrived. / This binding enables stateless verification: the server checks H == sha256(preimage) against the hash embedded in the macaroon, with no database lookup required. / The 402 status code is used exclusively for the initial payment challenge. / Once a client presents a credential (valid or not), the server MUST respond with 401 if verification fails, not 402. / This distinction lets clients differentiate \"you need to pay\" from \"your credential is broken.\" / The macaroon MUST commit to the payment hash H of the invoice P in its identifier / The SHA-256 hash H of the preimage, embedded in both the Lightning invoice and the macaroon identifier. / The 32-byte value r such that sha256(r) equals the payment hash of the Lightning invoice. / The macaroon is base64-encoded; the preimage is hex-encoded. / verify macaroon, check H == sha256(r) / gRPC is transmitted over HTTP/2 but uses special trailing headers for protocol-specific information. / The gRPC specification requires a status code of 200 in all responses. / The server MUST reply with HTTP 200 OK (not 402). / Grpc-Message: missing L402 / Grpc-Status: 402 Example: text HTTP/2 200 OK / After validating the invoice, the client MUST pay the invoice over the Lightning Network to obtain the payment preimage r. / The client MUST construct an Authorization header per Section 5.2: / The client MUST re-issue the original HTTP request with the Authorization header attached. / Possession of the preimage proves the invoice was paid. / Caveat. A restriction appended to a macaroon's HMAC chain. / Caveats can encode service access, capabilities, expiration, volume limits, and other constraints. / Each successive caveat can only _narrow_ the macaroon's authority, never widen it. / Expiry date encoded as a caveat / Credential present but macaroon invalid or tampered | 401 | Unauthorized / Credential present but preimage does not match payment hash | 401 | Unauthorized / If a client provides a macaroon or preimage containing control characters, the server MUST treat it as an invalid L402 and respond with 401. / containing an authentication credential and a Lightning invoice / Lightning Network invoice payments",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://raw.githubusercontent.com/lightninglabs/L402/master/README.md",
     "claim": "Lightning Labs, *L402: Lightning HTTP 402 Protocol*, fetched 2026-10-30",
     "date": null,
     "quote": "Developed by Lightning Labs / No accounts, no passwords. / Users pay a Lightning invoice and receive a cryptographic credential. / No email, no sign-up form, no personal data collected. / Instead of choosing between free tiers and monthly subscriptions, users pay for exactly what they use. / boltwall: Node.js middleware-based authentication using L402 / lsat-js: JavaScript utility library for working with L402 credentials",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://github.com/x402-foundation/x402/blob/main/specs/x402-specification-v2.md",
     "claim": "x402 Foundation, *x402 Protocol Specification*, protocol version 2; fetched 2026-10-30",
     "date": null,
     "quote": "x402 is an open payment standard that enables clients to pay for external resources. / the base64-encoded PAYMENT-REQUIRED response header / PAYMENT-SIGNATURE header is required",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://www.linuxfoundation.org/press/linux-foundation-announces-operational-launch-of-x402-foundation-to-standardize-internet-native-payments-for-ai-agents-and-applications",
     "claim": "Linux Foundation, *Linux Foundation Announces Operational Launch of x402 Foundation to Standardize Internet-Native Payments for AI Agents and Applications*, July 14, 2026",
     "date": null,
     "quote": "x402 was started at Coinbase",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://mpp.dev/overview.md",
     "claim": "Tempo and Stripe, *What is MPP?*, fetched 2026-10-30",
     "date": null,
     "quote": "The Machine Payments Protocol (MPP) is an open protocol co-authored by Tempo and Stripe.",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://datatracker.ietf.org/doc/html/draft-httpauth-payment-01",
     "claim": "B. Ryan, J. Moxey, and T. Meagher (Tempo Labs); J. Weinstein and S. Kaliski (Stripe), *The \"Payment\" HTTP Authentication Scheme (draft-httpauth-payment-01 HTML)*, draft-httpauth-payment-01, September 2026",
     "date": null,
     "quote": "A WWW-Authenticate header with scheme \"Payment\" indicating the payment requirements for accessing a resource. / 402 indicates a payment barrier (initial challenge or retry needed) / 401 is reserved for authentication failures unrelated to payment / 403 indicates the payment succeeded but access is denied by policy / Servers MUST return 402 with a WWW-Authenticate: Payment header when payment is required or when a payment credential fails validation",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://www.rfc-editor.org/rfc/rfc9110.html",
     "claim": "R. Fielding, M. Nottingham, and J. Reschke (eds.), *RFC 9110: HTTP Semantics*, June 2022",
     "date": null,
     "quote": "The 402 (Payment Required) status code is reserved for future use. / A server that receives valid credentials that are not adequate to gain access ought to respond with the 403 (Forbidden) status code / The \"WWW-Authenticate\" response header field indicates the authentication scheme(s) and parameters applicable to the target resource.",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://lightning.engineering/posts/2020-03-30-lsat/",
     "claim": "Olaoluwa Osuntokun, Lightning Labs, *L402: Authentication and Payments for the Lightning-Native Web*, March 30, 2020",
     "date": null,
     "quote": "Today we're excited to announce the release of our draft of a specification for Lightning Service Authentication Tokens (L402). / Olaoluwa Osuntokun March 30, 2020",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://github.com/lightninglabs/L402",
     "claim": "Lightning Labs, *lightninglabs/L402 repository*, created 2020-02-07; fetched 2026-10-30",
     "date": null,
     "quote": "\"full_name\": \"lightninglabs/L402\" / \"created_at\": \"2020-02-07T20:53:31Z\" / \"license\": null",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://raw.githubusercontent.com/Roasbeef/blips/697ae354c205f1aacc450e72067c92a7f2467321/blip-0026.md",
     "claim": "Olaoluwa Osuntokun, Oliver Gugger, and Wilmer Paulino, *bLIP-0026: L402: The Lightning HTTP 402 Protocol*, created 2023-06-06",
     "date": null,
     "quote": "bLIP: 26 Title: L402: The Lightning HTTP 402 Protocol Status: Active / Status: Active Author: Olaoluwa Osuntokun <[email redacted]> Oliver Gugger <[email redacted]> Wilmer Paulino <[email redacted]> Created: 2023-06-06 / A valid response header MUST take the form of: WWW-Authenticate: L402 version=\"0\", token=\"T\", invoice=\"P\" / The L402 protocol is token-format agnostic: any authentication token that can commit to a payment hash may be used. / Author: Olaoluwa Osuntokun <[email redacted]> Oliver Gugger <[email redacted]> Wilmer Paulino <[email redacted]> / Created: 2023-06-06 / Status: Active / The current version is \"0\". / WWW-Authenticate: L402 version=\"0\", token=\"T\", invoice=\"P\" / Title: L402: The Lightning HTTP 402 Protocol / bLIP: 26 / License: CC0 / The server MUST reply with a challenge using the 200 OK status code. / Grpc-Message: payment required / Grpc-Status: 13 # Internal / Caveats of a version 0 macaroon are represented as key-value pairs encoded as a string where the key and value are separated by a single = character. / The caveat key is services, while the value consists of a comma-separated list of target services. / If multiple services caveats exist, then verification should ensure each occurrence of the caveat restricts more access than the previous. / In the case of an unknown caveat, its evaluation must be skipped by the authorizer as the macaroon holder can further attenuate the macaroon for other applications. / a macaroon holder is able to further attenuate a macaroon if they wish to share it with a third party under more restrictive permissions. / Servers SHOULD accept macaroon= in addition to token= when parsing client requests and WWW-Authenticate headers from upstream proxies.",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://github.com/lightning/blips/issues/26",
     "claim": "Lightning Specification (BOLTs), *Comments on lightning/blips pull request 26*, fetched 2026-10-30",
     "date": null,
     "quote": "\"created_at\": \"2026-03-11T23:30:58Z\", \"updated_at\": \"2026-03-11T23:30:58Z\", \"body\": \"So we've recently updated our L402 github page. We plan on continuing development of the protocol there. / \"login\": \"Roasbeef\" … \"created_at\": \"2026-03-11T23:30:58Z\" … We plan on continuing development of the protocol there.",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://github.com/lightninglabs/L402/commits",
     "claim": "Lightning Labs, *lightninglabs/L402 commits*, fetched 2026-10-30",
     "date": null,
     "quote": "\"date\": \"2026-03-20T18:38:52Z\" … \"message\": \"docs: revert BLIP-0026 header changes, remove legacy files / \"name\": \"Olaoluwa Osuntokun\", \"email\": \"[email redacted]\", \"date\": \"2026-03-20T18:38:52Z\" / docs: revert BLIP-0026 header changes, remove legacy files / Identifier structure: version (2 bytes), payment_hash (32 bytes), token_id (32 bytes), all big-endian, 66 bytes total for v0. / payment check (sha256(preimage) == payment_hash) / how each caveat extends the chain via sig_i = HMAC(sig_{i-1}, caveat_id_i), and why the resulting structure is both tamper-proof and append-only. / Caveat format and standard types: preimage, services (name:tier), capabilities, constraints (volume, timeout). / \"date\": \"2020-02-17T13:23:46Z\" … \"message\": \"Add link to third-party caveat issue\"",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://github.com/lightning/blips/pull/26",
     "claim": "Roasbeef, *blip-0026: L402 - Lightning HTTP 402 Protocol (lightning/blips pull request 26)*, opened 2023-06-07; fetched 2026-10-30",
     "date": null,
     "quote": "\"state\": \"open\" … \"title\": \"blip-0026: L402 - Lightning HTTP 402 Protocol \" … \"login\": \"Roasbeef\" … \"created_at\": \"2023-06-07T02:38:15Z\" … \"merged_at\": null / \"title\": \"blip-0026: L402 - Lightning HTTP 402 Protocol \" / \"state\": \"open\" / \"merged_at\": null",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://docs.lightning.engineering/lightning-network-tools/aperture",
     "claim": "Lightning Labs, *Aperture | Builder's Guide*, fetched 2026-10-30",
     "date": null,
     "quote": "Aperture is currently used in production in Lightning Loop and Pool. / Aperture is an implementation of L402s as a reverse HTTP proxy. / obtains a Macaroon and sends it together with a Lightning invoice and the HTTP status code 402 Payment Required. / Aperture implements both the L402 as well as the MPP specifications.",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://www.iana.org/assignments/http-authschemes/authschemes.csv",
     "claim": "IANA, *Hypertext Transfer Protocol (HTTP) Authentication Scheme Registry*, last updated 2025-02-18; last-modified 2026-10-13",
     "date": null,
     "quote": "Last Updated 2025-02-18 / Basic,[RFC 7617], Bearer,[RFC 6750], Concealed,[RFC 9729], Digest,[RFC 7616], DPoP,\"[RFC 9449, Section 7.1]\", GNAP,\"[RFC 9635, Section 7.2]\", HOBA,\"[RFC 7486, Section 3]\",\"The HOBA scheme can be used with either HTTP servers or proxies. When used in response to a 407 Proxy Authentication Required indication, the appropriate proxy authentication header fields are used instead, as with any other HTTP authentication scheme.\" Mutual,[RFC 8120], Negotiate,\"[RFC 4559, Section 3]\",This authentication scheme violates both HTTP semantics (being connection-oriented) and syntax (use of syntax incompatible with the WWW-Authenticate and Authorization header field syntax). OAuth,\"[RFC 5849, Section 3.5.1]\", PrivateToken,\"[RFC 9577, Section 2]\", SCRAM-SHA-1,[RFC 7804], SCRAM-SHA-256,[RFC 7804], vapid,\"[RFC 8292, Section 3]\"",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://github.com/lightninglabs/aperture",
     "claim": "Lightning Labs, *Aperture*, checked 2026-11-06",
     "date": null,
     "quote": "\"name\": \"MIT License\", \"spdx_id\": \"MIT\" / is enabled with `--authenticator.enablempp`. It supports two intents.",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://raw.githubusercontent.com/Tierion/lsat-js/master/README.md",
     "claim": "Tierion, *LSAT-JS*, fetched 2026-10-30",
     "date": null,
     "quote": "Adding new first party caveats / condition: 'expiration', value: / addFirstPartyCaveat method available on the Lsat object. / lsat-js is a suite of tools for working with LSATs in Nodejs and Typescript. / after the invoice is paid, you can add the preimage",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://github.com/lightninglabs/L402/pull/16",
     "claim": "Liongrass, *Edit documentation to reflect naming changes (lightninglabs/L402 pull request 16)*, merged 2023-04-20",
     "date": null,
     "quote": "The LSAT protocol shall henceforth be known as the L402 protocol. / \"merged_at\": \"2023-04-20T22:57:13Z\"",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://github.com/lightninglabs/aperture/releases/tag/v0.5.0",
     "claim": "Lightning Labs, *Aperture v0.5.0*, published 2026-03-25",
     "date": null,
     "quote": "\"tag_name\": \"v0.5.0\" / \"published_at\": \"2026-03-25T20:08:06Z\" / merging WWW-Authenticate headers so a single 402 can advertise LSAT, L402, and Payment challenges simultaneously / merging `WWW-Authenticate` headers so a single 402 can advertise `LSAT`, `L402`, and `Payment` challenges simultaneously",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28",
     "claim": "Model Context Protocol, *Specification*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "The protocol uses JSON-RPC 2.0 messages to establish communication between: / Servers : Services that provide context and capabilities",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/what-is-pay-per-crawl/",
     "claim": "Cloudflare, *What is Pay Per Crawl?*, fetched 2026-10-31",
     "date": null,
     "quote": "or receive an HTTP 402 Payment Required response with pricing. / For pay per crawl, Cloudflare is the merchant of record.",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://raw.githubusercontent.com/lightninglabs/loop/master/swap_server_client.go",
     "claim": "Lightning Labs, *lightninglabs/loop swap_server_client.go*, fetched 2026-10-30",
     "date": null,
     "quote": "while delegating token acquisition and stream authentication to Aperture's",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://www.lightningenable.com/llms.txt",
     "claim": "Lightning Enable (Refined Element), *Lightning Enable llms.txt*, last-modified 2026-10-30",
     "date": null,
     "quote": "Lightning Enable wraps existing HTTP APIs with a small middleware so agents get a 402 Payment Required with a Lightning invoice / a Lightning invoice and a macaroon / Agent retries the same request with Authorization: L402 / 402 Payment Required with WWW-Authenticate: L402 macaroon=\"...\", invoice=\"...\". / merchants (and agents acting as sellers) create and verify challenges directly / Payouts land in the merchant's own Lightning wallet over Nostr Wallet Connect, or in a Strike or OpenNode account.",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://api.lightningenable.com/api/l402/content/nwc-wallet-integration.md",
     "claim": "Lightning Enable, *NWC wallet integration payment response*, fetched 2026-10-30",
     "date": null,
     "quote": "\"error\":\"Payment Required\" / \"amount_sats\":3919 / lnbc39190n1 / Include in request: Authorization: L402",
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://l402.space/docs",
     "claim": "L402 Space, *Universal 402 Gateway - API docs*, fetched 2026-10-30",
     "date": null,
     "quote": "You pay the gateway over YOUR rail; the gateway pays the upstream API on your behalf over whichever rail THAT API speaks (x402/USDC, MPP Tempo, MPP Lightning, or L402) / Challenge: `WWW-Authenticate: L402 token=\"<macaroon>\", invoice=\"<bolt11>\"`.",
     "ref": 25
    },
    {
     "label": "[26]",
     "url": "https://l402.space/l402/ping",
     "claim": "L402 Space, *l402.space paid ping response*, fetched 2026-10-30",
     "date": null,
     "quote": "{\"error\":\"Payment required\",\"amountSats\":1",
     "ref": 26
    },
    {
     "label": "[27]",
     "url": "https://getalby.com/blog/402-charted-tracking-the-rise-of-l402-x402-and-mpp",
     "claim": "Alby, *402, Charted - Tracking the rise of L402, x402, and MPP*, published Aug 12, 2026",
     "date": null,
     "quote": "Published Aug 12, 2026 / l402.space is a universal 402 gateway between your agent's wallet and everyone else's rail. / L402 grew from 94 endpoints in February to a peak of 1,209 in May - roughly 13× - then held flat through June, ending the month at 1,201. / L402 providers remained relatively stable (36 to 29), consistent with the limited growth in L402 endpoints.",
     "ref": 27
    },
    {
     "label": "[28]",
     "url": "https://lightningfaucet.com/llms.txt",
     "claim": "Lightning Faucet, *Lightning Faucet llms.txt*, last-modified 2026-10-27",
     "date": null,
     "quote": "25+ pay-per-call endpoints, 5 to 500 sats",
     "ref": 28
    },
    {
     "label": "[29]",
     "url": "https://lightningfaucet.com/api/l402/onchain_fee",
     "claim": "Lightning Faucet, *Onchain fee payment response*, fetched 2026-10-30",
     "date": null,
     "quote": "\"message\": \"Payment required\" / \"price_sats\": 50 / lnbc500n1 / \"token\": / \"macaroon\": / Retry this request with header: Authorization: L402 <token>:<preimage>",
     "ref": 29
    },
    {
     "label": "[30]",
     "url": "https://raw.githubusercontent.com/Tierion/boltwall/master/README.md",
     "claim": "Tierion, *Boltwall*, fetched 2026-10-30",
     "date": null,
     "quote": "Bitcoin Lightning paywall and authentication using LSATs. / Your project must also use Expressjs",
     "ref": 30
    },
    {
     "label": "[31]",
     "url": "https://github.com/Tierion/boltwall",
     "claim": "Tierion, *Tierion/boltwall repository*, pushed 2023-04-26; fetched 2026-10-30",
     "date": null,
     "quote": "\"pushed_at\": \"2023-04-26T19:00:52Z\"",
     "ref": 31
    },
    {
     "label": "[32]",
     "url": "https://lightning.engineering/posts/2026-02-11-ln-agent-tools/",
     "claim": "Michael Levin, Lightning Labs, *The Agents Are Here and They Want to Transact: Powering the AI Economy with Lightning*, February 11, 2026",
     "date": null,
     "quote": "Michael Levin February 11, 2026 / Today's launch also includes lnget, an L402-aware command-line HTTP client",
     "ref": 32
    },
    {
     "label": "[33]",
     "url": "https://raw.githubusercontent.com/lightninglabs/lnget/main/README.md",
     "claim": "Lightning Labs, *lnget*, fetched 2026-10-30",
     "date": null,
     "quote": "If server returns 402 with WWW-Authenticate: L402 macaroon=\"...\", invoice=\"...\" / Verifies the invoice amount is within --max-cost / Pays the invoice via the configured Lightning backend / Stores the token (macaroon + preimage) for the domain",
     "ref": 33
    },
    {
     "label": "[34]",
     "url": "https://github.com/lightninglabs/L402sdk",
     "claim": "Lightning Labs, *L402sdk: L402 client SDK for AI agent frameworks*, fetched 2026-10-30",
     "date": null,
     "quote": "L402 client SDK for AI agent frameworks / Built in Rust with TypeScript and Python bindings.",
     "ref": 34
    },
    {
     "label": "[35]",
     "url": "https://github.com/lightninglabs/LangChainBitcoin",
     "claim": "Lightning Labs, *lightninglabs/LangChainBitcoin repository*, pushed 2024-07-03; fetched 2026-10-30",
     "date": null,
     "quote": "\"pushed_at\": \"2024-07-03T00:51:20Z\" / AI tools for giving LangChain agents access to Bitcoin and the ability to traverse L402 APIs",
     "ref": 35
    },
    {
     "label": "[36]",
     "url": "https://github.com/getAlby/cli/releases/tag/v0.4.0",
     "claim": "Alby, *getAlby/cli v0.4.0*, published 2026-04-07",
     "date": null,
     "quote": "\"tag_name\": \"v0.4.0\" / \"published_at\": \"2026-04-07T14:56:14Z\" / Add unified command to fetch L402, X402 & MPP resource",
     "ref": 36
    },
    {
     "label": "[37]",
     "url": "https://raw.githubusercontent.com/refined-element/lightning-enable-mcp/main/README.md",
     "claim": "Lightning Enable (Refined Element), *Lightning Enable MCP Server*, fetched 2026-10-30",
     "date": null,
     "quote": "Lightning Enable MCP Server / Automatically pay L402 challenges for seamless API access / needs a wallet that returns the payment preimage",
     "ref": 37
    },
    {
     "label": "[38]",
     "url": "https://raw.githubusercontent.com/lightningfaucet/lightning-wallet-mcp/main/README.md",
     "claim": "Lightning Faucet, *Lightning Wallet MCP*, fetched 2026-10-30",
     "date": null,
     "quote": "Your agent can pay for L402 and X402 APIs, pay any Lightning invoice or Lightning address, receive payments, and hold sats, all through natural language tool calls. / Pay any BOLT11 invoice; returns the preimage / Custodial, so there is nothing to run",
     "ref": 38
    },
    {
     "label": "[39]",
     "url": "https://github.com/Tierion/lsat-js",
     "claim": "Tierion, *Tierion/lsat-js repository*, pushed 2023-08-09; fetched 2026-10-30",
     "date": null,
     "quote": "\"pushed_at\": \"2023-08-09T14:13:30Z\"",
     "ref": 39
    },
    {
     "label": "[40]",
     "url": "https://docs.lightning.engineering/the-lightning-network/l402/implementations-and-links",
     "claim": "Lightning Engineering, *Implementations and Links*, checked 2026-11-06",
     "date": null,
     "quote": "Satring, a repository for L402 endpoints / WoT Scoring, an L402-gated way to discover Nostr networks of trust / Lightning Pool / Lightning Loop / L402 Playground",
     "ref": 40
    },
    {
     "label": "[41]",
     "url": "https://satsforbots.com/directory/",
     "claim": "Sats for Bots, *Directory*, checked 2026-11-06",
     "date": null,
     "quote": "Lightning Labs' 7 open-source agent skills + MCP server to run a node, pay L402 APIs and host paid endpoints / L402 reverse proxy that gates any API behind Lightning payments, now with metered (pay-per-token) pricing and Wavelength-backed invoices / MCP server connecting an agent to a Lightning wallet via Nostr Wallet Connect / Decentralized AI inference router: access top AI models with Bitcoin Lightning payments, permissionless and private / PayPerQ: pay-per-prompt access to hundreds of AI models with no subscription or registration; featured as a Bitcoin Lightning app / Open-source, non-custodial Lightning wallet for autonomous agents: runs its own node, pays L402 APIs via CLI or a 25-tool MCP server / Lightning Labs' Rust L402 client SDK with TypeScript, Python, Vercel AI SDK and LangChain bindings and spend budgets / Python SDK for agent-to-agent and agent-to-merchant Lightning payments over your own LND, with an L402 client and Nostr coordination / Official MCP server for Spark wallets: agents create and pay Lightning invoices. / Second's MCP server that gives agents a Bark (barkd) wallet: pay Lightning invoices and L402 APIs",
     "ref": 41
    },
    {
     "label": "[42]",
     "url": "https://www.l402.directory/",
     "claim": "L402.directory, *Discover Lightning-Gated APIs*, checked 2026-11-06",
     "date": null,
     "quote": "Browse services: GET /api/services — returns all active L402 service listings with endpoints, pricing, and health status. / Protocol docs: GET /api — returns the full L402 protocol specification, endpoint reference, and agent quickstart guide. / ### First Channel Suggestion FREE / ### Unlock a Video 10 sats",
     "ref": 42
    }
   ],
   "form": "http-header",
   "governance": "Lightning Labs (single vendor). The text lives in the lightninglabs/L402 repository on GitHub; on 2026-03-11 (UTC) Osuntokun wrote of that repository: \"We plan on continuing development of the protocol there.\". It was also submitted to the Lightning bLIP repository as PR #26, opened 2023-06-07 (UTC) and still open and unmerged on 2026-10-29. GitHub lists no licence for the L402 repository; the bLIP text is CC0",
   "group": "HTTP 402 family",
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against lightninglabs/L402 README.md and protocol-specification.md on GitHub"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "l402",
   "implementation": "shipping",
   "last_verified": "2026-11-06",
   "name": "L402",
   "native_status": "In production use: Lightning Labs said in 2020 that Aperture was \"used in production today by Lightning Loop\". The bLIP header reads \"bLIP: 26 Title: L402: The Lightning HTTP 402 Protocol Status: Active\" although the PR is not merged",
   "origin": {
    "org": "Lightning Labs. The specification repository was created on 2020-02-07 (UTC); Olaoluwa Osuntokun announced the draft specification and the Aperture proxy on 2020-03-30. The bLIP version lists Olaoluwa Osuntokun, Oliver Gugger and Wilmer Paulino as authors",
    "date": null
   },
   "part_of": null,
   "parties": [
    "agent-site",
    "agent-payment"
   ],
   "phase": "living",
   "probe": {
    "method": "GET",
    "on_absent": "A 200, 401, or a 402 without an L402-scheme WWW-Authenticate header means this path does not issue L402 challenges; the credential scheme is registered under RFC 7235 so a server could in principle offer it alongside other schemes on the same 401/402 responses.",
    "parse": "HTTP 402 status with a WWW-Authenticate: L402 macaroon=\"...\", invoice=\"...\" header",
    "path": "{origin}/{paid-path}"
   },
   "question": "How can a client pay for, and then authenticate to, a metered API resource over the Lightning Network with no accounts or database-backed sessions?",
   "scope": "payments",
   "spec_url": "https://raw.githubusercontent.com/lightninglabs/L402/master/protocol-specification.md",
   "step": "pay",
   "summary_md": "**L402** (formerly Lightning Service Authentication Tokens, or `LSAT`) is an HTTP and gRPC challenge-response authentication scheme originated by Lightning Labs that combines HTTP 402 (`Payment Required`) responses with Lightning Network invoices for paid API access. First committed to `lightninglabs/L402` on 2020-02-07 and announced by Olaoluwa Osuntokun on 2020-03-30, it pairs a bearer credential with a Lightning invoice so a client can pay for a preimage and present both as proof of payment. When a server requires payment for a resource, the master specification requires an HTTP 402 response carrying `WWW-Authenticate: L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"`, and the client retries the request with `Authorization: L402 <base64(macaroon)>:<hex(preimage)>`. For backward compatibility after the rename from `LSAT`, servers should send both `LSAT` and `L402` challenges and both parties must accept either scheme in `Authorization`. A token-agnostic revision (`bLIP-0026`, created 2023-06-06) uses `WWW-Authenticate: L402 version=\"0\", token=\"T\", invoice=\"P\"`, while active development continues in `lightninglabs/L402` (which reverted the `bLIP-0026` header changes on 2026-03-20).",
   "track": "single-vendor",
   "version": {
    "label": "No numbered release",
    "date": null
   },
   "watch": [
    {
     "type": "github",
     "repo": "lightninglabs/L402",
     "mode": "release"
    }
   ],
   "use_cases": [
    "accept-agent-payments",
    "delegate-user-authority",
    "expose-tools-to-agents"
   ],
   "audience": [
    "agent-builder",
    "platform",
    "site-owner"
   ],
   "pairs_with": [
    "x402",
    "mpp",
    "mcp",
    "cloudflare-pay-per-crawl"
   ],
   "prerequisites": [],
   "hatnote_md": "This page is about L402 (formerly LSAT), the Lightning Labs HTTP 402 authentication and payment scheme. It is not [x402](https://agenticweb.wiki/protocols/x402/), the open payment protocol originated at Coinbase; not [MPP](https://agenticweb.wiki/protocols/mpp/), the Machine Payments Protocol co-authored by Tempo and Stripe using the Payment authentication scheme; and not the bare HTTP 402 status code in RFC 9110 (see [HTTP 402 Payment Required](https://agenticweb.wiki/terms/http-402-payment-required/)).",
   "tier": "flagship",
   "lifecycle_status": "active",
   "wire_archetype": "payments_onchain",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-06",
   "v05_hatnote_html_md": "This page is about L402 (formerly LSAT), the Lightning Labs HTTP 402 authentication and payment scheme. It is not [x402](/protocols/x402/), the open payment protocol originated at Coinbase; not [MPP](/protocols/mpp/), the Machine Payments Protocol co-authored by Tempo and Stripe using the Payment authentication scheme; and not the bare HTTP 402 status code in RFC 9110 (see [HTTP 402 Payment Required](/terms/http-402-payment-required/)). [1][2][3][4][5][6][7]",
   "v05_elevator_pitch_md": "L402 is a payment-gated authentication protocol for HTTP and gRPC APIs that lets autonomous agents and software clients pay per request over the Bitcoin Lightning Network without registering user accounts or storing static API keys. Instead of gating endpoints behind interactive sign-up flows and monthly subscriptions, a server returns an HTTP 402 `WWW-Authenticate` challenge containing a `macaroon` token and a BOLT 11 `invoice`, and the caller unlocks access by returning `Authorization: L402 <base64(macaroon)>:<hex(preimage)>` once paid. [1][2]",
   "v05_lead_md": "**L402** (formerly Lightning Service Authentication Tokens, or `LSAT`) is an HTTP and gRPC challenge-response authentication scheme originated by Lightning Labs that combines HTTP 402 (`Payment Required`) responses with Lightning Network invoices for paid API access. [1][2][8] First committed to `lightninglabs/L402` on 2020-02-07 and announced by Olaoluwa Osuntokun on 2020-03-30, it pairs a bearer credential with a Lightning invoice so a client can pay for a preimage and present both as proof of payment. [1][8][9] When a server requires payment for a resource, the master specification requires an HTTP 402 response carrying `WWW-Authenticate: L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"`, and the client retries the request with `Authorization: L402 <base64(macaroon)>:<hex(preimage)>`. [1] For backward compatibility after the rename from `LSAT`, servers should send both `LSAT` and `L402` challenges and both parties must accept either scheme in `Authorization`. [1] A token-agnostic revision (`bLIP-0026`, created 2023-06-06) uses `WWW-Authenticate: L402 version=\"0\", token=\"T\", invoice=\"P\"`, while active development continues in `lightninglabs/L402` (which reverted the `bLIP-0026` header changes on 2026-03-20). [9][10][11][12]",
   "v05_identity_sentence_md": "**L402** (formerly Lightning Service Authentication Tokens, or `LSAT`) is an HTTP and gRPC challenge-response authentication scheme originated by Lightning Labs that combines HTTP 402 (`Payment Required`) responses with Lightning Network invoices for paid API access. [1][2][8] First committed to `lightninglabs/L402` on 2020-02-07 and announced by Olaoluwa Osuntokun on 2020-03-30, it pairs a bearer credential with a Lightning invoice so a client can pay for a preimage and present both as proof of payment. [1][8][9]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Pay](/category/pay/) (`pay`)"
    },
    {
     "label": "Form",
     "value_md": "HTTP header (`http-header`)"
    },
    {
     "label": "Originated by",
     "value_md": "Lightning Labs (repo 2020-02-07). Osuntokun, Gugger, and Paulino authored bLIP-0026 (2023-06-06). [2][8][9][10]"
    },
    {
     "label": "Governed by",
     "value_md": "Lightning Labs repo lightninglabs/L402. Roasbeef plans to continue development there. [2][9][11][13]"
    },
    {
     "label": "Track",
     "value_md": "Lightning Labs text in lightninglabs/L402. bLIP-0026 is an open lightning/blips pull request. [2][9][13]"
    },
    {
     "label": "Status",
     "value_md": "bLIP-0026 is Status: Active. Aperture is in production in Loop and Pool. PR 26 is unmerged. [10][13][14]"
    },
    {
     "label": "Version",
     "value_md": "Master branch omits a version parameter; pinned bLIP-0026 snapshot uses version=\"0\". [1][10][12]"
    },
    {
     "label": "Headers",
     "value_md": "Master challenge is macaroon plus invoice; bLIP snapshot uses version, token, and invoice. Authorization carries the preimage. [1][10]"
    },
    {
     "label": "Schemes",
     "value_md": "L402 is case-insensitive (formerly LSAT). Servers SHOULD send both; clients and servers MUST accept both. [1]"
    },
    {
     "label": "Networks",
     "value_md": "Lightning Network. The invoice is a BOLT 11 payment request paid for the preimage. [1]"
    },
    {
     "label": "Transports",
     "value_md": "HTTP and gRPC. [1]"
    },
    {
     "label": "Token format",
     "value_md": "Master credential is an HMAC-chain macaroon. The bLIP-0026 snapshot is token-format agnostic. [1][10]"
    },
    {
     "label": "IANA registration",
     "value_md": "Spec claims RFC 7235 registration. The 2025-02-18 IANA scheme list does not name L402. [1][15]"
    },
    {
     "label": "Specification",
     "value_md": "Master [L402 spec](https://raw.githubusercontent.com/lightninglabs/L402/master/protocol-specification.md) and pinned [bLIP-0026](https://raw.githubusercontent.com/Roasbeef/blips/697ae354c205f1aacc450e72067c92a7f2467321/blip-0026.md) snapshot. [1][10]"
    },
    {
     "label": "Found at",
     "value_md": "No fixed path. A paid resource MUST return HTTP 402 with WWW-Authenticate. [1]"
    },
    {
     "label": "Licence",
     "value_md": "lightninglabs/L402 `license` is null. bLIP-0026 is CC0. Aperture is MIT. [9][10][16]"
    }
   ],
   "v05_problem_md": "Although the HTTP specification historically marked status code 402 as reserved for future use, conventional API monetization forces callers through user accounts, passwords, sign-up forms, and monthly subscriptions rather than accountless, per-request payments where users pay only for what they use. [1][2] The credential is a macaroon (an HMAC-chain bearer token) that cryptographically commits to the invoice's payment hash. This binding enables stateless verification: the server checks `H == sha256(preimage)` against the hash embedded in the macaroon, with no database lookup required. [1] The 402 status code is used exclusively for the initial payment challenge. Once a client presents a credential (valid or not), the server MUST respond with 401 if verification fails, not 402. This distinction lets clients differentiate \"you need to pay\" from \"your credential is broken.\" [1]",
   "v05_mechanism_delta_md": "The credential is a macaroon (an HMAC-chain bearer token) that cryptographically commits to the invoice's payment hash. This binding enables stateless verification: the server checks `H == sha256(preimage)` against the hash embedded in the macaroon, with no database lookup required. [1]",
   "v05_scope_boundary_md": "The 402 status code is used exclusively for the initial payment challenge. Once a client presents a credential (valid or not), the server MUST respond with 401 if verification fails, not 402. This distinction lets clients differentiate \"you need to pay\" from \"your credential is broken.\" [1]",
   "v05_fuzzy_additions": [
    {
     "id": "http-402-challenge-macaroon-identifier-and-preimage-authorization",
     "heading": "HTTP 402 challenge, macaroon identifier, and preimage authorization",
     "body_md": "The `lightninglabs/L402` master specification and `bLIP-0026` define two parameter variants for the `L402` `WWW-Authenticate` challenge header: master binds a base64 macaroon and BOLT 11 `invoice` via `WWW-Authenticate: L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"`, whereas `bLIP-0026` specifies a versioned, token-agnostic format (`WWW-Authenticate: L402 version=\"0\", token=\"T\", invoice=\"P\"` with current version `\"0\"`). [1][10]",
     "bullets": [
      {
       "label": "66-byte identifier",
       "text_md": "In the macaroon specification for v0, the binary macaroon identifier is 66 bytes in big-endian layout: a 2-byte version, a 32-byte `payment_hash` (`H`, the SHA-256 hash of preimage `r`), and a 32-byte `token_id`. The master specification requires the macaroon identifier to commit to the payment hash `H` of the BOLT 11 invoice `P`. [1][12]"
      },
      {
       "label": "Authorization and preimage check",
       "text_md": "To authenticate a paid request, the client sends `Authorization: L402 <base64(macaroon)>:<hex(preimage)>` combining the base64-encoded macaroon and hex-encoded preimage. The server verifies the macaroon's HMAC chain and checks that the SHA-256 digest of the preimage matches the embedded payment hash (`sha256(preimage) == payment_hash`, written `H == sha256(r)` in the overview). [1][12]"
      },
      {
       "label": "gRPC 200 OK trailer",
       "text_md": "Because the gRPC wire protocol over HTTP/2 requires an HTTP `200 OK` status code on all responses, a gRPC server issuing an L402 challenge replies with HTTP `200 OK` and attaches the challenge in trailing headers (`Grpc-Message: missing L402` and `Grpc-Status: 402` on master, or `Grpc-Status: 13` in `bLIP-0026`). [1][10]"
      },
      {
       "label": "Client payment and retry",
       "text_md": "After validating the invoice, the client MUST pay it over the Lightning Network to obtain preimage r, MUST construct the `Authorization` header, and MUST re-issue the original request with that header attached. Possession of the preimage proves the invoice was paid. [1]"
      }
     ]
    },
    {
     "id": "first-party-caveats-lsat-rename-compatibility-and-aperture-dual-scheme-proxy",
     "heading": "First-party caveats, LSAT rename compatibility, and Aperture dual-scheme proxy",
     "body_md": "A caveat is an append-only restriction added to a macaroon's HMAC chain that encodes service access, capabilities, volume limits, or expiration, where each successive caveat can only narrow the token's authority. Client libraries such as `lsat-js` append first-party caveats (including `expiration` conditions) using `addFirstPartyCaveat`. [1][17]",
     "bullets": [
      {
       "label": "HMAC chain and tier caveats",
       "text_md": "Each caveat extends the HMAC signature chain via `sig_i = HMAC(sig_{i-1}, caveat_id_i)`, producing a tamper-proof, append-only credential. Standard caveat types cover `services` (`name:tier`), capabilities, volume or timeout constraints, and expiry dates; in `bLIP-0026`, version 0 caveats are `=`-separated key-value strings where multiple `services` caveats must progressively narrow access. [1][10][12]"
      },
      {
       "label": "Macaroon attenuation and unknown caveats",
       "text_md": "A macaroon holder can attenuate a credential by appending more restrictive first-party caveats before sharing it with a third party, while third-party caveats have been tracked as an open issue since 2020-02-17. Under `bLIP-0026`, an authorizer must skip evaluation of any unknown caveat so holders can add downstream application-specific restrictions. [10][12]"
      },
      {
       "label": "LSAT scheme transition",
       "text_md": "Pull request #16 (merged 2023-04-20) formally renamed `LSAT` to `L402`. For compatibility with older clients, servers should emit the `LSAT` challenge header before `L402` in `WWW-Authenticate` responses, both parties must accept either scheme in `Authorization`, and `bLIP-0026` recommends accepting `macaroon=` alongside `token=` when parsing upstream proxy headers. [1][10][18]"
      },
      {
       "label": "401, 403, and Aperture v0.5.0",
       "text_md": "When a presented credential has a tampered macaroon, a mismatched preimage, or control characters, the server responds with HTTP 401 Unauthorized, whereas RFC 9110 and the IETF `Payment` scheme draft use HTTP 403 Forbidden when a valid credential is denied by policy. In Aperture `v0.5.0` (published 2026-03-25, with MPP enabled via `--authenticator.enablempp`), the proxy merges `WWW-Authenticate` headers so a single HTTP 402 response advertises `LSAT`, `L402`, and `Payment` challenges together. [1][6][7][16][19]"
      }
     ]
    }
   ],
   "v05_diagram": {
    "title": "Payment challenge",
    "heading": "Payment challenge",
    "mermaid": "sequenceDiagram\n    participant C as Client\n    participant S as Server\n    participant LN as Lightning Network\n\n    C->>S: GET /resource\n    S-->>C: 402 Payment Required<br/>WWW-Authenticate: L402 macaroon=\"M\", invoice=\"P\"\n    C->>LN: pay(P)\n    LN-->>C: preimage r\n    C->>S: GET /resource<br/>Authorization: L402 M:r\n    S->>S: verify macaroon, check H == sha256(r)\n    S-->>C: 200 OK + resource",
    "caption_md": "The client gets `402 Payment Required` with `WWW-Authenticate: L402`, pays the invoice, and retries with `Authorization: L402`. The server checks `H == sha256(r)`. [1]"
   },
   "v05_wire_artifact": {
    "title": "`HTTP 402` with `WWW-Authenticate: L402`",
    "heading": "`HTTP 402` with `WWW-Authenticate: L402`",
    "lang": "http",
    "code": "HTTP/1.1 402 Payment Required\nDate: Mon, 04 Feb 2014 16:50:53 GMT\nWWW-Authenticate: L402 macaroon=\"AGIAJEemVQUTEyNCR0exk7ek90Cg==\", invoice=\"lnbc1500n1pw5kjhmpp5fu6xhthlt2vucmzkx6c7wtlh2r625r30cyjsfqhu8rsx4xpz5lwqdpa2fjkzep6yptksct5yp5hxgrrv96hx6twvusycn3qv9jx7ur5d9hkugr5dusx6cqzpgxqr23s79ruapxc4j5uskt4htly2salw4drq979d7rcela9wz02elhypmdzmzlnxuknpgfyfm86pntt8vvkvffma5qc9n50h4mvqhngadqy3ngqjcym5a\"",
    "caption_md": "`HTTP/1.1 402 Payment Required` carries `WWW-Authenticate: L402` with `macaroon` and `invoice`. [1]"
   },
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "HTTP 402 Payment Required (RFC 9110 §15.5.3)",
      "spec_or_rfc": "RFC 9110 §15.5.3",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "RFC 9110 reserves 402 for future use. L402 uses it as the initial Lightning payment challenge. [1][7]"
     },
     {
      "name": "WWW-Authenticate (RFC 9110 §11.6.1)",
      "spec_or_rfc": "RFC 9110 §11.6.1",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "RFC 9110 defines WWW-Authenticate for the scheme and its parameters. L402 carries a macaroon and BOLT 11 invoice. [1][7][10]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "x402",
      "target_name": "x402",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "x402 sends PAYMENT-REQUIRED and requires PAYMENT-SIGNATURE. L402 uses WWW-Authenticate and Authorization with a macaroon. [1][3]"
     },
     {
      "target_id": "mpp",
      "target_name": "Machine Payments Protocol (MPP)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "MPP challenges with scheme Payment. L402's scheme is L402, and clients and servers MUST accept LSAT too. [1][5][6]"
     },
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "MCP uses JSON-RPC 2.0 among hosts, clients, and servers. L402 is a separate HTTP and gRPC auth scheme. [1][20]"
     },
     {
      "target_id": "cloudflare-pay-per-crawl",
      "target_name": "Cloudflare Pay Per Crawl",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "Pay Per Crawl returns HTTP 402 pricing with Cloudflare as merchant. L402 returns a macaroon and BOLT 11 invoice. [1][21]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (10 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).",
    "side_a": {
     "visible": true,
     "heading": "Sellers, reverse proxies & payment processors",
     "col4_header": "`WWW-Authenticate: L402` challenge, macaroon & Lightning invoice",
     "note_md": null,
     "rows": [
      {
       "actor": "Lightning Labs (Lightning Loop & Aperture)",
       "role": "Seller & reverse proxy (Originator)",
       "status": "Supported",
       "status_display": "Supported · as of 2026-03-25",
       "col4_md": "Aperture `v0.5.0` proxies L402 in Loop and Pool, merging LSAT and Payment on one 402.",
       "source_md": "[Aperture \\| Builder's Guide (fetched 2026-10-30)](https://docs.lightning.engineering/lightning-network-tools/aperture) [14] · [Aperture v0.5.0 (published 2026-03-25)](https://github.com/lightninglabs/aperture/releases/tag/v0.5.0) [19] · [lightninglabs/loop swap_server_client.go (fetched 2026-10-30)](https://raw.githubusercontent.com/lightninglabs/loop/master/swap_server_client.go) [22]"
      },
      {
       "actor": "Lightning Enable",
       "role": "Seller & payment processor",
       "status": "Live (HTTP 402)",
       "status_display": "Live (HTTP 402) · checked 2026-10-30",
       "col4_md": "Wraps APIs with a 402 macaroon invoice; probed `amount_sats` 3919.",
       "source_md": "[Lightning Enable llms.txt (fetched 2026-10-30)](https://www.lightningenable.com/llms.txt) [23] · [NWC wallet integration response (fetched 2026-10-30)](https://api.lightningenable.com/api/l402/content/nwc-wallet-integration.md) [24]"
      },
      {
       "actor": "Alby (l402.space)",
       "role": "Seller & cross-rail gateway",
       "status": "Live (HTTP 402)",
       "status_display": "Live (HTTP 402) · checked 2026-10-30",
       "col4_md": "Universal 402 gateway; `/l402/ping` returns `amountSats` 1.",
       "source_md": "[l402.space docs (fetched 2026-10-30)](https://l402.space/docs) [25] · [l402.space/l402/ping (fetched 2026-10-30)](https://l402.space/l402/ping) [26] · [Alby, 402, Charted (Aug 12, 2026)](https://getalby.com/blog/402-charted-tracking-the-rise-of-l402-x402-and-mpp) [27]"
      },
      {
       "actor": "Lightning Faucet",
       "role": "Seller",
       "status": "Live (HTTP 402)",
       "status_display": "Live (HTTP 402) · checked 2026-10-30",
       "col4_md": "Pay-per-call seller; `onchain_fee` probe is `price_sats` 50.",
       "source_md": "[lightningfaucet.com/llms.txt (fetched 2026-10-30)](https://lightningfaucet.com/llms.txt) [28] · [onchain fee response (fetched 2026-10-30)](https://lightningfaucet.com/api/l402/onchain_fee) [29]"
      },
      {
       "actor": "Tierion (boltwall)",
       "role": "Server middleware",
       "status": "Listed",
       "status_display": "Listed · as of 2023-04-26",
       "col4_md": "Express LSAT paywall middleware; repo pushed 2023-04-26.",
       "source_md": "[Tierion/boltwall README (fetched 2026-10-30)](https://raw.githubusercontent.com/Tierion/boltwall/master/README.md) [30] · [Tierion/boltwall repository (pushed 2023-04-26)](https://github.com/Tierion/boltwall) [31] · [L402 README (fetched 2026-10-30)](https://raw.githubusercontent.com/lightninglabs/L402/master/README.md) [2]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Buying agents, wallets & client SDKs",
     "col4_header": "Preimage proof, wallet backend & MCP/SDK surface",
     "note_md": null,
     "rows": [
      {
       "actor": "Lightning Labs (lnget, L402sdk, LangChainBitcoin)",
       "role": "Client CLI & SDKs (Originator)",
       "status": "Partial",
       "status_display": "Partial · as of 2026-02",
       "col4_md": "lnget handles HTTP 402; L402sdk and LangChainBitcoin are client libraries.",
       "source_md": "[Michael Levin, Lightning Labs (February 11, 2026)](https://lightning.engineering/posts/2026-02-11-ln-agent-tools/) [32] · [lnget README (fetched 2026-10-30)](https://raw.githubusercontent.com/lightninglabs/lnget/main/README.md) [33] · [lightninglabs/L402sdk (fetched 2026-10-30)](https://github.com/lightninglabs/L402sdk) [34] · [lightninglabs/LangChainBitcoin (pushed 2024-07-03)](https://github.com/lightninglabs/LangChainBitcoin) [35]"
      },
      {
       "actor": "Alby (getAlby/cli)",
       "role": "Wallet CLI",
       "status": "Supported",
       "status_display": "Supported · as of 2026-04-07",
       "col4_md": "`v0.4.0` (2026-04-07) fetches L402, X402, and MPP resources.",
       "source_md": "[getAlby/cli v0.4.0 (published 2026-04-07)](https://github.com/getAlby/cli/releases/tag/v0.4.0) [36]"
      },
      {
       "actor": "Lightning Enable (lightning-enable-mcp)",
       "role": "Client MCP server",
       "status": "Partial",
       "status_display": "Partial · as of 2026-10-30",
       "col4_md": "Main-branch MCP server pays L402 via Strike, NWC, or LND preimage.",
       "source_md": "[refined-element/lightning-enable-mcp README (fetched 2026-10-30)](https://raw.githubusercontent.com/refined-element/lightning-enable-mcp/main/README.md) [37]"
      },
      {
       "actor": "Lightning Faucet (lightning-wallet-mcp)",
       "role": "Custodial agent wallet",
       "status": "Partial",
       "status_display": "Partial · as of 2026-10-30",
       "col4_md": "Custodial main-branch wallet; `pay_invoice` returns a BOLT11 preimage.",
       "source_md": "[lightningfaucet/lightning-wallet-mcp README (fetched 2026-10-30)](https://raw.githubusercontent.com/lightningfaucet/lightning-wallet-mcp/main/README.md) [38]"
      },
      {
       "actor": "Tierion (lsat-js)",
       "role": "Client SDK",
       "status": "Listed",
       "status_display": "Listed · as of 2023-08-09",
       "col4_md": "JavaScript LSAT tools; last push 2023-08-09.",
       "source_md": "[Tierion/lsat-js README (fetched 2026-10-30)](https://raw.githubusercontent.com/Tierion/lsat-js/master/README.md) [17] · [Tierion/lsat-js repository (pushed 2023-08-09)](https://github.com/Tierion/lsat-js) [39] · [L402 README (fetched 2026-10-30)](https://raw.githubusercontent.com/lightninglabs/L402/master/README.md) [2]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [
     {
      "label": "Alby, 402, Charted (Aug 12, 2026)",
      "as_of": "2026-06",
      "value_md": "L402 grew from 94 endpoints in February to a peak of 1,209 in May, then held flat through June, ending the month at 1,201. [27]"
     },
     {
      "label": "Alby, 402, Charted (Aug 12, 2026)",
      "as_of": "2026-06",
      "value_md": "L402 providers in the same index remained relatively stable (36 to 29). [27]"
     },
     {
      "label": "lightningfaucet.com/llms.txt (fetched 2026-10-30)",
      "as_of": "2026-10-30",
      "value_md": "Lightning Faucet lists 25+ pay-per-call endpoints, priced from 5 to 500 sats. [28]"
     },
     {
      "label": "Lightning Engineering implementations and links",
      "as_of": "2026-11-06",
      "value_md": "The Lightning Engineering implementations page lists five projects using L402: Satring, WoT Scoring, Lightning Pool, Lightning Loop, and L402 Playground. [40]"
     },
     {
      "label": "Sats for Bots directory",
      "as_of": "2026-11-06",
      "value_md": "The Sats for Bots directory categorizes Lightning Agent Tools, Aperture, the L402 Protocol Spec, Alby MCP Server, Nostr Wallet Connect (NWC), Routstr, PPQ.ai, SaturnZap, L402sdk, Lightning Enable MCP, Lightning Wallet MCP, agent-bitcoin, Spark MCP, and bark-mcp. [41]"
     },
     {
      "label": "L402.directory",
      "as_of": "2026-11-06",
      "value_md": "L402.directory documents GET /api/services, which returns all active L402 service listings with endpoints, pricing, and health status, and GET /api for the protocol specification. The rendered directory names First Channel Suggestion and Unlock a Video. [42]"
     }
    ],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "s402",
     "target_name": "s402",
     "relation_label": "Peer alternative",
     "delta": "Retired in September 2026, s402's credential was a signed Sui transaction for schemes exact, upto, prepaid, stream, escrow, or unlock, whereas L402's credential is a macaroon and a BOLT 11 preimage in Authorization: L402.",
     "item_md": "**[s402](/protocols/s402/)** (Peer alternative) — Retired in September 2026, s402's credential was a signed Sui transaction for schemes exact, upto, prepaid, stream, escrow, or unlock, whereas L402's credential is a macaroon and a BOLT 11 preimage in Authorization: L402."
    },
    {
     "target_id": "agent-commerce-kit",
     "target_name": "Agent Commerce Kit (ACK)",
     "relation_label": "Peer alternative",
     "delta": "ACK-Pay places L402 among the 402-shaped flows that fit its payment pattern, while L402's credential is a macaroon and a BOLT 11 preimage and ACK-Pay's receipt is a W3C Verifiable Credential.",
     "item_md": "**[Agent Commerce Kit (ACK)](/protocols/agent-commerce-kit/)** (Peer alternative) — ACK-Pay places L402 among the 402-shaped flows that fit its payment pattern, while L402's credential is a macaroon and a BOLT 11 preimage and ACK-Pay's receipt is a W3C Verifiable Credential."
    },
    {
     "item_md": "**[Pay protocols](/category/pay/)** — Category index for `pay` standards."
    }
   ],
   "v05_compiled_md": "---\nid: l402\ntitle: \"L402\"\ntier: flagship\nlifecycle_status: active\ncategory: pay\nform: http-header\nwire_archetype: payments_onchain\nspec_url: https://raw.githubusercontent.com/lightninglabs/L402/master/protocol-specification.md\nlast_checked: 2026-11-06\n---\n\n# L402\n\n**Category:** [Pay](/category/pay/) (`pay`) · **Form:** HTTP header (`http-header`) · **Last checked:** 2026-11-06\n\n> *This page is about L402 (formerly LSAT), the Lightning Labs HTTP 402 authentication and payment scheme. It is not [x402](/protocols/x402/), the open payment protocol originated at Coinbase; not [MPP](/protocols/mpp/), the Machine Payments Protocol co-authored by Tempo and Stripe using the Payment authentication scheme; and not the bare HTTP 402 status code in RFC 9110 (see [HTTP 402 Payment Required](/terms/http-402-payment-required/)). [1][2][3][4][5][6][7]*\n\n> **In brief:** L402 is a payment-gated authentication protocol for HTTP and gRPC APIs that lets autonomous agents and software clients pay per request over the Bitcoin Lightning Network without registering user accounts or storing static API keys. Instead of gating endpoints behind interactive sign-up flows and monthly subscriptions, a server returns an HTTP 402 `WWW-Authenticate` challenge containing a `macaroon` token and a BOLT 11 `invoice`, and the caller unlocks access by returning `Authorization: L402 <base64(macaroon)>:<hex(preimage)>` once paid. [1][2]\n\n**L402** (formerly Lightning Service Authentication Tokens, or `LSAT`) is an HTTP and gRPC challenge-response authentication scheme originated by Lightning Labs that combines HTTP 402 (`Payment Required`) responses with Lightning Network invoices for paid API access. [1][2][8] First committed to `lightninglabs/L402` on 2020-02-07 and announced by Olaoluwa Osuntokun on 2020-03-30, it pairs a bearer credential with a Lightning invoice so a client can pay for a preimage and present both as proof of payment. [1][8][9] When a server requires payment for a resource, the master specification requires an HTTP 402 response carrying `WWW-Authenticate: L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"`, and the client retries the request with `Authorization: L402 <base64(macaroon)>:<hex(preimage)>`. [1] For backward compatibility after the rename from `LSAT`, servers should send both `LSAT` and `L402` challenges and both parties must accept either scheme in `Authorization`. [1] A token-agnostic revision (`bLIP-0026`, created 2023-06-06) uses `WWW-Authenticate: L402 version=\"0\", token=\"T\", invoice=\"P\"`, while active development continues in `lightninglabs/L402` (which reverted the `bLIP-0026` header changes on 2026-03-20). [9][10][11][12]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Pay](/category/pay/) (`pay`) |\n| **Form** | HTTP header (`http-header`) |\n| **Originated by** | Lightning Labs (repo 2020-02-07). Osuntokun, Gugger, and Paulino authored bLIP-0026 (2023-06-06). [2][8][9][10] |\n| **Governed by** | Lightning Labs repo lightninglabs/L402. Roasbeef plans to continue development there. [2][9][11][13] |\n| **Track** | Lightning Labs text in lightninglabs/L402. bLIP-0026 is an open lightning/blips pull request. [2][9][13] |\n| **Status** | bLIP-0026 is Status: Active. Aperture is in production in Loop and Pool. PR 26 is unmerged. [10][13][14] |\n| **Version** | Master branch omits a version parameter; pinned bLIP-0026 snapshot uses version=\"0\". [1][10][12] |\n| **Headers** | Master challenge is macaroon plus invoice; bLIP snapshot uses version, token, and invoice. Authorization carries the preimage. [1][10] |\n| **Schemes** | L402 is case-insensitive (formerly LSAT). Servers SHOULD send both; clients and servers MUST accept both. [1] |\n| **Networks** | Lightning Network. The invoice is a BOLT 11 payment request paid for the preimage. [1] |\n| **Transports** | HTTP and gRPC. [1] |\n| **Token format** | Master credential is an HMAC-chain macaroon. The bLIP-0026 snapshot is token-format agnostic. [1][10] |\n| **IANA registration** | Spec claims RFC 7235 registration. The 2025-02-18 IANA scheme list does not name L402. [1][15] |\n| **Specification** | Master [L402 spec](https://raw.githubusercontent.com/lightninglabs/L402/master/protocol-specification.md) and pinned [bLIP-0026](https://raw.githubusercontent.com/Roasbeef/blips/697ae354c205f1aacc450e72067c92a7f2467321/blip-0026.md) snapshot. [1][10] |\n| **Found at** | No fixed path. A paid resource MUST return HTTP 402 with WWW-Authenticate. [1] |\n| **Licence** | lightninglabs/L402 `license` is null. bLIP-0026 is CC0. Aperture is MIT. [9][10][16] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [HTTP 402 challenge, macaroon identifier, and preimage authorization](#http-402-challenge-macaroon-identifier-and-preimage-authorization)\n3. [First-party caveats, LSAT rename compatibility, and Aperture dual-scheme proxy](#first-party-caveats-lsat-rename-compatibility-and-aperture-dual-scheme-proxy)\n4. [Counterparts and related standards](#counterparts-and-related-standards)\n5. [Adoption and ecosystem](#adoption-and-ecosystem)\n6. [See also](#see-also)\n7. [References](#references)\n\n---\n\n## Problem and scope\n\nAlthough the HTTP specification historically marked status code 402 as reserved for future use, conventional API monetization forces callers through user accounts, passwords, sign-up forms, and monthly subscriptions rather than accountless, per-request payments where users pay only for what they use. [1][2] The credential is a macaroon (an HMAC-chain bearer token) that cryptographically commits to the invoice's payment hash. This binding enables stateless verification: the server checks `H == sha256(preimage)` against the hash embedded in the macaroon, with no database lookup required. [1] The 402 status code is used exclusively for the initial payment challenge. Once a client presents a credential (valid or not), the server MUST respond with 401 if verification fails, not 402. This distinction lets clients differentiate \"you need to pay\" from \"your credential is broken.\" [1]\n\n### Payment challenge\n\n```mermaid\nsequenceDiagram\n    participant C as Client\n    participant S as Server\n    participant LN as Lightning Network\n\n    C->>S: GET /resource\n    S-->>C: 402 Payment Required<br/>WWW-Authenticate: L402 macaroon=\"M\", invoice=\"P\"\n    C->>LN: pay(P)\n    LN-->>C: preimage r\n    C->>S: GET /resource<br/>Authorization: L402 M:r\n    S->>S: verify macaroon, check H == sha256(r)\n    S-->>C: 200 OK + resource\n```\n\n*The client gets `402 Payment Required` with `WWW-Authenticate: L402`, pays the invoice, and retries with `Authorization: L402`. The server checks `H == sha256(r)`. [1]*\n\n### `HTTP 402` with `WWW-Authenticate: L402`\n\n```http\nHTTP/1.1 402 Payment Required\nDate: Mon, 04 Feb 2014 16:50:53 GMT\nWWW-Authenticate: L402 macaroon=\"AGIAJEemVQUTEyNCR0exk7ek90Cg==\", invoice=\"lnbc1500n1pw5kjhmpp5fu6xhthlt2vucmzkx6c7wtlh2r625r30cyjsfqhu8rsx4xpz5lwqdpa2fjkzep6yptksct5yp5hxgrrv96hx6twvusycn3qv9jx7ur5d9hkugr5dusx6cqzpgxqr23s79ruapxc4j5uskt4htly2salw4drq979d7rcela9wz02elhypmdzmzlnxuknpgfyfm86pntt8vvkvffma5qc9n50h4mvqhngadqy3ngqjcym5a\"\n```\n\n*`HTTP/1.1 402 Payment Required` carries `WWW-Authenticate: L402` with `macaroon` and `invoice`. [1]*\n\n---\n\n## HTTP 402 challenge, macaroon identifier, and preimage authorization\n\nThe `lightninglabs/L402` master specification and `bLIP-0026` define two parameter variants for the `L402` `WWW-Authenticate` challenge header: master binds a base64 macaroon and BOLT 11 `invoice` via `WWW-Authenticate: L402 macaroon=\"<base64>\", invoice=\"<bolt11>\"`, whereas `bLIP-0026` specifies a versioned, token-agnostic format (`WWW-Authenticate: L402 version=\"0\", token=\"T\", invoice=\"P\"` with current version `\"0\"`). [1][10]\n\n- **66-byte identifier:** In the macaroon specification for v0, the binary macaroon identifier is 66 bytes in big-endian layout: a 2-byte version, a 32-byte `payment_hash` (`H`, the SHA-256 hash of preimage `r`), and a 32-byte `token_id`. The master specification requires the macaroon identifier to commit to the payment hash `H` of the BOLT 11 invoice `P`. [1][12]\n- **Authorization and preimage check:** To authenticate a paid request, the client sends `Authorization: L402 <base64(macaroon)>:<hex(preimage)>` combining the base64-encoded macaroon and hex-encoded preimage. The server verifies the macaroon's HMAC chain and checks that the SHA-256 digest of the preimage matches the embedded payment hash (`sha256(preimage) == payment_hash`, written `H == sha256(r)` in the overview). [1][12]\n- **gRPC 200 OK trailer:** Because the gRPC wire protocol over HTTP/2 requires an HTTP `200 OK` status code on all responses, a gRPC server issuing an L402 challenge replies with HTTP `200 OK` and attaches the challenge in trailing headers (`Grpc-Message: missing L402` and `Grpc-Status: 402` on master, or `Grpc-Status: 13` in `bLIP-0026`). [1][10]\n- **Client payment and retry:** After validating the invoice, the client MUST pay it over the Lightning Network to obtain preimage r, MUST construct the `Authorization` header, and MUST re-issue the original request with that header attached. Possession of the preimage proves the invoice was paid. [1]\n\n---\n\n## First-party caveats, LSAT rename compatibility, and Aperture dual-scheme proxy\n\nA caveat is an append-only restriction added to a macaroon's HMAC chain that encodes service access, capabilities, volume limits, or expiration, where each successive caveat can only narrow the token's authority. Client libraries such as `lsat-js` append first-party caveats (including `expiration` conditions) using `addFirstPartyCaveat`. [1][17]\n\n- **HMAC chain and tier caveats:** Each caveat extends the HMAC signature chain via `sig_i = HMAC(sig_{i-1}, caveat_id_i)`, producing a tamper-proof, append-only credential. Standard caveat types cover `services` (`name:tier`), capabilities, volume or timeout constraints, and expiry dates; in `bLIP-0026`, version 0 caveats are `=`-separated key-value strings where multiple `services` caveats must progressively narrow access. [1][10][12]\n- **Macaroon attenuation and unknown caveats:** A macaroon holder can attenuate a credential by appending more restrictive first-party caveats before sharing it with a third party, while third-party caveats have been tracked as an open issue since 2020-02-17. Under `bLIP-0026`, an authorizer must skip evaluation of any unknown caveat so holders can add downstream application-specific restrictions. [10][12]\n- **LSAT scheme transition:** Pull request #16 (merged 2023-04-20) formally renamed `LSAT` to `L402`. For compatibility with older clients, servers should emit the `LSAT` challenge header before `L402` in `WWW-Authenticate` responses, both parties must accept either scheme in `Authorization`, and `bLIP-0026` recommends accepting `macaroon=` alongside `token=` when parsing upstream proxy headers. [1][10][18]\n- **401, 403, and Aperture v0.5.0:** When a presented credential has a tampered macaroon, a mismatched preimage, or control characters, the server responds with HTTP 401 Unauthorized, whereas RFC 9110 and the IETF `Payment` scheme draft use HTTP 403 Forbidden when a valid credential is denied by policy. In Aperture `v0.5.0` (published 2026-03-25, with MPP enabled via `--authenticator.enablempp`), the proxy merges `WWW-Authenticate` headers so a single HTTP 402 response advertises `LSAT`, `L402`, and `Payment` challenges together. [1][6][7][16][19]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **HTTP 402 Payment Required (RFC 9110 §15.5.3)** | `RFC 9110 §15.5.3` | Profiles classic standard | RFC 9110 reserves 402 for future use. L402 uses it as the initial Lightning payment challenge. [1][7] |\n| **WWW-Authenticate (RFC 9110 §11.6.1)** | `RFC 9110 §11.6.1` | Profiles classic standard | RFC 9110 defines WWW-Authenticate for the scheme and its parameters. L402 carries a macaroon and BOLT 11 invoice. [1][7][10] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[x402](/protocols/x402/)** | Peer alternative | x402 sends PAYMENT-REQUIRED and requires PAYMENT-SIGNATURE. L402 uses WWW-Authenticate and Authorization with a macaroon. [1][3] |\n| **[Machine Payments Protocol (MPP)](/protocols/mpp/)** | Peer alternative | MPP challenges with scheme Payment. L402's scheme is L402, and clients and servers MUST accept LSAT too. [1][5][6] |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | MCP uses JSON-RPC 2.0 among hosts, clients, and servers. L402 is a separate HTTP and gRPC auth scheme. [1][20] |\n| **[Cloudflare Pay Per Crawl](/protocols/cloudflare-pay-per-crawl/)** | Peer alternative | Pay Per Crawl returns HTTP 402 pricing with Cloudflare as merchant. L402 returns a macaroon and BOLT 11 invoice. [1][21] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (10 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).*\n\n### Sellers, reverse proxies & payment processors\n\n| Actor | Role | Status | `WWW-Authenticate: L402` challenge, macaroon & Lightning invoice | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Lightning Labs (Lightning Loop & Aperture)** | Seller & reverse proxy (Originator) | Supported · as of 2026-03-25 | Aperture `v0.5.0` proxies L402 in Loop and Pool, merging LSAT and Payment on one 402. | [Aperture \\| Builder's Guide (fetched 2026-10-30)](https://docs.lightning.engineering/lightning-network-tools/aperture) [14] · [Aperture v0.5.0 (published 2026-03-25)](https://github.com/lightninglabs/aperture/releases/tag/v0.5.0) [19] · [lightninglabs/loop swap_server_client.go (fetched 2026-10-30)](https://raw.githubusercontent.com/lightninglabs/loop/master/swap_server_client.go) [22] |\n| **Lightning Enable** | Seller & payment processor | Live (HTTP 402) · checked 2026-10-30 | Wraps APIs with a 402 macaroon invoice; probed `amount_sats` 3919. | [Lightning Enable llms.txt (fetched 2026-10-30)](https://www.lightningenable.com/llms.txt) [23] · [NWC wallet integration response (fetched 2026-10-30)](https://api.lightningenable.com/api/l402/content/nwc-wallet-integration.md) [24] |\n| **Alby (l402.space)** | Seller & cross-rail gateway | Live (HTTP 402) · checked 2026-10-30 | Universal 402 gateway; `/l402/ping` returns `amountSats` 1. | [l402.space docs (fetched 2026-10-30)](https://l402.space/docs) [25] · [l402.space/l402/ping (fetched 2026-10-30)](https://l402.space/l402/ping) [26] · [Alby, 402, Charted (Aug 12, 2026)](https://getalby.com/blog/402-charted-tracking-the-rise-of-l402-x402-and-mpp) [27] |\n| **Lightning Faucet** | Seller | Live (HTTP 402) · checked 2026-10-30 | Pay-per-call seller; `onchain_fee` probe is `price_sats` 50. | [lightningfaucet.com/llms.txt (fetched 2026-10-30)](https://lightningfaucet.com/llms.txt) [28] · [onchain fee response (fetched 2026-10-30)](https://lightningfaucet.com/api/l402/onchain_fee) [29] |\n| **Tierion (boltwall)** | Server middleware | Listed · as of 2023-04-26 | Express LSAT paywall middleware; repo pushed 2023-04-26. | [Tierion/boltwall README (fetched 2026-10-30)](https://raw.githubusercontent.com/Tierion/boltwall/master/README.md) [30] · [Tierion/boltwall repository (pushed 2023-04-26)](https://github.com/Tierion/boltwall) [31] · [L402 README (fetched 2026-10-30)](https://raw.githubusercontent.com/lightninglabs/L402/master/README.md) [2] |\n\n### Buying agents, wallets & client SDKs\n\n| Actor | Role | Status | Preimage proof, wallet backend & MCP/SDK surface | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Lightning Labs (lnget, L402sdk, LangChainBitcoin)** | Client CLI & SDKs (Originator) | Partial · as of 2026-02 | lnget handles HTTP 402; L402sdk and LangChainBitcoin are client libraries. | [Michael Levin, Lightning Labs (February 11, 2026)](https://lightning.engineering/posts/2026-02-11-ln-agent-tools/) [32] · [lnget README (fetched 2026-10-30)](https://raw.githubusercontent.com/lightninglabs/lnget/main/README.md) [33] · [lightninglabs/L402sdk (fetched 2026-10-30)](https://github.com/lightninglabs/L402sdk) [34] · [lightninglabs/LangChainBitcoin (pushed 2024-07-03)](https://github.com/lightninglabs/LangChainBitcoin) [35] |\n| **Alby (getAlby/cli)** | Wallet CLI | Supported · as of 2026-04-07 | `v0.4.0` (2026-04-07) fetches L402, X402, and MPP resources. | [getAlby/cli v0.4.0 (published 2026-04-07)](https://github.com/getAlby/cli/releases/tag/v0.4.0) [36] |\n| **Lightning Enable (lightning-enable-mcp)** | Client MCP server | Partial · as of 2026-10-30 | Main-branch MCP server pays L402 via Strike, NWC, or LND preimage. | [refined-element/lightning-enable-mcp README (fetched 2026-10-30)](https://raw.githubusercontent.com/refined-element/lightning-enable-mcp/main/README.md) [37] |\n| **Lightning Faucet (lightning-wallet-mcp)** | Custodial agent wallet | Partial · as of 2026-10-30 | Custodial main-branch wallet; `pay_invoice` returns a BOLT11 preimage. | [lightningfaucet/lightning-wallet-mcp README (fetched 2026-10-30)](https://raw.githubusercontent.com/lightningfaucet/lightning-wallet-mcp/main/README.md) [38] |\n| **Tierion (lsat-js)** | Client SDK | Listed · as of 2023-08-09 | JavaScript LSAT tools; last push 2023-08-09. | [Tierion/lsat-js README (fetched 2026-10-30)](https://raw.githubusercontent.com/Tierion/lsat-js/master/README.md) [17] · [Tierion/lsat-js repository (pushed 2023-08-09)](https://github.com/Tierion/lsat-js) [39] · [L402 README (fetched 2026-10-30)](https://raw.githubusercontent.com/lightninglabs/L402/master/README.md) [2] |\n\n### Ecosystem censuses\n\n- **Alby, 402, Charted (Aug 12, 2026)** (*as of 2026-06*): L402 grew from 94 endpoints in February to a peak of 1,209 in May, then held flat through June, ending the month at 1,201. [27]\n- **Alby, 402, Charted (Aug 12, 2026)** (*as of 2026-06*): L402 providers in the same index remained relatively stable (36 to 29). [27]\n- **lightningfaucet.com/llms.txt (fetched 2026-10-30)** (*as of 2026-10-30*): Lightning Faucet lists 25+ pay-per-call endpoints, priced from 5 to 500 sats. [28]\n- **Lightning Engineering implementations and links** (*as of 2026-11-06*): The Lightning Engineering implementations page lists five projects using L402: Satring, WoT Scoring, Lightning Pool, Lightning Loop, and L402 Playground. [40]\n- **Sats for Bots directory** (*as of 2026-11-06*): The Sats for Bots directory categorizes Lightning Agent Tools, Aperture, the L402 Protocol Spec, Alby MCP Server, Nostr Wallet Connect (NWC), Routstr, PPQ.ai, SaturnZap, L402sdk, Lightning Enable MCP, Lightning Wallet MCP, agent-bitcoin, Spark MCP, and bark-mcp. [41]\n- **L402.directory** (*as of 2026-11-06*): L402.directory documents GET /api/services, which returns all active L402 service listings with endpoints, pricing, and health status, and GET /api for the protocol specification. The rendered directory names First Channel Suggestion and Unlock a Video. [42]\n\n---\n\n## See also\n\n- **[s402](/protocols/s402/)** *(Peer alternative)* — Retired in September 2026, s402's credential was a signed Sui transaction for schemes exact, upto, prepaid, stream, escrow, or unlock, whereas L402's credential is a macaroon and a BOLT 11 preimage in Authorization: L402.\n- **[Agent Commerce Kit (ACK)](/protocols/agent-commerce-kit/)** *(Peer alternative)* — ACK-Pay places L402 among the 402-shaped flows that fit its payment pattern, while L402's credential is a macaroon and a BOLT 11 preimage and ACK-Pay's receipt is a W3C Verifiable Credential.\n- **Category:** [Pay protocols](/category/pay/)\n\n---\n\n## References\n\n1. Lightning Labs, *L402 Protocol Specification* (fetched 2026-10-30) — <https://raw.githubusercontent.com/lightninglabs/L402/master/protocol-specification.md>\n2. Lightning Labs, *L402: Lightning HTTP 402 Protocol* (fetched 2026-10-30) — <https://raw.githubusercontent.com/lightninglabs/L402/master/README.md>\n3. x402 Foundation, *x402 Protocol Specification* (protocol version 2; fetched 2026-10-30) — <https://github.com/x402-foundation/x402/blob/main/specs/x402-specification-v2.md>\n4. Linux Foundation, *Linux Foundation Announces Operational Launch of x402 Foundation to Standardize Internet-Native Payments for AI Agents and Applications* (July 14, 2026) — <https://www.linuxfoundation.org/press/linux-foundation-announces-operational-launch-of-x402-foundation-to-standardize-internet-native-payments-for-ai-agents-and-applications>\n5. Tempo and Stripe, *What is MPP?* (fetched 2026-10-30) — <https://mpp.dev/overview.md>\n6. B. Ryan, J. Moxey, and T. Meagher (Tempo Labs); J. Weinstein and S. Kaliski (Stripe), *The \"Payment\" HTTP Authentication Scheme (draft-httpauth-payment-01 HTML)* (draft-httpauth-payment-01, September 2026) — <https://datatracker.ietf.org/doc/html/draft-httpauth-payment-01>\n7. R. Fielding, M. Nottingham, and J. Reschke (eds.), *RFC 9110: HTTP Semantics* (June 2022) — <https://www.rfc-editor.org/rfc/rfc9110.html>\n8. Olaoluwa Osuntokun, Lightning Labs, *L402: Authentication and Payments for the Lightning-Native Web* (March 30, 2020) — <https://lightning.engineering/posts/2020-03-30-lsat/>\n9. Lightning Labs, *lightninglabs/L402 repository* (created 2020-02-07; fetched 2026-10-30) — <https://github.com/lightninglabs/L402>\n10. Olaoluwa Osuntokun, Oliver Gugger, and Wilmer Paulino, *bLIP-0026: L402: The Lightning HTTP 402 Protocol* (created 2023-06-06) — <https://raw.githubusercontent.com/Roasbeef/blips/697ae354c205f1aacc450e72067c92a7f2467321/blip-0026.md>\n11. Lightning Specification (BOLTs), *Comments on lightning/blips pull request 26* (fetched 2026-10-30) — <https://github.com/lightning/blips/issues/26>\n12. Lightning Labs, *lightninglabs/L402 commits* (fetched 2026-10-30) — <https://github.com/lightninglabs/L402/commits>\n13. Roasbeef, *blip-0026: L402 - Lightning HTTP 402 Protocol (lightning/blips pull request 26)* (opened 2023-06-07; fetched 2026-10-30) — <https://github.com/lightning/blips/pull/26>\n14. Lightning Labs, *Aperture | Builder's Guide* (fetched 2026-10-30) — <https://docs.lightning.engineering/lightning-network-tools/aperture>\n15. IANA, *Hypertext Transfer Protocol (HTTP) Authentication Scheme Registry* (last updated 2025-02-18; last-modified 2026-10-13) — <https://www.iana.org/assignments/http-authschemes/authschemes.csv>\n16. Lightning Labs, *Aperture* (checked 2026-11-06) — <https://github.com/lightninglabs/aperture>\n17. Tierion, *LSAT-JS* (fetched 2026-10-30) — <https://raw.githubusercontent.com/Tierion/lsat-js/master/README.md>\n18. Liongrass, *Edit documentation to reflect naming changes (lightninglabs/L402 pull request 16)* (merged 2023-04-20) — <https://github.com/lightninglabs/L402/pull/16>\n19. Lightning Labs, *Aperture v0.5.0* (published 2026-03-25) — <https://github.com/lightninglabs/aperture/releases/tag/v0.5.0>\n20. Model Context Protocol, *Specification* (2026-07-28) — <https://modelcontextprotocol.io/specification/2026-07-28>\n21. Cloudflare, *What is Pay Per Crawl?* (fetched 2026-10-31) — <https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/what-is-pay-per-crawl/>\n22. Lightning Labs, *lightninglabs/loop swap_server_client.go* (fetched 2026-10-30) — <https://raw.githubusercontent.com/lightninglabs/loop/master/swap_server_client.go>\n23. Lightning Enable (Refined Element), *Lightning Enable llms.txt* (last-modified 2026-10-30) — <https://www.lightningenable.com/llms.txt>\n24. Lightning Enable, *NWC wallet integration payment response* (fetched 2026-10-30) — <https://api.lightningenable.com/api/l402/content/nwc-wallet-integration.md>\n25. L402 Space, *Universal 402 Gateway - API docs* (fetched 2026-10-30) — <https://l402.space/docs>\n26. L402 Space, *l402.space paid ping response* (fetched 2026-10-30) — <https://l402.space/l402/ping>\n27. Alby, *402, Charted - Tracking the rise of L402, x402, and MPP* (published Aug 12, 2026) — <https://getalby.com/blog/402-charted-tracking-the-rise-of-l402-x402-and-mpp>\n28. Lightning Faucet, *Lightning Faucet llms.txt* (last-modified 2026-10-27) — <https://lightningfaucet.com/llms.txt>\n29. Lightning Faucet, *Onchain fee payment response* (fetched 2026-10-30) — <https://lightningfaucet.com/api/l402/onchain_fee>\n30. Tierion, *Boltwall* (fetched 2026-10-30) — <https://raw.githubusercontent.com/Tierion/boltwall/master/README.md>\n31. Tierion, *Tierion/boltwall repository* (pushed 2023-04-26; fetched 2026-10-30) — <https://github.com/Tierion/boltwall>\n32. Michael Levin, Lightning Labs, *The Agents Are Here and They Want to Transact: Powering the AI Economy with Lightning* (February 11, 2026) — <https://lightning.engineering/posts/2026-02-11-ln-agent-tools/>\n33. Lightning Labs, *lnget* (fetched 2026-10-30) — <https://raw.githubusercontent.com/lightninglabs/lnget/main/README.md>\n34. Lightning Labs, *L402sdk: L402 client SDK for AI agent frameworks* (fetched 2026-10-30) — <https://github.com/lightninglabs/L402sdk>\n35. Lightning Labs, *lightninglabs/LangChainBitcoin repository* (pushed 2024-07-03; fetched 2026-10-30) — <https://github.com/lightninglabs/LangChainBitcoin>\n36. Alby, *getAlby/cli v0.4.0* (published 2026-04-07) — <https://github.com/getAlby/cli/releases/tag/v0.4.0>\n37. Lightning Enable (Refined Element), *Lightning Enable MCP Server* (fetched 2026-10-30) — <https://raw.githubusercontent.com/refined-element/lightning-enable-mcp/main/README.md>\n38. Lightning Faucet, *Lightning Wallet MCP* (fetched 2026-10-30) — <https://raw.githubusercontent.com/lightningfaucet/lightning-wallet-mcp/main/README.md>\n39. Tierion, *Tierion/lsat-js repository* (pushed 2023-08-09; fetched 2026-10-30) — <https://github.com/Tierion/lsat-js>\n40. Lightning Engineering, *Implementations and Links* (checked 2026-11-06) — <https://docs.lightning.engineering/the-lightning-network/l402/implementations-and-links>\n41. Sats for Bots, *Directory* (checked 2026-11-06) — <https://satsforbots.com/directory/>\n42. L402.directory, *Discover Lightning-Gated APIs* (checked 2026-11-06) — <https://www.l402.directory/>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "MPP",
   "adoption": {
    "level": "observed",
    "by": "Stripe, Tempo (Tempo Labs / Paradigm), Visa, Lightning Labs (Aperture), Browserbase, Stripe Link CLI, mppx (Tempo Labs & Wevm), AWS (Amazon Bedrock AgentCore payments), and 7 other verified implementations",
    "probe_run": null
   },
   "aliases": [
    "MPP",
    "Machine Payments Protocol",
    "Machine Payment Protocol",
    "Payment HTTP Authentication Scheme"
   ],
   "analog": "A payment-method-agnostic HTTP 402 challenge/credential/receipt exchange",
   "collisions": [],
   "discovery": {
    "mechanism": "HTTP 402 response carrying a WWW-Authenticate: Payment challenge",
    "path": "No fixed path: a resource signals MPP per request by answering HTTP 402 with a WWW-Authenticate: Payment challenge. Services can also be listed in the curated mpp.dev/services directory (https://mpp.dev/api/services listed 138 services on 2026-10-29) or self-registered on MPPScan (by Merit Systems)"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://mpp.dev/overview.md",
     "claim": "Tempo and Stripe (mpp.dev), *What is MPP?*, checked 2026-10-30",
     "date": null,
     "quote": "The Machine Payments Protocol (MPP) is an open protocol co-authored by Tempo and Stripe. / When a client requests a paid resource, the server returns a 402 response with the payment options they support. The client chooses a payment method, fulfills the request and retries with a payment Credential which contains proof of payment. The server verifies the payment and returns the resource with a Receipt which contains proof of delivery. / MPP comes with a suite of official SDKs maintained by Tempo Labs and Wevm.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://stripe.com/blog/machine-payments-protocol",
     "claim": "Jeff Weinstein and Steve Kaliski (Stripe), *Introducing the Machine Payments Protocol*, 2026-03-18",
     "date": "2026-03-18",
     "quote": "we're launching the Machine Payments Protocol (MPP), an open standard, internet-native way for agents to pay-co-authored by Tempo and Stripe. / March 18, 2026 Jeff Weinstein Product Lead, Agentic Commerce Steve Kaliski / Businesses can then accept payments directly from agents, in stablecoins as well as fiat with cards and buy now, pay later payment methods via Shared Payment Tokens (SPTs). / Browserbase, a browser infrastructure provider, now lets agents spin up headless browsers and pay per session. / PostalForm helps agents pay to print and send physical mail.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://datatracker.ietf.org/doc/html/draft-httpauth-payment-01",
     "claim": "B. Ryan, J. Moxey, T. Meagher, J. Weinstein, and S. Kaliski, *The \"Payment\" HTTP Authentication Scheme (draft-httpauth-payment-01 HTML)*, published 9 September 2026; expires 13 March 2027",
     "date": null,
     "quote": "This document defines the \"Payment\" HTTP authentication scheme, enabling HTTP resources to require a payment challenge to be fulfilled before access. / This specification defines the \"Payment\" authentication scheme that gives 402 its semantics, enabling resources to require a payment challenge to be fulfilled before access. / Authors: B. Ryan Tempo Labs J. Moxey Tempo Labs T. Meagher Tempo Labs J. Weinstein Stripe S. Kaliski Stripe / Internet-Draft: draft-httpauth-payment-01 Published: 9 September 2026 Intended Status: Standards Track Expires: 13 March 2027 / Payment Challenge: A WWW-Authenticate header with scheme \"Payment\" / The default field name is Authorization. / A Payment challenge MAY select Payment-Authorization with the header parameter / The client MUST send the corresponding Payment credential in the `Payment-Authorization` header, not in `Authorization`. / Servers SHOULD include a `Payment-Receipt` header on successful responses: / Encoded as base64url JSON in the request parameter / registered value in the IANA \"HTTP Payment Intents\" registry / 12. IANA Considerations … Authentication Scheme Name: Payment … Accept-Payment … Payment-Authorization … Payment-Receipt … establishes the \"HTTP Payment Methods\" registry … establishes the \"HTTP Payment Intents\" registry / Code Components extracted from this document must include Revised BSD License text / This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents / HTTP 402 \"Payment Required\" was reserved in HTTP/one-point-one [RFC9110] but never standardized for common use. / The protocol is payment-method agnostic, supporting any payment network or currency through registered payment method identifiers. Specific payment methods are defined in separate payment method specifications. / 4.1. Request Flow / Step (4) uses the default Authorization header because the challenge did not include a specific header field. / A client requests a resource, receives a payment challenge, fulfills the payment, and receives the resource with a receipt.",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://github.com/x402-foundation/x402/blob/main/specs/x402-specification-v2.md",
     "claim": "x402 Foundation, *X402 Protocol Specification*, protocol version 2",
     "date": null,
     "quote": "PAYMENT-REQUIRED / PAYMENT-SIGNATURE header is required / x402 is an open payment standard that enables clients to pay for external resources. / state-committing /settle",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://raw.githubusercontent.com/lightninglabs/L402/master/protocol-specification.md",
     "claim": "Lightning Labs, *L402 Protocol Specification*, checked 2026-10-30",
     "date": null,
     "quote": "WWW-Authenticate: L402 / containing a macaroon and a Lightning invoice / pays the invoice to obtain a preimage",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://www.rfc-editor.org/rfc/rfc9110.html",
     "claim": "R. Fielding, M. Nottingham, and J. Reschke (IETF), *RFC 9110: HTTP Semantics*, June 2022",
     "date": null,
     "quote": "The 402 (Payment Required) status code is reserved for future use. / 11.6.1. WWW-Authenticate",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://raw.githubusercontent.com/lightning/bolts/master/09-features.md",
     "claim": "Lightning Network, *BOLT #9: Assigned Feature Flags*, checked 2026-10-30",
     "date": null,
     "quote": "basic_mpp | Node can receive basic multi-part payments",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://learn.microsoft.com/en-us/dynamics365/project-operations/project-management/import_from_mpp",
     "claim": "Microsoft, *Import projects from the Microsoft Project desktop client*, checked 2026-10-30",
     "date": null,
     "quote": "Microsoft Project desktop client files (.mpp files)",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://aws.amazon.com/blogs/machine-learning/amazon-bedrock-agentcore-payments-is-now-generally-available-enabling-agents-to-transact-safely-and-autonomously-at-scale/",
     "claim": "Chethan Shriyan and Madhu Samhitha Vangara (AWS), *Amazon Bedrock AgentCore payments is now generally available*, 2026-08-18",
     "date": "2026-08-18",
     "quote": "At GA, we have expanded protocol support to include the Machine Payment Protocol (MPP), another standard for machine payments co-authored by Stripe and Tempo / by Chethan Shriyan and Madhu Samhitha Vangara on 18 AUG 2026 / At GA, we have expanded protocol support to include the Machine Payment Protocol (MPP), another standard for machine payments co-authored by Stripe and Tempo, enabling developers to pay for any MPP-compatible service without an additional line of code.",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://tempo.xyz/blog/mainnet/",
     "claim": "Tempo, *Tempo Mainnet Is Live: Build on Tempo Today*, 2026-03-18",
     "date": "2026-03-18",
     "quote": "introducing the Machine Payments Protocol (MPP), an open standard for machine payments co-authored by Stripe and Tempo. / Tempo Mainnet is live Mar 18, 2026 / MPP runs on Tempo today, but the protocol itself is designed to be rail-agnostic and extensible. / For example, our design partner Visa has already extended MPP to support card-based payments on their network.",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://raw.githubusercontent.com/tempoxyz/mpp-specs/main/README.md",
     "claim": "Tempo Labs and Stripe, *Machine Payments Protocol (MPP)*, checked 2026-10-30",
     "date": null,
     "quote": "The Machine Payments Protocol (MPP) is an open standard for machine-to-machine payments, co-authored by Tempo and Stripe. / Server responds with 402 Payment Required and a WWW-Authenticate: Payment challenge describing what payment is needed … Client retries the request with an Authorization: Payment credential proving payment / The Machine Payments Protocol specification is currently maintained by the following organizations: … Tempo Labs … Stripe / currently maintained by the following organizations: … Tempo Labs … Stripe / Server responds with 402 Payment Required and a WWW-Authenticate: Payment challenge describing what payment is needed / Core: HTTP 402 semantics, headers, IANA registries. / Specifications: CC0 1.0 Universal (Public Domain) / Client retries the request with an Authorization: Payment credential proving payment / The Machine Payments Protocol specification is currently maintained by the following organizations: * Tempo Labs * Stripe",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://mpp.dev/governance.md",
     "claim": "Tempo and Stripe (mpp.dev), *Governance*, checked 2026-10-30",
     "date": null,
     "quote": "The core specification is published as the Payment HTTP Authentication Scheme and submitted to the IETF standards track, where it continues to progress as an open, vendor-neutral standard. / MPP is developed in the open on GitHub. / Each payment method specification is defined and maintained by the rail behind it-for example Visa, Mastercard, Solana, Bitcoin, Stripe, or Tempo-together with any corporate entities associated with that rail. / governed by IETF Trust licensing under BCP 78 and BCP 79. / Each payment method specification is defined and maintained by the rail behind it",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://paymentauth.org/draft-httpauth-payment-01.html",
     "claim": "B. Ryan, J. Moxey, T. Meagher, J. Weinstein, and S. Kaliski, *The \"Payment\" HTTP Authentication Scheme (editor rendering)*, published 2 November 2026; expires 6 May 2027",
     "date": null,
     "quote": "Servers SHOULD include a Payment-Receipt header on successful responses / Internet-Draft: draft-httpauth-payment-01 Published: 2 November 2026 Intended Status: Standards Track Expires: 6 May 2027 / Payment-Authorization is RECOMMENDED when a resource needs to preserve Authorization for ordinary authentication. / This document defines the \"Payment\" HTTP authentication scheme, enabling HTTP resources to require a payment challenge to be fulfilled before access. The scheme extends HTTP Authentication, using the HTTP 402 \"Payment Required\" status code. / id : Unique challenge identifier. This parameter is REQUIRED and its value MUST be non-empty … realm : Protection space identifier … Servers MUST include this parameter … method : Payment method identifier … MUST be a lowercase … intent : Payment intent type … The value MUST be a registered entry … request : Base64url-encoded … Padding characters (\"=\") MUST NOT be included. The JSON MUST be serialized using JSON Canonicalization Scheme (JCS) / digest : Content digest of the request body … Servers SHOULD include this parameter when the payment challenge applies to a request with a body … expires : Timestamp indicating when this challenge expires … Servers SHOULD include this parameter. / Servers MUST bind the challenge id to realm , method , intent , and request , and to expires , digest , opaque , and header when present. … Servers MAY use stateful storage (e.g., database lookup) or stateless verification (e.g., HMAC, authenticated encryption) to validate the binding. … Servers using HMAC-SHA256 for stateless challenge binding SHOULD compute the challenge id as follows … id = base64url(HMAC-SHA256(server_secret, input)) / The default HTTP field for the Payment credential is Authorization … Clients receiving such a challenge MUST send the Payment credential in the Authorization header. / Echoed challenge parameters … Payer identifier ( RECOMMENDED : DID format … Method-specific payment proof / Payment credentials are bearer tokens that authorize financial transactions. … Clients MUST verify before authorizing payment: … Requested amount is reasonable for the resource … Recipient/address is expected … Clients MUST NOT rely on the description parameter for payment verification. / Payment methods used with this specification MUST provide single-use proof semantics. A payment proof MUST be usable exactly once; subsequent attempts to use the same proof MUST be rejected by the payment method infrastructure. / Servers SHOULD include a Payment-Receipt header on successful responses: … Payment-Receipt = base64url-nopad … status … method … timestamp … reference … Servers MUST NOT return a Payment-Receipt header on error responses. / Servers SHOULD return Problem Details [RFC9457] error bodies for payment-related errors … payment-required … payment-insufficient … payment-expired … Content-Type: application/problem+json",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://datatracker.ietf.org/doc/draft-httpauth-payment/",
     "claim": "IETF Datatracker, *draft-httpauth-payment — The \"Payment\" HTTP Authentication Scheme (IETF Datatracker)*, last updated 2026-09-09",
     "date": null,
     "quote": "This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. … Active Internet-Draft (individual) … Last updated … 2026-09-09 … Intended RFC status … (None) … Intended status: Standards Track … Expires: 13 March 2027 … draft-httpauth-payment-01 / This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. / Document Type Active Internet-Draft (individual) / Last updated 2026-09-09 / IESG state I-D Exists / Document Type Active Internet-Draft (individual) … IESG state I-D Exists",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://mpp.dev/faq.md",
     "claim": "Tempo and Stripe (mpp.dev), *Frequently asked questions*, checked 2026-10-30",
     "date": null,
     "quote": "Today, Tempo stablecoin payments, card payments through Card or Stripe, and Lightning payments are in production. / MPP includes an MCP transport binding that maps the Challenge-Credential-Receipt flow onto the Model Context Protocol. / The protocol itself is free and open. There are no licensing fees for implementing MPP. / Sessions are a payment intent that enables streaming, pay-as-you-go payments. Instead of paying per request, a client opens a session by depositing funds into a channel reserve, then makes many requests by issuing signed vouchers off-chain. The server periodically settles the accumulated vouchers on-chain. / mppx can run x402-compatible EVM charges inline with an MPP route, so the same endpoint can serve x402 and MPP clients.",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://corporate.visa.com/en/sites/visa-perspectives/innovation/visa-card-specification-sdk-for-machine-payments-protocol.html",
     "claim": "Visa, *Visa introduces card spec and SDK for MPP*, 2026-03-18",
     "date": "2026-03-18",
     "quote": "the spec is now live / 03/18/2026 / As a design partner on MPP, Visa is releasing: / Visa is extending MPP to support card-based payments on its global network, and enabling it on the Visa Acceptance Platform. / Card-Based MPP Spec: Visa's full technical specification that defines how tokenized card credentials are passed, authenticated and processed inside MPP-compatible workflows.",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://mpp.browserbase.com/browser/session/create",
     "claim": "Browserbase, *Payment Required (browser session create)*, checked 2026-10-30",
     "date": null,
     "quote": "\"status\":402,\"detail\":\"Payment is required (Pay-per-use browser sessions with crypto. No API keys, no accounts -- just pay and connect via x402 or MPP.).\"",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://mpp.dev/payment-methods.md",
     "claim": "Tempo and Stripe (mpp.dev), *Payment methods*, checked 2026-10-30",
     "date": null,
     "quote": "WWW-Authenticate: Payment method=\"stripe\", intent=\"charge\" / method=\"tempo\" … method=\"stripe\" … method=\"evm\" … method=\"card\" … method=\"lightning\" … method=\"solana\" … method=\"xrpl\" … method=\"stellar\" … method=\"monad\" … method=\"nearintents\" … method=\"redotpay\" / Tempo - Web scale payments with TIP-20 stablecoins on Tempo with sub second settlement … Stripe - Traditional payment methods through Stripe … Card - Card payments via encrypted network tokens … Lightning - Bitcoin payments over the Lightning Network / WWW-Authenticate: Payment method=\"tempo\", intent=\"charge\" / WWW-Authenticate: Payment method=\"evm\", intent=\"charge\"",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://mpp.dev/mpp-vs-x402.md",
     "claim": "Tempo and Stripe (mpp.dev), *MPP vs x402*, checked 2026-10-30",
     "date": null,
     "quote": "Payment-Receipt / Authorization: Payment, or an advertised alternate field / MPP defines a payment-method-agnostic HTTP authentication framework for stablecoins, cards, Lightning, and other payment rails.",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://www.iana.org/assignments/http-authschemes/authschemes.csv",
     "claim": "IANA, *Hypertext Transfer Protocol (HTTP) Authentication Scheme Registry (CSV)*, checked 2026-10-30",
     "date": null,
     "quote": "Authentication Scheme Name,Reference,Notes Basic,[RFC 7617], Bearer,[RFC 6750]",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://mpp.dev/services",
     "claim": "Machine Payments Protocol, *MPP services: APIs that accept MPP payments*, checked 2026-10-30",
     "date": null,
     "quote": "The curated directory accepts live, production-ready MPP services. / fetch advisory OpenAPI summaries / Browse services … fetch advisory OpenAPI summaries … Runtime 402 Challenges from the target service remain the authoritative source of current payment terms. / Install the Tempo CLI and its wallet to fund your agent's use of MPP services.",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://github.com/tempoxyz/mpp",
     "claim": "Tempo, *tempoxyz/mpp*, checked 2026-10-30",
     "date": null,
     "quote": "Register on … MPPScan … for immediate discovery; open a PR to include it in the curated … mpp.dev/services",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://mpp.dev/protocol/http-402.md",
     "claim": "Tempo and Stripe (mpp.dev), *HTTP 402*, checked 2026-10-30",
     "date": null,
     "quote": "MPP uses 402 when a server offers a payment Challenge, including retryable Credential validation failures. This differs from other HTTP authentication schemes that use 401 for failed Credentials.",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://developers.cloudflare.com/agents/tools/payments/mpp/",
     "claim": "Cloudflare, *MPP (Machine Payments Protocol)*, last updated 2026-08-05",
     "date": null,
     "quote": "MPP is payment-method agnostic. It supports stablecoins, cards through Stripe, and custom payment methods. … Model Context Protocol (MCP) tools use the same flow through JSON-RPC. … charge - Collect a one-time payment. … session - Charge for measured usage. / HTTP services exchange payment data in authentication headers. Model Context Protocol (MCP) tools use the same flow through JSON-RPC. / MPP is payment-method agnostic. It supports stablecoins, cards through Stripe, and custom payment methods. / It standardizes the HTTP 402 Payment Required status code with a formal authentication scheme proposed to the IETF / charge - Collect a one-time payment. / session - Charge for measured usage. / subscription - Sell recurring access.",
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://docs.stripe.com/payments/machine/mpp",
     "claim": "Stripe, *MPP*, checked 2026-10-30",
     "date": null,
     "quote": "For card payments through Shared Payment Tokens (SPTs), the minimum amount is 0.50 USD. / Stripe automatically offramps these payments and settles them into your Stripe balance. / MPP, the Machine Payments Protocol, is an open protocol that lets agents pay for your APIs and services programmatically without a checkout UI, co-authored by Stripe and Tempo. / The link-cli is a tool that can provision one-time shared payment token credentials using your Link account. / register it as an MCP server in your preferred agent. / Run mppx validate to automatically verify your implementation end-to-end. … In a sandbox, the CLI automatically completes roundtrip test transactions against your server. In live mode, the CLI can also complete roundtrip transactions with real funds.",
     "ref": 25
    },
    {
     "label": "[26]",
     "url": "https://mpp.dev/intents.md",
     "claim": "Tempo and Stripe (mpp.dev), *Intents*, checked 2026-10-30",
     "date": null,
     "quote": "Charge: Collect a fixed one-time payment before returning the resource / Tempo supports charge, session, and subscription, while Stripe currently supports charge.",
     "ref": 26
    },
    {
     "label": "[27]",
     "url": "https://ap2-protocol.org/ap2/specification/",
     "claim": "AP2, *Agent Payments Protocol specification*, checked 2026-10-30",
     "date": null,
     "quote": "AP2 specifies the use of SD-JWTs for securing the Payment and Checkout Mandates.",
     "ref": 27
    },
    {
     "label": "[28]",
     "url": "https://github.com/agentic-commerce-protocol/agentic-commerce-protocol",
     "claim": "OpenAI and Stripe, *Agentic Commerce Protocol*, checked 2026-10-30",
     "date": null,
     "quote": "The Agentic Commerce Protocol (ACP) is an interaction model and open standard for connecting buyers, their AI agents, and businesses to complete purchases seamlessly. The specification is currently maintained by OpenAI and Stripe.",
     "ref": 28
    },
    {
     "label": "[29]",
     "url": "https://blog.cloudflare.com/introducing-pay-per-crawl/",
     "claim": "Cloudflare, *Introducing pay per crawl: Enabling content owners to charge AI crawlers for access*, published 2025-07-01; modified 2026-07-15",
     "date": null,
     "quote": "accompanied by a crawler-price header / HTTP 402 Payment Required crawler-price: USD XX.XX / using Web Bot Auth proposals",
     "ref": 29
    },
    {
     "label": "[30]",
     "url": "https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/what-is-pay-per-crawl/",
     "claim": "Cloudflare, *What is Pay Per Crawl?*, checked 2026-10-31",
     "date": null,
     "quote": "receive an HTTP 402 Payment Required response with pricing",
     "ref": 30
    },
    {
     "label": "[31]",
     "url": "https://fortune.com/2026/03/18/stripe-tempo-paradigm-mpp-ai-payments-protocol/",
     "claim": "Ben Weiss (Fortune), *Stripe-backed crypto startup Tempo releases AI payments protocol, launches blockchain*, published 2026-03-18; modified 2026-03-18",
     "date": null,
     "quote": "Tempo, incubated by Stripe and the venture firm Paradigm",
     "ref": 31
    },
    {
     "label": "[32]",
     "url": "https://docs.lightning.engineering/lightning-network-tools/aperture",
     "claim": "Lightning Labs, *Aperture*, checked 2026-10-30",
     "date": null,
     "quote": "Aperture is a reverse proxy that acts as a payment and authentication gateway for Lightning Network powered APIs. / Aperture implements both the L402 as well as the MPP specifications. / Aperture is currently used in production in Lightning Loop and Pool.",
     "ref": 32
    },
    {
     "label": "[33]",
     "url": "https://mpp.dev/api/services",
     "claim": "Machine Payments Protocol, *MPP services catalog*, checked 2026-10-30",
     "date": null,
     "quote": "\"id\":\"browserbase\",\"name\":\"Browserbase\" … \"status\":\"active\" … \"methods\":{\"tempo\":{\"intents\":[\"charge\"] … \"stripe\":{\"intents\":[\"charge\"] … \"path\":\"/browser/session/create\" / \"id\":\"postalform\",\"name\":\"PostalForm\" … \"status\":\"active\" … \"stripe\":{\"intents\":[\"charge\"] … \"path\":\"/api/machine/mpp/orders\",\"description\":\"Create and pay for a print-and-mail order\" / \"id\":\"stableenrich\",\"name\":\"StableEnrich\" … \"status\":\"active\" … \"methods\":{\"tempo\":{\"intents\":[\"charge\"] … \"path\":\"/api/apollo/people-search\" / \"id\":\"dune\",\"name\":\"Dune\" … \"status\":\"active\" … \"methods\":{\"tempo\":{\"intents\":[\"session\"] … \"path\":\"/api/v1/sql/execute\" / \"id\":\"alchemy\",\"name\":\"Alchemy\" … \"serviceUrl\":\"https://mpp.alchemy.com\" … \"status\":\"active\" … \"stripe\":{\"intents\":[\"charge\"] … \"path\":\"/:network/v2\",\"description\":\"JSON-RPC call (eth_*, alchemy_*)\" / {\"version\":1,\"services\":[ / \"status\":\"active\" / \"id\":\"tempo-api\",\"name\":\"Tempo API\" … \"status\":\"beta\" / \"id\":\"govlaws\",\"name\":\"GovLaws\" … \"status\":\"maintenance\" / \"id\":\"laso-finance\",\"name\":\"Laso Finance\" … \"methods\":{\"evm\":{\"intents\":[\"charge\"] / \"methods\":{\"tempo\":{\"intents\":[\"charge\"] / \"stripe\":{\"intents\":[\"charge\"],\"assets\":[\"usd\"]",
     "ref": 33
    },
    {
     "label": "[34]",
     "url": "https://github.com/stripe/link-cli",
     "claim": "Stripe, *link-cli*, checked 2026-10-30",
     "date": null,
     "quote": "Shared Payment Token … (SPT) for use when the seller accepts programmatic payments through … Machine Payment Protocols … (MPP) / For now, this is only available to US and Canadian Link accounts. / npx skills add stripe/link-cli / mpp pay … to complete purchases",
     "ref": 34
    },
    {
     "label": "[35]",
     "url": "https://mpp.dev/sdk.md",
     "claim": "Tempo and Stripe (mpp.dev), *SDKs*, checked 2026-10-30",
     "date": null,
     "quote": "the reference implementation of the MPP SDKs",
     "ref": 35
    },
    {
     "label": "[36]",
     "url": "https://developers.cloudflare.com/agents/tools/payments/mpp/pay-from-agents-sdk/",
     "claim": "Cloudflare, *Pay from the Agents SDK*, last updated 2026-08-05",
     "date": null,
     "quote": "Use the Cloudflare Agents SDK to pay MPP services. The mppx SDK handles payment retries for HTTP requests and Model Context Protocol (MCP) tool calls. / Last updated Aug 5, 2026",
     "ref": 36
    },
    {
     "label": "[37]",
     "url": "https://github.com/mbeato/awesome-mpp",
     "claim": "mbeato, *Awesome MPP*, fetched 2026-11-06",
     "date": null,
     "quote": "A curated list of resources, tools, SDKs, and services for the Machine Payments Protocol (MPP) / Official MPP specification using an RFC-style Payment HTTP auth scheme.",
     "ref": 37
    }
   ],
   "form": "http-header",
   "governance": "Tempo and Stripe, in the open tempoxyz/mpp-specs repository: \"MPP is developed in the open on GitHub.\" mpp.dev splits governance in two. Core: \"The core specification is published as the Payment HTTP Authentication Scheme and submitted to the IETF standards track, where it continues to progress as an open, vendor-neutral standard.\" Payment methods: \"Each payment method specification is defined and maintained by the rail behind it—for example Visa, Mastercard, Solana, Bitcoin, Stripe, or Tempo—together with any corporate entities associated with that rail.\" \"Payment rails and third parties do not need explicit approval to add a payment method implementation to MPP.\" The IETF has not adopted the draft: \"This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process.\" There is no MPP foundation or IETF working group",
   "group": "HTTP 402 family",
   "hatnote_md": "This page is about the Machine Payments Protocol (MPP), an open protocol co-authored by Tempo and Stripe and launched on March 18, 2026, whose core is the Payment HTTP authentication scheme. It is not x402, whose v2 specification uses a PAYMENT-REQUIRED header and a PAYMENT-SIGNATURE header. It is not L402, whose challenge is a WWW-Authenticate: L402 header containing a macaroon and a Lightning invoice. It is not the bare 402 status code: RFC 9110 says the 402 (Payment Required) status code is reserved for future use. In Lightning, basic_mpp means a node can receive basic multi-part payments. Microsoft uses .mpp for Microsoft Project desktop client files. AWS writes Machine Payment Protocol (singular). mpp.dev, Stripe, and Tempo write Machine Payments Protocol.",
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against mpp.dev (homepage, /protocol, /governance)"
    },
    {
     "date": "2026-10-16",
     "note": "The MPP draft was renamed draft-httpauth-payment; draft-httpauth-payment-01 is dated 2026-09-09"
    },
    {
     "date": "2026-10-29",
     "note": "Re-verified record against 30 primary, live HTTP 402 endpoint, vendor, and coverage sources."
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "mpp",
   "implementation": "multi-implementation",
   "last_verified": "2026-11-12",
   "name": "Machine Payments Protocol (MPP)",
   "native_status": "\"Document Type Active Internet-Draft (individual)\", \"Last updated 2026-09-09\", \"IESG state I-D Exists\". In production use: payment methods are in production, and five services checked live on 2026-10-29 answered with MPP challenges (see Who uses it)",
   "origin": {
    "date": "2026-03-18",
    "org": "Tempo and Stripe"
   },
   "part_of": null,
   "parties": [
    "agent-site",
    "agent-payment"
   ],
   "phase": "review",
   "probe": {
    "method": "GET",
    "on_absent": "A 200, 401, or a 402 without a Payment-scheme WWW-Authenticate header means this path is not gated by MPP; MPP also has MCP/JSON-RPC and WebSocket transport bindings, so an HTTP-only probe cannot rule out MPP support offered solely over those transports.",
    "parse": "HTTP 402 status with a WWW-Authenticate: Payment ... challenge header; a subsequent authorized retry returns 200 with a Payment-Receipt header",
    "path": "{origin}/{paid-path}"
   },
   "question": "How can a machine client (an agent, script, or another server) pay for an HTTP resource using any payment network, not just one?",
   "scope": "payments",
   "spec_url": "https://datatracker.ietf.org/doc/html/draft-httpauth-payment-01",
   "step": "pay",
   "summary_md": "**Machine Payments Protocol** (`MPP`) is an open standard for machine-to-machine payments launched on 2026-03-18 and maintained by Tempo Labs and Stripe, whose core wire specification is published as the `Payment` HTTP Authentication Scheme. When a client requests a protected resource, the server responds with `402 Payment Required` and a `WWW-Authenticate: Payment` challenge; the client retries with an `Authorization: Payment` credential proving payment, and on success servers SHOULD include a `Payment-Receipt` header. Published as an individual Standards Track Internet-Draft (`draft-httpauth-payment-01`, updated 2026-09-09 on the IETF Datatracker and expiring 13 March 2027), the specification is an active individual submission and is not formally endorsed by an IETF working group.",
   "track": "vendor-consortium",
   "version": {
    "label": "draft-httpauth-payment-01",
    "date": "2026-09-09"
   },
   "watch": [
    {
     "type": "page",
     "url": "https://mpp.dev/overview.md",
     "selector": "main",
     "cadence": "weekly"
    },
    {
     "type": "ietf",
     "doc": "draft-httpauth-payment"
    },
    {
     "type": "github",
     "repo": "tempoxyz/mpp-specs",
     "mode": "tag",
     "version": false
    }
   ],
   "use_cases": [
    "accept-agent-payments",
    "agent-checkout"
   ],
   "audience": [
    "platform",
    "agent-builder",
    "standards-body"
   ],
   "pairs_with": [
    "x402",
    "l402",
    "ap2",
    "agentic-commerce-protocol",
    "cloudflare-pay-per-crawl"
   ],
   "prerequisites": [],
   "ietf_tracker": {
    "doc": "draft-httpauth-payment",
    "rev": "01",
    "state": "active",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-09-09",
    "expires_utc": "2027-03-13",
    "as_of": "2026-11-08",
    "source": "https://datatracker.ietf.org/doc/draft-httpauth-payment/",
    "source_label": "per IETF Datatracker"
   },
   "tier": "flagship",
   "lifecycle_status": "active_draft",
   "wire_archetype": "payments_onchain",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "This page is about the Machine Payments Protocol (MPP), an open protocol co-authored by Tempo and Stripe and launched on March 18, 2026, whose core is the Payment HTTP authentication scheme. It is not x402, whose v2 specification uses a PAYMENT-REQUIRED header and a PAYMENT-SIGNATURE header. It is not L402, whose challenge is a WWW-Authenticate: L402 header containing a macaroon and a Lightning invoice. It is not the bare 402 status code: RFC 9110 says the 402 (Payment Required) status code is reserved for future use. In Lightning, basic_mpp means a node can receive basic multi-part payments. Microsoft uses .mpp for Microsoft Project desktop client files. AWS writes Machine Payment Protocol (singular). mpp.dev, Stripe, and Tempo write Machine Payments Protocol. [1][2][3][4][5][6][7][8][9][10]",
   "v05_elevator_pitch_md": "MPP (Machine Payments Protocol) is an HTTP payment specification co-authored by Tempo Labs and Stripe that lets autonomous agents and automated clients pay for API calls and digital resources on the fly. Giving concrete wire semantics to the long-reserved `402 Payment Required` HTTP status, servers return a `WWW-Authenticate: Payment` challenge and clients retry the request with an `Authorization: Payment` credential across any supported payment rail. [3][11]",
   "v05_lead_md": "**Machine Payments Protocol** (`MPP`) is an open standard for machine-to-machine payments launched on 2026-03-18 and maintained by Tempo Labs and Stripe, whose core wire specification is published as the `Payment` HTTP Authentication Scheme. [2][11][12] When a client requests a protected resource, the server responds with `402 Payment Required` and a `WWW-Authenticate: Payment` challenge; the client retries with an `Authorization: Payment` credential proving payment, and on success servers SHOULD include a `Payment-Receipt` header. [11][13] Published as an individual Standards Track Internet-Draft (`draft-httpauth-payment-01`, updated 2026-09-09 on the IETF Datatracker and expiring 13 March 2027), the specification is an active individual submission and is not formally endorsed by an IETF working group. [14]",
   "v05_identity_sentence_md": "**Machine Payments Protocol** (`MPP`) is an open standard for machine-to-machine payments launched on 2026-03-18 and maintained by Tempo Labs and Stripe, whose core wire specification is published as the `Payment` HTTP Authentication Scheme. [2][11][12]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Pay](/category/pay/) (`pay`)"
    },
    {
     "label": "Form",
     "value_md": "HTTP header (`http-header`)"
    },
    {
     "label": "Originated by",
     "value_md": "Tempo and Stripe, 18 March 2026; draft authors are Tempo Labs and Stripe. [2][3][10]"
    },
    {
     "label": "Governed by",
     "value_md": "Tempo Labs and Stripe maintain it on GitHub; this individual I-D is not IETF-endorsed. [11][12][14]"
    },
    {
     "label": "Track",
     "value_md": "Individual Internet-Draft `draft-httpauth-payment-01`, intended Standards Track, not IETF-endorsed. [3][14]"
    },
    {
     "label": "IETF tracker",
     "value_md": "[draft-httpauth-payment](https://datatracker.ietf.org/doc/draft-httpauth-payment/): Active Internet-Draft (individual); last updated 2026-09-09; IESG state I-D Exists. [14]"
    },
    {
     "label": "Status",
     "value_md": "IESG state I-D Exists, updated 2026-09-09. Tempo, card/Stripe, and Lightning are in production. [14][15][16][17]"
    },
    {
     "label": "Version",
     "value_md": "Datatracker `draft-httpauth-payment-01` published 9 September 2026; paymentauth.org editor's copy of that draft name is dated 2 November 2026 (`2026-11-02`; expires 6 May 2027). [3][13]"
    },
    {
     "label": "Headers",
     "value_md": "`WWW-Authenticate: Payment` challenge; default credential `Authorization`; selected `Payment-Authorization` is MUST; `Payment-Receipt` is SHOULD. `Payment-Authorization` is RECOMMENDED when a resource needs to preserve `Authorization` for ordinary authentication. [3][11][13][18][19]"
    },
    {
     "label": "Schemes",
     "value_md": "HTTP authentication scheme \"Payment\". [3]"
    },
    {
     "label": "Networks",
     "value_md": "Documented methods: `tempo`, `stripe`, `evm`, `card`, `lightning`, `solana`, `xrpl`, `stellar`, `monad`, `nearintents`, `redotpay`. [15][18]"
    },
    {
     "label": "Transports",
     "value_md": "HTTP 402 with the Payment scheme; an MCP binding maps Challenge, Credential, and Receipt. [11][15]"
    },
    {
     "label": "Message format",
     "value_md": "Challenge `request` is base64url JSON; intents belong to a proposed IANA HTTP Payment Intents registry. [3][11]"
    },
    {
     "label": "IANA registration",
     "value_md": "Section 12 proposes the `Payment` scheme, three headers, and two registries; the IANA CSV lists no `Payment`. [3][14][20]"
    },
    {
     "label": "Specification",
     "value_md": "[The \"Payment\" HTTP Authentication Scheme (draft-httpauth-payment-01)](https://datatracker.ietf.org/doc/html/draft-httpauth-payment-01) [3]"
    },
    {
     "label": "Found at",
     "value_md": "Servers answer HTTP 402 with `WWW-Authenticate: Payment`. Curated directory is mpp.dev/services. [11][21][22]"
    },
    {
     "label": "Licence",
     "value_md": "No implementation fees. IETF text is under BCP 78; code uses Revised BSD; mpp-specs uses CC0 1.0. [3][11][12][15]"
    }
   ],
   "v05_problem_md": "Although RFC 9110 reserved the HTTP `402` (`Payment Required`) status code for future use, the status code was never standardized in HTTP/1.1 with a common challenge-response wire format. [3][6] The Payment specification defines the \"Payment\" authentication scheme that gives 402 its semantics, so a resource can require a fulfilled payment challenge before access. MPP uses 402 when a server offers a payment Challenge, including retryable Credential validation failures, unlike schemes that use 401 for failed Credentials. [3][23] The protocol is payment-method agnostic and supports any payment network or currency through registered payment method identifiers. Specific payment methods are defined in separate payment method specifications, and each is defined and maintained by the rail behind it. [3][12]",
   "v05_mechanism_delta_md": "The Payment specification defines the \"Payment\" authentication scheme that gives 402 its semantics, so a resource can require a fulfilled payment challenge before access. MPP uses 402 when a server offers a payment Challenge, including retryable Credential validation failures, unlike schemes that use 401 for failed Credentials. [3][23]",
   "v05_scope_boundary_md": "The protocol is payment-method agnostic and supports any payment network or currency through registered payment method identifiers. Specific payment methods are defined in separate payment method specifications, and each is defined and maintained by the rail behind it. [3][12]",
   "v05_fuzzy_additions": [
    {
     "id": "http-402-payment-challenge-credential-retry-and-payment-receipt",
     "heading": "HTTP 402 Payment challenge, Credential retry, and Payment-Receipt",
     "body_md": "`draft-httpauth-payment-01` extends HTTP authentication over status code 402 with structured challenge parameters, bound challenge identifiers, single-use payment credentials, and optional settlement receipts. [12][13]",
     "bullets": [
      {
       "label": "Challenge parameters",
       "text_md": "A `WWW-Authenticate: Payment` challenge MUST include a non-empty `id`, a `realm`, a lowercase `method`, and a registered `intent`. The `request` MUST be base64url JSON serialized with JCS and no padding. Servers SHOULD include `expires`, and SHOULD include `digest` when the request has a body. [13]"
      },
      {
       "label": "Stateless HMAC binding",
       "text_md": "Servers MUST bind `id` to `realm`, `method`, `intent`, and `request`, and to `expires`, `digest`, `opaque`, and `header` when present. They MAY verify that binding with stored state or with stateless `HMAC-SHA256`. Servers that use HMAC-SHA256 SHOULD set `id` to the base64url HMAC over the pipe-joined challenge fields, using a server secret. [13]"
      },
      {
       "label": "Credential retry",
       "text_md": "When a challenge omits `header`, clients MUST retry in `Authorization` as `Authorization: Payment` followed by base64url JSON. That object MUST echo the `challenge` parameters and include a method-specific `payload`. A `source` payer identifier is optional and RECOMMENDED in DID format. Because credentials are bearer tokens, TLS is required, and clients MUST verify `request` amount and recipient rather than `description` before paying. Payment methods used with the scheme MUST provide single-use proof semantics. A payment proof MUST be usable exactly once; subsequent attempts to use the same proof MUST be rejected by the payment method infrastructure. [13]"
      },
      {
       "label": "Receipt and problem types",
       "text_md": "Servers SHOULD include a `Payment-Receipt` header on successful responses and MUST NOT return it on error responses; `Payment-Receipt` is an unsigned `base64url-nopad` JSON receipt (`status`, `method`, `timestamp`, and `reference`), not a cryptographic proof. Servers SHOULD return Problem Details (`application/problem+json`, such as `payment-required`, `payment-insufficient`, and `payment-expired`) for payment errors. [13]"
      }
     ]
    },
    {
     "id": "payment-method-modularity-charge-vs-session-intents-and-service-discovery",
     "heading": "Payment method modularity, Charge vs Session intents, and service discovery",
     "body_md": "Across stablecoins, cards through Stripe, and custom payment methods, MPP distinguishes `charge` for a one-time payment from `session` for measured usage. Model Context Protocol tools use the same flow through JSON-RPC, and agents can fetch advisory OpenAPI summaries from the Services MCP. [21][24]",
     "bullets": [
      {
       "label": "Pluggable payment methods",
       "text_md": "The `method` parameter names the rail: `tempo` uses TIP-20 stablecoins, `stripe` is traditional payment methods through Stripe, `lightning` is Bitcoin over the Lightning Network, and `card` uses encrypted network tokens. Stripe's MPP guide describes card payments through Shared Payment Tokens (SPTs). [18][25]"
      },
      {
       "label": "Charge and session intents",
       "text_md": "A `charge` intent collects a fixed one-time payment before the resource is returned. A `session` intent is for streaming, pay-as-you-go payments: the client deposits funds into a channel reserve, then issues signed vouchers off-chain, and the server periodically settles those vouchers on-chain. [15][26]"
      },
      {
       "label": "MCP JSON-RPC transport",
       "text_md": "MPP includes an MCP transport binding that maps the Challenge-Credential-Receipt flow onto the Model Context Protocol, so MCP servers can monetize tool calls directly. HTTP services exchange payment data in authentication headers, while MCP tools use that same flow through JSON-RPC. [15][24]"
      },
      {
       "label": "Service discovery",
       "text_md": "Clients can browse the mpp.dev service directory or call the Services MCP to rank services, inspect payment offers, and fetch advisory OpenAPI summaries. Runtime 402 Challenges from the target service remain the authoritative source of current payment terms. [21]"
      }
     ]
    }
   ],
   "v05_diagram": {
    "title": "Section 4.1 Payment request flow",
    "heading": "Section 4.1 Payment request flow",
    "mermaid": "sequenceDiagram\n    participant Client\n    participant Server\n    Client->>Server: (1) GET /resource\n    Server-->>Client: (2) 402 Payment Required, WWW-Authenticate Payment\n    Note over Client: (3) Fulfills the payment challenge\n    Client->>Server: (4) GET /resource, Authorization Payment credential\n    Note over Server: (5) Verifies and settles\n    Server-->>Client: (6) 200 OK, Payment-Receipt",
    "caption_md": "Client sends `GET /resource`. Server returns `402 Payment Required` with `WWW-Authenticate: Payment`. Client retries with `Authorization: Payment`. Server returns `200 OK` with `Payment-Receipt`. [3]"
   },
   "v05_wire_artifact": {
    "title": "Appendix B.1 one-time charge: HTTP 402 Payment challenge",
    "heading": "Appendix B.1 one-time charge: HTTP 402 Payment challenge",
    "lang": "http",
    "code": "HTTP/1.1 402 Payment Required\nCache-Control: no-store\nContent-Type: application/problem+json\nWWW-Authenticate: Payment id=\"qB3wErTyU7iOpAsD9fGhJk\",\n    realm=\"api.example.com\",\n    method=\"invoice\",\n    intent=\"charge\",\n    expires=\"2025-01-15T12:05:00Z\",\n    request=\"eyJhbW91bnQiOiIxMDAwIiwiY3VycmVuY3kiOiJVU0QiLCJpbnZvaWNlIjoiaW52XzEyMzQ1In0\"\n\n{\n  \"type\": \"https://paymentauth.org/problems/payment-required\",\n  \"title\": \"Payment Required\",\n  \"status\": 402,\n  \"detail\": \"Payment required for access.\",\n  \"challengeId\": \"qB3wErTyU7iOpAsD9fGhJk\"\n}",
    "caption_md": "Appendix B.1 one-time charge. After the challenge, the client sends `Authorization: Payment` and the server returns `Payment-Receipt` on `200 OK`. [3]"
   },
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "HTTP 402 Payment Required (RFC 9110 §15.5.3)",
      "spec_or_rfc": "RFC 9110 §15.5.3",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "RFC 9110 reserves 402 for future use; MPP sends 402 with a Payment challenge, then Authorization: Payment. [1][6][11][23]"
     },
     {
      "name": "HTTP WWW-Authenticate (RFC 9110 §11.6.1)",
      "spec_or_rfc": "RFC 9110 §11.6.1",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "RFC 9110 §11.6.1 defines WWW-Authenticate; MPP's challenge uses scheme Payment and defaults the credential to Authorization. [3][6]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "x402",
      "target_name": "x402",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "x402 v2 uses PAYMENT-REQUIRED and PAYMENT-SIGNATURE plus a /settle step; MPP uses WWW-Authenticate: Payment, and mppx can serve both. [4][15][19]"
     },
     {
      "target_id": "l402",
      "target_name": "L402",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "L402 uses WWW-Authenticate: L402 plus a macaroon and Lightning invoice; MPP uses scheme Payment and Authorization. [3][5]"
     },
     {
      "target_id": "ap2",
      "target_name": "Agent Payments Protocol (AP2)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "AP2 secures Payment and Checkout Mandates with SD-JWTs; MPP is the Payment HTTP authentication scheme on one resource. [3][27]"
     },
     {
      "target_id": "agentic-commerce-protocol",
      "target_name": "Agentic Commerce Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "ACP, maintained by OpenAI and Stripe, connects buyers, agents, and businesses for checkout; MPP pays for one HTTP resource. [3][28]"
     },
     {
      "target_id": "cloudflare-pay-per-crawl",
      "target_name": "Cloudflare Pay Per Crawl",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "Pay Per Crawl returns HTTP 402 with a crawler-price header; MPP's challenge is WWW-Authenticate with scheme Payment. [3][29][30]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (15 probed or cited examples across 3 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).",
    "side_a": {
     "visible": true,
     "heading": "Sellers, platforms & payment rails",
     "col4_header": "Payment method (`tempo`, `stripe`, `evm`), intent & asset",
     "note_md": null,
     "rows": [
      {
       "actor": "Stripe",
       "role": "Payment rail (Co-author)",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-30",
       "col4_md": "`stripe` `charge` via cards, buy-now-pay-later SPTs, and stablecoin offramp into the Stripe balance.",
       "source_md": "[Stripe MPP Docs (checked 2026-10-30)](https://docs.stripe.com/payments/machine/mpp) [25] · [Stripe Blog (2026-03-18)](https://stripe.com/blog/machine-payments-protocol) [2] · [mpp.dev Payment methods](https://mpp.dev/payment-methods.md) [18] · [mpp.dev Intents](https://mpp.dev/intents.md) [26]"
      },
      {
       "actor": "Tempo (Tempo Labs / Paradigm)",
       "role": "Settlement chain (Co-author)",
       "status": "Supported",
       "status_display": "Supported · as of 2026-03-18",
       "col4_md": "`tempo` supports `charge`, `session`, and `subscription`; Tempo Labs and Stripe maintain the spec.",
       "source_md": "[Tempo Mainnet Blog (2026-03-18)](https://tempo.xyz/blog/mainnet/) [10] · [mpp.dev Intents](https://mpp.dev/intents.md) [26] · [mpp.dev Payment methods](https://mpp.dev/payment-methods.md) [18] · [MPP specs README](https://raw.githubusercontent.com/tempoxyz/mpp-specs/main/README.md) [11] · [Fortune (2026-03-18)](https://fortune.com/2026/03/18/stripe-tempo-paradigm-mpp-ai-payments-protocol/) [31]"
      },
      {
       "actor": "Visa",
       "role": "Payment rail (Design partner)",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Design partner extending cards on Visa's network and Acceptance Platform; Card-Based MPP Spec is live.",
       "source_md": "[Visa Perspectives (03/18/2026)](https://corporate.visa.com/en/sites/visa-perspectives/innovation/visa-card-specification-sdk-for-machine-payments-protocol.html) [16] · [Tempo Mainnet Blog (2026-03-18)](https://tempo.xyz/blog/mainnet/) [10]"
      },
      {
       "actor": "Lightning Labs (Aperture)",
       "role": "Reverse proxy",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-30",
       "col4_md": "Aperture reverse proxy implements `L402` and `MPP`, in production on Loop and Pool.",
       "source_md": "[Aperture Docs (checked 2026-10-30)](https://docs.lightning.engineering/lightning-network-tools/aperture) [32]"
      },
      {
       "actor": "Browserbase",
       "role": "Seller",
       "status": "Live (HTTP 402)",
       "status_display": "Live (HTTP 402) · checked 2026-10-30",
       "col4_md": "HTTP 402 on POST `/browser/session/create`; catalog `tempo` and `stripe` intent `charge`.",
       "source_md": "[mpp.browserbase.com/browser/session/create (problem document)](https://mpp.browserbase.com/browser/session/create) [17] · [mpp.dev/api/services (checked 2026-10-30)](https://mpp.dev/api/services) [33] · [Stripe Blog (2026-03-18)](https://stripe.com/blog/machine-payments-protocol) [2]"
      },
      {
       "actor": "PostalForm",
       "role": "Seller",
       "status": "Listed",
       "status_display": "Listed · as of 2026-10-30",
       "col4_md": "Catalog active: `tempo` and `stripe` `charge`; POST `/api/machine/mpp/orders` pays print-and-mail.",
       "source_md": "[mpp.dev/api/services (checked 2026-10-30)](https://mpp.dev/api/services) [33] · [Stripe Blog (2026-03-18)](https://stripe.com/blog/machine-payments-protocol) [2]"
      },
      {
       "actor": "StableEnrich",
       "role": "Seller",
       "status": "Listed",
       "status_display": "Listed · as of 2026-10-30",
       "col4_md": "Catalog active: Merit Systems, `tempo` `charge`; POST `/api/apollo/people-search` finds prospects.",
       "source_md": "[mpp.dev/api/services (checked 2026-10-30)](https://mpp.dev/api/services) [33]"
      },
      {
       "actor": "Dune",
       "role": "Seller",
       "status": "Listed",
       "status_display": "Listed · as of 2026-10-30",
       "col4_md": "Catalog active: `tempo` intent `session`; POST `/api/v1/sql/execute` at `https://api.dune.com`.",
       "source_md": "[mpp.dev/api/services (checked 2026-10-30)](https://mpp.dev/api/services) [33]"
      },
      {
       "actor": "Alchemy",
       "role": "Seller",
       "status": "Listed",
       "status_display": "Listed · as of 2026-10-30",
       "col4_md": "Catalog active: `tempo` and `stripe` `charge`; POST `/:network/v2` at `https://mpp.alchemy.com`.",
       "source_md": "[mpp.dev/api/services (checked 2026-10-30)](https://mpp.dev/api/services) [33]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Buying agents, wallets & client SDKs",
     "col4_header": "Supported methods, CLI/SDK surface & scope",
     "note_md": null,
     "rows": [
      {
       "actor": "Stripe Link CLI",
       "role": "Wallet CLI & MCP server (Co-author)",
       "status": "Partial",
       "status_display": "Partial · as of 2026-10-30",
       "col4_md": "`npx skills add stripe/link-cli` provisions SPT credentials; `mpp pay` buys (US and Canada).",
       "source_md": "[stripe/link-cli on GitHub](https://github.com/stripe/link-cli) [34] · [Stripe MPP Docs (checked 2026-10-30)](https://docs.stripe.com/payments/machine/mpp) [25]"
      },
      {
       "actor": "mppx (Tempo Labs & Wevm)",
       "role": "Client SDK & CLI (Co-author)",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-30",
       "col4_md": "`mppx` is the Tempo Labs and Wevm reference SDK; `mppx validate` checks sandbox and live roundtrips.",
       "source_md": "[mpp.dev/sdk.md (checked 2026-10-30)](https://mpp.dev/sdk.md) [35] · [mpp.dev Overview](https://mpp.dev/overview.md) [1] · [mpp.dev FAQ](https://mpp.dev/faq.md) [15] · [Stripe MPP Docs](https://docs.stripe.com/payments/machine/mpp) [25]"
      },
      {
       "actor": "AWS (Amazon Bedrock AgentCore payments)",
       "role": "Agent platform / runtime",
       "status": "Supported",
       "status_display": "Supported · as of 2026-08-18",
       "col4_md": "GA 18 August 2026: AgentCore payments pays an MPP service with no extra code.",
       "source_md": "[AWS ML Blog (18 AUG 2026)](https://aws.amazon.com/blogs/machine-learning/amazon-bedrock-agentcore-payments-is-now-generally-available-enabling-agents-to-transact-safely-and-autonomously-at-scale/) [9]"
      },
      {
       "actor": "Cloudflare Agents SDK",
       "role": "Agent SDK / runtime",
       "status": "Supported",
       "status_display": "Supported · as of 2026-08-05",
       "col4_md": "Agents SDK pays HTTP and MCP tools via `mppx`; the example creates `tempo.charge`.",
       "source_md": "[Cloudflare Pay from the Agents SDK (Aug 5, 2026)](https://developers.cloudflare.com/agents/tools/payments/mpp/pay-from-agents-sdk/) [36] · [Cloudflare MPP (Aug 5, 2026)](https://developers.cloudflare.com/agents/tools/payments/mpp/) [24]"
      },
      {
       "actor": "Tempo CLI Wallet",
       "role": "Wallet CLI (Co-author)",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-30",
       "col4_md": "Tempo CLI wallet funds agent use of MPP; the directory accepts production-ready services.",
       "source_md": "[mpp.dev/services (checked 2026-10-30)](https://mpp.dev/services) [21]"
      }
     ]
    },
    "additional_tables": [
     {
      "visible": true,
      "heading": "Community registries",
      "col4_header": "What the list covers",
      "note_md": null,
      "rows": [
       {
        "actor": "Awesome MPP",
        "role": "Community registry",
        "status": "Listed",
        "status_display": "Listed · checked 2026-11-06",
        "col4_md": "Curated list of MPP specifications, SDKs, and services.",
        "source_md": "[Awesome MPP](https://github.com/mbeato/awesome-mpp) [37]"
       }
      ]
     }
    ],
    "censuses": [
     {
      "label": "mpp.dev/api/services — catalog size (fetched 2026-10-30)",
      "as_of": "2026-10-30",
      "value_md": "138 services in the version 1 catalog at mpp.dev/api/services (counted across the services array on 2026-10-30). [33]"
     },
     {
      "label": "mpp.dev/api/services — status breakdown (fetched 2026-10-30)",
      "as_of": "2026-10-30",
      "value_md": "136 active, 1 beta (tempo-api), and 1 maintenance (govlaws). Those three status values are the only ones in the 138-service catalog. [33]"
     },
     {
      "label": "mpp.dev/api/services — method distribution (fetched 2026-10-30)",
      "as_of": "2026-10-30",
      "value_md": "Method keys on the 138 services: 135 tempo, 10 stripe, and 1 evm. A service can list more than one method, so these counts are not a partition of 138. The evm method is Laso Finance, intent charge. Both non-active services (tempo-api beta and govlaws maintenance) list tempo, which is why tempo (135) is not the same count as active (136). [18][33]"
     }
    ],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "s402",
     "target_name": "s402",
     "relation_label": "Peer alternative",
     "delta": "Retired in September 2026, s402 paid with a signed Sui transaction (including Programmable Transaction Blocks for the prepaid scheme) inside the x402 payment-required envelope, whereas MPP pays with Authorization: Payment answering WWW-Authenticate: Payment.",
     "item_md": "**[s402](/protocols/s402/)** (Peer alternative) — Retired in September 2026, s402 paid with a signed Sui transaction (including Programmable Transaction Blocks for the prepaid scheme) inside the x402 payment-required envelope, whereas MPP pays with Authorization: Payment answering WWW-Authenticate: Payment."
    },
    {
     "target_id": "agentic-payments-gating-model",
     "target_name": "Agent-Initiated Payment Gating",
     "relation_label": "Complements",
     "delta": "The draft cites the HTTP Payment authentication scheme and MPP as wires that can satisfy its pre-fulfilment gate, and the draft's own content is the task state machine, which defines no protocol bytes.",
     "item_md": "**[Agent-Initiated Payment Gating](/protocols/agentic-payments-gating-model/)** (Complements) — The draft cites the HTTP Payment authentication scheme and MPP as wires that can satisfy its pre-fulfilment gate, and the draft's own content is the task state machine, which defines no protocol bytes."
    },
    {
     "target_id": "kyapay-token",
     "target_name": "KYAPay Token",
     "relation_label": "Peer alternative",
     "delta": "KYAPay is presented as a PAY or KYA-PAY JWT in the KYAPay-Token header, while MPP's retry credential is Authorization: Payment answering a WWW-Authenticate: Payment challenge.",
     "item_md": "**[KYAPay Token](/protocols/kyapay-token/)** (Peer alternative) — KYAPay is presented as a PAY or KYA-PAY JWT in the KYAPay-Token header, while MPP's retry credential is Authorization: Payment answering a WWW-Authenticate: Payment challenge."
    },
    {
     "item_md": "**[Pay protocols](/category/pay/)** — Category index for `pay` standards."
    }
   ],
   "v05_compiled_md": "---\nid: mpp\ntitle: \"Machine Payments Protocol (MPP)\"\ntier: flagship\nlifecycle_status: active_draft\ncategory: pay\nform: http-header\nwire_archetype: payments_onchain\nspec_url: https://datatracker.ietf.org/doc/html/draft-httpauth-payment-01\nlast_checked: 2026-11-12\n---\n\n# Machine Payments Protocol (MPP)\n\n**Category:** [Pay](/category/pay/) (`pay`) · **Form:** HTTP header (`http-header`) · **Last checked:** 2026-11-12\n\n> *This page is about the Machine Payments Protocol (MPP), an open protocol co-authored by Tempo and Stripe and launched on March 18, 2026, whose core is the Payment HTTP authentication scheme. It is not x402, whose v2 specification uses a PAYMENT-REQUIRED header and a PAYMENT-SIGNATURE header. It is not L402, whose challenge is a WWW-Authenticate: L402 header containing a macaroon and a Lightning invoice. It is not the bare 402 status code: RFC 9110 says the 402 (Payment Required) status code is reserved for future use. In Lightning, basic_mpp means a node can receive basic multi-part payments. Microsoft uses .mpp for Microsoft Project desktop client files. AWS writes Machine Payment Protocol (singular). mpp.dev, Stripe, and Tempo write Machine Payments Protocol. [1][2][3][4][5][6][7][8][9][10]*\n\n> **In brief:** MPP (Machine Payments Protocol) is an HTTP payment specification co-authored by Tempo Labs and Stripe that lets autonomous agents and automated clients pay for API calls and digital resources on the fly. Giving concrete wire semantics to the long-reserved `402 Payment Required` HTTP status, servers return a `WWW-Authenticate: Payment` challenge and clients retry the request with an `Authorization: Payment` credential across any supported payment rail. [3][11]\n\n**Machine Payments Protocol** (`MPP`) is an open standard for machine-to-machine payments launched on 2026-03-18 and maintained by Tempo Labs and Stripe, whose core wire specification is published as the `Payment` HTTP Authentication Scheme. [2][11][12] When a client requests a protected resource, the server responds with `402 Payment Required` and a `WWW-Authenticate: Payment` challenge; the client retries with an `Authorization: Payment` credential proving payment, and on success servers SHOULD include a `Payment-Receipt` header. [11][13] Published as an individual Standards Track Internet-Draft (`draft-httpauth-payment-01`, updated 2026-09-09 on the IETF Datatracker and expiring 13 March 2027), the specification is an active individual submission and is not formally endorsed by an IETF working group. [14]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Pay](/category/pay/) (`pay`) |\n| **Form** | HTTP header (`http-header`) |\n| **Originated by** | Tempo and Stripe, 18 March 2026; draft authors are Tempo Labs and Stripe. [2][3][10] |\n| **Governed by** | Tempo Labs and Stripe maintain it on GitHub; this individual I-D is not IETF-endorsed. [11][12][14] |\n| **Track** | Individual Internet-Draft `draft-httpauth-payment-01`, intended Standards Track, not IETF-endorsed. [3][14] |\n| **IETF tracker** | [draft-httpauth-payment](https://datatracker.ietf.org/doc/draft-httpauth-payment/): Active Internet-Draft (individual); last updated 2026-09-09; IESG state I-D Exists. [14] |\n| **Status** | IESG state I-D Exists, updated 2026-09-09. Tempo, card/Stripe, and Lightning are in production. [14][15][16][17] |\n| **Version** | Datatracker `draft-httpauth-payment-01` published 9 September 2026; paymentauth.org editor's copy of that draft name is dated 2 November 2026 (`2026-11-02`; expires 6 May 2027). [3][13] |\n| **Headers** | `WWW-Authenticate: Payment` challenge; default credential `Authorization`; selected `Payment-Authorization` is MUST; `Payment-Receipt` is SHOULD. `Payment-Authorization` is RECOMMENDED when a resource needs to preserve `Authorization` for ordinary authentication. [3][11][13][18][19] |\n| **Schemes** | HTTP authentication scheme \"Payment\". [3] |\n| **Networks** | Documented methods: `tempo`, `stripe`, `evm`, `card`, `lightning`, `solana`, `xrpl`, `stellar`, `monad`, `nearintents`, `redotpay`. [15][18] |\n| **Transports** | HTTP 402 with the Payment scheme; an MCP binding maps Challenge, Credential, and Receipt. [11][15] |\n| **Message format** | Challenge `request` is base64url JSON; intents belong to a proposed IANA HTTP Payment Intents registry. [3][11] |\n| **IANA registration** | Section 12 proposes the `Payment` scheme, three headers, and two registries; the IANA CSV lists no `Payment`. [3][14][20] |\n| **Specification** | [The \"Payment\" HTTP Authentication Scheme (draft-httpauth-payment-01)](https://datatracker.ietf.org/doc/html/draft-httpauth-payment-01) [3] |\n| **Found at** | Servers answer HTTP 402 with `WWW-Authenticate: Payment`. Curated directory is mpp.dev/services. [11][21][22] |\n| **Licence** | No implementation fees. IETF text is under BCP 78; code uses Revised BSD; mpp-specs uses CC0 1.0. [3][11][12][15] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [HTTP 402 Payment challenge, Credential retry, and Payment-Receipt](#http-402-payment-challenge-credential-retry-and-payment-receipt)\n3. [Payment method modularity, Charge vs Session intents, and service discovery](#payment-method-modularity-charge-vs-session-intents-and-service-discovery)\n4. [Counterparts and related standards](#counterparts-and-related-standards)\n5. [Adoption and ecosystem](#adoption-and-ecosystem)\n6. [See also](#see-also)\n7. [References](#references)\n\n---\n\n## Problem and scope\n\nAlthough RFC 9110 reserved the HTTP `402` (`Payment Required`) status code for future use, the status code was never standardized in HTTP/1.1 with a common challenge-response wire format. [3][6] The Payment specification defines the \"Payment\" authentication scheme that gives 402 its semantics, so a resource can require a fulfilled payment challenge before access. MPP uses 402 when a server offers a payment Challenge, including retryable Credential validation failures, unlike schemes that use 401 for failed Credentials. [3][23] The protocol is payment-method agnostic and supports any payment network or currency through registered payment method identifiers. Specific payment methods are defined in separate payment method specifications, and each is defined and maintained by the rail behind it. [3][12]\n\n### Section 4.1 Payment request flow\n\n```mermaid\nsequenceDiagram\n    participant Client\n    participant Server\n    Client->>Server: (1) GET /resource\n    Server-->>Client: (2) 402 Payment Required, WWW-Authenticate Payment\n    Note over Client: (3) Fulfills the payment challenge\n    Client->>Server: (4) GET /resource, Authorization Payment credential\n    Note over Server: (5) Verifies and settles\n    Server-->>Client: (6) 200 OK, Payment-Receipt\n```\n\n*Client sends `GET /resource`. Server returns `402 Payment Required` with `WWW-Authenticate: Payment`. Client retries with `Authorization: Payment`. Server returns `200 OK` with `Payment-Receipt`. [3]*\n\n### Appendix B.1 one-time charge: HTTP 402 Payment challenge\n\n```http\nHTTP/1.1 402 Payment Required\nCache-Control: no-store\nContent-Type: application/problem+json\nWWW-Authenticate: Payment id=\"qB3wErTyU7iOpAsD9fGhJk\",\n    realm=\"api.example.com\",\n    method=\"invoice\",\n    intent=\"charge\",\n    expires=\"2025-01-15T12:05:00Z\",\n    request=\"eyJhbW91bnQiOiIxMDAwIiwiY3VycmVuY3kiOiJVU0QiLCJpbnZvaWNlIjoiaW52XzEyMzQ1In0\"\n\n{\n  \"type\": \"https://paymentauth.org/problems/payment-required\",\n  \"title\": \"Payment Required\",\n  \"status\": 402,\n  \"detail\": \"Payment required for access.\",\n  \"challengeId\": \"qB3wErTyU7iOpAsD9fGhJk\"\n}\n```\n\n*Appendix B.1 one-time charge. After the challenge, the client sends `Authorization: Payment` and the server returns `Payment-Receipt` on `200 OK`. [3]*\n\n---\n\n## HTTP 402 Payment challenge, Credential retry, and Payment-Receipt\n\n`draft-httpauth-payment-01` extends HTTP authentication over status code 402 with structured challenge parameters, bound challenge identifiers, single-use payment credentials, and optional settlement receipts. [12][13]\n\n- **Challenge parameters:** A `WWW-Authenticate: Payment` challenge MUST include a non-empty `id`, a `realm`, a lowercase `method`, and a registered `intent`. The `request` MUST be base64url JSON serialized with JCS and no padding. Servers SHOULD include `expires`, and SHOULD include `digest` when the request has a body. [13]\n- **Stateless HMAC binding:** Servers MUST bind `id` to `realm`, `method`, `intent`, and `request`, and to `expires`, `digest`, `opaque`, and `header` when present. They MAY verify that binding with stored state or with stateless `HMAC-SHA256`. Servers that use HMAC-SHA256 SHOULD set `id` to the base64url HMAC over the pipe-joined challenge fields, using a server secret. [13]\n- **Credential retry:** When a challenge omits `header`, clients MUST retry in `Authorization` as `Authorization: Payment` followed by base64url JSON. That object MUST echo the `challenge` parameters and include a method-specific `payload`. A `source` payer identifier is optional and RECOMMENDED in DID format. Because credentials are bearer tokens, TLS is required, and clients MUST verify `request` amount and recipient rather than `description` before paying. Payment methods used with the scheme MUST provide single-use proof semantics. A payment proof MUST be usable exactly once; subsequent attempts to use the same proof MUST be rejected by the payment method infrastructure. [13]\n- **Receipt and problem types:** Servers SHOULD include a `Payment-Receipt` header on successful responses and MUST NOT return it on error responses; `Payment-Receipt` is an unsigned `base64url-nopad` JSON receipt (`status`, `method`, `timestamp`, and `reference`), not a cryptographic proof. Servers SHOULD return Problem Details (`application/problem+json`, such as `payment-required`, `payment-insufficient`, and `payment-expired`) for payment errors. [13]\n\n---\n\n## Payment method modularity, Charge vs Session intents, and service discovery\n\nAcross stablecoins, cards through Stripe, and custom payment methods, MPP distinguishes `charge` for a one-time payment from `session` for measured usage. Model Context Protocol tools use the same flow through JSON-RPC, and agents can fetch advisory OpenAPI summaries from the Services MCP. [21][24]\n\n- **Pluggable payment methods:** The `method` parameter names the rail: `tempo` uses TIP-20 stablecoins, `stripe` is traditional payment methods through Stripe, `lightning` is Bitcoin over the Lightning Network, and `card` uses encrypted network tokens. Stripe's MPP guide describes card payments through Shared Payment Tokens (SPTs). [18][25]\n- **Charge and session intents:** A `charge` intent collects a fixed one-time payment before the resource is returned. A `session` intent is for streaming, pay-as-you-go payments: the client deposits funds into a channel reserve, then issues signed vouchers off-chain, and the server periodically settles those vouchers on-chain. [15][26]\n- **MCP JSON-RPC transport:** MPP includes an MCP transport binding that maps the Challenge-Credential-Receipt flow onto the Model Context Protocol, so MCP servers can monetize tool calls directly. HTTP services exchange payment data in authentication headers, while MCP tools use that same flow through JSON-RPC. [15][24]\n- **Service discovery:** Clients can browse the mpp.dev service directory or call the Services MCP to rank services, inspect payment offers, and fetch advisory OpenAPI summaries. Runtime 402 Challenges from the target service remain the authoritative source of current payment terms. [21]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **HTTP 402 Payment Required (RFC 9110 §15.5.3)** | `RFC 9110 §15.5.3` | Profiles classic standard | RFC 9110 reserves 402 for future use; MPP sends 402 with a Payment challenge, then Authorization: Payment. [1][6][11][23] |\n| **HTTP WWW-Authenticate (RFC 9110 §11.6.1)** | `RFC 9110 §11.6.1` | Profiles classic standard | RFC 9110 §11.6.1 defines WWW-Authenticate; MPP's challenge uses scheme Payment and defaults the credential to Authorization. [3][6] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[x402](/protocols/x402/)** | Peer alternative | x402 v2 uses PAYMENT-REQUIRED and PAYMENT-SIGNATURE plus a /settle step; MPP uses WWW-Authenticate: Payment, and mppx can serve both. [4][15][19] |\n| **[L402](/protocols/l402/)** | Peer alternative | L402 uses WWW-Authenticate: L402 plus a macaroon and Lightning invoice; MPP uses scheme Payment and Authorization. [3][5] |\n| **[Agent Payments Protocol (AP2)](/protocols/ap2/)** | Complements | AP2 secures Payment and Checkout Mandates with SD-JWTs; MPP is the Payment HTTP authentication scheme on one resource. [3][27] |\n| **[Agentic Commerce Protocol](/protocols/agentic-commerce-protocol/)** | Complements | ACP, maintained by OpenAI and Stripe, connects buyers, agents, and businesses for checkout; MPP pays for one HTTP resource. [3][28] |\n| **[Cloudflare Pay Per Crawl](/protocols/cloudflare-pay-per-crawl/)** | Peer alternative | Pay Per Crawl returns HTTP 402 with a crawler-price header; MPP's challenge is WWW-Authenticate with scheme Payment. [3][29][30] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (15 probed or cited examples across 3 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).*\n\n### Sellers, platforms & payment rails\n\n| Actor | Role | Status | Payment method (`tempo`, `stripe`, `evm`), intent & asset | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Stripe** | Payment rail (Co-author) | Supported · as of 2026-10-30 | `stripe` `charge` via cards, buy-now-pay-later SPTs, and stablecoin offramp into the Stripe balance. | [Stripe MPP Docs (checked 2026-10-30)](https://docs.stripe.com/payments/machine/mpp) [25] · [Stripe Blog (2026-03-18)](https://stripe.com/blog/machine-payments-protocol) [2] · [mpp.dev Payment methods](https://mpp.dev/payment-methods.md) [18] · [mpp.dev Intents](https://mpp.dev/intents.md) [26] |\n| **Tempo (Tempo Labs / Paradigm)** | Settlement chain (Co-author) | Supported · as of 2026-03-18 | `tempo` supports `charge`, `session`, and `subscription`; Tempo Labs and Stripe maintain the spec. | [Tempo Mainnet Blog (2026-03-18)](https://tempo.xyz/blog/mainnet/) [10] · [mpp.dev Intents](https://mpp.dev/intents.md) [26] · [mpp.dev Payment methods](https://mpp.dev/payment-methods.md) [18] · [MPP specs README](https://raw.githubusercontent.com/tempoxyz/mpp-specs/main/README.md) [11] · [Fortune (2026-03-18)](https://fortune.com/2026/03/18/stripe-tempo-paradigm-mpp-ai-payments-protocol/) [31] |\n| **Visa** | Payment rail (Design partner) | Supported · checked 2026-10-30 | Design partner extending cards on Visa's network and Acceptance Platform; Card-Based MPP Spec is live. | [Visa Perspectives (03/18/2026)](https://corporate.visa.com/en/sites/visa-perspectives/innovation/visa-card-specification-sdk-for-machine-payments-protocol.html) [16] · [Tempo Mainnet Blog (2026-03-18)](https://tempo.xyz/blog/mainnet/) [10] |\n| **Lightning Labs (Aperture)** | Reverse proxy | Supported · as of 2026-10-30 | Aperture reverse proxy implements `L402` and `MPP`, in production on Loop and Pool. | [Aperture Docs (checked 2026-10-30)](https://docs.lightning.engineering/lightning-network-tools/aperture) [32] |\n| **Browserbase** | Seller | Live (HTTP 402) · checked 2026-10-30 | HTTP 402 on POST `/browser/session/create`; catalog `tempo` and `stripe` intent `charge`. | [mpp.browserbase.com/browser/session/create (problem document)](https://mpp.browserbase.com/browser/session/create) [17] · [mpp.dev/api/services (checked 2026-10-30)](https://mpp.dev/api/services) [33] · [Stripe Blog (2026-03-18)](https://stripe.com/blog/machine-payments-protocol) [2] |\n| **PostalForm** | Seller | Listed · as of 2026-10-30 | Catalog active: `tempo` and `stripe` `charge`; POST `/api/machine/mpp/orders` pays print-and-mail. | [mpp.dev/api/services (checked 2026-10-30)](https://mpp.dev/api/services) [33] · [Stripe Blog (2026-03-18)](https://stripe.com/blog/machine-payments-protocol) [2] |\n| **StableEnrich** | Seller | Listed · as of 2026-10-30 | Catalog active: Merit Systems, `tempo` `charge`; POST `/api/apollo/people-search` finds prospects. | [mpp.dev/api/services (checked 2026-10-30)](https://mpp.dev/api/services) [33] |\n| **Dune** | Seller | Listed · as of 2026-10-30 | Catalog active: `tempo` intent `session`; POST `/api/v1/sql/execute` at `https://api.dune.com`. | [mpp.dev/api/services (checked 2026-10-30)](https://mpp.dev/api/services) [33] |\n| **Alchemy** | Seller | Listed · as of 2026-10-30 | Catalog active: `tempo` and `stripe` `charge`; POST `/:network/v2` at `https://mpp.alchemy.com`. | [mpp.dev/api/services (checked 2026-10-30)](https://mpp.dev/api/services) [33] |\n\n### Buying agents, wallets & client SDKs\n\n| Actor | Role | Status | Supported methods, CLI/SDK surface & scope | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Stripe Link CLI** | Wallet CLI & MCP server (Co-author) | Partial · as of 2026-10-30 | `npx skills add stripe/link-cli` provisions SPT credentials; `mpp pay` buys (US and Canada). | [stripe/link-cli on GitHub](https://github.com/stripe/link-cli) [34] · [Stripe MPP Docs (checked 2026-10-30)](https://docs.stripe.com/payments/machine/mpp) [25] |\n| **mppx (Tempo Labs & Wevm)** | Client SDK & CLI (Co-author) | Supported · as of 2026-10-30 | `mppx` is the Tempo Labs and Wevm reference SDK; `mppx validate` checks sandbox and live roundtrips. | [mpp.dev/sdk.md (checked 2026-10-30)](https://mpp.dev/sdk.md) [35] · [mpp.dev Overview](https://mpp.dev/overview.md) [1] · [mpp.dev FAQ](https://mpp.dev/faq.md) [15] · [Stripe MPP Docs](https://docs.stripe.com/payments/machine/mpp) [25] |\n| **AWS (Amazon Bedrock AgentCore payments)** | Agent platform / runtime | Supported · as of 2026-08-18 | GA 18 August 2026: AgentCore payments pays an MPP service with no extra code. | [AWS ML Blog (18 AUG 2026)](https://aws.amazon.com/blogs/machine-learning/amazon-bedrock-agentcore-payments-is-now-generally-available-enabling-agents-to-transact-safely-and-autonomously-at-scale/) [9] |\n| **Cloudflare Agents SDK** | Agent SDK / runtime | Supported · as of 2026-08-05 | Agents SDK pays HTTP and MCP tools via `mppx`; the example creates `tempo.charge`. | [Cloudflare Pay from the Agents SDK (Aug 5, 2026)](https://developers.cloudflare.com/agents/tools/payments/mpp/pay-from-agents-sdk/) [36] · [Cloudflare MPP (Aug 5, 2026)](https://developers.cloudflare.com/agents/tools/payments/mpp/) [24] |\n| **Tempo CLI Wallet** | Wallet CLI (Co-author) | Supported · as of 2026-10-30 | Tempo CLI wallet funds agent use of MPP; the directory accepts production-ready services. | [mpp.dev/services (checked 2026-10-30)](https://mpp.dev/services) [21] |\n\n### Community registries\n\n| Actor | Role | Status | What the list covers | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Awesome MPP** | Community registry | Listed · checked 2026-11-06 | Curated list of MPP specifications, SDKs, and services. | [Awesome MPP](https://github.com/mbeato/awesome-mpp) [37] |\n\n### Ecosystem censuses\n\n- **mpp.dev/api/services — catalog size (fetched 2026-10-30)** (*as of 2026-10-30*): 138 services in the version 1 catalog at mpp.dev/api/services (counted across the services array on 2026-10-30). [33]\n- **mpp.dev/api/services — status breakdown (fetched 2026-10-30)** (*as of 2026-10-30*): 136 active, 1 beta (tempo-api), and 1 maintenance (govlaws). Those three status values are the only ones in the 138-service catalog. [33]\n- **mpp.dev/api/services — method distribution (fetched 2026-10-30)** (*as of 2026-10-30*): Method keys on the 138 services: 135 tempo, 10 stripe, and 1 evm. A service can list more than one method, so these counts are not a partition of 138. The evm method is Laso Finance, intent charge. Both non-active services (tempo-api beta and govlaws maintenance) list tempo, which is why tempo (135) is not the same count as active (136). [18][33]\n\n---\n\n## See also\n\n- **[s402](/protocols/s402/)** *(Peer alternative)* — Retired in September 2026, s402 paid with a signed Sui transaction (including Programmable Transaction Blocks for the prepaid scheme) inside the x402 payment-required envelope, whereas MPP pays with Authorization: Payment answering WWW-Authenticate: Payment.\n- **[Agent-Initiated Payment Gating](/protocols/agentic-payments-gating-model/)** *(Complements)* — The draft cites the HTTP Payment authentication scheme and MPP as wires that can satisfy its pre-fulfilment gate, and the draft's own content is the task state machine, which defines no protocol bytes.\n- **[KYAPay Token](/protocols/kyapay-token/)** *(Peer alternative)* — KYAPay is presented as a PAY or KYA-PAY JWT in the KYAPay-Token header, while MPP's retry credential is Authorization: Payment answering a WWW-Authenticate: Payment challenge.\n- **Category:** [Pay protocols](/category/pay/)\n\n---\n\n## References\n\n1. Tempo and Stripe (mpp.dev), *What is MPP?* (checked 2026-10-30) — <https://mpp.dev/overview.md>\n2. Jeff Weinstein and Steve Kaliski (Stripe), *Introducing the Machine Payments Protocol* (2026-03-18) — <https://stripe.com/blog/machine-payments-protocol>\n3. B. Ryan, J. Moxey, T. Meagher, J. Weinstein, and S. Kaliski, *The \"Payment\" HTTP Authentication Scheme (draft-httpauth-payment-01 HTML)* (published 9 September 2026; expires 13 March 2027) — <https://datatracker.ietf.org/doc/html/draft-httpauth-payment-01>\n4. x402 Foundation, *X402 Protocol Specification* (protocol version 2) — <https://github.com/x402-foundation/x402/blob/main/specs/x402-specification-v2.md>\n5. Lightning Labs, *L402 Protocol Specification* (checked 2026-10-30) — <https://raw.githubusercontent.com/lightninglabs/L402/master/protocol-specification.md>\n6. R. Fielding, M. Nottingham, and J. Reschke (IETF), *RFC 9110: HTTP Semantics* (June 2022) — <https://www.rfc-editor.org/rfc/rfc9110.html>\n7. Lightning Network, *BOLT #9: Assigned Feature Flags* (checked 2026-10-30) — <https://raw.githubusercontent.com/lightning/bolts/master/09-features.md>\n8. Microsoft, *Import projects from the Microsoft Project desktop client* (checked 2026-10-30) — <https://learn.microsoft.com/en-us/dynamics365/project-operations/project-management/import_from_mpp>\n9. Chethan Shriyan and Madhu Samhitha Vangara (AWS), *Amazon Bedrock AgentCore payments is now generally available* (2026-08-18) — <https://aws.amazon.com/blogs/machine-learning/amazon-bedrock-agentcore-payments-is-now-generally-available-enabling-agents-to-transact-safely-and-autonomously-at-scale/>\n10. Tempo, *Tempo Mainnet Is Live: Build on Tempo Today* (2026-03-18) — <https://tempo.xyz/blog/mainnet/>\n11. Tempo Labs and Stripe, *Machine Payments Protocol (MPP)* (checked 2026-10-30) — <https://raw.githubusercontent.com/tempoxyz/mpp-specs/main/README.md>\n12. Tempo and Stripe (mpp.dev), *Governance* (checked 2026-10-30) — <https://mpp.dev/governance.md>\n13. B. Ryan, J. Moxey, T. Meagher, J. Weinstein, and S. Kaliski, *The \"Payment\" HTTP Authentication Scheme (editor rendering)* (published 2 November 2026; expires 6 May 2027) — <https://paymentauth.org/draft-httpauth-payment-01.html>\n14. IETF Datatracker, *draft-httpauth-payment — The \"Payment\" HTTP Authentication Scheme (IETF Datatracker)* (last updated 2026-09-09) — <https://datatracker.ietf.org/doc/draft-httpauth-payment/>\n15. Tempo and Stripe (mpp.dev), *Frequently asked questions* (checked 2026-10-30) — <https://mpp.dev/faq.md>\n16. Visa, *Visa introduces card spec and SDK for MPP* (2026-03-18) — <https://corporate.visa.com/en/sites/visa-perspectives/innovation/visa-card-specification-sdk-for-machine-payments-protocol.html>\n17. Browserbase, *Payment Required (browser session create)* (checked 2026-10-30) — <https://mpp.browserbase.com/browser/session/create>\n18. Tempo and Stripe (mpp.dev), *Payment methods* (checked 2026-10-30) — <https://mpp.dev/payment-methods.md>\n19. Tempo and Stripe (mpp.dev), *MPP vs x402* (checked 2026-10-30) — <https://mpp.dev/mpp-vs-x402.md>\n20. IANA, *Hypertext Transfer Protocol (HTTP) Authentication Scheme Registry (CSV)* (checked 2026-10-30) — <https://www.iana.org/assignments/http-authschemes/authschemes.csv>\n21. Machine Payments Protocol, *MPP services: APIs that accept MPP payments* (checked 2026-10-30) — <https://mpp.dev/services>\n22. Tempo, *tempoxyz/mpp* (checked 2026-10-30) — <https://github.com/tempoxyz/mpp>\n23. Tempo and Stripe (mpp.dev), *HTTP 402* (checked 2026-10-30) — <https://mpp.dev/protocol/http-402.md>\n24. Cloudflare, *MPP (Machine Payments Protocol)* (last updated 2026-08-05) — <https://developers.cloudflare.com/agents/tools/payments/mpp/>\n25. Stripe, *MPP* (checked 2026-10-30) — <https://docs.stripe.com/payments/machine/mpp>\n26. Tempo and Stripe (mpp.dev), *Intents* (checked 2026-10-30) — <https://mpp.dev/intents.md>\n27. AP2, *Agent Payments Protocol specification* (checked 2026-10-30) — <https://ap2-protocol.org/ap2/specification/>\n28. OpenAI and Stripe, *Agentic Commerce Protocol* (checked 2026-10-30) — <https://github.com/agentic-commerce-protocol/agentic-commerce-protocol>\n29. Cloudflare, *Introducing pay per crawl: Enabling content owners to charge AI crawlers for access* (published 2025-07-01; modified 2026-07-15) — <https://blog.cloudflare.com/introducing-pay-per-crawl/>\n30. Cloudflare, *What is Pay Per Crawl?* (checked 2026-10-31) — <https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/what-is-pay-per-crawl/>\n31. Ben Weiss (Fortune), *Stripe-backed crypto startup Tempo releases AI payments protocol, launches blockchain* (published 2026-03-18; modified 2026-03-18) — <https://fortune.com/2026/03/18/stripe-tempo-paradigm-mpp-ai-payments-protocol/>\n32. Lightning Labs, *Aperture* (checked 2026-10-30) — <https://docs.lightning.engineering/lightning-network-tools/aperture>\n33. Machine Payments Protocol, *MPP services catalog* (checked 2026-10-30) — <https://mpp.dev/api/services>\n34. Stripe, *link-cli* (checked 2026-10-30) — <https://github.com/stripe/link-cli>\n35. Tempo and Stripe (mpp.dev), *SDKs* (checked 2026-10-30) — <https://mpp.dev/sdk.md>\n36. Cloudflare, *Pay from the Agents SDK* (last updated 2026-08-05) — <https://developers.cloudflare.com/agents/tools/payments/mpp/pay-from-agents-sdk/>\n37. mbeato, *Awesome MPP* (fetched 2026-11-06) — <https://github.com/mbeato/awesome-mpp>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "ERC-8004",
   "adoption": {
    "level": "observed",
    "by": "ERC-8004 Identity and Reputation Registries, Virtuals Protocol, 8004scan (AltLayer), Quicknode ERC-8004 Explorer, RNWY, Agent0 SDK, and ChaosChain",
    "probe_run": null
   },
   "aliases": [
    "Trustless Agents",
    "EIP-8004"
   ],
   "analog": "DNS plus a public review/reputation ledger",
   "collisions": [],
   "discovery": {
    "mechanism": "ERC-721 Identity Registry token (agentId) resolves via agentURI to a JSON agent registration file; optional HTTPS domain proof at a fixed well-known path",
    "path": "/.well-known/agent-registration.json"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://eips.ethereum.org/EIPS/eip-8122",
     "claim": "Prem Makeig (@nxt3d), *ERC-8122: Minimal Agent Registry*, created 2025-12-17",
     "date": null,
     "quote": "This protocol proposes a lightweight onchain registry for discovering AI agents using ERC-6909 as the underlying registry design, ERC-7930 for cross-chain agent identification, and ERC-8048 for onchain metadata. / ERC-8004 provides an existing agent registry standard, but it defines a singleton registry-one per chain.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://eips.ethereum.org/EIPS/eip-8183",
     "claim": "Davide Crapis, Bryan Lim, Tay Weixiong, and Chooi Zuhwa, *ERC-8183: Agentic Commerce*, created 2026-02-25",
     "date": null,
     "quote": "ACP remains the payment and escrow layer; ERC‑8004 is the identity and reputation layer.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://eips.ethereum.org/EIPS/eip-8126",
     "claim": "Leigh Cronian (Cybercentry) and Chris Johnson (Virtuals), *ERC-8126: AI Agent Verification*, created 2026-01-15",
     "date": null,
     "quote": "This ERC defines a standard interface for verifying AI agents on Ethereum that have been registered via ERC-8004. / unified risk score (0-100) / Verification attestations can additionally be posted to ERC-8004's Validation Registry",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://raw.githubusercontent.com/ethereum/ERCs/master/ERCS/erc-8004.md",
     "claim": "Marco De Rossi, Davide Crapis, Jordan Ellis, and Erik Reppel, *ERCS/erc-8004.md (Trustless Agents)*, created 2025-08-13; fetched 2026-10-30",
     "date": null,
     "quote": "This protocol proposes to use blockchains to **discover, choose, and interact with agents across organizational boundaries** without pre-existing trust, thus enabling **open-ended agent economies**. / However, these agent communication protocols don't inherently cover agent discovery and trust. / eip: 8004 title: Trustless Agents description: Discover agents and establish trust through reputation and validation author: Marco De Rossi (@MarcoMetaMask), Davide Crapis (@dcrapis), Jordan Ellis <jordanellis@google.com>, Erik Reppel <erik.reppel@coinbase.com> discussions-to: https://ethereum-magicians.org/t/erc-8004-trustless-agents/25098 status: Draft type: Standards Track category: ERC created: 2025-08-13 / handle based on ERC-721 with URIStorage extension / New agents can be minted by calling one of these functions: … function register(string agentURI) external returns (uint256 agentId) / \"type\": \"https://eips.ethereum.org/EIPS/eip-8004#registration-v1\" / \"services\": [ { \"name\": \"web\", \"endpoint\": \"https://web.agentxyz.com/\" }, { \"name\": \"A2A\" / \"name\": \"MCP\" / \"name\": \"OASF\" / \"name\": \"ENS\" / \"name\": \"DID\" / function setAgentWallet(uint256 agentId, address newWallet, uint256 deadline, bytes calldata signature) external / \"supportedTrust\": [ \"reputation\", \"crypto-economic\", \"tee-attestation\" ] / An agent MAY optionally prove control of an HTTPS endpoint-domain by publishing https://{endpoint-domain}/.well-known/agent-registration.json / \"registrations\" / author: Marco De Rossi (@MarcoMetaMask), Davide Crapis (@dcrapis) <davide@ethereum.org>, Jordan Ellis <jordanellis@google.com>, Erik Reppel <erik.reppel@coinbase.com> discussions-to: https://ethereum-magicians.org/t/erc-8004-trustless-agents/25098 status: Draft type: Standards Track category: ERC created: 2025-08-13 requires: 155, 712, 721, 1271 / status: Draft / The *version* field in endpoints is a SHOULD, not a MUST. / three lightweight registries, which can be deployed on any L2 or on Mainnet as per-chain singletons / The Identity Registry uses ERC-721 with the URIStorage extension / tokenId* in ERC-721 is referred to as *agentId* and *tokenURI* in ERC-721 is referred to as *agentURI* / A colon-separated string {namespace}:{chainId}:{identityRegistry} / function giveFeedback(uint256 agentId, int128 value, uint8 valueDecimals, string calldata tag1, string calldata tag2, string calldata endpoint, string calldata feedbackURI, bytes32 feedbackHash) / The *valueDecimals* MUST be between 0 and 18. / valid EIP-712 signature for EOAs or ERC-1271 for smart contract wallets / publishing https://{endpoint-domain}/.well-known/agent-registration.json / description: Discover agents and establish trust through reputation and validation / Model context protocol <!-- TODO: double check that this is the correct abbreviation -->(MCP) allows servers to list and offer their capabilities (prompts, resources, tools, and completions), while Agent2Agent <!-- TODO: double check that this is the correct abbreviation -->(A2A) handles agent authentication, skills advertisement via AgentCards, direct messaging, and complete task-lifecycle orchestration. / This protocol proposes to use blockchains to discover, choose, and interact with agents across organizational boundaries without pre-existing trust / Developers can choose from different trust models: reputation systems using client feedback, validation via stake-secured re-execution, zero-knowledge machine learning (zkML) proofs, or trusted execution environment (TEE) oracles. / Payments are orthogonal to this protocol and not covered here. / The *supportedTrust* field is OPTIONAL. If absent or empty, this ERC is used only for discovery, not for trust. / function getSummary(uint256 agentId, address[] calldata clientAddresses, string tag1, string tag2) / clientAddresses MUST be provided (non-empty); results without filtering by clientAddresses are subject to Sybil/spam attacks. / While this ERC cryptographically ensures the registration file corresponds to the on-chain agent / it cannot cryptographically guarantee that advertised capabilities are functional and non-malicious. / This ERC addresses this need through three lightweight registries, which can be deployed on any L2 or on Mainnet as per-chain singletons: / function register(string agentURI) external returns (uint256 agentId) / The *agentURI* MUST resolve to the agent registration file. / Users MAY treat the endpoint-domain as verified if the file is reachable over HTTPS and includes a `registrations` entry whose `agentRegistry` and `agentId` match the on-chain agent / When the Reputation Registry is deployed, the *identityRegistry* address is set via `initialize(address identityRegistry_)` / The feedback submitter MUST NOT be the agent owner or an approved operator for *agentId*. / This function MUST be called by the owner or operator of *agentId*. / This function MUST be called by the *validatorAddress* specified in the original request. / The registration file MUST have the following structure: / New agents can be minted by calling one of these functions / A colon-separated string {namespace}:{chainId}:{identityRegistry} (e.g., eip155:1:0x742...) / eip155 for EVM chains / \"name\": \"A2A\" / Agents SHOULD have at least one registration (multiple are possible), and all fields in the registration are mandatory. / The *supportedTrust* field is OPTIONAL. / an agent MAY optionally prove control of an HTTPS endpoint-domain / containing at least a registrations list (or the full agent registration file) / The key agentWallet is reserved and cannot be set via setMetadata() or during register() (including the metadata array overload). / It represents the address where the agent receives payments and is initially set to the owner's address. / To change it, the agent owner must prove control of the new wallet by providing a valid EIP-712 signature for EOAs or ERC-1271 for smart contract wallets / function setAgentWallet(uint256 agentId, address newWallet, uint256 deadline, bytes calldata signature) / When the agent is transferred, agentWallet is automatically cleared (effectively resetting it to the zero address) and must be re-verified by the new owner. / When the Reputation Registry is deployed, the *identityRegistry* address is set via initialize(address identityRegistry_) / function getIdentityRegistry() external view returns (address identityRegistry) / function giveFeedback(uint256 agentId, int128 value, uint8 valueDecimals, string calldata tag1, string calldata tag2, string calldata endpoint, string calldata feedbackURI, bytes32 feedbackHash) external / The *agentId* must be a validly registered agent. The *valueDecimals* MUST be between 0 and 18. The feedback submitter MUST NOT be the agent owner or an approved operator for *agentId*. *tag1*, *tag2*, *endpoint*, *feedbackURI*, and *feedbackHash* are OPTIONAL. / The feedback fields *value*, *valueDecimals*, *tag1*, *tag2*, and *isRevoked* are stored in the contract storage along with the feedbackIndex (a 1-indexed counter of feedback submissions that *clientAddress* has given to *agentId*). The fields *endpoint*, *feedbackURI*, and *feedbackHash* are emitted but are not stored. / event NewFeedback(uint256 indexed agentId, address indexed clientAddress, uint64 feedbackIndex, int128 value, uint8 valueDecimals, string indexed indexedTag1, string tag1, string tag2, string endpoint, string feedbackURI, bytes32 feedbackHash) / function validationRequest(address validatorAddress, uint256 agentId, string requestURI, bytes32 requestHash) / function validationResponse(bytes32 requestHash, uint8 response, string responseURI, bytes32 responseHash, string tag) / stake-secured inference re-execution, zkML verifiers or TEE oracles / *tag1*, *tag2*, *endpoint*, *feedbackURI*, and *feedbackHash* are OPTIONAL. / // MUST FIELDS \"agentRegistry\": \"eip155:1:{identityRegistry}\", \"agentId\": 22, \"clientAddress\": \"eip155:1:{clientAddress}\", \"createdAt\": \"2025-09-23T12:00:00Z\", \"value\": 100, \"valueDecimals\": 0, // ALL OPTIONAL FIELDS / \"proofOfPayment\": { // this can be used for x402 proof of payment \"fromAddress\": \"0x00...\", \"toAddress\": \"0x00...\", \"chainId\": \"1\", \"txHash\": \"0x00...\" } / An agent registered and receiving feedback on chain A can still operate and transact on other chains / { \"name\": \"A2A\", \"endpoint\": \"https://agent.example/.well-known/agent-card.json\", \"version\": \"0.3.0\" } / { \"name\": \"MCP\", \"endpoint\": \"https://mcp.agent.eth/\", \"version\": \"2025-06-18\" } / \"x402Support\": false / how x402 payments … can enrich feedback signals",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://raw.githubusercontent.com/erc-8004/erc-8004-contracts/master/README.md",
     "claim": "erc-8004, *ERC-8004 contracts README*, fetched 2026-10-30",
     "date": null,
     "quote": "Ethereum Mainnet - IdentityRegistry: 0x8004A169FB4a3325136EB29fA0ceB6D2e539a432 - ReputationRegistry: 0x8004BAa17C55a88189AE136b182e5fdA19dE9b63 … ValidationRegistryUpgradeable.sol - Validation request/response (upgradeable) / The Validation Registry portion of the ERC-8004 spec is still under active update and discussion with the TEE community. / ERC-8004 is a community effort coordinated by Marco De Rossi (MetaMask) and Davide Crapis (EF), with the co-authorship of Jordan Ellis (Google) and Erik Reppel (Coinbase). / The Validation Registry portion of the ERC-8004 spec is still under active update / Ethereum Mainnet - IdentityRegistry: 0x8004A169FB4a3325136EB29fA0ceB6D2e539a432 - ReputationRegistry: 0x8004BAa17C55a88189AE136b182e5fdA19dE9b63 / Ethereum Mainnet - IdentityRegistry: 0x8004A169FB4a3325136EB29fA0ceB6D2e539a432 - ReputationRegistry: 0x8004BAa17C55a88189AE136b182e5fdA19dE9b63 #### Ethereum Sepolia - IdentityRegistry: 0x8004A818BFB912233c491871b3d84c89A494BD9e - ReputationRegistry: 0x8004B663056A597Dffe9eCcC1965A193B7388713 / Ethereum Mainnet … Base Mainnet … Abstract Mainnet … Arbitrum Mainnet … Avalanche Mainnet … BSC Mainnet … Celo Mainnet … Gnosis Mainnet … GOAT Network Mainnet … Linea Mainnet … Mantle Mainnet … MegaETH Mainnet … Metis Mainnet … Monad Mainnet … Optimism Mainnet … Polygon Mainnet … Robinhood Chain Mainnet … Scroll Mainnet … SKALE Base Mainnet … Soneium Mainnet … Taiko Mainnet … XLayer Mainnet … Billions Mainnet … Injective Mainnet … 0G Mainnet / Ethereum Sepolia … Base Sepolia … Abstract Testnet … Arbitrum Testnet … Avalanche Testnet … BSC Testnet … Celo Testnet … Linea Sepolia … Mantle Testnet … MegaETH Testnet … Metis Sepolia … Monad Testnet … Optimism Testnet … Polygon Amoy … Robinhood Chain Testnet … Scroll Testnet … SKALE Base Sepolia … Soneium Minato … Taiko Hoodi … XLayer Testnet … Hedera Testnet … Arc Testnet … Billions Testnet … Injective Testnet … 0G Galileo Testnet / Ethereum Sepolia - IdentityRegistry: 0x8004A818BFB912233c491871b3d84c89A494BD9e - ReputationRegistry: 0x8004B663056A597Dffe9eCcC1965A193B7388713",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://eips.ethereum.org/EIPS/eip-8004",
     "claim": "Marco De Rossi, Davide Crapis, Jordan Ellis, and Erik Reppel, *ERC-8004: Trustless Agents*, created 2025-08-13; fetched 2026-10-30",
     "date": null,
     "quote": "Draft Standards Track: ERC / Users MAY treat the endpoint-domain as verified if the file is reachable over HTTPS and includes a registrations entry whose agentRegistry and agentId match the on-chain agent; / This protocol proposes to use blockchains to discover, choose, and interact with agents across organizational boundaries without pre-existing trust, thus enabling open-ended agent economies. / Copyright and related rights waived via CC0. / lightweight registries, which can be deployed on any L2 or on Mainnet as per-chain singletons",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://raw.githubusercontent.com/sudeepb02/awesome-erc8004/main/README.md",
     "claim": "Sudeep (sudeepb02), *Awesome ERC-8004*, fetched 2026-10-30",
     "date": null,
     "quote": "The Identity Registry uses vanity address 0x8004A169... on mainnets and 0x8004A818... on testnets. / | Ethereum | 0x8004A169...432 | 0x8004BAa1...b63 | / CAIP-10: Chain-agnostic account identification / What standards does ERC-8004 build upon? / CompraBTC - Non-custodial Bitcoin DCA agent on Celo",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://rnwy.com/skill.md",
     "claim": "AI Rights Institute, *RNWY skill.md*, version 7.5.0; fetched 2026-10-30",
     "date": null,
     "quote": "Same address on all EVM chains (CREATE2): 0x8004A169FB4a3325136EB29fA0ceB6D2e539a432 / version: 7.5.0 / POST to https://rnwy.com/api/mcp / reviewer_analysis exposes sybil patterns by checking every reviewer's wallet age and funding source / Covers ERC-8004, Olas, Virtuals, and SATI registries",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://www.8004.org/blog/welcome-to-8004",
     "claim": "ERC-8004 Community, *Welcome to ERC-8004 and the open agentic economy*, published 2026-01-29",
     "date": null,
     "quote": "2026-01-29 … Today, ERC-8004, the standard for Trustless Agents, is officially live on Ethereum mainnet. / date: \"2026-01-29\" / Today, ERC-8004, the standard for Trustless Agents, is officially live on Ethereum mainnet. / The registries are deployed as singleton contracts, meaning there's one canonical deployment per chain that all agents share. / All deployments will use singleton contracts with verified, identical bytecode.",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://arxiv.org/html/2606.26028",
     "claim": "Xihan Xiong, Zelin Li, Wei Wei, Qin Wang, William Knottenbelt, and Zhipeng Wang, *Can Trustless Agents Be Trusted? An Empirical Study of the ERC-8004 Decentralized AI Agent Ecosystem*, submitted 2026-06-24; revised 2026-10-18 (v3)",
     "date": null,
     "quote": "The ERC-8004 (\"Trustless Agents\") protocol De Rossi et al. (2025) fills this gap. Introduced on the Ethereum mainnet on January 29, 2026 / QuantuLabs 8004-solana: an ERC-8004 sdk for solana. / covering the period from protocol deployment through May 13, 2026 / We crawl on-chain Identity and Reputation events, off-chain files, and x402 payment transactions. / a substantial fraction of reviewers ( 73.5 % 73.5\\%, 59.2 % 59.2\\%, and 90.6 % 90.6\\% across Ethereum, BSC, and Base) exhibit coordinated Sybil behavior",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://www.8004.org/learn",
     "claim": "ERC-8004 Community, *8004 Learn*, fetched 2026-10-30",
     "date": null,
     "quote": "Note: the Validation Registry is still undergoing technical due diligence and is not yet available. / the Validation Registry is still undergoing technical due diligence and is not yet available.",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://github.com/BRC8004/brc8004-contracts",
     "claim": "BRC8004, *BRC8004: Trustless Agents on BNB Chain*, fetched 2026-11-06",
     "date": null,
     "quote": "Implementation of the ERC-8004 protocol for agent discovery and trust through reputation on BNB Chain. / eip155:{chainId}:{identityRegistry}",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://anchor-x402.com/.well-known/agent-registration.json",
     "claim": "anchor-x402, *agent-registration.json (anchor-x402)*, fetched 2026-10-30",
     "date": null,
     "quote": "\"agentRegistry\": \"solana:101:metaplex\" / \"agentRegistry\": \"eip155:8453:0x8004A169FB4a3325136EB29fA0ceB6D2e539a432\"",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://a2a-protocol.org/latest/specification/",
     "claim": "A2A Protocol, *Agent2Agent (A2A) Protocol Specification*, fetched 2026-10-30",
     "date": null,
     "quote": "an open standard for secure communication and interoperability between AI agents. / A2A Servers MUST make an Agent Card available.",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28",
     "claim": "Model Context Protocol, *Specification 2026-07-28*, version 2026-07-28",
     "date": null,
     "quote": "MCP provides a standardized way to connect LLMs with the context they need.",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://datatracker.ietf.org/doc/draft-narajala-courtney-ansv2/",
     "claim": "Scott Courtney, Vineeth Sai Narajala, Ken Huang, Idan Habler, and Akram Sheriff, *draft-narajala-courtney-ansv2 — Agent Name Service v2 (ANS): A Domain-Anchored Trust Layer for Autonomous AI Agent Identity (IETF Datatracker)*, draft-narajala-courtney-ansv2-01; last updated 2026-10-15",
     "date": null,
     "quote": "The _ans TXT record is a connection hint published in DNS, telling a client which protocol the agent supports and where to find the metadata. / child-label records (_ans, _ans-badge, _443._tcp) / recommends that zones be DNSSEC-signed",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://github.com/x402-foundation/x402/blob/main/specs/x402-specification-v2.md",
     "claim": "x402 Foundation, *X402 Protocol Specification*, protocol version 2",
     "date": null,
     "quote": "This specification defines the core x402 protocol for internet-native payments.",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://whitepaper.virtuals.io/acp/acp-changelogs",
     "claim": "Virtuals Protocol, *ACP Changelogs*, ERC-8004 release note 2026-02-01",
     "date": null,
     "quote": "01 Feb 2026 … ERC-8004 support has been fully enabled for all agents that have completed the ACP agent registration process. … All graduated agents are automatically registered on ERC-8004. … Agent reviews and ratings are now written directly on-chain via ERC-8004, under the corresponding agent identity.",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://8004scan.io/",
     "claim": "Alt Research, *8004scan*, fetched 2026-10-30",
     "date": null,
     "quote": "Identity, reputation and validation for trustless agents across 29 chains. / \"name\":\"Alt Research\",\"url\":\"https://www.altlayer.io\"",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://erc-8004.quicknode.com/",
     "claim": "Quicknode, *ERC-8004 Explorer*, fetched 2026-10-30",
     "date": null,
     "quote": "Query ERC-8004 registrations, reputation, feedback, and validations across 32 EVM networks through a single JSON-RPC endpoint. / Pay per request in USDC over x402 / The composite formula is public",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://raw.githubusercontent.com/agent0lab/agent0-ts/main/README.md",
     "claim": "agent0lab, *Agent0 SDK*, fetched 2026-10-30",
     "date": null,
     "quote": "Agent0 is the TypeScript SDK for agentic economies. / using blockchain infrastructure (ERC-8004) / Publish MCP and A2A endpoints, with automated extraction of MCP tools and A2A skills from endpoints / OASF taxonomies / Subgraph indexing both on-chain and IPFS data",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://raw.githubusercontent.com/ChaosChain/chaoschain/main/README.md",
     "claim": "ChaosChain, *ChaosChain README*, fetched 2026-10-30",
     "date": null,
     "quote": "RewardsDistributor V4 correctly publishes verifier consensus accuracy to ERC-8004. Both sides of reputation now populated.",
     "ref": 22
    }
   ],
   "form": "onchain-registry",
   "governance": "Ethereum EIP process; no formal steward until finalized",
   "group": null,
   "history": [
    {
     "date": "2026-10-29",
     "note": "Verified record against EIP-8004 primary spec, GitHub commit history, 8004.org, live /.well-known/agent-registration.json deployments, explorers/SDKs, and arXiv:2606.26028"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "erc-8004",
   "implementation": "multi-implementation",
   "last_verified": "2026-11-06",
   "name": "ERC-8004: Trustless Agents",
   "native_status": "`status: Draft` on master ERCS/erc-8004.md (created 2025-08-13) and Draft on the published EIP page. Commit cb7ae283 (2025-10-08) is titled Move to Review; the fetched master file and published page do not contain status: Review. Newest file commit is 503591a6 (2026-01-25).",
   "origin": {
    "date": "2025-08-13",
    "org": "Marco De Rossi (@MarcoMetaMask, AI Lead, MetaMask / Consensys), Davide Crapis (@dcrapis, Head of AI, Ethereum Foundation), Jordan Ellis (jordanellis@google.com, Software Engineer, Google), and Erik Reppel (erik.reppel@coinbase.com, Head of Engineering, Coinbase)"
   },
   "part_of": null,
   "parties": [
    "agent-registry",
    "agent-agent"
   ],
   "phase": "draft",
   "probe": {
    "method": "GET",
    "on_absent": "Endpoint-domain control is not proven by this optional file; the agent's core identity may still be valid via the onchain agentURI directly",
    "parse": "JSON body has a registrations[] entry whose agentRegistry (eip155:{chainId}:{identityRegistry}) and agentId match the onchain agent being checked",
    "path": "https://{endpoint-domain}/.well-known/agent-registration.json"
   },
   "question": "Who is an agent, and what onchain identity, reputation and validation record does it carry?",
   "scope": "general",
   "spec_url": "https://eips.ethereum.org/EIPS/eip-8004",
   "step": "identify",
   "summary_md": "**ERC-8004 (Trustless Agents)** is a Standards Track Ethereum Request for Comments (drafted August 13, 2025 by Marco De Rossi, Davide Crapis, Jordan Ellis, and Erik Reppel) that specifies three on-chain singleton registries (`IdentityRegistry`, `ReputationRegistry`, and `ValidationRegistry`) for discovering and evaluating autonomous agents across organizational boundaries without pre-existing trust. Each agent is minted via `register(string agentURI)` as an ERC-721 token with `URIStorage` whose `agentURI` resolves to a registration JSON document (`\"type\": \"https://eips.ethereum.org/EIPS/eip-8004#registration-v1\"`) listing `services` entries (such as `A2A`, `MCP`, `OASF`, `ENS`, or `DID`), while binding payment addresses on-chain via `setAgentWallet`, alongside `supportedTrust` models (`reputation`, `crypto-economic`, and `tee-attestation`). Optionally, an agent can verify control of an HTTPS endpoint domain by serving a matching `registrations` entry at `/.well-known/agent-registration.json`. While the EIP specification remains in `Draft` status on `eips.ethereum.org`, deterministic `CREATE2` singleton contracts for the Identity (`0x8004A169...`) and Reputation (`0x8004BAa1...`) registries launched on Ethereum Mainnet on January 29, 2026 and are deployed across peer EVM chains, whereas the Validation Registry remains under active specification update.",
   "track": "community",
   "version": {
    "date": "2025-08-13",
    "label": "Draft EIP; registration schema `eip-8004#registration-v1` (per-endpoint `version` field is `SHOULD`)",
    "citations": [
     {
      "source_url": "https://raw.githubusercontent.com/ethereum/ERCs/master/ERCS/erc-8004.md",
      "anchor_quote": "status: Draft"
     },
     {
      "source_url": "https://raw.githubusercontent.com/ethereum/ERCs/master/ERCS/erc-8004.md",
      "anchor_quote": "\"type\": \"https://eips.ethereum.org/EIPS/eip-8004#registration-v1\""
     },
     {
      "source_url": "https://raw.githubusercontent.com/ethereum/ERCs/master/ERCS/erc-8004.md",
      "anchor_quote": "The *version* field in endpoints is a SHOULD, not a MUST."
     }
    ]
   },
   "watch": [
    {
     "type": "erc",
     "num": 8004
    }
   ],
   "use_cases": [
    "agent-naming",
    "prove-agent-identity",
    "describe-agent-capabilities",
    "audit-agent-actions"
   ],
   "audience": [
    "agent-builder",
    "platform",
    "standards-body"
   ],
   "pairs_with": [
    "a2a",
    "mcp",
    "ans",
    "erc-8126",
    "x402"
   ],
   "prerequisites": [],
   "hatnote_md": "ERC-8004 defines per-chain singleton identity, reputation, and validation registries; for the multi-registry minimal factory alternative using ERC-6909 and ERC-8048, see [ERC-8122](https://eips.ethereum.org/EIPS/eip-8122); for the job-escrow commerce layer that delegates identity and reputation to ERC-8004, see [ERC-8183](/protocols/erc-8183/); and for multi-dimensional risk-score verification of ERC-8004 agents, see [ERC-8126](/protocols/erc-8126/).",
   "tier": "flagship",
   "lifecycle_status": "active",
   "wire_archetype": "payments_onchain",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-06",
   "v05_hatnote_html_md": "ERC-8004 defines per-chain singleton identity, reputation, and validation registries; for the multi-registry minimal factory alternative using ERC-6909 and ERC-8048, see [ERC-8122](https://eips.ethereum.org/EIPS/eip-8122); for the job-escrow commerce layer that delegates identity and reputation to ERC-8004, see [ERC-8183](/protocols/erc-8183/); and for multi-dimensional risk-score verification of ERC-8004 agents, see [ERC-8126](/protocols/erc-8126/). [1][2][3]",
   "v05_elevator_pitch_md": "ERC-8004 is an Ethereum standard that gives autonomous AI agents portable on-chain identities, public reputation records, and verifiable execution proofs so services from different organizations can find and evaluate one another. Because communication protocols like MCP and A2A do not solve cross-organization discovery or trust on their own, ERC-8004 anchors each agent to an on-chain `IdentityRegistry` token pointing to an `agentURI` registration file alongside shared `ReputationRegistry` and `ValidationRegistry` contracts. [4][5]",
   "v05_lead_md": "**ERC-8004 (Trustless Agents)** is a Standards Track Ethereum Request for Comments (drafted August 13, 2025 by Marco De Rossi, Davide Crapis, Jordan Ellis, and Erik Reppel) that specifies three on-chain singleton registries (`IdentityRegistry`, `ReputationRegistry`, and `ValidationRegistry`) for discovering and evaluating autonomous agents across organizational boundaries without pre-existing trust. [4][5] Each agent is minted via `register(string agentURI)` as an ERC-721 token with `URIStorage` whose `agentURI` resolves to a registration JSON document (`\"type\": \"https://eips.ethereum.org/EIPS/eip-8004#registration-v1\"`) listing `services` entries (such as `A2A`, `MCP`, `OASF`, `ENS`, or `DID`), while binding payment addresses on-chain via `setAgentWallet`, alongside `supportedTrust` models (`reputation`, `crypto-economic`, and `tee-attestation`). Optionally, an agent can verify control of an HTTPS endpoint domain by serving a matching `registrations` entry at `/.well-known/agent-registration.json`. [4] While the EIP specification remains in `Draft` status on `eips.ethereum.org`, deterministic `CREATE2` singleton contracts for the Identity (`0x8004A169...`) and Reputation (`0x8004BAa1...`) registries launched on Ethereum Mainnet on January 29, 2026 and are deployed across peer EVM chains, whereas the Validation Registry remains under active specification update. [5][6][7][8][9]",
   "v05_identity_sentence_md": "**ERC-8004 (Trustless Agents)** is a Standards Track Ethereum Request for Comments (drafted August 13, 2025 by Marco De Rossi, Davide Crapis, Jordan Ellis, and Erik Reppel) that specifies three on-chain singleton registries (`IdentityRegistry`, `ReputationRegistry`, and `ValidationRegistry`) for discovering and evaluating autonomous agents across organizational boundaries without pre-existing trust. [4][5]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Identify](/category/identify/) (`identify`)"
    },
    {
     "label": "Form",
     "value_md": "On-chain registry (`onchain-registry`)"
    },
    {
     "label": "Originated by",
     "value_md": "Marco De Rossi (@MarcoMetaMask), Davide Crapis (@dcrapis), Jordan Ellis, and Erik Reppel; created 2025-08-13 [4]"
    },
    {
     "label": "Governed by",
     "value_md": "Community effort: Marco De Rossi (MetaMask), Davide Crapis (EF), Jordan Ellis (Google), Erik Reppel (Coinbase). [4][5]"
    },
    {
     "label": "Track",
     "value_md": "Community (`community`); EIP `type: Standards Track`, `category: ERC`. [4][5]"
    },
    {
     "label": "Status",
     "value_md": "Draft (created 2025-08-13). Mainnet Identity and Reputation live since 2026-01-29; Validation Registry unavailable. [4][5][9][10][11]"
    },
    {
     "label": "Version",
     "value_md": "Draft EIP; registration schema `eip-8004#registration-v1` (per-endpoint `version` field is `SHOULD`) [4]"
    },
    {
     "label": "Networks",
     "value_md": "Per-chain singletons on Ethereum Mainnet and 24 peer EVM mainnets (`IdentityRegistry` `0x8004A169FB4a3325136EB29fA0ceB6D2e539a432`; `ReputationRegistry` `0x8004BAa17C55a88189AE136b182e5fdA19dE9b63`) [4][5]"
    },
    {
     "label": "Token format",
     "value_md": "ERC-721 with URIStorage. `tokenId` is `agentId` and `tokenURI` is `agentURI`. `agentRegistry` is `{namespace}:{chainId}:{identityRegistry}`. [4]"
    },
    {
     "label": "Record format",
     "value_md": "Registration `#registration-v1` with `services` and `registrations`; `giveFeedback` `valueDecimals` MUST be 0-18. [4]"
    },
    {
     "label": "Found at",
     "value_md": "`/.well-known/agent-registration.json` on an HTTPS endpoint domain (optional domain proof) [4][6]"
    },
    {
     "label": "Specification",
     "value_md": "[ERC-8004: Trustless Agents](https://eips.ethereum.org/EIPS/eip-8004) [4][6]"
    },
    {
     "label": "Licence",
     "value_md": "CC0 (copyright and related rights waived) [6]"
    }
   ],
   "v05_problem_md": "Model context protocol (MCP) allows servers to list and offer their capabilities (prompts, resources, tools, and completions), while Agent2Agent (A2A) handles agent authentication, skills advertisement via AgentCards, direct messaging, and complete task-lifecycle orchestration. However, these agent communication protocols don't inherently cover agent discovery and trust. [4] ERC-8004 uses blockchains to discover, choose, and interact with agents across organizational boundaries without pre-existing trust. Across its Identity, Reputation, and Validation registries, developers can combine client-feedback reputation, stake-secured re-execution, zero-knowledge machine learning (zkML) proofs, and trusted execution environment (TEE) oracles. [4] Payments are orthogonal to ERC-8004 and not covered by the specification. The `supportedTrust` field is OPTIONAL; if absent or empty, ERC-8004 is used only for discovery, not for trust. On `getSummary`, `clientAddresses` MUST be provided (non-empty); results without filtering by clientAddresses are subject to Sybil/spam attacks. While ERC-8004 cryptographically ensures the registration file corresponds to the on-chain agent, it cannot cryptographically guarantee that advertised capabilities are functional and non-malicious. [4]",
   "v05_mechanism_delta_md": "ERC-8004 uses blockchains to discover, choose, and interact with agents across organizational boundaries without pre-existing trust. Across its Identity, Reputation, and Validation registries, developers can combine client-feedback reputation, stake-secured re-execution, zero-knowledge machine learning (zkML) proofs, and trusted execution environment (TEE) oracles. [4]",
   "v05_scope_boundary_md": "Payments are orthogonal to ERC-8004 and not covered by the specification. The `supportedTrust` field is OPTIONAL; if absent or empty, ERC-8004 is used only for discovery, not for trust. On `getSummary`, `clientAddresses` MUST be provided (non-empty); results without filtering by clientAddresses are subject to Sybil/spam attacks. While ERC-8004 cryptographically ensures the registration file corresponds to the on-chain agent, it cannot cryptographically guarantee that advertised capabilities are functional and non-malicious. [4]",
   "v05_fuzzy_additions": [
    {
     "id": "three-per-chain-singleton-registries-and-the-agent-registration-file",
     "heading": "Three per-chain singleton registries and the agent registration file",
     "body_md": "Three lightweight registries can be deployed on any L2 or on Mainnet as per-chain singletons: the Identity Registry, the Reputation Registry, and the Validation Registry. `agentURI` MUST resolve to the agent registration file. [4]",
     "bullets": [
      {
       "label": "Global agent identifier",
       "text_md": "New agents can be minted by calling `register(string agentURI)`. `tokenId` is `agentId` and `tokenURI` is `agentURI`. Global `agentRegistry` is `{namespace}:{chainId}:{identityRegistry}` (example `eip155:1:0x742...`), and `eip155` is the namespace for EVM chains. The awesome list names `CAIP-10` as chain-agnostic account identification that ERC-8004 builds upon. BRC8004 writes that id as `eip155:{chainId}:{identityRegistry}`. [4][7][12]"
      },
      {
       "label": "registration-v1 services",
       "text_md": "The registration file MUST have `type` `https://eips.ethereum.org/EIPS/eip-8004#registration-v1`. `services` names `A2A`, `MCP`, `OASF`, `ENS`, and `DID` endpoints. Endpoint `version` is a SHOULD, not a MUST. `registrations` carry `agentId` and `agentRegistry`. Agents SHOULD have at least one registration. `supportedTrust` is OPTIONAL. [4]"
      },
      {
       "label": "Domain verification",
       "text_md": "An agent MAY optionally prove control of an HTTPS endpoint-domain by publishing `https://{endpoint-domain}/.well-known/agent-registration.json`, with at least a `registrations` list or the full file. Users MAY treat the endpoint-domain as verified when a `registrations` entry has `agentRegistry` and `agentId` matching the on-chain agent. [4]"
      },
      {
       "label": "agentWallet",
       "text_md": "`agentWallet` cannot be set via `setMetadata()` or during `register()`. It is the address where the agent receives payments and starts as the owner's address. To change it, the agent owner must prove control of the new wallet with a valid `EIP-712` signature for EOAs or `ERC-1271` for smart contract wallets, by calling `setAgentWallet`. A transfer clears `agentWallet`, and the new owner must re-verify it. [4]"
      }
     ]
    },
    {
     "id": "reputation-registry-validation-registry-and-x402-proof-of-payment",
     "heading": "Reputation Registry, Validation Registry, and x402 Proof of Payment",
     "body_md": "When deployed on a chain, the Reputation Registry and Validation Registry are initialized with the chain's `identityRegistry` address (`getIdentityRegistry()`) so that client feedback signals and validator attestations bind directly to each agent's ERC-721 `agentId`. [4]",
     "bullets": [
      {
       "label": "giveFeedback",
       "text_md": "Any `clientAddress` other than the agent owner or an approved operator can call `giveFeedback(uint256 agentId, int128 value, uint8 valueDecimals, string calldata tag1, string calldata tag2, string calldata endpoint, string calldata feedbackURI, bytes32 feedbackHash)`, where `valueDecimals` MUST be between `0` and `18` and `tag1`, `tag2`, `endpoint`, `feedbackURI`, and `feedbackHash` are optional on-chain parameters. The contract stores `value`, `valueDecimals`, `tag1`, `tag2`, and `isRevoked` in contract storage alongside a 1-indexed `feedbackIndex`, whereas `endpoint`, `feedbackURI`, and `feedbackHash` are emitted in `NewFeedback` events without on-chain storage. [4]"
      },
      {
       "label": "Validation hooks",
       "text_md": "`validationRequest` MUST be called by the owner or operator of `agentId`. `validationResponse` MUST be called by the `validatorAddress` specified in the original request. Validator smart contracts could use stake-secured inference re-execution, zkML verifiers or TEE oracles. The contracts README says the Validation Registry portion is still under active update. The learn page says the Validation Registry is not yet available. [4][5][11]"
      },
      {
       "label": "Off-chain feedback JSON and proofOfPayment",
       "text_md": "Whereas the on-chain `giveFeedback` call requires only `agentId`, `value`, and `valueDecimals` (with `tag1`, `tag2`, `endpoint`, `feedbackURI`, and `feedbackHash` optional), in the off-chain feedback JSON file at `feedbackURI`, `agentRegistry`, `agentId`, `clientAddress`, `createdAt`, `value`, and `valueDecimals` are `MUST` while all other JSON fields (including `tag1`, `tag2`, `endpoint`, `mcp`, `a2a`, `oasf`, and `proofOfPayment` with `fromAddress`, `toAddress`, `chainId`, and `txHash` for x402 payment receipts) are `OPTIONAL`. [4]"
      },
      {
       "label": "Multi-chain singletons",
       "text_md": "An agent registered and receiving feedback on one chain can still operate and transact on other networks. Deterministic `CREATE2` deployments share the `0x8004A169...` (`IdentityRegistry`) and `0x8004BAa1...` (`ReputationRegistry`) vanity prefixes across EVM mainnets (and `0x8004A818...` on testnets). Beyond EVM networks, the arXiv ecosystem study cites `8004-solana` (an ERC-8004 SDK for Solana), a live registration file on `anchor-x402.com` lists `solana:101:metaplex` alongside its Base Mainnet `eip155:8453` entry, and CompraBTC operates a Bitcoin DCA agent registered on the Celo Identity Registry. [4][5][7][8][10][13]"
      }
     ]
    }
   ],
   "v05_diagram": {
    "title": "Identity, Reputation, and Validation registries",
    "heading": "Identity, Reputation, and Validation registries",
    "mermaid": "flowchart LR\n    Owner[Owner]\n    Identity[Identity Registry]\n    RegFile[Registration file]\n    WellKnown[\"Optional /.well-known/agent-registration.json\"]\n    Reputation[Reputation Registry]\n    Validation[Validation Registry]\n    ClientAddr[clientAddress]\n    Validator[validatorAddress]\n    Owner -->|register agentURI| Identity\n    Identity -->|agentURI resolves| RegFile\n    WellKnown -->|registrations match agentRegistry and agentId| Identity\n    Reputation -->|initialize identityRegistry| Identity\n    Validation -->|initialize identityRegistry| Identity\n    ClientAddr -->|giveFeedback| Reputation\n    Owner -->|validationRequest| Validation\n    Validator -->|validationResponse| Validation",
    "caption_md": "Owner calls `register(string agentURI)`. The `agentURI` resolves to the registration file. `clientAddress` calls `giveFeedback`. Owner or operator calls `validationRequest`. `validatorAddress` calls `validationResponse`. [4]"
   },
   "v05_wire_artifact": {
    "title": "ERC-8004 registration-v1 agent registration file",
    "heading": "ERC-8004 registration-v1 agent registration file",
    "lang": "jsonc",
    "code": "{\n  \"type\": \"https://eips.ethereum.org/EIPS/eip-8004#registration-v1\",\n  \"name\": \"myAgentName\",\n  \"description\": \"A natural language description of the Agent, which MAY include what it does, how it works, pricing, and interaction methods\",\n  \"image\": \"https://example.com/agentimage.png\",\n  \"services\": [\n   {\n      \"name\": \"web\",\n      \"endpoint\": \"https://web.agentxyz.com/\"\n    },\n    {\n      \"name\": \"A2A\",\n      \"endpoint\": \"https://agent.example/.well-known/agent-card.json\",\n      \"version\": \"0.3.0\"\n    },\n    {\n      \"name\": \"MCP\",\n      \"endpoint\": \"https://mcp.agent.eth/\",\n      \"version\": \"2025-06-18\"\n    },\n    {\n      \"name\": \"OASF\",\n      \"endpoint\": \"ipfs://{cid}\",\n      \"version\": \"0.8\", // https://github.com/agntcy/oasf/tree/v0.8.0\n      \"skills\": [], // OPTIONAL\n      \"domains\": [] // OPTIONAL\n    },\n    {\n      \"name\": \"ENS\",\n      \"endpoint\": \"vitalik.eth\",\n      \"version\": \"v1\"\n    },\n    {\n      \"name\": \"DID\",\n      \"endpoint\": \"did:method:foobar\",\n      \"version\": \"v1\"\n    },\n    {\n      \"name\": \"email\",\n      \"endpoint\": \"mail@myagent.com\"\n    }\n  ],\n  \"x402Support\": false,\n  \"active\": true,\n  \"registrations\": [\n    {\n      \"agentId\": 22,\n      \"agentRegistry\": \"{namespace}:{chainId}:{identityRegistry}\" // e.g. eip155:1:0x742...\n    }\n  ],\n  \"supportedTrust\": [\n    \"reputation\",\n    \"crypto-economic\",\n    \"tee-attestation\"\n  ]\n}",
    "caption_md": "Registration file with `type` `https://eips.ethereum.org/EIPS/eip-8004#registration-v1`, plus `services`, `registrations`, and `supportedTrust`. [4]"
   },
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "EIP-721 Non-Fungible Token Standard",
      "spec_or_rfc": "EIP-721",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "Identity Registry uses ERC-721 URIStorage: tokenId is agentId, tokenURI is agentURI, minted by register(string agentURI). [4]"
     },
     {
      "name": "EIP-712 Typed Structured Data Hashing and Signing",
      "spec_or_rfc": "EIP-712",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "setAgentWallet requires an EIP-712 signature for an EOA; a contract wallet proves control with ERC-1271. [4]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "a2a",
      "target_name": "Agent2Agent Protocol (A2A)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "ERC-8004's example lists an A2A service at agent-card.json version 0.3.0, a discovery pointer rather than A2A messaging. [4][14]"
     },
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "ERC-8004's example lists a separate MCP service (endpoint and version 2025-06-18), outside the ERC-721 identity record. [4][15]"
     },
     {
      "target_id": "ans",
      "target_name": "Agent Name Service v2 (ANS)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ANS publishes `_ans` TXT and `_ans-badge` records; ERC-8004 uses `{namespace}:{chainId}:{identityRegistry}` plus agentId. [4][16]"
     },
     {
      "target_id": "erc-8126",
      "target_name": "ERC-8126: AI Agent Verification",
      "relation_type": "depended_on_by",
      "relation_label": "Depended on by",
      "delta_md": "ERC-8126 verifies agents registered via ERC-8004, with a 0-100 risk score that can be posted to the Validation Registry. [3]"
     },
     {
      "target_id": "x402",
      "target_name": "x402",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "x402 is a separate payments protocol; ERC-8004's x402Support flag treats payments as orthogonal and can enrich feedback. [4][17]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (7 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).",
    "side_a": {
     "visible": true,
     "heading": "On-chain registries, agent signers & identity issuers",
     "col4_header": "Registry addresses, chain set, and registration surface",
     "note_md": null,
     "rows": [
      {
       "actor": "ERC-8004 Identity and Reputation Registries",
       "role": "Registry / Smart contract",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-30",
       "col4_md": "Ethereum mainnet IdentityRegistry `0x8004A169FB4a3325136EB29fA0ceB6D2e539a432` and ReputationRegistry `0x8004BAa17C55a88189AE136b182e5fdA19dE9b63`.",
       "source_md": "[erc-8004 contracts README (fetched 2026-10-30)](https://raw.githubusercontent.com/erc-8004/erc-8004-contracts/master/README.md) [5] · [8004.org, Welcome to ERC-8004 (2026-01-29)](https://www.8004.org/blog/welcome-to-8004) [6][9]"
      },
      {
       "actor": "Virtuals Protocol",
       "role": "Identity issuer / CA",
       "status": "Supported",
       "status_display": "Supported · as of 2026-02-01",
       "col4_md": "Since 01 Feb 2026, graduated ACP agents auto-register and store reviews on-chain.",
       "source_md": "[Virtuals Protocol, ACP Changelogs (2026-02-01)](https://whitepaper.virtuals.io/acp/acp-changelogs) [18]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Explorers, indexers & verifier SDKs",
     "col4_header": "Indexed chains, verification surface, and SDK",
     "note_md": null,
     "rows": [
      {
       "actor": "8004scan (AltLayer)",
       "role": "Explorer / Scanner",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Homepage covers identity, reputation, and validation across 29 chains.",
       "source_md": "[8004scan (fetched 2026-10-30)](https://8004scan.io/) [19]"
      },
      {
       "actor": "Quicknode ERC-8004 Explorer",
       "role": "Explorer / Scanner",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "One JSON-RPC endpoint covers 32 EVM networks; REST bills per request in USDC.",
       "source_md": "[Quicknode, ERC-8004 Explorer (fetched 2026-10-30)](https://erc-8004.quicknode.com/) [20]"
      },
      {
       "actor": "RNWY",
       "role": "Verifier SDK / Runtime",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Skill `7.5.0` posts to `https://rnwy.com/api/mcp` and covers ERC-8004.",
       "source_md": "[AI Rights Institute, RNWY skill.md 7.5.0 (fetched 2026-10-30)](https://rnwy.com/skill.md) [8]"
      },
      {
       "actor": "Agent0 SDK",
       "role": "Verifier SDK / Runtime",
       "status": "Partial",
       "status_display": "Partial · checked 2026-10-30",
       "col4_md": "Main-branch TypeScript SDK `1.7.0` publishes MCP and A2A endpoints on ERC-8004.",
       "source_md": "[agent0lab, Agent0 SDK README (fetched 2026-10-30)](https://raw.githubusercontent.com/agent0lab/agent0-ts/main/README.md) [21]"
      },
      {
       "actor": "ChaosChain",
       "role": "Verifier SDK / Runtime",
       "status": "Partial",
       "status_display": "Partial · checked 2026-10-30",
       "col4_md": "Main-branch RewardsDistributor V4 writes verifier accuracy to ERC-8004.",
       "source_md": "[ChaosChain README (fetched 2026-10-30)](https://raw.githubusercontent.com/ChaosChain/chaoschain/main/README.md) [22]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [
     {
      "label": "erc-8004 contracts README (fetched 2026-10-30)",
      "as_of": "2026-10-30",
      "value_md": "Lists 25 mainnet chain deployments (from Ethereum Mainnet through 0G Mainnet) sharing the deterministic mainnet IdentityRegistry and ReputationRegistry singleton addresses, alongside 25 testnet or devnet chain deployments (from Ethereum Sepolia through 0G Galileo Testnet) sharing the deterministic testnet singleton addresses. [5]"
     },
     {
      "label": "arXiv 2606.26028 empirical study",
      "as_of": "2026-05-13",
      "value_md": "The paper reports coordinated Sybil behavior among 73.5% of reviewers on Ethereum, 59.2% on BSC, and 90.6% on Base. [10]"
     }
    ],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "erc-8183",
     "target_name": "ERC-8183: Agentic Commerce",
     "relation_label": "Depended on by",
     "delta": "ERC-8183 lists ERC-8004 as a prerequisite and composes its attestation hash with that reputation registry; ERC-8183 itself is EIP-20 escrow.",
     "item_md": "**[ERC-8183: Agentic Commerce](/protocols/erc-8183/)** (Depended on by) — ERC-8183 lists ERC-8004 as a prerequisite and composes its attestation hash with that reputation registry; ERC-8183 itself is EIP-20 escrow."
    },
    {
     "target_id": "erc-8444",
     "target_name": "ERC-8444: Agentic Resource Discovery (ARD) Onchain",
     "relation_label": "Complements",
     "delta": "ERC-8444 anchors ARD records on chain, can point at an ERC-8004 registration, and serves them at /.well-known/ard.json.",
     "item_md": "**[ERC-8444: Agentic Resource Discovery (ARD) Onchain](/protocols/erc-8444/)** (Complements) — ERC-8444 anchors ARD records on chain, can point at an ERC-8004 registration, and serves them at /.well-known/ard.json."
    },
    {
     "target_id": "erc-8001",
     "target_name": "ERC-8001: Agent Coordination Framework",
     "relation_label": "Complements",
     "delta": "ERC-8001 is the coordination contract that executes only after every party posts an EIP-712 or ERC-1271 acceptance.",
     "item_md": "**[ERC-8001: Agent Coordination Framework](/protocols/erc-8001/)** (Complements) — ERC-8001 is the coordination contract that executes only after every party posts an EIP-712 or ERC-1271 acceptance."
    },
    {
     "target_id": "kya-os",
     "target_name": "KYA-OS (Know Your Agent Operating System)",
     "relation_label": "Peer alternative",
     "delta": "ERC-8004 uses an ERC-721 agentId; KYA-OS identifies the caller with did:key or did:web and a StatusList2021-revoked credential.",
     "item_md": "**[KYA-OS (Know Your Agent Operating System)](/protocols/kya-os/)** (Peer alternative) — ERC-8004 uses an ERC-721 agentId; KYA-OS identifies the caller with did:key or did:web and a StatusList2021-revoked credential."
    },
    {
     "target_id": "erc-8226",
     "target_name": "ERC-8226 Regulated Agent Mandate",
     "relation_label": "Depended on by",
     "delta": "ERC-8226 treats ERC-8004 as one compatible agent identity; the mandate is IAgentMandate keyed by agent and principal.",
     "item_md": "**[ERC-8226 Regulated Agent Mandate](/protocols/erc-8226/)** (Depended on by) — ERC-8226 treats ERC-8004 as one compatible agent identity; the mandate is IAgentMandate keyed by agent and principal."
    },
    {
     "target_id": "aip",
     "target_name": "Agent Identity Protocol (AIP)",
     "relation_label": "Peer alternative",
     "delta": "ERC-8004's agentId is an ERC-721 tokenId; AIP identifies the agent with did:aip from an Ed25519 key.",
     "item_md": "**[Agent Identity Protocol (AIP)](/protocols/aip/)** (Peer alternative) — ERC-8004's agentId is an ERC-721 tokenId; AIP identifies the agent with did:aip from an Ed25519 key."
    },
    {
     "target_id": "agent-identity-document",
     "target_name": "The Agent Identity Document: A Hosted, Accountable Public Record for AI Agents",
     "relation_label": "Peer alternative",
     "delta": "ERC-8004 uses on-chain registries plus /.well-known/agent-registration.json; the Agent Identity Document uses /.well-known/agent-identity.json.",
     "item_md": "**[The Agent Identity Document: A Hosted, Accountable Public Record for AI Agents](/protocols/agent-identity-document/)** (Peer alternative) — ERC-8004 uses on-chain registries plus /.well-known/agent-registration.json; the Agent Identity Document uses /.well-known/agent-identity.json."
    },
    {
     "target_id": "agent-delegation-receipts",
     "target_name": "Agent Delegation Receipts",
     "relation_label": "Complements",
     "delta": "ERC-8004 registers an ERC-721 agentId; a delegation receipt is the JWS or COSE_Sign1 slip binding instruction hash and scope.",
     "item_md": "**[Agent Delegation Receipts](/protocols/agent-delegation-receipts/)** (Complements) — ERC-8004 registers an ERC-721 agentId; a delegation receipt is the JWS or COSE_Sign1 slip binding instruction hash and scope."
    },
    {
     "target_id": "erc-8196",
     "target_name": "ERC-8196: AI Agent Authenticated Wallet",
     "relation_label": "Complements",
     "delta": "ERC-8196 reaches the ERC-8004 agentId through ERC-8126; the ERC-4337 wallet executes only when the proof matches policy.",
     "item_md": "**[ERC-8196: AI Agent Authenticated Wallet](/protocols/erc-8196/)** (Complements) — ERC-8196 reaches the ERC-8004 agentId through ERC-8126; the ERC-4337 wallet executes only when the proof matches policy."
    },
    {
     "item_md": "**[Identify protocols](/category/identify/)** — Category index for `identify` standards."
    }
   ],
   "v05_compiled_md": "---\nid: erc-8004\ntitle: \"ERC-8004: Trustless Agents\"\ntier: flagship\nlifecycle_status: active\ncategory: identify\nform: onchain-registry\nwire_archetype: payments_onchain\nspec_url: https://eips.ethereum.org/EIPS/eip-8004\nlast_checked: 2026-11-06\n---\n\n# ERC-8004: Trustless Agents\n\n**Category:** [Identify](/category/identify/) (`identify`) · **Form:** On-chain registry (`onchain-registry`) · **Last checked:** 2026-11-06\n\n> *ERC-8004 defines per-chain singleton identity, reputation, and validation registries; for the multi-registry minimal factory alternative using ERC-6909 and ERC-8048, see [ERC-8122](https://eips.ethereum.org/EIPS/eip-8122); for the job-escrow commerce layer that delegates identity and reputation to ERC-8004, see [ERC-8183](/protocols/erc-8183/); and for multi-dimensional risk-score verification of ERC-8004 agents, see [ERC-8126](/protocols/erc-8126/). [1][2][3]*\n\n> **In brief:** ERC-8004 is an Ethereum standard that gives autonomous AI agents portable on-chain identities, public reputation records, and verifiable execution proofs so services from different organizations can find and evaluate one another. Because communication protocols like MCP and A2A do not solve cross-organization discovery or trust on their own, ERC-8004 anchors each agent to an on-chain `IdentityRegistry` token pointing to an `agentURI` registration file alongside shared `ReputationRegistry` and `ValidationRegistry` contracts. [4][5]\n\n**ERC-8004 (Trustless Agents)** is a Standards Track Ethereum Request for Comments (drafted August 13, 2025 by Marco De Rossi, Davide Crapis, Jordan Ellis, and Erik Reppel) that specifies three on-chain singleton registries (`IdentityRegistry`, `ReputationRegistry`, and `ValidationRegistry`) for discovering and evaluating autonomous agents across organizational boundaries without pre-existing trust. [4][5] Each agent is minted via `register(string agentURI)` as an ERC-721 token with `URIStorage` whose `agentURI` resolves to a registration JSON document (`\"type\": \"https://eips.ethereum.org/EIPS/eip-8004#registration-v1\"`) listing `services` entries (such as `A2A`, `MCP`, `OASF`, `ENS`, or `DID`), while binding payment addresses on-chain via `setAgentWallet`, alongside `supportedTrust` models (`reputation`, `crypto-economic`, and `tee-attestation`). Optionally, an agent can verify control of an HTTPS endpoint domain by serving a matching `registrations` entry at `/.well-known/agent-registration.json`. [4] While the EIP specification remains in `Draft` status on `eips.ethereum.org`, deterministic `CREATE2` singleton contracts for the Identity (`0x8004A169...`) and Reputation (`0x8004BAa1...`) registries launched on Ethereum Mainnet on January 29, 2026 and are deployed across peer EVM chains, whereas the Validation Registry remains under active specification update. [5][6][7][8][9]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Identify](/category/identify/) (`identify`) |\n| **Form** | On-chain registry (`onchain-registry`) |\n| **Originated by** | Marco De Rossi (@MarcoMetaMask), Davide Crapis (@dcrapis), Jordan Ellis, and Erik Reppel; created 2025-08-13 [4] |\n| **Governed by** | Community effort: Marco De Rossi (MetaMask), Davide Crapis (EF), Jordan Ellis (Google), Erik Reppel (Coinbase). [4][5] |\n| **Track** | Community (`community`); EIP `type: Standards Track`, `category: ERC`. [4][5] |\n| **Status** | Draft (created 2025-08-13). Mainnet Identity and Reputation live since 2026-01-29; Validation Registry unavailable. [4][5][9][10][11] |\n| **Version** | Draft EIP; registration schema `eip-8004#registration-v1` (per-endpoint `version` field is `SHOULD`) [4] |\n| **Networks** | Per-chain singletons on Ethereum Mainnet and 24 peer EVM mainnets (`IdentityRegistry` `0x8004A169FB4a3325136EB29fA0ceB6D2e539a432`; `ReputationRegistry` `0x8004BAa17C55a88189AE136b182e5fdA19dE9b63`) [4][5] |\n| **Token format** | ERC-721 with URIStorage. `tokenId` is `agentId` and `tokenURI` is `agentURI`. `agentRegistry` is `{namespace}:{chainId}:{identityRegistry}`. [4] |\n| **Record format** | Registration `#registration-v1` with `services` and `registrations`; `giveFeedback` `valueDecimals` MUST be 0-18. [4] |\n| **Found at** | `/.well-known/agent-registration.json` on an HTTPS endpoint domain (optional domain proof) [4][6] |\n| **Specification** | [ERC-8004: Trustless Agents](https://eips.ethereum.org/EIPS/eip-8004) [4][6] |\n| **Licence** | CC0 (copyright and related rights waived) [6] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Three per-chain singleton registries and the agent registration file](#three-per-chain-singleton-registries-and-the-agent-registration-file)\n3. [Reputation Registry, Validation Registry, and x402 Proof of Payment](#reputation-registry-validation-registry-and-x402-proof-of-payment)\n4. [Counterparts and related standards](#counterparts-and-related-standards)\n5. [Adoption and ecosystem](#adoption-and-ecosystem)\n6. [See also](#see-also)\n7. [References](#references)\n\n---\n\n## Problem and scope\n\nModel context protocol (MCP) allows servers to list and offer their capabilities (prompts, resources, tools, and completions), while Agent2Agent (A2A) handles agent authentication, skills advertisement via AgentCards, direct messaging, and complete task-lifecycle orchestration. However, these agent communication protocols don't inherently cover agent discovery and trust. [4] ERC-8004 uses blockchains to discover, choose, and interact with agents across organizational boundaries without pre-existing trust. Across its Identity, Reputation, and Validation registries, developers can combine client-feedback reputation, stake-secured re-execution, zero-knowledge machine learning (zkML) proofs, and trusted execution environment (TEE) oracles. [4] Payments are orthogonal to ERC-8004 and not covered by the specification. The `supportedTrust` field is OPTIONAL; if absent or empty, ERC-8004 is used only for discovery, not for trust. On `getSummary`, `clientAddresses` MUST be provided (non-empty); results without filtering by clientAddresses are subject to Sybil/spam attacks. While ERC-8004 cryptographically ensures the registration file corresponds to the on-chain agent, it cannot cryptographically guarantee that advertised capabilities are functional and non-malicious. [4]\n\n### Identity, Reputation, and Validation registries\n\n```mermaid\nflowchart LR\n    Owner[Owner]\n    Identity[Identity Registry]\n    RegFile[Registration file]\n    WellKnown[\"Optional /.well-known/agent-registration.json\"]\n    Reputation[Reputation Registry]\n    Validation[Validation Registry]\n    ClientAddr[clientAddress]\n    Validator[validatorAddress]\n    Owner -->|register agentURI| Identity\n    Identity -->|agentURI resolves| RegFile\n    WellKnown -->|registrations match agentRegistry and agentId| Identity\n    Reputation -->|initialize identityRegistry| Identity\n    Validation -->|initialize identityRegistry| Identity\n    ClientAddr -->|giveFeedback| Reputation\n    Owner -->|validationRequest| Validation\n    Validator -->|validationResponse| Validation\n```\n\n*Owner calls `register(string agentURI)`. The `agentURI` resolves to the registration file. `clientAddress` calls `giveFeedback`. Owner or operator calls `validationRequest`. `validatorAddress` calls `validationResponse`. [4]*\n\n### ERC-8004 registration-v1 agent registration file\n\n```jsonc\n{\n  \"type\": \"https://eips.ethereum.org/EIPS/eip-8004#registration-v1\",\n  \"name\": \"myAgentName\",\n  \"description\": \"A natural language description of the Agent, which MAY include what it does, how it works, pricing, and interaction methods\",\n  \"image\": \"https://example.com/agentimage.png\",\n  \"services\": [\n   {\n      \"name\": \"web\",\n      \"endpoint\": \"https://web.agentxyz.com/\"\n    },\n    {\n      \"name\": \"A2A\",\n      \"endpoint\": \"https://agent.example/.well-known/agent-card.json\",\n      \"version\": \"0.3.0\"\n    },\n    {\n      \"name\": \"MCP\",\n      \"endpoint\": \"https://mcp.agent.eth/\",\n      \"version\": \"2025-06-18\"\n    },\n    {\n      \"name\": \"OASF\",\n      \"endpoint\": \"ipfs://{cid}\",\n      \"version\": \"0.8\", // https://github.com/agntcy/oasf/tree/v0.8.0\n      \"skills\": [], // OPTIONAL\n      \"domains\": [] // OPTIONAL\n    },\n    {\n      \"name\": \"ENS\",\n      \"endpoint\": \"vitalik.eth\",\n      \"version\": \"v1\"\n    },\n    {\n      \"name\": \"DID\",\n      \"endpoint\": \"did:method:foobar\",\n      \"version\": \"v1\"\n    },\n    {\n      \"name\": \"email\",\n      \"endpoint\": \"mail@myagent.com\"\n    }\n  ],\n  \"x402Support\": false,\n  \"active\": true,\n  \"registrations\": [\n    {\n      \"agentId\": 22,\n      \"agentRegistry\": \"{namespace}:{chainId}:{identityRegistry}\" // e.g. eip155:1:0x742...\n    }\n  ],\n  \"supportedTrust\": [\n    \"reputation\",\n    \"crypto-economic\",\n    \"tee-attestation\"\n  ]\n}\n```\n\n*Registration file with `type` `https://eips.ethereum.org/EIPS/eip-8004#registration-v1`, plus `services`, `registrations`, and `supportedTrust`. [4]*\n\n---\n\n## Three per-chain singleton registries and the agent registration file\n\nThree lightweight registries can be deployed on any L2 or on Mainnet as per-chain singletons: the Identity Registry, the Reputation Registry, and the Validation Registry. `agentURI` MUST resolve to the agent registration file. [4]\n\n- **Global agent identifier:** New agents can be minted by calling `register(string agentURI)`. `tokenId` is `agentId` and `tokenURI` is `agentURI`. Global `agentRegistry` is `{namespace}:{chainId}:{identityRegistry}` (example `eip155:1:0x742...`), and `eip155` is the namespace for EVM chains. The awesome list names `CAIP-10` as chain-agnostic account identification that ERC-8004 builds upon. BRC8004 writes that id as `eip155:{chainId}:{identityRegistry}`. [4][7][12]\n- **registration-v1 services:** The registration file MUST have `type` `https://eips.ethereum.org/EIPS/eip-8004#registration-v1`. `services` names `A2A`, `MCP`, `OASF`, `ENS`, and `DID` endpoints. Endpoint `version` is a SHOULD, not a MUST. `registrations` carry `agentId` and `agentRegistry`. Agents SHOULD have at least one registration. `supportedTrust` is OPTIONAL. [4]\n- **Domain verification:** An agent MAY optionally prove control of an HTTPS endpoint-domain by publishing `https://{endpoint-domain}/.well-known/agent-registration.json`, with at least a `registrations` list or the full file. Users MAY treat the endpoint-domain as verified when a `registrations` entry has `agentRegistry` and `agentId` matching the on-chain agent. [4]\n- **agentWallet:** `agentWallet` cannot be set via `setMetadata()` or during `register()`. It is the address where the agent receives payments and starts as the owner's address. To change it, the agent owner must prove control of the new wallet with a valid `EIP-712` signature for EOAs or `ERC-1271` for smart contract wallets, by calling `setAgentWallet`. A transfer clears `agentWallet`, and the new owner must re-verify it. [4]\n\n---\n\n## Reputation Registry, Validation Registry, and x402 Proof of Payment\n\nWhen deployed on a chain, the Reputation Registry and Validation Registry are initialized with the chain's `identityRegistry` address (`getIdentityRegistry()`) so that client feedback signals and validator attestations bind directly to each agent's ERC-721 `agentId`. [4]\n\n- **giveFeedback:** Any `clientAddress` other than the agent owner or an approved operator can call `giveFeedback(uint256 agentId, int128 value, uint8 valueDecimals, string calldata tag1, string calldata tag2, string calldata endpoint, string calldata feedbackURI, bytes32 feedbackHash)`, where `valueDecimals` MUST be between `0` and `18` and `tag1`, `tag2`, `endpoint`, `feedbackURI`, and `feedbackHash` are optional on-chain parameters. The contract stores `value`, `valueDecimals`, `tag1`, `tag2`, and `isRevoked` in contract storage alongside a 1-indexed `feedbackIndex`, whereas `endpoint`, `feedbackURI`, and `feedbackHash` are emitted in `NewFeedback` events without on-chain storage. [4]\n- **Validation hooks:** `validationRequest` MUST be called by the owner or operator of `agentId`. `validationResponse` MUST be called by the `validatorAddress` specified in the original request. Validator smart contracts could use stake-secured inference re-execution, zkML verifiers or TEE oracles. The contracts README says the Validation Registry portion is still under active update. The learn page says the Validation Registry is not yet available. [4][5][11]\n- **Off-chain feedback JSON and proofOfPayment:** Whereas the on-chain `giveFeedback` call requires only `agentId`, `value`, and `valueDecimals` (with `tag1`, `tag2`, `endpoint`, `feedbackURI`, and `feedbackHash` optional), in the off-chain feedback JSON file at `feedbackURI`, `agentRegistry`, `agentId`, `clientAddress`, `createdAt`, `value`, and `valueDecimals` are `MUST` while all other JSON fields (including `tag1`, `tag2`, `endpoint`, `mcp`, `a2a`, `oasf`, and `proofOfPayment` with `fromAddress`, `toAddress`, `chainId`, and `txHash` for x402 payment receipts) are `OPTIONAL`. [4]\n- **Multi-chain singletons:** An agent registered and receiving feedback on one chain can still operate and transact on other networks. Deterministic `CREATE2` deployments share the `0x8004A169...` (`IdentityRegistry`) and `0x8004BAa1...` (`ReputationRegistry`) vanity prefixes across EVM mainnets (and `0x8004A818...` on testnets). Beyond EVM networks, the arXiv ecosystem study cites `8004-solana` (an ERC-8004 SDK for Solana), a live registration file on `anchor-x402.com` lists `solana:101:metaplex` alongside its Base Mainnet `eip155:8453` entry, and CompraBTC operates a Bitcoin DCA agent registered on the Celo Identity Registry. [4][5][7][8][10][13]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **EIP-721 Non-Fungible Token Standard** | `EIP-721` | Profiles classic standard | Identity Registry uses ERC-721 URIStorage: tokenId is agentId, tokenURI is agentURI, minted by register(string agentURI). [4] |\n| **EIP-712 Typed Structured Data Hashing and Signing** | `EIP-712` | Profiles classic standard | setAgentWallet requires an EIP-712 signature for an EOA; a contract wallet proves control with ERC-1271. [4] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Agent2Agent Protocol (A2A)](/protocols/a2a/)** | Complements | ERC-8004's example lists an A2A service at agent-card.json version 0.3.0, a discovery pointer rather than A2A messaging. [4][14] |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | ERC-8004's example lists a separate MCP service (endpoint and version 2025-06-18), outside the ERC-721 identity record. [4][15] |\n| **[Agent Name Service v2 (ANS)](/protocols/ans/)** | Peer alternative | ANS publishes `_ans` TXT and `_ans-badge` records; ERC-8004 uses `{namespace}:{chainId}:{identityRegistry}` plus agentId. [4][16] |\n| **[ERC-8126: AI Agent Verification](/protocols/erc-8126/)** | Depended on by | ERC-8126 verifies agents registered via ERC-8004, with a 0-100 risk score that can be posted to the Validation Registry. [3] |\n| **[x402](/protocols/x402/)** | Complements | x402 is a separate payments protocol; ERC-8004's x402Support flag treats payments as orthogonal and can enrich feedback. [4][17] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (7 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).*\n\n### On-chain registries, agent signers & identity issuers\n\n| Actor | Role | Status | Registry addresses, chain set, and registration surface | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **ERC-8004 Identity and Reputation Registries** | Registry / Smart contract | Supported · as of 2026-10-30 | Ethereum mainnet IdentityRegistry `0x8004A169FB4a3325136EB29fA0ceB6D2e539a432` and ReputationRegistry `0x8004BAa17C55a88189AE136b182e5fdA19dE9b63`. | [erc-8004 contracts README (fetched 2026-10-30)](https://raw.githubusercontent.com/erc-8004/erc-8004-contracts/master/README.md) [5] · [8004.org, Welcome to ERC-8004 (2026-01-29)](https://www.8004.org/blog/welcome-to-8004) [6][9] |\n| **Virtuals Protocol** | Identity issuer / CA | Supported · as of 2026-02-01 | Since 01 Feb 2026, graduated ACP agents auto-register and store reviews on-chain. | [Virtuals Protocol, ACP Changelogs (2026-02-01)](https://whitepaper.virtuals.io/acp/acp-changelogs) [18] |\n\n### Explorers, indexers & verifier SDKs\n\n| Actor | Role | Status | Indexed chains, verification surface, and SDK | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **8004scan (AltLayer)** | Explorer / Scanner | Live (HTTP 200) · checked 2026-10-30 | Homepage covers identity, reputation, and validation across 29 chains. | [8004scan (fetched 2026-10-30)](https://8004scan.io/) [19] |\n| **Quicknode ERC-8004 Explorer** | Explorer / Scanner | Live (HTTP 200) · checked 2026-10-30 | One JSON-RPC endpoint covers 32 EVM networks; REST bills per request in USDC. | [Quicknode, ERC-8004 Explorer (fetched 2026-10-30)](https://erc-8004.quicknode.com/) [20] |\n| **RNWY** | Verifier SDK / Runtime | Live (HTTP 200) · checked 2026-10-30 | Skill `7.5.0` posts to `https://rnwy.com/api/mcp` and covers ERC-8004. | [AI Rights Institute, RNWY skill.md 7.5.0 (fetched 2026-10-30)](https://rnwy.com/skill.md) [8] |\n| **Agent0 SDK** | Verifier SDK / Runtime | Partial · checked 2026-10-30 | Main-branch TypeScript SDK `1.7.0` publishes MCP and A2A endpoints on ERC-8004. | [agent0lab, Agent0 SDK README (fetched 2026-10-30)](https://raw.githubusercontent.com/agent0lab/agent0-ts/main/README.md) [21] |\n| **ChaosChain** | Verifier SDK / Runtime | Partial · checked 2026-10-30 | Main-branch RewardsDistributor V4 writes verifier accuracy to ERC-8004. | [ChaosChain README (fetched 2026-10-30)](https://raw.githubusercontent.com/ChaosChain/chaoschain/main/README.md) [22] |\n\n### Ecosystem censuses\n\n- **erc-8004 contracts README (fetched 2026-10-30)** (*as of 2026-10-30*): Lists 25 mainnet chain deployments (from Ethereum Mainnet through 0G Mainnet) sharing the deterministic mainnet IdentityRegistry and ReputationRegistry singleton addresses, alongside 25 testnet or devnet chain deployments (from Ethereum Sepolia through 0G Galileo Testnet) sharing the deterministic testnet singleton addresses. [5]\n- **arXiv 2606.26028 empirical study** (*as of 2026-05-13*): The paper reports coordinated Sybil behavior among 73.5% of reviewers on Ethereum, 59.2% on BSC, and 90.6% on Base. [10]\n\n---\n\n## See also\n\n- **[ERC-8183: Agentic Commerce](/protocols/erc-8183/)** *(Depended on by)* — ERC-8183 lists ERC-8004 as a prerequisite and composes its attestation hash with that reputation registry; ERC-8183 itself is EIP-20 escrow.\n- **[ERC-8444: Agentic Resource Discovery (ARD) Onchain](/protocols/erc-8444/)** *(Complements)* — ERC-8444 anchors ARD records on chain, can point at an ERC-8004 registration, and serves them at /.well-known/ard.json.\n- **[ERC-8001: Agent Coordination Framework](/protocols/erc-8001/)** *(Complements)* — ERC-8001 is the coordination contract that executes only after every party posts an EIP-712 or ERC-1271 acceptance.\n- **[KYA-OS (Know Your Agent Operating System)](/protocols/kya-os/)** *(Peer alternative)* — ERC-8004 uses an ERC-721 agentId; KYA-OS identifies the caller with did:key or did:web and a StatusList2021-revoked credential.\n- **[ERC-8226 Regulated Agent Mandate](/protocols/erc-8226/)** *(Depended on by)* — ERC-8226 treats ERC-8004 as one compatible agent identity; the mandate is IAgentMandate keyed by agent and principal.\n- **[Agent Identity Protocol (AIP)](/protocols/aip/)** *(Peer alternative)* — ERC-8004's agentId is an ERC-721 tokenId; AIP identifies the agent with did:aip from an Ed25519 key.\n- **[The Agent Identity Document: A Hosted, Accountable Public Record for AI Agents](/protocols/agent-identity-document/)** *(Peer alternative)* — ERC-8004 uses on-chain registries plus /.well-known/agent-registration.json; the Agent Identity Document uses /.well-known/agent-identity.json.\n- **[Agent Delegation Receipts](/protocols/agent-delegation-receipts/)** *(Complements)* — ERC-8004 registers an ERC-721 agentId; a delegation receipt is the JWS or COSE_Sign1 slip binding instruction hash and scope.\n- **[ERC-8196: AI Agent Authenticated Wallet](/protocols/erc-8196/)** *(Complements)* — ERC-8196 reaches the ERC-8004 agentId through ERC-8126; the ERC-4337 wallet executes only when the proof matches policy.\n- **Category:** [Identify protocols](/category/identify/)\n\n---\n\n## References\n\n1. Prem Makeig (@nxt3d), *ERC-8122: Minimal Agent Registry* (created 2025-12-17) — <https://eips.ethereum.org/EIPS/eip-8122>\n2. Davide Crapis, Bryan Lim, Tay Weixiong, and Chooi Zuhwa, *ERC-8183: Agentic Commerce* (created 2026-02-25) — <https://eips.ethereum.org/EIPS/eip-8183>\n3. Leigh Cronian (Cybercentry) and Chris Johnson (Virtuals), *ERC-8126: AI Agent Verification* (created 2026-01-15) — <https://eips.ethereum.org/EIPS/eip-8126>\n4. Marco De Rossi, Davide Crapis, Jordan Ellis, and Erik Reppel, *ERCS/erc-8004.md (Trustless Agents)* (created 2025-08-13; fetched 2026-10-30) — <https://raw.githubusercontent.com/ethereum/ERCs/master/ERCS/erc-8004.md>\n5. erc-8004, *ERC-8004 contracts README* (fetched 2026-10-30) — <https://raw.githubusercontent.com/erc-8004/erc-8004-contracts/master/README.md>\n6. Marco De Rossi, Davide Crapis, Jordan Ellis, and Erik Reppel, *ERC-8004: Trustless Agents* (created 2025-08-13; fetched 2026-10-30) — <https://eips.ethereum.org/EIPS/eip-8004>\n7. Sudeep (sudeepb02), *Awesome ERC-8004* (fetched 2026-10-30) — <https://raw.githubusercontent.com/sudeepb02/awesome-erc8004/main/README.md>\n8. AI Rights Institute, *RNWY skill.md* (version 7.5.0; fetched 2026-10-30) — <https://rnwy.com/skill.md>\n9. ERC-8004 Community, *Welcome to ERC-8004 and the open agentic economy* (published 2026-01-29) — <https://www.8004.org/blog/welcome-to-8004>\n10. Xihan Xiong, Zelin Li, Wei Wei, Qin Wang, William Knottenbelt, and Zhipeng Wang, *Can Trustless Agents Be Trusted? An Empirical Study of the ERC-8004 Decentralized AI Agent Ecosystem* (submitted 2026-06-24; revised 2026-10-18 (v3)) — <https://arxiv.org/html/2606.26028>\n11. ERC-8004 Community, *8004 Learn* (fetched 2026-10-30) — <https://www.8004.org/learn>\n12. BRC8004, *BRC8004: Trustless Agents on BNB Chain* (fetched 2026-11-06) — <https://github.com/BRC8004/brc8004-contracts>\n13. anchor-x402, *agent-registration.json (anchor-x402)* (fetched 2026-10-30) — <https://anchor-x402.com/.well-known/agent-registration.json>\n14. A2A Protocol, *Agent2Agent (A2A) Protocol Specification* (fetched 2026-10-30) — <https://a2a-protocol.org/latest/specification/>\n15. Model Context Protocol, *Specification 2026-07-28* (version 2026-07-28) — <https://modelcontextprotocol.io/specification/2026-07-28>\n16. Scott Courtney, Vineeth Sai Narajala, Ken Huang, Idan Habler, and Akram Sheriff, *draft-narajala-courtney-ansv2 — Agent Name Service v2 (ANS): A Domain-Anchored Trust Layer for Autonomous AI Agent Identity (IETF Datatracker)* (draft-narajala-courtney-ansv2-01; last updated 2026-10-15) — <https://datatracker.ietf.org/doc/draft-narajala-courtney-ansv2/>\n17. x402 Foundation, *X402 Protocol Specification* (protocol version 2) — <https://github.com/x402-foundation/x402/blob/main/specs/x402-specification-v2.md>\n18. Virtuals Protocol, *ACP Changelogs* (ERC-8004 release note 2026-02-01) — <https://whitepaper.virtuals.io/acp/acp-changelogs>\n19. Alt Research, *8004scan* (fetched 2026-10-30) — <https://8004scan.io/>\n20. Quicknode, *ERC-8004 Explorer* (fetched 2026-10-30) — <https://erc-8004.quicknode.com/>\n21. agent0lab, *Agent0 SDK* (fetched 2026-10-30) — <https://raw.githubusercontent.com/agent0lab/agent0-ts/main/README.md>\n22. ChaosChain, *ChaosChain README* (fetched 2026-10-30) — <https://raw.githubusercontent.com/ChaosChain/chaoschain/main/README.md>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "ERC-8183",
   "adoption": {
    "level": "observed",
    "by": "Virtuals Protocol (AgenticCommerceV3), Circle (AgenticCommerce on Arc Testnet), Virtuals ACP SDK (@virtuals-protocol/acp-node-v2), Virtuals ACP CLI (@virtuals-protocol/acp-cli), and Circle Wallets (Arc Testnet walkthrough)",
    "probe_run": null
   },
   "aliases": [
    "EIP-8183"
   ],
   "analog": "Escrow contract with a third-party inspector",
   "collisions": [
    "Agentic Commerce Protocol (OpenAI/Stripe ACP)"
   ],
   "discovery": {
    "mechanism": "EVM smart-contract interface (job created on an AgenticCommerce contract deployment)",
    "path": "none — no well-known file; discovery is by contract address/ABI"
   },
   "dispute": {
    "claims": [
     "ERC-8183 abstract: 'This specification defines the Agentic Commerce Protocol: a job with escrowed budget...'",
     "agentic-commerce-protocol record: OpenAI/Stripe/Meta-maintained REST checkout standard of the same colloquial name"
    ],
    "summary": "The proposal's own title and abstract call the standard 'the Agentic Commerce Protocol,' the same phrase used by the unrelated OpenAI/Stripe specification tracked in this dataset as 'agentic-commerce-protocol.' The two share no governance, code, or organization; ERC-8183 is an on-chain escrow/attestation primitive on Ethereum, while ACP is an off-chain REST checkout API maintained by OpenAI, Stripe, and Meta."
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://eips.ethereum.org/EIPS/eip-8183",
     "claim": "Davide Crapis, Bryan Lim, Tay Weixiong, and Chooi Zuhwa, *ERC-8183: Agentic Commerce*, created 2026-02-25; fetched 2026-10-31",
     "date": null,
     "quote": "This specification defines the Agentic Commerce Protocol: a job with escrowed budget / Draft Standards Track: ERC ERC-8183: Agentic Commerce / This specification defines the Agentic Commerce Protocol: a job with escrowed budget, four states (Open → Funded → Submitted → Terminal), and an evaluator who alone may mark the job completed. / Davide Crapis (@dcrapis), Bryan Lim (@ai-virtual-b), Tay Weixiong (@twx-virtuals), Chooi Zuhwa (@Zuhwa) Created 2026-02-25 / Discussion Link https://ethereum-magicians.org/t/erc-8183-agentic-commerce/27902 Requires EIP-20 / Payment SHALL use a single ERC-20 token (global for the contract or specified at creation). / Open → Funded: Client or provider calls setBudget(jobId, amount) to agree on price, then client calls fund(jobId, expectedBudget); contract pulls job.budget from client into escrow. / Funded → Submitted: Provider calls submit(jobId, deliverable); signals that work has been completed and is ready for evaluation. / Submitted Provider has submitted work. Only evaluator may complete or reject. After expiredAt, anyone may trigger refund. / A hook contract SHALL implement the IACPHook interface - just two functions / When a job has a hook set, the core contract SHALL call hook.beforeAction … and hook.afterAction … around each hookable function / claimRefund No - permissionless safety mechanism, SHALL NOT be hookable / Draft Standards Track: ERC … Created 2026-02-25 … ERC-8183: Agentic Commerce [DRAFT] / four states (Open → Funded → Submitted → Terminal) … A job has exactly one of six states … No other transitions are valid. … Four states: Open, Funded, Submitted, and Terminal (Completed, Rejected, or Expired) / (@ai-virtual-b), Tay Weixiong (@twx-virtuals), Chooi Zuhwa (@Zuhwa) Created 2026-02-25 Discussion Link https://ethereum-magicians.org/t/erc-8183-agentic-commerce/27902 Requires EIP-20 / }); Ethereum Improvement Proposals AllCoreNetworkingInterfaceERCMetaInformational ⚠️ Draft Standards Track: ERC ERC-8183: Agentic Commerce Job / Standards Track: ERC ERC-8183: Agentic Commerce Job escrow w / address(0) (no hook). Payment SHALL use a single ERC-20 token (global for the contract / Available: https://eips.ethereum.org/EIPS/eip-8183. { \"@context\": \"http://schema.org\", \"@type\": \"TechArticle\", \"headline\": \"ERC-8183: Agentic Commerce [DRAFT]\", \"name\": \"ERC-8183: / Copyright and related rights waived via CC0. / Many use cases need only: client locks funds, provider submits work, one attester (evaluator) signals \"done\" and triggers payment-or client rejects or timeout triggers refund. The Agentic Commerce Protocol specifies that minimal surface so implementations stay small and composable. / The evaluator can be the client (e.g. evaluator = client at creation) when there is no third-party attester. / A job has exactly one of six states / Open → Funded: Client or provider calls setBudget(jobId, amount) to agree on price, then client calls fund(jobId, expectedBudget); contract pulls job.budget from client into escrow. Open → Rejected: Client calls reject(jobId, reason?). Funded → Submitted: Provider calls submit(jobId, deliverable); signals that work has been completed and is ready for evaluation. Funded → Rejected: Evaluator calls reject(jobId, reason?); contract refunds client. Funded → Expired: When block.timestamp >= job.expiredAt, anyone (or client) may call claimRefund(jobId); contract sets state to Expired and refunds client. Submitted → Completed: Evaluator calls complete(jobId, reason?); contract distributes escrow to provider (and optional fee to treasury). Submitted → Rejected: Evaluator calls reject(jobId, reason?); contract refunds client. Submitted → Expired: When block.timestamp >= job.expiredAt, anyone (or client) may call claimRefund(jobId); contract sets state to Expired and refunds client. No other transitions are valid. / Once Submitted, only the evaluator can complete or reject; the client cannot pull funds back unilaterally, so the provider is protected after starting work. / Completed Terminal. Escrow released to provider (minus optional platform fee). Rejected Terminal. Escrow refunded to client. Expired Terminal. Same as Rejected; escrow refunded to client. / Agentic Commerce is intentionally minimal and does not embed a reputation system. For on-chain reputation and trust relationships between agents, implementations are RECOMMENDED to integrate with ERC-8004 (Trustless Agents). / Implementations MAY charge a platform fee (basis points) on Completed, paid to a configurable treasury. The specification does not require a fee. If present, fee SHALL be deducted only on completion (not on refund). / No dispute resolution or arbitration; reject/expire is final. / Implementations MAY support a per-job token; the specification only requires one token per contract.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://web3.okx.com/learn/erc-8183",
     "claim": "OKX Wallet, *Co-authoring ERC-8183, the open standard for agent commerce*, published 2026-06-09; fetched 2026-10-31",
     "date": null,
     "quote": "Published on Jun 09, 2026 … Today, OKX Wallet is joining the Ethereum Foundation and Virtuals as a co-author of ERC-8183, also known as the Agentic Commerce Protocol. / 2026 5 min read Today, OKX Wallet is joining the Ethereum Foundation and Virtuals",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://ethereum-magicians.org/t/erc-8183-agentic-commerce/27902",
     "claim": "Davide Crapis, Fellowship of Ethereum Magicians, *ERC-8183: Agentic Commerce - ERCs - Fellowship of Ethereum Magicians*, topic opened 2026-03-04; fetched 2026-10-31",
     "date": null,
     "quote": "all Ethereum implementations, such as-a change to the network protocol, a change in block / ERC-8183: Agentic Commerce - ERCs - Fellowship of Ethereum Magicians { \"imports\": { \"discourse/plugins/automation\":",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://basescan.org/address/0x8e86FbEf4a4c927561cb6447cEd77ffFbf3B77BC#code",
     "claim": "BaseScan, *AgenticCommerceV3 contract source on Base*, fetched 2026-10-31",
     "date": null,
     "quote": "| ###### Cross-Chain Transactions ###### Contract Name #### AgenticCommerceV3 ###### Compiler Version ###### Optimization",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://www.arc.io/blog/running-an-agentic-economic-flow-on-arc-with-erc-8183",
     "claim": "Blessing Adesiji, Circle, *Using Arc with ERC-8183 to Run an Agentic Economic Flow*, April 7, 2026; fetched 2026-10-31",
     "date": null,
     "quote": "works on Arc Testnet with USDC and Circle Wallets, from job creation and funding",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://os.virtuals.io/acp/overview",
     "claim": "Virtuals Protocol, *What is ACP? – EconomyOS*, fetched 2026-10-31",
     "date": null,
     "quote": "Read llms.txt for a summary of the docs, or llms-full.txt for the full context. / Mainnet) Contract Address ACP Core 0x238E541BfefD82238730D00a2208E5497F1832E0 FundTransferHook 0x90717828D78731313CB350D6a58b0f91668Ea702 accept-ranges: bytes content-disposition: inline; filename=\"index.html\" / Current ACP Protocol primitive Memos - signed on-chain messages Hooks - smart contracts with / With those learnings, we proposed ERC-8183 and built ACP as its reference implementation. Earlier",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://docs.arc.io/arc/references/contract-addresses",
     "claim": "Arc Docs, *Contract addresses - Arc Docs*, fetched 2026-10-31",
     "date": null,
     "quote": "Contract addresses - Arc Docs (function(c){var P=c.primary,F=c.fallbacks,found,probes={},checks={},down,reported;window.__mintAssets=P;function / and ERC-20 interfaces share the same underlying balance. Mainnet Testnet Contract Address Notes USDC",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://eips.ethereum.org/EIPS/eip-20",
     "claim": "Fabian Vogelsteller and Vitalik Buterin (Ethereum), *ERC-20: Token Standard*, 2015-11-19",
     "date": "2015-11-19",
     "quote": "Simple Summary A standard interface for tokens.",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://raw.githubusercontent.com/ethereum/ERCs/master/ERCS/erc-8004.md",
     "claim": "Marco De Rossi, Davide Crapis, Jordan Ellis, and Erik Reppel, *ERCS/erc-8004.md (Trustless Agents)*, created 2025-08-13; fetched 2026-10-30",
     "date": null,
     "quote": "author: Marco De Rossi (@MarcoMetaMask), Davide Crapis (@dcrapis) <davide@ethereum.org>, Jordan Ellis <jordanellis@google.com>, Erik Reppel <erik.reppel@coinbase.com> discussions-to: https://ethereum-magicians.org/t/erc-8004-trustless-agents/25098 status: Draft type: Standards Track category: ERC created: 2025-08-13 requires: 155, 712, 721, 1271",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://www.linuxfoundation.org/press/linux-foundation-announces-operational-launch-of-x402-foundation-to-standardize-internet-native-payments-for-ai-agents-and-applications",
     "claim": "Linux Foundation, *Linux Foundation Announces Operational Launch of x402 Foundation to Standardize Internet-Native Payments for AI Agents and Applications*, July 14, 2026",
     "date": null,
     "quote": "SAN FRANCISCO, July 14, 2026 – The Linux Foundation , the nonprofit organization enabling mass innovation through open source, today announced the operational launch of the x402 Foundation",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://github.com/ethereum/ERCs/pull/1844",
     "claim": "thamerdridi, *Update ERC-8226: add reference implementation and refine spec*, merged 2026-06-29; fetched 2026-10-31",
     "date": null,
     "quote": "\"https://github.com/ethereum/ERCs/pull/1844.diff\", \"patch_url\": \"https://github.com/ethereum/ERCs/pull/1844.patch\", \"merged_at\": \"2026-06-29T21:55:50Z\" }, \"body\": \"this pr updates ERC-8226 (Regulated Agent",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://www.ietf.org/archive/id/draft-stone-vcap-02.html",
     "claim": "B. Stone, SwarmSync.AI, *VCAP: Verified Commerce for Agent Protocols (draft-stone-vcap-02)*, 4 September 2026; expires 8 March 2027",
     "date": null,
     "quote": "--- --- --- --- --- Stone Expires 8 March 2027 Page VCAP: Verified Commerce",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://basescan.org/address/0x238E541BfefD82238730D00a2208E5497F1832E0",
     "claim": "BaseScan, *ERC1967Proxy contract on Base*, fetched 2026-10-31",
     "date": null,
     "quote": "Logo!BaseScan Logo!BaseScan Logo ###### Developer Tools ###### Smart Contract Tools ###### Explore ###### Services![](/assets/base/images/svg/empty-token.svg?v=26.10.4.0)",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://explorer.testnet.arc.io/api/v2/addresses/0x0747EEf0706327138c69792bF28Cd525089e4583",
     "claim": "Arc Testnet Explorer, *Address 0x0747EEf0706327138c69792bF28Cd525089e4583*, fetched 2026-10-31",
     "date": null,
     "quote": "date: Sat, 31 Oct 2026 03:10:30 GMT",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://registry.npmjs.org/@virtuals-protocol/acp-node-v2",
     "claim": "Virtuals Protocol, *@virtuals-protocol/acp-node-v2*, fetched 2026-10-31",
     "date": null,
     "quote": "exit 1\",\"build\":\"tsc\",\"start\":\"node dist/index.js\",\"prepare\":\"tsc\"},\"_npmUser\":{\"name\":\"zuhwa\",\"email\":\"[email redacted]\"},\"_npmVersion\":\"10.9.2\",\"description\":\"The Agent Commerce Protocol (ACP) Node SDK v2",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://registry.npmjs.org/@virtuals-protocol/acp-cli",
     "claim": "Virtuals Protocol, *@virtuals-protocol/acp-cli*, fetched 2026-10-31",
     "date": null,
     "quote": "npm run build\"},\"_npmUser\":{\"name\":\"zuhwa\",\"email\":\"[email redacted]\"},\"repository\":{\"url\":\"git+https://github.com/Virtual-Protocol/acp-cli.git\",\"type\":\"git\"},\"_npmVersion\":\"10.9.2\",\"description\":\"CLI tool",
     "ref": 16
    }
   ],
   "form": "onchain-registry",
   "governance": "Ethereum EIP/ERC process (Ethereum Magicians discussion + EIPs repository); status Draft, an ERC Standards Track proposal, not yet Final",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against eips.ethereum.org/EIPS/eip-8183; flagged name collision with agentic-commerce-protocol (ACP)"
    },
    {
     "date": "2026-10-29",
     "note": "Added verified ecosystem adoption (Virtuals Protocol on Base mainnet, Circle on Arc Testnet, OKX Wallet announced) and client implementation (Virtuals ACP SDK, Virtuals ACP CLI, Circle Wallets testnet demo)"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "erc-8183",
   "implementation": "shipping",
   "last_verified": "2026-11-12",
   "name": "ERC-8183: Agentic Commerce",
   "native_status": "Draft ERC — 'This specification defines the Agentic Commerce Protocol: a job with escrowed budget...'",
   "origin": {
    "date": "2026-02-25",
    "org": "Ethereum Foundation dAI team and Virtuals Protocol (Davide Crapis, Bryan Lim, Tay Weixiong, Chooi Zuhwa); OKX Wallet announced co-authorship 2026-06-09 (not yet listed on the EIP header)"
   },
   "part_of": null,
   "parties": [
    "agent-agent",
    "agent-site"
   ],
   "phase": "draft",
   "probe": {
    "method": "eth_call",
    "on_absent": "Absence at a given contract address only shows that specific deployment does not implement ERC-8183; there is no registry of ERC-8183 deployments to enumerate, so 'is ERC-8183 adopted' cannot be answered by any single probe.",
    "parse": "Contract implements the ERC-8183 job state machine functions (setBudget, fund, submit, complete, reject, claimRefund) and emits the corresponding lifecycle events; requires EIP-20 for the escrowed token",
    "path": "{contract_address}"
   },
   "question": "How can two agents (a client and a provider) settle a job on-chain, with funds held in escrow and released only once an evaluator attests the work was done?",
   "scope": "commerce",
   "spec_url": "https://eips.ethereum.org/EIPS/eip-8183",
   "step": "pay",
   "summary_md": "**ERC-8183: Agentic Commerce** is a Draft Standards Track ERC that defines the Agentic Commerce Protocol: a job with an escrowed budget and an evaluator who alone may mark the job completed. The abstract summarizes four states: Open, Funded, Submitted, and Terminal. Davide Crapis (`@dcrapis`), Bryan Lim (`@ai-virtual-b`), Tay Weixiong (`@twx-virtuals`), and Chooi Zuhwa (`@Zuhwa`) created it on 2026-02-25. The header requires EIP-20 and links discussion to the Ethereum Magicians thread for this ERC. Payment SHALL use a single ERC-20 token, global for the contract or specified at creation. The client or the provider calls `setBudget`, then the client calls `fund`, and the contract pulls `job.budget` into escrow. The provider calls `submit` with a `deliverable` to move Funded to Submitted. Once Submitted, only the evaluator may `complete` or `reject`. A hook contract SHALL implement `IACPHook` with `beforeAction` and `afterAction`. When a hook is set, the core contract SHALL call both around each hookable function. `claimRefund` SHALL NOT be hookable. The specification calls that call a permissionless safety mechanism. The EIP header tracks the proposal as `ERC-8183: Agentic Commerce [DRAFT]` (`Created 2026-02-25`) on the Ethereum Standards Track. The abstract ends in Terminal. The state machine says a job has exactly one of six states and that no other transitions are valid. The rationale defines Terminal as Completed, Rejected, or Expired. On Jun 09, 2026, OKX Wallet wrote that it is joining the Ethereum Foundation and Virtuals as a co-author of ERC-8183.",
   "track": "community",
   "version": {
    "date": "2026-02-25",
    "label": "Draft, created 2026-02-25"
   },
   "watch": [
    {
     "type": "erc",
     "num": 8183
    }
   ],
   "use_cases": [
    "accept-agent-payments",
    "agent-to-agent-messaging",
    "audit-agent-actions"
   ],
   "audience": [
    "agent-builder",
    "platform"
   ],
   "pairs_with": [
    "erc-8004",
    "x402",
    "erc-8226",
    "vcap"
   ],
   "prerequisites": [
    "erc-8004"
   ],
   "hatnote_md": "This page covers ERC-8183: Agentic Commerce, whose specification calls itself the Agentic Commerce Protocol. For unrelated protocols that share the acronym ACP, see OpenAI and Stripe's [Agentic Commerce Protocol](/protocols/agentic-commerce-protocol/), Zed's [Agent Client Protocol](/protocols/agent-client-protocol/), AGNTCY's [Agent Connect Protocol](/protocols/agent-connect-protocol/), IBM's [Agent Communication Protocol](/protocols/agent-communication-protocol/), and the [ACP overview](/terms/acp/).",
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "payments_onchain",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "This page covers ERC-8183: Agentic Commerce, whose specification calls itself the Agentic Commerce Protocol. For unrelated protocols that share the acronym ACP, see OpenAI and Stripe's [Agentic Commerce Protocol](/protocols/agentic-commerce-protocol/), Zed's [Agent Client Protocol](/protocols/agent-client-protocol/), AGNTCY's [Agent Connect Protocol](/protocols/agent-connect-protocol/), IBM's [Agent Communication Protocol](/protocols/agent-communication-protocol/), and the [ACP overview](/terms/acp/). [1]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**ERC-8183: Agentic Commerce** is a Draft Standards Track ERC that defines the Agentic Commerce Protocol: a job with an escrowed budget and an evaluator who alone may mark the job completed. The abstract summarizes four states: Open, Funded, Submitted, and Terminal. [1] Davide Crapis (`@dcrapis`), Bryan Lim (`@ai-virtual-b`), Tay Weixiong (`@twx-virtuals`), and Chooi Zuhwa (`@Zuhwa`) created it on 2026-02-25. The header requires EIP-20 and links discussion to the Ethereum Magicians thread for this ERC. [1] Payment SHALL use a single ERC-20 token, global for the contract or specified at creation. The client or the provider calls `setBudget`, then the client calls `fund`, and the contract pulls `job.budget` into escrow. [1] The provider calls `submit` with a `deliverable` to move Funded to Submitted. Once Submitted, only the evaluator may `complete` or `reject`. [1] A hook contract SHALL implement `IACPHook` with `beforeAction` and `afterAction`. When a hook is set, the core contract SHALL call both around each hookable function. [1] `claimRefund` SHALL NOT be hookable. The specification calls that call a permissionless safety mechanism. [1] The EIP header tracks the proposal as `ERC-8183: Agentic Commerce [DRAFT]` (`Created 2026-02-25`) on the Ethereum Standards Track. [1] The abstract ends in Terminal. The state machine says a job has exactly one of six states and that no other transitions are valid. The rationale defines Terminal as Completed, Rejected, or Expired. [1] On Jun 09, 2026, OKX Wallet wrote that it is joining the Ethereum Foundation and Virtuals as a co-author of ERC-8183. [2]",
   "v05_identity_sentence_md": "**ERC-8183: Agentic Commerce** is a Draft Standards Track ERC that defines the Agentic Commerce Protocol: a job with an escrowed budget and an evaluator who alone may mark the job completed. The abstract summarizes four states: Open, Funded, Submitted, and Terminal. [1] Davide Crapis (`@dcrapis`), Bryan Lim (`@ai-virtual-b`), Tay Weixiong (`@twx-virtuals`), and Chooi Zuhwa (`@Zuhwa`) created it on 2026-02-25. The header requires EIP-20 and links discussion to the Ethereum Magicians thread for this ERC. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Pay](/category/pay/) (`pay`)"
    },
    {
     "label": "Form",
     "value_md": "On-chain registry (`onchain-registry`)"
    },
    {
     "label": "Originated by",
     "value_md": "Davide Crapis (Ethereum Foundation dAI team) with Bryan Lim, Tay Weixiong and Chooi Zuhwa (Virtuals Protocol); OKX Wallet announced co-authorship on 2026-06-09 [1][2][3]"
    },
    {
     "label": "Governed by",
     "value_md": "Ethereum ERC process (Standards Track: ERC, status Draft), discussed on Ethereum Magicians [1][3]"
    },
    {
     "label": "Track",
     "value_md": "Ethereum Standards Track (ERC) [1]"
    },
    {
     "label": "Status",
     "value_md": "Draft Standards Track ERC (created 2026-02-25; defines the Agentic Commerce Protocol for jobs with escrowed budget and evaluator attestation) [1][4]"
    },
    {
     "label": "Version",
     "value_md": "Draft created 2026-02-25, no version number; Virtuals production contract is `AgenticCommerceV3` [1][4]"
    },
    {
     "label": "Wire format",
     "value_md": "Solidity ABI calls and events on EVM chains, escrow in a single EIP-20 token (USDC on Arc) [1][5]"
    },
    {
     "label": "Specification",
     "value_md": "https://eips.ethereum.org/EIPS/eip-8183 [1]"
    },
    {
     "label": "Found at",
     "value_md": "No HTTP headers or well-known paths; contract addresses are published in operator docs [6][7]"
    },
    {
     "label": "Licence",
     "value_md": "CC0 1.0 Universal (public domain waiver) [1]"
    }
   ],
   "v05_problem_md": "Many use cases need only a client locking funds, a provider submitting work, and one evaluator signaling done, or a rejection or a timeout refund. The protocol specifies that minimal surface so implementations stay small and composable. [1] A job has exactly one of six states, and no other transitions are valid. Open reaches Funded on `fund` after `setBudget`, or Rejected on the client's `reject`. Funded reaches Submitted on `submit`, Rejected on the evaluator's `reject`, or Expired on `claimRefund` after `expiredAt`. [1] Once Submitted, only the evaluator can complete or reject, so the client cannot pull funds back unilaterally. Completed pays the provider minus an optional platform fee. Rejected and Expired refund the client. [1] The specification does not embed a reputation system and implementations are RECOMMENDED to integrate with ERC-8004. A platform fee is not required. Implementations MAY charge one on Completed, and if present it SHALL be deducted only on completion, not on refund. [1] There is no dispute resolution or arbitration, and reject or expiry is final. The specification only requires one payment token per contract, and a per-job token is a MAY. [1]",
   "v05_mechanism_delta_md": "A job has exactly one of six states, and no other transitions are valid. Open reaches Funded on `fund` after `setBudget`, or Rejected on the client's `reject`. Funded reaches Submitted on `submit`, Rejected on the evaluator's `reject`, or Expired on `claimRefund` after `expiredAt`. [1] Once Submitted, only the evaluator can complete or reject, so the client cannot pull funds back unilaterally. Completed pays the provider minus an optional platform fee. Rejected and Expired refund the client. [1]",
   "v05_scope_boundary_md": "The specification does not embed a reputation system and implementations are RECOMMENDED to integrate with ERC-8004. A platform fee is not required. Implementations MAY charge one on Completed, and if present it SHALL be deducted only on completion, not on refund. [1] There is no dispute resolution or arbitration, and reject or expiry is final. The specification only requires one payment token per contract, and a per-job token is a MAY. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "EIP-20: Token Standard",
      "spec_or_rfc": "ERC-20 (EIP-20)",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "ERC-8183 locks the job budget as an EIP-20 token and moves the job through Open, Funded, Submitted, Completed, Rejected, and Expired, until the evaluator attests completion, releasing escrow, or rejects and refunds the client. [1][8]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "erc-8004",
      "target_name": "ERC-8004: Trustless Agents",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "ERC-8183 requires only EIP-20 in its front matter and marks ERC-8004 as RECOMMENDED for optional identity and reputation composition via attestation hashes, while ERC-8183 itself is the on-chain EIP-20 job escrow contract discovered by contract address and ABI. [1][9]"
     },
     {
      "target_id": "x402",
      "target_name": "x402",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ERC-8183 settlement is the on-chain EIP-20 job moving through states Open, Funded, Submitted, Completed, Rejected, and Expired, while x402 settlement is an HTTP 402 PAYMENT-SIGNATURE payload verified by a facilitator. [1][10]"
     },
     {
      "target_id": "erc-8226",
      "target_name": "ERC-8226 Regulated Agent Mandate",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "ERC-8226 stores a regulated agent mandate on-chain, while ERC-8183's contract surface is the EIP-20 job escrow, including reference types AgenticCommerce.sol and IACPHook.sol, and it does not define that mandate. [1][11]"
     },
     {
      "target_id": "vcap",
      "target_name": "VCAP: Verified Commerce for Agent Protocols",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ERC-8183 holds the EIP-20 budget inside the job contract until the evaluator attests completion or rejects, while VCAP's escrow is an external rail released or refunded by a verification callback. [1][12]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (5 probed or cited examples; non-exhaustive).",
    "side_a": {
     "visible": true,
     "heading": "Sellers, platforms & payment rails",
     "col4_header": "Rail, Asset & Scheme",
     "note_md": null,
     "rows": [
      {
       "actor": "Virtuals Protocol (`AgenticCommerceV3`)",
       "role": "Escrow platform & settlement contract (Co-author)",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · as of 2026-10-29",
       "col4_md": "EIP-20 token escrow & evaluator attestation contract on Base (`0x238E541BfefD82238730D00a2208E5497F1832E0` proxy to AgenticCommerceV3); 6-state job machine (Open → Funded → Submitted → Completed/Rejected/Expired), 7,630 mainnet txns as of 2026-10-29",
       "source_md": "[Virtuals ACP Overview (checked 2026-10-29)](https://os.virtuals.io/acp/overview) [6] · [Basescan 0x238E…32E0](https://basescan.org/address/0x238E541BfefD82238730D00a2208E5497F1832E0) [13]"
      },
      {
       "actor": "Circle (`AgenticCommerce` on Arc Testnet)",
       "role": "Reference escrow contract",
       "status": "Experimental",
       "status_display": "Experimental · as of 2026-10-29",
       "col4_md": "USDC job escrow & post-evaluation settlement contract on Arc Testnet (`0x0747EEf0706327138c69792bF28Cd525089e4583`, 629,018 testnet txns as of 2026-10-29; no mainnet address)",
       "source_md": "[Arc Docs Contract Addresses (checked 2026-10-29)](https://docs.arc.io/arc/references/contract-addresses) [7] · [Arc Testnet Explorer](https://explorer.testnet.arc.io/api/v2/addresses/0x0747EEf0706327138c69792bF28Cd525089e4583) [14]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Buying agents, wallets & client SDKs",
     "col4_header": "Rail, Asset & Scheme",
     "note_md": null,
     "rows": [
      {
       "actor": "Virtuals ACP SDK (`@virtuals-protocol/acp-node-v2`)",
       "role": "Client SDK (Co-author)",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-31",
       "col4_md": "Node.js SDK (v0.1.15 on npm) for programmatic agents and LLM-driven automation interacting with Virtuals' ERC-8183 escrow contracts on Base",
       "source_md": "[Virtuals ACP Overview (checked 2026-10-29)](https://os.virtuals.io/acp/overview) [6] · [npm @virtuals-protocol/acp-node-v2](https://registry.npmjs.org/@virtuals-protocol/acp-node-v2) [15]"
      },
      {
       "actor": "Virtuals ACP CLI (`@virtuals-protocol/acp-cli`)",
       "role": "Client CLI (Co-author)",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-31",
       "col4_md": "CLI (v1.0.40 on npm) for shell-based agents, scripted workflows, and human-operated ERC-8183 job management on Base",
       "source_md": "[Virtuals ACP Overview (checked 2026-10-29)](https://os.virtuals.io/acp/overview) [6] · [npm @virtuals-protocol/acp-cli](https://registry.npmjs.org/@virtuals-protocol/acp-cli) [16]"
      },
      {
       "actor": "Circle Wallets (Arc Testnet walkthrough)",
       "role": "Wallet (Testnet Demo)",
       "status": "Experimental",
       "status_display": "Experimental · checked 2026-10-31",
       "col4_md": "Circle programmable wallets driving the ERC-8183 USDC job escrow lifecycle on Arc Testnet",
       "source_md": "[Arc Blog (2026-04-07)](https://www.arc.io/blog/running-an-agentic-economic-flow-on-arc-with-erc-8183) [5]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "agora-commerce-protocol",
     "target_name": "Agora (agent marketplace protocol)",
     "relation_label": "Peer alternative",
     "delta": "Agora's escrow is AgoraEscrowV2 on Base Sepolia, called from /v1/payments/execute and /v1/x402/jobs, while ERC-8183 is a Draft Standards Track Ethereum ERC for on-chain job escrow over EIP-20 (ERC-20) tokens whose evaluator attests completion or rejects.",
     "item_md": "**[Agora (agent marketplace protocol)](/protocols/agora-commerce-protocol/)** (Peer alternative) — Agora's escrow is AgoraEscrowV2 on Base Sepolia, called from /v1/payments/execute and /v1/x402/jobs, while ERC-8183 is a Draft Standards Track Ethereum ERC for on-chain job escrow over EIP-20 (ERC-20) tokens whose evaluator attests completion or rejects."
    },
    {
     "target_id": "erc-8001",
     "target_name": "ERC-8001: Agent Coordination Framework",
     "relation_label": "Complements",
     "delta": "ERC-8183 defines an on-chain Agentic Commerce job escrow state machine (Open, Funded, Submitted, Completed, Rejected, Expired) with evaluator attestation, while ERC-8001 is the EIP-712 countersigned multi-party intent coordination contract.",
     "item_md": "**[ERC-8001: Agent Coordination Framework](/protocols/erc-8001/)** (Complements) — ERC-8183 defines an on-chain Agentic Commerce job escrow state machine (Open, Funded, Submitted, Completed, Rejected, Expired) with evaluator attestation, while ERC-8001 is the EIP-712 countersigned multi-party intent coordination contract."
    },
    {
     "item_md": "**[Pay protocols](/category/pay/)** — Category index for `pay` standards."
    }
   ],
   "v05_compiled_md": "---\nid: erc-8183\ntitle: \"ERC-8183: Agentic Commerce\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: pay\nform: onchain-registry\nwire_archetype: payments_onchain\nspec_url: https://eips.ethereum.org/EIPS/eip-8183\nlast_checked: 2026-11-12\n---\n\n# ERC-8183: Agentic Commerce\n\n**Category:** [Pay](/category/pay/) (`pay`) · **Form:** On-chain registry (`onchain-registry`) · **Last checked:** 2026-11-12\n\n> *This page covers ERC-8183: Agentic Commerce, whose specification calls itself the Agentic Commerce Protocol. For unrelated protocols that share the acronym ACP, see OpenAI and Stripe's [Agentic Commerce Protocol](/protocols/agentic-commerce-protocol/), Zed's [Agent Client Protocol](/protocols/agent-client-protocol/), AGNTCY's [Agent Connect Protocol](/protocols/agent-connect-protocol/), IBM's [Agent Communication Protocol](/protocols/agent-communication-protocol/), and the [ACP overview](/terms/acp/). [1]*\n\n**ERC-8183: Agentic Commerce** is a Draft Standards Track ERC that defines the Agentic Commerce Protocol: a job with an escrowed budget and an evaluator who alone may mark the job completed. The abstract summarizes four states: Open, Funded, Submitted, and Terminal. [1] Davide Crapis (`@dcrapis`), Bryan Lim (`@ai-virtual-b`), Tay Weixiong (`@twx-virtuals`), and Chooi Zuhwa (`@Zuhwa`) created it on 2026-02-25. The header requires EIP-20 and links discussion to the Ethereum Magicians thread for this ERC. [1] Payment SHALL use a single ERC-20 token, global for the contract or specified at creation. The client or the provider calls `setBudget`, then the client calls `fund`, and the contract pulls `job.budget` into escrow. [1] The provider calls `submit` with a `deliverable` to move Funded to Submitted. Once Submitted, only the evaluator may `complete` or `reject`. [1] A hook contract SHALL implement `IACPHook` with `beforeAction` and `afterAction`. When a hook is set, the core contract SHALL call both around each hookable function. [1] `claimRefund` SHALL NOT be hookable. The specification calls that call a permissionless safety mechanism. [1] The EIP header tracks the proposal as `ERC-8183: Agentic Commerce [DRAFT]` (`Created 2026-02-25`) on the Ethereum Standards Track. [1] The abstract ends in Terminal. The state machine says a job has exactly one of six states and that no other transitions are valid. The rationale defines Terminal as Completed, Rejected, or Expired. [1] On Jun 09, 2026, OKX Wallet wrote that it is joining the Ethereum Foundation and Virtuals as a co-author of ERC-8183. [2]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Pay](/category/pay/) (`pay`) |\n| **Form** | On-chain registry (`onchain-registry`) |\n| **Originated by** | Davide Crapis (Ethereum Foundation dAI team) with Bryan Lim, Tay Weixiong and Chooi Zuhwa (Virtuals Protocol); OKX Wallet announced co-authorship on 2026-06-09 [1][2][3] |\n| **Governed by** | Ethereum ERC process (Standards Track: ERC, status Draft), discussed on Ethereum Magicians [1][3] |\n| **Track** | Ethereum Standards Track (ERC) [1] |\n| **Status** | Draft Standards Track ERC (created 2026-02-25; defines the Agentic Commerce Protocol for jobs with escrowed budget and evaluator attestation) [1][4] |\n| **Version** | Draft created 2026-02-25, no version number; Virtuals production contract is `AgenticCommerceV3` [1][4] |\n| **Wire format** | Solidity ABI calls and events on EVM chains, escrow in a single EIP-20 token (USDC on Arc) [1][5] |\n| **Specification** | https://eips.ethereum.org/EIPS/eip-8183 [1] |\n| **Found at** | No HTTP headers or well-known paths; contract addresses are published in operator docs [6][7] |\n| **Licence** | CC0 1.0 Universal (public domain waiver) [1] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [Adoption and ecosystem](#adoption-and-ecosystem)\n4. [See also](#see-also)\n5. [References](#references)\n\n---\n\n## Problem and scope\n\nMany use cases need only a client locking funds, a provider submitting work, and one evaluator signaling done, or a rejection or a timeout refund. The protocol specifies that minimal surface so implementations stay small and composable. [1] A job has exactly one of six states, and no other transitions are valid. Open reaches Funded on `fund` after `setBudget`, or Rejected on the client's `reject`. Funded reaches Submitted on `submit`, Rejected on the evaluator's `reject`, or Expired on `claimRefund` after `expiredAt`. [1] Once Submitted, only the evaluator can complete or reject, so the client cannot pull funds back unilaterally. Completed pays the provider minus an optional platform fee. Rejected and Expired refund the client. [1] The specification does not embed a reputation system and implementations are RECOMMENDED to integrate with ERC-8004. A platform fee is not required. Implementations MAY charge one on Completed, and if present it SHALL be deducted only on completion, not on refund. [1] There is no dispute resolution or arbitration, and reject or expiry is final. The specification only requires one payment token per contract, and a per-job token is a MAY. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **EIP-20: Token Standard** | `ERC-20 (EIP-20)` | Profiles classic standard | ERC-8183 locks the job budget as an EIP-20 token and moves the job through Open, Funded, Submitted, Completed, Rejected, and Expired, until the evaluator attests completion, releasing escrow, or rejects and refunds the client. [1][8] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[ERC-8004: Trustless Agents](/protocols/erc-8004/)** | Complements | ERC-8183 requires only EIP-20 in its front matter and marks ERC-8004 as RECOMMENDED for optional identity and reputation composition via attestation hashes, while ERC-8183 itself is the on-chain EIP-20 job escrow contract discovered by contract address and ABI. [1][9] |\n| **[x402](/protocols/x402/)** | Peer alternative | ERC-8183 settlement is the on-chain EIP-20 job moving through states Open, Funded, Submitted, Completed, Rejected, and Expired, while x402 settlement is an HTTP 402 PAYMENT-SIGNATURE payload verified by a facilitator. [1][10] |\n| **[ERC-8226 Regulated Agent Mandate](/protocols/erc-8226/)** | Complements | ERC-8226 stores a regulated agent mandate on-chain, while ERC-8183's contract surface is the EIP-20 job escrow, including reference types AgenticCommerce.sol and IACPHook.sol, and it does not define that mandate. [1][11] |\n| **[VCAP: Verified Commerce for Agent Protocols](/protocols/vcap/)** | Peer alternative | ERC-8183 holds the EIP-20 budget inside the job contract until the evaluator attests completion or rejects, while VCAP's escrow is an external rail released or refunded by a verification callback. [1][12] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (5 probed or cited examples; non-exhaustive).*\n\n### Sellers, platforms & payment rails\n\n| Actor | Role | Status | Rail, Asset & Scheme | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Virtuals Protocol (`AgenticCommerceV3`)** | Escrow platform & settlement contract (Co-author) | Live (HTTP 200) · as of 2026-10-29 | EIP-20 token escrow & evaluator attestation contract on Base (`0x238E541BfefD82238730D00a2208E5497F1832E0` proxy to AgenticCommerceV3); 6-state job machine (Open → Funded → Submitted → Completed/Rejected/Expired), 7,630 mainnet txns as of 2026-10-29 | [Virtuals ACP Overview (checked 2026-10-29)](https://os.virtuals.io/acp/overview) [6] · [Basescan 0x238E…32E0](https://basescan.org/address/0x238E541BfefD82238730D00a2208E5497F1832E0) [13] |\n| **Circle (`AgenticCommerce` on Arc Testnet)** | Reference escrow contract | Experimental · as of 2026-10-29 | USDC job escrow & post-evaluation settlement contract on Arc Testnet (`0x0747EEf0706327138c69792bF28Cd525089e4583`, 629,018 testnet txns as of 2026-10-29; no mainnet address) | [Arc Docs Contract Addresses (checked 2026-10-29)](https://docs.arc.io/arc/references/contract-addresses) [7] · [Arc Testnet Explorer](https://explorer.testnet.arc.io/api/v2/addresses/0x0747EEf0706327138c69792bF28Cd525089e4583) [14] |\n\n### Buying agents, wallets & client SDKs\n\n| Actor | Role | Status | Rail, Asset & Scheme | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Virtuals ACP SDK (`@virtuals-protocol/acp-node-v2`)** | Client SDK (Co-author) | Supported · checked 2026-10-31 | Node.js SDK (v0.1.15 on npm) for programmatic agents and LLM-driven automation interacting with Virtuals' ERC-8183 escrow contracts on Base | [Virtuals ACP Overview (checked 2026-10-29)](https://os.virtuals.io/acp/overview) [6] · [npm @virtuals-protocol/acp-node-v2](https://registry.npmjs.org/@virtuals-protocol/acp-node-v2) [15] |\n| **Virtuals ACP CLI (`@virtuals-protocol/acp-cli`)** | Client CLI (Co-author) | Supported · checked 2026-10-31 | CLI (v1.0.40 on npm) for shell-based agents, scripted workflows, and human-operated ERC-8183 job management on Base | [Virtuals ACP Overview (checked 2026-10-29)](https://os.virtuals.io/acp/overview) [6] · [npm @virtuals-protocol/acp-cli](https://registry.npmjs.org/@virtuals-protocol/acp-cli) [16] |\n| **Circle Wallets (Arc Testnet walkthrough)** | Wallet (Testnet Demo) | Experimental · checked 2026-10-31 | Circle programmable wallets driving the ERC-8183 USDC job escrow lifecycle on Arc Testnet | [Arc Blog (2026-04-07)](https://www.arc.io/blog/running-an-agentic-economic-flow-on-arc-with-erc-8183) [5] |\n\n---\n\n## See also\n\n- **[Agora (agent marketplace protocol)](/protocols/agora-commerce-protocol/)** *(Peer alternative)* — Agora's escrow is AgoraEscrowV2 on Base Sepolia, called from /v1/payments/execute and /v1/x402/jobs, while ERC-8183 is a Draft Standards Track Ethereum ERC for on-chain job escrow over EIP-20 (ERC-20) tokens whose evaluator attests completion or rejects.\n- **[ERC-8001: Agent Coordination Framework](/protocols/erc-8001/)** *(Complements)* — ERC-8183 defines an on-chain Agentic Commerce job escrow state machine (Open, Funded, Submitted, Completed, Rejected, Expired) with evaluator attestation, while ERC-8001 is the EIP-712 countersigned multi-party intent coordination contract.\n- **Category:** [Pay protocols](/category/pay/)\n\n---\n\n## References\n\n1. Davide Crapis, Bryan Lim, Tay Weixiong, and Chooi Zuhwa, *ERC-8183: Agentic Commerce* (created 2026-02-25; fetched 2026-10-31) — <https://eips.ethereum.org/EIPS/eip-8183>\n2. OKX Wallet, *Co-authoring ERC-8183, the open standard for agent commerce* (published 2026-06-09; fetched 2026-10-31) — <https://web3.okx.com/learn/erc-8183>\n3. Davide Crapis, Fellowship of Ethereum Magicians, *ERC-8183: Agentic Commerce - ERCs - Fellowship of Ethereum Magicians* (topic opened 2026-03-04; fetched 2026-10-31) — <https://ethereum-magicians.org/t/erc-8183-agentic-commerce/27902>\n4. BaseScan, *AgenticCommerceV3 contract source on Base* (fetched 2026-10-31) — <https://basescan.org/address/0x8e86FbEf4a4c927561cb6447cEd77ffFbf3B77BC#code>\n5. Blessing Adesiji, Circle, *Using Arc with ERC-8183 to Run an Agentic Economic Flow* (April 7, 2026; fetched 2026-10-31) — <https://www.arc.io/blog/running-an-agentic-economic-flow-on-arc-with-erc-8183>\n6. Virtuals Protocol, *What is ACP? – EconomyOS* (fetched 2026-10-31) — <https://os.virtuals.io/acp/overview>\n7. Arc Docs, *Contract addresses - Arc Docs* (fetched 2026-10-31) — <https://docs.arc.io/arc/references/contract-addresses>\n8. Fabian Vogelsteller and Vitalik Buterin (Ethereum), *ERC-20: Token Standard* (2015-11-19) — <https://eips.ethereum.org/EIPS/eip-20>\n9. Marco De Rossi, Davide Crapis, Jordan Ellis, and Erik Reppel, *ERCS/erc-8004.md (Trustless Agents)* (created 2025-08-13; fetched 2026-10-30) — <https://raw.githubusercontent.com/ethereum/ERCs/master/ERCS/erc-8004.md>\n10. Linux Foundation, *Linux Foundation Announces Operational Launch of x402 Foundation to Standardize Internet-Native Payments for AI Agents and Applications* (July 14, 2026) — <https://www.linuxfoundation.org/press/linux-foundation-announces-operational-launch-of-x402-foundation-to-standardize-internet-native-payments-for-ai-agents-and-applications>\n11. thamerdridi, *Update ERC-8226: add reference implementation and refine spec* (merged 2026-06-29; fetched 2026-10-31) — <https://github.com/ethereum/ERCs/pull/1844>\n12. B. Stone, SwarmSync.AI, *VCAP: Verified Commerce for Agent Protocols (draft-stone-vcap-02)* (4 September 2026; expires 8 March 2027) — <https://www.ietf.org/archive/id/draft-stone-vcap-02.html>\n13. BaseScan, *ERC1967Proxy contract on Base* (fetched 2026-10-31) — <https://basescan.org/address/0x238E541BfefD82238730D00a2208E5497F1832E0>\n14. Arc Testnet Explorer, *Address 0x0747EEf0706327138c69792bF28Cd525089e4583* (fetched 2026-10-31) — <https://explorer.testnet.arc.io/api/v2/addresses/0x0747EEf0706327138c69792bF28Cd525089e4583>\n15. Virtuals Protocol, *@virtuals-protocol/acp-node-v2* (fetched 2026-10-31) — <https://registry.npmjs.org/@virtuals-protocol/acp-node-v2>\n16. Virtuals Protocol, *@virtuals-protocol/acp-cli* (fetched 2026-10-31) — <https://registry.npmjs.org/@virtuals-protocol/acp-cli>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "ERC-8226",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "aliases": [
    "RAMS",
    "Regulated Agent Mandate Standard"
   ],
   "analog": "Power of attorney",
   "collisions": [],
   "discovery": {
    "mechanism": "EVM contract interface detection (ERC-165 supportsInterface for IAgentMandate)",
    "path": null
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://raw.githubusercontent.com/ethereum/ERCs/master/ERCS/erc-8226.md",
     "claim": "Ludovico Rossi (@ludovicor-eth), Dario Lo Buglio (@xaler5), Thamer Dridi (@thamerdridi), and Nabil El Alami Khalifi (@nabil-brickken), *ERC-8226: Regulated Agent Mandate*, created 2026-04-12; fetched 2026-10-31",
     "date": null,
     "quote": "This standard defines a compliance delegation layer for AI agents operating on tokenized regulated assets. It specifies how a verified principal can delegate scoped, time-bounded, and financially capped authority to an on-chain agent, and how a regulated token verifies the mandate before an agent-initiated action. / author: Ludovico Rossi (@ludovicor-eth) … Nabil El Alami Khalifi (@nabil-brickken) / Any contract in the agent's execution path calls `canExecute` to verify the mandate and `recordExecution` to record use. / The principal is the holder (`from`) and the agent is the caller (`msg.sender`); a call with `msg.sender != from` is agent-initiated and MUST satisfy the `(msg.sender, from)` mandate. / All implementations MUST implement [ERC-165](./eip-165.md). / RAMS introduces no changes to any existing standard. / author: Ludovico Rossi (@ludovicor-eth) <[email redacted]>, Dario Lo Buglio (@xaler5) <[email redacted]>, Thamer Dridi (@thamerdridi) <[email redacted]>, Nabil El Alami Khalifi (@nabil-brickken) <[email redacted]> / Khalifi (@nabil-brickken) discussions-to: https://ethereum-magicians.org/t/erc-8226-regulated-agent-mandate/28208 status: Draft type: Standards Track category: ERC created: 2026-04-12 requires: / @param signature Principal signature (EIP-712, ERC-1271 supported). function revokeMandate(address agent, address principal, address asset, / and any off-chain document. Actions are signed as a bytes32[] array and written into / neither defines an agent delegation model. Agent identity standards such as [ERC-8004](./eip-8004.md) provide agent discovery and trust signals but no mandate framework, and general-purpose agent authorization standards do not address regulated assets. / RAMS defines the delegation interface, the compliance provider model, and the integration pattern with regulated token contracts. / A freeze halts evaluation but MUST NOT revoke: revocation stays with the principal / RAMS mandate validity does NOT replace token-level allowance or operator approval. / The venue is out of scope of the normative interface. / The `metadata` field is non-normative: implementations and integrators MUST NOT rely on it for enforcement decisions",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://eips.ethereum.org/EIPS/eip-8226",
     "claim": "Ludovico Rossi (@ludovicor-eth), Dario Lo Buglio (@xaler5), Thamer Dridi (@thamerdridi), and Nabil El Alami Khalifi (@nabil-brickken), *ERC-8226: Regulated Agent Mandate*, created 2026-04-12; fetched 2026-10-31",
     "date": null,
     "quote": "Ludovico Rossi (@ludovicor-eth) < [email redacted] >, Dario Lo Buglio (@xaler5) < [email redacted] >, Thamer Dridi (@thamerdridi) < [email redacted] >, Nabil El Alami Khalifi (@nabil-brickken) < [email redacted] > / ERC-8226: Regulated Agent Mandate { \"@type\": \"WebSite\", \"url\": \"https://eips.ethereum.org\", \"name\": \"Ethereum Improvement Proposals\", \"description\": / Standards Track: ERC ERC-8226: Regulated Agent Mandate A com / \"ERC-8226: Regulated Agent Mandate [DRAFT],\" Ethereum Improvement Proposals, no. 8226, April 2026. Available: https://eips.ethereum.org/EIPS/eip-8226. / over an EIP-712 typed message. Implementations MUST verify principal signatures using ERC-1271 -compatible verification. / RFC 2119 and RFC 8174. All implementations MUST implement ERC-165. Revert conditions in this / Copyright and related rights waived via CC0.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://github.com/ethereum/ERCs/pull/1844",
     "claim": "thamerdridi, *Update ERC-8226: add reference implementation and refine spec*, merged 2026-06-29; fetched 2026-10-31",
     "date": null,
     "quote": "# 1844 # 1844 Merged eip-review-bot merged 3 commits into ethereum:masterethereum/ERCs:masterfrom thamerdridi:erc-8226-impl-updatethamerdridi/ERCs:erc-8226-impl-update Copy head / \"https://github.com/ethereum/ERCs/pull/1844.diff\", \"patch_url\": \"https://github.com/ethereum/ERCs/pull/1844.patch\", \"merged_at\": \"2026-06-29T21:55:50Z\" }, \"body\": \"this pr updates ERC-8226 (Regulated Agent / \"closed\", \"locked\": false, \"assignees\": [ ], \"milestone\": null, \"comments\": 2, \"created_at\": \"2026-06-29T14:43:22Z\", \"updated_at\": \"2026-06-29T21:55:59Z\",",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://eips.ethereum.org/EIPS/eip-165",
     "claim": "Christian Reitwiessner et al. (Ethereum), *ERC-165: Standard Interface Detection*, 2018-01-23",
     "date": "2018-01-23",
     "quote": "Specification How Interfaces are Identified",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://raw.githubusercontent.com/ethereum/ERCs/master/ERCS/erc-8004.md",
     "claim": "Marco De Rossi, Davide Crapis, Jordan Ellis, and Erik Reppel, *ERCS/erc-8004.md (Trustless Agents)*, created 2025-08-13; fetched 2026-10-30",
     "date": null,
     "quote": "author: Marco De Rossi (@MarcoMetaMask), Davide Crapis (@dcrapis) <davide@ethereum.org>, Jordan Ellis <jordanellis@google.com>, Erik Reppel <erik.reppel@coinbase.com> discussions-to: https://ethereum-magicians.org/t/erc-8004-trustless-agents/25098 status: Draft type: Standards Track category: ERC created: 2025-08-13 requires: 155, 712, 721, 1271",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://eips.ethereum.org/EIPS/eip-8183",
     "claim": "Davide Crapis, Bryan Lim, Tay Weixiong, and Chooi Zuhwa, *ERC-8183: Agentic Commerce*, created 2026-02-25; fetched 2026-10-31",
     "date": null,
     "quote": "(@ai-virtual-b), Tay Weixiong (@twx-virtuals), Chooi Zuhwa (@Zuhwa) Created 2026-02-25 Discussion Link https://ethereum-magicians.org/t/erc-8183-agentic-commerce/27902 Requires EIP-20",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/specification.md",
     "claim": "Google (google-agentic-commerce), *Agentic Payment Protocol (v0.2)*, fetched 2026-10-30",
     "date": null,
     "quote": "Agentic Payment Protocol (v0.2)",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://github.com/ethereum/ERCs/blob/master/ERCS/erc-8196.md",
     "claim": "ethereum/ERCs, *ERCs/ERCS/erc-8196.md at master · ethereum/ERCs*, fetched 2026-10-31",
     "date": null,
     "quote": "\\[email redacted]\\u003e, Chris Johnson \\[email redacted]\\u003e\",\"discussions-to: https://ethereum-magicians.org/t/erc-8196-ai-agent-authenticated-wallet/27987\",\"status: Final\",\"type:",
     "ref": 8
    }
   ],
   "form": "onchain-registry",
   "governance": "Ethereum ERC process (Ethereum Magicians discussion thread + ethereum/ERCs GitHub repo); not yet adopted by an EIP editor as Final",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against eips.ethereum.org/EIPS/eip-8226 and github.com/ethereum/ERCs/pull/1844"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "erc-8226",
   "implementation": "prototype",
   "last_verified": "2026-11-12",
   "name": "ERC-8226 Regulated Agent Mandate",
   "native_status": "Draft, Standards Track: ERC (marked Draft on eips.ethereum.org)",
   "origin": {
    "date": "2026-04-12",
    "org": "Brickken (Ludovico Rossi, Dario Lo Buglio, Thamer Dridi, Nabil El Alami Khalifi)"
   },
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "draft",
   "probe": {
    "method": "ETH_CALL",
    "on_absent": "No IAgentMandate registry is deployed at the address; the asset contract carries no RAMS-conformant delegation layer",
    "parse": "Call reverts with false/error if no active mandate exists; a successful bool return with mandate data proves an IAgentMandate registry is deployed at {contract}",
    "path": "{contract}.canExecute(agent, principal, asset, action, amount) via eth_call against IAgentMandate"
   },
   "question": "What scoped, time-bounded, and financially capped authority may an on-chain agent exercise on a regulated asset holder's behalf?",
   "scope": "commerce",
   "spec_url": "https://eips.ethereum.org/EIPS/eip-8226",
   "step": "permit",
   "summary_md": "**ERC-8226: Regulated Agent Mandate** (`ERC-8226`), the Regulated Agent Mandate Standard (`RAMS`), defines a compliance delegation layer for AI agents operating on tokenized regulated assets. It specifies how a verified principal can delegate scoped, time-bounded, and financially capped authority to an on-chain agent, and how a regulated token verifies the mandate before an agent-initiated action. The authors are Ludovico Rossi (`@ludovicor-eth`), Dario Lo Buglio (`@xaler5`), Thamer Dridi (`@thamerdridi`), and Nabil El Alami Khalifi (`@nabil-brickken`). Front matter sets `status: Draft`, `type: Standards Track`, `category: ERC`, and `created: 2026-04-12`. `IAgentMandate` is implemented by the RAMS registry. Principals interact with this contract to grant, extend, and revoke mandates. Any contract in the agent's execution path calls `canExecute` to verify the mandate and `recordExecution` to record use. A regulated token integrates RAMS by gating each function it lets an agent perform for a holder. The principal is the holder (`from`) and the agent is the caller (`msg.sender`); a call with `msg.sender!= from` is agent-initiated and MUST satisfy the `(msg.sender, from)` mandate. All implementations MUST implement ERC-165. The front matter lists `requires: 165, 712, 1271`. The EIP-712 domain separator follows EIP-712 with `name = \"RAMS\"` and `version = \"1\"`. RAMS introduces no changes to any existing standard.",
   "track": "community",
   "version": {
    "date": "2026-04-12",
    "label": "Draft, created 2026-04-12"
   },
   "watch": [
    {
     "type": "erc",
     "num": 8226
    }
   ],
   "use_cases": [
    "delegate-user-authority",
    "agent-checkout",
    "audit-agent-actions"
   ],
   "audience": [
    "platform",
    "agent-builder",
    "standards-body"
   ],
   "pairs_with": [
    "erc-8004",
    "erc-8183",
    "ap2",
    "erc-8196"
   ],
   "prerequisites": [
    "erc-8004"
   ],
   "hatnote_md": "",
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": null,
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**ERC-8226: Regulated Agent Mandate** (`ERC-8226`), the Regulated Agent Mandate Standard (`RAMS`), defines a compliance delegation layer for AI agents operating on tokenized regulated assets. It specifies how a verified principal can delegate scoped, time-bounded, and financially capped authority to an on-chain agent, and how a regulated token verifies the mandate before an agent-initiated action. [1] The authors are Ludovico Rossi (`@ludovicor-eth`), Dario Lo Buglio (`@xaler5`), Thamer Dridi (`@thamerdridi`), and Nabil El Alami Khalifi (`@nabil-brickken`). Front matter sets `status: Draft`, `type: Standards Track`, `category: ERC`, and `created: 2026-04-12`. [1] `IAgentMandate` is implemented by the RAMS registry. Principals interact with this contract to grant, extend, and revoke mandates. Any contract in the agent's execution path calls `canExecute` to verify the mandate and `recordExecution` to record use. [1] A regulated token integrates RAMS by gating each function it lets an agent perform for a holder. The principal is the holder (`from`) and the agent is the caller (`msg.sender`); a call with `msg.sender != from` is agent-initiated and MUST satisfy the `(msg.sender, from)` mandate. [1] All implementations MUST implement ERC-165. The front matter lists `requires: 165, 712, 1271`. The EIP-712 domain separator follows EIP-712 with `name = \"RAMS\"` and `version = \"1\"`. [1] RAMS introduces no changes to any existing standard. [1]",
   "v05_identity_sentence_md": "**ERC-8226: Regulated Agent Mandate** (`ERC-8226`), the Regulated Agent Mandate Standard (`RAMS`), defines a compliance delegation layer for AI agents operating on tokenized regulated assets. It specifies how a verified principal can delegate scoped, time-bounded, and financially capped authority to an on-chain agent, and how a regulated token verifies the mandate before an agent-initiated action. [1] The authors are Ludovico Rossi (`@ludovicor-eth`), Dario Lo Buglio (`@xaler5`), Thamer Dridi (`@thamerdridi`), and Nabil El Alami Khalifi (`@nabil-brickken`). Front matter sets `status: Draft`, `type: Standards Track`, `category: ERC`, and `created: 2026-04-12`. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Permit](/category/permit/) (`permit`)"
    },
    {
     "label": "Form",
     "value_md": "On-chain registry (`onchain-registry`)"
    },
    {
     "label": "Originated by",
     "value_md": "Ludovico Rossi, Dario Lo Buglio, Thamer Dridi, and Nabil El Alami Khalifi (Brickken) (2026-04-12) [1][2]"
    },
    {
     "label": "Governed by",
     "value_md": "Ethereum Improvement Proposals (ERC Standards Track, `ethereum/ERCs`) [2][3]"
    },
    {
     "label": "Track",
     "value_md": "Ethereum Standards Track (ERC) [2]"
    },
    {
     "label": "Status",
     "value_md": "Draft, Standards Track: ERC (marked Draft on eips.ethereum.org) [1][2][3]"
    },
    {
     "label": "Version",
     "value_md": "`Draft` (Created 2026-04-12; updated via PR #1844) [1][3]"
    },
    {
     "label": "Wire format",
     "value_md": "EVM ABI-encoded smart contract calls (`IAgentMandate`, `IComplianceProvider`, `IAgentExecutor`) and EIP-712 typed structured data signatures (`EIP-712`, `ERC-1271`) [1][2]"
    },
    {
     "label": "Specification",
     "value_md": "https://eips.ethereum.org/EIPS/eip-8226 [2]"
    },
    {
     "label": "Found at",
     "value_md": "On-chain `ERC-165` (`erc-165`) `supportsInterface` checks; no off-chain HTTP headers or `.well-known` URIs [1][2]"
    },
    {
     "label": "Licence",
     "value_md": "CC0 1.0 Universal (public domain waiver) [2]"
    }
   ],
   "v05_problem_md": "Regulated token standards such as ERC-7943 and ERC-3643 govern who may hold or transact a token, but neither defines an agent delegation model. Agent identity standards such as ERC-8004 provide agent discovery and trust signals but no mandate framework, and general-purpose agent authorization standards do not address regulated assets. [1] RAMS defines the delegation interface, the compliance provider model, and the integration pattern with regulated token contracts. Mandate storage is keyed by `(agent, principal, asset)`. Each triple has at most one active mandate. A mandate covers one asset because caps are in that asset's units. [1] A freeze halts evaluation but MUST NOT revoke: revocation stays with the principal. [1] RAMS mandate validity does NOT replace token-level allowance or operator approval. For an agent-initiated transfer to succeed, both the token-level authorization and the RAMS mandate MUST pass. [1] The venue is out of scope of the normative interface. [1] The `metadata` field is non-normative, and implementations and integrators MUST NOT rely on it for enforcement decisions. [1]",
   "v05_mechanism_delta_md": "RAMS defines the delegation interface, the compliance provider model, and the integration pattern with regulated token contracts. Mandate storage is keyed by `(agent, principal, asset)`. Each triple has at most one active mandate. A mandate covers one asset because caps are in that asset's units. [1] A freeze halts evaluation but MUST NOT revoke: revocation stays with the principal. [1]",
   "v05_scope_boundary_md": "RAMS mandate validity does NOT replace token-level allowance or operator approval. For an agent-initiated transfer to succeed, both the token-level authorization and the RAMS mandate MUST pass. [1] The venue is out of scope of the normative interface. [1] The `metadata` field is non-normative, and implementations and integrators MUST NOT rely on it for enforcement decisions. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "EIP-165 Standard Interface Detection",
      "spec_or_rfc": "ERC-165 (EIP-165)",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "Contracts detect IAgentMandate with ERC-165 supportsInterface, and the interface exposes canExecute for a pre-flight check and recordExecution for the (agent, principal, asset) mandate. [2][4]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "erc-8004",
      "target_name": "ERC-8004: Trustless Agents",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "ERC-8226 names ERC-8004 as one compatible agent identity, and the mandate itself is the on-chain IAgentMandate keyed by (agent, principal, asset), with canExecute and recordExecution. [2][5]"
     },
     {
      "target_id": "erc-8183",
      "target_name": "ERC-8183: Agentic Commerce",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "ERC-8183 is a job escrow with Open, Funded, Submitted, and terminal states and an evaluator attestation, while ERC-8226 is the mandate contract a regulated token consults at execution. [2][6]"
     },
     {
      "target_id": "ap2",
      "target_name": "Agent Payments Protocol (AP2)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "AP2 mandates are off-chain checkout and payment credentials presented to a merchant or network, while an ERC-8226 mandate is an on-chain IAgentMandate record checked inside the token call. [2][7]"
     },
     {
      "target_id": "erc-8196",
      "target_name": "ERC-8196: AI Agent Authenticated Wallet",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ERC-8196 is an ERC-4337 wallet that requires ERC-8126, while ERC-8226 checks IAgentMandate.canExecute before a regulated-token transfer and caps quantity for ERC-20, ERC-721, or ERC-1155. [2][8]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "erc-8001",
     "target_name": "ERC-8001: Agent Coordination Framework",
     "relation_label": "Complements",
     "delta": "ERC-8226 is the Regulated Agent Mandate on-chain record, while ERC-8001 is the EIP-712 coordination contract, with ERC-1271 acceptance for contract wallets, discovered by address and ABI.",
     "item_md": "**[ERC-8001: Agent Coordination Framework](/protocols/erc-8001/)** (Complements) — ERC-8226 is the Regulated Agent Mandate on-chain record, while ERC-8001 is the EIP-712 coordination contract, with ERC-1271 acceptance for contract wallets, discovered by address and ABI."
    },
    {
     "target_id": "agent-authorization-envelope",
     "target_name": "Agent Authorization Envelope",
     "relation_label": "Peer alternative",
     "delta": "ERC-8226 exposes IAgentMandate.canExecute and recordExecution, detected with ERC-165 supportsInterface, while this envelope is a JWS-secured Verifiable Credential checked without that contract interface.",
     "item_md": "**[Agent Authorization Envelope](/protocols/agent-authorization-envelope/)** (Peer alternative) — ERC-8226 exposes IAgentMandate.canExecute and recordExecution, detected with ERC-165 supportsInterface, while this envelope is a JWS-secured Verifiable Credential checked without that contract interface."
    },
    {
     "target_id": "erc-8126",
     "target_name": "ERC-8126: AI Agent Verification",
     "relation_label": "Complements",
     "delta": "ERC-8226 exposes IAgentMandate.canExecute for a principal's on-chain mandate and names ERC-8004 as a compatible identity, while ERC-8126 attaches the 0-100 verification score to that identity.",
     "item_md": "**[ERC-8126: AI Agent Verification](/protocols/erc-8126/)** (Complements) — ERC-8226 exposes IAgentMandate.canExecute for a principal's on-chain mandate and names ERC-8004 as a compatible identity, while ERC-8126 attaches the 0-100 verification score to that identity."
    },
    {
     "item_md": "**[Permit protocols](/category/permit/)** — Category index for `permit` standards."
    }
   ],
   "v05_compiled_md": "---\nid: erc-8226\ntitle: \"ERC-8226 Regulated Agent Mandate\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: permit\nform: onchain-registry\nwire_archetype: identity_auth_crypto\nspec_url: https://eips.ethereum.org/EIPS/eip-8226\nlast_checked: 2026-11-12\n---\n\n# ERC-8226 Regulated Agent Mandate\n\n**Category:** [Permit](/category/permit/) (`permit`) · **Form:** On-chain registry (`onchain-registry`) · **Last checked:** 2026-11-12\n\n**ERC-8226: Regulated Agent Mandate** (`ERC-8226`), the Regulated Agent Mandate Standard (`RAMS`), defines a compliance delegation layer for AI agents operating on tokenized regulated assets. It specifies how a verified principal can delegate scoped, time-bounded, and financially capped authority to an on-chain agent, and how a regulated token verifies the mandate before an agent-initiated action. [1] The authors are Ludovico Rossi (`@ludovicor-eth`), Dario Lo Buglio (`@xaler5`), Thamer Dridi (`@thamerdridi`), and Nabil El Alami Khalifi (`@nabil-brickken`). Front matter sets `status: Draft`, `type: Standards Track`, `category: ERC`, and `created: 2026-04-12`. [1] `IAgentMandate` is implemented by the RAMS registry. Principals interact with this contract to grant, extend, and revoke mandates. Any contract in the agent's execution path calls `canExecute` to verify the mandate and `recordExecution` to record use. [1] A regulated token integrates RAMS by gating each function it lets an agent perform for a holder. The principal is the holder (`from`) and the agent is the caller (`msg.sender`); a call with `msg.sender != from` is agent-initiated and MUST satisfy the `(msg.sender, from)` mandate. [1] All implementations MUST implement ERC-165. The front matter lists `requires: 165, 712, 1271`. The EIP-712 domain separator follows EIP-712 with `name = \"RAMS\"` and `version = \"1\"`. [1] RAMS introduces no changes to any existing standard. [1]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Permit](/category/permit/) (`permit`) |\n| **Form** | On-chain registry (`onchain-registry`) |\n| **Originated by** | Ludovico Rossi, Dario Lo Buglio, Thamer Dridi, and Nabil El Alami Khalifi (Brickken) (2026-04-12) [1][2] |\n| **Governed by** | Ethereum Improvement Proposals (ERC Standards Track, `ethereum/ERCs`) [2][3] |\n| **Track** | Ethereum Standards Track (ERC) [2] |\n| **Status** | Draft, Standards Track: ERC (marked Draft on eips.ethereum.org) [1][2][3] |\n| **Version** | `Draft` (Created 2026-04-12; updated via PR #1844) [1][3] |\n| **Wire format** | EVM ABI-encoded smart contract calls (`IAgentMandate`, `IComplianceProvider`, `IAgentExecutor`) and EIP-712 typed structured data signatures (`EIP-712`, `ERC-1271`) [1][2] |\n| **Specification** | https://eips.ethereum.org/EIPS/eip-8226 [2] |\n| **Found at** | On-chain `ERC-165` (`erc-165`) `supportsInterface` checks; no off-chain HTTP headers or `.well-known` URIs [1][2] |\n| **Licence** | CC0 1.0 Universal (public domain waiver) [2] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nRegulated token standards such as ERC-7943 and ERC-3643 govern who may hold or transact a token, but neither defines an agent delegation model. Agent identity standards such as ERC-8004 provide agent discovery and trust signals but no mandate framework, and general-purpose agent authorization standards do not address regulated assets. [1] RAMS defines the delegation interface, the compliance provider model, and the integration pattern with regulated token contracts. Mandate storage is keyed by `(agent, principal, asset)`. Each triple has at most one active mandate. A mandate covers one asset because caps are in that asset's units. [1] A freeze halts evaluation but MUST NOT revoke: revocation stays with the principal. [1] RAMS mandate validity does NOT replace token-level allowance or operator approval. For an agent-initiated transfer to succeed, both the token-level authorization and the RAMS mandate MUST pass. [1] The venue is out of scope of the normative interface. [1] The `metadata` field is non-normative, and implementations and integrators MUST NOT rely on it for enforcement decisions. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **EIP-165 Standard Interface Detection** | `ERC-165 (EIP-165)` | Profiles classic standard | Contracts detect IAgentMandate with ERC-165 supportsInterface, and the interface exposes canExecute for a pre-flight check and recordExecution for the (agent, principal, asset) mandate. [2][4] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[ERC-8004: Trustless Agents](/protocols/erc-8004/)** | Builds on | ERC-8226 names ERC-8004 as one compatible agent identity, and the mandate itself is the on-chain IAgentMandate keyed by (agent, principal, asset), with canExecute and recordExecution. [2][5] |\n| **[ERC-8183: Agentic Commerce](/protocols/erc-8183/)** | Complements | ERC-8183 is a job escrow with Open, Funded, Submitted, and terminal states and an evaluator attestation, while ERC-8226 is the mandate contract a regulated token consults at execution. [2][6] |\n| **[Agent Payments Protocol (AP2)](/protocols/ap2/)** | Peer alternative | AP2 mandates are off-chain checkout and payment credentials presented to a merchant or network, while an ERC-8226 mandate is an on-chain IAgentMandate record checked inside the token call. [2][7] |\n| **[ERC-8196: AI Agent Authenticated Wallet](/protocols/erc-8196/)** | Peer alternative | ERC-8196 is an ERC-4337 wallet that requires ERC-8126, while ERC-8226 checks IAgentMandate.canExecute before a regulated-token transfer and caps quantity for ERC-20, ERC-721, or ERC-1155. [2][8] |\n\n---\n\n## See also\n\n- **[ERC-8001: Agent Coordination Framework](/protocols/erc-8001/)** *(Complements)* — ERC-8226 is the Regulated Agent Mandate on-chain record, while ERC-8001 is the EIP-712 coordination contract, with ERC-1271 acceptance for contract wallets, discovered by address and ABI.\n- **[Agent Authorization Envelope](/protocols/agent-authorization-envelope/)** *(Peer alternative)* — ERC-8226 exposes IAgentMandate.canExecute and recordExecution, detected with ERC-165 supportsInterface, while this envelope is a JWS-secured Verifiable Credential checked without that contract interface.\n- **[ERC-8126: AI Agent Verification](/protocols/erc-8126/)** *(Complements)* — ERC-8226 exposes IAgentMandate.canExecute for a principal's on-chain mandate and names ERC-8004 as a compatible identity, while ERC-8126 attaches the 0-100 verification score to that identity.\n- **Category:** [Permit protocols](/category/permit/)\n\n---\n\n## References\n\n1. Ludovico Rossi (@ludovicor-eth), Dario Lo Buglio (@xaler5), Thamer Dridi (@thamerdridi), and Nabil El Alami Khalifi (@nabil-brickken), *ERC-8226: Regulated Agent Mandate* (created 2026-04-12; fetched 2026-10-31) — <https://raw.githubusercontent.com/ethereum/ERCs/master/ERCS/erc-8226.md>\n2. Ludovico Rossi (@ludovicor-eth), Dario Lo Buglio (@xaler5), Thamer Dridi (@thamerdridi), and Nabil El Alami Khalifi (@nabil-brickken), *ERC-8226: Regulated Agent Mandate* (created 2026-04-12; fetched 2026-10-31) — <https://eips.ethereum.org/EIPS/eip-8226>\n3. thamerdridi, *Update ERC-8226: add reference implementation and refine spec* (merged 2026-06-29; fetched 2026-10-31) — <https://github.com/ethereum/ERCs/pull/1844>\n4. Christian Reitwiessner et al. (Ethereum), *ERC-165: Standard Interface Detection* (2018-01-23) — <https://eips.ethereum.org/EIPS/eip-165>\n5. Marco De Rossi, Davide Crapis, Jordan Ellis, and Erik Reppel, *ERCS/erc-8004.md (Trustless Agents)* (created 2025-08-13; fetched 2026-10-30) — <https://raw.githubusercontent.com/ethereum/ERCs/master/ERCS/erc-8004.md>\n6. Davide Crapis, Bryan Lim, Tay Weixiong, and Chooi Zuhwa, *ERC-8183: Agentic Commerce* (created 2026-02-25; fetched 2026-10-31) — <https://eips.ethereum.org/EIPS/eip-8183>\n7. Google (google-agentic-commerce), *Agentic Payment Protocol (v0.2)* (fetched 2026-10-30) — <https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/specification.md>\n8. ethereum/ERCs, *ERCs/ERCS/erc-8196.md at master · ethereum/ERCs* (fetched 2026-10-31) — <https://github.com/ethereum/ERCs/blob/master/ERCS/erc-8196.md>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "",
   "adoption": {
    "level": "observed",
    "by": "Agio Digital, BRITECITY, ScoreTail, Chrome WebMCP demos, Google Chrome, Microsoft Edge, Brave (Leo AI), OpenAI ChatGPT Desktop, and 2 other verified implementations",
    "probe_run": null
   },
   "aliases": [],
   "analog": "In-page JavaScript API (window.* APIs)",
   "audience": [
    "site-owner",
    "agent-builder",
    "standards-body"
   ],
   "collisions": [
    "Model Context Protocol (MCP)"
   ],
   "discovery": {
    "mechanism": "No file or well-known URL. Tools exist only while a page is open, after its script registers them, so an agent has to load the page to find them. Chrome’s docs: \"Tool discoverability: Clients and browsers must visit a site directly to know if it has callable tools.\"",
    "path": "No file or well-known URL. Tools exist only while a page is open, after its script registers them, so an agent has to load the page to find them. Chrome’s docs: \"Tool discoverability: Clients and browsers must visit a site directly to know if it has callable tools.\""
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://webmachinelearning.github.io/webmcp/",
     "claim": "Web Machine Learning Community Group (editors Brandon Walderman, Khushal Sagar, Dominic Farolino, and Samuel Dallstream), *WebMCP*, Draft Community Group Report, 11 November 2026",
     "date": null,
     "quote": "The WebMCP API enables web applications to provide JavaScript-based tools to AI agents. / This specification was published by the Web Machine Learning Community Group. / implement tools in client-side script instead of on the backend. / Draft Community Group Report, 11 November 2026 / partial interface Document { [ SecureContext , SameObject ] readonly attribute ModelContext modelContext / required DOMString name / object inputSchema / required ToolExecuteCallback execute / Editors: Brandon Walderman ( Microsoft ) Khushal Sagar ( Google ) Dominic Farolino ( Google ) Samuel Dallstream ( Microsoft ) / This specification was published by the Web Machine Learning Community Group. It is not a W3C Standard nor is it on the W3C Standards Track. / partial interface Document { [ SecureContext, SameObject ] readonly attribute ModelContext modelContext; / published by the Web Machine Learning Community Group under the W3C Community Contributor License Agreement (CLA) / It is not a W3C Standard nor is it on the W3C Standards Track. / The ModelContext interface provides methods for web applications to register and manage tools that can be invoked by agents. / The ModelContext interface provides methods for web applications to register and manage tools that can be invoked by agents / [ Exposed = Window , SecureContext ] interface ModelContext : EventTarget / Returns a rejected promise if a tool with the same name is already registered, if the given name or description are empty strings, or if the inputSchema is invalid. / An AbortSignal that unregisters the tool when aborted. / To unregister a tool given a ModelContext modelContext / This is used by agents to reference the tool when making tool calls. / A natural language description of the tool’s functionality. / A JSON Schema object describing the expected input parameters for the tool / The function can be asynchronous and return a promise / If true, indicates that the tool does not modify any state and only reads data. / selectively enforce mandatory user confirmation prompts before executing high-stakes tools / may enqueue steps to the AI agent queue to perform an observation given any top-level browsing context / default allowlist … 'self' / 11 November 2026",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://github.com/MiguelsPizza/WebMCP",
     "claim": "Alexander Nahas (MiguelsPizza), *WebMCP*, repository created 2025-06-13",
     "date": null,
     "quote": "MiguelsPizza/WebMCP: Bringing the power of MCP to the web … \"createdAt\":\"2025-06-13T06:00:40.000Z\" / via a native server, bridging the browser to local processes / local MCP clients (e.g., Claude Desktop, Cursor)",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://github.com/jasonjmcghee/WebMCP",
     "claim": "Jason McGhee, *WebMCP*, repository created 2025-03-04",
     "date": null,
     "quote": "this was an early WebMCP proposal / implementation. … the idea of WebMCP has since evolved and is being worked on by much more capable folks that develop the web. … \"createdAt\":\"2025-03-04T04:07:00.000Z\"",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://www.w3.org/2025/08/14-webmachinelearning-minutes.html",
     "claim": "W3C Web Machine Learning Community Group, *WebML WG teleconference minutes*, 14 August 2025",
     "date": null,
     "quote": "anssik: I also want to acknowledge two individual contributors Alex Nahas and Jason McGhee who both have developed early WebMCP prototypes",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://raw.githubusercontent.com/webmachinelearning/webmcp/main/README.md",
     "claim": "webmachinelearning/webmcp (GitHub), *WebMCP*, checked 2026-11-04",
     "date": null,
     "quote": "The web page registers one or more tools using `document.modelContext.registerTool()`. / observing the browser state through a combination of screenshots, and DOM and accessibility tree snapshots, and then interact with the page by simulating human user input / An agent connected to the page queries the browser to discover the active list of tools and their schemas. / would let the browser synthesize tool definitions from HTML `<form>` elements / First published August 13, 2025 / External tools integrate with each AI platform via bespoke backend integrations / A service registers its tools with an AI platform, and the platform communicates directly with the service's backend servers / JavaScript functions with natural language descriptions and structured schemas / The browser mediates the call, invokes the tool's `execute` callback with the provided arguments / but it is not part of the specification at this time. / **WebMCP** introduces a client-side alternative. It allows web developers to define tools directly in the browser page's script. This enables visually rich, cooperative interplay between a user, a web page, and an agent with shared context. / By default, WebMCP is enabled in top-level windows and its same-origin iframes, but access can be delegated to cross-origin iframes using the Permissions Policy allow=\"tools\" / tab-level lifecycle management",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://github.com/webmachinelearning/webmcp/blob/7edc0e1818636182e352b3b15d9203a29b18319b/README.md",
     "claim": "Brandon Walderman, Leo Lee, Andrew Nolan, David Bokan, Khushal Sagar, and Hannah Van Opstal, *WebMCP explainer*, first published August 13, 2025 (commit 7edc0e18)",
     "date": null,
     "quote": "First published August 13, 2025 … Brandon Walderman … Leo Lee … Andrew Nolan … David Bokan … Khushal Sagar … Hannah Van Opstal / First published August 13, 2025 … Brandon Walderman … Leo Lee … Andrew Nolan … David Bokan … Khushal Sagar … Hannah Van Opstal … [email redacted] … [email redacted] / \"createdAt\":\"2025-08-05T13:10:14.000Z\" / MCP-B's underlying protocol, also named WebMCP, extends MCP / extension transports that use Chromium's runtime messaging to make a website's MCP server available to other extension components within the browser (background, sidebar, popup), and to other external MCP clients running on the same machine",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://github.com/webmachinelearning/webmcp",
     "claim": "Web Machine Learning Community Group, *WebMCP explainer*, first published August 13, 2025",
     "date": null,
     "quote": "WebMCP is currently focused on the imperative `document.modelContext.registerTool()` API described above, which is what the specification defines. / an agent connected to the page queries the browser to discover the active list of tools / the web page registers one or more tools using document.modelContext.registerTool()",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://developer.chrome.com/docs/ai/webmcp",
     "claim": "Alexandra Klepper, François Beaufort, and Kasper Kulikowski (Chrome for Developers), *WebMCP*, published 18 May 2026; last updated 7 October 2026",
     "date": null,
     "quote": "Tool discoverability: Clients and browsers must visit a site directly to know if it has callable tools. / allows tool registration in top-level and same-origin contexts, and disables it for cross-origin iframes. / Add annotations to a standard HTML forms to create a WebMCP tool. / Chrome Extensions can query and execute WebMCP tools with content scripts / Clients and browsers must visit a site directly to know if it has callable tools. / Chrome Extensions can query and execute WebMCP tools with\n content scripts / \"dateModified\": \"2026-10-07\"",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://github.com/webmachinelearning/webmcp/blob/7edc0e1818636182e352b3b15d9203a29b18319b/docs/proposal.md",
     "claim": "Brandon Walderman, Andrew Nolan, David Bokan, Khushal Sagar, and Hannah Van Opstal, *WebMCP API proposal*, August 13, 2025",
     "date": null,
     "quote": "The `window.agent` interface is introduced to represent an abstract AI agent that is connected to the page / The `agent` object has a single method `provideContext` / August 13, 2025 / Subsequent calls clear any pre-existing tools and other context before registering the new ones. / The `window.agent` interface is introduced",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://github.com/webmachinelearning/webmcp/commit/41dd8292ac19db6a43ea58aefc8fcb4662742411",
     "claim": "Dominic Farolino, *Initialize a Navigator's modelContext member*, 19 February 2026",
     "date": null,
     "quote": "Initialize a Navigator's modelContext member",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://github.com/webmachinelearning/webmcp/commit/c7b5c7023f6e6a1c7a2495946136eb19b3109ae6",
     "claim": "Dominic Farolino, *Move the modelContext getter to Document (#184)*, 27 May 2026",
     "date": null,
     "quote": "Move the `modelContext` getter to `Document` / iframe.contentDocument.modelContext",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://github.com/chromium/chromium/commit/4a9fee9eafcabd675c7245cc1b0acc1ca5f17d99",
     "claim": "Dominic Farolino (Chromium), *WebMCP: Remove navigator.modelContext*, 9 July 2026",
     "date": null,
     "quote": "It removes navigator.modelContext in favor of document.modelContext.",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://github.com/webmachinelearning/webmcp/commit/14ae813cc4e9fe0d39313f4b1ee5b231746731ad",
     "claim": "François Beaufort, *Remove declarative API from the spec for now (#338)*, 8 October 2026",
     "date": null,
     "quote": "Remove declarative API from the spec for now",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://ppc.land/chrome-149-origin-trial-puts-webmcp-in-developers-hands-at-last/",
     "claim": "PPC Land, *Chrome 149 origin trial puts WebMCP in developers' hands at last*, checked 2026-10-30",
     "date": null,
     "quote": "MCP servers can run headlessly. WebMCP cannot.",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://www.spronta.com/blog/state-of-webmcp-july-2026",
     "claim": "Spronta, *The State of WebMCP: July 2026*, July 2026",
     "date": null,
     "quote": "added requestUserInteraction() so tools can force a human confirmation / in the 21 July spec draft / moved the API from navigator to document to reflect that tools belong to a specific page / Chrome deprecated navigator.modelContext in Chrome 150 while the origin trial still ships it / document.modelContext ?? navigator.modelContext / from Chrome 149 through 156",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://groups.google.com/a/chromium.org/g/blink-dev/c/gmYffo5WOE8/m/OJxuQRP3AAAJ",
     "claim": "blink-dev, *Intent to Experiment: WebMCP*, 15 May 2026",
     "date": null,
     "quote": "Estimated milestones Shipping on desktop 157 Origin trial desktop first 149 Origin trial desktop last 156 / Shipping on desktop 157 Origin trial desktop first 149 Origin trial desktop last 156",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://developer.chrome.com/blog/ai-webmcp-origin-trial",
     "claim": "Alexandra Klepper (Chrome for Developers), *Join the WebMCP origin trial*, published 9 June 2026",
     "date": null,
     "quote": "In Chrome 149, you can sign up for the WebMCP origin trial / In Chrome 149, you can sign up for the WebMCP origin trial.",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://raw.githubusercontent.com/webmachinelearning/webmcp/main/implementation-status.md",
     "claim": "Web Machine Learning Community Group, *Browser and Agent Implementation Status*, checked 2026-11-04",
     "date": null,
     "quote": "An Origin Trial is live in Chrome 149. / An [Origin Trial](https://developer.chrome.com/blog/ai-webmcp-origin-trial) is live in Chrome 149. / enable the `about:flags#enable-webmcp-testing` flag. / An [Origin Trial](https://developer.microsoft.com/en-us/microsoft-edge/origin-trials/trials/0b76fe60-b266-458e-a285-04e375c0c31a) is live in Edge 150. / Refer to Chrome implementation status for platform support. / Experimental support is added to [Leo AI chat](https://brave.com/leo/). / Issue 55232 / WebMCP is supported in [ChatGPT Desktop](https://chatgpt.com/download/). / is coming soon, letting Meta AI on the glasses call tools registered with `document.modelContext.registerTool()`. / It is off by default and enabled per device, either in Developer Mode or for wearers in the rollout.",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://github.com/GoogleChromeLabs/webmcp-tools",
     "claim": "Google Chrome Labs, *webmcp-tools*, checked 2026-11-06",
     "date": null,
     "quote": "`<form toolname>` tools, `toolautosubmit` / Travel WebMCP Demo (Imperative) / Le Petit Bistro (Declarative) / A mini-site explainer of WebMCP / Model Context Tool Inspector / WebMCP Evals / WebMCP Skills / WebMCP Declarative Polyfill / toolautosubmit / respondWith()",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28",
     "claim": "Model Context Protocol, *Specification*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "discovery prompts resources tools … The protocol uses JSON-RPC 2.0 messages to establish communication between: hosts: LLM applications that initiate connections clients: connectors within the host application servers: services that provide context and capabilities … stdio … Streamable HTTP",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://raw.githubusercontent.com/nlweb-ai/website/main/NLWEBSPEC.md",
     "claim": "NLWeb, *NLWeb specification*, v0.55",
     "date": null,
     "quote": "should use schema.org vocabulary … POST /ask - submit a natural language query. * POST /await - check on or cancel a promised result. … NLWeb operations can be exposed as tools within the Model Context Protocol (MCP) … \"name\": \"ask\"",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://github.com/wild-card-ai/agents-json/blob/master/README.md",
     "claim": "Wildcard AI, *agents.json*, checked 2026-10-30",
     "date": null,
     "quote": "agents.json is a JSON schema of structured contracts designed for AI agents. API providers use their existing OpenAPI spec to construct this file and agents inspect this file to run accurate series of API calls. / /.well-known/agents.json",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://github.com/wild-card-ai/agents-json/blob/master/agents_json/agentsJson.schema.json",
     "claim": "Wildcard AI, *agents.json schema*, checked 2026-10-30",
     "date": null,
     "quote": "must include an array of flows that define sequences of API operations to be executed",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/2026-01-26/apps.mdx",
     "claim": "MCP Apps contributors, *MCP Apps specification*, 2026-01-26",
     "date": "2026-01-26",
     "quote": "ui:// … text/html;profile=mcp-app … resources/read",
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://github.com/OTA-Tech-AI/web-agent-protocol",
     "claim": "OTA Tech AI, *Web Agent Protocol (WAP)*, checked 2026-10-31",
     "date": null,
     "quote": "Web Agent Protocol (WAP) - record and replay user interactions in the browser … convert recorded actions into MCP servers … exact replay - exactly reproduce every action … smart-replay",
     "ref": 25
    },
    {
     "label": "[26]",
     "url": "https://www.agiodigital.com/",
     "claim": "Agio Digital, *Licensed Crypto Fund Administrator, Bahamas*, checked 2026-10-30",
     "date": null,
     "quote": "{document:t=Yee,enabled:n=!0}=e,r=t / e.registerTool)==`function` / r.modelContext.registerTool({name:D(e.name),description:D(e.description),inputSchema:D(e.inputSchema)",
     "ref": 26
    },
    {
     "label": "[27]",
     "url": "https://britecity.com/it-health-check",
     "claim": "BRITECITY, *Free IT Health Check*, checked 2026-10-30",
     "date": null,
     "quote": "navigator.modelContext / document.modelContext / mc.registerTool(t) / name: 'get_britecity_services' / name: 'lookup_knowledge' / name: 'navigate_to_page' / name: 'open_book_a_call'",
     "ref": 27
    },
    {
     "label": "[28]",
     "url": "https://scoretail.com/en/sheet-music/canon-in-d-pachelbel-johann/view",
     "claim": "ScoreTail, *Canon in D (Pachelbel) score page*, checked 2026-10-30",
     "date": null,
     "quote": "await (0,k.registerTools)(t,n,s.signal) / e.registerTool(t,{signal:n}) / return document.modelContext??null / \"WebMCP: tools registered\" / enableOriginTrial / meta[http-equiv=\"origin-trial\"]",
     "ref": 28
    },
    {
     "label": "[29]",
     "url": "https://chromestatus.com/api/v0/features/5117755740913664",
     "claim": "Chrome Platform Status, *ChromeStatus feature 5117755740913664*, checked 2026-11-04",
     "date": null,
     "quote": "\"origintrial\": false, \"prefixed\": null, \"flag\": false, \"status\": {\"text\": \"Proposed\", \"val\": 2, \"milestone_str\": \"Proposed\"} / \"desktop_first\": 149, \"android_first\": 149, \"ios_first\": null, \"webview_first\": 149, \"desktop_last\": 156 / \"web_feature\": \"document-modelcontext\" / kModelContextRegisterTool / \"id\": 5117755740913664, \"name\": \"WebMCP\" / \"search_tags\": [\"WebMCP\"], \"created\": {\"by\": \"[email redacted]\", \"when\": \"2025-07-08 19:29:42.615078\"}, \"updated\": {\"by\": \"[email redacted]\", \"when\": \"2026-11-02 16:04:35.890651\"}",
     "ref": 29
    },
    {
     "label": "[30]",
     "url": "https://developer.microsoft.com/en-us/microsoft-edge/origin-trials/trials/0b76fe60-b266-458e-a285-04e375c0c31a",
     "claim": "Microsoft, *WebMCP origin trial*, trial expiration 30 March 2027",
     "date": null,
     "quote": "Trial Expiration Date</strong><p>March 30, 2027 / Origin trial for WebMCP, which allows websites to register tools for use by agents",
     "ref": 30
    },
    {
     "label": "[31]",
     "url": "https://blogs.windows.com/msedgedev/2026/09/21/new-in-edge-for-developers-create-better-components-and-make-your-site-agent-ready/",
     "claim": "Patrick Brosset (Microsoft Edge), *New in Edge for developers: create better components and make your site agent-ready*, published 21 September 2026",
     "date": null,
     "quote": "Our implementation of the WebMCP spec in Microsoft Edge is ready for testing. To get started, we created a few samples and a browser extension to run and debug your WebMCP tools.",
     "ref": 31
    },
    {
     "label": "[32]",
     "url": "https://github.com/brave/brave-browser/issues/55232",
     "claim": "Jay Harris (Brave), *[AI Chat]: Add support for the WebMCP protocol to Leo*, opened 5 May 2026",
     "date": null,
     "quote": "\"title\":\"[AI Chat]: Add support for the WebMCP protocol to Leo\" / This will allow associated pages to expose tools to AI Chat. / brave://flags/#enable-webmcp-testing / content-type: text/html; charset=utf-8",
     "ref": 32
    },
    {
     "label": "[33]",
     "url": "https://github.com/GoogleChromeLabs/webmcp-extension/",
     "claim": "Google Chrome Labs, *webmcp-extension*, checked 2026-11-06",
     "date": null,
     "quote": "document.modelContext.getTools() / ontoolchange / allow=\"tools\" / chrome://flags/#prompt-api-tool-use / This is not an officially supported Google product.",
     "ref": 33
    }
   ],
   "form": "browser-api",
   "governance": "W3C Web Machine Learning Community Group, in the webmachinelearning/webmcp GitHub repository (created 2025-08-05). Editors: Brandon Walderman and Samuel Dallstream (Microsoft), Khushal Sagar and Dominic Farolino (Google)",
   "group": null,
   "hatnote_md": "This page covers the W3C Web Machine Learning Community Group's client-side `document.modelContext` browser API specification. It is distinct from two earlier community prototypes that shared the name—`jasonjmcghee/WebMCP` (created 2025-03-04) and Alex Nahas's `MiguelsPizza/WebMCP` / MCP-B (created 2025-06-13)—both acknowledged by the Community Group for early prototyping experience; for the backend JSON-RPC protocol, see [Model Context Protocol](/protocols/mcp/).",
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against webmachinelearning.github.io/webmcp (4 Sept 2026 draft) and developer.chrome.com/docs/ai/webmcp (updated 2026-08-07)"
    },
    {
     "date": "2026-10-28",
     "note": "Re-verified record against 27 sources on 2026-10-28: 5 production pages shipping registerTool() calls, 6 client/agent vendor statements, and 3 press sources."
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "webmcp",
   "implementation": "prototype",
   "last_verified": "2026-11-11",
   "name": "WebMCP",
   "native_status": "Draft Community Group Report, 11 November 2026.",
   "origin": {
    "date": "2025-08-13",
    "org": "Microsoft and Google engineers"
   },
   "pairs_with": [
    "mcp",
    "nlweb",
    "agents-json",
    "mcp-apps",
    "web-agent-protocol"
   ],
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "draft",
   "prerequisites": [],
   "probe": {
    "method": "in-page script execution (not a network probe)",
    "on_absent": "window.modelContext is undefined, or getTools() returns an empty map: the page exposes no WebMCP tools (this cannot be checked without executing JavaScript in a real browser context — it is not curl-probable)",
    "parse": "presence of a non-empty tool map returned by getTools() (or the declarative equivalent synthesized from annotated form elements)",
    "path": "typeof window.modelContext !== 'undefined' && window.modelContext.getTools()"
   },
   "question": "What JavaScript tools can a web page register so an in-browser AI agent can call them directly instead of scraping the DOM?",
   "scope": "general",
   "spec_url": "https://webmachinelearning.github.io/webmcp/",
   "step": "act",
   "summary_md": "**WebMCP** is a client-side browser API specification published by the W3C Web Machine Learning Community Group that enables web applications to expose structured JavaScript tools to AI agents without relying on simulated DOM input or backend servers. First published on August 13, 2025 by Microsoft and Google engineers, the specification is maintained as a Draft Community Group Report dated 11 November 2026. In a `SecureContext`, a page script registers `ModelContextTool` definitions (`name`, `description`, `execute`, and optional `inputSchema`) via the imperative `document.modelContext.registerTool()` method on `Document`. Because tools exist only in the open page, browsers and connected agents must visit a site directly to query `document.modelContext` and invoke registered callbacks. The API surface evolved from `window.agent` and `provideContext` in the August 2025 proposal to `navigator.modelContext` (February 2026) and `document.modelContext` (May–July 2026), while a proposed declarative `<form>` API was deferred from the specification in October 2026.",
   "track": "w3c",
   "use_cases": [
    "let-agents-act-on-my-site",
    "expose-tools-to-agents"
   ],
   "version": {
    "label": "Draft Community Group Report",
    "date": "2026-11-11"
   },
   "watch": [
    {
     "type": "page",
     "url": "https://webmachinelearning.github.io/webmcp/",
     "selector": "main"
    },
    {
     "type": "w3c",
     "shortname": "webmcp",
     "url": "https://webmachinelearning.github.io/webmcp/"
    }
   ],
   "tier": "flagship",
   "lifecycle_status": "active",
   "wire_archetype": "browser_telemetry",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-11",
   "v05_hatnote_html_md": "This page covers the W3C Web Machine Learning Community Group's client-side `document.modelContext` browser API specification. It is distinct from two earlier community prototypes that shared the name—`jasonjmcghee/WebMCP` (created 2025-03-04) and Alex Nahas's `MiguelsPizza/WebMCP` / MCP-B (created 2025-06-13)—both acknowledged by the Community Group for early prototyping experience; for the backend JSON-RPC protocol, see [Model Context Protocol](/protocols/mcp/). [1][2][3][4]",
   "v05_elevator_pitch_md": "WebMCP is a client-side browser API that lets open web pages expose callable JavaScript functions directly to in-browser AI assistants and connected agents within the user's active tab. Instead of forcing browser agents to scrape screenshots and synthesize fragile DOM clicks—or requiring developers to stand up separate backend MCP servers—websites register structured tool schemas through `document.modelContext.registerTool()` so the browser can invoke each tool's in-page `execute` callback directly. [1][5]",
   "v05_lead_md": "**WebMCP** is a client-side browser API specification published by the W3C Web Machine Learning Community Group that enables web applications to expose structured JavaScript tools to AI agents without relying on simulated DOM input or backend servers. [1] First published on August 13, 2025 by Microsoft and Google engineers, the specification is maintained as a Draft Community Group Report dated 11 November 2026. [1][6] In a `SecureContext`, a page script registers `ModelContextTool` definitions (`name`, `description`, `execute`, and optional `inputSchema`) via the imperative `document.modelContext.registerTool()` method on `Document`. [1][7] Because tools exist only in the open page, browsers and connected agents must visit a site directly to query `document.modelContext` and invoke registered callbacks. [5][8] The API surface evolved from `window.agent` and `provideContext` in the August 2025 proposal to `navigator.modelContext` (February 2026) and `document.modelContext` (May–July 2026), while a proposed declarative `<form>` API was deferred from the specification in October 2026. [5][9][10][11][12][13]",
   "v05_identity_sentence_md": "**WebMCP** is a client-side browser API specification published by the W3C Web Machine Learning Community Group that enables web applications to expose structured JavaScript tools to AI agents without relying on simulated DOM input or backend servers. [1] First published on August 13, 2025 by Microsoft and Google engineers, the specification is maintained as a Draft Community Group Report dated 11 November 2026. [1][6]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Act](/category/act/) (`act`)"
    },
    {
     "label": "Form",
     "value_md": "Browser API (`browser-api`)"
    },
    {
     "label": "Originated by",
     "value_md": "Brandon Walderman, Leo Lee, Andrew Nolan, David Bokan, Khushal Sagar, and Hannah Van Opstal (August 13, 2025). [6]"
    },
    {
     "label": "Governed by",
     "value_md": "Web Machine Learning Community Group. Editors: Walderman, Sagar, Farolino, Dallstream. Repo created 2025-08-05. [1][6]"
    },
    {
     "label": "Track",
     "value_md": "W3C Community Group report, not a W3C Standard and not on the W3C Standards Track [1]"
    },
    {
     "label": "Status",
     "value_md": "Draft Community Group Report, 11 November 2026. [1]"
    },
    {
     "label": "Version",
     "value_md": "Published draft, 11 November 2026. Main explainer: first published August 13, 2025. [1][5]"
    },
    {
     "label": "Entry point",
     "value_md": "`document.modelContext.registerTool()` on `Document`, in a secure context [1][7]"
    },
    {
     "label": "Specification",
     "value_md": "[WebMCP](https://webmachinelearning.github.io/webmcp/) [1]"
    },
    {
     "label": "Found at",
     "value_md": "Tools register on the open page's `document.modelContext`. Clients must visit the site. [7][8]"
    },
    {
     "label": "Licence",
     "value_md": "W3C Community Contributor License Agreement (CLA) [1]"
    }
   ],
   "v05_problem_md": "Without an in-browser tool surface, browser agents must observe page state through screenshots, DOM trees, and accessibility snapshots and then act by simulating human user input, while external tool integrations require each service to maintain bespoke backend connectors with individual AI platforms. [5] WebMCP turns an open web page into a client-side counterpart to a [Model Context Protocol](/protocols/mcp/) server: the application registers JavaScript functions with natural-language descriptions and structured schemas on `document.modelContext`, and the browser mediates agent calls by invoking each tool's in-page `execute` callback within the user's live session. [1][5] Published as a W3C Community Group report rather than a W3C Standards Track specification, WebMCP standardizes only the imperative in-page JavaScript registration API and leaves both headless backend transports and declarative HTML `<form>` tool synthesis outside the normative specification. [1][5][14]",
   "v05_mechanism_delta_md": "WebMCP turns an open web page into a client-side counterpart to a [Model Context Protocol](/protocols/mcp/) server: the application registers JavaScript functions with natural-language descriptions and structured schemas on `document.modelContext`, and the browser mediates agent calls by invoking each tool's in-page `execute` callback within the user's live session. [1][5]",
   "v05_scope_boundary_md": "Published as a W3C Community Group report rather than a W3C Standards Track specification, WebMCP standardizes only the imperative in-page JavaScript registration API and leaves both headless backend transports and declarative HTML `<form>` tool synthesis outside the normative specification. [1][5][14]",
   "v05_fuzzy_additions": [
    {
     "id": "modelcontext-interface-tool-registration-and-permission-prompts",
     "heading": "ModelContext interface, tool registration, and permission prompts",
     "body_md": "The Draft Community Group Report's `ModelContext` interface (exposed to `Window` in a `SecureContext`) is attached to `Document` via `modelContext` (`SecureContext`, `SameObject`) and provides `registerTool()`, `getTools()`, and `executeTool()` for managing callable tools. Each `ModelContextTool` dictionary requires `name`, `description`, and an `execute` callback, and optionally includes `inputSchema` and `annotations`. [1]",
     "bullets": [
      {
       "label": "registerTool and unregister steps",
       "text_md": "Calling `registerTool()` returns a rejected promise if a tool with the same `name` is already registered, if `name` or `description` is an empty string, or if `inputSchema` is invalid. Passing an `AbortSignal` unregisters the tool when aborted by running the specification's unregister steps for that `ModelContext` and tool name. [1]"
      },
      {
       "label": "provideContext on window.agent",
       "text_md": "In the initial August 13, 2025 proposal, `window.agent` represented an abstract AI agent connected to the page and exposed a single `provideContext` method; subsequent calls to `provideContext()` cleared all previously registered tools and context before registering the replacement set. [9]"
      },
      {
       "label": "Descriptor fields and readOnlyHint",
       "text_md": "Within a `ModelContextTool` descriptor, `name` identifies the tool in agent calls, `description` provides natural-language guidance on its functionality, `inputSchema` supplies a JSON Schema object for expected input parameters, `execute` runs asynchronously and can return a promise, and `readOnlyHint` indicates when true that the tool only reads data without modifying state. [1]"
      },
      {
       "label": "Confirmation prompts and context boundaries",
       "text_md": "Agents can selectively enforce mandatory user confirmation prompts before executing high-stakes tools (a July 2026 report noted an interim `requestUserInteraction()` helper, which is absent from the 11 November 2026 report), and the user agent may enqueue observation steps on any top-level browsing context. By default, the policy-controlled `tools` permission (default allowlist `'self'`) enables WebMCP in top-level windows and same-origin iframes while blocking cross-origin iframes unless delegated via Permissions Policy `allow=\"tools\"`. [1][5][8][15]"
      }
     ]
    },
    {
     "id": "move-from-navigator-modelcontext-to-document-modelcontext-and-chrome-origin-trial",
     "heading": "Move from navigator.modelContext to document.modelContext and Chrome Origin Trial",
     "body_md": "After introducing `window.agent` in the August 13, 2025 proposal and initializing `modelContext` on `Navigator` on 19 February 2026, the specification moved the `modelContext` getter to `Document` on 27 May 2026, and Chromium removed `navigator.modelContext` in favor of `document.modelContext` on 9 July 2026. [9][10][11][12]",
     "bullets": [
      {
       "label": "Document and iframe modelContext",
       "text_md": "Moving the API from `navigator` to `document` in the July 2026 draft reflects that registered tools belong to a specific page and provides tab-level lifecycle management that standalone MCP servers lack. Because Chrome 150 deprecated `navigator.modelContext` while the origin trial still shipped it, migration code checks `document.modelContext ?? navigator.modelContext`, and parent documents access same-origin child frames through `iframe.contentDocument.modelContext`. [5][11][15]"
      },
      {
       "label": "Chrome 149 through 156 origin trial",
       "text_md": "Chromium's May 2026 blink-dev Intent to Experiment and Chrome for Developers announcements opened the public WebMCP desktop origin trial across Chrome milestones 149 through 156, with desktop shipping estimated at milestone 157. [15][16][17][18]"
      },
      {
       "label": "Declarative HTML form tools",
       "text_md": "Although the 8 October 2026 specification commit removed the declarative HTML `<form>` API for now, Chrome's developer documentation and the `webmcp-tools` declarative polyfill support annotating standard HTML forms with `<form toolname>` and `toolautosubmit` to synthesize WebMCP tools from form markup. [5][8][13][19]"
      },
      {
       "label": "External MCP clients",
       "text_md": "In Chrome, browser extensions can query and execute in-page WebMCP tools via content scripts, while the earlier MCP-B prototype extended MCP with Chromium runtime-messaging transports and a local native server to bridge in-tab tools to external desktop MCP clients such as Claude Desktop and Cursor. [2][6][8]"
      }
     ]
    }
   ],
   "v05_diagram": {
    "title": "WebMCP in-browser tool flow",
    "heading": "WebMCP in-browser tool flow",
    "mermaid": "sequenceDiagram\n    participant Page as Running Page<br/>index.html\n    participant Agent as Browser-integrated<br/>AI agent\n    participant AI as AI agent platform\n    participant Service as Third-party origin<br/>example.com\n\n    Agent->>AI: 1. Send user prompt\n    AI-->>Agent: 2. Inspect or act on<br/>the current page\n    Agent->>Page: 3. Invoke page-provided<br/>WebMCP tool\n    Page->>Service: 4. Make API call as needed\n    Service-->>Page: API response\n    Page->>Page: 5. Update application state<br/>and visible UI\n    Page-->>Agent: 6. WebMCP tool result\n    Agent-->>AI: Tool result\n    Note over Page,Agent: Site-owned code performs the<br/> action and keeps its UI in sync",
    "caption_md": "In-browser tool flow across the running page (`index.html`), the browser-integrated AI agent, the AI agent platform, and a third-party origin. Site-owned code performs the action and keeps its visible UI in sync. [5]"
   },
   "v05_wire_artifact": {
    "title": "ModelContext",
    "heading": "ModelContext",
    "lang": "webidl",
    "code": "partial interface Document {\n  [SecureContext, SameObject] readonly attribute ModelContext modelContext;\n};\n\n[Exposed=Window, SecureContext]\ninterface ModelContext : EventTarget {\n  Promise<undefined> registerTool(ModelContextTool tool, optional ModelContextRegisterToolOptions options = {});\n  Promise<sequence<RegisteredTool>> getTools(optional ModelContextGetToolOptions options = {});\n  Promise<DOMString> executeTool(RegisteredTool tool, optional object inputObject, optional ModelContextExecuteToolOptions options = {});\n\n  attribute EventHandler ontoolchange;\n  attribute EventHandler ontoolactivated;\n  attribute EventHandler ontoolcancel;\n};",
    "caption_md": "Normative Web IDL: `Document` exposes `modelContext`, and `ModelContext` provides `registerTool`, `getTools`, and `executeTool`. [1]"
   },
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "Web IDL",
      "spec_or_rfc": "Web IDL Standard",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "WebMCP exposes `modelContext` on `Document` in a secure context; clients must visit the page to discover tools. [1][8]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "WebMCP registers in-page tools on `document.modelContext`; MCP uses JSON-RPC 2.0 over stdio and Streamable HTTP. [7][20]"
     },
     {
      "target_id": "nlweb",
      "target_name": "NLWeb",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "WebMCP needs a page visit; NLWeb uses `POST /ask` and `POST /await`, schema.org values, and MCP tool `ask`. [7][8][21]"
     },
     {
      "target_id": "agents-json",
      "target_name": "agents.json",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "WebMCP registers tools in page script; agents.json is an OpenAPI-derived contract at `/.well-known/agents.json` with `flows`. [7][22][23]"
     },
     {
      "target_id": "mcp-apps",
      "target_name": "MCP Apps",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "WebMCP registers in-page tools; MCP Apps returns `ui://` HTML (`text/html;profile=mcp-app`) via `resources/read`. [7][24]"
     },
     {
      "target_id": "web-agent-protocol",
      "target_name": "Web Agent Protocol (WAP)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "WebMCP exposes page-registered tools; WAP records browser actions into MCP servers, including exact replay and smart-replay. [7][25]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (11 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).",
    "side_a": {
     "visible": true,
     "heading": "Pages calling the API",
     "col4_header": "API member called & behavior",
     "note_md": null,
     "rows": [
      {
       "actor": "Agio Digital",
       "role": "In-page caller",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Page script checks `r.modelContext.registerTool`, then calls it.",
       "source_md": "[Agio Digital (fetched 2026-10-30)](https://www.agiodigital.com/) [26]"
      },
      {
       "actor": "BRITECITY",
       "role": "In-page caller",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-11-04",
       "col4_md": "Reads `navigator.modelContext` or `document.modelContext`, then `mc.registerTool`.",
       "source_md": "[BRITECITY IT health check (fetched 2026-11-04)](https://britecity.com/it-health-check) [27]"
      },
      {
       "actor": "ScoreTail",
       "role": "In-page caller",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Calls `registerTools`, which calls `registerTool` on `document.modelContext`.",
       "source_md": "[ScoreTail score page (fetched 2026-10-30)](https://scoretail.com/en/sheet-music/canon-in-d-pachelbel-johann/view) [28]"
      },
      {
       "actor": "Chrome WebMCP demos",
       "role": "Reference page demos",
       "status": "Experimental",
       "status_display": "Experimental · checked 2026-11-06",
       "col4_md": "Travel imperative demo and Le Petit Bistro declarative demo.",
       "source_md": "[webmcp-tools](https://github.com/GoogleChromeLabs/webmcp-tools) [19]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Engines, agents and standards positions",
     "col4_header": "Version, channel & standards position",
     "note_md": null,
     "rows": [
      {
       "actor": "Google Chrome",
       "role": "Browser engine",
       "status": "Origin trial",
       "status_display": "Origin trial · as of 2026-11-04",
       "col4_md": "Origin trial in Chrome 149 (`about:flags#enable-webmcp-testing`); ChromeStatus feature 5117755740913664 lists status `Proposed` (`origintrial`: `false`; desktop trial stage 149–156).",
       "source_md": "[WebMCP implementation status (raw, fetched 2026-11-04)](https://raw.githubusercontent.com/webmachinelearning/webmcp/main/implementation-status.md) [18] · [ChromeStatus feature 5117755740913664 (fetched 2026-11-04)](https://chromestatus.com/api/v0/features/5117755740913664) [29] · [Chrome for Developers, WebMCP (updated 2026-10-07)](https://developer.chrome.com/docs/ai/webmcp) [8] · [Chrome for Developers, Join the WebMCP origin trial](https://developer.chrome.com/blog/ai-webmcp-origin-trial) [16][17]"
      },
      {
       "actor": "Microsoft Edge",
       "role": "Browser engine",
       "status": "Origin trial",
       "status_display": "Origin trial · as of 2026-10-30",
       "col4_md": "Origin trial in Edge 150; expires March 30, 2027.",
       "source_md": "[WebMCP implementation status (raw, fetched 2026-11-04)](https://raw.githubusercontent.com/webmachinelearning/webmcp/main/implementation-status.md) [18] · [Microsoft, WebMCP origin trial (fetched 2026-10-30)](https://developer.microsoft.com/en-us/microsoft-edge/origin-trials/trials/0b76fe60-b266-458e-a285-04e375c0c31a) [30] · [Patrick Brosset, New in Edge for developers (2026-09-21)](https://blogs.windows.com/msedgedev/2026/09/21/new-in-edge-for-developers-create-better-components-and-make-your-site-agent-ready/) [31]"
      },
      {
       "actor": "Brave (Leo AI)",
       "role": "AI agent",
       "status": "Experimental",
       "status_display": "Experimental · as of 2026-10-07",
       "col4_md": "Experimental in Leo AI chat; flag `brave://flags/#enable-webmcp-testing`.",
       "source_md": "[WebMCP implementation status (raw, fetched 2026-11-04)](https://raw.githubusercontent.com/webmachinelearning/webmcp/main/implementation-status.md) [18] · [Brave issue #55232 (API, fetched 2026-11-04)](https://github.com/brave/brave-browser/issues/55232) [32]"
      },
      {
       "actor": "OpenAI ChatGPT Desktop",
       "role": "AI agent",
       "status": "Supported",
       "status_display": "Supported · checked 2026-11-04",
       "col4_md": "Status page: supported in ChatGPT Desktop; no version named.",
       "source_md": "[WebMCP implementation status (raw, fetched 2026-11-04)](https://raw.githubusercontent.com/webmachinelearning/webmcp/main/implementation-status.md) [18]"
      },
      {
       "actor": "Meta AI (Ray-Ban Display)",
       "role": "AI agent",
       "status": "Coming soon",
       "status_display": "Coming soon · checked 2026-11-04",
       "col4_md": "Coming soon on Ray-Ban Display via `document.modelContext.registerTool()`.",
       "source_md": "[WebMCP implementation status (raw, fetched 2026-11-04)](https://raw.githubusercontent.com/webmachinelearning/webmcp/main/implementation-status.md) [18]"
      },
      {
       "actor": "Chrome WebMCP developer utilities",
       "role": "Inspector, evals, and polyfill",
       "status": "Experimental",
       "status_display": "Experimental · checked 2026-11-06",
       "col4_md": "Inspector, Evals CLI, skills, and a declarative polyfill.",
       "source_md": "[webmcp-tools utilities](https://github.com/GoogleChromeLabs/webmcp-tools) [19]"
      },
      {
       "actor": "Chrome WebMCP example extension",
       "role": "Reference agent extension",
       "status": "Experimental",
       "status_display": "Experimental · checked 2026-11-06",
       "col4_md": "Reads `document.modelContext.getTools()` and `ontoolchange`.",
       "source_md": "[webmcp-extension](https://github.com/GoogleChromeLabs/webmcp-extension/) [33]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [
     {
      "label": "Chrome Platform Status feature record",
      "as_of": "2026-11-02",
      "value_md": "Tracked on Chrome Platform Status as feature 5117755740913664 (`document-modelcontext`; search tag `WebMCP`, created `2025-07-08`, updated `2026-11-02`). [29]"
     },
     {
      "label": "Chromium desktop origin trial milestone window (ChromeStatus feature 5117755740913664 origin-trial stage)",
      "as_of": "2026-11-02",
      "value_md": "Chrome 149–156 (`desktop_first`: 149, `desktop_last`: 156) [29]"
     }
    ],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "agent-permissions-json",
     "target_name": "agent-permissions.json",
     "relation_label": "Complements",
     "delta": "agent-permissions.json states which in-page actions are allowed, using resource_rules verbs and action_guidelines, while WebMCP is the browser API for agent actions and does not define that permissions file.",
     "item_md": "**[agent-permissions.json](/protocols/agent-permissions-json/)** (Complements) — agent-permissions.json states which in-page actions are allowed, using resource_rules verbs and action_guidelines, while WebMCP is the browser API for agent actions and does not define that permissions file."
    },
    {
     "item_md": "**[Act protocols](/category/act/)** — Category index for `act` standards."
    }
   ],
   "v05_compiled_md": "---\nid: webmcp\ntitle: \"WebMCP\"\ntier: flagship\nlifecycle_status: active\ncategory: act\nform: browser-api\nwire_archetype: browser_telemetry\nspec_url: https://webmachinelearning.github.io/webmcp/\nlast_checked: 2026-11-11\n---\n\n# WebMCP\n\n**Category:** [Act](/category/act/) (`act`) · **Form:** Browser API (`browser-api`) · **Last checked:** 2026-11-11\n\n> *This page covers the W3C Web Machine Learning Community Group's client-side `document.modelContext` browser API specification. It is distinct from two earlier community prototypes that shared the name—`jasonjmcghee/WebMCP` (created 2025-03-04) and Alex Nahas's `MiguelsPizza/WebMCP` / MCP-B (created 2025-06-13)—both acknowledged by the Community Group for early prototyping experience; for the backend JSON-RPC protocol, see [Model Context Protocol](/protocols/mcp/). [1][2][3][4]*\n\n> **In brief:** WebMCP is a client-side browser API that lets open web pages expose callable JavaScript functions directly to in-browser AI assistants and connected agents within the user's active tab. Instead of forcing browser agents to scrape screenshots and synthesize fragile DOM clicks—or requiring developers to stand up separate backend MCP servers—websites register structured tool schemas through `document.modelContext.registerTool()` so the browser can invoke each tool's in-page `execute` callback directly. [1][5]\n\n**WebMCP** is a client-side browser API specification published by the W3C Web Machine Learning Community Group that enables web applications to expose structured JavaScript tools to AI agents without relying on simulated DOM input or backend servers. [1] First published on August 13, 2025 by Microsoft and Google engineers, the specification is maintained as a Draft Community Group Report dated 11 November 2026. [1][6] In a `SecureContext`, a page script registers `ModelContextTool` definitions (`name`, `description`, `execute`, and optional `inputSchema`) via the imperative `document.modelContext.registerTool()` method on `Document`. [1][7] Because tools exist only in the open page, browsers and connected agents must visit a site directly to query `document.modelContext` and invoke registered callbacks. [5][8] The API surface evolved from `window.agent` and `provideContext` in the August 2025 proposal to `navigator.modelContext` (February 2026) and `document.modelContext` (May–July 2026), while a proposed declarative `<form>` API was deferred from the specification in October 2026. [5][9][10][11][12][13]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Act](/category/act/) (`act`) |\n| **Form** | Browser API (`browser-api`) |\n| **Originated by** | Brandon Walderman, Leo Lee, Andrew Nolan, David Bokan, Khushal Sagar, and Hannah Van Opstal (August 13, 2025). [6] |\n| **Governed by** | Web Machine Learning Community Group. Editors: Walderman, Sagar, Farolino, Dallstream. Repo created 2025-08-05. [1][6] |\n| **Track** | W3C Community Group report, not a W3C Standard and not on the W3C Standards Track [1] |\n| **Status** | Draft Community Group Report, 11 November 2026. [1] |\n| **Version** | Published draft, 11 November 2026. Main explainer: first published August 13, 2025. [1][5] |\n| **Entry point** | `document.modelContext.registerTool()` on `Document`, in a secure context [1][7] |\n| **Specification** | [WebMCP](https://webmachinelearning.github.io/webmcp/) [1] |\n| **Found at** | Tools register on the open page's `document.modelContext`. Clients must visit the site. [7][8] |\n| **Licence** | W3C Community Contributor License Agreement (CLA) [1] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [ModelContext interface, tool registration, and permission prompts](#modelcontext-interface-tool-registration-and-permission-prompts)\n3. [Move from navigator.modelContext to document.modelContext and Chrome Origin Trial](#move-from-navigator-modelcontext-to-document-modelcontext-and-chrome-origin-trial)\n4. [Counterparts and related standards](#counterparts-and-related-standards)\n5. [Adoption and ecosystem](#adoption-and-ecosystem)\n6. [See also](#see-also)\n7. [References](#references)\n\n---\n\n## Problem and scope\n\nWithout an in-browser tool surface, browser agents must observe page state through screenshots, DOM trees, and accessibility snapshots and then act by simulating human user input, while external tool integrations require each service to maintain bespoke backend connectors with individual AI platforms. [5] WebMCP turns an open web page into a client-side counterpart to a [Model Context Protocol](/protocols/mcp/) server: the application registers JavaScript functions with natural-language descriptions and structured schemas on `document.modelContext`, and the browser mediates agent calls by invoking each tool's in-page `execute` callback within the user's live session. [1][5] Published as a W3C Community Group report rather than a W3C Standards Track specification, WebMCP standardizes only the imperative in-page JavaScript registration API and leaves both headless backend transports and declarative HTML `<form>` tool synthesis outside the normative specification. [1][5][14]\n\n### WebMCP in-browser tool flow\n\n```mermaid\nsequenceDiagram\n    participant Page as Running Page<br/>index.html\n    participant Agent as Browser-integrated<br/>AI agent\n    participant AI as AI agent platform\n    participant Service as Third-party origin<br/>example.com\n\n    Agent->>AI: 1. Send user prompt\n    AI-->>Agent: 2. Inspect or act on<br/>the current page\n    Agent->>Page: 3. Invoke page-provided<br/>WebMCP tool\n    Page->>Service: 4. Make API call as needed\n    Service-->>Page: API response\n    Page->>Page: 5. Update application state<br/>and visible UI\n    Page-->>Agent: 6. WebMCP tool result\n    Agent-->>AI: Tool result\n    Note over Page,Agent: Site-owned code performs the<br/> action and keeps its UI in sync\n```\n\n*In-browser tool flow across the running page (`index.html`), the browser-integrated AI agent, the AI agent platform, and a third-party origin. Site-owned code performs the action and keeps its visible UI in sync. [5]*\n\n### ModelContext\n\n```webidl\npartial interface Document {\n  [SecureContext, SameObject] readonly attribute ModelContext modelContext;\n};\n\n[Exposed=Window, SecureContext]\ninterface ModelContext : EventTarget {\n  Promise<undefined> registerTool(ModelContextTool tool, optional ModelContextRegisterToolOptions options = {});\n  Promise<sequence<RegisteredTool>> getTools(optional ModelContextGetToolOptions options = {});\n  Promise<DOMString> executeTool(RegisteredTool tool, optional object inputObject, optional ModelContextExecuteToolOptions options = {});\n\n  attribute EventHandler ontoolchange;\n  attribute EventHandler ontoolactivated;\n  attribute EventHandler ontoolcancel;\n};\n```\n\n*Normative Web IDL: `Document` exposes `modelContext`, and `ModelContext` provides `registerTool`, `getTools`, and `executeTool`. [1]*\n\n---\n\n## ModelContext interface, tool registration, and permission prompts\n\nThe Draft Community Group Report's `ModelContext` interface (exposed to `Window` in a `SecureContext`) is attached to `Document` via `modelContext` (`SecureContext`, `SameObject`) and provides `registerTool()`, `getTools()`, and `executeTool()` for managing callable tools. Each `ModelContextTool` dictionary requires `name`, `description`, and an `execute` callback, and optionally includes `inputSchema` and `annotations`. [1]\n\n- **registerTool and unregister steps:** Calling `registerTool()` returns a rejected promise if a tool with the same `name` is already registered, if `name` or `description` is an empty string, or if `inputSchema` is invalid. Passing an `AbortSignal` unregisters the tool when aborted by running the specification's unregister steps for that `ModelContext` and tool name. [1]\n- **provideContext on window.agent:** In the initial August 13, 2025 proposal, `window.agent` represented an abstract AI agent connected to the page and exposed a single `provideContext` method; subsequent calls to `provideContext()` cleared all previously registered tools and context before registering the replacement set. [9]\n- **Descriptor fields and readOnlyHint:** Within a `ModelContextTool` descriptor, `name` identifies the tool in agent calls, `description` provides natural-language guidance on its functionality, `inputSchema` supplies a JSON Schema object for expected input parameters, `execute` runs asynchronously and can return a promise, and `readOnlyHint` indicates when true that the tool only reads data without modifying state. [1]\n- **Confirmation prompts and context boundaries:** Agents can selectively enforce mandatory user confirmation prompts before executing high-stakes tools (a July 2026 report noted an interim `requestUserInteraction()` helper, which is absent from the 11 November 2026 report), and the user agent may enqueue observation steps on any top-level browsing context. By default, the policy-controlled `tools` permission (default allowlist `'self'`) enables WebMCP in top-level windows and same-origin iframes while blocking cross-origin iframes unless delegated via Permissions Policy `allow=\"tools\"`. [1][5][8][15]\n\n---\n\n## Move from navigator.modelContext to document.modelContext and Chrome Origin Trial\n\nAfter introducing `window.agent` in the August 13, 2025 proposal and initializing `modelContext` on `Navigator` on 19 February 2026, the specification moved the `modelContext` getter to `Document` on 27 May 2026, and Chromium removed `navigator.modelContext` in favor of `document.modelContext` on 9 July 2026. [9][10][11][12]\n\n- **Document and iframe modelContext:** Moving the API from `navigator` to `document` in the July 2026 draft reflects that registered tools belong to a specific page and provides tab-level lifecycle management that standalone MCP servers lack. Because Chrome 150 deprecated `navigator.modelContext` while the origin trial still shipped it, migration code checks `document.modelContext ?? navigator.modelContext`, and parent documents access same-origin child frames through `iframe.contentDocument.modelContext`. [5][11][15]\n- **Chrome 149 through 156 origin trial:** Chromium's May 2026 blink-dev Intent to Experiment and Chrome for Developers announcements opened the public WebMCP desktop origin trial across Chrome milestones 149 through 156, with desktop shipping estimated at milestone 157. [15][16][17][18]\n- **Declarative HTML form tools:** Although the 8 October 2026 specification commit removed the declarative HTML `<form>` API for now, Chrome's developer documentation and the `webmcp-tools` declarative polyfill support annotating standard HTML forms with `<form toolname>` and `toolautosubmit` to synthesize WebMCP tools from form markup. [5][8][13][19]\n- **External MCP clients:** In Chrome, browser extensions can query and execute in-page WebMCP tools via content scripts, while the earlier MCP-B prototype extended MCP with Chromium runtime-messaging transports and a local native server to bridge in-tab tools to external desktop MCP clients such as Claude Desktop and Cursor. [2][6][8]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **Web IDL** | `Web IDL Standard` | Analogous to classic standard | WebMCP exposes `modelContext` on `Document` in a secure context; clients must visit the page to discover tools. [1][8] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Model Context Protocol](/protocols/mcp/)** | Peer alternative | WebMCP registers in-page tools on `document.modelContext`; MCP uses JSON-RPC 2.0 over stdio and Streamable HTTP. [7][20] |\n| **[NLWeb](/protocols/nlweb/)** | Peer alternative | WebMCP needs a page visit; NLWeb uses `POST /ask` and `POST /await`, schema.org values, and MCP tool `ask`. [7][8][21] |\n| **[agents.json](/protocols/agents-json/)** | Peer alternative | WebMCP registers tools in page script; agents.json is an OpenAPI-derived contract at `/.well-known/agents.json` with `flows`. [7][22][23] |\n| **[MCP Apps](/protocols/mcp-apps/)** | Peer alternative | WebMCP registers in-page tools; MCP Apps returns `ui://` HTML (`text/html;profile=mcp-app`) via `resources/read`. [7][24] |\n| **[Web Agent Protocol (WAP)](/protocols/web-agent-protocol/)** | Peer alternative | WebMCP exposes page-registered tools; WAP records browser actions into MCP servers, including exact replay and smart-replay. [7][25] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (11 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).*\n\n### Pages calling the API\n\n| Actor | Role | Status | API member called & behavior | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Agio Digital** | In-page caller | Live (HTTP 200) · checked 2026-10-30 | Page script checks `r.modelContext.registerTool`, then calls it. | [Agio Digital (fetched 2026-10-30)](https://www.agiodigital.com/) [26] |\n| **BRITECITY** | In-page caller | Live (HTTP 200) · checked 2026-11-04 | Reads `navigator.modelContext` or `document.modelContext`, then `mc.registerTool`. | [BRITECITY IT health check (fetched 2026-11-04)](https://britecity.com/it-health-check) [27] |\n| **ScoreTail** | In-page caller | Live (HTTP 200) · checked 2026-10-30 | Calls `registerTools`, which calls `registerTool` on `document.modelContext`. | [ScoreTail score page (fetched 2026-10-30)](https://scoretail.com/en/sheet-music/canon-in-d-pachelbel-johann/view) [28] |\n| **Chrome WebMCP demos** | Reference page demos | Experimental · checked 2026-11-06 | Travel imperative demo and Le Petit Bistro declarative demo. | [webmcp-tools](https://github.com/GoogleChromeLabs/webmcp-tools) [19] |\n\n### Engines, agents and standards positions\n\n| Actor | Role | Status | Version, channel & standards position | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Google Chrome** | Browser engine | Origin trial · as of 2026-11-04 | Origin trial in Chrome 149 (`about:flags#enable-webmcp-testing`); ChromeStatus feature 5117755740913664 lists status `Proposed` (`origintrial`: `false`; desktop trial stage 149–156). | [WebMCP implementation status (raw, fetched 2026-11-04)](https://raw.githubusercontent.com/webmachinelearning/webmcp/main/implementation-status.md) [18] · [ChromeStatus feature 5117755740913664 (fetched 2026-11-04)](https://chromestatus.com/api/v0/features/5117755740913664) [29] · [Chrome for Developers, WebMCP (updated 2026-10-07)](https://developer.chrome.com/docs/ai/webmcp) [8] · [Chrome for Developers, Join the WebMCP origin trial](https://developer.chrome.com/blog/ai-webmcp-origin-trial) [16][17] |\n| **Microsoft Edge** | Browser engine | Origin trial · as of 2026-10-30 | Origin trial in Edge 150; expires March 30, 2027. | [WebMCP implementation status (raw, fetched 2026-11-04)](https://raw.githubusercontent.com/webmachinelearning/webmcp/main/implementation-status.md) [18] · [Microsoft, WebMCP origin trial (fetched 2026-10-30)](https://developer.microsoft.com/en-us/microsoft-edge/origin-trials/trials/0b76fe60-b266-458e-a285-04e375c0c31a) [30] · [Patrick Brosset, New in Edge for developers (2026-09-21)](https://blogs.windows.com/msedgedev/2026/09/21/new-in-edge-for-developers-create-better-components-and-make-your-site-agent-ready/) [31] |\n| **Brave (Leo AI)** | AI agent | Experimental · as of 2026-10-07 | Experimental in Leo AI chat; flag `brave://flags/#enable-webmcp-testing`. | [WebMCP implementation status (raw, fetched 2026-11-04)](https://raw.githubusercontent.com/webmachinelearning/webmcp/main/implementation-status.md) [18] · [Brave issue #55232 (API, fetched 2026-11-04)](https://github.com/brave/brave-browser/issues/55232) [32] |\n| **OpenAI ChatGPT Desktop** | AI agent | Supported · checked 2026-11-04 | Status page: supported in ChatGPT Desktop; no version named. | [WebMCP implementation status (raw, fetched 2026-11-04)](https://raw.githubusercontent.com/webmachinelearning/webmcp/main/implementation-status.md) [18] |\n| **Meta AI (Ray-Ban Display)** | AI agent | Coming soon · checked 2026-11-04 | Coming soon on Ray-Ban Display via `document.modelContext.registerTool()`. | [WebMCP implementation status (raw, fetched 2026-11-04)](https://raw.githubusercontent.com/webmachinelearning/webmcp/main/implementation-status.md) [18] |\n| **Chrome WebMCP developer utilities** | Inspector, evals, and polyfill | Experimental · checked 2026-11-06 | Inspector, Evals CLI, skills, and a declarative polyfill. | [webmcp-tools utilities](https://github.com/GoogleChromeLabs/webmcp-tools) [19] |\n| **Chrome WebMCP example extension** | Reference agent extension | Experimental · checked 2026-11-06 | Reads `document.modelContext.getTools()` and `ontoolchange`. | [webmcp-extension](https://github.com/GoogleChromeLabs/webmcp-extension/) [33] |\n\n### Ecosystem censuses\n\n- **Chrome Platform Status feature record** (*as of 2026-11-02*): Tracked on Chrome Platform Status as feature 5117755740913664 (`document-modelcontext`; search tag `WebMCP`, created `2025-07-08`, updated `2026-11-02`). [29]\n- **Chromium desktop origin trial milestone window (ChromeStatus feature 5117755740913664 origin-trial stage)** (*as of 2026-11-02*): Chrome 149–156 (`desktop_first`: 149, `desktop_last`: 156) [29]\n\n---\n\n## See also\n\n- **[agent-permissions.json](/protocols/agent-permissions-json/)** *(Complements)* — agent-permissions.json states which in-page actions are allowed, using resource_rules verbs and action_guidelines, while WebMCP is the browser API for agent actions and does not define that permissions file.\n- **Category:** [Act protocols](/category/act/)\n\n---\n\n## References\n\n1. Web Machine Learning Community Group (editors Brandon Walderman, Khushal Sagar, Dominic Farolino, and Samuel Dallstream), *WebMCP* (Draft Community Group Report, 11 November 2026) — <https://webmachinelearning.github.io/webmcp/>\n2. Alexander Nahas (MiguelsPizza), *WebMCP* (repository created 2025-06-13) — <https://github.com/MiguelsPizza/WebMCP>\n3. Jason McGhee, *WebMCP* (repository created 2025-03-04) — <https://github.com/jasonjmcghee/WebMCP>\n4. W3C Web Machine Learning Community Group, *WebML WG teleconference minutes* (14 August 2025) — <https://www.w3.org/2025/08/14-webmachinelearning-minutes.html>\n5. webmachinelearning/webmcp (GitHub), *WebMCP* (checked 2026-11-04) — <https://raw.githubusercontent.com/webmachinelearning/webmcp/main/README.md>\n6. Brandon Walderman, Leo Lee, Andrew Nolan, David Bokan, Khushal Sagar, and Hannah Van Opstal, *WebMCP explainer* (first published August 13, 2025 (commit 7edc0e18)) — <https://github.com/webmachinelearning/webmcp/blob/7edc0e1818636182e352b3b15d9203a29b18319b/README.md>\n7. Web Machine Learning Community Group, *WebMCP explainer* (first published August 13, 2025) — <https://github.com/webmachinelearning/webmcp>\n8. Alexandra Klepper, François Beaufort, and Kasper Kulikowski (Chrome for Developers), *WebMCP* (published 18 May 2026; last updated 7 October 2026) — <https://developer.chrome.com/docs/ai/webmcp>\n9. Brandon Walderman, Andrew Nolan, David Bokan, Khushal Sagar, and Hannah Van Opstal, *WebMCP API proposal* (August 13, 2025) — <https://github.com/webmachinelearning/webmcp/blob/7edc0e1818636182e352b3b15d9203a29b18319b/docs/proposal.md>\n10. Dominic Farolino, *Initialize a Navigator's modelContext member* (19 February 2026) — <https://github.com/webmachinelearning/webmcp/commit/41dd8292ac19db6a43ea58aefc8fcb4662742411>\n11. Dominic Farolino, *Move the modelContext getter to Document (#184)* (27 May 2026) — <https://github.com/webmachinelearning/webmcp/commit/c7b5c7023f6e6a1c7a2495946136eb19b3109ae6>\n12. Dominic Farolino (Chromium), *WebMCP: Remove navigator.modelContext* (9 July 2026) — <https://github.com/chromium/chromium/commit/4a9fee9eafcabd675c7245cc1b0acc1ca5f17d99>\n13. François Beaufort, *Remove declarative API from the spec for now (#338)* (8 October 2026) — <https://github.com/webmachinelearning/webmcp/commit/14ae813cc4e9fe0d39313f4b1ee5b231746731ad>\n14. PPC Land, *Chrome 149 origin trial puts WebMCP in developers' hands at last* (checked 2026-10-30) — <https://ppc.land/chrome-149-origin-trial-puts-webmcp-in-developers-hands-at-last/>\n15. Spronta, *The State of WebMCP: July 2026* (July 2026) — <https://www.spronta.com/blog/state-of-webmcp-july-2026>\n16. blink-dev, *Intent to Experiment: WebMCP* (15 May 2026) — <https://groups.google.com/a/chromium.org/g/blink-dev/c/gmYffo5WOE8/m/OJxuQRP3AAAJ>\n17. Alexandra Klepper (Chrome for Developers), *Join the WebMCP origin trial* (published 9 June 2026) — <https://developer.chrome.com/blog/ai-webmcp-origin-trial>\n18. Web Machine Learning Community Group, *Browser and Agent Implementation Status* (checked 2026-11-04) — <https://raw.githubusercontent.com/webmachinelearning/webmcp/main/implementation-status.md>\n19. Google Chrome Labs, *webmcp-tools* (checked 2026-11-06) — <https://github.com/GoogleChromeLabs/webmcp-tools>\n20. Model Context Protocol, *Specification* (2026-07-28) — <https://modelcontextprotocol.io/specification/2026-07-28>\n21. NLWeb, *NLWeb specification* (v0.55) — <https://raw.githubusercontent.com/nlweb-ai/website/main/NLWEBSPEC.md>\n22. Wildcard AI, *agents.json* (checked 2026-10-30) — <https://github.com/wild-card-ai/agents-json/blob/master/README.md>\n23. Wildcard AI, *agents.json schema* (checked 2026-10-30) — <https://github.com/wild-card-ai/agents-json/blob/master/agents_json/agentsJson.schema.json>\n24. MCP Apps contributors, *MCP Apps specification* (2026-01-26) — <https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/2026-01-26/apps.mdx>\n25. OTA Tech AI, *Web Agent Protocol (WAP)* (checked 2026-10-31) — <https://github.com/OTA-Tech-AI/web-agent-protocol>\n26. Agio Digital, *Licensed Crypto Fund Administrator, Bahamas* (checked 2026-10-30) — <https://www.agiodigital.com/>\n27. BRITECITY, *Free IT Health Check* (checked 2026-10-30) — <https://britecity.com/it-health-check>\n28. ScoreTail, *Canon in D (Pachelbel) score page* (checked 2026-10-30) — <https://scoretail.com/en/sheet-music/canon-in-d-pachelbel-johann/view>\n29. Chrome Platform Status, *ChromeStatus feature 5117755740913664* (checked 2026-11-04) — <https://chromestatus.com/api/v0/features/5117755740913664>\n30. Microsoft, *WebMCP origin trial* (trial expiration 30 March 2027) — <https://developer.microsoft.com/en-us/microsoft-edge/origin-trials/trials/0b76fe60-b266-458e-a285-04e375c0c31a>\n31. Patrick Brosset (Microsoft Edge), *New in Edge for developers: create better components and make your site agent-ready* (published 21 September 2026) — <https://blogs.windows.com/msedgedev/2026/09/21/new-in-edge-for-developers-create-better-components-and-make-your-site-agent-ready/>\n32. Jay Harris (Brave), *[AI Chat]: Add support for the WebMCP protocol to Leo* (opened 5 May 2026) — <https://github.com/brave/brave-browser/issues/55232>\n33. Google Chrome Labs, *webmcp-extension* (checked 2026-11-06) — <https://github.com/GoogleChromeLabs/webmcp-extension/>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "NLWeb",
   "adoption": {
    "level": "observed",
    "by": "Agent Community, World Monitor, Cloudflare (AI Search NLWeb template), and Wix",
    "probe_run": null
   },
   "aliases": [
    "Natural Language Web",
    "NLWeb"
   ],
   "analog": "HTML for machine-readable, natural-language site content",
   "collisions": [],
   "discovery": {
    "mechanism": "No standard discovery path; POST/GET /ask or /mcp (or /_api/nlweb/mcp on Wix)",
    "path": "No standard discovery path. The specification's HTTP binding is \"POST /ask — Submit a natural language query. POST /await — Check on or cancel a promised result.\"; it is \"NLWeb is designed to be transport-protocol agnostic.\" and \"NLWeb operations can be exposed as Tools within the Model Context Protocol (MCP) or other JSON-RPC-based agentic standards.\" Paths vary by deployment: the reference server and Cloudflare's Worker use /ask and /mcp; Wix uses \"Use the following MCP URL to connect to your favorite AI agent (e.g. Claude, ChatGPT or custom agents): https://www.[your-domain.com]/_api/nlweb/mcp.\""
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://raw.githubusercontent.com/nlweb-ai/website/main/NLWEBSPEC.md",
     "claim": "nlweb-ai/website (GitHub), *NLWeb Specification v0.55 (nlweb-ai/website NLWEBSPEC.md)*, checked 2026-10-30",
     "date": null,
     "quote": "NLWeb operations can be exposed as Tools within the Model Context Protocol (MCP) or other JSON-RPC-based agentic standards. / NLWeb Specification v0.55 / It abstracts the complexity of agentic interactions—such as tool use, long-running tasks, and rich structured data—into a unified protocol. / NLWeb supports streaming responses via Server-Sent Events (SSE) over HTTP transport. / Streaming is requested by setting prefer.streaming to true. / Clients SHOULD use this event to initialize their response handling. / Clients MUST process this event to capture session state for subsequent requests. / 202 Accepted: Promise response for long-running tasks. / POST /await — Check on or cancel a promised result. / Streaming promoted to its own section (Section 6) with formal SSE event type definitions (start, result, error, complete). / (SSE) Request: http POST /ask HTTP/1.1 Host: api.recipes.example.com Content-Type: application/json Accept: text/event-stream { \"query\": / \"method\": \"POST\", \"endpoint\": \"https://api.recipes.example.com/cart/add\", \"params\": { \"items\": [\"4 large eggs\", \"1/2 cup diced bell / The primary API/tool/skill provided by an NLWeb agent is ask, using which a caller can ask the agent for some information or to perform a task. Await is a helper API that enables asynchronous answers, which is useful for long-running requests. / Await is a helper API that enables asynchronous answers, which is useful for long-running requests. / The primary API/tool/skill provided by an NLWeb agent is ask, using which a caller can ask the agent for some information or to perform a task. / The request object consists of four sections: query, context, prefer, and meta. / Results may arrive out of order (i.e., index values are not guaranteed to be sequential). / NLWeb is designed to be transport-protocol agnostic. / Authentication and authorization are handled at the transport layer and are outside the scope of this specification. / Rate limiting is a transport-layer concern and is outside the scope of this specification.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://news.microsoft.com/source/features/company-news/introducing-nlweb-bringing-conversational-interfaces-directly-to-the-web/",
     "claim": "Microsoft, *Microsoft News: Introducing NLWeb*, checked 2026-10-30",
     "date": null,
     "quote": "The project was conceived and developed by R.V. Guha, creator of RSS, RDF, and Schema.org, who recently joined Microsoft as CVP and Technical Fellow / NLWeb was conceived and developed by R.V. Guha, who recently joined Microsoft as CVP and Technical Fellow. Guha is the creator of widely used web standards such as RSS, RDF and Schema.org.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://github.com/nlweb-ai/NLWeb/wiki/We've-moved-to-our-new-home!",
     "claim": "nlweb ai, *NLWeb Wiki: Repository Migration Notice*, checked 2026-10-30",
     "date": null,
     "quote": "We've migrated the repository from microsoft/NLWeb to our new independent GitHub organization at NLWeb-ai. / https://github.com/NLWeb-ai/NLWeb.git What's next This is just the beginning! Getting our GitHub org set up",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://raw.githubusercontent.com/nlweb-ai/NLWeb/main/LICENSE",
     "claim": "nlweb-ai/NLWeb (GitHub), *nlweb-ai/NLWeb MIT License*, checked 2026-10-30",
     "date": null,
     "quote": "MIT License Copyright (c) Microsoft Corporation.",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://www.w3.org/community/nlweb/",
     "claim": "W3C, *W3C NLWeb Community Group*, checked 2026-10-30",
     "date": null,
     "quote": "This group was originally proposed on 2025-10-16 by Ramanathan Guha. / W3C's hosting of this group does not imply endorsement of the activities. / NLWeb Community Group",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://raw.githubusercontent.com/nlweb-ai/NLWeb/main/README.md",
     "claim": "nlweb-ai/NLWeb (GitHub), *nlweb-ai/NLWeb README.md*, checked 2026-10-30",
     "date": null,
     "quote": "NLWeb provides practical implementation code-not as the definitive solution, but as proof-of-concept demonstrations showing one possible approach. / Contributing See Contribution Guidance for more details. Contributor Wall of Fame !nlweb contributors(https://github.com/microsoft/nlweb/graphs/contributors) Trademarks / A simple protocol to interact with a site using natural language. It returns responses in JSON using Schema.org. See the NLWeb spec for details. / implementations, and community participation are all essential. NLWeb brings together protocols, Schema.org formats, and / NLWeb uses the MIT License. / NLWeb simplifies the process of building conversational interfaces for websites. / straightforward implementation that uses existing markup on sites with structured lists (e.g., products, recipes, attractions, reviews). / Schema.org and related semi-structured formats like RSS - used by over 100 million websites - have become not just de facto syndication mechanisms, but also a semantic layer for the web.",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://blogs.microsoft.com/blog/2025/05/19/microsoft-build-2025-the-age-of-ai-agents-and-building-the-open-agentic-web/",
     "claim": "Microsoft, *Microsoft Build 2025: Building the Open Agentic Web*, checked 2026-10-30",
     "date": null,
     "quote": "May 2025 10:35:23 GMT link:; rel=\"https://api.w.org/\" link:; rel=\"alternate\"; title=\"JSON\"; type=\"application/json\" link:; rel=shortlink x-powered-by: WP",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://github.com/nlweb-ai/NLWeb",
     "claim": "nlweb-ai/NLWeb (GitHub), *GitHub Repository Metadata: nlweb-ai/NLWeb*, checked 2026-10-30",
     "date": null,
     "quote": "\"releases_url\": \"https://api.github.com/repos/nlweb-ai/NLWeb/releases{/id}\", \"deployments_url\": \"https://api.github.com/repos/nlweb-ai/NLWeb/deployments\", \"created_at\": \"2025-04-28T20:44:02Z\", \"updated_at\": / \"full_name\": \"nlweb-ai/NLWeb\" / \"forks_count\": 694, \"mirror_url\": null, \"archived\": false, \"disabled\": false, \"open_issues_count\": 65, \"license\": { \"key\": \"mit\",",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://raw.githubusercontent.com/nlweb-ai/NLWeb/main/docs/nlweb-rest-api.md",
     "claim": "nlweb-ai/NLWeb (GitHub), *NLWeb REST API Documentation (nlweb-rest-api.md)*, checked 2026-10-30",
     "date": null,
     "quote": "expires: Fri, 30 Oct 2026 22:04:36 GMT source-age: 0 NLWeb Rest API At this / At this point, NLWeb supports 2 APIs at the endpoints /ask and /mcp. The arguments are the same for both, as is most of the functionality. The /mcp endpoint returns the answers in format that MCP clients can use. The /mcp endpoint also supports the core MCP methods (list_tools, list_prompts, call_tool and get_prompt). / - An array (soon to be moved to a richer structure, starting with schema.org's / # NLWeb Rest API At this point, NLWeb supports 2 APIs at the endpoints / API At this point, NLWeb supports 2 APIs at the endpoints /ask and /mcp.",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://www.safeguard.sh/resources/blog/nlweb-explained-natural-language-endpoints-for-websites-mcp-and-how-to-secure-them",
     "claim": "Safeguard, *Safeguard: NLWeb Explained and Security Analysis*, checked 2026-10-30",
     "date": null,
     "quote": "the W3C Schema.org Community Group as its main forum since April 2015. NLWeb uses / NLWeb?\\\"}]}]\\n63:[\\\"$\\\",\\\"li\\\",\\\"is-every-nlweb-instance-an-mcp-server\\\",{\\\"children\\\":[\\\"$\\\",\\\"a\\\",null,{\\\"href\\\":\\\"#is-every-nlweb-instance-an-mcp-server\\\",\\\"className\\\":\\\"-ml-px block border-l",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://support.wix.com/en/article/enabling-nlweb-for-ai-agent-access",
     "claim": "Wix, *Wix Help Center: Enabling NLWeb for AI Agent Access*, checked 2026-10-30",
     "date": null,
     "quote": "Use the following MCP URL to connect to your favorite AI agent (e.g. Claude, ChatGPT or custom agents): https://www.[your-domain.com]/_api/nlweb/mcp.",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://www.rfc-editor.org/rfc/rfc4287.html",
     "claim": "M. Nottingham, Ed. and R. Sayre, Ed., *RFC 4287: The Atom Syndication Format*, December 2005",
     "date": null,
     "quote": "This document specifies Atom, an XML-based Web content and metadata",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://www.jsonrpc.org/specification",
     "claim": "JSON-RPC Working Group, *JSON-RPC 2.0 Specification*, 2013-01-04",
     "date": "2013-01-04",
     "quote": "Origin Date: 2010-03-26 (based on the 2009-05-24 version)",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Current : the current protocol version, which is ready for use and may continue to receive backwards compatible changes.",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://webmachinelearning.github.io/webmcp/",
     "claim": "Web Machine Learning Community Group (editors Brandon Walderman, Khushal Sagar, Dominic Farolino, and Samuel Dallstream), *WebMCP*, Draft Community Group Report, 11 November 2026",
     "date": null,
     "quote": "Draft Community Group Report, 11 November 2026",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://llmstxt.org",
     "claim": "Jeremy Howard, *The /llms.txt file, v2*, published 2024-09-03; modified 2026-08-10; HTTP last-modified 2026-09-24",
     "date": null,
     "quote": "This is v2 of the proposal … The llms.txt specification is open for community input. A GitHub repository hosts this informal overview",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://aaif.io/blog/a2a-joins-aaif",
     "claim": "Agentic AI Foundation, *A2A joins AAIF's open agentic stack*, published 2026-08-17; modified 2026-09-24",
     "date": null,
     "quote": "A2A v1.0, the first stable specification, shipped in March 2026.",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://agentcommunity.org/ask?query=What%20is%20AID%3F",
     "claim": "Agent Community, *Agent Community Live NLWeb /ask Endpoint*, checked 2026-10-30",
     "date": null,
     "quote": "site publishes.\",\"score\":10,\"schema_object\":{\"@context\":\"https://schema.org\",\"@type\":\"Article\",\"@id\":\"https://agentcommunity.org/docs\",\"name\":\"Agent Community\",\"description\":\"Documentation for Agent Community",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://agentcommunity.org/docs/nlweb",
     "claim": "Agent Community, *Agent Community NLWeb Integration Documentation*, checked 2026-10-30",
     "date": null,
     "quote": "/ask is a public-documentation answer endpoint. It uses the same deterministic extractive retrieval as the Documentation MCP: it does not call an LLM, and it returns an answer assembled from published documentation with Schema.org Article citations.",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://www.worldmonitor.app/ask?query=What%20is%20World%20Monitor%3F",
     "claim": "World Monitor, *World Monitor Live NLWeb /ask Endpoint*, checked 2026-10-30",
     "date": null,
     "quote": "{\"_meta\":{\"response_type\":\"list\",\"version\":\"0.1\"},\"query_id\":\"50ab343e-d1d5-45c8-b5d6-0e6ad61287a2\",\"query\":\"What is World Monitor?\",\"results\":[{\"url\":\"https://worldmonitor.app/llms.txt\",\"name\":\"World Monitor",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://www.worldmonitor.app/agents.md",
     "claim": "World Monitor, *World Monitor agents.md*, checked 2026-10-30",
     "date": null,
     "quote": "/openapi.json) · API catalog: https://worldmonitor.app/.well-known/api-catalog - NLWeb: POST https://www.worldmonitor.app/ask (supports SSE) for natural-language questions;",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://developers.cloudflare.com/ai-search/how-to/nlweb/index.md",
     "claim": "Cloudflare, *Cloudflare AI Search: NLWeb Guide*, checked 2026-10-30",
     "date": null,
     "quote": "Enable conversational search on your website with NLWeb and Cloudflare AI Search. This template crawls your site, indexes the content, and deploys NLWeb-standard endpoints to serve both people and AI agents.",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://blog.cloudflare.com/conversational-search-with-nlweb-and-autorag/",
     "claim": "Cloudflare, *Cloudflare Blog: Conversational Search with NLWeb and AutoRAG*, checked 2026-10-30",
     "date": null,
     "quote": "to improve retrieval quality. /mcp endpoint: Implements an MCP server that trusted AI agents",
     "ref": 23
    }
   ],
   "form": "endpoint",
   "governance": "The nlweb-ai GitHub organization, with Microsoft ties still in place. The project moved its repository there: \"We've migrated the repository from microsoft/NLWeb to our new independent GitHub organization at NLWeb-ai.\" The stated aim: \"A neutral space where contributors from any company or background can collaborate\". On 2026-10-29 github.com/microsoft/NLWeb answered HTTP 301 to github.com/nlweb-ai/NLWeb. The license still reads \"MIT License Copyright (c) Microsoft Corporation.\", and the README's support contact, \"For questions about this GitHub project, please contact NLWeb Support.\", is the address NLWebSup@microsoft.com. No foundation holds the project. A W3C Community Group exists: \"Posted on: October 20, 2025 The NLWeb Community Group has been launched:\" \"This is a community initiative. This group was originally proposed on 2025-10-16 by Ramanathan Guha.\" \"W3C's hosting of this group does not imply endorsement of the activities.\" Its page lists \"Chairs None yet\"",
   "group": null,
   "hatnote_md": "This page is about NLWeb (Natural Language Web), the open project that Microsoft announced on 2025-05-19 and R.V. Guha conceived, which gives a website a natural-language `ask` interface over its own Schema.org-shaped content and runs each instance as an MCP server. For the [Model Context Protocol (MCP)](/protocols/mcp/), the open protocol that connects AI applications to external tools and data, see that page and the [NLWeb vs MCP](/compare/nlweb-vs-mcp/) comparison. For the browser API that lets a web page offer tools to an agent, see [WebMCP](/protocols/webmcp/). NLWeb is not NL Web, a French web agency: \"L'agence Web « NL Web », c'est l'histoire d'une passion pour le monde du web. Derrière ce nom, se cache un expert en développement web et applications mobiles\".",
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against github.com/microsoft/NLWeb (redirects to github.com/nlweb-ai/NLWeb); nlweb.ai/spec confirmed unreachable"
    },
    {
     "date": "2026-10-29",
     "note": "Re-verified record against 32 primary, live endpoint, vendor, and coverage sources."
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "nlweb",
   "implementation": "multi-implementation",
   "last_verified": "2026-11-12",
   "name": "NLWeb",
   "native_status": "Public and open to contributions; the code is framed as a demonstration: \"NLWeb provides practical implementation code—not as the definitive solution, but as proof-of-concept demonstrations showing one possible approach.\" The latest commit on main is dated 2026-06-10. A path-traversal flaw in the reference server was reported in August 2025: \"What's worse is that it's a classic path traversal flaw, meaning it's as easy to exploit as visiting a malformed URL.\"; a later review notes \"A release note in docs/release_notes lists a fix for a \"path traversal vulnerability in static file handler\" (PR #231)\" and \"When we queried the repository's GitHub security advisories on 24 October 2026, none were published.\"",
   "origin": {
    "date": "2025-05-19",
    "org": "Microsoft (R.V. Guha)"
   },
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "draft",
   "probe": {
    "method": "POST",
    "on_absent": "connection refused, 404, or a non-Schema.org JSON shape means no NLWeb endpoint is present",
    "parse": "a JSON response using Schema.org vocabulary answering the natural-language question in the request body proves NLWeb (or an MCP-exposed equivalent) is present; every NLWeb instance also runs as an MCP server exposing an `ask` tool/method",
    "path": "{origin}/ask"
   },
   "question": "How can a site expose a natural-language question-answering interface grounded in its own Schema.org-structured content, for both humans and agents?",
   "scope": "general",
   "spec_url": "https://raw.githubusercontent.com/nlweb-ai/website/main/NLWEBSPEC.md",
   "step": "act",
   "summary_md": "**NLWeb** (NLWeb Specification v0.55) defines a standardized interface for natural language interactions with agents. It abstracts the complexity of agentic interactions, such as tool use, long-running tasks, and rich structured data, into a unified protocol. The project was conceived and developed by R.V. Guha, creator of RSS, RDF, and Schema.org, CVP and Technical Fellow at Microsoft, along with contributors from Microsoft and the open-source community. NLWeb supports streaming responses via Server-Sent Events (SSE) over HTTP transport. Streaming is requested by setting prefer.streaming to true. The start event is sent once at the beginning of the stream. Clients SHOULD use this event to initialize their response handling. The complete event is sent once to signal the end of the stream. Clients MUST process this event to capture session state for subsequent requests. 202 Accepted is the promise response for long-running tasks. POST /await checks on or cancels a promised result. The specification heading is NLWeb Specification v0.55. Changes from v0.54 to v0.55 promote streaming to its own section with formal SSE event type definitions for start, result, error, and complete. The repository was migrated from microsoft/NLWeb to an independent GitHub organization at NLWeb-ai, described as a neutral space where contributors from any company or background can collaborate. The license text remains MIT License Copyright (c) Microsoft Corporation. The NLWeb Community Group was originally proposed on 2025-10-16 by Ramanathan Guha. W3C's hosting of this group does not imply endorsement of the activities. NLWeb provides practical implementation code-not as the definitive solution, but as proof-of-concept demonstrations showing one possible approach.",
   "track": "community",
   "version": {
    "date": "2026-03-23",
    "label": "NLWeb Specification v0.55"
   },
   "watch": [
    {
     "type": "github",
     "repo": "nlweb-ai/NLWeb",
     "mode": "tag"
    }
   ],
   "use_cases": [
    "let-agents-act-on-my-site",
    "serve-content-to-agents",
    "expose-tools-to-agents"
   ],
   "audience": [
    "site-owner",
    "agent-builder"
   ],
   "pairs_with": [
    "mcp",
    "webmcp",
    "llms-txt",
    "a2a"
   ],
   "prerequisites": [
    "mcp"
   ],
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "harnesses_rpc_ui",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "This page is about NLWeb (Natural Language Web), the open project that Microsoft announced on 2025-05-19 and R.V. Guha conceived, which gives a website a natural-language `ask` interface over its own Schema.org-shaped content and runs each instance as an MCP server. For the [Model Context Protocol (MCP)](/protocols/mcp/), the open protocol that connects AI applications to external tools and data, see that page and the [NLWeb vs MCP](/compare/nlweb-vs-mcp/) comparison. For the browser API that lets a web page offer tools to an agent, see [WebMCP](/protocols/webmcp/). NLWeb is not NL Web, a French web agency: \"L'agence Web « NL Web », c'est l'histoire d'une passion pour le monde du web. Derrière ce nom, se cache un expert en développement web et applications mobiles\". [1]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**NLWeb** (NLWeb Specification v0.55) defines a standardized interface for natural language interactions with agents. It abstracts the complexity of agentic interactions, such as tool use, long-running tasks, and rich structured data, into a unified protocol. [1] The project was conceived and developed by R.V. Guha, creator of RSS, RDF, and Schema.org, CVP and Technical Fellow at Microsoft, along with contributors from Microsoft and the open-source community. [2] NLWeb supports streaming responses via Server-Sent Events (SSE) over HTTP transport. Streaming is requested by setting prefer.streaming to true. [1] The start event is sent once at the beginning of the stream. Clients SHOULD use this event to initialize their response handling. The complete event is sent once to signal the end of the stream. Clients MUST process this event to capture session state for subsequent requests. [1] 202 Accepted is the promise response for long-running tasks. POST /await checks on or cancels a promised result. [1] The specification heading is NLWeb Specification v0.55. Changes from v0.54 to v0.55 promote streaming to its own section with formal SSE event type definitions for start, result, error, and complete. [1] The repository was migrated from microsoft/NLWeb to an independent GitHub organization at NLWeb-ai, described as a neutral space where contributors from any company or background can collaborate. The license text remains MIT License Copyright (c) Microsoft Corporation. [3][4] The NLWeb Community Group was originally proposed on 2025-10-16 by Ramanathan Guha. W3C's hosting of this group does not imply endorsement of the activities. [5] NLWeb provides practical implementation code-not as the definitive solution, but as proof-of-concept demonstrations showing one possible approach. [6]",
   "v05_identity_sentence_md": "**NLWeb** (NLWeb Specification v0.55) defines a standardized interface for natural language interactions with agents. It abstracts the complexity of agentic interactions, such as tool use, long-running tasks, and rich structured data, into a unified protocol. [1] The project was conceived and developed by R.V. Guha, creator of RSS, RDF, and Schema.org, CVP and Technical Fellow at Microsoft, along with contributors from Microsoft and the open-source community. [2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Act](/category/act/) (`act`)"
    },
    {
     "label": "Form",
     "value_md": "Endpoint (`endpoint`)"
    },
    {
     "label": "Originated by",
     "value_md": "R.V. Guha (Microsoft CVP & Technical Fellow; creator of RSS, RDF, Schema.org) and Microsoft (19 May 2025; repo created 28 April 2025) [2][7][8]"
    },
    {
     "label": "Governed by",
     "value_md": "`nlweb-ai` GitHub org (July 2025) and W3C NLWeb Community Group (20 October 2025; no chairs); Microsoft retains copyright and `NLWebSup@microsoft.com` [3][4][6]"
    },
    {
     "label": "Track",
     "value_md": "Open-source community draft specification (`nlweb-ai/NLWeb`) and W3C NLWeb Community Group (non-Recommendation track) [5][8]"
    },
    {
     "label": "Status",
     "value_md": "Public and open to contributions; the code is framed as a demonstration: \"NLWeb provides practical implementation code—not as the definitive solution, but as proof-of-concept demonstrations showing one possible approach.\" The latest commit on main is dated 2026-06-10. A path-traversal flaw in the reference server was reported in August 2025: \"What's worse is that it's a classic path traversal flaw, meaning it's as easy to exploit as visiting a malformed URL.\"; a later review notes \"A release note in docs/release_notes lists a fix for a \"path traversal vulnerability in static file handler\" (PR #231)\" and \"When we queried the repository's GitHub security advisories on 24 October 2026, none were published.\" [1][9][10]"
    },
    {
     "label": "Version",
     "value_md": "Spec: `NLWeb Specification v0.55` (`NLWEBSPEC.md`, `2026-03-23`, succeeding `v0.54`); Server (`nlweb-ai/NLWeb`): commit `2026-06-10` (`0` releases/tags; `/ask` and `/mcp` endpoints); PyPI `nlweb-core`: `v0.7.0` (`2026-02-19`, `v0.5`) [1][9][10]"
    },
    {
     "label": "Wire format",
     "value_md": "JSON over HTTP (`application/json`), SSE (`text/event-stream`), and JSON-RPC 2.0 (`/mcp`) with Schema.org / JSON-LD `@context` and `@type` objects [1][6][9]"
    },
    {
     "label": "Specification",
     "value_md": "[NLWeb Specification v0.55](https://raw.githubusercontent.com/nlweb-ai/website/main/NLWEBSPEC.md) · [NLWeb REST API](https://raw.githubusercontent.com/nlweb-ai/NLWeb/main/docs/nlweb-rest-api.md) · [nlweb-ai/NLWeb](https://raw.githubusercontent.com/nlweb-ai/NLWeb/main/README.md) · [W3C NLWeb CG](https://www.w3.org/community/nlweb/) [1][6][9]"
    },
    {
     "label": "Found at",
     "value_md": "No fixed `.well-known` path; routes are `/ask`, `/await`, `/mcp`, `/who`, `/sites` (`/_api/nlweb/mcp` on Wix), advertised via `/agents.md` or `/llms.txt` [1][9][11]"
    },
    {
     "label": "Licence",
     "value_md": "MIT License (`Copyright (c) Microsoft Corporation`) [4][6][8]"
    }
   ],
   "v05_problem_md": "NLWeb simplifies the process of building conversational interfaces for websites. Its straightforward implementation uses existing markup on sites with structured lists, for example products, recipes, attractions, and reviews. [6] Schema.org and related semi-structured formats like RSS, used by over 100 million websites, have become not just de facto syndication mechanisms, but also a semantic layer for the web. NLWeb leverages these to enable natural language interfaces more easily. [1][6] The primary API, tool, or skill is ask, using which a caller can ask the agent for some information or to perform a task. The request object consists of four sections: query, context, prefer, and meta. [1] Clients SHOULD use the start event to initialize their response handling. Result items may arrive out of order, and index values are not guaranteed to be sequential. [1] NLWeb is designed to be transport-protocol agnostic. [1] Authentication and authorization are handled at the transport layer and are outside the scope of the specification. Rate limiting is a transport-layer concern and is outside the scope of the specification. [1]",
   "v05_mechanism_delta_md": "The primary API, tool, or skill is ask, using which a caller can ask the agent for some information or to perform a task. The request object consists of four sections: query, context, prefer, and meta. [1] Clients SHOULD use the start event to initialize their response handling. Result items may arrive out of order, and index values are not guaranteed to be sequential. [1]",
   "v05_scope_boundary_md": "NLWeb is designed to be transport-protocol agnostic. [1] Authentication and authorization are handled at the transport layer and are outside the scope of the specification. Rate limiting is a transport-layer concern and is outside the scope of the specification. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "RSS 2.0 / Atom Syndication (RFC 4287)",
      "spec_or_rfc": "RFC 4287",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "NLWeb reuses Schema.org and RSS markup a site already publishes and answers natural-language questions with POST /ask and POST /await, rather than by a client fetching an RSS or Atom document. [1][12]"
     },
     {
      "name": "JSON-RPC 2.0 Specification",
      "spec_or_rfc": "JSON-RPC 2.0",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "NLWeb's specified HTTP binding is POST /ask and POST /await returning Schema.org JSON, and the same ask operation may also be exposed as an MCP tool, which is optional beside that HTTP binding rather than a required JSON-RPC session. [1][13]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Per NLWEBSPEC.md §2.1, NLWeb is transport-protocol agnostic and treats MCP as an optional transport and tool binding, while its direct HTTP binding uses POST /ask and POST /await returning Schema.org JSON. [1][14]"
     },
     {
      "target_id": "webmcp",
      "target_name": "WebMCP",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "NLWeb answers queries at an HTTP path the site operator publishes, while WebMCP tools appear only after the browser loads the page and script registers them. [1][15]"
     },
     {
      "target_id": "llms-txt",
      "target_name": "llms.txt",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "llms.txt is a site document a client reads, while NLWeb accepts a natural-language query at POST /ask and can return a promised result through POST /await. [1][16]"
     },
     {
      "target_id": "a2a",
      "target_name": "Agent2Agent Protocol (A2A)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "NLWeb serves a site's natural-language ask endpoint, while A2A sends tasks over JSON-RPC 2.0, gRPC, or HTTP+JSON to another agent identified by an Agent Card. [1][17]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (4 probed or cited examples; non-exhaustive).",
    "side_a": {
     "visible": true,
     "heading": "Servers, repos & skill indexes",
     "col4_header": "Transport & Scope",
     "note_md": null,
     "rows": [
      {
       "actor": "Agent Community",
       "role": "NLWeb site",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "GET `https://agentcommunity.org/ask?query=What%20is%20AID%3F` returned status 200 JSON with `query_id` and a `results` list of Schema.org `Article` items (`url`, `name`, `site`, `score`). Docs say `/ask` is extractive retrieval over published documentation and does not call an LLM.",
       "source_md": "[Agent Community /ask](https://agentcommunity.org/ask?query=What%20is%20AID%3F) [18] · [Docs](https://agentcommunity.org/docs/nlweb) [19]"
      },
      {
       "actor": "World Monitor",
       "role": "NLWeb site",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "GET `https://www.worldmonitor.app/ask?query=What%20is%20World%20Monitor%3F` returned status 200 JSON with _meta.response_type `list`, _meta.version `0.1`, `query_id`, and `results`. The agent guide says `POST https://www.worldmonitor.app/ask` supports SSE.",
       "source_md": "[World Monitor /ask](https://www.worldmonitor.app/ask?query=What%20is%20World%20Monitor%3F) [20] · [Agent guide](https://www.worldmonitor.app/agents.md) [21]"
      },
      {
       "actor": "Cloudflare (AI Search NLWeb template)",
       "role": "NLWeb site",
       "status": "Experimental",
       "status_display": "Experimental · as of 2026-07-10",
       "col4_md": "The AI Search template crawls a site, indexes it, and deploys NLWeb endpoints. Docs (updated 2026-07-10) mark it a public preview and name `/mcp` as the NLWeb MCP server endpoint for trusted agents.",
       "source_md": "[Cloudflare NLWeb](https://developers.cloudflare.com/ai-search/how-to/nlweb/index.md) [22][23]"
      },
      {
       "actor": "Wix",
       "role": "NLWeb site",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Wix documents NLWeb on hosted sites. The MCP URL pattern is `https://www.[your-domain.com]/_api/nlweb/mcp`, for an MCP-capable agent such as Claude or ChatGPT.",
       "source_md": "[Enabling NLWeb on Wix](https://support.wix.com/en/article/enabling-nlweb-for-ai-agent-access) [11]"
      }
     ]
    },
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "iab-comp",
     "target_name": "CoMP (Content Monetization Protocols)",
     "relation_label": "Complements",
     "delta": "CoMP lists NLWeb as value 4 on the Endpoint / Delivery Format list, while NLWeb defines a standardized interface for natural language interactions with agents.",
     "item_md": "**[CoMP (Content Monetization Protocols)](/protocols/iab-comp/)** (Complements) — CoMP lists NLWeb as value 4 on the Endpoint / Delivery Format list, while NLWeb defines a standardized interface for natural language interactions with agents."
    },
    {
     "item_md": "**[Act protocols](/category/act/)** — Category index for `act` standards."
    }
   ],
   "v05_compiled_md": "---\nid: nlweb\ntitle: \"NLWeb\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: act\nform: endpoint\nwire_archetype: harnesses_rpc_ui\nspec_url: https://raw.githubusercontent.com/nlweb-ai/website/main/NLWEBSPEC.md\nlast_checked: 2026-11-12\n---\n\n# NLWeb\n\n**Category:** [Act](/category/act/) (`act`) · **Form:** Endpoint (`endpoint`) · **Last checked:** 2026-11-12\n\n> *This page is about NLWeb (Natural Language Web), the open project that Microsoft announced on 2025-05-19 and R.V. Guha conceived, which gives a website a natural-language `ask` interface over its own Schema.org-shaped content and runs each instance as an MCP server. For the [Model Context Protocol (MCP)](/protocols/mcp/), the open protocol that connects AI applications to external tools and data, see that page and the [NLWeb vs MCP](/compare/nlweb-vs-mcp/) comparison. For the browser API that lets a web page offer tools to an agent, see [WebMCP](/protocols/webmcp/). NLWeb is not NL Web, a French web agency: \"L'agence Web « NL Web », c'est l'histoire d'une passion pour le monde du web. Derrière ce nom, se cache un expert en développement web et applications mobiles\". [1]*\n\n**NLWeb** (NLWeb Specification v0.55) defines a standardized interface for natural language interactions with agents. It abstracts the complexity of agentic interactions, such as tool use, long-running tasks, and rich structured data, into a unified protocol. [1] The project was conceived and developed by R.V. Guha, creator of RSS, RDF, and Schema.org, CVP and Technical Fellow at Microsoft, along with contributors from Microsoft and the open-source community. [2] NLWeb supports streaming responses via Server-Sent Events (SSE) over HTTP transport. Streaming is requested by setting prefer.streaming to true. [1] The start event is sent once at the beginning of the stream. Clients SHOULD use this event to initialize their response handling. The complete event is sent once to signal the end of the stream. Clients MUST process this event to capture session state for subsequent requests. [1] 202 Accepted is the promise response for long-running tasks. POST /await checks on or cancels a promised result. [1] The specification heading is NLWeb Specification v0.55. Changes from v0.54 to v0.55 promote streaming to its own section with formal SSE event type definitions for start, result, error, and complete. [1] The repository was migrated from microsoft/NLWeb to an independent GitHub organization at NLWeb-ai, described as a neutral space where contributors from any company or background can collaborate. The license text remains MIT License Copyright (c) Microsoft Corporation. [3][4] The NLWeb Community Group was originally proposed on 2025-10-16 by Ramanathan Guha. W3C's hosting of this group does not imply endorsement of the activities. [5] NLWeb provides practical implementation code-not as the definitive solution, but as proof-of-concept demonstrations showing one possible approach. [6]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Act](/category/act/) (`act`) |\n| **Form** | Endpoint (`endpoint`) |\n| **Originated by** | R.V. Guha (Microsoft CVP & Technical Fellow; creator of RSS, RDF, Schema.org) and Microsoft (19 May 2025; repo created 28 April 2025) [2][7][8] |\n| **Governed by** | `nlweb-ai` GitHub org (July 2025) and W3C NLWeb Community Group (20 October 2025; no chairs); Microsoft retains copyright and `NLWebSup@microsoft.com` [3][4][6] |\n| **Track** | Open-source community draft specification (`nlweb-ai/NLWeb`) and W3C NLWeb Community Group (non-Recommendation track) [5][8] |\n| **Status** | Public and open to contributions; the code is framed as a demonstration: \"NLWeb provides practical implementation code—not as the definitive solution, but as proof-of-concept demonstrations showing one possible approach.\" The latest commit on main is dated 2026-06-10. A path-traversal flaw in the reference server was reported in August 2025: \"What's worse is that it's a classic path traversal flaw, meaning it's as easy to exploit as visiting a malformed URL.\"; a later review notes \"A release note in docs/release_notes lists a fix for a \"path traversal vulnerability in static file handler\" (PR #231)\" and \"When we queried the repository's GitHub security advisories on 24 October 2026, none were published.\" [1][9][10] |\n| **Version** | Spec: `NLWeb Specification v0.55` (`NLWEBSPEC.md`, `2026-03-23`, succeeding `v0.54`); Server (`nlweb-ai/NLWeb`): commit `2026-06-10` (`0` releases/tags; `/ask` and `/mcp` endpoints); PyPI `nlweb-core`: `v0.7.0` (`2026-02-19`, `v0.5`) [1][9][10] |\n| **Wire format** | JSON over HTTP (`application/json`), SSE (`text/event-stream`), and JSON-RPC 2.0 (`/mcp`) with Schema.org / JSON-LD `@context` and `@type` objects [1][6][9] |\n| **Specification** | [NLWeb Specification v0.55](https://raw.githubusercontent.com/nlweb-ai/website/main/NLWEBSPEC.md) · [NLWeb REST API](https://raw.githubusercontent.com/nlweb-ai/NLWeb/main/docs/nlweb-rest-api.md) · [nlweb-ai/NLWeb](https://raw.githubusercontent.com/nlweb-ai/NLWeb/main/README.md) · [W3C NLWeb CG](https://www.w3.org/community/nlweb/) [1][6][9] |\n| **Found at** | No fixed `.well-known` path; routes are `/ask`, `/await`, `/mcp`, `/who`, `/sites` (`/_api/nlweb/mcp` on Wix), advertised via `/agents.md` or `/llms.txt` [1][9][11] |\n| **Licence** | MIT License (`Copyright (c) Microsoft Corporation`) [4][6][8] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [Adoption and ecosystem](#adoption-and-ecosystem)\n4. [See also](#see-also)\n5. [References](#references)\n\n---\n\n## Problem and scope\n\nNLWeb simplifies the process of building conversational interfaces for websites. Its straightforward implementation uses existing markup on sites with structured lists, for example products, recipes, attractions, and reviews. [6] Schema.org and related semi-structured formats like RSS, used by over 100 million websites, have become not just de facto syndication mechanisms, but also a semantic layer for the web. NLWeb leverages these to enable natural language interfaces more easily. [1][6] The primary API, tool, or skill is ask, using which a caller can ask the agent for some information or to perform a task. The request object consists of four sections: query, context, prefer, and meta. [1] Clients SHOULD use the start event to initialize their response handling. Result items may arrive out of order, and index values are not guaranteed to be sequential. [1] NLWeb is designed to be transport-protocol agnostic. [1] Authentication and authorization are handled at the transport layer and are outside the scope of the specification. Rate limiting is a transport-layer concern and is outside the scope of the specification. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **RSS 2.0 / Atom Syndication (RFC 4287)** | `RFC 4287` | Analogous to classic standard | NLWeb reuses Schema.org and RSS markup a site already publishes and answers natural-language questions with POST /ask and POST /await, rather than by a client fetching an RSS or Atom document. [1][12] |\n| **JSON-RPC 2.0 Specification** | `JSON-RPC 2.0` | Analogous to classic standard | NLWeb's specified HTTP binding is POST /ask and POST /await returning Schema.org JSON, and the same ask operation may also be exposed as an MCP tool, which is optional beside that HTTP binding rather than a required JSON-RPC session. [1][13] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | Per NLWEBSPEC.md §2.1, NLWeb is transport-protocol agnostic and treats MCP as an optional transport and tool binding, while its direct HTTP binding uses POST /ask and POST /await returning Schema.org JSON. [1][14] |\n| **[WebMCP](/protocols/webmcp/)** | Peer alternative | NLWeb answers queries at an HTTP path the site operator publishes, while WebMCP tools appear only after the browser loads the page and script registers them. [1][15] |\n| **[llms.txt](/protocols/llms-txt/)** | Complements | llms.txt is a site document a client reads, while NLWeb accepts a natural-language query at POST /ask and can return a promised result through POST /await. [1][16] |\n| **[Agent2Agent Protocol (A2A)](/protocols/a2a/)** | Complements | NLWeb serves a site's natural-language ask endpoint, while A2A sends tasks over JSON-RPC 2.0, gRPC, or HTTP+JSON to another agent identified by an Agent Card. [1][17] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (4 probed or cited examples; non-exhaustive).*\n\n### Servers, repos & skill indexes\n\n| Actor | Role | Status | Transport & Scope | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Agent Community** | NLWeb site | Live (HTTP 200) · checked 2026-10-30 | GET `https://agentcommunity.org/ask?query=What%20is%20AID%3F` returned status 200 JSON with `query_id` and a `results` list of Schema.org `Article` items (`url`, `name`, `site`, `score`). Docs say `/ask` is extractive retrieval over published documentation and does not call an LLM. | [Agent Community /ask](https://agentcommunity.org/ask?query=What%20is%20AID%3F) [18] · [Docs](https://agentcommunity.org/docs/nlweb) [19] |\n| **World Monitor** | NLWeb site | Live (HTTP 200) · checked 2026-10-30 | GET `https://www.worldmonitor.app/ask?query=What%20is%20World%20Monitor%3F` returned status 200 JSON with _meta.response_type `list`, _meta.version `0.1`, `query_id`, and `results`. The agent guide says `POST https://www.worldmonitor.app/ask` supports SSE. | [World Monitor /ask](https://www.worldmonitor.app/ask?query=What%20is%20World%20Monitor%3F) [20] · [Agent guide](https://www.worldmonitor.app/agents.md) [21] |\n| **Cloudflare (AI Search NLWeb template)** | NLWeb site | Experimental · as of 2026-07-10 | The AI Search template crawls a site, indexes it, and deploys NLWeb endpoints. Docs (updated 2026-07-10) mark it a public preview and name `/mcp` as the NLWeb MCP server endpoint for trusted agents. | [Cloudflare NLWeb](https://developers.cloudflare.com/ai-search/how-to/nlweb/index.md) [22][23] |\n| **Wix** | NLWeb site | Supported · checked 2026-10-30 | Wix documents NLWeb on hosted sites. The MCP URL pattern is `https://www.[your-domain.com]/_api/nlweb/mcp`, for an MCP-capable agent such as Claude or ChatGPT. | [Enabling NLWeb on Wix](https://support.wix.com/en/article/enabling-nlweb-for-ai-agent-access) [11] |\n\n---\n\n## See also\n\n- **[CoMP (Content Monetization Protocols)](/protocols/iab-comp/)** *(Complements)* — CoMP lists NLWeb as value 4 on the Endpoint / Delivery Format list, while NLWeb defines a standardized interface for natural language interactions with agents.\n- **Category:** [Act protocols](/category/act/)\n\n---\n\n## References\n\n1. nlweb-ai/website (GitHub), *NLWeb Specification v0.55 (nlweb-ai/website NLWEBSPEC.md)* (checked 2026-10-30) — <https://raw.githubusercontent.com/nlweb-ai/website/main/NLWEBSPEC.md>\n2. Microsoft, *Microsoft News: Introducing NLWeb* (checked 2026-10-30) — <https://news.microsoft.com/source/features/company-news/introducing-nlweb-bringing-conversational-interfaces-directly-to-the-web/>\n3. nlweb ai, *NLWeb Wiki: Repository Migration Notice* (checked 2026-10-30) — <https://github.com/nlweb-ai/NLWeb/wiki/We've-moved-to-our-new-home!>\n4. nlweb-ai/NLWeb (GitHub), *nlweb-ai/NLWeb MIT License* (checked 2026-10-30) — <https://raw.githubusercontent.com/nlweb-ai/NLWeb/main/LICENSE>\n5. W3C, *W3C NLWeb Community Group* (checked 2026-10-30) — <https://www.w3.org/community/nlweb/>\n6. nlweb-ai/NLWeb (GitHub), *nlweb-ai/NLWeb README.md* (checked 2026-10-30) — <https://raw.githubusercontent.com/nlweb-ai/NLWeb/main/README.md>\n7. Microsoft, *Microsoft Build 2025: Building the Open Agentic Web* (checked 2026-10-30) — <https://blogs.microsoft.com/blog/2025/05/19/microsoft-build-2025-the-age-of-ai-agents-and-building-the-open-agentic-web/>\n8. nlweb-ai/NLWeb (GitHub), *GitHub Repository Metadata: nlweb-ai/NLWeb* (checked 2026-10-30) — <https://github.com/nlweb-ai/NLWeb>\n9. nlweb-ai/NLWeb (GitHub), *NLWeb REST API Documentation (nlweb-rest-api.md)* (checked 2026-10-30) — <https://raw.githubusercontent.com/nlweb-ai/NLWeb/main/docs/nlweb-rest-api.md>\n10. Safeguard, *Safeguard: NLWeb Explained and Security Analysis* (checked 2026-10-30) — <https://www.safeguard.sh/resources/blog/nlweb-explained-natural-language-endpoints-for-websites-mcp-and-how-to-secure-them>\n11. Wix, *Wix Help Center: Enabling NLWeb for AI Agent Access* (checked 2026-10-30) — <https://support.wix.com/en/article/enabling-nlweb-for-ai-agent-access>\n12. M. Nottingham, Ed. and R. Sayre, Ed., *RFC 4287: The Atom Syndication Format* (December 2005) — <https://www.rfc-editor.org/rfc/rfc4287.html>\n13. JSON-RPC Working Group, *JSON-RPC 2.0 Specification* (2013-01-04) — <https://www.jsonrpc.org/specification>\n14. Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation* (2026-07-28) — <https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning>\n15. Web Machine Learning Community Group (editors Brandon Walderman, Khushal Sagar, Dominic Farolino, and Samuel Dallstream), *WebMCP* (Draft Community Group Report, 11 November 2026) — <https://webmachinelearning.github.io/webmcp/>\n16. Jeremy Howard, *The /llms.txt file, v2* (published 2024-09-03; modified 2026-08-10; HTTP last-modified 2026-09-24) — <https://llmstxt.org>\n17. Agentic AI Foundation, *A2A joins AAIF's open agentic stack* (published 2026-08-17; modified 2026-09-24) — <https://aaif.io/blog/a2a-joins-aaif>\n18. Agent Community, *Agent Community Live NLWeb /ask Endpoint* (checked 2026-10-30) — <https://agentcommunity.org/ask?query=What%20is%20AID%3F>\n19. Agent Community, *Agent Community NLWeb Integration Documentation* (checked 2026-10-30) — <https://agentcommunity.org/docs/nlweb>\n20. World Monitor, *World Monitor Live NLWeb /ask Endpoint* (checked 2026-10-30) — <https://www.worldmonitor.app/ask?query=What%20is%20World%20Monitor%3F>\n21. World Monitor, *World Monitor agents.md* (checked 2026-10-30) — <https://www.worldmonitor.app/agents.md>\n22. Cloudflare, *Cloudflare AI Search: NLWeb Guide* (checked 2026-10-30) — <https://developers.cloudflare.com/ai-search/how-to/nlweb/index.md>\n23. Cloudflare, *Cloudflare Blog: Conversational Search with NLWeb and AutoRAG* (checked 2026-10-30) — <https://blog.cloudflare.com/conversational-search-with-nlweb-and-autorag/>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "",
   "adoption": {
    "level": "observed",
    "by": "Cloudflare, Vercel, Stripe, Claude Code, Claude.ai and Claude Desktop, Claude API, Cursor, GitHub Copilot in VS Code, and 11 other verified implementations",
    "probe_run": null
   },
   "aliases": [
    "Agent Skills",
    "SKILL.md"
   ],
   "analog": "Package README / plugin manifest",
   "collisions": [
    "MCP \"Skills over MCP\" working group (a related but distinct proposal for discovering skills through MCP itself)"
   ],
   "discovery": {
    "mechanism": "Local skills directory or well-known index",
    "path": "In an agent's skills folder, one subfolder per skill holding its SKILL.md: for example ~/.claude/skills/<skill-name>/SKILL.md in Claude Code and ~/.agents/skills/<name>/SKILL.md in goose; VS Code also reads ~/.copilot/skills/. On the web, the Cloudflare draft RFC (not part of the agentskills.io specification) puts an index at /.well-known/agent-skills/index.json; earlier drafts used /.well-known/skills/. The draft asks to register agent-skills as a well-known URI suffix; no documentation was found showing that agent-skills is in the IANA Well-Known URIs registry (checked 2026-10-28)"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://agentskills.io/home",
     "claim": "Agent Skills, *Agent Skills Overview*, checked 2026-10-30",
     "date": null,
     "quote": "The Agent Skills format was originally developed by Anthropic, released as an open standard, and has been adopted by a growing number of agent products. / Agent Skills are a lightweight, open format for extending AI agent capabilities with specialized knowledge and workflows. / Skills solve this by packaging procedural knowledge and company-, team-, and user-specific context into portable, version-controlled folders that agents load on demand. / Agents are increasingly capable, but often don't have the context they need to do real work reliably. / Agents load skills through progressive disclosure, in three stages: / Discovery: At startup, agents load only the name and description of each available skill, just enough to know when it might be relevant. / Activation: When a task matches a skill's description, the agent reads the full SKILL.md instructions into context. / Execution: The agent follows the instructions, optionally executing bundled code or loading referenced files as needed. / At its core, a skill is a folder containing a SKILL.md file. / portable, version-controlled folders that agents load on demand. / name:OpenCode,description:OpenCode is an open source agent that helps you write code in your terminal, IDE, or desktop. / url:https://opencode.ai/ / instructionsUrl:https://opencode.ai/docs/skills/",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://agentskills.io/specification",
     "claim": "Agent Skills, *Specification - Agent Skills*, checked 2026-10-30",
     "date": null,
     "quote": "A skill is a directory containing, at minimum, a SKILL.md file / The SKILL.md file must contain YAML frontmatter followed by Markdown content. / Must match the parent directory name / description Yes Max 1024 characters. Non-empty. Describes what the skill does and when to use it. / license No License name or reference to a bundled license file. / compatibility No Max 500 characters. Indicates environment requirements (intended product, system packages, network access, etc.). / metadata No Arbitrary key-value mapping for additional metadata (a map from string keys to string values). / allowed-tools No Space-separated string of pre-approved tools the skill may use. (Experimental) / scripts/ # Optional: executable code / references/ # Optional: documentation / assets/ # Optional: templates, resources / Use the skills-ref reference library to validate your skills / The complete format specification for Agent Skills. / name Yes Max 64 characters. Lowercase letters, numbers, and hyphens only. Must not start or end with a hyphen. / Experimental. Support for this field may vary between agent implementations / Agents load skills *progressively*, pulling in more detail only as a task calls for it. / **Metadata** (~100 tokens): The `name` and `description` fields are loaded at startup for all skills / **Instructions** (< 5000 tokens recommended): The full `SKILL.md` body is loaded when the skill is activated / **Resources** (as needed): Files (e.g. those in `scripts/`, `references/`, or `assets/`) are loaded only when required / Agents load skills progressively, pulling in more detail only as a task calls for it. / Must be 1-64 characters / May only contain unicode lowercase alphanumeric characters (a-z, 0-9) and hyphens (-) / Must not contain consecutive hyphens (--) / name: pdf-processing name: data-analysis name: code-review / name: PDF-Processing # uppercase not allowed / name: -pdf # cannot start with hyphen / name: pdf--processing # consecutive hyphens not allowed / Max 64 characters. Lowercase letters, numbers, and hyphens only. Must not start or end with a hyphen. / Agents load these on demand, so smaller files mean less use of context. / Images (diagrams, examples) Data files (lookup tables, schemas) / Supported languages depend on the agent implementation. Common options include Python, Bash, and JavaScript. / Metadata (~100 tokens): The name and description fields are loaded at startup for all skills / Instructions (< 5000 tokens recommended): The full SKILL.md body is loaded when the skill is activated / Keep your main SKILL.md under 500 lines. Move detailed reference material to separate files. / Resources (as needed): Files (e.g. those in scripts/, references/, or assets/) are loaded only when required / Space-separated string of pre-approved tools the skill may use. (Experimental) / The name and description fields are loaded at startup for all skills / The full SKILL.md body is loaded when the skill is activated",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://agents.md/",
     "claim": "AGENTS.md contributors (OpenAI Codex, Amp, Jules from Google, Cursor, and Factory), *AGENTS.md*, checked 2026-10-30",
     "date": null,
     "quote": "Agents automatically read the nearest file in the directory tree / Are there required fields? No. AGENTS.md is just standard Markdown. / The closest AGENTS.md to the edited file wins",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28",
     "claim": "Model Context Protocol, *Specification*, version 2026-07-28",
     "date": null,
     "quote": "Model Context Protocol  (MCP) is an open protocol that enables seamless integration between LLM applications and external data sources and tools. / Model Context Protocol  (MCP) is an open protocol that / The protocol uses  JSON-RPC  2.0 messages to establish / Hosts : LLM applications that initiate connections / Clients : Connectors within the host application / Servers : Services that provide context and capabilities / Servers offer any of the following features to clients: / Resources : Context and data, for the user or the AI model to use / Prompts : Templated messages and workflows for users / Tools : Functions for the AI model to execute / \"title\":\"stdio\" / \"title\":\"Streamable HTTP\"",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://modelcontextprotocol.io/community/working-groups/skills-over-mcp",
     "claim": "Model Context Protocol, *Skills Over MCP Charter*, SEP-2640 Final, merged 2026-09-13; checked 2026-10-30",
     "date": null,
     "quote": "The WG maintains the official Skills extension (io.modelcontextprotocol/skills) in modelcontextprotocol/ext-skills. / SEP-2640 is Final, merged on September 13, 2026. / SEP-2640 - Skills Extension is Final. / Current work focuses on implementation support, interoperability, and evolution of the published extension.",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://github.com/cloudflare/agent-skills-discovery-rfc",
     "claim": "Cloudflare, *Agent Skills Discovery via Well-Known URIs*, draft 0.2.0, published 2026-01-17; updated 2026-03-12",
     "date": null,
     "quote": "This document defines a mechanism for discovering [Agent Skills](https://agentskills.io/) using the `.well-known` URI path prefix / /.well-known/agent-skills/index.json / <strong>Version</strong>: 0.2.0 / Updated Date: 2026-03-12 / **Status**: Draft / **Version**: 0.2.0 / **Updated Date**: 2026-03-12 / Published Date: 2026-01-17 / # Agent Skills Discovery via Well-Known URIs / rename well-known URI from `/.well-known/skills/` to `/.well-known/agent-skills/` / Register `agent-skills` as a well-known URI suffix. / clients SHALL NOT execute scripts by default / digest is now the SHA-256 of the single artifact / \"skill-md\" or \"archive\" / Clients MUST verify artifact digests after download / Clients SHALL NOT execute files under scripts/ by default / The v0.2.0 index format is not backward-compatible with v0.1.0. Key differences: v0.1.0 used files as an array of path strings with no digests. v0.2.0 removes files entirely, adds type, url, digest, and $schema. Clients MUST check the $schema field to determine how to process the index. / Prompt injection: Skill content is loaded directly into agent context. A malicious SKILL.md can inject instructions that alter agent behavior",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://agenticresourcediscovery.org/spec/",
     "claim": "Junjie Bu (Google), R.V. Guha, and Shaun Smith (Hugging Face), *ARD Specification*, v0.91, 2026-08-26",
     "date": null,
     "quote": "LLMs increasingly rely on external capabilities - MCP tools, A2A agents, skills, and other callable services",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://code.claude.com/docs/en/skills",
     "claim": "Anthropic, *Extend Claude with skills*, checked 2026-10-30",
     "date": null,
     "quote": "Unlike CLAUDE.md content, a skill's body loads only when it's used, so long reference material costs almost nothing until you need it. / Unexpected key(s) in SKILL.md frontmatter: argument-hint. Allowed properties are: allowed-tools, compatibility, description, license, metadata, name / Claude Code-only body features, such as dynamic context injection, don't function in claude.ai chat or through the API. / Claude Code skills follow the Agent Skills open standard, which works across multiple AI tools. Claude Code extends the standard with additional features like invocation control, subagent execution, and dynamic context injection. / ~/.claude/skills/<skill-name>/SKILL.md / a skill's body loads only when it's used / Manage them from Customize in the Desktop app sidebar or from the skills settings on claude.ai. / Claude.ai skill uploads, the Skills API, and packaging with package_skill.py from anthropics/skills",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://geminicli.com/docs/cli/skills/",
     "claim": "Gemini CLI, *Agent Skills*, checked 2026-10-30",
     "date": null,
     "quote": "Unlike general context files (GEMINI.md), which provide persistent workspace-wide background, Skills represent on-demand expertise. / Based on the Agent Skills open standard, a \"skill\" is a self-contained directory that packages instructions and assets into a discoverable capability. / when Gemini identifies a task matching a skill's description, it calls the activate_skill tool. / The SKILL.md body and folder structure is added to the conversation history. / Within the same tier (user or workspace), the .agents/skills/ alias takes precedence over the .gemini/skills/ directory. / Located in ~/.gemini/skills/ or the ~/.agents/skills/ alias. / injects the name and description of all enabled skills into the system prompt.",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://www.anthropic.com/news/donating-agent-skills-to-the-agentic-ai-foundation",
     "claim": "Anthropic, *Donating Agent Skills to the Agentic AI Foundation*, published 2026-10-22",
     "date": null,
     "quote": "We developed skills while working on Claude Code. / Today, we're donating Agent Skills, the open standard that gives AI agents specialized knowledge and workflows, to the Agentic AI Foundation (AAIF). / to the Agentic AI Foundation (AAIF) under the Linux Foundation / \"datePublished\":\"2026-10-22T00:00:00.000Z\" / with David Soria Parra and Mahesh Murag as Lead Maintainers. / We are donating the Agent Skills name and logo, the GitHub organization, and the agentskills.io domain. / Engineers from Anthropic, Google, OpenAI, and other companies will maintain the standard as individuals / We've proposed starting with a roadmap covering versioned releases, a formal proposal process, and security guidance for people who write and install skills. / wrote loaders for Codex, Cursor, and OpenCode / and the agentskills.io domain. / More than 70 agent platforms, including ChatGPT, Cursor, GitHub Copilot, and VS Code, have integrated Agent Skills since we published the standard in December 2025. / So far, 1 million skills have been published and nearly 280 million installed.",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://claude.com/resources/articles/skills",
     "claim": "Anthropic, *Introducing Agent Skills*, published 2025-10-16; update dated 2025-12-18",
     "date": null,
     "quote": "Now, you can build your own skills and use them across Claude apps, Claude Code, and our API. / \"datePublished\":\"2025-10-16\" / published Agent Skills as an open standard for cross-platform portability. (December 18, 2025) / use them across Claude apps, Claude Code, and our API / can now be added to Messages API requests and the new /v1/skills endpoint gives developers programmatic control over custom skill versioning and management. / Skills require the Code Execution Tool beta",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://claude.com/resources/articles/organization-skills-and-directory",
     "claim": "Anthropic, *Skills for organizations, partners, the ecosystem*, published 2025-12-18",
     "date": null,
     "quote": "We're also publishing Agent Skills as an open standard. / \"datePublished\":\"2025-12-18\" / Claude Team and Enterprise plan admins can now provision skills centrally from admin settings. / A growing collection of partner-built skills is now available at claude.com/connectors.",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://aaif.io/blog/agent-skills-sharing-team-expertise-across-ai-agents",
     "claim": "Angie Jones (Agentic AI Foundation), *Agent Skills: Open Standard for Sharing AI Agent Workflows*, published 2026-10-22",
     "date": null,
     "quote": "Bringing the project to AAIF will ensure neutral governance from a multi-company Technical Steering Committee that will guide its future. / The specification is open source under Apache 2.0 and CC BY 4.0 / Agentic AI Foundation (AAIF), a Linux Foundation project / In only seven months, a million skills have been listed on the popular skills.sh registry, and these skills have been installed nearly 280 million times.",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://github.com/agentskills/agentskills",
     "claim": "agentskills, *Specification and documentation for Agent Skills*, repository created 2025-12-16; checked 2026-10-30",
     "date": null,
     "quote": "\"createdAt\":\"2025-12-16T15:47:19.000Z\" / \"spdxId\":\"Apache-2.0\",\"name\":\"Apache License 2.0\"",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://raw.githubusercontent.com/agentskills/agentskills/main/GOVERNANCE.md",
     "claim": "Agent Skills project, *Agent Skills Governance*, Adopted November 4, 2026",
     "date": null,
     "quote": "Releases of the specification will be tagged and will carry a changelog, so that implementers can declare and test against a specific version. / Membership in technical governance is for individuals, not companies.",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://raw.githubusercontent.com/agentskills/agentskills/main/MAINTAINERS.md",
     "claim": "Agent Skills project, *Agent Skills Maintainers*, Last updated November 4, 2026",
     "date": null,
     "quote": "This document lists the current role holders in the Agent Skills project. Roles and the way people are appointed to them are described in GOVERNANCE.md. Membership belongs to the individual, not the employer. / Not yet designated.",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://www.linuxfoundation.org/press/agentic-ai-foundation-announces-four-new-projects-agent-skills-open-responses-openenv-and-opensandbox",
     "claim": "The Linux Foundation, *Agentic AI Foundation Announces Four New Projects: Agent Skills, Open Responses, OpenEnv, and OpenSandbox*, published 2026-10-22; modified 2026-10-23",
     "date": null,
     "quote": "AAIF announced four new projects: Agent Skills, contributed by Anthropic; / SAN JOSE, Oct. 22, 2026",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://code.visualstudio.com/docs/agent-customization/agent-skills",
     "claim": "Visual Studio Code, *Use Agent Skills in VS Code*, checked 2026-10-30",
     "date": null,
     "quote": "~/.copilot/skills/, ~/.claude/skills/, ~/.agents/skills/ / Agent Skills is an open standard that works across multiple AI agents, including GitHub Copilot in VS Code, GitHub Copilot CLI, the GitHub Copilot app, and the experimental OpenAI Codex integration. / Skills you create are portable across skills-compatible agents, but supported locations and optional features vary by agent.",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://docs.stripe.com/.well-known/skills/index.json",
     "claim": "Stripe, *skills discovery index*, checked 2026-10-30",
     "date": null,
     "quote": "x-location: https://docs.stripe.com/.well-known/skills/index.json / \"name\":\"connect-recommend\" / \"files\":[\"SKILL.md\",\"references/account-types.md\" / \"name\":\"upgrade-stripe\" / content-type: application/json / x-content-timestamp: 2026-10-30T19:35:23Z",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://www.iana.org/assignments/well-known-uris/well-known-uris-1.csv",
     "claim": "IANA, *Well-Known URIs*, registry CSV, fetched 2026-10-30",
     "date": null,
     "quote": "URI Suffix,Reference,Status,Change Controller,Related Information,Date Registered,Date Modified",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://learn.chatgpt.com/docs/build-skills",
     "claim": "OpenAI, *Build skills*, checked 2026-10-30",
     "date": null,
     "quote": "openai.yaml Optional: appearance and dependencies / Add agents/openai.yaml to configure UI metadata / Skills build on the open agent skills standard. / ChatGPT and Codex start with each skill's name and description, then load the full SKILL.md instructions when they decide to use that skill. / Use skills.max_context_tokens to set a different budget, up to 10,000 tokens. / /etc/codex/skills / Codex CLI / $CWD/.agents/skills / $REPO_ROOT/.agents/skills / $HOME/.agents/skills",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://www.ietf.org/archive/id/draft-mp-agntcy-ads-03.txt",
     "claim": "L. Muscariello and R. Polic (Cisco), *Agent Directory Service (draft-mp-agntcy-ads-03)*, 2 November 2026",
     "date": null,
     "quote": "The system leverages the Open Agentic Schema Framework (OASF) to model agent information in a structured, extensible format. / Agent Directory Service / discovery of agent applications with specific skills for solving various problems. / OASF enables rich queries such as \"What agents can solve problem A?\" or \"What combination of skills and costs optimizes for task B?\"",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://developers.cloudflare.com/.well-known/agent-skills/index.json",
     "claim": "Cloudflare, *agent-skills discovery index*, checked 2026-10-30",
     "date": null,
     "quote": "content-type: application/json / \"$schema\": \"https://schemas.agentskills.io/discovery/0.2.0/schema.json\" / \"name\": \"agents-sdk\", \"type\": \"archive\" / \"name\": \"wrangler\", \"type\": \"archive\" / \"name\": \"durable-objects\" / \"name\": \"wrangler\" / \"url\": \"/.well-known/agent-skills/agents-sdk.tar.gz\", \"digest\": \"sha256:5eed25d32f6c889305f93448af1ff62a5dd7802995d55f1c1eced7de569c9d8a\" / \"name\": \"basin\", \"type\": \"archive\" / \"name\": \"agents-sdk\"",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://vercel.com/.well-known/agent-skills/index.json",
     "claim": "Vercel, *agent-skills discovery index*, checked 2026-10-30",
     "date": null,
     "quote": "\"$schema\":\"https://schemas.agentskills.io/discovery/0.2.0/schema.json\" / \"name\":\"deploy-to-vercel\" / \"type\":\"skill-md\",\"url\":\"https://github.com/vercel-labs/agent-skills/releases/download/ / \"type\":\"skill-md\" / \"type\":\"archive\" / content-type: application/json / \"digest\":\"sha256:418ca2a60d35c551e6cb645f4e82c1b704a8335486ffe74b1b3d0617a17504e5\" / \"name\":\"vercel-cli-with-tokens\" / \"name\":\"writing-guidelines\" / x-matched-path: /.well-known/agent-skills/index.json",
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://schema.oasf.outshift.com/",
     "claim": "Cisco, *Open Agentic Schema Framework*, copyright 2025; versions 0.8.0, 1.0.0, and 1.1.0 shown; checked 2026-10-31",
     "date": null,
     "quote": "Open Agentic Schema Framework 0.8.0 1.0.0 1.1.0 / Classes Skills Domains Modules / Taxonomy view Language Processing [1] Language Understanding [101] / Open Agentic Schema Framework / 0.8.0 1.0.0 1.1.0",
     "ref": 25
    },
    {
     "label": "[26]",
     "url": "https://www.anthropic.com/research/equipping-agents-for-the-real-world-with-agent-skills",
     "claim": "Anthropic, *Equipping agents for the real world with Agent Skills*, published 2025-10-16; modified 2026-10-18",
     "date": null,
     "quote": "malicious skills may introduce vulnerabilities in the environment where they're used or direct Claude to exfiltrate data and take unintended actions. We recommend installing skills only from trusted sources",
     "ref": 26
    },
    {
     "label": "[27]",
     "url": "https://llmstxt.org",
     "claim": "Jeremy Howard, *The /llms.txt file, v2*, published 2024-09-03; modified 2026-08-10",
     "date": null,
     "quote": "We propose adding a /llms.txt markdown file to websites to provide LLM-friendly content. The file can be placed at the site root, or at any path within it, covering the pages under that path. This file offers brief background information, guidance, and links to detailed markdown files.",
     "ref": 27
    },
    {
     "label": "[28]",
     "url": "https://cursor.com/changelog/2-4",
     "claim": "Cursor, *Subagents, Skills, and Image Generation*, 2.4, 2026-01-22",
     "date": null,
     "quote": "2026-01-22T00:00:00.000Z / Cursor now supports Agent Skills in the editor and CLI. / 2.4 Jan 22, 2026",
     "ref": 28
    },
    {
     "label": "[29]",
     "url": "https://cursor.com/docs/skills",
     "claim": "Cursor, *Agent Skills*, checked 2026-10-30",
     "date": null,
     "quote": "Each skill should be a folder containing a SKILL.md file / For compatibility, Cursor also loads skills from Claude and Codex directories: .claude/skills/, .codex/skills/, ~/.claude/skills/, and ~/.codex/skills/. / Cursor does not copy ~/.agents/skills/ or unsynced local skills to cloud agents, Agents window remote SSH sessions, or self-hosted workers. / .cursor/skills/ / ~/.cursor/skills/ / scripts/ / references/ / assets/",
     "ref": 29
    },
    {
     "label": "[30]",
     "url": "https://github.blog/changelog/2025-12-18-github-copilot-now-supports-agent-skills/",
     "claim": "Allison (GitHub), *GitHub Copilot now supports Agent Skills*, published 2025-12-18",
     "date": null,
     "quote": "\"datePublished\":\"2025-12-18T09:26:18-08:00\" / They work across Copilot coding agent, Copilot CLI, and agent mode in Visual Studio Code Insiders.",
     "ref": 30
    },
    {
     "label": "[31]",
     "url": "https://geminicli.com/docs/changelogs/",
     "claim": "Gemini CLI, *Gemini CLI release notes*, v0.23.0, 2026-01-07",
     "date": null,
     "quote": "Experimental Agent Skills Support in Preview: Gemini CLI now supports Agent Skills in our preview builds. / enabled agent skills by default / v0.23.0 - 2026-01-07 / v0.26.0 - 2026-01-27 Announcements: v0.25.0",
     "ref": 31
    },
    {
     "label": "[32]",
     "url": "https://goose-docs.ai/docs/guides/context-engineering/using-skills/",
     "claim": "goose, *Agent Skills*, checked 2026-10-30",
     "date": null,
     "quote": "Place a SKILL.md file inside a named subdirectory. / a global skill called code-review goes in ~/.agents/skills/code-review/SKILL.md / goose also discovers skills from .goose/skills/, .claude/skills/, ~/.claude/skills/ / name and description",
     "ref": 32
    },
    {
     "label": "[33]",
     "url": "https://ampcode.com/news/agent-skills",
     "claim": "Amp, *Agent Skills*, published 2025-12-10",
     "date": null,
     "quote": "\"datePublished\":\"2025-12-10T00:00:00.000Z\" / Amp supports agent skills. Skills let the agent lazily-load specific instructions on how to use local tools. / Skills are installed to .agents/skills/ in your workspace by default. Amp also reads from ~/.config/agents/skills/ for user-level skills, and .claude/skills/ and ~/.claude/skills/ for compatibility with existing skills. / Agent Sandbox: Isolated execution environment / BigQuery: Expert use of the bq cli tool / Tmux: Run servers and long-running tasks",
     "ref": 33
    },
    {
     "label": "[34]",
     "url": "https://guildskills.com/",
     "claim": "GuildSkills, *GuildSkills cross-agent skills registry*, checked 2026-11-06",
     "date": null,
     "quote": "195,000+ SKILL.md files compatible with Hermes Agent, Cursor, OpenAI Codex, Gemini CLI, OpenCode, Goose, Letta, Roo Code, Claude Code, and 30+ more AI agent clients.",
     "ref": 34
    },
    {
     "label": "[35]",
     "url": "https://agentskill.sh/",
     "claim": "AgentSkill Directory, *AI Agent Skills Directory*, checked 2026-11-06",
     "date": null,
     "quote": "275,000+ skills for Claude Code, Cursor, Copilot, Windsurf, Zed, and 20+ AI tools / Find and install 275,000+ skills for Claude Code, Cursor, Copilot, Windsurf, Zed, and 20+ AI tools",
     "ref": 35
    },
    {
     "label": "[36]",
     "url": "https://github.com/anthropics/skills",
     "claim": "Anthropic, *anthropics/skills*, checked 2026-10-30",
     "date": null,
     "quote": "Public repository for Agent Skills / Each skill is self-contained in its own folder with a SKILL.md file containing the instructions and metadata that Claude uses. / skills/docx / skills/pdf / skills/pptx / skills/xlsx / ./spec: The Agent Skills specification / ./template: Skill template / /plugin marketplace add anthropics/skills",
     "ref": 36
    },
    {
     "label": "[37]",
     "url": "https://github.com/huggingface/skills",
     "claim": "Hugging Face, *huggingface/skills*, checked 2026-10-30",
     "date": null,
     "quote": "Give your agents the power of the Hugging Face ecosystem / Each folder includes a SKILL.md file with YAML frontmatter (name and description) / hf-cli / gemini-extension.json / agentsmd/AGENTS.md / GitHub - huggingface/skills: Give your agents the power of the Hugging Face ecosystem / .claude-plugin/marketplace.json and .cursor-plugin/marketplace.json / installed on demand with hf skills add",
     "ref": 37
    },
    {
     "label": "[38]",
     "url": "https://github.com/vawe-hq/awesome-agent-skills-directories/blob/main/README.md",
     "claim": "vawe-hq, *Awesome Agent Skills Directories*, 2026-10-29",
     "date": "2026-10-29",
     "quote": "Every row was checked on 2026-10-29. / 25,346 skills when checked / 36.5k stars when checked / feeds skills.sh / Registry with 25,346 skills when checked. / [VoltAgent/awesome-agent-skills](https://github.com/VoltAgent/awesome-agent-skills) | Awesome list of agent skills / The `npx skills` installer. It feeds skills.sh.",
     "ref": 38
    },
    {
     "label": "[39]",
     "url": "https://agenticskills.io",
     "claim": "AgenticSkills, *AgenticSkills curated skill directory*, 2026-11-06",
     "date": "2026-11-06",
     "quote": "v1.7.0 / NOV 6 2026 / 195+ / 139 MCP servers / 9 platforms / ~/.claude/skills/ / .cursor/skills/ / 195+ curated skills",
     "ref": 39
    }
   ],
   "form": "document-format",
   "governance": "Agentic AI Foundation (AAIF) under the Linux Foundation since 2026-10-22; governance charter adopted 4 November 2026 requires tagged specification releases with a changelog; technical seats belong to individuals, not employers; Lead Maintainers David Soria Parra and Mahesh Murag; Core Maintainers Aiden Cline, Nick Cooper, Colin Daymond Hanna, Harald Kirschner, and Kurtis Van Gent; TSC Representative not yet designated",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against agentskills.io and agentskills.io/specification"
    },
    {
     "date": "2026-10-22",
     "note": "Anthropic donated Agent Skills to the Linux Foundation Agentic AI Foundation (AAIF); track updated to linux-foundation"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "anthropic-agent-skills-format",
   "implementation": "multi-implementation",
   "last_verified": "2026-11-11",
   "name": "Agent Skills",
   "native_status": "Open standard (2025-12-18); AAIF project since 2026-10-22; governance adopted 4 November 2026 requires tagged specification releases with a changelog",
   "origin": {
    "org": "Anthropic",
    "date": "2025-10-16"
   },
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "living",
   "probe": {
    "method": "GET",
    "path": "/.well-known/agent-skills/index.json",
    "parse": "JSON object with $schema (https://schemas.agentskills.io/discovery/0.2.0/schema.json) and a skills[] array of entries with name, type, description, url, and digest (sha256:...); local packages validate via YAML frontmatter in {skill-name}/SKILL.md",
    "on_absent": "404 or non-JSON at /.well-known/agent-skills/index.json means the origin does not publish a web skill discovery index; local Agent Skills packages may still be distributed via repositories or local skill directories."
   },
   "question": "How can reusable, on-demand procedural instructions and bundled resources be packaged so any compatible agent can load and run them?",
   "scope": "coding-tools",
   "spec_url": "https://agentskills.io/specification",
   "step": "act",
   "summary_md": "**Agent Skills** is an open format, originated by Anthropic for Claude Code, that packages procedural instructions and resources into portable directories an AI agent loads on demand. Launched across Claude apps, Claude Code, and the API on 2025-10-16 and published as an open standard on 2025-12-18, it was donated to the Linux Foundation's Agentic AI Foundation (AAIF) on 2026-10-22 under a multi-company Technical Steering Committee with Lead Maintainers David Soria Parra and Mahesh Murag. Each skill directory contains a `SKILL.md` file with YAML frontmatter (required `name` matching the parent directory and `description`, plus optional `license`, `compatibility`, `metadata`, and experimental `allowed-tools`) and Markdown instructions, alongside optional `scripts/`, `references/`, and `assets/` subdirectories validated by `skills-ref`. Licensed under Apache 2.0 and CC BY 4.0 (`agentskills/agentskills`, created 2025-12-16). Companion specifications define `/.well-known/agent-skills/index.json` discovery (Cloudflare draft `0.2.0`, updated 2026-03-12) and the MCP extension `io.modelcontextprotocol/skills` (SEP-2640, merged September 13, 2026). A governance charter and maintainer roster adopted on 4 November 2026 require tagged, changelogged specification releases under individual-capacity governance, naming two Lead Maintainers and five Core Maintainers while leaving the TSC Representative seat undesignated.",
   "track": "linux-foundation",
   "version": {
    "label": "unversioned",
    "date": null
   },
   "watch": [
    {
     "type": "page",
     "url": "https://agentskills.io/specification",
     "selector": "main"
    },
    {
     "type": "github",
     "repo": "agentskills/agentskills",
     "mode": "tag"
    }
   ],
   "use_cases": [
    "describe-agent-capabilities",
    "expose-tools-to-agents"
   ],
   "audience": [
    "agent-builder",
    "platform"
   ],
   "pairs_with": [
    "agents-md",
    "mcp",
    "oasf",
    "llms-txt"
   ],
   "prerequisites": [],
   "hatnote_md": "This page covers Agent Skills, the open directory and `SKILL.md` packaging format originated by Anthropic and stewarded by the Agentic AI Foundation (AAIF) for loading procedural instructions and scripts on demand. It is distinct from [AGENTS.md](/protocols/agents-md/), a repository-wide Markdown instruction file loaded automatically from the directory tree, and the [Model Context Protocol](/protocols/mcp/), a JSON-RPC 2.0 client-server protocol for tools and resources (which also defines the companion `io.modelcontextprotocol/skills` extension). Web-hosted skill indexes at `/.well-known/agent-skills/index.json` are specified in a separate Cloudflare draft RFC, and multi-resource catalogs are covered under [Agentic Resource Discovery (ARD)](/protocols/ard/).",
   "tier": "flagship",
   "lifecycle_status": "active",
   "wire_archetype": "harnesses_rpc_ui",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-11",
   "v05_hatnote_html_md": "This page covers Agent Skills, the open directory and `SKILL.md` packaging format originated by Anthropic and stewarded by the Agentic AI Foundation (AAIF) for loading procedural instructions and scripts on demand. It is distinct from [AGENTS.md](/protocols/agents-md/), a repository-wide Markdown instruction file loaded automatically from the directory tree, and the [Model Context Protocol](/protocols/mcp/), a JSON-RPC 2.0 client-server protocol for tools and resources (which also defines the companion `io.modelcontextprotocol/skills` extension). Web-hosted skill indexes at `/.well-known/agent-skills/index.json` are specified in a separate Cloudflare draft RFC, and multi-resource catalogs are covered under [Agentic Resource Discovery (ARD)](/protocols/ard/). [1][2][3][4][5][6][7]",
   "v05_elevator_pitch_md": "Agent Skills is a portable directory standard that lets developers package specialized workflows, domain playbooks, and helper scripts into reusable folders that AI agents load on demand. Instead of cramming every workflow into always-on workspace files like `CLAUDE.md` or `GEMINI.md` and burning context tokens on every turn, an agent reads only the brief `name` and `description` YAML fields at startup and loads the full `SKILL.md` body and bundled `scripts/` only when a task matches. [1][8][9]",
   "v05_lead_md": "**Agent Skills** is an open format, originated by Anthropic for Claude Code, that packages procedural instructions and resources into portable directories an AI agent loads on demand. [1][10] Launched across Claude apps, Claude Code, and the API on 2025-10-16 and published as an open standard on 2025-12-18, it was donated to the Linux Foundation's Agentic AI Foundation (AAIF) on 2026-10-22 under a multi-company Technical Steering Committee with Lead Maintainers David Soria Parra and Mahesh Murag. [10][11][12][13] Each skill directory contains a `SKILL.md` file with YAML frontmatter (required `name` matching the parent directory and `description`, plus optional `license`, `compatibility`, `metadata`, and experimental `allowed-tools`) and Markdown instructions, alongside optional `scripts/`, `references/`, and `assets/` subdirectories validated by `skills-ref`. [2] Licensed under Apache 2.0 and CC BY 4.0 (`agentskills/agentskills`, created 2025-12-16). [13][14] Companion specifications define `/.well-known/agent-skills/index.json` discovery (Cloudflare draft `0.2.0`, updated 2026-03-12) and the MCP extension `io.modelcontextprotocol/skills` (SEP-2640, merged September 13, 2026). [5][6] A governance charter and maintainer roster adopted on 4 November 2026 require tagged, changelogged specification releases under individual-capacity governance, naming two Lead Maintainers and five Core Maintainers while leaving the TSC Representative seat undesignated. [15][16]",
   "v05_identity_sentence_md": "**Agent Skills** is an open format, originated by Anthropic for Claude Code, that packages procedural instructions and resources into portable directories an AI agent loads on demand. [1][10] Launched across Claude apps, Claude Code, and the API on 2025-10-16 and published as an open standard on 2025-12-18, it was donated to the Linux Foundation's Agentic AI Foundation (AAIF) on 2026-10-22 under a multi-company Technical Steering Committee with Lead Maintainers David Soria Parra and Mahesh Murag. [10][11][12][13]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Act](/category/act/) (`act`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "Anthropic; built for Claude Code, launched 2025-10-16, and published as an open standard on 2025-12-18 [10][11][12]"
    },
    {
     "label": "Governed by",
     "value_md": "AAIF under the Linux Foundation since 2026-10-22; Lead Maintainers David Soria Parra and Mahesh Murag; Core Maintainers Aiden Cline, Nick Cooper, Colin Daymond Hanna, Harald Kirschner, and Kurtis Van Gent (4 November 2026); TSC Representative not yet designated [10][13][16]"
    },
    {
     "label": "Track",
     "value_md": "Foundation / Consortium Specification (`linux-foundation`); Agentic AI Foundation project [13][17]"
    },
    {
     "label": "Status",
     "value_md": "Open standard (2025-12-18); AAIF project since 2026-10-22; governance adopted 4 November 2026 requires tagged specification releases with a changelog [12][15][17]"
    },
    {
     "label": "Version",
     "value_md": "Unversioned specification (`agentskills/agentskills`, created 2025-12-16); separate Cloudflare discovery RFC is draft `0.2.0` (published 2026-01-17, updated 2026-03-12) [2][6][14]"
    },
    {
     "label": "Message format",
     "value_md": "Skill folder with `SKILL.md` containing YAML frontmatter (`name`, `description`; optional `license`, `compatibility`, `metadata`, `allowed-tools`) and Markdown [2]"
    },
    {
     "label": "Specification",
     "value_md": "[Specification - Agent Skills](https://agentskills.io/specification); discovery draft [Agent Skills Discovery via Well-Known URIs](https://github.com/cloudflare/agent-skills-discovery-rfc) [2][6]"
    },
    {
     "label": "Found at",
     "value_md": "Local skill directories (`.agents/skills/`, `~/.claude/skills/`, `~/.copilot/skills/`); web index `/.well-known/agent-skills/index.json` (legacy `/.well-known/skills/index.json`) [2][6][18][19]"
    },
    {
     "label": "IANA registration",
     "value_md": "None in core specification; Cloudflare draft `0.2.0` proposes registering `agent-skills` as a well-known URI suffix [6][20]"
    },
    {
     "label": "Licence",
     "value_md": "Apache License 2.0 (`agentskills/agentskills`) and CC BY 4.0 for specification documentation [13][14]"
    }
   ],
   "v05_problem_md": "Agents often lack the procedural context real work requires, yet keeping long reference instructions in always-on workspace files (`CLAUDE.md` or `GEMINI.md`) consumes context-window tokens on every turn. Packaging domain and team workflows into version-controlled skill folders lets an agent leave long reference material unloaded until a task requires it. [1][8][9] Agent Skills uses three-stage progressive disclosure so agents scan only lightweight `name` and `description` frontmatter at startup, read the `SKILL.md` instruction body only when a task matches a skill's description, and load companion files from `scripts/`, `references/`, or `assets/` only during execution. [1] The specification standardizes the directory and six frontmatter fields, not one shared runtime. `allowed-tools` is experimental and support may vary between agent implementations. In Claude apps, a non-spec key such as `argument-hint` fails packaging with a hard error, while Claude Code dynamic context injection does not run in `claude.ai` chat or through the API. OpenAI Codex optionally reads an `agents/openai.yaml` file, and discovery clients SHALL NOT execute scripts by default. [2][6][8][21]",
   "v05_mechanism_delta_md": "Agent Skills uses three-stage progressive disclosure so agents scan only lightweight `name` and `description` frontmatter at startup, read the `SKILL.md` instruction body only when a task matches a skill's description, and load companion files from `scripts/`, `references/`, or `assets/` only during execution. [1]",
   "v05_scope_boundary_md": "The specification standardizes the directory and six frontmatter fields, not one shared runtime. `allowed-tools` is experimental and support may vary between agent implementations. In Claude apps, a non-spec key such as `argument-hint` fails packaging with a hard error, while Claude Code dynamic context injection does not run in `claude.ai` chat or through the API. OpenAI Codex optionally reads an `agents/openai.yaml` file, and discovery clients SHALL NOT execute scripts by default. [2][6][8][21]",
   "v05_fuzzy_additions": [
    {
     "id": "skill-md-package-format-and-progressive-disclosure",
     "heading": "`SKILL.md` package format and progressive disclosure",
     "body_md": "A skill package is a directory centered on a `SKILL.md` file whose YAML frontmatter declares the skill's identity and metadata before the Markdown instructions. Optional `scripts/`, `references/`, and `assets/` subdirectories remain unloaded until an activated workflow references them. [2]",
     "bullets": [
      {
       "label": "Six frontmatter fields",
       "text_md": "YAML frontmatter defines two required fields (`name` and non-empty `description` of at most 1024 characters) and four optional fields: `license` (a license name or reference to a bundled license file), `compatibility` (at most 500 characters describing environment requirements), string-mapped `metadata`, and experimental space-separated `allowed-tools` (whose support may vary between agent implementations). [2]"
      },
      {
       "label": "Name constraints, directory matching, and spec table vs. prose wording",
       "text_md": "Required `name` (1–64 characters) must match the parent directory name and must not start, end, or repeat hyphens (`--`); in a source-side phrasing difference within the specification, the summary table states `lowercase letters, numbers, and hyphens` whereas the field-constraints prose specifies `unicode lowercase alphanumeric characters (a-z, 0-9) and hyphens (-)`. `pdf-processing` and `data-analysis` are valid; `PDF-Processing`, `-pdf`, and `pdf--processing` are invalid. [2]"
      },
      {
       "label": "Optional companion directories",
       "text_md": "`scripts/` holds executable code, `references/` holds documentation agents load on demand, and `assets/` holds templates, images, and data files such as lookup tables and schemas. Languages depend on the agent; Python, Bash, and JavaScript are common. `skills-ref` validates `SKILL.md` frontmatter and the naming rules. [2]"
      },
      {
       "label": "Three-stage token budgets",
       "text_md": "Metadata (~100 tokens) loads `name` and `description` at startup for every skill. Instructions (under 5000 tokens recommended) load the full `SKILL.md` body on activation, and that file should stay under 500 lines. Resources in `scripts/`, `references/`, or `assets/` load only when required (also summarized as Discovery, Activation, and Execution). [1][2]"
      }
     ]
    },
    {
     "id": "well-known-discovery-mcp-bridging-governance-and-security",
     "heading": "Well-known discovery, MCP bridging, governance, and security",
     "body_md": "Because the core `SKILL.md` specification defines only the local folder layout, companion proposals and foundation governance address remote publication (`/.well-known/agent-skills/index.json` with per-artifact SHA-256 `digest` values), directory queries via the IETF Agent Directory Service draft (`draft-mp-agntcy-ads-03`) and `OASF`, MCP server bridging (`io.modelcontextprotocol/skills`), and stewardship under the Linux Foundation AAIF. [2][5][6][10][22]",
     "bullets": [
      {
       "label": "Well-known index and live deployments",
       "text_md": "Cloudflare's discovery draft `0.2.0` (published 2026-01-17, updated 2026-03-12) serves `/.well-known/agent-skills/index.json` with `type` (`skill-md` or `archive`), `url`, and a SHA-256 `digest` (`Clients MUST verify artifact digests after download`), and stipulates that clients SHALL NOT execute files under `scripts/` by default. Among sampled live origin indexes, Cloudflare's developer documentation domain (`developers.cloudflare.com`) lists 19 `archive` skills (including `agents-sdk` and `wrangler`) on schema `https://schemas.agentskills.io/discovery/0.2.0/schema.json`, Vercel (`vercel.com`) lists 9 skills (including `deploy-to-vercel`), and Stripe (`docs.stripe.com`) lists 10 skills (including `connect-recommend`) at legacy `/.well-known/skills/index.json` using the `v0.1.0` `files` array format (`v0.2.0` is not backward-compatible with `v0.1.0`, so clients MUST inspect `$schema`). [6][19][23][24]"
      },
      {
       "label": "IETF draft and OASF discovery",
       "text_md": "`draft-mp-agntcy-ads-03` (2 November 2026) is the Agent Directory Service for discovering agents with specific skills. It uses the Open Agentic Schema Framework (`OASF`) to ask which agents, skills, and costs fit a task. OASF versions `0.8.0`, `1.0.0`, and `1.1.0` show Skills, Domains, and Modules, plus codes Language Processing `[1]` and Language Understanding `[101]`. [22][25]"
      },
      {
       "label": "Skills over MCP",
       "text_md": "The MCP `skills-over-mcp` working group maintains the Skills extension `io.modelcontextprotocol/skills` in `ext-skills`. SEP-2640 is Final and was merged on September 13, 2026. Current work covers implementation support, interoperability, and client behavior. [5]"
      },
      {
       "label": "Donation to the Linux Foundation AAIF, security, and trust boundaries",
       "text_md": "On 2026-10-22 Anthropic donated Agent Skills to the AAIF under the Linux Foundation, including the name, logo, GitHub organization, and `agentskills.io` domain. A multi-company Technical Steering Committee guides the work, with David Soria Parra and Mahesh Murag as Lead Maintainers. A governance charter adopted on 4 November 2026 requires tagged specification releases with a changelog. The maintainer roster names Core Maintainers Aiden Cline, Nick Cooper, Colin Daymond Hanna, Harald Kirschner, and Kurtis Van Gent alongside Lead Maintainers David Soria Parra and Mahesh Murag, and the TSC Representative seat is not yet designated. Licensing is Apache 2.0 and CC BY 4.0. Because `SKILL.md` content is loaded directly into agent context and skills may bundle executable files under `scripts/`, malicious skills can inject prompt instructions, introduce vulnerabilities, or direct an agent to exfiltrate data and take unintended actions (Anthropic recommends installing skills only from trusted sources). In the specification, `allowed-tools` is an experimental pre-approved tool list (`Space-separated string of pre-approved tools the skill may use. (Experimental)`) rather than a sandbox, the SHA-256 `digest` in `index.json` verifies artifact integrity against the same-origin index rather than cryptographic publisher signatures, third-party registries are unvetted, and the AAIF roadmap's security guidance has not yet been published as a standalone specification. [2][6][10][13][15][16][26]"
      }
     ]
    }
   ],
   "v05_diagram": {
    "title": "Progressive disclosure",
    "heading": "Progressive disclosure",
    "mermaid": "flowchart TD\n  Start[\"Agent startup\"] --> Meta[\"1. Metadata for every skill\\nname and description, about 100 tokens\"]\n  Meta --> Match{\"Task matches a description?\"}\n  Match -->|No| Idle[\"Leave the body unloaded\"]\n  Match -->|Yes| Body[\"2. Instructions\\nfull SKILL.md body, under 5000 tokens recommended\"]\n  Body --> More{\"A referenced file is required?\"}\n  More -->|No| Act[\"Perform the task\"]\n  More -->|Yes| Files[\"3. Resources, only as needed\\nscripts/, references/, or assets/\"]\n  Files --> Act",
    "caption_md": "Agents load skills progressively. At startup the `name` and `description` fields load for every skill. When the skill is activated, the full `SKILL.md` body loads. Files in `scripts/`, `references/`, or `assets/` load only when required. [2]"
   },
   "v05_wire_artifact": {
    "title": "SKILL.md",
    "heading": "SKILL.md",
    "lang": "markdown",
    "code": "---\nname: pdf-processing\ndescription: Extract PDF text, fill forms, merge files. Use when handling PDFs.\nlicense: Apache-2.0\nmetadata:\n  author: example-org\n  version: \"1.0\"\n---",
    "caption_md": "Example `SKILL.md` YAML frontmatter with optional `license` and `metadata` fields alongside required `name` and `description`. [2]"
   },
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "Repository README.md & CONTRIBUTING.md Conventions",
      "spec_or_rfc": "GitHub contributing guidelines",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "Agent Skills requires a directory whose SKILL.md begins with YAML frontmatter, whose name must match the parent directory, and whose name and description fields are loaded before the Markdown body. [2]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "agents-md",
      "target_name": "AGENTS.md",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "`AGENTS.md` is standard repository Markdown with no required fields where the closest file to the edited file wins, whereas Agent Skills is a directory whose `SKILL.md` loads `name` and `description` at startup before activating the body. [2][3]"
     },
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "MCP uses JSON-RPC 2.0 messages over `stdio` or `Streamable HTTP` so servers can expose live `Resources`, `Prompts`, and `Tools`, whereas Agent Skills packages static workflow instructions and local companion files without defining a wire transport. [2][4]"
     },
     {
      "target_id": "oasf",
      "target_name": "Open Agentic Schema Framework",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "OASF (`0.8.0`, `1.0.0`, `1.1.0`) defines a capability taxonomy with numeric class codes (such as `1` for Language Processing and `101` for Language Understanding) under Skills, Domains, and Modules, whereas Agent Skills bundles executable task instructions, `scripts/`, and `references/` in a skill directory. [2][25]"
     },
     {
      "target_id": "llms-txt",
      "target_name": "llms.txt",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "`llms.txt` places a Markdown index at a website root or subpath with brief guidance and links to detailed `.md` pages, whereas Agent Skills packages reusable procedural workflows as version-controlled local or workspace folders. [1][27]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (19 probed or cited examples across 3 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).",
    "side_a": {
     "visible": true,
     "heading": "Well-known domain skill publishers",
     "col4_header": "Discovery endpoint & bundled skills",
     "note_md": "HTTP 200 discovery index probes establish endpoint presence as of the stated check date (with Stripe serving the `v0.1.0` `files`-array schema and Cloudflare and Vercel serving the `0.2.0` schema), while third-party directory and marketplace totals in the tables and censuses below represent vendor-declared or self-reported listing and install counters rather than deduplicated or security-vetted skills. [6][26]",
     "rows": [
      {
       "actor": "Cloudflare",
       "role": "Well-known skill publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "HTTP 200 `application/json` at `/.well-known/agent-skills/index.json` (`0.2.0` schema) listing 19 `archive` skills including `agents-sdk`, `durable-objects`, and `wrangler`.",
       "source_md": "[Cloudflare agent-skills index](https://developers.cloudflare.com/.well-known/agent-skills/index.json) [6][23]"
      },
      {
       "actor": "Vercel",
       "role": "Well-known skill publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "HTTP 200 `application/json` at `/.well-known/agent-skills/index.json` (`0.2.0` schema) listing 9 skills across `skill-md` (`deploy-to-vercel`) and `archive` entries.",
       "source_md": "[Vercel agent-skills index](https://vercel.com/.well-known/agent-skills/index.json) [24]"
      },
      {
       "actor": "Stripe",
       "role": "Well-known skill publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "HTTP 200 `application/json` at legacy `/.well-known/skills/index.json` listing 10 skills (including `connect-recommend`) using `v0.1.0` `files` arrays starting with `SKILL.md` (incompatible with `v0.2.0`; clients MUST check `$schema`).",
       "source_md": "[Stripe skills index](https://docs.stripe.com/.well-known/skills/index.json) [6][19]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Agent harnesses, IDEs & API runtimes",
     "col4_header": "Skill loading surface & scope",
     "note_md": null,
     "rows": [
      {
       "actor": "Claude Code",
       "role": "CLI & IDE coding agent",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Loads `~/.claude/skills/<skill-name>/SKILL.md` on demand and adds Claude Code extensions (subagents, invocation control, dynamic context injection).",
       "source_md": "[Extend Claude with skills](https://code.claude.com/docs/en/skills) [8]"
      },
      {
       "actor": "Claude.ai and Claude Desktop",
       "role": "Web & desktop host apps",
       "status": "Supported",
       "status_display": "Supported · as of 2025-10-16",
       "col4_md": "Supports uploaded and admin-provisioned skills on `claude.ai` and Desktop, strictly validating the six standard `SKILL.md` frontmatter keys.",
       "source_md": "[Introducing Agent Skills](https://claude.com/resources/articles/skills) [11] · [Extend Claude with skills](https://code.claude.com/docs/en/skills) [8] · [Skills for organizations](https://claude.com/resources/articles/organization-skills-and-directory) [12]"
      },
      {
       "actor": "Claude API",
       "role": "API runtime",
       "status": "Supported (preview)",
       "status_display": "Supported (preview) · as of 2025-10-16",
       "col4_md": "Exposes `/v1/skills` for Messages API skill versioning; requires the Code Execution Tool beta and standard `SKILL.md` frontmatter.",
       "source_md": "[Introducing Agent Skills](https://claude.com/resources/articles/skills) [11] · [Extend Claude with skills](https://code.claude.com/docs/en/skills) [8]"
      },
      {
       "actor": "Cursor",
       "role": "IDE and CLI coding agent",
       "status": "Supported",
       "status_display": "Supported · as of 2026-01-22",
       "col4_md": "Discovers `SKILL.md` in `.agents/skills/`, `.cursor/skills/`, `~/.claude/skills/`, and `~/.codex/skills/` across editor and CLI since Cursor `2.4`.",
       "source_md": "[Cursor 2.4 changelog](https://cursor.com/changelog/2-4) [28] · [Cursor Agent Skills](https://cursor.com/docs/skills) [29]"
      },
      {
       "actor": "GitHub Copilot in VS Code",
       "role": "IDE & CLI coding agent",
       "status": "Supported",
       "status_display": "Supported · as of 2025-12-18",
       "col4_md": "Loads skills from `~/.copilot/skills/`, `~/.claude/skills/`, and `~/.agents/skills/` across VS Code, Copilot CLI, and Copilot coding agent.",
       "source_md": "[GitHub Copilot now supports Agent Skills](https://github.blog/changelog/2025-12-18-github-copilot-now-supports-agent-skills/) [30] · [VS Code Agent Skills](https://code.visualstudio.com/docs/agent-customization/agent-skills) [18]"
      },
      {
       "actor": "OpenAI Codex",
       "role": "Coding agent & app",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Scans `$CWD/.agents/skills`, `$REPO_ROOT/.agents/skills`, `$HOME/.agents/skills`, and `/etc/codex/skills` for `SKILL.md` (plus optional `agents/openai.yaml`), capping startup metadata via `skills.max_context_tokens`.",
       "source_md": "[Build skills](https://learn.chatgpt.com/docs/build-skills) [21] · [Donating Agent Skills](https://www.anthropic.com/news/donating-agent-skills-to-the-agentic-ai-foundation) [10]"
      },
      {
       "actor": "Gemini CLI",
       "role": "Agent CLI",
       "status": "Supported",
       "status_display": "Supported · as of 2026-01-27",
       "col4_md": "Discovers `SKILL.md` in `.agents/skills/` and `.gemini/skills/`, calling `activate_skill` with user consent before injecting instructions.",
       "source_md": "[Gemini CLI Agent Skills](https://geminicli.com/docs/cli/skills/) [9] · [Gemini CLI release notes](https://geminicli.com/docs/changelogs/) [31]"
      },
      {
       "actor": "goose",
       "role": "Open-source agent harness",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Loads `SKILL.md` subdirectories from `~/.agents/skills/` and compatibility paths `.goose/skills/`, `.claude/skills/`, and `~/.claude/skills/`.",
       "source_md": "[goose Agent Skills](https://goose-docs.ai/docs/guides/context-engineering/using-skills/) [32]"
      },
      {
       "actor": "Amp",
       "role": "Coding agent",
       "status": "Supported",
       "status_display": "Supported · as of 2025-12-10",
       "col4_md": "Lazily loads skill instructions from workspace `.agents/skills/`, `~/.config/agents/skills/`, `.claude/skills/`, and `~/.claude/skills/` since `2025-12-10`.",
       "source_md": "[Amp Agent Skills](https://ampcode.com/news/agent-skills) [33]"
      },
      {
       "actor": "OpenCode",
       "role": "Agent harness",
       "status": "Listed integration",
       "status_display": "Listed integration · as of 2026-10-22",
       "col4_md": "Listed on the `agentskills.io` client directory, which links to `https://opencode.ai/` (docs: `https://opencode.ai/docs/skills/`), and cited by Anthropic as having a community loader.",
       "source_md": "[Donating Agent Skills](https://www.anthropic.com/news/donating-agent-skills-to-the-agentic-ai-foundation) [10] · [Agent Skills clients](https://agentskills.io/home) [1]"
      }
     ]
    },
    "additional_tables": [
     {
      "visible": true,
      "heading": "Reference skill repositories & registries",
      "col4_header": "Catalog structure & distribution",
      "note_md": "Directory and marketplace counts (`25,346`, `195,000+`, `275,000+`, `195+`) are vendor-declared or self-reported listing counters rather than deduplicated or security-vetted skills. [34][35]",
      "rows": [
       {
        "actor": "anthropics/skills",
        "role": "Reference & document skill repository",
        "status": "Supported",
        "status_display": "Supported · checked 2026-10-30",
        "col4_md": "Claude reference repo and plugin marketplace bundling Apache 2.0 examples and source-available `skills/docx`, `skills/pdf`, `skills/pptx`, and `skills/xlsx`.",
        "source_md": "[anthropics/skills](https://github.com/anthropics/skills) [36]"
       },
       {
        "actor": "Hugging Face",
        "role": "Skill repository & plugin bundle",
        "status": "Supported",
        "status_display": "Supported · checked 2026-10-30",
        "col4_md": "`huggingface/skills` repository publishing `SKILL.md` folders led by `hf-cli`, with Claude, Cursor, `gemini-extension.json`, and `agentsmd/AGENTS.md` fallback manifests.",
        "source_md": "[huggingface/skills](https://github.com/huggingface/skills) [37]"
       },
       {
        "actor": "Awesome Agent Skills Directories",
        "role": "Index of skill directories",
        "status": "Listed",
        "status_display": "Listed · as of 2026-10-29",
        "col4_md": "Directory index checked `2026-10-29`; Smithery at `25,346` (self-reported directory listing counter).",
        "source_md": "[Awesome Agent Skills Directories](https://github.com/vawe-hq/awesome-agent-skills-directories/blob/main/README.md) [38]"
       },
       {
        "actor": "GuildSkills",
        "role": "Cross-agent SKILL.md registry",
        "status": "Listed",
        "status_display": "Listed · checked 2026-11-06",
        "col4_md": "Vendor-declared registry counter of `195,000+` SKILL.md files and `30+` clients (self-reported, not deduplicated or security-vetted).",
        "source_md": "[GuildSkills](https://guildskills.com/) [34]"
       },
       {
        "actor": "agentskill.sh",
        "role": "Agent skills marketplace",
        "status": "Listed",
        "status_display": "Listed · checked 2026-11-06",
        "col4_md": "Vendor-declared marketplace counter listing `275,000+` skills for `20+` AI tools (self-reported, not deduplicated or security-vetted).",
        "source_md": "[agentskill.sh](https://agentskill.sh/) [35]"
       },
       {
        "actor": "AgenticSkills",
        "role": "Curated SKILL.md directory",
        "status": "Listed",
        "status_display": "Listed · as of 2026-11-06",
        "col4_md": "Vendor-declared curated `v1.7.0` index: `195+` skills and `139` MCP servers.",
        "source_md": "[AgenticSkills](https://agenticskills.io) [39]"
       }
      ]
     }
    ],
    "censuses": [
     {
      "label": "Anthropic and AAIF donation announcements (2026-10-22)",
      "as_of": "2026-10-22",
      "value_md": "Anthropic and the Agentic AI Foundation report that more than 70 agent platforms support Agent Skills since December 2025 (with 46 named clients listed in the agentskills.io showcase) and that over 1 million skills have been listed on the skills.sh registry with nearly 280 million cumulative installations over seven months (vendor-declared platform, listing, and cumulative installation counters, not deduplicated or security-vetted skills). [10][13]"
     },
     {
      "label": "Live /.well-known/agent-skills/ and /.well-known/skills/ HTTP probes (2026-10-30)",
      "as_of": "2026-10-30",
      "value_md": "Across three sampled live publisher discovery endpoints totaling 38 skill entries, Cloudflare indexes 19 skills (agents-sdk through wrangler) as discovery v0.2.0 archive bundles, Vercel indexes 9 skills mixing v0.2.0 skill-md and archive entries (including deploy-to-vercel and writing-guidelines), and Stripe indexes 10 skills at legacy /.well-known/skills/index.json (connect-recommend through upgrade-stripe) using per-skill v0.1.0 files arrays (the v0.2.0 index format is not backward-compatible with v0.1.0; clients MUST check $schema). [6][19][23][24]"
     },
     {
      "label": "Awesome Agent Skills Directories (rows checked 2026-10-29)",
      "as_of": "2026-10-29",
      "value_md": "The vawe-hq/awesome-agent-skills-directories index (with every row checked on 2026-10-29) records Smithery at 25,346 skills, indexes VoltAgent/awesome-agent-skills, and notes that vercel-labs/skills provides the npx skills installer feeding skills.sh (self-reported directory listing counters, not deduplicated or security-vetted skills). [38]"
     },
     {
      "label": "GuildSkills homepage",
      "as_of": null,
      "value_md": "GuildSkills states that its registry holds 195,000+ SKILL.md files compatible with Hermes Agent, Cursor, OpenAI Codex, Gemini CLI, OpenCode, Goose, Letta, Roo Code, Claude Code, and 30+ more AI agent clients (vendor-declared homepage listing counter, not deduplicated or security-vetted skills). [34]"
     },
     {
      "label": "agentskill.sh directory homepage",
      "as_of": null,
      "value_md": "The agentskill.sh marketplace reports listing 275,000+ skills for Claude Code, Cursor, Copilot, Windsurf, Zed, and 20+ AI tools (vendor-declared marketplace listing counter, not deduplicated or security-vetted skills). [35]"
     },
     {
      "label": "agenticskills.io index v1.7.0 (NOV 6 2026)",
      "as_of": "2026-11-06",
      "value_md": "The AgenticSkills directory (version v1.7.0, updated November 6, 2026) reports 195+ curated skills, 139 MCP servers, and 9 platforms (vendor-declared directory counter). [39]"
     }
    ],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "okf",
     "target_name": "Open Knowledge Format",
     "relation_label": "Complements",
     "delta": "A skill is a SKILL.md directory with name and description; OKF's only required key is type.",
     "item_md": "**[Open Knowledge Format](/protocols/okf/)** (Complements) — A skill is a SKILL.md directory with name and description; OKF's only required key is type."
    },
    {
     "target_id": "acip",
     "target_name": "Agent Context Interchange Protocol",
     "relation_label": "Complements",
     "delta": "Agent Skills stay a skill package, and ACIP's resolution receipt records when a skill file was one of the sources the host applied.",
     "item_md": "**[Agent Context Interchange Protocol](/protocols/acip/)** (Complements) — Agent Skills stay a skill package, and ACIP's resolution receipt records when a skill file was one of the sources the host applied."
    },
    {
     "item_md": "**[Act protocols](/category/act/)** — Category index for `act` standards."
    }
   ],
   "v05_compiled_md": "---\nid: anthropic-agent-skills-format\ntitle: \"Agent Skills\"\ntier: flagship\nlifecycle_status: active\ncategory: act\nform: document-format\nwire_archetype: harnesses_rpc_ui\nspec_url: https://agentskills.io/specification\nlast_checked: 2026-11-11\n---\n\n# Agent Skills\n\n**Category:** [Act](/category/act/) (`act`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-11-11\n\n> *This page covers Agent Skills, the open directory and `SKILL.md` packaging format originated by Anthropic and stewarded by the Agentic AI Foundation (AAIF) for loading procedural instructions and scripts on demand. It is distinct from [AGENTS.md](/protocols/agents-md/), a repository-wide Markdown instruction file loaded automatically from the directory tree, and the [Model Context Protocol](/protocols/mcp/), a JSON-RPC 2.0 client-server protocol for tools and resources (which also defines the companion `io.modelcontextprotocol/skills` extension). Web-hosted skill indexes at `/.well-known/agent-skills/index.json` are specified in a separate Cloudflare draft RFC, and multi-resource catalogs are covered under [Agentic Resource Discovery (ARD)](/protocols/ard/). [1][2][3][4][5][6][7]*\n\n> **In brief:** Agent Skills is a portable directory standard that lets developers package specialized workflows, domain playbooks, and helper scripts into reusable folders that AI agents load on demand. Instead of cramming every workflow into always-on workspace files like `CLAUDE.md` or `GEMINI.md` and burning context tokens on every turn, an agent reads only the brief `name` and `description` YAML fields at startup and loads the full `SKILL.md` body and bundled `scripts/` only when a task matches. [1][8][9]\n\n**Agent Skills** is an open format, originated by Anthropic for Claude Code, that packages procedural instructions and resources into portable directories an AI agent loads on demand. [1][10] Launched across Claude apps, Claude Code, and the API on 2025-10-16 and published as an open standard on 2025-12-18, it was donated to the Linux Foundation's Agentic AI Foundation (AAIF) on 2026-10-22 under a multi-company Technical Steering Committee with Lead Maintainers David Soria Parra and Mahesh Murag. [10][11][12][13] Each skill directory contains a `SKILL.md` file with YAML frontmatter (required `name` matching the parent directory and `description`, plus optional `license`, `compatibility`, `metadata`, and experimental `allowed-tools`) and Markdown instructions, alongside optional `scripts/`, `references/`, and `assets/` subdirectories validated by `skills-ref`. [2] Licensed under Apache 2.0 and CC BY 4.0 (`agentskills/agentskills`, created 2025-12-16). [13][14] Companion specifications define `/.well-known/agent-skills/index.json` discovery (Cloudflare draft `0.2.0`, updated 2026-03-12) and the MCP extension `io.modelcontextprotocol/skills` (SEP-2640, merged September 13, 2026). [5][6] A governance charter and maintainer roster adopted on 4 November 2026 require tagged, changelogged specification releases under individual-capacity governance, naming two Lead Maintainers and five Core Maintainers while leaving the TSC Representative seat undesignated. [15][16]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Act](/category/act/) (`act`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | Anthropic; built for Claude Code, launched 2025-10-16, and published as an open standard on 2025-12-18 [10][11][12] |\n| **Governed by** | AAIF under the Linux Foundation since 2026-10-22; Lead Maintainers David Soria Parra and Mahesh Murag; Core Maintainers Aiden Cline, Nick Cooper, Colin Daymond Hanna, Harald Kirschner, and Kurtis Van Gent (4 November 2026); TSC Representative not yet designated [10][13][16] |\n| **Track** | Foundation / Consortium Specification (`linux-foundation`); Agentic AI Foundation project [13][17] |\n| **Status** | Open standard (2025-12-18); AAIF project since 2026-10-22; governance adopted 4 November 2026 requires tagged specification releases with a changelog [12][15][17] |\n| **Version** | Unversioned specification (`agentskills/agentskills`, created 2025-12-16); separate Cloudflare discovery RFC is draft `0.2.0` (published 2026-01-17, updated 2026-03-12) [2][6][14] |\n| **Message format** | Skill folder with `SKILL.md` containing YAML frontmatter (`name`, `description`; optional `license`, `compatibility`, `metadata`, `allowed-tools`) and Markdown [2] |\n| **Specification** | [Specification - Agent Skills](https://agentskills.io/specification); discovery draft [Agent Skills Discovery via Well-Known URIs](https://github.com/cloudflare/agent-skills-discovery-rfc) [2][6] |\n| **Found at** | Local skill directories (`.agents/skills/`, `~/.claude/skills/`, `~/.copilot/skills/`); web index `/.well-known/agent-skills/index.json` (legacy `/.well-known/skills/index.json`) [2][6][18][19] |\n| **IANA registration** | None in core specification; Cloudflare draft `0.2.0` proposes registering `agent-skills` as a well-known URI suffix [6][20] |\n| **Licence** | Apache License 2.0 (`agentskills/agentskills`) and CC BY 4.0 for specification documentation [13][14] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [`SKILL.md` package format and progressive disclosure](#skill-md-package-format-and-progressive-disclosure)\n3. [Well-known discovery, MCP bridging, governance, and security](#well-known-discovery-mcp-bridging-governance-and-security)\n4. [Counterparts and related standards](#counterparts-and-related-standards)\n5. [Adoption and ecosystem](#adoption-and-ecosystem)\n6. [See also](#see-also)\n7. [References](#references)\n\n---\n\n## Problem and scope\n\nAgents often lack the procedural context real work requires, yet keeping long reference instructions in always-on workspace files (`CLAUDE.md` or `GEMINI.md`) consumes context-window tokens on every turn. Packaging domain and team workflows into version-controlled skill folders lets an agent leave long reference material unloaded until a task requires it. [1][8][9] Agent Skills uses three-stage progressive disclosure so agents scan only lightweight `name` and `description` frontmatter at startup, read the `SKILL.md` instruction body only when a task matches a skill's description, and load companion files from `scripts/`, `references/`, or `assets/` only during execution. [1] The specification standardizes the directory and six frontmatter fields, not one shared runtime. `allowed-tools` is experimental and support may vary between agent implementations. In Claude apps, a non-spec key such as `argument-hint` fails packaging with a hard error, while Claude Code dynamic context injection does not run in `claude.ai` chat or through the API. OpenAI Codex optionally reads an `agents/openai.yaml` file, and discovery clients SHALL NOT execute scripts by default. [2][6][8][21]\n\n### Progressive disclosure\n\n```mermaid\nflowchart TD\n  Start[\"Agent startup\"] --> Meta[\"1. Metadata for every skill\\nname and description, about 100 tokens\"]\n  Meta --> Match{\"Task matches a description?\"}\n  Match -->|No| Idle[\"Leave the body unloaded\"]\n  Match -->|Yes| Body[\"2. Instructions\\nfull SKILL.md body, under 5000 tokens recommended\"]\n  Body --> More{\"A referenced file is required?\"}\n  More -->|No| Act[\"Perform the task\"]\n  More -->|Yes| Files[\"3. Resources, only as needed\\nscripts/, references/, or assets/\"]\n  Files --> Act\n```\n\n*Agents load skills progressively. At startup the `name` and `description` fields load for every skill. When the skill is activated, the full `SKILL.md` body loads. Files in `scripts/`, `references/`, or `assets/` load only when required. [2]*\n\n### SKILL.md\n\n```markdown\n---\nname: pdf-processing\ndescription: Extract PDF text, fill forms, merge files. Use when handling PDFs.\nlicense: Apache-2.0\nmetadata:\n  author: example-org\n  version: \"1.0\"\n---\n```\n\n*Example `SKILL.md` YAML frontmatter with optional `license` and `metadata` fields alongside required `name` and `description`. [2]*\n\n---\n\n## `SKILL.md` package format and progressive disclosure\n\nA skill package is a directory centered on a `SKILL.md` file whose YAML frontmatter declares the skill's identity and metadata before the Markdown instructions. Optional `scripts/`, `references/`, and `assets/` subdirectories remain unloaded until an activated workflow references them. [2]\n\n- **Six frontmatter fields:** YAML frontmatter defines two required fields (`name` and non-empty `description` of at most 1024 characters) and four optional fields: `license` (a license name or reference to a bundled license file), `compatibility` (at most 500 characters describing environment requirements), string-mapped `metadata`, and experimental space-separated `allowed-tools` (whose support may vary between agent implementations). [2]\n- **Name constraints, directory matching, and spec table vs. prose wording:** Required `name` (1–64 characters) must match the parent directory name and must not start, end, or repeat hyphens (`--`); in a source-side phrasing difference within the specification, the summary table states `lowercase letters, numbers, and hyphens` whereas the field-constraints prose specifies `unicode lowercase alphanumeric characters (a-z, 0-9) and hyphens (-)`. `pdf-processing` and `data-analysis` are valid; `PDF-Processing`, `-pdf`, and `pdf--processing` are invalid. [2]\n- **Optional companion directories:** `scripts/` holds executable code, `references/` holds documentation agents load on demand, and `assets/` holds templates, images, and data files such as lookup tables and schemas. Languages depend on the agent; Python, Bash, and JavaScript are common. `skills-ref` validates `SKILL.md` frontmatter and the naming rules. [2]\n- **Three-stage token budgets:** Metadata (~100 tokens) loads `name` and `description` at startup for every skill. Instructions (under 5000 tokens recommended) load the full `SKILL.md` body on activation, and that file should stay under 500 lines. Resources in `scripts/`, `references/`, or `assets/` load only when required (also summarized as Discovery, Activation, and Execution). [1][2]\n\n---\n\n## Well-known discovery, MCP bridging, governance, and security\n\nBecause the core `SKILL.md` specification defines only the local folder layout, companion proposals and foundation governance address remote publication (`/.well-known/agent-skills/index.json` with per-artifact SHA-256 `digest` values), directory queries via the IETF Agent Directory Service draft (`draft-mp-agntcy-ads-03`) and `OASF`, MCP server bridging (`io.modelcontextprotocol/skills`), and stewardship under the Linux Foundation AAIF. [2][5][6][10][22]\n\n- **Well-known index and live deployments:** Cloudflare's discovery draft `0.2.0` (published 2026-01-17, updated 2026-03-12) serves `/.well-known/agent-skills/index.json` with `type` (`skill-md` or `archive`), `url`, and a SHA-256 `digest` (`Clients MUST verify artifact digests after download`), and stipulates that clients SHALL NOT execute files under `scripts/` by default. Among sampled live origin indexes, Cloudflare's developer documentation domain (`developers.cloudflare.com`) lists 19 `archive` skills (including `agents-sdk` and `wrangler`) on schema `https://schemas.agentskills.io/discovery/0.2.0/schema.json`, Vercel (`vercel.com`) lists 9 skills (including `deploy-to-vercel`), and Stripe (`docs.stripe.com`) lists 10 skills (including `connect-recommend`) at legacy `/.well-known/skills/index.json` using the `v0.1.0` `files` array format (`v0.2.0` is not backward-compatible with `v0.1.0`, so clients MUST inspect `$schema`). [6][19][23][24]\n- **IETF draft and OASF discovery:** `draft-mp-agntcy-ads-03` (2 November 2026) is the Agent Directory Service for discovering agents with specific skills. It uses the Open Agentic Schema Framework (`OASF`) to ask which agents, skills, and costs fit a task. OASF versions `0.8.0`, `1.0.0`, and `1.1.0` show Skills, Domains, and Modules, plus codes Language Processing `[1]` and Language Understanding `[101]`. [22][25]\n- **Skills over MCP:** The MCP `skills-over-mcp` working group maintains the Skills extension `io.modelcontextprotocol/skills` in `ext-skills`. SEP-2640 is Final and was merged on September 13, 2026. Current work covers implementation support, interoperability, and client behavior. [5]\n- **Donation to the Linux Foundation AAIF, security, and trust boundaries:** On 2026-10-22 Anthropic donated Agent Skills to the AAIF under the Linux Foundation, including the name, logo, GitHub organization, and `agentskills.io` domain. A multi-company Technical Steering Committee guides the work, with David Soria Parra and Mahesh Murag as Lead Maintainers. A governance charter adopted on 4 November 2026 requires tagged specification releases with a changelog. The maintainer roster names Core Maintainers Aiden Cline, Nick Cooper, Colin Daymond Hanna, Harald Kirschner, and Kurtis Van Gent alongside Lead Maintainers David Soria Parra and Mahesh Murag, and the TSC Representative seat is not yet designated. Licensing is Apache 2.0 and CC BY 4.0. Because `SKILL.md` content is loaded directly into agent context and skills may bundle executable files under `scripts/`, malicious skills can inject prompt instructions, introduce vulnerabilities, or direct an agent to exfiltrate data and take unintended actions (Anthropic recommends installing skills only from trusted sources). In the specification, `allowed-tools` is an experimental pre-approved tool list (`Space-separated string of pre-approved tools the skill may use. (Experimental)`) rather than a sandbox, the SHA-256 `digest` in `index.json` verifies artifact integrity against the same-origin index rather than cryptographic publisher signatures, third-party registries are unvetted, and the AAIF roadmap's security guidance has not yet been published as a standalone specification. [2][6][10][13][15][16][26]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **Repository README.md & CONTRIBUTING.md Conventions** | `GitHub contributing guidelines` | Analogous to classic standard | Agent Skills requires a directory whose SKILL.md begins with YAML frontmatter, whose name must match the parent directory, and whose name and description fields are loaded before the Markdown body. [2] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[AGENTS.md](/protocols/agents-md/)** | Complements | `AGENTS.md` is standard repository Markdown with no required fields where the closest file to the edited file wins, whereas Agent Skills is a directory whose `SKILL.md` loads `name` and `description` at startup before activating the body. [2][3] |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | MCP uses JSON-RPC 2.0 messages over `stdio` or `Streamable HTTP` so servers can expose live `Resources`, `Prompts`, and `Tools`, whereas Agent Skills packages static workflow instructions and local companion files without defining a wire transport. [2][4] |\n| **[Open Agentic Schema Framework](/protocols/oasf/)** | Peer alternative | OASF (`0.8.0`, `1.0.0`, `1.1.0`) defines a capability taxonomy with numeric class codes (such as `1` for Language Processing and `101` for Language Understanding) under Skills, Domains, and Modules, whereas Agent Skills bundles executable task instructions, `scripts/`, and `references/` in a skill directory. [2][25] |\n| **[llms.txt](/protocols/llms-txt/)** | Complements | `llms.txt` places a Markdown index at a website root or subpath with brief guidance and links to detailed `.md` pages, whereas Agent Skills packages reusable procedural workflows as version-controlled local or workspace folders. [1][27] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (19 probed or cited examples across 3 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).*\n\n### Well-known domain skill publishers\n\nHTTP 200 discovery index probes establish endpoint presence as of the stated check date (with Stripe serving the `v0.1.0` `files`-array schema and Cloudflare and Vercel serving the `0.2.0` schema), while third-party directory and marketplace totals in the tables and censuses below represent vendor-declared or self-reported listing and install counters rather than deduplicated or security-vetted skills. [6][26]\n\n| Actor | Role | Status | Discovery endpoint & bundled skills | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Cloudflare** | Well-known skill publisher | Live (HTTP 200) · checked 2026-10-30 | HTTP 200 `application/json` at `/.well-known/agent-skills/index.json` (`0.2.0` schema) listing 19 `archive` skills including `agents-sdk`, `durable-objects`, and `wrangler`. | [Cloudflare agent-skills index](https://developers.cloudflare.com/.well-known/agent-skills/index.json) [6][23] |\n| **Vercel** | Well-known skill publisher | Live (HTTP 200) · checked 2026-10-30 | HTTP 200 `application/json` at `/.well-known/agent-skills/index.json` (`0.2.0` schema) listing 9 skills across `skill-md` (`deploy-to-vercel`) and `archive` entries. | [Vercel agent-skills index](https://vercel.com/.well-known/agent-skills/index.json) [24] |\n| **Stripe** | Well-known skill publisher | Live (HTTP 200) · checked 2026-10-30 | HTTP 200 `application/json` at legacy `/.well-known/skills/index.json` listing 10 skills (including `connect-recommend`) using `v0.1.0` `files` arrays starting with `SKILL.md` (incompatible with `v0.2.0`; clients MUST check `$schema`). | [Stripe skills index](https://docs.stripe.com/.well-known/skills/index.json) [6][19] |\n\n### Agent harnesses, IDEs & API runtimes\n\n| Actor | Role | Status | Skill loading surface & scope | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Claude Code** | CLI & IDE coding agent | Supported · checked 2026-10-30 | Loads `~/.claude/skills/<skill-name>/SKILL.md` on demand and adds Claude Code extensions (subagents, invocation control, dynamic context injection). | [Extend Claude with skills](https://code.claude.com/docs/en/skills) [8] |\n| **Claude.ai and Claude Desktop** | Web & desktop host apps | Supported · as of 2025-10-16 | Supports uploaded and admin-provisioned skills on `claude.ai` and Desktop, strictly validating the six standard `SKILL.md` frontmatter keys. | [Introducing Agent Skills](https://claude.com/resources/articles/skills) [11] · [Extend Claude with skills](https://code.claude.com/docs/en/skills) [8] · [Skills for organizations](https://claude.com/resources/articles/organization-skills-and-directory) [12] |\n| **Claude API** | API runtime | Supported (preview) · as of 2025-10-16 | Exposes `/v1/skills` for Messages API skill versioning; requires the Code Execution Tool beta and standard `SKILL.md` frontmatter. | [Introducing Agent Skills](https://claude.com/resources/articles/skills) [11] · [Extend Claude with skills](https://code.claude.com/docs/en/skills) [8] |\n| **Cursor** | IDE and CLI coding agent | Supported · as of 2026-01-22 | Discovers `SKILL.md` in `.agents/skills/`, `.cursor/skills/`, `~/.claude/skills/`, and `~/.codex/skills/` across editor and CLI since Cursor `2.4`. | [Cursor 2.4 changelog](https://cursor.com/changelog/2-4) [28] · [Cursor Agent Skills](https://cursor.com/docs/skills) [29] |\n| **GitHub Copilot in VS Code** | IDE & CLI coding agent | Supported · as of 2025-12-18 | Loads skills from `~/.copilot/skills/`, `~/.claude/skills/`, and `~/.agents/skills/` across VS Code, Copilot CLI, and Copilot coding agent. | [GitHub Copilot now supports Agent Skills](https://github.blog/changelog/2025-12-18-github-copilot-now-supports-agent-skills/) [30] · [VS Code Agent Skills](https://code.visualstudio.com/docs/agent-customization/agent-skills) [18] |\n| **OpenAI Codex** | Coding agent & app | Supported · checked 2026-10-30 | Scans `$CWD/.agents/skills`, `$REPO_ROOT/.agents/skills`, `$HOME/.agents/skills`, and `/etc/codex/skills` for `SKILL.md` (plus optional `agents/openai.yaml`), capping startup metadata via `skills.max_context_tokens`. | [Build skills](https://learn.chatgpt.com/docs/build-skills) [21] · [Donating Agent Skills](https://www.anthropic.com/news/donating-agent-skills-to-the-agentic-ai-foundation) [10] |\n| **Gemini CLI** | Agent CLI | Supported · as of 2026-01-27 | Discovers `SKILL.md` in `.agents/skills/` and `.gemini/skills/`, calling `activate_skill` with user consent before injecting instructions. | [Gemini CLI Agent Skills](https://geminicli.com/docs/cli/skills/) [9] · [Gemini CLI release notes](https://geminicli.com/docs/changelogs/) [31] |\n| **goose** | Open-source agent harness | Supported · checked 2026-10-30 | Loads `SKILL.md` subdirectories from `~/.agents/skills/` and compatibility paths `.goose/skills/`, `.claude/skills/`, and `~/.claude/skills/`. | [goose Agent Skills](https://goose-docs.ai/docs/guides/context-engineering/using-skills/) [32] |\n| **Amp** | Coding agent | Supported · as of 2025-12-10 | Lazily loads skill instructions from workspace `.agents/skills/`, `~/.config/agents/skills/`, `.claude/skills/`, and `~/.claude/skills/` since `2025-12-10`. | [Amp Agent Skills](https://ampcode.com/news/agent-skills) [33] |\n| **OpenCode** | Agent harness | Listed integration · as of 2026-10-22 | Listed on the `agentskills.io` client directory, which links to `https://opencode.ai/` (docs: `https://opencode.ai/docs/skills/`), and cited by Anthropic as having a community loader. | [Donating Agent Skills](https://www.anthropic.com/news/donating-agent-skills-to-the-agentic-ai-foundation) [10] · [Agent Skills clients](https://agentskills.io/home) [1] |\n\n### Reference skill repositories & registries\n\nDirectory and marketplace counts (`25,346`, `195,000+`, `275,000+`, `195+`) are vendor-declared or self-reported listing counters rather than deduplicated or security-vetted skills. [34][35]\n\n| Actor | Role | Status | Catalog structure & distribution | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **anthropics/skills** | Reference & document skill repository | Supported · checked 2026-10-30 | Claude reference repo and plugin marketplace bundling Apache 2.0 examples and source-available `skills/docx`, `skills/pdf`, `skills/pptx`, and `skills/xlsx`. | [anthropics/skills](https://github.com/anthropics/skills) [36] |\n| **Hugging Face** | Skill repository & plugin bundle | Supported · checked 2026-10-30 | `huggingface/skills` repository publishing `SKILL.md` folders led by `hf-cli`, with Claude, Cursor, `gemini-extension.json`, and `agentsmd/AGENTS.md` fallback manifests. | [huggingface/skills](https://github.com/huggingface/skills) [37] |\n| **Awesome Agent Skills Directories** | Index of skill directories | Listed · as of 2026-10-29 | Directory index checked `2026-10-29`; Smithery at `25,346` (self-reported directory listing counter). | [Awesome Agent Skills Directories](https://github.com/vawe-hq/awesome-agent-skills-directories/blob/main/README.md) [38] |\n| **GuildSkills** | Cross-agent SKILL.md registry | Listed · checked 2026-11-06 | Vendor-declared registry counter of `195,000+` SKILL.md files and `30+` clients (self-reported, not deduplicated or security-vetted). | [GuildSkills](https://guildskills.com/) [34] |\n| **agentskill.sh** | Agent skills marketplace | Listed · checked 2026-11-06 | Vendor-declared marketplace counter listing `275,000+` skills for `20+` AI tools (self-reported, not deduplicated or security-vetted). | [agentskill.sh](https://agentskill.sh/) [35] |\n| **AgenticSkills** | Curated SKILL.md directory | Listed · as of 2026-11-06 | Vendor-declared curated `v1.7.0` index: `195+` skills and `139` MCP servers. | [AgenticSkills](https://agenticskills.io) [39] |\n\n### Ecosystem censuses\n\n- **Anthropic and AAIF donation announcements (2026-10-22)** (*as of 2026-10-22*): Anthropic and the Agentic AI Foundation report that more than 70 agent platforms support Agent Skills since December 2025 (with 46 named clients listed in the agentskills.io showcase) and that over 1 million skills have been listed on the skills.sh registry with nearly 280 million cumulative installations over seven months (vendor-declared platform, listing, and cumulative installation counters, not deduplicated or security-vetted skills). [10][13]\n- **Live /.well-known/agent-skills/ and /.well-known/skills/ HTTP probes (2026-10-30)** (*as of 2026-10-30*): Across three sampled live publisher discovery endpoints totaling 38 skill entries, Cloudflare indexes 19 skills (agents-sdk through wrangler) as discovery v0.2.0 archive bundles, Vercel indexes 9 skills mixing v0.2.0 skill-md and archive entries (including deploy-to-vercel and writing-guidelines), and Stripe indexes 10 skills at legacy /.well-known/skills/index.json (connect-recommend through upgrade-stripe) using per-skill v0.1.0 files arrays (the v0.2.0 index format is not backward-compatible with v0.1.0; clients MUST check $schema). [6][19][23][24]\n- **Awesome Agent Skills Directories (rows checked 2026-10-29)** (*as of 2026-10-29*): The vawe-hq/awesome-agent-skills-directories index (with every row checked on 2026-10-29) records Smithery at 25,346 skills, indexes VoltAgent/awesome-agent-skills, and notes that vercel-labs/skills provides the npx skills installer feeding skills.sh (self-reported directory listing counters, not deduplicated or security-vetted skills). [38]\n- **GuildSkills homepage**: GuildSkills states that its registry holds 195,000+ SKILL.md files compatible with Hermes Agent, Cursor, OpenAI Codex, Gemini CLI, OpenCode, Goose, Letta, Roo Code, Claude Code, and 30+ more AI agent clients (vendor-declared homepage listing counter, not deduplicated or security-vetted skills). [34]\n- **agentskill.sh directory homepage**: The agentskill.sh marketplace reports listing 275,000+ skills for Claude Code, Cursor, Copilot, Windsurf, Zed, and 20+ AI tools (vendor-declared marketplace listing counter, not deduplicated or security-vetted skills). [35]\n- **agenticskills.io index v1.7.0 (NOV 6 2026)** (*as of 2026-11-06*): The AgenticSkills directory (version v1.7.0, updated November 6, 2026) reports 195+ curated skills, 139 MCP servers, and 9 platforms (vendor-declared directory counter). [39]\n\n---\n\n## See also\n\n- **[Open Knowledge Format](/protocols/okf/)** *(Complements)* — A skill is a SKILL.md directory with name and description; OKF's only required key is type.\n- **[Agent Context Interchange Protocol](/protocols/acip/)** *(Complements)* — Agent Skills stay a skill package, and ACIP's resolution receipt records when a skill file was one of the sources the host applied.\n- **Category:** [Act protocols](/category/act/)\n\n---\n\n## References\n\n1. Agent Skills, *Agent Skills Overview* (checked 2026-10-30) — <https://agentskills.io/home>\n2. Agent Skills, *Specification - Agent Skills* (checked 2026-10-30) — <https://agentskills.io/specification>\n3. AGENTS.md contributors (OpenAI Codex, Amp, Jules from Google, Cursor, and Factory), *AGENTS.md* (checked 2026-10-30) — <https://agents.md/>\n4. Model Context Protocol, *Specification* (version 2026-07-28) — <https://modelcontextprotocol.io/specification/2026-07-28>\n5. Model Context Protocol, *Skills Over MCP Charter* (SEP-2640 Final, merged 2026-09-13; checked 2026-10-30) — <https://modelcontextprotocol.io/community/working-groups/skills-over-mcp>\n6. Cloudflare, *Agent Skills Discovery via Well-Known URIs* (draft 0.2.0, published 2026-01-17; updated 2026-03-12) — <https://github.com/cloudflare/agent-skills-discovery-rfc>\n7. Junjie Bu (Google), R.V. Guha, and Shaun Smith (Hugging Face), *ARD Specification* (v0.91, 2026-08-26) — <https://agenticresourcediscovery.org/spec/>\n8. Anthropic, *Extend Claude with skills* (checked 2026-10-30) — <https://code.claude.com/docs/en/skills>\n9. Gemini CLI, *Agent Skills* (checked 2026-10-30) — <https://geminicli.com/docs/cli/skills/>\n10. Anthropic, *Donating Agent Skills to the Agentic AI Foundation* (published 2026-10-22) — <https://www.anthropic.com/news/donating-agent-skills-to-the-agentic-ai-foundation>\n11. Anthropic, *Introducing Agent Skills* (published 2025-10-16; update dated 2025-12-18) — <https://claude.com/resources/articles/skills>\n12. Anthropic, *Skills for organizations, partners, the ecosystem* (published 2025-12-18) — <https://claude.com/resources/articles/organization-skills-and-directory>\n13. Angie Jones (Agentic AI Foundation), *Agent Skills: Open Standard for Sharing AI Agent Workflows* (published 2026-10-22) — <https://aaif.io/blog/agent-skills-sharing-team-expertise-across-ai-agents>\n14. agentskills, *Specification and documentation for Agent Skills* (repository created 2025-12-16; checked 2026-10-30) — <https://github.com/agentskills/agentskills>\n15. Agent Skills project, *Agent Skills Governance* (Adopted November 4, 2026) — <https://raw.githubusercontent.com/agentskills/agentskills/main/GOVERNANCE.md>\n16. Agent Skills project, *Agent Skills Maintainers* (Last updated November 4, 2026) — <https://raw.githubusercontent.com/agentskills/agentskills/main/MAINTAINERS.md>\n17. The Linux Foundation, *Agentic AI Foundation Announces Four New Projects: Agent Skills, Open Responses, OpenEnv, and OpenSandbox* (published 2026-10-22; modified 2026-10-23) — <https://www.linuxfoundation.org/press/agentic-ai-foundation-announces-four-new-projects-agent-skills-open-responses-openenv-and-opensandbox>\n18. Visual Studio Code, *Use Agent Skills in VS Code* (checked 2026-10-30) — <https://code.visualstudio.com/docs/agent-customization/agent-skills>\n19. Stripe, *skills discovery index* (checked 2026-10-30) — <https://docs.stripe.com/.well-known/skills/index.json>\n20. IANA, *Well-Known URIs* (registry CSV, fetched 2026-10-30) — <https://www.iana.org/assignments/well-known-uris/well-known-uris-1.csv>\n21. OpenAI, *Build skills* (checked 2026-10-30) — <https://learn.chatgpt.com/docs/build-skills>\n22. L. Muscariello and R. Polic (Cisco), *Agent Directory Service (draft-mp-agntcy-ads-03)* (2 November 2026) — <https://www.ietf.org/archive/id/draft-mp-agntcy-ads-03.txt>\n23. Cloudflare, *agent-skills discovery index* (checked 2026-10-30) — <https://developers.cloudflare.com/.well-known/agent-skills/index.json>\n24. Vercel, *agent-skills discovery index* (checked 2026-10-30) — <https://vercel.com/.well-known/agent-skills/index.json>\n25. Cisco, *Open Agentic Schema Framework* (copyright 2025; versions 0.8.0, 1.0.0, and 1.1.0 shown; checked 2026-10-31) — <https://schema.oasf.outshift.com/>\n26. Anthropic, *Equipping agents for the real world with Agent Skills* (published 2025-10-16; modified 2026-10-18) — <https://www.anthropic.com/research/equipping-agents-for-the-real-world-with-agent-skills>\n27. Jeremy Howard, *The /llms.txt file, v2* (published 2024-09-03; modified 2026-08-10) — <https://llmstxt.org>\n28. Cursor, *Subagents, Skills, and Image Generation* (2.4, 2026-01-22) — <https://cursor.com/changelog/2-4>\n29. Cursor, *Agent Skills* (checked 2026-10-30) — <https://cursor.com/docs/skills>\n30. Allison (GitHub), *GitHub Copilot now supports Agent Skills* (published 2025-12-18) — <https://github.blog/changelog/2025-12-18-github-copilot-now-supports-agent-skills/>\n31. Gemini CLI, *Gemini CLI release notes* (v0.23.0, 2026-01-07) — <https://geminicli.com/docs/changelogs/>\n32. goose, *Agent Skills* (checked 2026-10-30) — <https://goose-docs.ai/docs/guides/context-engineering/using-skills/>\n33. Amp, *Agent Skills* (published 2025-12-10) — <https://ampcode.com/news/agent-skills>\n34. GuildSkills, *GuildSkills cross-agent skills registry* (checked 2026-11-06) — <https://guildskills.com/>\n35. AgentSkill Directory, *AI Agent Skills Directory* (checked 2026-11-06) — <https://agentskill.sh/>\n36. Anthropic, *anthropics/skills* (checked 2026-10-30) — <https://github.com/anthropics/skills>\n37. Hugging Face, *huggingface/skills* (checked 2026-10-30) — <https://github.com/huggingface/skills>\n38. vawe-hq, *Awesome Agent Skills Directories* (2026-10-29) — <https://github.com/vawe-hq/awesome-agent-skills-directories/blob/main/README.md>\n39. AgenticSkills, *AgenticSkills curated skill directory* (2026-11-06) — <https://agenticskills.io>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "",
   "adoption": {
    "level": "observed",
    "by": "Anthropic (Claude API docs), OpenAI (Developer Platform docs), Google AI (Gemini API docs), Cloudflare (Developer docs), Stripe (Documentation), Chrome Lighthouse, Claude Code, VS Code PagePilot Extension, and 17 other verified implementations",
    "probe_run": null
   },
   "aliases": [],
   "analog": "sitemap.xml / a README for a site's documentation",
   "collisions": [],
   "discovery": {
    "mechanism": "Markdown file at the site root or any subpath",
    "path": "/llms.txt or any subpath"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://llmstxt.org",
     "claim": "Jeremy Howard, *The /llms.txt file, v2*, published 2024-09-03; modified 2026-08-10; HTTP last-modified 2026-09-24",
     "date": null,
     "quote": "A proposal to standardise on using an /llms.txt file to provide information to help agents use a website. / A proposal to standardise on using an /llms.txt file to provide information to help agents use a website. … We propose adding a /llms.txt markdown file to websites to provide LLM-friendly content. The file can be placed at the site root, or at any path within it, covering the pages under that path. This file offers brief background information, guidance, and links to detailed markdown files. / An HTML page wraps its information in navigation, ads, and JavaScript, and converting it back into clean text is difficult and imprecise. Context windows, while larger than they were, are still too small for most websites in their entirety, and every wasted token costs time and money. … sitemap.xml is a list of all the indexable human-readable information available on a site. This isn't a substitute for llms.txt since it: Often won't have the LLM-readable versions of pages listed Doesn't include URLs to external sites, even though they might be helpful to understand the information Will generally cover documents that in aggregate will be too large to fit in an LLM context window, and will include a lot of information that isn't necessary to understand the site. / The llms.txt file spec is for files named llms.txt, at the root path /llms.txt of a website or at any subpath (e.g. /docs/llms.txt). / Author Jeremy Howard Published September 3, 2024 Modified August 10, 2026 … Jeremy Howard 2024-09-03 / We furthermore propose that pages with information that agents might need provide a clean markdown version of those pages at the same URL as the original page, either with .md appended (page.html.md) or with the extension replaced by .md (page.md). (URLs without file names should append index.html.md or index.md instead.) … The llms.txt file spec is for files named llms.txt, at the root path /llms.txt of a website or at any subpath (e.g. /docs/llms.txt). A file covers the URLs under its path, and where more than one file applies, agents should use the most specific one. / To help clients find these files, we recommend using standard link relations: rel=\"alternate\" type=\"text/markdown\" points to the markdown version of a page, and rel=\"describedby\" points to the llms.txt file that covers it. … These links can be provided as HTML <link> elements, or as an HTTP Link: response header. The header form also works for non-HTML resources, such as the markdown files themselves, and can be added in web server or CDN configuration without modifying any pages. / Author Jeremy Howard Published September 3, 2024 Modified August 10, 2026 … Jeremy Howard 2024-09-03 … This is v2 of the proposal … The llms.txt specification is open for community input. A GitHub repository hosts this informal overview, allowing for version control and public discussion. / Author Jeremy Howard Published September 3, 2024 / The llms.txt specification is open for community input. A GitHub repository hosts this informal overview, allowing for version control and public discussion. / The llms.txt specification is open for community input. A GitHub repository hosts this informal overview / This is v2 of the proposal … The llms.txt specification is open for community input. A GitHub repository hosts this informal overview / Published September 3, 2024 Modified August 10, 2026 … This is v2 of the proposal / At the moment the most widely and easily understood format for language models is Markdown. … An H1 with the name of the project or site. This is the only required section A blockquote with a short summary of the project … Zero or more markdown sections delimited by H2 headers, containing \"file lists\" of URLs where further detail is available / rel=\"alternate\" type=\"text/markdown\" points to the markdown version of a page, and rel=\"describedby\" points to the llms.txt file that covers it. … These links can be provided as HTML <link> elements, or as an HTTP Link: response header. / The /llms.txt file, v2 / Agents are expected to view or search llms.txt to find the information they need, then follow the relevant links. The links in an llms.txt file should therefore point to LLM-friendly content, such as the markdown versions of pages described above. The file itself stays small enough to fit in context. The detail lives behind the links, and is fetched only when needed. / robots.txt lets automated tools know what access to a site is considered acceptable, such as for search indexing bots. llms.txt information is instead used on demand, when an agent needs information about a topic while assisting a user. Our expectation was that llms.txt would mainly be useful for inference rather than training … An alternative would be the Well-Known URIs standard (RFC 8615), which reserves the /.well-known/ prefix for metadata files like this one. But well-known URIs exist only at the origin root, and many authors control only a path on a shared host: a GitHub Pages project site, for example, can publish files in its own directory but can never add one to the host's /.well-known/. / Here's an example of llms.txt, in this case a cut down version of the file used for the FastHTML project (see also the full version): / llms.txt markdown is human and LLM readable, but is also in a precise format allowing fixed processing methods (i.e. classical programming techniques such as parsers and regex). / The llms.txt file is unusual in that it uses Markdown to structure the information rather than a classic structured format such as XML. The reason for this is that we expect many of these files to be read by language models and agents. Having said that, the information in llms.txt follows a specific format and can be read using standard programmatic-based tools. / A file following the spec contains the following sections as markdown, in the specific order: An optional byte-order mark (BOM) An H1 with the name of the project or site. This is the only required section A blockquote with a short summary of the project, containing key information necessary for understanding the rest of the file Zero or more markdown sections (e.g. paragraphs, lists, etc) of any type except headings, containing more detailed information about the project and how to interpret the provided files Zero or more markdown sections delimited by H2 headers, containing \"file lists\" of URLs where further detail is available / Zero or more markdown sections delimited by H2 headers, containing \"file lists\" of URLs where further detail is available Each \"file list\" is a markdown list, containing a required markdown hyperlink [name](url), then optionally a : and notes about the file. Here is a mock example: # Title … ## Section name - [Link title](https://link_url): Optional link details ## Optional - [Link title](https://link_url) / Important notes: - Although parts of its API are inspired by FastAPI, it is *not* compatible with FastAPI syntax and is not targeted at creating API services … ## Docs - FastHTML quick start: A brief overview of many FastHTML features … ## Examples … ## Optional - Starlette full documentation: A subset of the Starlette documentation useful for FastHTML development. / Each \"file list\" is a markdown list, containing a required markdown hyperlink [name](url), then optionally a : and notes about the file. Here is a mock example: # Title … ## Section name - [Link title](https://link_url): Optional link details ## Optional - [Link title](https://link_url) / The \"Optional\" section is used, by convention, for secondary information: links an agent can skip when a shorter context is needed. … ## Optional - Starlette full documentation: A subset of the Starlette documentation useful for FastHTML development. … ## Docs - FastHTML quick start: A brief overview of many FastHTML features / The links in an llms.txt file should therefore point to LLM-friendly content, such as the markdown versions of pages described above. … (An llms.txt file describes all pages under its path, so /docs/llms.txt covers everything in /docs/.) … The FastHTML project follows these two proposals for its documentation. For instance, here is the FastHTML docs llms.txt, placed at /docs/ to cover just the documentation pages. And here is an example of a regular HTML docs page, along with exact same URL but with a .md extension. / URLs without file names should append index.html.md or index.md instead. … Note that all nbdev projects now create .md versions of all pages by default. All Answer.AI and fast.ai software projects using nbdev have had their docs regenerated with this feature. / For example: Link: </docs/page.html.md>; rel=\"alternate\"; type=\"text/markdown\", </docs/llms.txt>; rel=\"describedby\" … rel=\"alternate\" type=\"text/markdown\" points to the markdown version of a page, and rel=\"describedby\" points to the llms.txt file that covers it. … These links can be provided as HTML <link> elements, or as an HTTP Link: response header. The header form also works for non-HTML resources, such as the markdown files themselves, and can be added in web server or CDN configuration without modifying any pages. / Code Python module & CLI Python source JavaScript … JavaScript Implementation - Sample JavaScript implementation vitepress-plugin-llms - VitePress plugin that automatically generates LLM-friendly documentation for the website following the llms.txt specification … llms-txt-php - A library for writing and reading llms.txt Markdown files … server-llm-txt - MCP server that lets agents fetch and search llms.txt files / robots.txt lets automated tools know what access to a site is considered acceptable, such as for search indexing bots. llms.txt information is instead used on demand, when an agent needs information about a topic while assisting a user. / While sitemaps list all pages for search engines, llms.txt offers a curated overview for LLMs. … sitemap.xml is a list of all the indexable human-readable information available on a site. / pages with information that agents might need provide a clean markdown version of those pages at the same URL as the original page, either with .md appended (page.html.md) or with the extension replaced by .md (page.md). … rel=\"alternate\" type=\"text/markdown\" points to the markdown version of a page / The file can be placed at the site root, or at any path within it, covering the pages under that path. / rel=\"describedby\" points to the llms.txt file that covers it. … well-known URIs exist only at the origin root / Agents are expected to view or search llms.txt to find the information they need, then follow the relevant links. / And various libraries and plugins are available to integrate the llms.txt specification into your workflow: … VS Code PagePilot Extension - PagePilot is a VS Code Chat participant that automatically loads external context (documentation, APIs, README files) to provide enhanced responses. / server-llm-txt - MCP server that lets agents fetch and search llms.txt files / Mintlify - Docs platform that generates llms.txt and markdown page versions for every site it hosts / GitBook - Serves an llms.txt file for published docs sites / A proposal to standardise on using an /llms.txt file … Yoast SEO - WordPress plugin that generates and maintains an llms.txt file / AIOSEO - WordPress plugin with an llms.txt generator / A proposal to standardise on using an /llms.txt file … Wix - Generates an llms.txt file for every Wix site",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://ahrefs.com/blog/llmstxt-study/",
     "claim": "Louise Linehan (Ahrefs), *We Analyzed 137K Sites: 97% of llms.txt Files Never Get Read*, published 2026-06-15; modified 2026-08-27; data: May 2026",
     "date": null,
     "quote": "Proposed by Jeremy Howard, co-founder of Answer.AI and fast.ai, in 2024 / And despite the filename, it is not a robots.txt-style directive: it controls nothing and blocks nothing. / adopted llms.txt, despite the fact that no major AI platform has ever committed to reading it. / of those files received zero traffic in May 2026. Nothing fetched them at all. / 96% of the requests that did reach llms.txt files came from bots. 19.5% of fetches came from named AI tools (of the 3% of files that weren't ignored). GPTBot is top and Claude-Code is second, ahead of every AI search and assistant bot. … Aside from statespace-indexer and GPTBot, Claude-Code (Anthropic's coding agent), out-fetched every AI retrieval bot, every AI assistant, and every AI training crawler. / 28% of the 137K domains using Ahrefs Web Analytics publish an llms.txt file. 97% of those files received zero traffic in May 2026. Nothing fetched them at all. 96% of the requests that did reach llms.txt files came from bots. 19.5% of fetches came from named AI tools (of the 3% of files that weren't ignored). GPTBot is top and Claude-Code is second, ahead of every AI search and assistant bot. 12% of fetches come from the industry studying itself: GEO/AEO tools, llms.txt checker tools, and researchers. Zero requests came from AI bots for llms.txt files that don't exist. / SEO audit tools … 4,776 21.7% Other and unidentified … 3,278 14.9% General web crawlers … 2,871 13.1% Tech profiling tools … 2,546 11.6% AI agents & agentic infrastructure … 2,302 10.5% GEO/AEO tools … 1,278 5.8% AI training crawlers … 1,179 5.3% llms.txt discoverability bots … 793 3.6% Service and social bots … 645 2.9% Research bots … 585 2.7% AI assistants … 559 2.5% AI retrieval bots … 233 1.1% / SEO audit tools includes Ahrefs' own crawlers (SiteAuditBot, Ahrefs Bot, and Ahrefs Site Audit), which together account for 2,334 requests (10.6% of total). … Bot categories sum to 96% of total requests; the remaining 4% (930 requests) came from humans. / The bot traffic splits into three stories: AI bots consuming the file (19.5%) A long tail of anonymous scrapers (14.9%) An industry auditing it (12.1%) … Aside from statespace-indexer and GPTBot, Claude-Code (Anthropic's coding agent), out-fetched every AI retrieval bot, every AI assistant, and every AI training crawler.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://llmstxt.org/changes.html",
     "claim": "Jeremy Howard, *Changes*, August 2026; HTTP last-modified 2026-09-24",
     "date": null,
     "quote": "v2 (August 2026) … v1 specified one URL form for markdown versions, .md appended to the full page URL (page.html.md). Some publishing tools instead replace the extension (page.md), so v2 allows both. … v1 said nothing about how llms.txt should be consumed, and described the llms_txt2ctx tool for expanding a file into an LLM context. … The context-expansion tooling is no longer part of the proposal / Changes v2 (August 2026) / The context-expansion tooling is no longer part of the proposal, and with it goes the special meaning of the Optional section, which told those tools what to omit. Optional sections are still allowed, and remain a useful convention for secondary links, but they no longer carry mechanical semantics. / v1 specified one URL form for markdown versions, .md appended to the full page URL (page.html.md). Some publishing tools instead replace the extension (page.md), so v2 allows both. / described the llms_txt2ctx tool for expanding a file into an LLM context. v2 instead states the expectation directly: agents view or search the llms.txt to find what they need, then follow the relevant links, which should point to LLM-friendly content. The context-expansion tooling is no longer part of the proposal, and with it goes the special meaning of the Optional section, which told those tools what to omit.",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://getpublii.com/blog/llms-txt-complete-guide.html",
     "claim": "Publii, *The complete guide to llms.txt*, BuiltWith reading 17 October 2026; fetched 2026-11-06",
     "date": null,
     "quote": "You may also come across llms-full.txt. It is exactly what the name suggests: the documentation gathered into one large file. That can be handy when someone deliberately loads the whole thing into an AI tool. It can also become enormous and go stale quickly / 14,586,789 is the kind of number / BuiltWith reported when we checked on October 17, 2026. Our October 2025 snapshot showed 844,473.",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://installmap.com/research/llms-txt-statistics.csv",
     "claim": "Installmap, *llms.txt statistics (CSV)*, crawls through September 2026; fetched 2026-11-06",
     "date": null,
     "quote": "16 of the 695 valid llms.txt files on Tranco top-7,755 domains on September 23, 2026 (2.3%) contain instructions that steer what an AI assistant recommends / In Installmap's crawl, 695 of the 7,749 domains in the Tranco top 7,755 (9.0%) served a valid llms.txt at the bare domain on September 23, 2026; 2,147 did not answer the request, so the share of domains that answered is 12.4%. / 16 of the 695 valid llms.txt files on Tranco top-7,755 domains on September 23, 2026 (2.3%) contain instructions that steer / Counting only llms.txt files with no plugin or Shopify signature, 19.0% of Inc 5000 domains have one, against 28.3% of unicorns and 10.7% of the Fortune 500, in Installmap's September 2026 crawl. / 36.2% of the 1,261 Y Combinator companies from the 2025 and 2026 batches serve an llms.txt, against 23.3% of the 909 companies from the 2012 to 2017 batches, in Installmap's September 2026 crawl. / Originality.ai's tracker counted 4,088 llms.txt files in June 2025 and 36,120 in May 2026, 8.8 times as many. / llms-full.txt files grew from 23 to 2,463 between June 2025 and May 2026",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://installmap.com/research/llms-txt-ai-instructions",
     "claim": "Installmap, *Everyone is hilariously prompt-injecting AI via llms.txt and you aren't*, 2026-09-23; fetched 2026-11-11",
     "date": null,
     "quote": "16 of the 695 llms.txt files we read at bare domains (2.3%) carry steering instructions. Another 29 (4.2%) tell assistants to send users to the company's own pages or not to guess facts, and 49 (7.1%) set usage, licensing or agent-integration terms. / None of the 7,749 homepages hid text addressed to AI, and no file said \"ignore previous instructions\".",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://ai.pydantic.dev/llms.txt",
     "claim": "Pydantic, *Pydantic AI*, HTTP 200; fetched 2026-11-04",
     "date": null,
     "quote": "Load a repo's AGENTS.md and CLAUDE.md instruction files into a Pydantic AI agent / HTTP 200 ... content-type: text/plain; charset=utf-8 ... x-pydantic-site-worker: 1 ... ## Querying This Documentation ... agent query parameters (`intent`, `stack` and `harness`) ... ?intent=<intent>&stack=<stack>&harness=<harness> ... # Pydantic AI > GenAI Agent Framework, the Pydantic way ... [Pydantic AI](https://pydantic.dev/docs/ai/overview/index.md)",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://www.rfc-editor.org/rfc/rfc9727.html",
     "claim": "K. Smith (Vodafone), *api-catalog: A Well-Known URI and Link Relation to Help Discovery of APIs*, published June 2025",
     "date": null,
     "quote": "This document defines the \"api-catalog\" well-known URI and link relation. It is intended to facilitate automated discovery and usage of published Application Programming Interfaces (APIs).",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://developers.openai.com/api/docs/bots",
     "claim": "OpenAI, *Overview of OpenAI Crawlers*, fetched 2026-11-03",
     "date": null,
     "quote": "OpenAI uses OAI-SearchBot and GPTBot robots.txt tags to enable webmasters to manage how their sites and content work with AI.",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://developers.google.com/search/docs/fundamentals/ai-optimization-guide",
     "claim": "Google Search Central, *Google's Guide to Optimizing for Generative AI Features on Google Search*, updated 2026-07-10",
     "date": null,
     "quote": "LLMS.txt files and other \"special\" markup: You don't need to create new machine readable files, AI text files, markup, or Markdown to appear in Google Search (including its generative AI capabilities), as Google Search itself doesn't use them.",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://platform.claude.com/llms.txt",
     "claim": "Anthropic, *platform.claude.com/llms.txt*, HTTP 200; fetched 2026-10-30",
     "date": null,
     "quote": "# Anthropic Developer Documentation … https://platform.claude.com/docs/mcp (Streamable HTTP transport) … https://platform.claude.com/docs/sdk-versions.json … English (en) - 826 pages - /docs … llms-full.txt … content-type: text/plain; charset=utf-8",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://developers.openai.com/llms.txt",
     "claim": "OpenAI, *developers.openai.com/llms.txt*, HTTP 200; fetched 2026-10-30",
     "date": null,
     "quote": "# OpenAI Developers … Product indexes route to detailed pages; documentation indexes also provide Markdown pages and full-document exports. … [OpenAI API guides and reference](https://developers.openai.com/api/llms.txt) … [Codex developer tools](https://developers.openai.com/codex/llms.txt) … [Agentic Commerce Protocol](https://developers.openai.com/commerce/llms.txt) … [OpenAI Cookbook examples](https://developers.openai.com/cookbook/llms.txt) … content-type: text/plain; charset=utf-8 … date: Fri, 30 Oct 2026",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://ai.google.dev/gemini-api/docs/llms.txt",
     "claim": "Google AI, *Gemini API llms.txt*, HTTP 200; fetched 2026-10-30",
     "date": null,
     "quote": "# Gemini API Gemini API Docs and API Reference … /gemini-api/docs/ … Environments in managed agents … content-type: text/markdown; charset=utf-8",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://developers.cloudflare.com/llms.txt",
     "claim": "Cloudflare, *developers.cloudflare.com/llms.txt*, HTTP 200; fetched 2026-10-30",
     "date": null,
     "quote": "# Cloudflare Developer Documentation … Each product below links to its own llms.txt, which contains a full index of that product's documentation pages … content-type: text/plain; charset=utf-8 … date: Fri, 30 Oct 2026",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://docs.stripe.com/llms.txt",
     "claim": "Stripe, *docs.stripe.com/llms.txt*, HTTP 200; fetched 2026-10-30",
     "date": null,
     "quote": "# Stripe Documentation … check the npm registry … https://www.npmjs.com/package/stripe … https://pypi.org/project/stripe/ … [sandboxes](https://docs.stripe.com/sandboxes.md) … content-type: text/markdown; charset=utf-8 … date: Fri, 30 Oct 2026",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://cursor.com/llms.txt",
     "claim": "Cursor, *Cursor Documentation*, HTTP 200; fetched 2026-11-04",
     "date": null,
     "quote": "Content-Type: text/plain; charset=utf-8 … Link: </llms.txt>; rel=\"describedby\"; type=\"text/plain\"; title=\"llms.txt\", </docs/sitemap.xml>; rel=\"sitemap\"; type=\"application/xml\" … # Cursor Documentation … https://cursor.com/docs/get-started/quickstart.md",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://vercel.com/llms.txt",
     "claim": "Vercel, *Vercel*, HTTP 200; fetched 2026-11-04",
     "date": null,
     "quote": "Content-Type: text/plain; charset=utf-8 … # Vercel … ## When to use Vercel … ## How agents should use Vercel … [Vercel REST API OpenAPI description](https://vercel.com/openapi.json) … ## Optional … [Agent resource catalog](https://vercel.com/.well-known/ai-catalog.json) … [Product taxonomy](https://vercel.com/docs/taxonomy.json) … [Documentation graph](https://vercel.com/docs/graph.json)",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://supabase.com/docs/llms.txt",
     "claim": "Supabase (Docs), *Supabase Docs*, HTTP 200; fetched 2026-11-04",
     "date": null,
     "quote": "Content-Type: text/plain; charset=utf-8 … # Supabase Docs … For the complete documentation in a single file, see [Full Documentation](https://supabase.com/llms-full.txt). … [Supabase - AI & Vectors](https://supabase.com/docs/guides/ai.md) … [Supabase Management API OpenAPI spec](https://supabase.com/openapi.json) … [Supabase MCP server](https://mcp.supabase.com/mcp)",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://modelcontextprotocol.io/llms.txt",
     "claim": "Model Context Protocol (MCP), *Model Context Protocol*, HTTP 200; fetched 2026-11-04",
     "date": null,
     "quote": "HTTP 200 ... content-type: text/plain; charset=utf-8 ... # Model Context Protocol ... [What is the Model Context Protocol (MCP)?](https://modelcontextprotocol.io/docs/2026-07-28/getting-started/intro.md)",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://docs.cdp.coinbase.com/llms.txt",
     "claim": "Coinbase Developer Platform, *Coinbase Developer Documentation*, HTTP 200; fetched 2026-11-04",
     "date": null,
     "quote": "HTTP 200 ... content-type: text/plain; charset=utf-8 ... # Coinbase Developer Documentation ... [Docs (526 pages)](https://docs.cdp.coinbase.com/_llms/docs.txt) ... [API Reference (906 pages)](https://docs.cdp.coinbase.com/_llms/api-reference.txt) ... [SDKs (1523 pages)](https://docs.cdp.coinbase.com/_llms/sdks.txt) ... [Settle customer stablecoins as USD](https://docs.cdp.coinbase.com/recipes/settle-customer-stablecoins-as-usd.md)",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://svelte.dev/llms.txt",
     "claim": "Svelte, *Svelte Documentation for LLMs*, HTTP 200; fetched 2026-11-04",
     "date": null,
     "quote": "HTTP 200 ... content-type: text/plain; charset=utf-8 ... # Svelte Documentation for LLMs ... [Abridged documentation](https://svelte.dev/llms-medium.txt) ... [Compressed documentation](https://svelte.dev/llms-small.txt) ... [Complete documentation](https://svelte.dev/llms-full.txt)",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://bun.sh/llms.txt",
     "claim": "Bun, *Bun*, HTTP 200; fetched 2026-11-04",
     "date": null,
     "quote": "HTTP 200 ... content-type: text/plain; charset=utf-8 ... # Bun ... [Welcome to Bun](https://bun.com/docs/index.md)",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://docs.langchain.com/llms.txt",
     "claim": "LangChain, *Docs by LangChain*, HTTP 200; fetched 2026-11-04",
     "date": null,
     "quote": "HTTP 200 ... content-type: text/plain; charset=utf-8 ... # Docs by LangChain > Documentation for LangSmith, Fleet, and our open source packages. ... [AGENT DEVELOPMENT LIFECYCLE (1518 pages)](https://docs.langchain.com/_llms/agent-development-lifecycle.txt) ... [PRODUCTS AND SETUP (223 pages)](https://docs.langchain.com/_llms/products-and-setup.txt)",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://clerk.com/llms.txt",
     "claim": "Clerk, *Clerk*, HTTP 200; fetched 2026-11-04",
     "date": null,
     "quote": "HTTP 200 ... content-type: text/plain; charset=utf-8 ... # Clerk > Clerk is user management for developers ... Append `.md` to any `/docs`, `/articles`, `/blog`, `/changelog`, or `/glossary` URL ... [Backend API](https://clerk.com/openapi.json)",
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://neon.tech/llms.txt",
     "claim": "Neon, *Neon Postgres*, HTTP 200; fetched 2026-11-04",
     "date": null,
     "quote": "HTTP 200 ... content-type: text/plain; charset=utf-8 ... x-nextjs-rewritten-path: /docs/llms.txt ... # Neon Postgres > Neon is a complete set of cloud backend primitives built around Lakebase Postgres ... [Claimable Neon](https://neon.com/auth.md) ... neon init ... Append `.md` to any doc URL",
     "ref": 25
    },
    {
     "label": "[26]",
     "url": "https://developer.chrome.com/docs/lighthouse/agentic-browsing/llms-txt",
     "claim": "Chrome for Developers, *llms.txt*, updated 2026-05-05",
     "date": null,
     "quote": "Lighthouse flags the pages if a server error occurs when attempting to retrieve the llms.txt file. If the file is not provided by the server (resulting in a 404), the audit is marked as Not Applicable (N/A), as providing the file is optional at the moment. … /llms.txt … Last updated 2026-05-05 UTC.",
     "ref": 26
    },
    {
     "label": "[27]",
     "url": "https://mintlify.com/docs/llms.txt",
     "claim": "Mintlify, *Mintlify*, HTTP 200; fetched 2026-11-04",
     "date": null,
     "quote": "HTTP 200 ... content-type: text/plain; charset=utf-8 ... # Mintlify > Mintlify is a platform for building and hosting documentation websites. ... mint agent setup ... [Fix llms.txt returning 404 while llms-full.txt works](https://www.mintlify.com/docs/help-center/llms-txt-returns-404-but-llms-full-txt-works.md) ... [openapi](/docs/openapi.json) ... [admin-openapi](/docs/admin-openapi.json)",
     "ref": 27
    },
    {
     "label": "[28]",
     "url": "https://directory.llmstxt.cloud/",
     "claim": "llms.txt cloud directory, *llms.txt directory*, checked 2026-11-04",
     "date": null,
     "quote": "Mintlify / 4,092 Websites 1,960 Products 870 Developer tools 560 AI 409 Finance 293 … Websites listed 4,092 Total llms.txt tokens 51M Total llms-full.txt tokens 390M",
     "ref": 28
    },
    {
     "label": "[29]",
     "url": "https://docs.gitbook.com/llms.txt",
     "claim": "GitBook, *GitBook Documentation*, HTTP 200; fetched 2026-11-04",
     "date": null,
     "quote": "HTTP 200 ... content-type: text/markdown; charset=utf-8 ... # GitBook Documentation ... [LLM-ready docs](https://gitbook.com/docs/getting-started/llm-ready-docs.md)",
     "ref": 29
    },
    {
     "label": "[30]",
     "url": "https://llmstxt.site/",
     "claim": "llms.txt directory, *llms.txt directory - Find llms.txt files across the web*, checked 2026-11-04",
     "date": null,
     "quote": "GitBook",
     "ref": 30
    },
    {
     "label": "[31]",
     "url": "https://www.rankability.com/blog/llms-txt-adoption/",
     "claim": "Rankability, *llms.txt Adoption Research Report*, published 2026-09-18",
     "date": null,
     "quote": "9.3% of the top 1,000 domains serve a confirmed llms.txt or llms-full.txt file. / This is a snapshot of root-level file availability, not a full specification audit or proof that an AI platform uses the file.",
     "ref": 31
    },
    {
     "label": "[32]",
     "url": "https://vercel.com/kb/guide/make-your-site-readable-by-ai-agents",
     "claim": "Vercel and Ora, *Make your site readable by AI agents*, published 2026-08-28; modified 2026-09-03",
     "date": null,
     "quote": "we observed 1,033 agent runs across 25 sites and ran 190 controlled fetch probes. / The trace results are observational and run-weighted. / Agents reached llms.txt through links in 356 of 416 attributed fetches, or 86%. Of the 329 runs that reached it, 325 had a scorable steering result. Of those 325 runs, 117, or 36%, later fetched a page it listed. Across all 329 reaching runs, 120, or 36%, grounded the final answer in its content.",
     "ref": 32
    },
    {
     "label": "[33]",
     "url": "https://llmtxt.info/llms-txt-adoption/",
     "claim": "LLMtxt Adoption Directory, *llms.txt adoption panel*, latest run 2026-10-05; fetched 2026-11-06",
     "date": null,
     "quote": "a fixed panel of 219 notable hosts across eight sectors / Latest run: 2026-10-05. / of 217 tested hosts serve llms.txt / 14.0 KB / verified live files in the directory / | Developer tools | 61 | 44 | 72.1% | / | SaaS | 47 | 32 | 68.1% | / | Media | 14 | 2 | 14.3% |",
     "ref": 33
    },
    {
     "label": "[34]",
     "url": "https://www.chris-green.net/post/million-websites-in-search-of-llms-txt",
     "claim": "Chris Green, *A million websites in search of llms.txt*, February 2025 crawl; May 2025 edit; fetched 2026-11-06",
     "date": null,
     "quote": "llmstxt.site lists roughly 170 sites. … directory.llmstxt.cloud claims around 684 sites. … I crawled the Majestic Million - representing a large cross-section of popular websites - and found only 0.015% (approximately 15 sites) had a valid LLMs.txt file in Feb 2025. … a proxy measurement using robots.txt files indicated around 210,000 valid files … Using this as a baseline, LLMs.txt adoption is around 0.007% / May 2025 data suggests there are 105 valid LLMs.txt now found",
     "ref": 34
    },
    {
     "label": "[35]",
     "url": "https://doi.org/10.5281/zenodo.22859104",
     "claim": "Jacob Ezra Gerrish (SEMPITE), *The llms.txt corpus: ecosystem health, file contents, and the Shopify platform default*, published 20 September 2026 (v1.1.0, version DOI 10.5281/zenodo.22862258)",
     "date": null,
     "quote": "All 1,563 llms.txt files registered / Published September 20, 2026 / 15.7% of listed files are broken at file level / re-fetched on 20 September 2026 / 265 files broken (17.0%), up from 245 (15.7%)",
     "ref": 35
    },
    {
     "label": "[36]",
     "url": "https://zenodo.org/api/records/22862258",
     "claim": "Jacob Ezra Gerrish (SEMPITE / Zenodo API), *Zenodo Record 22862258 Metadata (v1.1.0, concept DOI 10.5281/zenodo.22859104)*, 2026-09-20 (v1.1.0)",
     "date": null,
     "quote": "\"doi\": \"10.5281/zenodo.22862258\", \"conceptdoi\": \"10.5281/zenodo.22859104\"",
     "ref": 36
    }
   ],
   "form": "document-format",
   "governance": "Open for community input; a GitHub repository hosts the informal overview",
   "group": null,
   "history": [
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "llms-txt",
   "implementation": "multi-implementation",
   "last_verified": "2026-11-11",
   "name": "llms.txt",
   "native_status": "v2 of the proposal; informal overview, open for community input",
   "origin": {
    "org": "Jeremy Howard",
    "date": "2024-09-03"
   },
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "draft",
   "probe": {
    "method": "GET",
    "on_absent": "No llms.txt at this path; a more specific subpath file (e.g. /docs/llms.txt) may still exist and take precedence for that subpath",
    "parse": "200 response beginning with an H1 heading (`# <project/site name>`) followed by a blockquote summary, per the llms.txt v2 grammar",
    "path": "{origin}/llms.txt"
   },
   "question": "Where can an agent find a concise, curated map of a site's content, written for language models rather than browsers?",
   "scope": "general",
   "spec_url": "https://llmstxt.org",
   "step": "read",
   "summary_md": "**llms.txt** is a community proposal originated by Jeremy Howard (co-founder of Answer.AI and fast.ai) on September 3, 2024 (`2024-09-03`) that standardizes a Markdown file named `llms.txt` at `/llms.txt` or a subpath such as `/docs/llms.txt`. The file gives reading agents brief background context, guidance, and curated links to detailed Markdown pages under that path. Alongside `llms.txt` (where agents use the most specific file when multiple paths apply), pages expose a clean Markdown companion at the same URL with `.md` appended (`page.html.md`), the extension replaced (`page.md`), or `index.html.md` / `index.md` for directory URLs. Clients discover the Markdown companion via `rel=\"alternate\"` `type=\"text/markdown\"` and the covering `llms.txt` via `rel=\"describedby\"` in HTML `<link>` elements or HTTP `Link:` response headers. Revision `v2` (modified August 10, 2026) broadened Markdown companion URLs beyond v1's single appended-extension form and retired the v1 `llms_txt2ctx` context-expansion tool and mechanical `Optional` omission semantics.",
   "track": "community",
   "version": {
    "label": "v2",
    "date": "2026-08-10"
   },
   "watch": [
    {
     "type": "page",
     "url": "https://llmstxt.org",
     "selector": "main",
     "cadence": "weekly"
    },
    {
     "type": "github",
     "repo": "AnswerDotAI/llms-txt",
     "mode": "release",
     "version": false
    },
    {
     "type": "page",
     "url": "https://llmstxt.org/",
     "selector": "main"
    }
   ],
   "use_cases": [
    "serve-content-to-agents",
    "discover-my-api"
   ],
   "audience": [
    "site-owner",
    "agent-builder"
   ],
   "pairs_with": [
    "agents-md",
    "cloudflare-markdown-for-agents",
    "api-catalog-rfc9727",
    "ai-crawler-tokens-robots",
    "knowledge-linkset",
    "nlweb"
   ],
   "prerequisites": [],
   "hatnote_md": "Not to be confused with [AGENTS.md](/protocols/agents-md/) (repository coding-agent instructions) or [ai.txt](/protocols/ai-txt/) (AI usage permissions). For the glossary entry, see [llms.txt file](/terms/llms-txt-file/).",
   "tier": "flagship",
   "lifecycle_status": "active",
   "wire_archetype": "web_discovery",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-11",
   "v05_hatnote_html_md": "Not to be confused with [AGENTS.md](/protocols/agents-md/) (repository coding-agent instructions) or [ai.txt](/protocols/ai-txt/) (AI usage permissions). For the glossary entry, see [llms.txt file](/terms/llms-txt-file/). [1]",
   "v05_elevator_pitch_md": "`llms.txt` is a website index convention that gives AI assistants and coding agents a concise, human-curated map of a site's documentation and key resources via `/llms.txt` or subpath files like `/docs/llms.txt`. Instead of scraping noisy HTML pages cluttered with navigation, scripts, and layout markup—or ingesting an uncurated `sitemap.xml`—agents read one compact Markdown overview and fetch linked `.md` companion pages only when needed. [1]",
   "v05_lead_md": "**llms.txt** is a community proposal originated by Jeremy Howard (co-founder of Answer.AI and fast.ai) on September 3, 2024 (`2024-09-03`) that standardizes a Markdown file named `llms.txt` at `/llms.txt` or a subpath such as `/docs/llms.txt`. The file gives reading agents brief background context, guidance, and curated links to detailed Markdown pages under that path. [1][2] Alongside `llms.txt` (where agents use the most specific file when multiple paths apply), pages expose a clean Markdown companion at the same URL with `.md` appended (`page.html.md`), the extension replaced (`page.md`), or `index.html.md` / `index.md` for directory URLs. Clients discover the Markdown companion via `rel=\"alternate\"` `type=\"text/markdown\"` and the covering `llms.txt` via `rel=\"describedby\"` in HTML `<link>` elements or HTTP `Link:` response headers. [1] Revision `v2` (modified August 10, 2026) broadened Markdown companion URLs beyond v1's single appended-extension form and retired the v1 `llms_txt2ctx` context-expansion tool and mechanical `Optional` omission semantics. [1][3]",
   "v05_identity_sentence_md": "**llms.txt** is a community proposal originated by Jeremy Howard (co-founder of Answer.AI and fast.ai) on September 3, 2024 (`2024-09-03`) that standardizes a Markdown file named `llms.txt` at `/llms.txt` or a subpath such as `/docs/llms.txt`. The file gives reading agents brief background context, guidance, and curated links to detailed Markdown pages under that path. [1][2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Read](/category/read/) (`read`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "Jeremy Howard (Answer.AI / fast.ai), published 2024-09-03 [1][2]"
    },
    {
     "label": "Governed by",
     "value_md": "Jeremy Howard; open for community input via public GitHub repository [1]"
    },
    {
     "label": "Track",
     "value_md": "Vendor / Spec-Site Standard (informal community overview) [1]"
    },
    {
     "label": "Status",
     "value_md": "v2 proposal (informal overview, open for community input) [1]"
    },
    {
     "label": "Version",
     "value_md": "v2 (modified 2026-08-10; v1 published 2024-09-03) [1]"
    },
    {
     "label": "Message format",
     "value_md": "Markdown (required H1 title, optional summary blockquote, and H2 link lists) [1]"
    },
    {
     "label": "Headers",
     "value_md": "HTML `<link>` or HTTP `Link:` with `rel=\"alternate\"` `type=\"text/markdown\"` and `rel=\"describedby\"` [1]"
    },
    {
     "label": "Specification",
     "value_md": "[The /llms.txt file, v2](https://llmstxt.org) ([v2 Changes](https://llmstxt.org/changes.html)) [1][3]"
    },
    {
     "label": "Found at",
     "value_md": "`/llms.txt` at the site root or any subpath (e.g., `/docs/llms.txt`) [1]"
    }
   ],
   "v05_problem_md": "An HTML page wraps its information in navigation, ads, and JavaScript, so converting it back into clean text is difficult and imprecise, and every wasted token costs time and money while context windows are still too small for most websites. `sitemap.xml` lists indexable human-readable URLs, but it often lacks the LLM-readable versions, omits helpful external URLs, and is too large to stand in for a curated overview. [1] The site instead publishes a small `llms.txt` that agents view or search, with links aimed at LLM-friendly Markdown versions of pages. The file stays small enough to fit in context; the detail lives behind the links and is fetched only when needed. [1] `/robots.txt` tells automated tools what access is considered acceptable, such as for search indexing bots, whereas `llms.txt` is read on demand while an agent assists a user and was expected to help inference rather than training. It is also not a root-only `/.well-known/` URI under RFC 8615: an author who controls only a path, such as a GitHub Pages project site, can still publish a file there. [1]",
   "v05_mechanism_delta_md": "The site instead publishes a small `llms.txt` that agents view or search, with links aimed at LLM-friendly Markdown versions of pages. The file stays small enough to fit in context; the detail lives behind the links and is fetched only when needed. [1]",
   "v05_scope_boundary_md": "`/robots.txt` tells automated tools what access is considered acceptable, such as for search indexing bots, whereas `llms.txt` is read on demand while an agent assists a user and was expected to help inference rather than training. It is also not a root-only `/.well-known/` URI under RFC 8615: an author who controls only a path, such as a GitHub Pages project site, can still publish a file there. [1]",
   "v05_fuzzy_additions": [
    {
     "id": "section-order-and-file-list-syntax",
     "heading": "Section order and file-list syntax",
     "body_md": "Markdown, rather than XML, provides the structure so language models and agents can read `llms.txt` directly while classical parsers and regular expressions process its fixed section order. Both the canonical FastHTML specimen (`fastht.ml/docs/`) and the minimal reference mock in the specification follow the same sequence: an H1 title, a summary blockquote, non-heading notes, and H2 file lists. [1]",
     "bullets": [
      {
       "label": "Required H1 and summary header",
       "text_md": "An optional byte-order mark (`BOM`) may precede the H1, which names the project or site and is the only required section. A blockquote then holds the key summary, followed by zero or more non-heading paragraphs or lists with project detail before any H2 section begins. [1]"
      },
      {
       "label": "H2 section file lists",
       "text_md": "Each H2 heading opens a file list of URLs where further detail is available: the specification's minimal reference mock uses `## Section name` and `## Optional`, while the canonical FastHTML specimen uses `## Docs`, `## Examples`, and `## Optional`. Pre-H2 project notes—such as the FastAPI compatibility bullet under `Important notes:`—stay above `## Docs` rather than appearing as file-link entries. [1]"
      },
      {
       "label": "Entry link and colon description",
       "text_md": "Every list item starts with a required Markdown hyperlink `[name](url)`, optionally followed by `:` and notes about the file. In the specification's reference mock, `- [Link title](https://link_url): Optional link details` includes anchor text, a URL, and a colon description, whereas the `## Optional` mock entry `- [Link title](https://link_url)` omits the colon and description. [1]"
      },
      {
       "label": "Secondary links under ## Optional",
       "text_md": "The `## Optional` section holds secondary links an agent can skip when a shorter context is needed—in the FastHTML specimen, the Starlette documentation subset rather than the quick start under `## Docs`. Revision `v2` retains `## Optional` as a convention for secondary links, but it no longer carries mechanical semantics telling expansion tools what to omit. [1][3]"
      }
     ]
    },
    {
     "id": "companion-markdown-pages-and-context-expansion",
     "heading": "Companion Markdown pages and context expansion",
     "body_md": "Links in `llms.txt` should point at LLM-friendly Markdown pages. `/docs/llms.txt` covers everything in `/docs/`. FastHTML's `llms.txt` sits at `/docs/` for its documentation, and a docs page is also published at the same URL with a `.md` extension. [1]",
     "bullets": [
      {
       "label": "Why both .md spellings exist",
       "text_md": "v1 allowed one spelling: `.md` appended, producing `page.html.md`. Tools that replace the extension emit `page.md`, which `v2` also allows. URLs with no file name append `index.html.md` or `index.md`. `nbdev` creates `.md` versions of every page by default, including the regenerated Answer.AI and fast.ai docs. [1][3]"
      },
      {
       "label": "One Link header names both",
       "text_md": "The example header is `Link: </docs/page.html.md>; rel=\"alternate\"; type=\"text/markdown\", </docs/llms.txt>; rel=\"describedby\"`. `rel=\"alternate\"` with `type=\"text/markdown\"` names the Markdown page; `rel=\"describedby\"` names the covering `llms.txt`. The same relations work as HTML `<link>` elements, and the header can be set on the `.md` files from a CDN without editing pages. [1]"
      },
      {
       "label": "llms_txt2ctx and llms-full.txt",
       "text_md": "`llms_txt2ctx` expanded an `llms.txt` into an LLM context and used the Optional section to decide what to omit. v2 instead has agents view or search the `llms.txt` and follow links to LLM-friendly content. Sites still publish `llms-full.txt`, one large gathered file for a deliberate full load, which can become enormous and go stale quickly. [3][4]"
      },
      {
       "label": "Python, CLI, and JavaScript readers, and untrusted publisher content",
       "text_md": "The `Code` menu on `llmstxt.org` lists `Python module & CLI`, `Python source`, and `JavaScript`, plus a sample `JavaScript Implementation`. `llms-txt-php` writes and reads `llms.txt` files, `vitepress-plugin-llms` generates documentation that follows the specification, and `server-llm-txt` lets agents fetch and search those files. Because `llms.txt` is a self-declared, unverified publisher file that neither grants nor denies access (unlike `/robots.txt`), consuming agents should treat retrieved `llms.txt` content as untrusted input. Installmap's 23 September 2026 crawl read 695 bare-domain `llms.txt` files: 16 (2.3%) carry overt brand or recommendation-steering instructions, another 29 (4.2%) tell assistants to send users to the company's own pages or not to guess facts, and 49 (7.1%) set usage, licensing, or agent-integration terms. None of the 7,749 homepages hid text addressed to AI, and no file said \"ignore previous instructions\". [1][5][6]"
      }
     ]
    }
   ],
   "v05_diagram": null,
   "v05_wire_artifact": {
    "title": "Canonical `llms.txt` specimen (FastHTML, cut down)",
    "heading": "Canonical `llms.txt` specimen (FastHTML, cut down)",
    "lang": "markdown",
    "code": "# FastHTML\n\n> FastHTML is a python library which brings together Starlette, Uvicorn, HTMX, and fastcore's `FT` \"FastTags\" into a library for creating server-rendered hypermedia applications.\n\nImportant notes:\n\n- Although parts of its API are inspired by FastAPI, it is *not* compatible with FastAPI syntax and is not targeted at creating API services\n- FastHTML is compatible with JS-native web components and any vanilla JS library, but not with React, Vue, or Svelte.\n\n## Docs\n\n- [FastHTML quick start](https://fastht.ml/docs/tutorials/quickstart_for_web_devs.html.md): A brief overview of many FastHTML features\n- [HTMX reference](https://github.com/bigskysoftware/htmx/blob/master/www/content/reference.md): Brief description of all HTMX attributes, CSS classes, headers, events, extensions, js lib methods, and config options\n\n## Examples\n\n- [Todo list application](https://github.com/AnswerDotAI/fasthtml/blob/main/examples/adv_app.py): Detailed walk-thru of a complete CRUD app in FastHTML showing idiomatic use of FastHTML and HTMX patterns.\n\n## Optional\n\n- [Starlette full documentation](https://gist.githubusercontent.com/jph00/809e4a4808d4510be0e3dc9565e9cbd3/raw/9b717589ca44cedc8aaf00b2b8cacef922964c0f/starlette-sml.md): A subset of the Starlette documentation useful for FastHTML development.",
    "caption_md": "Cut-down FastHTML `llms.txt` from the specification, with an H1, a summary blockquote, and H2 file lists `## Docs`, `## Examples`, and `## Optional`. [1]"
   },
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "Sitemaps XML (sitemaps.org)",
      "spec_or_rfc": "sitemaps.org",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "Lists publisher-supplied URLs for discovery, without llms.txt's annotated Markdown guide structure. [1]"
     },
     {
      "name": "robots.txt (RFC 9309)",
      "spec_or_rfc": "RFC 9309",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "Declares automated crawler access rules at `/robots.txt`, whereas `/llms.txt` provides an on-demand Markdown content guide during inference. [1]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "agents-md",
      "target_name": "AGENTS.md",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Supplies repository-level coding instructions via `AGENTS.md`, whereas `/llms.txt` indexes published web documentation at the site root or a subpath. [1][7]"
     },
     {
      "target_id": "cloudflare-markdown-for-agents",
      "target_name": "Markdown for Agents",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "Negotiates Markdown representations on existing URLs, whereas `/llms.txt` links static `.md` page twins via `rel=\"alternate\"` `type=\"text/markdown\"`. [1]"
     },
     {
      "target_id": "api-catalog-rfc9727",
      "target_name": "api-catalog (RFC 9727)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Publishes machine-readable API discovery documents at the origin-root `/.well-known/api-catalog` URI (`RFC 9727`), whereas `/llms.txt` indexes Markdown documentation at the site root or any subpath. [1][8]"
     },
     {
      "target_id": "ai-crawler-tokens-robots",
      "target_name": "AI crawler tokens in robots.txt",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Governs AI crawler access using `robots.txt` product tokens like `GPTBot` and `OAI-SearchBot`, whereas `/llms.txt` curates links without access controls. [2][9]"
     },
     {
      "target_id": "knowledge-linkset",
      "target_name": "The 'knowledge-linkset' Well-Known URI for Publishing Knowledge Artefacts",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "Serves a JSON linkset at origin-root `/.well-known/knowledge-linkset`, whereas `/llms.txt` serves subpath-capable Markdown advertised via `rel=\"describedby\"`. [1]"
     },
     {
      "target_id": "nlweb",
      "target_name": "NLWeb",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Exposes a conversational query endpoint over site content, whereas `/llms.txt` serves a static Markdown index that agents read and follow. [1]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (25 probed or cited examples across 3 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).",
    "side_a": {
     "visible": true,
     "heading": "Documentation origins publishing /llms.txt",
     "col4_header": "Published artifacts & companions",
     "note_md": "Publishing ≠ consumption: The producers table lists publishers that serve an `/llms.txt` endpoint as of the stated check date, not evidence that major AI search engines or assistant providers automatically fetch third-party `/llms.txt` files during retrieval (Google Search states it does not use `LLMS.txt`, and Ahrefs observed that 97% of HTTP-200 `/llms.txt` files received zero requests in May 2026). [2][10]",
     "rows": [
      {
       "actor": "Anthropic (Claude API docs)",
       "role": "Docs platform",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Serves `https://platform.claude.com/llms.txt` as `text/plain` (`# Anthropic Developer Documentation`), indexing 826 `/docs` pages, `llms-full.txt`, and `https://platform.claude.com/docs/mcp`.",
       "source_md": "[Anthropic, platform.claude.com/llms.txt (checked 2026-10-30)](https://platform.claude.com/llms.txt) [11]"
      },
      {
       "actor": "OpenAI (Developer Platform docs)",
       "role": "Docs platform",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Serves `https://developers.openai.com/llms.txt` as `text/plain` (`# OpenAI Developers`), indexing API, Codex, Agentic Commerce, and Cookbook `llms.txt` files.",
       "source_md": "[OpenAI, developers.openai.com/llms.txt (checked 2026-10-30)](https://developers.openai.com/llms.txt) [12]"
      },
      {
       "actor": "Google AI (Gemini API docs)",
       "role": "Docs platform",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Serves `https://ai.google.dev/gemini-api/docs/llms.txt` as `text/markdown` (`# Gemini API`), indexing Gemini API docs, API reference, and managed-agent environment pages.",
       "source_md": "[Google AI, Gemini API llms.txt (checked 2026-10-30)](https://ai.google.dev/gemini-api/docs/llms.txt) [13]"
      },
      {
       "actor": "Cloudflare (Developer docs)",
       "role": "Docs platform",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Serves `https://developers.cloudflare.com/llms.txt` as `text/plain` (`# Cloudflare Developer Documentation`), linking each Cloudflare product to its own `llms.txt` index.",
       "source_md": "[Cloudflare, developers.cloudflare.com/llms.txt (checked 2026-10-30)](https://developers.cloudflare.com/llms.txt) [14]"
      },
      {
       "actor": "Stripe (Documentation)",
       "role": "Docs platform",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Serves `https://docs.stripe.com/llms.txt` as `text/markdown` (`# Stripe Documentation`), linking `.md` page twins and npm/PyPI package registries.",
       "source_md": "[Stripe, docs.stripe.com/llms.txt (checked 2026-10-30)](https://docs.stripe.com/llms.txt) [15]"
      },
      {
       "actor": "Cursor",
       "role": "Docs platform",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-11-04",
       "col4_md": "Serves `https://cursor.com/llms.txt` as `text/plain` (`# Cursor Documentation`) with a `Link` header (`</llms.txt>; rel=\"describedby\"; type=\"text/plain\"; title=\"llms.txt\"`).",
       "source_md": "[Cursor Documentation, cursor.com/llms.txt (checked 2026-11-04)](https://cursor.com/llms.txt) [16]"
      },
      {
       "actor": "Vercel",
       "role": "Product site",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-11-04",
       "col4_md": "Serves `https://vercel.com/llms.txt` as `text/plain` (`# Vercel`), with an Optional section linking `/.well-known/ai-catalog.json`.",
       "source_md": "[Vercel, vercel.com/llms.txt (checked 2026-11-04)](https://vercel.com/llms.txt) [17]"
      },
      {
       "actor": "Supabase (Docs)",
       "role": "Docs platform",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-11-04",
       "col4_md": "Serves `https://supabase.com/docs/llms.txt` as `text/plain` (`# Supabase Docs`) under `/docs/`, linking `llms-full.txt`, OpenAPI spec, and MCP server.",
       "source_md": "[Supabase Docs, supabase.com/docs/llms.txt (checked 2026-11-04)](https://supabase.com/docs/llms.txt) [18]"
      },
      {
       "actor": "Model Context Protocol",
       "role": "Specification & docs origin",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-11-04",
       "col4_md": "Serves `https://modelcontextprotocol.io/llms.txt` (`# Model Context Protocol`, `text/plain`), indexing versioned `2026-07-28` specification and SDK `.md` pages.",
       "source_md": "[modelcontextprotocol.io/llms.txt](https://modelcontextprotocol.io/llms.txt) [19]"
      },
      {
       "actor": "Coinbase Developer Platform",
       "role": "Developer docs origin",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-11-04",
       "col4_md": "Serves `https://docs.cdp.coinbase.com/llms.txt` (`# Coinbase Developer Documentation`, `text/plain`), linking `/_llms/` sub-indexes, `.md` recipes, and OpenAPI specs.",
       "source_md": "[docs.cdp.coinbase.com/llms.txt](https://docs.cdp.coinbase.com/llms.txt) [20]"
      },
      {
       "actor": "Pydantic AI",
       "role": "Framework docs origin",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-11-04",
       "col4_md": "Serves `https://ai.pydantic.dev/llms.txt` (`# Pydantic AI`, `text/plain`), requesting `intent`, `stack`, and `harness` query parameters on fetches.",
       "source_md": "[ai.pydantic.dev/llms.txt](https://ai.pydantic.dev/llms.txt) [7]"
      },
      {
       "actor": "Svelte",
       "role": "Framework docs origin",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-11-04",
       "col4_md": "Serves `https://svelte.dev/llms.txt` (`# Svelte Documentation for LLMs`, `text/plain`), linking `llms-small.txt`, `llms-medium.txt`, and `llms-full.txt` bundles.",
       "source_md": "[svelte.dev/llms.txt](https://svelte.dev/llms.txt) [21]"
      },
      {
       "actor": "Bun",
       "role": "Runtime docs origin",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-11-04",
       "col4_md": "Serves `https://bun.sh/llms.txt` (`# Bun`, `text/plain`), indexing runtime, package manager, bundler, and TypeScript `.md` documentation pages.",
       "source_md": "[bun.sh/llms.txt](https://bun.sh/llms.txt) [22]"
      },
      {
       "actor": "LangChain",
       "role": "Framework docs origin",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-11-04",
       "col4_md": "Serves `https://docs.langchain.com/llms.txt` (`# Docs by LangChain`, `text/plain`), linking recursive `/_llms/` sub-indexes and OpenAPI specs.",
       "source_md": "[docs.langchain.com/llms.txt](https://docs.langchain.com/llms.txt) [23]"
      },
      {
       "actor": "Clerk",
       "role": "Developer docs origin",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-11-04",
       "col4_md": "Serves `https://clerk.com/llms.txt` (`# Clerk`, `text/plain`), documenting `.md` URL suffixes and linking Backend and Frontend OpenAPI specs.",
       "source_md": "[clerk.com/llms.txt](https://clerk.com/llms.txt) [24]"
      },
      {
       "actor": "Neon",
       "role": "Database docs origin",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-11-04",
       "col4_md": "Serves `https://neon.tech/llms.txt` (`# Neon Postgres`, `text/plain`), rewritten from `/docs/llms.txt` with `neon init` agent setup instructions.",
       "source_md": "[neon.tech/llms.txt](https://neon.tech/llms.txt) [25]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Consuming harnesses, IDEs & validators",
     "col4_header": "Discovery & ingestion behavior",
     "note_md": null,
     "rows": [
      {
       "actor": "Chrome Lighthouse",
       "role": "Validator / CLI",
       "status": "Supported",
       "status_display": "Supported · as of 2026-05-05",
       "col4_md": "Agentic browsing audit fetches `llms.txt` and flags server errors; 404 is marked Not Applicable (updated 2026-05-05).",
       "source_md": "[Chrome for Developers, llms.txt (Lighthouse, updated 2026-05-05)](https://developer.chrome.com/docs/lighthouse/agentic-browsing/llms-txt) [26]"
      },
      {
       "actor": "Claude Code",
       "role": "Coding agent / IDE",
       "status": "Observed fetching",
       "status_display": "Observed fetching · as of 2026-05",
       "col4_md": "Observed fetching (`Claude-Code` trailed `GPTBot` and `statespace-indexer` among named AI fetchers in Ahrefs study); automatic discovery, parsing, and answer use unconfirmed.",
       "source_md": "[Ahrefs, llms.txt study (May 2026 dataset)](https://ahrefs.com/blog/llmstxt-study/) [2]"
      },
      {
       "actor": "VS Code PagePilot Extension",
       "role": "Coding agent / IDE",
       "status": "Listed integration",
       "status_display": "Listed integration · as of 2026-08-10",
       "col4_md": "Listed integration on `llmstxt.org` for VS Code context; implementation behavior not independently verified.",
       "source_md": "[The /llms.txt file, v2 — Integrations](https://llmstxt.org) [1]"
      },
      {
       "actor": "server-llm-txt",
       "role": "MCP server / harness",
       "status": "Listed integration",
       "status_display": "Listed integration · as of 2026-08-10",
       "col4_md": "Listed integration on `llmstxt.org` exposing `llms.txt` over MCP; implementation behavior not independently verified.",
       "source_md": "[The /llms.txt file, v2 — Integrations](https://llmstxt.org) [1]"
      }
     ]
    },
    "additional_tables": [
     {
      "visible": true,
      "heading": "CMS platforms, documentation engines & SEO plugins",
      "col4_header": "Generated paths & build mode",
      "note_md": null,
      "rows": [
       {
        "actor": "Mintlify",
        "role": "Documentation engine",
        "status": "Live (HTTP 200)",
        "status_display": "Live (HTTP 200) · checked 2026-11-04",
        "col4_md": "Automatically generates `llms.txt`, `llms-full.txt`, and `.md` pages for hosted sites; serves `https://mintlify.com/docs/llms.txt` (`# Mintlify`, `text/plain`).",
        "source_md": "[mintlify.com/docs/llms.txt](https://mintlify.com/docs/llms.txt) [27] · [Howard, The /llms.txt file, v2 (published 2024-09-03; modified 2026-08-10)](https://llmstxt.org) [1] · [directory.llmstxt.cloud](https://directory.llmstxt.cloud/) [28]"
       },
       {
        "actor": "GitBook",
        "role": "Documentation engine",
        "status": "Live (HTTP 200)",
        "status_display": "Live (HTTP 200) · checked 2026-11-04",
        "col4_md": "Automatically serves `llms.txt` and `.md` pages for published documentation sites, including `https://docs.gitbook.com/llms.txt` (`# GitBook Documentation`, `text/markdown`).",
        "source_md": "[docs.gitbook.com/llms.txt](https://docs.gitbook.com/llms.txt) [29] · [Howard, The /llms.txt file, v2 (published 2024-09-03; modified 2026-08-10)](https://llmstxt.org) [1] · [llmstxt.site](https://llmstxt.site/) [30]"
       },
       {
        "actor": "Yoast SEO",
        "role": "WordPress SEO plugin",
        "status": "Supported",
        "status_display": "Supported · as of 2026-08-10",
        "col4_md": "WordPress plugin documented on `llmstxt.org` that automatically generates and maintains an `llms.txt` file.",
        "source_md": "[Howard, The /llms.txt file, v2 (published 2024-09-03; modified 2026-08-10)](https://llmstxt.org) [1]"
       },
       {
        "actor": "AIOSEO",
        "role": "WordPress SEO plugin",
        "status": "Supported",
        "status_display": "Supported · as of 2026-08-10",
        "col4_md": "WordPress plugin documented on `llmstxt.org` that ships a built-in `llms.txt` generator.",
        "source_md": "[Howard, The /llms.txt file, v2 (published 2024-09-03; modified 2026-08-10)](https://llmstxt.org) [1]"
       },
       {
        "actor": "Wix",
        "role": "Hosted CMS platform",
        "status": "Supported",
        "status_display": "Supported · as of 2026-08-10",
        "col4_md": "Hosted website builder documented on `llmstxt.org` that generates an `llms.txt` file for every Wix site.",
        "source_md": "[Howard, The /llms.txt file, v2 (published 2024-09-03; modified 2026-08-10)](https://llmstxt.org) [1]"
       }
      ]
     }
    ],
    "censuses": [
     {
      "label": "Confirmed root-file availability under Rankability's response/content checks",
      "as_of": "2026-09-18",
      "value_md": "9.3% of the top 1,000 Tranco domains (93 confirmed adopters, 433 with no file, 474 inconclusive/blocked) and 8.3% of the top 10,000 Tranco domains (830 confirmed adopters, 4,959 with no file, 4,211 inconclusive/blocked) served a root llms.txt or llms-full.txt file under Rankability's response and content checks on 18 September 2026 (where llms-full.txt availability is not proof of index-grammar conformance), with 16 top-1,000 domains (1.6%) and 119 top-10,000 domains (1.2%) publishing both files. [31]"
     },
     {
      "label": "HTTP-200 publication & bot traffic (Ahrefs Web Analytics study)",
      "as_of": "2026-05",
      "value_md": "28% (~38,000) of 137,210 domains using Ahrefs Web Analytics published a root /llms.txt returning HTTP 200 in May 2026 (an upper bound that did not test spec well-formedness), but 97% of those files received zero requests; across the 3% (~1,100 domains, ~22,000 requests) that received traffic, 4% (930 requests) came from humans and 96% of total requests came from twelve bot categories (one-decimal category shares): SEO audit tools (21.7% of total requests, including 10.6% from Ahrefs' own crawlers), other and unidentified bots (14.9%), general web crawlers (13.1%), tech profiling tools (11.6%), named AI tools (19.5% combined: 10.5% AI agents and agentic infrastructure led by statespace-indexer and Claude-Code, 5.3% AI training crawlers led by GPTBot, 2.5% AI assistants, and 1.1% AI retrieval bots), an industry-auditing-itself group (12.1% combined: 5.8% GEO/AEO tools, 3.6% llms.txt discoverability bots, and 2.7% research bots), and service and social bots (2.9%)—while zero AI bot requests targeted non-existent (HTTP 404) /llms.txt paths. [2]"
     },
     {
      "label": "Observational, run-weighted trace analysis: 1,033 runs across 25 sites (Vercel study)",
      "as_of": "2026-08-28",
      "value_md": "In an observational, run-weighted trace analysis of 1,033 agent runs across 25 sites, agents reached llms.txt through in-page links in 356 of 416 attributed fetches (86%); among the 329 runs that reached an llms.txt file, 117 of 325 scorable runs (36%) subsequently fetched a page listed in the file, and 120 of 329 runs (36%) grounded their final answer in its content. [32]"
     },
     {
      "label": "Directory-reported website listings & token totals (directory.llmstxt.cloud)",
      "as_of": "2026-11-04",
      "value_md": "4,092 listed websites across Websites (1,960), Products (870), Developer tools (560), AI (409), and Finance (293), indexing 51 million total llms.txt tokens and 390 million total llms-full.txt tokens as of 4 November 2026. [28]"
     },
     {
      "label": "Installmap multi-cohort crawl & Originality.ai series",
      "as_of": "2026-09-23",
      "value_md": "In Installmap's 23 September 2026 crawl, 695 of 7,749 Tranco top-7,755 domains (9.0%) served a valid bare-domain llms.txt; 2,147 did not answer, so the share among domains that answered was 12.4%. Of those 695 valid files, 16 (2.3%) contained recommendation-steering instructions. Counting only llms.txt files with no plugin or Shopify signature, Installmap's September 2026 crawl found 19.0% of 4,931 Inc. 5000 domains, 28.3% of 1,058 unicorns, and 10.7% of 459 Fortune 500 domains. In Installmap's September 2026 crawl, 36.2% of 1,261 reachable Y Combinator companies from the 2025 and 2026 batches served an llms.txt, against 23.3% of 909 reachable companies from the 2012 to 2017 batches. Installmap quotes Originality.ai's tracker of more than 3 million websites: 4,088 llms.txt files in June 2025 and 36,120 in May 2026, while llms-full.txt grew from 23 to 2,463 over the same window. [5]"
     },
     {
      "label": "llmtxt.info adoption panel",
      "as_of": "2026-10-05",
      "value_md": "llmtxt.info's fixed panel of 219 notable hosts, fetched weekly, recorded on 2026-10-05 that 57.6% of 217 tested hosts served a qualifying llms.txt (125 verified files; median 14.0 KB). Sector rates in that run included developer tools 44/61 (72.1%), SaaS 32/47 (68.1%), and media 2/14 (14.3%). Unreachable hosts are excluded from the base. [33]"
     },
     {
      "label": "Early historical baseline — Chris Green Majestic Million crawl",
      "as_of": "2025-02",
      "value_md": "Early historical baseline: Chris Green wrote that his February 2025 crawl of the Majestic Million found \"only 0.015% (approximately 15 sites)\" with a valid LLMs.txt file—a source-side percentage/count discrepancy, since 0.015% of 1,000,000 is 150 sites whereas 15 sites is 0.0015% (against his ~210,000 valid robots.txt baseline, he reported ~0.007% adoption). At that time llmstxt.site listed roughly 170 sites and directory.llmstxt.cloud claimed around 684; a May 2025 edit on the same page reported 105 valid files. [34]"
     },
     {
      "label": "Publii reading of BuiltWith",
      "as_of": "2026-10-17",
      "value_md": "Publii reports that BuiltWith showed 844,473 live sites in Publii's October 2025 reading and 14,586,789 live websites when Publii checked on 17 October 2026. The page presents this as BuiltWith's detection of the file, not as evidence that an agent read it. [4]"
     },
     {
      "label": "SEMPITE llms.txt corpus (Zenodo)",
      "as_of": "2026-09-20",
      "value_md": "SEMPITE's Zenodo deposit (version 1.1.0, published 20 September 2026; concept DOI 10.5281/zenodo.22859104, version-pinned DOI 10.5281/zenodo.22862258) fetched all 1,563 llms.txt files registered in llmstxt.site, directory.llmstxt.cloud, and llmstxthub.com. A 5 August 2026 run found 15.7% broken at file level; the 20 September 2026 re-fetch found 265 files broken (17.0%), up from 245. [35][36]"
     }
    ],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "vercel-agent-readability",
     "target_name": "Agent Readability Spec",
     "relation_label": "Complements",
     "delta": "The guide treats /llms.txt as a readability artifact, while llms.txt is the Markdown file at /llms.txt or a subpath with a required H1, an optional blockquote, and H2 link sections.",
     "item_md": "**[Agent Readability Spec](/protocols/vercel-agent-readability/)** (Complements) — The guide treats /llms.txt as a readability artifact, while llms.txt is the Markdown file at /llms.txt or a subpath with a required H1, an optional blockquote, and H2 link sections."
    },
    {
     "target_id": "osi",
     "target_name": "Apache Ossie (formerly Open Semantic Interchange)",
     "relation_label": "Complements",
     "delta": "Ossie has no fixed web path, while llms.txt is a file at /llms.txt or a subpath.",
     "item_md": "**[Apache Ossie (formerly Open Semantic Interchange)](/protocols/osi/)** (Complements) — Ossie has no fixed web path, while llms.txt is a file at /llms.txt or a subpath."
    },
    {
     "target_id": "okf",
     "target_name": "Open Knowledge Format",
     "relation_label": "Peer alternative",
     "delta": "llms.txt is one Markdown file whose only required section is an H1; OKF is a multi-file directory.",
     "item_md": "**[Open Knowledge Format](/protocols/okf/)** (Peer alternative) — llms.txt is one Markdown file whose only required section is an H1; OKF is a multi-file directory."
    },
    {
     "target_id": "agents-txt",
     "target_name": "agents.txt",
     "relation_label": "Complements",
     "delta": "agents.txt names protocol support at /agents.txt, including MCP, A2A, and x402, while llms.txt is the Markdown file at /llms.txt or a subpath with a required H1 and H2 link sections.",
     "item_md": "**[agents.txt](/protocols/agents-txt/)** (Complements) — agents.txt names protocol support at /agents.txt, including MCP, A2A, and x402, while llms.txt is the Markdown file at /llms.txt or a subpath with a required H1 and H2 link sections."
    },
    {
     "target_id": "anthropic-agent-skills-format",
     "target_name": "Agent Skills",
     "relation_label": "Complements",
     "delta": "llms.txt proposes adding a Markdown file to websites, placed at the site root or at any path within it, with brief background information, guidance, and links to detailed Markdown files, while Agent Skills is a folder containing a SKILL.md file that agents load through progressive disclosure.",
     "item_md": "**[Agent Skills](/protocols/anthropic-agent-skills-format/)** (Complements) — llms.txt proposes adding a Markdown file to websites, placed at the site root or at any path within it, with brief background information, guidance, and links to detailed Markdown files, while Agent Skills is a folder containing a SKILL.md file that agents load through progressive disclosure."
    },
    {
     "item_md": "**[Read protocols](/category/read/)** — Category index for `read` standards."
    }
   ],
   "v05_compiled_md": "---\nid: llms-txt\ntitle: \"llms.txt\"\ntier: flagship\nlifecycle_status: active\ncategory: read\nform: document-format\nwire_archetype: web_discovery\nspec_url: https://llmstxt.org\nlast_checked: 2026-11-11\n---\n\n# llms.txt\n\n**Category:** [Read](/category/read/) (`read`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-11-11\n\n> *Not to be confused with [AGENTS.md](/protocols/agents-md/) (repository coding-agent instructions) or [ai.txt](/protocols/ai-txt/) (AI usage permissions). For the glossary entry, see [llms.txt file](/terms/llms-txt-file/). [1]*\n\n> **In brief:** `llms.txt` is a website index convention that gives AI assistants and coding agents a concise, human-curated map of a site's documentation and key resources via `/llms.txt` or subpath files like `/docs/llms.txt`. Instead of scraping noisy HTML pages cluttered with navigation, scripts, and layout markup—or ingesting an uncurated `sitemap.xml`—agents read one compact Markdown overview and fetch linked `.md` companion pages only when needed. [1]\n\n**llms.txt** is a community proposal originated by Jeremy Howard (co-founder of Answer.AI and fast.ai) on September 3, 2024 (`2024-09-03`) that standardizes a Markdown file named `llms.txt` at `/llms.txt` or a subpath such as `/docs/llms.txt`. The file gives reading agents brief background context, guidance, and curated links to detailed Markdown pages under that path. [1][2] Alongside `llms.txt` (where agents use the most specific file when multiple paths apply), pages expose a clean Markdown companion at the same URL with `.md` appended (`page.html.md`), the extension replaced (`page.md`), or `index.html.md` / `index.md` for directory URLs. Clients discover the Markdown companion via `rel=\"alternate\"` `type=\"text/markdown\"` and the covering `llms.txt` via `rel=\"describedby\"` in HTML `<link>` elements or HTTP `Link:` response headers. [1] Revision `v2` (modified August 10, 2026) broadened Markdown companion URLs beyond v1's single appended-extension form and retired the v1 `llms_txt2ctx` context-expansion tool and mechanical `Optional` omission semantics. [1][3]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Read](/category/read/) (`read`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | Jeremy Howard (Answer.AI / fast.ai), published 2024-09-03 [1][2] |\n| **Governed by** | Jeremy Howard; open for community input via public GitHub repository [1] |\n| **Track** | Vendor / Spec-Site Standard (informal community overview) [1] |\n| **Status** | v2 proposal (informal overview, open for community input) [1] |\n| **Version** | v2 (modified 2026-08-10; v1 published 2024-09-03) [1] |\n| **Message format** | Markdown (required H1 title, optional summary blockquote, and H2 link lists) [1] |\n| **Headers** | HTML `<link>` or HTTP `Link:` with `rel=\"alternate\"` `type=\"text/markdown\"` and `rel=\"describedby\"` [1] |\n| **Specification** | [The /llms.txt file, v2](https://llmstxt.org) ([v2 Changes](https://llmstxt.org/changes.html)) [1][3] |\n| **Found at** | `/llms.txt` at the site root or any subpath (e.g., `/docs/llms.txt`) [1] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Section order and file-list syntax](#section-order-and-file-list-syntax)\n3. [Companion Markdown pages and context expansion](#companion-markdown-pages-and-context-expansion)\n4. [Counterparts and related standards](#counterparts-and-related-standards)\n5. [Adoption and ecosystem](#adoption-and-ecosystem)\n6. [See also](#see-also)\n7. [References](#references)\n\n---\n\n## Problem and scope\n\nAn HTML page wraps its information in navigation, ads, and JavaScript, so converting it back into clean text is difficult and imprecise, and every wasted token costs time and money while context windows are still too small for most websites. `sitemap.xml` lists indexable human-readable URLs, but it often lacks the LLM-readable versions, omits helpful external URLs, and is too large to stand in for a curated overview. [1] The site instead publishes a small `llms.txt` that agents view or search, with links aimed at LLM-friendly Markdown versions of pages. The file stays small enough to fit in context; the detail lives behind the links and is fetched only when needed. [1] `/robots.txt` tells automated tools what access is considered acceptable, such as for search indexing bots, whereas `llms.txt` is read on demand while an agent assists a user and was expected to help inference rather than training. It is also not a root-only `/.well-known/` URI under RFC 8615: an author who controls only a path, such as a GitHub Pages project site, can still publish a file there. [1]\n\n### Canonical `llms.txt` specimen (FastHTML, cut down)\n\n```markdown\n# FastHTML\n\n> FastHTML is a python library which brings together Starlette, Uvicorn, HTMX, and fastcore's `FT` \"FastTags\" into a library for creating server-rendered hypermedia applications.\n\nImportant notes:\n\n- Although parts of its API are inspired by FastAPI, it is *not* compatible with FastAPI syntax and is not targeted at creating API services\n- FastHTML is compatible with JS-native web components and any vanilla JS library, but not with React, Vue, or Svelte.\n\n## Docs\n\n- [FastHTML quick start](https://fastht.ml/docs/tutorials/quickstart_for_web_devs.html.md): A brief overview of many FastHTML features\n- [HTMX reference](https://github.com/bigskysoftware/htmx/blob/master/www/content/reference.md): Brief description of all HTMX attributes, CSS classes, headers, events, extensions, js lib methods, and config options\n\n## Examples\n\n- [Todo list application](https://github.com/AnswerDotAI/fasthtml/blob/main/examples/adv_app.py): Detailed walk-thru of a complete CRUD app in FastHTML showing idiomatic use of FastHTML and HTMX patterns.\n\n## Optional\n\n- [Starlette full documentation](https://gist.githubusercontent.com/jph00/809e4a4808d4510be0e3dc9565e9cbd3/raw/9b717589ca44cedc8aaf00b2b8cacef922964c0f/starlette-sml.md): A subset of the Starlette documentation useful for FastHTML development.\n```\n\n*Cut-down FastHTML `llms.txt` from the specification, with an H1, a summary blockquote, and H2 file lists `## Docs`, `## Examples`, and `## Optional`. [1]*\n\n---\n\n## Section order and file-list syntax\n\nMarkdown, rather than XML, provides the structure so language models and agents can read `llms.txt` directly while classical parsers and regular expressions process its fixed section order. Both the canonical FastHTML specimen (`fastht.ml/docs/`) and the minimal reference mock in the specification follow the same sequence: an H1 title, a summary blockquote, non-heading notes, and H2 file lists. [1]\n\n- **Required H1 and summary header:** An optional byte-order mark (`BOM`) may precede the H1, which names the project or site and is the only required section. A blockquote then holds the key summary, followed by zero or more non-heading paragraphs or lists with project detail before any H2 section begins. [1]\n- **H2 section file lists:** Each H2 heading opens a file list of URLs where further detail is available: the specification's minimal reference mock uses `## Section name` and `## Optional`, while the canonical FastHTML specimen uses `## Docs`, `## Examples`, and `## Optional`. Pre-H2 project notes—such as the FastAPI compatibility bullet under `Important notes:`—stay above `## Docs` rather than appearing as file-link entries. [1]\n- **Entry link and colon description:** Every list item starts with a required Markdown hyperlink `[name](url)`, optionally followed by `:` and notes about the file. In the specification's reference mock, `- [Link title](https://link_url): Optional link details` includes anchor text, a URL, and a colon description, whereas the `## Optional` mock entry `- [Link title](https://link_url)` omits the colon and description. [1]\n- **Secondary links under ## Optional:** The `## Optional` section holds secondary links an agent can skip when a shorter context is needed—in the FastHTML specimen, the Starlette documentation subset rather than the quick start under `## Docs`. Revision `v2` retains `## Optional` as a convention for secondary links, but it no longer carries mechanical semantics telling expansion tools what to omit. [1][3]\n\n---\n\n## Companion Markdown pages and context expansion\n\nLinks in `llms.txt` should point at LLM-friendly Markdown pages. `/docs/llms.txt` covers everything in `/docs/`. FastHTML's `llms.txt` sits at `/docs/` for its documentation, and a docs page is also published at the same URL with a `.md` extension. [1]\n\n- **Why both .md spellings exist:** v1 allowed one spelling: `.md` appended, producing `page.html.md`. Tools that replace the extension emit `page.md`, which `v2` also allows. URLs with no file name append `index.html.md` or `index.md`. `nbdev` creates `.md` versions of every page by default, including the regenerated Answer.AI and fast.ai docs. [1][3]\n- **One Link header names both:** The example header is `Link: </docs/page.html.md>; rel=\"alternate\"; type=\"text/markdown\", </docs/llms.txt>; rel=\"describedby\"`. `rel=\"alternate\"` with `type=\"text/markdown\"` names the Markdown page; `rel=\"describedby\"` names the covering `llms.txt`. The same relations work as HTML `<link>` elements, and the header can be set on the `.md` files from a CDN without editing pages. [1]\n- **llms_txt2ctx and llms-full.txt:** `llms_txt2ctx` expanded an `llms.txt` into an LLM context and used the Optional section to decide what to omit. v2 instead has agents view or search the `llms.txt` and follow links to LLM-friendly content. Sites still publish `llms-full.txt`, one large gathered file for a deliberate full load, which can become enormous and go stale quickly. [3][4]\n- **Python, CLI, and JavaScript readers, and untrusted publisher content:** The `Code` menu on `llmstxt.org` lists `Python module & CLI`, `Python source`, and `JavaScript`, plus a sample `JavaScript Implementation`. `llms-txt-php` writes and reads `llms.txt` files, `vitepress-plugin-llms` generates documentation that follows the specification, and `server-llm-txt` lets agents fetch and search those files. Because `llms.txt` is a self-declared, unverified publisher file that neither grants nor denies access (unlike `/robots.txt`), consuming agents should treat retrieved `llms.txt` content as untrusted input. Installmap's 23 September 2026 crawl read 695 bare-domain `llms.txt` files: 16 (2.3%) carry overt brand or recommendation-steering instructions, another 29 (4.2%) tell assistants to send users to the company's own pages or not to guess facts, and 49 (7.1%) set usage, licensing, or agent-integration terms. None of the 7,749 homepages hid text addressed to AI, and no file said \"ignore previous instructions\". [1][5][6]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **Sitemaps XML (sitemaps.org)** | `sitemaps.org` | Analogous to classic standard | Lists publisher-supplied URLs for discovery, without llms.txt's annotated Markdown guide structure. [1] |\n| **robots.txt (RFC 9309)** | `RFC 9309` | Analogous to classic standard | Declares automated crawler access rules at `/robots.txt`, whereas `/llms.txt` provides an on-demand Markdown content guide during inference. [1] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[AGENTS.md](/protocols/agents-md/)** | Complements | Supplies repository-level coding instructions via `AGENTS.md`, whereas `/llms.txt` indexes published web documentation at the site root or a subpath. [1][7] |\n| **[Markdown for Agents](/protocols/cloudflare-markdown-for-agents/)** | Peer alternative | Negotiates Markdown representations on existing URLs, whereas `/llms.txt` links static `.md` page twins via `rel=\"alternate\"` `type=\"text/markdown\"`. [1] |\n| **[api-catalog (RFC 9727)](/protocols/api-catalog-rfc9727/)** | Complements | Publishes machine-readable API discovery documents at the origin-root `/.well-known/api-catalog` URI (`RFC 9727`), whereas `/llms.txt` indexes Markdown documentation at the site root or any subpath. [1][8] |\n| **[AI crawler tokens in robots.txt](/protocols/ai-crawler-tokens-robots/)** | Complements | Governs AI crawler access using `robots.txt` product tokens like `GPTBot` and `OAI-SearchBot`, whereas `/llms.txt` curates links without access controls. [2][9] |\n| **[The 'knowledge-linkset' Well-Known URI for Publishing Knowledge Artefacts](/protocols/knowledge-linkset/)** | Peer alternative | Serves a JSON linkset at origin-root `/.well-known/knowledge-linkset`, whereas `/llms.txt` serves subpath-capable Markdown advertised via `rel=\"describedby\"`. [1] |\n| **[NLWeb](/protocols/nlweb/)** | Complements | Exposes a conversational query endpoint over site content, whereas `/llms.txt` serves a static Markdown index that agents read and follow. [1] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (25 probed or cited examples across 3 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).*\n\n### Documentation origins publishing /llms.txt\n\nPublishing ≠ consumption: The producers table lists publishers that serve an `/llms.txt` endpoint as of the stated check date, not evidence that major AI search engines or assistant providers automatically fetch third-party `/llms.txt` files during retrieval (Google Search states it does not use `LLMS.txt`, and Ahrefs observed that 97% of HTTP-200 `/llms.txt` files received zero requests in May 2026). [2][10]\n\n| Actor | Role | Status | Published artifacts & companions | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Anthropic (Claude API docs)** | Docs platform | Live (HTTP 200) · checked 2026-10-30 | Serves `https://platform.claude.com/llms.txt` as `text/plain` (`# Anthropic Developer Documentation`), indexing 826 `/docs` pages, `llms-full.txt`, and `https://platform.claude.com/docs/mcp`. | [Anthropic, platform.claude.com/llms.txt (checked 2026-10-30)](https://platform.claude.com/llms.txt) [11] |\n| **OpenAI (Developer Platform docs)** | Docs platform | Live (HTTP 200) · checked 2026-10-30 | Serves `https://developers.openai.com/llms.txt` as `text/plain` (`# OpenAI Developers`), indexing API, Codex, Agentic Commerce, and Cookbook `llms.txt` files. | [OpenAI, developers.openai.com/llms.txt (checked 2026-10-30)](https://developers.openai.com/llms.txt) [12] |\n| **Google AI (Gemini API docs)** | Docs platform | Live (HTTP 200) · checked 2026-10-30 | Serves `https://ai.google.dev/gemini-api/docs/llms.txt` as `text/markdown` (`# Gemini API`), indexing Gemini API docs, API reference, and managed-agent environment pages. | [Google AI, Gemini API llms.txt (checked 2026-10-30)](https://ai.google.dev/gemini-api/docs/llms.txt) [13] |\n| **Cloudflare (Developer docs)** | Docs platform | Live (HTTP 200) · checked 2026-10-30 | Serves `https://developers.cloudflare.com/llms.txt` as `text/plain` (`# Cloudflare Developer Documentation`), linking each Cloudflare product to its own `llms.txt` index. | [Cloudflare, developers.cloudflare.com/llms.txt (checked 2026-10-30)](https://developers.cloudflare.com/llms.txt) [14] |\n| **Stripe (Documentation)** | Docs platform | Live (HTTP 200) · checked 2026-10-30 | Serves `https://docs.stripe.com/llms.txt` as `text/markdown` (`# Stripe Documentation`), linking `.md` page twins and npm/PyPI package registries. | [Stripe, docs.stripe.com/llms.txt (checked 2026-10-30)](https://docs.stripe.com/llms.txt) [15] |\n| **Cursor** | Docs platform | Live (HTTP 200) · checked 2026-11-04 | Serves `https://cursor.com/llms.txt` as `text/plain` (`# Cursor Documentation`) with a `Link` header (`</llms.txt>; rel=\"describedby\"; type=\"text/plain\"; title=\"llms.txt\"`). | [Cursor Documentation, cursor.com/llms.txt (checked 2026-11-04)](https://cursor.com/llms.txt) [16] |\n| **Vercel** | Product site | Live (HTTP 200) · checked 2026-11-04 | Serves `https://vercel.com/llms.txt` as `text/plain` (`# Vercel`), with an Optional section linking `/.well-known/ai-catalog.json`. | [Vercel, vercel.com/llms.txt (checked 2026-11-04)](https://vercel.com/llms.txt) [17] |\n| **Supabase (Docs)** | Docs platform | Live (HTTP 200) · checked 2026-11-04 | Serves `https://supabase.com/docs/llms.txt` as `text/plain` (`# Supabase Docs`) under `/docs/`, linking `llms-full.txt`, OpenAPI spec, and MCP server. | [Supabase Docs, supabase.com/docs/llms.txt (checked 2026-11-04)](https://supabase.com/docs/llms.txt) [18] |\n| **Model Context Protocol** | Specification & docs origin | Live (HTTP 200) · checked 2026-11-04 | Serves `https://modelcontextprotocol.io/llms.txt` (`# Model Context Protocol`, `text/plain`), indexing versioned `2026-07-28` specification and SDK `.md` pages. | [modelcontextprotocol.io/llms.txt](https://modelcontextprotocol.io/llms.txt) [19] |\n| **Coinbase Developer Platform** | Developer docs origin | Live (HTTP 200) · checked 2026-11-04 | Serves `https://docs.cdp.coinbase.com/llms.txt` (`# Coinbase Developer Documentation`, `text/plain`), linking `/_llms/` sub-indexes, `.md` recipes, and OpenAPI specs. | [docs.cdp.coinbase.com/llms.txt](https://docs.cdp.coinbase.com/llms.txt) [20] |\n| **Pydantic AI** | Framework docs origin | Live (HTTP 200) · checked 2026-11-04 | Serves `https://ai.pydantic.dev/llms.txt` (`# Pydantic AI`, `text/plain`), requesting `intent`, `stack`, and `harness` query parameters on fetches. | [ai.pydantic.dev/llms.txt](https://ai.pydantic.dev/llms.txt) [7] |\n| **Svelte** | Framework docs origin | Live (HTTP 200) · checked 2026-11-04 | Serves `https://svelte.dev/llms.txt` (`# Svelte Documentation for LLMs`, `text/plain`), linking `llms-small.txt`, `llms-medium.txt`, and `llms-full.txt` bundles. | [svelte.dev/llms.txt](https://svelte.dev/llms.txt) [21] |\n| **Bun** | Runtime docs origin | Live (HTTP 200) · checked 2026-11-04 | Serves `https://bun.sh/llms.txt` (`# Bun`, `text/plain`), indexing runtime, package manager, bundler, and TypeScript `.md` documentation pages. | [bun.sh/llms.txt](https://bun.sh/llms.txt) [22] |\n| **LangChain** | Framework docs origin | Live (HTTP 200) · checked 2026-11-04 | Serves `https://docs.langchain.com/llms.txt` (`# Docs by LangChain`, `text/plain`), linking recursive `/_llms/` sub-indexes and OpenAPI specs. | [docs.langchain.com/llms.txt](https://docs.langchain.com/llms.txt) [23] |\n| **Clerk** | Developer docs origin | Live (HTTP 200) · checked 2026-11-04 | Serves `https://clerk.com/llms.txt` (`# Clerk`, `text/plain`), documenting `.md` URL suffixes and linking Backend and Frontend OpenAPI specs. | [clerk.com/llms.txt](https://clerk.com/llms.txt) [24] |\n| **Neon** | Database docs origin | Live (HTTP 200) · checked 2026-11-04 | Serves `https://neon.tech/llms.txt` (`# Neon Postgres`, `text/plain`), rewritten from `/docs/llms.txt` with `neon init` agent setup instructions. | [neon.tech/llms.txt](https://neon.tech/llms.txt) [25] |\n\n### Consuming harnesses, IDEs & validators\n\n| Actor | Role | Status | Discovery & ingestion behavior | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Chrome Lighthouse** | Validator / CLI | Supported · as of 2026-05-05 | Agentic browsing audit fetches `llms.txt` and flags server errors; 404 is marked Not Applicable (updated 2026-05-05). | [Chrome for Developers, llms.txt (Lighthouse, updated 2026-05-05)](https://developer.chrome.com/docs/lighthouse/agentic-browsing/llms-txt) [26] |\n| **Claude Code** | Coding agent / IDE | Observed fetching · as of 2026-05 | Observed fetching (`Claude-Code` trailed `GPTBot` and `statespace-indexer` among named AI fetchers in Ahrefs study); automatic discovery, parsing, and answer use unconfirmed. | [Ahrefs, llms.txt study (May 2026 dataset)](https://ahrefs.com/blog/llmstxt-study/) [2] |\n| **VS Code PagePilot Extension** | Coding agent / IDE | Listed integration · as of 2026-08-10 | Listed integration on `llmstxt.org` for VS Code context; implementation behavior not independently verified. | [The /llms.txt file, v2 — Integrations](https://llmstxt.org) [1] |\n| **server-llm-txt** | MCP server / harness | Listed integration · as of 2026-08-10 | Listed integration on `llmstxt.org` exposing `llms.txt` over MCP; implementation behavior not independently verified. | [The /llms.txt file, v2 — Integrations](https://llmstxt.org) [1] |\n\n### CMS platforms, documentation engines & SEO plugins\n\n| Actor | Role | Status | Generated paths & build mode | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Mintlify** | Documentation engine | Live (HTTP 200) · checked 2026-11-04 | Automatically generates `llms.txt`, `llms-full.txt`, and `.md` pages for hosted sites; serves `https://mintlify.com/docs/llms.txt` (`# Mintlify`, `text/plain`). | [mintlify.com/docs/llms.txt](https://mintlify.com/docs/llms.txt) [27] · [Howard, The /llms.txt file, v2 (published 2024-09-03; modified 2026-08-10)](https://llmstxt.org) [1] · [directory.llmstxt.cloud](https://directory.llmstxt.cloud/) [28] |\n| **GitBook** | Documentation engine | Live (HTTP 200) · checked 2026-11-04 | Automatically serves `llms.txt` and `.md` pages for published documentation sites, including `https://docs.gitbook.com/llms.txt` (`# GitBook Documentation`, `text/markdown`). | [docs.gitbook.com/llms.txt](https://docs.gitbook.com/llms.txt) [29] · [Howard, The /llms.txt file, v2 (published 2024-09-03; modified 2026-08-10)](https://llmstxt.org) [1] · [llmstxt.site](https://llmstxt.site/) [30] |\n| **Yoast SEO** | WordPress SEO plugin | Supported · as of 2026-08-10 | WordPress plugin documented on `llmstxt.org` that automatically generates and maintains an `llms.txt` file. | [Howard, The /llms.txt file, v2 (published 2024-09-03; modified 2026-08-10)](https://llmstxt.org) [1] |\n| **AIOSEO** | WordPress SEO plugin | Supported · as of 2026-08-10 | WordPress plugin documented on `llmstxt.org` that ships a built-in `llms.txt` generator. | [Howard, The /llms.txt file, v2 (published 2024-09-03; modified 2026-08-10)](https://llmstxt.org) [1] |\n| **Wix** | Hosted CMS platform | Supported · as of 2026-08-10 | Hosted website builder documented on `llmstxt.org` that generates an `llms.txt` file for every Wix site. | [Howard, The /llms.txt file, v2 (published 2024-09-03; modified 2026-08-10)](https://llmstxt.org) [1] |\n\n### Ecosystem censuses\n\n- **Confirmed root-file availability under Rankability's response/content checks** (*as of 2026-09-18*): 9.3% of the top 1,000 Tranco domains (93 confirmed adopters, 433 with no file, 474 inconclusive/blocked) and 8.3% of the top 10,000 Tranco domains (830 confirmed adopters, 4,959 with no file, 4,211 inconclusive/blocked) served a root llms.txt or llms-full.txt file under Rankability's response and content checks on 18 September 2026 (where llms-full.txt availability is not proof of index-grammar conformance), with 16 top-1,000 domains (1.6%) and 119 top-10,000 domains (1.2%) publishing both files. [31]\n- **HTTP-200 publication & bot traffic (Ahrefs Web Analytics study)** (*as of 2026-05*): 28% (~38,000) of 137,210 domains using Ahrefs Web Analytics published a root /llms.txt returning HTTP 200 in May 2026 (an upper bound that did not test spec well-formedness), but 97% of those files received zero requests; across the 3% (~1,100 domains, ~22,000 requests) that received traffic, 4% (930 requests) came from humans and 96% of total requests came from twelve bot categories (one-decimal category shares): SEO audit tools (21.7% of total requests, including 10.6% from Ahrefs' own crawlers), other and unidentified bots (14.9%), general web crawlers (13.1%), tech profiling tools (11.6%), named AI tools (19.5% combined: 10.5% AI agents and agentic infrastructure led by statespace-indexer and Claude-Code, 5.3% AI training crawlers led by GPTBot, 2.5% AI assistants, and 1.1% AI retrieval bots), an industry-auditing-itself group (12.1% combined: 5.8% GEO/AEO tools, 3.6% llms.txt discoverability bots, and 2.7% research bots), and service and social bots (2.9%)—while zero AI bot requests targeted non-existent (HTTP 404) /llms.txt paths. [2]\n- **Observational, run-weighted trace analysis: 1,033 runs across 25 sites (Vercel study)** (*as of 2026-08-28*): In an observational, run-weighted trace analysis of 1,033 agent runs across 25 sites, agents reached llms.txt through in-page links in 356 of 416 attributed fetches (86%); among the 329 runs that reached an llms.txt file, 117 of 325 scorable runs (36%) subsequently fetched a page listed in the file, and 120 of 329 runs (36%) grounded their final answer in its content. [32]\n- **Directory-reported website listings & token totals (directory.llmstxt.cloud)** (*as of 2026-11-04*): 4,092 listed websites across Websites (1,960), Products (870), Developer tools (560), AI (409), and Finance (293), indexing 51 million total llms.txt tokens and 390 million total llms-full.txt tokens as of 4 November 2026. [28]\n- **Installmap multi-cohort crawl & Originality.ai series** (*as of 2026-09-23*): In Installmap's 23 September 2026 crawl, 695 of 7,749 Tranco top-7,755 domains (9.0%) served a valid bare-domain llms.txt; 2,147 did not answer, so the share among domains that answered was 12.4%. Of those 695 valid files, 16 (2.3%) contained recommendation-steering instructions. Counting only llms.txt files with no plugin or Shopify signature, Installmap's September 2026 crawl found 19.0% of 4,931 Inc. 5000 domains, 28.3% of 1,058 unicorns, and 10.7% of 459 Fortune 500 domains. In Installmap's September 2026 crawl, 36.2% of 1,261 reachable Y Combinator companies from the 2025 and 2026 batches served an llms.txt, against 23.3% of 909 reachable companies from the 2012 to 2017 batches. Installmap quotes Originality.ai's tracker of more than 3 million websites: 4,088 llms.txt files in June 2025 and 36,120 in May 2026, while llms-full.txt grew from 23 to 2,463 over the same window. [5]\n- **llmtxt.info adoption panel** (*as of 2026-10-05*): llmtxt.info's fixed panel of 219 notable hosts, fetched weekly, recorded on 2026-10-05 that 57.6% of 217 tested hosts served a qualifying llms.txt (125 verified files; median 14.0 KB). Sector rates in that run included developer tools 44/61 (72.1%), SaaS 32/47 (68.1%), and media 2/14 (14.3%). Unreachable hosts are excluded from the base. [33]\n- **Early historical baseline — Chris Green Majestic Million crawl** (*as of 2025-02*): Early historical baseline: Chris Green wrote that his February 2025 crawl of the Majestic Million found \"only 0.015% (approximately 15 sites)\" with a valid LLMs.txt file—a source-side percentage/count discrepancy, since 0.015% of 1,000,000 is 150 sites whereas 15 sites is 0.0015% (against his ~210,000 valid robots.txt baseline, he reported ~0.007% adoption). At that time llmstxt.site listed roughly 170 sites and directory.llmstxt.cloud claimed around 684; a May 2025 edit on the same page reported 105 valid files. [34]\n- **Publii reading of BuiltWith** (*as of 2026-10-17*): Publii reports that BuiltWith showed 844,473 live sites in Publii's October 2025 reading and 14,586,789 live websites when Publii checked on 17 October 2026. The page presents this as BuiltWith's detection of the file, not as evidence that an agent read it. [4]\n- **SEMPITE llms.txt corpus (Zenodo)** (*as of 2026-09-20*): SEMPITE's Zenodo deposit (version 1.1.0, published 20 September 2026; concept DOI 10.5281/zenodo.22859104, version-pinned DOI 10.5281/zenodo.22862258) fetched all 1,563 llms.txt files registered in llmstxt.site, directory.llmstxt.cloud, and llmstxthub.com. A 5 August 2026 run found 15.7% broken at file level; the 20 September 2026 re-fetch found 265 files broken (17.0%), up from 245. [35][36]\n\n---\n\n## See also\n\n- **[Agent Readability Spec](/protocols/vercel-agent-readability/)** *(Complements)* — The guide treats /llms.txt as a readability artifact, while llms.txt is the Markdown file at /llms.txt or a subpath with a required H1, an optional blockquote, and H2 link sections.\n- **[Apache Ossie (formerly Open Semantic Interchange)](/protocols/osi/)** *(Complements)* — Ossie has no fixed web path, while llms.txt is a file at /llms.txt or a subpath.\n- **[Open Knowledge Format](/protocols/okf/)** *(Peer alternative)* — llms.txt is one Markdown file whose only required section is an H1; OKF is a multi-file directory.\n- **[agents.txt](/protocols/agents-txt/)** *(Complements)* — agents.txt names protocol support at /agents.txt, including MCP, A2A, and x402, while llms.txt is the Markdown file at /llms.txt or a subpath with a required H1 and H2 link sections.\n- **[Agent Skills](/protocols/anthropic-agent-skills-format/)** *(Complements)* — llms.txt proposes adding a Markdown file to websites, placed at the site root or at any path within it, with brief background information, guidance, and links to detailed Markdown files, while Agent Skills is a folder containing a SKILL.md file that agents load through progressive disclosure.\n- **Category:** [Read protocols](/category/read/)\n\n---\n\n## References\n\n1. Jeremy Howard, *The /llms.txt file, v2* (published 2024-09-03; modified 2026-08-10; HTTP last-modified 2026-09-24) — <https://llmstxt.org>\n2. Louise Linehan (Ahrefs), *We Analyzed 137K Sites: 97% of llms.txt Files Never Get Read* (published 2026-06-15; modified 2026-08-27; data: May 2026) — <https://ahrefs.com/blog/llmstxt-study/>\n3. Jeremy Howard, *Changes* (August 2026; HTTP last-modified 2026-09-24) — <https://llmstxt.org/changes.html>\n4. Publii, *The complete guide to llms.txt* (BuiltWith reading 17 October 2026; fetched 2026-11-06) — <https://getpublii.com/blog/llms-txt-complete-guide.html>\n5. Installmap, *llms.txt statistics (CSV)* (crawls through September 2026; fetched 2026-11-06) — <https://installmap.com/research/llms-txt-statistics.csv>\n6. Installmap, *Everyone is hilariously prompt-injecting AI via llms.txt and you aren't* (2026-09-23; fetched 2026-11-11) — <https://installmap.com/research/llms-txt-ai-instructions>\n7. Pydantic, *Pydantic AI* (HTTP 200; fetched 2026-11-04) — <https://ai.pydantic.dev/llms.txt>\n8. K. Smith (Vodafone), *api-catalog: A Well-Known URI and Link Relation to Help Discovery of APIs* (published June 2025) — <https://www.rfc-editor.org/rfc/rfc9727.html>\n9. OpenAI, *Overview of OpenAI Crawlers* (fetched 2026-11-03) — <https://developers.openai.com/api/docs/bots>\n10. Google Search Central, *Google's Guide to Optimizing for Generative AI Features on Google Search* (updated 2026-07-10) — <https://developers.google.com/search/docs/fundamentals/ai-optimization-guide>\n11. Anthropic, *platform.claude.com/llms.txt* (HTTP 200; fetched 2026-10-30) — <https://platform.claude.com/llms.txt>\n12. OpenAI, *developers.openai.com/llms.txt* (HTTP 200; fetched 2026-10-30) — <https://developers.openai.com/llms.txt>\n13. Google AI, *Gemini API llms.txt* (HTTP 200; fetched 2026-10-30) — <https://ai.google.dev/gemini-api/docs/llms.txt>\n14. Cloudflare, *developers.cloudflare.com/llms.txt* (HTTP 200; fetched 2026-10-30) — <https://developers.cloudflare.com/llms.txt>\n15. Stripe, *docs.stripe.com/llms.txt* (HTTP 200; fetched 2026-10-30) — <https://docs.stripe.com/llms.txt>\n16. Cursor, *Cursor Documentation* (HTTP 200; fetched 2026-11-04) — <https://cursor.com/llms.txt>\n17. Vercel, *Vercel* (HTTP 200; fetched 2026-11-04) — <https://vercel.com/llms.txt>\n18. Supabase (Docs), *Supabase Docs* (HTTP 200; fetched 2026-11-04) — <https://supabase.com/docs/llms.txt>\n19. Model Context Protocol (MCP), *Model Context Protocol* (HTTP 200; fetched 2026-11-04) — <https://modelcontextprotocol.io/llms.txt>\n20. Coinbase Developer Platform, *Coinbase Developer Documentation* (HTTP 200; fetched 2026-11-04) — <https://docs.cdp.coinbase.com/llms.txt>\n21. Svelte, *Svelte Documentation for LLMs* (HTTP 200; fetched 2026-11-04) — <https://svelte.dev/llms.txt>\n22. Bun, *Bun* (HTTP 200; fetched 2026-11-04) — <https://bun.sh/llms.txt>\n23. LangChain, *Docs by LangChain* (HTTP 200; fetched 2026-11-04) — <https://docs.langchain.com/llms.txt>\n24. Clerk, *Clerk* (HTTP 200; fetched 2026-11-04) — <https://clerk.com/llms.txt>\n25. Neon, *Neon Postgres* (HTTP 200; fetched 2026-11-04) — <https://neon.tech/llms.txt>\n26. Chrome for Developers, *llms.txt* (updated 2026-05-05) — <https://developer.chrome.com/docs/lighthouse/agentic-browsing/llms-txt>\n27. Mintlify, *Mintlify* (HTTP 200; fetched 2026-11-04) — <https://mintlify.com/docs/llms.txt>\n28. llms.txt cloud directory, *llms.txt directory* (checked 2026-11-04) — <https://directory.llmstxt.cloud/>\n29. GitBook, *GitBook Documentation* (HTTP 200; fetched 2026-11-04) — <https://docs.gitbook.com/llms.txt>\n30. llms.txt directory, *llms.txt directory - Find llms.txt files across the web* (checked 2026-11-04) — <https://llmstxt.site/>\n31. Rankability, *llms.txt Adoption Research Report* (published 2026-09-18) — <https://www.rankability.com/blog/llms-txt-adoption/>\n32. Vercel and Ora, *Make your site readable by AI agents* (published 2026-08-28; modified 2026-09-03) — <https://vercel.com/kb/guide/make-your-site-readable-by-ai-agents>\n33. LLMtxt Adoption Directory, *llms.txt adoption panel* (latest run 2026-10-05; fetched 2026-11-06) — <https://llmtxt.info/llms-txt-adoption/>\n34. Chris Green, *A million websites in search of llms.txt* (February 2025 crawl; May 2025 edit; fetched 2026-11-06) — <https://www.chris-green.net/post/million-websites-in-search-of-llms-txt>\n35. Jacob Ezra Gerrish (SEMPITE), *The llms.txt corpus: ecosystem health, file contents, and the Shopify platform default* (published 20 September 2026 (v1.1.0, version DOI 10.5281/zenodo.22862258)) — <https://doi.org/10.5281/zenodo.22859104>\n36. Jacob Ezra Gerrish (SEMPITE / Zenodo API), *Zenodo Record 22862258 Metadata (v1.1.0, concept DOI 10.5281/zenodo.22859104)* (2026-09-20 (v1.1.0)) — <https://zenodo.org/api/records/22862258>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "",
   "adoption": {
    "level": "observed",
    "by": "vercel/next.js, microsoft/vscode, apache/airflow, pandas-dev/pandas, astral-sh/uv, OpenAI Codex, GitHub Copilot, Cursor, and 15 other verified implementations",
    "probe_run": null
   },
   "aliases": [],
   "analog": "CONTRIBUTING.md / a repository's contributor instructions, but written for an agent instead of a human contributor",
   "collisions": [],
   "discovery": {
    "mechanism": "AGENTS.md at the repository root; nested AGENTS.md files allowed in subdirectories",
    "path": "AGENTS.md at the repository root; nested AGENTS.md files allowed in subdirectories"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://agents.md/",
     "claim": "AGENTS.md (Agentic AI Foundation), *AGENTS.md*, checked 2026-10-30",
     "date": null,
     "quote": "Think of AGENTS.md as a README for agents: a dedicated, predictable place to provide the context and instructions to help AI coding agents work on your project. / README.md files are for humans: quick starts, project descriptions, and contribution guidelines. AGENTS.md complements this by containing the extra, sometimes detailed context coding agents need: build steps, tests, and conventions that might clutter a README or aren't relevant to human contributors. / AGENTS.md emerged from collaborative efforts across the AI software development ecosystem, including OpenAI Codex, Amp, Jules from Google, Cursor, and Factory. / Are there required fields? No. AGENTS.md is just standard Markdown. Use any headings you like; the agent simply parses the text you provide. / Create an AGENTS.md file at the root of the repository. / Place another AGENTS.md inside each package. / Agents automatically read the nearest file in the directory tree, so the closest one takes precedence and every subproject can ship tailored instructions. / The closest AGENTS.md to the edited file wins; explicit user chat prompts override everything. / AGENTS.md is now stewarded by the Agentic AI Foundation under the Linux Foundation. / A simple, open format for guiding coding agents / Are there required fields? No. AGENTS.md is just standard Markdown. / AGENTS.md A simple, open format for guiding coding agents / Create an AGENTS.md file at the root of the repository. … Place another AGENTS.md inside each package. Agents automatically read the nearest file in the directory tree, so the closest one takes precedence / Place another AGENTS.md inside each package. Agents automatically read the nearest file in the directory tree, so the closest one takes precedence and every subproject can ship tailored instructions. / README.md files are for humans: quick starts, project descriptions, and contribution guidelines. / Provide precise, agent-focused guidance that complements existing README and docs. / # AGENTS.md ## Setup commands - Install deps: pnpm install - Start dev server: pnpm dev - Run tests: pnpm test ## Code style - TypeScript strict mode - Single quotes, no semicolons - Use functional patterns where possible / Add sections that help an agent work effectively with your project. Popular choices: Project overview Build and test commands Code style guidelines Testing instructions Security considerations / For example, at time of writing the main OpenAI repo has 88 AGENTS.md files. / The agent will attempt to execute relevant programmatic checks and fix failures before finishing the task. / Install deps: pnpm install - Start dev server: pnpm dev - Run tests: pnpm test / Always run pnpm lint and pnpm test before committing. / After moving files or changing imports, run pnpm lint --filter / Treat AGENTS.md as living documentation. / # AGENTS.md ## Setup commands - Install deps: pnpm install / ## Code style - TypeScript strict mode / Your agent definitions are compatible with a growing ecosystem of AI coding agents and tools / One AGENTS.md works across many agents / Rename existing files to AGENTS.md and create symbolic links for backward compatibility: mv AGENT.md AGENTS.md && ln -s AGENTS.md AGENT.md / Think of AGENTS.md as a README for agents: a dedicated, predictable place to provide the context and instructions to help AI coding agents work on your project. … Create an AGENTS.md file at the root of the repository. / How do I configure Aider? Configure Aider to use AGENTS.md in .aider.conf.yml: read: AGENTS.md / How do I configure Gemini CLI? Configure Gemini CLI to use AGENTS.md in .gemini/settings.json: { \"context\": { \"fileName\": \"AGENTS.md\" }, } / AGENTS.md … Your agent definitions are compatible with a growing ecosystem of AI coding agents and tools: Codexfrom OpenAI Julesfrom Google Factory Aider goose opencode Zed Warp VS Code / AGENTS.md … Coding agentfrom GitHub Copilot Ona Windsurffrom Cognition Augment Code / AGENTS.md … Your agent definitions are compatible with a growing ecosystem of AI coding agents and tools: Codexfrom OpenAI Julesfrom Google Factory Aider goose opencode Zed / A simple, open format for guiding coding agents, used by over 60k open-source projects.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://docs.github.com/en/copilot/how-tos/copilot-on-github/customize-copilot/add-custom-instructions/add-repository-instructions",
     "claim": "GitHub, *Adding repository custom instructions for GitHub Copilot*, checked 2026-10-30",
     "date": null,
     "quote": "adding a .github/copilot-instructions.md file in the repository / Alternatively, you can use a single CLAUDE.md or GEMINI.md file stored in the root of the repository. / You can create one or more AGENTS.md files, stored anywhere within the repository. When Copilot is working, the nearest AGENTS.md file in the directory tree will take precedence. / These are specified in a copilot-instructions.md file in the .github directory of the repository. … These are specified in one or more NAME.instructions.md files within or below the .github/instructions directory in the repository. … You can create one or more AGENTS.md files, stored anywhere within the repository. When Copilot is working, the nearest AGENTS.md file in the directory tree will take precedence. … Alternatively, you can use a single CLAUDE.md or GEMINI.md file stored in the root of the repository.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://arxiv.org/html/2602.14690v5",
     "claim": "Matthias Galster, Seyedmoein Mohsenimofidi, Jai Lal Lulla, Muhammad Auwal Abubakar, Christoph Treude, and Sebastian Baltes, *Harness Engineering for Agentic AI Coding Tools: An Exploratory Study*, arXiv:2602.14690v5, revised 2026-06-30",
     "date": null,
     "quote": "Cursor deprecated .cursorrules and now suggests using AGENTS.md instead. / Copilot also supports CLAUDE.md, AGENTS.md, and GEMINI.md / Our results show convergence on AGENTS.md as a tool-agnostic configuration file. / a skill whose directory contains SKILL.md alongside scripts, references, and assets). Context files such as AGENTS.md or CLAUDE.md act as \"READMEs for agents\" with context-specific information about build commands, coding conventions, and rules for CI/CD pipelines / Context Files Markdown file loaded into the context each session. CLAUDE.md .github/ { copilot-instructions.md | instructions/*.md }a AGENTS.md, AGENTS.override.md AGENTS.md, .cursorrulesc GEMINI.md / arXiv:2602.14690v5 [cs.SE] 30 Jun 2026 … We then cloned the remaining 32,564 repositories and applied heuristics based on file names and file paths to detect the usage of AI coding tools and configuration mechanisms (see Table 1). … This resulted in 2,853 repositories that use one or more AI coding tools … Of the 2,853 repositories, 2,015 (70.6%) adopted a single tool, while 295 (10.3%) configured two tools, and 50 (1.8%) configured three or more. An additional 493 repositories (17.3%) used AGENTS.md as a tool-agnostic standard without any tool-specific configuration artifact",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://ampcode.com/news/AGENTS.md",
     "claim": "Amp, *From AGENT.md to AGENTS.md*, published 2025-08-20",
     "date": null,
     "quote": "August 20, 2025 From AGENT.md to AGENTS.md In May we added support for AGENT.md files to Amp. Not long after, OpenAI picked AGENTS.md (plural) for their agent / August 20, 2025 From AGENT.md to AGENTS.md In May we added support for AGENT.md files to Amp. Not long after, OpenAI picked AGENTS.md (plural) for their agent … our condition: if OpenAI can get the agents.md domain, we'll switch. And that condition has now been met. True to our word, and as of today, Amp will look for AGENTS.md files / True to our word, and as of today, Amp will look for AGENTS.md files / \"datePublished\":\"2025-08-20T00:00:00.000Z\" … True to our word, and as of today, Amp will look for AGENTS.md files (while staying backwards compatible with existing AGENT.md files, of course) … Globs in AGENTS.md Include context files dynamically with glob mentions and filters",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://web.archive.org/web/20261022165127/https://openai.com/index/introducing-codex/",
     "claim": "OpenAI, *Introducing Codex*, published 2025-05-16",
     "date": null,
     "quote": "May 16, 2025 … Codex can be guided by AGENTS.md files placed within your repository.",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://www.linuxfoundation.org/press/linux-foundation-announces-the-formation-of-the-agentic-ai-foundation",
     "claim": "The Linux Foundation, *Linux Foundation Announces the Formation of the Agentic AI Foundation (AAIF), Anchored by New Project Contributions Including Model Context Protocol (MCP), goose and AGENTS.md*, published 2025-12-09; modified 2026-02-24",
     "date": null,
     "quote": "SAN FRANCISCO, Dec. 9, 2025 - The Linux Foundation, the nonprofit organization enabling mass innovation through open source, today announced the formation of the Agentic AI Foundation (AAIF), and founding contributions of three leading projects driving innovation in open source AI; Anthropic's Model Context Protocol (MCP), Block's goose, and OpenAI's AGENTS.md. / Released by OpenAI in August 2025, AGENTS.md is a simple, universal standard that gives AI coding agents a consistent source of project-specific guidance / MCP has rapidly become the universal standard protocol for connecting AI models to tools, data and applications / founding contributions of three leading projects driving innovation in open source AI; Anthropic's Model Context Protocol (MCP), Block's goose, and OpenAI's AGENTS.md. … MCP has rapidly become the universal standard protocol for connecting AI models to tools, data and applications / SAN FRANCISCO, Dec. 9, 2025 - The Linux Foundation, the nonprofit organization enabling mass innovation through open source, today announced the formation of the Agentic AI Foundation (AAIF) … AGENTS.md has already been adopted by more than 60,000 open source projects and agent frameworks including Amp, Codex, Cursor, Devin, Factory, Gemini CLI, GitHub Copilot, Jules and VS Code among others.",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://raw.githubusercontent.com/agentsmd/agents.md/main/LICENSE",
     "claim": "AGENTS.md, *agentsmd/agents.md Repository LICENSE (MIT)*, fetched 2026-11-12",
     "date": null,
     "quote": "MIT License\n\nCopyright (c) 2025 OpenAI",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://docs.factory.com/harness/agents-md",
     "claim": "Factory, *AGENTS.md*, checked 2026-10-30",
     "date": null,
     "quote": "SKILL.md Reusable workflows, checklists, or domain expertise that should load only when relevant. / When Droid later reads files under apps/web/, it can discover apps/web/AGENTS.md and apply the more specific guidance to that directory tree. / The current user request takes priority over standing instructions. Nested project files refine root project files for a specific directory tree. Project files should override personal defaults. / ~/.factory/ Your default Droid preferences across projects. / When a git root is present, Droid searches from the current working directory up to the git root. / CLAUDE.md Compatibility with existing Claude-oriented instructions. / .agent/ Compatibility with singular agent folder conventions. / .agents/ Compatibility with shared agent folder conventions. / Use AGENTS.md for new guidance. Droid also reads compatible filenames so existing instruction files from other coding tools keep working. / AGENTS.md and compatible names Always-on coding instructions, commands, repository conventions, and safety rules. Loaded as coding guidelines at startup and during dynamic discovery. … SKILL.md Reusable workflows, checklists, or domain expertise that should load only when relevant. Discovered as a skill. The full body loads when invoked. / AGENTS.md gives Droid the project briefing it should carry into every session: how to install, run, test, edit, verify, and stay inside your repository's boundaries. … When a git root is present, Droid searches from the current working directory up to the git root. At each level, it checks the directory itself and these context directories: Context directory Common use .factory/ Factory-specific project instructions. .agents/ Compatibility with shared agent folder conventions. .agent/ Compatibility with singular agent folder conventions. Droid also checks personal instruction directories in your home folder: Personal directory Common use ~/.factory/ Your default Droid preferences across projects. ~/.agents/ Compatible personal instructions. ~/.agent/ Compatible personal instructions. … Nested project files refine root project files for a specific directory tree. … Initial AGENTS-style guideline load 80,000 characters Dynamic Read-path guideline discovery 40,000 characters",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://www.stride.page/research/agents-md-claude-md-study-2026",
     "claim": "Stride, *What 7,370 popular GitHub repositories put in AGENTS.md and CLAUDE.md*, published 2026-09-27",
     "date": null,
     "quote": "The open format this study measures: plain Markdown with no required fields, read by many coding agents. / Of the 7,370 active public repositories on GitHub with 5,000 or more stars, 1,864 (25.3%) had an AGENTS.md at the root on 27 September 2026, and 33.4% had at least one instruction file for coding agents. The share rises with popularity, to 41.8% of repositories with 50,000+ stars. … In our census, 25.9% of the 1,013 repositories with both files do none of these. … the median AGENTS.md in our census is 819 words, and only 13.4% fall between 200 and 400. … 73.5% name a test, build or lint command, 39.3% mention security or secrets, and 10.6% state a rule against leaking secrets. … Of the repositories with both files, 35.5% use the import and 36.2% a symlink",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://cursor.com/docs/rules",
     "claim": "Cursor, *Rules*, checked 2026-10-30",
     "date": null,
     "quote": "A plain .md file in .cursor/rules is ignored by the rules system because it has no frontmatter to specify description, globs, and alwaysApply. If you prefer plain markdown, use AGENTS.md instead. / Unlike Project Rules, AGENTS.md is a plain markdown file without metadata or complex configurations. / Cursor supports AGENTS.md in the project root and subdirectories. / AGENTS.md is a simple markdown file for defining agent instructions. Place it in your project root as an alternative to .cursor/rules for straightforward use cases. / Project rules live in .cursor/rules as .mdc files and are version-controlled. … Unlike Project Rules, AGENTS.md is a plain markdown file without metadata or complex configurations. … Cursor supports AGENTS.md in the project root and subdirectories. … Instructions from nested AGENTS.md files are combined with parent directories, with more specific instructions taking precedence.",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://code.claude.com/docs/en/memory",
     "claim": "Anthropic (Claude Code), *How Claude remembers your project*, modified 2026-11-02",
     "date": null,
     "quote": "Claude treats them as context, not enforced configuration. To block an action regardless of what Claude decides, use a / PreToolUse hook / .claude/AGENTS.md / claude-md-or-agents-md / Project instructions / By default, Claude reads AGENTS.md only when you have no CLAUDE.md in your working directory or above it. / Count, so Claude reads them instead of AGENTS.md: a CLAUDE.md, .claude/CLAUDE.md, or CLAUDE.local.md in your working directory or any directory above it / Reading AGENTS.md directly requires Claude Code v2.1.277 or later. / A CLAUDE.md containing @AGENTS.md: you can leave it. Keeping the import never makes Claude read AGENTS.md twice / If you don't need Claude-specific content, a symlink also works: ln -s AGENTS.md CLAUDE.md / claude-md-and-agents-md Your CLAUDE.md and AGENTS.md files together / so one that your CLAUDE.md imports or symlinks to isn't read twice / \"dateModified\":\"2026-11-02T21:30:31.529Z\" … Reading AGENTS.md directly requires Claude Code v2.1.277 or later. … By default, Claude reads AGENTS.md only when you have no CLAUDE.md in your working directory or above it. … a CLAUDE.md, .claude/CLAUDE.md, or CLAUDE.local.md in your working directory or any directory above it … At session start: every AGENTS.md and .claude/AGENTS.md in your working directory and the directories above it. … As Claude works in subdirectories: a subdirectory’s AGENTS.md, when Claude opens a file there with the Read tool and that subdirectory has none of the three CLAUDE.md files of its own … Not read: AGENTS.local.md, AGENTS.override.md, or anything under a .agents/ directory … set Project instructions to claude-md-and-agents-md. … type /config in a Claude Code session to open the settings panel, then set Project instructions to one of these values: Value What Claude reads claude-md-or-agents-md",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://learn.chatgpt.com/docs/agent-configuration/agents-md",
     "claim": "OpenAI, *Custom instructions with AGENTS.md*, checked 2026-10-30",
     "date": null,
     "quote": "Starting at the project root (typically the Git root), Codex walks down to your current working directory. If Codex cannot find a project root, it only checks the current directory. / In each directory along the path, it checks for AGENTS.override.md, then AGENTS.md, then any fallback names in project_doc_fallback_filenames. Codex includes at most one file per directory. / Codex concatenates files from the root down, joining them with blank lines. Files closer to your current directory override earlier guidance because they appear later in the combined prompt. / Codex skips empty files and stops adding files once the combined size reaches the limit defined by project_doc_max_bytes (32 KiB by default). / Edit your Codex configuration: # ~/.codex/config.toml project_doc_fallback_filenames = [\"TEAM_GUIDE.md\", \".agents.md\"] project_doc_max_bytes = 65536 / Codex reads AGENTS.md files before doing any work. … In your Codex home directory (defaults to ~/.codex, unless you set CODEX_HOME), Codex reads AGENTS.override.md if it exists. Otherwise, Codex reads AGENTS.md. … Starting at the project root (typically the Git root), Codex walks down to your current working directory. … In each directory along the path, it checks for AGENTS.override.md, then AGENTS.md, then any fallback names in project_doc_fallback_filenames. Codex includes at most one file per directory. Merge order: Codex concatenates files from the root down, joining them with blank lines.",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://code.visualstudio.com/updates/v1_104",
     "claim": "Microsoft, *Visual Studio Code August 2025 (version 1.104)*, August 2025",
     "date": null,
     "quote": "An AGENTS.md file lets you provide context and instructions to the agent. Starting from this release, when you have an AGENTS.md file in your workspace root(s), it is automatically picked up as context for chat requests. / Support for AGENTS.md files is enabled by default and can be controlled with the chat.useAgentsMdFile / August 2025 (version 1.104) … Support for AGENTS.md files (Experimental) Setting: chat.useAgentsMdFile … Starting from this release, when you have an AGENTS.md file in your workspace root(s), it is automatically picked up as context for chat requests. … Support for AGENTS.md files is enabled by default and can be controlled with the chat.useAgentsMdFile",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://jules.google/docs/changelog/2025-06-20/",
     "claim": "Google (Jules), *Jules Agent Update: Faster, Smarter, More Reliable*, published 2025-06-20",
     "date": null,
     "quote": "Smarter context. Jules reads from AGENTS.md if it's in your repo. / June 20, 2025 We've shipped a big upgrade to the Jules agent under the hood. What's new: Smarter context. Jules reads from AGENTS.md if it's in your repo.",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://docs.devin.ai/onboard-devin/agents-md",
     "claim": "Cognition (Devin), *AGENTS.md files for Devin*, modified 2026-09-25",
     "date": null,
     "quote": "Just put an AGENTS.md file in your project root (or anywhere else). Devin will look for the file before it starts coding. / Devin automatically includes up to 16 KiB (16,384 bytes) from the beginning of each AGENTS.md file in its context. / \"dateModified\":\"2026-09-25T15:07:47.850Z\" … Devin supports AGENTS.md - a simple, open standard for providing context and instructions to AI agents. … Devin will look for the file before it starts coding. Devin automatically includes up to 16 KiB (16,384 bytes) from the beginning of each AGENTS.md file in its context. For longer files, Devin receives a truncation notice and can read the full file on demand, but instructions after the limit are not included automatically.",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://zed.dev/blog/bring-your-own-agent-to-zed",
     "claim": "Zed (Nathan Sobo), *Bring Your Own Agent to Zed*, published 2025-08-27",
     "date": null,
     "quote": "we created the Agent Client Protocol (ACP), and we've partnered with Google to integrate Gemini CLI as the initial reference implementation.",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://zed.dev/blog/jetbrains-on-acp",
     "claim": "Zed (Franciska Dethlefsen), *ACP Brings JetBrains on Board*, published 2025-10-06",
     "date": null,
     "quote": "JetBrains has announced it will co-develop the Agent Client Protocol with us. They plan to bring ACP support to their entire IDE lineup",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://blog.jetbrains.com/ai/2025/10/jetbrains-zed-open-interoperability-for-ai-coding-agents-in-your-ide/",
     "claim": "JetBrains, *JetBrains × Zed: Open Interoperability for AI Coding Agents in Your IDE*, published 2025-10-06",
     "date": null,
     "quote": "we're collaborating with Zed on the Agent Client Protocol (ACP) - an open protocol that lets AI coding agents work inside editors, including JetBrains IDEs, if both are ACP-compatible.",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://raw.githubusercontent.com/vercel/next.js/HEAD/AGENTS.md",
     "claim": "Vercel (vercel/next.js), *AGENTS.md*, checked 2026-10-30",
     "date": null,
     "quote": "# Next.js Development Guide … This is a pnpm monorepo containing the Next.js framework and related packages. next.js/ ├── packages/ # Published npm packages ├── turbopack/ # Turbopack bundler (Rust) - git subtree ├── crates/ # Rust crates for Next.js SWC bindings ├── test/ # All test suites … Before editing or creating files in any subdirectory (e.g., packages/*, crates/*), read all README.md files in the directory path from the repo root up to and including the target file's directory. … See test/AGENTS.md. … content-length: 31539 … content-type: text/plain; charset=utf-8 … date: Fri, 30 Oct 2026",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://raw.githubusercontent.com/microsoft/vscode/HEAD/AGENTS.md",
     "claim": "Microsoft (microsoft/vscode), *AGENTS.md*, checked 2026-10-30",
     "date": null,
     "quote": "# VS Code Agents Instructions This file provides instructions for AI coding agents working with the VS Code codebase. For detailed project overview, architecture, coding guidelines, and validation steps, see the Copilot Instructions. … content-length: 271 … content-type: text/plain; charset=utf-8 … date: Fri, 30 Oct 2026",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://raw.githubusercontent.com/apache/airflow/HEAD/AGENTS.md",
     "claim": "Apache Software Foundation (apache/airflow), *AGENTS.md*, checked 2026-10-30",
     "date": null,
     "quote": "# AGENTS instructions ## Naming Write Dag (title case) in all prose. … ## Environment Setup … ## Commands … ## Repository Structure … ## Architecture Boundaries … ## Security Model … ## Coding Standards … ## Testing Standards … content-length: 23160 … content-type: text/plain; charset=utf-8 … date: Fri, 30 Oct 2026",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://raw.githubusercontent.com/pandas-dev/pandas/HEAD/AGENTS.md",
     "claim": "pandas (pandas-dev/pandas), *AGENTS.md*, checked 2026-10-30",
     "date": null,
     "quote": "# AGENTS.md pandas is a BSD-licensed Python library for data analysis, built from Python, Cython, and C/C++ sources with Meson. ## Interactions on GitHub … ## Required tooling … ## Repository map … ## References … content-length: 2752 … content-type: text/plain; charset=utf-8 … date: Fri, 30 Oct 2026",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://raw.githubusercontent.com/astral-sh/uv/HEAD/AGENTS.md",
     "claim": "Astral (astral-sh/uv), *AGENTS.md*, checked 2026-10-30",
     "date": null,
     "quote": "- Read CONTRIBUTING.md for guidelines on how to run tools … PREFER insta snapshots following patterns in nearby tests over substring assertions - PREFER uv_snapshot! for command output … When making changes for Windows from Unix, use cargo xwin clippy to check compilation … AVOID using panic!, unreachable!, .unwrap(), unsafe code, and clippy rule ignores … content-length: 3746 … content-type: text/plain; charset=utf-8 … date: Fri, 30 Oct 2026",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://raw.githubusercontent.com/temporalio/sdk-java/master/AGENTS.md",
     "claim": "Temporal (temporalio/sdk-java), *AGENTS.md*, checked 2026-11-04",
     "date": null,
     "quote": "HTTP 200 ... content-length: 2391 ... content-type: text/plain; charset=utf-8 ... # Contributor Quickstart Guide ## Repository Layout - temporal-sdk: core SDK implementation. - temporal-testing: utilities to help write workflow and activity tests. - temporal-test-server: in-memory Temporal server for fast tests. - temporal-serviceclient: gRPC client for communicating with the service. ... - ./gradlew spotlessCheck must pass. - All tests from ./gradlew test must succeed. ... For more details see CONTRIBUTING.md in the repository root.",
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://raw.githubusercontent.com/pydantic/pydantic-ai/main/AGENTS.md",
     "claim": "Pydantic (pydantic/pydantic-ai), *AGENTS.md*, checked 2026-11-04",
     "date": null,
     "quote": "HTTP 200 ... content-length: 19537 ... content-type: text/plain; charset=utf-8 ... Welcome to the repository for [Pydantic AI](https://pydantic.dev/docs/ai/) ... # Your primary responsibility is to the project and its users ... [docs/AGENTS.md](docs/AGENTS.md) ... [pydantic_ai_slim/pydantic_ai/AGENTS.md](pydantic_ai_slim/pydantic_ai/AGENTS.md) ... [src/pydantic_ai_harness/AGENTS.md](src/pydantic_ai_harness/AGENTS.md) ... [tests/AGENTS.md](tests/AGENTS.md) ... [tests/harness/AGENTS.md](tests/harness/AGENTS.md)",
     "ref": 25
    },
    {
     "label": "[26]",
     "url": "https://raw.githubusercontent.com/oven-sh/bun/main/AGENTS.md",
     "claim": "Oven (oven-sh/bun), *AGENTS.md*, checked 2026-11-04",
     "date": null,
     "quote": "HTTP 200 ... content-length: 9 ... content-type: text/plain; charset=utf-8 ... CLAUDE.md",
     "ref": 26
    },
    {
     "label": "[27]",
     "url": "https://arxiv.org/html/2610.31715",
     "claim": "Pawel Zarzycki, *What Open-Source Projects Tell Their Coding Agents: A Census of AGENTS.md and CLAUDE.md*, arXiv:2610.31715v2, revised 2026-10-26",
     "date": null,
     "quote": "arXiv:2610.31715v2 [cs.SE] 26 Oct 2026 … We enumerated public GitHub repositories that, on 2026-10-16, had at least 1,000 stars, had been pushed to within the preceding 90 days, were neither forks nor archived, and had one of thirteen primary languages … GitHub’s search API returned 22,854 such repositories. … Of the 22,854 repositories, 6,006 (26.3%) have a root AGENTS.md, a root CLAUDE.md, or both. Adoption rises from 23.2% in the lowest star tier to 59.6% of the 89 repositories with the most stars … 2,566 adopters have only AGENTS.md, 1,052 only CLAUDE.md, and 2,388 both. Of those with both, most point one file at the other: CLAUDE.md defers to AGENTS.md through a link, an import or a pointer in 1,540 repositories, the reverse in 182, and only 598 keep two files with content of their own. … any of the above 6,652 29.1%",
     "ref": 27
    },
    {
     "label": "[28]",
     "url": "https://agentsmd.formachines.ai/",
     "claim": "AGENTS.md Tracker (agentsmd.formachines.ai), *AGENTS.md adoption tracker*, scan 2026-11-06; fetched 2026-11-06",
     "date": null,
     "quote": "546 of 1,922 / 28.4 % / 677 (35.2 %) have at least one agent-instruction file / Latest published scan: 2026-11-06",
     "ref": 28
    },
    {
     "label": "[29]",
     "url": "https://repoagentkit.com/agents-md-adoption",
     "claim": "RepoAgentKit, *AGENTS.md adoption in GitHub's top 100 repositories*, snapshot 2026-09-01; fetched 2026-11-06",
     "date": null,
     "quote": "Snapshot · 2026-09-01 · 100 pinned commits / 39 of GitHub / 29 of 39 files mention testing / 112 Median lines / Nested AGENTS.md files are not counted when the root file is absent.",
     "ref": 29
    },
    {
     "label": "[30]",
     "url": "https://arxiv.org/html/2606.24429v1",
     "claim": "Arsham Khosravani and Audris Mockus, *Detecting AI Coding Agents in Open Source: A Validated Multi-Method Census of 180 Million Repositories*, 2026-06-23",
     "date": "2026-06-23",
     "quote": "AGENTS.md, 134,810 blobs / CLAUDE.md (151,390) / We caution that cross-snapshot counts conflate genuine adoption growth",
     "ref": 30
    }
   ],
   "form": "document-format",
   "governance": "Agentic AI Foundation (AAIF), under the Linux Foundation",
   "group": null,
   "history": [
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "agents-md",
   "implementation": "multi-implementation",
   "last_verified": "2026-11-12",
   "name": "AGENTS.md",
   "native_status": "Open format stewarded by the Agentic AI Foundation under the Linux Foundation; announced as an AAIF founding contribution on 2025-12-09",
   "origin": {
    "date": "2025-08",
    "org": "OpenAI Codex, Amp, Jules (Google), Cursor, and Factory; released by OpenAI"
   },
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "living",
   "probe": {
    "method": "GET",
    "on_absent": "No repository-level agent instructions are declared; an agent falls back to inferring conventions from the codebase or README",
    "parse": "200 response containing markdown text; presence alone is the signal since there are no required fields or schema",
    "path": "{origin}/AGENTS.md (repository-root fetch, e.g. raw.githubusercontent.com/<owner>/<repo>/HEAD/AGENTS.md)"
   },
   "question": "What build, test, and convention instructions should a coding agent follow in this repository?",
   "scope": "coding-tools",
   "spec_url": "https://agents.md/",
   "step": "read",
   "summary_md": "**AGENTS.md** is an open, tool-agnostic Markdown format for guiding coding agents—providing a dedicated, predictable repository location for build steps, test commands, and project conventions that would clutter a human `README.md`. Maintainers place standard Markdown `AGENTS.md` files (with no required fields or mandatory frontmatter) at the repository root and optionally inside nested packages. Coding agents automatically read the nearest `AGENTS.md` in the directory tree so the closest file to the edited path takes precedence, while explicit user chat prompts override everything. First documented in OpenAI's May 16, 2025 Codex launch and consolidated across OpenAI Codex, Amp (which switched from singular `AGENT.md` to `AGENTS.md` on August 20, 2025, `2025-08-20`), Google Jules, Cursor, and Factory in August 2025, `AGENTS.md` was contributed as a founding project of the Linux Foundation's Agentic AI Foundation (AAIF) on December 9, 2025 (`2025-12-09`) alongside Anthropic's Model Context Protocol (MCP) and Block's goose.",
   "track": "linux-foundation",
   "version": {
    "date": null,
    "label": "No numbered versions published"
   },
   "watch": [
    {
     "type": "page",
     "url": "https://agents.md",
     "selector": "main",
     "cadence": "weekly"
    },
    {
     "type": "github",
     "repo": "agentsmd/agents.md",
     "mode": "tag"
    }
   ],
   "use_cases": [
    "serve-content-to-agents",
    "describe-agent-capabilities"
   ],
   "audience": [
    "agent-builder",
    "site-owner"
   ],
   "pairs_with": [
    "anthropic-agent-skills-format",
    "llms-txt",
    "mcp",
    "agent-client-protocol"
   ],
   "prerequisites": [],
   "hatnote_md": "Not to be confused with [llms.txt](/protocols/llms-txt/) (HTTP-served web documentation index) or [Agent Skills](/protocols/anthropic-agent-skills-format/) (packaged `SKILL.md` workflow directories).",
   "tier": "flagship",
   "lifecycle_status": "active",
   "wire_archetype": "web_discovery",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "Not to be confused with [llms.txt](/protocols/llms-txt/) (HTTP-served web documentation index) or [Agent Skills](/protocols/anthropic-agent-skills-format/) (packaged `SKILL.md` workflow directories). [1]",
   "v05_elevator_pitch_md": "`AGENTS.md` is a vendor-neutral repository instruction file that gives AI coding agents (such as OpenAI Codex, Cursor, Google Jules, and Amp) a predictable place to find build commands, test workflows, and codebase conventions alongside a human `README.md`. Instead of duplicating project rules across tool-specific files like `CLAUDE.md`, `GEMINI.md`, `.cursorrules`, and `.github/copilot-instructions.md`, maintainers check in plain Markdown `AGENTS.md` files at the repo root or inside subdirectories so every coding agent reads the nearest file automatically. [1][2][3]",
   "v05_lead_md": "**AGENTS.md** is an open, tool-agnostic Markdown format for guiding coding agents—providing a dedicated, predictable repository location for build steps, test commands, and project conventions that would clutter a human `README.md`. [1] Maintainers place standard Markdown `AGENTS.md` files (with no required fields or mandatory frontmatter) at the repository root and optionally inside nested packages. Coding agents automatically read the nearest `AGENTS.md` in the directory tree so the closest file to the edited path takes precedence, while explicit user chat prompts override everything. [1] First documented in OpenAI's May 16, 2025 Codex launch and consolidated across OpenAI Codex, Amp (which switched from singular `AGENT.md` to `AGENTS.md` on August 20, 2025, `2025-08-20`), Google Jules, Cursor, and Factory in August 2025, `AGENTS.md` was contributed as a founding project of the Linux Foundation's Agentic AI Foundation (AAIF) on December 9, 2025 (`2025-12-09`) alongside Anthropic's Model Context Protocol (MCP) and Block's goose. [1][4][5][6]",
   "v05_identity_sentence_md": "**AGENTS.md** is an open, tool-agnostic Markdown format for guiding coding agents—providing a dedicated, predictable repository location for build steps, test commands, and project conventions that would clutter a human `README.md`. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Read](/category/read/) (`read`)"
    },
    {
     "label": "Form",
     "value_md": "Repository Markdown instruction file (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "OpenAI Codex (`AGENTS.md` documented May 16, 2025), Amp (`AGENT.md`, May 2025), Jules (Google), Cursor, and Factory; described as released by OpenAI in August 2025 in the Linux Foundation AAIF announcement [1][4][5][6]"
    },
    {
     "label": "Governed by",
     "value_md": "Agentic AI Foundation (AAIF), under the Linux Foundation (donated 2025-12-09) [1][6]"
    },
    {
     "label": "Track",
     "value_md": "Foundation / Consortium Specification (Agentic AI Foundation / Linux Foundation) [1]"
    },
    {
     "label": "Status",
     "value_md": "Open format; AAIF founding contribution (announced 2025-12-09) [1][6]"
    },
    {
     "label": "Version",
     "value_md": "Unversioned open Markdown format (no required fields or version header) [1]"
    },
    {
     "label": "Message format",
     "value_md": "Standard Markdown (no required fields or fixed headings) [1]"
    },
    {
     "label": "Specification",
     "value_md": "[AGENTS.md](https://agents.md/) [1]"
    },
    {
     "label": "Found at",
     "value_md": "Repository-root `AGENTS.md` and optional nested package/subdirectory `AGENTS.md` files (nearest file in directory tree wins) [1]"
    },
    {
     "label": "Licence",
     "value_md": "MIT License (`agentsmd/agents.md`) [7]"
    }
   ],
   "v05_problem_md": "Human `README.md` files are for quick starts, project descriptions, and contribution guidelines. The extra build steps, tests, and conventions coding agents need can clutter that README. The same guidance is often split again across `CLAUDE.md`, a `.github/copilot-instructions.md` file, deprecated `.cursorrules`, and `GEMINI.md`. [1][2][3] `AGENTS.md` collects that agent context in one tool-agnostic Markdown file with no required fields. Nested files follow nearest-directory precedence: the closest `AGENTS.md` in the directory tree takes precedence, so each package can ship its own commands and conventions. [1][3] `README.md` remains the human guide for quick starts, project descriptions, and contribution guidelines. `AGENTS.md` is the checked-in Markdown file coding agents read for repository instructions. `SKILL.md` packages reusable workflows that load only when relevant. The Model Context Protocol connects AI models to tools, data, and applications. [1][6][8]",
   "v05_mechanism_delta_md": "`AGENTS.md` collects that agent context in one tool-agnostic Markdown file with no required fields. Nested files follow nearest-directory precedence: the closest `AGENTS.md` in the directory tree takes precedence, so each package can ship its own commands and conventions. [1][3]",
   "v05_scope_boundary_md": "`README.md` remains the human guide for quick starts, project descriptions, and contribution guidelines. `AGENTS.md` is the checked-in Markdown file coding agents read for repository instructions. `SKILL.md` packages reusable workflows that load only when relevant. The Model Context Protocol connects AI models to tools, data, and applications. [1][6][8]",
   "v05_fuzzy_additions": [
    {
     "id": "file-structure-directory-precedence-and-instruction-hierarchy",
     "heading": "File structure, directory precedence, and instruction hierarchy",
     "body_md": "An `AGENTS.md` file is just standard Markdown with no required fields and no mandatory frontmatter. Any headings are allowed; the agent parses the text the repository provides. Stride calls the format plain Markdown with no required fields. Files in `.cursor/rules` need frontmatter for `description`, `globs`, and `alwaysApply`. `AGENTS.md` is the plain-markdown file used instead. [1][9][10]",
     "bullets": [
      {
       "label": "Nested monorepo precedence",
       "text_md": "Maintainers may place another `AGENTS.md` inside each package. The nearest file in the directory tree takes precedence, so the subproject ships its own instructions. The main OpenAI repo had 88 `AGENTS.md` files. Copilot uses that nearest-file rule. Factory can load a nested `apps/web/AGENTS.md` for that tree. [1][2][8]"
      },
      {
       "label": "Chat prompts override files",
       "text_md": "The closest `AGENTS.md` to the edited file wins, and explicit user chat prompts override everything. For Droid, the current user request outranks standing instructions, nested files refine the root file, and project files override personal defaults in `~/.factory/`. [1][8]"
      },
      {
       "label": "Setup, lint, and test commands",
       "text_md": "If testing commands are listed, the agent will attempt to execute those programmatic checks and fix failures before finishing. The homepage code sample above lists `pnpm install`, `pnpm dev`, and `pnpm test`, while separate `agents.md` example rules instruct agents to run `pnpm lint` and `pnpm test` before committing and `pnpm lint --filter` after moving files or changing imports. Because repository instruction files are repo-controlled text listing commands agents attempt to run, harnesses such as Claude Code treat them as context rather than enforced configuration and direct users to hooks (such as a `PreToolUse hook`) to block actions regardless of what the agent decides. [1][11]"
      },
      {
       "label": "Plain Markdown, no required schema",
       "text_md": "No field schema is required; `agents.md` describes `AGENTS.md` as living documentation. A plain `.md` file in `.cursor/rules` is ignored when it lacks frontmatter for `description`, `globs`, and `alwaysApply`. The `agents.md` homepage sample opens with `# AGENTS.md`, `## Setup commands`, and `## Code style`. [1][10]"
      }
     ]
    },
    {
     "id": "cross-harness-loading-configuration-hooks-and-compatibility",
     "heading": "Cross-harness loading, configuration hooks, and compatibility",
     "body_md": "One `AGENTS.md` is shared across coding agents. The project site names Codex, Jules, Factory, Cursor, Zed, VS Code, Devin, and GitHub Copilot in that compatible set. Discovery order, fallback names, import or symlink bridges, and byte caps still vary by harness. [1]",
     "bullets": [
      {
       "label": "Codex discovery and byte caps",
       "text_md": "Codex walks from the Git root down to the current directory. Each directory contributes `AGENTS.override.md`, else `AGENTS.md`, else one `project_doc_fallback_filenames` entry. Closer files override earlier text. The join stops at `project_doc_max_bytes` (32 KiB by default). `~/.codex/config.toml` sets fallbacks such as `TEAM_GUIDE.md` and `.agents.md`, and can raise the cap to `65536`. [12]"
      },
      {
       "label": "Claude Code imports and symlinks",
       "text_md": "Claude reads `AGENTS.md` (or `.claude/AGENTS.md`) directly only when `CLAUDE.md`, `.claude/CLAUDE.md`, and `CLAUDE.local.md` are absent from the working directory upward (`claude-md-or-agents-md`), which needs Claude Code v2.1.277 or later; users can also change the `Project instructions` setting to `claude-md-and-agents-md` so Claude reads both files together. Otherwise repositories can bridge the files with an `@AGENTS.md` import or `ln -s AGENTS.md CLAUDE.md` symlink. The `claude-md-and-agents-md` guide notes that Claude loads both and does not read an imported or symlinked `AGENTS.md` twice. [11]"
      },
      {
       "label": "IDE and agent loading",
       "text_md": "Cursor loads `AGENTS.md` in the root and subdirectories as an alternative to `.cursor/rules`. VS Code reads a workspace-root file when `chat.useAgentsMdFile` is on, the default. Copilot applies the nearest `AGENTS.md` in the directory tree, or lets a repository commit a single root `CLAUDE.md` or `GEMINI.md` as an alternative. Jules reads `AGENTS.md` in the repo. Devin injects the first `16 KiB` (`16,384` bytes). Factory walks up to the git root and also accepts `CLAUDE.md`. Zed is on the site's agent list. [1][2][8][10][13][14][15]"
      },
      {
       "label": "Singular AGENT.md migration",
       "text_md": "On August 20, 2025 Amp switched from `AGENT.md` to `AGENTS.md` while retaining backward compatibility with existing `AGENT.md` files, and `agents.md` documents renaming with `mv AGENT.md AGENTS.md && ln -s AGENTS.md AGENT.md` so older `AGENT.md` paths continue to resolve. Factory still checks `.agent/` and `.agents/`, and recommends `AGENTS.md` for new guidance. [1][4][8]"
      }
     ]
    }
   ],
   "v05_diagram": {
    "title": "Nearest AGENTS.md precedence",
    "heading": "Nearest AGENTS.md precedence",
    "mermaid": "flowchart TD\n  A[\"Conflict while editing a file\"] --> B{\"Explicit user chat prompt?\"}\n  B -->|yes| C[\"User prompt wins\"]\n  B -->|no| D[\"Walk from the edited file toward the repository root\"]\n  D --> E[\"Nearest AGENTS.md on that path\"]\n  E --> F[\"That file's instructions apply\"]\n  F --> G[\"A nested package file overrides the root AGENTS.md\"]",
    "caption_md": "Per the `agents.md` FAQ convention, the closest `AGENTS.md` to the edited file wins, and explicit user chat prompts override everything. Agents otherwise read the nearest file in the directory tree (while exact traversal, byte limits, and fallback rules vary by harness). [1]"
   },
   "v05_wire_artifact": {
    "title": "Canonical `AGENTS.md` specimen",
    "heading": "Canonical `AGENTS.md` specimen",
    "lang": "markdown",
    "code": "# AGENTS.md\n\n## Setup commands\n\n- Install deps: `pnpm install`\n- Start dev server: `pnpm dev`\n- Run tests: `pnpm test`\n\n## Code style\n\n- TypeScript strict mode\n- Single quotes, no semicolons\n- Use functional patterns where possible",
    "caption_md": "Homepage `AGENTS.md` sample: setup commands `pnpm install`, `pnpm dev`, and `pnpm test`, then a code-style section. [1]"
   },
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "README.md",
      "spec_or_rfc": "README.md",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "Provides human-facing quick starts, project descriptions, and contributor overviews, whereas `AGENTS.md` isolates agent-specific build commands, test workflows, and directory-scoped coding rules. [1]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "anthropic-agent-skills-format",
      "target_name": "Agent Skills",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Packages reusable workflows and domain expertise as on-demand skill directories containing `SKILL.md` (alongside scripts and assets), whereas `AGENTS.md` provides always-on repository coding guidelines. [3][8]"
     },
     {
      "target_id": "llms-txt",
      "target_name": "llms.txt",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Publishes an HTTP-served web documentation index at `/llms.txt` for external reading agents, whereas `AGENTS.md` is committed inside a source repository to guide coding agents modifying the codebase. [1]"
     },
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Connects AI models to external tools, data, and applications over a runtime protocol (co-founded in the AAIF alongside `AGENTS.md`), whereas `AGENTS.md` is a static Markdown convention for repository-specific guidance. [6]"
     },
     {
      "target_id": "agent-client-protocol",
      "target_name": "Agent Client Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Defines an editor-to-agent runtime protocol so compatible coding agents can run inside IDEs such as Zed and JetBrains, whereas `AGENTS.md` is the repository Markdown file those agents read for project instructions. [16][17][18]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (23 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).",
    "side_a": {
     "visible": true,
     "heading": "Reference repositories publishing AGENTS.md",
     "col4_header": "Artifact path & directory scope",
     "note_md": null,
     "rows": [
      {
       "actor": "vercel/next.js",
       "role": "Repo publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Serves root `AGENTS.md` (`# Next.js Development Guide`, `text/plain`) covering the pnpm monorepo and nested `test/AGENTS.md`.",
       "source_md": "[Next.js, AGENTS.md (checked 2026-10-30)](https://raw.githubusercontent.com/vercel/next.js/HEAD/AGENTS.md) [19]"
      },
      {
       "actor": "microsoft/vscode",
       "role": "Repo publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Serves root `AGENTS.md` (`# VS Code Agents Instructions`, `text/plain`) routing agents to `.github/copilot-instructions.md`.",
       "source_md": "[VS Code, AGENTS.md (checked 2026-10-30)](https://raw.githubusercontent.com/microsoft/vscode/HEAD/AGENTS.md) [20]"
      },
      {
       "actor": "apache/airflow",
       "role": "Repo publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Serves root `AGENTS.md` (`# AGENTS instructions`, `text/plain`) covering `Dag` naming, Breeze commands, and architecture boundaries.",
       "source_md": "[Apache Airflow, AGENTS.md (checked 2026-10-30)](https://raw.githubusercontent.com/apache/airflow/HEAD/AGENTS.md) [21]"
      },
      {
       "actor": "pandas-dev/pandas",
       "role": "Repo publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Serves root `AGENTS.md` (`# AGENTS.md`, `text/plain`) covering Meson Cython/C++ builds, GitHub interaction rules, and repository map.",
       "source_md": "[pandas, AGENTS.md (checked 2026-10-30)](https://raw.githubusercontent.com/pandas-dev/pandas/HEAD/AGENTS.md) [22]"
      },
      {
       "actor": "astral-sh/uv",
       "role": "Repo publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Serves heading-free root `AGENTS.md` (`text/plain`), opening with bulleted rules referencing `CONTRIBUTING.md` and `insta` snapshots.",
       "source_md": "[uv, AGENTS.md (checked 2026-10-30)](https://raw.githubusercontent.com/astral-sh/uv/HEAD/AGENTS.md) [23]"
      },
      {
       "actor": "temporalio/sdk-java",
       "role": "Repo publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-11-04",
       "col4_md": "Serves root `AGENTS.md` (`# Contributor Quickstart Guide`, `text/plain`) with Gradle layout, `./gradlew spotlessCheck`, and `./gradlew test` rules.",
       "source_md": "[temporalio/sdk-java, AGENTS.md (checked 2026-11-04)](https://raw.githubusercontent.com/temporalio/sdk-java/master/AGENTS.md) [24]"
      },
      {
       "actor": "pydantic/pydantic-ai",
       "role": "Repo publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-11-04",
       "col4_md": "Serves root `AGENTS.md` (`text/plain`, 19,537 bytes) linking 18 nested `AGENTS.md` files across `docs/`, `pydantic_ai_slim/`, and `tests/`.",
       "source_md": "[pydantic/pydantic-ai, AGENTS.md (checked 2026-11-04)](https://raw.githubusercontent.com/pydantic/pydantic-ai/main/AGENTS.md) [25]"
      },
      {
       "actor": "oven-sh/bun",
       "role": "Repo publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-11-04",
       "col4_md": "Serves a 9-byte root `AGENTS.md` (`text/plain`) containing only `CLAUDE.md` as a cross-file pointer.",
       "source_md": "[oven-sh/bun, AGENTS.md (checked 2026-11-04)](https://raw.githubusercontent.com/oven-sh/bun/main/AGENTS.md) [26]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Coding agents, IDEs & CLI harnesses",
     "col4_header": "Discovery & hierarchy precedence",
     "note_md": null,
     "rows": [
      {
       "actor": "OpenAI Codex",
       "role": "Coding agent",
       "status": "Supported",
       "status_display": "Supported · as of 2025-05-16",
       "col4_md": "Guided by repository `AGENTS.md` files since `2025-05-16`; in configuration docs (checked `2026-10-30`), reads `~/.codex` and walks root-to-CWD loading `AGENTS.override.md` or `AGENTS.md`, concatenating closer files last.",
       "source_md": "[OpenAI, Introducing Codex (2025-05-16)](https://web.archive.org/web/20261022165127/https://openai.com/index/introducing-codex/) [5] · [OpenAI, Custom instructions with AGENTS.md (checked 2026-10-30)](https://learn.chatgpt.com/docs/agent-configuration/agents-md) [12]"
      },
      {
       "actor": "GitHub Copilot",
       "role": "Coding agent",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Loads one or more `AGENTS.md` files anywhere in the repository; nearest file in the directory tree takes precedence.",
       "source_md": "[GitHub Docs, Adding repository custom instructions for GitHub Copilot](https://docs.github.com/en/copilot/how-tos/copilot-on-github/customize-copilot/add-custom-instructions/add-repository-instructions) [2]"
      },
      {
       "actor": "Cursor",
       "role": "IDE / Coding agent",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Loads plain-Markdown `AGENTS.md` in root and subdirectories, combining parent files with subdirectory precedence.",
       "source_md": "[Cursor Docs, Rules](https://cursor.com/docs/rules) [10]"
      },
      {
       "actor": "Factory (Droid)",
       "role": "Coding agent / CLI",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Searches CWD-to-Git-root and dynamic Read paths for `AGENTS.md`, refining root rules with nested files.",
       "source_md": "[Factory Documentation, AGENTS.md](https://docs.factory.com/harness/agents-md) [8]"
      },
      {
       "actor": "Amp",
       "role": "Coding agent",
       "status": "Supported",
       "status_display": "Supported · as of 2025-08-20",
       "col4_md": "Adopted `AGENTS.md` as standard filename on 2025-08-20 with glob mentions and `AGENT.md` backward compatibility.",
       "source_md": "[Amp, From AGENT.md to AGENTS.md (2025-08-20)](https://ampcode.com/news/AGENTS.md) [4]"
      },
      {
       "actor": "Google Jules",
       "role": "Coding agent",
       "status": "Supported",
       "status_display": "Supported · as of 2025-06-20",
       "col4_md": "Reads context from `AGENTS.md` automatically when present in a repository (shipped 2025-06-20).",
       "source_md": "[Jules Changelog, Jules Agent Update (2025-06-20)](https://jules.google/docs/changelog/2025-06-20/) [14]"
      },
      {
       "actor": "Visual Studio Code",
       "role": "IDE / Editor",
       "status": "Experimental",
       "status_display": "Experimental · as of 2025-08",
       "col4_md": "Picks up workspace-root `AGENTS.md` for chat requests under default-enabled experimental `chat.useAgentsMdFile` setting (v1.104).",
       "source_md": "[Microsoft, VS Code August 2025 (version 1.104)](https://code.visualstudio.com/updates/v1_104) [13]"
      },
      {
       "actor": "Anthropic (Claude Code)",
       "role": "Coding agent / CLI",
       "status": "Partial",
       "status_display": "Partial · as of 2026-11-02",
       "col4_md": "Reads `AGENTS.md` and `.claude/AGENTS.md` by default only when no `CLAUDE.md` exists in or above CWD.",
       "source_md": "[Claude Code Docs, How Claude remembers your project (modified 2026-11-02)](https://code.claude.com/docs/en/memory) [11]"
      },
      {
       "actor": "Cognition (Devin)",
       "role": "Coding agent",
       "status": "Partial",
       "status_display": "Partial · as of 2026-09-25",
       "col4_md": "Automatically injects up to 16 KiB (16,384 bytes) per `AGENTS.md` before coding; longer files truncate.",
       "source_md": "[Devin Docs, AGENTS.md files for Devin (modified 2026-09-25)](https://docs.devin.ai/onboard-devin/agents-md) [15]"
      },
      {
       "actor": "Aider",
       "role": "Coding agent / CLI",
       "status": "Partial",
       "status_display": "Partial · checked 2026-10-30",
       "col4_md": "Documented in the `agents.md` FAQ as requiring explicit `read: AGENTS.md` configuration in `.aider.conf.yml`.",
       "source_md": "[AGENTS.md FAQ, How do I configure Aider?](https://agents.md/) [1]"
      },
      {
       "actor": "Google Gemini CLI",
       "role": "Coding agent / CLI",
       "status": "Partial",
       "status_display": "Partial · as of 2026-06-30",
       "col4_md": "Uses `GEMINI.md` by default; `agents.md` FAQ documents configuring `AGENTS.md` via `.gemini/settings.json`.",
       "source_md": "[AGENTS.md FAQ, How do I configure Gemini CLI?](https://agents.md/) [1] · [Galster et al., arXiv:2602.14690v5 (Table 1)](https://arxiv.org/html/2602.14690v5) [3]"
      },
      {
       "actor": "Zed",
       "role": "IDE / Editor",
       "status": "Listed",
       "status_display": "Listed · checked 2026-10-30",
       "col4_md": "Named in the compatible coding-agent roster on `agents.md`.",
       "source_md": "[AGENTS.md, One AGENTS.md works across many agents](https://agents.md/) [1]"
      },
      {
       "actor": "Windsurf (Cognition)",
       "role": "IDE / Coding agent",
       "status": "Listed",
       "status_display": "Listed · checked 2026-10-30",
       "col4_md": "Named in the compatible coding-agent roster on `agents.md`.",
       "source_md": "[AGENTS.md, One AGENTS.md works across many agents](https://agents.md/) [1]"
      },
      {
       "actor": "Block (goose)",
       "role": "Coding agent / CLI",
       "status": "Listed",
       "status_display": "Listed · checked 2026-10-30",
       "col4_md": "Named in the compatible coding-agent roster on `agents.md`.",
       "source_md": "[AGENTS.md, One AGENTS.md works across many agents](https://agents.md/) [1]"
      },
      {
       "actor": "opencode",
       "role": "Coding agent / CLI",
       "status": "Listed",
       "status_display": "Listed · checked 2026-10-30",
       "col4_md": "Named in the compatible coding-agent roster on `agents.md`.",
       "source_md": "[AGENTS.md, One AGENTS.md works across many agents](https://agents.md/) [1]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [
     {
      "label": "Project-reported open-source repository lower bound (agents.md & Linux Foundation AAIF)",
      "as_of": "2025-12-09",
      "value_md": "Over 60,000 open-source projects reported as using AGENTS.md on the agents.md specification site (which links a live GitHub code search for path:AGENTS.md NOT is:fork NOT is:archived) and in the Linux Foundation's 9 December 2025 Agentic AI Foundation (AAIF) formation announcement. [1][6]"
     },
     {
      "label": "High-star active GitHub census: 7,370 repositories with >=5,000 stars (Stride study)",
      "as_of": "2026-09-27",
      "value_md": "In Stride's 27 September 2026 census of all 7,370 active public GitHub repositories with 5,000 or more stars, 1,864 repositories (25.3%) had a root AGENTS.md file (rising to 41.8% among repositories with 50,000+ stars) and 33.4% had at least one coding-agent instruction file; across adopted AGENTS.md files, the median length was 819 words (with 13.4% between 200 and 400 words), 73.5% named a test, build, or lint command, 39.3% mentioned security or secrets, and among the 1,013 repositories carrying both AGENTS.md and CLAUDE.md, 36.2% joined them via a symlink, 35.5% used an @AGENTS.md import, and 25.9% linked neither. [9]"
     },
     {
      "label": "13-language GitHub census of 22,854 active >=1,000-star repositories (Zarzycki, arXiv:2610.31715v2)",
      "as_of": "2026-10-26",
      "value_md": "Across 22,854 non-fork, non-archived public GitHub repositories with at least 1,000 stars and a push within 90 days in 13 languages (enumerated 16 October 2026), 6,006 repositories (26.3%, rising from 23.2% in the lowest star tier to 59.6% of the 89 most-starred repositories) published a root AGENTS.md, a root CLAUDE.md, or both—consisting of 2,566 repositories with only AGENTS.md, 1,052 with only CLAUDE.md, and 2,388 with both (of those with both, most point one file at the other: CLAUDE.md defers to AGENTS.md via a link, import, or pointer in 1,540 repositories, the reverse in 182, and only 598 keep two files with content of their own); counting additional one-level-deep formats (.github/copilot-instructions.md, .github/instructions/, /GEMINI.md, .claude/CLAUDE.md, /.cursorrules, /.windsurfrules) raised total adoption to 6,652 repositories (29.1%). [27]"
     },
     {
      "label": "Pre-2024 engineered software study: 2,853 tool-configuring repos out of 32,564 engineered projects (Galster et al., arXiv:2602.14690v5)",
      "as_of": "2026-06-30",
      "value_md": "From 32,564 engineered open-source GitHub repositories created before 1 January 2024 and active since 1 June 2025, 2,853 repositories (8.8%) configured at least one agentic coding tool—partitioned into 2,015 single-tool repositories (70.6%), 295 two-tool repositories (10.3%), 50 three-or-more-tool repositories (1.8%), and 493 repositories (17.3% of the 2,853 tool-configuring repositories) that used AGENTS.md alone as a tool-agnostic standard without any tool-specific configuration artifact. [3]"
     },
     {
      "label": "AGENTS.md Tracker (agentsmd.formachines.ai)",
      "as_of": "2026-11-06",
      "value_md": "The AGENTS.md Tracker scan published 2026-11-06 found a root AGENTS.md in 546 of 1,922 repositories (28.4%), and at least one of eight tracked instruction files in 677 of 1,922 (35.2%), measuring file presence on the default branch. [28]"
     },
     {
      "label": "RepoAgentKit top-100 snapshot",
      "as_of": "2026-09-01",
      "value_md": "RepoAgentKit's 2026-09-01 snapshot, covering 100 pinned commits, found a case-sensitive root AGENTS.md in 39 of GitHub's top 100 repositories (excluding nested-only files), reporting a median of 112 lines and 29 of 39 files mentioning testing. [29]"
     },
     {
      "label": "World of Code V2604 configuration-file census",
      "as_of": "2026-04",
      "value_md": "The World of Code V2604 configuration-file census records 134,810 AGENTS.md blobs and 151,390 CLAUDE.md blobs. The paper warns that cross-snapshot counts mix adoption with a growing corpus and should be read as coarse upper-bound trends, not adoption rates. [30]"
     }
    ],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "vercel-agent-readability",
     "target_name": "Agent Readability Spec",
     "relation_label": "Complements",
     "delta": "The guide treats /AGENTS.md as a readability artifact, while AGENTS.md is the instruction file for coding agents.",
     "item_md": "**[Agent Readability Spec](/protocols/vercel-agent-readability/)** (Complements) — The guide treats /AGENTS.md as a readability artifact, while AGENTS.md is the instruction file for coding agents."
    },
    {
     "target_id": "okf",
     "target_name": "Open Knowledge Format",
     "relation_label": "Peer alternative",
     "delta": "AGENTS.md is one README for coding agents; OKF is a directory of Markdown files with YAML frontmatter.",
     "item_md": "**[Open Knowledge Format](/protocols/okf/)** (Peer alternative) — AGENTS.md is one README for coding agents; OKF is a directory of Markdown files with YAML frontmatter."
    },
    {
     "target_id": "acip",
     "target_name": "Agent Context Interchange Protocol",
     "relation_label": "Complements",
     "delta": "ACIP reads YAML at .agents/agent-context.yaml with a precedence algorithm and a resolution receipt, and it is paired with AGENTS.md prose rather than replacing that file format.",
     "item_md": "**[Agent Context Interchange Protocol](/protocols/acip/)** (Complements) — ACIP reads YAML at .agents/agent-context.yaml with a precedence algorithm and a resolution receipt, and it is paired with AGENTS.md prose rather than replacing that file format."
    },
    {
     "item_md": "**[Read protocols](/category/read/)** — Category index for `read` standards."
    }
   ],
   "v05_compiled_md": "---\nid: agents-md\ntitle: \"AGENTS.md\"\ntier: flagship\nlifecycle_status: active\ncategory: read\nform: document-format\nwire_archetype: web_discovery\nspec_url: https://agents.md/\nlast_checked: 2026-11-12\n---\n\n# AGENTS.md\n\n**Category:** [Read](/category/read/) (`read`) · **Form:** Repository Markdown instruction file (`document-format`) · **Last checked:** 2026-11-12\n\n> *Not to be confused with [llms.txt](/protocols/llms-txt/) (HTTP-served web documentation index) or [Agent Skills](/protocols/anthropic-agent-skills-format/) (packaged `SKILL.md` workflow directories). [1]*\n\n> **In brief:** `AGENTS.md` is a vendor-neutral repository instruction file that gives AI coding agents (such as OpenAI Codex, Cursor, Google Jules, and Amp) a predictable place to find build commands, test workflows, and codebase conventions alongside a human `README.md`. Instead of duplicating project rules across tool-specific files like `CLAUDE.md`, `GEMINI.md`, `.cursorrules`, and `.github/copilot-instructions.md`, maintainers check in plain Markdown `AGENTS.md` files at the repo root or inside subdirectories so every coding agent reads the nearest file automatically. [1][2][3]\n\n**AGENTS.md** is an open, tool-agnostic Markdown format for guiding coding agents—providing a dedicated, predictable repository location for build steps, test commands, and project conventions that would clutter a human `README.md`. [1] Maintainers place standard Markdown `AGENTS.md` files (with no required fields or mandatory frontmatter) at the repository root and optionally inside nested packages. Coding agents automatically read the nearest `AGENTS.md` in the directory tree so the closest file to the edited path takes precedence, while explicit user chat prompts override everything. [1] First documented in OpenAI's May 16, 2025 Codex launch and consolidated across OpenAI Codex, Amp (which switched from singular `AGENT.md` to `AGENTS.md` on August 20, 2025, `2025-08-20`), Google Jules, Cursor, and Factory in August 2025, `AGENTS.md` was contributed as a founding project of the Linux Foundation's Agentic AI Foundation (AAIF) on December 9, 2025 (`2025-12-09`) alongside Anthropic's Model Context Protocol (MCP) and Block's goose. [1][4][5][6]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Read](/category/read/) (`read`) |\n| **Form** | Repository Markdown instruction file (`document-format`) |\n| **Originated by** | OpenAI Codex (`AGENTS.md` documented May 16, 2025), Amp (`AGENT.md`, May 2025), Jules (Google), Cursor, and Factory; described as released by OpenAI in August 2025 in the Linux Foundation AAIF announcement [1][4][5][6] |\n| **Governed by** | Agentic AI Foundation (AAIF), under the Linux Foundation (donated 2025-12-09) [1][6] |\n| **Track** | Foundation / Consortium Specification (Agentic AI Foundation / Linux Foundation) [1] |\n| **Status** | Open format; AAIF founding contribution (announced 2025-12-09) [1][6] |\n| **Version** | Unversioned open Markdown format (no required fields or version header) [1] |\n| **Message format** | Standard Markdown (no required fields or fixed headings) [1] |\n| **Specification** | [AGENTS.md](https://agents.md/) [1] |\n| **Found at** | Repository-root `AGENTS.md` and optional nested package/subdirectory `AGENTS.md` files (nearest file in directory tree wins) [1] |\n| **Licence** | MIT License (`agentsmd/agents.md`) [7] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [File structure, directory precedence, and instruction hierarchy](#file-structure-directory-precedence-and-instruction-hierarchy)\n3. [Cross-harness loading, configuration hooks, and compatibility](#cross-harness-loading-configuration-hooks-and-compatibility)\n4. [Counterparts and related standards](#counterparts-and-related-standards)\n5. [Adoption and ecosystem](#adoption-and-ecosystem)\n6. [See also](#see-also)\n7. [References](#references)\n\n---\n\n## Problem and scope\n\nHuman `README.md` files are for quick starts, project descriptions, and contribution guidelines. The extra build steps, tests, and conventions coding agents need can clutter that README. The same guidance is often split again across `CLAUDE.md`, a `.github/copilot-instructions.md` file, deprecated `.cursorrules`, and `GEMINI.md`. [1][2][3] `AGENTS.md` collects that agent context in one tool-agnostic Markdown file with no required fields. Nested files follow nearest-directory precedence: the closest `AGENTS.md` in the directory tree takes precedence, so each package can ship its own commands and conventions. [1][3] `README.md` remains the human guide for quick starts, project descriptions, and contribution guidelines. `AGENTS.md` is the checked-in Markdown file coding agents read for repository instructions. `SKILL.md` packages reusable workflows that load only when relevant. The Model Context Protocol connects AI models to tools, data, and applications. [1][6][8]\n\n### Nearest AGENTS.md precedence\n\n```mermaid\nflowchart TD\n  A[\"Conflict while editing a file\"] --> B{\"Explicit user chat prompt?\"}\n  B -->|yes| C[\"User prompt wins\"]\n  B -->|no| D[\"Walk from the edited file toward the repository root\"]\n  D --> E[\"Nearest AGENTS.md on that path\"]\n  E --> F[\"That file's instructions apply\"]\n  F --> G[\"A nested package file overrides the root AGENTS.md\"]\n```\n\n*Per the `agents.md` FAQ convention, the closest `AGENTS.md` to the edited file wins, and explicit user chat prompts override everything. Agents otherwise read the nearest file in the directory tree (while exact traversal, byte limits, and fallback rules vary by harness). [1]*\n\n### Canonical `AGENTS.md` specimen\n\n```markdown\n# AGENTS.md\n\n## Setup commands\n\n- Install deps: `pnpm install`\n- Start dev server: `pnpm dev`\n- Run tests: `pnpm test`\n\n## Code style\n\n- TypeScript strict mode\n- Single quotes, no semicolons\n- Use functional patterns where possible\n```\n\n*Homepage `AGENTS.md` sample: setup commands `pnpm install`, `pnpm dev`, and `pnpm test`, then a code-style section. [1]*\n\n---\n\n## File structure, directory precedence, and instruction hierarchy\n\nAn `AGENTS.md` file is just standard Markdown with no required fields and no mandatory frontmatter. Any headings are allowed; the agent parses the text the repository provides. Stride calls the format plain Markdown with no required fields. Files in `.cursor/rules` need frontmatter for `description`, `globs`, and `alwaysApply`. `AGENTS.md` is the plain-markdown file used instead. [1][9][10]\n\n- **Nested monorepo precedence:** Maintainers may place another `AGENTS.md` inside each package. The nearest file in the directory tree takes precedence, so the subproject ships its own instructions. The main OpenAI repo had 88 `AGENTS.md` files. Copilot uses that nearest-file rule. Factory can load a nested `apps/web/AGENTS.md` for that tree. [1][2][8]\n- **Chat prompts override files:** The closest `AGENTS.md` to the edited file wins, and explicit user chat prompts override everything. For Droid, the current user request outranks standing instructions, nested files refine the root file, and project files override personal defaults in `~/.factory/`. [1][8]\n- **Setup, lint, and test commands:** If testing commands are listed, the agent will attempt to execute those programmatic checks and fix failures before finishing. The homepage code sample above lists `pnpm install`, `pnpm dev`, and `pnpm test`, while separate `agents.md` example rules instruct agents to run `pnpm lint` and `pnpm test` before committing and `pnpm lint --filter` after moving files or changing imports. Because repository instruction files are repo-controlled text listing commands agents attempt to run, harnesses such as Claude Code treat them as context rather than enforced configuration and direct users to hooks (such as a `PreToolUse hook`) to block actions regardless of what the agent decides. [1][11]\n- **Plain Markdown, no required schema:** No field schema is required; `agents.md` describes `AGENTS.md` as living documentation. A plain `.md` file in `.cursor/rules` is ignored when it lacks frontmatter for `description`, `globs`, and `alwaysApply`. The `agents.md` homepage sample opens with `# AGENTS.md`, `## Setup commands`, and `## Code style`. [1][10]\n\n---\n\n## Cross-harness loading, configuration hooks, and compatibility\n\nOne `AGENTS.md` is shared across coding agents. The project site names Codex, Jules, Factory, Cursor, Zed, VS Code, Devin, and GitHub Copilot in that compatible set. Discovery order, fallback names, import or symlink bridges, and byte caps still vary by harness. [1]\n\n- **Codex discovery and byte caps:** Codex walks from the Git root down to the current directory. Each directory contributes `AGENTS.override.md`, else `AGENTS.md`, else one `project_doc_fallback_filenames` entry. Closer files override earlier text. The join stops at `project_doc_max_bytes` (32 KiB by default). `~/.codex/config.toml` sets fallbacks such as `TEAM_GUIDE.md` and `.agents.md`, and can raise the cap to `65536`. [12]\n- **Claude Code imports and symlinks:** Claude reads `AGENTS.md` (or `.claude/AGENTS.md`) directly only when `CLAUDE.md`, `.claude/CLAUDE.md`, and `CLAUDE.local.md` are absent from the working directory upward (`claude-md-or-agents-md`), which needs Claude Code v2.1.277 or later; users can also change the `Project instructions` setting to `claude-md-and-agents-md` so Claude reads both files together. Otherwise repositories can bridge the files with an `@AGENTS.md` import or `ln -s AGENTS.md CLAUDE.md` symlink. The `claude-md-and-agents-md` guide notes that Claude loads both and does not read an imported or symlinked `AGENTS.md` twice. [11]\n- **IDE and agent loading:** Cursor loads `AGENTS.md` in the root and subdirectories as an alternative to `.cursor/rules`. VS Code reads a workspace-root file when `chat.useAgentsMdFile` is on, the default. Copilot applies the nearest `AGENTS.md` in the directory tree, or lets a repository commit a single root `CLAUDE.md` or `GEMINI.md` as an alternative. Jules reads `AGENTS.md` in the repo. Devin injects the first `16 KiB` (`16,384` bytes). Factory walks up to the git root and also accepts `CLAUDE.md`. Zed is on the site's agent list. [1][2][8][10][13][14][15]\n- **Singular AGENT.md migration:** On August 20, 2025 Amp switched from `AGENT.md` to `AGENTS.md` while retaining backward compatibility with existing `AGENT.md` files, and `agents.md` documents renaming with `mv AGENT.md AGENTS.md && ln -s AGENTS.md AGENT.md` so older `AGENT.md` paths continue to resolve. Factory still checks `.agent/` and `.agents/`, and recommends `AGENTS.md` for new guidance. [1][4][8]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **README.md** | `README.md` | Analogous to classic standard | Provides human-facing quick starts, project descriptions, and contributor overviews, whereas `AGENTS.md` isolates agent-specific build commands, test workflows, and directory-scoped coding rules. [1] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Agent Skills](/protocols/anthropic-agent-skills-format/)** | Complements | Packages reusable workflows and domain expertise as on-demand skill directories containing `SKILL.md` (alongside scripts and assets), whereas `AGENTS.md` provides always-on repository coding guidelines. [3][8] |\n| **[llms.txt](/protocols/llms-txt/)** | Complements | Publishes an HTTP-served web documentation index at `/llms.txt` for external reading agents, whereas `AGENTS.md` is committed inside a source repository to guide coding agents modifying the codebase. [1] |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | Connects AI models to external tools, data, and applications over a runtime protocol (co-founded in the AAIF alongside `AGENTS.md`), whereas `AGENTS.md` is a static Markdown convention for repository-specific guidance. [6] |\n| **[Agent Client Protocol](/protocols/agent-client-protocol/)** | Complements | Defines an editor-to-agent runtime protocol so compatible coding agents can run inside IDEs such as Zed and JetBrains, whereas `AGENTS.md` is the repository Markdown file those agents read for project instructions. [16][17][18] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (23 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).*\n\n### Reference repositories publishing AGENTS.md\n\n| Actor | Role | Status | Artifact path & directory scope | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **vercel/next.js** | Repo publisher | Live (HTTP 200) · checked 2026-10-30 | Serves root `AGENTS.md` (`# Next.js Development Guide`, `text/plain`) covering the pnpm monorepo and nested `test/AGENTS.md`. | [Next.js, AGENTS.md (checked 2026-10-30)](https://raw.githubusercontent.com/vercel/next.js/HEAD/AGENTS.md) [19] |\n| **microsoft/vscode** | Repo publisher | Live (HTTP 200) · checked 2026-10-30 | Serves root `AGENTS.md` (`# VS Code Agents Instructions`, `text/plain`) routing agents to `.github/copilot-instructions.md`. | [VS Code, AGENTS.md (checked 2026-10-30)](https://raw.githubusercontent.com/microsoft/vscode/HEAD/AGENTS.md) [20] |\n| **apache/airflow** | Repo publisher | Live (HTTP 200) · checked 2026-10-30 | Serves root `AGENTS.md` (`# AGENTS instructions`, `text/plain`) covering `Dag` naming, Breeze commands, and architecture boundaries. | [Apache Airflow, AGENTS.md (checked 2026-10-30)](https://raw.githubusercontent.com/apache/airflow/HEAD/AGENTS.md) [21] |\n| **pandas-dev/pandas** | Repo publisher | Live (HTTP 200) · checked 2026-10-30 | Serves root `AGENTS.md` (`# AGENTS.md`, `text/plain`) covering Meson Cython/C++ builds, GitHub interaction rules, and repository map. | [pandas, AGENTS.md (checked 2026-10-30)](https://raw.githubusercontent.com/pandas-dev/pandas/HEAD/AGENTS.md) [22] |\n| **astral-sh/uv** | Repo publisher | Live (HTTP 200) · checked 2026-10-30 | Serves heading-free root `AGENTS.md` (`text/plain`), opening with bulleted rules referencing `CONTRIBUTING.md` and `insta` snapshots. | [uv, AGENTS.md (checked 2026-10-30)](https://raw.githubusercontent.com/astral-sh/uv/HEAD/AGENTS.md) [23] |\n| **temporalio/sdk-java** | Repo publisher | Live (HTTP 200) · checked 2026-11-04 | Serves root `AGENTS.md` (`# Contributor Quickstart Guide`, `text/plain`) with Gradle layout, `./gradlew spotlessCheck`, and `./gradlew test` rules. | [temporalio/sdk-java, AGENTS.md (checked 2026-11-04)](https://raw.githubusercontent.com/temporalio/sdk-java/master/AGENTS.md) [24] |\n| **pydantic/pydantic-ai** | Repo publisher | Live (HTTP 200) · checked 2026-11-04 | Serves root `AGENTS.md` (`text/plain`, 19,537 bytes) linking 18 nested `AGENTS.md` files across `docs/`, `pydantic_ai_slim/`, and `tests/`. | [pydantic/pydantic-ai, AGENTS.md (checked 2026-11-04)](https://raw.githubusercontent.com/pydantic/pydantic-ai/main/AGENTS.md) [25] |\n| **oven-sh/bun** | Repo publisher | Live (HTTP 200) · checked 2026-11-04 | Serves a 9-byte root `AGENTS.md` (`text/plain`) containing only `CLAUDE.md` as a cross-file pointer. | [oven-sh/bun, AGENTS.md (checked 2026-11-04)](https://raw.githubusercontent.com/oven-sh/bun/main/AGENTS.md) [26] |\n\n### Coding agents, IDEs & CLI harnesses\n\n| Actor | Role | Status | Discovery & hierarchy precedence | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **OpenAI Codex** | Coding agent | Supported · as of 2025-05-16 | Guided by repository `AGENTS.md` files since `2025-05-16`; in configuration docs (checked `2026-10-30`), reads `~/.codex` and walks root-to-CWD loading `AGENTS.override.md` or `AGENTS.md`, concatenating closer files last. | [OpenAI, Introducing Codex (2025-05-16)](https://web.archive.org/web/20261022165127/https://openai.com/index/introducing-codex/) [5] · [OpenAI, Custom instructions with AGENTS.md (checked 2026-10-30)](https://learn.chatgpt.com/docs/agent-configuration/agents-md) [12] |\n| **GitHub Copilot** | Coding agent | Supported · checked 2026-10-30 | Loads one or more `AGENTS.md` files anywhere in the repository; nearest file in the directory tree takes precedence. | [GitHub Docs, Adding repository custom instructions for GitHub Copilot](https://docs.github.com/en/copilot/how-tos/copilot-on-github/customize-copilot/add-custom-instructions/add-repository-instructions) [2] |\n| **Cursor** | IDE / Coding agent | Supported · checked 2026-10-30 | Loads plain-Markdown `AGENTS.md` in root and subdirectories, combining parent files with subdirectory precedence. | [Cursor Docs, Rules](https://cursor.com/docs/rules) [10] |\n| **Factory (Droid)** | Coding agent / CLI | Supported · checked 2026-10-30 | Searches CWD-to-Git-root and dynamic Read paths for `AGENTS.md`, refining root rules with nested files. | [Factory Documentation, AGENTS.md](https://docs.factory.com/harness/agents-md) [8] |\n| **Amp** | Coding agent | Supported · as of 2025-08-20 | Adopted `AGENTS.md` as standard filename on 2025-08-20 with glob mentions and `AGENT.md` backward compatibility. | [Amp, From AGENT.md to AGENTS.md (2025-08-20)](https://ampcode.com/news/AGENTS.md) [4] |\n| **Google Jules** | Coding agent | Supported · as of 2025-06-20 | Reads context from `AGENTS.md` automatically when present in a repository (shipped 2025-06-20). | [Jules Changelog, Jules Agent Update (2025-06-20)](https://jules.google/docs/changelog/2025-06-20/) [14] |\n| **Visual Studio Code** | IDE / Editor | Experimental · as of 2025-08 | Picks up workspace-root `AGENTS.md` for chat requests under default-enabled experimental `chat.useAgentsMdFile` setting (v1.104). | [Microsoft, VS Code August 2025 (version 1.104)](https://code.visualstudio.com/updates/v1_104) [13] |\n| **Anthropic (Claude Code)** | Coding agent / CLI | Partial · as of 2026-11-02 | Reads `AGENTS.md` and `.claude/AGENTS.md` by default only when no `CLAUDE.md` exists in or above CWD. | [Claude Code Docs, How Claude remembers your project (modified 2026-11-02)](https://code.claude.com/docs/en/memory) [11] |\n| **Cognition (Devin)** | Coding agent | Partial · as of 2026-09-25 | Automatically injects up to 16 KiB (16,384 bytes) per `AGENTS.md` before coding; longer files truncate. | [Devin Docs, AGENTS.md files for Devin (modified 2026-09-25)](https://docs.devin.ai/onboard-devin/agents-md) [15] |\n| **Aider** | Coding agent / CLI | Partial · checked 2026-10-30 | Documented in the `agents.md` FAQ as requiring explicit `read: AGENTS.md` configuration in `.aider.conf.yml`. | [AGENTS.md FAQ, How do I configure Aider?](https://agents.md/) [1] |\n| **Google Gemini CLI** | Coding agent / CLI | Partial · as of 2026-06-30 | Uses `GEMINI.md` by default; `agents.md` FAQ documents configuring `AGENTS.md` via `.gemini/settings.json`. | [AGENTS.md FAQ, How do I configure Gemini CLI?](https://agents.md/) [1] · [Galster et al., arXiv:2602.14690v5 (Table 1)](https://arxiv.org/html/2602.14690v5) [3] |\n| **Zed** | IDE / Editor | Listed · checked 2026-10-30 | Named in the compatible coding-agent roster on `agents.md`. | [AGENTS.md, One AGENTS.md works across many agents](https://agents.md/) [1] |\n| **Windsurf (Cognition)** | IDE / Coding agent | Listed · checked 2026-10-30 | Named in the compatible coding-agent roster on `agents.md`. | [AGENTS.md, One AGENTS.md works across many agents](https://agents.md/) [1] |\n| **Block (goose)** | Coding agent / CLI | Listed · checked 2026-10-30 | Named in the compatible coding-agent roster on `agents.md`. | [AGENTS.md, One AGENTS.md works across many agents](https://agents.md/) [1] |\n| **opencode** | Coding agent / CLI | Listed · checked 2026-10-30 | Named in the compatible coding-agent roster on `agents.md`. | [AGENTS.md, One AGENTS.md works across many agents](https://agents.md/) [1] |\n\n### Ecosystem censuses\n\n- **Project-reported open-source repository lower bound (agents.md & Linux Foundation AAIF)** (*as of 2025-12-09*): Over 60,000 open-source projects reported as using AGENTS.md on the agents.md specification site (which links a live GitHub code search for path:AGENTS.md NOT is:fork NOT is:archived) and in the Linux Foundation's 9 December 2025 Agentic AI Foundation (AAIF) formation announcement. [1][6]\n- **High-star active GitHub census: 7,370 repositories with >=5,000 stars (Stride study)** (*as of 2026-09-27*): In Stride's 27 September 2026 census of all 7,370 active public GitHub repositories with 5,000 or more stars, 1,864 repositories (25.3%) had a root AGENTS.md file (rising to 41.8% among repositories with 50,000+ stars) and 33.4% had at least one coding-agent instruction file; across adopted AGENTS.md files, the median length was 819 words (with 13.4% between 200 and 400 words), 73.5% named a test, build, or lint command, 39.3% mentioned security or secrets, and among the 1,013 repositories carrying both AGENTS.md and CLAUDE.md, 36.2% joined them via a symlink, 35.5% used an @AGENTS.md import, and 25.9% linked neither. [9]\n- **13-language GitHub census of 22,854 active >=1,000-star repositories (Zarzycki, arXiv:2610.31715v2)** (*as of 2026-10-26*): Across 22,854 non-fork, non-archived public GitHub repositories with at least 1,000 stars and a push within 90 days in 13 languages (enumerated 16 October 2026), 6,006 repositories (26.3%, rising from 23.2% in the lowest star tier to 59.6% of the 89 most-starred repositories) published a root AGENTS.md, a root CLAUDE.md, or both—consisting of 2,566 repositories with only AGENTS.md, 1,052 with only CLAUDE.md, and 2,388 with both (of those with both, most point one file at the other: CLAUDE.md defers to AGENTS.md via a link, import, or pointer in 1,540 repositories, the reverse in 182, and only 598 keep two files with content of their own); counting additional one-level-deep formats (.github/copilot-instructions.md, .github/instructions/, /GEMINI.md, .claude/CLAUDE.md, /.cursorrules, /.windsurfrules) raised total adoption to 6,652 repositories (29.1%). [27]\n- **Pre-2024 engineered software study: 2,853 tool-configuring repos out of 32,564 engineered projects (Galster et al., arXiv:2602.14690v5)** (*as of 2026-06-30*): From 32,564 engineered open-source GitHub repositories created before 1 January 2024 and active since 1 June 2025, 2,853 repositories (8.8%) configured at least one agentic coding tool—partitioned into 2,015 single-tool repositories (70.6%), 295 two-tool repositories (10.3%), 50 three-or-more-tool repositories (1.8%), and 493 repositories (17.3% of the 2,853 tool-configuring repositories) that used AGENTS.md alone as a tool-agnostic standard without any tool-specific configuration artifact. [3]\n- **AGENTS.md Tracker (agentsmd.formachines.ai)** (*as of 2026-11-06*): The AGENTS.md Tracker scan published 2026-11-06 found a root AGENTS.md in 546 of 1,922 repositories (28.4%), and at least one of eight tracked instruction files in 677 of 1,922 (35.2%), measuring file presence on the default branch. [28]\n- **RepoAgentKit top-100 snapshot** (*as of 2026-09-01*): RepoAgentKit's 2026-09-01 snapshot, covering 100 pinned commits, found a case-sensitive root AGENTS.md in 39 of GitHub's top 100 repositories (excluding nested-only files), reporting a median of 112 lines and 29 of 39 files mentioning testing. [29]\n- **World of Code V2604 configuration-file census** (*as of 2026-04*): The World of Code V2604 configuration-file census records 134,810 AGENTS.md blobs and 151,390 CLAUDE.md blobs. The paper warns that cross-snapshot counts mix adoption with a growing corpus and should be read as coarse upper-bound trends, not adoption rates. [30]\n\n---\n\n## See also\n\n- **[Agent Readability Spec](/protocols/vercel-agent-readability/)** *(Complements)* — The guide treats /AGENTS.md as a readability artifact, while AGENTS.md is the instruction file for coding agents.\n- **[Open Knowledge Format](/protocols/okf/)** *(Peer alternative)* — AGENTS.md is one README for coding agents; OKF is a directory of Markdown files with YAML frontmatter.\n- **[Agent Context Interchange Protocol](/protocols/acip/)** *(Complements)* — ACIP reads YAML at .agents/agent-context.yaml with a precedence algorithm and a resolution receipt, and it is paired with AGENTS.md prose rather than replacing that file format.\n- **Category:** [Read protocols](/category/read/)\n\n---\n\n## References\n\n1. AGENTS.md (Agentic AI Foundation), *AGENTS.md* (checked 2026-10-30) — <https://agents.md/>\n2. GitHub, *Adding repository custom instructions for GitHub Copilot* (checked 2026-10-30) — <https://docs.github.com/en/copilot/how-tos/copilot-on-github/customize-copilot/add-custom-instructions/add-repository-instructions>\n3. Matthias Galster, Seyedmoein Mohsenimofidi, Jai Lal Lulla, Muhammad Auwal Abubakar, Christoph Treude, and Sebastian Baltes, *Harness Engineering for Agentic AI Coding Tools: An Exploratory Study* (arXiv:2602.14690v5, revised 2026-06-30) — <https://arxiv.org/html/2602.14690v5>\n4. Amp, *From AGENT.md to AGENTS.md* (published 2025-08-20) — <https://ampcode.com/news/AGENTS.md>\n5. OpenAI, *Introducing Codex* (published 2025-05-16) — <https://web.archive.org/web/20261022165127/https://openai.com/index/introducing-codex/>\n6. The Linux Foundation, *Linux Foundation Announces the Formation of the Agentic AI Foundation (AAIF), Anchored by New Project Contributions Including Model Context Protocol (MCP), goose and AGENTS.md* (published 2025-12-09; modified 2026-02-24) — <https://www.linuxfoundation.org/press/linux-foundation-announces-the-formation-of-the-agentic-ai-foundation>\n7. AGENTS.md, *agentsmd/agents.md Repository LICENSE (MIT)* (fetched 2026-11-12) — <https://raw.githubusercontent.com/agentsmd/agents.md/main/LICENSE>\n8. Factory, *AGENTS.md* (checked 2026-10-30) — <https://docs.factory.com/harness/agents-md>\n9. Stride, *What 7,370 popular GitHub repositories put in AGENTS.md and CLAUDE.md* (published 2026-09-27) — <https://www.stride.page/research/agents-md-claude-md-study-2026>\n10. Cursor, *Rules* (checked 2026-10-30) — <https://cursor.com/docs/rules>\n11. Anthropic (Claude Code), *How Claude remembers your project* (modified 2026-11-02) — <https://code.claude.com/docs/en/memory>\n12. OpenAI, *Custom instructions with AGENTS.md* (checked 2026-10-30) — <https://learn.chatgpt.com/docs/agent-configuration/agents-md>\n13. Microsoft, *Visual Studio Code August 2025 (version 1.104)* (August 2025) — <https://code.visualstudio.com/updates/v1_104>\n14. Google (Jules), *Jules Agent Update: Faster, Smarter, More Reliable* (published 2025-06-20) — <https://jules.google/docs/changelog/2025-06-20/>\n15. Cognition (Devin), *AGENTS.md files for Devin* (modified 2026-09-25) — <https://docs.devin.ai/onboard-devin/agents-md>\n16. Zed (Nathan Sobo), *Bring Your Own Agent to Zed* (published 2025-08-27) — <https://zed.dev/blog/bring-your-own-agent-to-zed>\n17. Zed (Franciska Dethlefsen), *ACP Brings JetBrains on Board* (published 2025-10-06) — <https://zed.dev/blog/jetbrains-on-acp>\n18. JetBrains, *JetBrains × Zed: Open Interoperability for AI Coding Agents in Your IDE* (published 2025-10-06) — <https://blog.jetbrains.com/ai/2025/10/jetbrains-zed-open-interoperability-for-ai-coding-agents-in-your-ide/>\n19. Vercel (vercel/next.js), *AGENTS.md* (checked 2026-10-30) — <https://raw.githubusercontent.com/vercel/next.js/HEAD/AGENTS.md>\n20. Microsoft (microsoft/vscode), *AGENTS.md* (checked 2026-10-30) — <https://raw.githubusercontent.com/microsoft/vscode/HEAD/AGENTS.md>\n21. Apache Software Foundation (apache/airflow), *AGENTS.md* (checked 2026-10-30) — <https://raw.githubusercontent.com/apache/airflow/HEAD/AGENTS.md>\n22. pandas (pandas-dev/pandas), *AGENTS.md* (checked 2026-10-30) — <https://raw.githubusercontent.com/pandas-dev/pandas/HEAD/AGENTS.md>\n23. Astral (astral-sh/uv), *AGENTS.md* (checked 2026-10-30) — <https://raw.githubusercontent.com/astral-sh/uv/HEAD/AGENTS.md>\n24. Temporal (temporalio/sdk-java), *AGENTS.md* (checked 2026-11-04) — <https://raw.githubusercontent.com/temporalio/sdk-java/master/AGENTS.md>\n25. Pydantic (pydantic/pydantic-ai), *AGENTS.md* (checked 2026-11-04) — <https://raw.githubusercontent.com/pydantic/pydantic-ai/main/AGENTS.md>\n26. Oven (oven-sh/bun), *AGENTS.md* (checked 2026-11-04) — <https://raw.githubusercontent.com/oven-sh/bun/main/AGENTS.md>\n27. Pawel Zarzycki, *What Open-Source Projects Tell Their Coding Agents: A Census of AGENTS.md and CLAUDE.md* (arXiv:2610.31715v2, revised 2026-10-26) — <https://arxiv.org/html/2610.31715>\n28. AGENTS.md Tracker (agentsmd.formachines.ai), *AGENTS.md adoption tracker* (scan 2026-11-06; fetched 2026-11-06) — <https://agentsmd.formachines.ai/>\n29. RepoAgentKit, *AGENTS.md adoption in GitHub's top 100 repositories* (snapshot 2026-09-01; fetched 2026-11-06) — <https://repoagentkit.com/agents-md-adoption>\n30. Arsham Khosravani and Audris Mockus, *Detecting AI Coding Agents in Open Source: A Validated Multi-Method Census of 180 Million Repositories* (2026-06-23) — <https://arxiv.org/html/2606.24429v1>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "AIPREF",
   "adoption": {
    "level": "observed",
    "by": "SpinXO, Launchpad, Ubuntu Changelogs, They Said So, follow.it, Nuxt Robots, PEAC Protocol, Cloudflare Content Signals Policy, and 3 other verified implementations",
    "probe_run": null
   },
   "aliases": [
    "draft-ietf-aipref-attach"
   ],
   "analog": "robots.txt plus HTTP representation metadata",
   "collisions": [],
   "discovery": {
    "mechanism": "A `Content-Usage:` line inside a user-agent group of /robots.txt, and a `Content-Usage` HTTP response header",
    "path": null
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.ietf.org/archive/id/draft-ietf-aipref-attach-05.txt",
     "claim": "Gary Illyes (Google) and Martin Thomson (Mozilla), *Associating AI Usage Preferences with Content in HTTP (draft-ietf-aipref-attach-05)*, dated 2026-08-19",
     "date": null,
     "quote": "draft-ietf-aipref-attach-05 / A Content-Usage header field for HTTP / A Content-Usage directive for the Robots Exclusion Protocol (colloquially known as \"robots.txt\") / This document defines attachment methods using the Robots Exclusion Protocol and HTTP header fields. / Content-Usage: train-ai=n This is some content. / User-Agent: * Allow: / Content-Usage: train-ai=n … The Content-Usage field is a structured field dictionary, as defined in Section 3.2 of [FIELDS]. This field follows the vocabulary and processing rules in [VOCAB]. / 19 August 2026 … Updates: 9309 (if approved) … This document updates RFC 9309 to allow for the inclusion of usage preferences. … This Internet-Draft will expire on 20 February 2027. / Gary Illyes … Google … Martin Thomson … Mozilla / Discussion of this document takes place on the AI Preferences Working Group mailing list (mailto:ai-control@ietf.org) / Source for this draft and an issue tracker can be found at https://github.com/ietf-wg-aipref/drafts. / Intended status: Standards Track / 19 August 2026 / This Internet-Draft will expire on 20 February 2027. / The Content-Usage field is a structured field dictionary, as defined in Section 3.2 of [FIELDS]. This field follows the vocabulary and processing rules in [VOCAB]. / Field Name: Content-Usage Status: permanent Structured Type: Dictionary / registry established in Section 18.4 of HTTP / Associating AI Usage Preferences with Content in HTTP / User-Agent: * Allow: / Content-Usage: train-ai=n / Copyright (c) 2026 IETF Trust / Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions / The Allow and Disallow rules determine what resources can be crawled / This creates a two-stage arrangement that distinguishes acquisition and usage. Acquisition relies on Allow/Disallow rules; usage preference relies on Content-Usage rules. / This document only defines how the strings or byte sequences are conveyed so that statements of preference can be associated with content. / The Content-Usage field does not have any special effect on caching. / Usage preferences apply only to those resources that can be crawled according to Allow/Disallow rules; no preferences are implied for resources that are disallowed. / This document updates RFC 9309 to allow for the inclusion of usage preferences. / A Content-Usage rule is added to the set of potential rules that can be included in a Group for \"robots.txt\". / Content-Usage: train-ai=n / RFC 9110 / This field follows the vocabulary and processing rules in [VOCAB]. / Each group in the file applies to a set of crawlers, identified by product token",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://datatracker.ietf.org/wg/aipref/about/",
     "claim": "IETF, *AI Preferences (aipref) working group*, fetched 2026-10-30",
     "date": null,
     "quote": "AI Preferences (aipref) / Chairs … Mark Nottingham, Suresh Krishnan / Area Director … Mike Bishop / The AI Preferences Working Group will standardize building blocks / Standard track document(s) describing means of attaching or associating those preferences with content / ai-control@ietf.org / Standard track protocol specification(s) to associate the AI-related preferences to the IESG for publication … draft-ietf-aipref-attach",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://www.ietf.org/archive/id/draft-ietf-aipref-vocab-08.txt",
     "claim": "Paul Keller (Open Future) and Martin Thomson (Mozilla, editor), *A Vocabulary For Expressing AI Usage Preferences (draft-ietf-aipref-vocab-08)*, dated 2026-09-14",
     "date": null,
     "quote": "draft-ietf-aipref-vocab-08 / train-ai=y, search=n / This document defines a vocabulary for expressing preferences regarding how digital assets are used by automated processing systems. / | AI Training | train-ai | / | Search | search | / | AI Training | train-ai | Section 4.1 | / | Search | search | Section 4.3 | / any unknown labels MUST be ignored / | AI Use | ai-use | Section 4.2 |",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://blog.cloudflare.com/content-signals-policy/",
     "claim": "Will Allen (Cloudflare), *Giving users choice with Cloudflare's new Content Signals Policy*, published 2025-09-24; modified 2026-07-15",
     "date": null,
     "quote": "This policy defines three content signals - search, ai-input, and ai-train / User-Agent: * Content-Signal: search=yes, ai-train=no",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://www.w3.org/community/reports/tdmrep/CG-FINAL-tdmrep-20240510/",
     "claim": "Laurent Le Meur (EDRLab), *TDM Reservation Protocol (TDMRep)*, Final Community Group Report 2024-05-10",
     "date": null,
     "quote": "TDM Reservation Protocol (TDMRep) / defines a JSON file named tdmrep.json, which MUST be hosted in the /.well-known repository of a Web server. / tdm-reservation is an boolean value. / 1 TDM rights are reserved. / tdm-policy / <meta name=\"tdm-reservation\" content=\"1\"> / TDM Metadata in HTML Content / TDM Metadata in EPUB 2 files",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://developers.openai.com/api/docs/bots",
     "claim": "OpenAI, *Overview of OpenAI Crawlers*, fetched 2026-10-30",
     "date": null,
     "quote": "OpenAI uses OAI-SearchBot and GPTBot robots.txt tags",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://www.rfc-editor.org/rfc/rfc9309.html",
     "claim": "M. Koster, G. Illyes, H. Zeller, and L. Sassman, *Robots Exclusion Protocol*, RFC 9309, September 2022",
     "date": null,
     "quote": "product token MUST contain only uppercase and lowercase letters / RFC 9309: Robots Exclusion Protocol",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-aipref-attach/history/",
     "claim": "IETF Datatracker, *draft-ietf-aipref-attach — History (IETF Datatracker)*, fetched 2026-10-30",
     "date": null,
     "quote": "2026-08-18 | 05 | Martin Thomson | New version available: draft-ietf-aipref-attach-05.txt … 2026-05-01 | 04 | (System) | Document has expired / 2025-06-15 … WG -00 approved / 2025-09-04 … IETF WG state changed to In WG Last Call from WG Document / 2025-11-03 … IETF WG state changed to WG Document from In WG Last Call / 2026-05-01 … Document has expired / 2026-08-18 … New version available: draft-ietf-aipref-attach-05.txt",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://www.ietf.org/archive/id/draft-it-aipref-attachment-00.txt",
     "claim": "Gary Illyes (Google) and Martin Thomson (Mozilla), *Indicating Preferences Regarding Content Usage (draft-it-aipref-attachment-00)*, dated 2025-05-28",
     "date": null,
     "quote": "G. Illyes … Google … M. Thomson … Mozilla / 28 May 2025 / draft-it-aipref-attachment-00 / Indicating Preferences Regarding Content Usage",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-aipref-attach/",
     "claim": "IETF Datatracker, *draft-ietf-aipref-attach — Associating AI Usage Preferences with Content in HTTP (IETF Datatracker)*, last updated 2026-08-18",
     "date": null,
     "quote": "Authors … Gary Illyes, Martin Thomson / Replaces … draft-it-aipref-attachment / Intended RFC status … Proposed Standard / Active Internet-Draft (aipref WG) / WG state … WG Document / IESG state … I-D Exists / Last updated … 2026-08-18",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://datatracker.ietf.org/api/v1/doc/document/?group__acronym=aipref&type=rfc&format=json",
     "claim": "IETF Datatracker API, *RFC documents in the aipref working group*, fetched 2026-10-30",
     "date": null,
     "quote": "\"total_count\": 0",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://datatracker.ietf.org/api/v1/doc/document/draft-ietf-aipref-attach/?format=json",
     "claim": "IETF Datatracker API, *IETF Datatracker document record for draft-ietf-aipref-attach*, rev 05 at 2026-08-19",
     "date": null,
     "quote": "\"rev\": \"05\" / \"time\": \"2026-08-19T04:25:16Z\" / \"expires\": \"2027-02-20T04:25:16Z\"",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://mailarchive.ietf.org/arch/msg/ai-control/LF4qTxITge4ID8QPsjOcNUUrDO4/",
     "claim": "Mark Nottingham via Datatracker, *WG Last Call: draft-ietf-aipref-attach-03 (Ends 2025-09-18)*, 2025-09-04",
     "date": "2025-09-04",
     "quote": "This message starts a 2-week WG Last Call for this document. / Thu, 04 Sep 2025",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://datatracker.ietf.org/wg/aipref/history/",
     "claim": "IETF Datatracker, *AI Preferences (aipref) working group history*, fetched 2026-10-30",
     "date": null,
     "quote": "2025-09-23 … set due date to August 2026 from August 2025",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://www.ietf.org/blog/ai-pref-update/",
     "claim": "IETF, *Enabling Publishers to Express Preferences for AI Crawlers: An Update on the AIPREF Working Group*, 2025-10-30",
     "date": "2025-10-30",
     "quote": "30 Oct 2025 / The response was not one we anticipated: several participants raised fundamental issues about the nature of the Internet-Drafts (I-Ds), forcing the group to reconsider its approach.",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://www.iana.org/assignments/http-fields/http-fields.txt",
     "claim": "IANA, *Hypertext Transfer Protocol (HTTP) Field Name Registry*, last updated 2026-10-09",
     "date": null,
     "quote": "Hypertext Transfer Protocol (HTTP) Field Name Registry / Last Updated 2026-10-09",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://ietf-wg-aipref.github.io/drafts/draft-ietf-aipref-attach.html",
     "claim": "IETF AI Preferences working group, *Associating AI Usage Preferences with Content in HTTP*, fetched 2026-10-30",
     "date": null,
     "quote": "Associating AI Usage Preferences with Content in HTTP",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://spawning.substack.com/p/aitxt-a-new-way-for-websites-to-set",
     "claim": "Cullen Miller (Spawning), *ai.txt: A new way for websites to set permissions for AI*, published 2023-05-30",
     "date": null,
     "quote": "Ai.txt is a file placed at the root of a website",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://github.com/kaylacar/ai-txt/blob/master/ietf/draft-car-ai-txt-wellknown-00.md",
     "claim": "Kayla Cardillo, *draft-car-ai-txt-wellknown-00*, fetched 2026-10-30",
     "date": null,
     "quote": "/ai.txt / .well-known/ai.txt / training, scraping, indexing, caching",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://www.spinxo.com/robots.txt",
     "claim": "SpinXO, *robots.txt*, fetched 2026-10-30",
     "date": null,
     "quote": "Content-Usage: train-ai=y, search=y / # AI usage preference (draft-ietf-aipref-attach)",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://www.spinxo.com/",
     "claim": "SpinXO, *SpinXO home page response headers*, fetched 2026-10-30",
     "date": null,
     "quote": "content-usage: train-ai=y, search=y",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://launchpad.net/robots.txt",
     "claim": "Launchpad, *robots.txt*, fetched 2026-10-30",
     "date": null,
     "quote": "User-agent: * DisallowAITraining: / Content-Usage: ai=n Content-Signal: ai-train=no, search=yes, ai-input=no / # Source: https://robotstxt.com/ai",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://bugs.launchpad.net/robots.txt",
     "claim": "Launchpad, *bugs.launchpad.net robots.txt*, fetched 2026-10-30",
     "date": null,
     "quote": "Content-Usage: ai=n",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://code.launchpad.net/robots.txt",
     "claim": "Launchpad, *code.launchpad.net robots.txt*, fetched 2026-10-30",
     "date": null,
     "quote": "Content-Usage: ai=n",
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://answers.launchpad.net/robots.txt",
     "claim": "Launchpad, *answers.launchpad.net robots.txt*, fetched 2026-10-30",
     "date": null,
     "quote": "Content-Usage: ai=n / Content-Signal: ai-train=no, search=yes, ai-input=no",
     "ref": 25
    },
    {
     "label": "[26]",
     "url": "https://changelogs.ubuntu.com/robots.txt",
     "claim": "Ubuntu, *changelogs.ubuntu.com robots.txt*, fetched 2026-10-30",
     "date": null,
     "quote": "User-Agent: * DisallowAITraining: / Content-Usage: ai=n / # Source: https://robotstxt.com/ai",
     "ref": 26
    },
    {
     "label": "[27]",
     "url": "https://theysaidso.com/robots.txt",
     "claim": "They Said So, *robots.txt*, fetched 2026-10-30",
     "date": null,
     "quote": "User-Agent: * DisallowAITraining: / Content-Usage: ai=n Content-Signal: search=yes, ai-input=no, ai-train=no / # Source: https://robotstxt.com/ai",
     "ref": 27
    },
    {
     "label": "[28]",
     "url": "https://follow.it/robots.txt",
     "claim": "Follow.it Feed Service, *robots.txt*, fetched 2026-10-30",
     "date": null,
     "quote": "# START nuxt-robots (indexable) User-agent: * Content-Usage: bots=y, train-ai=n Content-Signal: ai-train=no, search=yes / # START nuxt-robots (indexable) / Content-Usage: bots=y, train-ai=n",
     "ref": 28
    },
    {
     "label": "[29]",
     "url": "https://gazzettadelsud.it/robots.txt",
     "claim": "Gazzetta del Sud, *robots.txt*, fetched 2026-10-30",
     "date": null,
     "quote": "User-Agent: * DisallowAITraining: / Content-Usage: ai=n / # Source: https://robotstxt.com/ai",
     "ref": 29
    },
    {
     "label": "[30]",
     "url": "https://dri.es/",
     "claim": "Dries Buytaert, *dri.es home page response headers*, fetched 2026-10-30",
     "date": null,
     "quote": "content-signal: ai-train=yes, search=yes, ai-input=yes content-usage: ai=y",
     "ref": 30
    },
    {
     "label": "[31]",
     "url": "https://blamejs.com/ai-pref",
     "claim": "blamejs, *Ai Pref, blamejs*, 2026-11-06",
     "date": "2026-11-06",
     "quote": "the IETF AIPREF `Content-Usage` HTTP response header (draft-ietf-aipref-attach-04, deadline 2026-08) / the matching robots.txt grammar / Pay-Per-Crawl (HTTP 402) / Operators declare train / infer / snippet preferences once / the middleware emits both the `Content-Usage` header and Cloudflare's `CF-Content-Signals`",
     "ref": 31
    },
    {
     "label": "[32]",
     "url": "https://nuxtseo.com/docs/robots/guides/ai-directives",
     "claim": "Harlan Wilton (Nuxt SEO), *AI Directives*, last updated 2026-07-16",
     "date": null,
     "quote": "Last updated Jul 16, 2026 / Two standards are supported: Content-Usage - IETF standard with broader automation categories / The Content-Usage directive follows the IETF AI Preferences specification / Content-Usage: bots=y, train-ai=n",
     "ref": 32
    },
    {
     "label": "[33]",
     "url": "https://www.peacprotocol.org/integrations/content-signals",
     "claim": "PEAC Protocol, *Content Signals*, fetched 2026-10-30",
     "date": null,
     "quote": "The Content-Usage header is parsed as an RFC 9651 Structured Fields Dictionary. / PEAC records these signals as evidence but does not enforce them. / draft-ietf-aipref-attach-04 / RFC 9651 / 2026-06-01",
     "ref": 33
    },
    {
     "label": "[34]",
     "url": "https://mailarchive.ietf.org/arch/msg/ai-control/EANb9b9bljOanLBFm5FRerYlxyI/",
     "claim": "Michael Tremante, *Cloudflare's Content Signal Policy*, 2025-09-24",
     "date": "2025-09-24",
     "quote": "Wed, 24 September 2025 / Cloudflare's Content Signal Policy / We see this as an interim measure to address immediate needs / hope we can achieve a consensus position and will revisit our policy once that has happened",
     "ref": 34
    },
    {
     "label": "[35]",
     "url": "https://blog.cloudflare.com/accountable-mixed-use-ai-crawlers/",
     "claim": "Bryan Becker (Cloudflare), *Have it both ways: stay discoverable in search while disallowing AI training*, published 2026-09-15",
     "date": null,
     "quote": "Bryan Becker / September 15, 2026 / As standards such as ai-prefs mature, we will revisit this approach. / 2026-09-15",
     "ref": 35
    },
    {
     "label": "[36]",
     "url": "https://www.cloudflare.com/press/press-releases/2026/cloudflare-helps-end-the-search-or-ai-training-tradeoff/",
     "claim": "Cloudflare, *Cloudflare Helps End the Search-or-AI-Training Tradeoff*, 2026-09-15",
     "date": "2026-09-15",
     "quote": "a specification under development / Today's controls are designed to work alongside these emerging standards. / ai-prefs",
     "ref": 36
    },
    {
     "label": "[37]",
     "url": "https://developers.google.com/crawling/docs/robots-txt/robots-txt-spec",
     "claim": "Google, *How Google Interprets the robots.txt Specification*, last updated 2026-10-23",
     "date": null,
     "quote": "Last updated 2026-10-23 UTC. / Google supports the following fields (other fields such as crawl-delay aren't supported): user-agent: identifies which crawler the rules apply to. allow: a URL path that may be crawled. disallow: a URL path that may not be crawled. sitemap:",
     "ref": 37
    }
   ],
   "form": "http-header",
   "governance": "IETF AI Preferences (aipref) working group: \"Chairs Mark Nottingham, Suresh Krishnan Area Director Mike Bishop\". The charter asks for \"Standard track document(s) describing means of attaching or associating those preferences with content in IETF-defined protocols and formats, including but not limited to using Well-Known URIs (RFC 8615) such as the Robots Exclusion Protocol (RFC 9309), and HTTP response header fields\". Discussion is on the ai-control@ietf.org list and the source is in the GitHub repository ietf-wg-aipref/drafts",
   "group": "AIPREF",
   "history": [
    {
     "date": "2026-10-29",
     "note": "Verified record against draft-ietf-aipref-attach-05, IETF Datatracker, ai-control mailing list, and live robots.txt / Content-Usage header deployments"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "aipref-content-usage-attachment",
   "implementation": "prototype",
   "last_verified": "2026-11-06",
   "name": "AIPREF Content-Usage Attachment",
   "native_status": "Active Internet-Draft, not an RFC: \"Document Type Active Internet-Draft (aipref WG) Authors Gary Illyes, Martin Thomson Last updated 2026-08-18 Replaces draft-it-aipref-attachment\" \"IESG state I-D Exists\". The Datatracker API lists no aipref RFC (checked 2026-10-29). Working-group last call on -03 began on 2025-09-04 (\"This message starts a 2-week WG Last Call for this document.\") and the draft went back to WG Document on 2025-11-03; the chairs wrote: \"The response was not one we anticipated: several participants raised fundamental issues about the nature of the Internet-Drafts (I-Ds), forcing the group to reconsider its approach.\". -04 lapsed (\"Expires: 1 May 2026\"; \"2026-05-01 04 (System) Document has expired\") and -05 renewed it: \"2026-08-18 05 Martin Thomson New version available: draft-ietf-aipref-attach-05.txt\". The charter milestone was \"2026-08-31 Aug 2026 Standard track protocol specification(s) to associate the AI-related preferences to the IESG for publication draft-ietf-aipref-attach\", moved from August 2025 on 2025-09-23; on 2026-10-29 the Datatracker still showed the IESG state \"I-D Exists\". The Content-Usage header field is requested as permanent (\"Field Name: Content-Usage Status: permanent Structured Type: Dictionary\") but was not in the IANA HTTP Field Name registry on 2026-10-29",
   "origin": {
    "date": "2025-05-28",
    "org": "Gary Illyes (Google) and Martin Thomson (Mozilla)"
   },
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "working-group",
   "probe": {
    "method": "GET",
    "on_absent": "Publisher has not attached machine-readable AI-use preferences via either attachment method; no inference can be drawn about actual policy",
    "parse": "Presence of a 'Content-Usage' line in a robots.txt group, or a Content-Usage HTTP response header on the fetched resource itself",
    "path": "{origin}/robots.txt"
   },
   "question": "How does a publisher attach its AI-use preferences to content served over HTTP, so an automated system can find them?",
   "scope": "general",
   "spec_url": "https://www.ietf.org/archive/id/draft-ietf-aipref-attach-05.txt",
   "step": "permit",
   "summary_md": "**AIPREF Content-Usage Attachment** is the IETF Internet-Draft `draft-ietf-aipref-attach`, which defines `Content-Usage` attachment methods for usage preferences using the Robots Exclusion Protocol and HTTP header fields. The example response carries `Content-Usage: train-ai=n` before the message body. The `Content-Usage` field is a structured field dictionary and follows the vocabulary draft's processing rules. A `robots.txt` group can carry the same preference beside `User-Agent: *` and `Allow: /`. If approved, `draft-ietf-aipref-attach` updates RFC 9309 to allow usage preferences in `robots.txt`. Datatracker history records that revision 04 expired on `2026-05-01` and that revision 05 was posted on `2026-08-18`. The text is dated 19 August 2026 and expires on 20 February 2027.",
   "track": "ietf",
   "version": {
    "date": "2026-08-19",
    "label": "draft-ietf-aipref-attach-05"
   },
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-ietf-aipref-attach"
    }
   ],
   "use_cases": [
    "control-ai-crawling"
   ],
   "audience": [
    "site-owner",
    "standards-body",
    "platform"
   ],
   "pairs_with": [
    "aipref-vocabulary",
    "ai-crawler-tokens-robots",
    "cloudflare-content-signals-policy",
    "tdmrep",
    "ai-txt"
   ],
   "prerequisites": [
    "aipref-vocabulary"
   ],
   "hatnote_md": "This page is about draft-ietf-aipref-attach, the IETF AI Preferences (aipref) working-group Internet-Draft that says where a usage preference is published: in a Content-Usage HTTP response header and in a Content-Usage rule in robots.txt. It is not the [AIPREF vocabulary](/protocols/aipref-vocabulary/) (draft-ietf-aipref-vocab), which defines labels such as train-ai and search. It is not Cloudflare's [Content Signals Policy](/protocols/cloudflare-content-signals-policy/), which uses its own Content-Signal line with the signals search, ai-input, and ai-train; not the W3C community group's [TDMRep](/protocols/tdmrep/); and not [AI crawler user-agent tokens in robots.txt](/protocols/ai-crawler-tokens-robots/), which allow or block named crawlers rather than state a use preference. Each has its own page.",
   "ietf_tracker": {
    "doc": "draft-ietf-aipref-attach",
    "rev": "05",
    "state": "active",
    "stream": "IETF",
    "group_type": "WG",
    "wg": "aipref",
    "replaced_by": null,
    "posted_utc": "2026-08-19",
    "expires_utc": "2027-02-20",
    "as_of": "2026-11-06",
    "source": "https://datatracker.ietf.org/doc/draft-ietf-aipref-attach/",
    "source_label": "per IETF Datatracker"
   },
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "crawler_policy",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-06",
   "v05_hatnote_html_md": "This page is about draft-ietf-aipref-attach, the IETF AI Preferences (aipref) working-group Internet-Draft that says where a usage preference is published: in a Content-Usage HTTP response header and in a Content-Usage rule in robots.txt. It is not the [AIPREF vocabulary](/protocols/aipref-vocabulary/) (draft-ietf-aipref-vocab), which defines labels such as train-ai and search. It is not Cloudflare's [Content Signals Policy](/protocols/cloudflare-content-signals-policy/), which uses its own Content-Signal line with the signals search, ai-input, and ai-train; not the W3C community group's [TDMRep](/protocols/tdmrep/); and not [AI crawler user-agent tokens in robots.txt](/protocols/ai-crawler-tokens-robots/), which allow or block named crawlers rather than state a use preference. Each has its own page. [1][2][3][4][5][6][7]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**AIPREF Content-Usage Attachment** is the IETF Internet-Draft `draft-ietf-aipref-attach`, which defines `Content-Usage` attachment methods for usage preferences using the Robots Exclusion Protocol and HTTP header fields. [1] The example response carries `Content-Usage: train-ai=n` before the message body. The `Content-Usage` field is a structured field dictionary and follows the vocabulary draft's processing rules. A `robots.txt` group can carry the same preference beside `User-Agent: *` and `Allow: /`. [1] If approved, `draft-ietf-aipref-attach` updates RFC 9309 to allow usage preferences in `robots.txt`. Datatracker history records that revision 04 expired on `2026-05-01` and that revision 05 was posted on `2026-08-18`. The text is dated 19 August 2026 and expires on 20 February 2027. [1][8]",
   "v05_identity_sentence_md": "**AIPREF Content-Usage Attachment** is the IETF Internet-Draft `draft-ietf-aipref-attach`, which defines `Content-Usage` attachment methods for usage preferences using the Robots Exclusion Protocol and HTTP header fields. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Permit](/category/permit/) (`permit`)"
    },
    {
     "label": "Form",
     "value_md": "HTTP header (`http-header`)"
    },
    {
     "label": "Originated by",
     "value_md": "Gary Illyes (Google) and Martin Thomson (Mozilla). Individual draft `draft-it-aipref-attachment-00` is dated 28 May 2025. Working-group `-00` was approved on 2025-06-15. [1][8][9][10]"
    },
    {
     "label": "Governed by",
     "value_md": "IETF AI Preferences (aipref) working group. Chairs Mark Nottingham and Suresh Krishnan; Area Director Mike Bishop. Discussion is on ai-control@ietf.org. The source repository is ietf-wg-aipref/drafts. [1][2]"
    },
    {
     "label": "Track",
     "value_md": "IETF; intended status Standards Track [1][10]"
    },
    {
     "label": "IETF tracker",
     "value_md": "[draft-ietf-aipref-attach](https://datatracker.ietf.org/doc/draft-ietf-aipref-attach/) [1][10]"
    },
    {
     "label": "Status",
     "value_md": "Active Internet-Draft (aipref WG Document; intended status Proposed Standard; no WG RFCs published yet). Revision -05 is dated 19 August 2026 and expires 20 February 2027. A 2-week working-group last call on -03 started 4 September 2025 and returned to WG Document on 2025-11-03; -04 expired 2026-05-01 and -05 was posted 2026-08-18. [1][2][8][10][11][12][13][14][15]"
    },
    {
     "label": "Version",
     "value_md": "`draft-ietf-aipref-attach-05`, dated 19 August 2026 (Datatracker revision 05). [1][12]"
    },
    {
     "label": "Headers",
     "value_md": "`Content-Usage` HTTP response header. The draft's example is `Content-Usage: train-ai=n`. [1]"
    },
    {
     "label": "Message format",
     "value_md": "Structured field dictionary, following the vocabulary draft's processing rules. [1]"
    },
    {
     "label": "IANA registration",
     "value_md": "Requested Field Name `Content-Usage`, Status permanent, Structured Type Dictionary. The fetched IANA HTTP Field Name Registry was last updated 2026-10-09 and does not contain a Content-Usage entry. [1][16]"
    },
    {
     "label": "Specification",
     "value_md": "[Associating AI Usage Preferences with Content in HTTP](https://www.ietf.org/archive/id/draft-ietf-aipref-attach-05.txt) (`draft-ietf-aipref-attach-05`) [1]"
    },
    {
     "label": "Found at",
     "value_md": "A `Content-Usage` rule inside a robots.txt group, and a `Content-Usage` HTTP response header. The working-group editor's copy is the GitHub Pages HTML for the attachment draft. [1][17]"
    },
    {
     "label": "Licence",
     "value_md": "Copyright 2026 IETF Trust and the document authors. Code components extracted from the draft must include Revised BSD License text (Trust Legal Provisions Section 4.e). [1]"
    }
   ],
   "v05_problem_md": "The `Allow` and `Disallow` rules determine what resources can be crawled. This creates a two-stage arrangement that distinguishes acquisition and usage: acquisition relies on `Allow/Disallow` rules, and usage preference relies on `Content-Usage` rules. [1] `draft-ietf-aipref-attach` only defines how the strings or byte sequences are conveyed so that statements of preference can be associated with content. `draft-ietf-aipref-vocab` defines a vocabulary for expressing preferences regarding how digital assets are used by automated processing systems. [1][3] The `Content-Usage` field does not have any special effect on caching. Usage preferences apply only to those resources that can be crawled according to `Allow/Disallow` rules; no preferences are implied for resources that are disallowed. [1]",
   "v05_mechanism_delta_md": "`draft-ietf-aipref-attach` only defines how the strings or byte sequences are conveyed so that statements of preference can be associated with content. `draft-ietf-aipref-vocab` defines a vocabulary for expressing preferences regarding how digital assets are used by automated processing systems. [1][3]",
   "v05_scope_boundary_md": "The `Content-Usage` field does not have any special effect on caching. Usage preferences apply only to those resources that can be crawled according to `Allow/Disallow` rules; no preferences are implied for resources that are disallowed. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "robots.txt (RFC 9309)",
      "spec_or_rfc": "RFC 9309",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "draft-ietf-aipref-attach adds a Content-Usage rule, such as Content-Usage: train-ai=n, inside a robots.txt group and says it updates RFC 9309 so the group can carry usage preferences as well as Allow and Disallow. [1][7]"
     },
     {
      "name": "HTTP Semantics (RFC 9110)",
      "spec_or_rfc": "RFC 9110",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "draft-ietf-aipref-attach defines a Content-Usage HTTP response header, with an example of Content-Usage: train-ai=n, and requests permanent registration of Field Name Content-Usage in the HTTP Field Name registry established in Section 18.4 of HTTP (RFC 9110). The IANA registry text fetched with this page was last updated 2026-10-09 and does not contain a Content-Usage entry. [1][16]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "aipref-vocabulary",
      "target_name": "AIPREF Vocabulary (A Vocabulary For Expressing AI Usage Preferences)",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "The attachment draft places vocabulary tokens such as train-ai and search on the wire, and the vocabulary draft itself defines those tokens with no robots.txt rule or HTTP header. [1][3]"
     },
     {
      "target_id": "ai-crawler-tokens-robots",
      "target_name": "AI crawler tokens in robots.txt",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Content-Usage is an additional rule inside a user-agent group, such as train-ai=n, while AI crawler tokens are the User-agent product tokens that select the group. [1][6][7]"
     },
     {
      "target_id": "cloudflare-content-signals-policy",
      "target_name": "Content Signals Policy",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "Content-Usage carries tokens such as train-ai=n in a robots.txt rule and in a Content-Usage HTTP header, while Content-Signal carries search, ai-input, and ai-train only as a robots.txt directive inside a User-agent group. [1][4]"
     },
     {
      "target_id": "tdmrep",
      "target_name": "TDMRep (TDM Reservation Protocol)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "Content-Usage is a robots.txt rule plus a response header carrying tokens such as train-ai=n, while TDMRep uses /.well-known/tdmrep.json, tdm-reservation set to 1, tdm-policy, HTML meta, and EPUB or PDF metadata. [1][5]"
     },
     {
      "target_id": "ai-txt",
      "target_name": "ai.txt",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "Content-Usage extends /robots.txt and the HTTP response with tokens such as train-ai=n, while ai.txt is a separate file at /ai.txt or /.well-known/ai.txt with Training, Scraping, Indexing, and Caching. [1][18][19]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (12 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).",
    "side_a": {
     "visible": true,
     "heading": "Origins serving `Content-Usage` in `robots.txt` or HTTP headers",
     "col4_header": "Attachment surface, observed statement & vocabulary fit",
     "note_md": null,
     "rows": [
      {
       "actor": "SpinXO",
       "role": "Publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Both surfaces serve the same statement. In robots.txt the `User-agent: *` group carries `Content-Usage: train-ai=y, search=y` under the comment that this is the AI usage preference (draft-ietf-aipref-attach), and the same line is repeated on later crawler groups. The home page responds with the header `content-usage: train-ai=y, search=y`. Vocab-08 Table 1 maps AI Training to `train-ai` (Section 4.1) and Search to `search` (Section 4.3).",
       "source_md": "[spinxo.com/robots.txt](https://www.spinxo.com/robots.txt) [20] · [spinxo.com response headers](https://www.spinxo.com/) [21] · [draft-ietf-aipref-vocab-08](https://www.ietf.org/archive/id/draft-ietf-aipref-vocab-08.txt) [3]"
      },
      {
       "actor": "Launchpad",
       "role": "Publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "robots.txt on launchpad.net, bugs.launchpad.net, code.launchpad.net, and answers.launchpad.net each serves `Content-Usage: ai=n` in the `User-agent: *` group, with the comment `# Source: https://robotstxt.com/ai` and an adjacent `Content-Signal: ai-train=no, search=yes, ai-input=no`. The label ai is not a vocab-08 Table 1 label (`train-ai`, `ai-use`, `search`); any unknown labels MUST be ignored.",
       "source_md": "[launchpad.net/robots.txt](https://launchpad.net/robots.txt) [22] · [bugs.launchpad.net/robots.txt](https://bugs.launchpad.net/robots.txt) [23] · [code.launchpad.net/robots.txt](https://code.launchpad.net/robots.txt) [24] · [answers.launchpad.net/robots.txt](https://answers.launchpad.net/robots.txt) [25] · [draft-ietf-aipref-vocab-08](https://www.ietf.org/archive/id/draft-ietf-aipref-vocab-08.txt) [3]"
      },
      {
       "actor": "Ubuntu Changelogs",
       "role": "Publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "robots.txt serves `Content-Usage: ai=n` in the `User-Agent: *` group, with the comment `# Source: https://robotstxt.com/ai`. This file has no Content-Signal line. The label ai is not in vocab-08 Table 1 (`train-ai`, `ai-use`, `search`); any unknown labels MUST be ignored.",
       "source_md": "[changelogs.ubuntu.com/robots.txt](https://changelogs.ubuntu.com/robots.txt) [26] · [draft-ietf-aipref-vocab-08](https://www.ietf.org/archive/id/draft-ietf-aipref-vocab-08.txt) [3]"
      },
      {
       "actor": "They Said So",
       "role": "Publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "robots.txt serves `Content-Usage: ai=n` in the `User-Agent: *` group, beside `Content-Signal: search=yes, ai-input=no, ai-train=no`, with the comment `# Source: https://robotstxt.com/ai`. The label ai is not in vocab-08 Table 1 (`train-ai`, `ai-use`, `search`); any unknown labels MUST be ignored.",
       "source_md": "[theysaidso.com/robots.txt](https://theysaidso.com/robots.txt) [27] · [draft-ietf-aipref-vocab-08](https://www.ietf.org/archive/id/draft-ietf-aipref-vocab-08.txt) [3]"
      },
      {
       "actor": "follow.it",
       "role": "Publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "robots.txt is marked `# START nuxt-robots (indexable)`. The `User-agent: *` group serves `Content-Usage: bots=y, train-ai=n` and `Content-Signal: ai-train=no, search=yes`. `bots` is not a vocab-08 Table 1 label (`train-ai`, `ai-use`, `search`), and any unknown labels MUST be ignored. The label that remains, `train-ai`, is the Table 1 label for AI Training.",
       "source_md": "[follow.it/robots.txt](https://follow.it/robots.txt) [28] · [draft-ietf-aipref-vocab-08](https://www.ietf.org/archive/id/draft-ietf-aipref-vocab-08.txt) [3]"
      },
      {
       "actor": "Gazzetta del Sud",
       "role": "Publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "robots.txt serves `Content-Usage: ai=n` in the `User-Agent: *` group, with the comment `# Source: https://robotstxt.com/ai`. The label ai is not in vocab-08 Table 1 (`train-ai`, `ai-use`, `search`); any unknown labels MUST be ignored.",
       "source_md": "[gazzettadelsud.it/robots.txt](https://gazzettadelsud.it/robots.txt) [29] · [draft-ietf-aipref-vocab-08](https://www.ietf.org/archive/id/draft-ietf-aipref-vocab-08.txt) [3]"
      },
      {
       "actor": "dri.es",
       "role": "Publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "The home-page response carries the header `content-usage: ai=y` beside `content-signal: ai-train=yes, search=yes, ai-input=yes`. The label ai is not in vocab-08 Table 1 (`train-ai`, `ai-use`, `search`); any unknown labels MUST be ignored.",
       "source_md": "[dri.es response headers](https://dri.es/) [30] · [draft-ietf-aipref-vocab-08](https://www.ietf.org/archive/id/draft-ietf-aipref-vocab-08.txt) [3]"
      },
      {
       "actor": "blamejs",
       "role": "Middleware",
       "status": "Development",
       "status_display": "Development · checked 2026-11-06",
       "col4_md": "Documents support for the IETF AIPREF `Content-Usage` HTTP response header (citing `draft-ietf-aipref-attach-04` and the WG's `2026-08` milestone target), the matching robots.txt grammar, and Cloudflare Content Signals plus Pay-Per-Crawl (HTTP 402). Operators declare train / infer / snippet preferences once; the middleware emits both the `Content-Usage` header and `CF-Content-Signals`.",
       "source_md": "[blamejs AI preferences](https://blamejs.com/ai-pref) [31]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Generators, parsers, platforms & crawler specifications",
     "col4_header": "Coverage, behavior & specification status",
     "note_md": null,
     "rows": [
      {
       "actor": "Nuxt Robots",
       "role": "Generator",
       "status": "Supported",
       "status_display": "Supported · as of 2026-07-16",
       "col4_md": "The AI Directives guide, last updated Jul 16, 2026, says two standards are supported and names `Content-Usage` as the IETF one. It says the Content-Usage directive follows the IETF AI Preferences specification. One documented example is `Content-Usage: bots=y, train-ai=n`, the same line follow.it serves inside `# START nuxt-robots (indexable)`.",
       "source_md": "[Nuxt Robots AI Directives](https://nuxtseo.com/docs/robots/guides/ai-directives) [32] · [follow.it/robots.txt](https://follow.it/robots.txt) [28]"
      },
      {
       "actor": "PEAC Protocol",
       "role": "Parser",
       "status": "Partial",
       "status_display": "Partial · as of 2026-06-01",
       "col4_md": "Coverage is the Content-Usage HTTP header, identified on the page with `draft-ietf-aipref-attach-04` and Structured Fields per `RFC 9651`. The page says the `Content-Usage` header is parsed as an RFC 9651 Structured Fields Dictionary, and that PEAC records these signals as evidence but does not enforce them. Page `dateModified` is 2026-06-01.",
       "source_md": "[PEAC Content Signals](https://www.peacprotocol.org/integrations/content-signals) [33]"
      },
      {
       "actor": "Cloudflare Content Signals Policy",
       "role": "Platform",
       "status": "Development",
       "status_display": "Development · as of 2026-09-15",
       "col4_md": "Michael Tremante's note of 24 September 2025 on Cloudflare's Content Signal Policy calls the policy an interim measure and says they will revisit the policy once the working group reaches a consensus position. Bryan Becker's post of September 15, 2026 says that as standards such as `ai-prefs` mature, they will revisit this approach (`datePublished` 2026-09-15). The same day's press release calls `ai-prefs` a specification under development and says today's controls are designed to work alongside these emerging standards.",
       "source_md": "[ai-control, Tremante, 24 September 2025](https://mailarchive.ietf.org/arch/msg/ai-control/EANb9b9bljOanLBFm5FRerYlxyI/) [34] · [Have it both ways (Becker)](https://blog.cloudflare.com/accountable-mixed-use-ai-crawlers/) [35] · [Press release, September 15, 2026](https://www.cloudflare.com/press/press-releases/2026/cloudflare-helps-end-the-search-or-ai-training-tradeoff/) [36]"
      },
      {
       "actor": "Google robots.txt specification",
       "role": "Crawler operator",
       "status": "Does not request",
       "status_display": "Does not request · as of 2026-10-23",
       "col4_md": "Last updated 2026-10-23 UTC. Google supports the fields `user-agent`, `allow`, `disallow`, and `sitemap`, and says other fields such as `crawl-delay` aren't supported. Google's specification page does not name Content-Usage.",
       "source_md": "[How Google interprets the robots.txt specification](https://developers.google.com/crawling/docs/robots-txt/robots-txt-spec) [37]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [
     {
      "label": "IETF Datatracker documents API (group aipref, type rfc)",
      "as_of": "2026-10-30",
      "value_md": "0 published RFCs in the IETF Datatracker for the `aipref` working group. [11]"
     }
    ],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "rsl",
     "target_name": "Really Simple Licensing",
     "relation_label": "Complements",
     "delta": "AIPREF puts Content-Usage in robots.txt and an HTTP header. RSL points a License URI or Link header at XML.",
     "item_md": "**[Really Simple Licensing](/protocols/rsl/)** (Complements) — AIPREF puts Content-Usage in robots.txt and an HTTP header. RSL points a License URI or Link header at XML."
    },
    {
     "item_md": "**[Permit protocols](/category/permit/)** — Category index for `permit` standards."
    }
   ],
   "v05_compiled_md": "---\nid: aipref-content-usage-attachment\ntitle: \"AIPREF Content-Usage Attachment\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: permit\nform: http-header\nwire_archetype: crawler_policy\nspec_url: https://www.ietf.org/archive/id/draft-ietf-aipref-attach-05.txt\nlast_checked: 2026-11-06\n---\n\n# AIPREF Content-Usage Attachment\n\n**Category:** [Permit](/category/permit/) (`permit`) · **Form:** HTTP header (`http-header`) · **Last checked:** 2026-11-06\n\n> *This page is about draft-ietf-aipref-attach, the IETF AI Preferences (aipref) working-group Internet-Draft that says where a usage preference is published: in a Content-Usage HTTP response header and in a Content-Usage rule in robots.txt. It is not the [AIPREF vocabulary](/protocols/aipref-vocabulary/) (draft-ietf-aipref-vocab), which defines labels such as train-ai and search. It is not Cloudflare's [Content Signals Policy](/protocols/cloudflare-content-signals-policy/), which uses its own Content-Signal line with the signals search, ai-input, and ai-train; not the W3C community group's [TDMRep](/protocols/tdmrep/); and not [AI crawler user-agent tokens in robots.txt](/protocols/ai-crawler-tokens-robots/), which allow or block named crawlers rather than state a use preference. Each has its own page. [1][2][3][4][5][6][7]*\n\n**AIPREF Content-Usage Attachment** is the IETF Internet-Draft `draft-ietf-aipref-attach`, which defines `Content-Usage` attachment methods for usage preferences using the Robots Exclusion Protocol and HTTP header fields. [1] The example response carries `Content-Usage: train-ai=n` before the message body. The `Content-Usage` field is a structured field dictionary and follows the vocabulary draft's processing rules. A `robots.txt` group can carry the same preference beside `User-Agent: *` and `Allow: /`. [1] If approved, `draft-ietf-aipref-attach` updates RFC 9309 to allow usage preferences in `robots.txt`. Datatracker history records that revision 04 expired on `2026-05-01` and that revision 05 was posted on `2026-08-18`. The text is dated 19 August 2026 and expires on 20 February 2027. [1][8]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Permit](/category/permit/) (`permit`) |\n| **Form** | HTTP header (`http-header`) |\n| **Originated by** | Gary Illyes (Google) and Martin Thomson (Mozilla). Individual draft `draft-it-aipref-attachment-00` is dated 28 May 2025. Working-group `-00` was approved on 2025-06-15. [1][8][9][10] |\n| **Governed by** | IETF AI Preferences (aipref) working group. Chairs Mark Nottingham and Suresh Krishnan; Area Director Mike Bishop. Discussion is on ai-control@ietf.org. The source repository is ietf-wg-aipref/drafts. [1][2] |\n| **Track** | IETF; intended status Standards Track [1][10] |\n| **IETF tracker** | [draft-ietf-aipref-attach](https://datatracker.ietf.org/doc/draft-ietf-aipref-attach/) [1][10] |\n| **Status** | Active Internet-Draft (aipref WG Document; intended status Proposed Standard; no WG RFCs published yet). Revision -05 is dated 19 August 2026 and expires 20 February 2027. A 2-week working-group last call on -03 started 4 September 2025 and returned to WG Document on 2025-11-03; -04 expired 2026-05-01 and -05 was posted 2026-08-18. [1][2][8][10][11][12][13][14][15] |\n| **Version** | `draft-ietf-aipref-attach-05`, dated 19 August 2026 (Datatracker revision 05). [1][12] |\n| **Headers** | `Content-Usage` HTTP response header. The draft's example is `Content-Usage: train-ai=n`. [1] |\n| **Message format** | Structured field dictionary, following the vocabulary draft's processing rules. [1] |\n| **IANA registration** | Requested Field Name `Content-Usage`, Status permanent, Structured Type Dictionary. The fetched IANA HTTP Field Name Registry was last updated 2026-10-09 and does not contain a Content-Usage entry. [1][16] |\n| **Specification** | [Associating AI Usage Preferences with Content in HTTP](https://www.ietf.org/archive/id/draft-ietf-aipref-attach-05.txt) (`draft-ietf-aipref-attach-05`) [1] |\n| **Found at** | A `Content-Usage` rule inside a robots.txt group, and a `Content-Usage` HTTP response header. The working-group editor's copy is the GitHub Pages HTML for the attachment draft. [1][17] |\n| **Licence** | Copyright 2026 IETF Trust and the document authors. Code components extracted from the draft must include Revised BSD License text (Trust Legal Provisions Section 4.e). [1] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [Adoption and ecosystem](#adoption-and-ecosystem)\n4. [See also](#see-also)\n5. [References](#references)\n\n---\n\n## Problem and scope\n\nThe `Allow` and `Disallow` rules determine what resources can be crawled. This creates a two-stage arrangement that distinguishes acquisition and usage: acquisition relies on `Allow/Disallow` rules, and usage preference relies on `Content-Usage` rules. [1] `draft-ietf-aipref-attach` only defines how the strings or byte sequences are conveyed so that statements of preference can be associated with content. `draft-ietf-aipref-vocab` defines a vocabulary for expressing preferences regarding how digital assets are used by automated processing systems. [1][3] The `Content-Usage` field does not have any special effect on caching. Usage preferences apply only to those resources that can be crawled according to `Allow/Disallow` rules; no preferences are implied for resources that are disallowed. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **robots.txt (RFC 9309)** | `RFC 9309` | Profiles classic standard | draft-ietf-aipref-attach adds a Content-Usage rule, such as Content-Usage: train-ai=n, inside a robots.txt group and says it updates RFC 9309 so the group can carry usage preferences as well as Allow and Disallow. [1][7] |\n| **HTTP Semantics (RFC 9110)** | `RFC 9110` | Analogous to classic standard | draft-ietf-aipref-attach defines a Content-Usage HTTP response header, with an example of Content-Usage: train-ai=n, and requests permanent registration of Field Name Content-Usage in the HTTP Field Name registry established in Section 18.4 of HTTP (RFC 9110). The IANA registry text fetched with this page was last updated 2026-10-09 and does not contain a Content-Usage entry. [1][16] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[AIPREF Vocabulary (A Vocabulary For Expressing AI Usage Preferences)](/protocols/aipref-vocabulary/)** | Builds on | The attachment draft places vocabulary tokens such as train-ai and search on the wire, and the vocabulary draft itself defines those tokens with no robots.txt rule or HTTP header. [1][3] |\n| **[AI crawler tokens in robots.txt](/protocols/ai-crawler-tokens-robots/)** | Complements | Content-Usage is an additional rule inside a user-agent group, such as train-ai=n, while AI crawler tokens are the User-agent product tokens that select the group. [1][6][7] |\n| **[Content Signals Policy](/protocols/cloudflare-content-signals-policy/)** | Peer alternative | Content-Usage carries tokens such as train-ai=n in a robots.txt rule and in a Content-Usage HTTP header, while Content-Signal carries search, ai-input, and ai-train only as a robots.txt directive inside a User-agent group. [1][4] |\n| **[TDMRep (TDM Reservation Protocol)](/protocols/tdmrep/)** | Peer alternative | Content-Usage is a robots.txt rule plus a response header carrying tokens such as train-ai=n, while TDMRep uses /.well-known/tdmrep.json, tdm-reservation set to 1, tdm-policy, HTML meta, and EPUB or PDF metadata. [1][5] |\n| **[ai.txt](/protocols/ai-txt/)** | Peer alternative | Content-Usage extends /robots.txt and the HTTP response with tokens such as train-ai=n, while ai.txt is a separate file at /ai.txt or /.well-known/ai.txt with Training, Scraping, Indexing, and Caching. [1][18][19] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (12 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).*\n\n### Origins serving `Content-Usage` in `robots.txt` or HTTP headers\n\n| Actor | Role | Status | Attachment surface, observed statement & vocabulary fit | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **SpinXO** | Publisher | Live (HTTP 200) · checked 2026-10-30 | Both surfaces serve the same statement. In robots.txt the `User-agent: *` group carries `Content-Usage: train-ai=y, search=y` under the comment that this is the AI usage preference (draft-ietf-aipref-attach), and the same line is repeated on later crawler groups. The home page responds with the header `content-usage: train-ai=y, search=y`. Vocab-08 Table 1 maps AI Training to `train-ai` (Section 4.1) and Search to `search` (Section 4.3). | [spinxo.com/robots.txt](https://www.spinxo.com/robots.txt) [20] · [spinxo.com response headers](https://www.spinxo.com/) [21] · [draft-ietf-aipref-vocab-08](https://www.ietf.org/archive/id/draft-ietf-aipref-vocab-08.txt) [3] |\n| **Launchpad** | Publisher | Live (HTTP 200) · checked 2026-10-30 | robots.txt on launchpad.net, bugs.launchpad.net, code.launchpad.net, and answers.launchpad.net each serves `Content-Usage: ai=n` in the `User-agent: *` group, with the comment `# Source: https://robotstxt.com/ai` and an adjacent `Content-Signal: ai-train=no, search=yes, ai-input=no`. The label ai is not a vocab-08 Table 1 label (`train-ai`, `ai-use`, `search`); any unknown labels MUST be ignored. | [launchpad.net/robots.txt](https://launchpad.net/robots.txt) [22] · [bugs.launchpad.net/robots.txt](https://bugs.launchpad.net/robots.txt) [23] · [code.launchpad.net/robots.txt](https://code.launchpad.net/robots.txt) [24] · [answers.launchpad.net/robots.txt](https://answers.launchpad.net/robots.txt) [25] · [draft-ietf-aipref-vocab-08](https://www.ietf.org/archive/id/draft-ietf-aipref-vocab-08.txt) [3] |\n| **Ubuntu Changelogs** | Publisher | Live (HTTP 200) · checked 2026-10-30 | robots.txt serves `Content-Usage: ai=n` in the `User-Agent: *` group, with the comment `# Source: https://robotstxt.com/ai`. This file has no Content-Signal line. The label ai is not in vocab-08 Table 1 (`train-ai`, `ai-use`, `search`); any unknown labels MUST be ignored. | [changelogs.ubuntu.com/robots.txt](https://changelogs.ubuntu.com/robots.txt) [26] · [draft-ietf-aipref-vocab-08](https://www.ietf.org/archive/id/draft-ietf-aipref-vocab-08.txt) [3] |\n| **They Said So** | Publisher | Live (HTTP 200) · checked 2026-10-30 | robots.txt serves `Content-Usage: ai=n` in the `User-Agent: *` group, beside `Content-Signal: search=yes, ai-input=no, ai-train=no`, with the comment `# Source: https://robotstxt.com/ai`. The label ai is not in vocab-08 Table 1 (`train-ai`, `ai-use`, `search`); any unknown labels MUST be ignored. | [theysaidso.com/robots.txt](https://theysaidso.com/robots.txt) [27] · [draft-ietf-aipref-vocab-08](https://www.ietf.org/archive/id/draft-ietf-aipref-vocab-08.txt) [3] |\n| **follow.it** | Publisher | Live (HTTP 200) · checked 2026-10-30 | robots.txt is marked `# START nuxt-robots (indexable)`. The `User-agent: *` group serves `Content-Usage: bots=y, train-ai=n` and `Content-Signal: ai-train=no, search=yes`. `bots` is not a vocab-08 Table 1 label (`train-ai`, `ai-use`, `search`), and any unknown labels MUST be ignored. The label that remains, `train-ai`, is the Table 1 label for AI Training. | [follow.it/robots.txt](https://follow.it/robots.txt) [28] · [draft-ietf-aipref-vocab-08](https://www.ietf.org/archive/id/draft-ietf-aipref-vocab-08.txt) [3] |\n| **Gazzetta del Sud** | Publisher | Live (HTTP 200) · checked 2026-10-30 | robots.txt serves `Content-Usage: ai=n` in the `User-Agent: *` group, with the comment `# Source: https://robotstxt.com/ai`. The label ai is not in vocab-08 Table 1 (`train-ai`, `ai-use`, `search`); any unknown labels MUST be ignored. | [gazzettadelsud.it/robots.txt](https://gazzettadelsud.it/robots.txt) [29] · [draft-ietf-aipref-vocab-08](https://www.ietf.org/archive/id/draft-ietf-aipref-vocab-08.txt) [3] |\n| **dri.es** | Publisher | Live (HTTP 200) · checked 2026-10-30 | The home-page response carries the header `content-usage: ai=y` beside `content-signal: ai-train=yes, search=yes, ai-input=yes`. The label ai is not in vocab-08 Table 1 (`train-ai`, `ai-use`, `search`); any unknown labels MUST be ignored. | [dri.es response headers](https://dri.es/) [30] · [draft-ietf-aipref-vocab-08](https://www.ietf.org/archive/id/draft-ietf-aipref-vocab-08.txt) [3] |\n| **blamejs** | Middleware | Development · checked 2026-11-06 | Documents support for the IETF AIPREF `Content-Usage` HTTP response header (citing `draft-ietf-aipref-attach-04` and the WG's `2026-08` milestone target), the matching robots.txt grammar, and Cloudflare Content Signals plus Pay-Per-Crawl (HTTP 402). Operators declare train / infer / snippet preferences once; the middleware emits both the `Content-Usage` header and `CF-Content-Signals`. | [blamejs AI preferences](https://blamejs.com/ai-pref) [31] |\n\n### Generators, parsers, platforms & crawler specifications\n\n| Actor | Role | Status | Coverage, behavior & specification status | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Nuxt Robots** | Generator | Supported · as of 2026-07-16 | The AI Directives guide, last updated Jul 16, 2026, says two standards are supported and names `Content-Usage` as the IETF one. It says the Content-Usage directive follows the IETF AI Preferences specification. One documented example is `Content-Usage: bots=y, train-ai=n`, the same line follow.it serves inside `# START nuxt-robots (indexable)`. | [Nuxt Robots AI Directives](https://nuxtseo.com/docs/robots/guides/ai-directives) [32] · [follow.it/robots.txt](https://follow.it/robots.txt) [28] |\n| **PEAC Protocol** | Parser | Partial · as of 2026-06-01 | Coverage is the Content-Usage HTTP header, identified on the page with `draft-ietf-aipref-attach-04` and Structured Fields per `RFC 9651`. The page says the `Content-Usage` header is parsed as an RFC 9651 Structured Fields Dictionary, and that PEAC records these signals as evidence but does not enforce them. Page `dateModified` is 2026-06-01. | [PEAC Content Signals](https://www.peacprotocol.org/integrations/content-signals) [33] |\n| **Cloudflare Content Signals Policy** | Platform | Development · as of 2026-09-15 | Michael Tremante's note of 24 September 2025 on Cloudflare's Content Signal Policy calls the policy an interim measure and says they will revisit the policy once the working group reaches a consensus position. Bryan Becker's post of September 15, 2026 says that as standards such as `ai-prefs` mature, they will revisit this approach (`datePublished` 2026-09-15). The same day's press release calls `ai-prefs` a specification under development and says today's controls are designed to work alongside these emerging standards. | [ai-control, Tremante, 24 September 2025](https://mailarchive.ietf.org/arch/msg/ai-control/EANb9b9bljOanLBFm5FRerYlxyI/) [34] · [Have it both ways (Becker)](https://blog.cloudflare.com/accountable-mixed-use-ai-crawlers/) [35] · [Press release, September 15, 2026](https://www.cloudflare.com/press/press-releases/2026/cloudflare-helps-end-the-search-or-ai-training-tradeoff/) [36] |\n| **Google robots.txt specification** | Crawler operator | Does not request · as of 2026-10-23 | Last updated 2026-10-23 UTC. Google supports the fields `user-agent`, `allow`, `disallow`, and `sitemap`, and says other fields such as `crawl-delay` aren't supported. Google's specification page does not name Content-Usage. | [How Google interprets the robots.txt specification](https://developers.google.com/crawling/docs/robots-txt/robots-txt-spec) [37] |\n\n### Ecosystem censuses\n\n- **IETF Datatracker documents API (group aipref, type rfc)** (*as of 2026-10-30*): 0 published RFCs in the IETF Datatracker for the `aipref` working group. [11]\n\n---\n\n## See also\n\n- **[Really Simple Licensing](/protocols/rsl/)** *(Complements)* — AIPREF puts Content-Usage in robots.txt and an HTTP header. RSL points a License URI or Link header at XML.\n- **Category:** [Permit protocols](/category/permit/)\n\n---\n\n## References\n\n1. Gary Illyes (Google) and Martin Thomson (Mozilla), *Associating AI Usage Preferences with Content in HTTP (draft-ietf-aipref-attach-05)* (dated 2026-08-19) — <https://www.ietf.org/archive/id/draft-ietf-aipref-attach-05.txt>\n2. IETF, *AI Preferences (aipref) working group* (fetched 2026-10-30) — <https://datatracker.ietf.org/wg/aipref/about/>\n3. Paul Keller (Open Future) and Martin Thomson (Mozilla, editor), *A Vocabulary For Expressing AI Usage Preferences (draft-ietf-aipref-vocab-08)* (dated 2026-09-14) — <https://www.ietf.org/archive/id/draft-ietf-aipref-vocab-08.txt>\n4. Will Allen (Cloudflare), *Giving users choice with Cloudflare's new Content Signals Policy* (published 2025-09-24; modified 2026-07-15) — <https://blog.cloudflare.com/content-signals-policy/>\n5. Laurent Le Meur (EDRLab), *TDM Reservation Protocol (TDMRep)* (Final Community Group Report 2024-05-10) — <https://www.w3.org/community/reports/tdmrep/CG-FINAL-tdmrep-20240510/>\n6. OpenAI, *Overview of OpenAI Crawlers* (fetched 2026-10-30) — <https://developers.openai.com/api/docs/bots>\n7. M. Koster, G. Illyes, H. Zeller, and L. Sassman, *Robots Exclusion Protocol* (RFC 9309, September 2022) — <https://www.rfc-editor.org/rfc/rfc9309.html>\n8. IETF Datatracker, *draft-ietf-aipref-attach — History (IETF Datatracker)* (fetched 2026-10-30) — <https://datatracker.ietf.org/doc/draft-ietf-aipref-attach/history/>\n9. Gary Illyes (Google) and Martin Thomson (Mozilla), *Indicating Preferences Regarding Content Usage (draft-it-aipref-attachment-00)* (dated 2025-05-28) — <https://www.ietf.org/archive/id/draft-it-aipref-attachment-00.txt>\n10. IETF Datatracker, *draft-ietf-aipref-attach — Associating AI Usage Preferences with Content in HTTP (IETF Datatracker)* (last updated 2026-08-18) — <https://datatracker.ietf.org/doc/draft-ietf-aipref-attach/>\n11. IETF Datatracker API, *RFC documents in the aipref working group* (fetched 2026-10-30) — <https://datatracker.ietf.org/api/v1/doc/document/?group__acronym=aipref&type=rfc&format=json>\n12. IETF Datatracker API, *IETF Datatracker document record for draft-ietf-aipref-attach* (rev 05 at 2026-08-19) — <https://datatracker.ietf.org/api/v1/doc/document/draft-ietf-aipref-attach/?format=json>\n13. Mark Nottingham via Datatracker, *WG Last Call: draft-ietf-aipref-attach-03 (Ends 2025-09-18)* (2025-09-04) — <https://mailarchive.ietf.org/arch/msg/ai-control/LF4qTxITge4ID8QPsjOcNUUrDO4/>\n14. IETF Datatracker, *AI Preferences (aipref) working group history* (fetched 2026-10-30) — <https://datatracker.ietf.org/wg/aipref/history/>\n15. IETF, *Enabling Publishers to Express Preferences for AI Crawlers: An Update on the AIPREF Working Group* (2025-10-30) — <https://www.ietf.org/blog/ai-pref-update/>\n16. IANA, *Hypertext Transfer Protocol (HTTP) Field Name Registry* (last updated 2026-10-09) — <https://www.iana.org/assignments/http-fields/http-fields.txt>\n17. IETF AI Preferences working group, *Associating AI Usage Preferences with Content in HTTP* (fetched 2026-10-30) — <https://ietf-wg-aipref.github.io/drafts/draft-ietf-aipref-attach.html>\n18. Cullen Miller (Spawning), *ai.txt: A new way for websites to set permissions for AI* (published 2023-05-30) — <https://spawning.substack.com/p/aitxt-a-new-way-for-websites-to-set>\n19. Kayla Cardillo, *draft-car-ai-txt-wellknown-00* (fetched 2026-10-30) — <https://github.com/kaylacar/ai-txt/blob/master/ietf/draft-car-ai-txt-wellknown-00.md>\n20. SpinXO, *robots.txt* (fetched 2026-10-30) — <https://www.spinxo.com/robots.txt>\n21. SpinXO, *SpinXO home page response headers* (fetched 2026-10-30) — <https://www.spinxo.com/>\n22. Launchpad, *robots.txt* (fetched 2026-10-30) — <https://launchpad.net/robots.txt>\n23. Launchpad, *bugs.launchpad.net robots.txt* (fetched 2026-10-30) — <https://bugs.launchpad.net/robots.txt>\n24. Launchpad, *code.launchpad.net robots.txt* (fetched 2026-10-30) — <https://code.launchpad.net/robots.txt>\n25. Launchpad, *answers.launchpad.net robots.txt* (fetched 2026-10-30) — <https://answers.launchpad.net/robots.txt>\n26. Ubuntu, *changelogs.ubuntu.com robots.txt* (fetched 2026-10-30) — <https://changelogs.ubuntu.com/robots.txt>\n27. They Said So, *robots.txt* (fetched 2026-10-30) — <https://theysaidso.com/robots.txt>\n28. Follow.it Feed Service, *robots.txt* (fetched 2026-10-30) — <https://follow.it/robots.txt>\n29. Gazzetta del Sud, *robots.txt* (fetched 2026-10-30) — <https://gazzettadelsud.it/robots.txt>\n30. Dries Buytaert, *dri.es home page response headers* (fetched 2026-10-30) — <https://dri.es/>\n31. blamejs, *Ai Pref, blamejs* (2026-11-06) — <https://blamejs.com/ai-pref>\n32. Harlan Wilton (Nuxt SEO), *AI Directives* (last updated 2026-07-16) — <https://nuxtseo.com/docs/robots/guides/ai-directives>\n33. PEAC Protocol, *Content Signals* (fetched 2026-10-30) — <https://www.peacprotocol.org/integrations/content-signals>\n34. Michael Tremante, *Cloudflare's Content Signal Policy* (2025-09-24) — <https://mailarchive.ietf.org/arch/msg/ai-control/EANb9b9bljOanLBFm5FRerYlxyI/>\n35. Bryan Becker (Cloudflare), *Have it both ways: stay discoverable in search while disallowing AI training* (published 2026-09-15) — <https://blog.cloudflare.com/accountable-mixed-use-ai-crawlers/>\n36. Cloudflare, *Cloudflare Helps End the Search-or-AI-Training Tradeoff* (2026-09-15) — <https://www.cloudflare.com/press/press-releases/2026/cloudflare-helps-end-the-search-or-ai-training-tradeoff/>\n37. Google, *How Google Interprets the robots.txt Specification* (last updated 2026-10-23) — <https://developers.google.com/crawling/docs/robots-txt/robots-txt-spec>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "AIPREF",
   "adoption": {
    "level": "observed",
    "by": "SpinXO, Launchpad, Ubuntu Changelogs, They Said So, and Cloudflare Content Signals Policy",
    "probe_run": null
   },
   "aliases": [],
   "analog": "Controlled metadata vocabulary (like Dublin Core terms)",
   "collisions": [],
   "discovery": {
    "mechanism": "Nowhere by itself: the charter asks for the vocabulary \"A standard track document covering vocabulary for expressing AI-related preferences, independent of how those preferences are associated with content.\" The attachment draft (draft-ietf-aipref-attach-05, 19 August 2026, by G. Illyes of Google and M. Thomson of Mozilla) defines a Content-Usage robots.txt rule and a Content-Usage HTTP header field: \"Methods are defined for associating usage preferences with content that is obtained using the HTTP protocol. This document defines attachment methods using the Robots Exclusion Protocol and HTTP header fields.\" \"This document updates RFC 9309 to allow for the inclusion of usage preferences.\" Revision -04 of that draft expired on 2026-05-01 and was revived with -05",
    "path": null
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.ietf.org/archive/id/draft-ietf-aipref-vocab-08.txt",
     "claim": "P. Keller (Open Future) and M. Thomson, Ed. (Mozilla), *A Vocabulary For Expressing AI Usage Preferences (draft-ietf-aipref-vocab-08)*, 14 September 2026",
     "date": null,
     "quote": "This document defines a vocabulary for expressing preferences regarding how digital assets are used by automated processing systems. / 4.1. AI Training Using an asset to modify the learned parameters of a generative AI model. / 4.2. AI Use Using an asset as input to a generative AI model, where the asset is not directly provided by the user. / 4.3. Search Using an asset in an application where the primary purpose of the application is to select assets and direct users to the location of those assets. / This process results in one of three potential answers: allow, disallow, and unknown. / A Vocabulary For Expressing AI Usage Preferences / The format relies on the Dictionary type defined in Section 3.2 of [FIELDS]. ... For example, the following states a preference to allow model training (Section 4.1), disallow search (Section 4.3), with the preference for other categories being unknown: ... train-ai=y, search=n / The format defined in this document is only an exemplary way to represent preferences. The data model described in Section 3 can be used without this serialization. / Its contents DO NOT REFLECT CONSENSUS of the Working Group either in whole or part. / P. Keller / Open Future / M. Thomson, Ed. / 14 September 2026 / draft-ietf-aipref-vocab-08 / Source for this draft and an issue tracker can be found at https://github.com/ietf-wg-aipref/drafts. / Intended status: Standards Track / Expires: 18 March 2027 / The format relies on the Dictionary type defined in Section 3.2 of [FIELDS]. / The format defined in this document is only an exemplary way to represent preferences. / | AI Training | train-ai | Section 4.1 | / | AI Use | ai-use | Section 4.2 | / | Search | search | Section 4.3 | / These are mapped to single byte Tokens (Section 3.3.4 of [FIELDS]) of y and n, respectively. / train-ai=y, search=n / This document has no IANA actions. / The data model described in Section 3 can be used without this serialization. / Copyright (c) 2026 IETF Trust and the persons identified as the document authors. / This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents / Code Components extracted from this document must include Revised BSD License text / If any statement of preference indicates that the usage is disallowed, the result is that the usage is disallowed. ... This process ensures that the most restrictive preference applies. / This category does not include the use of assets to generate summaries. ... Allowed processing therefore includes the training of AI models using the assets and the use of those models provided that the resulting models and their outputs are used exclusively in ways that meet the above conditions regarding referencing and excerpts. ... This category of use overrides any usage that falls into other categories, including AI Training (Section 4.1) and AI Use (Section 4.2). / An entity that receives usage preferences has a choice whether to follow those preferences. / should understand that it does not: ... ensure that preferences are followed ... Preferences are not a security mechanism. / The vocabulary is intended to be used in jurisdictions where expressing preferences results in legal obligations, as well as where there are no associated legal obligations. / expressing preferences is without prejudice to applicable laws, including the applicability of exceptions and limitations to copyright. / address technical, legal, contractual, or other mechanisms that might create a stronger requirement to follow or not follow preferences / of y and n, respectively. / Table 1: Mappings for Categories",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://datatracker.ietf.org/wg/aipref/about/",
     "claim": "IETF Datatracker, *AI Preferences (aipref) working group*, charter charter-ietf-aipref-01 Approved",
     "date": null,
     "quote": "A standard track document covering vocabulary for expressing AI-related preferences, independent of how those preferences are associated with content. / Web and Internet Transport (wit) / State | | Active / charter-ietf-aipref-01 Approved / Mark Nottingham, Suresh Krishnan / Area Director | | Mike Bishop / ai-control@ietf.org / The AI Preferences Working Group will standardize building blocks / 2026-08-31Aug 2026 / Aug 2026 A standard track specification describing vocabulary for expressing AI-related preferences to the IESG for publication / independent of how those preferences are associated with content. / The following topics are out of scope for this charter: Technical enforcement of preferences",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://www.ietf.org/archive/id/draft-ietf-aipref-attach-05.txt",
     "claim": "G. Illyes (Google) and M. Thomson (Mozilla), *Associating AI Usage Preferences with Content in HTTP (draft-ietf-aipref-attach-05)*, 19 August 2026",
     "date": null,
     "quote": "The Content-Usage field is a structured field dictionary, as defined in Section 3.2 of [FIELDS]. / This document defines attachment methods using the Robots Exclusion Protocol and HTTP header fields. / This document updates RFC 9309 to allow for the inclusion of usage preferences. / draft-ietf-aipref-attach-05 / G. Illyes / 19 August 2026 / Associating AI Usage Preferences with Content in HTTP / This field follows the vocabulary and processing rules in [VOCAB]. / Content-Usage: train-ai=n",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://www.rfc-editor.org/rfc/rfc9309.html",
     "claim": "M. Koster, G. Illyes, H. Zeller, and L. Sassman, *Robots Exclusion Protocol*, RFC 9309, September 2022",
     "date": null,
     "quote": "This document specifies and extends the \"Robots Exclusion Protocol\" method / September 2022 / Robots Exclusion Protocol / The product token MUST contain only uppercase and lowercase letters / The \"Allow\" and \"Disallow\" Lines",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://blog.cloudflare.com/content-signals-policy/",
     "claim": "Will Allen, Cloudflare Blog, *Giving users choice with Cloudflare's new Content Signals Policy*, published 2025-09-24; modified 2026-07-15",
     "date": null,
     "quote": "This policy defines three content signals - search, ai-input, and ai-train - and their relevance to crawlers. / Will Allen / September 24, 2025 / Giving users choice with Cloudflare's new Content Signals Policy",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://rslstandard.org/rsl",
     "claim": "RSL Technical Steering Committee, *Really Simple Licensing (RSL) 1.0 Specification*, published 2025-12-10",
     "date": null,
     "quote": "Really Simple Licensing (RSL) 1.0 Specification / ODRL Information Model 2.2 / February 2018 / Published 2025-12-10 / The media type associated with RSL documents is: application/rsl+xml / An RSL document, also called a license, defines machine-readable licensing terms / prohibits any use by AI systems, including model training or reuse of the content in grounding, retrieval, or generative search summaries. / <prohibits type=\"usage\">ai-all</prohibits> / The <amount> element states the price in euros / <amount currency=\"EUR\">49.00</amount>",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://www.w3.org/community/reports/tdmrep/CG-FINAL-tdmrep-20240510/",
     "claim": "Laurent Le Meur (EDRLab), W3C TDMRep Community Group, *TDM Reservation Protocol (TDMRep)*, Final Community Group Report, 10 May 2024",
     "date": null,
     "quote": "TDM Reservation Protocol (TDMRep) / profile of the Open Digital Rights Language 2.2 / Final Community Group Report 10 May 2024 / Laurent Le Meur / EDRLab / tdm-reservation is an boolean value. / 1 TDM rights are reserved. / tdm-policy: an optional TDM Policy value associated with the current pattern.",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://datatracker.ietf.org/api/v1/doc/newrevisiondocevent/?doc__name=draft-ietf-aipref-vocab&format=json&limit=50",
     "claim": "IETF Datatracker API, *New-revision events for draft-ietf-aipref-vocab*, nine revisions; -08 published 2026-09-14",
     "date": null,
     "quote": "New version available: draft-ietf-aipref-vocab-08.txt ... \"time\": \"2026-09-14T06:18:02Z\" / New version available: draft-ietf-aipref-vocab-08.txt",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://datatracker.ietf.org/doc/draft-keller-aipref-vocab/",
     "claim": "IETF Datatracker, *draft-keller-aipref-vocab — Proposal for an Opt-Out Vocabulary (IETF Datatracker)*, latest revision 2025-03-30; last updated 2025-04-10",
     "date": null,
     "quote": "P. Keller Internet-Draft Open Future / Author | | Paul Keller / Last updated | 2025-04-10 (Latest revision 2025-03-30) / Replaced by | | draft-ietf-aipref-vocab",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://mailarchive.ietf.org/arch/msg/ai-control/LuWDC12gjlQ6Yj5eKN7ZkgbxopA/",
     "claim": "Mark Nottingham, *[ai-control] Adoption of draft-keller-aipref-vocab-01*, 26 April 2025",
     "date": null,
     "quote": "Sat, 26 April 2025 / Mark Nottingham / rough consensus to adopt draft-keller-aipref-vocab-01 as the starting point of our vocabulary work. / we appoint Paul Keller and Martin Thomson as editors.",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://github.com/ietf-wg-aipref/drafts",
     "claim": "IETF AI Preferences (aipref) working group, *AIPREF working drafts*, fetched 2026-10-30",
     "date": null,
     "quote": "AIPREF working drafts",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://datatracker.ietf.org/wg/aipref/history/",
     "claim": "IETF Datatracker, *aipref working group history*, charter approved 2025-01-07",
     "date": null,
     "quote": "2024-11-19 | Zaheduzzaman Sarker | Group created in state Proposed / 2025-01-07 | Cindy Morgan | Charter approved, group active / Changed milestone \"A standard track specification describing vocabulary for expressing AI-related preferences to the IESG for publication\", set due date to August 2026 from August 2025 / 2025-09-23 | Mike Bishop | Changed milestone",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-aipref-vocab/",
     "claim": "IETF Datatracker, *draft-ietf-aipref-vocab — A Vocabulary For Expressing AI Usage Preferences (IETF Datatracker)*, last updated 2026-09-13",
     "date": null,
     "quote": "Intended RFC status | | Proposed Standard / Active Internet-Draft (aipref WG) / Paul Keller, Martin Thomson / Last updated 2026-09-13 / Replaces draft-keller-aipref-vocab / WG state | | WG Document / IESG state | | I-D Exists / Document shepherd | | (None)",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://datatracker.ietf.org/api/v1/doc/document/?group__acronym=aipref&type=rfc&format=json",
     "claim": "IETF Datatracker API, *RFC documents in group aipref*, fetched 2026-10-30",
     "date": null,
     "quote": "\"total_count\": 0",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-aipref-vocab/history/",
     "claim": "IETF Datatracker, *draft-ietf-aipref-vocab history*, history through the -08 posting on 2026-09-13",
     "date": null,
     "quote": "2025-09-04 | 03 | Mark Nottingham | IETF WG state changed to In WG Last Call from WG Document / 2025-11-03 | 04 | Mark Nottingham | IETF WG state changed to WG Document from In WG Last Call / 2026-09-13 | 08 | Martin Thomson | New version available: draft-ietf-aipref-vocab-08.txt / 2025-04-30 | 00 | Mark Nottingham | WG -00 approved",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://datatracker.ietf.org/api/v1/doc/document/draft-ietf-aipref-vocab/?format=json",
     "claim": "IETF Datatracker API, *IETF Datatracker document record for draft-ietf-aipref-vocab*, rev 08; time 2026-09-14",
     "date": null,
     "quote": "\"rev\": \"08\" / \"time\": \"2026-09-14T06:18:02Z\" / \"expires\": \"2027-03-18T06:18:02Z\" / \"title\": \"A Vocabulary For Expressing AI Usage Preferences\"",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-aipref-attach/history/",
     "claim": "IETF Datatracker, *draft-ietf-aipref-attach history*, -04 expired 2026-05-01; -05 posted 2026-08-18",
     "date": null,
     "quote": "2026-05-01 | 04 | (System) | Document has expired / 2026-08-18 | 05 | Martin Thomson | New version available: draft-ietf-aipref-attach-05.txt",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://ietf-wg-aipref.github.io/drafts/draft-ietf-aipref-vocab.html",
     "claim": "IETF AI Preferences (aipref) working group, *A Vocabulary For Expressing AI Usage Preferences (editor's copy)*, 14 September 2026",
     "date": null,
     "quote": "A Vocabulary For Expressing AI Usage Preferences",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://developers.openai.com/api/docs/bots",
     "claim": "OpenAI, *Overview of OpenAI Crawlers*, fetched 2026-10-30",
     "date": null,
     "quote": "Overview of OpenAI Crawlers / OpenAI uses OAI-SearchBot and GPTBot robots.txt tags to enable webmasters to manage how their sites and content work with AI.",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://www.spinxo.com/robots.txt",
     "claim": "SpinXO, *robots.txt*, fetched 2026-10-30",
     "date": null,
     "quote": "AI usage preference (draft-ietf-aipref-attach). / Content-Usage: train-ai=y, search=y",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://www.spinxo.com/",
     "claim": "SpinXO, *SpinXO home page*, response last-modified Fri, 30 Oct 2026",
     "date": null,
     "quote": "content-usage: train-ai=y, search=y",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://launchpad.net/robots.txt",
     "claim": "Canonical (Launchpad), *robots.txt*, fetched 2026-10-30",
     "date": null,
     "quote": "# Source: https://robotstxt.com/ai / User-agent: * / Content-Usage: ai=n / Content-Signal: ai-train=no, search=yes, ai-input=no",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://bugs.launchpad.net/robots.txt",
     "claim": "Canonical (Launchpad), *robots.txt*, fetched 2026-10-30",
     "date": null,
     "quote": "Content-Usage: ai=n",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://code.launchpad.net/robots.txt",
     "claim": "Canonical (Launchpad), *robots.txt*, fetched 2026-10-30",
     "date": null,
     "quote": "Content-Usage: ai=n",
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://answers.launchpad.net/robots.txt",
     "claim": "Canonical (Launchpad), *robots.txt*, fetched 2026-10-30",
     "date": null,
     "quote": "Content-Usage: ai=n",
     "ref": 25
    },
    {
     "label": "[26]",
     "url": "https://www.ietf.org/archive/id/draft-ietf-aipref-vocab-01.txt",
     "claim": "P. Keller (Open Future) and M. Thomson, Ed. (Mozilla), *A Vocabulary For Expressing AI Usage Preferences (draft-ietf-aipref-vocab-01)*, 19 June 2025",
     "date": null,
     "quote": "draft-ietf-aipref-vocab-01 / | AI Training | ai | Section 4.2 |",
     "ref": 26
    },
    {
     "label": "[27]",
     "url": "https://changelogs.ubuntu.com/robots.txt",
     "claim": "Canonical (Ubuntu), *robots.txt*, response dated Fri, 30 Oct 2026",
     "date": null,
     "quote": "# Source: https://robotstxt.com/ai / User-Agent: * / Content-Usage: ai=n / server: nginx/1.14.0 (Ubuntu)",
     "ref": 27
    },
    {
     "label": "[28]",
     "url": "https://theysaidso.com/robots.txt",
     "claim": "They Said So, *robots.txt*, response dated Fri, 30 Oct 2026",
     "date": null,
     "quote": "# Source: https://robotstxt.com/ai / User-Agent: * / Content-Usage: ai=n / Content-Signal: search=yes, ai-input=no, ai-train=no",
     "ref": 28
    },
    {
     "label": "[29]",
     "url": "https://datatracker.ietf.org/doc/html/draft-romm-aipref-contentsignals-00",
     "claim": "M. Tremante (Cloudflare) and L. Romm, *Vocabulary For Expressing Content Signals (draft-romm-aipref-contentsignals-00 HTML)*, 1 October 2025",
     "date": null,
     "quote": "draft-romm-aipref-contentsignals-00 / Table 1: Usage category labels / | Search | search | Section 3.1 | / | AI Input | ai-input | Section 3.2 | / | AI Training | ai-train | Section 3.3 |",
     "ref": 29
    },
    {
     "label": "[30]",
     "url": "https://mailarchive.ietf.org/arch/msg/ai-control/EANb9b9bljOanLBFm5FRerYlxyI/",
     "claim": "Michael Tremante, *Cloudflare's Content Signal Policy*, 24 September 2025",
     "date": null,
     "quote": "Cloudflare's Content Signal Policy / Michael Tremante / We see this as an interim measure to address immediate needs, while work is done towards standardization. / will revisit our policy once that has happened",
     "ref": 30
    },
    {
     "label": "[31]",
     "url": "https://blog.cloudflare.com/accountable-mixed-use-ai-crawlers/",
     "claim": "Bryan Becker, Cloudflare Blog, *Have it both ways: stay discoverable in search while disallowing AI training*, published 2026-09-15",
     "date": null,
     "quote": "Bryan Becker / As standards such as ai-prefs mature, we will revisit this approach.",
     "ref": 31
    },
    {
     "label": "[32]",
     "url": "https://www.cloudflare.com/press/press-releases/2026/cloudflare-helps-end-the-search-or-ai-training-tradeoff/",
     "claim": "Cloudflare, *Cloudflare Helps End the Search-or-AI-Training Tradeoff*, 15 September 2026",
     "date": null,
     "quote": "September 15, 2026 / Today's controls are designed to work alongside these emerging standards.",
     "ref": 32
    },
    {
     "label": "[33]",
     "url": "https://aicrawlercheck.com/blog/ietf-aipref-content-usage-robots-txt",
     "claim": "Scout Agent, AI Crawler Check, *Content-Usage robots.txt: IETF AIPREF Explained (2026)*, published 2026-10-18",
     "date": null,
     "quote": "Do AI companies honour Content-Usage today? / No major AI company has said publicly that its crawler reads Content-Usage yet / 2026-10-18",
     "ref": 33
    }
   ],
   "form": "document-format",
   "governance": "IETF AI Preferences (aipref) working group: \"Area Web and Internet Transport (wit) State Active Charter charter-ietf-aipref-01 Approved\" \"Chairs Mark Nottingham, Suresh Krishnan Area Director Mike Bishop\". The group was created on 2024-11-19 and its charter approved on 2025-01-07: \"2025-01-07 Cindy Morgan Charter approved, group active\". Work happens on the ai-control@ietf.org list and in the GitHub repository ietf-wg-aipref/drafts",
   "group": "AIPREF",
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against datatracker.ietf.org/doc/html/draft-ietf-aipref-vocab-07"
    },
    {
     "date": "2026-10-16",
     "note": "revision draft-ietf-aipref-vocab-07 → 08"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "aipref-vocabulary",
   "implementation": "prototype",
   "last_verified": "2026-10-31",
   "name": "AIPREF Vocabulary (A Vocabulary For Expressing AI Usage Preferences)",
   "native_status": "Active Internet-Draft, not an RFC: \"Document Type Active Internet-Draft (aipref WG) Authors Paul Keller, Martin Thomson\" \"WG state WG Document\" \"IESG state I-D Exists\". The Datatracker API lists no aipref RFC (checked 2026-10-28). The document went into working-group last call on 2025-09-04 and back to WG Document on 2025-11-03: \"Mark Nottingham IETF WG state changed to In WG Last Call from WG Document\"; \"Mark Nottingham IETF WG state changed to WG Document from In WG Last Call\". The -08 text says \"Its contents DO NOT REFLECT CONSENSUS of the Working Group either in whole or part. Presense or absense of any particular text does not indicate consensus, and this document is published solely as a basis of further discussion.\". The charter milestone was \"2026-08-31 Aug 2026 A standard track specification describing vocabulary for expressing AI-related preferences to the IESG for publication draft-ietf-aipref-vocab\", moved there on 2025-09-23 from August 2025; on 2026-10-28 the draft had not been sent to the IESG",
   "origin": {
    "org": "Paul Keller (Open Future) as draft-keller-aipref-vocab",
    "date": "2025-03-30"
   },
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "working-group",
   "probe": {
    "method": "GET",
    "on_absent": "No AIPREF-vocabulary token found in the attachment surface; cannot distinguish 'no preference stated' from 'publisher uses a different vocabulary (e.g. Cloudflare Content Signals)'",
    "parse": "Parse any Content-Usage directive value against the AIPREF controlled vocabulary tokens defined in this draft",
    "path": "{origin}/robots.txt"
   },
   "question": "What controlled set of values expresses a publisher's AI-use preferences, independent of how they are attached to content?",
   "scope": "general",
   "spec_url": "https://www.ietf.org/archive/id/draft-ietf-aipref-vocab-08.txt",
   "step": "permit",
   "summary_md": "**A Vocabulary For Expressing AI Usage Preferences** (`draft-ietf-aipref-vocab`) defines a vocabulary for preferences regarding how automated processing systems use digital assets. The exemplary serialization is a Dictionary: `train-ai=y, search=n` allows model training, disallows search, and leaves other categories unknown. The format is only exemplary, and the data model in Section 3 can be used without this serialization. A Datatracker new-revision event names `draft-ietf-aipref-vocab-08` and records `time` `2026-09-14`. The draft states that its contents do not reflect consensus of the working group in whole or in part.",
   "track": "ietf",
   "version": {
    "label": "draft-ietf-aipref-vocab-08",
    "date": "2026-09-14"
   },
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-ietf-aipref-vocab"
    }
   ],
   "use_cases": [
    "control-ai-crawling"
   ],
   "audience": [
    "site-owner",
    "standards-body",
    "platform"
   ],
   "pairs_with": [
    "aipref-content-usage-attachment",
    "cloudflare-content-signals-policy",
    "tdmrep",
    "rsl",
    "ai-crawler-tokens-robots"
   ],
   "prerequisites": [],
   "hatnote_md": "This page is about the vocabulary Internet-Draft of the IETF AI Preferences (aipref) working group, draft-ietf-aipref-vocab, which defines categories of use (AI Training, AI Use, Search) and how a statement of preference allows or disallows each. It does not say where such statements are published: that is the separate working-group draft draft-ietf-aipref-attach, which carries them in a Content-Usage HTTP header field and a Content-Usage rule in robots.txt; see [AIPREF Content-Usage Attachment](/protocols/aipref-content-usage-attachment/). It is not robots.txt (the Robots Exclusion Protocol, RFC 9309) itself, which the attachment draft updates. It is not Cloudflare's Content Signals Policy, which defines its own content signals search, ai-input, and ai-train; see [Content Signals Policy](/protocols/cloudflare-content-signals-policy/). It is also not [Really Simple Licensing (RSL)](/protocols/rsl/) or the [Text and Data Mining Reservation Protocol (TDMRep)](/protocols/tdmrep/), which are separate specifications, or [ai.txt](/protocols/ai-txt/).",
   "ietf_tracker": {
    "doc": "draft-ietf-aipref-vocab",
    "rev": "08",
    "state": "active",
    "stream": "IETF",
    "group_type": "WG",
    "wg": "aipref",
    "replaced_by": null,
    "posted_utc": "2026-09-14",
    "expires_utc": "2027-03-18",
    "as_of": "2026-10-31",
    "source": "https://datatracker.ietf.org/doc/draft-ietf-aipref-vocab/",
    "source_label": "per IETF Datatracker"
   },
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "crawler_policy",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-10-31",
   "v05_hatnote_html_md": "This page is about the vocabulary Internet-Draft of the IETF AI Preferences (aipref) working group, draft-ietf-aipref-vocab, which defines categories of use (AI Training, AI Use, Search) and how a statement of preference allows or disallows each. It does not say where such statements are published: that is the separate working-group draft draft-ietf-aipref-attach, which carries them in a Content-Usage HTTP header field and a Content-Usage rule in robots.txt; see [AIPREF Content-Usage Attachment](/protocols/aipref-content-usage-attachment/). It is not robots.txt (the Robots Exclusion Protocol, RFC 9309) itself, which the attachment draft updates. It is not Cloudflare's Content Signals Policy, which defines its own content signals search, ai-input, and ai-train; see [Content Signals Policy](/protocols/cloudflare-content-signals-policy/). It is also not [Really Simple Licensing (RSL)](/protocols/rsl/) or the [Text and Data Mining Reservation Protocol (TDMRep)](/protocols/tdmrep/), which are separate specifications, or [ai.txt](/protocols/ai-txt/). [1][2][3][4][5][6][7]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**A Vocabulary For Expressing AI Usage Preferences** (`draft-ietf-aipref-vocab`) defines a vocabulary for preferences regarding how automated processing systems use digital assets. [1] The exemplary serialization is a Dictionary: `train-ai=y, search=n` allows model training, disallows search, and leaves other categories unknown. The format is only exemplary, and the data model in Section 3 can be used without this serialization. [1] A Datatracker new-revision event names `draft-ietf-aipref-vocab-08` and records `time` `2026-09-14`. The draft states that its contents do not reflect consensus of the working group in whole or in part. [1][8]",
   "v05_identity_sentence_md": "**A Vocabulary For Expressing AI Usage Preferences** (`draft-ietf-aipref-vocab`) defines a vocabulary for preferences regarding how automated processing systems use digital assets. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Permit](/category/permit/) (`permit`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "Paul Keller (Open Future), individual draft `draft-keller-aipref-vocab`, latest revision 2025-03-30, replaced by `draft-ietf-aipref-vocab`. On 26 April 2025 the chairs adopted `draft-keller-aipref-vocab-01` and appointed Paul Keller and Martin Thomson as editors. `draft-ietf-aipref-vocab-08` (14 September 2026) lists P. Keller (Open Future) and M. Thomson, Ed. (Mozilla). [1][9][10]"
    },
    {
     "label": "Governed by",
     "value_md": "IETF AI Preferences (aipref) working group. Area: Web and Internet Transport (wit). State: Active. Charter: `charter-ietf-aipref-01` Approved. Chairs: Mark Nottingham and Suresh Krishnan. Area Director: Mike Bishop. List: `ai-control@ietf.org`. Drafts: `github.com/ietf-wg-aipref/drafts`. Created in state Proposed on 2024-11-19. Charter approved and group made active on 2025-01-07. [1][2][11][12]"
    },
    {
     "label": "Track",
     "value_md": "IETF. Intended status: Standards Track. Datatracker intended RFC status: Proposed Standard. [1][13]"
    },
    {
     "label": "IETF tracker",
     "value_md": "[draft-ietf-aipref-vocab](https://datatracker.ietf.org/doc/draft-ietf-aipref-vocab/) · Active Internet-Draft (aipref WG) · authors Paul Keller, Martin Thomson · last updated 2026-09-13 · WG state WG Document · IESG state I-D Exists · replaces `draft-keller-aipref-vocab` [13]"
    },
    {
     "label": "Status",
     "value_md": "Active Internet-Draft (aipref WG Document; no document shepherd assigned; no WG RFCs published yet). The -08 text notes its contents do not yet reflect full working-group consensus. Working-group last call started 2025-09-04 and returned to WG Document on 2025-11-03. [1][2][12][13][14][15]"
    },
    {
     "label": "Version",
     "value_md": "`draft-ietf-aipref-vocab-08`, header date 14 September 2026, expires 18 March 2027 (posted 2026-09-13; WG -00 approved 2025-04-30; replaces `draft-keller-aipref-vocab`). [1][8][9][13][15][16]"
    },
    {
     "label": "Message format",
     "value_md": "Exemplary serialization is a Structured Fields Dictionary. Labels: AI Training `train-ai` (Section 4.1), AI Use `ai-use` (Section 4.2), Search `search` (Section 4.3). Explicit preferences are the tokens `y` and `n`. Example: `train-ai=y, search=n`. [1]"
    },
    {
     "label": "IANA registration",
     "value_md": "This document has no IANA actions. [1]"
    },
    {
     "label": "Specification",
     "value_md": "[A Vocabulary For Expressing AI Usage Preferences](https://www.ietf.org/archive/id/draft-ietf-aipref-vocab-08.txt) (`draft-ietf-aipref-vocab-08`, 14 September 2026) [1][16]"
    },
    {
     "label": "Found at",
     "value_md": "No attachment location in the vocabulary draft: the serialization is exemplary, and the charter keeps the vocabulary independent of how preferences are associated with content. Attachment is [draft-ietf-aipref-attach-05](https://www.ietf.org/archive/id/draft-ietf-aipref-attach-05.txt) (G. Illyes, Google, and M. Thomson, Mozilla, 19 August 2026), which defines a Content-Usage HTTP header and a robots.txt Content-Usage rule and updates RFC 9309. Revision -04 of that draft expired on 2026-05-01 and -05 was posted on 2026-08-18. Editor's copy: [draft-ietf-aipref-vocab.html](https://ietf-wg-aipref.github.io/drafts/draft-ietf-aipref-vocab.html). [1][2][3][17][18]"
    },
    {
     "label": "Licence",
     "value_md": "Copyright (c) 2026 IETF Trust and the document authors. Subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents. Code components must include Revised BSD License text. [1]"
    }
   ],
   "v05_problem_md": "The aipref charter asks for a standard track vocabulary for expressing AI-related preferences, independent of how those preferences are associated with content. Technical enforcement of preferences is out of scope for that charter. [2] Evaluating a statement yields `allow`, `disallow`, or `unknown` per category, with any `disallow` winning so the most restrictive preference applies. Under Section 4.3, `Search` permits internal AI model training and model use whose outputs exclusively serve search links and relevance excerpts (excluding generated summaries), overriding `AI Training` (Section 4.1) and `AI Use` (Section 4.2). [1] Recipients choose whether to follow declared preferences: preferences are not a security mechanism, and the specification neither enforces compliance nor alters statutory copyright exceptions, contractual terms, or jurisdictional legal obligations. [1]",
   "v05_mechanism_delta_md": "Evaluating a statement yields `allow`, `disallow`, or `unknown` per category, with any `disallow` winning so the most restrictive preference applies. Under Section 4.3, `Search` permits internal AI model training and model use whose outputs exclusively serve search links and relevance excerpts (excluding generated summaries), overriding `AI Training` (Section 4.1) and `AI Use` (Section 4.2). [1]",
   "v05_scope_boundary_md": "Recipients choose whether to follow declared preferences: preferences are not a security mechanism, and the specification neither enforces compliance nor alters statutory copyright exceptions, contractual terms, or jurisdictional legal obligations. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "ODRL Information Model 2.2",
      "spec_or_rfc": "W3C ODRL Information Model 2.2 (February 2018)",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "ODRL Information Model 2.2 is the W3C model that the RSL 1.0 specification cites from February 2018, and TDMRep says its TDM Policy is a profile of the Open Digital Rights Language 2.2. AIPREF Vocabulary instead defines the categories AI Training, AI Use, and Search and says its Dictionary serialization is only exemplary. [1][6][7]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "aipref-content-usage-attachment",
      "target_name": "AIPREF Content-Usage Attachment",
      "relation_type": "depended_on_by",
      "relation_label": "Depended on by",
      "delta_md": "The Content-Usage attachment, draft-ietf-aipref-attach-05 by G. Illyes (Google) and M. Thomson (Mozilla), dated 19 August 2026, defines a Content-Usage HTTP header field and a robots.txt Content-Usage rule, and it says that header follows the vocabulary and processing rules in the vocabulary draft. AIPREF Vocabulary defines the labels train-ai, ai-use, and search and says its Dictionary format is only an exemplary serialization. [1][3]"
     },
     {
      "target_id": "cloudflare-content-signals-policy",
      "target_name": "Content Signals Policy",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "Content Signals Policy, which Will Allen published on 24 September 2025, defines three content signals, search, ai-input, and ai-train, and their relevance to crawlers. AIPREF Vocabulary defines different categories, AI Training, AI Use, and Search, mapped to the labels train-ai, ai-use, and search. [1][5]"
     },
     {
      "target_id": "tdmrep",
      "target_name": "TDMRep (TDM Reservation Protocol)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "TDMRep, the W3C Text and Data Mining Reservation Protocol final community-group report of 10 May 2024 edited by Laurent Le Meur (EDRLab), defines tdm-reservation as a boolean whose value 1 means TDM rights are reserved, plus an optional tdm-policy. AIPREF Vocabulary defines usage categories such as AI Training and Search rather than that reservation boolean. [1][7]"
     },
     {
      "target_id": "rsl",
      "target_name": "Really Simple Licensing",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "RSL 1.0 is an XML license, published 2025-12-10, with media type application/rsl+xml. One example prohibits any use by AI systems, including model training, with a prohibits element of type usage and value ai-all, and another states a price in euros with an amount element. AIPREF Vocabulary states allow or disallow for categories such as AI Training and Search, and its Dictionary serialization is only exemplary. [1][6]"
     },
     {
      "target_id": "ai-crawler-tokens-robots",
      "target_name": "AI crawler tokens in robots.txt",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "AI crawler tokens name a robots.txt product. RFC 9309 (September 2022) says a crawler uses its product token to find relevant groups and defines Allow and Disallow lines. OpenAI says it uses OAI-SearchBot and GPTBot robots.txt tags so webmasters can manage how sites work with AI. AIPREF Vocabulary defines usage labels such as train-ai and search. [1][4][19]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (5 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).",
    "side_a": {
     "visible": true,
     "heading": "Origins publishing AIPREF vocabulary labels",
     "col4_header": "Observed `Content-Usage` dictionary & `draft-ietf-aipref-vocab` version fit",
     "note_md": null,
     "rows": [
      {
       "actor": "SpinXO",
       "role": "Publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "robots.txt sets `Content-Usage: train-ai=y, search=y` under the comment `draft-ietf-aipref-attach`. The home response sends `content-usage: train-ai=y, search=y`. `train-ai` and `search` are the AI Training and Search labels in `draft-ietf-aipref-vocab-08` Table 1. Allow and disallow map to `y` and `n`.",
       "source_md": "[SpinXO robots.txt (fetched 2026-10-30)](https://www.spinxo.com/robots.txt) [20] · [SpinXO home page (fetched 2026-10-30)](https://www.spinxo.com/) [21] · [draft-ietf-aipref-vocab-08](https://www.ietf.org/archive/id/draft-ietf-aipref-vocab-08.txt) [1]"
      },
      {
       "actor": "Launchpad",
       "role": "Publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Serves `Content-Usage: ai=n` in the `User-agent: *` group on launchpad.net, bugs.launchpad.net, code.launchpad.net, and answers.launchpad.net, next to `Content-Signal: ai-train=no, search=yes, ai-input=no`. The file comment cites `https://robotstxt.com/ai`. `ai` is the AI Training label in `draft-ietf-aipref-vocab-01` Table 1 and is not a `draft-ietf-aipref-vocab-08` Table 1 label.",
       "source_md": "[launchpad.net/robots.txt (fetched 2026-10-30)](https://launchpad.net/robots.txt) [22] · [bugs.launchpad.net/robots.txt (fetched 2026-10-30)](https://bugs.launchpad.net/robots.txt) [23] · [code.launchpad.net/robots.txt (fetched 2026-10-30)](https://code.launchpad.net/robots.txt) [24] · [answers.launchpad.net/robots.txt (fetched 2026-10-30)](https://answers.launchpad.net/robots.txt) [25] · [draft-ietf-aipref-vocab-01](https://www.ietf.org/archive/id/draft-ietf-aipref-vocab-01.txt) [26] · [draft-ietf-aipref-vocab-08](https://www.ietf.org/archive/id/draft-ietf-aipref-vocab-08.txt) [1]"
      },
      {
       "actor": "Ubuntu Changelogs",
       "role": "Publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Serves `Content-Usage: ai=n` in the `User-Agent: *` group. The file comment cites `https://robotstxt.com/ai`. The response names `nginx/1.14.0 (Ubuntu)`. `ai` is the AI Training label in `draft-ietf-aipref-vocab-01` Table 1 and is absent from `draft-ietf-aipref-vocab-08` Table 1.",
       "source_md": "[changelogs.ubuntu.com/robots.txt (fetched 2026-10-30)](https://changelogs.ubuntu.com/robots.txt) [27] · [draft-ietf-aipref-vocab-01](https://www.ietf.org/archive/id/draft-ietf-aipref-vocab-01.txt) [26] · [draft-ietf-aipref-vocab-08](https://www.ietf.org/archive/id/draft-ietf-aipref-vocab-08.txt) [1]"
      },
      {
       "actor": "They Said So",
       "role": "Publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Serves `Content-Usage: ai=n` in the `User-Agent: *` group, next to `Content-Signal: search=yes, ai-input=no, ai-train=no`. The file comment cites `https://robotstxt.com/ai`. `ai` is the AI Training label in `draft-ietf-aipref-vocab-01` Table 1 and is absent from `draft-ietf-aipref-vocab-08` Table 1.",
       "source_md": "[theysaidso.com/robots.txt (fetched 2026-10-30)](https://theysaidso.com/robots.txt) [28] · [draft-ietf-aipref-vocab-01](https://www.ietf.org/archive/id/draft-ietf-aipref-vocab-01.txt) [26] · [draft-ietf-aipref-vocab-08](https://www.ietf.org/archive/id/draft-ietf-aipref-vocab-08.txt) [1]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Platforms, mappings & standards alignment",
     "col4_header": "Vocabulary mapping & implementation status",
     "note_md": null,
     "rows": [
      {
       "actor": "Cloudflare Content Signals Policy",
       "role": "Platform",
       "status": "Partial",
       "status_display": "Partial · as of 2026-09-15",
       "col4_md": "`draft-romm-aipref-contentsignals-00` Table 1 maps Search to `search`, AI Input to `ai-input`, and AI Training to `ai-train`. Michael Tremante called Cloudflare's Content Signal Policy an interim measure and wrote that they will revisit the policy once a consensus position has happened. Bryan Becker wrote that as standards such as `ai-prefs` mature, Cloudflare will revisit this approach. The September 15, 2026 press release says today's controls are designed to work alongside these emerging standards.",
       "source_md": "[draft-romm-aipref-contentsignals-00](https://datatracker.ietf.org/doc/html/draft-romm-aipref-contentsignals-00) [29] · [Michael Tremante, ai-control (24 September 2025)](https://mailarchive.ietf.org/arch/msg/ai-control/EANb9b9bljOanLBFm5FRerYlxyI/) [30] · [Bryan Becker, Cloudflare Blog (September 15, 2026)](https://blog.cloudflare.com/accountable-mixed-use-ai-crawlers/) [31] · [Cloudflare press release (September 15, 2026)](https://www.cloudflare.com/press/press-releases/2026/cloudflare-helps-end-the-search-or-ai-training-tradeoff/) [32]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [
     {
      "label": "AI Crawler Check, Do AI companies honour Content-Usage today?",
      "as_of": "2026-10-18",
      "value_md": "No major AI company has said publicly that its crawler reads Content-Usage yet. [33]"
     }
    ],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "agent-permissions-json",
     "target_name": "agent-permissions.json",
     "relation_label": "Complements",
     "delta": "agent-permissions.json constrains actions on a page with resource_rules and action_guidelines, while the AIPREF vocabulary expresses preferences such as train-ai and search and defines no action list.",
     "item_md": "**[agent-permissions.json](/protocols/agent-permissions-json/)** (Complements) — agent-permissions.json constrains actions on a page with resource_rules and action_guidelines, while the AIPREF vocabulary expresses preferences such as train-ai and search and defines no action list."
    },
    {
     "item_md": "**[Permit protocols](/category/permit/)** — Category index for `permit` standards."
    }
   ],
   "v05_compiled_md": "---\nid: aipref-vocabulary\ntitle: \"AIPREF Vocabulary (A Vocabulary For Expressing AI Usage Preferences)\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: permit\nform: document-format\nwire_archetype: crawler_policy\nspec_url: https://www.ietf.org/archive/id/draft-ietf-aipref-vocab-08.txt\nlast_checked: 2026-10-31\n---\n\n# AIPREF Vocabulary (A Vocabulary For Expressing AI Usage Preferences)\n\n**Category:** [Permit](/category/permit/) (`permit`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-10-31\n\n> *This page is about the vocabulary Internet-Draft of the IETF AI Preferences (aipref) working group, draft-ietf-aipref-vocab, which defines categories of use (AI Training, AI Use, Search) and how a statement of preference allows or disallows each. It does not say where such statements are published: that is the separate working-group draft draft-ietf-aipref-attach, which carries them in a Content-Usage HTTP header field and a Content-Usage rule in robots.txt; see [AIPREF Content-Usage Attachment](/protocols/aipref-content-usage-attachment/). It is not robots.txt (the Robots Exclusion Protocol, RFC 9309) itself, which the attachment draft updates. It is not Cloudflare's Content Signals Policy, which defines its own content signals search, ai-input, and ai-train; see [Content Signals Policy](/protocols/cloudflare-content-signals-policy/). It is also not [Really Simple Licensing (RSL)](/protocols/rsl/) or the [Text and Data Mining Reservation Protocol (TDMRep)](/protocols/tdmrep/), which are separate specifications, or [ai.txt](/protocols/ai-txt/). [1][2][3][4][5][6][7]*\n\n**A Vocabulary For Expressing AI Usage Preferences** (`draft-ietf-aipref-vocab`) defines a vocabulary for preferences regarding how automated processing systems use digital assets. [1] The exemplary serialization is a Dictionary: `train-ai=y, search=n` allows model training, disallows search, and leaves other categories unknown. The format is only exemplary, and the data model in Section 3 can be used without this serialization. [1] A Datatracker new-revision event names `draft-ietf-aipref-vocab-08` and records `time` `2026-09-14`. The draft states that its contents do not reflect consensus of the working group in whole or in part. [1][8]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Permit](/category/permit/) (`permit`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | Paul Keller (Open Future), individual draft `draft-keller-aipref-vocab`, latest revision 2025-03-30, replaced by `draft-ietf-aipref-vocab`. On 26 April 2025 the chairs adopted `draft-keller-aipref-vocab-01` and appointed Paul Keller and Martin Thomson as editors. `draft-ietf-aipref-vocab-08` (14 September 2026) lists P. Keller (Open Future) and M. Thomson, Ed. (Mozilla). [1][9][10] |\n| **Governed by** | IETF AI Preferences (aipref) working group. Area: Web and Internet Transport (wit). State: Active. Charter: `charter-ietf-aipref-01` Approved. Chairs: Mark Nottingham and Suresh Krishnan. Area Director: Mike Bishop. List: `ai-control@ietf.org`. Drafts: `github.com/ietf-wg-aipref/drafts`. Created in state Proposed on 2024-11-19. Charter approved and group made active on 2025-01-07. [1][2][11][12] |\n| **Track** | IETF. Intended status: Standards Track. Datatracker intended RFC status: Proposed Standard. [1][13] |\n| **IETF tracker** | [draft-ietf-aipref-vocab](https://datatracker.ietf.org/doc/draft-ietf-aipref-vocab/) · Active Internet-Draft (aipref WG) · authors Paul Keller, Martin Thomson · last updated 2026-09-13 · WG state WG Document · IESG state I-D Exists · replaces `draft-keller-aipref-vocab` [13] |\n| **Status** | Active Internet-Draft (aipref WG Document; no document shepherd assigned; no WG RFCs published yet). The -08 text notes its contents do not yet reflect full working-group consensus. Working-group last call started 2025-09-04 and returned to WG Document on 2025-11-03. [1][2][12][13][14][15] |\n| **Version** | `draft-ietf-aipref-vocab-08`, header date 14 September 2026, expires 18 March 2027 (posted 2026-09-13; WG -00 approved 2025-04-30; replaces `draft-keller-aipref-vocab`). [1][8][9][13][15][16] |\n| **Message format** | Exemplary serialization is a Structured Fields Dictionary. Labels: AI Training `train-ai` (Section 4.1), AI Use `ai-use` (Section 4.2), Search `search` (Section 4.3). Explicit preferences are the tokens `y` and `n`. Example: `train-ai=y, search=n`. [1] |\n| **IANA registration** | This document has no IANA actions. [1] |\n| **Specification** | [A Vocabulary For Expressing AI Usage Preferences](https://www.ietf.org/archive/id/draft-ietf-aipref-vocab-08.txt) (`draft-ietf-aipref-vocab-08`, 14 September 2026) [1][16] |\n| **Found at** | No attachment location in the vocabulary draft: the serialization is exemplary, and the charter keeps the vocabulary independent of how preferences are associated with content. Attachment is [draft-ietf-aipref-attach-05](https://www.ietf.org/archive/id/draft-ietf-aipref-attach-05.txt) (G. Illyes, Google, and M. Thomson, Mozilla, 19 August 2026), which defines a Content-Usage HTTP header and a robots.txt Content-Usage rule and updates RFC 9309. Revision -04 of that draft expired on 2026-05-01 and -05 was posted on 2026-08-18. Editor's copy: [draft-ietf-aipref-vocab.html](https://ietf-wg-aipref.github.io/drafts/draft-ietf-aipref-vocab.html). [1][2][3][17][18] |\n| **Licence** | Copyright (c) 2026 IETF Trust and the document authors. Subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents. Code components must include Revised BSD License text. [1] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [Adoption and ecosystem](#adoption-and-ecosystem)\n4. [See also](#see-also)\n5. [References](#references)\n\n---\n\n## Problem and scope\n\nThe aipref charter asks for a standard track vocabulary for expressing AI-related preferences, independent of how those preferences are associated with content. Technical enforcement of preferences is out of scope for that charter. [2] Evaluating a statement yields `allow`, `disallow`, or `unknown` per category, with any `disallow` winning so the most restrictive preference applies. Under Section 4.3, `Search` permits internal AI model training and model use whose outputs exclusively serve search links and relevance excerpts (excluding generated summaries), overriding `AI Training` (Section 4.1) and `AI Use` (Section 4.2). [1] Recipients choose whether to follow declared preferences: preferences are not a security mechanism, and the specification neither enforces compliance nor alters statutory copyright exceptions, contractual terms, or jurisdictional legal obligations. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **ODRL Information Model 2.2** | `W3C ODRL Information Model 2.2 (February 2018)` | Analogous to classic standard | ODRL Information Model 2.2 is the W3C model that the RSL 1.0 specification cites from February 2018, and TDMRep says its TDM Policy is a profile of the Open Digital Rights Language 2.2. AIPREF Vocabulary instead defines the categories AI Training, AI Use, and Search and says its Dictionary serialization is only exemplary. [1][6][7] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[AIPREF Content-Usage Attachment](/protocols/aipref-content-usage-attachment/)** | Depended on by | The Content-Usage attachment, draft-ietf-aipref-attach-05 by G. Illyes (Google) and M. Thomson (Mozilla), dated 19 August 2026, defines a Content-Usage HTTP header field and a robots.txt Content-Usage rule, and it says that header follows the vocabulary and processing rules in the vocabulary draft. AIPREF Vocabulary defines the labels train-ai, ai-use, and search and says its Dictionary format is only an exemplary serialization. [1][3] |\n| **[Content Signals Policy](/protocols/cloudflare-content-signals-policy/)** | Peer alternative | Content Signals Policy, which Will Allen published on 24 September 2025, defines three content signals, search, ai-input, and ai-train, and their relevance to crawlers. AIPREF Vocabulary defines different categories, AI Training, AI Use, and Search, mapped to the labels train-ai, ai-use, and search. [1][5] |\n| **[TDMRep (TDM Reservation Protocol)](/protocols/tdmrep/)** | Peer alternative | TDMRep, the W3C Text and Data Mining Reservation Protocol final community-group report of 10 May 2024 edited by Laurent Le Meur (EDRLab), defines tdm-reservation as a boolean whose value 1 means TDM rights are reserved, plus an optional tdm-policy. AIPREF Vocabulary defines usage categories such as AI Training and Search rather than that reservation boolean. [1][7] |\n| **[Really Simple Licensing](/protocols/rsl/)** | Peer alternative | RSL 1.0 is an XML license, published 2025-12-10, with media type application/rsl+xml. One example prohibits any use by AI systems, including model training, with a prohibits element of type usage and value ai-all, and another states a price in euros with an amount element. AIPREF Vocabulary states allow or disallow for categories such as AI Training and Search, and its Dictionary serialization is only exemplary. [1][6] |\n| **[AI crawler tokens in robots.txt](/protocols/ai-crawler-tokens-robots/)** | Complements | AI crawler tokens name a robots.txt product. RFC 9309 (September 2022) says a crawler uses its product token to find relevant groups and defines Allow and Disallow lines. OpenAI says it uses OAI-SearchBot and GPTBot robots.txt tags so webmasters can manage how sites work with AI. AIPREF Vocabulary defines usage labels such as train-ai and search. [1][4][19] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (5 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).*\n\n### Origins publishing AIPREF vocabulary labels\n\n| Actor | Role | Status | Observed `Content-Usage` dictionary & `draft-ietf-aipref-vocab` version fit | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **SpinXO** | Publisher | Live (HTTP 200) · checked 2026-10-30 | robots.txt sets `Content-Usage: train-ai=y, search=y` under the comment `draft-ietf-aipref-attach`. The home response sends `content-usage: train-ai=y, search=y`. `train-ai` and `search` are the AI Training and Search labels in `draft-ietf-aipref-vocab-08` Table 1. Allow and disallow map to `y` and `n`. | [SpinXO robots.txt (fetched 2026-10-30)](https://www.spinxo.com/robots.txt) [20] · [SpinXO home page (fetched 2026-10-30)](https://www.spinxo.com/) [21] · [draft-ietf-aipref-vocab-08](https://www.ietf.org/archive/id/draft-ietf-aipref-vocab-08.txt) [1] |\n| **Launchpad** | Publisher | Live (HTTP 200) · checked 2026-10-30 | Serves `Content-Usage: ai=n` in the `User-agent: *` group on launchpad.net, bugs.launchpad.net, code.launchpad.net, and answers.launchpad.net, next to `Content-Signal: ai-train=no, search=yes, ai-input=no`. The file comment cites `https://robotstxt.com/ai`. `ai` is the AI Training label in `draft-ietf-aipref-vocab-01` Table 1 and is not a `draft-ietf-aipref-vocab-08` Table 1 label. | [launchpad.net/robots.txt (fetched 2026-10-30)](https://launchpad.net/robots.txt) [22] · [bugs.launchpad.net/robots.txt (fetched 2026-10-30)](https://bugs.launchpad.net/robots.txt) [23] · [code.launchpad.net/robots.txt (fetched 2026-10-30)](https://code.launchpad.net/robots.txt) [24] · [answers.launchpad.net/robots.txt (fetched 2026-10-30)](https://answers.launchpad.net/robots.txt) [25] · [draft-ietf-aipref-vocab-01](https://www.ietf.org/archive/id/draft-ietf-aipref-vocab-01.txt) [26] · [draft-ietf-aipref-vocab-08](https://www.ietf.org/archive/id/draft-ietf-aipref-vocab-08.txt) [1] |\n| **Ubuntu Changelogs** | Publisher | Live (HTTP 200) · checked 2026-10-30 | Serves `Content-Usage: ai=n` in the `User-Agent: *` group. The file comment cites `https://robotstxt.com/ai`. The response names `nginx/1.14.0 (Ubuntu)`. `ai` is the AI Training label in `draft-ietf-aipref-vocab-01` Table 1 and is absent from `draft-ietf-aipref-vocab-08` Table 1. | [changelogs.ubuntu.com/robots.txt (fetched 2026-10-30)](https://changelogs.ubuntu.com/robots.txt) [27] · [draft-ietf-aipref-vocab-01](https://www.ietf.org/archive/id/draft-ietf-aipref-vocab-01.txt) [26] · [draft-ietf-aipref-vocab-08](https://www.ietf.org/archive/id/draft-ietf-aipref-vocab-08.txt) [1] |\n| **They Said So** | Publisher | Live (HTTP 200) · checked 2026-10-30 | Serves `Content-Usage: ai=n` in the `User-Agent: *` group, next to `Content-Signal: search=yes, ai-input=no, ai-train=no`. The file comment cites `https://robotstxt.com/ai`. `ai` is the AI Training label in `draft-ietf-aipref-vocab-01` Table 1 and is absent from `draft-ietf-aipref-vocab-08` Table 1. | [theysaidso.com/robots.txt (fetched 2026-10-30)](https://theysaidso.com/robots.txt) [28] · [draft-ietf-aipref-vocab-01](https://www.ietf.org/archive/id/draft-ietf-aipref-vocab-01.txt) [26] · [draft-ietf-aipref-vocab-08](https://www.ietf.org/archive/id/draft-ietf-aipref-vocab-08.txt) [1] |\n\n### Platforms, mappings & standards alignment\n\n| Actor | Role | Status | Vocabulary mapping & implementation status | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Cloudflare Content Signals Policy** | Platform | Partial · as of 2026-09-15 | `draft-romm-aipref-contentsignals-00` Table 1 maps Search to `search`, AI Input to `ai-input`, and AI Training to `ai-train`. Michael Tremante called Cloudflare's Content Signal Policy an interim measure and wrote that they will revisit the policy once a consensus position has happened. Bryan Becker wrote that as standards such as `ai-prefs` mature, Cloudflare will revisit this approach. The September 15, 2026 press release says today's controls are designed to work alongside these emerging standards. | [draft-romm-aipref-contentsignals-00](https://datatracker.ietf.org/doc/html/draft-romm-aipref-contentsignals-00) [29] · [Michael Tremante, ai-control (24 September 2025)](https://mailarchive.ietf.org/arch/msg/ai-control/EANb9b9bljOanLBFm5FRerYlxyI/) [30] · [Bryan Becker, Cloudflare Blog (September 15, 2026)](https://blog.cloudflare.com/accountable-mixed-use-ai-crawlers/) [31] · [Cloudflare press release (September 15, 2026)](https://www.cloudflare.com/press/press-releases/2026/cloudflare-helps-end-the-search-or-ai-training-tradeoff/) [32] |\n\n### Ecosystem censuses\n\n- **AI Crawler Check, Do AI companies honour Content-Usage today?** (*as of 2026-10-18*): No major AI company has said publicly that its crawler reads Content-Usage yet. [33]\n\n---\n\n## See also\n\n- **[agent-permissions.json](/protocols/agent-permissions-json/)** *(Complements)* — agent-permissions.json constrains actions on a page with resource_rules and action_guidelines, while the AIPREF vocabulary expresses preferences such as train-ai and search and defines no action list.\n- **Category:** [Permit protocols](/category/permit/)\n\n---\n\n## References\n\n1. P. Keller (Open Future) and M. Thomson, Ed. (Mozilla), *A Vocabulary For Expressing AI Usage Preferences (draft-ietf-aipref-vocab-08)* (14 September 2026) — <https://www.ietf.org/archive/id/draft-ietf-aipref-vocab-08.txt>\n2. IETF Datatracker, *AI Preferences (aipref) working group* (charter charter-ietf-aipref-01 Approved) — <https://datatracker.ietf.org/wg/aipref/about/>\n3. G. Illyes (Google) and M. Thomson (Mozilla), *Associating AI Usage Preferences with Content in HTTP (draft-ietf-aipref-attach-05)* (19 August 2026) — <https://www.ietf.org/archive/id/draft-ietf-aipref-attach-05.txt>\n4. M. Koster, G. Illyes, H. Zeller, and L. Sassman, *Robots Exclusion Protocol* (RFC 9309, September 2022) — <https://www.rfc-editor.org/rfc/rfc9309.html>\n5. Will Allen, Cloudflare Blog, *Giving users choice with Cloudflare's new Content Signals Policy* (published 2025-09-24; modified 2026-07-15) — <https://blog.cloudflare.com/content-signals-policy/>\n6. RSL Technical Steering Committee, *Really Simple Licensing (RSL) 1.0 Specification* (published 2025-12-10) — <https://rslstandard.org/rsl>\n7. Laurent Le Meur (EDRLab), W3C TDMRep Community Group, *TDM Reservation Protocol (TDMRep)* (Final Community Group Report, 10 May 2024) — <https://www.w3.org/community/reports/tdmrep/CG-FINAL-tdmrep-20240510/>\n8. IETF Datatracker API, *New-revision events for draft-ietf-aipref-vocab* (nine revisions; -08 published 2026-09-14) — <https://datatracker.ietf.org/api/v1/doc/newrevisiondocevent/?doc__name=draft-ietf-aipref-vocab&format=json&limit=50>\n9. IETF Datatracker, *draft-keller-aipref-vocab — Proposal for an Opt-Out Vocabulary (IETF Datatracker)* (latest revision 2025-03-30; last updated 2025-04-10) — <https://datatracker.ietf.org/doc/draft-keller-aipref-vocab/>\n10. Mark Nottingham, *[ai-control] Adoption of draft-keller-aipref-vocab-01* (26 April 2025) — <https://mailarchive.ietf.org/arch/msg/ai-control/LuWDC12gjlQ6Yj5eKN7ZkgbxopA/>\n11. IETF AI Preferences (aipref) working group, *AIPREF working drafts* (fetched 2026-10-30) — <https://github.com/ietf-wg-aipref/drafts>\n12. IETF Datatracker, *aipref working group history* (charter approved 2025-01-07) — <https://datatracker.ietf.org/wg/aipref/history/>\n13. IETF Datatracker, *draft-ietf-aipref-vocab — A Vocabulary For Expressing AI Usage Preferences (IETF Datatracker)* (last updated 2026-09-13) — <https://datatracker.ietf.org/doc/draft-ietf-aipref-vocab/>\n14. IETF Datatracker API, *RFC documents in group aipref* (fetched 2026-10-30) — <https://datatracker.ietf.org/api/v1/doc/document/?group__acronym=aipref&type=rfc&format=json>\n15. IETF Datatracker, *draft-ietf-aipref-vocab history* (history through the -08 posting on 2026-09-13) — <https://datatracker.ietf.org/doc/draft-ietf-aipref-vocab/history/>\n16. IETF Datatracker API, *IETF Datatracker document record for draft-ietf-aipref-vocab* (rev 08; time 2026-09-14) — <https://datatracker.ietf.org/api/v1/doc/document/draft-ietf-aipref-vocab/?format=json>\n17. IETF Datatracker, *draft-ietf-aipref-attach history* (-04 expired 2026-05-01; -05 posted 2026-08-18) — <https://datatracker.ietf.org/doc/draft-ietf-aipref-attach/history/>\n18. IETF AI Preferences (aipref) working group, *A Vocabulary For Expressing AI Usage Preferences (editor's copy)* (14 September 2026) — <https://ietf-wg-aipref.github.io/drafts/draft-ietf-aipref-vocab.html>\n19. OpenAI, *Overview of OpenAI Crawlers* (fetched 2026-10-30) — <https://developers.openai.com/api/docs/bots>\n20. SpinXO, *robots.txt* (fetched 2026-10-30) — <https://www.spinxo.com/robots.txt>\n21. SpinXO, *SpinXO home page* (response last-modified Fri, 30 Oct 2026) — <https://www.spinxo.com/>\n22. Canonical (Launchpad), *robots.txt* (fetched 2026-10-30) — <https://launchpad.net/robots.txt>\n23. Canonical (Launchpad), *robots.txt* (fetched 2026-10-30) — <https://bugs.launchpad.net/robots.txt>\n24. Canonical (Launchpad), *robots.txt* (fetched 2026-10-30) — <https://code.launchpad.net/robots.txt>\n25. Canonical (Launchpad), *robots.txt* (fetched 2026-10-30) — <https://answers.launchpad.net/robots.txt>\n26. P. Keller (Open Future) and M. Thomson, Ed. (Mozilla), *A Vocabulary For Expressing AI Usage Preferences (draft-ietf-aipref-vocab-01)* (19 June 2025) — <https://www.ietf.org/archive/id/draft-ietf-aipref-vocab-01.txt>\n27. Canonical (Ubuntu), *robots.txt* (response dated Fri, 30 Oct 2026) — <https://changelogs.ubuntu.com/robots.txt>\n28. They Said So, *robots.txt* (response dated Fri, 30 Oct 2026) — <https://theysaidso.com/robots.txt>\n29. M. Tremante (Cloudflare) and L. Romm, *Vocabulary For Expressing Content Signals (draft-romm-aipref-contentsignals-00 HTML)* (1 October 2025) — <https://datatracker.ietf.org/doc/html/draft-romm-aipref-contentsignals-00>\n30. Michael Tremante, *Cloudflare's Content Signal Policy* (24 September 2025) — <https://mailarchive.ietf.org/arch/msg/ai-control/EANb9b9bljOanLBFm5FRerYlxyI/>\n31. Bryan Becker, Cloudflare Blog, *Have it both ways: stay discoverable in search while disallowing AI training* (published 2026-09-15) — <https://blog.cloudflare.com/accountable-mixed-use-ai-crawlers/>\n32. Cloudflare, *Cloudflare Helps End the Search-or-AI-Training Tradeoff* (15 September 2026) — <https://www.cloudflare.com/press/press-releases/2026/cloudflare-helps-end-the-search-or-ai-training-tradeoff/>\n33. Scout Agent, AI Crawler Check, *Content-Usage robots.txt: IETF AIPREF Explained (2026)* (published 2026-10-18) — <https://aicrawlercheck.com/blog/ietf-aipref-content-usage-robots-txt>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "TDMRep",
   "adoption": {
    "level": "observed",
    "by": "Elsevier, Optica Publishing Group, Springer Nature, Le Progrès, Hachette Livre, Spawning (Data Diligence), img2dataset, Mondadori, and 4 other verified implementations",
    "probe_run": null
   },
   "aliases": [
    "TDM Reservation Protocol"
   ],
   "analog": "Rights-reservation metadata (like a Creative Commons license badge)",
   "collisions": [],
   "discovery": {
    "mechanism": "Well-known JSON file, HTTP headers, HTML meta tags, or EPUB/PDF metadata",
    "path": "/.well-known/tdmrep.json; tdm-reservation / tdm-policy HTTP headers; <meta name=\"tdm-reservation\"> in HTML; tdm:reservation in EPUB and PDF metadata"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.w3.org/community/reports/tdmrep/CG-FINAL-tdmrep-20240510/",
     "claim": "Laurent Le Meur (EDRLab), *TDM Reservation Protocol (TDMRep)*, Final Community Group Report, 10 May 2024",
     "date": null,
     "quote": "published by the Text and Data Mining Reservation Protocol Community Group under the W3C Community Final Specification Agreement (FSA). / Editor: Laurent Le Meur (EDRLab) / It is not a W3C Standard nor is it on the W3C Standards Track. / This initiative is a technical answer to the constraints set by the Article 4 of the new European Directive on copyright and related rights in the Digital Single Market. / This specification defines a JSON file named tdmrep.json, which MUST be hosted in the /.well-known repository of a Web server. / In each rule, location and tdm-reservation are mandatory, tdm-policy is optional. / The format of policies defined in this specification is a profile of the Open Digital Rights Language 2.2 [ODRL]. / https://www.w3.org/community/reports/tdmrep/CG-FINAL-tdmrep-20240510/ Editor: Laurent Le Meur (EDRLab) Previous version TDMRep, Second Version Useful links TDMRep / Final Community Group Report 10 May 2024\" } TDM Reservation Protocol (TDMRep) / TDM Reservation Protocol (TDMRep) Final Community Group Report 10 May 2024 This version: https://www.w3.org/community/reports/tdmrep/CG-FINAL-tdmrep-20240510/ / The \"opt-out\" option specified by the Article 4 of the CDSM Directive is expressed by the use of tdm-reservation with value equal 1. / 1 TDM rights are reserved. If a TDM Policy is set, TDM Agents MAY use it to get information on how they can acquire from the rightsholder an authorization to mine the content. / A TDM Agent MUST check the presence of a TDM file on the origin server before it starts scraping the content of the Web server. / Important note: TDM Actors which benefit from the Article 3 of the CDSM Directive do not have to comply to this requirement. / These properties cover TDM rights for every resource in the package, and this specification does not cover the definition of specific TDM rights for the different resources present in the package.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://www.w3.org/community/tdmrep/2021/01/20/call-for-participation-in-tdm-reservation-protocol-community-group/",
     "claim": "W3C Team, *Call for Participation in TDM Reservation Protocol Community Group*, 2021-01-20; checked 2026-10-29",
     "date": null,
     "quote": "This group was originally proposed on 2021-01-18 by Laurent Le Meur.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://www.w3.org/community/tdmrep/",
     "claim": "W3C, *Text and Data Mining Reservation Protocol Community Group*, checked 2026-10-29",
     "date": null,
     "quote": "2024-08-09 TDM Reservation Protocol, version 3 / Notes, September 30th, 2025 Laurent Le Meur | Posted on: October 1, 2025 / URL https://www.w3.org/2022/tdmrep/. It is referenced from the TDMRep Community home page. As multiple EU / All participants in this group have signed the W3C Community Contributor License Agreement . / It is not a NO-TDM signal, but a RIGHTS-RESERVED signal.",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://www.iana.org/assignments/well-known-uris/well-known-uris-1.csv",
     "claim": "IANA, *Well-Known URIs*, registry CSV, fetched 2026-10-30",
     "date": null,
     "quote": "tdmrep.json,[https://www.w3.org/2022/tdmrep/],provisional,W3C,,2024-02-15, / 7808 permanent IESG 2015-08-03 tdmrep.json https://www.w3.org/2022/tdmrep/ provisional W3C 2024-02-15 tor-relay The \"tor-relay\" Well-Known Resource",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://www.w3.org/events/meetings/4d16ca76-dc36-4bf2-914e-13c2ca89ad2d/",
     "claim": "W3C, *TDMRep Community Group Meeting at TPAC 2025*, 2025-11-14; checked 2026-10-29",
     "date": null,
     "quote": "We'll then discuss a possible evolution of TDMRep, using the Vocabulary defined by AI Pref.",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://www.w3.org/community/tdmrep/participants",
     "claim": "W3C, *Participants in the Text and Data Mining Reservation Protocol Community Group*, checked 2026-10-29",
     "date": null,
     "quote": "Laurent Le Meur EDRLab Check and nominate Chair: Giulia Marangoni AIE - Italian Publishers",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://github.com/w3c-cg/tdm-reservation-protocol",
     "claim": "W3C TDMRep Community Group, *w3c-cg/tdm-reservation-protocol repository*, checked 2026-10-30",
     "date": null,
     "quote": "\"full_name\": \"w3c-cg/tdm-reservation-protocol\" / \"html_url\": \"https://github.com/w3c-cg/tdm-reservation-protocol\", \"description\": \"Repository of the Text and Data Mining Reservation Protocol Community Group\",",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://www.w3.org/community/reports/tdmrep/CG-FINAL-tdmrep-20240202/",
     "claim": "Laurent Le Meur (EDRLab), *TDM Reservation Protocol (TDMRep) Version 2*, published 2024-02-02",
     "date": null,
     "quote": "February 2024 This version: https://www.w3.org/community/reports/tdmrep/CG-FINAL-tdmrep-20240202/ Editor: Laurent Le Meur ( EDRLab ) Previous version",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://www.w3.org/community/reports/tdmrep/CG-FINAL-tdmrep-20220216/",
     "claim": "W3C TDMRep Community Group, *TDM Reservation Protocol (TDMRep) Version 1*, 2022-02-16; checked 2026-10-29",
     "date": null,
     "quote": "Final Community Group Report 16 February 2022 This version: https://www.w3.org/community/reports/tdmrep/CG-FINAL-tdmrep-20220216/ Editor: Laurent Le Meur",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://publications.europa.eu/resource/cellar/214471fe-786e-11e9-9f05-01aa75ed71a1.0006.03/DOC_1",
     "claim": "European Union, *Directive (EU) 2019/790 on copyright and related rights in the Digital Single Market, Article 4(3)*, 2019-05-17; checked 2026-10-29",
     "date": null,
     "quote": "The exception or limitation provided for in paragraph 1 shall apply on condition that the use of works and other subject matter referred to in that paragraph has not been expressly reserved by their rightholders in an appropriate manner, such as machine-readable means in the case of content made publicly available online.",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://www.rfc-editor.org/rfc/rfc8615.html",
     "claim": "M. Nottingham (IETF), *RFC 8615: Well-Known Uniform Resource Identifiers (URIs)*, published May 2019",
     "date": null,
     "quote": "This memo defines a path prefix for \"well-known locations\",",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://www.w3.org/TR/xhtml-rdfa-primer/",
     "claim": "W3C, *RDFa 1.1 Primer - Third Edition*, 2015-03-17",
     "date": "2015-03-17",
     "quote": "The last couple of years have witnessed a fascinating evolution: while the Web was initially",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-aipref-attach/",
     "claim": "IETF Datatracker, *draft-ietf-aipref-attach — Associating AI Usage Preferences with Content in HTTP (IETF Datatracker)*, last updated 2026-08-18",
     "date": null,
     "quote": "Active Internet-Draft (aipref WG)",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://blog.cloudflare.com/content-signals-policy/",
     "claim": "Cloudflare, *Giving users choice with Cloudflare's new Content Signals Policy*, published 2025-09-24; modified 2026-07-15",
     "date": null,
     "quote": "server: cloudflare cf-ray: a52db34f6977d9de-FRA alt-svc: h3=\":443\"; ma=86400 width=device-width, initial-scale=1.0 en-us @cloudflare https://blog.cloudflare.com/content-signals-policy/ 1200 628",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://rslstandard.org/rsl",
     "claim": "RSL Technical Steering Committee, *Really Simple Licensing (RSL) 1.0 Specification*, published 2025-12-10",
     "date": null,
     "quote": "robots.txt License: directives HTTP Link headers with rel=\"license\" HTML license associations established using <link> or <script> elements RSS <rsl:content> associations / embedded within a media or data file as described in Section 4.8",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://github.com/Spawning-Inc/spawning-wp-plugin",
     "claim": "Spawning Inc., *spawning-wp-plugin*, fetched 2026-10-30",
     "date": null,
     "quote": "true false 647415096 Spawning-Inc/spawning-wp-plugin logged-out env-production page-responsive false https://api.github.com/_private/browser/stats https://api.github.com/_private/browser/errors",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://www.rfc-editor.org/rfc/rfc9309.html",
     "claim": "M. Koster, G. Illyes, H. Zeller, and L. Sassman (IETF), *RFC 9309: Robots Exclusion Protocol*, published September 2022",
     "date": null,
     "quote": "This is an Internet Standards Track document.",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://www.elsevier.com/.well-known/tdmrep.json",
     "claim": "Elsevier, *Elsevier tdmrep.json*, checked 2026-10-30",
     "date": null,
     "quote": "\"location\": \"/\", \"tdm-reservation\": 1, \"tdm-policy\": \"https://www.elsevier.com/tdm/tdmrep-policy.json\"",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://raw.githubusercontent.com/w3c-cg/tdm-reservation-protocol/main/docs/adopters.md",
     "claim": "W3C TDMRep Community Group, *docs/adopters.md*, checked 2026-10-29",
     "date": null,
     "quote": "Elsevier (https://www.elsevier.com/): as tdmrep.json, http headers + html metadata, with a policy. Also Crossref metadata, PDF and EPUB metadata. / Optica Publishing Group (https://opg.optica.org/): as tdmrep.json, Crossref metadata, PDF XMP Metadata, with a policy / Springer Nature (https://www.springernature.com/): as tdmrep.json, with a policy. / Hachette Livre has implemented the protocol on most websites of the group's publishing houses. / Mondadori (Italy): on its websites, [Mondadori](https://www.mondadori.it/) and [Oscar](https://www.oscarmondadori.it/). / Penguin Random House Germany: in its ONIX records. / American Association for the Advancement of Science (https://www.science.org): as tdmrep.json, with a policy. / American Chemical Society (https://pubs.acs.org/): as tdmrep.json, with a policy. / IEEE (https://www.ieee.org): as tdmrep.json, with a policy. / The Finnish Publishers Association estimates that the adoption of the TDMProtocol is between 50% -80% of trade publishers and 70% of publishers of learning material.",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://opg.optica.org/.well-known/tdmrep.json",
     "claim": "Optica Publishing Group, *Optica tdmrep.json*, checked 2026-10-30",
     "date": null,
     "quote": "\"location\": \"/\", \"tdm-reservation\": 1, \"tdm-policy\":\"https://opg.optica.org/policies/opg-tdm-policy.json\"",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://link.springer.com/.well-known/tdmrep.json",
     "claim": "Springer Nature, *link.springer.com tdmrep.json*, checked 2026-10-30",
     "date": null,
     "quote": "\"location\": \"/\", \"tdm-reservation\": 1, \"tdm-policy\": \"https://dev.springernature.com/tdm/SNTDMPolicy.json\"",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://www.leprogres.fr/",
     "claim": "Le Progrès, *Le Progrès homepage HTTP response headers*, checked 2026-10-30",
     "date": null,
     "quote": "tdm-policy: https://www.leprogres.fr/tdm-policy/tdm-policy.json tdm-reservation: 1",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://www.hachette.fr/",
     "claim": "Hachette Livre, *Hachette.fr homepage HTML metadata*, checked 2026-10-30",
     "date": null,
     "quote": "{\"name\":\"tdm-reservation\",\"content\":\"1\"}",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://datadiligence.readthedocs.io/en/latest/api/datadiligence.rules.html",
     "claim": "Spawning, *datadiligence.rules module*, checked 2026-10-29",
     "date": null,
     "quote": "class datadiligence.rules.http.TDMRepHeader / HEADER_NAME = 'tdm-reservation' / Check if the tdm-rep header allows access to the resource without a policy.",
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://datadiligence.readthedocs.io/en/latest/api/datadiligence.evaluators.html",
     "claim": "Spawning, *datadiligence.evaluators module*, checked 2026-10-29",
     "date": null,
     "quote": "datadiligence 0.1.7.post1.dev1+gea09739 / respect_tdmrep=True / Loads XRobotsTagHeader, TDMRepHeader, and C2PAMetadata rules by default.",
     "ref": 25
    },
    {
     "label": "[26]",
     "url": "https://github.com/rom1504/img2dataset/issues/308",
     "claim": "rom1504/img2dataset, *Issue #308: Support W3C TDM Reservation Protocol (comments)*, checked 2026-10-30",
     "date": null,
     "quote": "datadiligence currently supports the existing noai HTTP headers, the proposed TDMRep HTTP headers, and the Spawning API, with additional methods planned. / While the package doesn't directly support the tdmrep.json or ai.txt files just yet, the Spawning API does. / Adding a new header in the set of disallowed ones seems indeed fine. / As for tdmrep.json, i am wondering if you considered specifying in the response headers that this file exists? / To what extent is X-Robots-Tag: noai more standard than tdm-reservation: 1? / The main complexity will in any case be to handle a robots.txt or tdmrep.json file. / We made #312 to replace the opt-out logic in img2dataset with calls to the datadiligence package / Accepting the changes in the PR would resolve this issue.",
     "ref": 26
    },
    {
     "label": "[27]",
     "url": "https://www.edrlab.org/open-standards/tdmrep/",
     "claim": "EDRLab, *TDM Reservation Protocol*, checked 2026-10-29",
     "date": null,
     "quote": "Of the top 250 French websites, 143 have already implemented the TDMRep specification.",
     "ref": 27
    }
   ],
   "form": "well-known-file",
   "governance": "The W3C Text and Data Mining Reservation Protocol Community Group, chaired by Laurent Le Meur (EDRLab) and Giulia Marangoni (AIE - Italian Publishers Association). The spec was \"published by the Text and Data Mining Reservation Protocol Community Group under the W3C Community Final Specification Agreement (FSA).\" Work continues on GitHub at w3c-cg/tdm-reservation-protocol, last pushed 2026-09-03 UTC",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against w3.org/community/reports/tdmrep/CG-FINAL-tdmrep-20240510/"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "tdmrep",
   "implementation": "shipping",
   "last_verified": "2026-11-12",
   "name": "TDMRep (TDM Reservation Protocol)",
   "native_status": "Final Community Group Report (version 3). The group is still active: its chair posted meeting notes on 2025-10-01, and its TPAC 2025 meeting (2025-11-14) planned to \"discuss a possible evolution of TDMRep, using the Vocabulary defined by AI Pref\"",
   "origin": {
    "org": "Laurent Le Meur (EDRLab)",
    "date": "2021-01-18"
   },
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "stable",
   "probe": {
    "method": "GET",
    "on_absent": "No TDM reservation file at the well-known path; check per-resource HTTP headers and embedded metadata before concluding no reservation exists, per the spec's own processing-priority rules",
    "parse": "Presence of a tdm-reservation or tdm-policy field in the returned JSON, or equivalently in the TDM-Reservation/TDM-Policy HTTP headers on the resource",
    "path": "{origin}/.well-known/tdmrep.json"
   },
   "question": "Has a rights holder reserved text-and-data-mining rights over this content, and what policy governs any permitted mining?",
   "scope": "general",
   "spec_url": "https://www.w3.org/community/reports/tdmrep/CG-FINAL-tdmrep-20240510/",
   "step": "permit",
   "summary_md": "**TDMRep (TDM Reservation Protocol)** (`TDMRep`) is a Final Community Group Report edited by Laurent Le Meur (EDRLab) and published by the W3C Text and Data Mining Reservation Protocol Community Group under the W3C Community Final Specification Agreement (`FSA`). It is not a W3C Standard nor is it on the W3C Standards Track; the specification provides a technical answer to the constraints set by Article 4 of the European Directive on copyright and related rights in the Digital Single Market. Rightsholders express choices through two properties, `tdm-reservation` and `tdm-policy`, across four techniques: a JSON array file named `tdmrep.json` in `/.well-known` where each rule requires `location` and `tdm-reservation` with optional `tdm-policy`, HTTP response headers on `GET` or `HEAD` requests, HTML `meta` elements, and `tdm:reservation` / `tdm:policy` metadata in EPUB Package Documents or PDF `XMP` metadata. When `tdm-policy` points to a machine-readable policy, the document is formatted as a JSON-LD profile of the Open Digital Rights Language 2.2 (`ODRL`). Proposed on `2021-01-18` by Laurent Le Meur, the Community Group published version 1 on `2022-02-16`, version 2 on `2024-04-16` in the register (dated 02 February 2024 on the report), and version 3 as a Final Community Group Report dated 10 May 2024 (`2024-08-09` in the Community Group reports register). IANA registered `tdmrep.json` as a provisional well-known URI on `2024-02-15`, and the Community Group scheduled a TPAC 2025 meeting to discuss a possible evolution of TDMRep using the Vocabulary defined by AI Pref.",
   "track": "w3c",
   "version": {
    "label": "Version 3",
    "date": "2024-05-10"
   },
   "watch": [
    {
     "type": "page",
     "url": "https://www.w3.org/community/reports/tdmrep/CG-FINAL-tdmrep-20240510/",
     "selector": "main",
     "cadence": "weekly"
    }
   ],
   "use_cases": [
    "control-ai-crawling"
   ],
   "audience": [
    "site-owner",
    "standards-body"
   ],
   "pairs_with": [
    "aipref-content-usage-attachment",
    "cloudflare-content-signals-policy",
    "rsl",
    "ai-txt",
    "ai-crawler-tokens-robots"
   ],
   "prerequisites": [],
   "hatnote_md": "This page is about the TDM Reservation Protocol (TDMRep) of the W3C Text and Data Mining Reservation Protocol Community Group: a way for rightsholders to say that their text-and-data-mining rights are reserved, as an opt-out under Article 4 of the EU DSM Directive, and to point to a licensing policy. It is not the IETF AIPREF work ([AIPREF vocabulary](/protocols/aipref-vocabulary/), [AIPREF Content-Usage attachment](/protocols/aipref-content-usage-attachment/)), Cloudflare's [Content Signals Policy](/protocols/cloudflare-content-signals-policy/), [Really Simple Licensing (RSL)](/protocols/rsl/), Spawning's [ai.txt](/protocols/ai-txt/), or [AI crawler user-agent tokens in robots.txt](/protocols/ai-crawler-tokens-robots/), which have their own pages.",
   "tier": "spec_brief",
   "lifecycle_status": "published_standard",
   "wire_archetype": "crawler_policy",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "This page is about the TDM Reservation Protocol (TDMRep) of the W3C Text and Data Mining Reservation Protocol Community Group: a way for rightsholders to say that their text-and-data-mining rights are reserved, as an opt-out under Article 4 of the EU DSM Directive, and to point to a licensing policy. It is not the IETF AIPREF work ([AIPREF vocabulary](/protocols/aipref-vocabulary/), [AIPREF Content-Usage attachment](/protocols/aipref-content-usage-attachment/)), Cloudflare's [Content Signals Policy](/protocols/cloudflare-content-signals-policy/), [Really Simple Licensing (RSL)](/protocols/rsl/), Spawning's [ai.txt](/protocols/ai-txt/), or [AI crawler user-agent tokens in robots.txt](/protocols/ai-crawler-tokens-robots/), which have their own pages. [1]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**TDMRep (TDM Reservation Protocol)** (`TDMRep`) is a Final Community Group Report edited by Laurent Le Meur (EDRLab) and published by the W3C Text and Data Mining Reservation Protocol Community Group under the W3C Community Final Specification Agreement (`FSA`). [1] It is not a W3C Standard nor is it on the W3C Standards Track; the specification provides a technical answer to the constraints set by Article 4 of the European Directive on copyright and related rights in the Digital Single Market. [1] Rightsholders express choices through two properties, `tdm-reservation` and `tdm-policy`, across four techniques: a JSON array file named `tdmrep.json` in `/.well-known` where each rule requires `location` and `tdm-reservation` with optional `tdm-policy`, HTTP response headers on `GET` or `HEAD` requests, HTML `meta` elements, and `tdm:reservation` / `tdm:policy` metadata in EPUB Package Documents or PDF `XMP` metadata. [1] When `tdm-policy` points to a machine-readable policy, the document is formatted as a JSON-LD profile of the Open Digital Rights Language 2.2 (`ODRL`). [1] Proposed on `2021-01-18` by Laurent Le Meur, the Community Group published version 1 on `2022-02-16`, version 2 on `2024-04-16` in the register (dated 02 February 2024 on the report), and version 3 as a Final Community Group Report dated 10 May 2024 (`2024-08-09` in the Community Group reports register). [2][3] IANA registered `tdmrep.json` as a provisional well-known URI on `2024-02-15`, and the Community Group scheduled a TPAC 2025 meeting to discuss a possible evolution of TDMRep using the Vocabulary defined by AI Pref. [4][5]",
   "v05_identity_sentence_md": "**TDMRep (TDM Reservation Protocol)** (`TDMRep`) is a Final Community Group Report edited by Laurent Le Meur (EDRLab) and published by the W3C Text and Data Mining Reservation Protocol Community Group under the W3C Community Final Specification Agreement (`FSA`). [1] It is not a W3C Standard nor is it on the W3C Standards Track; the specification provides a technical answer to the constraints set by Article 4 of the European Directive on copyright and related rights in the Digital Single Market. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Permit](/category/permit/) (`permit`)"
    },
    {
     "label": "Form",
     "value_md": "Well-known file (`well-known-file`)"
    },
    {
     "label": "Originated by",
     "value_md": "Laurent Le Meur (EDRLab, Editor), proposed `2021-01-18` [1][2]"
    },
    {
     "label": "Governed by",
     "value_md": "W3C TDMRep CG, co-chaired by Laurent Le Meur (EDRLab) and Giulia Marangoni (AIE); not on W3C Standards Track [1][6][7]"
    },
    {
     "label": "Track",
     "value_md": "W3C Community Group Report [1]"
    },
    {
     "label": "Status",
     "value_md": "Final Community Group Report (version 3). The group is still active: its chair posted meeting notes on 2025-10-01, and its TPAC 2025 meeting (2025-11-14) planned to \"discuss a possible evolution of TDMRep, using the Vocabulary defined by AI Pref\" [1][3][5]"
    },
    {
     "label": "Version",
     "value_md": "Version 3 (`2024-05-10` on spec; `2024-08-09` in CG register), after v2 (`2024-02-02`) and v1 (`2022-02-16`) [1][8][9]"
    },
    {
     "label": "Wire format",
     "value_md": "JSON array (`application/json`) at `/.well-known/tdmrep.json`, HTTP headers, HTML `<meta>`, EPUB 2/3 OPF, PDF XMP RDF, and ODRL 2.2 JSON-LD [1]"
    },
    {
     "label": "Specification",
     "value_md": "[W3C CG Final Report v3](https://www.w3.org/community/reports/tdmrep/CG-FINAL-tdmrep-20240510/) · [W3C CG Home](https://www.w3.org/community/tdmrep/) · [GitHub (`adopters.md`)](https://raw.githubusercontent.com/w3c-cg/tdm-reservation-protocol/main/docs/adopters.md) · [IANA Registry](https://www.iana.org/assignments/well-known-uris/well-known-uris-1.csv) [1][3][7]"
    },
    {
     "label": "Found at",
     "value_md": "`GET /.well-known/tdmrep.json` (IANA `2024-02-15`), `tdm-reservation` / `tdm-policy` headers, `<meta>`, and `tdm:reservation` [1][4]"
    },
    {
     "label": "Licence",
     "value_md": "W3C Community Final Specification Agreement (`FSA`) [1][3]"
    }
   ],
   "v05_problem_md": "Under Article 4(3) of Directive (EU) 2019/790, the general text-and-data-mining exception applies only if the use of works has not been expressly reserved by rightsholders in an appropriate manner, such as machine-readable means for content made publicly available online. [10] TDMRep expresses the Article 4 opt-out by setting `tdm-reservation` to `1` (reserving TDM rights) or `0` (not reserved), paired with an optional `tdm-policy` URL pointing to an ODRL 2.2 policy where TDM Agents MAY find how to acquire authorization to mine the content. [1] A TDM Agent MUST check for `tdmrep.json` in `/.well-known` on the origin server before scraping and evaluate HTTP headers, HTML metadata, and EPUB or PDF metadata in priority order. [1] The Community Group characterizes the declaration not as a `NO-TDM` signal, but as a `RIGHTS-RESERVED` signal. [3] TDM Actors that benefit from Article 3 of the CDSM Directive do not have to comply with licensing contact requirements in a policy, and EPUB metadata properties cover the entire package rather than individual resources inside the package. [1]",
   "v05_mechanism_delta_md": "TDMRep expresses the Article 4 opt-out by setting `tdm-reservation` to `1` (reserving TDM rights) or `0` (not reserved), paired with an optional `tdm-policy` URL pointing to an ODRL 2.2 policy where TDM Agents MAY find how to acquire authorization to mine the content. [1] A TDM Agent MUST check for `tdmrep.json` in `/.well-known` on the origin server before scraping and evaluate HTTP headers, HTML metadata, and EPUB or PDF metadata in priority order. [1]",
   "v05_scope_boundary_md": "The Community Group characterizes the declaration not as a `NO-TDM` signal, but as a `RIGHTS-RESERVED` signal. [3] TDM Actors that benefit from Article 3 of the CDSM Directive do not have to comply with licensing contact requirements in a policy, and EPUB metadata properties cover the entire package rather than individual resources inside the package. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "Well-Known URIs (RFC 8615)",
      "spec_or_rfc": "RFC 8615",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "TDMRep serves tdmrep.json at /.well-known/tdmrep.json, where each rule requires location and tdm-reservation and may include tdm-policy, and repeats the reservation in HTTP headers, HTML meta, and EPUB or PDF metadata, a document RFC 8615 does not define. [1][11]"
     },
     {
      "name": "rel=\"license\" & Rights Metadata (W3C / CC)",
      "spec_or_rfc": "W3C RDFa Primer",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "TDMRep's tdm-reservation value 1 states that text-and-data mining is reserved and tdm-policy gives an ODRL policy URL, whereas rel=\"license\" only links a representation to a license document. [1][12]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "aipref-content-usage-attachment",
      "target_name": "AIPREF Content-Usage Attachment",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "TDMRep carries tdm-reservation, set to 1 for the Article 4 opt-out, and an optional tdm-policy URL, while AIPREF Content-Usage attaches tokens such as train-ai=n in a robots.txt rule and a Content-Usage header. [1][13]"
     },
     {
      "target_id": "cloudflare-content-signals-policy",
      "target_name": "Content Signals Policy",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "TDMRep's reservation is independent of robots.txt group selection and uses tdm-reservation value 1, while Content-Signal sits inside a User-agent group and sets search, ai-input, and ai-train. [1][14]"
     },
     {
      "target_id": "rsl",
      "target_name": "Really Simple Licensing",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "TDMRep records a mining reservation at /.well-known/tdmrep.json (or via tdm-reservation HTTP headers and HTML/EPUB/PDF metadata), whereas RSL defines no fixed /rsl.xml path and associates XML license documents via five Section 4 discovery surfaces: robots.txt License: directives, HTTP Link headers (rel=\"license\"), HTML `<link>` or `<script>` elements, RSS `<rsl:content>` elements, and embedded media or data file metadata. [1][15]"
     },
     {
      "target_id": "ai-txt",
      "target_name": "ai.txt",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "TDMRep uses /.well-known/tdmrep.json plus tdm-reservation, while ai.txt is a permission file at /ai.txt, using Allow and Disallow over media extensions, or at /.well-known/ai.txt with Training, Scraping, Indexing, and Caching. [1][16]"
     },
     {
      "target_id": "ai-crawler-tokens-robots",
      "target_name": "AI crawler tokens in robots.txt",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "TDMRep reserves mining of content with tdm-reservation equal to 1, while AI crawler tokens only match a User-agent product token such as GPTBot to Allow and Disallow paths. [1][17]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (12 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).",
    "side_a": {
     "visible": true,
     "heading": "Publishers serving `/.well-known/tdmrep.json`, HTTP headers, or HTML metadata",
     "col4_header": "Attachment technique, `tdm-reservation` value & `tdm-policy`",
     "note_md": null,
     "rows": [
      {
       "actor": "Elsevier",
       "role": "Publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Well-known `tdmrep.json` (HTTP 200, `application/json;charset=utf-8`, checked 2026-10-30) sets `location` `/`, `tdm-reservation` 1, and `tdm-policy` `https://www.elsevier.com/tdm/tdmrep-policy.json`. The adopters list also records http headers + html metadata, with a policy, plus Crossref metadata, PDF and EPUB metadata.",
       "source_md": "[Elsevier tdmrep.json (checked 2026-10-30)](https://www.elsevier.com/.well-known/tdmrep.json) [18] · [Elsevier on the TDMRep adopters list](https://raw.githubusercontent.com/w3c-cg/tdm-reservation-protocol/main/docs/adopters.md) [19]"
      },
      {
       "actor": "Optica Publishing Group",
       "role": "Publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Well-known `tdmrep.json` (HTTP 200, `application/json`, checked 2026-10-30) sets `location` `/`, `tdm-reservation` 1, and `tdm-policy` `https://opg.optica.org/policies/opg-tdm-policy.json`. The adopters list also records Crossref metadata and PDF XMP Metadata, with a policy.",
       "source_md": "[Optica tdmrep.json (checked 2026-10-30)](https://opg.optica.org/.well-known/tdmrep.json) [20] · [Optica Publishing Group on the TDMRep adopters list](https://raw.githubusercontent.com/w3c-cg/tdm-reservation-protocol/main/docs/adopters.md) [19]"
      },
      {
       "actor": "Springer Nature",
       "role": "Publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Well-known `tdmrep.json` (HTTP 200, `application/json`, checked 2026-10-30) sets `location` `/`, `tdm-reservation` 1, and `tdm-policy` `https://dev.springernature.com/tdm/SNTDMPolicy.json`. The adopters list records Springer Nature (https://www.springernature.com/) as tdmrep.json, with a policy.",
       "source_md": "[link.springer.com tdmrep.json (checked 2026-10-30)](https://link.springer.com/.well-known/tdmrep.json) [21] · [Springer Nature on the TDMRep adopters list](https://raw.githubusercontent.com/w3c-cg/tdm-reservation-protocol/main/docs/adopters.md) [19]"
      },
      {
       "actor": "Le Progrès",
       "role": "Newspaper",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Homepage response headers (HTTP 200, `text/html; charset=utf-8`, checked 2026-10-30): `tdm-reservation: 1` and `tdm-policy: https://www.leprogres.fr/tdm-policy/tdm-policy.json`.",
       "source_md": "[Le Progrès homepage (checked 2026-10-30)](https://www.leprogres.fr/) [22]"
      },
      {
       "actor": "Hachette Livre",
       "role": "Publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Homepage HTML (HTTP 200, `text/html`, checked 2026-10-30) sets meta `tdm-reservation` to `1`. This fetch does not include a tdm-policy property. The adopters list says Hachette Livre has implemented the protocol on most websites of the group's publishing houses.",
       "source_md": "[Hachette.fr homepage (checked 2026-10-30)](https://www.hachette.fr/) [23] · [Hachette Livre on the TDMRep adopters list](https://raw.githubusercontent.com/w3c-cg/tdm-reservation-protocol/main/docs/adopters.md) [19]"
      },
      {
       "actor": "Mondadori",
       "role": "Publisher",
       "status": "Listed",
       "status_display": "Listed · checked 2026-10-30",
       "col4_md": "Adopters list: Mondadori (Italy): on its websites, [Mondadori](https://www.mondadori.it/) and [Oscar](https://www.oscarmondadori.it/).",
       "source_md": "[Mondadori, TDMRep adopters list](https://raw.githubusercontent.com/w3c-cg/tdm-reservation-protocol/main/docs/adopters.md) [19]"
      },
      {
       "actor": "Penguin Random House Germany",
       "role": "Publisher",
       "status": "Listed",
       "status_display": "Listed · checked 2026-10-30",
       "col4_md": "Adopters list: Penguin Random House Germany: in its ONIX records.",
       "source_md": "[Penguin Random House Germany, TDMRep adopters list](https://raw.githubusercontent.com/w3c-cg/tdm-reservation-protocol/main/docs/adopters.md) [19]"
      },
      {
       "actor": "American Association for the Advancement of Science",
       "role": "Publisher",
       "status": "Listed",
       "status_display": "Listed · checked 2026-10-30",
       "col4_md": "Adopters list: American Association for the Advancement of Science (https://www.science.org): as tdmrep.json, with a policy.",
       "source_md": "[American Association for the Advancement of Science, TDMRep adopters list](https://raw.githubusercontent.com/w3c-cg/tdm-reservation-protocol/main/docs/adopters.md) [19]"
      },
      {
       "actor": "American Chemical Society",
       "role": "Publisher",
       "status": "Listed",
       "status_display": "Listed · checked 2026-10-30",
       "col4_md": "Adopters list: American Chemical Society (https://pubs.acs.org/): as tdmrep.json, with a policy.",
       "source_md": "[American Chemical Society, TDMRep adopters list](https://raw.githubusercontent.com/w3c-cg/tdm-reservation-protocol/main/docs/adopters.md) [19]"
      },
      {
       "actor": "IEEE",
       "role": "Publisher",
       "status": "Listed",
       "status_display": "Listed · checked 2026-10-30",
       "col4_md": "Adopters list: IEEE (https://www.ieee.org): as tdmrep.json, with a policy.",
       "source_md": "[IEEE, TDMRep adopters list](https://raw.githubusercontent.com/w3c-cg/tdm-reservation-protocol/main/docs/adopters.md) [19]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Libraries, tools & crawlers evaluating TDMRep",
     "col4_header": "Supported techniques & evaluation behavior",
     "note_md": null,
     "rows": [
      {
       "actor": "Spawning (Data Diligence)",
       "role": "Opt-out library",
       "status": "Partial",
       "status_display": "Partial · as of 2023-07-11",
       "col4_md": "Rules reference for datadiligence 0.1.7.post1.dev1+gea09739. `TDMRepHeader` sets `HEADER_NAME` to `tdm-reservation`, and `is_allowed` checks whether the tdm-rep header allows access to the resource without a policy. `HttpEvaluator` accepts `respect_tdmrep=True`. `PostprocessEvaluator` loads `TDMRepHeader` by default. Spawning's 2023-07-11 comment says `datadiligence` supports the proposed TDMRep HTTP headers and does not directly support `tdmrep.json` yet; the Spawning API does.",
       "source_md": "[datadiligence.rules (TDMRepHeader)](https://datadiligence.readthedocs.io/en/latest/api/datadiligence.rules.html) [24] · [datadiligence.evaluators](https://datadiligence.readthedocs.io/en/latest/api/datadiligence.evaluators.html) [25] · [Spawning comment on img2dataset issue 308](https://github.com/rom1504/img2dataset/issues/308) [26]"
      },
      {
       "actor": "img2dataset",
       "role": "Dataset crawler",
       "status": "Development",
       "status_display": "Development · as of 2023-07-11",
       "col4_md": "`rom1504` says adding a new header to the disallowed set seems fine, and asks whether a response header could point at `tdmrep.json`. `llemeurfr` asks how `X-Robots-Tag: noai` compares with `tdm-reservation: 1`, and says the harder part is a robots.txt or `tdmrep.json` file. On 2023-07-11 `Padge91` (Spawning) says PR `#312` would replace img2dataset opt-out logic with calls to `datadiligence`, and that accepting the PR would resolve the issue.",
       "source_md": "[img2dataset issue 308 comments](https://github.com/rom1504/img2dataset/issues/308) [26]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [
     {
      "label": "TDMRep adopters list",
      "as_of": null,
      "value_md": "The Finnish Publishers Association estimates TDMProtocol adoption at between 50% -80% of trade publishers and 70% of publishers of learning material. [19]"
     },
     {
      "label": "EDRLab, TDM Reservation Protocol",
      "as_of": null,
      "value_md": "143 of the top 250 French websites have already implemented the TDMRep specification. [27]"
     }
    ],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "aipref-vocabulary",
     "target_name": "AIPREF Vocabulary (A Vocabulary For Expressing AI Usage Preferences)",
     "relation_label": "Peer alternative",
     "delta": "TDMRep, the W3C Text and Data Mining Reservation Protocol final community-group report of 10 May 2024 edited by Laurent Le Meur (EDRLab), defines tdm-reservation as a boolean whose value 1 means TDM rights are reserved, plus an optional tdm-policy. AIPREF Vocabulary defines usage categories such as AI Training and Search rather than that reservation boolean.",
     "item_md": "**[AIPREF Vocabulary (A Vocabulary For Expressing AI Usage Preferences)](/protocols/aipref-vocabulary/)** (Peer alternative) — TDMRep, the W3C Text and Data Mining Reservation Protocol final community-group report of 10 May 2024 edited by Laurent Le Meur (EDRLab), defines tdm-reservation as a boolean whose value 1 means TDM rights are reserved, plus an optional tdm-policy. AIPREF Vocabulary defines usage categories such as AI Training and Search rather than that reservation boolean."
    },
    {
     "target_id": "agent-permissions-json",
     "target_name": "agent-permissions.json",
     "relation_label": "Complements",
     "delta": "agent-permissions.json is about in-page actions such as click_element and submit_form, while TDMRep's tdm-reservation, including value 1, is about text-and-data mining of the content.",
     "item_md": "**[agent-permissions.json](/protocols/agent-permissions-json/)** (Complements) — agent-permissions.json is about in-page actions such as click_element and submit_form, while TDMRep's tdm-reservation, including value 1, is about text-and-data mining of the content."
    },
    {
     "item_md": "**[Permit protocols](/category/permit/)** — Category index for `permit` standards."
    }
   ],
   "v05_compiled_md": "---\nid: tdmrep\ntitle: \"TDMRep (TDM Reservation Protocol)\"\ntier: spec_brief\nlifecycle_status: published_standard\ncategory: permit\nform: well-known-file\nwire_archetype: crawler_policy\nspec_url: https://www.w3.org/community/reports/tdmrep/CG-FINAL-tdmrep-20240510/\nlast_checked: 2026-11-12\n---\n\n# TDMRep (TDM Reservation Protocol)\n\n**Category:** [Permit](/category/permit/) (`permit`) · **Form:** Well-known file (`well-known-file`) · **Last checked:** 2026-11-12\n\n> *This page is about the TDM Reservation Protocol (TDMRep) of the W3C Text and Data Mining Reservation Protocol Community Group: a way for rightsholders to say that their text-and-data-mining rights are reserved, as an opt-out under Article 4 of the EU DSM Directive, and to point to a licensing policy. It is not the IETF AIPREF work ([AIPREF vocabulary](/protocols/aipref-vocabulary/), [AIPREF Content-Usage attachment](/protocols/aipref-content-usage-attachment/)), Cloudflare's [Content Signals Policy](/protocols/cloudflare-content-signals-policy/), [Really Simple Licensing (RSL)](/protocols/rsl/), Spawning's [ai.txt](/protocols/ai-txt/), or [AI crawler user-agent tokens in robots.txt](/protocols/ai-crawler-tokens-robots/), which have their own pages. [1]*\n\n**TDMRep (TDM Reservation Protocol)** (`TDMRep`) is a Final Community Group Report edited by Laurent Le Meur (EDRLab) and published by the W3C Text and Data Mining Reservation Protocol Community Group under the W3C Community Final Specification Agreement (`FSA`). [1] It is not a W3C Standard nor is it on the W3C Standards Track; the specification provides a technical answer to the constraints set by Article 4 of the European Directive on copyright and related rights in the Digital Single Market. [1] Rightsholders express choices through two properties, `tdm-reservation` and `tdm-policy`, across four techniques: a JSON array file named `tdmrep.json` in `/.well-known` where each rule requires `location` and `tdm-reservation` with optional `tdm-policy`, HTTP response headers on `GET` or `HEAD` requests, HTML `meta` elements, and `tdm:reservation` / `tdm:policy` metadata in EPUB Package Documents or PDF `XMP` metadata. [1] When `tdm-policy` points to a machine-readable policy, the document is formatted as a JSON-LD profile of the Open Digital Rights Language 2.2 (`ODRL`). [1] Proposed on `2021-01-18` by Laurent Le Meur, the Community Group published version 1 on `2022-02-16`, version 2 on `2024-04-16` in the register (dated 02 February 2024 on the report), and version 3 as a Final Community Group Report dated 10 May 2024 (`2024-08-09` in the Community Group reports register). [2][3] IANA registered `tdmrep.json` as a provisional well-known URI on `2024-02-15`, and the Community Group scheduled a TPAC 2025 meeting to discuss a possible evolution of TDMRep using the Vocabulary defined by AI Pref. [4][5]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Permit](/category/permit/) (`permit`) |\n| **Form** | Well-known file (`well-known-file`) |\n| **Originated by** | Laurent Le Meur (EDRLab, Editor), proposed `2021-01-18` [1][2] |\n| **Governed by** | W3C TDMRep CG, co-chaired by Laurent Le Meur (EDRLab) and Giulia Marangoni (AIE); not on W3C Standards Track [1][6][7] |\n| **Track** | W3C Community Group Report [1] |\n| **Status** | Final Community Group Report (version 3). The group is still active: its chair posted meeting notes on 2025-10-01, and its TPAC 2025 meeting (2025-11-14) planned to \"discuss a possible evolution of TDMRep, using the Vocabulary defined by AI Pref\" [1][3][5] |\n| **Version** | Version 3 (`2024-05-10` on spec; `2024-08-09` in CG register), after v2 (`2024-02-02`) and v1 (`2022-02-16`) [1][8][9] |\n| **Wire format** | JSON array (`application/json`) at `/.well-known/tdmrep.json`, HTTP headers, HTML `<meta>`, EPUB 2/3 OPF, PDF XMP RDF, and ODRL 2.2 JSON-LD [1] |\n| **Specification** | [W3C CG Final Report v3](https://www.w3.org/community/reports/tdmrep/CG-FINAL-tdmrep-20240510/) · [W3C CG Home](https://www.w3.org/community/tdmrep/) · [GitHub (`adopters.md`)](https://raw.githubusercontent.com/w3c-cg/tdm-reservation-protocol/main/docs/adopters.md) · [IANA Registry](https://www.iana.org/assignments/well-known-uris/well-known-uris-1.csv) [1][3][7] |\n| **Found at** | `GET /.well-known/tdmrep.json` (IANA `2024-02-15`), `tdm-reservation` / `tdm-policy` headers, `<meta>`, and `tdm:reservation` [1][4] |\n| **Licence** | W3C Community Final Specification Agreement (`FSA`) [1][3] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [Adoption and ecosystem](#adoption-and-ecosystem)\n4. [See also](#see-also)\n5. [References](#references)\n\n---\n\n## Problem and scope\n\nUnder Article 4(3) of Directive (EU) 2019/790, the general text-and-data-mining exception applies only if the use of works has not been expressly reserved by rightsholders in an appropriate manner, such as machine-readable means for content made publicly available online. [10] TDMRep expresses the Article 4 opt-out by setting `tdm-reservation` to `1` (reserving TDM rights) or `0` (not reserved), paired with an optional `tdm-policy` URL pointing to an ODRL 2.2 policy where TDM Agents MAY find how to acquire authorization to mine the content. [1] A TDM Agent MUST check for `tdmrep.json` in `/.well-known` on the origin server before scraping and evaluate HTTP headers, HTML metadata, and EPUB or PDF metadata in priority order. [1] The Community Group characterizes the declaration not as a `NO-TDM` signal, but as a `RIGHTS-RESERVED` signal. [3] TDM Actors that benefit from Article 3 of the CDSM Directive do not have to comply with licensing contact requirements in a policy, and EPUB metadata properties cover the entire package rather than individual resources inside the package. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **Well-Known URIs (RFC 8615)** | `RFC 8615` | Profiles classic standard | TDMRep serves tdmrep.json at /.well-known/tdmrep.json, where each rule requires location and tdm-reservation and may include tdm-policy, and repeats the reservation in HTTP headers, HTML meta, and EPUB or PDF metadata, a document RFC 8615 does not define. [1][11] |\n| **rel=\"license\" & Rights Metadata (W3C / CC)** | `W3C RDFa Primer` | Analogous to classic standard | TDMRep's tdm-reservation value 1 states that text-and-data mining is reserved and tdm-policy gives an ODRL policy URL, whereas rel=\"license\" only links a representation to a license document. [1][12] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[AIPREF Content-Usage Attachment](/protocols/aipref-content-usage-attachment/)** | Peer alternative | TDMRep carries tdm-reservation, set to 1 for the Article 4 opt-out, and an optional tdm-policy URL, while AIPREF Content-Usage attaches tokens such as train-ai=n in a robots.txt rule and a Content-Usage header. [1][13] |\n| **[Content Signals Policy](/protocols/cloudflare-content-signals-policy/)** | Peer alternative | TDMRep's reservation is independent of robots.txt group selection and uses tdm-reservation value 1, while Content-Signal sits inside a User-agent group and sets search, ai-input, and ai-train. [1][14] |\n| **[Really Simple Licensing](/protocols/rsl/)** | Peer alternative | TDMRep records a mining reservation at /.well-known/tdmrep.json (or via tdm-reservation HTTP headers and HTML/EPUB/PDF metadata), whereas RSL defines no fixed /rsl.xml path and associates XML license documents via five Section 4 discovery surfaces: robots.txt License: directives, HTTP Link headers (rel=\"license\"), HTML `<link>` or `<script>` elements, RSS `<rsl:content>` elements, and embedded media or data file metadata. [1][15] |\n| **[ai.txt](/protocols/ai-txt/)** | Peer alternative | TDMRep uses /.well-known/tdmrep.json plus tdm-reservation, while ai.txt is a permission file at /ai.txt, using Allow and Disallow over media extensions, or at /.well-known/ai.txt with Training, Scraping, Indexing, and Caching. [1][16] |\n| **[AI crawler tokens in robots.txt](/protocols/ai-crawler-tokens-robots/)** | Complements | TDMRep reserves mining of content with tdm-reservation equal to 1, while AI crawler tokens only match a User-agent product token such as GPTBot to Allow and Disallow paths. [1][17] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (12 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).*\n\n### Publishers serving `/.well-known/tdmrep.json`, HTTP headers, or HTML metadata\n\n| Actor | Role | Status | Attachment technique, `tdm-reservation` value & `tdm-policy` | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Elsevier** | Publisher | Live (HTTP 200) · checked 2026-10-30 | Well-known `tdmrep.json` (HTTP 200, `application/json;charset=utf-8`, checked 2026-10-30) sets `location` `/`, `tdm-reservation` 1, and `tdm-policy` `https://www.elsevier.com/tdm/tdmrep-policy.json`. The adopters list also records http headers + html metadata, with a policy, plus Crossref metadata, PDF and EPUB metadata. | [Elsevier tdmrep.json (checked 2026-10-30)](https://www.elsevier.com/.well-known/tdmrep.json) [18] · [Elsevier on the TDMRep adopters list](https://raw.githubusercontent.com/w3c-cg/tdm-reservation-protocol/main/docs/adopters.md) [19] |\n| **Optica Publishing Group** | Publisher | Live (HTTP 200) · checked 2026-10-30 | Well-known `tdmrep.json` (HTTP 200, `application/json`, checked 2026-10-30) sets `location` `/`, `tdm-reservation` 1, and `tdm-policy` `https://opg.optica.org/policies/opg-tdm-policy.json`. The adopters list also records Crossref metadata and PDF XMP Metadata, with a policy. | [Optica tdmrep.json (checked 2026-10-30)](https://opg.optica.org/.well-known/tdmrep.json) [20] · [Optica Publishing Group on the TDMRep adopters list](https://raw.githubusercontent.com/w3c-cg/tdm-reservation-protocol/main/docs/adopters.md) [19] |\n| **Springer Nature** | Publisher | Live (HTTP 200) · checked 2026-10-30 | Well-known `tdmrep.json` (HTTP 200, `application/json`, checked 2026-10-30) sets `location` `/`, `tdm-reservation` 1, and `tdm-policy` `https://dev.springernature.com/tdm/SNTDMPolicy.json`. The adopters list records Springer Nature (https://www.springernature.com/) as tdmrep.json, with a policy. | [link.springer.com tdmrep.json (checked 2026-10-30)](https://link.springer.com/.well-known/tdmrep.json) [21] · [Springer Nature on the TDMRep adopters list](https://raw.githubusercontent.com/w3c-cg/tdm-reservation-protocol/main/docs/adopters.md) [19] |\n| **Le Progrès** | Newspaper | Live (HTTP 200) · checked 2026-10-30 | Homepage response headers (HTTP 200, `text/html; charset=utf-8`, checked 2026-10-30): `tdm-reservation: 1` and `tdm-policy: https://www.leprogres.fr/tdm-policy/tdm-policy.json`. | [Le Progrès homepage (checked 2026-10-30)](https://www.leprogres.fr/) [22] |\n| **Hachette Livre** | Publisher | Live (HTTP 200) · checked 2026-10-30 | Homepage HTML (HTTP 200, `text/html`, checked 2026-10-30) sets meta `tdm-reservation` to `1`. This fetch does not include a tdm-policy property. The adopters list says Hachette Livre has implemented the protocol on most websites of the group's publishing houses. | [Hachette.fr homepage (checked 2026-10-30)](https://www.hachette.fr/) [23] · [Hachette Livre on the TDMRep adopters list](https://raw.githubusercontent.com/w3c-cg/tdm-reservation-protocol/main/docs/adopters.md) [19] |\n| **Mondadori** | Publisher | Listed · checked 2026-10-30 | Adopters list: Mondadori (Italy): on its websites, [Mondadori](https://www.mondadori.it/) and [Oscar](https://www.oscarmondadori.it/). | [Mondadori, TDMRep adopters list](https://raw.githubusercontent.com/w3c-cg/tdm-reservation-protocol/main/docs/adopters.md) [19] |\n| **Penguin Random House Germany** | Publisher | Listed · checked 2026-10-30 | Adopters list: Penguin Random House Germany: in its ONIX records. | [Penguin Random House Germany, TDMRep adopters list](https://raw.githubusercontent.com/w3c-cg/tdm-reservation-protocol/main/docs/adopters.md) [19] |\n| **American Association for the Advancement of Science** | Publisher | Listed · checked 2026-10-30 | Adopters list: American Association for the Advancement of Science (https://www.science.org): as tdmrep.json, with a policy. | [American Association for the Advancement of Science, TDMRep adopters list](https://raw.githubusercontent.com/w3c-cg/tdm-reservation-protocol/main/docs/adopters.md) [19] |\n| **American Chemical Society** | Publisher | Listed · checked 2026-10-30 | Adopters list: American Chemical Society (https://pubs.acs.org/): as tdmrep.json, with a policy. | [American Chemical Society, TDMRep adopters list](https://raw.githubusercontent.com/w3c-cg/tdm-reservation-protocol/main/docs/adopters.md) [19] |\n| **IEEE** | Publisher | Listed · checked 2026-10-30 | Adopters list: IEEE (https://www.ieee.org): as tdmrep.json, with a policy. | [IEEE, TDMRep adopters list](https://raw.githubusercontent.com/w3c-cg/tdm-reservation-protocol/main/docs/adopters.md) [19] |\n\n### Libraries, tools & crawlers evaluating TDMRep\n\n| Actor | Role | Status | Supported techniques & evaluation behavior | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Spawning (Data Diligence)** | Opt-out library | Partial · as of 2023-07-11 | Rules reference for datadiligence 0.1.7.post1.dev1+gea09739. `TDMRepHeader` sets `HEADER_NAME` to `tdm-reservation`, and `is_allowed` checks whether the tdm-rep header allows access to the resource without a policy. `HttpEvaluator` accepts `respect_tdmrep=True`. `PostprocessEvaluator` loads `TDMRepHeader` by default. Spawning's 2023-07-11 comment says `datadiligence` supports the proposed TDMRep HTTP headers and does not directly support `tdmrep.json` yet; the Spawning API does. | [datadiligence.rules (TDMRepHeader)](https://datadiligence.readthedocs.io/en/latest/api/datadiligence.rules.html) [24] · [datadiligence.evaluators](https://datadiligence.readthedocs.io/en/latest/api/datadiligence.evaluators.html) [25] · [Spawning comment on img2dataset issue 308](https://github.com/rom1504/img2dataset/issues/308) [26] |\n| **img2dataset** | Dataset crawler | Development · as of 2023-07-11 | `rom1504` says adding a new header to the disallowed set seems fine, and asks whether a response header could point at `tdmrep.json`. `llemeurfr` asks how `X-Robots-Tag: noai` compares with `tdm-reservation: 1`, and says the harder part is a robots.txt or `tdmrep.json` file. On 2023-07-11 `Padge91` (Spawning) says PR `#312` would replace img2dataset opt-out logic with calls to `datadiligence`, and that accepting the PR would resolve the issue. | [img2dataset issue 308 comments](https://github.com/rom1504/img2dataset/issues/308) [26] |\n\n### Ecosystem censuses\n\n- **TDMRep adopters list**: The Finnish Publishers Association estimates TDMProtocol adoption at between 50% -80% of trade publishers and 70% of publishers of learning material. [19]\n- **EDRLab, TDM Reservation Protocol**: 143 of the top 250 French websites have already implemented the TDMRep specification. [27]\n\n---\n\n## See also\n\n- **[AIPREF Vocabulary (A Vocabulary For Expressing AI Usage Preferences)](/protocols/aipref-vocabulary/)** *(Peer alternative)* — TDMRep, the W3C Text and Data Mining Reservation Protocol final community-group report of 10 May 2024 edited by Laurent Le Meur (EDRLab), defines tdm-reservation as a boolean whose value 1 means TDM rights are reserved, plus an optional tdm-policy. AIPREF Vocabulary defines usage categories such as AI Training and Search rather than that reservation boolean.\n- **[agent-permissions.json](/protocols/agent-permissions-json/)** *(Complements)* — agent-permissions.json is about in-page actions such as click_element and submit_form, while TDMRep's tdm-reservation, including value 1, is about text-and-data mining of the content.\n- **Category:** [Permit protocols](/category/permit/)\n\n---\n\n## References\n\n1. Laurent Le Meur (EDRLab), *TDM Reservation Protocol (TDMRep)* (Final Community Group Report, 10 May 2024) — <https://www.w3.org/community/reports/tdmrep/CG-FINAL-tdmrep-20240510/>\n2. W3C Team, *Call for Participation in TDM Reservation Protocol Community Group* (2021-01-20; checked 2026-10-29) — <https://www.w3.org/community/tdmrep/2021/01/20/call-for-participation-in-tdm-reservation-protocol-community-group/>\n3. W3C, *Text and Data Mining Reservation Protocol Community Group* (checked 2026-10-29) — <https://www.w3.org/community/tdmrep/>\n4. IANA, *Well-Known URIs* (registry CSV, fetched 2026-10-30) — <https://www.iana.org/assignments/well-known-uris/well-known-uris-1.csv>\n5. W3C, *TDMRep Community Group Meeting at TPAC 2025* (2025-11-14; checked 2026-10-29) — <https://www.w3.org/events/meetings/4d16ca76-dc36-4bf2-914e-13c2ca89ad2d/>\n6. W3C, *Participants in the Text and Data Mining Reservation Protocol Community Group* (checked 2026-10-29) — <https://www.w3.org/community/tdmrep/participants>\n7. W3C TDMRep Community Group, *w3c-cg/tdm-reservation-protocol repository* (checked 2026-10-30) — <https://github.com/w3c-cg/tdm-reservation-protocol>\n8. Laurent Le Meur (EDRLab), *TDM Reservation Protocol (TDMRep) Version 2* (published 2024-02-02) — <https://www.w3.org/community/reports/tdmrep/CG-FINAL-tdmrep-20240202/>\n9. W3C TDMRep Community Group, *TDM Reservation Protocol (TDMRep) Version 1* (2022-02-16; checked 2026-10-29) — <https://www.w3.org/community/reports/tdmrep/CG-FINAL-tdmrep-20220216/>\n10. European Union, *Directive (EU) 2019/790 on copyright and related rights in the Digital Single Market, Article 4(3)* (2019-05-17; checked 2026-10-29) — <https://publications.europa.eu/resource/cellar/214471fe-786e-11e9-9f05-01aa75ed71a1.0006.03/DOC_1>\n11. M. Nottingham (IETF), *RFC 8615: Well-Known Uniform Resource Identifiers (URIs)* (published May 2019) — <https://www.rfc-editor.org/rfc/rfc8615.html>\n12. W3C, *RDFa 1.1 Primer - Third Edition* (2015-03-17) — <https://www.w3.org/TR/xhtml-rdfa-primer/>\n13. IETF Datatracker, *draft-ietf-aipref-attach — Associating AI Usage Preferences with Content in HTTP (IETF Datatracker)* (last updated 2026-08-18) — <https://datatracker.ietf.org/doc/draft-ietf-aipref-attach/>\n14. Cloudflare, *Giving users choice with Cloudflare's new Content Signals Policy* (published 2025-09-24; modified 2026-07-15) — <https://blog.cloudflare.com/content-signals-policy/>\n15. RSL Technical Steering Committee, *Really Simple Licensing (RSL) 1.0 Specification* (published 2025-12-10) — <https://rslstandard.org/rsl>\n16. Spawning Inc., *spawning-wp-plugin* (fetched 2026-10-30) — <https://github.com/Spawning-Inc/spawning-wp-plugin>\n17. M. Koster, G. Illyes, H. Zeller, and L. Sassman (IETF), *RFC 9309: Robots Exclusion Protocol* (published September 2022) — <https://www.rfc-editor.org/rfc/rfc9309.html>\n18. Elsevier, *Elsevier tdmrep.json* (checked 2026-10-30) — <https://www.elsevier.com/.well-known/tdmrep.json>\n19. W3C TDMRep Community Group, *docs/adopters.md* (checked 2026-10-29) — <https://raw.githubusercontent.com/w3c-cg/tdm-reservation-protocol/main/docs/adopters.md>\n20. Optica Publishing Group, *Optica tdmrep.json* (checked 2026-10-30) — <https://opg.optica.org/.well-known/tdmrep.json>\n21. Springer Nature, *link.springer.com tdmrep.json* (checked 2026-10-30) — <https://link.springer.com/.well-known/tdmrep.json>\n22. Le Progrès, *Le Progrès homepage HTTP response headers* (checked 2026-10-30) — <https://www.leprogres.fr/>\n23. Hachette Livre, *Hachette.fr homepage HTML metadata* (checked 2026-10-30) — <https://www.hachette.fr/>\n24. Spawning, *datadiligence.rules module* (checked 2026-10-29) — <https://datadiligence.readthedocs.io/en/latest/api/datadiligence.rules.html>\n25. Spawning, *datadiligence.evaluators module* (checked 2026-10-29) — <https://datadiligence.readthedocs.io/en/latest/api/datadiligence.evaluators.html>\n26. rom1504/img2dataset, *Issue #308: Support W3C TDM Reservation Protocol (comments)* (checked 2026-10-30) — <https://github.com/rom1504/img2dataset/issues/308>\n27. EDRLab, *TDM Reservation Protocol* (checked 2026-10-29) — <https://www.edrlab.org/open-standards/tdmrep/>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "",
   "adoption": {
    "level": "observed",
    "by": "Cloudflare, Launchpad, NVIDIA Documentation, Render, Linktree, Cloudflare Browser Run /crawl, Cloudflare AI Crawl Control, and Workable",
    "probe_run": null
   },
   "aliases": [],
   "analog": "robots.txt policy extension",
   "collisions": [],
   "discovery": {
    "mechanism": "/robots.txt, inside a User-agent group",
    "path": "/robots.txt, inside a User-agent group"
   },
   "dispute": {
    "claims": [
     "Cloudflare presents Content Signals as a way for publishers to express search / ai-train / ai-input preferences, and enforces its own categories at the network edge for zones it fronts (new defaults from 2026-09-15).",
     "Google's John Mueller stated on 2026-07-06 that no crawler or LLM he is aware of reads the robots.txt directive and that Google does not, so outside Cloudflare's own edge the directive is a declared preference with no confirmed consumer."
    ],
    "summary": "Two different things carry the same name: an edge-enforced Cloudflare feature that works because Cloudflare blocks the request, and a robots.txt directive that only works if a crawler chooses to honour it. As of July 2026 Google says it does not, and no other major crawler has documented doing so."
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://contentsignals.org/",
     "claim": "Content Signals, *Content Signals*, fetched 2026-10-30",
     "date": null,
     "quote": "/about page\"}), User-Agent: * Content-Signal: /about ai-train=yes, search=yes, ai-input=yes Allow: /about,M.jsx(\"span\",{className:\"text-neutral-500\",children:\"# Search-only access to / Content Signals { \"@context\": \"https://schema.org\", \"@type\": \"WebSite\", \"name\": \"Content Signals\", \"description\": \"An up-to-date guide",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://blog.cloudflare.com/content-signals-policy/",
     "claim": "Cloudflare, *Giving users choice with Cloudflare's new Content Signals Policy*, published 2025-09-24; modified 2026-07-15",
     "date": null,
     "quote": "This policy is a new addition to robots.txt that allows you to express your preferences for how your content can be used after it has been accessed. / This policy defines three content signals - search, ai-input, and ai-train - and their relevance to crawlers. / (a) If a content-signal = yes, you may collect content for the corresponding use. / \"datePublished\":\"2025-09-24T13:10:00.000Z\" / we are releasing this policy under a CC0 License, which allows anyone to implement and use it freely. / A website operator can then announce their specific preferences in machine-readable text using comma-delimited, 'yes' or 'no' syntax. / If a website operator wants to allow search, disallow training, and expressed no preference regarding ai-input, they could include the following in their robots.txt: User-Agent: * Content-Signal: search=yes, ai-train=no Allow: / / If a website operator leaves the content signal for ai-input blank like in the above example, it does not mean they have no preference regarding that use; it just means they have not used this part of their robots.txt file to express it. / (c) If the website operator does not include a content signal for a corresponding use, the website operator neither grants nor restricts permission via content signal with respect to the corresponding use. / September 24, 2025 Giving users choice with Cloudflare's new Content Signals Policy Will Allen / Start building Login © 2026 Cloudflare, Inc. | Your privacy choices Report security issues / we are releasing this policy under a CC0 License, which allows anyone to implement / server: cloudflare cf-ray: a52db34f6977d9de-FRA alt-svc: h3=\":443\"; ma=86400 width=device-width, initial-scale=1.0 en-us @cloudflare https://blog.cloudflare.com/content-signals-policy/ 1200 628 / Cloudflare Blog 2025-09-24T13:10:00.000Z 2026-07-15T14:26:39.949Z Giving users choice with Cloudflare's new Content Signals Policy Cloudflare / AI Developers Radar Product News Security Policy & Legal Zero Trust Speed & Reliability / It allows you to instruct which crawlers and bots can access which parts of your site. / (b) If a content-signal = no, you may not collect content for the corresponding use. / search: building a search index and providing search results (e.g., returning hyperlinks and short excerpts from your website's contents). Search does not include providing AI-generated search summaries. / ai-input: inputting content into one or more AI models (e.g., retrieval augmented generation, grounding, or other real-time taking of content for generative AI search answers). / ai-train: training or fine-tuning AI models. / It's important to remember that content signals express preferences; they are not technical countermeasures against scraping. / Some companies might simply ignore them. / ANY RESTRICTIONS EXPRESSED VIA CONTENT SIGNALS ARE EXPRESS RESERVATIONS OF RIGHTS UNDER ARTICLE 4 OF THE EUROPEAN UNION DIRECTIVE 2019/790 ON COPYRIGHT AND RELATED RIGHTS IN THE DIGITAL SINGLE MARKET. / If a website operator wants to allow search, disallow training, and expressed no preference regarding ai-input, they could include the following in their robots.txt: / Starting today, we also will serve the commented, human-readable Content Signals Policy for any free customer zone that does not have an existing robots.txt file. / Importantly, it will not include any Allow or Disallow directives, nor will not serve any actual content signals. The users are the ones to choose and express their actual preferences if and when they are ready to do so. Customers with an existing robots.txt file will see no change.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://blog.cloudflare.com/content-independence-day-ai-options/",
     "claim": "Jin-Hee Lee and Bryan Becker (Cloudflare), *Your site, your rules: new AI traffic options for all customers*, published 2026-07-01",
     "date": null,
     "quote": "\"datePublished\":\"2026-07-01T13:00:00.000Z\" … July 1, 2026 Your site, your rules: new AI traffic options for all customers … Jin-Hee Lee and Bryan Becker / we're testing a new signal, use, that extends Content Signals and lives in your robots.txt. / use=immediate use=reference use=full / the values of content use signal a website owner's preference, rather than issuing blocks directly.",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://mailarchive.ietf.org/arch/msg/ai-control/EANb9b9bljOanLBFm5FRerYlxyI/",
     "claim": "Michael Tremante, *Cloudflare's Content Signal Policy*, 2025-09-24",
     "date": "2025-09-24",
     "quote": "We see this as an interim measure to address immediate needs, while work is done towards standardization. / We will continue to engage in this working group and hope we can achieve a consensus position and will revisit our policy once that has happened. / [ai-control] Cloudflare's Content Signal Policy Mail Archive Search www.ietf.org Search Datatracker Help Search Syntax",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://datatracker.ietf.org/doc/draft-romm-aipref-contentsignals/",
     "claim": "IETF Datatracker, *draft-romm-aipref-contentsignals — Vocabulary For Expressing Content Signals (IETF Datatracker)*, expired individual draft; authors Michael Tremante and Leah Romm; last updated 2026-04-04",
     "date": null,
     "quote": "Expired Internet-Draft (individual) / Michael Tremante, Leah Romm | | Last updated | 2026-04-04 (Latest revision 2025-10-01) / Authors Michael Tremante, Leah Romm Last updated 2026-04-04 (Latest revision 2025-10-01) / Expired Internet-Draft (individual) Expired & archived … | 2026-04-04 | 00 | (System) | Document has expired | / may be found at https://datatracker.ietf.org/doc/draft-romm-aipref- contentsignals/. Discussion of this document takes place on the / | 2026-04-04 | 00 | (System) | Document has expired | | 2025-10-01 | / rights reserved.¶ This document is subject to BCP 78 and the IETF Trust's Legal",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://www.cloudflare.com/press/press-releases/2025/cloudflare-gives-creators-new-tool-to-control-use-of-their-content/",
     "claim": "Cloudflare, *Cloudflare Gives Creators New Tool to Control Use of Their Content*, published 2025-09-24",
     "date": null,
     "quote": "place undue reliance on Cloudflare's forward-looking statements. © 2025 Cloudflare, Inc. All rights reserved.",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://developers.cloudflare.com/bots/additional-configurations/managed-robots-txt/",
     "claim": "Cloudflare Developer Documentation, *robots.txt setting*, checked 2026-10-29",
     "date": null,
     "quote": "DevelopmentWeb Security Platform Start Building Log In © 2026 Cloudflare, Inc. Privacy policy| Report / a robots.txt file to direct AI bot operators on content scraping permissions. https://developers.cloudflare.com/bots/additional-configurations/managed-robots-txt/ / Bot Preference Sync generates managed robots.txt directives from your Search, Agent, and Training policies when at least one policy is set to Block, Block on pages with ads, or, for Training, Disallow. / the content-use signaltxt User-Agent: * Content-signal: search=yes, ai-train=no, use=reference Allow: / Availability Managed robots.txt / on content scraping permissions. https://developers.cloudflare.com/bots/additional-configurations/managed-robots-txt/ / Cloudflare prepends managed directives and the Content Signals Policy to your robots.txt only when Enable Bot Preference Sync is turned on and at least one of your Search, Agent, or Training policies is set to Block, Block on pages with ads, or, for Training, Disallow. / dateModified\":\"2026-10-22\" / Content-signal: search=yes, ai-train=no, use=reference / With every policy set to allow, there is nothing to prepend and your robots.txt is served unchanged. / Domains on the Free plan that do not have their own robots.txt file and do not use the managed robots.txt feature will display the Content Signals Policy when a crawler requests the robots.txt file for your domain. / The Content Signals Policy defines these categories but does not express any specific preferences about your content. / It adds a fourth field alongside the existing search, ai-input, and ai-train signals to describe what a crawler may keep and reuse after accessing your content. The field takes one of three values, from least to most permissive: Value Meaning use=immediate Interact, but store and reuse nothing. use=reference Index, excerpt, and link back. use=full Summarize and reproduce. / For customers who have turned on the managed robots.txt setting, Cloudflare adds use=reference to the managed content, in line with the existing default of search=yes,ai-train=no",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://developers.cloudflare.com/changelog/post/2026-07-13-markdown-for-agents-header-preservation/",
     "claim": "Cloudflare Changelog, *Origin Content Signals for Markdown for Agents*, checked 2026-10-29",
     "date": null,
     "quote": "If your origin sets a content-signal header, Markdown for Agents preserves it. When the origin does not send one, Cloudflare adds the default Content-Signal: ai-train=yes, search=yes, ai-input=yes.",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://blog.cloudflare.com/bot-preference-sync/",
     "claim": "Jin-Hee Lee (Cloudflare), *Say it once: introducing Bot Preference Sync*, published 2026-08-21",
     "date": null,
     "quote": "August 21, 2026 Say it once: introducing Bot Preference Sync … Jin-Hee Lee",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://blog.cloudflare.com/accountable-mixed-use-ai-crawlers/",
     "claim": "Bryan Becker (Cloudflare), *Have it both ways: stay discoverable in search while disallowing AI training*, published 2026-09-15",
     "date": null,
     "quote": "September 15, 2026 Have it both ways: stay discoverable in search while disallowing AI training … Bryan Becker … Managed Robots.txt will be deprecated in favor of Bot Preference Sync. Customers who enabled Managed Robots.txt will migrate to the new system. / adding a Disallow rule to robots.txt for \"Google-Extended\", and they provide a toggle inside their webmaster portal to exclude a site's content from generative search results.",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://developers.cloudflare.com/browser-run/quick-actions/crawl-endpoint/",
     "claim": "Cloudflare, */crawl - Crawl web content*, fetched 2026-10-30",
     "date": null,
     "quote": "The /crawl endpoint enforces both the yes/no purpose directives (search, ai-input, ai-train) and the use level directive. / Content Signals are trust-based. By setting crawlPurposes and contentUse, you are declaring to the site owner how you intend to use the crawled content. / Allowed values: search, ai-input, ai-train. / Content Signals are trust-based.",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://developers.google.com/crawling/docs/crawlers-fetchers/google-common-crawlers",
     "claim": "Google, *Google's common crawlers*, updated 2026-10-30",
     "date": null,
     "quote": "Google-Extended doesn't have a separate HTTP request user agent string. Crawling is done with existing Google user agent strings; the robots.txt user-agent token is used in a control capacity. / a control capacity. robots.txt User-agent token in robots.txt Google-Extended Example robots.txt group user-agent: Google-Extended",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://contentsignals.org/robots.txt",
     "claim": "Cloudflare, *contentsignals.org/robots.txt*, fetched 2026-10-30",
     "date": null,
     "quote": "Content-Signal: ai-train=yes, search=yes, ai-input=yes Allow: / / Content-Signal: ai-train=yes, search=yes, ai-input=yes",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://www.cloudflare.com/robots.txt",
     "claim": "Cloudflare, *www.cloudflare.com/robots.txt*, fetched 2026-10-30",
     "date": null,
     "quote": "Content Signals - declare AI content usage preferences # See https://contentsignals.org/ and https://datatracker.ietf.org/doc/draft-romm-aipref-contentsignals/ Content-Signal: ai-train=yes, search=yes, ai-input=yes / Content-Signal: ai-train=yes, search=yes, ai-input=yes",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://launchpad.net/robots.txt",
     "claim": "Launchpad, *robots.txt*, fetched 2026-10-30",
     "date": null,
     "quote": "Content-Usage: ai=n Content-Signal: ai-train=no, search=yes, ai-input=no / by all AI crawlers. User-agent: * DisallowAITraining: / Content-Usage: ai=n Content-Signal: ai-train=no, search=yes, ai-input=no",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://linktr.ee/robots.txt",
     "claim": "Linktree Pty Ltd, *linktr.ee/robots.txt*, checked 2026-10-29",
     "date": null,
     "quote": "User-agent: GPTBot Content-Signal: ai-train=no, search=yes",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://www.rfc-editor.org/rfc/rfc9309.html",
     "claim": "M. Koster, G. Illyes, H. Zeller, and L. Sassman (IETF), *RFC 9309: Robots Exclusion Protocol*, published September 2022",
     "date": null,
     "quote": "Crawlers set their own name, which is called a product token, to find relevant groups. / This is an Internet Standards Track document.",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://www.w3.org/TR/odrl-model/",
     "claim": "W3C, *ODRL Information Model 2.2*, 2018-02-15",
     "date": "2018-02-15",
     "quote": "This document was published by the Permissions & Obligations Expression Working Group as a Recommendation.",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-aipref-attach/",
     "claim": "IETF Datatracker, *draft-ietf-aipref-attach — Associating AI Usage Preferences with Content in HTTP (IETF Datatracker)*, last updated 2026-08-18",
     "date": null,
     "quote": "Active Internet-Draft (aipref WG)",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://www.w3.org/community/reports/tdmrep/CG-FINAL-tdmrep-20240510/",
     "claim": "Laurent Le Meur (EDRLab), *TDM Reservation Protocol (TDMRep)*, Final Community Group Report, 10 May 2024",
     "date": null,
     "quote": "TDM Reservation Protocol (TDMRep) Final Community Group Report 10 May 2024 This version: https://www.w3.org/community/reports/tdmrep/CG-FINAL-tdmrep-20240510/",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://rslstandard.org/rsl",
     "claim": "RSL Technical Steering Committee, *Really Simple Licensing (RSL) 1.0 Specification*, published 2025-12-10",
     "date": null,
     "quote": "Document RSL-SPEC-1.0 Category Industry Specification Status Recommendation Published 2025-12-10",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/what-is-pay-per-crawl/",
     "claim": "Cloudflare, *What is Pay Per Crawl?*, updated 2026-07-28",
     "date": null,
     "quote": "Pay per crawl is currently in closed beta.",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://docs.nvidia.com/robots.txt",
     "claim": "NVIDIA Corporation, *docs.nvidia.com/robots.txt*, checked 2026-10-29",
     "date": null,
     "quote": "https://docs.nvidia.com/fern-sitemap-index.xml # AI / LLM crawlers & fetchers User-Agent: * Content-Signal: ai-train=yes, search=yes, ai-input=yes",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://render.com/robots.txt",
     "claim": "Render, *robots.txt (render.com/robots.txt)*, checked 2026-10-30",
     "date": null,
     "quote": "still declare more restrictive per-page robots directives. User-Agent: * Content-Signal: ai-train=yes, search=yes, ai-input=yes Allow:",
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://workable.com/robots.txt",
     "claim": "Workable Software Limited, *workable.com/robots.txt*, checked 2026-10-29",
     "date": null,
     "quote": "Content-Signal: search=yes, ai-input=yes, ai-train=no Disallow: /user_password_resets Disallow: /admin Disallow: /auth/google Disallow: /j/ Sitemap: https://www.workable.com/sitemap.xml",
     "ref": 25
    },
    {
     "label": "[26]",
     "url": "https://developers.cloudflare.com/changelog/post/2026-08-31-crawl-content-use/",
     "claim": "Cloudflare Changelog, *Crawl endpoint now respects the Content Signals `use` directive*, checked 2026-10-29",
     "date": null,
     "quote": "August 31, 2026 Crawl endpoint now respects the Content Signals `use` directive Browser Run",
     "ref": 26
    },
    {
     "label": "[27]",
     "url": "https://developers.cloudflare.com/changelog/post/2025-10-21-track-robots-txt/",
     "claim": "Cloudflare Changelog, *New Robots.txt tab for tracking crawler compliance*, checked 2026-10-29",
     "date": null,
     "quote": "Check whether your robots.txt files contain Content Signals ↗︎ directives for AI training, search, and AI input.",
     "ref": 27
    },
    {
     "label": "[28]",
     "url": "https://www.seroundtable.com/google-cloudflare-content-signals-41631.html",
     "claim": "Google (John Mueller), *Google Says Cloudflare Content Signals Robots.txt Directive Has No Effects Whatsoever*, checked 2026-10-30",
     "date": null,
     "quote": "As far as he knows, he said, none of the crawlers or LLMs use the content-signal robots.txt directives.",
     "ref": 28
    },
    {
     "label": "[29]",
     "url": "https://easybyte.es/lab/studies/s16/paper/",
     "claim": "EasyxLab (EasyByte Hub S. Coop. Mad.), *Text-and-data-mining reservations in the EU-27 press, channel by channel · EasyxLab S16*, checked 2026-11-03",
     "date": null,
     "quote": "Anthropic, Google, Mistral AI, Apple, Amazon, Perplexity and Common Crawl. All 8 name robots.txt",
     "ref": 29
    },
    {
     "label": "[30]",
     "url": "https://commoncrawl.org/ccbot",
     "claim": "Common Crawl, *CCBot*, fetched 2026-10-30",
     "date": null,
     "quote": "Common Crawl from crawling your website, include the following in your robots.txt: User-agent: CCBot",
     "ref": 30
    }
   ],
   "form": "document-format",
   "governance": "Cloudflare; a policy text it publishes and serves on its network. No standards body has adopted it. On launch day Cloudflare told the IETF aipref list: \"We see this as an interim measure to address immediate needs, while work is done towards standardization.\" \"We will continue to engage in this working group and hope we can achieve a consensus position and will revisit our policy once that has happened.\". Cloudflare's individual Internet-Draft, draft-romm-aipref-contentsignals-00 (2025-10-01), is listed on the IETF Datatracker as \"Expired Internet-Draft (individual)\", with \"Authors Michael Tremante, Leah Romm Last updated 2026-04-04 (Latest revision 2025-10-01)\"",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against blog.cloudflare.com/content-signals-policy/"
    },
    {
     "date": "2026-09-07",
     "note": "added Google's 2026-07-06 statement that no crawler honours the directive (Search Engine Roundtable, Search Engine Journal)"
    },
    {
     "date": "2026-10-16",
     "note": "Cloudflare 'Disallow AI Training' and Accountable crawler designation (2026-09-15); Bot Preference Sync replaces Managed robots.txt"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "cloudflare-content-signals-policy",
   "implementation": "multi-implementation",
   "last_verified": "2026-11-12",
   "name": "Content Signals Policy",
   "native_status": "Live since 2025-09-24. Cloudflare's own wording is that the signals are preferences, not enforcement: \"It's important to remember that content signals express preferences; they are not technical countermeasures against scraping.\"",
   "origin": {
    "org": "Cloudflare",
    "date": "2025-09-24"
   },
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "living",
   "probe": {
    "method": "GET",
    "on_absent": "Website operator has not stated a content-signal preference for that use; the spec is explicit that omission means the operator neither grants nor restricts permission for that use",
    "parse": "Look for 'content-signal: search=', 'content-signal: ai-input=', or 'content-signal: ai-train=' lines (as machine-readable comments) inside any robots.txt group",
    "path": "{origin}/robots.txt"
   },
   "question": "May content fetched under a robots.txt allow rule also be used for search indexing, as live input to an AI answer, or for AI model training?",
   "scope": "general",
   "spec_url": "https://contentsignals.org/",
   "step": "permit",
   "summary_md": "**Content Signals Policy** is a CC0-licensed `robots.txt` policy framework launched by Cloudflare on `2025-09-24` that defines three machine-readable content signals—`search`, `ai-input`, and `ai-train`—to express how accessed content may be used by crawlers. An operator announces preferences on a `Content-Signal` line inside a `robots.txt` `User-Agent` group (or in an HTTP `Content-Signal` response header) using comma-delimited `yes` or `no` syntax, such as `Content-Signal: search=yes, ai-train=no`. Omitting a signal key (such as leaving `ai-input` blank) neither grants nor restricts permission for that use, indicating only that the operator has not used `robots.txt` to express a preference for it. On `2026-07-01`, Cloudflare began testing an additional `use` signal in `robots.txt` (`use=immediate`, `use=reference`, and `use=full`) to express a website owner's post-access retention preference rather than issuing blocks directly. Described by Cloudflare on the IETF `ai-control` list as an interim measure while working toward a consensus standard, the companion individual Internet-Draft `draft-romm-aipref-contentsignals` (by Michael Tremante and Leah Romm, latest revision `2025-10-01`) expired on `2026-04-04`.",
   "track": "single-vendor",
   "version": {
    "label": "No numbered versions",
    "date": "2026-10-22"
   },
   "watch": [
    {
     "type": "page",
     "url": "https://blog.cloudflare.com/content-signals-policy/",
     "selector": "main",
     "cadence": "weekly"
    },
    {
     "type": "page",
     "url": "https://contentsignals.org/",
     "selector": "main"
    }
   ],
   "use_cases": [
    "control-ai-crawling"
   ],
   "audience": [
    "site-owner",
    "platform"
   ],
   "pairs_with": [
    "ai-crawler-tokens-robots",
    "aipref-content-usage-attachment",
    "tdmrep",
    "rsl",
    "cloudflare-pay-per-crawl"
   ],
   "prerequisites": [
    "ai-crawler-tokens-robots"
   ],
   "hatnote_md": "This page is about Cloudflare's Content Signals Policy: a CC0-licensed policy text for robots.txt and the Content-Signal line that states yes or no for three uses of content, search, ai-input and ai-train. It is not the vocabulary of the IETF AI Preferences (aipref) working group, draft-ietf-aipref-vocab, whose preferences are carried in a separate Content-Usage rule; see [AIPREF Vocabulary](/protocols/aipref-vocabulary/) and [AIPREF Content-Usage Attachment](/protocols/aipref-content-usage-attachment/). It is not RSL (Really Simple Licensing), which sets licensing terms and whose usage vocabulary includes the Content Signals terms; see [RSL](/protocols/rsl/). For the Content-Signal HTTP response header that Cloudflare adds to Markdown responses, see [Markdown for Agents](/protocols/cloudflare-markdown-for-agents/).",
   "tier": "flagship",
   "lifecycle_status": "active",
   "wire_archetype": "web_discovery",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "This page is about Cloudflare's Content Signals Policy: a CC0-licensed policy text for robots.txt and the Content-Signal line that states yes or no for three uses of content, search, ai-input and ai-train. It is not the vocabulary of the IETF AI Preferences (aipref) working group, draft-ietf-aipref-vocab, whose preferences are carried in a separate Content-Usage rule; see [AIPREF Vocabulary](/protocols/aipref-vocabulary/) and [AIPREF Content-Usage Attachment](/protocols/aipref-content-usage-attachment/). It is not RSL (Really Simple Licensing), which sets licensing terms and whose usage vocabulary includes the Content Signals terms; see [RSL](/protocols/rsl/). For the Content-Signal HTTP response header that Cloudflare adds to Markdown responses, see [Markdown for Agents](/protocols/cloudflare-markdown-for-agents/). [1]",
   "v05_elevator_pitch_md": "Content Signals Policy is a machine-readable `robots.txt` framework created by Cloudflare under a CC0 license that lets website operators declare how crawlers and AI platforms may use site content after fetching it. While classic `robots.txt` directives only govern whether a bot can crawl a URL path, a `Content-Signal` line (or HTTP response header) sets explicit `yes` or `no` permissions across three downstream buckets: `search`, `ai-input`, and `ai-train`. [2]",
   "v05_lead_md": "**Content Signals Policy** is a CC0-licensed `robots.txt` policy framework launched by Cloudflare on `2025-09-24` that defines three machine-readable content signals—`search`, `ai-input`, and `ai-train`—to express how accessed content may be used by crawlers. [2] An operator announces preferences on a `Content-Signal` line inside a `robots.txt` `User-Agent` group (or in an HTTP `Content-Signal` response header) using comma-delimited `yes` or `no` syntax, such as `Content-Signal: search=yes, ai-train=no`. [2] Omitting a signal key (such as leaving `ai-input` blank) neither grants nor restricts permission for that use, indicating only that the operator has not used `robots.txt` to express a preference for it. [2] On `2026-07-01`, Cloudflare began testing an additional `use` signal in `robots.txt` (`use=immediate`, `use=reference`, and `use=full`) to express a website owner's post-access retention preference rather than issuing blocks directly. [3] Described by Cloudflare on the IETF `ai-control` list as an interim measure while working toward a consensus standard, the companion individual Internet-Draft `draft-romm-aipref-contentsignals` (by Michael Tremante and Leah Romm, latest revision `2025-10-01`) expired on `2026-04-04`. [4][5]",
   "v05_identity_sentence_md": "**Content Signals Policy** is a CC0-licensed `robots.txt` policy framework launched by Cloudflare on `2025-09-24` that defines three machine-readable content signals—`search`, `ai-input`, and `ai-train`—to express how accessed content may be used by crawlers. [2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Permit](/category/permit/) (`permit`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "Cloudflare, Inc. (Will Allen, `2025-09-24`; Michael Tremante & Leah Romm, `2025-10-01`; Jin-Hee Lee & Bryan Becker, `2026-07-01`) [2][5][6]"
    },
    {
     "label": "Governed by",
     "value_md": "Cloudflare, Inc. (policy steward); submitted to the IETF `aipref` WG as individual Internet-Draft `draft-romm-aipref-contentsignals-00` (published `2025-10-01`, expired `2026-04-04`; not WG-adopted) [2][4][7]"
    },
    {
     "label": "Track",
     "value_md": "Vendor / Spec-Site Standard (Cloudflare CC0 policy framework; companion individual IETF draft expired 2026-04-04) [1][2][5]"
    },
    {
     "label": "Status",
     "value_md": "Live since 2025-09-24. Cloudflare's own wording is that the signals are preferences, not enforcement: \"It's important to remember that content signals express preferences; they are not technical countermeasures against scraping.\" [2][5][7]"
    },
    {
     "label": "Version",
     "value_md": "Unnumbered policy (`2025-09-24`; `use` `2026-07-01`; Bot Preference Sync `2026-08-21` / `2026-09-15`; docs `2026-10-22`); IETF `-00` (expired `2026-04-04`) [2][5][7]"
    },
    {
     "label": "Wire format",
     "value_md": "`robots.txt` (`text/plain`) `#` preamble and comma-delimited `Content-Signal: <key>=<value>` lines in `User-agent:` groups, plus HTTP `Content-Signal` header [1][2][7]"
    },
    {
     "label": "Specification",
     "value_md": "[contentsignals.org](https://contentsignals.org/) · [Launch Post](https://blog.cloudflare.com/content-signals-policy/) · [Managed robots.txt Docs](https://developers.cloudflare.com/bots/additional-configurations/managed-robots-txt/) · [draft-romm-aipref-contentsignals-00](https://datatracker.ietf.org/doc/draft-romm-aipref-contentsignals/) [1][2][7]"
    },
    {
     "label": "Found at",
     "value_md": "`GET /robots.txt` (`User-agent: *` or per-bot groups) and `Content-Signal` HTTP header on Markdown responses [2][7][8]"
    },
    {
     "label": "Licence",
     "value_md": "Creative Commons Zero (`CC0`) for policy text; IETF Trust (`BCP 78` / Revised BSD) for `-00` draft [2][5]"
    }
   ],
   "v05_problem_md": "Standard `robots.txt` directives let a site operator instruct which crawlers and bots can access which URL paths, but provide no mechanism to express how content may be used after it has been accessed. [2] Content Signals Policy defines three downstream usage categories—`search` (building a search index and returning hyperlinks and short excerpts, excluding AI-generated search summaries), `ai-input` (inputting content into AI models for retrieval-augmented generation, grounding, or real-time generative AI search answers), and `ai-train` (training or fine-tuning AI models)—where `yes` permits collection for that use and `no` prohibits it. [2] Content signals express operator preferences and express reservations of rights under Article 4 of European Union Directive 2019/790 on Copyright in the Digital Single Market, rather than acting as technical enforcement countermeasures against crawlers that ignore `robots.txt`. [2]",
   "v05_mechanism_delta_md": "Content Signals Policy defines three downstream usage categories—`search` (building a search index and returning hyperlinks and short excerpts, excluding AI-generated search summaries), `ai-input` (inputting content into AI models for retrieval-augmented generation, grounding, or real-time generative AI search answers), and `ai-train` (training or fine-tuning AI models)—where `yes` permits collection for that use and `no` prohibits it. [2]",
   "v05_scope_boundary_md": "Content signals express operator preferences and express reservations of rights under Article 4 of European Union Directive 2019/790 on Copyright in the Digital Single Market, rather than acting as technical enforcement countermeasures against crawlers that ignore `robots.txt`. [2]",
   "v05_fuzzy_additions": [
    {
     "id": "managed-robots-txt-and-the-content-use-field",
     "heading": "Managed robots.txt and the content-use field",
     "body_md": "Cloudflare's Bot Preference Sync prepends managed directives and the Content Signals Policy to a zone's `robots.txt` when Enable Bot Preference Sync is turned on and at least one of the Search, Agent, or Training policies is set to Block, Block on pages with ads, or, for Training, Disallow (emitting `Content-signal: search=yes, ai-train=no, use=reference` in the `2026-10-22` documentation). [7] With every policy set to allow, there is nothing to prepend and `robots.txt` is served unchanged. [7]",
     "bullets": [
      {
       "label": "Free-plan default robots.txt",
       "text_md": "Free-plan zones that do not have their own `robots.txt` file and do not use managed `robots.txt` serve the Content Signals Policy preamble defining the categories without expressing any specific preferences about the domain's content. [7]"
      },
      {
       "label": "Launch-day rollout for existing zones",
       "text_md": "At the `2025-09-24` launch, Cloudflare began serving the commented, human-readable Content Signals Policy without `Allow` or `Disallow` directives or active content signals for Free customer zones lacking an existing `robots.txt` file, while zones with an existing `robots.txt` file saw no change. [2]"
      },
      {
       "label": "Content-use values",
       "text_md": "The content-use field adds a fourth signal alongside search, ai-input, and ai-train with three values from least to most permissive: `use=immediate` (interact, but store and reuse nothing), `use=reference` (index, excerpt, and link back), and `use=full` (summarize and reproduce). Managed `robots.txt` adds `use=reference` alongside `search=yes,ai-train=no`. [7]"
      },
      {
       "label": "Bot Preference Sync migration",
       "text_md": "Following the introduction of Bot Preference Sync on `2026-08-21`, Cloudflare announced on `2026-09-15` that standalone Managed Robots.txt is deprecated in favor of Bot Preference Sync and existing customers migrate to the new system. [9][10]"
      }
     ]
    },
    {
     "id": "http-headers-crawl-enforcement-and-origin-deployments",
     "heading": "HTTP headers, /crawl enforcement, and origin deployments",
     "body_md": "Since `2026-07-13`, Cloudflare's Markdown for Agents preserves any `Content-Signal` HTTP header set by the origin and injects `Content-Signal: ai-train=yes, search=yes, ai-input=yes` when the origin omits one. [8] Cloudflare Browser Run's `/crawl` endpoint enforces both the yes/no purpose directives (`search`, `ai-input`, and `ai-train`) and the `use` directive against the caller's declared `crawlPurposes` and `contentUse` parameters. [11] Major external search and AI crawler operators rely on separate `robots.txt` tokens rather than Content Signals: Google documents the standalone `Google-Extended` token while crawling with existing user-agent strings and offers a webmaster portal toggle for generative search results. [10][12]",
     "bullets": [
      {
       "label": "contentsignals.org/robots.txt",
       "text_md": "The reference site `contentsignals.org/robots.txt` publishes `Content-Signal: ai-train=yes, search=yes, ai-input=yes` alongside `Allow: /`. [13]"
      },
      {
       "label": "www.cloudflare.com/robots.txt",
       "text_md": "`www.cloudflare.com/robots.txt` publishes a header comment linking to `contentsignals.org` and `draft-romm-aipref-contentsignals` followed by `Content-Signal: ai-train=yes, search=yes, ai-input=yes`. [14]"
      },
      {
       "label": "launchpad.net/robots.txt",
       "text_md": "Launchpad pairs `Content-Usage: ai=n` with `Content-Signal: ai-train=no, search=yes, ai-input=no` under `User-agent: *`. [15]"
      },
      {
       "label": "linktr.ee/robots.txt",
       "text_md": "Linktree scopes `Content-Signal: ai-train=no, search=yes` inside named crawler stanzas such as `User-agent: GPTBot`. [16]"
      }
     ]
    }
   ],
   "v05_diagram": null,
   "v05_wire_artifact": {
    "title": "Content-Signal robots.txt stanza with ai-input unset",
    "heading": "Content-Signal robots.txt stanza with ai-input unset",
    "lang": "text",
    "code": "User-Agent: *\nContent-Signal: search=yes, ai-train=no\nAllow: /",
    "caption_md": "Example `robots.txt` stanza from the launch specification permitting traditional search indexing (`search=yes`), prohibiting model training (`ai-train=no`), and leaving `ai-input` unspecified under `User-Agent: *` and `Allow: /`. [2]"
   },
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "robots.txt (RFC 9309)",
      "spec_or_rfc": "RFC 9309",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "Content Signals adds a Content-Signal directive inside an RFC 9309 User-agent group, setting yes or no for search, ai-input, and ai-train, with an optional use field under test since July 2026, which Allow and Disallow do not encode. [1][17]"
     },
     {
      "name": "ODRL Information Model 2.2",
      "spec_or_rfc": "ODRL 2.2",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "A Content-Signal line records yes or no for search, ai-input, and ai-train, and Cloudflare describes those signals as preferences rather than technical blocks, whereas ODRL 2.2 is a policy of permissions, prohibitions, and duties. [1][18]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "ai-crawler-tokens-robots",
      "target_name": "AI crawler tokens in robots.txt",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "Content-Signal is written inside the robots.txt User-agent group that names a crawler and sets search, ai-input, and ai-train, and the directive does not itself define product tokens or Allow and Disallow paths. [1][17]"
     },
     {
      "target_id": "aipref-content-usage-attachment",
      "target_name": "AIPREF Content-Usage Attachment",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "Content-Signal sets search, ai-input, and ai-train inside a robots.txt User-agent group, while the IETF attachment uses a Content-Usage rule such as train-ai=n and a Content-Usage response header. [1][19]"
     },
     {
      "target_id": "tdmrep",
      "target_name": "TDMRep (TDM Reservation Protocol)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "Content-Signal is a robots.txt directive for search, ai-input, and ai-train, while TDMRep publishes /.well-known/tdmrep.json with tdm-reservation equal to 1 and repeats that reservation in headers, HTML meta, EPUB, and PDF metadata. [1][20]"
     },
     {
      "target_id": "rsl",
      "target_name": "Really Simple Licensing",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "Content-Signal is a yes-or-no line for search, ai-input, and ai-train in /robots.txt, while RSL is an RSL XML license file that can prohibit usage with a prohibits element of type usage and value ai-all. [1][21]"
     },
     {
      "target_id": "cloudflare-pay-per-crawl",
      "target_name": "Cloudflare Pay Per Crawl",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Content Signals records a preference for already-fetched content and is not a payment mechanism, while Pay Per Crawl is a paid crawl carried in HTTP headers. [1][22]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (10 probed or cited examples; non-exhaustive).",
    "side_a": {
     "visible": true,
     "heading": "Who publishes or hosts it",
     "col4_header": "Behavior / Provisioning",
     "note_md": null,
     "rows": [
      {
       "actor": "Cloudflare",
       "role": "CDN / Edge",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-22",
       "col4_md": "Bot Preference Sync writes managed robots.txt from the zone's Search, Agent, and Training policies when at least one policy is Block, Block on pages with ads, or, for Training, Disallow. Cloudflare prepends those directives and the Content Signals Policy to the zone's existing robots.txt (docs last updated 22 October 2026). `https://www.cloudflare.com/robots.txt` and `https://contentsignals.org/robots.txt` both serve `Content-Signal: ai-train=yes, search=yes, ai-input=yes`.",
       "source_md": "[Managed robots.txt](https://developers.cloudflare.com/bots/additional-configurations/managed-robots-txt/) [7] · [Content Signals launch](https://blog.cloudflare.com/content-signals-policy/) [2][13][14]"
      },
      {
       "actor": "Launchpad",
       "role": "Publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · as of 2026-10-29",
       "col4_md": "`https://launchpad.net/robots.txt` returned status 200 on 2026-10-29 with `Content-Signal: ai-train=no, search=yes, ai-input=no` in the group for all user agents, next to `Content-Usage: ai=n`.",
       "source_md": "[launchpad.net/robots.txt](https://launchpad.net/robots.txt) [15]"
      },
      {
       "actor": "NVIDIA Documentation",
       "role": "Docs platform",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · as of 2026-10-29",
       "col4_md": "`https://docs.nvidia.com/robots.txt` returned status 200 on 2026-10-29 with `Content-Signal: ai-train=yes, search=yes, ai-input=yes` in the group for all user agents.",
       "source_md": "[docs.nvidia.com/robots.txt](https://docs.nvidia.com/robots.txt) [23]"
      },
      {
       "actor": "Render",
       "role": "Publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · as of 2026-10-29",
       "col4_md": "`https://render.com/robots.txt` returned status 200 on 2026-10-29 with `Content-Signal: ai-train=yes, search=yes, ai-input=yes` in the group for all user agents and again in a group that names AI crawlers.",
       "source_md": "[render.com/robots.txt](https://render.com/robots.txt) [24]"
      },
      {
       "actor": "Linktree",
       "role": "Publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · as of 2026-10-29",
       "col4_md": "`https://linktr.ee/robots.txt` returned status 200 on 2026-10-29 with a Content Signals policy comment, then a two-signal line inside named-crawler groups. Example: `User-agent: GPTBot` / `Content-Signal: ai-train=no, search=yes`.",
       "source_md": "[linktr.ee/robots.txt](https://linktr.ee/robots.txt) [16]"
      },
      {
       "actor": "Workable",
       "role": "Publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · as of 2026-10-29",
       "col4_md": "`https://workable.com/robots.txt` returned status 200 on 2026-10-29 with a shortened policy comment and, in the group for all user agents, `Content-Signal: search=yes, ai-input=yes, ai-train=no`.",
       "source_md": "[workable.com/robots.txt](https://workable.com/robots.txt) [25]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Bot, client & tool support",
     "col4_header": "Behavior / Provisioning",
     "note_md": null,
     "rows": [
      {
       "actor": "Cloudflare Browser Run /crawl",
       "role": "AI crawler",
       "status": "Supported",
       "status_display": "Supported · as of 2026-08-31",
       "col4_md": "The `/crawl` endpoint (changelog 31 August 2026) enforces the Content Signals `use` directive and the yes/no purpose directives `search`, `ai-input`, and `ai-train`. Cloudflare says Content Signals are trust-based.",
       "source_md": "[Crawl endpoint changelog](https://developers.cloudflare.com/changelog/post/2026-08-31-crawl-content-use/) [11][26]"
      },
      {
       "actor": "Cloudflare AI Crawl Control",
       "role": "Validator / CLI",
       "status": "Supported",
       "status_display": "Supported · as of 2025-10-21",
       "col4_md": "The Robots.txt tab (changelog 21 October 2025) checks whether a zone's robots.txt contains Content Signals directives for AI training, search, and AI input.",
       "source_md": "[AI Crawl Control robots.txt tab](https://developers.cloudflare.com/changelog/post/2025-10-21-track-robots-txt/) [27]"
      },
      {
       "actor": "Google (John Mueller)",
       "role": "Search / Answer engine",
       "status": "Does not request",
       "status_display": "Does not request · as of 2026-07-06",
       "col4_md": "John Mueller, 6 July 2026, quoted by Search Engine Roundtable: as far as he knows, none of the crawlers or LLMs use the `content-signal` robots.txt directives. He said a CDN made the directive up, that it has no effect, and that it adds bloat to robots.txt.",
       "source_md": "[Search Engine Roundtable](https://www.seroundtable.com/google-cloudflare-content-signals-41631.html) [28]"
      },
      {
       "actor": "OpenAI GPTBot, Anthropic ClaudeBot, Google-Extended, Perplexity, Apple, Amazon, Mistral AI & Common Crawl CCBot",
       "role": "AI crawler",
       "status": "Position: neutral (no implementation)",
       "status_display": "Position: neutral (no implementation) · as of 2026-10-03",
       "col4_md": "EasyxLab S16 (published 3 October 2026) audited the archived official crawler documentation (rather than live crawler runtime behavior) for all eight readable providers (OpenAI, Anthropic, Google, Mistral AI, Apple, Amazon, Perplexity, and Common Crawl) and found that every page specifies standard robots.txt user-agent tokens (such as GPTBot, ClaudeBot, Google-Extended, or CCBot) and none names Content-Signal, TDMRep, IETF Content-Usage, or noai.",
       "source_md": "[EasyxLab S16](https://easybyte.es/lab/studies/s16/paper/) [29] · [Google common crawlers](https://developers.google.com/crawling/docs/crawlers-fetchers/google-common-crawlers) [12] · [CCBot](https://commoncrawl.org/ccbot) [30]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "cloudflare-markdown-for-agents",
     "target_name": "Markdown for Agents",
     "relation_label": "Complements",
     "delta": "Content Signals lets a publisher state how content may be used after access, rather than converting the page body.",
     "item_md": "**[Markdown for Agents](/protocols/cloudflare-markdown-for-agents/)** (Complements) — Content Signals lets a publisher state how content may be used after access, rather than converting the page body."
    },
    {
     "target_id": "ai-txt",
     "target_name": "ai.txt",
     "relation_label": "Peer alternative",
     "delta": "ai.txt is a separate document with Training, Scraping, Indexing, and Caching, or with Allow and Disallow over media extensions, while Content-Signal is a directive for search, ai-input, and ai-train inside a robots.txt User-agent group.",
     "item_md": "**[ai.txt](/protocols/ai-txt/)** (Peer alternative) — ai.txt is a separate document with Training, Scraping, Indexing, and Caching, or with Allow and Disallow over media extensions, while Content-Signal is a directive for search, ai-input, and ai-train inside a robots.txt User-agent group."
    },
    {
     "target_id": "aipref-vocabulary",
     "target_name": "AIPREF Vocabulary (A Vocabulary For Expressing AI Usage Preferences)",
     "relation_label": "Peer alternative",
     "delta": "Content Signals Policy, which Will Allen published on 24 September 2025, defines three content signals, search, ai-input, and ai-train, and their relevance to crawlers. AIPREF Vocabulary defines different categories, AI Training, AI Use, and Search, mapped to the labels train-ai, ai-use, and search.",
     "item_md": "**[AIPREF Vocabulary (A Vocabulary For Expressing AI Usage Preferences)](/protocols/aipref-vocabulary/)** (Peer alternative) — Content Signals Policy, which Will Allen published on 24 September 2025, defines three content signals, search, ai-input, and ai-train, and their relevance to crawlers. AIPREF Vocabulary defines different categories, AI Training, AI Use, and Search, mapped to the labels train-ai, ai-use, and search."
    },
    {
     "item_md": "**[Permit protocols](/category/permit/)** — Category index for `permit` standards."
    }
   ],
   "v05_compiled_md": "---\nid: cloudflare-content-signals-policy\ntitle: \"Content Signals Policy\"\ntier: flagship\nlifecycle_status: active\ncategory: permit\nform: document-format\nwire_archetype: web_discovery\nspec_url: https://contentsignals.org/\nlast_checked: 2026-11-12\n---\n\n# Content Signals Policy\n\n**Category:** [Permit](/category/permit/) (`permit`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-11-12\n\n> *This page is about Cloudflare's Content Signals Policy: a CC0-licensed policy text for robots.txt and the Content-Signal line that states yes or no for three uses of content, search, ai-input and ai-train. It is not the vocabulary of the IETF AI Preferences (aipref) working group, draft-ietf-aipref-vocab, whose preferences are carried in a separate Content-Usage rule; see [AIPREF Vocabulary](/protocols/aipref-vocabulary/) and [AIPREF Content-Usage Attachment](/protocols/aipref-content-usage-attachment/). It is not RSL (Really Simple Licensing), which sets licensing terms and whose usage vocabulary includes the Content Signals terms; see [RSL](/protocols/rsl/). For the Content-Signal HTTP response header that Cloudflare adds to Markdown responses, see [Markdown for Agents](/protocols/cloudflare-markdown-for-agents/). [1]*\n\n> **In brief:** Content Signals Policy is a machine-readable `robots.txt` framework created by Cloudflare under a CC0 license that lets website operators declare how crawlers and AI platforms may use site content after fetching it. While classic `robots.txt` directives only govern whether a bot can crawl a URL path, a `Content-Signal` line (or HTTP response header) sets explicit `yes` or `no` permissions across three downstream buckets: `search`, `ai-input`, and `ai-train`. [2]\n\n**Content Signals Policy** is a CC0-licensed `robots.txt` policy framework launched by Cloudflare on `2025-09-24` that defines three machine-readable content signals—`search`, `ai-input`, and `ai-train`—to express how accessed content may be used by crawlers. [2] An operator announces preferences on a `Content-Signal` line inside a `robots.txt` `User-Agent` group (or in an HTTP `Content-Signal` response header) using comma-delimited `yes` or `no` syntax, such as `Content-Signal: search=yes, ai-train=no`. [2] Omitting a signal key (such as leaving `ai-input` blank) neither grants nor restricts permission for that use, indicating only that the operator has not used `robots.txt` to express a preference for it. [2] On `2026-07-01`, Cloudflare began testing an additional `use` signal in `robots.txt` (`use=immediate`, `use=reference`, and `use=full`) to express a website owner's post-access retention preference rather than issuing blocks directly. [3] Described by Cloudflare on the IETF `ai-control` list as an interim measure while working toward a consensus standard, the companion individual Internet-Draft `draft-romm-aipref-contentsignals` (by Michael Tremante and Leah Romm, latest revision `2025-10-01`) expired on `2026-04-04`. [4][5]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Permit](/category/permit/) (`permit`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | Cloudflare, Inc. (Will Allen, `2025-09-24`; Michael Tremante & Leah Romm, `2025-10-01`; Jin-Hee Lee & Bryan Becker, `2026-07-01`) [2][5][6] |\n| **Governed by** | Cloudflare, Inc. (policy steward); submitted to the IETF `aipref` WG as individual Internet-Draft `draft-romm-aipref-contentsignals-00` (published `2025-10-01`, expired `2026-04-04`; not WG-adopted) [2][4][7] |\n| **Track** | Vendor / Spec-Site Standard (Cloudflare CC0 policy framework; companion individual IETF draft expired 2026-04-04) [1][2][5] |\n| **Status** | Live since 2025-09-24. Cloudflare's own wording is that the signals are preferences, not enforcement: \"It's important to remember that content signals express preferences; they are not technical countermeasures against scraping.\" [2][5][7] |\n| **Version** | Unnumbered policy (`2025-09-24`; `use` `2026-07-01`; Bot Preference Sync `2026-08-21` / `2026-09-15`; docs `2026-10-22`); IETF `-00` (expired `2026-04-04`) [2][5][7] |\n| **Wire format** | `robots.txt` (`text/plain`) `#` preamble and comma-delimited `Content-Signal: <key>=<value>` lines in `User-agent:` groups, plus HTTP `Content-Signal` header [1][2][7] |\n| **Specification** | [contentsignals.org](https://contentsignals.org/) · [Launch Post](https://blog.cloudflare.com/content-signals-policy/) · [Managed robots.txt Docs](https://developers.cloudflare.com/bots/additional-configurations/managed-robots-txt/) · [draft-romm-aipref-contentsignals-00](https://datatracker.ietf.org/doc/draft-romm-aipref-contentsignals/) [1][2][7] |\n| **Found at** | `GET /robots.txt` (`User-agent: *` or per-bot groups) and `Content-Signal` HTTP header on Markdown responses [2][7][8] |\n| **Licence** | Creative Commons Zero (`CC0`) for policy text; IETF Trust (`BCP 78` / Revised BSD) for `-00` draft [2][5] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Managed robots.txt and the content-use field](#managed-robots-txt-and-the-content-use-field)\n3. [HTTP headers, /crawl enforcement, and origin deployments](#http-headers-crawl-enforcement-and-origin-deployments)\n4. [Counterparts and related standards](#counterparts-and-related-standards)\n5. [Adoption and ecosystem](#adoption-and-ecosystem)\n6. [See also](#see-also)\n7. [References](#references)\n\n---\n\n## Problem and scope\n\nStandard `robots.txt` directives let a site operator instruct which crawlers and bots can access which URL paths, but provide no mechanism to express how content may be used after it has been accessed. [2] Content Signals Policy defines three downstream usage categories—`search` (building a search index and returning hyperlinks and short excerpts, excluding AI-generated search summaries), `ai-input` (inputting content into AI models for retrieval-augmented generation, grounding, or real-time generative AI search answers), and `ai-train` (training or fine-tuning AI models)—where `yes` permits collection for that use and `no` prohibits it. [2] Content signals express operator preferences and express reservations of rights under Article 4 of European Union Directive 2019/790 on Copyright in the Digital Single Market, rather than acting as technical enforcement countermeasures against crawlers that ignore `robots.txt`. [2]\n\n### Content-Signal robots.txt stanza with ai-input unset\n\n```text\nUser-Agent: *\nContent-Signal: search=yes, ai-train=no\nAllow: /\n```\n\n*Example `robots.txt` stanza from the launch specification permitting traditional search indexing (`search=yes`), prohibiting model training (`ai-train=no`), and leaving `ai-input` unspecified under `User-Agent: *` and `Allow: /`. [2]*\n\n---\n\n## Managed robots.txt and the content-use field\n\nCloudflare's Bot Preference Sync prepends managed directives and the Content Signals Policy to a zone's `robots.txt` when Enable Bot Preference Sync is turned on and at least one of the Search, Agent, or Training policies is set to Block, Block on pages with ads, or, for Training, Disallow (emitting `Content-signal: search=yes, ai-train=no, use=reference` in the `2026-10-22` documentation). [7] With every policy set to allow, there is nothing to prepend and `robots.txt` is served unchanged. [7]\n\n- **Free-plan default robots.txt:** Free-plan zones that do not have their own `robots.txt` file and do not use managed `robots.txt` serve the Content Signals Policy preamble defining the categories without expressing any specific preferences about the domain's content. [7]\n- **Launch-day rollout for existing zones:** At the `2025-09-24` launch, Cloudflare began serving the commented, human-readable Content Signals Policy without `Allow` or `Disallow` directives or active content signals for Free customer zones lacking an existing `robots.txt` file, while zones with an existing `robots.txt` file saw no change. [2]\n- **Content-use values:** The content-use field adds a fourth signal alongside search, ai-input, and ai-train with three values from least to most permissive: `use=immediate` (interact, but store and reuse nothing), `use=reference` (index, excerpt, and link back), and `use=full` (summarize and reproduce). Managed `robots.txt` adds `use=reference` alongside `search=yes,ai-train=no`. [7]\n- **Bot Preference Sync migration:** Following the introduction of Bot Preference Sync on `2026-08-21`, Cloudflare announced on `2026-09-15` that standalone Managed Robots.txt is deprecated in favor of Bot Preference Sync and existing customers migrate to the new system. [9][10]\n\n---\n\n## HTTP headers, /crawl enforcement, and origin deployments\n\nSince `2026-07-13`, Cloudflare's Markdown for Agents preserves any `Content-Signal` HTTP header set by the origin and injects `Content-Signal: ai-train=yes, search=yes, ai-input=yes` when the origin omits one. [8] Cloudflare Browser Run's `/crawl` endpoint enforces both the yes/no purpose directives (`search`, `ai-input`, and `ai-train`) and the `use` directive against the caller's declared `crawlPurposes` and `contentUse` parameters. [11] Major external search and AI crawler operators rely on separate `robots.txt` tokens rather than Content Signals: Google documents the standalone `Google-Extended` token while crawling with existing user-agent strings and offers a webmaster portal toggle for generative search results. [10][12]\n\n- **contentsignals.org/robots.txt:** The reference site `contentsignals.org/robots.txt` publishes `Content-Signal: ai-train=yes, search=yes, ai-input=yes` alongside `Allow: /`. [13]\n- **www.cloudflare.com/robots.txt:** `www.cloudflare.com/robots.txt` publishes a header comment linking to `contentsignals.org` and `draft-romm-aipref-contentsignals` followed by `Content-Signal: ai-train=yes, search=yes, ai-input=yes`. [14]\n- **launchpad.net/robots.txt:** Launchpad pairs `Content-Usage: ai=n` with `Content-Signal: ai-train=no, search=yes, ai-input=no` under `User-agent: *`. [15]\n- **linktr.ee/robots.txt:** Linktree scopes `Content-Signal: ai-train=no, search=yes` inside named crawler stanzas such as `User-agent: GPTBot`. [16]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **robots.txt (RFC 9309)** | `RFC 9309` | Profiles classic standard | Content Signals adds a Content-Signal directive inside an RFC 9309 User-agent group, setting yes or no for search, ai-input, and ai-train, with an optional use field under test since July 2026, which Allow and Disallow do not encode. [1][17] |\n| **ODRL Information Model 2.2** | `ODRL 2.2` | Analogous to classic standard | A Content-Signal line records yes or no for search, ai-input, and ai-train, and Cloudflare describes those signals as preferences rather than technical blocks, whereas ODRL 2.2 is a policy of permissions, prohibitions, and duties. [1][18] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[AI crawler tokens in robots.txt](/protocols/ai-crawler-tokens-robots/)** | Builds on | Content-Signal is written inside the robots.txt User-agent group that names a crawler and sets search, ai-input, and ai-train, and the directive does not itself define product tokens or Allow and Disallow paths. [1][17] |\n| **[AIPREF Content-Usage Attachment](/protocols/aipref-content-usage-attachment/)** | Peer alternative | Content-Signal sets search, ai-input, and ai-train inside a robots.txt User-agent group, while the IETF attachment uses a Content-Usage rule such as train-ai=n and a Content-Usage response header. [1][19] |\n| **[TDMRep (TDM Reservation Protocol)](/protocols/tdmrep/)** | Peer alternative | Content-Signal is a robots.txt directive for search, ai-input, and ai-train, while TDMRep publishes /.well-known/tdmrep.json with tdm-reservation equal to 1 and repeats that reservation in headers, HTML meta, EPUB, and PDF metadata. [1][20] |\n| **[Really Simple Licensing](/protocols/rsl/)** | Peer alternative | Content-Signal is a yes-or-no line for search, ai-input, and ai-train in /robots.txt, while RSL is an RSL XML license file that can prohibit usage with a prohibits element of type usage and value ai-all. [1][21] |\n| **[Cloudflare Pay Per Crawl](/protocols/cloudflare-pay-per-crawl/)** | Complements | Content Signals records a preference for already-fetched content and is not a payment mechanism, while Pay Per Crawl is a paid crawl carried in HTTP headers. [1][22] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (10 probed or cited examples; non-exhaustive).*\n\n### Who publishes or hosts it\n\n| Actor | Role | Status | Behavior / Provisioning | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Cloudflare** | CDN / Edge | Supported · as of 2026-10-22 | Bot Preference Sync writes managed robots.txt from the zone's Search, Agent, and Training policies when at least one policy is Block, Block on pages with ads, or, for Training, Disallow. Cloudflare prepends those directives and the Content Signals Policy to the zone's existing robots.txt (docs last updated 22 October 2026). `https://www.cloudflare.com/robots.txt` and `https://contentsignals.org/robots.txt` both serve `Content-Signal: ai-train=yes, search=yes, ai-input=yes`. | [Managed robots.txt](https://developers.cloudflare.com/bots/additional-configurations/managed-robots-txt/) [7] · [Content Signals launch](https://blog.cloudflare.com/content-signals-policy/) [2][13][14] |\n| **Launchpad** | Publisher | Live (HTTP 200) · as of 2026-10-29 | `https://launchpad.net/robots.txt` returned status 200 on 2026-10-29 with `Content-Signal: ai-train=no, search=yes, ai-input=no` in the group for all user agents, next to `Content-Usage: ai=n`. | [launchpad.net/robots.txt](https://launchpad.net/robots.txt) [15] |\n| **NVIDIA Documentation** | Docs platform | Live (HTTP 200) · as of 2026-10-29 | `https://docs.nvidia.com/robots.txt` returned status 200 on 2026-10-29 with `Content-Signal: ai-train=yes, search=yes, ai-input=yes` in the group for all user agents. | [docs.nvidia.com/robots.txt](https://docs.nvidia.com/robots.txt) [23] |\n| **Render** | Publisher | Live (HTTP 200) · as of 2026-10-29 | `https://render.com/robots.txt` returned status 200 on 2026-10-29 with `Content-Signal: ai-train=yes, search=yes, ai-input=yes` in the group for all user agents and again in a group that names AI crawlers. | [render.com/robots.txt](https://render.com/robots.txt) [24] |\n| **Linktree** | Publisher | Live (HTTP 200) · as of 2026-10-29 | `https://linktr.ee/robots.txt` returned status 200 on 2026-10-29 with a Content Signals policy comment, then a two-signal line inside named-crawler groups. Example: `User-agent: GPTBot` / `Content-Signal: ai-train=no, search=yes`. | [linktr.ee/robots.txt](https://linktr.ee/robots.txt) [16] |\n| **Workable** | Publisher | Live (HTTP 200) · as of 2026-10-29 | `https://workable.com/robots.txt` returned status 200 on 2026-10-29 with a shortened policy comment and, in the group for all user agents, `Content-Signal: search=yes, ai-input=yes, ai-train=no`. | [workable.com/robots.txt](https://workable.com/robots.txt) [25] |\n\n### Bot, client & tool support\n\n| Actor | Role | Status | Behavior / Provisioning | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Cloudflare Browser Run /crawl** | AI crawler | Supported · as of 2026-08-31 | The `/crawl` endpoint (changelog 31 August 2026) enforces the Content Signals `use` directive and the yes/no purpose directives `search`, `ai-input`, and `ai-train`. Cloudflare says Content Signals are trust-based. | [Crawl endpoint changelog](https://developers.cloudflare.com/changelog/post/2026-08-31-crawl-content-use/) [11][26] |\n| **Cloudflare AI Crawl Control** | Validator / CLI | Supported · as of 2025-10-21 | The Robots.txt tab (changelog 21 October 2025) checks whether a zone's robots.txt contains Content Signals directives for AI training, search, and AI input. | [AI Crawl Control robots.txt tab](https://developers.cloudflare.com/changelog/post/2025-10-21-track-robots-txt/) [27] |\n| **Google (John Mueller)** | Search / Answer engine | Does not request · as of 2026-07-06 | John Mueller, 6 July 2026, quoted by Search Engine Roundtable: as far as he knows, none of the crawlers or LLMs use the `content-signal` robots.txt directives. He said a CDN made the directive up, that it has no effect, and that it adds bloat to robots.txt. | [Search Engine Roundtable](https://www.seroundtable.com/google-cloudflare-content-signals-41631.html) [28] |\n| **OpenAI GPTBot, Anthropic ClaudeBot, Google-Extended, Perplexity, Apple, Amazon, Mistral AI & Common Crawl CCBot** | AI crawler | Position: neutral (no implementation) · as of 2026-10-03 | EasyxLab S16 (published 3 October 2026) audited the archived official crawler documentation (rather than live crawler runtime behavior) for all eight readable providers (OpenAI, Anthropic, Google, Mistral AI, Apple, Amazon, Perplexity, and Common Crawl) and found that every page specifies standard robots.txt user-agent tokens (such as GPTBot, ClaudeBot, Google-Extended, or CCBot) and none names Content-Signal, TDMRep, IETF Content-Usage, or noai. | [EasyxLab S16](https://easybyte.es/lab/studies/s16/paper/) [29] · [Google common crawlers](https://developers.google.com/crawling/docs/crawlers-fetchers/google-common-crawlers) [12] · [CCBot](https://commoncrawl.org/ccbot) [30] |\n\n---\n\n## See also\n\n- **[Markdown for Agents](/protocols/cloudflare-markdown-for-agents/)** *(Complements)* — Content Signals lets a publisher state how content may be used after access, rather than converting the page body.\n- **[ai.txt](/protocols/ai-txt/)** *(Peer alternative)* — ai.txt is a separate document with Training, Scraping, Indexing, and Caching, or with Allow and Disallow over media extensions, while Content-Signal is a directive for search, ai-input, and ai-train inside a robots.txt User-agent group.\n- **[AIPREF Vocabulary (A Vocabulary For Expressing AI Usage Preferences)](/protocols/aipref-vocabulary/)** *(Peer alternative)* — Content Signals Policy, which Will Allen published on 24 September 2025, defines three content signals, search, ai-input, and ai-train, and their relevance to crawlers. AIPREF Vocabulary defines different categories, AI Training, AI Use, and Search, mapped to the labels train-ai, ai-use, and search.\n- **Category:** [Permit protocols](/category/permit/)\n\n---\n\n## References\n\n1. Content Signals, *Content Signals* (fetched 2026-10-30) — <https://contentsignals.org/>\n2. Cloudflare, *Giving users choice with Cloudflare's new Content Signals Policy* (published 2025-09-24; modified 2026-07-15) — <https://blog.cloudflare.com/content-signals-policy/>\n3. Jin-Hee Lee and Bryan Becker (Cloudflare), *Your site, your rules: new AI traffic options for all customers* (published 2026-07-01) — <https://blog.cloudflare.com/content-independence-day-ai-options/>\n4. Michael Tremante, *Cloudflare's Content Signal Policy* (2025-09-24) — <https://mailarchive.ietf.org/arch/msg/ai-control/EANb9b9bljOanLBFm5FRerYlxyI/>\n5. IETF Datatracker, *draft-romm-aipref-contentsignals — Vocabulary For Expressing Content Signals (IETF Datatracker)* (expired individual draft; authors Michael Tremante and Leah Romm; last updated 2026-04-04) — <https://datatracker.ietf.org/doc/draft-romm-aipref-contentsignals/>\n6. Cloudflare, *Cloudflare Gives Creators New Tool to Control Use of Their Content* (published 2025-09-24) — <https://www.cloudflare.com/press/press-releases/2025/cloudflare-gives-creators-new-tool-to-control-use-of-their-content/>\n7. Cloudflare Developer Documentation, *robots.txt setting* (checked 2026-10-29) — <https://developers.cloudflare.com/bots/additional-configurations/managed-robots-txt/>\n8. Cloudflare Changelog, *Origin Content Signals for Markdown for Agents* (checked 2026-10-29) — <https://developers.cloudflare.com/changelog/post/2026-07-13-markdown-for-agents-header-preservation/>\n9. Jin-Hee Lee (Cloudflare), *Say it once: introducing Bot Preference Sync* (published 2026-08-21) — <https://blog.cloudflare.com/bot-preference-sync/>\n10. Bryan Becker (Cloudflare), *Have it both ways: stay discoverable in search while disallowing AI training* (published 2026-09-15) — <https://blog.cloudflare.com/accountable-mixed-use-ai-crawlers/>\n11. Cloudflare, */crawl - Crawl web content* (fetched 2026-10-30) — <https://developers.cloudflare.com/browser-run/quick-actions/crawl-endpoint/>\n12. Google, *Google's common crawlers* (updated 2026-10-30) — <https://developers.google.com/crawling/docs/crawlers-fetchers/google-common-crawlers>\n13. Cloudflare, *contentsignals.org/robots.txt* (fetched 2026-10-30) — <https://contentsignals.org/robots.txt>\n14. Cloudflare, *www.cloudflare.com/robots.txt* (fetched 2026-10-30) — <https://www.cloudflare.com/robots.txt>\n15. Launchpad, *robots.txt* (fetched 2026-10-30) — <https://launchpad.net/robots.txt>\n16. Linktree Pty Ltd, *linktr.ee/robots.txt* (checked 2026-10-29) — <https://linktr.ee/robots.txt>\n17. M. Koster, G. Illyes, H. Zeller, and L. Sassman (IETF), *RFC 9309: Robots Exclusion Protocol* (published September 2022) — <https://www.rfc-editor.org/rfc/rfc9309.html>\n18. W3C, *ODRL Information Model 2.2* (2018-02-15) — <https://www.w3.org/TR/odrl-model/>\n19. IETF Datatracker, *draft-ietf-aipref-attach — Associating AI Usage Preferences with Content in HTTP (IETF Datatracker)* (last updated 2026-08-18) — <https://datatracker.ietf.org/doc/draft-ietf-aipref-attach/>\n20. Laurent Le Meur (EDRLab), *TDM Reservation Protocol (TDMRep)* (Final Community Group Report, 10 May 2024) — <https://www.w3.org/community/reports/tdmrep/CG-FINAL-tdmrep-20240510/>\n21. RSL Technical Steering Committee, *Really Simple Licensing (RSL) 1.0 Specification* (published 2025-12-10) — <https://rslstandard.org/rsl>\n22. Cloudflare, *What is Pay Per Crawl?* (updated 2026-07-28) — <https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/what-is-pay-per-crawl/>\n23. NVIDIA Corporation, *docs.nvidia.com/robots.txt* (checked 2026-10-29) — <https://docs.nvidia.com/robots.txt>\n24. Render, *robots.txt (render.com/robots.txt)* (checked 2026-10-30) — <https://render.com/robots.txt>\n25. Workable Software Limited, *workable.com/robots.txt* (checked 2026-10-29) — <https://workable.com/robots.txt>\n26. Cloudflare Changelog, *Crawl endpoint now respects the Content Signals `use` directive* (checked 2026-10-29) — <https://developers.cloudflare.com/changelog/post/2026-08-31-crawl-content-use/>\n27. Cloudflare Changelog, *New Robots.txt tab for tracking crawler compliance* (checked 2026-10-29) — <https://developers.cloudflare.com/changelog/post/2025-10-21-track-robots-txt/>\n28. Google (John Mueller), *Google Says Cloudflare Content Signals Robots.txt Directive Has No Effects Whatsoever* (checked 2026-10-30) — <https://www.seroundtable.com/google-cloudflare-content-signals-41631.html>\n29. EasyxLab (EasyByte Hub S. Coop. Mad.), *Text-and-data-mining reservations in the EU-27 press, channel by channel · EasyxLab S16* (checked 2026-11-03) — <https://easybyte.es/lab/studies/s16/paper/>\n30. Common Crawl, *CCBot* (fetched 2026-10-30) — <https://commoncrawl.org/ccbot>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "WBA",
   "adoption": {
    "level": "observed",
    "by": "OpenAI (ChatGPT agent), Google (Google-Agent), Browserbase, Shopify (Cloudsurf), Exa (ExaSearchBot), Cloudflare, Vercel, AWS WAF, and 4 other verified implementations",
    "probe_run": null
   },
   "aliases": [
    "HTTP Message Signatures for automated traffic",
    "WBA"
   ],
   "analog": "Signed User-Agent / client authentication",
   "collisions": [],
   "discovery": {
    "mechanism": "Signature-Agent HTTP dictionary header resolving directly to an HTTPS JWK Set URL or well-known key directory",
    "path": "GET /.well-known/http-message-signatures-directory (application/http-message-signatures-directory+json)"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.ietf.org/archive/id/draft-ietf-webbotauth-httpsig-protocol-01.txt",
     "claim": "T. Meunier (Cloudflare) and S. Major (Google), *HTTP Message Signatures for automated traffic (draft-ietf-webbotauth-httpsig-protocol-01)*, draft-ietf-webbotauth-httpsig-protocol-01, 29 October 2026",
     "date": null,
     "quote": "HTTP Message Signatures for automated traffic / The goal is to allow automated HTTP clients to cryptographically sign outbound requests, allowing HTTP servers to verify their identity with confidence. / Current identification methods such as IP allowlisting, User-Agent strings, or shared API keys have significant limitations in security, scalability, and manageability. / It defines the Signature-Agent header field for in-band key discovery, a key directory format based on JWKS, and a well-known URI at which that directory is served. / Intended status: Standards Track / draft-ietf-webbotauth-httpsig-protocol-01 / This document describes a protocol for identifying automated traffic using [HTTP-MESSAGE-SIGNATURES]. / \"HTTP Message Signatures\", RFC 9421 / this happens at the HTTP layer, once headers are received. / provided Signature, Signature-Input, or Signature-Agent headers / the Origin MAY discard signatures for which the tag is not set to web-bot-auth / /.well-known/http-message-signatures-directory / application/http-message-signatures-directory+json / An Origin that expects a signature SHOULD request one from clients that did not provide it, using the Accept-Signature field / Fold draft-meunier-webbotauth-httpsig-directory into this document with its IANA registrations, and move to Standards Track. / S. Major Expires: 2 May 2027 Google 29 October 2026 / Expires: 2 May 2027 / 29 October 2026 / Signature, Signature-Input, or Signature-Agent headers / tag MUST be web-bot-auth / Signers MUST send the dictionary form. / using the Accept-Signature field / Make every Signature-Agent value a direct JWK Set URI. / GET /.well-known/http-message-signatures-directory / A directory served at the well-known URI registered in Section 8.1 MUST be served with media type application/http-message-signatures-directory+json. / User-Agent, when used alone, can be spoofed meaning anyone may attempt to act as that agent. / an agent may be using Chromium and wish to present itself as such to ensure rendering works, yet it still wants to differentiate its traffic to the site. / IPs on cloud platforms have layers of ownership - the platform owns the IP and registers it in their published IP blocks / the actual service provider that may be renting infra / impractical to scale for any agent beyond select partnerships / key rotation is challenging and becomes less secure as the consumers scale. / This protocol operates solely at the HTTP layer. It allows signatures to be generated and verified without modifying the transport layer or TLS stack. / Require no pre-established relationship between the two. / The identifier is the URL the verifier fetched. What the verifier ends up with is a pair: that URL, and a key the URL provides. Origins can log, rate limit, allowlist, or block the URL / Because the identifier is the URL and not the key, an Agent can rotate keys without losing continuity. / The URL does not change, so a verifier that recognised it before still recognises it after. / A valid signature over a resolved URL proves that a holder of a key that URL publishes signed the covered message. / The message can still be replayed. / This protocol does not authenticate human users, does not provide anonymous authentication, and does not define authorization or delegation. / acceptance remains subject to the Origin's policy. / correlate them, including across origins. / This protocol is unsuitable for agents that need to avoid such identification. / Figure 2: Key resolution follows the first request / A User initiates an action requiring the Agent to perform an HTTP request. / The Agent constructs the request, generates a signature using its signing key / How a User directs an Agent is outside the scope of this document. / The Origin learns the URL from the request, so it resolves keys after the first request rather than before it. / A signed request carries three headers / NOTE: '\\' line wrapping per RFC 8792 / (\"@authority\" \"signature-agent\";key=\"sig1\") / The Signature-Agent member identifies where candidate key material can be found. / The key used to verify the signature is selected by the keyid parameter of the corresponding Signature-Input member. / keyid MUST be a base64url JWK SHA-256 Thumbprint / created as defined in Section 2.3 of [HTTP-MESSAGE-SIGNATURES] / expires as defined in Section 2.3 of [HTTP-MESSAGE-SIGNATURES] / Agents MUST include at least one of the following components: / @authority as defined in Section 2.2.3 of [HTTP-MESSAGE-SIGNATURES] / @target-uri as defined in Section 2.2.2 of [HTTP-MESSAGE-SIGNATURES] / A signature covering @authority alone verifies against any method, path, or body sent to that authority until it expires / @method narrows the signature to one method. / @path narrows the signature to one resource. / @query-param narrows the signature to individual query parameters. / A signer that omits them remains conformant. / MUST send and cover Content-Digest / This document does not require it. / Agents MUST include the following @signature-params / It is RECOMMENDED that expires be no more than 24 hours after created. / Appendix A.3 of [JWK-OKP] for ed25519. / keyid MUST be a base64url JWK SHA-256 Thumbprint as defined in Section 3.2 of [JWK-THUMBPRINT] for RSA and EC, and in Appendix A.3 of [JWK-OKP] for ed25519. / Signature-Agent is a Dictionary Structured Header / whose scheme MUST be https. / Dictionary members MUST NOT carry parameters. / A signed request MUST carry the Signature-Agent header / Its member keyed to the signature label MUST be signed / A verifier MUST ignore a member that carries parameters. / including use of the nonce signature parameter / This document defines no additional nonce requirements. / including nonce. / used more often than its policy permits / respond with 429 Too Many Requests / Verifiers MUST validate each signature independently / evidence that those bytes, over that set of components, were present. / It does not make the inner signature valid, and it does not express authorization, delegation, or consent. / A verifier fetches that URL directly and interprets the response as a JWK Set. / The URL the verifier resolved is the identifier, with any query discarded. / the query is dropped from the identifier and not from the request. / that URL now names a domain rather than an arbitrary path / the domain operator stands behind the key set. / Later requests verify from cache / This protocol enables receivers to recognise requests that carry the same identifier and to correlate them, including across origins. Key rotation does not prevent this correlation when the identifier remains unchanged / Agents whose identifier would be associated with an individual human, rather than a service or role, expose that person to the same correlation. This protocol is not suited to such deployments. / Identification and Correlation / The resource MUST be a JSON Web Key Set (JWKS) / The directory MUST be served over HTTPS. / MUST be served with a 200 (OK) HTTP status code. / all other HTTP status codes as discovery failures and MUST NOT automatically follow HTTP redirects. / Cache-Control: max-age=86400 / \"kty\": \"OKP\" / \"crv\": \"Ed25519\" / \"kid\": \"NFcWBst6DXG-N35nHdzMrioWntdzNZghQSkjHNMMSjw\" / \"nbf\": 1712793600 / \"exp\": 1715385600 / automatically follow HTTP redirects. / it MUST be set to the thumbprint / matching keyid against kid / where kid is an operator-chosen label. / computes thumbprints instead. / Key lookup MUST be keyed on the (URL, key) pair, not on the key alone. / attribute that request to the URL the client asserted. / MAY carry a kid. In this case, it MUST be set to the thumbprint defined in Section 5.2 / Add the new key to the directory before its intended use date / Continue to include the old key until its expiration date / Remove expired keys from the directory / the directory's cache lifetime bounds how long a removed key keeps verifying. / It is not a revocation mechanism / that value is derived from the key material. / cannot use it to carry continuity across a rotation / The URL does not change / A directory that resolves and does not contain the key is evidence / That is how a removed key stops verifying. / MUST NOT evict a cached entry / a valid directory response signature / whose expires has not passed / the identifier falls back to the key thumbprint / A new key is a new identifier / Implementations MUST NOT use shared HMAC / Implementations SHOULD NOT reuse a signing key for different purposes. / A proxy SHOULD NOT strip the Signature or Signature-Agent headers from requests. / A proxy SHOULD NOT replay signatures against other reverse proxies used by the origin / Verifiers SHOULD reject responses exceeding a defined byte limit after content decoding. / Verifiers SHOULD enforce a maximum key count. / Verifiers SHOULD apply a wall-clock timeout to directory fetches. / Verifiers SHOULD limit redirect depth. / Verifiers SHOULD prevent directory fetches to private, loopback, and link-local address ranges. / Test keys, including the example keys in [HTTP-MESSAGE-SIGNATURES], MUST NOT be used in production. Verifiers SHOULD reject known test keys / Deployments MUST NOT treat a precomputed Web Bot Auth signature as a long-lived access credential. / Security Considerations / a robots.txt file names crawlers / Nothing: the signature ... does not depend on the IP / Verifiers can continue to use existing methods such as IP-based checks, forward-confirmed reverse DNS, local allowlists, and reputation systems. / Robots.txt alignment / This protocol does not authenticate human users, does not provide anonymous authentication / Add objectives, the relationship with anonymous bot authentication / HUMAN Verified AI Agents (https://github.com/HumanSecurity/human-verified-ai-agent) (Python) / draft-meunier-web-bot-auth-architecture-03 / Cloudflare Workers (https://github.com/cloudflare/web-bot-auth) (TypeScript) / draft-meunier-webbotauth-httpsig-protocol-00",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://datatracker.ietf.org/doc/draft-meunier-webbotauth-registry/",
     "claim": "Maxime Guerreiro, Ulas Kirazci, and Thibault Meunier, *draft-meunier-webbotauth-registry — Registry and Signature Agent card for Web bot auth (IETF Datatracker)*, individual draft; last updated 2026-10-27",
     "date": null,
     "quote": "Registry and Signature Agent card for Web bot auth / \"Robots Exclusion Protocol\", RFC 9309 / This document defines the \"Signature Agent Card\", a JSON metadata document that a signature agent using [DIRECTORY] publishes to describe itself / extended with a single web_bot_auth object / The rfc9309-product-token parameter specifies the product token used for robots.txt directives / The ips_uri parameter provides the URL of the signature agent's IP address list as defined in [JAFAR].",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://datatracker.ietf.org/doc/draft-meunier-web-bot-auth-architecture/",
     "claim": "IETF Datatracker, *draft-meunier-web-bot-auth-architecture — HTTP Message Signatures for automated traffic Architecture (IETF Datatracker)*, authors Thibault Meunier, Sandor Major; last updated 2026-03-02",
     "date": null,
     "quote": "2025-04-15 | 00 | (System) | New version approved / Thibault Meunier, Sandor Major",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://www.ietf.org/archive/id/draft-meunier-web-bot-auth-architecture-00.txt",
     "claim": "T. Meunier (Cloudflare), *HTTP Message Signatures for automated traffic Architecture (draft-meunier-web-bot-auth-architecture-00)*, draft-meunier-web-bot-auth-architecture-00, 15 April 2025",
     "date": null,
     "quote": "T. Meunier Internet-Draft Cloudflare Intended status: Informational 15 April 2025 / draft-meunier-web-bot-auth-architecture-00",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://www.ietf.org/archive/id/draft-meunier-http-message-signatures-directory-00.txt",
     "claim": "T. Meunier (Cloudflare), *HTTP Message Signatures Directory (draft-meunier-http-message-signatures-directory-00)*, draft-meunier-http-message-signatures-directory-00, 15 April 2025",
     "date": null,
     "quote": "draft-meunier-http-message-signatures-directory-00 / T. Meunier Internet-Draft Cloudflare Intended status: Standards Track 15 April 2025",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://datatracker.ietf.org/doc/charter-ietf-webbotauth/",
     "claim": "IETF, *Web Bot Auth (webbotauth working group charter)*, state Approved; last updated 2025-10-23",
     "date": null,
     "quote": "Web Bot Auth WG (webbotauth) / Last updated | 2025-10-23 / The Working Group is expected to liaise with the AIPREF, HTTPBIS, OAUTH, TLS, and WIMSE Working Groups as appropriate on any relevant documents.",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-webbotauth-httpsig-protocol/history/",
     "claim": "IETF Datatracker, *draft-ietf-webbotauth-httpsig-protocol history*, current tracker, checked 2026-10-30 (latest revision -01 dated 2026-10-29)",
     "date": null,
     "quote": "draft-meunier-webbotauth-httpsig-protocol-01 (2026-08-05) / 2026-09-01 | 00 | Rifaat Shekh-Yusef | WG -00 approved / New version available: draft-ietf-webbotauth-httpsig-protocol-00.txt / 2026-10-29 | 01 | Thibault Meunier | New version available: draft-ietf-webbotauth-httpsig-protocol-01.txt / 2026-09-01 / WG -00 approved",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://aws.amazon.com/about-aws/whats-new/2025/11/aws-waf-web-bot-auth-support/",
     "claim": "AWS What's New, *AWS WAF announces Web Bot Auth support*, posted 2025-11-21",
     "date": null,
     "quote": "Web Bot Auth (WBA) / AWS WAF announces Web Bot Auth support / 2025-11-21 / AWS WAF now automatically allows verified AI agent traffic. / an authentication method that leverages cryptographic signatures in HTTP messages / This feature is currently available only for AWS WAF customers protecting Amazon CloudFront distributions.",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://datatracker.ietf.org/wg/webbotauth/about/",
     "claim": "IETF Datatracker, *Web Bot Auth (webbotauth) working group*, area Web and Internet Transport; milestones 2026-04-30 and 2026-08-31",
     "date": null,
     "quote": "Area | Web and Internet Transport (wit)",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://datatracker.ietf.org/wg/webbotauth/history/",
     "claim": "IETF Datatracker, *Web Bot Auth (webbotauth) group history*, charter approved 2025-10-23",
     "date": null,
     "quote": "2025-10-23 | Morgan Condie | Charter approved, group active",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-webbotauth-httpsig-protocol/",
     "claim": "IETF Datatracker, *draft-ietf-webbotauth-httpsig-protocol — HTTP Message Signatures for automated traffic (IETF Datatracker)*, current tracker, checked 2026-10-30 (latest revision -01 dated 2026-10-29)",
     "date": null,
     "quote": "Active Internet-Draft (webbotauth WG) Authors Thibault Meunier, Sandor Major Last updated 2026-10-29 / WG state WG Document / IESG state I-D Exists / Last updated 2026-10-29 / Copyright (c) 2026 IETF Trust and the persons identified as the document authors.",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://developers.cloudflare.com/bots/reference/bot-verification/web-bot-auth/",
     "claim": "Cloudflare, *Web Bot Auth*, bot solutions docs; last updated 2026-10-08",
     "date": null,
     "quote": "\"dateModified\":\"2026-10-08\" / draft-meunier-http-message-signatures-directory-03 / draft-meunier-web-bot-auth-architecture-02 / where the header value is a structured string such as \"https://signature-agent.test\" / Cloudflare will fail to verify a message if: / The message uses the dictionary form from later drafts, such as sig2=\"https://signature-agent.test\". / The signature protocol is defined in draft-meunier-web-bot-auth-architecture-02 / Cloudflare implements the Signature-Agent format from draft-meunier-http-message-signatures-directory-03, where the header value is a structured string / sig2=\"https://signature-agent.test\" / Cloudflare's implementation of Web Bot Auth does not support every component and parameter defined in IETF RFC 9421. / Signature-Agent header",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://datatracker.ietf.org/doc/minutes-124-webbotauth-202511041930/",
     "claim": "IETF Web Bot Auth (webbotauth) WG, *Minutes IETF124: webbotauth: Tue 19:30 (minutes-124-webbotauth-202511041930-00)*, session 2025-11-04; last updated 2025-11-08",
     "date": null,
     "quote": "2025-11-04 19:30",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://datatracker.ietf.org/doc/minutes-interim-2026-webbotauth-02-202604131700/",
     "claim": "IETF Web Bot Auth (webbotauth) WG, *Minutes interim-2026-webbotauth-02: Mon 17:00 (minutes-interim-2026-webbotauth-02-202604131700-00)*, session 2026-04-13; last updated 2026-04-16",
     "date": null,
     "quote": "2026-04-13 17:00-19:00 GMT / draft-rescorla-anonymous-webbotauth-00",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://datatracker.ietf.org/doc/minutes-126-webbotauth/",
     "claim": "IETF Web Bot Auth (webbotauth) WG, *Minutes IETF126: webbotauth (minutes-126-webbotauth-00)*, session 2026-07-22; last updated 2026-07-23",
     "date": null,
     "quote": "2026-07-22 07:00 / 1. **Identifying Bot Authentication**: Cryptographically identifying bots. 2. **Anonymous Bot Authentication**: Demonstrating bot properties without revealing specific identity.",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://www.ietf.org/archive/id/draft-rescorla-anonymous-webbotauth-01.txt",
     "claim": "E. Rescorla (Independent) and R. L. Barnes (Cisco), *Anonymous Bot Authentication: Authorization and Rate Limiting for Web Agents (draft-rescorla-anonymous-webbotauth-01)*, 19 July 2026",
     "date": null,
     "quote": "draft-rescorla-anonymous-webbotauth-01 / 19 July 2026 / Internet-Draft",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://www.ietf.org/archive/id/draft-vilgalys-webbotauth-signed-agent-metadata-00.txt",
     "claim": "R. Vilgalys and P. Gonzalez (Google), *The Signed-Agent-Metadata HTTP Header Field for Web Bot Auth (draft-vilgalys-webbotauth-signed-agent-metadata-00)*, 2 November 2026; expires 6 May 2027",
     "date": null,
     "quote": "draft-vilgalys-webbotauth-signed-agent-metadata-00 / 2 November 2026 / This document defines the Signed-Agent-Metadata HTTP header field, an RFC 9651 Dictionary that carries optional, pseudonymous per-request metadata (product, project, and session).",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://blog.cloudflare.com/verified-bots-with-cryptography/",
     "claim": "Cloudflare Blog, *Message Signatures are now part of our Verified Bots Program, simplifying bot authentication*, published 2025-07-01; modified 2026-07-15",
     "date": null,
     "quote": "Starting today, Cloudflare is ramping up verification of cryptographic signatures provided by automated crawlers and bots. / Pay Per Crawl / automatically validate signatures on our edge",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://web.archive.org/web/20260609113733/https://www.akamai.com/blog/security/redefine-trust-web-bot-authentication",
     "claim": "Rupesh Chokshi, Akamai Blog, *Redefine Trust with Web Bot Authentication*, posted 2025-11-10; archived 2026-06-09",
     "date": null,
     "quote": "The Akamai edge retrieves the bot's signature directory, validates the signature using RFC 9421 rules / Visa's Trusted Agent Protocol",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://chatgpt.com/.well-known/http-message-signatures-directory",
     "claim": "OpenAI, *ChatGPT key directory*, response dated Fri, 30 Oct 2026; fetched 2026-10-30",
     "date": null,
     "quote": "content-type: application/http-message-signatures-directory+json / date: Fri, 30 Oct 2026 / \"crv\":\"Ed25519\" / \"kty\":\"OKP\" / \"use\":\"sig\" / \"kid\":\"ArwjqcCqtA5oxEWkzXGC-To_0A9whHmajCHtfe8I9aY\" / \"purpose\":\"ai\" / \"signature_agent\":\"https://chatgpt.com\" / alg=\"ed25519\" / tag=\"http-message-signatures-directory\" / signature-input: sig1=( / signature: sig1=",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://vercel.com/changelog/vercels-bot-verification-now-supports-web-bot-auth",
     "claim": "Vercel changelog, *Vercel's bot verification now supports Web Bot Auth*, published 2025-08-12; modified 2026-09-02",
     "date": null,
     "quote": "ChatGPT operator signs its requests using Web Bot Auth / Vercel's bot verification system supports the new protocol. / 2025-08-12 / Now, Bot Protection can use HTTP Message Signatures to verify traffic automation from dynamic and distributed sources. / ChatGPT operator signs its requests using Web Bot Auth, so is now allowed.",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://agent.bot.goog/.well-known/http-message-signatures-directory",
     "claim": "Google, *Google-Agent key directory*, response dated Fri, 30 Oct 2026; fetched 2026-10-30",
     "date": null,
     "quote": "content-type: application/http-message-signatures-directory+json / date: Fri, 30 Oct 2026 / \"alg\":\"EdDSA\" / \"crv\":\"Ed25519\" / \"kty\":\"OKP\" / \"use\":\"sig\" / \"kid\":\"mhxuPw\" / \"kid\":\"cYSMkA\" / \"kid\":\"bUCe2A\" / \"kid\":\"DYiMjA\" / \"kid\":\"Ggh50g\" / alg=\"ed25519\" / tag=\"http-message-signatures-directory\"",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://developers.google.com/crawling/docs/crawlers-fetchers/web-bot-auth",
     "claim": "Google for Developers, *Authenticate requests with Web Bot Auth (experimental)*, last updated 2026-10-13 UTC",
     "date": null,
     "quote": "Last updated 2026-10-13 UTC. / A subset of requests made by the Google-Agent are signed with Web Bot Auth / they are authenticated as https://agent.bot.goog / Web Bot Auth (Experimental)",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://www.browserbase.com/.well-known/http-message-signatures-directory",
     "claim": "Browserbase, *Browserbase key directory*, response dated Fri, 30 Oct 2026; fetched 2026-10-30",
     "date": null,
     "quote": "content-type: application/http-message-signatures-directory+json / date: Fri, 30 Oct 2026 / \"crv\":\"Ed25519\" / \"purpose\":\"rag\" / \"kid\":\"NVhTndQWodGQ47Kmhm1bhTdt0swWS7EHmUEMo-opsXU\" / \"kid\":\"DJuTDnlBxNZzalQhhvktwvkF3lWss-T56g7s4xubuhU\" / binding0 / binding1 / tag=\"http-message-signatures-directory\"",
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://www.browserbase.com/blog/what-is-web-bot-auth",
     "claim": "Harsehaj Dhami, Browserbase Blog, *What is Web Bot Auth?*, published 2026-09-30",
     "date": null,
     "quote": "It's why we're part of Cloudflare's Signed Agents program / September 30, 2026",
     "ref": 25
    },
    {
     "label": "[26]",
     "url": "https://cloudsurf.shopify.io/.well-known/http-message-signatures-directory",
     "claim": "Shopify, *Cloudsurf key directory*, response dated Fri, 30 Oct 2026; fetched 2026-10-30",
     "date": null,
     "quote": "content-type: application/http-message-signatures-directory+json / date: Fri, 30 Oct 2026 / \"kty\":\"OKP\",\"crv\":\"Ed25519\" / keyid=\"ytpCrk8u74NJ08SQepVrOmovFBEXUZPq7Nv8FCg_Qdw\" / tag=\"http-message-signatures-directory\" / alg=\"ed25519\" / signature-input: sig1=(",
     "ref": 26
    },
    {
     "label": "[27]",
     "url": "https://crawler.exa.ai/.well-known/http-message-signatures-directory",
     "claim": "Exa, *ExaSearchBot key directory*, response dated Fri, 30 Oct 2026; fetched 2026-10-30",
     "date": null,
     "quote": "content-type: application/http-message-signatures-directory+json / date: Fri, 30 Oct 2026 / \"crv\":\"Ed25519\" / \"kty\":\"OKP\" / \"kid\":\"sDCpsJpgItYcmF_KhZozOUGIGL6a49yxE3f0yQR5SIA\" / binding0 / tag=\"http-message-signatures-directory\"",
     "ref": 27
    },
    {
     "label": "[28]",
     "url": "https://crawler.exa.ai/",
     "claim": "Exa, *Exa Search Crawler*, last updated 2026-07-30",
     "date": null,
     "quote": "Last Updated: July 30, 2026 / Every ExaSearchBot request is cryptographically signed using HTTP Message Signatures (RFC 9421), following the Web Bot Auth scheme.",
     "ref": 28
    },
    {
     "label": "[29]",
     "url": "https://developers.cloudflare.com/bots/concepts/bot/verified-bots/",
     "claim": "Cloudflare, *Verified bots*, bot solutions docs; last updated Nov 2, 2026",
     "date": null,
     "quote": "through a cryptographic Web Bot Auth signature, a published IP list with a stable user-agent, or reverse DNS. / it obeys <code>robots.txt</code> and crawl directives, maintains reasonable request rates / As of July 1, 2026, the distinction between a Verified bot and a signed agent is expressed by a new metadata field tracked in BotBase: Direct versus Intermediary access, which tracks who can operate the bot. / Last updated Nov 2, 2026",
     "ref": 29
    },
    {
     "label": "[30]",
     "url": "https://www.hcaptcha.com/blog/web-bot-auth",
     "claim": "hCaptcha Blog, *Web Bot Auth: How hCaptcha Supports it*, published 2026-10-02",
     "date": null,
     "quote": "hCaptcha Enterprise now supports Web Bot Auth (WBA), giving partner agent platforms a cryptographic way to identify their traffic. / 2026-10-02 / October 2, 2026",
     "ref": 30
    },
    {
     "label": "[31]",
     "url": "https://www.humansecurity.com/learn/blog/human-verified-ai-agent-open-source/",
     "claim": "Ben Diamant and Tomer Elias, HUMAN Security Blog, *Introducing HUMAN Verified AI Agent: An Open-Source Foundation for Trustworthy Agent Identity*, published 2025-07-21",
     "date": null,
     "quote": "Introducing HUMAN Verified AI Agent / July 21, 2025 / These signatures are verified by a gateway service using a public key registry, allowing web services to cryptographically validate that a specific agent sent a given request. / using HTTP Message Signatures (RFC 9421) / cryptographically authenticated communication between AI agents and digital services using HTTP Message Signatures (RFC 9421)",
     "ref": 31
    },
    {
     "label": "[32]",
     "url": "https://assets.radar.cloudflare.com/bots/signature-agent-registry.txt",
     "claim": "Cloudflare Radar, *signature-agent-registry.txt*, key-directory URL list; last-modified 2026-10-30",
     "date": null,
     "quote": "last-modified: Fri, 30 Oct 2026 00:00:47 GMT / https://chatgpt.com/.well-known/http-message-signatures-directory / https://www.sagelabs.ai",
     "ref": 32
    }
   ],
   "form": "http-header",
   "governance": "IETF Web Bot Auth (`webbotauth`) Working Group (`wit` area; chartered 2025-10-23).",
   "group": "Web Bot Auth family",
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against draft-meunier-webbotauth-httpsig-protocol-00, its WG-adopted successor draft-ietf-webbotauth-httpsig-protocol-00 (2026-09-01), and Cloudflare's Web Bot Auth integration docs"
    },
    {
     "date": "2026-10-20",
     "note": "intended status corrected to Standards Track; predecessor draft history corrected"
    },
    {
     "date": "2026-10-20",
     "note": "noted the expired use-cases memo draft-nottingham-webbotauth-use-cases-02 (2026-04-01, expired 2026-10-03); verified against the datatracker page and the -02 text (IETF rsync archive)"
    },
    {
     "date": "2026-10-20",
     "note": "Cloudflare verifier note added: documentation updated 8 October 2026; @query-params and @status fail verification there"
    },
    {
     "date": "2026-10-30",
     "note": "Updated IETF Internet-Draft tracker metadata and document status."
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "webbotauth",
   "implementation": "multi-implementation",
   "last_verified": "2026-11-11",
   "name": "Web Bot Auth",
   "native_status": "Active WG Document (`I-D Exists`, updated 2026-10-29)",
   "origin": {
    "date": "2025-04-15",
    "org": "Thibault Meunier (Cloudflare) and Sandor Major (Google)"
   },
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "working-group",
   "probe": {
    "method": "GET",
    "on_absent": "No published key directory; the origin cannot verify Web Bot Auth signatures from this Signature-Agent identity",
    "parse": "200 response with Content-Type: application/http-message-signatures-directory+json and a JWKS body ({\"keys\":[...]}), itself signed with a Signature/Signature-Input pair tagged http-message-signatures-directory",
    "path": "https://{origin}/.well-known/http-message-signatures-directory"
   },
   "question": "Which automated client made this HTTP request, and can the origin verify it cryptographically?",
   "scope": "general",
   "spec_url": "https://datatracker.ietf.org/doc/draft-ietf-webbotauth-httpsig-protocol/",
   "step": "identify",
   "summary_md": "**Web Bot Auth** is an IETF Standards Track protocol (`draft-ietf-webbotauth-httpsig-protocol-01`, originated by Thibault Meunier at Cloudflare on 2025-04-15 with co-author Sandor Major at Google) that cryptographically authenticates automated HTTP clients using HTTP Message Signatures (RFC 9421). Automated clients sign outbound requests and advertise an out-of-band key directory so origin servers can verify bot identity at the HTTP layer. Each signed request carries `Signature-Input` (with tag `web-bot-auth`) and `Signature` headers alongside a `Signature-Agent` dictionary header pointing to an `https://` key directory at `/.well-known/http-message-signatures-directory` (`application/http-message-signatures-directory+json` `JWKS`). Origins that expect a signature may also solicit one on unsigned requests using the `Accept-Signature` header. Initially published as `draft-meunier-web-bot-auth-architecture-00` and `draft-meunier-http-message-signatures-directory-00`, the specifications were consolidated into `draft-meunier-webbotauth-httpsig-protocol-01` on 2026-08-05, adopted by the IETF `webbotauth` working group (chartered 2025-10-23) as `draft-ietf-webbotauth-httpsig-protocol-00` on 2026-09-01, and updated to `-01` on 2026-10-29.",
   "track": "ietf",
   "version": {
    "label": "draft-ietf-webbotauth-httpsig-protocol-01",
    "date": "2026-10-29"
   },
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-ietf-webbotauth-httpsig-protocol"
    }
   ],
   "use_cases": [
    "prove-agent-identity",
    "attribute-agent-traffic",
    "control-ai-crawling"
   ],
   "audience": [
    "platform",
    "site-owner",
    "agent-builder"
   ],
   "pairs_with": [
    "http-message-signatures",
    "ai-crawler-tokens-robots",
    "cloudflare-pay-per-crawl",
    "web-bot-auth-signature-agent-card",
    "wimse",
    "tap"
   ],
   "prerequisites": [
    "http-message-signatures"
   ],
   "hatnote_md": "This article covers the IETF Web Bot Auth protocol (`draft-ietf-webbotauth-httpsig-protocol`). For the underlying HTTP signature specification, see [HTTP Message Signatures](/protocols/http-message-signatures/); for the separate metadata card and registry draft, see [Signature Agent Card (Web Bot Auth registry)](/protocols/web-bot-auth-signature-agent-card/).",
   "freshness": "current",
   "ietf_tracker": {
    "doc": "draft-ietf-webbotauth-httpsig-protocol",
    "rev": "01",
    "state": "active",
    "stream": "IETF",
    "group_type": "WG",
    "wg": "webbotauth",
    "replaced_by": null,
    "posted_utc": "2026-10-29",
    "expires_utc": "2027-05-02",
    "as_of": "2026-10-30",
    "source": "https://datatracker.ietf.org/doc/draft-ietf-webbotauth-httpsig-protocol/",
    "source_label": "per IETF Datatracker"
   },
   "tier": "flagship",
   "lifecycle_status": "active_draft",
   "wire_archetype": "identity_auth_crypto",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-11",
   "v05_hatnote_html_md": "This article covers the IETF Web Bot Auth protocol (`draft-ietf-webbotauth-httpsig-protocol`). For the underlying HTTP signature specification, see [HTTP Message Signatures](/protocols/http-message-signatures/); for the separate metadata card and registry draft, see [Signature Agent Card (Web Bot Auth registry)](/protocols/web-bot-auth-signature-agent-card/). [1][2]",
   "v05_elevator_pitch_md": "Web Bot Auth is a cryptographic authentication standard that lets AI crawlers, fetching agents, and automated HTTP bots prove their identity to websites without pre-shared API keys or bilateral onboarding. Instead of relying on spoofable `User-Agent` strings or brittle cloud IP allowlists, a bot signs outbound HTTP requests with `Signature-Input` and `Signature` headers and points the origin via `Signature-Agent` to its public key directory at `/.well-known/http-message-signatures-directory`. [1]",
   "v05_lead_md": "**Web Bot Auth** is an IETF Standards Track protocol (`draft-ietf-webbotauth-httpsig-protocol-01`, originated by Thibault Meunier at Cloudflare on 2025-04-15 with co-author Sandor Major at Google) that cryptographically authenticates automated HTTP clients using HTTP Message Signatures (RFC 9421). Automated clients sign outbound requests and advertise an out-of-band key directory so origin servers can verify bot identity at the HTTP layer. [1][3] Each signed request carries `Signature-Input` (with tag `web-bot-auth`) and `Signature` headers alongside a `Signature-Agent` dictionary header pointing to an `https://` key directory at `/.well-known/http-message-signatures-directory` (`application/http-message-signatures-directory+json` `JWKS`). Origins that expect a signature may also solicit one on unsigned requests using the `Accept-Signature` header. [1] Initially published as `draft-meunier-web-bot-auth-architecture-00` and `draft-meunier-http-message-signatures-directory-00`, the specifications were consolidated into `draft-meunier-webbotauth-httpsig-protocol-01` on 2026-08-05, adopted by the IETF `webbotauth` working group (chartered 2025-10-23) as `draft-ietf-webbotauth-httpsig-protocol-00` on 2026-09-01, and updated to `-01` on 2026-10-29. [1][4][5][6][7]",
   "v05_identity_sentence_md": "**Web Bot Auth** is an IETF Standards Track protocol (`draft-ietf-webbotauth-httpsig-protocol-01`, originated by Thibault Meunier at Cloudflare on 2025-04-15 with co-author Sandor Major at Google) that cryptographically authenticates automated HTTP clients using HTTP Message Signatures (RFC 9421). Automated clients sign outbound requests and advertise an out-of-band key directory so origin servers can verify bot identity at the HTTP layer. [1][3]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Identify](/category/identify/) (`identify`)"
    },
    {
     "label": "Also known as",
     "value_md": "WBA; HTTP Message Signatures for automated traffic [1][8]"
    },
    {
     "label": "Form",
     "value_md": "HTTP header (`http-header`)"
    },
    {
     "label": "Originated by",
     "value_md": "Thibault Meunier (Cloudflare, 15 April 2025) and Sandor Major (Google, 2026) [1][4][5]"
    },
    {
     "label": "Governed by",
     "value_md": "IETF Web Bot Auth (`webbotauth`) Working Group (`wit` area; chartered 2025-10-23) [9][10]"
    },
    {
     "label": "Track",
     "value_md": "IETF Standards Track Internet-Draft (`draft-ietf-webbotauth-httpsig-protocol-01`) [1]"
    },
    {
     "label": "IETF tracker",
     "value_md": "[`draft-ietf-webbotauth-httpsig-protocol-01`](https://datatracker.ietf.org/doc/draft-ietf-webbotauth-httpsig-protocol/) · Active WG Document (`webbotauth`) · updated 2026-10-29 · expires 2 May 2027 [1][11]"
    },
    {
     "label": "Status",
     "value_md": "Active WG Document (`I-D Exists`, updated 2026-10-29) [11]"
    },
    {
     "label": "Version",
     "value_md": "`draft-ietf-webbotauth-httpsig-protocol-01` (29 October 2026; WG `-00` adopted 2026-09-01) [1][7]"
    },
    {
     "label": "Headers",
     "value_md": "`Signature`, `Signature-Input` (`tag=\"web-bot-auth\"`), `Signature-Agent` (dictionary), and `Accept-Signature` [1]"
    },
    {
     "label": "Specification",
     "value_md": "[HTTP Message Signatures for automated traffic](https://datatracker.ietf.org/doc/draft-ietf-webbotauth-httpsig-protocol/) [1][11]"
    },
    {
     "label": "Found at",
     "value_md": "Direct HTTPS JWK Set URLs in `Signature-Agent`, including `/.well-known/http-message-signatures-directory` (`application/http-message-signatures-directory+json`) [1]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust Legal Provisions (BCP 78) [11]"
    }
   ],
   "v05_problem_md": "IP allowlisting, User-Agent strings, and shared API keys have significant limitations in security, scalability, and manageability. A `User-Agent` alone can be spoofed, and a Chromium-based agent may still need its own traffic differentiated. Cloud IP blocks stack platform ownership over the service renting the address. Sharing a bearer secret with every site is impractical beyond select partnerships, and rotation becomes less secure as consumers scale. [1] Signatures are generated and verified at the HTTP layer without modifying the TLS stack, and no pre-established relationship is required. The identifier is the `Signature-Agent` URL the verifier fetched, paired with a key that URL provides. Origins can log, rate limit, allowlist, or block that URL, and key rotation keeps the same URL. [1] A valid signature proves that a holder of a published key signed the covered message. The message can still be replayed. The protocol does not authenticate human users, provide anonymous authentication, or define authorization, and acceptance remains the origin's policy. The same identifier can be correlated across origins, so the protocol is unsuitable for agents that need to avoid identification. [1]",
   "v05_mechanism_delta_md": "Signatures are generated and verified at the HTTP layer without modifying the TLS stack, and no pre-established relationship is required. The identifier is the `Signature-Agent` URL the verifier fetched, paired with a key that URL provides. Origins can log, rate limit, allowlist, or block that URL, and key rotation keeps the same URL. [1]",
   "v05_scope_boundary_md": "A valid signature proves that a holder of a published key signed the covered message. The message can still be replayed. The protocol does not authenticate human users, provide anonymous authentication, or define authorization, and acceptance remains the origin's policy. The same identifier can be correlated across origins, so the protocol is unsuitable for agents that need to avoid identification. [1]",
   "v05_fuzzy_additions": [
    {
     "id": "what-a-web-bot-auth-signature-covers",
     "heading": "What a Web Bot Auth signature covers",
     "body_md": "Covered components are an authority component plus the `signature-agent` member, as in `(\"@authority\" \"signature-agent\";key=\"sig1\")`. `Signature-Input` carries `created`, `expires`, a thumbprint `keyid`, and `tag` set to `web-bot-auth`. `Signature-Agent` names where candidate key material can be found, and `keyid` selects the key that verifies the signature. [1]",
     "bullets": [
      {
       "label": "Authority coverage",
       "text_md": "Agents must cover `@authority` or `@target-uri`. `@authority` alone still verifies against any method, path, or body sent to that authority until `expires`. `@method`, `@path`, and `@query-param` narrow that reach, and a signer that omits them remains conformant. Body coverage requires `Content-Digest`, which the draft does not require. [1]"
      },
      {
       "label": "Required parameters",
       "text_md": "`@signature-params` must include `created`, `expires`, `keyid`, and `tag`. It is recommended that `expires` be no more than 24 hours after `created`. `keyid` must be a base64url JWK SHA-256 thumbprint—using the JWK thumbprint rules for `RSA` and `EC` and the `OKP` rules for `ed25519`—and `tag` must be `web-bot-auth`. [1]"
      },
      {
       "label": "Dictionary members",
       "text_md": "`Signature-Agent` is a Dictionary Structured Header of parameterless absolute `https` URIs (verifiers ignore parameterized members), and requests must include and sign the dictionary member keyed to the signature label. Cloudflare's documented verifier (updated `2026-10-08`) implements `draft-meunier-web-bot-auth-architecture-02` and the structured-string `Signature-Agent` (`\"https://signature-agent.test\"`) and key directory from `draft-meunier-http-message-signatures-directory-03`, rejecting the dictionary form (`sig2=\"https://signature-agent.test\"`), so `draft-ietf-webbotauth-httpsig-protocol-01` signers fail Cloudflare verification. [1][12]"
      },
      {
       "label": "Replay and extra signatures",
       "text_md": "`nonce` follows HTTP Message Signatures, and the draft adds no further nonce requirements. An origin may request `nonce` and may answer `429` when reuse exceeds policy. Each signature is validated independently. An outer signature that covers an inner one is evidence those bytes were present, and it does not validate the inner signature or express authorization, delegation, or consent. [1]"
      }
     ]
    },
    {
     "id": "how-verifiers-resolve-the-key-directory",
     "heading": "How verifiers resolve the key directory",
     "body_md": "Verifiers fetch the `Signature-Agent` URL directly as a JWK Set, strip any query component from the resolved URL identifier, and verify subsequent requests from cache. Section 7.1 (`Identification and Correlation`) of `draft-ietf-webbotauth-httpsig-protocol-01` notes that receivers can correlate the same identifier across origins and key rotations, making it unsuitable for agents avoiding identification or tied to an individual human rather than a service—a trade-off debated at IETF 124 (`2025-11-04`), the `2026-04-13` interim, and IETF 126 (`2026-07-22`), including the individual Internet-Draft `draft-rescorla-anonymous-webbotauth-01` (19 July 2026; `-00` presented on `2026-04-13`). For multi-tenant signing origins, individual Internet-Draft `draft-vilgalys-webbotauth-signed-agent-metadata-00` (2 November 2026) defines the `Signed-Agent-Metadata` RFC 9651 Dictionary header carrying optional pseudonymous `product`, `project`, and `session` keys inside the signature for per-tenant reputation isolation. [1][13][14][15][16][17]",
     "bullets": [
      {
       "label": "Directory fetch",
       "text_md": "The directory is a JWKS over HTTPS. The well-known retrieval is `GET /.well-known/http-message-signatures-directory` with media type `application/http-message-signatures-directory+json`. It must return `200`. Other statuses are discovery failures, and verifiers must not automatically follow HTTP redirects. The draft's directory response example uses `Cache-Control: max-age=86400` and keys with `kty`, `crv`, `kid`, `nbf`, and `exp`. [1]"
      },
      {
       "label": "Thumbprints",
       "text_md": "At the well-known URI, a JWK may carry `kid`, and when it does, `kid` must equal the Section 5.2 `keyid` thumbprint; elsewhere `kid` may be an operator-chosen label, and verifiers locate unmatched keys by computing thumbprints over the returned JWKs. Verifier key lookup must be indexed on the `(URL, key)` pair rather than on `keyid` alone so that a key copied into an unrelated directory cannot falsely attribute a signed request to a `Signature-Agent` URL that does not actually publish that key. [1]"
      },
      {
       "label": "Key rotation",
       "text_md": "Add the new key before its use date, keep the old key until expiration, then remove it. The directory cache lifetime bounds how long a removed key keeps verifying. Removal is not a revocation mechanism. `keyid` is derived from the key material and cannot carry continuity. The URL stays the identifier. [1]"
      },
      {
       "label": "Cache, redistribution, and Section 6 security rules",
       "text_md": "A resolved directory omitting a prior key replaces the cache entry so the removed key stops verifying, whereas failed fetches must not evict cached entries. When a third party redistributes cached directories out of band, verifiers attribute requests to the claimed `Signature-Agent` URL only if the redistributed directory carries an unexpired origin signature; otherwise they fall back to the raw key thumbprint and treat rotated keys as distinct identities. Section 6 (`Security Considerations`) of `draft-ietf-webbotauth-httpsig-protocol-01` forbids shared HMAC and production test keys (verifiers should reject known test keys), discourages cross-purpose key reuse and proxy signature stripping or replay, recommends SSRF-hardened directory fetch limits (bytes, key count, timeout, redirect depth, and private, loopback, or link-local address filtering), and forbids treating precomputed signatures as long-lived credentials. [1]"
      }
     ]
    }
   ],
   "v05_diagram": {
    "title": "Key resolution follows the first request",
    "heading": "Key resolution follows the first request",
    "mermaid": "sequenceDiagram\n    participant Agent\n    participant Origin\n    participant Directory\n    Agent->>Origin: Signed request plus Signature-Agent URL\n    opt Keys not yet resolved\n        Origin->>Directory: Resolve\n        Directory-->>Origin: Keys\n    end\n    Origin-->>Agent: Response",
    "caption_md": "The agent sends a signed request and a `Signature-Agent` URL. The origin resolves keys after the first request rather than before it. [1]"
   },
   "v05_wire_artifact": {
    "title": "Web Bot Auth signed request: Signature, Signature-Input, Signature-Agent",
    "heading": "Web Bot Auth signed request: Signature, Signature-Input, Signature-Agent",
    "lang": "http",
    "code": "# NOTE: '\\' line wrapping per RFC 8792\nGET /path/to/resource HTTP/1.1\nHost: origin.example.com\nSignature: sig=abc==\nSignature-Input: sig=(\"@authority\" \"signature-agent\";key=\"sig\");\\\n                 created=1700000000;\\\n                 expires=1700011111;\\\n                 keyid=\"ba3e64==\";\\\n                 tag=\"web-bot-auth\"\nSignature-Agent: sig=\"https://signer.example.com\"",
    "caption_md": "A signed request carries `Signature`, `Signature-Input`, and `Signature-Agent`, with `tag=\"web-bot-auth\"` (backslash line wrapping per `RFC 8792`). [1]"
   },
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "HTTP Message Signatures (RFC 9421)",
      "spec_or_rfc": "RFC 9421",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "Profiles RFC 9421 `Signature` and `Signature-Input` with `tag=\"web-bot-auth\"`, a `Signature-Agent` dictionary, and a well-known JWKS directory. [1]"
     },
     {
      "name": "Robots Exclusion Protocol (RFC 9309)",
      "spec_or_rfc": "RFC 9309",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Matches a domain-bound Web Bot Auth signer against crawler product tokens and rules declared in `robots.txt`. [1][2]"
     },
     {
      "name": "Reverse DNS & IP Allowlists",
      "spec_or_rfc": "rDNS / IP lists",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "Replaces IP allowlists and forward-confirmed reverse DNS checks with per-request HTTP cryptographic signatures independent of client IP. [1]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "http-message-signatures",
      "target_name": "HTTP Message Signatures",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "Uses RFC 9421 `Signature` and `Signature-Input` headers and adds `Signature-Agent` plus the `/.well-known/http-message-signatures-directory` JWKS endpoint. [1]"
     },
     {
      "target_id": "web-bot-auth-signature-agent-card",
      "target_name": "Signature Agent Card (Web Bot Auth registry)",
      "relation_type": "depended_on_by",
      "relation_label": "Depended on by",
      "delta_md": "Extends OAuth Client ID Metadata Documents with a `web_bot_auth` object for agents publishing Web Bot Auth key directories. [2]"
     },
     {
      "target_id": "ai-crawler-tokens-robots",
      "target_name": "AI crawler tokens in robots.txt",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Pairs cryptographic `Signature-Agent` domain verification with `robots.txt` crawler product tokens (`rfc9309-product-token`) rather than unverified `User-Agent` strings. [1][2]"
     },
     {
      "target_id": "cloudflare-pay-per-crawl",
      "target_name": "Cloudflare Pay Per Crawl",
      "relation_type": "depended_on_by",
      "relation_label": "Depended on by",
      "delta_md": "Authenticates participating crawlers at the edge via Web Bot Auth message signatures alongside Cloudflare Verified Bots and Pay Per Crawl. [18]"
     },
     {
      "target_id": "wimse",
      "target_name": "Workload Identity in Multi System Environments (WIMSE)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "The IETF `webbotauth` charter expects the working group to liaise with `AIPREF`, `HTTPBIS`, `OAUTH`, `TLS`, and `WIMSE` as appropriate on relevant documents. [6]"
     },
     {
      "target_id": "tap",
      "target_name": "Trusted Agent Protocol (TAP)",
      "relation_type": "depended_on_by",
      "relation_label": "Depended on by",
      "delta_md": "Uses RFC 9421 and Web Bot Auth edge signature verification alongside Visa's Trusted Agent Protocol. [19]"
     },
     {
      "target_id": "anonymous-bot-auth",
      "target_name": "Anonymous Bot Authentication",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "Identifies a persistent `Signature-Agent` URL across requests, whereas anonymous bot authentication avoids cross-origin request correlation. [1]"
     },
     {
      "target_id": "jafar",
      "target_name": "JAFAR: A JSON-Based Format for Publishing IP Ranges of Automated HTTP Clients",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Links an agent's JAFAR IP range list via `ips_uri` alongside cryptographic HTTP signatures verified through Web Bot Auth. [2]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (12 probed or cited examples across 3 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).",
    "side_a": {
     "visible": true,
     "heading": "Live bot signers & key directories",
     "col4_header": "Key directory URL & signature parameters",
     "note_md": null,
     "rows": [
      {
       "actor": "OpenAI (ChatGPT agent)",
       "role": "Bot / Agent signer",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Publishes `Ed25519` JWK (`purpose` `ai`) and directory-response signature headers; signature validation not established by HTTP observation.",
       "source_md": "[ChatGPT key directory](https://chatgpt.com/.well-known/http-message-signatures-directory) [20] · [Vercel changelog](https://vercel.com/changelog/vercels-bot-verification-now-supports-web-bot-auth) [21]"
      },
      {
       "actor": "Google (Google-Agent)",
       "role": "Bot / Agent signer",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Publishes five `Ed25519` JWKs and directory-response signature headers; experimentally signs a subset of `Google-Agent` requests.",
       "source_md": "[Google-Agent key directory](https://agent.bot.goog/.well-known/http-message-signatures-directory) [22] · [Authenticate requests with Web Bot Auth](https://developers.google.com/crawling/docs/crawlers-fetchers/web-bot-auth) [23]"
      },
      {
       "actor": "Browserbase",
       "role": "Bot / Agent signer",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Publishes two `Ed25519` JWKs (`purpose` `rag`) and directory-response signature headers; signature validation not established by HTTP observation.",
       "source_md": "[Browserbase key directory](https://www.browserbase.com/.well-known/http-message-signatures-directory) [24] · [What is Web Bot Auth?](https://www.browserbase.com/blog/what-is-web-bot-auth) [25]"
      },
      {
       "actor": "Shopify (Cloudsurf)",
       "role": "Bot / Agent signer",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Publishes `Ed25519` JWK (header `keyid` only) and directory-response signature headers; signature validation not established by HTTP observation.",
       "source_md": "[Cloudsurf key directory](https://cloudsurf.shopify.io/.well-known/http-message-signatures-directory) [26]"
      },
      {
       "actor": "Exa (ExaSearchBot)",
       "role": "Bot / Agent signer",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Publishes `Ed25519` JWK and directory-response signature headers; documents signing all `ExaSearchBot` requests under RFC 9421.",
       "source_md": "[ExaSearchBot key directory](https://crawler.exa.ai/.well-known/http-message-signatures-directory) [27] · [Exa Search Crawler](https://crawler.exa.ai/) [28]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "CDN, WAF & relying verifiers",
     "col4_header": "Verification boundary & directory check",
     "note_md": null,
     "rows": [
      {
       "actor": "Cloudflare",
       "role": "CDN / WAF verifier",
       "status": "Partial",
       "status_display": "Partial · as of 2026-10-08",
       "col4_md": "Validates edge signatures per `draft-meunier-web-bot-auth-architecture-02` and `draft-meunier-http-message-signatures-directory-03` structured-string `Signature-Agent` headers; Verified bots declare Web Bot Auth, IP, or reverse DNS identity, and BotBase tracks Direct versus Intermediary access.",
       "source_md": "[Web Bot Auth docs](https://developers.cloudflare.com/bots/reference/bot-verification/web-bot-auth/) [12] · [Verified bots with cryptography](https://blog.cloudflare.com/verified-bots-with-cryptography/) [18] · [draft-ietf-webbotauth-httpsig-protocol-01](https://www.ietf.org/archive/id/draft-ietf-webbotauth-httpsig-protocol-01.txt) [1] · [Verified bots](https://developers.cloudflare.com/bots/concepts/bot/verified-bots/) [29]"
      },
      {
       "actor": "Vercel",
       "role": "CDN / WAF verifier",
       "status": "Supported",
       "status_display": "Supported · as of 2025-08-12",
       "col4_md": "Vercel Bot Verification validates Web Bot Auth HTTP Message Signatures and allows signed ChatGPT operator requests.",
       "source_md": "[Vercel changelog](https://vercel.com/changelog/vercels-bot-verification-now-supports-web-bot-auth) [21]"
      },
      {
       "actor": "AWS WAF",
       "role": "CDN / WAF verifier",
       "status": "Partial",
       "status_display": "Partial · as of 2025-11-21",
       "col4_md": "Automatically allows verified Web Bot Auth AI agents on AWS WAF rules protecting Amazon CloudFront distributions.",
       "source_md": "[AWS What's New](https://aws.amazon.com/about-aws/whats-new/2025/11/aws-waf-web-bot-auth-support/) [8]"
      },
      {
       "actor": "hCaptcha",
       "role": "Relying server",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-02",
       "col4_md": "hCaptcha Enterprise validates Web Bot Auth (WBA) cryptographic signatures to identify partner AI agent platform traffic.",
       "source_md": "[hCaptcha blog](https://www.hcaptcha.com/blog/web-bot-auth) [30]"
      },
      {
       "actor": "HUMAN Security",
       "role": "Relying server",
       "status": "Partial",
       "status_display": "Partial · as of 2025-07-21",
       "col4_md": "Open-source HUMAN Verified AI Agent gateway verifies RFC 9421 request signatures against a public key registry.",
       "source_md": "[HUMAN Verified AI Agent](https://www.humansecurity.com/learn/blog/human-verified-ai-agent-open-source/) [31]"
      }
     ]
    },
    "additional_tables": [
     {
      "visible": true,
      "heading": "Reference signing clients & worker templates",
      "col4_header": "Draft revision & signing surface",
      "note_md": null,
      "rows": [
       {
        "actor": "HUMAN Verified AI Agents",
        "role": "Reference client",
        "status": "Reference implementation (pre-WG draft)",
        "status_display": "Reference implementation (pre-WG draft) · as of 2026-10-29",
        "col4_md": "Open-source Python reference client in Appendix F.1 targeting `draft-meunier-web-bot-auth-architecture-03`; `draft-ietf-webbotauth-httpsig-protocol-01` conformance not established.",
        "source_md": "[draft-ietf-webbotauth-httpsig-protocol-01](https://www.ietf.org/archive/id/draft-ietf-webbotauth-httpsig-protocol-01.txt) [1] · [HUMAN Verified AI Agent](https://www.humansecurity.com/learn/blog/human-verified-ai-agent-open-source/) [31]"
       },
       {
        "actor": "Cloudflare Workers",
        "role": "Reference client",
        "status": "Reference implementation (pre-WG draft)",
        "status_display": "Reference implementation (pre-WG draft) · as of 2026-10-29",
        "col4_md": "Open-source TypeScript reference client in Appendix F.1 (`https://github.com/cloudflare/web-bot-auth`) targeting `draft-meunier-webbotauth-httpsig-protocol-00`; `draft-ietf-webbotauth-httpsig-protocol-01` conformance not established.",
        "source_md": "[draft-ietf-webbotauth-httpsig-protocol-01](https://www.ietf.org/archive/id/draft-ietf-webbotauth-httpsig-protocol-01.txt) [1]"
       }
      ]
     }
    ],
    "censuses": [
     {
      "label": "Cloudflare Radar signature-agent-registry directory URLs",
      "as_of": "2026-10-30",
      "value_md": "528 distinct directory URLs ending in /.well-known/http-message-signatures-directory (plus https://www.sagelabs.ai) in Cloudflare Radar's signature-agent-registry.txt list, last-modified Fri, 30 Oct 2026 00:00:47 GMT. [32]"
     }
    ],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "iab-comp",
     "target_name": "CoMP (Content Monetization Protocols)",
     "relation_label": "Complements",
     "delta": "CoMP's AI Authentication Methods list labels value 3 as WebBot Auth, and its Package response points at license terms through licenseurl, while the Web Bot Auth working group standardizes cryptographic authentication of automated clients in HTTP Message Signatures for automated traffic.",
     "item_md": "**[CoMP (Content Monetization Protocols)](/protocols/iab-comp/)** (Complements) — CoMP's AI Authentication Methods list labels value 3 as WebBot Auth, and its Package response points at license terms through licenseurl, while the Web Bot Auth working group standardizes cryptographic authentication of automated clients in HTTP Message Signatures for automated traffic."
    },
    {
     "target_id": "x401",
     "target_name": "x401: HTTP Proof Requirement Protocol",
     "relation_label": "Peer alternative",
     "delta": "Web Bot Auth verifies an RFC 9421 Signature and Signature-Input plus a Signature-Agent key directory, while x401 carries a credential presentation in PROOF-RESPONSE.",
     "item_md": "**[x401: HTTP Proof Requirement Protocol](/protocols/x401/)** (Peer alternative) — Web Bot Auth verifies an RFC 9421 Signature and Signature-Input plus a Signature-Agent key directory, while x401 carries a credential presentation in PROOF-RESPONSE."
    },
    {
     "target_id": "idmandat-credential",
     "target_name": "ID MANDAT: A Machine-Readable Credential for the Agents of a Company",
     "relation_label": "Depended on by",
     "delta": "The stated prerequisite is Web Bot Auth, whose Signature, Signature-Input, and Signature-Agent headers identify the caller, while the credential file is /.well-known/idmandat.json.",
     "item_md": "**[ID MANDAT: A Machine-Readable Credential for the Agents of a Company](/protocols/idmandat-credential/)** (Depended on by) — The stated prerequisite is Web Bot Auth, whose Signature, Signature-Input, and Signature-Agent headers identify the caller, while the credential file is /.well-known/idmandat.json."
    },
    {
     "item_md": "**[Identify protocols](/category/identify/)** — Category index for `identify` standards."
    }
   ],
   "v05_compiled_md": "---\nid: webbotauth\ntitle: \"Web Bot Auth\"\ntier: flagship\nlifecycle_status: active_draft\ncategory: identify\nform: http-header\nwire_archetype: identity_auth_crypto\nspec_url: https://datatracker.ietf.org/doc/draft-ietf-webbotauth-httpsig-protocol/\nlast_checked: 2026-11-11\n---\n\n# Web Bot Auth\n\n**Category:** [Identify](/category/identify/) (`identify`) · **Form:** HTTP header (`http-header`) · **Last checked:** 2026-11-11\n\n> *This article covers the IETF Web Bot Auth protocol (`draft-ietf-webbotauth-httpsig-protocol`). For the underlying HTTP signature specification, see [HTTP Message Signatures](/protocols/http-message-signatures/); for the separate metadata card and registry draft, see [Signature Agent Card (Web Bot Auth registry)](/protocols/web-bot-auth-signature-agent-card/). [1][2]*\n\n> **In brief:** Web Bot Auth is a cryptographic authentication standard that lets AI crawlers, fetching agents, and automated HTTP bots prove their identity to websites without pre-shared API keys or bilateral onboarding. Instead of relying on spoofable `User-Agent` strings or brittle cloud IP allowlists, a bot signs outbound HTTP requests with `Signature-Input` and `Signature` headers and points the origin via `Signature-Agent` to its public key directory at `/.well-known/http-message-signatures-directory`. [1]\n\n**Web Bot Auth** is an IETF Standards Track protocol (`draft-ietf-webbotauth-httpsig-protocol-01`, originated by Thibault Meunier at Cloudflare on 2025-04-15 with co-author Sandor Major at Google) that cryptographically authenticates automated HTTP clients using HTTP Message Signatures (RFC 9421). Automated clients sign outbound requests and advertise an out-of-band key directory so origin servers can verify bot identity at the HTTP layer. [1][3] Each signed request carries `Signature-Input` (with tag `web-bot-auth`) and `Signature` headers alongside a `Signature-Agent` dictionary header pointing to an `https://` key directory at `/.well-known/http-message-signatures-directory` (`application/http-message-signatures-directory+json` `JWKS`). Origins that expect a signature may also solicit one on unsigned requests using the `Accept-Signature` header. [1] Initially published as `draft-meunier-web-bot-auth-architecture-00` and `draft-meunier-http-message-signatures-directory-00`, the specifications were consolidated into `draft-meunier-webbotauth-httpsig-protocol-01` on 2026-08-05, adopted by the IETF `webbotauth` working group (chartered 2025-10-23) as `draft-ietf-webbotauth-httpsig-protocol-00` on 2026-09-01, and updated to `-01` on 2026-10-29. [1][4][5][6][7]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Identify](/category/identify/) (`identify`) |\n| **Also known as** | WBA; HTTP Message Signatures for automated traffic [1][8] |\n| **Form** | HTTP header (`http-header`) |\n| **Originated by** | Thibault Meunier (Cloudflare, 15 April 2025) and Sandor Major (Google, 2026) [1][4][5] |\n| **Governed by** | IETF Web Bot Auth (`webbotauth`) Working Group (`wit` area; chartered 2025-10-23) [9][10] |\n| **Track** | IETF Standards Track Internet-Draft (`draft-ietf-webbotauth-httpsig-protocol-01`) [1] |\n| **IETF tracker** | [`draft-ietf-webbotauth-httpsig-protocol-01`](https://datatracker.ietf.org/doc/draft-ietf-webbotauth-httpsig-protocol/) · Active WG Document (`webbotauth`) · updated 2026-10-29 · expires 2 May 2027 [1][11] |\n| **Status** | Active WG Document (`I-D Exists`, updated 2026-10-29) [11] |\n| **Version** | `draft-ietf-webbotauth-httpsig-protocol-01` (29 October 2026; WG `-00` adopted 2026-09-01) [1][7] |\n| **Headers** | `Signature`, `Signature-Input` (`tag=\"web-bot-auth\"`), `Signature-Agent` (dictionary), and `Accept-Signature` [1] |\n| **Specification** | [HTTP Message Signatures for automated traffic](https://datatracker.ietf.org/doc/draft-ietf-webbotauth-httpsig-protocol/) [1][11] |\n| **Found at** | Direct HTTPS JWK Set URLs in `Signature-Agent`, including `/.well-known/http-message-signatures-directory` (`application/http-message-signatures-directory+json`) [1] |\n| **Licence** | IETF Trust Legal Provisions (BCP 78) [11] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [What a Web Bot Auth signature covers](#what-a-web-bot-auth-signature-covers)\n3. [How verifiers resolve the key directory](#how-verifiers-resolve-the-key-directory)\n4. [Counterparts and related standards](#counterparts-and-related-standards)\n5. [Adoption and ecosystem](#adoption-and-ecosystem)\n6. [See also](#see-also)\n7. [References](#references)\n\n---\n\n## Problem and scope\n\nIP allowlisting, User-Agent strings, and shared API keys have significant limitations in security, scalability, and manageability. A `User-Agent` alone can be spoofed, and a Chromium-based agent may still need its own traffic differentiated. Cloud IP blocks stack platform ownership over the service renting the address. Sharing a bearer secret with every site is impractical beyond select partnerships, and rotation becomes less secure as consumers scale. [1] Signatures are generated and verified at the HTTP layer without modifying the TLS stack, and no pre-established relationship is required. The identifier is the `Signature-Agent` URL the verifier fetched, paired with a key that URL provides. Origins can log, rate limit, allowlist, or block that URL, and key rotation keeps the same URL. [1] A valid signature proves that a holder of a published key signed the covered message. The message can still be replayed. The protocol does not authenticate human users, provide anonymous authentication, or define authorization, and acceptance remains the origin's policy. The same identifier can be correlated across origins, so the protocol is unsuitable for agents that need to avoid identification. [1]\n\n### Key resolution follows the first request\n\n```mermaid\nsequenceDiagram\n    participant Agent\n    participant Origin\n    participant Directory\n    Agent->>Origin: Signed request plus Signature-Agent URL\n    opt Keys not yet resolved\n        Origin->>Directory: Resolve\n        Directory-->>Origin: Keys\n    end\n    Origin-->>Agent: Response\n```\n\n*The agent sends a signed request and a `Signature-Agent` URL. The origin resolves keys after the first request rather than before it. [1]*\n\n### Web Bot Auth signed request: Signature, Signature-Input, Signature-Agent\n\n```http\n# NOTE: '\\' line wrapping per RFC 8792\nGET /path/to/resource HTTP/1.1\nHost: origin.example.com\nSignature: sig=abc==\nSignature-Input: sig=(\"@authority\" \"signature-agent\";key=\"sig\");\\\n                 created=1700000000;\\\n                 expires=1700011111;\\\n                 keyid=\"ba3e64==\";\\\n                 tag=\"web-bot-auth\"\nSignature-Agent: sig=\"https://signer.example.com\"\n```\n\n*A signed request carries `Signature`, `Signature-Input`, and `Signature-Agent`, with `tag=\"web-bot-auth\"` (backslash line wrapping per `RFC 8792`). [1]*\n\n---\n\n## What a Web Bot Auth signature covers\n\nCovered components are an authority component plus the `signature-agent` member, as in `(\"@authority\" \"signature-agent\";key=\"sig1\")`. `Signature-Input` carries `created`, `expires`, a thumbprint `keyid`, and `tag` set to `web-bot-auth`. `Signature-Agent` names where candidate key material can be found, and `keyid` selects the key that verifies the signature. [1]\n\n- **Authority coverage:** Agents must cover `@authority` or `@target-uri`. `@authority` alone still verifies against any method, path, or body sent to that authority until `expires`. `@method`, `@path`, and `@query-param` narrow that reach, and a signer that omits them remains conformant. Body coverage requires `Content-Digest`, which the draft does not require. [1]\n- **Required parameters:** `@signature-params` must include `created`, `expires`, `keyid`, and `tag`. It is recommended that `expires` be no more than 24 hours after `created`. `keyid` must be a base64url JWK SHA-256 thumbprint—using the JWK thumbprint rules for `RSA` and `EC` and the `OKP` rules for `ed25519`—and `tag` must be `web-bot-auth`. [1]\n- **Dictionary members:** `Signature-Agent` is a Dictionary Structured Header of parameterless absolute `https` URIs (verifiers ignore parameterized members), and requests must include and sign the dictionary member keyed to the signature label. Cloudflare's documented verifier (updated `2026-10-08`) implements `draft-meunier-web-bot-auth-architecture-02` and the structured-string `Signature-Agent` (`\"https://signature-agent.test\"`) and key directory from `draft-meunier-http-message-signatures-directory-03`, rejecting the dictionary form (`sig2=\"https://signature-agent.test\"`), so `draft-ietf-webbotauth-httpsig-protocol-01` signers fail Cloudflare verification. [1][12]\n- **Replay and extra signatures:** `nonce` follows HTTP Message Signatures, and the draft adds no further nonce requirements. An origin may request `nonce` and may answer `429` when reuse exceeds policy. Each signature is validated independently. An outer signature that covers an inner one is evidence those bytes were present, and it does not validate the inner signature or express authorization, delegation, or consent. [1]\n\n---\n\n## How verifiers resolve the key directory\n\nVerifiers fetch the `Signature-Agent` URL directly as a JWK Set, strip any query component from the resolved URL identifier, and verify subsequent requests from cache. Section 7.1 (`Identification and Correlation`) of `draft-ietf-webbotauth-httpsig-protocol-01` notes that receivers can correlate the same identifier across origins and key rotations, making it unsuitable for agents avoiding identification or tied to an individual human rather than a service—a trade-off debated at IETF 124 (`2025-11-04`), the `2026-04-13` interim, and IETF 126 (`2026-07-22`), including the individual Internet-Draft `draft-rescorla-anonymous-webbotauth-01` (19 July 2026; `-00` presented on `2026-04-13`). For multi-tenant signing origins, individual Internet-Draft `draft-vilgalys-webbotauth-signed-agent-metadata-00` (2 November 2026) defines the `Signed-Agent-Metadata` RFC 9651 Dictionary header carrying optional pseudonymous `product`, `project`, and `session` keys inside the signature for per-tenant reputation isolation. [1][13][14][15][16][17]\n\n- **Directory fetch:** The directory is a JWKS over HTTPS. The well-known retrieval is `GET /.well-known/http-message-signatures-directory` with media type `application/http-message-signatures-directory+json`. It must return `200`. Other statuses are discovery failures, and verifiers must not automatically follow HTTP redirects. The draft's directory response example uses `Cache-Control: max-age=86400` and keys with `kty`, `crv`, `kid`, `nbf`, and `exp`. [1]\n- **Thumbprints:** At the well-known URI, a JWK may carry `kid`, and when it does, `kid` must equal the Section 5.2 `keyid` thumbprint; elsewhere `kid` may be an operator-chosen label, and verifiers locate unmatched keys by computing thumbprints over the returned JWKs. Verifier key lookup must be indexed on the `(URL, key)` pair rather than on `keyid` alone so that a key copied into an unrelated directory cannot falsely attribute a signed request to a `Signature-Agent` URL that does not actually publish that key. [1]\n- **Key rotation:** Add the new key before its use date, keep the old key until expiration, then remove it. The directory cache lifetime bounds how long a removed key keeps verifying. Removal is not a revocation mechanism. `keyid` is derived from the key material and cannot carry continuity. The URL stays the identifier. [1]\n- **Cache, redistribution, and Section 6 security rules:** A resolved directory omitting a prior key replaces the cache entry so the removed key stops verifying, whereas failed fetches must not evict cached entries. When a third party redistributes cached directories out of band, verifiers attribute requests to the claimed `Signature-Agent` URL only if the redistributed directory carries an unexpired origin signature; otherwise they fall back to the raw key thumbprint and treat rotated keys as distinct identities. Section 6 (`Security Considerations`) of `draft-ietf-webbotauth-httpsig-protocol-01` forbids shared HMAC and production test keys (verifiers should reject known test keys), discourages cross-purpose key reuse and proxy signature stripping or replay, recommends SSRF-hardened directory fetch limits (bytes, key count, timeout, redirect depth, and private, loopback, or link-local address filtering), and forbids treating precomputed signatures as long-lived credentials. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **HTTP Message Signatures (RFC 9421)** | `RFC 9421` | Profiles classic standard | Profiles RFC 9421 `Signature` and `Signature-Input` with `tag=\"web-bot-auth\"`, a `Signature-Agent` dictionary, and a well-known JWKS directory. [1] |\n| **Robots Exclusion Protocol (RFC 9309)** | `RFC 9309` | Complements | Matches a domain-bound Web Bot Auth signer against crawler product tokens and rules declared in `robots.txt`. [1][2] |\n| **Reverse DNS & IP Allowlists** | `rDNS / IP lists` | Analogous to classic standard | Replaces IP allowlists and forward-confirmed reverse DNS checks with per-request HTTP cryptographic signatures independent of client IP. [1] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[HTTP Message Signatures](/protocols/http-message-signatures/)** | Builds on | Uses RFC 9421 `Signature` and `Signature-Input` headers and adds `Signature-Agent` plus the `/.well-known/http-message-signatures-directory` JWKS endpoint. [1] |\n| **[Signature Agent Card (Web Bot Auth registry)](/protocols/web-bot-auth-signature-agent-card/)** | Depended on by | Extends OAuth Client ID Metadata Documents with a `web_bot_auth` object for agents publishing Web Bot Auth key directories. [2] |\n| **[AI crawler tokens in robots.txt](/protocols/ai-crawler-tokens-robots/)** | Complements | Pairs cryptographic `Signature-Agent` domain verification with `robots.txt` crawler product tokens (`rfc9309-product-token`) rather than unverified `User-Agent` strings. [1][2] |\n| **[Cloudflare Pay Per Crawl](/protocols/cloudflare-pay-per-crawl/)** | Depended on by | Authenticates participating crawlers at the edge via Web Bot Auth message signatures alongside Cloudflare Verified Bots and Pay Per Crawl. [18] |\n| **[Workload Identity in Multi System Environments (WIMSE)](/protocols/wimse/)** | Complements | The IETF `webbotauth` charter expects the working group to liaise with `AIPREF`, `HTTPBIS`, `OAUTH`, `TLS`, and `WIMSE` as appropriate on relevant documents. [6] |\n| **[Trusted Agent Protocol (TAP)](/protocols/tap/)** | Depended on by | Uses RFC 9421 and Web Bot Auth edge signature verification alongside Visa's Trusted Agent Protocol. [19] |\n| **[Anonymous Bot Authentication](/protocols/anonymous-bot-auth/)** | Peer alternative | Identifies a persistent `Signature-Agent` URL across requests, whereas anonymous bot authentication avoids cross-origin request correlation. [1] |\n| **[JAFAR: A JSON-Based Format for Publishing IP Ranges of Automated HTTP Clients](/protocols/jafar/)** | Complements | Links an agent's JAFAR IP range list via `ips_uri` alongside cryptographic HTTP signatures verified through Web Bot Auth. [2] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (12 probed or cited examples across 3 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).*\n\n### Live bot signers & key directories\n\n| Actor | Role | Status | Key directory URL & signature parameters | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **OpenAI (ChatGPT agent)** | Bot / Agent signer | Live (HTTP 200) · checked 2026-10-30 | Publishes `Ed25519` JWK (`purpose` `ai`) and directory-response signature headers; signature validation not established by HTTP observation. | [ChatGPT key directory](https://chatgpt.com/.well-known/http-message-signatures-directory) [20] · [Vercel changelog](https://vercel.com/changelog/vercels-bot-verification-now-supports-web-bot-auth) [21] |\n| **Google (Google-Agent)** | Bot / Agent signer | Live (HTTP 200) · checked 2026-10-30 | Publishes five `Ed25519` JWKs and directory-response signature headers; experimentally signs a subset of `Google-Agent` requests. | [Google-Agent key directory](https://agent.bot.goog/.well-known/http-message-signatures-directory) [22] · [Authenticate requests with Web Bot Auth](https://developers.google.com/crawling/docs/crawlers-fetchers/web-bot-auth) [23] |\n| **Browserbase** | Bot / Agent signer | Live (HTTP 200) · checked 2026-10-30 | Publishes two `Ed25519` JWKs (`purpose` `rag`) and directory-response signature headers; signature validation not established by HTTP observation. | [Browserbase key directory](https://www.browserbase.com/.well-known/http-message-signatures-directory) [24] · [What is Web Bot Auth?](https://www.browserbase.com/blog/what-is-web-bot-auth) [25] |\n| **Shopify (Cloudsurf)** | Bot / Agent signer | Live (HTTP 200) · checked 2026-10-30 | Publishes `Ed25519` JWK (header `keyid` only) and directory-response signature headers; signature validation not established by HTTP observation. | [Cloudsurf key directory](https://cloudsurf.shopify.io/.well-known/http-message-signatures-directory) [26] |\n| **Exa (ExaSearchBot)** | Bot / Agent signer | Live (HTTP 200) · checked 2026-10-30 | Publishes `Ed25519` JWK and directory-response signature headers; documents signing all `ExaSearchBot` requests under RFC 9421. | [ExaSearchBot key directory](https://crawler.exa.ai/.well-known/http-message-signatures-directory) [27] · [Exa Search Crawler](https://crawler.exa.ai/) [28] |\n\n### CDN, WAF & relying verifiers\n\n| Actor | Role | Status | Verification boundary & directory check | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Cloudflare** | CDN / WAF verifier | Partial · as of 2026-10-08 | Validates edge signatures per `draft-meunier-web-bot-auth-architecture-02` and `draft-meunier-http-message-signatures-directory-03` structured-string `Signature-Agent` headers; Verified bots declare Web Bot Auth, IP, or reverse DNS identity, and BotBase tracks Direct versus Intermediary access. | [Web Bot Auth docs](https://developers.cloudflare.com/bots/reference/bot-verification/web-bot-auth/) [12] · [Verified bots with cryptography](https://blog.cloudflare.com/verified-bots-with-cryptography/) [18] · [draft-ietf-webbotauth-httpsig-protocol-01](https://www.ietf.org/archive/id/draft-ietf-webbotauth-httpsig-protocol-01.txt) [1] · [Verified bots](https://developers.cloudflare.com/bots/concepts/bot/verified-bots/) [29] |\n| **Vercel** | CDN / WAF verifier | Supported · as of 2025-08-12 | Vercel Bot Verification validates Web Bot Auth HTTP Message Signatures and allows signed ChatGPT operator requests. | [Vercel changelog](https://vercel.com/changelog/vercels-bot-verification-now-supports-web-bot-auth) [21] |\n| **AWS WAF** | CDN / WAF verifier | Partial · as of 2025-11-21 | Automatically allows verified Web Bot Auth AI agents on AWS WAF rules protecting Amazon CloudFront distributions. | [AWS What's New](https://aws.amazon.com/about-aws/whats-new/2025/11/aws-waf-web-bot-auth-support/) [8] |\n| **hCaptcha** | Relying server | Supported · as of 2026-10-02 | hCaptcha Enterprise validates Web Bot Auth (WBA) cryptographic signatures to identify partner AI agent platform traffic. | [hCaptcha blog](https://www.hcaptcha.com/blog/web-bot-auth) [30] |\n| **HUMAN Security** | Relying server | Partial · as of 2025-07-21 | Open-source HUMAN Verified AI Agent gateway verifies RFC 9421 request signatures against a public key registry. | [HUMAN Verified AI Agent](https://www.humansecurity.com/learn/blog/human-verified-ai-agent-open-source/) [31] |\n\n### Reference signing clients & worker templates\n\n| Actor | Role | Status | Draft revision & signing surface | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **HUMAN Verified AI Agents** | Reference client | Reference implementation (pre-WG draft) · as of 2026-10-29 | Open-source Python reference client in Appendix F.1 targeting `draft-meunier-web-bot-auth-architecture-03`; `draft-ietf-webbotauth-httpsig-protocol-01` conformance not established. | [draft-ietf-webbotauth-httpsig-protocol-01](https://www.ietf.org/archive/id/draft-ietf-webbotauth-httpsig-protocol-01.txt) [1] · [HUMAN Verified AI Agent](https://www.humansecurity.com/learn/blog/human-verified-ai-agent-open-source/) [31] |\n| **Cloudflare Workers** | Reference client | Reference implementation (pre-WG draft) · as of 2026-10-29 | Open-source TypeScript reference client in Appendix F.1 (`https://github.com/cloudflare/web-bot-auth`) targeting `draft-meunier-webbotauth-httpsig-protocol-00`; `draft-ietf-webbotauth-httpsig-protocol-01` conformance not established. | [draft-ietf-webbotauth-httpsig-protocol-01](https://www.ietf.org/archive/id/draft-ietf-webbotauth-httpsig-protocol-01.txt) [1] |\n\n### Ecosystem censuses\n\n- **Cloudflare Radar signature-agent-registry directory URLs** (*as of 2026-10-30*): 528 distinct directory URLs ending in /.well-known/http-message-signatures-directory (plus https://www.sagelabs.ai) in Cloudflare Radar's signature-agent-registry.txt list, last-modified Fri, 30 Oct 2026 00:00:47 GMT. [32]\n\n---\n\n## See also\n\n- **[CoMP (Content Monetization Protocols)](/protocols/iab-comp/)** *(Complements)* — CoMP's AI Authentication Methods list labels value 3 as WebBot Auth, and its Package response points at license terms through licenseurl, while the Web Bot Auth working group standardizes cryptographic authentication of automated clients in HTTP Message Signatures for automated traffic.\n- **[x401: HTTP Proof Requirement Protocol](/protocols/x401/)** *(Peer alternative)* — Web Bot Auth verifies an RFC 9421 Signature and Signature-Input plus a Signature-Agent key directory, while x401 carries a credential presentation in PROOF-RESPONSE.\n- **[ID MANDAT: A Machine-Readable Credential for the Agents of a Company](/protocols/idmandat-credential/)** *(Depended on by)* — The stated prerequisite is Web Bot Auth, whose Signature, Signature-Input, and Signature-Agent headers identify the caller, while the credential file is /.well-known/idmandat.json.\n- **Category:** [Identify protocols](/category/identify/)\n\n---\n\n## References\n\n1. T. Meunier (Cloudflare) and S. Major (Google), *HTTP Message Signatures for automated traffic (draft-ietf-webbotauth-httpsig-protocol-01)* (draft-ietf-webbotauth-httpsig-protocol-01, 29 October 2026) — <https://www.ietf.org/archive/id/draft-ietf-webbotauth-httpsig-protocol-01.txt>\n2. Maxime Guerreiro, Ulas Kirazci, and Thibault Meunier, *draft-meunier-webbotauth-registry — Registry and Signature Agent card for Web bot auth (IETF Datatracker)* (individual draft; last updated 2026-10-27) — <https://datatracker.ietf.org/doc/draft-meunier-webbotauth-registry/>\n3. IETF Datatracker, *draft-meunier-web-bot-auth-architecture — HTTP Message Signatures for automated traffic Architecture (IETF Datatracker)* (authors Thibault Meunier, Sandor Major; last updated 2026-03-02) — <https://datatracker.ietf.org/doc/draft-meunier-web-bot-auth-architecture/>\n4. T. Meunier (Cloudflare), *HTTP Message Signatures for automated traffic Architecture (draft-meunier-web-bot-auth-architecture-00)* (draft-meunier-web-bot-auth-architecture-00, 15 April 2025) — <https://www.ietf.org/archive/id/draft-meunier-web-bot-auth-architecture-00.txt>\n5. T. Meunier (Cloudflare), *HTTP Message Signatures Directory (draft-meunier-http-message-signatures-directory-00)* (draft-meunier-http-message-signatures-directory-00, 15 April 2025) — <https://www.ietf.org/archive/id/draft-meunier-http-message-signatures-directory-00.txt>\n6. IETF, *Web Bot Auth (webbotauth working group charter)* (state Approved; last updated 2025-10-23) — <https://datatracker.ietf.org/doc/charter-ietf-webbotauth/>\n7. IETF Datatracker, *draft-ietf-webbotauth-httpsig-protocol history* (current tracker, checked 2026-10-30 (latest revision -01 dated 2026-10-29)) — <https://datatracker.ietf.org/doc/draft-ietf-webbotauth-httpsig-protocol/history/>\n8. AWS What's New, *AWS WAF announces Web Bot Auth support* (posted 2025-11-21) — <https://aws.amazon.com/about-aws/whats-new/2025/11/aws-waf-web-bot-auth-support/>\n9. IETF Datatracker, *Web Bot Auth (webbotauth) working group* (area Web and Internet Transport; milestones 2026-04-30 and 2026-08-31) — <https://datatracker.ietf.org/wg/webbotauth/about/>\n10. IETF Datatracker, *Web Bot Auth (webbotauth) group history* (charter approved 2025-10-23) — <https://datatracker.ietf.org/wg/webbotauth/history/>\n11. IETF Datatracker, *draft-ietf-webbotauth-httpsig-protocol — HTTP Message Signatures for automated traffic (IETF Datatracker)* (current tracker, checked 2026-10-30 (latest revision -01 dated 2026-10-29)) — <https://datatracker.ietf.org/doc/draft-ietf-webbotauth-httpsig-protocol/>\n12. Cloudflare, *Web Bot Auth* (bot solutions docs; last updated 2026-10-08) — <https://developers.cloudflare.com/bots/reference/bot-verification/web-bot-auth/>\n13. IETF Web Bot Auth (webbotauth) WG, *Minutes IETF124: webbotauth: Tue 19:30 (minutes-124-webbotauth-202511041930-00)* (session 2025-11-04; last updated 2025-11-08) — <https://datatracker.ietf.org/doc/minutes-124-webbotauth-202511041930/>\n14. IETF Web Bot Auth (webbotauth) WG, *Minutes interim-2026-webbotauth-02: Mon 17:00 (minutes-interim-2026-webbotauth-02-202604131700-00)* (session 2026-04-13; last updated 2026-04-16) — <https://datatracker.ietf.org/doc/minutes-interim-2026-webbotauth-02-202604131700/>\n15. IETF Web Bot Auth (webbotauth) WG, *Minutes IETF126: webbotauth (minutes-126-webbotauth-00)* (session 2026-07-22; last updated 2026-07-23) — <https://datatracker.ietf.org/doc/minutes-126-webbotauth/>\n16. E. Rescorla (Independent) and R. L. Barnes (Cisco), *Anonymous Bot Authentication: Authorization and Rate Limiting for Web Agents (draft-rescorla-anonymous-webbotauth-01)* (19 July 2026) — <https://www.ietf.org/archive/id/draft-rescorla-anonymous-webbotauth-01.txt>\n17. R. Vilgalys and P. Gonzalez (Google), *The Signed-Agent-Metadata HTTP Header Field for Web Bot Auth (draft-vilgalys-webbotauth-signed-agent-metadata-00)* (2 November 2026; expires 6 May 2027) — <https://www.ietf.org/archive/id/draft-vilgalys-webbotauth-signed-agent-metadata-00.txt>\n18. Cloudflare Blog, *Message Signatures are now part of our Verified Bots Program, simplifying bot authentication* (published 2025-07-01; modified 2026-07-15) — <https://blog.cloudflare.com/verified-bots-with-cryptography/>\n19. Rupesh Chokshi, Akamai Blog, *Redefine Trust with Web Bot Authentication* (posted 2025-11-10; archived 2026-06-09) — <https://web.archive.org/web/20260609113733/https://www.akamai.com/blog/security/redefine-trust-web-bot-authentication>\n20. OpenAI, *ChatGPT key directory* (response dated Fri, 30 Oct 2026; fetched 2026-10-30) — <https://chatgpt.com/.well-known/http-message-signatures-directory>\n21. Vercel changelog, *Vercel's bot verification now supports Web Bot Auth* (published 2025-08-12; modified 2026-09-02) — <https://vercel.com/changelog/vercels-bot-verification-now-supports-web-bot-auth>\n22. Google, *Google-Agent key directory* (response dated Fri, 30 Oct 2026; fetched 2026-10-30) — <https://agent.bot.goog/.well-known/http-message-signatures-directory>\n23. Google for Developers, *Authenticate requests with Web Bot Auth (experimental)* (last updated 2026-10-13 UTC) — <https://developers.google.com/crawling/docs/crawlers-fetchers/web-bot-auth>\n24. Browserbase, *Browserbase key directory* (response dated Fri, 30 Oct 2026; fetched 2026-10-30) — <https://www.browserbase.com/.well-known/http-message-signatures-directory>\n25. Harsehaj Dhami, Browserbase Blog, *What is Web Bot Auth?* (published 2026-09-30) — <https://www.browserbase.com/blog/what-is-web-bot-auth>\n26. Shopify, *Cloudsurf key directory* (response dated Fri, 30 Oct 2026; fetched 2026-10-30) — <https://cloudsurf.shopify.io/.well-known/http-message-signatures-directory>\n27. Exa, *ExaSearchBot key directory* (response dated Fri, 30 Oct 2026; fetched 2026-10-30) — <https://crawler.exa.ai/.well-known/http-message-signatures-directory>\n28. Exa, *Exa Search Crawler* (last updated 2026-07-30) — <https://crawler.exa.ai/>\n29. Cloudflare, *Verified bots* (bot solutions docs; last updated Nov 2, 2026) — <https://developers.cloudflare.com/bots/concepts/bot/verified-bots/>\n30. hCaptcha Blog, *Web Bot Auth: How hCaptcha Supports it* (published 2026-10-02) — <https://www.hcaptcha.com/blog/web-bot-auth>\n31. Ben Diamant and Tomer Elias, HUMAN Security Blog, *Introducing HUMAN Verified AI Agent: An Open-Source Foundation for Trustworthy Agent Identity* (published 2025-07-21) — <https://www.humansecurity.com/learn/blog/human-verified-ai-agent-open-source/>\n32. Cloudflare Radar, *signature-agent-registry.txt* (key-directory URL list; last-modified 2026-10-30) — <https://assets.radar.cloudflare.com/bots/signature-agent-registry.txt>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "",
   "adoption": {
    "level": "observed",
    "by": "Cloudflare Radar, Amazon Bedrock AgentCore Browser, WebBotAuth.net, and web-bot-auth SDK (Cloudflare)",
    "probe_run": null
   },
   "aliases": [
    "Signature Agent Card",
    "Registry and Signature Agent card for Web bot auth"
   ],
   "analog": "OAuth Dynamic Client Registration metadata / client_id document",
   "collisions": [],
   "discovery": {
    "mechanism": "jwks_uri client-metadata field (or a plain client_id JSON document) resolvable at a well-known path",
    "path": "/.well-known/http-message-signatures-directory"
   },
   "dispute": {
    "claims": [
     "Whether this draft will be adopted by the webbotauth WG (as its sibling httpsig-protocol draft was) or superseded is not yet resolved."
    ],
    "summary": "While its title names the Signature-Agent card format, the draft text also functions as the IANA registry establishment document for the web_bot_auth metadata namespace, and its examples show operators listing multiple bot/platform cards (crawlers, gateways) at a shared discovery path, not just one card per origin."
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.ietf.org/archive/id/draft-meunier-webbotauth-registry-04.txt",
     "claim": "M. Guerreiro (Cloudflare), U. Kirazci (Amazon), and T. Meunier (Cloudflare), *Registry and Signature Agent card for Web bot auth (draft-meunier-webbotauth-registry-04)*, checked 2026-10-30",
     "date": null,
     "quote": "This document defines the \"Signature Agent Card\", a JSON metadata document that a signature agent using HTTP Message Signatures for bots publishes to describe itself: its identity, purpose, rate expectations, and cryptographic keys. Its parameters are drawn from the OAuth Dynamic Client Registration Metadata registry, the same namespace used by OAuth Client ID Metadata Documents, extended with a single web_bot_auth object. This document registers that object with IANA and establishes a registry for its members. / This document defines the \"Signature Agent Card\", a JSON metadata document that a signature agent using HTTP Message Signatures for bots publishes to describe itself: its identity, purpose, rate expectations, and cryptographic keys. Its parameters are drawn from the OAuth Dynamic Client Registration Metadata registry, the same namespace used by OAuth Client ID Metadata Documents, extended with a single web_bot_auth object. / Maxime Guerreiro Cloudflare ... Ulas Kirazci Amazon ... Thibault Meunier Cloudflare / Intended status: Informational U. Kirazci Expires: 30 April 2027 Amazon T. Meunier Cloudflare 27 October 2026 / A client retrieving a card from a URL MUST use the GET method, MUST treat any status code other than 200 (OK) as an error, and MUST NOT follow HTTP redirects. The client_id value in the returned document MUST be identical to the URL used to retrieve it, compared as described in Section 6.2.1 of [RFC3986] (simple string comparison). / This document defines the type member parameter with the value cimd: the member value is then the client_id of a Signature Agent Card, resolved as described in Section 4.1, and the keys are the card's keys. / draft-meunier-webbotauth-registry-04 * Align with draft-ietf-webbotauth-httpsig-protocol; define type=cimd. * Allow JWK Set registry entries, selected by media type. * Make rfc9309-compliance a boolean. * Move change notifications to an appendix. / 2026 draft-meunier-webbotauth-registry-00 * Initial draft. Authors' Addresses Maxime Guerreiro Cloudflare Email: [email redacted] Ulas Kirazci / Web Bot Auth M. Guerreiro Internet-Draft Cloudflare Intended status: Informational U. Kirazci Expires: 30 / IANA is requested to register the following parameter in the \"OAuth Dynamic Client Registration Metadata\" registry established by [DCR]. *Client Metadata Name:* web_bot_auth / Web Bot Auth M. Guerreiro Internet-Draft Cloudflare Intended status: Informational / https://www.ietf.org/mailman/listinfo/web-bot-auth/. Source for this draft and an issue tracker can be found at https://github.com/thibmeu/draft-meunier-webbotauth-registry. / for Web bot auth draft-meunier-webbotauth-registry-04 Abstract This document defines the \"Signature Agent Card\", a / A Signature-Agent member value is a JWK Set URL (Section 5.2.1 of [PROTOCOL]). This document defines the type member parameter with the value cimd: the member value is then the client_id of a Signature Agent Card, resolved as described in Section 4.1, and the keys are the card's keys. Signature-Agent: sig1=\"https://example.com/bot\";type=cimd [PROTOCOL] requires verifiers to ignore members with parameters. A verifier that does not implement this document therefore ignores a type=cimd member and cannot attribute the signature to it. / Signature Agents are entities that originate or forward signed HTTP requests on behalf of users or services. They include bots developers, platforms providers, and other intermediaries using [PROTOCOL]. These agents often need to identify themselves, and establish trust with origin servers. / Today, the mechanisms for doing so are inconsistent: some rely on User-Agent strings (e.g. MyCompanyBot/1.0), others on IP address lists hosted on file servers ... and still others on out-of-band definitions ... This diversity makes it ... difficult for operators and origin servers to reliably discover and share a Signature Agent's purpose, contact information, or rate expectations. / The OAuth Client ID Metadata Document [CIMD] already defines a resolvable identity: a client_id that is an HTTPS URL dereferencing to a JSON metadata document. This document reuses it. A Signature Agent Card takes the client metadata parameters that [CIMD] draws from [DCR], and adds bot-specific information in a single web_bot_auth object. An existing Client ID Metadata Document is therefore a valid Signature Agent Card. / A client that does not understand the web_bot_auth object ignores it. / A valid card shows that whoever controls the client_id URL published it. As Section 4.4 of [PROTOCOL] puts it for keys, this does not mean the operator is honest. Every member of web_bot_auth, such as purpose, rfc9309-compliance, or rate-expectation, is a claim made by the Signature Agent. Clients MUST NOT treat these values as verified behavior. / https://crawler2.example.com/.well-known/http-message-signatures-directory # A platform, by its Signature Agent Card https://zerotrust-gateway.example.com/v1/signature-agent-card # An inline card",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://datatracker.ietf.org/doc/draft-meunier-webbotauth-registry/doc.json",
     "claim": "IETF Datatracker, *IETF Datatracker document JSON metadata for draft-meunier-webbotauth-registry*, checked 2026-10-30",
     "date": null,
     "quote": "\"name\": \"draft-meunier-webbotauth-registry\", \"rev\": \"04\" ... \"name\": \"Individual Submissions\", \"type\": \"Individual\" ... \"state\": \"Active\" ... \"iesg_state\": \"I-D Exists\" / \"time\": \"2026-10-27 11:59:05\" ... \"expires\": \"2027-04-30 11:59:05\" ... \"rev\": \"00\", \"published\": \"2025-09-05 ... \"rev\": \"01\", \"published\": \"2025-10-20 ... \"rev\": \"02\", \"published\": \"2026-05-26 ... \"rev\": \"03\", \"published\": \"2026-06-26 ... \"rev\": \"04\", \"published\": \"2026-10-27 / Guerreiro\",\"email\":\"[email redacted]\",\"affiliation\":\"Cloudflare\" }, {\"name\":\"Ulas Kirazci\",\"email\":\"[email redacted]\",\"affiliation\":\"Amazon\" }, {\"name\":\"Thibault / for Web bot auth\",\"abstract\":{\"name\":\"draft-meunier-webbotauth-registry\",\"rev\":\"04\",\"pages\":26,\"time\":\"2026-10-27 11:59:05\",\"group\":{\"name\":\"Individual Submissions\",\"type\":\"Individual\",\"acronym\":\"none\" }, / and Signature Agent card for Web bot auth\",\"abstract\":{\"name\":\"draft-meunier-webbotauth-registry\",\"rev\":\"04\",\"pages\":26,\"time\":\"2026-10-27 11:59:05\",\"group\":{\"name\":\"Individual",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://www.ietf.org/archive/id/draft-meunier-webbotauth-registry-00.txt",
     "claim": "M. Guerreiro and T. Meunier (Cloudflare), *Registry and Signature Agent card for Web bot auth (draft-meunier-webbotauth-registry-00)*, checked 2026-10-30",
     "date": null,
     "quote": "[email redacted] Thibault Meunier Cloudflare Email: [email redacted] Guerreiro & Meunier Expires 9 March 2026 [Page",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://datatracker.ietf.org/doc/draft-meunier-webbotauth-registry/",
     "claim": "M. Guerreiro (Cloudflare), U. Kirazci (Amazon), and T. Meunier (Cloudflare), *draft-meunier-webbotauth-registry — Registry and Signature Agent card for Web bot auth (IETF Datatracker)*, checked 2026-10-30",
     "date": null,
     "quote": "Cloudflare 27 October 2026 Registry and Signature Agent card for Web bot auth draft-meunier-webbotauth-registry-04",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://raw.githubusercontent.com/cloudflare/web-bot-auth/main/packages/web-bot-auth/src/registry.ts",
     "claim": "cloudflare/web-bot-auth (GitHub), *cloudflare/web-bot-auth TypeScript registry implementation (registry.ts)*, checked 2026-10-30",
     "date": null,
     "quote": "export type SignatureAgentDiscoveryType = \"directory\" | \"jwks_uri\" | \"cimd\"; export interface SignatureAgentEntry { label: string; uri: string; type: SignatureAgentDiscoveryType; }",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://http-message-signatures-example.research.cloudflare.com/.well-known/http-message-signatures-directory",
     "claim": "Cloudflare Research, *Cloudflare Research example HTTP Message Signatures directory*, checked 2026-10-30",
     "date": null,
     "quote": "content-type: application/http-message-signatures-directory+json",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://www.ietf.org/archive/id/draft-ietf-webbotauth-httpsig-protocol-01.txt",
     "claim": "T. Meunier (Cloudflare) and S. Major (Google), *HTTP Message Signatures for automated traffic (draft-ietf-webbotauth-httpsig-protocol-01)*, 29 October 2026",
     "date": null,
     "quote": "these entries are listed below and the reference should be this RFC. 8.2.1. \"application/http-message-signatures-directory+json\"",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://github.com/thibmeu/draft-meunier-webbotauth-registry",
     "claim": "thibmeu/draft-meunier-webbotauth-registry (GitHub), *thibmeu/draft-meunier-webbotauth-registry GitHub repository metadata*, checked 2026-10-30",
     "date": null,
     "quote": "\"merges_url\": \"https://api.github.com/repos/thibmeu/draft-meunier-webbotauth-registry/merges\", \"archive_url\": \"https://api.github.com/repos/thibmeu/draft-meunier-webbotauth-registry/{archive_format}{/ref}\",",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://raw.githubusercontent.com/cloudflare/web-bot-auth/main/crates/web-bot-auth/src/registry.rs",
     "claim": "cloudflare/web-bot-auth (GitHub), *cloudflare/web-bot-auth Rust crate registry implementation (registry.rs)*, checked 2026-10-30",
     "date": null,
     "quote": "RegistryError::Invalid(\"Signature-Agent type must be a token\".into()) })?; match token.as_str() {\"directory\" => Ok(SignatureAgentDiscoveryType::Directory), \"jwks_uri\" => / \"directory\", SignatureAgentDiscoveryType::JwksUri => \"jwks_uri\", SignatureAgentDiscoveryType::Cimd => \"cimd\", } } fn parse_discovery_type( value: Option<&sfv::BareItem>, )",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://github.com/cloudflare/web-bot-auth",
     "claim": "cloudflare/web-bot-auth (GitHub), *cloudflare/web-bot-auth GitHub repository metadata*, checked 2026-10-30",
     "date": null,
     "quote": "cloudflare/web-bot-auth",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://raw.githubusercontent.com/cloudflare/web-bot-auth/main/examples/caddy-plugin/registry.go",
     "claim": "cloudflare/web-bot-auth (GitHub), *cloudflare/web-bot-auth Caddy plugin example (registry.go)*, checked 2026-10-30",
     "date": null,
     "quote": "// Copyright 2025 Cloudflare, Inc. // // Licensed under the Apache License, Version 2.0",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://www.rfc-editor.org/rfc/rfc7591.html",
     "claim": "IETF, *RFC 7591: OAuth 2.0 Dynamic Client Registration Protocol*, checked 2026-10-30",
     "date": null,
     "quote": "This specification defines mechanisms for dynamically registering",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-oauth-client-id-metadata-document/",
     "claim": "Aaron Parecki and Emelia Smith (IETF Web Authorization Protocol Working Group), *draft-ietf-oauth-client-id-metadata-document — OAuth Client ID Metadata Document (IETF Datatracker)*, revision -03; last updated 2026-11-02 (expires 2027-05-06)",
     "date": null,
     "quote": "Active Internet-Draft … oauth WG",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-webbotauth-httpsig-protocol/",
     "claim": "IETF Datatracker, *draft-ietf-webbotauth-httpsig-protocol — HTTP Message Signatures for automated traffic (IETF Datatracker)*, current tracker, checked 2026-10-30 (latest revision -01 dated 2026-10-29)",
     "date": null,
     "quote": "WG state WG Document",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://datatracker.ietf.org/doc/rfc9421/",
     "claim": "IETF Datatracker, *HTTP Message Signatures (RFC 9421)*, Proposed Standard (February 2024); checked 2026-10-30",
     "date": null,
     "quote": "RFC - Proposed Standard (February 2024)",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://www.ietf.org/archive/id/draft-illyes-webbotauth-jafar-01.txt",
     "claim": "G. Illyes (Independent), *A JSON-Based Format for Publishing IP Ranges of Automated HTTP Clients (draft-illyes-webbotauth-jafar-01)*, checked 2026-10-30",
     "date": null,
     "quote": "can be Illyes Expires 25 April 2027 [Page 2] Internet-Draft JAFAR October 2026 integrated",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://www.rfc-editor.org/rfc/rfc9309.html",
     "claim": "IETF, *RFC 9309: Robots Exclusion Protocol*, checked 2026-10-30",
     "date": null,
     "quote": "This is an Internet Standards Track document.",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://assets.radar.cloudflare.com/bots/signature-agent-registry.txt",
     "claim": "Cloudflare, *Cloudflare Radar Signature Agent Registry feed (signature-agent-registry.txt)*, checked 2026-10-30",
     "date": null,
     "quote": "https://assistbot.duckduckgo.com/.well-known/http-message-signatures-directory https://web-bot-auth-crawl.cloudflare-browser-rendering-085.workers.dev/.well-known/http-message-signatures-directory / https://web-bot-auth-crawl.cloudflare-browser-rendering-085.workers.dev/.well-known/http-message-signatures-directory",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://blog.cloudflare.com/agent-registry/",
     "claim": "Cloudflare, *Cloudflare Blog — Introducing the Signature Agent Registry*, checked 2026-10-30",
     "date": null,
     "quote": "https://autorag.ai.cloudflare.com/.well-known/http-message-signatures-directory # Test signature agent card",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://aws.amazon.com/blogs/machine-learning/reduce-captchas-for-ai-agents-browsing-the-web-with-web-bot-auth-preview-in-amazon-bedrock-agentcore-browser/",
     "claim": "Amazon Web Services, *AWS Machine Learning Blog — Reduce CAPTCHAs for AI agents browsing the web with Web Bot Auth (Preview) in Amazon Bedrock AgentCore Browser*, checked 2026-10-30",
     "date": null,
     "quote": "Today's preview release of Web Both Auth support in AgentCore Browser helps reduce friction with CAPTCHAs on domains that allow verified bots, by making your agent appear as a verified bot. Once the Web Bot Auth protocol is finalized, AgentCore intends to transition to customer-specific keys, so AgentCore users can use the tier of control that allows only specified verified bots.",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/browser-web-bot-auth.html",
     "claim": "Amazon Web Services, *Amazon Bedrock AgentCore Developer Guide — Web Bot Auth in AgentCore Browser*, checked 2026-10-30",
     "date": null,
     "quote": "https://docs.aws.amazon.com/forms/aws-doc-feedback?hidden_service_name=bedrock-agentcore&topic_url=https://docs.aws.amazon.com/en_us/bedrock-agentcore/latest/devguide/browser-web-bot-auth.html",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://webbotauth.net/kb/signature-agent-card",
     "claim": "WebBotAuth Knowledge Base, *WebBotAuth Knowledge Base — Signature Agent Card*, checked 2026-10-30",
     "date": null,
     "quote": "Unlike the JWKS directory, which is always at /.well-known/http-message-signatures-directory, the Signature Agent Card has no fixed well-known location. It is found through its client_id URL, which a signed request can name directly with a Signature-Agent member of type=cimd, or listed in a registry. This checker finds it from the directory's Link header or a homepage <link> element; it does not resolve type=cimd members yet.",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://registry.npmjs.org/web-bot-auth",
     "claim": "npm Registry, *web-bot-auth npm package registry metadata*, checked 2026-10-30",
     "date": null,
     "quote": "generateNonce, sign } from \\\"web-bot-auth\\\";\\nimport { signerFromJWK } from \\\"web-bot-auth/crypto\\\";\\n\\nconst signatureAgent = 'sig1=\\\"https://signature-agent.test\\\";type=directory';\\nconst request",
     "ref": 23
    }
   ],
   "form": "document-format",
   "governance": "Individual IETF Internet-Draft discussed on the IETF **Web Bot Auth (`webbotauth`)** Working Group mailing list (`web-bot-auth@ietf.org`) and presented at IETF 124 (4 November 2025); not yet adopted as a Working Group document as of 29 October 2026 (`group: \"Individual Submissions\"`, `iesg_state: \"I-D Exists\"`)",
   "group": "Web Bot Auth family",
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against draft-meunier-webbotauth-registry-03 primary text and its current datatracker status page"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "web-bot-auth-signature-agent-card",
   "implementation": "prototype",
   "last_verified": "2026-11-08",
   "name": "Signature Agent Card (Web Bot Auth registry)",
   "native_status": "Active Internet-Draft (`draft-meunier-webbotauth-registry-04`, published 27 October 2026, 26 pages, expires 30 April 2027)",
   "origin": {
    "org": "Maxime Guerreiro (Cloudflare), Ulas Kirazci (Amazon), and Thibault Meunier (Cloudflare)",
    "date": "2025-09-05"
   },
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "draft",
   "probe": {
    "method": "GET",
    "on_absent": "No Signature Agent Card is published; a verifier can still validate the raw signature via the plain key directory but has no machine-readable identity, purpose or rate-limit metadata for the signer",
    "parse": "JSON object with OAuth Dynamic Client Registration fields (client_id, client_name, client_uri, jwks_uri or jwks, contacts) plus a web_bot_auth extension object (e.g. expected-user-agent, rfc9309-product, trigger, purpose)",
    "path": "https://{origin}/.well-known/http-message-signatures-directory"
   },
   "question": "What identity, purpose, rate expectations and cryptographic keys belong to a signed bot?",
   "scope": "general",
   "spec_url": "https://www.ietf.org/archive/id/draft-meunier-webbotauth-registry-04.txt",
   "step": "identify",
   "summary_md": "**Signature Agent Card** (`draft-meunier-webbotauth-registry-04`) is a JSON metadata document that a signature agent using HTTP Message Signatures for bots publishes to describe itself: its identity, purpose, rate expectations, and cryptographic keys. Its parameters are drawn from the OAuth Dynamic Client Registration Metadata registry, the same namespace used by OAuth Client ID Metadata Documents, extended with a single `web_bot_auth` object. Maxime Guerreiro (Cloudflare), Ulas Kirazci (Amazon), and Thibault Meunier (Cloudflare) are the authors. The header states intended status Informational, dated 27 October 2026, and expires 30 April 2027. Datatracker records `draft-meunier-webbotauth-registry` revision 04 in group Individual Submissions, with document state Active and IESG state I-D Exists. A client retrieving a card from a URL MUST use the GET method, MUST treat any status code other than 200 (OK) as an error, and MUST NOT follow HTTP redirects. The `client_id` value in the returned document MUST be identical to the URL used to retrieve it. The specification defines the type member parameter with the value `cimd`: the member value is then the `client_id` of a Signature Agent Card, resolved as described in Section 4.1, and the keys are the card's keys. Datatracker records publication `2026-10-27` and expiry `2027-04-30` for revision 04, after publications `2025-09-05`, `2025-10-20`, `2026-05-26`, and `2026-06-26`. The changelog for `draft-meunier-webbotauth-registry-04` aligns the draft with `draft-ietf-webbotauth-httpsig-protocol`, defines `type=cimd`, allows JWK Set registry entries selected by media type, makes `rfc9309-compliance` a boolean, and moves change notifications to an appendix.",
   "track": "ietf",
   "version": {
    "label": "draft-meunier-webbotauth-registry-04",
    "date": "2026-10-27"
   },
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-meunier-webbotauth-registry"
    }
   ],
   "use_cases": [
    "prove-agent-identity",
    "describe-agent-capabilities",
    "attribute-agent-traffic",
    "control-ai-crawling"
   ],
   "audience": [
    "platform",
    "site-owner",
    "agent-builder"
   ],
   "pairs_with": [
    "oauth-cimd",
    "webbotauth",
    "http-message-signatures",
    "jafar",
    "ai-crawler-tokens-robots"
   ],
   "prerequisites": [
    "http-message-signatures",
    "webbotauth"
   ],
   "hatnote_md": "*This page covers the IETF individual Internet-Draft \"Registry and Signature Agent card for Web bot auth\" (`draft-meunier-webbotauth-registry`), which defines the JSON Signature Agent Card format (built on OAuth Client ID Metadata Documents and RFC 7591 client metadata with a `web_bot_auth` extension object) and a newline-delimited Registry format for discovering Web Bot Auth entities. For the underlying IETF `webbotauth` Working Group request-signing and key-directory protocol (`draft-ietf-webbotauth-httpsig-protocol`), see [Web Bot Auth](/protocols/webbotauth/). For the cryptographic HTTP signature mechanism, see [HTTP Message Signatures](/protocols/http-message-signatures/). For the OAuth client identity document format reused by the card, see [OAuth Client ID Metadata Document (CIMD)](/protocols/oauth-cimd/).*",
   "ietf_tracker": {
    "doc": "draft-meunier-webbotauth-registry",
    "rev": "04",
    "state": "active",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-10-27",
    "expires_utc": "2027-04-30",
    "as_of": "2026-10-30",
    "source": "https://datatracker.ietf.org/doc/draft-meunier-webbotauth-registry/",
    "source_label": "per IETF Datatracker"
   },
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-08",
   "v05_hatnote_html_md": "This page covers the IETF individual Internet-Draft \"Registry and Signature Agent card for Web bot auth\" (`draft-meunier-webbotauth-registry`), which defines the JSON Signature Agent Card format (built on OAuth Client ID Metadata Documents and RFC 7591 client metadata with a `web_bot_auth` extension object) and a newline-delimited Registry format for discovering Web Bot Auth entities. For the underlying IETF `webbotauth` Working Group request-signing and key-directory protocol (`draft-ietf-webbotauth-httpsig-protocol`), see [Web Bot Auth](/protocols/webbotauth/). For the cryptographic HTTP signature mechanism, see [HTTP Message Signatures](/protocols/http-message-signatures/). For the OAuth client identity document format reused by the card, see [OAuth Client ID Metadata Document (CIMD)](/protocols/oauth-cimd/). [1]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Signature Agent Card** (`draft-meunier-webbotauth-registry-04`) is a JSON metadata document that a signature agent using HTTP Message Signatures for bots publishes to describe itself: its identity, purpose, rate expectations, and cryptographic keys. Its parameters are drawn from the OAuth Dynamic Client Registration Metadata registry, the same namespace used by OAuth Client ID Metadata Documents, extended with a single `web_bot_auth` object. [1] Maxime Guerreiro (Cloudflare), Ulas Kirazci (Amazon), and Thibault Meunier (Cloudflare) are the authors. The header states intended status Informational, dated 27 October 2026, and expires 30 April 2027. [1] Datatracker records `draft-meunier-webbotauth-registry` revision 04 in group Individual Submissions, with document state Active and IESG state I-D Exists. [2] A client retrieving a card from a URL MUST use the GET method, MUST treat any status code other than 200 (OK) as an error, and MUST NOT follow HTTP redirects. The `client_id` value in the returned document MUST be identical to the URL used to retrieve it. [1] The specification defines the type member parameter with the value `cimd`: the member value is then the `client_id` of a Signature Agent Card, resolved as described in Section 4.1, and the keys are the card's keys. [1] Datatracker records publication `2026-10-27` and expiry `2027-04-30` for revision 04, after publications `2025-09-05`, `2025-10-20`, `2026-05-26`, and `2026-06-26`. [2] The changelog for `draft-meunier-webbotauth-registry-04` aligns the draft with `draft-ietf-webbotauth-httpsig-protocol`, defines `type=cimd`, allows JWK Set registry entries selected by media type, makes `rfc9309-compliance` a boolean, and moves change notifications to an appendix. [1]",
   "v05_identity_sentence_md": "**Signature Agent Card** (`draft-meunier-webbotauth-registry-04`) is a JSON metadata document that a signature agent using HTTP Message Signatures for bots publishes to describe itself: its identity, purpose, rate expectations, and cryptographic keys. Its parameters are drawn from the OAuth Dynamic Client Registration Metadata registry, the same namespace used by OAuth Client ID Metadata Documents, extended with a single `web_bot_auth` object. [1] Maxime Guerreiro (Cloudflare), Ulas Kirazci (Amazon), and Thibault Meunier (Cloudflare) are the authors. The header states intended status Informational, dated 27 October 2026, and expires 30 April 2027. [1] Datatracker records `draft-meunier-webbotauth-registry` revision 04 in group Individual Submissions, with document state Active and IESG state I-D Exists. [2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Identify](/category/identify/) (`identify`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "Maxime Guerreiro and Thibault Meunier (Cloudflare) in `-00` (`2025-09-05`), joined by Ulas Kirazci (Amazon) in `-01` (`2025-10-20`) [1][2][3]"
    },
    {
     "label": "Governed by",
     "value_md": "Individual IETF Internet-Draft (discussed in the `webbotauth` WG; not WG-adopted); `web_bot_auth` OAuth client metadata registration requested in Section 7.1 (not yet granted); SDKs in `cloudflare/web-bot-auth` [1][2][4]"
    },
    {
     "label": "Track",
     "value_md": "Individual IETF Internet-Draft (Informational; discussed in `webbotauth` WG) with Cloudflare reference SDK [1][5]"
    },
    {
     "label": "Status",
     "value_md": "Active Internet-Draft (`draft-meunier-webbotauth-registry-04`, published 27 October 2026, 26 pages, expires 30 April 2027) [1][2][4]"
    },
    {
     "label": "Version",
     "value_md": "`draft-meunier-webbotauth-registry-04` (`2026-10-27`, 26 pp., expires `2027-04-30`); `web-bot-auth` npm `v0.2.0` (`2026-08-31`) [1][2][4]"
    },
    {
     "label": "Wire format",
     "value_md": "UTF-8 JSON (`application/json`) reusing RFC 7591 / OAuth CIMD + `web_bot_auth`; RFC 7517 JWK Set (`application/http-message-signatures-directory+json` or `application/jwk-set+json`); ABNF registry (`registry = *(entryline / emptyline)`) [1][6][7]"
    },
    {
     "label": "Specification",
     "value_md": "[draft-meunier-webbotauth-registry-04.txt](https://www.ietf.org/archive/id/draft-meunier-webbotauth-registry-04.txt) · [Datatracker](https://datatracker.ietf.org/doc/draft-meunier-webbotauth-registry/) · [thibmeu/draft-meunier-webbotauth-registry](https://github.com/thibmeu/draft-meunier-webbotauth-registry) · [cloudflare/web-bot-auth](https://github.com/cloudflare/web-bot-auth) [1][4][8]"
    },
    {
     "label": "Found at",
     "value_md": "`Signature-Agent: sig1=\"https://example.com/bot\";type=cimd`, `jwks_uri`, directory `Link` / HTML `<link>`, and `Link: <...>; rel=\"registry-changes\"` [1][5][9]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust provisions (`draft-meunier-webbotauth-registry-04`); `cloudflare/web-bot-auth` under Apache-2.0 [1][10][11]"
    },
    {
     "label": "IETF state",
     "value_md": "`draft-meunier-webbotauth-registry-04` · **Active Internet-Draft** (expires 2027-04-30) · Individual · as of 2026-10-30 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-meunier-webbotauth-registry/))"
    }
   ],
   "v05_problem_md": "Signature Agents often need to identify themselves, and establish trust with origin servers. [1] Today, the mechanisms for doing so are inconsistent: some rely on User-Agent strings, others on IP address lists hosted on file servers, and still others on out-of-band definitions. This diversity makes it difficult for operators and origin servers to reliably discover and share a Signature Agent's purpose, contact information, or rate expectations. [1] The OAuth Client ID Metadata Document already defines a resolvable identity: a `client_id` that is an HTTPS URL dereferencing to a JSON metadata document. The specification reuses it. A Signature Agent Card adds bot-specific information in a single `web_bot_auth` object. An existing Client ID Metadata Document is therefore a valid Signature Agent Card. [1] A client that does not understand the `web_bot_auth` object ignores it. [1] A valid card shows that whoever controls the `client_id` URL published it. This does not mean the operator is honest. Every member of `web_bot_auth`, such as `purpose`, `rfc9309-compliance`, or `rate-expectation`, is a claim made by the Signature Agent. Clients MUST NOT treat these values as verified behavior. [1]",
   "v05_mechanism_delta_md": "The OAuth Client ID Metadata Document already defines a resolvable identity: a `client_id` that is an HTTPS URL dereferencing to a JSON metadata document. The specification reuses it. A Signature Agent Card adds bot-specific information in a single `web_bot_auth` object. An existing Client ID Metadata Document is therefore a valid Signature Agent Card. [1] A client that does not understand the `web_bot_auth` object ignores it. [1]",
   "v05_scope_boundary_md": "A valid card shows that whoever controls the `client_id` URL published it. This does not mean the operator is honest. Every member of `web_bot_auth`, such as `purpose`, `rfc9309-compliance`, or `rate-expectation`, is a claim made by the Signature Agent. Clients MUST NOT treat these values as verified behavior. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "OAuth 2.0 Dynamic Client Registration & Metadata (RFC 7591 / RFC 8414)",
      "spec_or_rfc": "RFC 7591 / RFC 8414",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "The card reuses RFC 7591 client-metadata parameter names inside an OAuth Client ID Metadata Document and adds one web_bot_auth object, and Signature-Agent carries type=cimd. [1][12]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "oauth-cimd",
      "target_name": "OAuth Client ID Metadata Document",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "A Signature Agent Card is a Client ID Metadata Document (draft-meunier-webbotauth-registry-04 normatively cites draft-ietf-oauth-client-id-metadata-document-02), whose client_id is a fetched HTTPS URL, with a web_bot_auth object added for bot key and purpose metadata. [1][13]"
     },
     {
      "target_id": "webbotauth",
      "target_name": "Web Bot Auth",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "Verifiers discover a Signature Agent Card by obtaining its client_id URL from a Signature-Agent header member with type=cimd, a registry entry, or out of band (and then fetch keys from the card's jwks_uri or inline jwks), whereas base Web Bot Auth resolves a JWK Set directory directly. [1][14]"
     },
     {
      "target_id": "http-message-signatures",
      "target_name": "HTTP Message Signatures",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "When inline jwks is present on a card, signing the card response with HTTP Message Signatures is RECOMMENDED (with Content-Digest required in covered components), and Signature-Agent uses type=cimd (which carries a Section 4.5 TODO because base Web Bot Auth currently prohibits member parameters). [1][15]"
     },
     {
      "target_id": "jafar",
      "target_name": "JAFAR: A JSON-Based Format for Publishing IP Ranges of Automated HTTP Clients",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "The card's ips_uri points at a JAFAR document of media type application/jafar+json listing the operator's IP prefixes, which is separate from the signing keys. [1][16]"
     },
     {
      "target_id": "ai-crawler-tokens-robots",
      "target_name": "AI crawler tokens in robots.txt",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "The card's rfc9309-product-token and rfc9309-compliance fields name the robots.txt product tokens the bot uses, which robots.txt itself only matches as a user-agent string. [1][17]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (4 probed or cited examples; non-exhaustive).",
    "side_a": {
     "visible": true,
     "heading": "Issuers, signers & metadata publishers",
     "col4_header": "Boundary & Format",
     "note_md": null,
     "rows": [
      {
       "actor": "Cloudflare Radar",
       "role": "Key directory publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · as of 2026-10-29",
       "col4_md": "https://assets.radar.cloudflare.com/bots/signature-agent-registry.txt returned status 200 on 2026-10-29 as a newline-delimited registry of 500 https URLs of signed bot key directories, in the section 4.2 registry shape. Quoted entries include https://assistbot.duckduckgo.com/.well-known/http-message-signatures-directory and https://chatgpt.com/.well-known/http-message-signatures-directory, plus Cloudflare Browser Rendering workers and regional Amazon Bedrock AgentCore signer endpoints.",
       "source_md": "[Cloudflare Radar registry](https://assets.radar.cloudflare.com/bots/signature-agent-registry.txt) [18] · [Registry format blog](https://blog.cloudflare.com/agent-registry/) [1][19]"
      },
      {
       "actor": "Amazon Bedrock AgentCore Browser",
       "role": "Bot / Agent signer",
       "status": "Experimental",
       "status_display": "Experimental · as of 2025-10-30",
       "col4_md": "Web Bot Auth preview in AgentCore Browser, announced 2025-10-30, signs browsing traffic so the agent is presented as a verified bot on domains that allow verified bots. AWS says that after the protocol is finalized, AgentCore will move from the shared service key to customer-specific keys. Regional AgentCore signer endpoints are among the 500 URLs in the Cloudflare Radar registry.",
       "source_md": "[AgentCore Browser Web Bot Auth preview](https://aws.amazon.com/blogs/machine-learning/reduce-captchas-for-ai-agents-browsing-the-web-with-web-bot-auth-preview-in-amazon-bedrock-agentcore-browser/) [20] · [AgentCore docs](https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/browser-web-bot-auth.html) [18][21]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Verifiers, WAFs & relying servers",
     "col4_header": "Boundary & Format",
     "note_md": null,
     "rows": [
      {
       "actor": "WebBotAuth.net",
       "role": "Explorer / Scanner",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Finds a Signature Agent Card from the directory Link header or a homepage link element. Reads both the nested web_bot_auth object (registry-03 and -04) and the flat registry-02 document. A card needs at least one parameter. Card checks are advisory: a missing or incomplete card lowers the score and never overrides a VALID directory. The checker does not resolve Signature-Agent type=cimd yet. The directory path remains /.well-known/http-message-signatures-directory.",
       "source_md": "[Signature Agent Card checker](https://webbotauth.net/kb/signature-agent-card) [22]"
      },
      {
       "actor": "web-bot-auth SDK (Cloudflare)",
       "role": "Verifier SDK / Runtime",
       "status": "Supported",
       "status_display": "Supported · as of 2026-08-31",
       "col4_md": "npm package web-bot-auth 0.2.0, published 2026-08-31. TypeScript registry.ts parses Signature-Agent entries whose type is directory, jwks_uri, or cimd, each with a label and a URI. The Rust crate uses the same three discovery types: Directory, JwksUri, and Cimd.",
       "source_md": "[registry.ts](https://raw.githubusercontent.com/cloudflare/web-bot-auth/main/packages/web-bot-auth/src/registry.ts) [5] · [npm web-bot-auth](https://registry.npmjs.org/web-bot-auth) [9][23]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "cloudflare-pay-per-crawl",
     "target_name": "Cloudflare Pay Per Crawl",
     "relation_label": "Complements",
     "delta": "Pay Per Crawl uses HTTP 402 with `crawler-price`, `crawler-exact-price` or `crawler-max-price`, and `crawler-charged` headers over Web Bot Auth request signatures, whereas a Signature Agent Card is the JSON metadata document published alongside the agent's key directory (`/.well-known/http-message-signatures-directory`). [1]",
     "item_md": "**[Cloudflare Pay Per Crawl](/protocols/cloudflare-pay-per-crawl/)** (Complements) — Pay Per Crawl uses HTTP 402 with `crawler-price`, `crawler-exact-price` or `crawler-max-price`, and `crawler-charged` headers over Web Bot Auth request signatures, whereas a Signature Agent Card is the JSON metadata document published alongside the agent's key directory (`/.well-known/http-message-signatures-directory`). [1]"
    },
    {
     "target_id": "tap",
     "target_name": "Trusted Agent Protocol (TAP)",
     "relation_label": "Complements",
     "delta": "A Signature Agent Card publishes the bot's own keys, while TAP's ID Token is a Visa-signed JWT carried on the request. [1]",
     "item_md": "**[Trusted Agent Protocol (TAP)](/protocols/tap/)** (Complements) — A Signature Agent Card publishes the bot's own keys, while TAP's ID Token is a Visa-signed JWT carried on the request. [1]"
    },
    {
     "target_id": "agent-identity-document",
     "target_name": "The Agent Identity Document: A Hosted, Accountable Public Record for AI Agents",
     "relation_label": "Peer alternative",
     "delta": "A Signature Agent Card is a Client ID Metadata Document plus web_bot_auth, while the Agent Identity Document is the agent identity file at /.well-known/agent-identity.json. [1]",
     "item_md": "**[The Agent Identity Document: A Hosted, Accountable Public Record for AI Agents](/protocols/agent-identity-document/)** (Peer alternative) — A Signature Agent Card is a Client ID Metadata Document plus web_bot_auth, while the Agent Identity Document is the agent identity file at /.well-known/agent-identity.json. [1]"
    },
    {
     "target_id": "anonymous-bot-auth",
     "target_name": "Anonymous Bot Authentication",
     "relation_label": "Peer alternative",
     "delta": "A Signature Agent Card publishes the bot's identity and keys, while this draft's Moderator credential is designed to be unlinkable to that card. [1]",
     "item_md": "**[Anonymous Bot Authentication](/protocols/anonymous-bot-auth/)** (Peer alternative) — A Signature Agent Card publishes the bot's identity and keys, while this draft's Moderator credential is designed to be unlinkable to that card. [1]"
    },
    {
     "item_md": "**[Identify protocols](/category/identify/)** — Category index for `identify` standards."
    }
   ],
   "v05_compiled_md": "---\nid: web-bot-auth-signature-agent-card\ntitle: \"Signature Agent Card (Web Bot Auth registry)\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: identify\nform: document-format\nwire_archetype: identity_auth_crypto\nspec_url: https://www.ietf.org/archive/id/draft-meunier-webbotauth-registry-04.txt\nlast_checked: 2026-11-08\n---\n\n# Signature Agent Card (Web Bot Auth registry)\n\n**Category:** [Identify](/category/identify/) (`identify`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-11-08\n\n> *This page covers the IETF individual Internet-Draft \"Registry and Signature Agent card for Web bot auth\" (`draft-meunier-webbotauth-registry`), which defines the JSON Signature Agent Card format (built on OAuth Client ID Metadata Documents and RFC 7591 client metadata with a `web_bot_auth` extension object) and a newline-delimited Registry format for discovering Web Bot Auth entities. For the underlying IETF `webbotauth` Working Group request-signing and key-directory protocol (`draft-ietf-webbotauth-httpsig-protocol`), see [Web Bot Auth](/protocols/webbotauth/). For the cryptographic HTTP signature mechanism, see [HTTP Message Signatures](/protocols/http-message-signatures/). For the OAuth client identity document format reused by the card, see [OAuth Client ID Metadata Document (CIMD)](/protocols/oauth-cimd/). [1]*\n\n**Signature Agent Card** (`draft-meunier-webbotauth-registry-04`) is a JSON metadata document that a signature agent using HTTP Message Signatures for bots publishes to describe itself: its identity, purpose, rate expectations, and cryptographic keys. Its parameters are drawn from the OAuth Dynamic Client Registration Metadata registry, the same namespace used by OAuth Client ID Metadata Documents, extended with a single `web_bot_auth` object. [1] Maxime Guerreiro (Cloudflare), Ulas Kirazci (Amazon), and Thibault Meunier (Cloudflare) are the authors. The header states intended status Informational, dated 27 October 2026, and expires 30 April 2027. [1] Datatracker records `draft-meunier-webbotauth-registry` revision 04 in group Individual Submissions, with document state Active and IESG state I-D Exists. [2] A client retrieving a card from a URL MUST use the GET method, MUST treat any status code other than 200 (OK) as an error, and MUST NOT follow HTTP redirects. The `client_id` value in the returned document MUST be identical to the URL used to retrieve it. [1] The specification defines the type member parameter with the value `cimd`: the member value is then the `client_id` of a Signature Agent Card, resolved as described in Section 4.1, and the keys are the card's keys. [1] Datatracker records publication `2026-10-27` and expiry `2027-04-30` for revision 04, after publications `2025-09-05`, `2025-10-20`, `2026-05-26`, and `2026-06-26`. [2] The changelog for `draft-meunier-webbotauth-registry-04` aligns the draft with `draft-ietf-webbotauth-httpsig-protocol`, defines `type=cimd`, allows JWK Set registry entries selected by media type, makes `rfc9309-compliance` a boolean, and moves change notifications to an appendix. [1]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Identify](/category/identify/) (`identify`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | Maxime Guerreiro and Thibault Meunier (Cloudflare) in `-00` (`2025-09-05`), joined by Ulas Kirazci (Amazon) in `-01` (`2025-10-20`) [1][2][3] |\n| **Governed by** | Individual IETF Internet-Draft (discussed in the `webbotauth` WG; not WG-adopted); `web_bot_auth` OAuth client metadata registration requested in Section 7.1 (not yet granted); SDKs in `cloudflare/web-bot-auth` [1][2][4] |\n| **Track** | Individual IETF Internet-Draft (Informational; discussed in `webbotauth` WG) with Cloudflare reference SDK [1][5] |\n| **Status** | Active Internet-Draft (`draft-meunier-webbotauth-registry-04`, published 27 October 2026, 26 pages, expires 30 April 2027) [1][2][4] |\n| **Version** | `draft-meunier-webbotauth-registry-04` (`2026-10-27`, 26 pp., expires `2027-04-30`); `web-bot-auth` npm `v0.2.0` (`2026-08-31`) [1][2][4] |\n| **Wire format** | UTF-8 JSON (`application/json`) reusing RFC 7591 / OAuth CIMD + `web_bot_auth`; RFC 7517 JWK Set (`application/http-message-signatures-directory+json` or `application/jwk-set+json`); ABNF registry (`registry = *(entryline / emptyline)`) [1][6][7] |\n| **Specification** | [draft-meunier-webbotauth-registry-04.txt](https://www.ietf.org/archive/id/draft-meunier-webbotauth-registry-04.txt) · [Datatracker](https://datatracker.ietf.org/doc/draft-meunier-webbotauth-registry/) · [thibmeu/draft-meunier-webbotauth-registry](https://github.com/thibmeu/draft-meunier-webbotauth-registry) · [cloudflare/web-bot-auth](https://github.com/cloudflare/web-bot-auth) [1][4][8] |\n| **Found at** | `Signature-Agent: sig1=\"https://example.com/bot\";type=cimd`, `jwks_uri`, directory `Link` / HTML `<link>`, and `Link: <...>; rel=\"registry-changes\"` [1][5][9] |\n| **Licence** | IETF Trust provisions (`draft-meunier-webbotauth-registry-04`); `cloudflare/web-bot-auth` under Apache-2.0 [1][10][11] |\n| **IETF state** | `draft-meunier-webbotauth-registry-04` · **Active Internet-Draft** (expires 2027-04-30) · Individual · as of 2026-10-30 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-meunier-webbotauth-registry/)) |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [Adoption and ecosystem](#adoption-and-ecosystem)\n4. [See also](#see-also)\n5. [References](#references)\n\n---\n\n## Problem and scope\n\nSignature Agents often need to identify themselves, and establish trust with origin servers. [1] Today, the mechanisms for doing so are inconsistent: some rely on User-Agent strings, others on IP address lists hosted on file servers, and still others on out-of-band definitions. This diversity makes it difficult for operators and origin servers to reliably discover and share a Signature Agent's purpose, contact information, or rate expectations. [1] The OAuth Client ID Metadata Document already defines a resolvable identity: a `client_id` that is an HTTPS URL dereferencing to a JSON metadata document. The specification reuses it. A Signature Agent Card adds bot-specific information in a single `web_bot_auth` object. An existing Client ID Metadata Document is therefore a valid Signature Agent Card. [1] A client that does not understand the `web_bot_auth` object ignores it. [1] A valid card shows that whoever controls the `client_id` URL published it. This does not mean the operator is honest. Every member of `web_bot_auth`, such as `purpose`, `rfc9309-compliance`, or `rate-expectation`, is a claim made by the Signature Agent. Clients MUST NOT treat these values as verified behavior. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **OAuth 2.0 Dynamic Client Registration & Metadata (RFC 7591 / RFC 8414)** | `RFC 7591 / RFC 8414` | Analogous to classic standard | The card reuses RFC 7591 client-metadata parameter names inside an OAuth Client ID Metadata Document and adds one web_bot_auth object, and Signature-Agent carries type=cimd. [1][12] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[OAuth Client ID Metadata Document](/protocols/oauth-cimd/)** | Builds on | A Signature Agent Card is a Client ID Metadata Document (draft-meunier-webbotauth-registry-04 normatively cites draft-ietf-oauth-client-id-metadata-document-02), whose client_id is a fetched HTTPS URL, with a web_bot_auth object added for bot key and purpose metadata. [1][13] |\n| **[Web Bot Auth](/protocols/webbotauth/)** | Builds on | Verifiers discover a Signature Agent Card by obtaining its client_id URL from a Signature-Agent header member with type=cimd, a registry entry, or out of band (and then fetch keys from the card's jwks_uri or inline jwks), whereas base Web Bot Auth resolves a JWK Set directory directly. [1][14] |\n| **[HTTP Message Signatures](/protocols/http-message-signatures/)** | Builds on | When inline jwks is present on a card, signing the card response with HTTP Message Signatures is RECOMMENDED (with Content-Digest required in covered components), and Signature-Agent uses type=cimd (which carries a Section 4.5 TODO because base Web Bot Auth currently prohibits member parameters). [1][15] |\n| **[JAFAR: A JSON-Based Format for Publishing IP Ranges of Automated HTTP Clients](/protocols/jafar/)** | Complements | The card's ips_uri points at a JAFAR document of media type application/jafar+json listing the operator's IP prefixes, which is separate from the signing keys. [1][16] |\n| **[AI crawler tokens in robots.txt](/protocols/ai-crawler-tokens-robots/)** | Complements | The card's rfc9309-product-token and rfc9309-compliance fields name the robots.txt product tokens the bot uses, which robots.txt itself only matches as a user-agent string. [1][17] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (4 probed or cited examples; non-exhaustive).*\n\n### Issuers, signers & metadata publishers\n\n| Actor | Role | Status | Boundary & Format | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Cloudflare Radar** | Key directory publisher | Live (HTTP 200) · as of 2026-10-29 | https://assets.radar.cloudflare.com/bots/signature-agent-registry.txt returned status 200 on 2026-10-29 as a newline-delimited registry of 500 https URLs of signed bot key directories, in the section 4.2 registry shape. Quoted entries include https://assistbot.duckduckgo.com/.well-known/http-message-signatures-directory and https://chatgpt.com/.well-known/http-message-signatures-directory, plus Cloudflare Browser Rendering workers and regional Amazon Bedrock AgentCore signer endpoints. | [Cloudflare Radar registry](https://assets.radar.cloudflare.com/bots/signature-agent-registry.txt) [18] · [Registry format blog](https://blog.cloudflare.com/agent-registry/) [1][19] |\n| **Amazon Bedrock AgentCore Browser** | Bot / Agent signer | Experimental · as of 2025-10-30 | Web Bot Auth preview in AgentCore Browser, announced 2025-10-30, signs browsing traffic so the agent is presented as a verified bot on domains that allow verified bots. AWS says that after the protocol is finalized, AgentCore will move from the shared service key to customer-specific keys. Regional AgentCore signer endpoints are among the 500 URLs in the Cloudflare Radar registry. | [AgentCore Browser Web Bot Auth preview](https://aws.amazon.com/blogs/machine-learning/reduce-captchas-for-ai-agents-browsing-the-web-with-web-bot-auth-preview-in-amazon-bedrock-agentcore-browser/) [20] · [AgentCore docs](https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/browser-web-bot-auth.html) [18][21] |\n\n### Verifiers, WAFs & relying servers\n\n| Actor | Role | Status | Boundary & Format | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **WebBotAuth.net** | Explorer / Scanner | Supported · checked 2026-10-30 | Finds a Signature Agent Card from the directory Link header or a homepage link element. Reads both the nested web_bot_auth object (registry-03 and -04) and the flat registry-02 document. A card needs at least one parameter. Card checks are advisory: a missing or incomplete card lowers the score and never overrides a VALID directory. The checker does not resolve Signature-Agent type=cimd yet. The directory path remains /.well-known/http-message-signatures-directory. | [Signature Agent Card checker](https://webbotauth.net/kb/signature-agent-card) [22] |\n| **web-bot-auth SDK (Cloudflare)** | Verifier SDK / Runtime | Supported · as of 2026-08-31 | npm package web-bot-auth 0.2.0, published 2026-08-31. TypeScript registry.ts parses Signature-Agent entries whose type is directory, jwks_uri, or cimd, each with a label and a URI. The Rust crate uses the same three discovery types: Directory, JwksUri, and Cimd. | [registry.ts](https://raw.githubusercontent.com/cloudflare/web-bot-auth/main/packages/web-bot-auth/src/registry.ts) [5] · [npm web-bot-auth](https://registry.npmjs.org/web-bot-auth) [9][23] |\n\n---\n\n## See also\n\n- **[Cloudflare Pay Per Crawl](/protocols/cloudflare-pay-per-crawl/)** *(Complements)* — Pay Per Crawl uses HTTP 402 with `crawler-price`, `crawler-exact-price` or `crawler-max-price`, and `crawler-charged` headers over Web Bot Auth request signatures, whereas a Signature Agent Card is the JSON metadata document published alongside the agent's key directory (`/.well-known/http-message-signatures-directory`). [1]\n- **[Trusted Agent Protocol (TAP)](/protocols/tap/)** *(Complements)* — A Signature Agent Card publishes the bot's own keys, while TAP's ID Token is a Visa-signed JWT carried on the request. [1]\n- **[The Agent Identity Document: A Hosted, Accountable Public Record for AI Agents](/protocols/agent-identity-document/)** *(Peer alternative)* — A Signature Agent Card is a Client ID Metadata Document plus web_bot_auth, while the Agent Identity Document is the agent identity file at /.well-known/agent-identity.json. [1]\n- **[Anonymous Bot Authentication](/protocols/anonymous-bot-auth/)** *(Peer alternative)* — A Signature Agent Card publishes the bot's identity and keys, while this draft's Moderator credential is designed to be unlinkable to that card. [1]\n- **Category:** [Identify protocols](/category/identify/)\n\n---\n\n## References\n\n1. M. Guerreiro (Cloudflare), U. Kirazci (Amazon), and T. Meunier (Cloudflare), *Registry and Signature Agent card for Web bot auth (draft-meunier-webbotauth-registry-04)* (checked 2026-10-30) — <https://www.ietf.org/archive/id/draft-meunier-webbotauth-registry-04.txt>\n2. IETF Datatracker, *IETF Datatracker document JSON metadata for draft-meunier-webbotauth-registry* (checked 2026-10-30) — <https://datatracker.ietf.org/doc/draft-meunier-webbotauth-registry/doc.json>\n3. M. Guerreiro and T. Meunier (Cloudflare), *Registry and Signature Agent card for Web bot auth (draft-meunier-webbotauth-registry-00)* (checked 2026-10-30) — <https://www.ietf.org/archive/id/draft-meunier-webbotauth-registry-00.txt>\n4. M. Guerreiro (Cloudflare), U. Kirazci (Amazon), and T. Meunier (Cloudflare), *draft-meunier-webbotauth-registry — Registry and Signature Agent card for Web bot auth (IETF Datatracker)* (checked 2026-10-30) — <https://datatracker.ietf.org/doc/draft-meunier-webbotauth-registry/>\n5. cloudflare/web-bot-auth (GitHub), *cloudflare/web-bot-auth TypeScript registry implementation (registry.ts)* (checked 2026-10-30) — <https://raw.githubusercontent.com/cloudflare/web-bot-auth/main/packages/web-bot-auth/src/registry.ts>\n6. Cloudflare Research, *Cloudflare Research example HTTP Message Signatures directory* (checked 2026-10-30) — <https://http-message-signatures-example.research.cloudflare.com/.well-known/http-message-signatures-directory>\n7. T. Meunier (Cloudflare) and S. Major (Google), *HTTP Message Signatures for automated traffic (draft-ietf-webbotauth-httpsig-protocol-01)* (29 October 2026) — <https://www.ietf.org/archive/id/draft-ietf-webbotauth-httpsig-protocol-01.txt>\n8. thibmeu/draft-meunier-webbotauth-registry (GitHub), *thibmeu/draft-meunier-webbotauth-registry GitHub repository metadata* (checked 2026-10-30) — <https://github.com/thibmeu/draft-meunier-webbotauth-registry>\n9. cloudflare/web-bot-auth (GitHub), *cloudflare/web-bot-auth Rust crate registry implementation (registry.rs)* (checked 2026-10-30) — <https://raw.githubusercontent.com/cloudflare/web-bot-auth/main/crates/web-bot-auth/src/registry.rs>\n10. cloudflare/web-bot-auth (GitHub), *cloudflare/web-bot-auth GitHub repository metadata* (checked 2026-10-30) — <https://github.com/cloudflare/web-bot-auth>\n11. cloudflare/web-bot-auth (GitHub), *cloudflare/web-bot-auth Caddy plugin example (registry.go)* (checked 2026-10-30) — <https://raw.githubusercontent.com/cloudflare/web-bot-auth/main/examples/caddy-plugin/registry.go>\n12. IETF, *RFC 7591: OAuth 2.0 Dynamic Client Registration Protocol* (checked 2026-10-30) — <https://www.rfc-editor.org/rfc/rfc7591.html>\n13. Aaron Parecki and Emelia Smith (IETF Web Authorization Protocol Working Group), *draft-ietf-oauth-client-id-metadata-document — OAuth Client ID Metadata Document (IETF Datatracker)* (revision -03; last updated 2026-11-02 (expires 2027-05-06)) — <https://datatracker.ietf.org/doc/draft-ietf-oauth-client-id-metadata-document/>\n14. IETF Datatracker, *draft-ietf-webbotauth-httpsig-protocol — HTTP Message Signatures for automated traffic (IETF Datatracker)* (current tracker, checked 2026-10-30 (latest revision -01 dated 2026-10-29)) — <https://datatracker.ietf.org/doc/draft-ietf-webbotauth-httpsig-protocol/>\n15. IETF Datatracker, *HTTP Message Signatures (RFC 9421)* (Proposed Standard (February 2024); checked 2026-10-30) — <https://datatracker.ietf.org/doc/rfc9421/>\n16. G. Illyes (Independent), *A JSON-Based Format for Publishing IP Ranges of Automated HTTP Clients (draft-illyes-webbotauth-jafar-01)* (checked 2026-10-30) — <https://www.ietf.org/archive/id/draft-illyes-webbotauth-jafar-01.txt>\n17. IETF, *RFC 9309: Robots Exclusion Protocol* (checked 2026-10-30) — <https://www.rfc-editor.org/rfc/rfc9309.html>\n18. Cloudflare, *Cloudflare Radar Signature Agent Registry feed (signature-agent-registry.txt)* (checked 2026-10-30) — <https://assets.radar.cloudflare.com/bots/signature-agent-registry.txt>\n19. Cloudflare, *Cloudflare Blog — Introducing the Signature Agent Registry* (checked 2026-10-30) — <https://blog.cloudflare.com/agent-registry/>\n20. Amazon Web Services, *AWS Machine Learning Blog — Reduce CAPTCHAs for AI agents browsing the web with Web Bot Auth (Preview) in Amazon Bedrock AgentCore Browser* (checked 2026-10-30) — <https://aws.amazon.com/blogs/machine-learning/reduce-captchas-for-ai-agents-browsing-the-web-with-web-bot-auth-preview-in-amazon-bedrock-agentcore-browser/>\n21. Amazon Web Services, *Amazon Bedrock AgentCore Developer Guide — Web Bot Auth in AgentCore Browser* (checked 2026-10-30) — <https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/browser-web-bot-auth.html>\n22. WebBotAuth Knowledge Base, *WebBotAuth Knowledge Base — Signature Agent Card* (checked 2026-10-30) — <https://webbotauth.net/kb/signature-agent-card>\n23. npm Registry, *web-bot-auth npm package registry metadata* (checked 2026-10-30) — <https://registry.npmjs.org/web-bot-auth>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "",
   "adoption": {
    "level": "observed",
    "by": "OpenAI (ChatGPT agent), Google (Google-Agent), Browserbase, Shopify (Cloudsurf), Exa (ExaSearchBot), Cloudflare, Akamai (App & API Protector), Vercel, and 6 other verified implementations",
    "probe_run": null
   },
   "aliases": [
    "RFC 9421",
    "draft-ietf-httpbis-message-signatures"
   ],
   "analog": "JWS for HTTP components",
   "collisions": [],
   "discovery": {
    "mechanism": "In-band HTTP message headers (Signature, Signature-Input, Accept-Signature); key resolution via keyid or profile-specific directories",
    "path": "In-band HTTP headers; no fixed well-known URI in RFC 9421 (Web Bot Auth adds /.well-known/http-message-signatures-directory)"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.rfc-editor.org/rfc/rfc9421.html",
     "claim": "A. Backman (Amazon), J. Richer (Bespoke Engineering), and M. Sporny (Digital Bazaar), *RFC 9421: HTTP Message Signatures*, February 2024",
     "date": null,
     "quote": "This is an Internet Standards Track document. / This document describes a mechanism for creating, encoding, and verifying digital signatures or message authentication codes over components of an HTTP message. / This document defines a mechanism for providing end-to-end integrity and authenticity for components of an HTTP message by using a detached signature on HTTP messages. / Strict canonicalization rules ensure that the verifier can verify the signature even if the message has been transformed in many of the ways permitted by HTTP. / The Signature-Input field is a Dictionary Structured Field (defined in Section 3.2 of [STRUCTURED-FIELDS]) containing the metadata for one or more message signatures generated from components within the HTTP message. / This mechanism supports use cases where the full HTTP message may not be known to the signer and where the message may be transformed (e.g., by intermediaries) before reaching the verifier. / A. Backman, Ed. Amazon / J. Richer, Ed. Bespoke Engineering / M. Sporny Digital Bazaar / \"Structured Field Values for HTTP\", RFC 8941 / The Signature field is a Dictionary Structured Field (defined in Section 3.2 of [STRUCTURED-FIELDS]) containing one or more message signatures generated from the signature context of the target message. / Derived component names MUST start with the \"at\" (@) character. This differentiates derived component names from HTTP field names, which cannot contain the @ character as per Section 5.1 of [HTTP]. / created: Creation time as a UNIX timestamp value of type Integer. / expires: Expiration time as a UNIX timestamp value of type Integer. / nonce: A random unique value generated for this signature as a String value. / alg: The HTTP message signature algorithm from the \"HTTP Signature Algorithms\" registry, as a String value. / keyid: The identifier for the key material as a String value. / tag: An application-specific tag for the signature as a String value. / it is often desirable for a potential verifier to signal that it expects a signature from a potential signer using the Accept-Signature field. / signature-base = *( signature-base-line LF ) signature-params-line / signature-params-line = DQUOTE \"@signature-params\" DQUOTE \":\" SP inner-list / This specification was initially based on [SIGNING-HTTP-MESSAGES]. / RFC: 9421 / Category: Standards Track / Published: February 2024 / Derived component names MUST start with the \"at\" (@) character. / RFC 9421 HTTP Message Signatures / An application will usually use the keyid parameter of the signature parameters (Section 2.3) and define rules for resolving a key from there, though the appropriate key could be known from other means such as preregistration of a signer's key. / Copyright (c) 2024 IETF Trust and the persons identified as the document authors. / This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents / However, TLS only guarantees these properties over a single TLS connection, and the path between the client and application may be composed of multiple independent TLS connections (for example, if the application is hosted behind a TLS-terminating gateway or if the client is behind a TLS Inspection appliance). In such cases, TLS cannot guarantee end-to-end message integrity or authenticity between the client and application. / HTTP permits, and sometimes requires, intermediaries to transform messages in a variety of ways. This can result in a recipient receiving a message that is not bitwise-equivalent to the message that was originally sent. / Furthermore, some applications require the binding of a higher-level application-specific key to the HTTP message, separate from any TLS certificates in use. / This specification defines only part of a full security system for an application. / In order to properly and safely apply HTTP message signatures, an application or profile of this specification MUST specify, at a minimum, all of the following items: / An application will usually use the keyid parameter of the signature parameters (Section 2.3) and define rules for resolving a key from there / this specification does not define a means to directly cover HTTP message content / \"Digest Fields\", RFC 9530, DOI 10.17487/RFC9530, February 2024 / While a signer is free to attach a signature to a request or response without prompting, it is often desirable for a potential verifier to signal that it expects a signature from a potential signer using the Accept-Signature field. / When the Accept-Signature field is sent in an HTTP request message, the field indicates that the client desires the server to sign the response using the identified parameters, and the target message is the response to this request. / When the Accept-Signature field is used in an HTTP response message, the field indicates that the server desires the client to sign its next request to the server with the identified parameters, and the target message is the client's next request. / This results in the following Signature-Input and Signature header fields being added to the message under the label sig-b22: / The signature base is an ASCII string [ASCII] containing the canonicalized HTTP message components covered by the signature. / The label is chosen by the signer, except where a specific label is dictated by protocol negotiations / To create the signature base, the signer or verifier concatenates entries for each component identifier in the signature's covered components (including their parameters) using the following algorithm. / Let the output be an empty string. / Append a single colon (:). / Append a single space (\" \"). / Append a single newline / Note that this serialization places the component name in double quotes and appends any parameters outside of the quotes. / If the component identifier (including its parameters) has already been added to the signature base, produce an error. / If the component identifier has a parameter that is not understood, produce an error. / If the field cannot be found in the message or the value cannot be obtained in the context, produce an error. / If the derived component name is unknown or the value cannot be derived, produce an error. / Produce an error if the output string contains any non-ASCII characters [ASCII]. / All errors produced as described MUST fail the algorithm immediately, without outputting a signature base. / the signature parameters message component is REQUIRED as the last line of the signature base (Section 2.5), and the component identifier MUST NOT be enumerated within the set of covered components for any signature, including itself. / The signature parameters component name is @signature-params. / Once this order is chosen, it cannot be changed. / This order MUST be the same order as that used in creating the signature base (Section 2.5). / The member's key is the label that uniquely identifies the message signature within the HTTP message. / To facilitate signature validation, the Signature-Input field value MUST contain the same serialized value used in generating the signature base's @signature-params value defined in Section 2.3. Note that in a Structured Field value, list order and parameter order have to be preserved. / The member's value is a Byte Sequence containing the signature value for the message signature identified by the label / The signature labels MUST be unique across all field values. / since intermediaries are allowed to drop trailers as per [HTTP], it is RECOMMENDED that the Signature-Input field be included only as a header field / created: Creation time as a UNIX timestamp value of type Integer. Sub-second precision is not supported. The inclusion of this parameter is RECOMMENDED. / expires: Expiration time as a UNIX timestamp value of type Integer. Sub-second precision is not supported. / rsa-pss-sha512 RSASSA-PSS using SHA-512 Active / rsa-v1_5-sha256 RSASSA-PKCS1-v1_5 using SHA-256 Active / hmac-sha256 HMAC using SHA-256 Active / ecdsa-p256-sha256 ECDSA using curve P-256 DSS and SHA-256 Active / ecdsa-p384-sha384 ECDSA using curve P-384 DSS and SHA-384 Active / ed25519 EdDSA using curve edwards25519 Active / req A Boolean flag indicating that the component value is derived from the request that triggered this response message and not from the response message directly. / On its own, this specification does not provide coverage for the content of an HTTP message under the signature, in either a request or a response. / The @method derived component refers to the HTTP method of a request message. / no transformation to the input method value's case is performed. / The component value is the target URI of the request ([HTTP], Section 7.1), assembled from all available URI components, including the authority. / The @authority derived component refers to the authority component of the target URI of the HTTP request message / the hostname is normalized to lowercase, and the default port is omitted. / The @authority derived component SHOULD be used instead of signing the Host header field directly. / it MUST be normalized to lowercase for inclusion in the signature base. / it is NOT RECOMMENDED that this component be used when versions of HTTP other than 1.1 might be in use. / The @path derived component refers to the target path of the HTTP request message. / an empty path string is normalized as a single slash (/) character. / Path components are represented by their values before decoding any percent-encoded octets / The @query derived component refers to the query component of the HTTP request message. / including the leading? character. / percent-encoded octets are not decoded. / the @query-param derived component allows addressing of these individual query parameters. / format defined in Section 5 (\"application/x-www-form-urlencoded\") of [HTMLURL] / The REQUIRED name parameter of each component identifier contains the encoded nameString of a single query parameter as a String value. / The @status derived component refers to the three-digit numeric HTTP status code of a response message / The component value is the serialized three-digit integer of the HTTP status code, with no descriptive text. / The @status component identifier MUST NOT be used in a request message. / Upon verification, it is important that the verifier validate not only the signature but also the value of the Content-Digest field itself against the actual received content. / If an intermediary changes the content encoding, the resulting Content-Digest value would change. This would in turn invalidate the signature. Any intermediary performing such an action would need to apply a new signature with the updated Content-Digest field value / When a request message results in a signed response message, the signer can include portions of the request message in the signature base by adding the req parameter to the component identifier. / Note that the same component name MAY be included with and without the req parameter in a single signature base / If the component identifier contains the req parameter and the target message is a request, produce an error. / A valid signature on an HTTP message is not sufficient to prove that the message has been signed by the appropriate party. It is up to the verifier to ensure that a given key and algorithm are appropriate for the message in question / 7.2.2. Signature Replay Since HTTP message signatures allow sub-portions of the HTTP message to be signed, it is possible for two different HTTP messages to validate against the same signature. / 7.3.6. Key and Algorithm Specification Downgrades Applications of this specification need to protect against key specification downgrade attacks. / Signatures of signatures do not provide transitive coverage of covered components as one might expect, and the practice is susceptible to several attacks as discussed in Section 7.3.7 / 7.5.5. Canonicalization Attacks Any ambiguity in the generation of the signature base could provide an attacker with leverage to substitute or break a signature on a message. / \"JSON Web Signature (JWS)\", RFC 7515 / For both signing and verification, the HTTP message's signature base (Section 2.5) is used as the entire \"JWS Signing Input\". The JOSE Header [JWS] [RFC7517] is not used, and the signature base is not first encoded in Base64 before applying the algorithm. / this specification does not define a means to directly cover HTTP message content (defined in Section 6.4 of [HTTP]); rather, it relies on the Digest specification [DIGEST] to provide a hash of the message content",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://www.ietf.org/archive/id/draft-ietf-webbotauth-httpsig-protocol-01.txt",
     "claim": "T. Meunier (Cloudflare) and S. Major (Google), *HTTP Message Signatures for automated traffic (draft-ietf-webbotauth-httpsig-protocol-01)*, 29 October 2026",
     "date": null,
     "quote": "This document describes a protocol for identifying automated traffic using [HTTP-MESSAGE-SIGNATURES]. / It defines the Signature-Agent header field for in-band key discovery, a key directory format based on JWKS, and a well-known URI at which that directory is served. / IPs on cloud platforms have layers of ownership - the platform owns the IP and registers it in their published IP blocks / This protocol operates solely at the HTTP layer. It allows signatures to be generated and verified without modifying the transport layer or TLS stack. / Agents MUST include at least one of the following components: / Agents MUST include at least one of the following components: @authority as defined in Section 2.2.3 of [HTTP-MESSAGE-SIGNATURES] @target-uri as defined in Section 2.2.2 of [HTTP-MESSAGE-SIGNATURES] / Agents MUST include the following @signature-params as defined in Section 2.3 of [HTTP-MESSAGE-SIGNATURES] created / expires as defined in Section 2.3 of [HTTP-MESSAGE-SIGNATURES] / keyid MUST be a base64url JWK SHA-256 Thumbprint / tag MUST be web-bot-auth / No component covers the body. An Agent that needs one MUST send and cover Content-Digest [DIGEST-FIELDS]. This document does not require it. / tag MUST be http-message-signatures-directory",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-wimse-http-signature/",
     "claim": "Joseph A. Salowey and Yaron Sheffer, *draft-ietf-wimse-http-signature — WIMSE Workload-to-Workload Authentication with HTTP Signatures (IETF Datatracker)*, last updated 2026-10-20; checked 2026-10-30",
     "date": null,
     "quote": "We define a profile of the HTTP Signatures protocol [RFC9421] to protect the service traffic.",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://datatracker.ietf.org/doc/draft-cavage-http-signatures/",
     "claim": "Mark Cavage and Manu Sporny, *draft-cavage-http-signatures — Signing HTTP Messages (IETF Datatracker)*, last updated 2019-10-21",
     "date": null,
     "quote": "Signing HTTP Messages draft-cavage-http-signatures-12 / Replaced by | | draft-ietf-httpbis-message-signatures",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://docs.joinmastodon.org/spec/security/",
     "claim": "Mastodon, *Security — Mastodon Documentation*, checked 2026-10-30",
     "date": null,
     "quote": "This version of HTTP Signatures is still required for compatibility with older Mastodon versions (including the still supported 4.4.0) and other fediverse implementations / This version of HTTP Signatures is still required for compatibility with older Mastodon versions (including the still supported 4.4.0) and other fediverse implementations, but we strongly suggest implementers to also implement the up-to-date HTTP Message Signatures (RFC9421) specification, starting with verification, as we intend to eventually move away from this earlier draft. / The @method and @target-uri \"derived components\" MUST be signed / A Content-Digest header (RFC9530) MUST be present and signed / added support for validating rsa-v1_5-sha256 signatures / includes parameters, like the keyid and a created timestamp",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://datatracker.ietf.org/doc/rfc9421/",
     "claim": "IETF Datatracker, *HTTP Message Signatures (RFC 9421)*, Proposed Standard (February 2024); checked 2026-10-30",
     "date": null,
     "quote": "RFC - Proposed Standard (February 2024) / Was draft-ietf-httpbis-message-signatures (httpbis WG) / Responsible AD | | Paul Wouters",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://developer.visa.com/docs/trusted-agent-protocol",
     "claim": "Visa Developer, *Getting Started — Trusted Agent Protocol*, checked 2026-10-30",
     "date": null,
     "quote": "cryptographic standards (RFC9421), required message signature fields / The Trusted Agent Protocol: This is the official rulebook that details the technical processes for recognizing a Visa-approved agent, including the cryptographic standards (RFC9421), required message signature fields, and the process for validating an agent's intent. / signature_base strings / A merchant's primary task is to validate this signature. / how to construct the signature_base strings, which are the critical first steps in verifying an agent's signature",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://datatracker.ietf.org/doc/draft-hardt-oauth-aauth-protocol/",
     "claim": "Dick Hardt, *draft-hardt-oauth-aauth-protocol — AAuth Protocol (IETF Datatracker)*, last updated 2026-09-25",
     "date": null,
     "quote": "Every agent instance has its own identifier and signing key, and every request it makes is bound to that key by an HTTP Message Signature ([RFC9421]) / /.well-known/aauth-agent.json / /.well-known/aauth-person.json / /.well-known/aauth-access.json / /.well-known/aauth-resource.json",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://www.rfc-editor.org/info/rfc9635/",
     "claim": "J. Richer and F. Imbault, *RFC 9635: Grant Negotiation and Authorization Protocol (GNAP)*, October 2024",
     "date": null,
     "quote": "This method is indicated by the method value httpsig and can be declared in either object form or string form.",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-httpbis-message-signatures/history/",
     "claim": "IETF Datatracker, *draft-ietf-httpbis-message-signatures document history*, checked 2026-10-30",
     "date": null,
     "quote": "2020-04-10 | 00 | Annabelle Backman | New version available: draft-ietf-httpbis-message-signatures-00.txt / 2023-08-16 | 19 | Amy Vezza | IESG has approved the document / draft-ietf-httpbis-message-signatures-19",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://errata.rfc-editor.org/search/?rfc_number=9421&presentation=records",
     "claim": "RFC Editor, *RFC 9421 Errata Records (IDs 8102 and 8103)*, verified 2024-10-29; checked 2026-10-30",
     "date": null,
     "quote": "Errata-ID: 8102 Status: Verified Type: Editorial / Errata-ID: 8103 Status: Verified Type: Technical / Date Verified: 2024-10-29 / Errata-ID: 8102 / Errata-ID: 8103",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://www.iana.org/assignments/http-message-signature",
     "claim": "IANA, *HTTP Message Signature Registries*, created 2023-08-18; last updated 2026-10-23",
     "date": null,
     "quote": "Last Updated 2026-10-23 / ml-dsa-44 ML-DSA-44 using FIPS 204 Active / ml-dsa-65 ML-DSA-65 using FIPS 204 Active / ml-dsa-87 ML-DSA-87 using FIPS 204 Active / Expert(s) Justin Richer, Manu Sporny / ml-dsa-44 ML-DSA-44 using FIPS 204 / ml-dsa-65 ML-DSA-65 using FIPS 204 / ml-dsa-87 ML-DSA-87 using FIPS 204 / HTTP Signature Algorithms / HTTP Signature Metadata Parameters / HTTP Signature Derived Component Names / HTTP Signature Component Parameters / Created 2023-08-18 Last Updated 2026-10-23 / rsa-pss-sha512 / rsa-v1_5-sha256 / hmac-sha256 / ecdsa-p256-sha256 / ecdsa-p384-sha384 / ed25519 EdDSA using curve edwards25519",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://www.iana.org/assignments/http-fields/field-names.csv",
     "claim": "IANA, *Hypertext Transfer Protocol (HTTP) Field Name Registry*, checked 2026-10-30",
     "date": null,
     "quote": "Accept-Signature,permanent,,\"[RFC 9421, Section 5.1: HTTP Message Signatures]\" / Signature,permanent,Dictionary,\"[RFC 9421, Section 4.2: HTTP Message Signatures]\" / Signature-Input,permanent,Dictionary,\"[RFC 9421, Section 4.1: HTTP Message Signatures]\"",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://www.rfc-editor.org/info/rfc9530/",
     "claim": "R. Polli and L. Pardue, *RFC 9530: Digest Fields*, February 2024",
     "date": null,
     "quote": "The Content-Digest field can be used for the integrity of HTTP message content. / The Repr-Digest HTTP field can be used in requests and responses to communicate digests that are calculated using a hashing algorithm applied to the entire selected representation data / The Content-Digest HTTP field can be used in requests and responses to communicate digests that are calculated using a hashing algorithm applied to the actual message content / the content can be affected by range requests or methods, such as HEAD / For example, HTTP Message Signatures [SIGNATURES] could be used to sign Integrity fields, thus providing coverage for HTTP content or representation data.",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://chatgpt.com/.well-known/http-message-signatures-directory",
     "claim": "OpenAI, *chatgpt.com HTTP Message Signatures key directory*, response dated Fri, 30 Oct 2026; checked 2026-10-30",
     "date": null,
     "quote": "content-type: application/http-message-signatures-directory+json / date: Fri, 30 Oct 2026 / \"crv\":\"Ed25519\" / \"kty\":\"OKP\" / \"use\":\"sig\" / \"kid\":\"ArwjqcCqtA5oxEWkzXGC-To_0A9whHmajCHtfe8I9aY\" / \"purpose\":\"ai\" / \"signature_agent\":\"https://chatgpt.com\" / alg=\"ed25519\" / tag=\"http-message-signatures-directory\" / signature-input: sig1=(\"@authority\";req \"content-digest\")",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://vercel.com/changelog/vercels-bot-verification-now-supports-web-bot-auth",
     "claim": "Vercel Changelog, *Vercel's bot verification now supports Web Bot Auth*, published 2025-08-12; modified 2026-09-02",
     "date": null,
     "quote": "ChatGPT operator signs its requests using Web Bot Auth / Vercel's bot verification system supports the new protocol. / 2025-08-12 / Now, Bot Protection can use HTTP Message Signatures to verify traffic automation from dynamic and distributed sources. / ChatGPT operator signs its requests using Web Bot Auth, so is now allowed.",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://agent.bot.goog/.well-known/http-message-signatures-directory",
     "claim": "Google, *agent.bot.goog HTTP Message Signatures key directory*, response dated Fri, 30 Oct 2026; checked 2026-10-30",
     "date": null,
     "quote": "content-type: application/http-message-signatures-directory+json / date: Fri, 30 Oct 2026 / \"alg\":\"EdDSA\" / \"crv\":\"Ed25519\" / \"kty\":\"OKP\" / \"use\":\"sig\" / \"kid\":\"mhxuPw\" / \"kid\":\"cYSMkA\" / \"kid\":\"bUCe2A\" / \"kid\":\"DYiMjA\" / \"kid\":\"Ggh50g\" / alg=\"ed25519\" / tag=\"http-message-signatures-directory\"",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://developers.google.com/crawling/docs/crawlers-fetchers/web-bot-auth",
     "claim": "Google for Developers, *Authenticate requests with Web Bot Auth (Experimental)*, last updated 2026-10-13 UTC",
     "date": null,
     "quote": "Last updated 2026-10-13 UTC. / A subset of requests made by the Google-Agent are signed with Web Bot Auth / they are authenticated as https://agent.bot.goog / Web Bot Auth (Experimental)",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://www.browserbase.com/.well-known/http-message-signatures-directory",
     "claim": "Browserbase, *browserbase.com HTTP Message Signatures key directory*, response dated Fri, 30 Oct 2026; checked 2026-10-30",
     "date": null,
     "quote": "content-type: application/http-message-signatures-directory+json / date: Fri, 30 Oct 2026 / \"crv\":\"Ed25519\" / \"purpose\":\"rag\" / \"kid\":\"NVhTndQWodGQ47Kmhm1bhTdt0swWS7EHmUEMo-opsXU\" / \"kid\":\"DJuTDnlBxNZzalQhhvktwvkF3lWss-T56g7s4xubuhU\" / binding0 / binding1 / tag=\"http-message-signatures-directory\" / \"kty\":\"OKP\"",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://cloudsurf.shopify.io/.well-known/http-message-signatures-directory",
     "claim": "Shopify, *cloudsurf.shopify.io HTTP Message Signatures key directory*, response dated Fri, 30 Oct 2026; checked 2026-10-30",
     "date": null,
     "quote": "content-type: application/http-message-signatures-directory+json / date: Fri, 30 Oct 2026 / \"kty\":\"OKP\",\"crv\":\"Ed25519\" / keyid=\"ytpCrk8u74NJ08SQepVrOmovFBEXUZPq7Nv8FCg_Qdw\" / tag=\"http-message-signatures-directory\" / alg=\"ed25519\" / signature-input: sig1=(\"@authority\";req);alg=\"ed25519\"",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://crawler.exa.ai/.well-known/http-message-signatures-directory",
     "claim": "Exa, *ExaSearchBot HTTP Message Signatures key directory*, response dated Fri, 30 Oct 2026; checked 2026-10-30",
     "date": null,
     "quote": "content-type: application/http-message-signatures-directory+json / date: Fri, 30 Oct 2026 / \"crv\":\"Ed25519\" / \"kty\":\"OKP\" / \"kid\":\"sDCpsJpgItYcmF_KhZozOUGIGL6a49yxE3f0yQR5SIA\" / binding0 / tag=\"http-message-signatures-directory\"",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://crawler.exa.ai/",
     "claim": "Exa, *Exa Search Crawler*, last updated 2026-07-30",
     "date": null,
     "quote": "Last Updated: July 30, 2026 / Every ExaSearchBot request is cryptographically signed using HTTP Message Signatures (RFC 9421), following the Web Bot Auth scheme.",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://developers.cloudflare.com/bots/reference/bot-verification/web-bot-auth/",
     "claim": "Cloudflare, *Web Bot Auth — Cloudflare Bot Solutions Docs*, last updated 2026-10-08",
     "date": null,
     "quote": "\"dateModified\":\"2026-10-08\" / draft-meunier-http-message-signatures-directory-03 / where the header value is a structured string such as \"https://signature-agent.test\" / Cloudflare will fail to verify a message if: / sig2=\"https://signature-agent.test\" / Cloudflare's implementation of Web Bot Auth does not support every component and parameter defined in IETF RFC 9421. / Signature-Agent header",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://blog.cloudflare.com/verified-bots-with-cryptography/",
     "claim": "Cloudflare Blog, *Message Signatures are now part of our Verified Bots Program, simplifying bot authentication*, published 2025-07-01; modified 2026-07-15",
     "date": null,
     "quote": "automatically validate signatures on our edge",
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://web.archive.org/web/20260609113733/https://www.akamai.com/blog/security/redefine-trust-web-bot-authentication",
     "claim": "Rupesh Chokshi (Akamai Blog), *Redefine Trust with Web Bot Authentication*, published 2025-11-10; archived 2026-06-09",
     "date": null,
     "quote": "Nov 10, 2025 / Web Bot Auth is already supported by Akamai's bot & abuse solutions, inclusive of bot visibility and mitigation in Akamai App & API Protector. / The Akamai edge retrieves the bot's signature directory, validates the signature using RFC 9421 rules, and confirms the request's authenticity without adding complexity for origin systems. / Visa's Trusted Agent Protocol / registers the media type application/http-message-signatures-directory+json / Signature-Input and Signature headers",
     "ref": 25
    },
    {
     "label": "[26]",
     "url": "https://aws.amazon.com/about-aws/whats-new/2025/11/aws-waf-web-bot-auth-support/",
     "claim": "AWS What's New, *AWS WAF announces Web Bot Auth support*, posted 2025-11-21",
     "date": null,
     "quote": "AWS WAF announces Web Bot Auth support / 2025-11-21 / AWS WAF now automatically allows verified AI agent traffic. / an authentication method that leverages cryptographic signatures in HTTP messages / This feature is currently available only for AWS WAF customers protecting Amazon CloudFront distributions.",
     "ref": 26
    },
    {
     "label": "[27]",
     "url": "https://github.com/mastodon/mastodon/releases/tag/v4.4.0",
     "claim": "Mastodon, *Release v4.4.0*, published 2025-07-08",
     "date": null,
     "quote": "Add experimental support for receiving HTTP Message Signatures (RFC9421) / explicitly enabled through the http_message_signatures feature flag",
     "ref": 27
    },
    {
     "label": "[28]",
     "url": "https://github.com/mastodon/mastodon/releases/tag/v4.5.0",
     "claim": "Mastodon, *Release v4.5.0*, published 2025-11-06",
     "date": null,
     "quote": "Change support for RFC9421 HTTP signatures to be enabled unconditionally",
     "ref": 28
    },
    {
     "label": "[29]",
     "url": "https://github.com/mastodon/mastodon/releases/tag/v4.7.0",
     "claim": "Mastodon, *Release v4.7.0*, published 2026-08-20",
     "date": null,
     "quote": "2026-08-20 / Add support for Ed25519 signatures in HTTP Message Signatures / Add outgoing RFC9421 HTTP Message Signatures as fallback to earlier draft",
     "ref": 29
    },
    {
     "label": "[30]",
     "url": "https://docs.adyen.com/online-payments/agentic-commerce/agent-platform/ai-agent-integration-ucp",
     "claim": "Adyen Docs, *AI agent API integration with UCP*, checked 2026-10-30",
     "date": null,
     "quote": "Session operations also require UCP HTTP Message Signatures (RFC 9421) for request integrity and origin verification. / Signature The RFC 9421 signature over the covered components. / Signature-Input Signature metadata: covered components, algorithm, key ID. / UCP-Agent Your agent platform profile URL. / Content-Digest Required for POST and PUT requests.",
     "ref": 30
    },
    {
     "label": "[31]",
     "url": "https://daniel.haxx.se/blog/2026/07/27/http-message-signatures-with-curl/",
     "claim": "Daniel Stenberg, *HTTP Message Signatures with curl*, published 2026-07-27",
     "date": null,
     "quote": "The recently published RFC 9421 describes how to do HTTP Message Signatures, and starting just now, curl experimentally supports them. / --httpsig-algo / with ed25519 being used by default / The only other algorithm supported right now is hmac-sha256. / If not set, it defaults to signing the method, authority, path and query. / --httpsig-key specifies the key to use when signing the request. / --httpsig-keyid is the key identifier, a string that is passed on in the headers. / --httpsig-headers details exactly which parts of the request and which headers that should be signed.",
     "ref": 31
    },
    {
     "label": "[32]",
     "url": "https://curl.se/changes.html",
     "claim": "curl, *curl — Changes*, 8.22.0 (2026-09-02); 8.23.0 (2026-10-14); checked 2026-11-03",
     "date": null,
     "quote": "Fixed in 8.22.0 - September 2 2026 / RFC 9421 HTTP Message Signatures support",
     "ref": 32
    },
    {
     "label": "[33]",
     "url": "https://www.wolfssl.com/native-http-message-signatures-in-curl-powered-by-wolfssl-part-3/",
     "claim": "wolfSSL, *Native HTTP Message Signatures in curl, Powered by wolfSSL (Part 3)*, published 2026-06-12",
     "date": null,
     "quote": "June 12, 2026 / native RFC 9421 support at the plumbing layer - curl and libcurl, with wolfCrypt providing the Ed25519 math. / Two open PRs: / curl/curl#21239 / wolfSSL/wolfssl-examples#566 / CURLOPT_HTTPSIG Algorithm: ed25519 or hmac-sha256 / CURLOPT_HTTPSIG_KEY Path to a hex-encoded key file / CURLOPT_HTTPSIG_KEYID Value placed in Signature-Input's keyid= / CURLOPT_HTTPSIG_HEADERS Space-separated components to cover",
     "ref": 33
    },
    {
     "label": "[34]",
     "url": "https://assets.radar.cloudflare.com/bots/signature-agent-registry.txt",
     "claim": "Cloudflare Radar, *signature-agent-registry.txt*, key-directory URL list; last-modified 2026-10-30",
     "date": null,
     "quote": "last-modified: Fri, 30 Oct 2026 00:00:47 GMT / https://chatgpt.com/.well-known/http-message-signatures-directory / https://www.sagelabs.ai",
     "ref": 34
    }
   ],
   "form": "http-header",
   "governance": "IETF HTTP Working Group (`httpbis`, Responsible AD Paul Wouters); IANA registries reviewed by designated experts Justin Richer and Manu Sporny.",
   "group": "Web Bot Auth family",
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against RFC 9421 primary source and confirmed as the base standard profiled by Web Bot Auth"
    },
    {
     "date": "2026-10-28",
     "note": "Verified specification record (RFC 9421 + IANA 2026-10-23 ML-DSA algorithms, 35 sources)"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "http-message-signatures",
   "implementation": "multi-implementation",
   "last_verified": "2026-11-03",
   "name": "HTTP Message Signatures",
   "native_status": "Published RFC — Proposed Standard (February 2024; IESG approved 2023-08-16; Errata 8102 and 8103 verified 2024-10-29)",
   "origin": {
    "date": "2020-04-10",
    "org": "Annabelle Backman (Amazon) and Justin Richer (Bespoke Engineering), editors, with Manu Sporny (Digital Bazaar)"
   },
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "stable",
   "probe": {
    "method": "GET",
    "on_absent": "The message carries no RFC 9421 signature; any profile built on it (e.g. Web Bot Auth) cannot be verified",
    "parse": "Presence of Signature and Signature-Input HTTP fields (or their Content-Digest/Signature-related trailers) conforming to RFC 9421's structured-field syntax",
    "path": "n/a — inspect response/request headers on any HTTP exchange"
   },
   "question": "How can HTTP messages carry end-to-end component integrity and proof of possession, independent of transport-layer security?",
   "scope": "general",
   "spec_url": "https://www.rfc-editor.org/info/rfc9421/",
   "step": "identify",
   "summary_md": "**HTTP Message Signatures** (`RFC 9421`) is an IETF Proposed Standard (published February 2024 by the `httpbis` Working Group, edited by Annabelle Backman and Justin Richer with author Manu Sporny) that defines how to create, encode, and verify detached digital signatures or MACs over selected components of an HTTP message across multi-hop connections and intermediary transformations. Agentic and web security protocols that profile `RFC 9421` to bind application keys to HTTP requests include [Web Bot Auth](/protocols/webbotauth/), Visa's [Trusted Agent Protocol](/protocols/tap/), [WIMSE](/protocols/wimse/), [AAuth](/protocols/aauth-hardt/), and GNAP (`RFC 9635` `httpsig`). A signer declares the ordered covered HTTP fields and `@`-prefixed derived components alongside signature parameters (`alg`, `created`, `expires`, `keyid`, `nonce`, `tag`) in the `Signature-Input` Dictionary Structured Field (`RFC 8941`), and carries the signature bytes under the matching label in `Signature` (with optional verifier negotiation via `Accept-Signature`). Both endpoints canonicalize the covered components into an ASCII `signature-base` closed by a `\"@signature-params\"` line. Evolved from the individual `draft-cavage-http-signatures` series (replaced in April 2020 and approved by the IESG on `2023-08-16`), `RFC 9421` incorporates verified errata 8102 and 8103 (`2024-10-29`) and an IANA algorithm registry updated on `2026-10-23` with FIPS 204 `ml-dsa-44`, `ml-dsa-65`, and `ml-dsa-87`.",
   "track": "ietf",
   "version": {
    "label": "RFC 9421",
    "date": "2024-02"
   },
   "watch": [
    {
     "type": "page",
     "url": "https://www.rfc-editor.org/info/rfc9421",
     "selector": "main",
     "cadence": "weekly"
    }
   ],
   "use_cases": [
    "prove-agent-identity",
    "attribute-agent-traffic"
   ],
   "audience": [
    "platform",
    "agent-builder",
    "standards-body"
   ],
   "pairs_with": [
    "webbotauth",
    "wimse",
    "aauth-hardt",
    "tap"
   ],
   "prerequisites": [],
   "hatnote_md": "This article covers HTTP Message Signatures (RFC 9421), the IETF Standards Track specification for signing and verifying HTTP message components. For the automated-traffic profile that adds the `Signature-Agent` header and a well-known JWKS directory, see [Web Bot Auth](/protocols/webbotauth/); for workload-to-workload service traffic, see [WIMSE](/protocols/wimse/); for the superseded individual draft series that Mastodon still supports alongside RFC 9421, see Signing HTTP Messages (`draft-cavage-http-signatures`).",
   "ietf_tracker": {
    "doc": "rfc9421",
    "rev": null,
    "state": "rfc",
    "stream": "IETF",
    "group_type": "WG",
    "wg": "httpbis",
    "replaced_by": null,
    "posted_utc": "2024-02",
    "expires_utc": null,
    "as_of": "2026-11-03",
    "source": "https://datatracker.ietf.org/doc/rfc9421/",
    "source_label": "per IETF Datatracker"
   },
   "tier": "flagship",
   "lifecycle_status": "published_standard",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-03",
   "v05_hatnote_html_md": "This article covers HTTP Message Signatures (RFC 9421), the IETF Standards Track specification for signing and verifying HTTP message components. For the automated-traffic profile that adds the `Signature-Agent` header and a well-known JWKS directory, see [Web Bot Auth](/protocols/webbotauth/); for workload-to-workload service traffic, see [WIMSE](/protocols/wimse/); for the superseded individual draft series that Mastodon still supports alongside RFC 9421, see Signing HTTP Messages (`draft-cavage-http-signatures`). [1][2][3][4][5]",
   "v05_elevator_pitch_md": "HTTP Message Signatures (`RFC 9421`) is a cryptographic signing standard that lets HTTP clients, APIs, and AI agents sign selected headers and request components—serving as the message-authentication foundation for protocols such as Web Bot Auth and Trusted Agent Protocol. Instead of relying on single-hop TLS that terminates at proxies or full-message hashes that break under legitimate header transformations, a signer declares covered components in `Signature-Input` and attaches a detached signature in `Signature` that remains verifiable end-to-end across intermediaries. [1]",
   "v05_lead_md": "**HTTP Message Signatures** (`RFC 9421`) is an IETF Proposed Standard (published February 2024 by the `httpbis` Working Group, edited by Annabelle Backman and Justin Richer with author Manu Sporny) that defines how to create, encode, and verify detached digital signatures or MACs over selected components of an HTTP message across multi-hop connections and intermediary transformations. [1][6] Agentic and web security protocols that profile `RFC 9421` to bind application keys to HTTP requests include [Web Bot Auth](/protocols/webbotauth/), Visa's [Trusted Agent Protocol](/protocols/tap/), [WIMSE](/protocols/wimse/), [AAuth](/protocols/aauth-hardt/), and GNAP (`RFC 9635` `httpsig`). [2][3][7][8][9] A signer declares the ordered covered HTTP fields and `@`-prefixed derived components alongside signature parameters (`alg`, `created`, `expires`, `keyid`, `nonce`, `tag`) in the `Signature-Input` Dictionary Structured Field (`RFC 8941`), and carries the signature bytes under the matching label in `Signature` (with optional verifier negotiation via `Accept-Signature`). [1] Both endpoints canonicalize the covered components into an ASCII `signature-base` closed by a `\"@signature-params\"` line. [1] Evolved from the individual `draft-cavage-http-signatures` series (replaced in April 2020 and approved by the IESG on `2023-08-16`), `RFC 9421` incorporates verified errata 8102 and 8103 (`2024-10-29`) and an IANA algorithm registry updated on `2026-10-23` with FIPS 204 `ml-dsa-44`, `ml-dsa-65`, and `ml-dsa-87`. [1][4][10][11][12]",
   "v05_identity_sentence_md": "**HTTP Message Signatures** (`RFC 9421`) is an IETF Proposed Standard (published February 2024 by the `httpbis` Working Group, edited by Annabelle Backman and Justin Richer with author Manu Sporny) that defines how to create, encode, and verify detached digital signatures or MACs over selected components of an HTTP message across multi-hop connections and intermediary transformations. [1][6] Agentic and web security protocols that profile `RFC 9421` to bind application keys to HTTP requests include [Web Bot Auth](/protocols/webbotauth/), Visa's [Trusted Agent Protocol](/protocols/tap/), [WIMSE](/protocols/wimse/), [AAuth](/protocols/aauth-hardt/), and GNAP (`RFC 9635` `httpsig`). [2][3][7][8][9]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Identify](/category/identify/) (`identify`)"
    },
    {
     "label": "Also known as",
     "value_md": "RFC 9421; `draft-ietf-httpbis-message-signatures` [1][6]"
    },
    {
     "label": "Form",
     "value_md": "HTTP header (`http-header`)"
    },
    {
     "label": "Originated by",
     "value_md": "Annabelle Backman (Amazon) and Justin Richer (Bespoke Engineering), editors, with Manu Sporny (Digital Bazaar) (`httpbis` WG `-00` posted 2020-04-10) [1][10]"
    },
    {
     "label": "Governed by",
     "value_md": "IETF HTTP Working Group (`httpbis`, Responsible AD Paul Wouters); IANA registries reviewed by designated experts Justin Richer and Manu Sporny [6][12]"
    },
    {
     "label": "Track",
     "value_md": "IETF Standards Track — Proposed Standard (`RFC 9421`, published February 2024) [1][6]"
    },
    {
     "label": "IETF tracker",
     "value_md": "[RFC 9421](https://datatracker.ietf.org/doc/rfc9421/) · Proposed Standard (February 2024) · published from `draft-ietf-httpbis-message-signatures-19` (`httpbis` WG) [6][10]"
    },
    {
     "label": "Status",
     "value_md": "Published RFC — Proposed Standard (February 2024; IESG approved 2023-08-16; Errata 8102 and 8103 verified 2024-10-29) [6][10][11]"
    },
    {
     "label": "Version",
     "value_md": "`RFC 9421` (February 2024); IANA registries updated 2026-10-23 (adding FIPS 204 post-quantum `ml-dsa-44`, `ml-dsa-65`, and `ml-dsa-87`) [1][12]"
    },
    {
     "label": "Headers",
     "value_md": "`Signature`, `Signature-Input`, and `Accept-Signature` (permanent IANA registration; RFC 8941 Dictionary Structured Fields) [1][13]"
    },
    {
     "label": "Message format",
     "value_md": "Canonical ASCII `signature-base` of covered HTTP fields and `@`-prefixed derived components terminated by `\"@signature-params\"` [1]"
    },
    {
     "label": "IANA registration",
     "value_md": "HTTP Signature Algorithms (9 active), HTTP Signature Metadata Parameters (6), HTTP Signature Derived Component Names (10), and HTTP Signature Component Parameters (6); created 2023-08-18, last updated 2026-10-23 [12]"
    },
    {
     "label": "Specification",
     "value_md": "[RFC 9421: HTTP Message Signatures](https://www.rfc-editor.org/rfc/rfc9421.html) [1]"
    },
    {
     "label": "Found at",
     "value_md": "In-band HTTP message headers (`Signature`, `Signature-Input`, `Accept-Signature`); key resolution via `keyid`, preregistered keys, or profile-specific directories [1]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust Legal Provisions (BCP 78; Copyright 2024 IETF Trust and document authors) [1]"
    }
   ],
   "v05_problem_md": "TLS guarantees integrity and authenticity over a single connection. A path made of several TLS connections, for example a TLS-terminating gateway or a TLS inspection appliance, cannot provide end-to-end integrity or authenticity between client and application. Intermediaries may transform the message, so received bytes need not be bitwise-equivalent to the bytes sent. [1][2] An `RFC 9421` detached signature over canonicalized HTTP components remains verifiable after intermediary transformations permitted by HTTP and binds an application-specific key to the message at the HTTP layer—independently of any TLS certificates or transport termination, as profiled by Web Bot Auth and GNAP's `httpsig` proof method. [1][2][9] The specification is only part of a full security system. A profile has to define the required components and signature parameters, the allowable algorithms, and key retrieval, usually from `keyid`. Because `RFC 9421` covers HTTP fields and derived components rather than message content directly, a profile that needs body coverage signs a `Content-Digest` or `Repr-Digest` field from `RFC 9530`. [1][14]",
   "v05_mechanism_delta_md": "An `RFC 9421` detached signature over canonicalized HTTP components remains verifiable after intermediary transformations permitted by HTTP and binds an application-specific key to the message at the HTTP layer—independently of any TLS certificates or transport termination, as profiled by Web Bot Auth and GNAP's `httpsig` proof method. [1][2][9]",
   "v05_scope_boundary_md": "The specification is only part of a full security system. A profile has to define the required components and signature parameters, the allowable algorithms, and key retrieval, usually from `keyid`. Because `RFC 9421` covers HTTP fields and derived components rather than message content directly, a profile that needs body coverage signs a `Content-Digest` or `Repr-Digest` field from `RFC 9530`. [1][14]",
   "v05_fuzzy_additions": [
    {
     "id": "signature-base-construction-and-header-fields",
     "heading": "Signature base construction and header fields",
     "body_md": "An ASCII signature base is built in order from the covered components and closed by a signature-params line. `Signature-Input` and `Signature` are `RFC 8941` Dictionary Structured Fields under one shared label, carrying the component list plus parameters and the signature bytes. [1]",
     "bullets": [
      {
       "label": "ASCII signature base",
       "text_md": "Signature-base construction starts from an empty ASCII string. Each covered component appends its double-quoted identifier (with any parameters outside the quotes), a colon, a single space, the canonicalized component value, and a newline (`LF`); duplicate identifiers, unknown parameters, missing fields, unresolved derived components, or non-ASCII characters abort signature-base generation immediately. [1]"
      },
      {
       "label": "Final signature-params line",
       "text_md": "The signature parameters component is required as the last line and is not one of the covered components. That line is `\"@signature-params\"`, a colon, a space, and an Inner List of the covered identifiers in the same order, then the parameters. The chosen order cannot change. [1]"
      },
      {
       "label": "Shared Dictionary label",
       "text_md": "`Signature-Input` is a Dictionary whose label keys both fields. Its Inner List and metadata must match the `@signature-params` value, including order. `Signature` holds the Byte Sequence under that label. Labels are unique, and it is recommended that `Signature-Input` appear only as a header field because intermediaries may drop trailers. [1]"
      },
      {
       "label": "Parameters and algorithms",
       "text_md": "`created` and `expires` are UNIX timestamp Integers with no sub-second precision; `created` is recommended. `nonce`, `alg`, `keyid`, and `tag` are Strings for a unique value, the algorithm, the key material, and an application tag. Initial Active entries are `rsa-pss-sha512`, `rsa-v1_5-sha256`, `hmac-sha256`, `ecdsa-p256-sha256`, `ecdsa-p384-sha384`, and `ed25519`. The registry, last updated `2026-10-23`, also lists `ml-dsa-44`, `ml-dsa-65`, and `ml-dsa-87`. [1][12]"
      }
     ]
    },
    {
     "id": "derived-components-content-digests-and-response-binding",
     "heading": "Derived components, content digests, and response binding",
     "body_md": "Derived component names start with `@` so they cannot collide with HTTP field names, addressing request method, target URI, authority, scheme, request target, path, query, individual query parameters, and response status. Companion mechanisms use `RFC 9530` digest fields to cover message content, the `req` parameter to bind a signed response to its triggering request, and downstream profiles such as Web Bot Auth to specify mandatory components and parameters. [1][2]",
     "bullets": [
      {
       "label": "Request-target components",
       "text_md": "`@method` keeps the method's case. `@target-uri` is the full target URI, including the authority. `@authority` is the lowercased host and optional port, preferred over the `Host` field. `@scheme` is lowercased. `@request-target` is not recommended when an HTTP version other than 1.1 may be in use. [1]"
      },
      {
       "label": "Path, query, and status",
       "text_md": "`@path` is the absolute path with no query; an empty path is one slash, and percent-encoding stays encoded. `@query` is the whole query, including the leading question mark. `@query-param` selects one `application/x-www-form-urlencoded` parameter by its `name`. `@status` is the three-digit response code and is forbidden on a request. [1]"
      },
      {
       "label": "Content and representation digests",
       "text_md": "Content is covered by signing a digest field and checking it against the received body. `Content-Digest` hashes the actual message content, which range requests and `HEAD` can change; `Repr-Digest` hashes the entire selected representation. A new content encoding changes `Content-Digest`, and the intermediary signs again. [1][14]"
      },
      {
       "label": "Response binding, profiles, and RFC 9421 §7 security considerations",
       "text_md": "Adding the `req` Boolean flag to a component identifier in a response signature derives that component from the triggering request (allowing the same component name to appear both with and without `req`), whereas attaching `req` to a request signature produces an error. Downstream profiles define mandatory coverage—for example, Web Bot Auth requires `@authority` or `@target-uri` plus `created`, `expires`, a `keyid` JWK SHA-256 thumbprint, and `tag` `web-bot-auth` (with optional `Content-Digest` body coverage). Under RFC 9421 Section 7 (Security Considerations), a valid signature on an HTTP message is not sufficient to prove that the message has been signed by the appropriate party; the verifier must ensure that a given key and algorithm are appropriate for the message in question and protect against key specification downgrade attacks (Section 7.3.6). Because HTTP message signatures allow sub-portions of a message to be signed, applications must mitigate signature replay (Section 7.2.2) using profile-selected parameters such as created (RECOMMENDED), expires, or nonce, verify Content-Digest against received content when body integrity is required, avoid relying on signatures of signatures because they do not provide transitive coverage of covered components (Section 7.3.7), and guard against canonicalization attacks (Section 7.5.5) where ambiguity in generating the signature base could allow an attacker to substitute or break a signature. [1][2]"
      }
     ]
    }
   ],
   "v05_diagram": {
    "title": "Accept-Signature negotiation",
    "heading": "Accept-Signature negotiation",
    "mermaid": "sequenceDiagram\n    participant Client\n    participant Server\n    alt Accept-Signature on the request\n        Client->>Server: Request carrying Accept-Signature\n        Server-->>Client: Response carrying Signature-Input and Signature\n    else Accept-Signature on the response\n        Server-->>Client: Response carrying Accept-Signature\n        Client->>Server: Next request carrying Signature-Input and Signature\n    end\n    Note over Client,Server: A signer may attach Signature-Input and Signature with no Accept-Signature",
    "caption_md": "`Accept-Signature` on a request targets the response. `Accept-Signature` on a response targets the client's next request. A signer may attach `Signature-Input` and `Signature` with no prompt. [1]"
   },
   "v05_wire_artifact": {
    "title": "RFC 9421 B.2.2 Signature-Input and Signature over authority, Content-Digest, and one query parameter",
    "heading": "RFC 9421 B.2.2 Signature-Input and Signature over authority, Content-Digest, and one query parameter",
    "lang": "http",
    "code": "Signature-Input: sig-b22=(\"@authority\" \"content-digest\" \\\n  \"@query-param\";name=\"Pet\");created=1618884473\\\n  ;keyid=\"test-key-rsa-pss\";tag=\"header-example\"\nSignature: sig-b22=:LjbtqUbfmvjj5C5kr1Ugj4PmLYvx9wVjZvD9GsTT4F7GrcQ\\\n  EdJzgI9qHxICagShLRiLMlAJjtq6N4CDfKtjvuJyE5qH7KT8UCMkSowOB4+ECxCmT\\\n  8rtAmj/0PIXxi0A0nxKyB09RNrCQibbUjsLS/2YyFYXEu4TRJQzRw1rLEuEfY17SA\\\n  RYhpTlaqwZVtR8NV7+4UKkjqpcAoFqWFQh62s7Cl+H2fjBSpqfZUJcsIk4N6wiKYd\\\n  4je2U/lankenQ99PZfB4jY3I5rSV2DSBVkSFsURIjYErOs0tFTQosMTAoxk//0RoK\\\n  UqiYY8Bh0aaUEb0rQl3/XaVe4bXTugEjHSw==:",
    "caption_md": "`Signature-Input` and `Signature` under the label `sig-b22`, covering `@authority`, `content-digest`, and `@query-param`. [1]"
   },
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "Signing HTTP Messages (draft-cavage-http-signatures)",
      "spec_or_rfc": "draft-cavage-http-signatures-12",
      "relation_type": "supersedes",
      "relation_label": "Supersedes",
      "delta_md": "Replaces Mark Cavage and Manu Sporny's individual draft (`draft-cavage-http-signatures-12`, last updated 2019-10-21) with RFC 8941 Dictionary Structured Fields (`Signature-Input` and `Signature`) and `@`-prefixed derived components (`@method`, `@target-uri`, `@authority`) instead of `(request-target)`. [1][4]"
     },
     {
      "name": "JSON Web Signature (JWS, RFC 7515)",
      "spec_or_rfc": "RFC 7515",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "Uses a detached signature over in-place HTTP message components rather than duplicating message elements inside a JWS payload; when a JOSE algorithm is used, the raw ASCII `signature-base` serves as the `JWS Signing Input` without a JOSE Header or Base64 pre-encoding. [1]"
     },
     {
      "name": "Digest Fields (RFC 9530)",
      "spec_or_rfc": "RFC 9530",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Because RFC 9421 does not directly hash HTTP message bodies, signers cover the `Content-Digest` or `Repr-Digest` fields defined in RFC 9530 to bind payload integrity into the HTTP message signature. [1][14]"
     },
     {
      "name": "Grant Negotiation and Authorization Protocol (GNAP, RFC 9635)",
      "spec_or_rfc": "RFC 9635",
      "relation_type": "depended_on_by",
      "relation_label": "Depended on by",
      "delta_md": "GNAP profiles RFC 9421 under the `httpsig` key proofing method, requiring `Signature-Input` and `Signature` headers (plus `Content-Digest` when a body is present) to bind grant and continuation requests to the client instance's key. [9]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "webbotauth",
      "target_name": "Web Bot Auth",
      "relation_type": "depended_on_by",
      "relation_label": "Depended on by",
      "delta_md": "Profiles RFC 9421 for automated HTTP clients by adding the `Signature-Agent` Dictionary header (`https` URI to a JWK Set), requiring `tag=\"web-bot-auth\"` on requests, and serving signed JWKS directories (`tag=\"http-message-signatures-directory\"`) at `/.well-known/http-message-signatures-directory`. [2]"
     },
     {
      "target_id": "wimse",
      "target_name": "Workload Identity in Multi System Environments (WIMSE)",
      "relation_type": "depended_on_by",
      "relation_label": "Depended on by",
      "delta_md": "Defines an RFC 9421 profile (`draft-ietf-wimse-http-signature`) for workload-to-workload service authentication, signing requests with the private key bound to a `Workload-Identity-Token` header. [3]"
     },
     {
      "target_id": "aauth-hardt",
      "target_name": "AAuth (Hardt)",
      "relation_type": "depended_on_by",
      "relation_label": "Depended on by",
      "delta_md": "Binds every outbound agent request to the agent instance's signing key using an RFC 9421 HTTP Message Signature paired with metadata published under `/.well-known/aauth-agent.json`, `/.well-known/aauth-person.json`, `/.well-known/aauth-access.json`, and `/.well-known/aauth-resource.json`. [8]"
     },
     {
      "target_id": "tap",
      "target_name": "Trusted Agent Protocol (TAP)",
      "relation_type": "depended_on_by",
      "relation_label": "Depended on by",
      "delta_md": "Profiles RFC 9421 message signature fields and `signature_base` construction so merchants can cryptographically verify Visa-approved commerce agents, consumer recognition, and payment intent. [7]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (14 probed or cited examples across 3 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).",
    "side_a": {
     "visible": true,
     "heading": "Live agent signers & key directories",
     "col4_header": "Directory path, key format & profile",
     "note_md": "Live HTTP 200 key-directory probes and vendor documentation confirm deployment of the named application profile (Web Bot Auth, Trusted Agent Protocol, Universal Commerce Protocol, or ActivityPub) rather than general-purpose conformance to every optional feature of RFC 9421.",
     "rows": [
      {
       "actor": "OpenAI (ChatGPT agent)",
       "role": "Bot / Agent signer (Web Bot Auth profile)",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Web Bot Auth profile: publishes `Ed25519` JWK (`purpose` `ai`) and directory-response signature headers (`tag=\"http-message-signatures-directory\"`).",
       "source_md": "[ChatGPT key directory](https://chatgpt.com/.well-known/http-message-signatures-directory) [15] · [Vercel changelog](https://vercel.com/changelog/vercels-bot-verification-now-supports-web-bot-auth) [16]"
      },
      {
       "actor": "Google (Google-Agent)",
       "role": "Bot / Agent signer (Web Bot Auth profile)",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Web Bot Auth profile: publishes five `Ed25519` JWKs and experimentally signs a subset of `Google-Agent` requests.",
       "source_md": "[Google-Agent key directory](https://agent.bot.goog/.well-known/http-message-signatures-directory) [17] · [Authenticate requests with Web Bot Auth](https://developers.google.com/crawling/docs/crawlers-fetchers/web-bot-auth) [18]"
      },
      {
       "actor": "Browserbase",
       "role": "Bot / Agent signer (Web Bot Auth profile)",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Web Bot Auth profile: publishes two `Ed25519` JWKs (`purpose` `rag`) and directory-response `binding0`/`binding1` signature headers.",
       "source_md": "[Browserbase key directory](https://www.browserbase.com/.well-known/http-message-signatures-directory) [19]"
      },
      {
       "actor": "Shopify (Cloudsurf)",
       "role": "Bot / Agent signer (Web Bot Auth profile)",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Web Bot Auth profile: publishes `Ed25519` JWK (omitting JWK key ID) and `alg=\"ed25519\"` directory-response signature headers.",
       "source_md": "[Cloudsurf key directory](https://cloudsurf.shopify.io/.well-known/http-message-signatures-directory) [20]"
      },
      {
       "actor": "Exa (ExaSearchBot)",
       "role": "Bot / Agent signer (Web Bot Auth profile)",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Web Bot Auth profile: publishes `Ed25519` JWK and signs outbound `ExaSearchBot` requests under RFC 9421.",
       "source_md": "[ExaSearchBot key directory](https://crawler.exa.ai/.well-known/http-message-signatures-directory) [21] · [Exa Search Crawler](https://crawler.exa.ai/) [22]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "CDN, WAF & relying server verifiers",
     "col4_header": "Verified profile & enforcement boundary",
     "note_md": "Vendor and open-source documentation confirms verification or signing support for the named application profile or library surface rather than end-to-end conformance across all RFC 9421 profiles.",
     "rows": [
      {
       "actor": "Cloudflare",
       "role": "CDN / WAF verifier (Web Bot Auth profile)",
       "status": "Partial",
       "status_display": "Partial · as of 2026-10-08",
       "col4_md": "Web Bot Auth edge verifier (`draft-meunier-http-message-signatures-directory-03`); supports RFC 9421 subset and rejects dictionary `Signature-Agent`.",
       "source_md": "[Web Bot Auth docs](https://developers.cloudflare.com/bots/reference/bot-verification/web-bot-auth/) [23] · [Verified bots with cryptography](https://blog.cloudflare.com/verified-bots-with-cryptography/) [24]"
      },
      {
       "actor": "Akamai (App & API Protector)",
       "role": "CDN / WAF verifier (Web Bot Auth & TAP profiles)",
       "status": "Partial",
       "status_display": "Partial · as of 2025-11-10",
       "col4_md": "Validates Web Bot Auth and Visa Trusted Agent Protocol signatures at the edge using RFC 9421 rules.",
       "source_md": "[Redefine Trust with Web Bot Authentication](https://web.archive.org/web/20260609113733/https://www.akamai.com/blog/security/redefine-trust-web-bot-authentication) [25]"
      },
      {
       "actor": "Vercel",
       "role": "CDN / WAF verifier (Web Bot Auth profile)",
       "status": "Partial",
       "status_display": "Partial · as of 2025-08-12",
       "col4_md": "Bot Protection verifies HTTP Message Signatures under the Web Bot Auth profile, allowing signed ChatGPT operator requests.",
       "source_md": "[Vercel changelog](https://vercel.com/changelog/vercels-bot-verification-now-supports-web-bot-auth) [16]"
      },
      {
       "actor": "AWS WAF",
       "role": "CDN / WAF verifier (Web Bot Auth profile)",
       "status": "Partial",
       "status_display": "Partial · as of 2025-11-21",
       "col4_md": "Verifies Web Bot Auth HTTP message signatures for AI agents on AWS WAF protecting Amazon CloudFront.",
       "source_md": "[AWS What's New](https://aws.amazon.com/about-aws/whats-new/2025/11/aws-waf-web-bot-auth-support/) [26]"
      },
      {
       "actor": "Mastodon",
       "role": "Fediverse verifier & fallback signer",
       "status": "Partial",
       "status_display": "Partial · as of 2026-08-20",
       "col4_md": "`v4.4.0` added experimental inbound verification behind `http_message_signatures`; `v4.5.0`+ enables it unconditionally; `v4.7.0` adds `Ed25519` validation and outgoing `RFC9421` signatures as a fallback to `draft-cavage-http-signatures`.",
       "source_md": "[Mastodon security specification](https://docs.joinmastodon.org/spec/security/) [5] · [Mastodon v4.4.0](https://github.com/mastodon/mastodon/releases/tag/v4.4.0) [27] · [Mastodon v4.5.0](https://github.com/mastodon/mastodon/releases/tag/v4.5.0) [28] · [Mastodon v4.7.0](https://github.com/mastodon/mastodon/releases/tag/v4.7.0) [29]"
      },
      {
       "actor": "Visa (Trusted Agent Protocol)",
       "role": "Commerce verifier (TAP profile)",
       "status": "Partial",
       "status_display": "Partial · checked 2026-10-30",
       "col4_md": "Trusted Agent Protocol profiles RFC 9421 `signature_base` reconstruction and public-key verification to authenticate Visa-approved commerce agents.",
       "source_md": "[Trusted Agent Protocol](https://developer.visa.com/docs/trusted-agent-protocol) [7]"
      },
      {
       "actor": "Adyen",
       "role": "Commerce verifier (UCP profile)",
       "status": "Partial",
       "status_display": "Partial · checked 2026-10-30",
       "col4_md": "Requires UCP profile of RFC 9421 (`Signature`, `Signature-Input`, `UCP-Agent`, and `Content-Digest`) on checkout session operations.",
       "source_md": "[Adyen UCP agent integration](https://docs.adyen.com/online-payments/agentic-commerce/agent-platform/ai-agent-integration-ucp) [30]"
      }
     ]
    },
    "additional_tables": [
     {
      "visible": true,
      "heading": "General HTTP clients & cryptographic libraries",
      "col4_header": "RFC 9421 signing / crypto surface",
      "note_md": null,
      "rows": [
       {
        "actor": "curl",
        "role": "HTTP client signer (general RFC 9421)",
        "status": "Experimental",
        "status_display": "Experimental · as of 2026-09-02",
        "col4_md": "Experimental RFC 9421 request signing in v8.22.0+ via `--httpsig-algo` (`ed25519` default and `hmac-sha256`).",
        "source_md": "[HTTP Message Signatures with curl](https://daniel.haxx.se/blog/2026/07/27/http-message-signatures-with-curl/) [31] · [curl changelog](https://curl.se/changes.html) [32]"
       },
       {
        "actor": "wolfSSL",
        "role": "Crypto library (curl / libcurl RFC 9421)",
        "status": "Development",
        "status_display": "Development · as of 2026-06-12",
        "col4_md": "Contributes native RFC 9421 `Ed25519` signing in curl/libcurl via open PRs `curl/curl#21239` and `wolfSSL/wolfssl-examples#566`.",
        "source_md": "[wolfSSL, native HTTP Message Signatures in curl](https://www.wolfssl.com/native-http-message-signatures-in-curl-powered-by-wolfssl-part-3/) [33]"
       }
      ]
     }
    ],
    "censuses": [
     {
      "label": "IANA HTTP Message Signature Registries",
      "as_of": "2026-10-23",
      "value_md": "9 active HTTP Signature Algorithms (6 baseline RFC 9421 algorithms: rsa-pss-sha512, rsa-v1_5-sha256, hmac-sha256, ecdsa-p256-sha256, ecdsa-p384-sha384, and ed25519; plus 3 FIPS 204 post-quantum ML-DSA algorithms from c2sp.org/httpsig-pq@v1.0.1: ml-dsa-44, ml-dsa-65, and ml-dsa-87), 6 HTTP Signature Metadata Parameters (alg, created, expires, keyid, nonce, tag), 10 HTTP Signature Derived Component Names (@signature-params, @method, @authority, @scheme, @target-uri, @request-target, @path, @query, @query-param, @status), and 6 HTTP Signature Component Parameters (sf, key, bs, tr, req, name), last updated 2026-10-23. [12]"
     },
     {
      "label": "Cloudflare Radar signature-agent-registry directory URLs",
      "as_of": "2026-10-30",
      "value_md": "528 distinct directory URLs ending in /.well-known/http-message-signatures-directory (plus https://www.sagelabs.ai) in Cloudflare Radar's signature-agent-registry.txt list, last-modified Fri, 30 Oct 2026 00:00:47 GMT. [34]"
     }
    ],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**Depended on by:** [Cloudflare Pay Per Crawl](/protocols/cloudflare-pay-per-crawl/), [Ad Context Protocol (AdCP)](/protocols/adcp/), [Agent Identity & Discovery (AID)](/protocols/aid/), [AI Identity Management System (AIMS)](/protocols/wimse-aims/), [An Attenuated Delegation Profile for Automated Agents](/protocols/oauth-agent-delegation/), [Signature Agent Card (Web Bot Auth registry)](/protocols/web-bot-auth-signature-agent-card/)"
    },
    {
     "item_md": "**Peer alternatives:** [Anonymous Bot Authentication](/protocols/anonymous-bot-auth/), [Per-Call Proof for Local Tool Invocation by AI Agents](/protocols/local-tool-call-proof/), [x401: HTTP Proof Requirement Protocol](/protocols/x401/)"
    },
    {
     "item_md": "**Complements:** [Universal Commerce Protocol (UCP)](/protocols/ucp/), [AI Agent Authentication and Authorization](/protocols/aiagent-auth/), [ID MANDAT: A Machine-Readable Credential for the Agents of a Company](/protocols/idmandat-credential/), [Security Principal and Verifier Binding for Agent Communication Protocols](/protocols/agent-principal-binding/)"
    },
    {
     "item_md": "**[Identify protocols](/category/identify/)** — Category index for `identify` standards."
    }
   ],
   "v05_compiled_md": "---\nid: http-message-signatures\ntitle: \"HTTP Message Signatures\"\ntier: flagship\nlifecycle_status: published_standard\ncategory: identify\nform: http-header\nwire_archetype: identity_auth_crypto\nspec_url: https://www.rfc-editor.org/rfc/rfc9421.html\nlast_checked: 2026-11-03\n---\n\n# HTTP Message Signatures\n\n**Category:** [Identify](/category/identify/) (`identify`) · **Form:** HTTP header (`http-header`) · **Last checked:** 2026-11-03\n\n> *This article covers HTTP Message Signatures (RFC 9421), the IETF Standards Track specification for signing and verifying HTTP message components. For the automated-traffic profile that adds the `Signature-Agent` header and a well-known JWKS directory, see [Web Bot Auth](/protocols/webbotauth/); for workload-to-workload service traffic, see [WIMSE](/protocols/wimse/); for the superseded individual draft series that Mastodon still supports alongside RFC 9421, see Signing HTTP Messages (`draft-cavage-http-signatures`). [1][2][3][4][5]*\n\n> **In brief:** HTTP Message Signatures (`RFC 9421`) is a cryptographic signing standard that lets HTTP clients, APIs, and AI agents sign selected headers and request components—serving as the message-authentication foundation for protocols such as Web Bot Auth and Trusted Agent Protocol. Instead of relying on single-hop TLS that terminates at proxies or full-message hashes that break under legitimate header transformations, a signer declares covered components in `Signature-Input` and attaches a detached signature in `Signature` that remains verifiable end-to-end across intermediaries. [1]\n\n**HTTP Message Signatures** (`RFC 9421`) is an IETF Proposed Standard (published February 2024 by the `httpbis` Working Group, edited by Annabelle Backman and Justin Richer with author Manu Sporny) that defines how to create, encode, and verify detached digital signatures or MACs over selected components of an HTTP message across multi-hop connections and intermediary transformations. [1][6] Agentic and web security protocols that profile `RFC 9421` to bind application keys to HTTP requests include [Web Bot Auth](/protocols/webbotauth/), Visa's [Trusted Agent Protocol](/protocols/tap/), [WIMSE](/protocols/wimse/), [AAuth](/protocols/aauth-hardt/), and GNAP (`RFC 9635` `httpsig`). [2][3][7][8][9] A signer declares the ordered covered HTTP fields and `@`-prefixed derived components alongside signature parameters (`alg`, `created`, `expires`, `keyid`, `nonce`, `tag`) in the `Signature-Input` Dictionary Structured Field (`RFC 8941`), and carries the signature bytes under the matching label in `Signature` (with optional verifier negotiation via `Accept-Signature`). [1] Both endpoints canonicalize the covered components into an ASCII `signature-base` closed by a `\"@signature-params\"` line. [1] Evolved from the individual `draft-cavage-http-signatures` series (replaced in April 2020 and approved by the IESG on `2023-08-16`), `RFC 9421` incorporates verified errata 8102 and 8103 (`2024-10-29`) and an IANA algorithm registry updated on `2026-10-23` with FIPS 204 `ml-dsa-44`, `ml-dsa-65`, and `ml-dsa-87`. [1][4][10][11][12]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Identify](/category/identify/) (`identify`) |\n| **Also known as** | RFC 9421; `draft-ietf-httpbis-message-signatures` [1][6] |\n| **Form** | HTTP header (`http-header`) |\n| **Originated by** | Annabelle Backman (Amazon) and Justin Richer (Bespoke Engineering), editors, with Manu Sporny (Digital Bazaar) (`httpbis` WG `-00` posted 2020-04-10) [1][10] |\n| **Governed by** | IETF HTTP Working Group (`httpbis`, Responsible AD Paul Wouters); IANA registries reviewed by designated experts Justin Richer and Manu Sporny [6][12] |\n| **Track** | IETF Standards Track — Proposed Standard (`RFC 9421`, published February 2024) [1][6] |\n| **IETF tracker** | [RFC 9421](https://datatracker.ietf.org/doc/rfc9421/) · Proposed Standard (February 2024) · published from `draft-ietf-httpbis-message-signatures-19` (`httpbis` WG) [6][10] |\n| **Status** | Published RFC — Proposed Standard (February 2024; IESG approved 2023-08-16; Errata 8102 and 8103 verified 2024-10-29) [6][10][11] |\n| **Version** | `RFC 9421` (February 2024); IANA registries updated 2026-10-23 (adding FIPS 204 post-quantum `ml-dsa-44`, `ml-dsa-65`, and `ml-dsa-87`) [1][12] |\n| **Headers** | `Signature`, `Signature-Input`, and `Accept-Signature` (permanent IANA registration; RFC 8941 Dictionary Structured Fields) [1][13] |\n| **Message format** | Canonical ASCII `signature-base` of covered HTTP fields and `@`-prefixed derived components terminated by `\"@signature-params\"` [1] |\n| **IANA registration** | HTTP Signature Algorithms (9 active), HTTP Signature Metadata Parameters (6), HTTP Signature Derived Component Names (10), and HTTP Signature Component Parameters (6); created 2023-08-18, last updated 2026-10-23 [12] |\n| **Specification** | [RFC 9421: HTTP Message Signatures](https://www.rfc-editor.org/rfc/rfc9421.html) [1] |\n| **Found at** | In-band HTTP message headers (`Signature`, `Signature-Input`, `Accept-Signature`); key resolution via `keyid`, preregistered keys, or profile-specific directories [1] |\n| **Licence** | IETF Trust Legal Provisions (BCP 78; Copyright 2024 IETF Trust and document authors) [1] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Signature base construction and header fields](#signature-base-construction-and-header-fields)\n3. [Derived components, content digests, and response binding](#derived-components-content-digests-and-response-binding)\n4. [Counterparts and related standards](#counterparts-and-related-standards)\n5. [Adoption and ecosystem](#adoption-and-ecosystem)\n6. [See also](#see-also)\n7. [References](#references)\n\n---\n\n## Problem and scope\n\nTLS guarantees integrity and authenticity over a single connection. A path made of several TLS connections, for example a TLS-terminating gateway or a TLS inspection appliance, cannot provide end-to-end integrity or authenticity between client and application. Intermediaries may transform the message, so received bytes need not be bitwise-equivalent to the bytes sent. [1][2] An `RFC 9421` detached signature over canonicalized HTTP components remains verifiable after intermediary transformations permitted by HTTP and binds an application-specific key to the message at the HTTP layer—independently of any TLS certificates or transport termination, as profiled by Web Bot Auth and GNAP's `httpsig` proof method. [1][2][9] The specification is only part of a full security system. A profile has to define the required components and signature parameters, the allowable algorithms, and key retrieval, usually from `keyid`. Because `RFC 9421` covers HTTP fields and derived components rather than message content directly, a profile that needs body coverage signs a `Content-Digest` or `Repr-Digest` field from `RFC 9530`. [1][14]\n\n### Accept-Signature negotiation\n\n```mermaid\nsequenceDiagram\n    participant Client\n    participant Server\n    alt Accept-Signature on the request\n        Client->>Server: Request carrying Accept-Signature\n        Server-->>Client: Response carrying Signature-Input and Signature\n    else Accept-Signature on the response\n        Server-->>Client: Response carrying Accept-Signature\n        Client->>Server: Next request carrying Signature-Input and Signature\n    end\n    Note over Client,Server: A signer may attach Signature-Input and Signature with no Accept-Signature\n```\n\n*`Accept-Signature` on a request targets the response. `Accept-Signature` on a response targets the client's next request. A signer may attach `Signature-Input` and `Signature` with no prompt. [1]*\n\n### RFC 9421 B.2.2 Signature-Input and Signature over authority, Content-Digest, and one query parameter\n\n```http\nSignature-Input: sig-b22=(\"@authority\" \"content-digest\" \\\n  \"@query-param\";name=\"Pet\");created=1618884473\\\n  ;keyid=\"test-key-rsa-pss\";tag=\"header-example\"\nSignature: sig-b22=:LjbtqUbfmvjj5C5kr1Ugj4PmLYvx9wVjZvD9GsTT4F7GrcQ\\\n  EdJzgI9qHxICagShLRiLMlAJjtq6N4CDfKtjvuJyE5qH7KT8UCMkSowOB4+ECxCmT\\\n  8rtAmj/0PIXxi0A0nxKyB09RNrCQibbUjsLS/2YyFYXEu4TRJQzRw1rLEuEfY17SA\\\n  RYhpTlaqwZVtR8NV7+4UKkjqpcAoFqWFQh62s7Cl+H2fjBSpqfZUJcsIk4N6wiKYd\\\n  4je2U/lankenQ99PZfB4jY3I5rSV2DSBVkSFsURIjYErOs0tFTQosMTAoxk//0RoK\\\n  UqiYY8Bh0aaUEb0rQl3/XaVe4bXTugEjHSw==:\n```\n\n*`Signature-Input` and `Signature` under the label `sig-b22`, covering `@authority`, `content-digest`, and `@query-param`. [1]*\n\n---\n\n## Signature base construction and header fields\n\nAn ASCII signature base is built in order from the covered components and closed by a signature-params line. `Signature-Input` and `Signature` are `RFC 8941` Dictionary Structured Fields under one shared label, carrying the component list plus parameters and the signature bytes. [1]\n\n- **ASCII signature base:** Signature-base construction starts from an empty ASCII string. Each covered component appends its double-quoted identifier (with any parameters outside the quotes), a colon, a single space, the canonicalized component value, and a newline (`LF`); duplicate identifiers, unknown parameters, missing fields, unresolved derived components, or non-ASCII characters abort signature-base generation immediately. [1]\n- **Final signature-params line:** The signature parameters component is required as the last line and is not one of the covered components. That line is `\"@signature-params\"`, a colon, a space, and an Inner List of the covered identifiers in the same order, then the parameters. The chosen order cannot change. [1]\n- **Shared Dictionary label:** `Signature-Input` is a Dictionary whose label keys both fields. Its Inner List and metadata must match the `@signature-params` value, including order. `Signature` holds the Byte Sequence under that label. Labels are unique, and it is recommended that `Signature-Input` appear only as a header field because intermediaries may drop trailers. [1]\n- **Parameters and algorithms:** `created` and `expires` are UNIX timestamp Integers with no sub-second precision; `created` is recommended. `nonce`, `alg`, `keyid`, and `tag` are Strings for a unique value, the algorithm, the key material, and an application tag. Initial Active entries are `rsa-pss-sha512`, `rsa-v1_5-sha256`, `hmac-sha256`, `ecdsa-p256-sha256`, `ecdsa-p384-sha384`, and `ed25519`. The registry, last updated `2026-10-23`, also lists `ml-dsa-44`, `ml-dsa-65`, and `ml-dsa-87`. [1][12]\n\n---\n\n## Derived components, content digests, and response binding\n\nDerived component names start with `@` so they cannot collide with HTTP field names, addressing request method, target URI, authority, scheme, request target, path, query, individual query parameters, and response status. Companion mechanisms use `RFC 9530` digest fields to cover message content, the `req` parameter to bind a signed response to its triggering request, and downstream profiles such as Web Bot Auth to specify mandatory components and parameters. [1][2]\n\n- **Request-target components:** `@method` keeps the method's case. `@target-uri` is the full target URI, including the authority. `@authority` is the lowercased host and optional port, preferred over the `Host` field. `@scheme` is lowercased. `@request-target` is not recommended when an HTTP version other than 1.1 may be in use. [1]\n- **Path, query, and status:** `@path` is the absolute path with no query; an empty path is one slash, and percent-encoding stays encoded. `@query` is the whole query, including the leading question mark. `@query-param` selects one `application/x-www-form-urlencoded` parameter by its `name`. `@status` is the three-digit response code and is forbidden on a request. [1]\n- **Content and representation digests:** Content is covered by signing a digest field and checking it against the received body. `Content-Digest` hashes the actual message content, which range requests and `HEAD` can change; `Repr-Digest` hashes the entire selected representation. A new content encoding changes `Content-Digest`, and the intermediary signs again. [1][14]\n- **Response binding, profiles, and RFC 9421 §7 security considerations:** Adding the `req` Boolean flag to a component identifier in a response signature derives that component from the triggering request (allowing the same component name to appear both with and without `req`), whereas attaching `req` to a request signature produces an error. Downstream profiles define mandatory coverage—for example, Web Bot Auth requires `@authority` or `@target-uri` plus `created`, `expires`, a `keyid` JWK SHA-256 thumbprint, and `tag` `web-bot-auth` (with optional `Content-Digest` body coverage). Under RFC 9421 Section 7 (Security Considerations), a valid signature on an HTTP message is not sufficient to prove that the message has been signed by the appropriate party; the verifier must ensure that a given key and algorithm are appropriate for the message in question and protect against key specification downgrade attacks (Section 7.3.6). Because HTTP message signatures allow sub-portions of a message to be signed, applications must mitigate signature replay (Section 7.2.2) using profile-selected parameters such as created (RECOMMENDED), expires, or nonce, verify Content-Digest against received content when body integrity is required, avoid relying on signatures of signatures because they do not provide transitive coverage of covered components (Section 7.3.7), and guard against canonicalization attacks (Section 7.5.5) where ambiguity in generating the signature base could allow an attacker to substitute or break a signature. [1][2]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **Signing HTTP Messages (draft-cavage-http-signatures)** | `draft-cavage-http-signatures-12` | Supersedes | Replaces Mark Cavage and Manu Sporny's individual draft (`draft-cavage-http-signatures-12`, last updated 2019-10-21) with RFC 8941 Dictionary Structured Fields (`Signature-Input` and `Signature`) and `@`-prefixed derived components (`@method`, `@target-uri`, `@authority`) instead of `(request-target)`. [1][4] |\n| **JSON Web Signature (JWS, RFC 7515)** | `RFC 7515` | Analogous to classic standard | Uses a detached signature over in-place HTTP message components rather than duplicating message elements inside a JWS payload; when a JOSE algorithm is used, the raw ASCII `signature-base` serves as the `JWS Signing Input` without a JOSE Header or Base64 pre-encoding. [1] |\n| **Digest Fields (RFC 9530)** | `RFC 9530` | Complements | Because RFC 9421 does not directly hash HTTP message bodies, signers cover the `Content-Digest` or `Repr-Digest` fields defined in RFC 9530 to bind payload integrity into the HTTP message signature. [1][14] |\n| **Grant Negotiation and Authorization Protocol (GNAP, RFC 9635)** | `RFC 9635` | Depended on by | GNAP profiles RFC 9421 under the `httpsig` key proofing method, requiring `Signature-Input` and `Signature` headers (plus `Content-Digest` when a body is present) to bind grant and continuation requests to the client instance's key. [9] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Web Bot Auth](/protocols/webbotauth/)** | Depended on by | Profiles RFC 9421 for automated HTTP clients by adding the `Signature-Agent` Dictionary header (`https` URI to a JWK Set), requiring `tag=\"web-bot-auth\"` on requests, and serving signed JWKS directories (`tag=\"http-message-signatures-directory\"`) at `/.well-known/http-message-signatures-directory`. [2] |\n| **[Workload Identity in Multi System Environments (WIMSE)](/protocols/wimse/)** | Depended on by | Defines an RFC 9421 profile (`draft-ietf-wimse-http-signature`) for workload-to-workload service authentication, signing requests with the private key bound to a `Workload-Identity-Token` header. [3] |\n| **[AAuth (Hardt)](/protocols/aauth-hardt/)** | Depended on by | Binds every outbound agent request to the agent instance's signing key using an RFC 9421 HTTP Message Signature paired with metadata published under `/.well-known/aauth-agent.json`, `/.well-known/aauth-person.json`, `/.well-known/aauth-access.json`, and `/.well-known/aauth-resource.json`. [8] |\n| **[Trusted Agent Protocol (TAP)](/protocols/tap/)** | Depended on by | Profiles RFC 9421 message signature fields and `signature_base` construction so merchants can cryptographically verify Visa-approved commerce agents, consumer recognition, and payment intent. [7] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (14 probed or cited examples across 3 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).*\n\n### Live agent signers & key directories\n\nLive HTTP 200 key-directory probes and vendor documentation confirm deployment of the named application profile (Web Bot Auth, Trusted Agent Protocol, Universal Commerce Protocol, or ActivityPub) rather than general-purpose conformance to every optional feature of RFC 9421.\n\n| Actor | Role | Status | Directory path, key format & profile | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **OpenAI (ChatGPT agent)** | Bot / Agent signer (Web Bot Auth profile) | Live (HTTP 200) · checked 2026-10-30 | Web Bot Auth profile: publishes `Ed25519` JWK (`purpose` `ai`) and directory-response signature headers (`tag=\"http-message-signatures-directory\"`). | [ChatGPT key directory](https://chatgpt.com/.well-known/http-message-signatures-directory) [15] · [Vercel changelog](https://vercel.com/changelog/vercels-bot-verification-now-supports-web-bot-auth) [16] |\n| **Google (Google-Agent)** | Bot / Agent signer (Web Bot Auth profile) | Live (HTTP 200) · checked 2026-10-30 | Web Bot Auth profile: publishes five `Ed25519` JWKs and experimentally signs a subset of `Google-Agent` requests. | [Google-Agent key directory](https://agent.bot.goog/.well-known/http-message-signatures-directory) [17] · [Authenticate requests with Web Bot Auth](https://developers.google.com/crawling/docs/crawlers-fetchers/web-bot-auth) [18] |\n| **Browserbase** | Bot / Agent signer (Web Bot Auth profile) | Live (HTTP 200) · checked 2026-10-30 | Web Bot Auth profile: publishes two `Ed25519` JWKs (`purpose` `rag`) and directory-response `binding0`/`binding1` signature headers. | [Browserbase key directory](https://www.browserbase.com/.well-known/http-message-signatures-directory) [19] |\n| **Shopify (Cloudsurf)** | Bot / Agent signer (Web Bot Auth profile) | Live (HTTP 200) · checked 2026-10-30 | Web Bot Auth profile: publishes `Ed25519` JWK (omitting JWK key ID) and `alg=\"ed25519\"` directory-response signature headers. | [Cloudsurf key directory](https://cloudsurf.shopify.io/.well-known/http-message-signatures-directory) [20] |\n| **Exa (ExaSearchBot)** | Bot / Agent signer (Web Bot Auth profile) | Live (HTTP 200) · checked 2026-10-30 | Web Bot Auth profile: publishes `Ed25519` JWK and signs outbound `ExaSearchBot` requests under RFC 9421. | [ExaSearchBot key directory](https://crawler.exa.ai/.well-known/http-message-signatures-directory) [21] · [Exa Search Crawler](https://crawler.exa.ai/) [22] |\n\n### CDN, WAF & relying server verifiers\n\nVendor and open-source documentation confirms verification or signing support for the named application profile or library surface rather than end-to-end conformance across all RFC 9421 profiles.\n\n| Actor | Role | Status | Verified profile & enforcement boundary | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Cloudflare** | CDN / WAF verifier (Web Bot Auth profile) | Partial · as of 2026-10-08 | Web Bot Auth edge verifier (`draft-meunier-http-message-signatures-directory-03`); supports RFC 9421 subset and rejects dictionary `Signature-Agent`. | [Web Bot Auth docs](https://developers.cloudflare.com/bots/reference/bot-verification/web-bot-auth/) [23] · [Verified bots with cryptography](https://blog.cloudflare.com/verified-bots-with-cryptography/) [24] |\n| **Akamai (App & API Protector)** | CDN / WAF verifier (Web Bot Auth & TAP profiles) | Partial · as of 2025-11-10 | Validates Web Bot Auth and Visa Trusted Agent Protocol signatures at the edge using RFC 9421 rules. | [Redefine Trust with Web Bot Authentication](https://web.archive.org/web/20260609113733/https://www.akamai.com/blog/security/redefine-trust-web-bot-authentication) [25] |\n| **Vercel** | CDN / WAF verifier (Web Bot Auth profile) | Partial · as of 2025-08-12 | Bot Protection verifies HTTP Message Signatures under the Web Bot Auth profile, allowing signed ChatGPT operator requests. | [Vercel changelog](https://vercel.com/changelog/vercels-bot-verification-now-supports-web-bot-auth) [16] |\n| **AWS WAF** | CDN / WAF verifier (Web Bot Auth profile) | Partial · as of 2025-11-21 | Verifies Web Bot Auth HTTP message signatures for AI agents on AWS WAF protecting Amazon CloudFront. | [AWS What's New](https://aws.amazon.com/about-aws/whats-new/2025/11/aws-waf-web-bot-auth-support/) [26] |\n| **Mastodon** | Fediverse verifier & fallback signer | Partial · as of 2026-08-20 | `v4.4.0` added experimental inbound verification behind `http_message_signatures`; `v4.5.0`+ enables it unconditionally; `v4.7.0` adds `Ed25519` validation and outgoing `RFC9421` signatures as a fallback to `draft-cavage-http-signatures`. | [Mastodon security specification](https://docs.joinmastodon.org/spec/security/) [5] · [Mastodon v4.4.0](https://github.com/mastodon/mastodon/releases/tag/v4.4.0) [27] · [Mastodon v4.5.0](https://github.com/mastodon/mastodon/releases/tag/v4.5.0) [28] · [Mastodon v4.7.0](https://github.com/mastodon/mastodon/releases/tag/v4.7.0) [29] |\n| **Visa (Trusted Agent Protocol)** | Commerce verifier (TAP profile) | Partial · checked 2026-10-30 | Trusted Agent Protocol profiles RFC 9421 `signature_base` reconstruction and public-key verification to authenticate Visa-approved commerce agents. | [Trusted Agent Protocol](https://developer.visa.com/docs/trusted-agent-protocol) [7] |\n| **Adyen** | Commerce verifier (UCP profile) | Partial · checked 2026-10-30 | Requires UCP profile of RFC 9421 (`Signature`, `Signature-Input`, `UCP-Agent`, and `Content-Digest`) on checkout session operations. | [Adyen UCP agent integration](https://docs.adyen.com/online-payments/agentic-commerce/agent-platform/ai-agent-integration-ucp) [30] |\n\n### General HTTP clients & cryptographic libraries\n\n| Actor | Role | Status | RFC 9421 signing / crypto surface | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **curl** | HTTP client signer (general RFC 9421) | Experimental · as of 2026-09-02 | Experimental RFC 9421 request signing in v8.22.0+ via `--httpsig-algo` (`ed25519` default and `hmac-sha256`). | [HTTP Message Signatures with curl](https://daniel.haxx.se/blog/2026/07/27/http-message-signatures-with-curl/) [31] · [curl changelog](https://curl.se/changes.html) [32] |\n| **wolfSSL** | Crypto library (curl / libcurl RFC 9421) | Development · as of 2026-06-12 | Contributes native RFC 9421 `Ed25519` signing in curl/libcurl via open PRs `curl/curl#21239` and `wolfSSL/wolfssl-examples#566`. | [wolfSSL, native HTTP Message Signatures in curl](https://www.wolfssl.com/native-http-message-signatures-in-curl-powered-by-wolfssl-part-3/) [33] |\n\n### Ecosystem censuses\n\n- **IANA HTTP Message Signature Registries** (*as of 2026-10-23*): 9 active HTTP Signature Algorithms (6 baseline RFC 9421 algorithms: rsa-pss-sha512, rsa-v1_5-sha256, hmac-sha256, ecdsa-p256-sha256, ecdsa-p384-sha384, and ed25519; plus 3 FIPS 204 post-quantum ML-DSA algorithms from c2sp.org/httpsig-pq@v1.0.1: ml-dsa-44, ml-dsa-65, and ml-dsa-87), 6 HTTP Signature Metadata Parameters (alg, created, expires, keyid, nonce, tag), 10 HTTP Signature Derived Component Names (@signature-params, @method, @authority, @scheme, @target-uri, @request-target, @path, @query, @query-param, @status), and 6 HTTP Signature Component Parameters (sf, key, bs, tr, req, name), last updated 2026-10-23. [12]\n- **Cloudflare Radar signature-agent-registry directory URLs** (*as of 2026-10-30*): 528 distinct directory URLs ending in /.well-known/http-message-signatures-directory (plus https://www.sagelabs.ai) in Cloudflare Radar's signature-agent-registry.txt list, last-modified Fri, 30 Oct 2026 00:00:47 GMT. [34]\n\n---\n\n## See also\n\n- **Depended on by:** [Cloudflare Pay Per Crawl](/protocols/cloudflare-pay-per-crawl/), [Ad Context Protocol (AdCP)](/protocols/adcp/), [Agent Identity & Discovery (AID)](/protocols/aid/), [AI Identity Management System (AIMS)](/protocols/wimse-aims/), [An Attenuated Delegation Profile for Automated Agents](/protocols/oauth-agent-delegation/), [Signature Agent Card (Web Bot Auth registry)](/protocols/web-bot-auth-signature-agent-card/)\n- **Peer alternatives:** [Anonymous Bot Authentication](/protocols/anonymous-bot-auth/), [Per-Call Proof for Local Tool Invocation by AI Agents](/protocols/local-tool-call-proof/), [x401: HTTP Proof Requirement Protocol](/protocols/x401/)\n- **Complements:** [Universal Commerce Protocol (UCP)](/protocols/ucp/), [AI Agent Authentication and Authorization](/protocols/aiagent-auth/), [ID MANDAT: A Machine-Readable Credential for the Agents of a Company](/protocols/idmandat-credential/), [Security Principal and Verifier Binding for Agent Communication Protocols](/protocols/agent-principal-binding/)\n- **Category:** [Identify protocols](/category/identify/)\n\n---\n\n## References\n\n1. A. Backman (Amazon), J. Richer (Bespoke Engineering), and M. Sporny (Digital Bazaar), *RFC 9421: HTTP Message Signatures* (February 2024) — <https://www.rfc-editor.org/rfc/rfc9421.html>\n2. T. Meunier (Cloudflare) and S. Major (Google), *HTTP Message Signatures for automated traffic (draft-ietf-webbotauth-httpsig-protocol-01)* (29 October 2026) — <https://www.ietf.org/archive/id/draft-ietf-webbotauth-httpsig-protocol-01.txt>\n3. Joseph A. Salowey and Yaron Sheffer, *draft-ietf-wimse-http-signature — WIMSE Workload-to-Workload Authentication with HTTP Signatures (IETF Datatracker)* (last updated 2026-10-20; checked 2026-10-30) — <https://datatracker.ietf.org/doc/draft-ietf-wimse-http-signature/>\n4. Mark Cavage and Manu Sporny, *draft-cavage-http-signatures — Signing HTTP Messages (IETF Datatracker)* (last updated 2019-10-21) — <https://datatracker.ietf.org/doc/draft-cavage-http-signatures/>\n5. Mastodon, *Security — Mastodon Documentation* (checked 2026-10-30) — <https://docs.joinmastodon.org/spec/security/>\n6. IETF Datatracker, *HTTP Message Signatures (RFC 9421)* (Proposed Standard (February 2024); checked 2026-10-30) — <https://datatracker.ietf.org/doc/rfc9421/>\n7. Visa Developer, *Getting Started — Trusted Agent Protocol* (checked 2026-10-30) — <https://developer.visa.com/docs/trusted-agent-protocol>\n8. Dick Hardt, *draft-hardt-oauth-aauth-protocol — AAuth Protocol (IETF Datatracker)* (last updated 2026-09-25) — <https://datatracker.ietf.org/doc/draft-hardt-oauth-aauth-protocol/>\n9. J. Richer and F. Imbault, *RFC 9635: Grant Negotiation and Authorization Protocol (GNAP)* (October 2024) — <https://www.rfc-editor.org/info/rfc9635/>\n10. IETF Datatracker, *draft-ietf-httpbis-message-signatures document history* (checked 2026-10-30) — <https://datatracker.ietf.org/doc/draft-ietf-httpbis-message-signatures/history/>\n11. RFC Editor, *RFC 9421 Errata Records (IDs 8102 and 8103)* (verified 2024-10-29; checked 2026-10-30) — <https://errata.rfc-editor.org/search/?rfc_number=9421&presentation=records>\n12. IANA, *HTTP Message Signature Registries* (created 2023-08-18; last updated 2026-10-23) — <https://www.iana.org/assignments/http-message-signature>\n13. IANA, *Hypertext Transfer Protocol (HTTP) Field Name Registry* (checked 2026-10-30) — <https://www.iana.org/assignments/http-fields/field-names.csv>\n14. R. Polli and L. Pardue, *RFC 9530: Digest Fields* (February 2024) — <https://www.rfc-editor.org/info/rfc9530/>\n15. OpenAI, *chatgpt.com HTTP Message Signatures key directory* (response dated Fri, 30 Oct 2026; checked 2026-10-30) — <https://chatgpt.com/.well-known/http-message-signatures-directory>\n16. Vercel Changelog, *Vercel's bot verification now supports Web Bot Auth* (published 2025-08-12; modified 2026-09-02) — <https://vercel.com/changelog/vercels-bot-verification-now-supports-web-bot-auth>\n17. Google, *agent.bot.goog HTTP Message Signatures key directory* (response dated Fri, 30 Oct 2026; checked 2026-10-30) — <https://agent.bot.goog/.well-known/http-message-signatures-directory>\n18. Google for Developers, *Authenticate requests with Web Bot Auth (Experimental)* (last updated 2026-10-13 UTC) — <https://developers.google.com/crawling/docs/crawlers-fetchers/web-bot-auth>\n19. Browserbase, *browserbase.com HTTP Message Signatures key directory* (response dated Fri, 30 Oct 2026; checked 2026-10-30) — <https://www.browserbase.com/.well-known/http-message-signatures-directory>\n20. Shopify, *cloudsurf.shopify.io HTTP Message Signatures key directory* (response dated Fri, 30 Oct 2026; checked 2026-10-30) — <https://cloudsurf.shopify.io/.well-known/http-message-signatures-directory>\n21. Exa, *ExaSearchBot HTTP Message Signatures key directory* (response dated Fri, 30 Oct 2026; checked 2026-10-30) — <https://crawler.exa.ai/.well-known/http-message-signatures-directory>\n22. Exa, *Exa Search Crawler* (last updated 2026-07-30) — <https://crawler.exa.ai/>\n23. Cloudflare, *Web Bot Auth — Cloudflare Bot Solutions Docs* (last updated 2026-10-08) — <https://developers.cloudflare.com/bots/reference/bot-verification/web-bot-auth/>\n24. Cloudflare Blog, *Message Signatures are now part of our Verified Bots Program, simplifying bot authentication* (published 2025-07-01; modified 2026-07-15) — <https://blog.cloudflare.com/verified-bots-with-cryptography/>\n25. Rupesh Chokshi (Akamai Blog), *Redefine Trust with Web Bot Authentication* (published 2025-11-10; archived 2026-06-09) — <https://web.archive.org/web/20260609113733/https://www.akamai.com/blog/security/redefine-trust-web-bot-authentication>\n26. AWS What's New, *AWS WAF announces Web Bot Auth support* (posted 2025-11-21) — <https://aws.amazon.com/about-aws/whats-new/2025/11/aws-waf-web-bot-auth-support/>\n27. Mastodon, *Release v4.4.0* (published 2025-07-08) — <https://github.com/mastodon/mastodon/releases/tag/v4.4.0>\n28. Mastodon, *Release v4.5.0* (published 2025-11-06) — <https://github.com/mastodon/mastodon/releases/tag/v4.5.0>\n29. Mastodon, *Release v4.7.0* (published 2026-08-20) — <https://github.com/mastodon/mastodon/releases/tag/v4.7.0>\n30. Adyen Docs, *AI agent API integration with UCP* (checked 2026-10-30) — <https://docs.adyen.com/online-payments/agentic-commerce/agent-platform/ai-agent-integration-ucp>\n31. Daniel Stenberg, *HTTP Message Signatures with curl* (published 2026-07-27) — <https://daniel.haxx.se/blog/2026/07/27/http-message-signatures-with-curl/>\n32. curl, *curl — Changes* (8.22.0 (2026-09-02); 8.23.0 (2026-10-14); checked 2026-11-03) — <https://curl.se/changes.html>\n33. wolfSSL, *Native HTTP Message Signatures in curl, Powered by wolfSSL (Part 3)* (published 2026-06-12) — <https://www.wolfssl.com/native-http-message-signatures-in-curl-powered-by-wolfssl-part-3/>\n34. Cloudflare Radar, *signature-agent-registry.txt* (key-directory URL list; last-modified 2026-10-30) — <https://assets.radar.cloudflare.com/bots/signature-agent-registry.txt>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "ARD",
   "adoption": {
    "level": "observed",
    "by": "Buildkite, Railway, Supabase, Fly.io, Google Chrome Lighthouse (ard-schema), Hugging Face Discover Tool, and GitHub agent finder (GitHub Copilot)",
    "probe_run": null
   },
   "aliases": [],
   "analog": "sitemap plus a search engine index",
   "audience": [
    "agent-builder",
    "platform",
    "site-owner"
   ],
   "collisions": [
    "ARDP (Agent Registration and Discovery Protocol, unrelated IETF draft)",
    "AIR (the urn:air: identifier namespace this spec defines is sometimes referred to standalone)"
   ],
   "discovery": {
    "mechanism": "GET https://{domain}/.well-known/ard.json (mandatory to implement), plus SVCB at _index._agents.<domain>, DNS-SD _ard._tcp, and Link rel=\"ard\"",
    "path": "/.well-known/ard.json"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://agenticresourcediscovery.org/spec/",
     "claim": "Agentic Resource Discovery Project (ards-project), *Agentic Resource Discovery Specification v0.91*, 2026-08-26; fetched 2026-10-30",
     "date": null,
     "quote": "ARD’s predecessor specified the path /.well-known/ai-catalog.json and the link relation ai-catalog; a consumer MAY additionally consult these, and a consumer that does treats them as equivalent entry sources. / The Agentic Resource Discovery Specification (ARD) defines how agentic resources are described, discovered, and searched across federated networks. / Version: v0.91 Status: Proposal Date: August 26, 2026 / Authors: Junjie Bu — Google R.V.Guha Shaun Smith — Hugging Face / A consumer resolving a domain’s entries MUST fetch /.well-known/ard.json, and MUST honour a rel=\"ard\" link.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://www.ietf.org/archive/id/draft-bu-dawn-ard-architecture-00.txt",
     "claim": "Network Working Group individual Internet-Draft (J. Bu, R. V. Guha, J. Arkko, J. Jiménez), *Agent Resource Discovery (ARD) Architecture (draft-bu-dawn-ard-architecture-00)*, 2026-10-30; fetched 2026-11-07",
     "date": null,
     "quote": "This document describes the high-level architecture for Agent Resource Discovery (ARD), an open, federated framework for publishing, indexing, discovering, and invoking software agent capabilities / Agent Resource Discovery (ARD) Architecture draft-bu-dawn-ard-architecture-00 / Discussion of this document takes place on the Discovery of Agents With Names (DAWN) Working Group mailing list / Intended status: Informational / Intended status: Informational R. V. Guha Expires: 3 May 2027 / 30 October 2026 / As the number of available resources expands across organizations, static configuration becomes impractical: injecting extensive schemas into orchestration prompts incurs token and processing overhead, while single-operator centralized directories cannot readily accommodate decentralized multi-organization environments. / The Agent Resource Discovery (ARD) architecture addresses this by decoupling capability discovery from execution runtimes. / ARD moves candidate discovery outside the model into a dedicated search service (whether deployed over a curated enterprise catalog or across open domains), where richer signals such as representativeQueries, publisher identity, compliance metadata, and structured attributes can be indexed / The client queries the registry and receives only the top-k relevant entries to inject into its context window. / ARD does not define or standardize the internal schemas of specific resource architectures. Instead, it serves as a protocol-neutral envelope. / Once an agentic resource is discovered, the client follows the artifact reference (url) and invokes the resource directly via its native protocol (e.g., JSON-RPC over HTTP/SSE for MCP, HTTP/REST for A2A, or gRPC). The discovery registry never sits in the runtime execution data path. / Figure 1 shows the components of the architecture and the interfaces between them, with the specification that defines each interface. Arrows start at the party that initiates an interaction. / A consumer may discover entries directly by retrieving a manifest via initial contact, or by querying an ARD Registry / A central security property of ARD is that a single discovery flow may span three distinct administrative domains",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://www.ietf.org/archive/id/draft-jimenez-dawn-ard-initial-contact-00.txt",
     "claim": "Network Working Group individual Internet-Draft (J. Jiménez, J. Bu, J. Arkko), *Agent Resource Discovery (ARD): Initial Contact (draft-jimenez-dawn-ard-initial-contact-00)*, 2026-10-30; fetched 2026-11-07",
     "date": null,
     "quote": "A publisher that makes its manifest discoverable MUST serve it at the well-known URI, directly or through one redirect, and every client MUST implement the well-known fetch. / a Service Binding (SVCB) record [RFC9460] at the organization index name _index._agents.<domain> with an ARD manifest as its target / Agent Resource Discovery (ARD): Initial Contact draft-jimenez-dawn-ard-initial-contact-00 / An entry point is unverified until the client has retrieved the manifest from the URI and authenticated the origin / The procedure continues after a step returns an entry point; step 5 is performed only when steps 2 to 4 produce no manifest. / The default order of preference is: configuration, then DNS answers validated with DNSSEC [RFC4033], then responses from the publisher's own origin (steps 4 and 5), then unvalidated DNS answers, then Multicast DNS responses. / A client follows at most one AliasMode indirection in the DNS and at most one HTTP redirect per entry point, from any mechanism; the two limits are independent. A second indirection of either kind ends the attempt. / A client MUST NOT retry a failed entry point from the same source before a back-off interval of at least 30 seconds.",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://www.ietf.org/archive/id/draft-bu-dawn-ard-discovery-00.txt",
     "claim": "Network Working Group individual Internet-Draft (J. Bu, R. V. Guha, S. Smith, J. Jiménez, J. Damick), *Agent Resource Discovery (ARD): Manifest and Lookup (draft-bu-dawn-ard-discovery-00)*, 2026-10-30; fetched 2026-11-07",
     "date": null,
     "quote": "Defines the HTTP REST interface (POST /search, POST /explore, and GET /agents) for structured filtering, semantic vector search, faceted exploration, and federated routing (auto, referrals, and none) across ARD Registries. / ARD defines a JSON-LD capability description envelope (the ARD Entry) and catalog container (the ARD Manifest) identified by domain-anchored Uniform Resource Names (URNs) / The discovery identifier MUST be a Uniform Resource Name (URN) adhering to [RFC8141] using the formal urn:air: namespace prefix: urn:air:<publisher>:<namespace>:<agent-name> / Agent Resource Discovery (ARD): Manifest and Lookup draft-bu-dawn-ard-discovery-00 / Intended status: Standards Track / Intended status: Standards Track R. V. Guha Expires: 3 May 2027 / 30 October 2026 Agent Resource Discovery (ARD): Manifest and Lookup draft-bu-dawn-ard-discovery-00 / The base context maps core terms to Internationalized Resource Identifiers (IRIs) under the namespace https://agenticresourcediscovery.org/ns#. / ARD entries are packaged in an application/ard+json document containing a top-level entries array: / An entry MUST specify either url or data, but MUST NOT specify both (see Section 3.3). / The complete artifact document embedded directly inline as a JSON object. / The (identifier, version) tuple enables crawlers, registries, and federated peers to deduplicate entries and correlate third-party trustManifest evaluations across catalogs / signature (String, MUST): A JSON Web Signature (JWS) [RFC7515] computed over the JSON Canonicalization Scheme (JCS) [RFC8785] serialization of the trustManifest object with the signature member removed. The JWS Protected Header specifies the signing algorithm (alg, with ES256 Mandatory-to-Implement) and key identifier (kid). / All digest strings (digest, attestations[].digest, and provenance[].sourceDigest) use the algorithm-prefixed <alg>:<hex> format (e.g., sha256:...) to support hash agility; sha256 is Mandatory-to-Implement (MTI). / When the origin of url differs from https://<publisher>, consumers and verifying registries MUST verify that the artifact descriptor retrieved from url matches the entry's signed cryptographic digest and explicitly declares the matching identifier (urn:air:<publisher>:...) or publisher identity (trustManifest.identity) before invoking the resource. / Whether a publisher exposes a dynamic Agent Registry directly or third-party registries aggregate entries across domains, clients query Agent Registries to perform structured, semantic, and faceted discovery. / Search and introspection endpoints accept a unified query object comprising three optional elements: @context, text, and filter: / Values are arrays combined with OR logic; multiple keys are combined with AND logic. / federation (String, OPTIONAL): Federation routing mode (\"auto\", \"referrals\", or \"none\", default: \"auto\"). / To prevent infinite loops and denial-of-service amplification across federated registries, registries MUST maintain a hopCount and reject or truncate queries exceeding a maximum hop limit (default: 3 hops).",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://github.com/ards-project/ard-spec/blob/main/spec/ard-v0.9.md",
     "claim": "ards-project, *Agentic Resource Discovery Specification v0.9 (Draft)*, 2026-05-28; fetched 2026-10-30",
     "date": null,
     "quote": "Version: v0.9 (Draft) Status: Proposal Date: May 28, 2026",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://agenticresourcediscovery.org/governance/",
     "claim": "Agentic Resource Discovery Project (ards-project), *ARD Governance*, fetched 2026-10-30",
     "date": null,
     "quote": "Oversight Board Company Representative Google Junjie Bu Hugging Face Shaun Smith Microsoft Dhruv Chand",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://raw.githubusercontent.com/ards-project/ard-spec/main/LICENSE",
     "claim": "ARD Project, *ards-project/ard-spec Repository LICENSE (Apache-2.0)*, fetched 2026-11-12",
     "date": null,
     "quote": "Apache License\n                           Version 2.0, January 2004",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://www.rfc-editor.org/rfc/rfc8615.html",
     "claim": "M. Nottingham (IETF), *RFC 8615: Well-Known Uniform Resource Identifiers (URIs)*, published May 2019",
     "date": null,
     "quote": "This memo defines a path prefix for \"well-known locations\",",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://www.rfc-editor.org/rfc/rfc9309.html",
     "claim": "M. Koster, G. Illyes, H. Zeller, and L. Sassman (IETF), *RFC 9309: Robots Exclusion Protocol*, published September 2022",
     "date": null,
     "quote": "Crawlers set their own name, which is called a product token, to find relevant groups.",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://www.rfc-editor.org/rfc/rfc9460.html",
     "claim": "B. Schwartz, M. Bishop, and E. Nygren (IETF), *RFC 9460: Service Binding and Parameter Specification via the DNS (SVCB and HTTPS Resource Records)*, published November 2023",
     "date": null,
     "quote": "This document specifies the \"SVCB\" (\"Service Binding\") and \"HTTPS\" DNS resource record (RR)",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://raw.githubusercontent.com/Agent-Card/ai-catalog/main/specification/ai-catalog.md",
     "claim": "Agent Card Working Group, *Agent Card Working Group — ai-catalog.md*, checked 2026-10-29",
     "date": null,
     "quote": "This section registers the ai-catalog.json well-known URI in the IANA \"Well-Known URIs\" registry [[RFC8615]]. URI Suffix:: ai-catalog.json Change Controller:: Agent Card Working Group",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://datatracker.ietf.org/doc/rfc9727/",
     "claim": "IETF Datatracker, *RFC 9727: api-catalog: A Well-Known URI and Link Relation to Help Discovery of APIs*, Proposed Standard (June 2025); last updated 2026-05-20",
     "date": null,
     "quote": "RFC - Proposed Standard (June 2025)",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://datatracker.ietf.org/doc/draft-mozleywilliams-dnsop-dnsaid/",
     "claim": "J. Mozley and N. Williams (Infoblox), B. Sarikaya, R. Schott (Deutsche Telekom), and J. Damick (Amazon), *draft-mozleywilliams-dnsop-dnsaid — DNS for AI Discovery (IETF Datatracker)*, checked 2026-10-29",
     "date": null,
     "quote": "draft-mozleywilliams-dnsop-dnsaid-02 Published: Intended Status:: Standards Track Expires: Authors:: J. Mozley Infoblox, Inc. N. Williams",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://www.ietf.org/archive/id/draft-mozleywilliams-dawn-dnsaid-00.txt",
     "claim": "J. Mozley, N. Williams, B. Sarikaya, R. Schott, and J. Damick, *DNS for AI Discovery (DNS-AID) (draft-mozleywilliams-dawn-dnsaid-00)*, 2 November 2026",
     "date": null,
     "quote": "2 November 2026 / draft-mozleywilliams-dawn-dnsaid-00 / Service Binding (SVCB) records, optionally with DNS-Based Service Discovery (DNS-SD) labels, DNSSEC, and DANE TLSA records.",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://aid.agentcommunity.org/docs/specification",
     "claim": "Agent Community (Open Agent Registry, Inc.), *Agent Identity & Discovery (AID) - v2.1.1 Specification*, 2026-10-02 (fetched 2026-10-30)",
     "date": null,
     "quote": "TXT record at the well-known base name _agent.<domain>. AID is an intentionally minimal discovery layer.",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://modelcontextprotocol.io/seps/2127-mcp-server-cards",
     "claim": "Model Context Protocol, *MCP Server Cards Source (modelcontextprotocol.io/seps/2127-mcp-server-cards)*, checked 2026-10-30",
     "date": null,
     "quote": "restaurant-a.com/.well-known/ai-catalog.json",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://eips.ethereum.org/EIPS/eip-8444",
     "claim": "Ethereum EIPs (Gary Yang), *ERC-8444: Agentic Resource Discovery (ARD) Onchain*, 2026-10-12; fetched 2026-10-30",
     "date": null,
     "quote": "either a top-level member value:controllers (an array of did:pkh identifiers) containing the address, or an entry whose value:controller is the address.",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://buildkite.com/.well-known/ard.json",
     "claim": "Buildkite, *Buildkite ARD manifest (/.well-known/ard.json)*, fetched 2026-10-30",
     "date": null,
     "quote": "Server\",\"type\":\"application/mcp-server-card+json\",\"url\":\"https://mcp.buildkite.com/mcp/server-card\",\"description\":\"Buildkite's hosted MCP server. Lets AI agents investigate failed builds, read job logs, find",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://railway.com/.well-known/ard.json",
     "claim": "Railway, *Railway ARD manifest (/.well-known/ard.json)*, fetched 2026-10-30",
     "date": null,
     "quote": "and cron jobs on Railway from any MCP client.\", \"type\": \"application/mcp-server-card+json\", \"url\": \"https://railway.com/.well-known/mcp/server-card.json\", \"representativeQueries\":",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://supabase.com/.well-known/ard.json",
     "claim": "Supabase, *Supabase ARD manifest (/.well-known/ard.json)*, fetched 2026-10-30",
     "date": null,
     "quote": "\"entries\": [ { \"identifier\": \"urn:air:supabase.com:mcp:server\", \"displayName\": \"Supabase MCP server\", \"type\": \"application/json\", \"url\": \"https://mcp.supabase.com/mcp\", \"description\":",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://fly.io/.well-known/ard.json",
     "claim": "Fly.io, *Fly.io ARD manifest (/.well-known/ard.json)*, fetched 2026-10-30",
     "date": null,
     "quote": "before the agent changes it\",\"keep a dev server running between sessions\"],\"type\":\"application/mcp-server-card+json\",\"url\":\"https://fly.io/.well-known/mcp/server-card.json\"},{\"description\":\"REST API for",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://github.com/GoogleChrome/lighthouse/pull/17168",
     "claim": "GoogleChrome/lighthouse, *PR #17168: new_audit(ard-schema): add Agent Resource Discovery audit*, merged 2026-08-31; fetched 2026-10-30",
     "date": null,
     "quote": "Adds the Agentic Resource Discovery (ARD) schema conformance audit (ard-schema) to Lighthouse under the agentic-browsing category.",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://huggingface.co/blog/agentic-resource-discovery-launch",
     "claim": "Hugging Face (Ben Burtenshaw and Shaun Smith), *Agentic Resource Discovery: Let agents search for tools, skills, and other agents*, 2026-06-17; fetched 2026-10-30",
     "date": null,
     "quote": "It provides search access to thousands of Skills, ML applications, and MCP Servers — on Hugging Face and across other ARD discovery services.",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://commandline.microsoft.com/agentic-resource-discovery-specification-ard/",
     "claim": "Microsoft Command Line (Ramanathan Guha), *Introducing the Agentic Resource Discovery specification*, 2026-06-17; fetched 2026-10-30",
     "date": null,
     "quote": "Instead of pre-loading everything, agent finder searches GitHub’s curated catalog of public AI resources or your own private registry, and Copilot finds which resources the prompt calls for and injects them into the context window when you need them.",
     "ref": 24
    }
   ],
   "form": "well-known-file",
   "governance": "The ards-project on GitHub (Apache-2.0, Oversight Board and Maintainers chaired by R.V. Guha) alongside IETF DAWN Internet-Drafts (draft-bu-dawn-ard-architecture-00, draft-bu-dawn-ard-discovery-00, draft-jimenez-dawn-ard-initial-contact-00)",
   "group": null,
   "hatnote_md": "This page is about Agentic Resource Discovery (ARD), the open specification from the ards-project that publishes agentic resources (MCP servers, A2A agents, skills, registries) at /.well-known/ard.json and makes them searchable through registries. It is not [RFC 9727](/protocols/api-catalog-rfc9727/) (/.well-known/api-catalog), the IETF standard for listing APIs, and not the [AI Catalog well-known file](/protocols/ai-catalog-well-known-file/) (/.well-known/ai-catalog.json), the separate AI Catalog format whose path ARD used before v0.91. It is also not ARDP, the unrelated IETF draft \"Agent Registration and Discovery Protocol\". [ERC-8444](/protocols/erc-8444/) and draft-hood-agtp-ard are third-party extensions that build on ARD, not ARD itself.",
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against ARD v0.91 spec text (raw.githubusercontent.com/ards-project/ard-spec/main/spec/ard.md); corrected canonical path from ai-catalog.json to ard.json; folded ai-catalog-well-known-file into this record"
    },
    {
     "date": "2026-10-28",
     "note": "Re-verified record against 24 sources on 2026-10-28: 5 live /.well-known/ard.json deployments (Buildkite, Railway, Netlify, Supabase, Fly.io), 4 vendor/tooling implementations, and 3 press sources."
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "ard",
   "implementation": "multi-implementation",
   "last_verified": "2026-11-12",
   "name": "Agentic Resource Discovery (ARD)",
   "native_status": "\"Proposal\" (the spec’s own label). The well-known path is not in the IANA Well-Known URIs registry, and the spec says its media types are still \"tracking towards formal registration\"",
   "origin": {
    "date": "2026-06-17",
    "org": "Google, Microsoft, Hugging Face"
   },
   "pairs_with": [
    "ai-catalog-well-known-file",
    "api-catalog-rfc9727",
    "dns-aid",
    "aid",
    "mcp-server-cards",
    "erc-8444"
   ],
   "part_of": null,
   "parties": [
    "agent-site",
    "agent-registry"
   ],
   "phase": "draft",
   "prerequisites": [],
   "probe": {
    "method": "GET",
    "on_absent": "Domain publishes no ARD manifest at the current canonical path; it may still publish at the deprecated predecessor path /.well-known/ai-catalog.json, which conformant consumers are not required to consult",
    "parse": "200 response is JSON with a top-level \"entries\" array of ARD entries (each with identifier/displayName/type/url-or-data); a consumer MAY also check the predecessor /.well-known/ai-catalog.json and an HTML <link rel=\"ard\"> tag",
    "path": "https://{origin}/.well-known/ard.json"
   },
   "question": "Where are an organization's discoverable agentic resources (MCP servers, A2A agents, skills, registries), and how can they be found by search rather than pre-installed one at a time?",
   "scope": "general",
   "spec_url": "https://agenticresourcediscovery.org/spec/",
   "step": "discover",
   "summary_md": "**Agentic Resource Discovery** (`ARD`, titled **Agent Resource Discovery** in its IETF Internet-Draft submissions) is an open, federated framework originated by Google, Microsoft, and Hugging Face and governed by the `ards-project` maintainers for publishing, indexing, discovering, and searching software agent capabilities across networks. ARD defines a JSON-LD capability description envelope (`ARD Entry`) and an `application/ard+json` catalog container (`ARD Manifest`) identified by domain-anchored Uniform Resource Names (`urn:air:<publisher>:<namespace>:<agent-name>`). A publisher serves its manifest at the mandatory-to-implement well-known URI `/.well-known/ard.json` (and may supplement initial contact via SVCB at `_index._agents.<domain>`, DNS-SD `_ard._tcp`, or HTTP `Link` `rel=\"ard\"`), while compliant ARD Registries expose an HTTPS REST interface at `POST /search`, `POST /explore`, and `GET /agents`. Following `v0.9 (Draft)` dated May 28, 2026, specification `v0.91` (`Status: Proposal`, dated August 26, 2026) promoted `/.well-known/ard.json` as the primary well-known path while leaving the predecessor path `/.well-known/ai-catalog.json` optional for consumers. On 30 October 2026, three companion individual `-00` Internet-Drafts directed to the IETF `DAWN` mailing list were published: `draft-bu-dawn-ard-architecture-00` (Informational) alongside Standards Track specifications `draft-bu-dawn-ard-discovery-00` and `draft-jimenez-dawn-ard-initial-contact-00`.",
   "track": "vendor-consortium",
   "use_cases": [
    "discover-my-api",
    "describe-agent-capabilities",
    "expose-tools-to-agents"
   ],
   "version": {
    "date": "2026-08-26",
    "label": "v0.91; draft-bu-dawn-ard-discovery-00 (30 October 2026)"
   },
   "watch": [
    {
     "type": "github",
     "repo": "ards-project/ard-spec",
     "mode": "tag"
    },
    {
     "type": "page",
     "url": "https://agenticresourcediscovery.org/spec",
     "selector": "main"
    }
   ],
   "tier": "flagship",
   "lifecycle_status": "active",
   "wire_archetype": "web_discovery",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "This page is about Agentic Resource Discovery (ARD), the open specification from the ards-project that publishes agentic resources (MCP servers, A2A agents, skills, registries) at /.well-known/ard.json and makes them searchable through registries. It is not [RFC 9727](/protocols/api-catalog-rfc9727/) (/.well-known/api-catalog), the IETF standard for listing APIs, and not the [AI Catalog well-known file](/protocols/ai-catalog-well-known-file/) (/.well-known/ai-catalog.json), the separate AI Catalog format whose path ARD used before v0.91. It is also not ARDP, the unrelated IETF draft \"Agent Registration and Discovery Protocol\". [ERC-8444](/protocols/erc-8444/) and draft-hood-agtp-ard are third-party extensions that build on ARD, not ARD itself. [1]",
   "v05_elevator_pitch_md": "Agentic Resource Discovery (ARD) is a federated capability-discovery standard developed by Google, Hugging Face, and Microsoft that lets AI orchestrators find and select external agents and tools across organizational boundaries. Rather than hardcoding tool configurations or stuffing thousands of candidate schemas into a model prompt, publishers serve JSON-LD metadata at `/.well-known/ard.json` so search registries can return only the most relevant entries via `POST /search`. [2][3][4]",
   "v05_lead_md": "**Agentic Resource Discovery** (`ARD`, titled **Agent Resource Discovery** in its IETF Internet-Draft submissions) is an open, federated framework originated by Google, Microsoft, and Hugging Face and governed by the `ards-project` maintainers for publishing, indexing, discovering, and searching software agent capabilities across networks. [1][2] ARD defines a JSON-LD capability description envelope (`ARD Entry`) and an `application/ard+json` catalog container (`ARD Manifest`) identified by domain-anchored Uniform Resource Names (`urn:air:<publisher>:<namespace>:<agent-name>`). [4] A publisher serves its manifest at the mandatory-to-implement well-known URI `/.well-known/ard.json` (and may supplement initial contact via SVCB at `_index._agents.<domain>`, DNS-SD `_ard._tcp`, or HTTP `Link` `rel=\"ard\"`), while compliant ARD Registries expose an HTTPS REST interface at `POST /search`, `POST /explore`, and `GET /agents`. [3][4] Following `v0.9 (Draft)` dated May 28, 2026, specification `v0.91` (`Status: Proposal`, dated August 26, 2026) promoted `/.well-known/ard.json` as the primary well-known path while leaving the predecessor path `/.well-known/ai-catalog.json` optional for consumers. [1][5] On 30 October 2026, three companion individual `-00` Internet-Drafts directed to the IETF `DAWN` mailing list were published: `draft-bu-dawn-ard-architecture-00` (Informational) alongside Standards Track specifications `draft-bu-dawn-ard-discovery-00` and `draft-jimenez-dawn-ard-initial-contact-00`. [2][3][4]",
   "v05_identity_sentence_md": "**Agentic Resource Discovery** (`ARD`, titled **Agent Resource Discovery** in its IETF Internet-Draft submissions) is an open, federated framework originated by Google, Microsoft, and Hugging Face and governed by the `ards-project` maintainers for publishing, indexing, discovering, and searching software agent capabilities across networks. [1][2] ARD defines a JSON-LD capability description envelope (`ARD Entry`) and an `application/ard+json` catalog container (`ARD Manifest`) identified by domain-anchored Uniform Resource Names (`urn:air:<publisher>:<namespace>:<agent-name>`). [4]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Discover](/category/discover/) (`discover`)"
    },
    {
     "label": "Form",
     "value_md": "Well-known file (`well-known-file`)"
    },
    {
     "label": "Originated by",
     "value_md": "Junjie Bu (Google), R.V. Guha, and Shaun Smith (Hugging Face), with IETF DAWN drafts co-authored with J. Arkko and J. Jiménez (Ericsson) and J. Damick (Amazon) [1][4]"
    },
    {
     "label": "Governed by",
     "value_md": "`ards-project` (`agenticresourcediscovery.org` / `ards-project/ard-spec`) Oversight Board and Maintainers chaired by R.V. Guha, with individual `-00` Internet-Draft submissions (`Network Working Group` header) discussed on the IETF `DAWN` mailing list [2][6]"
    },
    {
     "label": "Track",
     "value_md": "Multi-vendor specification (ards-project) and individual IETF Internet-Drafts (Informational and Standards Track) [1][2][4]"
    },
    {
     "label": "Status",
     "value_md": "`Proposal` (`v0.91` on `agenticresourcediscovery.org`) and individual `-00` IETF Internet-Draft submissions targeting `DAWN` (`draft-bu-dawn-ard-architecture-00` Informational; `draft-bu-dawn-ard-discovery-00` and `draft-jimenez-dawn-ard-initial-contact-00` Standards Track) [1][2][4]"
    },
    {
     "label": "Version",
     "value_md": "`v0.91` (`2026-08-26`; predecessor `v0.9` dated `2026-05-28`); individual `-00` IETF Internet-Drafts published `2026-10-30` (`draft-bu-dawn-ard-architecture-00`, `draft-bu-dawn-ard-discovery-00`, and `draft-jimenez-dawn-ard-initial-contact-00`). [1][2][3][4][5]"
    },
    {
     "label": "Wire format",
     "value_md": "`application/ard+json` and JSON-LD 1.1 (base context `https://agenticresourcediscovery.org/context/v1`, namespace `https://agenticresourcediscovery.org/ns#`), `application/ai-registry+json`, and HTTPS REST (`POST /search`, `POST /explore`, `GET /agents`) [4]"
    },
    {
     "label": "Specification",
     "value_md": "[ARD Specification v0.91](https://agenticresourcediscovery.org/spec/) · [draft-bu-dawn-ard-architecture-00](https://www.ietf.org/archive/id/draft-bu-dawn-ard-architecture-00.txt) · [draft-bu-dawn-ard-discovery-00](https://www.ietf.org/archive/id/draft-bu-dawn-ard-discovery-00.txt) · [draft-jimenez-dawn-ard-initial-contact-00](https://www.ietf.org/archive/id/draft-jimenez-dawn-ard-initial-contact-00.txt) [1][2][3][4]"
    },
    {
     "label": "Found at",
     "value_md": "`GET https://{domain}/.well-known/ard.json`, DNS `SVCB` (`_index._agents.<domain>`), DNS-SD / mDNS (`_ard._tcp`), HTTP `Link` / HTML `<link rel=\"ard\">`, and `robots.txt` `Agentmap:` [1][3]"
    },
    {
     "label": "Licence",
     "value_md": "Apache License 2.0 (`ards-project/ard-spec`) [7]"
    }
   ],
   "v05_problem_md": "Early agent deployments rely on manual configuration or pre-installing candidate tools into client prompts; as available resources expand across organizations, injecting extensive schemas into orchestration prompts incurs token and processing overhead, while single-operator centralized directories cannot readily accommodate decentralized multi-organization environments. [2] ARD decouples capability discovery from execution runtimes by moving candidate discovery into manifests and search registries that index `representativeQueries`, `capabilities`, publisher identity, and structured attributes. [2] The client queries the registry and receives only the top-k relevant entries to inject into its context window. [2] ARD serves as a protocol-neutral envelope using IANA Media Types in `type` (such as `application/mcp-server-card+json` or `application/a2a-agent-card+json`) without standardizing the internal schemas of specific resource architectures. [2] Once a resource is discovered, the client follows `url` and invokes the resource directly via its native protocol, so the discovery registry never sits in the runtime execution data path. [2]",
   "v05_mechanism_delta_md": "ARD decouples capability discovery from execution runtimes by moving candidate discovery into manifests and search registries that index `representativeQueries`, `capabilities`, publisher identity, and structured attributes. [2] The client queries the registry and receives only the top-k relevant entries to inject into its context window. [2]",
   "v05_scope_boundary_md": "ARD serves as a protocol-neutral envelope using IANA Media Types in `type` (such as `application/mcp-server-card+json` or `application/a2a-agent-card+json`) without standardizing the internal schemas of specific resource architectures. [2] Once a resource is discovered, the client follows `url` and invokes the resource directly via its native protocol, so the discovery registry never sits in the runtime execution data path. [2]",
   "v05_fuzzy_additions": [
    {
     "id": "entry-envelope-domain-anchored-urns-and-three-domain-trust-binding",
     "heading": "Entry Envelope, Domain-Anchored URNs, and Three-Domain Trust Binding",
     "body_md": "Each ARD entry is a JSON-LD node interpreted with the initial expansion context `https://agenticresourcediscovery.org/context/v1` under namespace `https://agenticresourcediscovery.org/ns#`. Because a single discovery flow may span three administrative domains—Serving Origin, Entry Publisher, and Runtime Endpoint Host—ARD binds authority cryptographically. [2][4]",
     "bullets": [
      {
       "label": "Required fields and mutually exclusive delivery (`url` vs `data`)",
       "text_md": "Every entry MUST include `identifier`, `displayName`, `type`, and exactly one payload delivery mechanism: `url` (primary link reference to the external descriptor) or `data` (inline JSON object fallback for isolated environments), and MUST NOT specify both. [4]"
      },
      {
       "label": "Domain-anchored `urn:air` identifier syntax",
       "text_md": "The `identifier` MUST follow RFC 8141 URN syntax `urn:air:<publisher>:<namespace>:<agent-name>`, where `<publisher>` is the publishing authority's FQDN. Decoupling `urn:air` from the host and `url` lets registries deduplicate `(identifier, version)` tuples across cloud migrations. [4]"
      },
      {
       "label": "Signed `trustManifest` and JCS/JWS verification",
       "text_md": "In `draft-bu-dawn-ard-discovery-00` (beyond the unsigned `v0.91` web specification), an entry establishes publisher authority across aggregators via a signed `trustManifest` containing `identity` (such as `did:web:<publisher>`), `subject` (`identifier`, `type`, `digest`, `version`), `attestations`, and a JWS `signature` (`ES256` MTI) over the RFC 8785 JCS serialization with `signature` removed. [1][4]"
      },
      {
       "label": "Cross-origin `url` and subresource digest pinning",
       "text_md": "All digest strings use `<alg>:<hex>` format with `sha256` Mandatory-to-Implement. When the origin of `url` differs from `https://<publisher>`, consumers and verifying registries MUST verify that the descriptor at `url` matches the signed `digest` and declares the matching `identifier` or `trustManifest.identity`. [4]"
      }
     ]
    },
    {
     "id": "initial-contact-procedure-indirection-limits-and-registry-federation",
     "heading": "Initial Contact Procedure, Indirection Limits, and Registry Federation",
     "body_md": "Initial contact (`draft-jimenez-dawn-ard-initial-contact-00`) yields `https` entry point URIs that remain unverified until the client retrieves the manifest and authenticates the origin over TLS. Once an ARD Registry is reached, `draft-bu-dawn-ard-discovery-00` defines unified search, facet exploration, and loop-bounded federation. [3][4]",
     "bullets": [
      {
       "label": "Five-step initial contact procedure and preference order",
       "text_md": "Given `<domain>`, the client tries configured entry points, queries SVCB at `_index._agents.<domain>`, queries DNS-SD PTR at `_ard._tcp.<domain>`, requests `https://<domain>/.well-known/ard.json`, and if steps 2 to 4 produce no manifest, sends `HEAD` and examines the `Link` header field for the `ard` relation. Preference orders configuration, DNSSEC-validated DNS, publisher origin responses, unvalidated DNS, and Multicast DNS last. [3]"
      },
      {
       "label": "Indirection depth, no-downgrade, and back-off rules",
       "text_md": "A client follows at most one `AliasMode` DNS indirection and at most one HTTP redirect per entry point; a second indirection ends the attempt. Clients MUST NOT fall back to `http` or retry a failed entry point from the same source before a back-off of at least 30 seconds. [3]"
      },
      {
       "label": "Universal query model (`POST /search`, `POST /explore`, `GET /agents`)",
       "text_md": "Search and introspection requests pass a `query` object with optional `@context`, natural-language `text`, and `filter` (array values combined with OR logic, multiple keys with AND logic). `POST /search` returns scored `results` (`score` `0` to `100`), while errors use RFC 9457 `application/problem+json`. [4]"
      },
      {
       "label": "Federation modes (`auto`, `referrals`, `none`) and hop limit",
       "text_md": "In `POST /search`, `federation` defaults to `auto` (recursive upstream forwarding and deduplication), or may be `referrals` (returning local `results` plus `application/ai-registry+json` `referrals`) or `none` (local index only). Registries MUST maintain a `hopCount` and reject or truncate queries exceeding a maximum hop limit (default: 3 hops). [4]"
      }
     ]
    }
   ],
   "v05_diagram": {
    "title": "ARD Architecture: Consumer, Publisher, ARD Registry, and Agentic Resource",
    "heading": "ARD Architecture: Consumer, Publisher, ARD Registry, and Agentic Resource",
    "mermaid": "flowchart LR\n  Consumer -->|\"Initial Contact\"| Publisher\n  Consumer -->|\"Retrieve Manifest\"| Publisher\n  Consumer -->|\"Lookup and Search\"| Registry[\"ARD Registry\"]\n  Registry -->|\"Crawl\"| Publisher\n  Publisher -->|\"Register\"| Registry\n  Consumer -->|\"Access (at Entry url)\"| Resource[\"Agentic Resource\"]\n  Publisher -->|\"Publishes\"| Resource",
    "caption_md": "Figure 1 architecture from `draft-bu-dawn-ard-architecture-00`: a Consumer discovers entries directly by retrieving a manifest via Initial Contact from the Publisher or by querying an ARD Registry via Lookup and Search, while runtime access follows the entry `url` directly to the Agentic Resource. [2]"
   },
   "v05_wire_artifact": {
    "title": "application/ard+json catalog (/.well-known/ard.json)",
    "heading": "application/ard+json catalog (/.well-known/ard.json)",
    "lang": "json",
    "code": "{\n  \"entries\": [\n    {\n      \"identifier\": \"urn:air:acme.com:tools:weather\",\n      \"displayName\": \"Acme Weather Service\",\n      \"type\": \"application/mcp-server-card+json\",\n      \"url\": \"https://api.acme.com/mcp/weather.json\",\n      \"capabilities\": [\"CurrentWeather\", \"Forecast\"],\n      \"representativeQueries\": [\n        \"what is the weather in Seattle\",\n        \"get tomorrow's rain forecast\"\n      ]\n    }\n  ]\n}",
    "caption_md": "Static `application/ard+json` manifest container served at `/.well-known/ard.json` with a top-level `entries` array describing `urn:air:acme.com:tools:weather`. [4]"
   },
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "Well-Known URIs (RFC 8615)",
      "spec_or_rfc": "RFC 8615",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "ARD requires clients to GET the JSON manifest at /.well-known/ard.json, a name that is not in the IANA well-known registry, and also allows a rel=\"ard\" hint, and RFC 8615 does not define the manifest schema. [1][8]"
     },
     {
      "name": "robots.txt (RFC 9309)",
      "spec_or_rfc": "RFC 9309",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "ARD adds an Agentmap directive in robots.txt that points at the manifest, a directive RFC 9309 does not define, and clients must still GET /.well-known/ard.json. [1][9]"
     },
     {
      "name": "DNS SRV & SVCB Records (RFC 2782 / RFC 9460)",
      "spec_or_rfc": "RFC 2782 / RFC 9460",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "ARD may publish DNS SVCB records only as a discovery hint, and consumers must still fetch /.well-known/ard.json, whereas an RFC 9460 SVCB or HTTPS record can itself bind the client to a service's parameters. [1][10]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "ai-catalog-well-known-file",
      "target_name": "AI Catalog well-known file",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ARD's required path is /.well-known/ard.json, with rel=\"ard\" and an Agentmap robots.txt line, and /.well-known/ai-catalog.json is only an optional predecessor for consumers. [1][11]"
     },
     {
      "target_id": "api-catalog-rfc9727",
      "target_name": "api-catalog (RFC 9727)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ARD's manifest is JSON at /.well-known/ard.json with an Agentmap directive, while RFC 9727 is a linkset of API descriptions at /.well-known/api-catalog with rel=\"api-catalog\". [1][12]"
     },
     {
      "target_id": "dns-aid",
      "target_name": "DNS-AID (DNS for AI Discovery)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "ARD's normative record is the HTTPS JSON manifest (`/.well-known/ard.json`), with DNS SVCB only as a discovery hint, whereas DNS-AID (`draft-mozleywilliams-dawn-dnsaid-00`, 2 November 2026; `draft-mozleywilliams-dnsop-dnsaid-02`) uses normative DNS SVCB records, including `_index._agents.<domain>`. [1][13][14]"
     },
     {
      "target_id": "aid",
      "target_name": "Agent Identity & Discovery (AID)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ARD publishes /.well-known/ard.json, while AID publishes a DNS TXT at the exact name `_agent.<domain>` and, if DNS fails, may fall back to /.well-known/agent. [1][15]"
     },
     {
      "target_id": "mcp-server-cards",
      "target_name": "MCP Server Cards",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "ARD is a domain manifest of agentic resources, while MCP Server Cards describe individual MCP servers and SEP-2127 discovers them through /.well-known/ai-catalog.json. [1][16]"
     },
     {
      "target_id": "erc-8444",
      "target_name": "ERC-8444: Agentic Resource Discovery (ARD) Onchain",
      "relation_type": "depended_on_by",
      "relation_label": "Depended on by",
      "delta_md": "ARD's required manifest is /.well-known/ard.json, and ERC-8444 depends on that file to add value:controllers and an on-chain anchor the base manifest does not define. [1][17]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (7 probed or cited examples; non-exhaustive).",
    "side_a": {
     "visible": true,
     "heading": "Who publishes or hosts it",
     "col4_header": "Behavior / Provisioning",
     "note_md": null,
     "rows": [
      {
       "actor": "Buildkite",
       "role": "Publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "`/.well-known/ard.json` (`application/json`); unsigned `entries` catalog (`specVersion` `\"1.0\"`) with 1 entry, first `urn:air:buildkite.com:mcp:buildkite` type `application/mcp-server-card+json` at https://mcp.buildkite.com/mcp/server-card",
       "source_md": "[buildkite.com/.well-known/ard.json (checked 2026-10-30)](https://buildkite.com/.well-known/ard.json) [18]"
      },
      {
       "actor": "Railway",
       "role": "Publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "`/.well-known/ard.json` (`application/json`); unsigned `entries` catalog (`specVersion` `\"0.91\"`) with 8 entries, first `urn:air:railway.com:server:railway-mcp` type `application/mcp-server-card+json` at https://railway.com/.well-known/mcp/server-card.json, plus the site's RFC 9727 API catalog (`application/linkset+json`)",
       "source_md": "[railway.com/.well-known/ard.json (checked 2026-10-30)](https://railway.com/.well-known/ard.json) [19]"
      },
      {
       "actor": "Supabase",
       "role": "Publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "`/.well-known/ard.json` (`application/json`); unsigned `entries` catalog (`specVersion` `\"1.0\"`) with 5 entries, first `urn:air:supabase.com:mcp:server` type `application/json` at https://mcp.supabase.com/mcp",
       "source_md": "[supabase.com/.well-known/ard.json (checked 2026-10-30)](https://supabase.com/.well-known/ard.json) [20]"
      },
      {
       "actor": "Fly.io",
       "role": "Publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "`/.well-known/ard.json` (`application/json`); unsigned `entries` catalog (`specVersion` `\"1.0\"`) with 4 entries, first `urn:air:fly.io:mcp:sprites` type `application/mcp-server-card+json` at https://fly.io/.well-known/mcp/server-card.json",
       "source_md": "[fly.io/.well-known/ard.json (checked 2026-10-30)](https://fly.io/.well-known/ard.json) [21]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Bot, client & tool support",
     "col4_header": "Behavior / Provisioning",
     "note_md": null,
     "rows": [
      {
       "actor": "Google Chrome Lighthouse (ard-schema)",
       "role": "CLI / Validator",
       "status": "Supported",
       "status_display": "Supported · as of 2026-08-31",
       "col4_md": "`ard-schema` conformance audit in the Lighthouse agentic-browsing category; PR #17168 merged 2026-08-31 and shipped in Lighthouse v13.5.0 on 2026-09; checks the catalog of the site being audited",
       "source_md": "[Lighthouse PR #17168](https://github.com/GoogleChrome/lighthouse/pull/17168) [22]"
      },
      {
       "actor": "Hugging Face Discover Tool",
       "role": "Resolver / Client SDK",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Hugging Face's reference implementation of ARD; search over thousands of Skills, ML applications, and MCP servers on Hugging Face and across other ARD discovery services",
       "source_md": "[Hugging Face blog (2026-06-17)](https://huggingface.co/blog/agentic-resource-discovery-launch) [23]"
      },
      {
       "actor": "GitHub agent finder (GitHub Copilot)",
       "role": "Agent runtime",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Searches GitHub's curated catalog of public AI resources or a private registry and injects the resources the prompt needs into the Copilot context window",
       "source_md": "[Microsoft Command Line (2026-06-17)](https://commandline.microsoft.com/agentic-resource-discovery-specification-ard/) [24]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "adp",
     "target_name": "Agent Discovery Protocol (ADP) v1.1",
     "relation_label": "Peer alternative",
     "delta": "ADP publishes /.well-known/agent.json after DNS-AID discovery, while ARD publishes /.well-known/ard.json and an Agentmap robots.txt directive.",
     "item_md": "**[Agent Discovery Protocol (ADP) v1.1](/protocols/adp/)** (Peer alternative) — ADP publishes /.well-known/agent.json after DNS-AID discovery, while ARD publishes /.well-known/ard.json and an Agentmap robots.txt directive."
    },
    {
     "target_id": "dan",
     "target_name": "DNS-Based Agent Naming",
     "relation_label": "Peer alternative",
     "delta": "DAN's records are DNS RDATA of types AIINDEX and AIDISCA, while ARD's required document is JSON fetched at /.well-known/ard.json.",
     "item_md": "**[DNS-Based Agent Naming](/protocols/dan/)** (Peer alternative) — DAN's records are DNS RDATA of types AIINDEX and AIDISCA, while ARD's required document is JSON fetched at /.well-known/ard.json."
    },
    {
     "target_id": "agents-json",
     "target_name": "agents.json",
     "relation_label": "Peer alternative",
     "delta": "ARD is the Agentic Resource Discovery well-known file, while agents.json itself contains the OpenAPI sources and the flow recipes the client runs.",
     "item_md": "**[agents.json](/protocols/agents-json/)** (Peer alternative) — ARD is the Agentic Resource Discovery well-known file, while agents.json itself contains the OpenAPI sources and the flow recipes the client runs."
    },
    {
     "target_id": "mcp-registry",
     "target_name": "Official MCP Registry",
     "relation_label": "Peer alternative",
     "delta": "ARD hosts a manifest of entries at https://{domain}/.well-known/ard.json on a domain. The Official MCP Registry is a separate HTTP API that lists servers and reads one named server's versions.",
     "item_md": "**[Official MCP Registry](/protocols/mcp-registry/)** (Peer alternative) — ARD hosts a manifest of entries at https://{domain}/.well-known/ard.json on a domain. The Official MCP Registry is a separate HTTP API that lists servers and reads one named server's versions."
    },
    {
     "target_id": "ads",
     "target_name": "Agent Directory Service",
     "relation_label": "Peer alternative",
     "delta": "ADS serves GET /.well-known/ai-catalog.json as a host-local catalog designed to interoperate with the ARD AI Catalog, and GET /v1/agents/{cid}/export renders a stored OASF record into other card formats, while ARD is that well-known resource-discovery document.",
     "item_md": "**[Agent Directory Service](/protocols/ads/)** (Peer alternative) — ADS serves GET /.well-known/ai-catalog.json as a host-local catalog designed to interoperate with the ARD AI Catalog, and GET /v1/agents/{cid}/export renders a stored OASF record into other card formats, while ARD is that well-known resource-discovery document."
    },
    {
     "target_id": "oasf",
     "target_name": "Open Agentic Schema Framework",
     "relation_label": "Complements",
     "delta": "ARD links to discoverable agent resources on a host, and OASF is the schema used to describe capabilities inside records that a discovery document can point at.",
     "item_md": "**[Open Agentic Schema Framework](/protocols/oasf/)** (Complements) — ARD links to discoverable agent resources on a host, and OASF is the schema used to describe capabilities inside records that a discovery document can point at."
    },
    {
     "item_md": "**[Discover protocols](/category/discover/)** — Category index for `discover` standards."
    }
   ],
   "v05_compiled_md": "---\nid: ard\ntitle: \"Agentic Resource Discovery (ARD)\"\ntier: flagship\nlifecycle_status: active\ncategory: discover\nform: well-known-file\nwire_archetype: web_discovery\nspec_url: https://agenticresourcediscovery.org/spec/\nlast_checked: 2026-11-12\n---\n\n# Agentic Resource Discovery (ARD)\n\n**Category:** [Discover](/category/discover/) (`discover`) · **Form:** Well-known file (`well-known-file`) · **Last checked:** 2026-11-12\n\n> *This page is about Agentic Resource Discovery (ARD), the open specification from the ards-project that publishes agentic resources (MCP servers, A2A agents, skills, registries) at /.well-known/ard.json and makes them searchable through registries. It is not [RFC 9727](/protocols/api-catalog-rfc9727/) (/.well-known/api-catalog), the IETF standard for listing APIs, and not the [AI Catalog well-known file](/protocols/ai-catalog-well-known-file/) (/.well-known/ai-catalog.json), the separate AI Catalog format whose path ARD used before v0.91. It is also not ARDP, the unrelated IETF draft \"Agent Registration and Discovery Protocol\". [ERC-8444](/protocols/erc-8444/) and draft-hood-agtp-ard are third-party extensions that build on ARD, not ARD itself. [1]*\n\n> **In brief:** Agentic Resource Discovery (ARD) is a federated capability-discovery standard developed by Google, Hugging Face, and Microsoft that lets AI orchestrators find and select external agents and tools across organizational boundaries. Rather than hardcoding tool configurations or stuffing thousands of candidate schemas into a model prompt, publishers serve JSON-LD metadata at `/.well-known/ard.json` so search registries can return only the most relevant entries via `POST /search`. [2][3][4]\n\n**Agentic Resource Discovery** (`ARD`, titled **Agent Resource Discovery** in its IETF Internet-Draft submissions) is an open, federated framework originated by Google, Microsoft, and Hugging Face and governed by the `ards-project` maintainers for publishing, indexing, discovering, and searching software agent capabilities across networks. [1][2] ARD defines a JSON-LD capability description envelope (`ARD Entry`) and an `application/ard+json` catalog container (`ARD Manifest`) identified by domain-anchored Uniform Resource Names (`urn:air:<publisher>:<namespace>:<agent-name>`). [4] A publisher serves its manifest at the mandatory-to-implement well-known URI `/.well-known/ard.json` (and may supplement initial contact via SVCB at `_index._agents.<domain>`, DNS-SD `_ard._tcp`, or HTTP `Link` `rel=\"ard\"`), while compliant ARD Registries expose an HTTPS REST interface at `POST /search`, `POST /explore`, and `GET /agents`. [3][4] Following `v0.9 (Draft)` dated May 28, 2026, specification `v0.91` (`Status: Proposal`, dated August 26, 2026) promoted `/.well-known/ard.json` as the primary well-known path while leaving the predecessor path `/.well-known/ai-catalog.json` optional for consumers. [1][5] On 30 October 2026, three companion individual `-00` Internet-Drafts directed to the IETF `DAWN` mailing list were published: `draft-bu-dawn-ard-architecture-00` (Informational) alongside Standards Track specifications `draft-bu-dawn-ard-discovery-00` and `draft-jimenez-dawn-ard-initial-contact-00`. [2][3][4]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Discover](/category/discover/) (`discover`) |\n| **Form** | Well-known file (`well-known-file`) |\n| **Originated by** | Junjie Bu (Google), R.V. Guha, and Shaun Smith (Hugging Face), with IETF DAWN drafts co-authored with J. Arkko and J. Jiménez (Ericsson) and J. Damick (Amazon) [1][4] |\n| **Governed by** | `ards-project` (`agenticresourcediscovery.org` / `ards-project/ard-spec`) Oversight Board and Maintainers chaired by R.V. Guha, with individual `-00` Internet-Draft submissions (`Network Working Group` header) discussed on the IETF `DAWN` mailing list [2][6] |\n| **Track** | Multi-vendor specification (ards-project) and individual IETF Internet-Drafts (Informational and Standards Track) [1][2][4] |\n| **Status** | `Proposal` (`v0.91` on `agenticresourcediscovery.org`) and individual `-00` IETF Internet-Draft submissions targeting `DAWN` (`draft-bu-dawn-ard-architecture-00` Informational; `draft-bu-dawn-ard-discovery-00` and `draft-jimenez-dawn-ard-initial-contact-00` Standards Track) [1][2][4] |\n| **Version** | `v0.91` (`2026-08-26`; predecessor `v0.9` dated `2026-05-28`); individual `-00` IETF Internet-Drafts published `2026-10-30` (`draft-bu-dawn-ard-architecture-00`, `draft-bu-dawn-ard-discovery-00`, and `draft-jimenez-dawn-ard-initial-contact-00`). [1][2][3][4][5] |\n| **Wire format** | `application/ard+json` and JSON-LD 1.1 (base context `https://agenticresourcediscovery.org/context/v1`, namespace `https://agenticresourcediscovery.org/ns#`), `application/ai-registry+json`, and HTTPS REST (`POST /search`, `POST /explore`, `GET /agents`) [4] |\n| **Specification** | [ARD Specification v0.91](https://agenticresourcediscovery.org/spec/) · [draft-bu-dawn-ard-architecture-00](https://www.ietf.org/archive/id/draft-bu-dawn-ard-architecture-00.txt) · [draft-bu-dawn-ard-discovery-00](https://www.ietf.org/archive/id/draft-bu-dawn-ard-discovery-00.txt) · [draft-jimenez-dawn-ard-initial-contact-00](https://www.ietf.org/archive/id/draft-jimenez-dawn-ard-initial-contact-00.txt) [1][2][3][4] |\n| **Found at** | `GET https://{domain}/.well-known/ard.json`, DNS `SVCB` (`_index._agents.<domain>`), DNS-SD / mDNS (`_ard._tcp`), HTTP `Link` / HTML `<link rel=\"ard\">`, and `robots.txt` `Agentmap:` [1][3] |\n| **Licence** | Apache License 2.0 (`ards-project/ard-spec`) [7] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Entry Envelope, Domain-Anchored URNs, and Three-Domain Trust Binding](#entry-envelope-domain-anchored-urns-and-three-domain-trust-binding)\n3. [Initial Contact Procedure, Indirection Limits, and Registry Federation](#initial-contact-procedure-indirection-limits-and-registry-federation)\n4. [Counterparts and related standards](#counterparts-and-related-standards)\n5. [Adoption and ecosystem](#adoption-and-ecosystem)\n6. [See also](#see-also)\n7. [References](#references)\n\n---\n\n## Problem and scope\n\nEarly agent deployments rely on manual configuration or pre-installing candidate tools into client prompts; as available resources expand across organizations, injecting extensive schemas into orchestration prompts incurs token and processing overhead, while single-operator centralized directories cannot readily accommodate decentralized multi-organization environments. [2] ARD decouples capability discovery from execution runtimes by moving candidate discovery into manifests and search registries that index `representativeQueries`, `capabilities`, publisher identity, and structured attributes. [2] The client queries the registry and receives only the top-k relevant entries to inject into its context window. [2] ARD serves as a protocol-neutral envelope using IANA Media Types in `type` (such as `application/mcp-server-card+json` or `application/a2a-agent-card+json`) without standardizing the internal schemas of specific resource architectures. [2] Once a resource is discovered, the client follows `url` and invokes the resource directly via its native protocol, so the discovery registry never sits in the runtime execution data path. [2]\n\n### ARD Architecture: Consumer, Publisher, ARD Registry, and Agentic Resource\n\n```mermaid\nflowchart LR\n  Consumer -->|\"Initial Contact\"| Publisher\n  Consumer -->|\"Retrieve Manifest\"| Publisher\n  Consumer -->|\"Lookup and Search\"| Registry[\"ARD Registry\"]\n  Registry -->|\"Crawl\"| Publisher\n  Publisher -->|\"Register\"| Registry\n  Consumer -->|\"Access (at Entry url)\"| Resource[\"Agentic Resource\"]\n  Publisher -->|\"Publishes\"| Resource\n```\n\n*Figure 1 architecture from `draft-bu-dawn-ard-architecture-00`: a Consumer discovers entries directly by retrieving a manifest via Initial Contact from the Publisher or by querying an ARD Registry via Lookup and Search, while runtime access follows the entry `url` directly to the Agentic Resource. [2]*\n\n### application/ard+json catalog (/.well-known/ard.json)\n\n```json\n{\n  \"entries\": [\n    {\n      \"identifier\": \"urn:air:acme.com:tools:weather\",\n      \"displayName\": \"Acme Weather Service\",\n      \"type\": \"application/mcp-server-card+json\",\n      \"url\": \"https://api.acme.com/mcp/weather.json\",\n      \"capabilities\": [\"CurrentWeather\", \"Forecast\"],\n      \"representativeQueries\": [\n        \"what is the weather in Seattle\",\n        \"get tomorrow's rain forecast\"\n      ]\n    }\n  ]\n}\n```\n\n*Static `application/ard+json` manifest container served at `/.well-known/ard.json` with a top-level `entries` array describing `urn:air:acme.com:tools:weather`. [4]*\n\n---\n\n## Entry Envelope, Domain-Anchored URNs, and Three-Domain Trust Binding\n\nEach ARD entry is a JSON-LD node interpreted with the initial expansion context `https://agenticresourcediscovery.org/context/v1` under namespace `https://agenticresourcediscovery.org/ns#`. Because a single discovery flow may span three administrative domains—Serving Origin, Entry Publisher, and Runtime Endpoint Host—ARD binds authority cryptographically. [2][4]\n\n- **Required fields and mutually exclusive delivery (`url` vs `data`):** Every entry MUST include `identifier`, `displayName`, `type`, and exactly one payload delivery mechanism: `url` (primary link reference to the external descriptor) or `data` (inline JSON object fallback for isolated environments), and MUST NOT specify both. [4]\n- **Domain-anchored `urn:air` identifier syntax:** The `identifier` MUST follow RFC 8141 URN syntax `urn:air:<publisher>:<namespace>:<agent-name>`, where `<publisher>` is the publishing authority's FQDN. Decoupling `urn:air` from the host and `url` lets registries deduplicate `(identifier, version)` tuples across cloud migrations. [4]\n- **Signed `trustManifest` and JCS/JWS verification:** In `draft-bu-dawn-ard-discovery-00` (beyond the unsigned `v0.91` web specification), an entry establishes publisher authority across aggregators via a signed `trustManifest` containing `identity` (such as `did:web:<publisher>`), `subject` (`identifier`, `type`, `digest`, `version`), `attestations`, and a JWS `signature` (`ES256` MTI) over the RFC 8785 JCS serialization with `signature` removed. [1][4]\n- **Cross-origin `url` and subresource digest pinning:** All digest strings use `<alg>:<hex>` format with `sha256` Mandatory-to-Implement. When the origin of `url` differs from `https://<publisher>`, consumers and verifying registries MUST verify that the descriptor at `url` matches the signed `digest` and declares the matching `identifier` or `trustManifest.identity`. [4]\n\n---\n\n## Initial Contact Procedure, Indirection Limits, and Registry Federation\n\nInitial contact (`draft-jimenez-dawn-ard-initial-contact-00`) yields `https` entry point URIs that remain unverified until the client retrieves the manifest and authenticates the origin over TLS. Once an ARD Registry is reached, `draft-bu-dawn-ard-discovery-00` defines unified search, facet exploration, and loop-bounded federation. [3][4]\n\n- **Five-step initial contact procedure and preference order:** Given `<domain>`, the client tries configured entry points, queries SVCB at `_index._agents.<domain>`, queries DNS-SD PTR at `_ard._tcp.<domain>`, requests `https://<domain>/.well-known/ard.json`, and if steps 2 to 4 produce no manifest, sends `HEAD` and examines the `Link` header field for the `ard` relation. Preference orders configuration, DNSSEC-validated DNS, publisher origin responses, unvalidated DNS, and Multicast DNS last. [3]\n- **Indirection depth, no-downgrade, and back-off rules:** A client follows at most one `AliasMode` DNS indirection and at most one HTTP redirect per entry point; a second indirection ends the attempt. Clients MUST NOT fall back to `http` or retry a failed entry point from the same source before a back-off of at least 30 seconds. [3]\n- **Universal query model (`POST /search`, `POST /explore`, `GET /agents`):** Search and introspection requests pass a `query` object with optional `@context`, natural-language `text`, and `filter` (array values combined with OR logic, multiple keys with AND logic). `POST /search` returns scored `results` (`score` `0` to `100`), while errors use RFC 9457 `application/problem+json`. [4]\n- **Federation modes (`auto`, `referrals`, `none`) and hop limit:** In `POST /search`, `federation` defaults to `auto` (recursive upstream forwarding and deduplication), or may be `referrals` (returning local `results` plus `application/ai-registry+json` `referrals`) or `none` (local index only). Registries MUST maintain a `hopCount` and reject or truncate queries exceeding a maximum hop limit (default: 3 hops). [4]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **Well-Known URIs (RFC 8615)** | `RFC 8615` | Profiles classic standard | ARD requires clients to GET the JSON manifest at /.well-known/ard.json, a name that is not in the IANA well-known registry, and also allows a rel=\"ard\" hint, and RFC 8615 does not define the manifest schema. [1][8] |\n| **robots.txt (RFC 9309)** | `RFC 9309` | Profiles classic standard | ARD adds an Agentmap directive in robots.txt that points at the manifest, a directive RFC 9309 does not define, and clients must still GET /.well-known/ard.json. [1][9] |\n| **DNS SRV & SVCB Records (RFC 2782 / RFC 9460)** | `RFC 2782 / RFC 9460` | Analogous to classic standard | ARD may publish DNS SVCB records only as a discovery hint, and consumers must still fetch /.well-known/ard.json, whereas an RFC 9460 SVCB or HTTPS record can itself bind the client to a service's parameters. [1][10] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[AI Catalog well-known file](/protocols/ai-catalog-well-known-file/)** | Peer alternative | ARD's required path is /.well-known/ard.json, with rel=\"ard\" and an Agentmap robots.txt line, and /.well-known/ai-catalog.json is only an optional predecessor for consumers. [1][11] |\n| **[api-catalog (RFC 9727)](/protocols/api-catalog-rfc9727/)** | Peer alternative | ARD's manifest is JSON at /.well-known/ard.json with an Agentmap directive, while RFC 9727 is a linkset of API descriptions at /.well-known/api-catalog with rel=\"api-catalog\". [1][12] |\n| **[DNS-AID (DNS for AI Discovery)](/protocols/dns-aid/)** | Complements | ARD's normative record is the HTTPS JSON manifest (`/.well-known/ard.json`), with DNS SVCB only as a discovery hint, whereas DNS-AID (`draft-mozleywilliams-dawn-dnsaid-00`, 2 November 2026; `draft-mozleywilliams-dnsop-dnsaid-02`) uses normative DNS SVCB records, including `_index._agents.<domain>`. [1][13][14] |\n| **[Agent Identity & Discovery (AID)](/protocols/aid/)** | Peer alternative | ARD publishes /.well-known/ard.json, while AID publishes a DNS TXT at the exact name `_agent.<domain>` and, if DNS fails, may fall back to /.well-known/agent. [1][15] |\n| **[MCP Server Cards](/protocols/mcp-server-cards/)** | Complements | ARD is a domain manifest of agentic resources, while MCP Server Cards describe individual MCP servers and SEP-2127 discovers them through /.well-known/ai-catalog.json. [1][16] |\n| **[ERC-8444: Agentic Resource Discovery (ARD) Onchain](/protocols/erc-8444/)** | Depended on by | ARD's required manifest is /.well-known/ard.json, and ERC-8444 depends on that file to add value:controllers and an on-chain anchor the base manifest does not define. [1][17] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (7 probed or cited examples; non-exhaustive).*\n\n### Who publishes or hosts it\n\n| Actor | Role | Status | Behavior / Provisioning | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Buildkite** | Publisher | Live (HTTP 200) · checked 2026-10-30 | `/.well-known/ard.json` (`application/json`); unsigned `entries` catalog (`specVersion` `\"1.0\"`) with 1 entry, first `urn:air:buildkite.com:mcp:buildkite` type `application/mcp-server-card+json` at https://mcp.buildkite.com/mcp/server-card | [buildkite.com/.well-known/ard.json (checked 2026-10-30)](https://buildkite.com/.well-known/ard.json) [18] |\n| **Railway** | Publisher | Live (HTTP 200) · checked 2026-10-30 | `/.well-known/ard.json` (`application/json`); unsigned `entries` catalog (`specVersion` `\"0.91\"`) with 8 entries, first `urn:air:railway.com:server:railway-mcp` type `application/mcp-server-card+json` at https://railway.com/.well-known/mcp/server-card.json, plus the site's RFC 9727 API catalog (`application/linkset+json`) | [railway.com/.well-known/ard.json (checked 2026-10-30)](https://railway.com/.well-known/ard.json) [19] |\n| **Supabase** | Publisher | Live (HTTP 200) · checked 2026-10-30 | `/.well-known/ard.json` (`application/json`); unsigned `entries` catalog (`specVersion` `\"1.0\"`) with 5 entries, first `urn:air:supabase.com:mcp:server` type `application/json` at https://mcp.supabase.com/mcp | [supabase.com/.well-known/ard.json (checked 2026-10-30)](https://supabase.com/.well-known/ard.json) [20] |\n| **Fly.io** | Publisher | Live (HTTP 200) · checked 2026-10-30 | `/.well-known/ard.json` (`application/json`); unsigned `entries` catalog (`specVersion` `\"1.0\"`) with 4 entries, first `urn:air:fly.io:mcp:sprites` type `application/mcp-server-card+json` at https://fly.io/.well-known/mcp/server-card.json | [fly.io/.well-known/ard.json (checked 2026-10-30)](https://fly.io/.well-known/ard.json) [21] |\n\n### Bot, client & tool support\n\n| Actor | Role | Status | Behavior / Provisioning | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Google Chrome Lighthouse (ard-schema)** | CLI / Validator | Supported · as of 2026-08-31 | `ard-schema` conformance audit in the Lighthouse agentic-browsing category; PR #17168 merged 2026-08-31 and shipped in Lighthouse v13.5.0 on 2026-09; checks the catalog of the site being audited | [Lighthouse PR #17168](https://github.com/GoogleChrome/lighthouse/pull/17168) [22] |\n| **Hugging Face Discover Tool** | Resolver / Client SDK | Supported · checked 2026-10-30 | Hugging Face's reference implementation of ARD; search over thousands of Skills, ML applications, and MCP servers on Hugging Face and across other ARD discovery services | [Hugging Face blog (2026-06-17)](https://huggingface.co/blog/agentic-resource-discovery-launch) [23] |\n| **GitHub agent finder (GitHub Copilot)** | Agent runtime | Supported · checked 2026-10-30 | Searches GitHub's curated catalog of public AI resources or a private registry and injects the resources the prompt needs into the Copilot context window | [Microsoft Command Line (2026-06-17)](https://commandline.microsoft.com/agentic-resource-discovery-specification-ard/) [24] |\n\n---\n\n## See also\n\n- **[Agent Discovery Protocol (ADP) v1.1](/protocols/adp/)** *(Peer alternative)* — ADP publishes /.well-known/agent.json after DNS-AID discovery, while ARD publishes /.well-known/ard.json and an Agentmap robots.txt directive.\n- **[DNS-Based Agent Naming](/protocols/dan/)** *(Peer alternative)* — DAN's records are DNS RDATA of types AIINDEX and AIDISCA, while ARD's required document is JSON fetched at /.well-known/ard.json.\n- **[agents.json](/protocols/agents-json/)** *(Peer alternative)* — ARD is the Agentic Resource Discovery well-known file, while agents.json itself contains the OpenAPI sources and the flow recipes the client runs.\n- **[Official MCP Registry](/protocols/mcp-registry/)** *(Peer alternative)* — ARD hosts a manifest of entries at https://{domain}/.well-known/ard.json on a domain. The Official MCP Registry is a separate HTTP API that lists servers and reads one named server's versions.\n- **[Agent Directory Service](/protocols/ads/)** *(Peer alternative)* — ADS serves GET /.well-known/ai-catalog.json as a host-local catalog designed to interoperate with the ARD AI Catalog, and GET /v1/agents/{cid}/export renders a stored OASF record into other card formats, while ARD is that well-known resource-discovery document.\n- **[Open Agentic Schema Framework](/protocols/oasf/)** *(Complements)* — ARD links to discoverable agent resources on a host, and OASF is the schema used to describe capabilities inside records that a discovery document can point at.\n- **Category:** [Discover protocols](/category/discover/)\n\n---\n\n## References\n\n1. Agentic Resource Discovery Project (ards-project), *Agentic Resource Discovery Specification v0.91* (2026-08-26; fetched 2026-10-30) — <https://agenticresourcediscovery.org/spec/>\n2. Network Working Group individual Internet-Draft (J. Bu, R. V. Guha, J. Arkko, J. Jiménez), *Agent Resource Discovery (ARD) Architecture (draft-bu-dawn-ard-architecture-00)* (2026-10-30; fetched 2026-11-07) — <https://www.ietf.org/archive/id/draft-bu-dawn-ard-architecture-00.txt>\n3. Network Working Group individual Internet-Draft (J. Jiménez, J. Bu, J. Arkko), *Agent Resource Discovery (ARD): Initial Contact (draft-jimenez-dawn-ard-initial-contact-00)* (2026-10-30; fetched 2026-11-07) — <https://www.ietf.org/archive/id/draft-jimenez-dawn-ard-initial-contact-00.txt>\n4. Network Working Group individual Internet-Draft (J. Bu, R. V. Guha, S. Smith, J. Jiménez, J. Damick), *Agent Resource Discovery (ARD): Manifest and Lookup (draft-bu-dawn-ard-discovery-00)* (2026-10-30; fetched 2026-11-07) — <https://www.ietf.org/archive/id/draft-bu-dawn-ard-discovery-00.txt>\n5. ards-project, *Agentic Resource Discovery Specification v0.9 (Draft)* (2026-05-28; fetched 2026-10-30) — <https://github.com/ards-project/ard-spec/blob/main/spec/ard-v0.9.md>\n6. Agentic Resource Discovery Project (ards-project), *ARD Governance* (fetched 2026-10-30) — <https://agenticresourcediscovery.org/governance/>\n7. ARD Project, *ards-project/ard-spec Repository LICENSE (Apache-2.0)* (fetched 2026-11-12) — <https://raw.githubusercontent.com/ards-project/ard-spec/main/LICENSE>\n8. M. Nottingham (IETF), *RFC 8615: Well-Known Uniform Resource Identifiers (URIs)* (published May 2019) — <https://www.rfc-editor.org/rfc/rfc8615.html>\n9. M. Koster, G. Illyes, H. Zeller, and L. Sassman (IETF), *RFC 9309: Robots Exclusion Protocol* (published September 2022) — <https://www.rfc-editor.org/rfc/rfc9309.html>\n10. B. Schwartz, M. Bishop, and E. Nygren (IETF), *RFC 9460: Service Binding and Parameter Specification via the DNS (SVCB and HTTPS Resource Records)* (published November 2023) — <https://www.rfc-editor.org/rfc/rfc9460.html>\n11. Agent Card Working Group, *Agent Card Working Group — ai-catalog.md* (checked 2026-10-29) — <https://raw.githubusercontent.com/Agent-Card/ai-catalog/main/specification/ai-catalog.md>\n12. IETF Datatracker, *RFC 9727: api-catalog: A Well-Known URI and Link Relation to Help Discovery of APIs* (Proposed Standard (June 2025); last updated 2026-05-20) — <https://datatracker.ietf.org/doc/rfc9727/>\n13. J. Mozley and N. Williams (Infoblox), B. Sarikaya, R. Schott (Deutsche Telekom), and J. Damick (Amazon), *draft-mozleywilliams-dnsop-dnsaid — DNS for AI Discovery (IETF Datatracker)* (checked 2026-10-29) — <https://datatracker.ietf.org/doc/draft-mozleywilliams-dnsop-dnsaid/>\n14. J. Mozley, N. Williams, B. Sarikaya, R. Schott, and J. Damick, *DNS for AI Discovery (DNS-AID) (draft-mozleywilliams-dawn-dnsaid-00)* (2 November 2026) — <https://www.ietf.org/archive/id/draft-mozleywilliams-dawn-dnsaid-00.txt>\n15. Agent Community (Open Agent Registry, Inc.), *Agent Identity & Discovery (AID) - v2.1.1 Specification* (2026-10-02 (fetched 2026-10-30)) — <https://aid.agentcommunity.org/docs/specification>\n16. Model Context Protocol, *MCP Server Cards Source (modelcontextprotocol.io/seps/2127-mcp-server-cards)* (checked 2026-10-30) — <https://modelcontextprotocol.io/seps/2127-mcp-server-cards>\n17. Ethereum EIPs (Gary Yang), *ERC-8444: Agentic Resource Discovery (ARD) Onchain* (2026-10-12; fetched 2026-10-30) — <https://eips.ethereum.org/EIPS/eip-8444>\n18. Buildkite, *Buildkite ARD manifest (/.well-known/ard.json)* (fetched 2026-10-30) — <https://buildkite.com/.well-known/ard.json>\n19. Railway, *Railway ARD manifest (/.well-known/ard.json)* (fetched 2026-10-30) — <https://railway.com/.well-known/ard.json>\n20. Supabase, *Supabase ARD manifest (/.well-known/ard.json)* (fetched 2026-10-30) — <https://supabase.com/.well-known/ard.json>\n21. Fly.io, *Fly.io ARD manifest (/.well-known/ard.json)* (fetched 2026-10-30) — <https://fly.io/.well-known/ard.json>\n22. GoogleChrome/lighthouse, *PR #17168: new_audit(ard-schema): add Agent Resource Discovery audit* (merged 2026-08-31; fetched 2026-10-30) — <https://github.com/GoogleChrome/lighthouse/pull/17168>\n23. Hugging Face (Ben Burtenshaw and Shaun Smith), *Agentic Resource Discovery: Let agents search for tools, skills, and other agents* (2026-06-17; fetched 2026-10-30) — <https://huggingface.co/blog/agentic-resource-discovery-launch>\n24. Microsoft Command Line (Ramanathan Guha), *Introducing the Agentic Resource Discovery specification* (2026-06-17; fetched 2026-10-30) — <https://commandline.microsoft.com/agentic-resource-discovery-specification-ard/>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "ai-catalog-well-known-file",
   "hatnote_md": "For the Agentic Resource Discovery (ARD) search and capability discovery specification that adopted `/.well-known/ard.json` in v0.91 after using `/.well-known/ai-catalog.json` in v0.9, see [ARD](/protocols/ard/). For the Model Context Protocol pre-connection server metadata extension that uses `/.well-known/ai-catalog.json` for domain-level discovery, see [MCP Server Cards](/protocols/mcp-server-cards/). Not to be confused with [API Catalog (RFC 9727)](/protocols/api-catalog-rfc9727/) (`/.well-known/api-catalog`, `application/linkset+json`).",
   "name": "AI Catalog well-known file",
   "acronym": "",
   "adoption": {
    "level": "observed",
    "by": "Anthropic (Claude Platform), GitHub, GitHub MCP Registry, Cloudflare Developer Documentation, Hugging Face, AI Catalog Rust SDK, AI Catalog Go SDK, ai-catalog CLI, and 9 other verified implementations",
    "probe_run": null
   },
   "aliases": [
    "ai-catalog.json",
    "application/ai-catalog+json"
   ],
   "analog": "sitemap.xml",
   "collisions": [
    "ARD v0.9 used /.well-known/ai-catalog.json before moving to /.well-known/ard.json in v0.91 (2026-08-26)",
    "RFC 9727 API Catalog uses /.well-known/api-catalog (application/linkset+json)"
   ],
   "discovery": {
    "mechanism": "HTTP `Link` header with `rel=\"ai-catalog\"`, HTML `<link rel=\"ai-catalog\">`, and well-known URI `/.well-known/ai-catalog.json` served as `application/ai-catalog+json` (`application/json` accepted by discovery fallback)",
    "path": "/.well-known/ai-catalog.json"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://ai-catalog.io/spec/",
     "claim": "Agent Card Working Group, *Agent Card Working Group — spec*, checked 2026-10-29",
     "date": null,
     "quote": "following well-known URI [[RFC8615]]: /.well-known/ai-catalog.json Clients performing domain-level discovery SHOULD attempt to retrieve this / This is a draft document and may be updated at any time. / IANA \"Well-Known URIs\" registry [[RFC8615]]. URI Suffix: ai-catalog.json Change Controller: Agent Card Working Group / Status of This Document This is a draft document and may be updated at any time. / { \"identifier\": \"urn:air:example.com:a2a:research\", \"type\": \"application/a2a-agent-card+json\", \"url\": \"https://agents.example.com/researchAssistant\" }, { \"identifier\":",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://raw.githubusercontent.com/Agent-Card/ai-catalog/main/specification/ai-catalog.md",
     "claim": "Agent Card Working Group, *Agent Card Working Group — ai-catalog.md*, checked 2026-10-29",
     "date": null,
     "quote": "This document defines the AI Catalog: a typed, nestable JSON container for discovering heterogeneous AI artifacts. / hosts MAY serve an AI Catalog at the following well-known URI [[RFC8615]]: /.well-known/ai-catalog.json Clients performing domain-level discovery SHOULD attempt to retrieve this well-known URL. / Websites MAY advertise their AI Catalog by including an ai-catalog link relation in HTTP responses or HTML documents. / specVersion: A string indicating the version of this specification that the catalog conforms to, in \"Major.Minor\" format (e.g., \"1.0\"). / This section registers the ai-catalog.json well-known URI in the IANA \"Well-Known URIs\" registry [[RFC8615]]. URI Suffix:: ai-catalog.json Change Controller:: Agent Card Working Group / An AI Catalog document is a JSON object that MUST contain the following members: specVersion: A string indicating the version of this specification that the catalog conforms to, in \"Major.Minor\" format (e.g., \"1.0\"). See Version Handling for compatibility rules. entries: An array of Catalog Entry objects as defined in Catalog Entry. This array MAY be empty. / An AI Catalog document is identified by the media type: application/ai-catalog+json / \"type\": \"application/a2a-agent-card+json\", \"url\": \"https://api.acme-corp.com/agents/finance.json\" }, { \"identifier\": \"urn:air:acme.com:server:finance-mcp\", \"type\": \"application/mcp-server-card+json\", \"url\": / To support automated discovery, hosts MAY serve an AI Catalog at the following well-known URI [[RFC8615]]: /.well-known/ai-catalog.json Clients performing domain-level discovery SHOULD attempt to retrieve this well-known URL. / A minimal catalog is simply a list of entries — names, types, and URLs — requiring no additional infrastructure. / Each entry declares its artifact type via a type identifier (which is an IANA media type) and may reference or embed the native artifact metadata. / This field is an open text format, so any string value is accepted. However, to ensure interoperability, it is RECOMMENDED to use one of the following recognized \"known types\" in the ecosystem when applicable / 1. Fetch the target URL and inspect the HTTP response headers for a Link header with rel=\"ai-catalog\". / The AI Catalog is intentionally agnostic about the artifacts it indexes. It does not define or constrain the schema of MCP server manifests, A2A agent cards, or any other artifact format. / This specification defines three conformance levels. Each level builds on the previous one. Implementations MUST satisfy all requirements of their declared level.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://raw.githubusercontent.com/Agent-Card/ai-catalog/main/README.md",
     "claim": "Agent Card Working Group, *Agent Card Working Group — README.md (Agent-Card/ai-catalog)*, checked 2026-10-29",
     "date": null,
     "quote": "The AI Catalog standard does not replace or redefine protocol-specific artifact formats. It provides a common discovery and trust layer around them. / This project will be moved to a permanent location a later date with a permanent governance model. / This is a temporary working repo maintained by the Linux Foundation. Proposals and changes will be made in public in this repo. This project will be moved to a permanent location a later date with a permanent governance model. / This is a temporary working repo maintained by the Linux Foundation. Proposals and changes will be made in public in this repo. / Oct 2026 19:39:33 GMT source-age: 0 Common AI Catalog and Registry Standard !Specification(https://ai-catalog.io/) !Build(https://github.com/Agent-Card/ai-catalog/actions/workflows/publish-spec.yml)",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://raw.githubusercontent.com/Agent-Card/ai-catalog/main/adr/0014-media-type-to-type.md",
     "claim": "Agent Card Working Group, *Agent Card Working Group — 0014-media-type-to-type.md*, checked 2026-04-30",
     "date": null,
     "quote": "We will rename the mediaType field to type in the CatalogEntry schema.",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://raw.githubusercontent.com/Agent-Card/ai-catalog/main/GOVERNANCE.md",
     "claim": "Agent Card Working Group, *Agent Card Working Group — GOVERNANCE.md*, checked 2026-10-29",
     "date": null,
     "quote": "Bu https://github.com/mindpower Microsoft Darrel Miller https://github.com/darrelmiller Anthropic David Soria Parra https://github.com/dsp-ant PulseMCP Tadas Antanavicius / At the inception of the Project, four TSC members will be nominated. Two will be nominated by MCP Core Maintainers (https://github.com/modelcontextprotocol/modelcontextprotocol/blob/main/MAINTAINERS.md) and two will be nominated by the the Linux Foundation A2A Technical Steering Committee (https://github.com/a2aproject/A2A/blob/main/GOVERNANCE.md).",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://raw.githubusercontent.com/Agent-Card/ai-catalog/main/MAINTAINERS.md",
     "claim": "Agent Card Working Group, *Agent Card Working Group — MAINTAINERS.md*, checked 2026-10-29",
     "date": null,
     "quote": "Agent-Card/ai-catalog-rust Lead Maintainers: Company Representative Contact:---:---:--- Cisco Luca Muscariello @muscariello AWS Jeffrey Damick @jdamick",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://github.com/Agent-Card/ai-catalog",
     "claim": "Agent Card Working Group, *Agent-Card/ai-catalog Repository Metadata*, checked 2026-10-29",
     "date": null,
     "quote": "\"html_url\": \"https://github.com/Agent-Card/ai-catalog\", \"description\": \"Working repository for common AI Card standard\" / \"pushed_at\": \"2026-10-29T13:32:56Z\"",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://raw.githubusercontent.com/Agent-Card/ai-catalog/main/adr/0029-define-the-policy-urls-extension.md",
     "claim": "Agent Card Working Group, *Agent Card Working Group — 0029-define-the-policy-urls-extension.md*, checked 2026-10-05",
     "date": null,
     "quote": "with one official entry extension: json { \"extensions\": { \"https://ai-catalog.org/extensions/policy-urls\": { \"privacyPolicyUrl\": \"https://example.com/privacy\", \"termsOfServiceUrl\": / fields privacyPolicyUrl and termsOfServiceUrl with one official entry extension: json { \"extensions\": { \"https://ai-catalog.org/extensions/policy-urls\":",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://raw.githubusercontent.com/modelcontextprotocol/ext-server-card/main/docs/discovery.md",
     "claim": "Model Context Protocol, *MCP Server Card Discovery Documentation*, checked 2026-10-29",
     "date": null,
     "quote": "For automated domain-level discovery, hosts MAY publish one at: /.well-known/ai-catalog.json Clients performing domain-level discovery SHOULD attempt to retrieve this well-known URL. When served over HTTP, the document SHOULD use the application/ai-catalog+json media type.",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://raw.githubusercontent.com/Agent-Card/ai-catalog-go/main/README.md",
     "claim": "Agent Card Working Group, *Agent Card Working Group — README.md (Agent-Card/ai-catalog-go)*, checked 2026-10-29",
     "date": null,
     "quote": "itself, then a Link header with rel=\"ai-catalog\", then an HTML , then /.well-known/ai-catalog.json. go / URL itself, then a Link header with rel=\"ai-catalog\", then an HTML , then /.well-known/ai-catalog.json.",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://raw.githubusercontent.com/Agent-Card/ai-catalog/main/LICENSE.md",
     "claim": "Agent Card Working Group, *Agent Card Working Group — LICENSE.md*, checked 2026-10-29",
     "date": null,
     "quote": "The specification and documentation in this repository are licensed under the Creative Commons Attribution 4.0 International License.",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://www.rfc-editor.org/rfc/rfc8615.html",
     "claim": "IETF, *RFC 8615: Well-Known Uniform Resource Identifiers (URIs)*, IETF RFC",
     "date": null,
     "quote": "This memo defines a path prefix for \"well-known locations\",",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://www.sitemaps.org/protocol.html",
     "claim": "Sitemaps Protocol Consortium, *Sitemaps XML format 0.9*, 2008-02-27",
     "date": "2008-02-27",
     "quote": "This document describes the XML schema for the Sitemap protocol.",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://agenticresourcediscovery.org/spec/",
     "claim": "Agentic Resource Discovery Project (ards-project), *Agentic Resource Discovery Specification v0.91*, 2026-08-26; fetched 2026-10-30",
     "date": null,
     "quote": "Version: v0.91 Status: Proposal Date: August 26, 2026",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://modelcontextprotocol.io/seps/2127-mcp-server-cards",
     "claim": "David Soria Parra (Model Context Protocol), *SEP-2127: MCP Server Cards*, checked 2026-01-21",
     "date": null,
     "quote": "The TypeScript file,_jsx(_components.a,{href:https://github.com/modelcontextprotocol/experimental-ext-server-card/blob/main/schema.ts,children:_jsx(_components.code,{children:schema.ts})}), is the single",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://datatracker.ietf.org/doc/rfc9727/",
     "claim": "IETF Datatracker, *RFC 9727: api-catalog: A Well-Known URI and Link Relation to Help Discovery of APIs*, Proposed Standard (June 2025); last updated 2026-05-20",
     "date": null,
     "quote": "RFC - Proposed Standard (June 2025)",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Current : the current protocol version, which is ready for use and may continue to receive backwards compatible changes.",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://aaif.io/blog/a2a-joins-aaif",
     "claim": "Agentic AI Foundation, *A2A joins AAIF's open agentic stack*, published 2026-08-17; modified 2026-09-24",
     "date": null,
     "quote": "A2A v1.0, the first stable specification, shipped in March 2026.",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://platform.claude.com/.well-known/ai-catalog.json",
     "claim": "Anthropic, *Anthropic AI Catalog (/.well-known/ai-catalog.json)*, checked 2026-10-29",
     "date": null,
     "quote": "\"url\":\"https://platform.claude.com/docs/mcp/server-card\"",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://github.com/.well-known/ai-catalog.json",
     "claim": "GitHub, Inc., *GitHub AI Catalog (/.well-known/ai-catalog.json)*, checked 2026-10-29",
     "date": null,
     "quote": "{\"specVersion\":\"1.0\",\"entries\":[{\"identifier\":\"urn:air:github.com:mcp:github-mcp-server\",\"type\":\"application/mcp-server-card+json\",\"url\":\"https://api.githubcopilot.com/mcp/server-card\"}]} date: Fri, 30 Oct",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://api.mcp.github.com/.well-known/ai-catalog.json",
     "claim": "GitHub MCP Registry, *GitHub MCP Registry AI Catalog (/.well-known/ai-catalog.json)*, checked 2026-10-29",
     "date": null,
     "quote": "Enterprise\",\"type\":\"application/mcp-server+json\",\"url\":\"https://api.mcp.github.com/v0.1/servers/io.github.microsoft%2FEnterpriseMCP/versions/1.0.0\",\"description\":\"Official Microsoft MCP Server to query",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://developers.cloudflare.com/.well-known/ai-catalog.json",
     "claim": "Cloudflare, *Cloudflare Developer Documentation AI Catalog (/.well-known/ai-catalog.json)*, checked 2026-10-29",
     "date": null,
     "quote": "skills does Cloudflare publish?\",\"Where can I download Cloudflare agent skills?\"]},{\"identifier\":\"urn:air:developers.cloudflare.com:docs:llms-txt\",\"displayName\":\"Cloudflare Docs LLM Index",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://huggingface.co/.well-known/ai-catalog.json",
     "claim": "Hugging Face, *Hugging Face AI Catalog (/.well-known/ai-catalog.json)*, checked 2026-10-29",
     "date": null,
     "quote": "Face Hub MCP Server\",\"type\":\"application/mcp-server-card+json\",\"url\":\"https://huggingface.co/mcp/server-card\"}]} content-type: application/ai-catalog+json; charset=utf-8 content-length: 701 connection: close",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://vercel.com/.well-known/ai-catalog.json",
     "claim": "Vercel, *Vercel AI Catalog (/.well-known/ai-catalog.json)*, checked 2026-10-29",
     "date": null,
     "quote": "{\"specVersion\":\"1.0\",\"host\":{\"displayName\":\"Vercel\",\"identifier\":\"https://vercel.com\",\"documentationUrl\":\"https://vercel.com/docs/agent-resources\"},\"entries\":{\"identifier\":\"urn:air:vercel.com:metadata:mcp-oauth",
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://agentavow.com/.well-known/ai-catalog.json",
     "claim": "AgentAvow, *AgentAvow AI Catalog (/.well-known/ai-catalog.json)*, checked 2026-10-29",
     "date": null,
     "quote": "\"did:web:agentavow.com\", \"signerKid\": \"did:web:agentavow.com#catalog-es256-v1\", \"didDocument\": \"https://agentavow.com/.well-known/did.json\", \"jwks\": \"https://agentgraph.co/.well-known/jwks.json\", \"signedAt\":",
     "ref": 25
    },
    {
     "label": "[26]",
     "url": "https://resend.com/.well-known/ai-catalog.json",
     "claim": "Resend, *Resend AI Catalog (/.well-known/ai-catalog.json)*, checked 2026-10-29",
     "date": null,
     "quote": "{ \"displayName\": \"Resend\", \"documentationUrl\": \"https://resend.com/docs/ai-onboarding\" }, \"entries\": [ { \"identifier\": \"urn:air:resend.com:mcp:mcp\", \"type\": \"application/mcp-server-card+json\", \"url\":",
     "ref": 26
    },
    {
     "label": "[27]",
     "url": "https://resend.com/changelog/ai-catalog-mcp-server-card",
     "claim": "Diel Duarte (Resend), *Support for AI Catalog and MCP Server Card*, checked 2026-10-26",
     "date": null,
     "quote": "and Changes\",\"publisher\":{\"@id\":\"https://resend.com/#organization\"}},{\"@type\":\"TechArticle\",\"headline\":\"Support for AI Catalog and MCP Server Card\",\"description\":\"MCP clients can now find and",
     "ref": 27
    },
    {
     "label": "[28]",
     "url": "https://ai-catalog.outshift.io/.well-known/ai-catalog.json",
     "claim": "Cisco Outshift, *AGNTCY Directory AI Catalog (/.well-known/ai-catalog.json)*, checked 2026-10-29",
     "date": null,
     "quote": "publish an A2A agent card.\",\"mediaType\":\"application/a2a-agent-card+json\",\"tags\":[],\"metadata\":{}},{\"displayName\":\"MCP",
     "ref": 28
    },
    {
     "label": "[29]",
     "url": "https://raw.githubusercontent.com/Agent-Card/awesome-ai-catalogs/main/README.md",
     "claim": "Agent Card Working Group, *Agent Card Working Group — README.md (Agent-Card/awesome-ai-catalogs)*, checked 2026-10-29",
     "date": null,
     "quote": "list. For example, with the ai-catalog CLI: sh ai-catalog catalog add awesome https://agent-card.github.io/awesome-ai-catalogs/ai-catalog.json ai-catalog",
     "ref": 29
    },
    {
     "label": "[30]",
     "url": "https://agent-card.github.io/awesome-ai-catalogs/ai-catalog.json",
     "claim": "Agent Card Working Group, *awesome-ai-catalogs/ai-catalog.json*, checked 2026-10-29",
     "date": null,
     "quote": "\"https://nostria.app/.well-known/ai-catalog.json\", \"tags\": [ \"mcp\", \"openapi\", \"nostr\", \"social\" ] }, { \"identifier\": \"https://agent-card.github.io/awesome-ai-catalogs/catalogs/nylas-cli\", \"displayName\": \"Nylas",
     "ref": 30
    },
    {
     "label": "[31]",
     "url": "https://raw.githubusercontent.com/Agent-Card/ai-catalog-rust/main/README.md",
     "claim": "Agent Card Working Group, *Agent Card Working Group — README.md (Agent-Card/ai-catalog-rust)*, checked 2026-10-29",
     "date": null,
     "quote": "website (Link header, HTML , well-known URI): rust let found = ai_catalog_discover::discover(\"example.com\")?; println!(\"{} via",
     "ref": 31
    },
    {
     "label": "[32]",
     "url": "https://raw.githubusercontent.com/Agent-Card/ai-catalog-cli/main/README.md",
     "claim": "Agent Card Working Group, *Agent Card Working Group — README.md (Agent-Card/ai-catalog-cli)*, checked 2026-10-29",
     "date": null,
     "quote": "SKILL.md follows the Agent Skills standard and teaches an AI agent to use this CLI to discover, inspect, and install AI artifacts from a catalog. It requires the ai-catalog binary on PATH.",
     "ref": 32
    },
    {
     "label": "[33]",
     "url": "https://github.com/GoogleChrome/lighthouse/releases/tag/v13.5.0",
     "claim": "Google Chrome, *Google Chrome Lighthouse*, checked 2026-09-18",
     "date": null,
     "quote": "ard-schema: add Agent Resource Discovery audit ([#17168](https://github.com/GoogleChrome/lighthouse/pull/17168))",
     "ref": 33
    },
    {
     "label": "[34]",
     "url": "https://github.com/GoogleChrome/lighthouse/issues/17251",
     "claim": "Google Chrome, *Google Chrome Lighthouse*, checked 2026-09-22",
     "date": null,
     "quote": "HEAD, core/gather/gatherers/agentic/ard.js:\\n- document.querySelector('link[rel~=\\\"ai-catalog\\\" i]')\\n- parsed.get('rel', 'ai-catalog') (HTTP Link header)\\n- new URL('/.well-known/ai-catalog.json',",
     "ref": 34
    },
    {
     "label": "[35]",
     "url": "https://github.com/GoogleChrome/lighthouse/pull/17168",
     "claim": "Google Chrome, *GoogleChrome/lighthouse/pull/17168*, checked 2026-10-29",
     "date": null,
     "quote": "Resource Discovery (ARD) schema conformance audit (ard-schema) to Lighthouse under the agentic-browsing category. -->",
     "ref": 35
    },
    {
     "label": "[36]",
     "url": "https://raw.githubusercontent.com/github/agentfinder-catalog/main/README.md",
     "claim": "GitHub, Inc., *Agent Finder Catalog (github/agentfinder-catalog README)*, checked 2026-10-29",
     "date": null,
     "quote": "The Catalog workflow checks the GitHub MCP Registry hourly, independently of repository changes, and opens or updates the automation/update-ai-catalog pull request when the generated catalog changes.",
     "ref": 36
    },
    {
     "label": "[37]",
     "url": "https://github.blog/changelog/2026-06-17-agent-finder-for-github-copilot-now-available/",
     "claim": "GitHub, Inc., *Agent Finder for GitHub Copilot Now Available — GitHub Changelog*, checked 2026-06-17",
     "date": null,
     "quote": "Describe a task in plain language and agent finder searches an index of available AI resources, then returns ranked matches Copilot can pull in on demand from any catalog you point it at.",
     "ref": 37
    },
    {
     "label": "[38]",
     "url": "https://raw.githubusercontent.com/spec-works/ai-catalog/main/README.md",
     "claim": "SpecWorks, *AI Catalog .NET and Python Toolkit (spec-works/ai-catalog README)*, checked 2026-10-29",
     "date": null,
     "quote": "A.NET and Python toolkit for working with AI Catalog documents (application/ai-catalog+json). Parse, validate, serialize, explore, and install AI artifacts from catalog registries.",
     "ref": 38
    },
    {
     "label": "[39]",
     "url": "https://raw.githubusercontent.com/tomevault-io/ai-catalog-reference/main/README.md",
     "claim": "TomeVault, *AI Catalog Trust Manifest Reference Implementation (tomevault-io/ai-catalog-reference README)*, checked 2026-10-29",
     "date": null,
     "quote": "A runnable signer and verifier for the AI Catalog Level 3 \"Trusted Catalog\" trust layer: signed subject binding, identity anchoring, an algorithm allowlist, freshness, substantive-member enforcement, and SSRF-safe fetching.",
     "ref": 39
    }
   ],
   "form": "well-known-file",
   "governance": "Agent Card Working Group Technical Steering Committee (Junjie Bu, Google; Darrel Miller, Microsoft; David Soria Parra, Anthropic; Tadas Antanavicius, PulseMCP) in a Linux Foundation-maintained repository (Apache-2.0 for code, CC-BY-4.0 for specification/docs; SDKs maintained by Luca Muscariello, Cisco, and Jeffrey Damick, AWS)",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "merged into ard: confirmed via ARD v0.91 spec text that ai-catalog.json is ARD's own deprecated predecessor path, not a separate specification"
    },
    {
     "date": "2026-10-29",
     "note": "Expanded primary-source verified record across 54 primary sources including Agent-Card/ai-catalog specVersion 1.0 draft, ADRs 0014/0017/0027/0028/0029, SEP-2127 Final, ARD v0.9/v0.91, Rust/Go/CLI SDKs, Lighthouse v13.5.0, and live /.well-known/ai-catalog.json publishers"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "implementation": "shipping",
   "last_verified": "2026-11-12",
   "native_status": "Working draft (specVersion: \"1.0\", published at https://ai-catalog.io/spec/); active domain-level discovery path in MCP Server Cards (SEP-2127, Final 2026-10-06) and optional predecessor path in ARD v0.91",
   "origin": {
    "date": "2025-10-29",
    "org": "Agent Card Working Group (Google, Microsoft, Anthropic, PulseMCP, Cisco Outshift, AWS)"
   },
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "draft",
   "probe": {
    "method": "GET",
    "on_absent": "No /.well-known/ai-catalog.json manifest published at this origin.",
    "parse": "A 200 JSON response (application/ai-catalog+json or application/json) with specVersion and an entries array.",
    "path": "https://{origin}/.well-known/ai-catalog.json"
   },
   "question": "Which AI artifacts (MCP Server Cards, A2A Agent Cards, Agent Skills, APIs, or nested catalogs) does this domain publish, and what signed trust manifests back them?",
   "scope": "general",
   "spec_url": "https://ai-catalog.io/spec/",
   "step": "discover",
   "summary_md": "**AI Catalog well-known file** is a working-draft JSON manifest from the Agent Card Working Group that defines a typed, nestable container for discovering heterogeneous AI artifacts without constraining each artifact's native schema. The Linux Foundation-hosted repository describes the standard as a common discovery and trust layer around protocol-specific artifact formats rather than replacing them. Hosts MAY serve an AI Catalog at `/.well-known/ai-catalog.json`, and clients performing domain-level discovery SHOULD attempt to retrieve that well-known URL. Websites MAY advertise a catalog with an `ai-catalog` link relation in HTTP responses or HTML documents so automated clients learn the catalog location without prior knowledge. Published `specVersion` is `1.0` in `Major.Minor` form, and the published ReSpec page states the document is a draft that may change at any time. ADR 0014 renames catalog entry `mediaType` to `type`, and the temporary working repo is slated to move to a permanent location with a permanent governance model.",
   "track": "vendor-consortium",
   "version": {
    "date": "2026-10-29",
    "label": "specVersion 1.0 (unnumbered working draft; repo pushed 2026-10-29, checked 2026-10-30)"
   },
   "watch": [
    {
     "type": "github",
     "repo": "Agent-Card/ai-catalog",
     "mode": "release"
    }
   ],
   "use_cases": [
    "discover-my-api",
    "describe-agent-capabilities"
   ],
   "audience": [
    "site-owner",
    "agent-builder",
    "platform"
   ],
   "pairs_with": [
    "ard",
    "mcp-server-cards",
    "api-catalog-rfc9727",
    "mcp",
    "a2a"
   ],
   "prerequisites": [],
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "web_discovery",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "For the Agentic Resource Discovery (ARD) search and capability discovery specification that adopted `/.well-known/ard.json` in v0.91 after using `/.well-known/ai-catalog.json` in v0.9, see [ARD](/protocols/ard/). For the Model Context Protocol pre-connection server metadata extension that uses `/.well-known/ai-catalog.json` for domain-level discovery, see [MCP Server Cards](/protocols/mcp-server-cards/). Not to be confused with [API Catalog (RFC 9727)](/protocols/api-catalog-rfc9727/) (`/.well-known/api-catalog`, `application/linkset+json`). [1]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**AI Catalog well-known file** is a working-draft JSON manifest from the Agent Card Working Group that defines a typed, nestable container for discovering heterogeneous AI artifacts without constraining each artifact's native schema. [2] The Linux Foundation-hosted repository describes the standard as a common discovery and trust layer around protocol-specific artifact formats rather than replacing them. [3] Hosts MAY serve an AI Catalog at `/.well-known/ai-catalog.json`, and clients performing domain-level discovery SHOULD attempt to retrieve that well-known URL. [2] Websites MAY advertise a catalog with an `ai-catalog` link relation in HTTP responses or HTML documents so automated clients learn the catalog location without prior knowledge. [2] Published `specVersion` is `1.0` in `Major.Minor` form, and the published ReSpec page states the document is a draft that may change at any time. [1][2] ADR 0014 renames catalog entry `mediaType` to `type`, and the temporary working repo is slated to move to a permanent location with a permanent governance model. [3][4]",
   "v05_identity_sentence_md": "**AI Catalog well-known file** is a working-draft JSON manifest from the Agent Card Working Group that defines a typed, nestable container for discovering heterogeneous AI artifacts without constraining each artifact's native schema. [2] The Linux Foundation-hosted repository describes the standard as a common discovery and trust layer around protocol-specific artifact formats rather than replacing them. [3]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Discover](/category/discover/) (`discover`)"
    },
    {
     "label": "Form",
     "value_md": "Well-known file (`well-known-file`)"
    },
    {
     "label": "Originated by",
     "value_md": "Agent Card Working Group (`GOVERNANCE.md` TSC: Junjie Bu, Google; Luca Muscariello, Cisco Outshift; Darrel Miller, Microsoft; David Soria Parra, Anthropic; Tadas Antanavicius, PulseMCP; `MAINTAINERS.md` SDK maintainers: Luca Muscariello, Cisco; Jeffrey Damick, AWS) [5][6][7]"
    },
    {
     "label": "Governed by",
     "value_md": "Agent Card Working Group Technical Steering Committee (2 MCP Core Maintainers nominees + 2 Linux Foundation A2A TSC nominees) in a Linux Foundation-maintained repository [3][5]"
    },
    {
     "label": "Track",
     "value_md": "Vendor-consortium working draft (Agent Card Working Group; Linux Foundation-maintained repository) [1][3]"
    },
    {
     "label": "Status",
     "value_md": "Working draft (specVersion: \"1.0\", published at https://ai-catalog.io/spec/); active domain-level discovery path in MCP Server Cards (SEP-2127, Final 2026-10-06) and optional predecessor path in ARD v0.91 [1][2][8]"
    },
    {
     "label": "Version",
     "value_md": "unnumbered working draft (`specVersion: \"1.0\"` at `https://ai-catalog.io/spec/`; repo pushed 2026-10-29, checked 2026-10-30) [1][2][7][8]"
    },
    {
     "label": "Wire format",
     "value_md": "UTF-8 JSON (`application/ai-catalog+json`, with `application/json` accepted as discovery fallback) [2][9]"
    },
    {
     "label": "Specification",
     "value_md": "[AI Catalog Specification (`ai-catalog.io/spec/`)](https://ai-catalog.io/spec/) · [`specification/ai-catalog.md`](https://raw.githubusercontent.com/Agent-Card/ai-catalog/main/specification/ai-catalog.md) · [GitHub (`Agent-Card/ai-catalog`)](https://github.com/Agent-Card/ai-catalog) [1][2][3]"
    },
    {
     "label": "Found at",
     "value_md": "`GET /.well-known/ai-catalog.json` (RFC 8615), HTTP `Link: <...>; rel=\"ai-catalog\"`, HTML `<link rel=\"ai-catalog\">` [2][9][10]"
    },
    {
     "label": "Licence",
     "value_md": "Split license: Apache License 2.0 (software/code) and Creative Commons Attribution 4.0 International (`CC-BY-4.0`, specification/docs) [11]"
    }
   ],
   "v05_problem_md": "MCP server cards, A2A agent cards, skills bundles, and plugins each ship their own discovery story, so an agent that lands on a domain lacks one typed list of what AI resources the publisher exposes. [2] While the specification overview refers to `type` as an IANA media type, the normative `type` field definition states that it is an open text format where any string value is accepted, with recognized ecosystem strings `RECOMMENDED` by governance partition, and each entry MUST contain exactly one of `url` or `data`. [2] Discovery walks Link headers, HTML link elements, then the well-known fallback, and the client validates specVersion before trusting the catalog document. [2] The AI Catalog is intentionally agnostic about indexed artifacts; it does not define MCP server manifests, A2A agent cards, or other artifact schemas and delegates those definitions to their protocols. [2] Conformance is layered into Minimal, Discoverable, and Trusted levels so publishers can start with a bare entry list and add host identity and trust metadata only when needed. [2]",
   "v05_mechanism_delta_md": "While the specification overview refers to `type` as an IANA media type, the normative `type` field definition states that it is an open text format where any string value is accepted, with recognized ecosystem strings `RECOMMENDED` by governance partition, and each entry MUST contain exactly one of `url` or `data`. [2] Discovery walks Link headers, HTML link elements, then the well-known fallback, and the client validates specVersion before trusting the catalog document. [2]",
   "v05_scope_boundary_md": "The AI Catalog is intentionally agnostic about indexed artifacts; it does not define MCP server manifests, A2A agent cards, or other artifact schemas and delegates those definitions to their protocols. [2] Conformance is layered into Minimal, Discoverable, and Trusted levels so publishers can start with a bare entry list and add host identity and trust metadata only when needed. [2]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "Well-Known URIs (RFC 8615)",
      "spec_or_rfc": "RFC 8615",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "The catalog uses media type application/ai-catalog+json, link relation ai-catalog, and well-known URI /.well-known/ai-catalog.json; the specification's IANA Considerations section requests registration of all three, and none was yet in the IANA registries on 29 October 2026. [2][12]"
     },
     {
      "name": "Sitemaps XML (sitemaps.org)",
      "spec_or_rfc": "Sitemaps 0.9",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "The file is application/ai-catalog+json indexing AI artifacts for one domain, each entry carrying a type plus url or data, whereas a sitemaps.org sitemap is an XML urlset of page URLs for crawlers. [2][13]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "ard",
      "target_name": "Agentic Resource Discovery (ARD)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "AI Catalog's document is application/ai-catalog+json at /.well-known/ai-catalog.json, while ARD requires clients to fetch /.well-known/ard.json and treats ai-catalog.json only as an optional predecessor. [2][14]"
     },
     {
      "target_id": "mcp-server-cards",
      "target_name": "MCP Server Cards",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "MCP Server Cards (SEP-2127) use /.well-known/ai-catalog.json for domain-level discovery of MCP servers, while each Server Card itself is referenced at whatever URL the catalog entry's url points to (such as /server-card) or inline in data rather than a separate well-known Server Card URI. [2][15]"
     },
     {
      "target_id": "api-catalog-rfc9727",
      "target_name": "api-catalog (RFC 9727)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ai-catalog.json is application/ai-catalog+json with specVersion and entries, while RFC 9727 is application/linkset+json at /.well-known/api-catalog for API description documents. [2][16]"
     },
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "The catalog only lists discovery records at /.well-known/ai-catalog.json, while MCP is an endpoint protocol and does not define that file. [2][17]"
     },
     {
      "target_id": "a2a",
      "target_name": "Agent2Agent Protocol (A2A)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "The catalog is a domain discovery file at /.well-known/ai-catalog.json, while A2A is the agent-to-agent protocol and does not define that file. [2][18]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (17 probed or cited examples; non-exhaustive).",
    "side_a": {
     "visible": true,
     "heading": "Who publishes or hosts it",
     "col4_header": "Behavior / Provisioning",
     "note_md": null,
     "rows": [
      {
       "actor": "Anthropic (Claude Platform)",
       "role": "Docs platform",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Level 2 catalog at `/.well-known/ai-catalog.json` with `Content-Type: application/ai-catalog+json`, advertising the docs MCP Server Card `urn:air:platform.claude.com:mcp:docs` at `https://platform.claude.com/docs/mcp/server-card`.",
       "source_md": "[platform.claude.com/.well-known/ai-catalog.json (checked 2026-10-29)](https://platform.claude.com/.well-known/ai-catalog.json) [19]"
      },
      {
       "actor": "GitHub",
       "role": "Publisher",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Level 1 catalog on github.com (`specVersion` 1.0) with one entry, `urn:air:github.com:mcp:github-mcp-server`, pointing at `https://api.githubcopilot.com/mcp/server-card`.",
       "source_md": "[github.com/.well-known/ai-catalog.json (checked 2026-10-29)](https://github.com/.well-known/ai-catalog.json) [20]"
      },
      {
       "actor": "GitHub MCP Registry",
       "role": "Publisher",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Registry catalog at `api.mcp.github.com/.well-known/ai-catalog.json` with `Content-Type: application/ai-catalog+json`, host.displayName `GitHub MCP Registry`, and entries such as `urn:ai:registry.modelcontextprotocol.io:microsoft:markitdown`.",
       "source_md": "[api.mcp.github.com/.well-known/ai-catalog.json (checked 2026-10-29)](https://api.mcp.github.com/.well-known/ai-catalog.json) [21]"
      },
      {
       "actor": "Cloudflare Developer Documentation",
       "role": "Docs platform",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Level 2 catalog, `Content-Type: application/ai-catalog+json`, `identifier` `did:web:developers.cloudflare.com`, indexing the REST OpenAPI document, the MCP Servers card, the Agent Skills index, and `llms.txt`.",
       "source_md": "[developers.cloudflare.com/.well-known/ai-catalog.json (checked 2026-10-29)](https://developers.cloudflare.com/.well-known/ai-catalog.json) [22]"
      },
      {
       "actor": "Hugging Face",
       "role": "Publisher",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Level 2 catalog advertising the Discover registry (`urn:air:huggingface.co:registry:discover`, type `application/ai-registry+json`) and the Hub MCP Server Card.",
       "source_md": "[huggingface.co/.well-known/ai-catalog.json (checked 2026-10-29)](https://huggingface.co/.well-known/ai-catalog.json) [23]"
      },
      {
       "actor": "Vercel",
       "role": "Publisher",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Level 2 catalog, `Content-Type: application/ai-catalog+json`, `displayName` Vercel, `documentationUrl` `https://vercel.com/docs/agent-resources`, indexing MCP OAuth metadata, the Vercel MCP server, and the documentation graph.",
       "source_md": "[vercel.com/.well-known/ai-catalog.json (checked 2026-10-29)](https://vercel.com/.well-known/ai-catalog.json) [24]"
      },
      {
       "actor": "AgentAvow",
       "role": "Publisher",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-30",
       "col4_md": "Catalog at /.well-known/ai-catalog.json (Content-Type: application/ai-catalog+json, host did:web:agentavow.com); in the 2026-10-30 snapshot, extensions `com.agentavow.catalogBuild` self-declares status: \"signed\" with a catalog ES256 JWS (did:web:agentavow.com#catalog-es256-v1) and an independent-assessor trustManifest on github-mcp-server (assessor manifests alone do not make a third-party entry Level 3 Trusted).",
       "source_md": "[agentavow.com/.well-known/ai-catalog.json (checked 2026-10-29)](https://agentavow.com/.well-known/ai-catalog.json) [25]"
      },
      {
       "actor": "Resend",
       "role": "Publisher",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-26",
       "col4_md": "Catalog announced 2026-10-26 and served with `Content-Type: application/ai-catalog+json`. Entry `urn:air:resend.com:mcp:mcp` points at `https://mcp.resend.com/mcp/server-card`.",
       "source_md": "[resend.com/.well-known/ai-catalog.json (checked 2026-10-29)](https://resend.com/.well-known/ai-catalog.json) [26] · [Resend changelog (2026-10-26)](https://resend.com/changelog/ai-catalog-mcp-server-card) [27]"
      },
      {
       "actor": "Cisco Outshift AGNTCY Directory",
       "role": "Publisher",
       "status": "Experimental",
       "status_display": "Experimental · checked 2026-10-30",
       "col4_md": "Implementations-directory testbed at `ai-catalog.outshift.io/.well-known/ai-catalog.json` (`displayName` AGNTCY Directory) with filtered collections for A2A Agent Cards, MCP Server Cards, and Agent Skills.",
       "source_md": "[ai-catalog.outshift.io/.well-known/ai-catalog.json (checked 2026-10-29)](https://ai-catalog.outshift.io/.well-known/ai-catalog.json) [28]"
      },
      {
       "actor": "Awesome AI Catalogs",
       "role": "Publisher",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Working-group meta-catalog. `https://agent-card.github.io/awesome-ai-catalogs/ai-catalog.json` lists other public catalogs (Netlify, Buildkite, Railway, Fly.io, Supabase, Zapier, ClickHouse, and others). Each listed catalog is validated with the ai-catalog CLI.",
       "source_md": "[awesome-ai-catalogs README](https://raw.githubusercontent.com/Agent-Card/awesome-ai-catalogs/main/README.md) [29] · [Published ai-catalog.json](https://agent-card.github.io/awesome-ai-catalogs/ai-catalog.json) [30]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Bot, client & tool support",
     "col4_header": "Behavior / Provisioning",
     "note_md": null,
     "rows": [
      {
       "actor": "AI Catalog Rust SDK",
       "role": "Validator / Parser",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Crates `ai-catalog`, `ai-catalog-validate`, `ai-catalog-trust`, and `ai-catalog-discover` implement the spec. `ai-catalog-discover` resolves a `Link` header, an HTML <link rel=\"ai-catalog\">, and /.well-known/ai-catalog.json.",
       "source_md": "[ai-catalog-rust README](https://raw.githubusercontent.com/Agent-Card/ai-catalog-rust/main/README.md) [31]"
      },
      {
       "actor": "AI Catalog Go SDK",
       "role": "Client SDK",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "`discovery.Discover` accepts a URL or a bare domain and tries, in order, a catalog at the URL, a `Link` header with rel=ai-catalog, an HTML `<link rel=\"ai-catalog\">`, then `/.well-known/ai-catalog.json`. The README states that `discovery.Discover` does not guard against requests to private addresses by default; a service that runs it for callers it does not trust should pass `discovery.WithFetcher`.",
       "source_md": "[ai-catalog-go README](https://raw.githubusercontent.com/Agent-Card/ai-catalog-go/main/README.md) [10]"
      },
      {
       "actor": "ai-catalog CLI",
       "role": "Validator / Parser",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Installed binary `ai-catalog` (crate `ai-catalog-cli`) inspects, validates, and packages catalogs. Its `SKILL.md` tells an agent to call that binary to discover and install catalog entries.",
       "source_md": "[ai-catalog-cli README](https://raw.githubusercontent.com/Agent-Card/ai-catalog-cli/main/README.md) [32]"
      },
      {
       "actor": "Chrome Lighthouse",
       "role": "Security / Audit scanner",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-09",
       "col4_md": "v13.5.0 (18 September 2026) ships the `ard-schema` audit. Gatherer `core/gather/gatherers/agentic/ard.js` requests an HTML <link rel=\"ai-catalog\">, HTTP `Link` headers, and `/.well-known/ai-catalog.json` (issue #17251, closed 2026-10-09).",
       "source_md": "[Lighthouse v13.5.0 (2026-09-18)](https://github.com/GoogleChrome/lighthouse/releases/tag/v13.5.0) [33] · [Lighthouse issue #17251](https://github.com/GoogleChrome/lighthouse/issues/17251) [34] · [PR #17168](https://github.com/GoogleChrome/lighthouse/pull/17168) [35]"
      },
      {
       "actor": "GitHub Copilot Agent Finder",
       "role": "Client SDK",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "The catalog workflow checks the GitHub MCP Registry every hour, independent of repository pushes, and opens or updates the `automation/update-ai-catalog` pull request when the generated catalog changes.",
       "source_md": "[agentfinder-catalog README](https://raw.githubusercontent.com/github/agentfinder-catalog/main/README.md) [36] · [GitHub Changelog (2026-06-17)](https://github.blog/changelog/2026-06-17-agent-finder-for-github-copilot-now-available/) [37]"
      },
      {
       "actor": "SpecWorks AI Catalog",
       "role": "Validator / Parser",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": ".NET package `SpecWorks.AiCatalog` and Python package `specworks-aicatalog` parse, validate, serialize, and install artifacts from `application/ai-catalog+json` documents.",
       "source_md": "[spec-works/ai-catalog README](https://raw.githubusercontent.com/spec-works/ai-catalog/main/README.md) [38]"
      },
      {
       "actor": "TomeVault AI Catalog reference",
       "role": "Validator / Parser",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Python signer and verifier for Level 3 trust manifests: signed subject binding, `did:web` identity, an algorithm allowlist, freshness, substantive-member checks, and SSRF-safe fetches.",
       "source_md": "[tomevault-io/ai-catalog-reference README](https://raw.githubusercontent.com/tomevault-io/ai-catalog-reference/main/README.md) [39]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "mcp-registry",
     "target_name": "Official MCP Registry",
     "relation_label": "Complements",
     "delta": "An AI Catalog may be served at /.well-known/ai-catalog.json so a client can discover artifacts for that host. The MCP Registry is the cross-host metadata repository for MCP servers. [2]",
     "item_md": "**[Official MCP Registry](/protocols/mcp-registry/)** (Complements) — An AI Catalog may be served at /.well-known/ai-catalog.json so a client can discover artifacts for that host. The MCP Registry is the cross-host metadata repository for MCP servers. [2]"
    },
    {
     "target_id": "ads",
     "target_name": "Agent Directory Service",
     "relation_label": "Complements",
     "delta": "ADS uses /.well-known/ai-catalog.json as the host-local finder and GET /v1/agents as the directory API, while the AI Catalog file format is the document at that well-known path. [2]",
     "item_md": "**[Agent Directory Service](/protocols/ads/)** (Complements) — ADS uses /.well-known/ai-catalog.json as the host-local finder and GET /v1/agents as the directory API, while the AI Catalog file format is the document at that well-known path. [2]"
    },
    {
     "item_md": "**[Discover protocols](/category/discover/)** — Category index for `discover` standards."
    }
   ],
   "v05_compiled_md": "---\nid: ai-catalog-well-known-file\ntitle: \"AI Catalog well-known file\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: discover\nform: well-known-file\nwire_archetype: web_discovery\nspec_url: https://ai-catalog.io/spec/\nlast_checked: 2026-11-12\n---\n\n# AI Catalog well-known file\n\n**Category:** [Discover](/category/discover/) (`discover`) · **Form:** Well-known file (`well-known-file`) · **Last checked:** 2026-11-12\n\n> *For the Agentic Resource Discovery (ARD) search and capability discovery specification that adopted `/.well-known/ard.json` in v0.91 after using `/.well-known/ai-catalog.json` in v0.9, see [ARD](/protocols/ard/). For the Model Context Protocol pre-connection server metadata extension that uses `/.well-known/ai-catalog.json` for domain-level discovery, see [MCP Server Cards](/protocols/mcp-server-cards/). Not to be confused with [API Catalog (RFC 9727)](/protocols/api-catalog-rfc9727/) (`/.well-known/api-catalog`, `application/linkset+json`). [1]*\n\n**AI Catalog well-known file** is a working-draft JSON manifest from the Agent Card Working Group that defines a typed, nestable container for discovering heterogeneous AI artifacts without constraining each artifact's native schema. [2] The Linux Foundation-hosted repository describes the standard as a common discovery and trust layer around protocol-specific artifact formats rather than replacing them. [3] Hosts MAY serve an AI Catalog at `/.well-known/ai-catalog.json`, and clients performing domain-level discovery SHOULD attempt to retrieve that well-known URL. [2] Websites MAY advertise a catalog with an `ai-catalog` link relation in HTTP responses or HTML documents so automated clients learn the catalog location without prior knowledge. [2] Published `specVersion` is `1.0` in `Major.Minor` form, and the published ReSpec page states the document is a draft that may change at any time. [1][2] ADR 0014 renames catalog entry `mediaType` to `type`, and the temporary working repo is slated to move to a permanent location with a permanent governance model. [3][4]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Discover](/category/discover/) (`discover`) |\n| **Form** | Well-known file (`well-known-file`) |\n| **Originated by** | Agent Card Working Group (`GOVERNANCE.md` TSC: Junjie Bu, Google; Luca Muscariello, Cisco Outshift; Darrel Miller, Microsoft; David Soria Parra, Anthropic; Tadas Antanavicius, PulseMCP; `MAINTAINERS.md` SDK maintainers: Luca Muscariello, Cisco; Jeffrey Damick, AWS) [5][6][7] |\n| **Governed by** | Agent Card Working Group Technical Steering Committee (2 MCP Core Maintainers nominees + 2 Linux Foundation A2A TSC nominees) in a Linux Foundation-maintained repository [3][5] |\n| **Track** | Vendor-consortium working draft (Agent Card Working Group; Linux Foundation-maintained repository) [1][3] |\n| **Status** | Working draft (specVersion: \"1.0\", published at https://ai-catalog.io/spec/); active domain-level discovery path in MCP Server Cards (SEP-2127, Final 2026-10-06) and optional predecessor path in ARD v0.91 [1][2][8] |\n| **Version** | unnumbered working draft (`specVersion: \"1.0\"` at `https://ai-catalog.io/spec/`; repo pushed 2026-10-29, checked 2026-10-30) [1][2][7][8] |\n| **Wire format** | UTF-8 JSON (`application/ai-catalog+json`, with `application/json` accepted as discovery fallback) [2][9] |\n| **Specification** | [AI Catalog Specification (`ai-catalog.io/spec/`)](https://ai-catalog.io/spec/) · [`specification/ai-catalog.md`](https://raw.githubusercontent.com/Agent-Card/ai-catalog/main/specification/ai-catalog.md) · [GitHub (`Agent-Card/ai-catalog`)](https://github.com/Agent-Card/ai-catalog) [1][2][3] |\n| **Found at** | `GET /.well-known/ai-catalog.json` (RFC 8615), HTTP `Link: <...>; rel=\"ai-catalog\"`, HTML `<link rel=\"ai-catalog\">` [2][9][10] |\n| **Licence** | Split license: Apache License 2.0 (software/code) and Creative Commons Attribution 4.0 International (`CC-BY-4.0`, specification/docs) [11] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [Adoption and ecosystem](#adoption-and-ecosystem)\n4. [See also](#see-also)\n5. [References](#references)\n\n---\n\n## Problem and scope\n\nMCP server cards, A2A agent cards, skills bundles, and plugins each ship their own discovery story, so an agent that lands on a domain lacks one typed list of what AI resources the publisher exposes. [2] While the specification overview refers to `type` as an IANA media type, the normative `type` field definition states that it is an open text format where any string value is accepted, with recognized ecosystem strings `RECOMMENDED` by governance partition, and each entry MUST contain exactly one of `url` or `data`. [2] Discovery walks Link headers, HTML link elements, then the well-known fallback, and the client validates specVersion before trusting the catalog document. [2] The AI Catalog is intentionally agnostic about indexed artifacts; it does not define MCP server manifests, A2A agent cards, or other artifact schemas and delegates those definitions to their protocols. [2] Conformance is layered into Minimal, Discoverable, and Trusted levels so publishers can start with a bare entry list and add host identity and trust metadata only when needed. [2]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **Well-Known URIs (RFC 8615)** | `RFC 8615` | Profiles classic standard | The catalog uses media type application/ai-catalog+json, link relation ai-catalog, and well-known URI /.well-known/ai-catalog.json; the specification's IANA Considerations section requests registration of all three, and none was yet in the IANA registries on 29 October 2026. [2][12] |\n| **Sitemaps XML (sitemaps.org)** | `Sitemaps 0.9` | Analogous to classic standard | The file is application/ai-catalog+json indexing AI artifacts for one domain, each entry carrying a type plus url or data, whereas a sitemaps.org sitemap is an XML urlset of page URLs for crawlers. [2][13] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Agentic Resource Discovery (ARD)](/protocols/ard/)** | Peer alternative | AI Catalog's document is application/ai-catalog+json at /.well-known/ai-catalog.json, while ARD requires clients to fetch /.well-known/ard.json and treats ai-catalog.json only as an optional predecessor. [2][14] |\n| **[MCP Server Cards](/protocols/mcp-server-cards/)** | Complements | MCP Server Cards (SEP-2127) use /.well-known/ai-catalog.json for domain-level discovery of MCP servers, while each Server Card itself is referenced at whatever URL the catalog entry's url points to (such as /server-card) or inline in data rather than a separate well-known Server Card URI. [2][15] |\n| **[api-catalog (RFC 9727)](/protocols/api-catalog-rfc9727/)** | Peer alternative | ai-catalog.json is application/ai-catalog+json with specVersion and entries, while RFC 9727 is application/linkset+json at /.well-known/api-catalog for API description documents. [2][16] |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | The catalog only lists discovery records at /.well-known/ai-catalog.json, while MCP is an endpoint protocol and does not define that file. [2][17] |\n| **[Agent2Agent Protocol (A2A)](/protocols/a2a/)** | Complements | The catalog is a domain discovery file at /.well-known/ai-catalog.json, while A2A is the agent-to-agent protocol and does not define that file. [2][18] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (17 probed or cited examples; non-exhaustive).*\n\n### Who publishes or hosts it\n\n| Actor | Role | Status | Behavior / Provisioning | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Anthropic (Claude Platform)** | Docs platform | Supported · checked 2026-10-30 | Level 2 catalog at `/.well-known/ai-catalog.json` with `Content-Type: application/ai-catalog+json`, advertising the docs MCP Server Card `urn:air:platform.claude.com:mcp:docs` at `https://platform.claude.com/docs/mcp/server-card`. | [platform.claude.com/.well-known/ai-catalog.json (checked 2026-10-29)](https://platform.claude.com/.well-known/ai-catalog.json) [19] |\n| **GitHub** | Publisher | Supported · checked 2026-10-30 | Level 1 catalog on github.com (`specVersion` 1.0) with one entry, `urn:air:github.com:mcp:github-mcp-server`, pointing at `https://api.githubcopilot.com/mcp/server-card`. | [github.com/.well-known/ai-catalog.json (checked 2026-10-29)](https://github.com/.well-known/ai-catalog.json) [20] |\n| **GitHub MCP Registry** | Publisher | Supported · checked 2026-10-30 | Registry catalog at `api.mcp.github.com/.well-known/ai-catalog.json` with `Content-Type: application/ai-catalog+json`, host.displayName `GitHub MCP Registry`, and entries such as `urn:ai:registry.modelcontextprotocol.io:microsoft:markitdown`. | [api.mcp.github.com/.well-known/ai-catalog.json (checked 2026-10-29)](https://api.mcp.github.com/.well-known/ai-catalog.json) [21] |\n| **Cloudflare Developer Documentation** | Docs platform | Supported · checked 2026-10-30 | Level 2 catalog, `Content-Type: application/ai-catalog+json`, `identifier` `did:web:developers.cloudflare.com`, indexing the REST OpenAPI document, the MCP Servers card, the Agent Skills index, and `llms.txt`. | [developers.cloudflare.com/.well-known/ai-catalog.json (checked 2026-10-29)](https://developers.cloudflare.com/.well-known/ai-catalog.json) [22] |\n| **Hugging Face** | Publisher | Supported · checked 2026-10-30 | Level 2 catalog advertising the Discover registry (`urn:air:huggingface.co:registry:discover`, type `application/ai-registry+json`) and the Hub MCP Server Card. | [huggingface.co/.well-known/ai-catalog.json (checked 2026-10-29)](https://huggingface.co/.well-known/ai-catalog.json) [23] |\n| **Vercel** | Publisher | Supported · checked 2026-10-30 | Level 2 catalog, `Content-Type: application/ai-catalog+json`, `displayName` Vercel, `documentationUrl` `https://vercel.com/docs/agent-resources`, indexing MCP OAuth metadata, the Vercel MCP server, and the documentation graph. | [vercel.com/.well-known/ai-catalog.json (checked 2026-10-29)](https://vercel.com/.well-known/ai-catalog.json) [24] |\n| **AgentAvow** | Publisher | Supported · as of 2026-10-30 | Catalog at /.well-known/ai-catalog.json (Content-Type: application/ai-catalog+json, host did:web:agentavow.com); in the 2026-10-30 snapshot, extensions `com.agentavow.catalogBuild` self-declares status: \"signed\" with a catalog ES256 JWS (did:web:agentavow.com#catalog-es256-v1) and an independent-assessor trustManifest on github-mcp-server (assessor manifests alone do not make a third-party entry Level 3 Trusted). | [agentavow.com/.well-known/ai-catalog.json (checked 2026-10-29)](https://agentavow.com/.well-known/ai-catalog.json) [25] |\n| **Resend** | Publisher | Supported · as of 2026-10-26 | Catalog announced 2026-10-26 and served with `Content-Type: application/ai-catalog+json`. Entry `urn:air:resend.com:mcp:mcp` points at `https://mcp.resend.com/mcp/server-card`. | [resend.com/.well-known/ai-catalog.json (checked 2026-10-29)](https://resend.com/.well-known/ai-catalog.json) [26] · [Resend changelog (2026-10-26)](https://resend.com/changelog/ai-catalog-mcp-server-card) [27] |\n| **Cisco Outshift AGNTCY Directory** | Publisher | Experimental · checked 2026-10-30 | Implementations-directory testbed at `ai-catalog.outshift.io/.well-known/ai-catalog.json` (`displayName` AGNTCY Directory) with filtered collections for A2A Agent Cards, MCP Server Cards, and Agent Skills. | [ai-catalog.outshift.io/.well-known/ai-catalog.json (checked 2026-10-29)](https://ai-catalog.outshift.io/.well-known/ai-catalog.json) [28] |\n| **Awesome AI Catalogs** | Publisher | Supported · checked 2026-10-30 | Working-group meta-catalog. `https://agent-card.github.io/awesome-ai-catalogs/ai-catalog.json` lists other public catalogs (Netlify, Buildkite, Railway, Fly.io, Supabase, Zapier, ClickHouse, and others). Each listed catalog is validated with the ai-catalog CLI. | [awesome-ai-catalogs README](https://raw.githubusercontent.com/Agent-Card/awesome-ai-catalogs/main/README.md) [29] · [Published ai-catalog.json](https://agent-card.github.io/awesome-ai-catalogs/ai-catalog.json) [30] |\n\n### Bot, client & tool support\n\n| Actor | Role | Status | Behavior / Provisioning | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **AI Catalog Rust SDK** | Validator / Parser | Supported · checked 2026-10-30 | Crates `ai-catalog`, `ai-catalog-validate`, `ai-catalog-trust`, and `ai-catalog-discover` implement the spec. `ai-catalog-discover` resolves a `Link` header, an HTML <link rel=\"ai-catalog\">, and /.well-known/ai-catalog.json. | [ai-catalog-rust README](https://raw.githubusercontent.com/Agent-Card/ai-catalog-rust/main/README.md) [31] |\n| **AI Catalog Go SDK** | Client SDK | Supported · checked 2026-10-30 | `discovery.Discover` accepts a URL or a bare domain and tries, in order, a catalog at the URL, a `Link` header with rel=ai-catalog, an HTML `<link rel=\"ai-catalog\">`, then `/.well-known/ai-catalog.json`. The README states that `discovery.Discover` does not guard against requests to private addresses by default; a service that runs it for callers it does not trust should pass `discovery.WithFetcher`. | [ai-catalog-go README](https://raw.githubusercontent.com/Agent-Card/ai-catalog-go/main/README.md) [10] |\n| **ai-catalog CLI** | Validator / Parser | Supported · checked 2026-10-30 | Installed binary `ai-catalog` (crate `ai-catalog-cli`) inspects, validates, and packages catalogs. Its `SKILL.md` tells an agent to call that binary to discover and install catalog entries. | [ai-catalog-cli README](https://raw.githubusercontent.com/Agent-Card/ai-catalog-cli/main/README.md) [32] |\n| **Chrome Lighthouse** | Security / Audit scanner | Supported · as of 2026-10-09 | v13.5.0 (18 September 2026) ships the `ard-schema` audit. Gatherer `core/gather/gatherers/agentic/ard.js` requests an HTML <link rel=\"ai-catalog\">, HTTP `Link` headers, and `/.well-known/ai-catalog.json` (issue #17251, closed 2026-10-09). | [Lighthouse v13.5.0 (2026-09-18)](https://github.com/GoogleChrome/lighthouse/releases/tag/v13.5.0) [33] · [Lighthouse issue #17251](https://github.com/GoogleChrome/lighthouse/issues/17251) [34] · [PR #17168](https://github.com/GoogleChrome/lighthouse/pull/17168) [35] |\n| **GitHub Copilot Agent Finder** | Client SDK | Supported · checked 2026-10-30 | The catalog workflow checks the GitHub MCP Registry every hour, independent of repository pushes, and opens or updates the `automation/update-ai-catalog` pull request when the generated catalog changes. | [agentfinder-catalog README](https://raw.githubusercontent.com/github/agentfinder-catalog/main/README.md) [36] · [GitHub Changelog (2026-06-17)](https://github.blog/changelog/2026-06-17-agent-finder-for-github-copilot-now-available/) [37] |\n| **SpecWorks AI Catalog** | Validator / Parser | Supported · checked 2026-10-30 | .NET package `SpecWorks.AiCatalog` and Python package `specworks-aicatalog` parse, validate, serialize, and install artifacts from `application/ai-catalog+json` documents. | [spec-works/ai-catalog README](https://raw.githubusercontent.com/spec-works/ai-catalog/main/README.md) [38] |\n| **TomeVault AI Catalog reference** | Validator / Parser | Supported · checked 2026-10-30 | Python signer and verifier for Level 3 trust manifests: signed subject binding, `did:web` identity, an algorithm allowlist, freshness, substantive-member checks, and SSRF-safe fetches. | [tomevault-io/ai-catalog-reference README](https://raw.githubusercontent.com/tomevault-io/ai-catalog-reference/main/README.md) [39] |\n\n---\n\n## See also\n\n- **[Official MCP Registry](/protocols/mcp-registry/)** *(Complements)* — An AI Catalog may be served at /.well-known/ai-catalog.json so a client can discover artifacts for that host. The MCP Registry is the cross-host metadata repository for MCP servers. [2]\n- **[Agent Directory Service](/protocols/ads/)** *(Complements)* — ADS uses /.well-known/ai-catalog.json as the host-local finder and GET /v1/agents as the directory API, while the AI Catalog file format is the document at that well-known path. [2]\n- **Category:** [Discover protocols](/category/discover/)\n\n---\n\n## References\n\n1. Agent Card Working Group, *Agent Card Working Group — spec* (checked 2026-10-29) — <https://ai-catalog.io/spec/>\n2. Agent Card Working Group, *Agent Card Working Group — ai-catalog.md* (checked 2026-10-29) — <https://raw.githubusercontent.com/Agent-Card/ai-catalog/main/specification/ai-catalog.md>\n3. Agent Card Working Group, *Agent Card Working Group — README.md (Agent-Card/ai-catalog)* (checked 2026-10-29) — <https://raw.githubusercontent.com/Agent-Card/ai-catalog/main/README.md>\n4. Agent Card Working Group, *Agent Card Working Group — 0014-media-type-to-type.md* (checked 2026-04-30) — <https://raw.githubusercontent.com/Agent-Card/ai-catalog/main/adr/0014-media-type-to-type.md>\n5. Agent Card Working Group, *Agent Card Working Group — GOVERNANCE.md* (checked 2026-10-29) — <https://raw.githubusercontent.com/Agent-Card/ai-catalog/main/GOVERNANCE.md>\n6. Agent Card Working Group, *Agent Card Working Group — MAINTAINERS.md* (checked 2026-10-29) — <https://raw.githubusercontent.com/Agent-Card/ai-catalog/main/MAINTAINERS.md>\n7. Agent Card Working Group, *Agent-Card/ai-catalog Repository Metadata* (checked 2026-10-29) — <https://github.com/Agent-Card/ai-catalog>\n8. Agent Card Working Group, *Agent Card Working Group — 0029-define-the-policy-urls-extension.md* (checked 2026-10-05) — <https://raw.githubusercontent.com/Agent-Card/ai-catalog/main/adr/0029-define-the-policy-urls-extension.md>\n9. Model Context Protocol, *MCP Server Card Discovery Documentation* (checked 2026-10-29) — <https://raw.githubusercontent.com/modelcontextprotocol/ext-server-card/main/docs/discovery.md>\n10. Agent Card Working Group, *Agent Card Working Group — README.md (Agent-Card/ai-catalog-go)* (checked 2026-10-29) — <https://raw.githubusercontent.com/Agent-Card/ai-catalog-go/main/README.md>\n11. Agent Card Working Group, *Agent Card Working Group — LICENSE.md* (checked 2026-10-29) — <https://raw.githubusercontent.com/Agent-Card/ai-catalog/main/LICENSE.md>\n12. IETF, *RFC 8615: Well-Known Uniform Resource Identifiers (URIs)* (IETF RFC) — <https://www.rfc-editor.org/rfc/rfc8615.html>\n13. Sitemaps Protocol Consortium, *Sitemaps XML format 0.9* (2008-02-27) — <https://www.sitemaps.org/protocol.html>\n14. Agentic Resource Discovery Project (ards-project), *Agentic Resource Discovery Specification v0.91* (2026-08-26; fetched 2026-10-30) — <https://agenticresourcediscovery.org/spec/>\n15. David Soria Parra (Model Context Protocol), *SEP-2127: MCP Server Cards* (checked 2026-01-21) — <https://modelcontextprotocol.io/seps/2127-mcp-server-cards>\n16. IETF Datatracker, *RFC 9727: api-catalog: A Well-Known URI and Link Relation to Help Discovery of APIs* (Proposed Standard (June 2025); last updated 2026-05-20) — <https://datatracker.ietf.org/doc/rfc9727/>\n17. Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation* (2026-07-28) — <https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning>\n18. Agentic AI Foundation, *A2A joins AAIF's open agentic stack* (published 2026-08-17; modified 2026-09-24) — <https://aaif.io/blog/a2a-joins-aaif>\n19. Anthropic, *Anthropic AI Catalog (/.well-known/ai-catalog.json)* (checked 2026-10-29) — <https://platform.claude.com/.well-known/ai-catalog.json>\n20. GitHub, Inc., *GitHub AI Catalog (/.well-known/ai-catalog.json)* (checked 2026-10-29) — <https://github.com/.well-known/ai-catalog.json>\n21. GitHub MCP Registry, *GitHub MCP Registry AI Catalog (/.well-known/ai-catalog.json)* (checked 2026-10-29) — <https://api.mcp.github.com/.well-known/ai-catalog.json>\n22. Cloudflare, *Cloudflare Developer Documentation AI Catalog (/.well-known/ai-catalog.json)* (checked 2026-10-29) — <https://developers.cloudflare.com/.well-known/ai-catalog.json>\n23. Hugging Face, *Hugging Face AI Catalog (/.well-known/ai-catalog.json)* (checked 2026-10-29) — <https://huggingface.co/.well-known/ai-catalog.json>\n24. Vercel, *Vercel AI Catalog (/.well-known/ai-catalog.json)* (checked 2026-10-29) — <https://vercel.com/.well-known/ai-catalog.json>\n25. AgentAvow, *AgentAvow AI Catalog (/.well-known/ai-catalog.json)* (checked 2026-10-29) — <https://agentavow.com/.well-known/ai-catalog.json>\n26. Resend, *Resend AI Catalog (/.well-known/ai-catalog.json)* (checked 2026-10-29) — <https://resend.com/.well-known/ai-catalog.json>\n27. Diel Duarte (Resend), *Support for AI Catalog and MCP Server Card* (checked 2026-10-26) — <https://resend.com/changelog/ai-catalog-mcp-server-card>\n28. Cisco Outshift, *AGNTCY Directory AI Catalog (/.well-known/ai-catalog.json)* (checked 2026-10-29) — <https://ai-catalog.outshift.io/.well-known/ai-catalog.json>\n29. Agent Card Working Group, *Agent Card Working Group — README.md (Agent-Card/awesome-ai-catalogs)* (checked 2026-10-29) — <https://raw.githubusercontent.com/Agent-Card/awesome-ai-catalogs/main/README.md>\n30. Agent Card Working Group, *awesome-ai-catalogs/ai-catalog.json* (checked 2026-10-29) — <https://agent-card.github.io/awesome-ai-catalogs/ai-catalog.json>\n31. Agent Card Working Group, *Agent Card Working Group — README.md (Agent-Card/ai-catalog-rust)* (checked 2026-10-29) — <https://raw.githubusercontent.com/Agent-Card/ai-catalog-rust/main/README.md>\n32. Agent Card Working Group, *Agent Card Working Group — README.md (Agent-Card/ai-catalog-cli)* (checked 2026-10-29) — <https://raw.githubusercontent.com/Agent-Card/ai-catalog-cli/main/README.md>\n33. Google Chrome, *Google Chrome Lighthouse* (checked 2026-09-18) — <https://github.com/GoogleChrome/lighthouse/releases/tag/v13.5.0>\n34. Google Chrome, *Google Chrome Lighthouse* (checked 2026-09-22) — <https://github.com/GoogleChrome/lighthouse/issues/17251>\n35. Google Chrome, *GoogleChrome/lighthouse/pull/17168* (checked 2026-10-29) — <https://github.com/GoogleChrome/lighthouse/pull/17168>\n36. GitHub, Inc., *Agent Finder Catalog (github/agentfinder-catalog README)* (checked 2026-10-29) — <https://raw.githubusercontent.com/github/agentfinder-catalog/main/README.md>\n37. GitHub, Inc., *Agent Finder for GitHub Copilot Now Available — GitHub Changelog* (checked 2026-06-17) — <https://github.blog/changelog/2026-06-17-agent-finder-for-github-copilot-now-available/>\n38. SpecWorks, *AI Catalog .NET and Python Toolkit (spec-works/ai-catalog README)* (checked 2026-10-29) — <https://raw.githubusercontent.com/spec-works/ai-catalog/main/README.md>\n39. TomeVault, *AI Catalog Trust Manifest Reference Implementation (tomevault-io/ai-catalog-reference README)* (checked 2026-10-29) — <https://raw.githubusercontent.com/tomevault-io/ai-catalog-reference/main/README.md>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "DNS-AID",
   "adoption": {
    "level": "observed",
    "by": "dns-aid reference implementation (dns-aid/dns-aid-core, PyPI dns-aid 0.28.1) and DNS-AID Looking Glass (dns-aid.org)",
    "probe_run": null
   },
   "aliases": [
    "DNS for AI Discovery",
    "draft-mozleywilliams-dnsop-dnsaid"
   ],
   "analog": "DNS-based Service Discovery (DNS-SD) for agents",
   "collisions": [
    "AID (Agent Identity and Discovery, a separate, unrelated agentcommunity.org spec that also does DNS-first discovery)"
   ],
   "discovery": {
    "mechanism": "DNS SVCB records at the agent's owner name; DNS-SD-style well-known labels _agents/_index for an organization index; optional TXT fallback and DNSSEC/DANE TLSA for trust",
    "path": "Agent owner names (SVCB), plus the organisation index at `_index._agents.<domain>`: \"An SVCB record type query for _index._agents.example.com returns a pointer to an organization-specific registry of all agents.\""
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.ietf.org/archive/id/draft-mozleywilliams-dawn-dnsaid-00.txt",
     "claim": "J. Mozley and N. Williams (Infoblox, Inc.), B. Sarikaya (Unaffiliated), R. Schott (Deutsche Telekom), J. Damick (Amazon), and S. Courtney (GoDaddy), *DNS for AI Discovery (draft-mozleywilliams-dawn-dnsaid-00)*, 2 November 2026",
     "date": null,
     "quote": "This document specifies DNS for AI Discovery (DNS-AID), a method for publishing AI agents in the Domain Name System (DNS) so that other agents can discover them. / Intended status: Standards Track Infoblox, Inc. Expires: 6 May 2027 B. Sarikaya Unaffiliated R. Schott Deutsche Telekom J. Damick Amazon S. Courtney GoDaddy 2 November 2026 DNS for AI Discovery draft-mozleywilliams-dawn-dnsaid-00 / This gives agents direct connections that no third party mediates and works the same way on public and private networks. / A single SVCB record type query for agent-name.example.com returns IP addresses, transport, agent protocol, and descriptor metadata. / A TLSA record type query authenticates the TLS endpoint, although implementations may use other mechanisms. ... This is the form publishers SHOULD support and the form requestors MUST try first. / This Internet-Draft will expire on 6 May 2027. / Jim Mozley Infoblox, Inc. ... Nic Williams Infoblox, Inc. ... Behcet Sarikaya Unaffiliated ... Roland Schott Deutsche Telekom ... Jeff Damick Amazon ... Scott Courtney GoDaddy / Status information for this document may be found at https://datatracker.ietf.org/doc/draft-mozleywilliams- dawn-dnsaid/. / Intended status: Standards Track / Intended status: Standards Track ... Expires: 6 May 2027 ... 2 November 2026 DNS for AI Discovery draft-mozleywilliams-dawn-dnsaid-00 / 2 November 2026 DNS for AI Discovery draft-mozleywilliams-dawn-dnsaid-00 / DNS-AID uses Service Binding (SVCB) records, optionally with DNS-Based Service Discovery (DNS-SD) labels, DNSSEC, and DANE TLSA records. / SVCB | _agents | this document ... SVCB | _index | this document ... TXT | _agents-challenge | this document / This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79. / Intended status: Standards Track                          Infoblox, Inc.\nExpires: 6 May 2027 ... 2 November 2026 DNS for AI Discovery draft-mozleywilliams-dawn-dnsaid-00 / Discovery can be initiated based on one of three use cases, where they are ranked in ascending order of latency and computational power required to complete: / In the known-capability case, the requestor knows only the required capability and must rely on an external directory or search service. / No new resource record types, opcodes, or response codes are introduced. / This document addresses the known-agent and known-organization cases. / The known-capability case is out of scope, but search and cataloging services can be built from the organizational index defined here. / DNS-AID is deployable without DNSSEC, but the authenticity guarantees it offers depend on a validated path from the root to the zone of interest. / This section discusses the security properties of DNS-AID itself; the security of the agent protocols in agent-to-agent communication is out of scope.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://aid.agentcommunity.org/docs/specification",
     "claim": "Agent Community (Open Agent Registry, Inc.), *Agent Identity & Discovery (AID) - v2.1.1 Specification*, 2026-10-02 (fetched 2026-10-30)",
     "date": null,
     "quote": "Specification | Agent Identity & Discovery / Specification | Agent Identity & Discovery {\"@context\":\"https://schema.org\",\"@type\":\"Organization\",\"name\":\"Open Agent Registry,",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://datatracker.ietf.org/doc/draft-mozleywilliams-dnsop-dnsaid/history/",
     "claim": "IETF Datatracker, *draft-mozleywilliams-dnsop-dnsaid — DNS for AI Discovery (IETF Datatracker)*, checked 2026-10-29",
     "date": null,
     "quote": "draft-mozleywilliams-dnsop-dnsaid-02 (2026-05-27)",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://raw.githubusercontent.com/dns-aid/dns-aid-core/main/README.md",
     "claim": "dns-aid/dns-aid-core, *DNS-AID Core Reference Implementation (dns-aid/dns-aid-core README)*, checked 2026-10-29",
     "date": null,
     "quote": "DNS-based Agent Identification and Discovery Reference Implementation / pip install \"dns-aid[cli,mcp] @ git+https://github.com/dns-aid/dns-aid-core.git\" / https://_index._aiagents.{domain}/index-wellknown (ANS-style) 3. https://{domain}/.well-known/agents-index.json (well-known path) Capability Document endpoint (v0.4.8+): / !License(LICENSE) / !License(LICENSE) !Python(https://www.python.org/) !PyPI(https://pypi.org/project/dns-aid/) DNS-based Agent Identification and Discovery Reference implementation for IETF draft-mozleywilliams-dnsop-dnsaid-02.",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://pypi.org/pypi/dns-aid/0.28.1/json",
     "claim": "PyPI JSON API, *dns-aid 0.28.1 — PyPI Package Metadata*, checked 2026-10-29",
     "date": null,
     "quote": "\"version\":\"0.28.1\" / URLs.\\n\\n## Relationship to IETF\\n\\nThe DNS-AID specification is being developed within the IETF: https://datatracker.ietf.org/doc/draft-mozleywilliams-dnsop-dnsaid/.\\n\\nThis repository / \"upload_time_iso_8601\":\"2026-08-09T07:25:30.682734Z\"",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://www.dns-aid.org/",
     "claim": "Infoblox, with Deutsche Telekom and Amazon co-authors, *DNS-AID - AI Agent Discovery via DNS*, fetched 2026-10-30",
     "date": null,
     "quote": "DNS-AID",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://www.rfc-editor.org/rfc/rfc9460.html",
     "claim": "IETF, *RFC 9460: Service Binding and Parameter Specification via the DNS (SVCB and HTTPS Resource Records)*, IETF RFC",
     "date": null,
     "quote": "This document specifies the \"SVCB\" (\"Service Binding\") and \"HTTPS\" DNS resource record (RR)",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://www.rfc-editor.org/rfc/rfc6763.html",
     "claim": "IETF, *RFC 6763: DNS-Based Service Discovery*, IETF RFC",
     "date": null,
     "quote": "This document specifies how DNS resource records are named and",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://datatracker.ietf.org/doc/draft-pro-adp-agent-discovery/",
     "claim": "Bin Lian (aipair.ai) and IETF Datatracker, *draft-pro-adp-agent-discovery — Agent Discovery Protocol (ADP) v1.1 -- Well-Known Metadata and Interaction Layer (IETF Datatracker)*, checked 2026-10-30",
     "date": null,
     "quote": "Search email archive draft-pro-adp-agent-discovery-02 ``` Abstract Status of This MemoLian Expires 20 December 2026",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://agenticresourcediscovery.org/spec/",
     "claim": "Agentic Resource Discovery Project (ards-project), *Agentic Resource Discovery Specification v0.91*, 2026-08-26; fetched 2026-10-30",
     "date": null,
     "quote": "Version: v0.91 Status: Proposal Date: August 26, 2026",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://datatracker.ietf.org/doc/draft-narajala-courtney-ansv2/",
     "claim": "Scott Courtney, Vineeth Sai Narajala, Ken Huang, Idan Habler, and Akram Sheriff, *draft-narajala-courtney-ansv2 — Agent Name Service v2 (ANS): A Domain-Anchored Identity Layer for Autonomous AI Agents (IETF Datatracker; HTML overview snapshot at -01 'Trust Layer')*, draft-narajala-courtney-ansv2-02 posted 2026-10-26 (HTML overview snapshot 2026-10-15)",
     "date": null,
     "quote": "Document Type Active Internet-Draft (individual) Authors Scott Courtney, Vineeth Sai Narajala, Ken Huang, Idan Habler, Akram Sheriff Last updated 2026-10-26 Replaces draft-narajala-ans RFC stream (None) Intended RFC status (None)",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://datatracker.ietf.org/doc/html/draft-morrison-mcp-dns-discovery-09",
     "claim": "B. Morrison (Alter Meridian Pty Ltd), *Discovery of Model Context Protocol Servers via DNS TXT Records (draft-morrison-mcp-dns-discovery-09 HTML)*, checked 2026-10-31",
     "date": null,
     "quote": "Morrison Expires 24 April 2027 [Page 25] Internet-Draft MCP DNS Discovery October 2026 6.3.12.",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://www.dns-aid.org/looking-glass/",
     "claim": "DNS-AID project site, *Looking Glass*, checked 2026-10-29",
     "date": null,
     "quote": "how fast? Try a known‑good zone: ai.infoblox.com Copyright © DNS-AID a Series of LF",
     "ref": 13
    }
   ],
   "form": "dns-record",
   "governance": "Individual IETF Internet-Draft with no working-group stream: \"Stream state (No stream defined)\"; \"This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process.\" The open-source project is hosted by the Linux Foundation: \"Copyright © DNS-AID a Series of LF Projects, LLC\"",
   "group": null,
   "hatnote_md": "*This page is about DNS for AI Discovery (DNS-AID), the Internet-Draft `draft-mozleywilliams-dawn-dnsaid-00` (which replaced `draft-mozleywilliams-dnsop-dnsaid-02`), which publishes AI agents in SVCB records and uses `_index._agents.<domain>` as an entry point to an organization's agent index. It is not [Agent Identity and Discovery (AID)](/protocols/aid/), a separate specification with different authors that uses a single TXT record at `_agent.<domain>` (see [AID vs DNS-AID](/compare/aid-vs-dns-aid/)). It is not [MCP DNS discovery](/protocols/mcp-dns-discovery/) (draft-morrison-mcp-dns-discovery), which defines TXT records at `_mcp.<domain>` for MCP servers. And it is not [A2A](/protocols/a2a/) Agent Card discovery, which is a JSON file served over HTTPS at `/.well-known/agent-card.json`; a DNS-AID record can point to that file, but does not replace it.*",
   "history": [
    {
     "date": "2026-10-29",
     "note": "Primary-source verification sweep across 19 primary IETF drafts, DoH census queries, reference implementation repositories, and vendor press sources."
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "dns-aid",
   "implementation": "prototype",
   "last_verified": "2026-11-12",
   "name": "DNS-AID (DNS for AI Discovery)",
   "native_status": "Active individual Internet-Draft (Intended Status: Standards Track); replaces draft-mozleywilliams-dnsop-dnsaid-02",
   "origin": {
    "date": "2026-05-27",
    "org": "Infoblox, with Deutsche Telekom and Amazon co-authors"
   },
   "part_of": null,
   "parties": [
    "agent-site",
    "agent-agent"
   ],
   "phase": "draft",
   "probe": {
    "method": "DNS",
    "on_absent": "Domain publishes no DNS-AID SVCB records; DNS-AID cannot be used to bootstrap discovery for this domain",
    "parse": "SVCB RRset present with alpn/well-known/cap SvcParamKeys; absence of TargetName error and presence of at least one SvcParamKey confirms an agent record",
    "path": "SVCB query for _index._agents.{domain}, then SVCB query for the target agent owner name it returns"
   },
   "question": "Given a domain, where is its agent endpoint, what protocol does it speak, and how can that be verified via DNSSEC/DANE?",
   "scope": "general",
   "spec_url": "https://www.ietf.org/archive/id/draft-mozleywilliams-dawn-dnsaid-00.txt",
   "step": "discover",
   "summary_md": "**DNS for AI Discovery** (**DNS-AID**, `draft-mozleywilliams-dawn-dnsaid-00`) is a Standards Track IETF Internet-Draft by Jim Mozley and Nic Williams (Infoblox), Behcet Sarikaya, Roland Schott (Deutsche Telekom), Jeff Damick (Amazon), and Scott Courtney (GoDaddy) that specifies how organizations publish AI agents in the Domain Name System so other agents can discover them without a mediating third-party directory. In the primary known-agent flow (which publishers SHOULD support and requestors MUST try first), a single `SVCB` query for `agent-name.example.com` returns IP addresses, transport, agent protocol, and descriptor metadata, paired with an optional DANE `TLSA` query to authenticate the TLS endpoint. Published on 2 November 2026 (expiring 6 May 2027), `draft-mozleywilliams-dawn-dnsaid-00` re-homes and replaces `draft-mozleywilliams-dnsop-dnsaid-02` (`2026-05-27`) ahead of the `DAWN` BoF.",
   "track": "ietf",
   "version": {
    "date": "2026-05-27",
    "label": "-02"
   },
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-mozleywilliams-dnsop-dnsaid"
    }
   ],
   "use_cases": [
    "discover-my-api",
    "describe-agent-capabilities",
    "agent-naming"
   ],
   "audience": [
    "platform",
    "agent-builder",
    "standards-body"
   ],
   "pairs_with": [
    "aid",
    "adp",
    "ard",
    "ans",
    "mcp-dns-discovery"
   ],
   "prerequisites": [],
   "ietf_tracker": {
    "doc": "draft-mozleywilliams-dawn-dnsaid",
    "rev": "00",
    "state": "active",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-11-02",
    "expires_utc": "2027-05-06",
    "as_of": "2026-11-07",
    "source": "https://datatracker.ietf.org/doc/draft-mozleywilliams-dawn-dnsaid/",
    "source_label": "per IETF Datatracker"
   },
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "web_discovery",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "This page is about DNS for AI Discovery (DNS-AID), the Internet-Draft `draft-mozleywilliams-dawn-dnsaid-00` (which replaced `draft-mozleywilliams-dnsop-dnsaid-02`), which publishes AI agents in SVCB records and uses `_index._agents.<domain>` as an entry point to an organization's agent index. It is not [Agent Identity and Discovery (AID)](/protocols/aid/), a separate specification with different authors that uses a single TXT record at `_agent.<domain>` (see [AID vs DNS-AID](/compare/aid-vs-dns-aid/)). It is not [MCP DNS discovery](/protocols/mcp-dns-discovery/) (draft-morrison-mcp-dns-discovery), which defines TXT records at `_mcp.<domain>` for MCP servers. And it is not [A2A](/protocols/a2a/) Agent Card discovery, which is a JSON file served over HTTPS at `/.well-known/agent-card.json`; a DNS-AID record can point to that file, but does not replace it. [1][2]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**DNS for AI Discovery** (**DNS-AID**, `draft-mozleywilliams-dawn-dnsaid-00`) is a Standards Track IETF Internet-Draft by Jim Mozley and Nic Williams (Infoblox), Behcet Sarikaya, Roland Schott (Deutsche Telekom), Jeff Damick (Amazon), and Scott Courtney (GoDaddy) that specifies how organizations publish AI agents in the Domain Name System so other agents can discover them without a mediating third-party directory. [1] In the primary known-agent flow (which publishers SHOULD support and requestors MUST try first), a single `SVCB` query for `agent-name.example.com` returns IP addresses, transport, agent protocol, and descriptor metadata, paired with an optional DANE `TLSA` query to authenticate the TLS endpoint. [1] Published on 2 November 2026 (expiring 6 May 2027), `draft-mozleywilliams-dawn-dnsaid-00` re-homes and replaces `draft-mozleywilliams-dnsop-dnsaid-02` (`2026-05-27`) ahead of the `DAWN` BoF. [1][3]",
   "v05_identity_sentence_md": "**DNS for AI Discovery** (**DNS-AID**, `draft-mozleywilliams-dawn-dnsaid-00`) is a Standards Track IETF Internet-Draft by Jim Mozley and Nic Williams (Infoblox), Behcet Sarikaya, Roland Schott (Deutsche Telekom), Jeff Damick (Amazon), and Scott Courtney (GoDaddy) that specifies how organizations publish AI agents in the Domain Name System so other agents can discover them without a mediating third-party directory. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Discover](/category/discover/) (`discover`)"
    },
    {
     "label": "Form",
     "value_md": "DNS record (`dns-record`)"
    },
    {
     "label": "Originated by",
     "value_md": "Jim Mozley and Nic Williams (Infoblox, Inc.), Behcet Sarikaya (Unaffiliated), Roland Schott (Deutsche Telekom), Jeff Damick (Amazon), and Scott Courtney (GoDaddy, added in `draft-mozleywilliams-dawn-dnsaid-00`) [1]"
    },
    {
     "label": "Governed by",
     "value_md": "Individual IETF Internet-Draft with no working-group stream; open-source reference implementation hosted by The Linux Foundation (`DNS-AID a Series of LF Projects, LLC`) [1][4]"
    },
    {
     "label": "Track",
     "value_md": "Individual IETF Internet-Draft (Standards Track) with Linux Foundation reference implementation (`DNS-AID`) [1][4]"
    },
    {
     "label": "Status",
     "value_md": "Active individual Internet-Draft (Intended Status: Standards Track); replaces `draft-mozleywilliams-dnsop-dnsaid-02` [1][3]"
    },
    {
     "label": "Version",
     "value_md": "`draft-mozleywilliams-dawn-dnsaid-00` (`2 November 2026`, expires `6 May 2027`; replaces `draft-mozleywilliams-dnsop-dnsaid-02` of `2026-05-27`); `dns-aid-core` `v0.28.1` (`2026-08-09`) [1][3][5]"
    },
    {
     "label": "Wire format",
     "value_md": "DNS `SVCB` resource records (RFC 9460 ServiceMode and AliasMode), optional `TXT` fallback, optional ANS/ARD HTTP index JSON, and DNSSEC + DANE `TLSA` records [1]"
    },
    {
     "label": "Specification",
     "value_md": "[draft-mozleywilliams-dawn-dnsaid-00.txt](https://www.ietf.org/archive/id/draft-mozleywilliams-dawn-dnsaid-00.txt) · [IETF Datatracker](https://datatracker.ietf.org/doc/draft-mozleywilliams-dawn-dnsaid/) · [DNS-AID Project Site](https://www.dns-aid.org/) · [dns-aid-core Reference Implementation](https://github.com/dns-aid/dns-aid-core) [1][4][6]"
    },
    {
     "label": "Found at",
     "value_md": "Direct agent owner names (`SVCB`), DNS-SD index at `_index._agents.<domain>`, experimental challenge at `_agents-challenge.<domain>`, and `dns-aid-core` implementation conventions (`_catalog._agents.<domain>`, `https://_index._aiagents.<domain>/index-wellknown`, `/.well-known/agents-index.json`) [1][4]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust BCP 78 / BCP 79 (`draft-mozleywilliams-dawn-dnsaid-00`); `dns-aid-core` reference implementation under Apache-2.0 [1][4]"
    },
    {
     "label": "IETF state",
     "value_md": "`draft-mozleywilliams-dawn-dnsaid-00` · Active Internet-Draft · Individual submission [1]"
    }
   ],
   "v05_problem_md": "Discovery can be initiated based on one of three use cases, where they are ranked in ascending order of latency and computational power required to complete. [1] In the known-capability case, the requestor knows only the required capability and must rely on an external directory or search service. [1] No new resource record types, opcodes, or response codes are introduced. [1] DNS-AID uses Service Binding (SVCB) records, optionally with DNS-Based Service Discovery (DNS-SD) labels, DNSSEC, and DANE TLSA records. [1] This document addresses the known-agent and known-organization cases. [1] The known-capability case is out of scope, but search and cataloging services can be built from the organizational index defined here. [1] DNS-AID is deployable without DNSSEC, but the authenticity guarantees it offers depend on a validated path from the root to the zone of interest. [1] This section discusses the security properties of DNS-AID itself; the security of the agent protocols in agent-to-agent communication is out of scope. [1]",
   "v05_mechanism_delta_md": "No new resource record types, opcodes, or response codes are introduced. [1] DNS-AID uses Service Binding (SVCB) records, optionally with DNS-Based Service Discovery (DNS-SD) labels, DNSSEC, and DANE TLSA records. [1]",
   "v05_scope_boundary_md": "This document addresses the known-agent and known-organization cases. [1] The known-capability case is out of scope, but search and cataloging services can be built from the organizational index defined here. [1] DNS-AID is deployable without DNSSEC, but the authenticity guarantees it offers depend on a validated path from the root to the zone of interest. [1] This section discusses the security properties of DNS-AID itself; the security of the agent protocols in agent-to-agent communication is out of scope. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "DNS SRV & SVCB Records (RFC 2782 / RFC 9460)",
      "spec_or_rfc": "RFC 2782 / RFC 9460",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "DNS-AID publishes each agent as an SVCB owner name and the organization index at `_index._agents.<domain>`, requests underscored node names _agents, _index, and _agents-challenge from IANA, and delegates SvcParamKey registrations to draft-blwm-dawn-common-discovery-parameters and draft-mk-dnsop-svcb-well-known. [1][7]"
     },
     {
      "name": "DNS-Based Service Discovery (RFC 6763)",
      "spec_or_rfc": "RFC 6763",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "DNS-AID uses DNS-SD-style underscored labels such as `_index._agents.<domain>` but answers them with SVCB, with TXT only as a fallback, whereas RFC 6763 discovers services with PTR records that point at SRV and TXT records. [1][8]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "aid",
      "target_name": "Agent Identity & Discovery (AID)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "DNS-AID uses SVCB and `_index._agents.<domain>`, with TXT only as a fallback, while AID uses a TXT record at the exact name `_agent.<domain>`, forbids walking to parent zones, and may fall back to /.well-known/agent. [1][2]"
     },
     {
      "target_id": "adp",
      "target_name": "Agent Discovery Protocol (ADP) v1.1",
      "relation_type": "depended_on_by",
      "relation_label": "Depended on by",
      "delta_md": "DNS-AID returns SVCB discovery records, including the index at `_index._agents.<domain>`, and ADP depends on that discovery before it serves /.well-known/agent.json. [1][9]"
     },
     {
      "target_id": "ard",
      "target_name": "Agentic Resource Discovery (ARD)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "DNS-AID's answer is the SVCB record, while ARD clients must still GET /.well-known/ard.json even when an SVCB hint exists. [1][10]"
     },
     {
      "target_id": "ans",
      "target_name": "Agent Name Service v2 (ANS)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "DNS-AID answers from the DNS zone with SVCB records; ANS v2 adopts DNS-AID SVCB records as its default discovery format (with an opt-in _ans TXT profile and _ans-badge TXT record) and layers X.509 server (and optional identity) certificates plus a SCITT-modeled Merkle transparency log. [1][11]"
     },
     {
      "target_id": "mcp-dns-discovery",
      "target_name": "Discovery of Model Context Protocol Servers via DNS TXT Records",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "DNS-AID indexes agents with SVCB at `_index._agents.<domain>`, while MCP DNS discovery uses DNS TXT records at `_mcp.<domain>` for MCP server endpoints. [1][12]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (2 probed or cited examples; non-exhaustive).",
    "side_a": null,
    "side_b": {
     "visible": true,
     "heading": "Bot, client & tool support",
     "col4_header": "Behavior / Provisioning",
     "note_md": null,
     "rows": [
      {
       "actor": "dns-aid reference implementation (dns-aid/dns-aid-core, PyPI dns-aid 0.28.1)",
       "role": "Resolver / Client SDK",
       "status": "Supported",
       "status_display": "Supported · as of 2026-08-09",
       "col4_md": "Supported (-02 draft) · v0.28.1 (2026-08-09). Python SDK, CLI `discover` command, and MCP server; README states that v0.28.1 is the reference implementation for predecessor draft-mozleywilliams-dnsop-dnsaid-02 (using -02 parameter names such as cap and bap rather than draft-mozleywilliams-dawn-dnsaid-00's proto and desc-ref). PyPI 0.28.1 uploaded 2026-08-09.",
       "source_md": "[dns-aid-core README (checked 2026-10-29)](https://raw.githubusercontent.com/dns-aid/dns-aid-core/main/README.md) [4] · [PyPI dns-aid 0.28.1](https://pypi.org/pypi/dns-aid/0.28.1/json) [5]"
      },
      {
       "actor": "DNS-AID Looking Glass (dns-aid.org)",
       "role": "Resolver / Client SDK",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Interactive web resolver at `/looking-glass/`; the page resolves a zone the operator types and offers `ai.infoblox.com` as the known-good zone",
       "source_md": "[dns-aid.org/looking-glass (checked 2026-10-29)](https://www.dns-aid.org/looking-glass/) [13]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "api-catalog-rfc9727",
     "target_name": "api-catalog (RFC 9727)",
     "relation_label": "Complements",
     "delta": "RFC 9727 is fetched over HTTPS. DNS-AID publishes agent records as Service Binding (SVCB) DNS records. [1]",
     "item_md": "**[api-catalog (RFC 9727)](/protocols/api-catalog-rfc9727/)** (Complements) — RFC 9727 is fetched over HTTPS. DNS-AID publishes agent records as Service Binding (SVCB) DNS records. [1]"
    },
    {
     "target_id": "dan",
     "target_name": "DNS-Based Agent Naming",
     "relation_label": "Peer alternative",
     "delta": "DAN stores the organization index as an AIINDEX record (TYPE65418 in the Verisign PoC) at `_agents.<domain>`, while DNS-AID stores it as an SVCB record at `_index._agents.<domain>`. [1]",
     "item_md": "**[DNS-Based Agent Naming](/protocols/dan/)** (Peer alternative) — DAN stores the organization index as an AIINDEX record (TYPE65418 in the Verisign PoC) at `_agents.<domain>`, while DNS-AID stores it as an SVCB record at `_index._agents.<domain>`. [1]"
    },
    {
     "target_id": "gbz-185-agent-interconnection",
     "target_name": "GB/Z 185 Artificial intelligence — Agent interconnection",
     "relation_label": "Complements",
     "delta": "DNS-AID publishes agents to DNS and uses SVCB records for connectivity information. GB/Z 185 defines discovery through an agent discovery service or through preset information. [1]",
     "item_md": "**[GB/Z 185 Artificial intelligence — Agent interconnection](/protocols/gbz-185-agent-interconnection/)** (Complements) — DNS-AID publishes agents to DNS and uses SVCB records for connectivity information. GB/Z 185 defines discovery through an agent discovery service or through preset information. [1]"
    },
    {
     "target_id": "ardp",
     "target_name": "Agent Registration and Discovery Protocol",
     "relation_label": "Peer alternative",
     "delta": "ARDP advertises registrar metadata at /.well-known/ardp/meta, registers agents with REGISTER, and resolves them with RESOLVE and QUERY, while DNS-AID publishes discovery data as DNS SVCB records. [1]",
     "item_md": "**[Agent Registration and Discovery Protocol](/protocols/ardp/)** (Peer alternative) — ARDP advertises registrar metadata at /.well-known/ardp/meta, registers agents with REGISTER, and resolves them with RESOLVE and QUERY, while DNS-AID publishes discovery data as DNS SVCB records. [1]"
    },
    {
     "target_id": "dawn-agent-discovery-framework",
     "target_name": "A Framework for Agent Discovery in DAWN",
     "relation_label": "Peer alternative",
     "delta": "DAWN's Local Discovery Plane uses mDNS and DNS-SD inside a site and its Federation Plane publishes DNSSEC-validated Federation Metadata Records, while DNS-AID is a separate DNS record convention for AI discovery. [1]",
     "item_md": "**[A Framework for Agent Discovery in DAWN](/protocols/dawn-agent-discovery-framework/)** (Peer alternative) — DAWN's Local Discovery Plane uses mDNS and DNS-SD inside a site and its Federation Plane publishes DNSSEC-validated Federation Metadata Records, while DNS-AID is a separate DNS record convention for AI discovery. [1]"
    },
    {
     "item_md": "**[Discover protocols](/category/discover/)** — Category index for `discover` standards."
    }
   ],
   "v05_compiled_md": "---\nid: dns-aid\ntitle: \"DNS-AID (DNS for AI Discovery)\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: discover\nform: dns-record\nwire_archetype: web_discovery\nspec_url: https://www.ietf.org/archive/id/draft-mozleywilliams-dawn-dnsaid-00.txt\nlast_checked: 2026-11-12\n---\n\n# DNS-AID (DNS for AI Discovery)\n\n**Category:** [Discover](/category/discover/) (`discover`) · **Form:** DNS record (`dns-record`) · **Last checked:** 2026-11-12\n\n> *This page is about DNS for AI Discovery (DNS-AID), the Internet-Draft `draft-mozleywilliams-dawn-dnsaid-00` (which replaced `draft-mozleywilliams-dnsop-dnsaid-02`), which publishes AI agents in SVCB records and uses `_index._agents.<domain>` as an entry point to an organization's agent index. It is not [Agent Identity and Discovery (AID)](/protocols/aid/), a separate specification with different authors that uses a single TXT record at `_agent.<domain>` (see [AID vs DNS-AID](/compare/aid-vs-dns-aid/)). It is not [MCP DNS discovery](/protocols/mcp-dns-discovery/) (draft-morrison-mcp-dns-discovery), which defines TXT records at `_mcp.<domain>` for MCP servers. And it is not [A2A](/protocols/a2a/) Agent Card discovery, which is a JSON file served over HTTPS at `/.well-known/agent-card.json`; a DNS-AID record can point to that file, but does not replace it. [1][2]*\n\n**DNS for AI Discovery** (**DNS-AID**, `draft-mozleywilliams-dawn-dnsaid-00`) is a Standards Track IETF Internet-Draft by Jim Mozley and Nic Williams (Infoblox), Behcet Sarikaya, Roland Schott (Deutsche Telekom), Jeff Damick (Amazon), and Scott Courtney (GoDaddy) that specifies how organizations publish AI agents in the Domain Name System so other agents can discover them without a mediating third-party directory. [1] In the primary known-agent flow (which publishers SHOULD support and requestors MUST try first), a single `SVCB` query for `agent-name.example.com` returns IP addresses, transport, agent protocol, and descriptor metadata, paired with an optional DANE `TLSA` query to authenticate the TLS endpoint. [1] Published on 2 November 2026 (expiring 6 May 2027), `draft-mozleywilliams-dawn-dnsaid-00` re-homes and replaces `draft-mozleywilliams-dnsop-dnsaid-02` (`2026-05-27`) ahead of the `DAWN` BoF. [1][3]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Discover](/category/discover/) (`discover`) |\n| **Form** | DNS record (`dns-record`) |\n| **Originated by** | Jim Mozley and Nic Williams (Infoblox, Inc.), Behcet Sarikaya (Unaffiliated), Roland Schott (Deutsche Telekom), Jeff Damick (Amazon), and Scott Courtney (GoDaddy, added in `draft-mozleywilliams-dawn-dnsaid-00`) [1] |\n| **Governed by** | Individual IETF Internet-Draft with no working-group stream; open-source reference implementation hosted by The Linux Foundation (`DNS-AID a Series of LF Projects, LLC`) [1][4] |\n| **Track** | Individual IETF Internet-Draft (Standards Track) with Linux Foundation reference implementation (`DNS-AID`) [1][4] |\n| **Status** | Active individual Internet-Draft (Intended Status: Standards Track); replaces `draft-mozleywilliams-dnsop-dnsaid-02` [1][3] |\n| **Version** | `draft-mozleywilliams-dawn-dnsaid-00` (`2 November 2026`, expires `6 May 2027`; replaces `draft-mozleywilliams-dnsop-dnsaid-02` of `2026-05-27`); `dns-aid-core` `v0.28.1` (`2026-08-09`) [1][3][5] |\n| **Wire format** | DNS `SVCB` resource records (RFC 9460 ServiceMode and AliasMode), optional `TXT` fallback, optional ANS/ARD HTTP index JSON, and DNSSEC + DANE `TLSA` records [1] |\n| **Specification** | [draft-mozleywilliams-dawn-dnsaid-00.txt](https://www.ietf.org/archive/id/draft-mozleywilliams-dawn-dnsaid-00.txt) · [IETF Datatracker](https://datatracker.ietf.org/doc/draft-mozleywilliams-dawn-dnsaid/) · [DNS-AID Project Site](https://www.dns-aid.org/) · [dns-aid-core Reference Implementation](https://github.com/dns-aid/dns-aid-core) [1][4][6] |\n| **Found at** | Direct agent owner names (`SVCB`), DNS-SD index at `_index._agents.<domain>`, experimental challenge at `_agents-challenge.<domain>`, and `dns-aid-core` implementation conventions (`_catalog._agents.<domain>`, `https://_index._aiagents.<domain>/index-wellknown`, `/.well-known/agents-index.json`) [1][4] |\n| **Licence** | IETF Trust BCP 78 / BCP 79 (`draft-mozleywilliams-dawn-dnsaid-00`); `dns-aid-core` reference implementation under Apache-2.0 [1][4] |\n| **IETF state** | `draft-mozleywilliams-dawn-dnsaid-00` · Active Internet-Draft · Individual submission [1] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [Adoption and ecosystem](#adoption-and-ecosystem)\n4. [See also](#see-also)\n5. [References](#references)\n\n---\n\n## Problem and scope\n\nDiscovery can be initiated based on one of three use cases, where they are ranked in ascending order of latency and computational power required to complete. [1] In the known-capability case, the requestor knows only the required capability and must rely on an external directory or search service. [1] No new resource record types, opcodes, or response codes are introduced. [1] DNS-AID uses Service Binding (SVCB) records, optionally with DNS-Based Service Discovery (DNS-SD) labels, DNSSEC, and DANE TLSA records. [1] This document addresses the known-agent and known-organization cases. [1] The known-capability case is out of scope, but search and cataloging services can be built from the organizational index defined here. [1] DNS-AID is deployable without DNSSEC, but the authenticity guarantees it offers depend on a validated path from the root to the zone of interest. [1] This section discusses the security properties of DNS-AID itself; the security of the agent protocols in agent-to-agent communication is out of scope. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **DNS SRV & SVCB Records (RFC 2782 / RFC 9460)** | `RFC 2782 / RFC 9460` | Profiles classic standard | DNS-AID publishes each agent as an SVCB owner name and the organization index at `_index._agents.<domain>`, requests underscored node names _agents, _index, and _agents-challenge from IANA, and delegates SvcParamKey registrations to draft-blwm-dawn-common-discovery-parameters and draft-mk-dnsop-svcb-well-known. [1][7] |\n| **DNS-Based Service Discovery (RFC 6763)** | `RFC 6763` | Analogous to classic standard | DNS-AID uses DNS-SD-style underscored labels such as `_index._agents.<domain>` but answers them with SVCB, with TXT only as a fallback, whereas RFC 6763 discovers services with PTR records that point at SRV and TXT records. [1][8] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Agent Identity & Discovery (AID)](/protocols/aid/)** | Peer alternative | DNS-AID uses SVCB and `_index._agents.<domain>`, with TXT only as a fallback, while AID uses a TXT record at the exact name `_agent.<domain>`, forbids walking to parent zones, and may fall back to /.well-known/agent. [1][2] |\n| **[Agent Discovery Protocol (ADP) v1.1](/protocols/adp/)** | Depended on by | DNS-AID returns SVCB discovery records, including the index at `_index._agents.<domain>`, and ADP depends on that discovery before it serves /.well-known/agent.json. [1][9] |\n| **[Agentic Resource Discovery (ARD)](/protocols/ard/)** | Complements | DNS-AID's answer is the SVCB record, while ARD clients must still GET /.well-known/ard.json even when an SVCB hint exists. [1][10] |\n| **[Agent Name Service v2 (ANS)](/protocols/ans/)** | Complements | DNS-AID answers from the DNS zone with SVCB records; ANS v2 adopts DNS-AID SVCB records as its default discovery format (with an opt-in _ans TXT profile and _ans-badge TXT record) and layers X.509 server (and optional identity) certificates plus a SCITT-modeled Merkle transparency log. [1][11] |\n| **[Discovery of Model Context Protocol Servers via DNS TXT Records](/protocols/mcp-dns-discovery/)** | Peer alternative | DNS-AID indexes agents with SVCB at `_index._agents.<domain>`, while MCP DNS discovery uses DNS TXT records at `_mcp.<domain>` for MCP server endpoints. [1][12] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (2 probed or cited examples; non-exhaustive).*\n\n### Bot, client & tool support\n\n| Actor | Role | Status | Behavior / Provisioning | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **dns-aid reference implementation (dns-aid/dns-aid-core, PyPI dns-aid 0.28.1)** | Resolver / Client SDK | Supported · as of 2026-08-09 | Supported (-02 draft) · v0.28.1 (2026-08-09). Python SDK, CLI `discover` command, and MCP server; README states that v0.28.1 is the reference implementation for predecessor draft-mozleywilliams-dnsop-dnsaid-02 (using -02 parameter names such as cap and bap rather than draft-mozleywilliams-dawn-dnsaid-00's proto and desc-ref). PyPI 0.28.1 uploaded 2026-08-09. | [dns-aid-core README (checked 2026-10-29)](https://raw.githubusercontent.com/dns-aid/dns-aid-core/main/README.md) [4] · [PyPI dns-aid 0.28.1](https://pypi.org/pypi/dns-aid/0.28.1/json) [5] |\n| **DNS-AID Looking Glass (dns-aid.org)** | Resolver / Client SDK | Supported · checked 2026-10-30 | Interactive web resolver at `/looking-glass/`; the page resolves a zone the operator types and offers `ai.infoblox.com` as the known-good zone | [dns-aid.org/looking-glass (checked 2026-10-29)](https://www.dns-aid.org/looking-glass/) [13] |\n\n---\n\n## See also\n\n- **[api-catalog (RFC 9727)](/protocols/api-catalog-rfc9727/)** *(Complements)* — RFC 9727 is fetched over HTTPS. DNS-AID publishes agent records as Service Binding (SVCB) DNS records. [1]\n- **[DNS-Based Agent Naming](/protocols/dan/)** *(Peer alternative)* — DAN stores the organization index as an AIINDEX record (TYPE65418 in the Verisign PoC) at `_agents.<domain>`, while DNS-AID stores it as an SVCB record at `_index._agents.<domain>`. [1]\n- **[GB/Z 185 Artificial intelligence — Agent interconnection](/protocols/gbz-185-agent-interconnection/)** *(Complements)* — DNS-AID publishes agents to DNS and uses SVCB records for connectivity information. GB/Z 185 defines discovery through an agent discovery service or through preset information. [1]\n- **[Agent Registration and Discovery Protocol](/protocols/ardp/)** *(Peer alternative)* — ARDP advertises registrar metadata at /.well-known/ardp/meta, registers agents with REGISTER, and resolves them with RESOLVE and QUERY, while DNS-AID publishes discovery data as DNS SVCB records. [1]\n- **[A Framework for Agent Discovery in DAWN](/protocols/dawn-agent-discovery-framework/)** *(Peer alternative)* — DAWN's Local Discovery Plane uses mDNS and DNS-SD inside a site and its Federation Plane publishes DNSSEC-validated Federation Metadata Records, while DNS-AID is a separate DNS record convention for AI discovery. [1]\n- **Category:** [Discover protocols](/category/discover/)\n\n---\n\n## References\n\n1. J. Mozley and N. Williams (Infoblox, Inc.), B. Sarikaya (Unaffiliated), R. Schott (Deutsche Telekom), J. Damick (Amazon), and S. Courtney (GoDaddy), *DNS for AI Discovery (draft-mozleywilliams-dawn-dnsaid-00)* (2 November 2026) — <https://www.ietf.org/archive/id/draft-mozleywilliams-dawn-dnsaid-00.txt>\n2. Agent Community (Open Agent Registry, Inc.), *Agent Identity & Discovery (AID) - v2.1.1 Specification* (2026-10-02 (fetched 2026-10-30)) — <https://aid.agentcommunity.org/docs/specification>\n3. IETF Datatracker, *draft-mozleywilliams-dnsop-dnsaid — DNS for AI Discovery (IETF Datatracker)* (checked 2026-10-29) — <https://datatracker.ietf.org/doc/draft-mozleywilliams-dnsop-dnsaid/history/>\n4. dns-aid/dns-aid-core, *DNS-AID Core Reference Implementation (dns-aid/dns-aid-core README)* (checked 2026-10-29) — <https://raw.githubusercontent.com/dns-aid/dns-aid-core/main/README.md>\n5. PyPI JSON API, *dns-aid 0.28.1 — PyPI Package Metadata* (checked 2026-10-29) — <https://pypi.org/pypi/dns-aid/0.28.1/json>\n6. Infoblox, with Deutsche Telekom and Amazon co-authors, *DNS-AID - AI Agent Discovery via DNS* (fetched 2026-10-30) — <https://www.dns-aid.org/>\n7. IETF, *RFC 9460: Service Binding and Parameter Specification via the DNS (SVCB and HTTPS Resource Records)* (IETF RFC) — <https://www.rfc-editor.org/rfc/rfc9460.html>\n8. IETF, *RFC 6763: DNS-Based Service Discovery* (IETF RFC) — <https://www.rfc-editor.org/rfc/rfc6763.html>\n9. Bin Lian (aipair.ai) and IETF Datatracker, *draft-pro-adp-agent-discovery — Agent Discovery Protocol (ADP) v1.1 -- Well-Known Metadata and Interaction Layer (IETF Datatracker)* (checked 2026-10-30) — <https://datatracker.ietf.org/doc/draft-pro-adp-agent-discovery/>\n10. Agentic Resource Discovery Project (ards-project), *Agentic Resource Discovery Specification v0.91* (2026-08-26; fetched 2026-10-30) — <https://agenticresourcediscovery.org/spec/>\n11. Scott Courtney, Vineeth Sai Narajala, Ken Huang, Idan Habler, and Akram Sheriff, *draft-narajala-courtney-ansv2 — Agent Name Service v2 (ANS): A Domain-Anchored Identity Layer for Autonomous AI Agents (IETF Datatracker; HTML overview snapshot at -01 'Trust Layer')* (draft-narajala-courtney-ansv2-02 posted 2026-10-26 (HTML overview snapshot 2026-10-15)) — <https://datatracker.ietf.org/doc/draft-narajala-courtney-ansv2/>\n12. B. Morrison (Alter Meridian Pty Ltd), *Discovery of Model Context Protocol Servers via DNS TXT Records (draft-morrison-mcp-dns-discovery-09 HTML)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/html/draft-morrison-mcp-dns-discovery-09>\n13. DNS-AID project site, *Looking Glass* (checked 2026-10-29) — <https://www.dns-aid.org/looking-glass/>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "ANS",
   "hatnote_md": "This page is about the Agent Name Service in draft-narajala-courtney-ansv2, a DNS-anchored identity layer for AI agents, and the OWASP version 1 work it replaces. It is not [DNS-AID](/protocols/dns-aid/), whose SVCB records ANS reuses for discovery; not [AID](/protocols/aid/) or [ARD](/protocols/ard/), which GoDaddy names as separate discovery options; and not the unrelated \"ANS\" naming layer of the AGTP drafts. A companion draft proposes an IANA registry for ANS protocol identifiers.",
   "adoption": {
    "level": "observed",
    "by": "GoDaddy Agent Identity, helpagent.club registrants, concise.koopman.me, drone-research-agent.dronecraft.co and bookagent.cloud, Salesforce MuleSoft Agent Fabric, agentnameservice verifier, AGNTCY Agent Directory Service, and ANS Finder",
    "probe_run": null
   },
   "aliases": [],
   "analog": "DNS/DNSSEC name plus certificate transparency log",
   "collisions": [],
   "discovery": {
    "mechanism": "DNS at the agent host (_ans-badge TXT record; default ANS_DNSAID SVCB or opt-in ANS_TXT _ans TXT plus HTTPS record; optional DANE TLSA) and append-only C2SP transparency log at transparency.ans.godaddy.com",
    "path": "_ans-badge.{agentHost} TXT / _ans.{agentHost} TXT / transparency.ans.godaddy.com"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://datatracker.ietf.org/doc/draft-narajala-courtney-ansv2/",
     "claim": "Scott Courtney, Vineeth Sai Narajala, Ken Huang, Idan Habler, and Akram Sheriff, *draft-narajala-courtney-ansv2 — Agent Name Service v2 (ANS): A Domain-Anchored Identity Layer for Autonomous AI Agents (IETF Datatracker)*, checked 2026-10-30",
     "date": null,
     "quote": "Agent Name Service v2 (ANS): A Domain-Anchored Identity Layer for Autonomous AI Agents draft-narajala-courtney-ansv2-02 / This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. Document Type Active Internet-Draft (individual) Authors Scott Courtney, Vineeth Sai Narajala, Ken Huang, Idan Habler, Akram Sheriff Last updated 2026-10-26 Replaces draft-narajala-ans RFC stream (None) Intended RFC status (None) / 2026-10-26 | 02 | Vineeth Sai Narajala | Uploaded new revision | | 2026-10-15 | 01 | (System) | Document has expired | | 2026-04-15 | 01 | Morgan Condie | This document now replaces draft-narajala-ans instead of None / Document Type Active Internet-Draft (individual) Authors Scott Courtney, Vineeth Sai Narajala, Ken Huang, Idan Habler, Akram Sheriff Last updated 2026-10-26 Replaces draft-narajala-ans RFC stream (None) Intended RFC status (None) / Intended status: Informational",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://www.ietf.org/archive/id/draft-narajala-courtney-ansv2-02.txt",
     "claim": "S. Courtney (GoDaddy), V. S. Narajala (OWASP), K. Huang (DistributedApps.ai), I. Habler (OWASP), and A. Sheriff (Cisco Systems), *Agent Name Service v2 (ANS): A Domain-Anchored Identity Layer for Autonomous AI Agents (draft-narajala-courtney-ansv2-02)*, checked 2026-10-30",
     "date": null,
     "quote": "draft-narajala-courtney-ansv2-02 ... This document specifies the architecture of Agent Name Service version 2 (ANS v2), an identity layer, anchored in DNS domains, that binds an agent endpoint to its domain holder, its release, and its history. / Intended status: Informational ... This Internet-Draft will expire on 29 April 2027. / Badge record: A TXT record at \"_ans-badge.{agentHost}\" with the value \"v=ans-badge1; version=v{version}; url={badgeURL}\", where badgeURL is the TL's public record for the registration. / A verifier reads the DNS records, certificates, and TL records and decides for itself. / ANS began as the Agent Name Service specification by Huang, Narajala, Habler, and Sheriff [ANSv1], which Vineeth Narajala brought to the IETF as [I-D.narajala-ans]. [I-D.narajala-courtney-ansv2] then specified ANS v2. / Changes from draft-narajala-courtney-ansv2-01 ... Retitled from \"Trust Layer\" to \"Identity Layer\": ANS identifies an agent; whether to trust it is the relying party's decision, which a separate scoring service can inform. / Adopted DNS-AID SVCB records as the default discovery format; the \"_ans\" TXT format is now an opt-in profile. / Addresses Scott Courtney GoDaddy Email: [email redacted] Vineeth Sai Narajala OWASP Email: vineeth.sai@owasp.org Ken Huang / The ANS project develops the ANS-0 through ANS-6 specifications, the reference registry, transparency log, verifier, JSON Schemas, SDKs, and CLI as open source at https://github.com/agentnameservice. / The ANS project develops the ANS-0 through ANS-6 specifications, the reference registry / through the \"_ans-badge\" DNS record. Receipt: A COSE_Sign1 [RFC9052] object, signed by the TL, / without a matching badge record. DANE record (optional): A TLSA record at \"_{port}._tcp.{agentHost}\" for / draft-narajala-ans-00, May 2025,. I-D.narajala-courtney-ansv2 Courtney, S., Narajala, V. S., Huang, K., Habler, I., and / A relying party has no interoperable way to bind a discoverable agent endpoint to the holder of its domain (optionally verified as a legal entity), a specific software release, and an auditable issuance history. / A TLS server certificate names the hostname, which answers part of the first question. No interoperable record names the release running at the endpoint or its history. / ANS v2 composes systems the Internet already runs (the DNS with DNSSEC; the Web PKI, with DANE where operators publish it; and an append-only transparency log) and introduces no new root of trust. / This document does not define the wire format of discovery records (DNS-AID does), or the application protocols agents speak (MCP, A2A, and others). / ANS tells a verifier who an agent is; whether to trust or transact with that agent is the verifier's own decision, which a separate scoring service that reads ANS records can inform. / ANS-3 requires the discovery and trust records to sit in public DNS zones that any third party can query; a private zone or proprietary lookup channel does not conform. / Beyond its opt-in TXT discovery format, ANS defines one DNS record of its own, the \"_ans-badge\" TXT record.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://datatracker.ietf.org/api/v1/doc/document/draft-narajala-courtney-ansv2/?format=json",
     "claim": "IETF Datatracker API, *IETF Datatracker document record for draft-narajala-courtney-ansv2*, fetched 2026-10-30",
     "date": null,
     "quote": "\"expires\": \"2027-04-29T14:58:32Z\" ... \"name\": \"draft-narajala-courtney-ansv2\" ... \"rev\": \"02\" ... \"time\": \"2026-10-26T14:58:32Z\" / \"expires\": \"2027-04-29T14:58:32Z\", \"external_url\": \"\", \"group\": \"/api/v1/group/group/1027/\", \"id\": 156173, \"intended_std_level\": null, \"keywords\": \"[]\", \"name\": \"draft-narajala-courtney-ansv2\",",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://www.ietf.org/archive/id/draft-narajala-ans-00.txt",
     "claim": "K. Huang (DistributedApps.ai), V. S. Narajala (AWS), I. Habler (Intuit), and A. Sheriff (Cisco Systems), *Agent Name Service (ANS): A Universal Directory for Secure AI Agent Discovery and Interoperability (draft-narajala-ans-00)*, checked 2026-10-30",
     "date": null,
     "quote": "May 2025 Email: idan\\[email redacted] Akram Sheriff Cisco Systems Email: [email redacted] Huang, et al. Expires / ANS provides a protocol-agnostic registry mechanism that leverages Public Key Infrastructure (PKI) certificates for verifiable agent identity and trust.",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://github.com/agentnameservice",
     "claim": "orgs/agentnameservice (GitHub), *agentnameservice — GitHub Organization API*, checked 2026-10-30",
     "date": null,
     "quote": "true, \"public_repos\": 13, \"public_gists\": 0, \"followers\": 53, \"following\": 0, \"html_url\": \"https://github.com/agentnameservice\", \"created_at\": \"2026-05-08T15:58:46Z\", \"updated_at\":",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://www.linuxfoundation.org/press/linux-foundation-welcomes-agent-name-service-to-bring-verifiable-identity-and-discovery-to-ai-agents",
     "claim": "The Linux Foundation, *Linux Foundation Welcomes Agent Name Service to Bring Verifiable Identity and Discovery to AI Agents*, published 10 November 2026; fetched 2026-11-11",
     "date": null,
     "quote": "SALT LAKE CITY – KubeCon + CloudNativeCon North America – Nov. 10, 2026 – The Linux Foundation, the nonprofit organization enabling mass innovation through open source, today announced that Agent Name Service (ANS), an open standard built on Domain Name System (DNS) infrastructure that provides trusted identity, verification, and discovery for AI agents operating across the internet, has launched as a Linux Foundation project. / The specification is now formalized and will be governed by the project’s technical steering committee under the Linux Foundation. / Nov. 10, 2026 / The specification is now formalized and will be governed by the project’s technical steering / Since ANS’s intent to launch in June, 11 organizations have contributed to or adopted the standard, including Cisco, Cloudflare, DigiCert, DistributedApps.ai, GoDaddy, HOL, Infoblox, Radix, Salesforce, OWASP and Trustmodel.ai. / The AGNTCY Agent Directory Service, another Linux Foundation project, supports verification of ANS identities. / ANS Finder implements the Agentic Resource Discovery (ARD) specification and passes its registry conformance tests",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://datatracker.ietf.org/api/v1/doc/newrevisiondocevent/?doc__name=draft-narajala-courtney-ansv2&format=json&limit=50",
     "claim": "IETF Datatracker API, *Revision events for draft-narajala-courtney-ansv2 (IETF Datatracker API)*, checked 2026-10-29",
     "date": null,
     "quote": "\"rev\": \"02\", \"time\": \"2026-10-26T14:58:32Z\", \"type\": \"new_revision\"}, {\"by\": \"/api/v1/person/person/153368/\", \"desc\": \"New version available: draft-narajala-courtney-ansv2-01.txt\", \"doc\":",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://www.ietf.org/archive/id/draft-narajala-courtney-ansv2-01.txt",
     "claim": "S. Courtney (GoDaddy), V. S. Narajala (OWASP), K. Huang (DistributedApps.ai), I. Habler (OWASP), and A. Sheriff (Cisco Systems), *Agent Name Service v2 (ANS): A Domain-Anchored Trust Layer for Autonomous AI Agent Identity (draft-narajala-courtney-ansv2-01)*, historical revision (checked 2026-10-30)",
     "date": null,
     "quote": "_ans-badge IN TXT \"v=ans-badge1; version=v1.5.0; url=https://{tl_host}/v1/agents/{agentId}\"; High-assurance (AHP-managed, per ADR 010) _ans-identity._tls IN TLSA",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://raw.githubusercontent.com/agentnameservice/ans/main/README.md",
     "claim": "Agent Name Service Project (agentnameservice/ans), *ans — Agent Name Service Reference Implementation (README.md)*, checked 2026-10-29",
     "date": null,
     "quote": "} Receipts (SCITT COSE_Sign1, RFC 8152 tag 18): - Protected header: {1:-7 (ES256), 4: / https://github.com/agentnameservice/ans cd ans make build # builds bin/ans-ra, bin/ans-tl, bin/ans-verify, bin/ans-dns scripts/demo/start.sh # starts / with auth.oidc.admin-groups. Every GET under /v1/agents/, /v1/log/, and the tlog-tiles paths (/checkpoint, /root-keys, /tile/) / an open-source implementation of the Agent Name Service (ANS), a registry + transparency log",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://raw.githubusercontent.com/agentnameservice/ans-registry/main/spec/ans-3-dns-publication.md",
     "claim": "agentnameservice/ans-registry, *spec/ans-3-dns-publication.md*, checked 2026-10-29",
     "date": null,
     "quote": "# ANS-3: DNS Publication Status: DRAFT v1.0 Spec: ANS-3 (DNS Publication) Version: 0.1.0 Date: / - _ans-badge.{agentHost} TXT, value v=ans-badge1; version=v{version}; url={badgeURL}, where {version} is the registration's semver (the",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://www.ietf.org/archive/id/draft-dimare-ans-protocol-registry-00.txt",
     "claim": "J. DiMare, *An IANA Registry for Agent Name Service (ANS) Protocol Identifiers (draft-dimare-ans-protocol-registry-00)*, checked 2026-10-29",
     "date": null,
     "quote": "Protocol Identifiers draft-dimare-ans-protocol-registry-00 Abstract The Agent Name Service (ANS), described in draft-narajala-courtney- ansv2, identifies",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://www.rfc-editor.org/rfc/rfc4033.html",
     "claim": "R. Arends, R. Austein, M. Larson, D. Massey, and S. Rose, *RFC 4033: DNS Security Introduction and Requirements*, March 2005",
     "date": null,
     "quote": "The Domain Name System Security Extensions (DNSSEC) add data origin",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://www.rfc-editor.org/rfc/rfc6962.html",
     "claim": "B. Laurie, A. Langley, and E. Kasper, *RFC 6962: Certificate Transparency*, June 2013",
     "date": null,
     "quote": "This document describes an experimental protocol for publicly logging",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://datatracker.ietf.org/doc/draft-mozleywilliams-dnsop-dnsaid/",
     "claim": "J. Mozley and N. Williams (Infoblox), B. Sarikaya, R. Schott (Deutsche Telekom), and J. Damick (Amazon), *draft-mozleywilliams-dnsop-dnsaid — DNS for AI Discovery (IETF Datatracker; succeeded by draft-nemethi-dawn-dnsaid)*, checked 2026-10-29",
     "date": null,
     "quote": "draft-mozleywilliams-dnsop-dnsaid-02 Published: Intended Status:: Standards Track Expires: Authors:: J. Mozley Infoblox, Inc. N. Williams",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://aid.agentcommunity.org/docs/specification",
     "claim": "Agent Community (Open Agent Registry, Inc.), *Agent Identity & Discovery (AID) - v2.1.1 Specification*, 2026-10-02 (fetched 2026-10-30)",
     "date": null,
     "quote": "Specification | Agent Identity & Discovery {\"@context\":\"https://schema.org\",\"@type\":\"Organization\",\"name\":\"Open Agent Registry,",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://github.com/spiffe/spiffe/blob/main/standards/SPIFFE-ID.md",
     "claim": "SPIFFE, *SPIFFE ID*, checked 2026-10-30",
     "date": null,
     "quote": "Stability: Stable",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://raw.githubusercontent.com/ethereum/ERCs/master/ERCS/erc-8004.md",
     "claim": "Marco De Rossi, Davide Crapis, Jordan Ellis, and Erik Reppel, *ERCS/erc-8004.md (Trustless Agents)*, created 2025-08-13; fetched 2026-10-30",
     "date": null,
     "quote": "author: Marco De Rossi (@MarcoMetaMask), Davide Crapis (@dcrapis) <davide@ethereum.org>, Jordan Ellis <jordanellis@google.com>, Erik Reppel <erik.reppel@coinbase.com> discussions-to: https://ethereum-magicians.org/t/erc-8004-trustless-agents/25098 status: Draft type: Standards Track category: ERC created: 2025-08-13 requires: 155, 712, 721, 1271",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://aaif.io/blog/a2a-joins-aaif",
     "claim": "Agentic AI Foundation, *A2A joins AAIF's open agentic stack*, published 2026-08-17; modified 2026-09-24",
     "date": null,
     "quote": "A2A v1.0, the first stable specification, shipped in March 2026.",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://www.godaddy.com/en/ans",
     "claim": "GoDaddy, *Agent Identity*, checked 2026-10-29",
     "date": null,
     "quote": "Browse Agents Publish Agent (Coming Soon) Manage Agents (Coming Soon) Developers Documentation ANS Registry",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://transparency.ans.godaddy.com/v1/log/checkpoint",
     "claim": "GoDaddy ANS Transparency Log, *v1/log/checkpoint*, checked 2026-10-29",
     "date": null,
     "quote": "X-Request-Id access-control-allow-methods: GET, POST, OPTIONS access-control-allow-origin: * {\"checkpointFormat\":\"c2sp-tlog/v1\",\"checkpointText\":\"transparency.ans.godaddy.com 450025",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://developer.godaddy.com/en/docs/api-users/changelog/ans-pat-scopes",
     "claim": "GoDaddy Developers Changelog, *ANS scopes for Personal Access Tokens*, checked 2026-10-29",
     "date": null,
     "quote": "You can now generate a Personal Access Token (PAT) with Agent Name Service (ANS) scopes and use it to call the ANS API, so you can register and manage agents with a scoped, revocable credential instead of a classic developer key.",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://transparency.ans.godaddy.com/tile/entries/1750",
     "claim": "GoDaddy ANS Transparency Log, *tile/entries/1750*, checked 2026-10-29",
     "date": null,
     "quote": "\"_ans-badge.support-e4c874ed-305c-4f6e-bc10-579d7684160d.helpagent.club\":\"v=ans-badge1; version=v1.0.0; url=https://transparency.ans.godaddy.com/v1/agents/a9ed929d-537b-421e-81ee-1e339153e83f\"",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://transparency.ans.godaddy.com/tile/entries/000",
     "claim": "GoDaddy ANS Transparency Log, *tile/entries/000*, checked 2026-10-29",
     "date": null,
     "quote": "\"_ra-badge.concise.koopman.me\":\"v=ra-badge1; url=https://transparency.ans.godaddy.com/v1/agents/cb0f6ca3-b9a9-408f-8e0b-8605fa438773\" / 9f3dbcf820245f20c6ca72fe3c09f9ea63396b95a2cd05e17e5cf8577deb7cd8\",\"_ans.drone-research-agent.dronecraft.co\":\"v=ans1; version=1.0.1;",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://aboutus.godaddy.net/newsroom/news-releases/press-release-details/2026/GoDaddy-ANS-Integrates-with-Salesforces-MuleSoft-Agent-Fabric/default.aspx",
     "claim": "GoDaddy, *GoDaddy ANS Integrates with Salesforce's MuleSoft Agent Fabric*, checked 2026-10-29",
     "date": null,
     "quote": "MuleSoft's Agent Scanners pull verified agents from ANS into MuleSoft Agent Registry, where they appear for review and approval before accessing enterprise systems.",
     "ref": 24
    }
   ],
   "form": "dns-record",
   "governance": "On Nov. 10, 2026 the Linux Foundation announced that Agent Name Service (ANS) has launched as a Linux Foundation project. The specification is governed by the project's technical steering committee under the Linux Foundation. The IETF Internet-Draft remains an individual submission: the datatracker says this I-D is not endorsed by the IETF and has no formal standing in the IETF standards process, and the stream state is No stream defined. Open-source specifications ANS-0 through ANS-6 are developed at github.com/agentnameservice.",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against draft-narajala-courtney-ansv2-01 primary text and the GoDaddy/Infoblox press release"
    },
    {
     "date": "2026-10-29",
     "note": "Primary-source verification against draft-narajala-courtney-ansv2-02, OWASP ANSv1, GoDaddy C2SP transparency log tiles, and Linux Foundation announcement"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "ans",
   "implementation": "shipping",
   "last_verified": "2026-11-12",
   "name": "Agent Name Service v2 (ANS)",
   "native_status": "Active draft (`-02` posted 2026-10-26, expires 2027-04-29; `-01` expired 2026-10-15). GoDaddy calls its service production while its registry page lists \"Publish Agent (Coming Soon)\" and \"Manage Agents (Coming Soon)\".",
   "origin": {
    "date": "2025-05",
    "org": "OWASP GenAI Security Project & GoDaddy"
   },
   "part_of": null,
   "parties": [
    "agent-agent",
    "agent-registry"
   ],
   "phase": "draft",
   "probe": {
    "method": "GET",
    "on_absent": "No ANS identity is bound to the domain",
    "parse": "Query _ans-badge.{agentHost} TXT and verify registration against the C2SP transparency log at transparency.ans.godaddy.com",
    "path": "_ans-badge.{agentHost} TXT / transparency.ans.godaddy.com"
   },
   "question": "What domain-anchored identity belongs to an autonomous agent, and which release is it running?",
   "scope": "general",
   "spec_url": "https://datatracker.ietf.org/doc/draft-narajala-courtney-ansv2/",
   "step": "identify",
   "summary_md": "`draft-narajala-courtney-ansv2-02` specifies the architecture of Agent Name Service version 2 (ANS v2), an identity layer, anchored in DNS domains, that binds an agent endpoint to its domain holder, its release, and its history. The draft header states intended status Informational. This Internet-Draft will expire on 29 April 2027. Datatracker lists Document Type Active Internet-Draft (individual), last updated 2026-10-26, RFC stream (None), and intended RFC status (None). It states this I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. The registrant publishes a TXT record at `_ans-badge.{agentHost}` with the value `v=ans-badge1; version=v{version}; url={badgeURL}`, where badgeURL is the TL's public record for the registration. A verifier reads the DNS records, certificates, and TL records and decides for itself. ANS began as the Agent Name Service specification by Huang, Narajala, Habler, and Sheriff, which Vineeth Narajala brought to the IETF as I-D.narajala-ans. I-D.narajala-courtney-ansv2 then specified ANS v2. The history table records 2026-10-26 as an uploaded new revision `02`, 2026-10-15 as \"Document has expired\" for revision `01`, and 2026-04-15 as the date this document now replaces `draft-narajala-ans`. The IETF Datatracker document record lists `draft-narajala-courtney-ansv2` at revision `02`, posted on `2026-10-26` and expiring on `2027-04-29`. Changes from `draft-narajala-courtney-ansv2-01` retitled the document from \"Trust Layer\" to \"Identity Layer\": ANS identifies an agent; whether to trust it is the relying party's decision, which a separate scoring service can inform. The same changes adopted DNS-AID SVCB records as the default discovery format; the `_ans` TXT format is now an opt-in profile.",
   "track": "linux-foundation",
   "version": {
    "date": "2026-10-26",
    "label": "draft-narajala-courtney-ansv2-02"
   },
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-narajala-courtney-ansv2"
    },
    {
     "type": "github",
     "repo": "agentnameservice/ans"
    }
   ],
   "use_cases": [
    "prove-agent-identity",
    "agent-naming",
    "audit-agent-actions",
    "describe-agent-capabilities"
   ],
   "audience": [
    "standards-body",
    "platform",
    "agent-builder"
   ],
   "pairs_with": [
    "dns-aid",
    "aid",
    "spiffe",
    "erc-8004",
    "a2a"
   ],
   "prerequisites": [],
   "ietf_tracker": {
    "doc": "draft-narajala-courtney-ansv2",
    "rev": "02",
    "state": "active",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-10-26",
    "expires_utc": "2027-04-29",
    "as_of": "2026-10-30",
    "source": "https://datatracker.ietf.org/doc/draft-narajala-courtney-ansv2/",
    "source_label": "per IETF Datatracker"
   },
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "This page is about the Agent Name Service in draft-narajala-courtney-ansv2, a DNS-anchored identity layer for AI agents, and the OWASP version 1 work it replaces. It is not [DNS-AID](/protocols/dns-aid/), whose SVCB records ANS reuses for discovery; not [AID](/protocols/aid/) or [ARD](/protocols/ard/), which GoDaddy names as separate discovery options; and not the unrelated \"ANS\" naming layer of the AGTP drafts. A companion draft proposes an IANA registry for ANS protocol identifiers. [1]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "`draft-narajala-courtney-ansv2-02` specifies the architecture of Agent Name Service version 2 (ANS v2), an identity layer, anchored in DNS domains, that binds an agent endpoint to its domain holder, its release, and its history. [2] The draft header states intended status Informational. This Internet-Draft will expire on 29 April 2027. [2] Datatracker lists Document Type Active Internet-Draft (individual), last updated 2026-10-26, RFC stream (None), and intended RFC status (None). It states this I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. [1] The registrant publishes a TXT record at `_ans-badge.{agentHost}` with the value `v=ans-badge1; version=v{version}; url={badgeURL}`, where badgeURL is the TL's public record for the registration. [2] A verifier reads the DNS records, certificates, and TL records and decides for itself. [2] ANS began as the Agent Name Service specification by Huang, Narajala, Habler, and Sheriff, which Vineeth Narajala brought to the IETF as I-D.narajala-ans. I-D.narajala-courtney-ansv2 then specified ANS v2. [2] The history table records 2026-10-26 as an uploaded new revision `02`, 2026-10-15 as \"Document has expired\" for revision `01`, and 2026-04-15 as the date this document now replaces `draft-narajala-ans`. [1] The IETF Datatracker document record lists `draft-narajala-courtney-ansv2` at revision `02`, posted on `2026-10-26` and expiring on `2027-04-29`. [3] Changes from `draft-narajala-courtney-ansv2-01` retitled the document from \"Trust Layer\" to \"Identity Layer\": ANS identifies an agent; whether to trust it is the relying party's decision, which a separate scoring service can inform. [2] The same changes adopted DNS-AID SVCB records as the default discovery format; the `_ans` TXT format is now an opt-in profile. [2]",
   "v05_identity_sentence_md": "`draft-narajala-courtney-ansv2-02` specifies the architecture of Agent Name Service version 2 (ANS v2), an identity layer, anchored in DNS domains, that binds an agent endpoint to its domain holder, its release, and its history. [2] The draft header states intended status Informational. This Internet-Draft will expire on 29 April 2027. [2] Datatracker lists Document Type Active Internet-Draft (individual), last updated 2026-10-26, RFC stream (None), and intended RFC status (None). It states this I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Identify](/category/identify/) (`identify`)"
    },
    {
     "label": "Form",
     "value_md": "DNS record (`dns-record`)"
    },
    {
     "label": "Originated by",
     "value_md": "Ken Huang, Vineeth Sai Narajala, Idan Habler, and Akram Sheriff under OWASP (`ANS v1.0`, May 2025); ANS v2 led by Scott Courtney (GoDaddy) with the original co-authors [1][2][4]"
    },
    {
     "label": "Governed by",
     "value_md": "Linux Foundation project (announced Nov. 10, 2026): governed by the project's technical steering committee under the Linux Foundation. Individual IETF Internet-Draft (`No stream defined`); open-source specs (`ANS-0`–`ANS-6`) at `github.com/agentnameservice`. [1][2][5][6]"
    },
    {
     "label": "Track",
     "value_md": "Linux Foundation open-source specification (`ANS-0`–`ANS-6` at `github.com/agentnameservice`, originated under OWASP) and individual IETF Internet-Draft (`draft-narajala-courtney-ansv2-02`, Intended status: Informational) [1][2][6]"
    },
    {
     "label": "Status",
     "value_md": "Active draft (`-02` posted 2026-10-26, expires 2027-04-29; `-01` expired 2026-10-15). GoDaddy calls its service production while its registry page lists \"Publish Agent (Coming Soon)\" and \"Manage Agents (Coming Soon)\". [1][3][7]"
    },
    {
     "label": "Version",
     "value_md": "`draft-narajala-courtney-ansv2-02` (`2026-10-26`, expires `2027-04-29`); `ANS-3 v0.1.0` (`2026-06-29`); `agentnameservice/ans` `v0.1.6` (`2026-06-26`) [1][3][7]"
    },
    {
     "label": "Wire format",
     "value_md": "DNS `TXT` (`_ans-badge`, `_ans`, legacy `_ra-badge`), `SVCB` (`ANS_DNSAID`), `HTTPS`, and `TLSA`; X.509 v3 certificates; RFC 9449 DPoP headers; C2SP `c2sp-tlog/v1` checkpoints/tiles; CBOR `COSE_Sign1` (RFC 9052 tag 18, ES256) receipts [2][8][9]"
    },
    {
     "label": "Specification",
     "value_md": "[draft-narajala-courtney-ansv2-02.txt](https://www.ietf.org/archive/id/draft-narajala-courtney-ansv2-02.txt) · [ANS-3 DNS Publication](https://raw.githubusercontent.com/agentnameservice/ans-registry/main/spec/ans-3-dns-publication.md) · [agentnameservice/ans](https://raw.githubusercontent.com/agentnameservice/ans/main/README.md) · [draft-narajala-ans-00.txt](https://www.ietf.org/archive/id/draft-narajala-ans-00.txt) · [draft-dimare-ans-protocol-registry-00.txt](https://www.ietf.org/archive/id/draft-dimare-ans-protocol-registry-00.txt) [2][9][10]"
    },
    {
     "label": "Found at",
     "value_md": "`_ans-badge.{agentHost}` `TXT`, `_ans.{agentHost}` `TXT`, `{agentHost}` `SVCB` / `HTTPS`, `_{port}._tcp.{agentHost}` `TLSA`, RFC 9449 `DPoP` header, and `/v1/log/checkpoint`, `/tile/entries/*`, `/root-keys`, `/v1/agents/{agentId}` [2][8][9]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust provisions (`draft-narajala-courtney-ansv2-02`, `draft-narajala-ans-00`, `draft-dimare-ans-protocol-registry-00`); Apache-2.0 (`ans-registry`, `ans`) [2][4][11]"
    },
    {
     "label": "IETF state",
     "value_md": "`draft-narajala-courtney-ansv2-02` · **Active Internet-Draft** (expires 2027-04-29) · Individual · as of 2026-10-30 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-narajala-courtney-ansv2/))"
    }
   ],
   "v05_problem_md": "A relying party has no interoperable way to bind a discoverable agent endpoint to the holder of its domain (optionally verified as a legal entity), a specific software release, and an auditable issuance history. [2] A TLS server certificate names the hostname, which answers part of the first question. No interoperable record names the release running at the endpoint or its history. [2] ANS v2 composes systems the Internet already runs (the DNS with DNSSEC; the Web PKI, with DANE where operators publish it; and an append-only transparency log) and introduces no new root of trust. [2] This document does not define the wire format of discovery records (DNS-AID does), or the application protocols agents speak (MCP, A2A, and others). [2] ANS tells a verifier who an agent is; whether to trust or transact with that agent is the verifier's own decision, which a separate scoring service that reads ANS records can inform. [2] ANS-3 requires the discovery and trust records to sit in public DNS zones that any third party can query; a private zone or proprietary lookup channel does not conform. [2]",
   "v05_mechanism_delta_md": "ANS v2 composes systems the Internet already runs (the DNS with DNSSEC; the Web PKI, with DANE where operators publish it; and an append-only transparency log) and introduces no new root of trust. [2]",
   "v05_scope_boundary_md": "This document does not define the wire format of discovery records (DNS-AID does), or the application protocols agents speak (MCP, A2A, and others). [2] ANS tells a verifier who an agent is; whether to trust or transact with that agent is the verifier's own decision, which a separate scoring service that reads ANS records can inform. [2] ANS-3 requires the discovery and trust records to sit in public DNS zones that any third party can query; a private zone or proprietary lookup channel does not conform. [2]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "DNS Security Extensions (DNSSEC, RFC 4033)",
      "spec_or_rfc": "RFC 4033",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "ANS v2 uses a DNSSEC-signed domain and publishes default ANS_DNSAID SVCB records (with an opt-in _ans TXT profile) and _ans-badge TXT records alongside the transparency log at transparency.ans.godaddy.com. [2][12]"
     },
     {
      "name": "Certificate Transparency (RFC 6962)",
      "spec_or_rfc": "RFC 6962",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "ANS publishes agent registration in a transparency log referenced by _ans-badge TXT alongside DNS-AID SVCB records, while Certificate Transparency logs TLS certificates. [2][13]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "dns-aid",
      "target_name": "DNS-AID (DNS for AI Discovery, draft-nemethi-dawn-dnsaid)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ANS keeps DNS-AID (draft-nemethi-dawn-dnsaid, succeeding draft-mozleywilliams-dnsop-dnsaid) SVCB discovery as the way to reach the agent and adds the _ans-badge TXT record and transparency log that DNS-AID does not define. [2][14]"
     },
     {
      "target_id": "aid",
      "target_name": "Agent Identity & Discovery (AID)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "AID publishes discovery data in a DNS _agent TXT record, while ANS v2 binds the endpoint to the domain holder, a software release, and an _ans-badge transparency-log pointer. [2][15]"
     },
     {
      "target_id": "spiffe",
      "target_name": "SPIFFE (Secure Production Identity Framework for Everyone)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "A SPIFFE ID is a spiffe:// URI carried in one X.509-SVID URI SAN or a JWT-SVID, while ANS v2 publishes default ANS_DNSAID SVCB and _ans-badge TXT records (plus opt-in _ans TXT) and a transparency log at transparency.ans.godaddy.com. [2][16]"
     },
     {
      "target_id": "erc-8004",
      "target_name": "ERC-8004: Trustless Agents",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ERC-8004 identifies an agent with on-chain Identity and Reputation registries and /.well-known/agent-registration.json, while ANS identifies it with a DNSSEC domain, TXT records, and a transparency log. [2][17]"
     },
     {
      "target_id": "a2a",
      "target_name": "Agent2Agent Protocol (A2A)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "ANS v2 resolves the agent through default ANS_DNSAID SVCB records (or opt-in _ans TXT) and _ans-badge TXT before a relying party opens an A2A session with the advertised endpoint. [2][18]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (8 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).",
    "side_a": {
     "visible": true,
     "heading": "Issuers, signers & metadata publishers",
     "col4_header": "Boundary & Format",
     "note_md": null,
     "rows": [
      {
       "actor": "GoDaddy Agent Identity",
       "role": "Identity issuer / CA",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · as of 2025-11-20",
       "col4_md": "ANS private CA signs identity certificates. The public log at transparency.ans.godaddy.com uses checkpoint format `c2sp-tlog/v1` and origin `transparency.ans.godaddy.com`. The ANS API has been live for builders since 2025-11-20. Since 2026-10 a Personal Access Token with ANS scopes can register and manage agents. The registry page still shows Publish Agent and Manage Agents as Coming Soon. The Nov. 10, 2026 Linux Foundation release lists GoDaddy among 11 organizations that have contributed to or adopted ANS.",
       "source_md": "[GoDaddy Agent Identity](https://www.godaddy.com/en/ans) [19] · [Log checkpoint](https://transparency.ans.godaddy.com/v1/log/checkpoint) [20] · [Linux Foundation, Nov. 10, 2026](https://www.linuxfoundation.org/press/linux-foundation-welcomes-agent-name-service-to-bring-verifiable-identity-and-discovery-to-ai-agents) [6][21]"
      },
      {
       "actor": "helpagent.club registrants",
       "role": "Bot / Agent signer",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · as of 2026-10-28",
       "col4_md": "Log tile 1750 holds 256 registrations dated 2026-10-28, including Vetus Carta Rare Maps Customer Support Agent. Sample badge `_ans-badge.support-e4c874ed-305c-4f6e-bc10-579d7684160d.helpagent.club` is `v=ans-badge1; version=v1.0.0; url=https://transparency.ans.godaddy.com/v1/agents/a9ed929d-537b-421e-81ee-1e339153e83f`. Matching `_ans` TXT is `v=ans1; version=v1.0.0; p=a2a; mode=direct`. Twelve sampled hosts had the badge and `_ans` TXT on both resolvers, without DNSSEC.",
       "source_md": "[ANS log tile 1750](https://transparency.ans.godaddy.com/tile/entries/1750) [22]"
      },
      {
       "actor": "concise.koopman.me",
       "role": "Bot / Agent signer",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Log tile 0 records agent host concise.koopman.me, name Concise Rewrite, version v1.0.0. Badge `_ra-badge.concise.koopman.me` is `v=ra-badge1; url=https://transparency.ans.godaddy.com/v1/agents/cb0f6ca3-b9a9-408f-8e0b-8605fa438773`.",
       "source_md": "[ANS log tile 0](https://transparency.ans.godaddy.com/tile/entries/000) [23]"
      },
      {
       "actor": "drone-research-agent.dronecraft.co and bookagent.cloud",
       "role": "Bot / Agent signer",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-29",
       "col4_md": "On 2026-10-29 both hosts still published an `_ans` TXT record and a DNSSEC-validated TLSA record, on both resolvers used in the check.",
       "source_md": "[ANS log tile 0](https://transparency.ans.godaddy.com/tile/entries/000) [23] · [ANS v2 draft](https://www.ietf.org/archive/id/draft-narajala-courtney-ansv2-02.txt) [2]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Verifiers, WAFs & relying servers",
     "col4_header": "Boundary & Format",
     "note_md": null,
     "rows": [
      {
       "actor": "Salesforce MuleSoft Agent Fabric",
       "role": "Explorer / Scanner",
       "status": "Supported",
       "status_display": "Supported · as of 2026-02-19",
       "col4_md": "GoDaddy's 2026-02-19 release says MuleSoft Agent Scanners pull verified agents from ANS into the MuleSoft Agent Registry, where they are reviewed and approved before they can reach enterprise systems. The Nov. 10, 2026 Linux Foundation release lists Salesforce among 11 organizations that have contributed to or adopted ANS.",
       "source_md": "[GoDaddy and MuleSoft](https://aboutus.godaddy.net/newsroom/news-releases/press-release-details/2026/GoDaddy-ANS-Integrates-with-Salesforces-MuleSoft-Agent-Fabric/default.aspx) [24] · [Linux Foundation, Nov. 10, 2026](https://www.linuxfoundation.org/press/linux-foundation-welcomes-agent-name-service-to-bring-verifiable-identity-and-discovery-to-ai-agents) [6]"
      },
      {
       "actor": "agentnameservice verifier",
       "role": "Verifier SDK / Runtime",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "The ANS v2 draft says the open-source project includes a verifier beside the registry, transparency log, schemas, SDKs, and CLI. A verifier pins an agent to one log entry and one version. The badge it can fetch is a TXT record at `_ans-badge.{agentHost}` with `v=ans-badge1; version=v{version}; url={badgeURL}`. Identity certificates from the private CA are used for mTLS between agents.",
       "source_md": "[ANS v2 draft](https://www.ietf.org/archive/id/draft-narajala-courtney-ansv2-02.txt) [2] · [ans README](https://raw.githubusercontent.com/agentnameservice/ans/main/README.md) [9][10]"
      },
      {
       "actor": "AGNTCY Agent Directory Service",
       "role": "Directory verifier",
       "status": "Supported (release announcement)",
       "status_display": "Supported (release announcement) · as of 2026-11-10",
       "col4_md": "The AGNTCY Agent Directory Service, another Linux Foundation project, supports verification of ANS identities.",
       "source_md": "[Linux Foundation, Nov. 10, 2026](https://www.linuxfoundation.org/press/linux-foundation-welcomes-agent-name-service-to-bring-verifiable-identity-and-discovery-to-ai-agents) [6]"
      },
      {
       "actor": "ANS Finder",
       "role": "Discovery client",
       "status": "Supported (release announcement)",
       "status_display": "Supported (release announcement) · as of 2026-11-10",
       "col4_md": "ANS Finder implements the Agentic Resource Discovery (ARD) specification and passes its registry conformance tests.",
       "source_md": "[Linux Foundation, Nov. 10, 2026](https://www.linuxfoundation.org/press/linux-foundation-welcomes-agent-name-service-to-bring-verifiable-identity-and-discovery-to-ai-agents) [6]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [
     {
      "label": "Linux Foundation ANS launch announcement",
      "as_of": "2026-11-10",
      "value_md": "Eleven organizations are named in the November 10, 2026 Linux Foundation launch announcement as having contributed to or adopted ANS since June 2026: GoDaddy, Salesforce, Cisco, Cloudflare, DigiCert, DistributedApps.ai, HOL, Infoblox, Radix, OWASP, and Trustmodel.ai. [6]"
     }
    ],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "adp",
     "target_name": "Agent Discovery Protocol (ADP) v1.1",
     "relation_label": "Peer alternative",
     "delta": "ADP discovers a host and then reads a JSON descriptor, while ANS resolves the agent name with X.509 identity certificates and a C2SP transparency log.",
     "item_md": "**[Agent Discovery Protocol (ADP) v1.1](/protocols/adp/)** (Peer alternative) — ADP discovers a host and then reads a JSON descriptor, while ANS resolves the agent name with X.509 identity certificates and a C2SP transparency log."
    },
    {
     "target_id": "dan",
     "target_name": "DNS-Based Agent Naming",
     "relation_label": "Peer alternative",
     "delta": "DAN names agents with dedicated DNS RR types AIINDEX and AIDISCA validated with DNSSEC and DANE certificate associations, while ANS v2 uses DNS-AID SVCB records (or an opt-in _ans TXT profile) alongside X.509 certificates and a C2SP transparency log.",
     "item_md": "**[DNS-Based Agent Naming](/protocols/dan/)** (Peer alternative) — DAN names agents with dedicated DNS RR types AIINDEX and AIDISCA validated with DNSSEC and DANE certificate associations, while ANS v2 uses DNS-AID SVCB records (or an opt-in _ans TXT profile) alongside X.509 certificates and a C2SP transparency log."
    },
    {
     "target_id": "anp",
     "target_name": "Agent Network Protocol",
     "relation_label": "Complements",
     "delta": "ANS v2 publishes agent names in DNS under _ans and _ra-badge labels, while ANP publishes the agent description at /.well-known/agent-descriptions and uses did:wba agents in ANP-10.",
     "item_md": "**[Agent Network Protocol](/protocols/anp/)** (Complements) — ANS v2 publishes agent names in DNS under _ans and _ra-badge labels, while ANP publishes the agent description at /.well-known/agent-descriptions and uses did:wba agents in ANP-10."
    },
    {
     "target_id": "lmos",
     "target_name": "Eclipse LMOS (Language Model Operating System)",
     "relation_label": "Complements",
     "delta": "ANS names agents with DNS records, while LMOS retrieves W3C WoT Thing Descriptions over HTTP via TDDs, mDNS, DNS-SD, or well-known URLs.",
     "item_md": "**[Eclipse LMOS (Language Model Operating System)](/protocols/lmos/)** (Complements) — ANS names agents with DNS records, while LMOS retrieves W3C WoT Thing Descriptions over HTTP via TDDs, mDNS, DNS-SD, or well-known URLs."
    },
    {
     "target_id": "gbz-185-agent-interconnection",
     "target_name": "GB/Z 185 Artificial intelligence — Agent interconnection",
     "relation_label": "Peer alternative",
     "delta": "ANS v2 publishes an _ans TXT record in DNS as a connection hint for the protocol an agent supports and where to find its metadata. GB/Z 185 specifies discovery by a discovery service or by preset information.",
     "item_md": "**[GB/Z 185 Artificial intelligence — Agent interconnection](/protocols/gbz-185-agent-interconnection/)** (Peer alternative) — ANS v2 publishes an _ans TXT record in DNS as a connection hint for the protocol an agent supports and where to find its metadata. GB/Z 185 specifies discovery by a discovery service or by preset information."
    },
    {
     "target_id": "ardp",
     "target_name": "Agent Registration and Discovery Protocol",
     "relation_label": "Peer alternative",
     "delta": "ARDP advertises registrar metadata at /.well-known/ardp/meta and registers soft-state bindings with REGISTER, while ANS v2 publishes agent identity in DNS-AID SVCB records (with an opt-in _ans TXT profile), X.509 certificates, and a C2SP transparency log.",
     "item_md": "**[Agent Registration and Discovery Protocol](/protocols/ardp/)** (Peer alternative) — ARDP advertises registrar metadata at /.well-known/ardp/meta and registers soft-state bindings with REGISTER, while ANS v2 publishes agent identity in DNS-AID SVCB records (with an opt-in _ans TXT profile), X.509 certificates, and a C2SP transparency log."
    },
    {
     "target_id": "aip",
     "target_name": "Agent Identity Protocol (AIP)",
     "relation_label": "Peer alternative",
     "delta": "ANS anchors the name in _ans-badge and _ans TXT records under DNSSEC, while AIP anchors it in a did:aip document and a capability-credential chain.",
     "item_md": "**[Agent Identity Protocol (AIP)](/protocols/aip/)** (Peer alternative) — ANS anchors the name in _ans-badge and _ans TXT records under DNSSEC, while AIP anchors it in a did:aip document and a capability-credential chain."
    },
    {
     "target_id": "agent-identity-document",
     "target_name": "The Agent Identity Document: A Hosted, Accountable Public Record for AI Agents",
     "relation_label": "Peer alternative",
     "delta": "ANS publishes DNSSEC-anchored _ans TXT records and a transparency log, while the Agent Identity Document is a single JSON file at /.well-known/agent-identity.json.",
     "item_md": "**[The Agent Identity Document: A Hosted, Accountable Public Record for AI Agents](/protocols/agent-identity-document/)** (Peer alternative) — ANS publishes DNSSEC-anchored _ans TXT records and a transparency log, while the Agent Identity Document is a single JSON file at /.well-known/agent-identity.json."
    },
    {
     "item_md": "**[Identify protocols](/category/identify/)** — Category index for `identify` standards."
    }
   ],
   "v05_compiled_md": "---\nid: ans\ntitle: \"Agent Name Service v2 (ANS)\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: identify\nform: dns-record\nwire_archetype: identity_auth_crypto\nspec_url: https://www.ietf.org/archive/id/draft-narajala-courtney-ansv2-02.txt\nlast_checked: 2026-11-12\n---\n\n# Agent Name Service v2 (ANS)\n\n**Category:** [Identify](/category/identify/) (`identify`) · **Form:** DNS record (`dns-record`) · **Last checked:** 2026-11-12\n\n> *This page is about the Agent Name Service in draft-narajala-courtney-ansv2, a DNS-anchored identity layer for AI agents, and the OWASP version 1 work it replaces. It is not [DNS-AID](/protocols/dns-aid/), whose SVCB records ANS reuses for discovery; not [AID](/protocols/aid/) or [ARD](/protocols/ard/), which GoDaddy names as separate discovery options; and not the unrelated \"ANS\" naming layer of the AGTP drafts. A companion draft proposes an IANA registry for ANS protocol identifiers. [1]*\n\n`draft-narajala-courtney-ansv2-02` specifies the architecture of Agent Name Service version 2 (ANS v2), an identity layer, anchored in DNS domains, that binds an agent endpoint to its domain holder, its release, and its history. [2] The draft header states intended status Informational. This Internet-Draft will expire on 29 April 2027. [2] Datatracker lists Document Type Active Internet-Draft (individual), last updated 2026-10-26, RFC stream (None), and intended RFC status (None). It states this I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. [1] The registrant publishes a TXT record at `_ans-badge.{agentHost}` with the value `v=ans-badge1; version=v{version}; url={badgeURL}`, where badgeURL is the TL's public record for the registration. [2] A verifier reads the DNS records, certificates, and TL records and decides for itself. [2] ANS began as the Agent Name Service specification by Huang, Narajala, Habler, and Sheriff, which Vineeth Narajala brought to the IETF as I-D.narajala-ans. I-D.narajala-courtney-ansv2 then specified ANS v2. [2] The history table records 2026-10-26 as an uploaded new revision `02`, 2026-10-15 as \"Document has expired\" for revision `01`, and 2026-04-15 as the date this document now replaces `draft-narajala-ans`. [1] The IETF Datatracker document record lists `draft-narajala-courtney-ansv2` at revision `02`, posted on `2026-10-26` and expiring on `2027-04-29`. [3] Changes from `draft-narajala-courtney-ansv2-01` retitled the document from \"Trust Layer\" to \"Identity Layer\": ANS identifies an agent; whether to trust it is the relying party's decision, which a separate scoring service can inform. [2] The same changes adopted DNS-AID SVCB records as the default discovery format; the `_ans` TXT format is now an opt-in profile. [2]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Identify](/category/identify/) (`identify`) |\n| **Form** | DNS record (`dns-record`) |\n| **Originated by** | Ken Huang, Vineeth Sai Narajala, Idan Habler, and Akram Sheriff under OWASP (`ANS v1.0`, May 2025); ANS v2 led by Scott Courtney (GoDaddy) with the original co-authors [1][2][4] |\n| **Governed by** | Linux Foundation project (announced Nov. 10, 2026): governed by the project's technical steering committee under the Linux Foundation. Individual IETF Internet-Draft (`No stream defined`); open-source specs (`ANS-0`–`ANS-6`) at `github.com/agentnameservice`. [1][2][5][6] |\n| **Track** | Linux Foundation open-source specification (`ANS-0`–`ANS-6` at `github.com/agentnameservice`, originated under OWASP) and individual IETF Internet-Draft (`draft-narajala-courtney-ansv2-02`, Intended status: Informational) [1][2][6] |\n| **Status** | Active draft (`-02` posted 2026-10-26, expires 2027-04-29; `-01` expired 2026-10-15). GoDaddy calls its service production while its registry page lists \"Publish Agent (Coming Soon)\" and \"Manage Agents (Coming Soon)\". [1][3][7] |\n| **Version** | `draft-narajala-courtney-ansv2-02` (`2026-10-26`, expires `2027-04-29`); `ANS-3 v0.1.0` (`2026-06-29`); `agentnameservice/ans` `v0.1.6` (`2026-06-26`) [1][3][7] |\n| **Wire format** | DNS `TXT` (`_ans-badge`, `_ans`, legacy `_ra-badge`), `SVCB` (`ANS_DNSAID`), `HTTPS`, and `TLSA`; X.509 v3 certificates; RFC 9449 DPoP headers; C2SP `c2sp-tlog/v1` checkpoints/tiles; CBOR `COSE_Sign1` (RFC 9052 tag 18, ES256) receipts [2][8][9] |\n| **Specification** | [draft-narajala-courtney-ansv2-02.txt](https://www.ietf.org/archive/id/draft-narajala-courtney-ansv2-02.txt) · [ANS-3 DNS Publication](https://raw.githubusercontent.com/agentnameservice/ans-registry/main/spec/ans-3-dns-publication.md) · [agentnameservice/ans](https://raw.githubusercontent.com/agentnameservice/ans/main/README.md) · [draft-narajala-ans-00.txt](https://www.ietf.org/archive/id/draft-narajala-ans-00.txt) · [draft-dimare-ans-protocol-registry-00.txt](https://www.ietf.org/archive/id/draft-dimare-ans-protocol-registry-00.txt) [2][9][10] |\n| **Found at** | `_ans-badge.{agentHost}` `TXT`, `_ans.{agentHost}` `TXT`, `{agentHost}` `SVCB` / `HTTPS`, `_{port}._tcp.{agentHost}` `TLSA`, RFC 9449 `DPoP` header, and `/v1/log/checkpoint`, `/tile/entries/*`, `/root-keys`, `/v1/agents/{agentId}` [2][8][9] |\n| **Licence** | IETF Trust provisions (`draft-narajala-courtney-ansv2-02`, `draft-narajala-ans-00`, `draft-dimare-ans-protocol-registry-00`); Apache-2.0 (`ans-registry`, `ans`) [2][4][11] |\n| **IETF state** | `draft-narajala-courtney-ansv2-02` · **Active Internet-Draft** (expires 2027-04-29) · Individual · as of 2026-10-30 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-narajala-courtney-ansv2/)) |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [Adoption and ecosystem](#adoption-and-ecosystem)\n4. [See also](#see-also)\n5. [References](#references)\n\n---\n\n## Problem and scope\n\nA relying party has no interoperable way to bind a discoverable agent endpoint to the holder of its domain (optionally verified as a legal entity), a specific software release, and an auditable issuance history. [2] A TLS server certificate names the hostname, which answers part of the first question. No interoperable record names the release running at the endpoint or its history. [2] ANS v2 composes systems the Internet already runs (the DNS with DNSSEC; the Web PKI, with DANE where operators publish it; and an append-only transparency log) and introduces no new root of trust. [2] This document does not define the wire format of discovery records (DNS-AID does), or the application protocols agents speak (MCP, A2A, and others). [2] ANS tells a verifier who an agent is; whether to trust or transact with that agent is the verifier's own decision, which a separate scoring service that reads ANS records can inform. [2] ANS-3 requires the discovery and trust records to sit in public DNS zones that any third party can query; a private zone or proprietary lookup channel does not conform. [2]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **DNS Security Extensions (DNSSEC, RFC 4033)** | `RFC 4033` | Profiles classic standard | ANS v2 uses a DNSSEC-signed domain and publishes default ANS_DNSAID SVCB records (with an opt-in _ans TXT profile) and _ans-badge TXT records alongside the transparency log at transparency.ans.godaddy.com. [2][12] |\n| **Certificate Transparency (RFC 6962)** | `RFC 6962` | Analogous to classic standard | ANS publishes agent registration in a transparency log referenced by _ans-badge TXT alongside DNS-AID SVCB records, while Certificate Transparency logs TLS certificates. [2][13] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[DNS-AID (DNS for AI Discovery, draft-nemethi-dawn-dnsaid)](/protocols/dns-aid/)** | Peer alternative | ANS keeps DNS-AID (draft-nemethi-dawn-dnsaid, succeeding draft-mozleywilliams-dnsop-dnsaid) SVCB discovery as the way to reach the agent and adds the _ans-badge TXT record and transparency log that DNS-AID does not define. [2][14] |\n| **[Agent Identity & Discovery (AID)](/protocols/aid/)** | Peer alternative | AID publishes discovery data in a DNS _agent TXT record, while ANS v2 binds the endpoint to the domain holder, a software release, and an _ans-badge transparency-log pointer. [2][15] |\n| **[SPIFFE (Secure Production Identity Framework for Everyone)](/protocols/spiffe/)** | Peer alternative | A SPIFFE ID is a spiffe:// URI carried in one X.509-SVID URI SAN or a JWT-SVID, while ANS v2 publishes default ANS_DNSAID SVCB and _ans-badge TXT records (plus opt-in _ans TXT) and a transparency log at transparency.ans.godaddy.com. [2][16] |\n| **[ERC-8004: Trustless Agents](/protocols/erc-8004/)** | Peer alternative | ERC-8004 identifies an agent with on-chain Identity and Reputation registries and /.well-known/agent-registration.json, while ANS identifies it with a DNSSEC domain, TXT records, and a transparency log. [2][17] |\n| **[Agent2Agent Protocol (A2A)](/protocols/a2a/)** | Complements | ANS v2 resolves the agent through default ANS_DNSAID SVCB records (or opt-in _ans TXT) and _ans-badge TXT before a relying party opens an A2A session with the advertised endpoint. [2][18] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (8 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).*\n\n### Issuers, signers & metadata publishers\n\n| Actor | Role | Status | Boundary & Format | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **GoDaddy Agent Identity** | Identity issuer / CA | Live (HTTP 200) · as of 2025-11-20 | ANS private CA signs identity certificates. The public log at transparency.ans.godaddy.com uses checkpoint format `c2sp-tlog/v1` and origin `transparency.ans.godaddy.com`. The ANS API has been live for builders since 2025-11-20. Since 2026-10 a Personal Access Token with ANS scopes can register and manage agents. The registry page still shows Publish Agent and Manage Agents as Coming Soon. The Nov. 10, 2026 Linux Foundation release lists GoDaddy among 11 organizations that have contributed to or adopted ANS. | [GoDaddy Agent Identity](https://www.godaddy.com/en/ans) [19] · [Log checkpoint](https://transparency.ans.godaddy.com/v1/log/checkpoint) [20] · [Linux Foundation, Nov. 10, 2026](https://www.linuxfoundation.org/press/linux-foundation-welcomes-agent-name-service-to-bring-verifiable-identity-and-discovery-to-ai-agents) [6][21] |\n| **helpagent.club registrants** | Bot / Agent signer | Live (HTTP 200) · as of 2026-10-28 | Log tile 1750 holds 256 registrations dated 2026-10-28, including Vetus Carta Rare Maps Customer Support Agent. Sample badge `_ans-badge.support-e4c874ed-305c-4f6e-bc10-579d7684160d.helpagent.club` is `v=ans-badge1; version=v1.0.0; url=https://transparency.ans.godaddy.com/v1/agents/a9ed929d-537b-421e-81ee-1e339153e83f`. Matching `_ans` TXT is `v=ans1; version=v1.0.0; p=a2a; mode=direct`. Twelve sampled hosts had the badge and `_ans` TXT on both resolvers, without DNSSEC. | [ANS log tile 1750](https://transparency.ans.godaddy.com/tile/entries/1750) [22] |\n| **concise.koopman.me** | Bot / Agent signer | Live (HTTP 200) · checked 2026-10-30 | Log tile 0 records agent host concise.koopman.me, name Concise Rewrite, version v1.0.0. Badge `_ra-badge.concise.koopman.me` is `v=ra-badge1; url=https://transparency.ans.godaddy.com/v1/agents/cb0f6ca3-b9a9-408f-8e0b-8605fa438773`. | [ANS log tile 0](https://transparency.ans.godaddy.com/tile/entries/000) [23] |\n| **drone-research-agent.dronecraft.co and bookagent.cloud** | Bot / Agent signer | Supported · as of 2026-10-29 | On 2026-10-29 both hosts still published an `_ans` TXT record and a DNSSEC-validated TLSA record, on both resolvers used in the check. | [ANS log tile 0](https://transparency.ans.godaddy.com/tile/entries/000) [23] · [ANS v2 draft](https://www.ietf.org/archive/id/draft-narajala-courtney-ansv2-02.txt) [2] |\n\n### Verifiers, WAFs & relying servers\n\n| Actor | Role | Status | Boundary & Format | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Salesforce MuleSoft Agent Fabric** | Explorer / Scanner | Supported · as of 2026-02-19 | GoDaddy's 2026-02-19 release says MuleSoft Agent Scanners pull verified agents from ANS into the MuleSoft Agent Registry, where they are reviewed and approved before they can reach enterprise systems. The Nov. 10, 2026 Linux Foundation release lists Salesforce among 11 organizations that have contributed to or adopted ANS. | [GoDaddy and MuleSoft](https://aboutus.godaddy.net/newsroom/news-releases/press-release-details/2026/GoDaddy-ANS-Integrates-with-Salesforces-MuleSoft-Agent-Fabric/default.aspx) [24] · [Linux Foundation, Nov. 10, 2026](https://www.linuxfoundation.org/press/linux-foundation-welcomes-agent-name-service-to-bring-verifiable-identity-and-discovery-to-ai-agents) [6] |\n| **agentnameservice verifier** | Verifier SDK / Runtime | Supported · checked 2026-10-30 | The ANS v2 draft says the open-source project includes a verifier beside the registry, transparency log, schemas, SDKs, and CLI. A verifier pins an agent to one log entry and one version. The badge it can fetch is a TXT record at `_ans-badge.{agentHost}` with `v=ans-badge1; version=v{version}; url={badgeURL}`. Identity certificates from the private CA are used for mTLS between agents. | [ANS v2 draft](https://www.ietf.org/archive/id/draft-narajala-courtney-ansv2-02.txt) [2] · [ans README](https://raw.githubusercontent.com/agentnameservice/ans/main/README.md) [9][10] |\n| **AGNTCY Agent Directory Service** | Directory verifier | Supported (release announcement) · as of 2026-11-10 | The AGNTCY Agent Directory Service, another Linux Foundation project, supports verification of ANS identities. | [Linux Foundation, Nov. 10, 2026](https://www.linuxfoundation.org/press/linux-foundation-welcomes-agent-name-service-to-bring-verifiable-identity-and-discovery-to-ai-agents) [6] |\n| **ANS Finder** | Discovery client | Supported (release announcement) · as of 2026-11-10 | ANS Finder implements the Agentic Resource Discovery (ARD) specification and passes its registry conformance tests. | [Linux Foundation, Nov. 10, 2026](https://www.linuxfoundation.org/press/linux-foundation-welcomes-agent-name-service-to-bring-verifiable-identity-and-discovery-to-ai-agents) [6] |\n\n### Ecosystem censuses\n\n- **Linux Foundation ANS launch announcement** (*as of 2026-11-10*): Eleven organizations are named in the November 10, 2026 Linux Foundation launch announcement as having contributed to or adopted ANS since June 2026: GoDaddy, Salesforce, Cisco, Cloudflare, DigiCert, DistributedApps.ai, HOL, Infoblox, Radix, OWASP, and Trustmodel.ai. [6]\n\n---\n\n## See also\n\n- **[Agent Discovery Protocol (ADP) v1.1](/protocols/adp/)** *(Peer alternative)* — ADP discovers a host and then reads a JSON descriptor, while ANS resolves the agent name with X.509 identity certificates and a C2SP transparency log.\n- **[DNS-Based Agent Naming](/protocols/dan/)** *(Peer alternative)* — DAN names agents with dedicated DNS RR types AIINDEX and AIDISCA validated with DNSSEC and DANE certificate associations, while ANS v2 uses DNS-AID SVCB records (or an opt-in _ans TXT profile) alongside X.509 certificates and a C2SP transparency log.\n- **[Agent Network Protocol](/protocols/anp/)** *(Complements)* — ANS v2 publishes agent names in DNS under _ans and _ra-badge labels, while ANP publishes the agent description at /.well-known/agent-descriptions and uses did:wba agents in ANP-10.\n- **[Eclipse LMOS (Language Model Operating System)](/protocols/lmos/)** *(Complements)* — ANS names agents with DNS records, while LMOS retrieves W3C WoT Thing Descriptions over HTTP via TDDs, mDNS, DNS-SD, or well-known URLs.\n- **[GB/Z 185 Artificial intelligence — Agent interconnection](/protocols/gbz-185-agent-interconnection/)** *(Peer alternative)* — ANS v2 publishes an _ans TXT record in DNS as a connection hint for the protocol an agent supports and where to find its metadata. GB/Z 185 specifies discovery by a discovery service or by preset information.\n- **[Agent Registration and Discovery Protocol](/protocols/ardp/)** *(Peer alternative)* — ARDP advertises registrar metadata at /.well-known/ardp/meta and registers soft-state bindings with REGISTER, while ANS v2 publishes agent identity in DNS-AID SVCB records (with an opt-in _ans TXT profile), X.509 certificates, and a C2SP transparency log.\n- **[Agent Identity Protocol (AIP)](/protocols/aip/)** *(Peer alternative)* — ANS anchors the name in _ans-badge and _ans TXT records under DNSSEC, while AIP anchors it in a did:aip document and a capability-credential chain.\n- **[The Agent Identity Document: A Hosted, Accountable Public Record for AI Agents](/protocols/agent-identity-document/)** *(Peer alternative)* — ANS publishes DNSSEC-anchored _ans TXT records and a transparency log, while the Agent Identity Document is a single JSON file at /.well-known/agent-identity.json.\n- **Category:** [Identify protocols](/category/identify/)\n\n---\n\n## References\n\n1. Scott Courtney, Vineeth Sai Narajala, Ken Huang, Idan Habler, and Akram Sheriff, *draft-narajala-courtney-ansv2 — Agent Name Service v2 (ANS): A Domain-Anchored Identity Layer for Autonomous AI Agents (IETF Datatracker)* (checked 2026-10-30) — <https://datatracker.ietf.org/doc/draft-narajala-courtney-ansv2/>\n2. S. Courtney (GoDaddy), V. S. Narajala (OWASP), K. Huang (DistributedApps.ai), I. Habler (OWASP), and A. Sheriff (Cisco Systems), *Agent Name Service v2 (ANS): A Domain-Anchored Identity Layer for Autonomous AI Agents (draft-narajala-courtney-ansv2-02)* (checked 2026-10-30) — <https://www.ietf.org/archive/id/draft-narajala-courtney-ansv2-02.txt>\n3. IETF Datatracker API, *IETF Datatracker document record for draft-narajala-courtney-ansv2* (fetched 2026-10-30) — <https://datatracker.ietf.org/api/v1/doc/document/draft-narajala-courtney-ansv2/?format=json>\n4. K. Huang (DistributedApps.ai), V. S. Narajala (AWS), I. Habler (Intuit), and A. Sheriff (Cisco Systems), *Agent Name Service (ANS): A Universal Directory for Secure AI Agent Discovery and Interoperability (draft-narajala-ans-00)* (checked 2026-10-30) — <https://www.ietf.org/archive/id/draft-narajala-ans-00.txt>\n5. orgs/agentnameservice (GitHub), *agentnameservice — GitHub Organization API* (checked 2026-10-30) — <https://github.com/agentnameservice>\n6. The Linux Foundation, *Linux Foundation Welcomes Agent Name Service to Bring Verifiable Identity and Discovery to AI Agents* (published 10 November 2026; fetched 2026-11-11) — <https://www.linuxfoundation.org/press/linux-foundation-welcomes-agent-name-service-to-bring-verifiable-identity-and-discovery-to-ai-agents>\n7. IETF Datatracker API, *Revision events for draft-narajala-courtney-ansv2 (IETF Datatracker API)* (checked 2026-10-29) — <https://datatracker.ietf.org/api/v1/doc/newrevisiondocevent/?doc__name=draft-narajala-courtney-ansv2&format=json&limit=50>\n8. S. Courtney (GoDaddy), V. S. Narajala (OWASP), K. Huang (DistributedApps.ai), I. Habler (OWASP), and A. Sheriff (Cisco Systems), *Agent Name Service v2 (ANS): A Domain-Anchored Trust Layer for Autonomous AI Agent Identity (draft-narajala-courtney-ansv2-01)* (historical revision (checked 2026-10-30)) — <https://www.ietf.org/archive/id/draft-narajala-courtney-ansv2-01.txt>\n9. Agent Name Service Project (agentnameservice/ans), *ans — Agent Name Service Reference Implementation (README.md)* (checked 2026-10-29) — <https://raw.githubusercontent.com/agentnameservice/ans/main/README.md>\n10. agentnameservice/ans-registry, *spec/ans-3-dns-publication.md* (checked 2026-10-29) — <https://raw.githubusercontent.com/agentnameservice/ans-registry/main/spec/ans-3-dns-publication.md>\n11. J. DiMare, *An IANA Registry for Agent Name Service (ANS) Protocol Identifiers (draft-dimare-ans-protocol-registry-00)* (checked 2026-10-29) — <https://www.ietf.org/archive/id/draft-dimare-ans-protocol-registry-00.txt>\n12. R. Arends, R. Austein, M. Larson, D. Massey, and S. Rose, *RFC 4033: DNS Security Introduction and Requirements* (March 2005) — <https://www.rfc-editor.org/rfc/rfc4033.html>\n13. B. Laurie, A. Langley, and E. Kasper, *RFC 6962: Certificate Transparency* (June 2013) — <https://www.rfc-editor.org/rfc/rfc6962.html>\n14. J. Mozley and N. Williams (Infoblox), B. Sarikaya, R. Schott (Deutsche Telekom), and J. Damick (Amazon), *draft-mozleywilliams-dnsop-dnsaid — DNS for AI Discovery (IETF Datatracker; succeeded by draft-nemethi-dawn-dnsaid)* (checked 2026-10-29) — <https://datatracker.ietf.org/doc/draft-mozleywilliams-dnsop-dnsaid/>\n15. Agent Community (Open Agent Registry, Inc.), *Agent Identity & Discovery (AID) - v2.1.1 Specification* (2026-10-02 (fetched 2026-10-30)) — <https://aid.agentcommunity.org/docs/specification>\n16. SPIFFE, *SPIFFE ID* (checked 2026-10-30) — <https://github.com/spiffe/spiffe/blob/main/standards/SPIFFE-ID.md>\n17. Marco De Rossi, Davide Crapis, Jordan Ellis, and Erik Reppel, *ERCS/erc-8004.md (Trustless Agents)* (created 2025-08-13; fetched 2026-10-30) — <https://raw.githubusercontent.com/ethereum/ERCs/master/ERCS/erc-8004.md>\n18. Agentic AI Foundation, *A2A joins AAIF's open agentic stack* (published 2026-08-17; modified 2026-09-24) — <https://aaif.io/blog/a2a-joins-aaif>\n19. GoDaddy, *Agent Identity* (checked 2026-10-29) — <https://www.godaddy.com/en/ans>\n20. GoDaddy ANS Transparency Log, *v1/log/checkpoint* (checked 2026-10-29) — <https://transparency.ans.godaddy.com/v1/log/checkpoint>\n21. GoDaddy Developers Changelog, *ANS scopes for Personal Access Tokens* (checked 2026-10-29) — <https://developer.godaddy.com/en/docs/api-users/changelog/ans-pat-scopes>\n22. GoDaddy ANS Transparency Log, *tile/entries/1750* (checked 2026-10-29) — <https://transparency.ans.godaddy.com/tile/entries/1750>\n23. GoDaddy ANS Transparency Log, *tile/entries/000* (checked 2026-10-29) — <https://transparency.ans.godaddy.com/tile/entries/000>\n24. GoDaddy, *GoDaddy ANS Integrates with Salesforce's MuleSoft Agent Fabric* (checked 2026-10-29) — <https://aboutus.godaddy.net/newsroom/news-releases/press-release-details/2026/GoDaddy-ANS-Integrates-with-Salesforces-MuleSoft-Agent-Fabric/default.aspx>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "AID",
   "adoption": {
    "level": "observed",
    "by": "@agentcommunity/aid, aid-discovery, and @agentcommunity/aid-doctor",
    "probe_run": null
   },
   "aliases": [
    "Agent Interface Discovery"
   ],
   "analog": "a DNS SRV/TXT record for agents, with a TLS-certificate-like endpoint proof bolted on",
   "collisions": [
    "DNS-AID (separate Internet-Draft that publishes agents with SVCB records and DNS-SD labels)",
    "KERI Autonomic Identifier (AID)"
   ],
   "discovery": {
    "mechanism": "DNS TXT at _agent.<domain>, exact host only: \"Clients MUST NOT walk up to parent domains.\" If DNS fails, clients may fetch /.well-known/agent over HTTPS on the same host",
    "path": "DNS TXT at _agent.<domain>, exact host only: \"Clients MUST NOT walk up to parent domains.\" If DNS fails, clients may fetch /.well-known/agent over HTTPS on the same host"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://aid.agentcommunity.org/docs/specification",
     "claim": "Agent Community (Open Agent Registry, Inc.), *Agent Identity & Discovery (AID) - v2.1.1 Specification*, 2026-10-02 (fetched 2026-10-30)",
     "date": null,
     "quote": "Agent Identity & Discovery (AID) answers one question: \"Given a domain, where is the agent and which protocol should I speak?\" It does so with a DNS TXT record at the well-known base name _agent.<domain>. / Date: 2 October 2026 Editor: Agent Community Status: Current normative specification / AID v2 is the current default wire format. The aid2 record keeps DNS-first discovery, makes the base _agent.<domain> lookup canonical, and updates endpoint proof so the DNS key is an Ed25519 JWK x value with an RFC 7638 derived key identifier. Legacy aid1 remains a compatibility format for clients that need to read older records. / Specification | Agent Identity & Discovery {\"@context\":\"https://schema.org\",\"@type\":\"Organization\",\"name\":\"Open Agent Registry, / Specification | Agent Identity & Discovery / AID is an intentionally minimal discovery layer. After a client uses AID to find the correct endpoint or package, richer protocols such as the Model Context Protocol (MCP), Agent-to-Agent Protocol (A2A), OpenAPI, OAuth, or auth.md take over for communication, capability negotiation, authentication, and authorization. / Scope honesty: AID does not issue credentials, grant authorization, prove human approval, define SPIFFE/WIMSE federation, or publish DID-like metadata.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://www.ietf.org/archive/id/draft-nemethi-dawn-aid-00.txt",
     "claim": "B. Nemethi (Open Agent Registry, Inc.), *Agent Identity and Discovery (AID) (draft-nemethi-dawn-aid-00)*, 2026-09-02 (fetched 2026-10-30)",
     "date": null,
     "quote": "Network Working Group B. Nemethi, Ed. Internet-Draft Open Agent Registry, Inc. Intended status: Informational 2 September 2026 Expires: 6 March 2027 Agent Identity and Discovery (AID) draft-nemethi-dawn-aid-00 / This document defines the AID v2 (aid2) record format, client discovery algorithm, exact-host lookup rules, endpoint-proof (PKA) handshake using Ed25519 HTTP Message Signatures, security requirements, and IANA registrations for the _agent DNS node name and the agent service name. / The record MUST be a single semicolon-delimited string of key=value pairs. / Query the TXT record at _agent.. The client MUST NOT walk up the DNS hierarchy. / 8. If k is present, the client MUST perform the endpoint-proof procedure in Appendix A. 9. For aid2 records, clients SHOULD request domain binding by sending the AID-Domain header / If no DNS record is found or the DNS lookup fails, the client MAY attempt the.well-known fallback on the same exact host; see Appendix B. / [RFC-NEMETHI-AID-00] Nemethi, B., \"Agent Identity and Discovery (AID)\", Work in Progress, Internet-Draft, draft-nemethi-aid-agent- identity-discovery-00, March 2026 / Network Working Group B. Nemethi, Ed. Internet-Draft Open Agent Registry, Inc. Intended status: Informational / up the DNS hierarchy. 3. Parse the TXT answer set as semicolon-delimited `key=value` records. / for auth and proto tokens are maintained as machine-readable constants at https://github.com/agentcommunity/agent-identity-discovery (https://github.com/agentcommunity/agent-identity-discovery), generated / uses a TXT record at the well-known DNS name \\_agent.. The record is small, / Agent Identity and Discovery (AID) answers one question: given a domain, where is the agent and which protocol should a client speak? An AID client queries a DNS TXT record at the well-known subdomain _agent. and learns the service endpoint URI, protocol token, authentication hint, and optional metadata for that agent. / Because the response signature binds only the endpoint's own request context, any domain can publish a record containing another operator's endpoint URI and public key, and the endpoint proof still verifies. This unauthorized-association gap does not let the publishing domain impersonate the endpoint, but it falsely implies a relationship between the domain and the endpoint. / Clients that support aid2 SHOULD prefer aid2 over aid1. Within the selected version, if exactly one valid record exists, use it. If more than one valid record exists, the client MUST fail due to ambiguity; clients MUST NOT choose among multiple valid same-version records by DNS answer order. / A proof is domain-bound if and only if its signed covered set includes the \"aid-domain\";req component, positioned strictly between \"@authority\";req and \"@status\". / AID v2 core does not define DNS-level cryptographic key rotation.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://aid.agentcommunity.org/docs/reference/versioning",
     "claim": "Agent Community, *Versioning and Changelog — Agent Identity & Discovery*, fetched 2026-10-30",
     "date": null,
     "quote": "No change to record format or client behavior. / Discovery\\\\\\\",\\\\\\\"url\\\\\\\":\\\\\\\"https://aid.agentcommunity.org\\\\\\\",\\\\\\\"description\\\\\\\":\\\\\\\"DNS-first agent discovery and identity for the agentic / an AID TXT record (for example, v=aid2) signifies the major version of the specification / proof via HTTP Message Signatures (RFC 9421) Key aliases: Single-letter aliases for all TXT",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://github.com/agentcommunity/agent-identity-discovery",
     "claim": "Agent Community, *agentcommunity/agent-identity-discovery GitHub Repository*, created 2025-07-05; fetched 2026-10-30",
     "date": null,
     "quote": "\"created_at\": \"2025-07-05T13:08:18Z\", \"updated_at\": \"2026-10-13T17:00:28Z\", \"pushed_at\": \"2026-10-02T12:13:54Z\", \"git_url\": \"git://github.com/agentcommunity/agent-identity-discovery.git\", \"ssh_url\": / aid \"github.com/agentcommunity/agent-identity-discovery/packages/aid-go/v2\" ) func main() { record, ttl, err:= aid.Discover(\"supabase.agentcommunity.org\", 5*time.Second) if err!= nil / \"forks_count\": 8, \"mirror_url\": null, \"archived\": false, \"disabled\": false, \"open_issues_count\": 7, \"license\": { \"key\": \"other\", / This project is licensed under the MIT License",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://github.com/agentcommunity",
     "claim": "GitHub API, *agentcommunity organization metadata*, created 2025-06-12; fetched 2026-10-30",
     "date": null,
     "quote": "\"https://avatars.githubusercontent.com/u/216014080?v=4\", \"description\": \".agent TLD community \", \"name\": \".agent community\", \"company\": null, \"blog\": \"https://agentcommunity.org/\", \"location\":",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://datatracker.ietf.org/doc/draft-nemethi-dawn-aid/",
     "claim": "IETF Datatracker, *draft-nemethi-dawn-aid-00 — Agent Identity and Discovery (AID)*, 2026-09-02 (fetched 2026-10-30)",
     "date": null,
     "quote": "# Agent Identity and Discovery (AID) draft-nemethi-dawn-aid-00 * Status * Email expansions * History",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://github.com/agentcommunity/agent-identity-discovery/tags",
     "claim": "GitHub API, *agentcommunity/agent-identity-discovery tags*, fetched 2026-10-30",
     "date": null,
     "quote": "[ { \"name\": \"packages/aid-go/v2.1.1\", \"zipball_url\": \"https://api.github.com/repos/agentcommunity/agent-identity-discovery/zipball/refs/tags/packages/aid-go/v2.1.1\", \"tarball_url\": / \"name\":\"packages/aid-go/v2.1.1\"",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://registry.npmjs.org/@agentcommunity/aid",
     "claim": "npm Registry (Agent Community), *@agentcommunity/aid package metadata*, 2.1.1 published 2026-07-25; fetched 2026-10-30",
     "date": null,
     "quote": "include Cache-Control: no-store.\\n- Domain binding: the client sends the queried host in the AID-Domain / Discovery (AID) - DNS-based discovery protocol for AI agents\",\"maintainers\":[{\"name\":\"nembal\",\"email\":\"[email redacted]\"}],\"readme\":\"# @agentcommunity/aid\\n\\n# Agent Identity & Discovery\\n\\n>",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://raw.githubusercontent.com/agentcommunity/agent-identity-discovery/main/LICENSE",
     "claim": "Agent Community, *agentcommunity/agent-identity-discovery LICENSE (MIT / Apache-2.0)*, fetched 2026-10-30",
     "date": null,
     "quote": "This project is dual-licensed under the MIT License and the Apache License 2.0. You may choose either license at your option.",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://www.rfc-editor.org/rfc/rfc9460.html",
     "claim": "IETF, *RFC 9460: Service Binding and Parameter Specification via the DNS (SVCB and HTTPS Resource Records)*, IETF RFC",
     "date": null,
     "quote": "This document specifies the \"SVCB\" (\"Service Binding\") and \"HTTPS\" DNS resource record (RR)",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://www.rfc-editor.org/rfc/rfc8615.html",
     "claim": "IETF, *RFC 8615: Well-Known Uniform Resource Identifiers (URIs)*, IETF RFC",
     "date": null,
     "quote": "This memo defines a path prefix for \"well-known locations\",",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://www.rfc-editor.org/rfc/rfc9421.html",
     "claim": "IETF, *RFC 9421: HTTP Message Signatures*, IETF RFC",
     "date": null,
     "quote": "<meta content=\"Common,Latin\" name=\"scripts\">",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://www.ietf.org/archive/id/draft-mozleywilliams-dawn-dnsaid-00.txt",
     "claim": "J. Mozley, N. Williams, B. Sarikaya, R. Schott, J. Damick, and S. Courtney, *DNS for AI Discovery (draft-mozleywilliams-dawn-dnsaid-00)*, 2026-11-02 (fetched 2026-11-07)",
     "date": null,
     "quote": "This document specifies DNS for AI Discovery (DNS-AID), a method for",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://datatracker.ietf.org/doc/rfc9421/",
     "claim": "IETF Datatracker, *HTTP Message Signatures (RFC 9421)*, Proposed Standard (February 2024); checked 2026-10-30",
     "date": null,
     "quote": "RFC - Proposed Standard (February 2024)",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://agenticresourcediscovery.org/spec/",
     "claim": "Agentic Resource Discovery (ARD), *ARD Specification*, fetched 2026-10-30",
     "date": null,
     "quote": "Version: v0.91 Status: Proposal Date: August 26, 2026",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://datatracker.ietf.org/doc/draft-narajala-courtney-ansv2/",
     "claim": "Scott Courtney, Vineeth Sai Narajala, Ken Huang, Idan Habler, and Akram Sheriff, *draft-narajala-courtney-ansv2 — Agent Name Service v2 (ANS): A Domain-Anchored Identity Layer for Autonomous AI Agents (IETF Datatracker; HTML overview snapshot at -01 'Trust Layer')*, draft-narajala-courtney-ansv2-02 posted 2026-10-26 (HTML overview snapshot 2026-10-15)",
     "date": null,
     "quote": "Document Type Active Internet-Draft (individual) Authors Scott Courtney, Vineeth Sai Narajala, Ken Huang, Idan Habler, Akram Sheriff Last updated 2026-10-26 Replaces draft-narajala-ans RFC stream (None) Intended RFC status (None)",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://datatracker.ietf.org/doc/draft-pro-adp-agent-discovery/",
     "claim": "Bin Lian (aipair.ai) and IETF Datatracker, *draft-pro-adp-agent-discovery — Agent Discovery Protocol (ADP) v1.1 -- Well-Known Metadata and Interaction Layer (IETF Datatracker)*, checked 2026-10-30",
     "date": null,
     "quote": "Search email archive draft-pro-adp-agent-discovery-02 ``` Abstract Status of This MemoLian Expires 20 December 2026",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://aid.agentcommunity.org/docs/reference/packages",
     "claim": "Agent Community, *SDKs and Packages — Agent Identity & Discovery*, fetched 2026-10-30",
     "date": null,
     "quote": "window. Packages Package Purpose Language @agentcommunity/aid Main discovery SDK for Node.js and browser clients / @agentcommunity/aid-doctor CLI for record generation, validation, diagnostics, and PKA helpers Node.js aid-discovery Python discovery",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://pypi.org/pypi/aid-discovery/json",
     "claim": "PyPI (Agent Community), *aid-discovery package metadata*, 2.1.1 uploaded 2026-07-25; fetched 2026-10-30",
     "date": null,
     "quote": "Python library for Agent Identity & Discovery (AID), a DNS-based discovery protocol for AI agents",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://registry.npmjs.org/@agentcommunity/aid-doctor",
     "claim": "npm Registry (Agent Community), *@agentcommunity/aid-doctor package metadata*, 2.1.1 published 2026-07-25; fetched 2026-10-30",
     "date": null,
     "quote": "\"name\":\"@agentcommunity/aid-doctor\",\"dist-tags\":{\"latest\":\"2.1.1\"}",
     "ref": 20
    }
   ],
   "form": "dns-record",
   "governance": "Agent Community as an open-source project; the specification lists \"Date: 2 October 2026 Editor: Agent Community Status: Current normative specification\". On naming: \"Label governance is separate from the v2 key-format and endpoint-proof updates, and may be addressed by a future working group or BoF process.\". No standards body has adopted AID: the IETF drafts are individual submissions, and the Datatracker says \"The draft is not endorsed by the IETF and has no formal standing in the IETF standards process\". The _agent label is not in IANA's Underscored and Globally Scoped DNS Node Names registry (checked 2026-10-28). Licence: the LICENSE file says \"This project is dual-licensed under the MIT License and the Apache License 2.0. You may choose either license at your option.\"; the README says \"This project is licensed under the MIT License\", and GitHub detects no licence",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against AID v2.1.0 spec text via raw.githubusercontent.com"
    },
    {
     "date": "2026-10-28",
     "note": "Verified specification record (v2.1.1, 27 sources)"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "aid",
   "implementation": "shipping",
   "last_verified": "2026-11-12",
   "name": "Agent Identity & Discovery (AID)",
   "native_status": "\"Date: 2 October 2026 Editor: Agent Community Status: Current normative specification\". Internet-Drafts: draft-nemethi-dawn-aid-00 (2026-09-02, active); draft-nemethi-aid-agent-identity-discovery-00 (2026-03-16, v1.2, expired)",
   "origin": {
    "date": "2025-07-05",
    "org": "Agent Community"
   },
   "part_of": null,
   "parties": [
    "agent-site",
    "agent-agent"
   ],
   "phase": "living",
   "probe": {
    "method": "GET",
    "on_absent": "No well-known fallback; query DNS TXT at _agent.{domain} directly (not curl-executable) -- absence of both means the domain does not publish AID",
    "parse": "200 response is JSON mirroring the v2 TXT record keys (version, uri, proto, auth, ...); trustSource is reported as well-known-tls rather than dns for this path",
    "path": "https://{origin}/.well-known/agent"
   },
   "question": "Given a domain, where is the agent and which protocol should I speak, with cryptographic proof the endpoint controls the matching key?",
   "scope": "general",
   "spec_url": "https://aid.agentcommunity.org/docs/specification",
   "step": "discover",
   "summary_md": "**Agent Identity & Discovery** (`AID`) is the Agent Community's current normative specification (`v2.1.1`, dated 2 October 2026) that answers, given a domain, where the agent is and which protocol a client should speak using a DNS `TXT` record at the well-known base name `_agent.<domain>`. B. Nemethi of Open Agent Registry, Inc. also publishes the specification as Informational Internet-Draft `draft-nemethi-dawn-aid-00` (dated 2 September 2026), defining the `aid2` record format, client discovery algorithm, exact-host lookup rules, and endpoint-proof (`PKA`) handshake using `Ed25519` HTTP Message Signatures. A provider MUST advertise its agent service by publishing a single semicolon-delimited `key=value` `TXT` record at `_agent` carrying required `v` (`v=aid2`), `u`, and `p` tokens alongside optional `a`, `s`, `d`, `e`, and `k` fields; clients query that exact name and MUST NOT walk up the DNS hierarchy. When `k` is present, the client MUST perform the `PKA` endpoint-proof procedure over `Ed25519` HTTP Message Signatures (`tag=\"aid-pka-v2\"`) and SHOULD send the `AID-Domain` header; if no DNS record is found or the DNS lookup fails, the client MAY attempt the `/.well-known/agent` JSON fallback on the same exact host. AID `v2` (`v=aid2`) is the current default wire format, making the base `_agent.<domain>` lookup canonical and updating endpoint proof so the DNS key is an `Ed25519` JWK `x` value with an RFC 7638 derived key identifier, while retaining legacy `aid1` as a compatibility format. The earlier v1.2 Internet-Draft `draft-nemethi-aid-agent-identity-discovery-00` (dated 16 March 2026) is succeeded by `draft-nemethi-dawn-aid-00` (dated 2 September 2026, expiring 6 March 2027), while the `v2.1.1` changelog notes no change to the record format or client behavior.",
   "track": "community",
   "version": {
    "date": "2026-10-02",
    "label": "v2.1.1"
   },
   "watch": [
    {
     "type": "github",
     "repo": "agentcommunity/agent-identity-discovery",
     "mode": "release",
     "version": false
    }
   ],
   "use_cases": [
    "discover-my-api",
    "describe-agent-capabilities",
    "prove-agent-identity",
    "agent-naming"
   ],
   "audience": [
    "agent-builder",
    "platform",
    "site-owner"
   ],
   "pairs_with": [
    "dns-aid",
    "http-message-signatures",
    "ard",
    "ans",
    "adp"
   ],
   "prerequisites": [
    "http-message-signatures"
   ],
   "hatnote_md": "This page is about Agent Identity & Discovery (AID), the Agent Community specification that tells a client, given a domain, where that domain's agent is and which protocol to speak, using a DNS TXT record at _agent.<domain>. The GitHub repository describes the project as \"Agent Interface Discovery\". It is not DNS for AI Discovery (DNS-AID), a separate Internet-Draft that publishes agents with SVCB records and DNS-SD labels; see [DNS for AI Discovery (DNS-AID)](/protocols/dns-aid/). It is not the KERI Autonomic Identifier (AID), a self-certifying identifier in the Key Event Receipt Infrastructure. For catalogs of agentic resources at /.well-known/ard.json, see [Agentic Resource Discovery (ARD)](/protocols/ard/).",
   "tier": "spec_brief",
   "lifecycle_status": "active",
   "wire_archetype": "web_discovery",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "This page is about Agent Identity & Discovery (AID), the Agent Community specification that tells a client, given a domain, where that domain's agent is and which protocol to speak, using a DNS TXT record at `_agent.<domain>`. The GitHub repository describes the project as \"Agent Interface Discovery\". It is not DNS for AI Discovery (DNS-AID), a separate Internet-Draft that publishes agents with SVCB records and DNS-SD labels; see [DNS for AI Discovery (DNS-AID)](/protocols/dns-aid/). It is not the KERI Autonomic Identifier (AID), a self-certifying identifier in the Key Event Receipt Infrastructure. For catalogs of agentic resources at /.well-known/ard.json, see [Agentic Resource Discovery (ARD)](/protocols/ard/). [1]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Agent Identity & Discovery** (`AID`) is the Agent Community's current normative specification (`v2.1.1`, dated 2 October 2026) that answers, given a domain, where the agent is and which protocol a client should speak using a DNS `TXT` record at the well-known base name `_agent.<domain>`. [1] B. Nemethi of Open Agent Registry, Inc. also publishes the specification as Informational Internet-Draft `draft-nemethi-dawn-aid-00` (dated 2 September 2026), defining the `aid2` record format, client discovery algorithm, exact-host lookup rules, and endpoint-proof (`PKA`) handshake using `Ed25519` HTTP Message Signatures. [2] A provider MUST advertise its agent service by publishing a single semicolon-delimited `key=value` `TXT` record at `_agent` carrying required `v` (`v=aid2`), `u`, and `p` tokens alongside optional `a`, `s`, `d`, `e`, and `k` fields; clients query that exact name and MUST NOT walk up the DNS hierarchy. [2] When `k` is present, the client MUST perform the `PKA` endpoint-proof procedure over `Ed25519` HTTP Message Signatures (`tag=\"aid-pka-v2\"`) and SHOULD send the `AID-Domain` header; if no DNS record is found or the DNS lookup fails, the client MAY attempt the `/.well-known/agent` JSON fallback on the same exact host. [2] AID `v2` (`v=aid2`) is the current default wire format, making the base `_agent.<domain>` lookup canonical and updating endpoint proof so the DNS key is an `Ed25519` JWK `x` value with an RFC 7638 derived key identifier, while retaining legacy `aid1` as a compatibility format. [1] The earlier v1.2 Internet-Draft `draft-nemethi-aid-agent-identity-discovery-00` (dated 16 March 2026) is succeeded by `draft-nemethi-dawn-aid-00` (dated 2 September 2026, expiring 6 March 2027), while the `v2.1.1` changelog notes no change to the record format or client behavior. [2][3]",
   "v05_identity_sentence_md": "**Agent Identity & Discovery** (`AID`) is the Agent Community's current normative specification (`v2.1.1`, dated 2 October 2026) that answers, given a domain, where the agent is and which protocol a client should speak using a DNS `TXT` record at the well-known base name `_agent.<domain>`. [1] B. Nemethi of Open Agent Registry, Inc. also publishes the specification as Informational Internet-Draft `draft-nemethi-dawn-aid-00` (dated 2 September 2026), defining the `aid2` record format, client discovery algorithm, exact-host lookup rules, and endpoint-proof (`PKA`) handshake using `Ed25519` HTTP Message Signatures. [2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Discover](/category/discover/) (`discover`)"
    },
    {
     "label": "Form",
     "value_md": "DNS record (`dns-record`)"
    },
    {
     "label": "Originated by",
     "value_md": "Balázs Nemethi (Agent Community, Open Agent Registry, Inc.) and `.agent community` (`2025-06-12` org; `2025-07-05` repo) [4][5]"
    },
    {
     "label": "Governed by",
     "value_md": "Agent Community (`Open Agent Registry, Inc.`); submitted to the IETF as an individual Informational Internet-Draft (`draft-nemethi-dawn-aid-00`) [1][2][6]"
    },
    {
     "label": "Track",
     "value_md": "Community specification (Agent Community v2.1.1) and individual IETF Internet-Draft (Informational, `draft-nemethi-dawn-aid-00`) [1][2]"
    },
    {
     "label": "Status",
     "value_md": "\"Date: 2 October 2026 Editor: Agent Community Status: Current normative specification\". Internet-Drafts: draft-nemethi-dawn-aid-00 (2026-09-02, active); draft-nemethi-aid-agent-identity-discovery-00 (2026-03-16, v1.2, expired) [1][3][7]"
    },
    {
     "label": "Version",
     "value_md": "Specification `v2.1.1` (`2026-10-02`, `v=aid2`); `draft-nemethi-dawn-aid-00` (`2026-09-02`, expires `2027-03-06`); npm/PyPI SDKs `2.1.1` (`2026-07-25`) [1][3][7]"
    },
    {
     "label": "Wire format",
     "value_md": "Semicolon-delimited `key=value` DNS `TXT` payload (`v=aid2` default; `v=aid1` legacy), RFC 9421 Structured Fields (`Accept-Signature`, `Signature-Input`, `Signature`), and JSON fallback [1][2][3]"
    },
    {
     "label": "Specification",
     "value_md": "[AID v2.1.1 Specification](https://aid.agentcommunity.org/docs/specification) · [draft-nemethi-dawn-aid-00.txt](https://www.ietf.org/archive/id/draft-nemethi-dawn-aid-00.txt) · [IETF Datatracker](https://datatracker.ietf.org/doc/draft-nemethi-dawn-aid/) · [GitHub Monorepo](https://github.com/agentcommunity/agent-identity-discovery) [1][2][6]"
    },
    {
     "label": "Found at",
     "value_md": "DNS `TXT` at `_agent.<domain>` (TTL `300`–`900` s), optional `_agent._<proto>.<domain>`, `/.well-known/agent`, and `AID-Domain` / `Accept-Signature` / `Cache-Control: no-store` (legacy `AID-Challenge`) [1][2][8]"
    },
    {
     "label": "Licence",
     "value_md": "Dual MIT / Apache-2.0 (`LICENSE`); `README` and npm/PyPI declare `MIT`; IETF drafts under BCP 78 [4][9]"
    }
   ],
   "v05_problem_md": "Without a DNS record at a fixed subdomain, a client given only a domain has no single lookup that returns the service endpoint URI, protocol token, and authentication hint. [2] Moreover, when a response signature binds only the endpoint's own request context, any domain can publish another operator's endpoint URI and public key (`k`), creating an unauthorized-association gap that falsely implies a relationship. [2] An AID client queries `_agent` without walking parent domains, partitions valid records by major version, prefers `aid2` over `aid1`, and MUST fail due to ambiguity if multiple valid records exist in the selected version. [2] When `k` is present, the client verifies an `Ed25519` HTTP Message Signature (`tag=\"aid-pka-v2\"`) with an RFC 7638 thumbprint `keyid`, and SHOULD send `AID-Domain` so the endpoint covers `\"aid-domain\";req` to prove consent. [2] After AID locates the endpoint or package, protocols such as MCP, A2A, OpenAPI, OAuth, or `auth.md` handle communication, capability negotiation, authentication, and authorization. [1] AID does not issue credentials, grant authorization, prove human approval, define SPIFFE/WIMSE federation, publish DID-like metadata, become Web Bot Auth, or define DNS-level cryptographic key rotation. [1][2]",
   "v05_mechanism_delta_md": "An AID client queries `_agent` without walking parent domains, partitions valid records by major version, prefers `aid2` over `aid1`, and MUST fail due to ambiguity if multiple valid records exist in the selected version. [2] When `k` is present, the client verifies an `Ed25519` HTTP Message Signature (`tag=\"aid-pka-v2\"`) with an RFC 7638 thumbprint `keyid`, and SHOULD send `AID-Domain` so the endpoint covers `\"aid-domain\";req` to prove consent. [2]",
   "v05_scope_boundary_md": "After AID locates the endpoint or package, protocols such as MCP, A2A, OpenAPI, OAuth, or `auth.md` handle communication, capability negotiation, authentication, and authorization. [1] AID does not issue credentials, grant authorization, prove human approval, define SPIFFE/WIMSE federation, publish DID-like metadata, become Web Bot Auth, or define DNS-level cryptographic key rotation. [1][2]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "DNS SRV & SVCB Records (RFC 2782 / RFC 9460)",
      "spec_or_rfc": "RFC 2782 / RFC 9460",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "AID publishes a DNS TXT record at the exact owner name `_agent.<domain>`, carrying an endpoint, a protocol, an authentication hint, and an optional Ed25519 key, and clients must not walk to parent domains, whereas RFC 9460 SVCB does not define that TXT name. [1][10]"
     },
     {
      "name": "Well-Known URIs (RFC 8615)",
      "spec_or_rfc": "RFC 8615",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "If the TXT lookup fails, AID allows a fallback GET of /.well-known/agent on that same host, a well-known URI RFC 8615 does not register. [1][11]"
     },
     {
      "name": "HTTP Message Signatures (RFC 9421)",
      "spec_or_rfc": "RFC 9421",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "When the TXT record includes an Ed25519 key, AID's endpoint proof is an HTTP message signature over the discovery response, applying RFC 9421, which does not define the _agent TXT publication. [1][12]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "dns-aid",
      "target_name": "DNS-AID (DNS for AI Discovery)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "AID uses TXT at `_agent.<domain>`, with an optional Ed25519 key, plus optional /.well-known/agent, while DNS-AID uses SVCB owner names and `_index._agents.<domain>`. [1][13]"
     },
     {
      "target_id": "http-message-signatures",
      "target_name": "HTTP Message Signatures",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "AID requires an HTTP message signature as the proof that the endpoint holds the Ed25519 key from the TXT record, while HTTP Message Signatures defines those fields for any HTTP message. [1][14]"
     },
     {
      "target_id": "ard",
      "target_name": "Agentic Resource Discovery (ARD)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "AID's HTTPS fallback path is /.well-known/agent, while ARD's required manifest is /.well-known/ard.json. [1][15]"
     },
     {
      "target_id": "ans",
      "target_name": "Agent Name Service v2 (ANS)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "AID publishes the record in the zone's own DNS and proves the HTTPS endpoint with a message signature, while ANS resolves the name through dual certificates and a SCITT transparency log. [1][16]"
     },
     {
      "target_id": "adp",
      "target_name": "Agent Discovery Protocol (ADP) v1.1",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "AID's fallback URI is /.well-known/agent with no .json suffix, and its DNS record is TXT at `_agent.<domain>`, while ADP serves the descriptor at /.well-known/agent.json after a DNS-AID lookup. [1][17]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (3 probed or cited examples; non-exhaustive).",
    "side_a": null,
    "side_b": {
     "visible": true,
     "heading": "Bot, client & tool support",
     "col4_header": "Behavior / Provisioning",
     "note_md": null,
     "rows": [
      {
       "actor": "@agentcommunity/aid",
       "role": "Resolver / Client SDK",
       "status": "Supported",
       "status_display": "Supported · as of 2026-07-25",
       "col4_md": "Node.js and browser discovery SDK on npm; latest 2.1.1 published 2026-07-25 (1.0.0 on 2025-07-12). Package page calls it the main discovery SDK for resolving an AID record",
       "source_md": "[npm @agentcommunity/aid (checked 2026-10-28)](https://registry.npmjs.org/@agentcommunity/aid) [8] · [SDKs and Packages](https://aid.agentcommunity.org/docs/reference/packages) [18]"
      },
      {
       "actor": "aid-discovery",
       "role": "Resolver / Client SDK",
       "status": "Supported",
       "status_display": "Supported · as of 2026-07-25",
       "col4_md": "Python discovery library on PyPI; 2.1.1 uploaded 2026-07-25 (1.0.0 on 2025-07-17). PyPI summary: library for AID, a DNS-based discovery protocol for AI agents",
       "source_md": "[PyPI aid-discovery (checked 2026-10-28)](https://pypi.org/pypi/aid-discovery/json) [19]"
      },
      {
       "actor": "@agentcommunity/aid-doctor",
       "role": "CLI / Validator",
       "status": "Supported",
       "status_display": "Supported · as of 2026-07-25",
       "col4_md": "npm CLI, latest 2.1.1 published 2026-07-25 (1.0.0 on 2025-07-12), for AID record generation, validation, diagnostics, and PKA helpers",
       "source_md": "[npm @agentcommunity/aid-doctor (checked 2026-10-28)](https://registry.npmjs.org/@agentcommunity/aid-doctor) [20] · [SDKs and Packages](https://aid.agentcommunity.org/docs/reference/packages) [18]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "dan",
     "target_name": "DNS-Based Agent Naming",
     "relation_label": "Peer alternative",
     "delta": "DAN uses a dedicated AIDISCA record (TYPE65417 in the Verisign PoC), carrying a protocol identifier, capabilities string, endpoint URL, and certificate association, while AID uses a single TXT record at `_agent.<domain>`. [1]",
     "item_md": "**[DNS-Based Agent Naming](/protocols/dan/)** (Peer alternative) — DAN uses a dedicated AIDISCA record (TYPE65417 in the Verisign PoC), carrying a protocol identifier, capabilities string, endpoint URL, and certificate association, while AID uses a single TXT record at `_agent.<domain>`. [1]"
    },
    {
     "target_id": "mcp-dns-discovery",
     "target_name": "Discovery of Model Context Protocol Servers via DNS TXT Records",
     "relation_label": "Peer alternative",
     "delta": "AID (`v2.1.1` / `draft-nemethi-dawn-aid-00`) publishes a single `_agent.<domain>` TXT record with compact keys defaulting to `v=aid2;u=...;p=...` (while accepting `v=aid1` for compatibility), whereas MCP DNS Discovery uses `_mcp.<domain>` TXT records (`v=mcp1; url=...`) alongside `_org-alter.<domain>` and Ed25519-signed `~handle` envelopes at `_alter.<domain>`. [1]",
     "item_md": "**[Discovery of Model Context Protocol Servers via DNS TXT Records](/protocols/mcp-dns-discovery/)** (Peer alternative) — AID (`v2.1.1` / `draft-nemethi-dawn-aid-00`) publishes a single `_agent.<domain>` TXT record with compact keys defaulting to `v=aid2;u=...;p=...` (while accepting `v=aid1` for compatibility), whereas MCP DNS Discovery uses `_mcp.<domain>` TXT records (`v=mcp1; url=...`) alongside `_org-alter.<domain>` and Ed25519-signed `~handle` envelopes at `_alter.<domain>`. [1]"
    },
    {
     "item_md": "**[Discover protocols](/category/discover/)** — Category index for `discover` standards."
    }
   ],
   "v05_compiled_md": "---\nid: aid\ntitle: \"Agent Identity & Discovery (AID)\"\ntier: spec_brief\nlifecycle_status: active\ncategory: discover\nform: dns-record\nwire_archetype: web_discovery\nspec_url: https://aid.agentcommunity.org/docs/specification\nlast_checked: 2026-11-12\n---\n\n# Agent Identity & Discovery (AID)\n\n**Category:** [Discover](/category/discover/) (`discover`) · **Form:** DNS record (`dns-record`) · **Last checked:** 2026-11-12\n\n> *This page is about Agent Identity & Discovery (AID), the Agent Community specification that tells a client, given a domain, where that domain's agent is and which protocol to speak, using a DNS TXT record at `_agent.<domain>`. The GitHub repository describes the project as \"Agent Interface Discovery\". It is not DNS for AI Discovery (DNS-AID), a separate Internet-Draft that publishes agents with SVCB records and DNS-SD labels; see [DNS for AI Discovery (DNS-AID)](/protocols/dns-aid/). It is not the KERI Autonomic Identifier (AID), a self-certifying identifier in the Key Event Receipt Infrastructure. For catalogs of agentic resources at /.well-known/ard.json, see [Agentic Resource Discovery (ARD)](/protocols/ard/). [1]*\n\n**Agent Identity & Discovery** (`AID`) is the Agent Community's current normative specification (`v2.1.1`, dated 2 October 2026) that answers, given a domain, where the agent is and which protocol a client should speak using a DNS `TXT` record at the well-known base name `_agent.<domain>`. [1] B. Nemethi of Open Agent Registry, Inc. also publishes the specification as Informational Internet-Draft `draft-nemethi-dawn-aid-00` (dated 2 September 2026), defining the `aid2` record format, client discovery algorithm, exact-host lookup rules, and endpoint-proof (`PKA`) handshake using `Ed25519` HTTP Message Signatures. [2] A provider MUST advertise its agent service by publishing a single semicolon-delimited `key=value` `TXT` record at `_agent` carrying required `v` (`v=aid2`), `u`, and `p` tokens alongside optional `a`, `s`, `d`, `e`, and `k` fields; clients query that exact name and MUST NOT walk up the DNS hierarchy. [2] When `k` is present, the client MUST perform the `PKA` endpoint-proof procedure over `Ed25519` HTTP Message Signatures (`tag=\"aid-pka-v2\"`) and SHOULD send the `AID-Domain` header; if no DNS record is found or the DNS lookup fails, the client MAY attempt the `/.well-known/agent` JSON fallback on the same exact host. [2] AID `v2` (`v=aid2`) is the current default wire format, making the base `_agent.<domain>` lookup canonical and updating endpoint proof so the DNS key is an `Ed25519` JWK `x` value with an RFC 7638 derived key identifier, while retaining legacy `aid1` as a compatibility format. [1] The earlier v1.2 Internet-Draft `draft-nemethi-aid-agent-identity-discovery-00` (dated 16 March 2026) is succeeded by `draft-nemethi-dawn-aid-00` (dated 2 September 2026, expiring 6 March 2027), while the `v2.1.1` changelog notes no change to the record format or client behavior. [2][3]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Discover](/category/discover/) (`discover`) |\n| **Form** | DNS record (`dns-record`) |\n| **Originated by** | Balázs Nemethi (Agent Community, Open Agent Registry, Inc.) and `.agent community` (`2025-06-12` org; `2025-07-05` repo) [4][5] |\n| **Governed by** | Agent Community (`Open Agent Registry, Inc.`); submitted to the IETF as an individual Informational Internet-Draft (`draft-nemethi-dawn-aid-00`) [1][2][6] |\n| **Track** | Community specification (Agent Community v2.1.1) and individual IETF Internet-Draft (Informational, `draft-nemethi-dawn-aid-00`) [1][2] |\n| **Status** | \"Date: 2 October 2026 Editor: Agent Community Status: Current normative specification\". Internet-Drafts: draft-nemethi-dawn-aid-00 (2026-09-02, active); draft-nemethi-aid-agent-identity-discovery-00 (2026-03-16, v1.2, expired) [1][3][7] |\n| **Version** | Specification `v2.1.1` (`2026-10-02`, `v=aid2`); `draft-nemethi-dawn-aid-00` (`2026-09-02`, expires `2027-03-06`); npm/PyPI SDKs `2.1.1` (`2026-07-25`) [1][3][7] |\n| **Wire format** | Semicolon-delimited `key=value` DNS `TXT` payload (`v=aid2` default; `v=aid1` legacy), RFC 9421 Structured Fields (`Accept-Signature`, `Signature-Input`, `Signature`), and JSON fallback [1][2][3] |\n| **Specification** | [AID v2.1.1 Specification](https://aid.agentcommunity.org/docs/specification) · [draft-nemethi-dawn-aid-00.txt](https://www.ietf.org/archive/id/draft-nemethi-dawn-aid-00.txt) · [IETF Datatracker](https://datatracker.ietf.org/doc/draft-nemethi-dawn-aid/) · [GitHub Monorepo](https://github.com/agentcommunity/agent-identity-discovery) [1][2][6] |\n| **Found at** | DNS `TXT` at `_agent.<domain>` (TTL `300`–`900` s), optional `_agent._<proto>.<domain>`, `/.well-known/agent`, and `AID-Domain` / `Accept-Signature` / `Cache-Control: no-store` (legacy `AID-Challenge`) [1][2][8] |\n| **Licence** | Dual MIT / Apache-2.0 (`LICENSE`); `README` and npm/PyPI declare `MIT`; IETF drafts under BCP 78 [4][9] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [Adoption and ecosystem](#adoption-and-ecosystem)\n4. [See also](#see-also)\n5. [References](#references)\n\n---\n\n## Problem and scope\n\nWithout a DNS record at a fixed subdomain, a client given only a domain has no single lookup that returns the service endpoint URI, protocol token, and authentication hint. [2] Moreover, when a response signature binds only the endpoint's own request context, any domain can publish another operator's endpoint URI and public key (`k`), creating an unauthorized-association gap that falsely implies a relationship. [2] An AID client queries `_agent` without walking parent domains, partitions valid records by major version, prefers `aid2` over `aid1`, and MUST fail due to ambiguity if multiple valid records exist in the selected version. [2] When `k` is present, the client verifies an `Ed25519` HTTP Message Signature (`tag=\"aid-pka-v2\"`) with an RFC 7638 thumbprint `keyid`, and SHOULD send `AID-Domain` so the endpoint covers `\"aid-domain\";req` to prove consent. [2] After AID locates the endpoint or package, protocols such as MCP, A2A, OpenAPI, OAuth, or `auth.md` handle communication, capability negotiation, authentication, and authorization. [1] AID does not issue credentials, grant authorization, prove human approval, define SPIFFE/WIMSE federation, publish DID-like metadata, become Web Bot Auth, or define DNS-level cryptographic key rotation. [1][2]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **DNS SRV & SVCB Records (RFC 2782 / RFC 9460)** | `RFC 2782 / RFC 9460` | Analogous to classic standard | AID publishes a DNS TXT record at the exact owner name `_agent.<domain>`, carrying an endpoint, a protocol, an authentication hint, and an optional Ed25519 key, and clients must not walk to parent domains, whereas RFC 9460 SVCB does not define that TXT name. [1][10] |\n| **Well-Known URIs (RFC 8615)** | `RFC 8615` | Profiles classic standard | If the TXT lookup fails, AID allows a fallback GET of /.well-known/agent on that same host, a well-known URI RFC 8615 does not register. [1][11] |\n| **HTTP Message Signatures (RFC 9421)** | `RFC 9421` | Profiles classic standard | When the TXT record includes an Ed25519 key, AID's endpoint proof is an HTTP message signature over the discovery response, applying RFC 9421, which does not define the _agent TXT publication. [1][12] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[DNS-AID (DNS for AI Discovery)](/protocols/dns-aid/)** | Peer alternative | AID uses TXT at `_agent.<domain>`, with an optional Ed25519 key, plus optional /.well-known/agent, while DNS-AID uses SVCB owner names and `_index._agents.<domain>`. [1][13] |\n| **[HTTP Message Signatures](/protocols/http-message-signatures/)** | Builds on | AID requires an HTTP message signature as the proof that the endpoint holds the Ed25519 key from the TXT record, while HTTP Message Signatures defines those fields for any HTTP message. [1][14] |\n| **[Agentic Resource Discovery (ARD)](/protocols/ard/)** | Peer alternative | AID's HTTPS fallback path is /.well-known/agent, while ARD's required manifest is /.well-known/ard.json. [1][15] |\n| **[Agent Name Service v2 (ANS)](/protocols/ans/)** | Peer alternative | AID publishes the record in the zone's own DNS and proves the HTTPS endpoint with a message signature, while ANS resolves the name through dual certificates and a SCITT transparency log. [1][16] |\n| **[Agent Discovery Protocol (ADP) v1.1](/protocols/adp/)** | Peer alternative | AID's fallback URI is /.well-known/agent with no .json suffix, and its DNS record is TXT at `_agent.<domain>`, while ADP serves the descriptor at /.well-known/agent.json after a DNS-AID lookup. [1][17] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (3 probed or cited examples; non-exhaustive).*\n\n### Bot, client & tool support\n\n| Actor | Role | Status | Behavior / Provisioning | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **@agentcommunity/aid** | Resolver / Client SDK | Supported · as of 2026-07-25 | Node.js and browser discovery SDK on npm; latest 2.1.1 published 2026-07-25 (1.0.0 on 2025-07-12). Package page calls it the main discovery SDK for resolving an AID record | [npm @agentcommunity/aid (checked 2026-10-28)](https://registry.npmjs.org/@agentcommunity/aid) [8] · [SDKs and Packages](https://aid.agentcommunity.org/docs/reference/packages) [18] |\n| **aid-discovery** | Resolver / Client SDK | Supported · as of 2026-07-25 | Python discovery library on PyPI; 2.1.1 uploaded 2026-07-25 (1.0.0 on 2025-07-17). PyPI summary: library for AID, a DNS-based discovery protocol for AI agents | [PyPI aid-discovery (checked 2026-10-28)](https://pypi.org/pypi/aid-discovery/json) [19] |\n| **@agentcommunity/aid-doctor** | CLI / Validator | Supported · as of 2026-07-25 | npm CLI, latest 2.1.1 published 2026-07-25 (1.0.0 on 2025-07-12), for AID record generation, validation, diagnostics, and PKA helpers | [npm @agentcommunity/aid-doctor (checked 2026-10-28)](https://registry.npmjs.org/@agentcommunity/aid-doctor) [20] · [SDKs and Packages](https://aid.agentcommunity.org/docs/reference/packages) [18] |\n\n---\n\n## See also\n\n- **[DNS-Based Agent Naming](/protocols/dan/)** *(Peer alternative)* — DAN uses a dedicated AIDISCA record (TYPE65417 in the Verisign PoC), carrying a protocol identifier, capabilities string, endpoint URL, and certificate association, while AID uses a single TXT record at `_agent.<domain>`. [1]\n- **[Discovery of Model Context Protocol Servers via DNS TXT Records](/protocols/mcp-dns-discovery/)** *(Peer alternative)* — AID (`v2.1.1` / `draft-nemethi-dawn-aid-00`) publishes a single `_agent.<domain>` TXT record with compact keys defaulting to `v=aid2;u=...;p=...` (while accepting `v=aid1` for compatibility), whereas MCP DNS Discovery uses `_mcp.<domain>` TXT records (`v=mcp1; url=...`) alongside `_org-alter.<domain>` and Ed25519-signed `~handle` envelopes at `_alter.<domain>`. [1]\n- **Category:** [Discover protocols](/category/discover/)\n\n---\n\n## References\n\n1. Agent Community (Open Agent Registry, Inc.), *Agent Identity & Discovery (AID) - v2.1.1 Specification* (2026-10-02 (fetched 2026-10-30)) — <https://aid.agentcommunity.org/docs/specification>\n2. B. Nemethi (Open Agent Registry, Inc.), *Agent Identity and Discovery (AID) (draft-nemethi-dawn-aid-00)* (2026-09-02 (fetched 2026-10-30)) — <https://www.ietf.org/archive/id/draft-nemethi-dawn-aid-00.txt>\n3. Agent Community, *Versioning and Changelog — Agent Identity & Discovery* (fetched 2026-10-30) — <https://aid.agentcommunity.org/docs/reference/versioning>\n4. Agent Community, *agentcommunity/agent-identity-discovery GitHub Repository* (created 2025-07-05; fetched 2026-10-30) — <https://github.com/agentcommunity/agent-identity-discovery>\n5. GitHub API, *agentcommunity organization metadata* (created 2025-06-12; fetched 2026-10-30) — <https://github.com/agentcommunity>\n6. IETF Datatracker, *draft-nemethi-dawn-aid-00 — Agent Identity and Discovery (AID)* (2026-09-02 (fetched 2026-10-30)) — <https://datatracker.ietf.org/doc/draft-nemethi-dawn-aid/>\n7. GitHub API, *agentcommunity/agent-identity-discovery tags* (fetched 2026-10-30) — <https://github.com/agentcommunity/agent-identity-discovery/tags>\n8. npm Registry (Agent Community), *@agentcommunity/aid package metadata* (2.1.1 published 2026-07-25; fetched 2026-10-30) — <https://registry.npmjs.org/@agentcommunity/aid>\n9. Agent Community, *agentcommunity/agent-identity-discovery LICENSE (MIT / Apache-2.0)* (fetched 2026-10-30) — <https://raw.githubusercontent.com/agentcommunity/agent-identity-discovery/main/LICENSE>\n10. IETF, *RFC 9460: Service Binding and Parameter Specification via the DNS (SVCB and HTTPS Resource Records)* (IETF RFC) — <https://www.rfc-editor.org/rfc/rfc9460.html>\n11. IETF, *RFC 8615: Well-Known Uniform Resource Identifiers (URIs)* (IETF RFC) — <https://www.rfc-editor.org/rfc/rfc8615.html>\n12. IETF, *RFC 9421: HTTP Message Signatures* (IETF RFC) — <https://www.rfc-editor.org/rfc/rfc9421.html>\n13. J. Mozley, N. Williams, B. Sarikaya, R. Schott, J. Damick, and S. Courtney, *DNS for AI Discovery (draft-mozleywilliams-dawn-dnsaid-00)* (2026-11-02 (fetched 2026-11-07)) — <https://www.ietf.org/archive/id/draft-mozleywilliams-dawn-dnsaid-00.txt>\n14. IETF Datatracker, *HTTP Message Signatures (RFC 9421)* (Proposed Standard (February 2024); checked 2026-10-30) — <https://datatracker.ietf.org/doc/rfc9421/>\n15. Agentic Resource Discovery (ARD), *ARD Specification* (fetched 2026-10-30) — <https://agenticresourcediscovery.org/spec/>\n16. Scott Courtney, Vineeth Sai Narajala, Ken Huang, Idan Habler, and Akram Sheriff, *draft-narajala-courtney-ansv2 — Agent Name Service v2 (ANS): A Domain-Anchored Identity Layer for Autonomous AI Agents (IETF Datatracker; HTML overview snapshot at -01 'Trust Layer')* (draft-narajala-courtney-ansv2-02 posted 2026-10-26 (HTML overview snapshot 2026-10-15)) — <https://datatracker.ietf.org/doc/draft-narajala-courtney-ansv2/>\n17. Bin Lian (aipair.ai) and IETF Datatracker, *draft-pro-adp-agent-discovery — Agent Discovery Protocol (ADP) v1.1 -- Well-Known Metadata and Interaction Layer (IETF Datatracker)* (checked 2026-10-30) — <https://datatracker.ietf.org/doc/draft-pro-adp-agent-discovery/>\n18. Agent Community, *SDKs and Packages — Agent Identity & Discovery* (fetched 2026-10-30) — <https://aid.agentcommunity.org/docs/reference/packages>\n19. PyPI (Agent Community), *aid-discovery package metadata* (2.1.1 uploaded 2026-07-25; fetched 2026-10-30) — <https://pypi.org/pypi/aid-discovery/json>\n20. npm Registry (Agent Community), *@agentcommunity/aid-doctor package metadata* (2.1.1 published 2026-07-25; fetched 2026-10-30) — <https://registry.npmjs.org/@agentcommunity/aid-doctor>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "adp",
   "name": "Agent Discovery Protocol (ADP) v1.1",
   "acronym": "ADP",
   "hatnote_md": "",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "aliases": [
    "draft-pro-adp-agent-discovery"
   ],
   "analog": "a layered service-discovery stack (DNS SRV -> REST descriptor -> live connection), akin to how email escalates from MX lookup to SMTP handshake",
   "collisions": [
    "ADP is a generic acronym also used for 'Agile Development Process' and unrelated ADP payroll/HR company; within the agentic space, distinct from ARDP (Agent Registration and Discovery Protocol) and AID/DNS-AID"
   ],
   "discovery": {
    "mechanism": "Layer 1 DNS-AID (SVCB/TLSA), Layer 2 well-known JSON metadata, Layer 3 HTML landing page + JSON-LD + WebSocket (Agent Gateway Protocol)",
    "path": "/.well-known/agent.json"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.ietf.org/archive/id/draft-pro-adp-agent-discovery-02.txt",
     "claim": "Bin Lian (aipair.ai), *Agent Discovery Protocol (ADP) v1.1 — Well-Known Metadata and Interaction Layer (Appendix A HTML Landing Page Example) (draft-pro-adp-agent-discovery-02)*, checked 2026-10-30",
     "date": null,
     "quote": "This document defines the Agent Discovery Protocol (ADP) v1.1, a layered protocol for discovering, verifying, and interacting with AI Agents on the Internet. / ADP delegates DNS discovery to DNS-AID (SVCB records) and defines a Well-Known JSON metadata format, an Ed25519-based identity model, and the Agent Gateway Protocol (AGP) for real-time WebSocket messaging. / A GET request to the Well-Known URI (default /.well-known/agent.json) returns a JSON document containing the Agent's identity, capabilities, relationships, security policies, and endpoint map. / The server MUST respond with Content-Type ... application/vnd.adp+json ... servers MAY use ... application/json as a transitional content type. / Intended status: Informational ... 18 June 2026 ... This Internet-Draft will expire on 20 December 2026. / ADP v1.1 adopts DNS-AID as its normative DNS discovery mechanism. ... The original TXT+SRV scheme is retained as a documented fallback / -00 (2026-06-09) ... Initial draft. ... TXT+SRV ... as primary DNS mechanism. ... -01 (2026-06-17) ... Adopted DNS-AID (SVCB) as normative Layer 1. ... version to ADP/1.1. ... -02 (2026-06-18) ... application/vnd.adp+json ... Well-Known URI registration denial. / Alice's Agent General-purpose conversational AI agent. / Each platform (OpenAI, Dify, Coze) provides its own directory and identity system, but there is no universal discovery mechanism: an Agent on one platform cannot natively discover an Agent on another without a bridging registry. / clients escalate from DNS to HTTP to WebSocket only as needed. / If SVCB answers your question, do not issue an HTTP request. If Well-Known suffices, do not open a WebSocket. / No central registry; domain ownership is the root of identity. / IANA has denied registration of the \"agent\" Well-Known URI ... case #1453939 (2026-06). ... /.well-known/agent.json as a de facto convention ... this path has not been formally registered.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://datatracker.ietf.org/doc/draft-pro-adp-agent-discovery/",
     "claim": "Bin Lian (aipair.ai) and IETF Datatracker, *draft-pro-adp-agent-discovery — Agent Discovery Protocol (ADP) v1.1 -- Well-Known Metadata and Interaction Layer (IETF Datatracker)*, checked 2026-10-30",
     "date": null,
     "quote": "This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. ... Active Internet-Draft (individual) ... Author | | Bin Lian ... Last updated | 2026-07-24 (Latest revision 2026-06-23) ... RFC stream | | (None) ... Intended RFC status | | Informational ... IESG state | | I-D Exists / Network Working Group Bin. Lian Internet-Draft aipair.ai Intended status: Informational 18 June 2026 Expires: 20 December 2026 / revision 2026-06-23) RFC stream (None) Intended RFC status Informational Formats txt html xml htmlized / Intended status: Informational / Search email archive draft-pro-adp-agent-discovery-02 ``` Abstract Status of This MemoLian Expires 20 December 2026 / 2026Lian Expires 20 December 2026 [Page 4]Internet-Draft adp-agent-discovery June 2026Lian Expires 20 December 2026 / ADP delegates DNS discovery to DNS-AID (SVCB records) and defines a Well-Known JSON metadata format, an Ed25519-based identity model, and the Agent Gateway Protocol (AGP) for real-time WebSocket messaging. / Metadata and Interaction Layer draft-pro-adp-agent-discovery-02 Abstract This document defines the Agent Discovery Protocol (ADP) / 3600 IN SVCB 1. (alpn=\"a2a,h2,h3\" port=443 ipv4hint=192.0.2.1 ipv6hint=2001:db8::1 bap=a2a well-known=agent.json cap=https://alice.example.com/capabilities/a2a.json cap-sha256=) Figure 2 / Copyright Notice Copyright (c) 2026 IETF Trust and the persons identified as the document",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://datatracker.ietf.org/api/v1/doc/document/draft-pro-adp-agent-discovery/",
     "claim": "IETF Datatracker API, *IETF Datatracker document record for draft-pro-adp-agent-discovery*, checked 2026-10-30",
     "date": null,
     "quote": "2026-12-25T20:14:58Z ... draft-pro-adp-agent-discovery/ 02 / 2026-12-25T20:14:58Z /api/v1/group/group/1027/ 157149 /api/v1/name/intendedstdlevelname/inf/ [] draft-pro-adp-agent-discovery 27 /api/v1/doc/document/draft-pro-adp-agent-discovery/ 02 /api/v1/doc/state/1/ / WebSocket only as needed. 2026-12-25T20:14:58Z /api/v1/group/group/1027/ 157149 /api/v1/name/intendedstdlevelname/inf/ [] draft-pro-adp-agent-discovery 27 /api/v1/doc/document/draft-pro-adp-agent-discovery/ 02 / DNS to HTTP to WebSocket only as needed. 2026-12-25T20:14:58Z /api/v1/group/group/1027/ 157149 /api/v1/name/intendedstdlevelname/inf/ [] draft-pro-adp-agent-discovery",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://datatracker.ietf.org/api/v1/doc/newrevisiondocevent/?doc__name=draft-pro-adp-agent-discovery&format=json",
     "claim": "IETF Datatracker API, *Revision events for draft-pro-adp-agent-discovery*, checked 2026-10-30",
     "date": null,
     "quote": "\"rev\": \"02\", \"time\": \"2026-06-23T20:14:58Z\", \"type\": \"new_revision\" / 2026-06-09T14:01:06Z / \"rev\": \"02\", \"time\": \"2026-06-23T20:14:58Z\", \"type\": \"new_revision\"}, {\"by\": \"/api/v1/person/person/163555/\", \"desc\": \"New version available: draft-pro-adp-agent-discovery-01.txt\", \"doc\":",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://www.rfc-editor.org/rfc/rfc8615.html",
     "claim": "M. Nottingham, *RFC 8615: Well-Known Uniform Resource Identifiers (URIs)*, May 2019",
     "date": null,
     "quote": "This memo defines a path prefix for \"well-known locations\",",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://www.rfc-editor.org/rfc/rfc9460.html",
     "claim": "B. Schwartz, M. Bishop, and E. Nygren, *RFC 9460: Service Binding and Parameter Specification via the DNS (SVCB and HTTPS Resource Records)*, November 2023",
     "date": null,
     "quote": "This document specifies the \"SVCB\" (\"Service Binding\") and \"HTTPS\" DNS resource record (RR)",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://datatracker.ietf.org/doc/draft-mozleywilliams-dnsop-dnsaid/",
     "claim": "J. Mozley and N. Williams (Infoblox), B. Sarikaya, R. Schott (Deutsche Telekom), and J. Damick (Amazon), *draft-mozleywilliams-dnsop-dnsaid — DNS for AI Discovery (IETF Datatracker; succeeded by draft-nemethi-dawn-dnsaid)*, checked 2026-10-29",
     "date": null,
     "quote": "draft-mozleywilliams-dnsop-dnsaid-02 Published: Intended Status:: Standards Track Expires: Authors:: J. Mozley Infoblox, Inc. N. Williams",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://aid.agentcommunity.org/docs/specification",
     "claim": "Agent Community (Open Agent Registry, Inc.), *Agent Identity & Discovery (AID) - v2.1.1 Specification*, 2026-10-02 (fetched 2026-10-30)",
     "date": null,
     "quote": "Specification | Agent Identity & Discovery {\"@context\":\"https://schema.org\",\"@type\":\"Organization\",\"name\":\"Open Agent Registry,",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://agenticresourcediscovery.org/spec/",
     "claim": "Agentic Resource Discovery Project (ards-project), *Agentic Resource Discovery Specification v0.91*, 2026-08-26; fetched 2026-10-30",
     "date": null,
     "quote": "Version: v0.91 Status: Proposal Date: August 26, 2026",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://datatracker.ietf.org/doc/draft-narajala-courtney-ansv2/",
     "claim": "Scott Courtney, Vineeth Sai Narajala, Ken Huang, Idan Habler, and Akram Sheriff, *draft-narajala-courtney-ansv2 — Agent Name Service v2 (ANS): A Domain-Anchored Identity Layer for Autonomous AI Agents (IETF Datatracker)*, checked 2026-10-30",
     "date": null,
     "quote": "Document Type Active Internet-Draft (individual) Authors Scott Courtney, Vineeth Sai Narajala, Ken Huang, Idan Habler, Akram Sheriff Last updated 2026-10-26 Replaces draft-narajala-ans RFC stream (None) Intended RFC status (None)",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://www.ietf.org/archive/id/draft-narajala-courtney-ansv2-02.txt",
     "claim": "S. Courtney (GoDaddy), V. S. Narajala (OWASP), K. Huang (DistributedApps.ai), I. Habler (OWASP), and A. Sheriff (Cisco Systems), *Agent Name Service v2 (ANS): A Domain-Anchored Identity Layer for Autonomous AI Agents (draft-narajala-courtney-ansv2-02)*, 26 October 2026; expires 29 April 2027",
     "date": null,
     "quote": "Identity Certificate: An optional X.509 client certificate, issued … C2SP tlog-checkpoint signed-note format [C2SP]",
     "ref": 11
    }
   ],
   "form": "well-known-file",
   "governance": "Individual IETF submission (RFC stream: None)",
   "group": null,
   "history": [
    {
     "date": "2026-10-29",
     "note": "Primary-source verification against draft-pro-adp-agent-discovery-02 text and IETF Datatracker document/API records (4 primary sources)"
    },
    {
     "date": "2026-09-06",
     "note": "verified against draft-pro-adp-agent-discovery-02 spec text via datatracker.ietf.org"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "implementation": "prototype",
   "last_verified": "2026-11-12",
   "native_status": "\"Active Internet-Draft (individual)\"; \"IESG state I-D Exists\". \"This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process.\" is Datatracker's own wording. The draft says \"Intended status: Informational\". Datatracker also shows \"RFC stream (None)\".",
   "origin": {
    "date": "2026-06-09",
    "org": "Bin Lian (aipair.ai)"
   },
   "part_of": null,
   "parties": [
    "agent-site",
    "agent-agent"
   ],
   "phase": "draft",
   "probe": {
    "method": "GET",
    "on_absent": "Domain does not publish ADP Layer 2 metadata; check for a DNS-AID SVCB record with a well-known SvcParamKey as a possible Layer 1-only deployment",
    "parse": "200 response is a JSON document with identity/endpoints/capabilities/security top-level blocks",
    "path": "https://{origin}/.well-known/agent.json"
   },
   "question": "How does an agent escalate from a cheap DNS lookup, to a well-known JSON metadata document, to a real-time WebSocket session, using only as much machinery as the task needs?",
   "scope": "general",
   "spec_url": "https://www.ietf.org/archive/id/draft-pro-adp-agent-discovery-02.txt",
   "step": "discover",
   "summary_md": "`draft-pro-adp-agent-discovery-02` defines the Agent Discovery Protocol (ADP) v1.1, a layered protocol for discovering, verifying, and interacting with AI Agents on the Internet. The Datatracker page lists author Bin Lian and document type Active Internet-Draft (individual), with last updated `2026-07-24` (latest revision `2026-06-23`), RFC stream (None), and intended RFC status Informational. IESG state is I-D Exists. The page states that this I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. ADP delegates DNS discovery to DNS-AID (SVCB records) and defines a Well-Known JSON metadata format, an Ed25519-based identity model, and the Agent Gateway Protocol (AGP) for real-time WebSocket messaging. A GET request to the Well-Known URI (default `/.well-known/agent.json`) returns a JSON document containing the Agent's identity, capabilities, relationships, security policies, and endpoint map. The server MUST respond with Content-Type `application/vnd.adp+json`. Prior to formal registration, servers MAY use `application/json` as a transitional content type. `draft-pro-adp-agent-discovery-02` carries intended status Informational, is dated 18 June 2026, and will expire on 20 December 2026. ADP v1.1 adopts DNS-AID as its normative DNS discovery mechanism. The original TXT+SRV scheme is retained as a documented fallback. Version `-00` (`2026-06-09`) is the initial draft and uses TXT+SRV as the primary DNS mechanism. Version `-01` (`2026-06-17`) adopted DNS-AID (SVCB) as normative Layer 1 and set the protocol version to `ADP/1.1`. Version `-02` (`2026-06-18`) moved the media type registration to `application/vnd.adp+json` and noted the Well-Known URI registration denial. The Datatracker document API records revision `02` of `draft-pro-adp-agent-discovery` as posted on `2026-06-23` with an expiry date of `2026-12-25`.",
   "track": "ietf",
   "version": {
    "label": "draft-pro-adp-agent-discovery-02",
    "date": "2026-06-23"
   },
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-pro-adp-agent-discovery"
    }
   ],
   "use_cases": [
    "discover-my-api",
    "describe-agent-capabilities",
    "agent-to-agent-messaging",
    "agent-naming"
   ],
   "audience": [
    "agent-builder",
    "platform",
    "standards-body"
   ],
   "pairs_with": [
    "dns-aid",
    "aid",
    "ard",
    "ans"
   ],
   "prerequisites": [
    "dns-aid"
   ],
   "ietf_tracker": {
    "doc": "draft-pro-adp-agent-discovery",
    "rev": "02",
    "state": "active",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-06-18",
    "expires_utc": "2026-12-20",
    "as_of": "2026-11-07",
    "source": "https://datatracker.ietf.org/doc/draft-pro-adp-agent-discovery/",
    "source_label": "per IETF Datatracker"
   },
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "web_discovery",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": null,
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "`draft-pro-adp-agent-discovery-02` defines the Agent Discovery Protocol (ADP) v1.1, a layered protocol for discovering, verifying, and interacting with AI Agents on the Internet. [1] The Datatracker page lists author Bin Lian and document type Active Internet-Draft (individual), with last updated `2026-07-24` (latest revision `2026-06-23`), RFC stream (None), and intended RFC status Informational. IESG state is I-D Exists. The page states that this I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. [2] ADP delegates DNS discovery to DNS-AID (SVCB records) and defines a Well-Known JSON metadata format, an Ed25519-based identity model, and the Agent Gateway Protocol (AGP) for real-time WebSocket messaging. [1] A GET request to the Well-Known URI (default `/.well-known/agent.json`) returns a JSON document containing the Agent's identity, capabilities, relationships, security policies, and endpoint map. [1] The server MUST respond with Content-Type `application/vnd.adp+json`. Prior to formal registration, servers MAY use `application/json` as a transitional content type. [1] `draft-pro-adp-agent-discovery-02` carries intended status Informational, is dated 18 June 2026, and will expire on 20 December 2026. [1] ADP v1.1 adopts DNS-AID as its normative DNS discovery mechanism. The original TXT+SRV scheme is retained as a documented fallback. [1] Version `-00` (`2026-06-09`) is the initial draft and uses TXT+SRV as the primary DNS mechanism. Version `-01` (`2026-06-17`) adopted DNS-AID (SVCB) as normative Layer 1 and set the protocol version to `ADP/1.1`. Version `-02` (`2026-06-18`) moved the media type registration to `application/vnd.adp+json` and noted the Well-Known URI registration denial. [1] The Datatracker document API records revision `02` of `draft-pro-adp-agent-discovery` as posted on `2026-06-23` with an expiry date of `2026-12-25`. [3][4]",
   "v05_identity_sentence_md": "`draft-pro-adp-agent-discovery-02` defines the Agent Discovery Protocol (ADP) v1.1, a layered protocol for discovering, verifying, and interacting with AI Agents on the Internet. [1] The Datatracker page lists author Bin Lian and document type Active Internet-Draft (individual), with last updated `2026-07-24` (latest revision `2026-06-23`), RFC stream (None), and intended RFC status Informational. IESG state is I-D Exists. The page states that this I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. [2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Discover](/category/discover/) (`discover`)"
    },
    {
     "label": "Form",
     "value_md": "Well-known file (`well-known-file`)"
    },
    {
     "label": "Originated by",
     "value_md": "Bin Lian (`aipair.ai`, initial `-00` posted `2026-06-09`) [2][4]"
    },
    {
     "label": "Governed by",
     "value_md": "Individual IETF Internet-Draft (`RFC stream: (None)`, `Stream state: (No stream defined)`, `Intended status: Informational`) [2][3]"
    },
    {
     "label": "Track",
     "value_md": "IETF Internet-Draft (Informational) [2]"
    },
    {
     "label": "Status",
     "value_md": "\"Active Internet-Draft (individual)\"; \"IESG state I-D Exists\". \"This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process.\" is Datatracker's own wording. The draft says \"Intended status: Informational\". Datatracker also shows \"RFC stream (None)\". [2][3][4]"
    },
    {
     "label": "Version",
     "value_md": "`draft-pro-adp-agent-discovery-02` (`ADP/1.1`, dated `18 June 2026`, uploaded `2026-06-23`, updated `2026-07-24`, 27 pages; expires `2026-12-20`) [2][3][4]"
    },
    {
     "label": "IETF tracker",
     "value_md": "`draft-pro-adp-agent-discovery-02` · Active Internet-Draft (individual; intended status Informational; dated 18 June 2026; expires 20 December 2026) [2]"
    },
    {
     "label": "Wire format",
     "value_md": "JSON Well-Known metadata (`application/vnd.adp+json`), DNS `SVCB`/`TLSA` and fallback `TXT`/`SRV`, HTML5 `<agent-card>` with JSON-LD, and Ed25519-signed `WSS` frames [1][2]"
    },
    {
     "label": "Specification",
     "value_md": "[IETF Datatracker](https://datatracker.ietf.org/doc/draft-pro-adp-agent-discovery/) · [draft-pro-adp-agent-discovery-02.txt](https://www.ietf.org/archive/id/draft-pro-adp-agent-discovery-02.txt) [1][2][3]"
    },
    {
     "label": "Found at",
     "value_md": "DNS `SVCB` (`well-known=agent.json`, `bap=a2a`, `cap`, `cap-sha256`) or `_agent.{domain}` `TXT` → `GET /.well-known/agent.json` (`application/vnd.adp+json`, `3600`s TTL) → `GET /` and `wss://{domain}/agent/chat` [2]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust provisions (`BCP 78` / `BCP 79`, Copyright 2026 IETF Trust) [2]"
    }
   ],
   "v05_problem_md": "Each platform (OpenAI, Dify, Coze) provides its own directory and identity system, but there is no universal discovery mechanism: an Agent on one platform cannot natively discover an Agent on another without a bridging registry. [1] Clients escalate from DNS to HTTP to WebSocket only as needed. [1] If SVCB answers your question, do not issue an HTTP request. If Well-Known suffices, do not open a WebSocket. [1] No central registry; domain ownership is the root of identity. [1] Section 9.1 of the draft reports that IANA denied registration of the \"agent\" Well-Known URI in case #1453939 (2026-06), so the document specifies `/.well-known/agent.json` as an unregistered de facto convention. [1]",
   "v05_mechanism_delta_md": "Clients escalate from DNS to HTTP to WebSocket only as needed. [1] If SVCB answers your question, do not issue an HTTP request. If Well-Known suffices, do not open a WebSocket. [1]",
   "v05_scope_boundary_md": "No central registry; domain ownership is the root of identity. [1] Section 9.1 of the draft reports that IANA denied registration of the \"agent\" Well-Known URI in case #1453939 (2026-06), so the document specifies `/.well-known/agent.json` as an unregistered de facto convention. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "Well-Known URIs (RFC 8615)",
      "spec_or_rfc": "RFC 8615",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "ADP serves the agent descriptor at /.well-known/agent.json, a well-known URI RFC 8615 does not register, and that HTTPS JSON document is the descriptor rather than a DNS RDATA field. [2][5]"
     },
     {
      "name": "DNS SRV & SVCB Records (RFC 2782 / RFC 9460)",
      "spec_or_rfc": "RFC 2782 / RFC 9460",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "ADP leaves host location to DNS-AID's SVCB records, keeps the older TXT plus SRV scheme as a fallback, and still requires the client to fetch /.well-known/agent.json, whereas RFC 9460 SVCB can bind the client directly to service parameters. [2][6]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "dns-aid",
      "target_name": "DNS-AID (DNS for AI Discovery, draft-nemethi-dawn-dnsaid)",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "ADP adopts DNS-AID (draft-nemethi-dawn-dnsaid, succeeding draft-mozleywilliams-dnsop-dnsaid) SVCB records to locate the host and then serves its own descriptor at /.well-known/agent.json, which an SVCB query does not return. [2][7]"
     },
     {
      "target_id": "aid",
      "target_name": "Agent Identity & Discovery (AID)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ADP's document is /.well-known/agent.json, with an Ed25519 identity and an Agent Gateway Protocol WebSocket layer, while AID uses a TXT record at `_agent.<domain>` and a fallback path /.well-known/agent. [2][8]"
     },
     {
      "target_id": "ard",
      "target_name": "Agentic Resource Discovery (ARD)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ADP publishes /.well-known/agent.json after DNS-AID discovery, while ARD publishes /.well-known/ard.json and an Agentmap robots.txt directive. [2][9]"
     },
     {
      "target_id": "ans",
      "target_name": "Agent Name Service v2 (ANS)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ADP discovers a host and then reads a JSON descriptor, while ANS resolves the agent name with X.509 identity certificates and a C2SP transparency log. [2][10][11]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Discover protocols](/category/discover/)** — Category index for `discover` standards."
    }
   ],
   "v05_compiled_md": "---\nid: adp\ntitle: \"Agent Discovery Protocol (ADP) v1.1\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: discover\nform: well-known-file\nwire_archetype: web_discovery\nspec_url: https://datatracker.ietf.org/doc/draft-pro-adp-agent-discovery/\nlast_checked: 2026-11-12\n---\n\n# Agent Discovery Protocol (ADP) v1.1\n\n**Category:** [Discover](/category/discover/) (`discover`) · **Form:** Well-known file (`well-known-file`) · **Last checked:** 2026-11-12\n\n`draft-pro-adp-agent-discovery-02` defines the Agent Discovery Protocol (ADP) v1.1, a layered protocol for discovering, verifying, and interacting with AI Agents on the Internet. [1] The Datatracker page lists author Bin Lian and document type Active Internet-Draft (individual), with last updated `2026-07-24` (latest revision `2026-06-23`), RFC stream (None), and intended RFC status Informational. IESG state is I-D Exists. The page states that this I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. [2] ADP delegates DNS discovery to DNS-AID (SVCB records) and defines a Well-Known JSON metadata format, an Ed25519-based identity model, and the Agent Gateway Protocol (AGP) for real-time WebSocket messaging. [1] A GET request to the Well-Known URI (default `/.well-known/agent.json`) returns a JSON document containing the Agent's identity, capabilities, relationships, security policies, and endpoint map. [1] The server MUST respond with Content-Type `application/vnd.adp+json`. Prior to formal registration, servers MAY use `application/json` as a transitional content type. [1] `draft-pro-adp-agent-discovery-02` carries intended status Informational, is dated 18 June 2026, and will expire on 20 December 2026. [1] ADP v1.1 adopts DNS-AID as its normative DNS discovery mechanism. The original TXT+SRV scheme is retained as a documented fallback. [1] Version `-00` (`2026-06-09`) is the initial draft and uses TXT+SRV as the primary DNS mechanism. Version `-01` (`2026-06-17`) adopted DNS-AID (SVCB) as normative Layer 1 and set the protocol version to `ADP/1.1`. Version `-02` (`2026-06-18`) moved the media type registration to `application/vnd.adp+json` and noted the Well-Known URI registration denial. [1] The Datatracker document API records revision `02` of `draft-pro-adp-agent-discovery` as posted on `2026-06-23` with an expiry date of `2026-12-25`. [3][4]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Discover](/category/discover/) (`discover`) |\n| **Form** | Well-known file (`well-known-file`) |\n| **Originated by** | Bin Lian (`aipair.ai`, initial `-00` posted `2026-06-09`) [2][4] |\n| **Governed by** | Individual IETF Internet-Draft (`RFC stream: (None)`, `Stream state: (No stream defined)`, `Intended status: Informational`) [2][3] |\n| **Track** | IETF Internet-Draft (Informational) [2] |\n| **Status** | \"Active Internet-Draft (individual)\"; \"IESG state I-D Exists\". \"This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process.\" is Datatracker's own wording. The draft says \"Intended status: Informational\". Datatracker also shows \"RFC stream (None)\". [2][3][4] |\n| **Version** | `draft-pro-adp-agent-discovery-02` (`ADP/1.1`, dated `18 June 2026`, uploaded `2026-06-23`, updated `2026-07-24`, 27 pages; expires `2026-12-20`) [2][3][4] |\n| **IETF tracker** | `draft-pro-adp-agent-discovery-02` · Active Internet-Draft (individual; intended status Informational; dated 18 June 2026; expires 20 December 2026) [2] |\n| **Wire format** | JSON Well-Known metadata (`application/vnd.adp+json`), DNS `SVCB`/`TLSA` and fallback `TXT`/`SRV`, HTML5 `<agent-card>` with JSON-LD, and Ed25519-signed `WSS` frames [1][2] |\n| **Specification** | [IETF Datatracker](https://datatracker.ietf.org/doc/draft-pro-adp-agent-discovery/) · [draft-pro-adp-agent-discovery-02.txt](https://www.ietf.org/archive/id/draft-pro-adp-agent-discovery-02.txt) [1][2][3] |\n| **Found at** | DNS `SVCB` (`well-known=agent.json`, `bap=a2a`, `cap`, `cap-sha256`) or `_agent.{domain}` `TXT` → `GET /.well-known/agent.json` (`application/vnd.adp+json`, `3600`s TTL) → `GET /` and `wss://{domain}/agent/chat` [2] |\n| **Licence** | IETF Trust provisions (`BCP 78` / `BCP 79`, Copyright 2026 IETF Trust) [2] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nEach platform (OpenAI, Dify, Coze) provides its own directory and identity system, but there is no universal discovery mechanism: an Agent on one platform cannot natively discover an Agent on another without a bridging registry. [1] Clients escalate from DNS to HTTP to WebSocket only as needed. [1] If SVCB answers your question, do not issue an HTTP request. If Well-Known suffices, do not open a WebSocket. [1] No central registry; domain ownership is the root of identity. [1] Section 9.1 of the draft reports that IANA denied registration of the \"agent\" Well-Known URI in case #1453939 (2026-06), so the document specifies `/.well-known/agent.json` as an unregistered de facto convention. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **Well-Known URIs (RFC 8615)** | `RFC 8615` | Profiles classic standard | ADP serves the agent descriptor at /.well-known/agent.json, a well-known URI RFC 8615 does not register, and that HTTPS JSON document is the descriptor rather than a DNS RDATA field. [2][5] |\n| **DNS SRV & SVCB Records (RFC 2782 / RFC 9460)** | `RFC 2782 / RFC 9460` | Analogous to classic standard | ADP leaves host location to DNS-AID's SVCB records, keeps the older TXT plus SRV scheme as a fallback, and still requires the client to fetch /.well-known/agent.json, whereas RFC 9460 SVCB can bind the client directly to service parameters. [2][6] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[DNS-AID (DNS for AI Discovery, draft-nemethi-dawn-dnsaid)](/protocols/dns-aid/)** | Builds on | ADP adopts DNS-AID (draft-nemethi-dawn-dnsaid, succeeding draft-mozleywilliams-dnsop-dnsaid) SVCB records to locate the host and then serves its own descriptor at /.well-known/agent.json, which an SVCB query does not return. [2][7] |\n| **[Agent Identity & Discovery (AID)](/protocols/aid/)** | Peer alternative | ADP's document is /.well-known/agent.json, with an Ed25519 identity and an Agent Gateway Protocol WebSocket layer, while AID uses a TXT record at `_agent.<domain>` and a fallback path /.well-known/agent. [2][8] |\n| **[Agentic Resource Discovery (ARD)](/protocols/ard/)** | Peer alternative | ADP publishes /.well-known/agent.json after DNS-AID discovery, while ARD publishes /.well-known/ard.json and an Agentmap robots.txt directive. [2][9] |\n| **[Agent Name Service v2 (ANS)](/protocols/ans/)** | Peer alternative | ADP discovers a host and then reads a JSON descriptor, while ANS resolves the agent name with X.509 identity certificates and a C2SP transparency log. [2][10][11] |\n\n---\n\n## See also\n\n- **Category:** [Discover protocols](/category/discover/)\n\n---\n\n## References\n\n1. Bin Lian (aipair.ai), *Agent Discovery Protocol (ADP) v1.1 — Well-Known Metadata and Interaction Layer (Appendix A HTML Landing Page Example) (draft-pro-adp-agent-discovery-02)* (checked 2026-10-30) — <https://www.ietf.org/archive/id/draft-pro-adp-agent-discovery-02.txt>\n2. Bin Lian (aipair.ai) and IETF Datatracker, *draft-pro-adp-agent-discovery — Agent Discovery Protocol (ADP) v1.1 -- Well-Known Metadata and Interaction Layer (IETF Datatracker)* (checked 2026-10-30) — <https://datatracker.ietf.org/doc/draft-pro-adp-agent-discovery/>\n3. IETF Datatracker API, *IETF Datatracker document record for draft-pro-adp-agent-discovery* (checked 2026-10-30) — <https://datatracker.ietf.org/api/v1/doc/document/draft-pro-adp-agent-discovery/>\n4. IETF Datatracker API, *Revision events for draft-pro-adp-agent-discovery* (checked 2026-10-30) — <https://datatracker.ietf.org/api/v1/doc/newrevisiondocevent/?doc__name=draft-pro-adp-agent-discovery&format=json>\n5. M. Nottingham, *RFC 8615: Well-Known Uniform Resource Identifiers (URIs)* (May 2019) — <https://www.rfc-editor.org/rfc/rfc8615.html>\n6. B. Schwartz, M. Bishop, and E. Nygren, *RFC 9460: Service Binding and Parameter Specification via the DNS (SVCB and HTTPS Resource Records)* (November 2023) — <https://www.rfc-editor.org/rfc/rfc9460.html>\n7. J. Mozley and N. Williams (Infoblox), B. Sarikaya, R. Schott (Deutsche Telekom), and J. Damick (Amazon), *draft-mozleywilliams-dnsop-dnsaid — DNS for AI Discovery (IETF Datatracker; succeeded by draft-nemethi-dawn-dnsaid)* (checked 2026-10-29) — <https://datatracker.ietf.org/doc/draft-mozleywilliams-dnsop-dnsaid/>\n8. Agent Community (Open Agent Registry, Inc.), *Agent Identity & Discovery (AID) - v2.1.1 Specification* (2026-10-02 (fetched 2026-10-30)) — <https://aid.agentcommunity.org/docs/specification>\n9. Agentic Resource Discovery Project (ards-project), *Agentic Resource Discovery Specification v0.91* (2026-08-26; fetched 2026-10-30) — <https://agenticresourcediscovery.org/spec/>\n10. Scott Courtney, Vineeth Sai Narajala, Ken Huang, Idan Habler, and Akram Sheriff, *draft-narajala-courtney-ansv2 — Agent Name Service v2 (ANS): A Domain-Anchored Identity Layer for Autonomous AI Agents (IETF Datatracker)* (checked 2026-10-30) — <https://datatracker.ietf.org/doc/draft-narajala-courtney-ansv2/>\n11. S. Courtney (GoDaddy), V. S. Narajala (OWASP), K. Huang (DistributedApps.ai), I. Habler (OWASP), and A. Sheriff (Cisco Systems), *Agent Name Service v2 (ANS): A Domain-Anchored Identity Layer for Autonomous AI Agents (draft-narajala-courtney-ansv2-02)* (26 October 2026; expires 29 April 2027) — <https://www.ietf.org/archive/id/draft-narajala-courtney-ansv2-02.txt>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "ARDP",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "aliases": [],
   "analog": "a service registry with dynamic health/TTL semantics (like Consul or a SIP registrar), applied to agents",
   "collisions": [
    "ARD (Agentic Resource Discovery, unrelated Google/Microsoft/HF spec with a similar acronym and near-identical name)"
   ],
   "discovery": {
    "mechanism": "RESOLVE/QUERY operations over an HTTPS binding, with a minimal metadata resource advertising TTL bounds and supported auth profiles",
    "path": "/.well-known/ardp/meta"
   },
   "dispute": {
    "claims": [
     "ARDP (this record): RESOLVE/QUERY over HTTPS, TTL-bound presence, single-author IETF draft, expired 5 Aug 2026 with no follow-up seen",
     "ARD (see ard): search-first federated registry model, Google/Microsoft/HF, actively revised through v0.91 (26 Aug 2026)"
    ],
    "summary": "This draft's own name and acronym (ARDP, Agent Registration and Discovery Protocol) is one character and one word away from the entirely unrelated, much more prominent ARD (Agentic Resource Discovery, ard.md) from Google/Microsoft/Hugging Face. They are independent specifications with no shared authorship or mechanism found in the texts read."
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.ietf.org/archive/id/draft-pioli-agent-discovery-01.txt",
     "claim": "R. Pioli, *Agent Registration and Discovery Protocol (ARDP) (draft-pioli-agent-discovery-01)*, checked 2026-10-31",
     "date": null,
     "quote": "draft-pioli-agent-discovery-01 Abstract This document specifies the Agent Registration and Discovery Protocol (ARDP), a lightweight protocol for registering, discovering, and reaching autonomous software agents in distributed and federated environments. / ARDP defines a logical control plane composed of registrars and resolvers. Agents register their presence and capabilities with a registrar. Authorized clients query resolvers to obtain endpoint and capability information. / 15. Wire Format Sketch (Non-Normative) JSON over HTTPS is shown as an example binding. Alternative encodings (e.g., CBOR, gRPC) are possible. 15.1. Minimal HTTPS Binding This section describes a minimal HTTPS binding for ARDP operations. All endpoints are under the /.well-known/ardp/ path prefix. * GET /.well-known/ardp/meta - Returns server metadata including TTL bounds, supported protocols, and proof-of-control requirements. * GET /.well-known/ardp/nonce - Returns a JSON object with nonce and expires_in fields for use in proof-of-control. / JSON over HTTPS is shown as an example binding. / POST /.well-known/ardp/register - Registers or refreshes an agent. Refresh is performed by re-registering with the same (aid, binding_id). * POST /.well-known/ardp/deregister - Removes an agent registration. * GET /.well-known/ardp/resolve?aid={aid} - Resolves an AID to endpoints and capabilities. * GET /.well-known/ardp/query - Queries for agents by capability or namespace. Supports parameters: protocol, schema, limit, offset, detail. Default returns minimal data; use detail=full to request complete records. / Intended status: Informational February 2026 Expires: 28 August 2026 Agent Registration and Discovery Protocol (ARDP) draft-pioli-agent-discovery-01 / This Internet-Draft will expire on 5 August 2026. / Internet-Draft Agent Registration and Discovery Protoco February 2026 Roberto Pioli Independent Email: [email redacted] Pioli / Pioli Expires 28 August 2026 [Page 1] Internet-Draft Agent Registration and Discovery Protoco February 2026 / \"version\": \"1.0\", \"registrar_id\": \"ardp.example.com\", \"min_ttl\": 30, \"max_ttl\": 3600, \"default_ttl\": 300, ... \"supported_schema_versions\": [\"v0\"] / Agents may be ephemeral, mobile across execution environments, and implemented by heterogeneous vendors. ARDP addresses stable addressing of agents whose runtime location changes, authorized discovery by identity and declared capabilities / ARDP provides stable agent identities, dynamic endpoint resolution, capability advertisement (including protocol selection among MCP, A2A, HTTP, and gRPC), minimal presence signaling, and a security-first discovery control plane. / RESOLVE maps an AID to active endpoints and capabilities. Access MUST be authorized via the registry:resolve scope. / QUERY allows authorized discovery by capability or namespace. Results SHOULD be minimized to prevent metadata leakage. Access MUST be authorized via the registry:query scope. / Agent-to-agent interaction, session management, task execution, and tool invocation protocols. These are addressed by interaction protocols such as MCP and A2A. / ARDP supports domain-scoped authorities and explicit federation without mandating a single global registry. / ARDP complements, and does not replace, agent interaction protocols such as MCP and A2A.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://datatracker.ietf.org/doc/draft-pioli-agent-discovery/",
     "claim": "R. Pioli, *draft-pioli-agent-discovery — Agent Registration and Discovery Protocol (ARDP) (IETF Datatracker)*, checked 2026-10-31",
     "date": null,
     "quote": "This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. Document Type Expired Internet-Draft (individual) Expired & archived Author Roberto Pioli / Last updated 2026-08-28 (Latest revision 2026-02-24) RFC stream (None) Intended RFC status (None) / 2026-08-28 | 01 | (System) | Document has expired | | 2026-02-24 | 01 | Roberto Pioli | New version available: draft-pioli-agent-discovery-01.txt / Internet-Draft Agent Registration and Discovery Protoco February 2026 Roberto Pioli Independent Email: [email redacted] Pioli / | Expires 28 August 2026 | [Page] | Workgroup:: Network Working Group Internet-Draft:: draft-pioli-agent-discovery-01 / 2026 Expires: 28 August 2026 Agent Registration and Discovery Protocol (ARDP) draft-pioli-agent-discovery-01 Abstract This",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://datatracker.ietf.org/doc/html/draft-pioli-agent-discovery-01",
     "claim": "R. Pioli, *Agent Registration and Discovery Protocol (ARDP) (draft-pioli-agent-discovery-01 HTML)*, checked 2026-10-31",
     "date": null,
     "quote": "Intended status: Informational / Internet-Draft Agent Registration and Discovery Protoco February 2026 Pioli Expires 28 August 2026 Page / defines a metadata resource for deployments using HTTPS bindings.¶ Path: GET /.well-known/ardp/meta¶ GET /.well-known/ardp/meta / standing in the IETF standards process. Select version 00 01 Compare versions draft-pioli-agent-discovery-01 draft-pioli-agent-discovery-00 / GET /.well-known/ardp/meta - Returns server metadata including TTL bounds, supported protocols, and proof-of-control requirements.¶ / Copyright (c) 2026 IETF Trust and the persons identified as the document authors.",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://datatracker.ietf.org/doc/html/draft-pioli-agent-discovery-00",
     "claim": "R. Pioli, *Agent Registration and Discovery Protocol (ARDP) (draft-pioli-agent-discovery-00 HTML)*, historical revision (checked 2026-10-31)",
     "date": null,
     "quote": "a security-first discovery control plane. ARDP is transport-agnostic and complementary to existing agent interaction / in a metadata resource (recommended: /.well-known/ardp/meta).¶ /.well-known/ardp/meta ### 6.5. Meta Resource (Minimal) This section",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://www.rfc-editor.org/rfc/rfc8615.html",
     "claim": "M. Nottingham, *RFC 8615: Well-Known Uniform Resource Identifiers (URIs)*, May 2019",
     "date": null,
     "quote": "This memo defines a path prefix for \"well-known locations\",",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://www.rfc-editor.org/rfc/rfc6763.html",
     "claim": "S. Cheshire and M. Krochmal, *RFC 6763: DNS-Based Service Discovery*, February 2013",
     "date": null,
     "quote": "This document specifies how DNS resource records are named and",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://aaif.io/blog/a2a-joins-aaif",
     "claim": "Agentic AI Foundation, *A2A joins AAIF's open agentic stack*, published 2026-08-17; modified 2026-09-24",
     "date": null,
     "quote": "A2A v1.0, the first stable specification, shipped in March 2026.",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Current : the current protocol version, which is ready for use and may continue to receive backwards compatible changes.",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://datatracker.ietf.org/doc/draft-mozleywilliams-dnsop-dnsaid/",
     "claim": "J. Mozley and N. Williams (Infoblox), B. Sarikaya, R. Schott (Deutsche Telekom), and J. Damick (Amazon), *draft-mozleywilliams-dnsop-dnsaid — DNS for AI Discovery (IETF Datatracker; succeeded by draft-nemethi-dawn-dnsaid)*, checked 2026-10-29",
     "date": null,
     "quote": "draft-mozleywilliams-dnsop-dnsaid-02 Published: Intended Status:: Standards Track Expires: Authors:: J. Mozley Infoblox, Inc. N. Williams",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://datatracker.ietf.org/doc/draft-narajala-courtney-ansv2/",
     "claim": "Scott Courtney, Vineeth Sai Narajala, Ken Huang, Idan Habler, and Akram Sheriff, *draft-narajala-courtney-ansv2 — Agent Name Service v2 (ANS): A Domain-Anchored Identity Layer for Autonomous AI Agents (IETF Datatracker)*, checked 2026-10-30",
     "date": null,
     "quote": "Document Type Active Internet-Draft (individual) Authors Scott Courtney, Vineeth Sai Narajala, Ken Huang, Idan Habler, Akram Sheriff Last updated 2026-10-26 Replaces draft-narajala-ans RFC stream (None) Intended RFC status (None)",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://www.ietf.org/archive/id/draft-narajala-courtney-ansv2-02.txt",
     "claim": "S. Courtney (GoDaddy), V. S. Narajala (OWASP), K. Huang (DistributedApps.ai), I. Habler (OWASP), and A. Sheriff (Cisco Systems), *Agent Name Service v2 (ANS): A Domain-Anchored Identity Layer for Autonomous AI Agents (draft-narajala-courtney-ansv2-02)*, 26 October 2026; expires 29 April 2027",
     "date": null,
     "quote": "C2SP tlog-checkpoint signed-note format [C2SP]",
     "ref": 11
    }
   ],
   "form": "endpoint",
   "governance": "IETF individual Internet-Draft",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against draft-pioli-agent-discovery-00 spec text via datatracker.ietf.org; noted the draft as expired (date and successor corrected 2026-10-30: draft-pioli-agent-discovery-01 was posted on 2026-02-24 and expired on 2026-08-28)"
    },
    {
     "date": "2026-09-06",
     "note": "fetched IETF Datatracker status page as second, independent evidence entry confirming Expired/archived state; corrected version/spec_url from -00 to the actual latest revision -01; set phase from unknown to withdrawn on the strength of the datatracker's own Expired status"
    },
    {
     "date": "2026-10-16",
     "note": "Expired Internet-Draft (expired 2026-08-28)"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "ardp",
   "implementation": "none-found",
   "last_verified": "2026-11-12",
   "name": "Agent Registration and Discovery Protocol",
   "native_status": "Expired Internet-Draft (expired 2026-08-28)",
   "origin": {
    "date": "2026-02",
    "org": "Individual IETF submission"
   },
   "part_of": null,
   "parties": [
    "agent-site",
    "agent-agent",
    "agent-registry"
   ],
   "phase": "deprecated",
   "probe": {
    "method": "GET",
    "on_absent": "Domain does not run an ARDP-compliant registration/discovery endpoint",
    "parse": "200 response is JSON with ttl_min, ttl_max, auth_profiles and supported_protocols fields",
    "path": "https://{origin}/.well-known/ardp/meta"
   },
   "question": "How can an autonomous agent register a stable identity, advertise its capabilities and current endpoints with a TTL, and be discovered by others with minimal metadata leakage?",
   "scope": "general",
   "spec_url": "https://datatracker.ietf.org/doc/html/draft-pioli-agent-discovery-01",
   "step": "discover",
   "summary_md": "**Agent Registration and Discovery Protocol** (`ARDP`) is the protocol specified by `draft-pioli-agent-discovery-01` for registering, discovering, and reaching autonomous software agents in distributed and federated environments. Roberto Pioli is the author. Datatracker lists the document type as Expired Internet-Draft (individual) and states that this I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. ARDP defines a logical control plane composed of registrars and resolvers. Agents register their presence and capabilities with a registrar. Authorized clients query resolvers to obtain endpoint and capability information. Section 15 is a non-normative wire sketch. JSON over HTTPS is an example binding, and alternative encodings such as CBOR and gRPC are possible. Under `/.well-known/ardp/`, `GET /.well-known/ardp/meta` returns server metadata, and `GET /.well-known/ardp/nonce` returns a JSON object with `nonce` and `expires_in`. In that example binding, `POST /.well-known/ardp/register` registers or refreshes an agent with the same (aid, `binding_id`). `POST /.well-known/ardp/deregister` removes a registration. `GET /.well-known/ardp/resolve?aid={aid}` resolves an AID to endpoints and capabilities. `GET /.well-known/ardp/query` queries by capability or namespace. In the draft text header, `draft-pioli-agent-discovery-01` (dated February 2026) declares intended status Informational and `Expires: 28 August 2026`, whereas the status-of-memo boilerplate section of the same file retains an un-updated 5 August 2026 expiry date. IETF Datatracker metadata instead records RFC stream (None) and intended RFC status (None) (last updated 2026-08-28, latest revision 2026-02-24), and its history table logs revision 01 as expired on 2026-08-28 (Document has expired) after `draft-pioli-agent-discovery-01` was posted on 2026-02-24.",
   "track": "ietf",
   "version": {
    "date": "2026-02-24",
    "label": "draft-pioli-agent-discovery-01 (latest revision, expired)"
   },
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-pioli-agent-discovery"
    }
   ],
   "use_cases": [
    "agent-naming",
    "discover-my-api",
    "describe-agent-capabilities",
    "agent-to-agent-messaging"
   ],
   "audience": [
    "agent-builder",
    "platform",
    "standards-body"
   ],
   "pairs_with": [
    "a2a",
    "mcp",
    "dns-aid",
    "ans"
   ],
   "prerequisites": [],
   "ietf_tracker": {
    "doc": "draft-pioli-agent-discovery",
    "rev": "01",
    "state": "expired",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-02-24",
    "expires_utc": "2026-08-28",
    "as_of": "2026-10-31",
    "source": "https://datatracker.ietf.org/doc/draft-pioli-agent-discovery/",
    "source_label": "per IETF Datatracker"
   },
   "hatnote_md": "",
   "tier": "spec_brief",
   "lifecycle_status": "expired_draft",
   "wire_archetype": "harnesses_rpc_ui",
   "status_notice_md": "**Status notice (Expired Internet-Draft):** Individual submission `draft-pioli-agent-discovery-01` expired on `2026-08-28` without working-group adoption.",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "**Status notice (Expired Internet-Draft):** Individual submission `draft-pioli-agent-discovery-01` expired on `2026-08-28` without working-group adoption.",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Agent Registration and Discovery Protocol** (`ARDP`) is the protocol specified by `draft-pioli-agent-discovery-01` for registering, discovering, and reaching autonomous software agents in distributed and federated environments. [1] Roberto Pioli is the author. Datatracker lists the document type as Expired Internet-Draft (individual) and states that this I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. [2] ARDP defines a logical control plane composed of registrars and resolvers. Agents register their presence and capabilities with a registrar. Authorized clients query resolvers to obtain endpoint and capability information. [1] Section 15 is a non-normative wire sketch. JSON over HTTPS is an example binding, and alternative encodings such as CBOR and gRPC are possible. Under `/.well-known/ardp/`, `GET /.well-known/ardp/meta` returns server metadata, and `GET /.well-known/ardp/nonce` returns a JSON object with `nonce` and `expires_in`. [1] In that example binding, `POST /.well-known/ardp/register` registers or refreshes an agent with the same (aid, `binding_id`). `POST /.well-known/ardp/deregister` removes a registration. `GET /.well-known/ardp/resolve?aid={aid}` resolves an AID to endpoints and capabilities. `GET /.well-known/ardp/query` queries by capability or namespace. [1] In the draft text header, `draft-pioli-agent-discovery-01` (dated February 2026) declares intended status Informational and `Expires: 28 August 2026`, whereas the status-of-memo boilerplate section of the same file retains an un-updated 5 August 2026 expiry date. [1] IETF Datatracker metadata instead records RFC stream (None) and intended RFC status (None) (last updated 2026-08-28, latest revision 2026-02-24), and its history table logs revision 01 as expired on 2026-08-28 (Document has expired) after `draft-pioli-agent-discovery-01` was posted on 2026-02-24. [2]",
   "v05_identity_sentence_md": "**Agent Registration and Discovery Protocol** (`ARDP`) is the protocol specified by `draft-pioli-agent-discovery-01` for registering, discovering, and reaching autonomous software agents in distributed and federated environments. [1] Roberto Pioli is the author. Datatracker lists the document type as Expired Internet-Draft (individual) and states that this I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. [2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Discover](/category/discover/) (`discover`)"
    },
    {
     "label": "Form",
     "value_md": "Endpoint (`endpoint`)"
    },
    {
     "label": "Originated by",
     "value_md": "Roberto Pioli (Independent individual IETF submission) [1][2]"
    },
    {
     "label": "Governed by",
     "value_md": "Unaffiliated individual IETF Internet-Draft (`draft-pioli-agent-discovery`, no RFC stream or working group adoption) [2]"
    },
    {
     "label": "Track",
     "value_md": "IETF Internet-Draft (Informational) [3]"
    },
    {
     "label": "Status",
     "value_md": "Expired Internet-Draft (expired 2026-08-28) [2][3]"
    },
    {
     "label": "Version",
     "value_md": "`draft-pioli-agent-discovery-01` (Section 8.5 `/meta` example uses `\"version\": \"1.0\"` and `\"supported_schema_versions\": [\"v0\"]`; published 24 February 2026; expired 28 August 2026) [1]"
    },
    {
     "label": "Wire format",
     "value_md": "Transport-agnostic control plane with HTTPS/JSON bindings (`/.well-known/ardp/meta`) and ABNF-normalized Agent Identifiers (`agent:<local-id>@<authority>`) [3][4]"
    },
    {
     "label": "Specification",
     "value_md": "https://datatracker.ietf.org/doc/html/draft-pioli-agent-discovery-01 [3]"
    },
    {
     "label": "Found at",
     "value_md": "`/.well-known/ardp/meta`, `/.well-known/ardp/nonce`, and logical `REGISTER`, `RESOLVE`, and `QUERY` operations with `jws-proof-of-control` [3][4]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust Legal Provisions (BCP 78) [3]"
    },
    {
     "label": "IETF state",
     "value_md": "`draft-pioli-agent-discovery-01` · **Expired** 2026-08-28 · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-pioli-agent-discovery/))"
    }
   ],
   "v05_problem_md": "Agents may be ephemeral, mobile across execution environments, and implemented by heterogeneous vendors. ARDP addresses stable addressing of agents whose runtime location changes, and authorized discovery by identity and declared capabilities. [1] ARDP provides stable agent identities, dynamic endpoint resolution, capability advertisement with protocol selection among MCP, A2A, HTTP, and gRPC, and minimal presence signaling. [1] RESOLVE maps an AID to active endpoints and capabilities. Access MUST be authorized via the `registry:resolve` scope. [1] QUERY allows authorized discovery by capability or namespace. Results SHOULD be minimized to prevent metadata leakage. Access MUST be authorized via the `registry:query` scope. [1] Agent-to-agent interaction, session management, task execution, and tool invocation protocols are out of scope. The draft assigns those to interaction protocols such as MCP and A2A. [1] ARDP supports domain-scoped authorities and explicit federation without mandating a single global registry. [1] ARDP complements, and does not replace, agent interaction protocols such as MCP and A2A. [1]",
   "v05_mechanism_delta_md": "ARDP provides stable agent identities, dynamic endpoint resolution, capability advertisement with protocol selection among MCP, A2A, HTTP, and gRPC, and minimal presence signaling. [1] RESOLVE maps an AID to active endpoints and capabilities. Access MUST be authorized via the `registry:resolve` scope. [1] QUERY allows authorized discovery by capability or namespace. Results SHOULD be minimized to prevent metadata leakage. Access MUST be authorized via the `registry:query` scope. [1]",
   "v05_scope_boundary_md": "Agent-to-agent interaction, session management, task execution, and tool invocation protocols are out of scope. The draft assigns those to interaction protocols such as MCP and A2A. [1] ARDP supports domain-scoped authorities and explicit federation without mandating a single global registry. [1] ARDP complements, and does not replace, agent interaction protocols such as MCP and A2A. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "Well-Known URIs (RFC 8615)",
      "spec_or_rfc": "RFC 8615",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "ARDP publishes registrar metadata (TTL bounds, supported protocols, and proof-of-control requirements) at /.well-known/ardp/meta. [3][5]"
     },
     {
      "name": "DNS-Based Service Discovery (RFC 6763)",
      "spec_or_rfc": "RFC 6763",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "ARDP publishes registrar metadata at /.well-known/ardp/meta, agents register and refresh TTL-bounded bindings by sending REGISTER with the same (aid, binding_id) pair, and clients look up agents with RESOLVE and QUERY rather than DNS-SD PTR, SRV, and TXT records. [3][6]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "a2a",
      "target_name": "Agent2Agent Protocol (A2A)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "ARDP advertises registrar TTL bounds and supported protocols, including A2A, at /.well-known/ardp/meta and resolves an endpoint with RESOLVE, while A2A remains the Agent Card and JSON-RPC 2.0, gRPC, or HTTP+JSON task binding used after that resolution. [3][7]"
     },
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "ARDP advertises supported protocols, including MCP, in registrar metadata at /.well-known/ardp/meta and in REGISTER capability documents, while MCP remains the JSON-RPC 2.0 session for tools, resources, and prompt templates opened at the resolved endpoint. [3][8]"
     },
     {
      "target_id": "dns-aid",
      "target_name": "DNS-AID (DNS for AI Discovery, draft-nemethi-dawn-dnsaid)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ARDP advertises registrar metadata at /.well-known/ardp/meta, registers agents with REGISTER, and resolves them with RESOLVE and QUERY, while DNS-AID (draft-nemethi-dawn-dnsaid, succeeding draft-mozleywilliams-dnsop-dnsaid) publishes discovery data as DNS SVCB records. [3][9]"
     },
     {
      "target_id": "ans",
      "target_name": "Agent Name Service v2 (ANS)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ARDP advertises registrar metadata at /.well-known/ardp/meta and registers soft-state bindings with REGISTER, while ANS v2 publishes agent identity in DNS-AID SVCB records (with an opt-in _ans TXT profile), X.509 certificates, and a C2SP transparency log. [3][10][11]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "dawn-agent-discovery-framework",
     "target_name": "A Framework for Agent Discovery in DAWN",
     "relation_label": "Peer alternative",
     "delta": "DAWN's cross-domain mechanism is DNS publication and resolution, with mDNS/DNS-SD only on the local plane, while ARDP publishes registrar metadata at /.well-known/ardp/meta, registers agents with REGISTER, and resolves them with RESOLVE and QUERY.",
     "item_md": "**[A Framework for Agent Discovery in DAWN](/protocols/dawn-agent-discovery-framework/)** (Peer alternative) — DAWN's cross-domain mechanism is DNS publication and resolution, with mDNS/DNS-SD only on the local plane, while ARDP publishes registrar metadata at /.well-known/ardp/meta, registers agents with REGISTER, and resolves them with RESOLVE and QUERY."
    },
    {
     "item_md": "**[Discover protocols](/category/discover/)** — Category index for `discover` standards."
    }
   ],
   "v05_compiled_md": "---\nid: ardp\ntitle: \"Agent Registration and Discovery Protocol\"\ntier: spec_brief\nlifecycle_status: expired_draft\ncategory: discover\nform: endpoint\nwire_archetype: harnesses_rpc_ui\nspec_url: https://datatracker.ietf.org/doc/html/draft-pioli-agent-discovery-01\nlast_checked: 2026-11-12\n---\n\n# Agent Registration and Discovery Protocol\n\n**Category:** [Discover](/category/discover/) (`discover`) · **Form:** Endpoint (`endpoint`) · **Last checked:** 2026-11-12\n\n> ***Status notice (Expired Internet-Draft):** Individual submission `draft-pioli-agent-discovery-01` expired on `2026-08-28` without working-group adoption.*\n\n**Agent Registration and Discovery Protocol** (`ARDP`) is the protocol specified by `draft-pioli-agent-discovery-01` for registering, discovering, and reaching autonomous software agents in distributed and federated environments. [1] Roberto Pioli is the author. Datatracker lists the document type as Expired Internet-Draft (individual) and states that this I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. [2] ARDP defines a logical control plane composed of registrars and resolvers. Agents register their presence and capabilities with a registrar. Authorized clients query resolvers to obtain endpoint and capability information. [1] Section 15 is a non-normative wire sketch. JSON over HTTPS is an example binding, and alternative encodings such as CBOR and gRPC are possible. Under `/.well-known/ardp/`, `GET /.well-known/ardp/meta` returns server metadata, and `GET /.well-known/ardp/nonce` returns a JSON object with `nonce` and `expires_in`. [1] In that example binding, `POST /.well-known/ardp/register` registers or refreshes an agent with the same (aid, `binding_id`). `POST /.well-known/ardp/deregister` removes a registration. `GET /.well-known/ardp/resolve?aid={aid}` resolves an AID to endpoints and capabilities. `GET /.well-known/ardp/query` queries by capability or namespace. [1] In the draft text header, `draft-pioli-agent-discovery-01` (dated February 2026) declares intended status Informational and `Expires: 28 August 2026`, whereas the status-of-memo boilerplate section of the same file retains an un-updated 5 August 2026 expiry date. [1] IETF Datatracker metadata instead records RFC stream (None) and intended RFC status (None) (last updated 2026-08-28, latest revision 2026-02-24), and its history table logs revision 01 as expired on 2026-08-28 (Document has expired) after `draft-pioli-agent-discovery-01` was posted on 2026-02-24. [2]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Discover](/category/discover/) (`discover`) |\n| **Form** | Endpoint (`endpoint`) |\n| **Originated by** | Roberto Pioli (Independent individual IETF submission) [1][2] |\n| **Governed by** | Unaffiliated individual IETF Internet-Draft (`draft-pioli-agent-discovery`, no RFC stream or working group adoption) [2] |\n| **Track** | IETF Internet-Draft (Informational) [3] |\n| **Status** | Expired Internet-Draft (expired 2026-08-28) [2][3] |\n| **Version** | `draft-pioli-agent-discovery-01` (Section 8.5 `/meta` example uses `\"version\": \"1.0\"` and `\"supported_schema_versions\": [\"v0\"]`; published 24 February 2026; expired 28 August 2026) [1] |\n| **Wire format** | Transport-agnostic control plane with HTTPS/JSON bindings (`/.well-known/ardp/meta`) and ABNF-normalized Agent Identifiers (`agent:<local-id>@<authority>`) [3][4] |\n| **Specification** | https://datatracker.ietf.org/doc/html/draft-pioli-agent-discovery-01 [3] |\n| **Found at** | `/.well-known/ardp/meta`, `/.well-known/ardp/nonce`, and logical `REGISTER`, `RESOLVE`, and `QUERY` operations with `jws-proof-of-control` [3][4] |\n| **Licence** | IETF Trust Legal Provisions (BCP 78) [3] |\n| **IETF state** | `draft-pioli-agent-discovery-01` · **Expired** 2026-08-28 · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-pioli-agent-discovery/)) |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nAgents may be ephemeral, mobile across execution environments, and implemented by heterogeneous vendors. ARDP addresses stable addressing of agents whose runtime location changes, and authorized discovery by identity and declared capabilities. [1] ARDP provides stable agent identities, dynamic endpoint resolution, capability advertisement with protocol selection among MCP, A2A, HTTP, and gRPC, and minimal presence signaling. [1] RESOLVE maps an AID to active endpoints and capabilities. Access MUST be authorized via the `registry:resolve` scope. [1] QUERY allows authorized discovery by capability or namespace. Results SHOULD be minimized to prevent metadata leakage. Access MUST be authorized via the `registry:query` scope. [1] Agent-to-agent interaction, session management, task execution, and tool invocation protocols are out of scope. The draft assigns those to interaction protocols such as MCP and A2A. [1] ARDP supports domain-scoped authorities and explicit federation without mandating a single global registry. [1] ARDP complements, and does not replace, agent interaction protocols such as MCP and A2A. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **Well-Known URIs (RFC 8615)** | `RFC 8615` | Profiles classic standard | ARDP publishes registrar metadata (TTL bounds, supported protocols, and proof-of-control requirements) at /.well-known/ardp/meta. [3][5] |\n| **DNS-Based Service Discovery (RFC 6763)** | `RFC 6763` | Analogous to classic standard | ARDP publishes registrar metadata at /.well-known/ardp/meta, agents register and refresh TTL-bounded bindings by sending REGISTER with the same (aid, binding_id) pair, and clients look up agents with RESOLVE and QUERY rather than DNS-SD PTR, SRV, and TXT records. [3][6] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Agent2Agent Protocol (A2A)](/protocols/a2a/)** | Complements | ARDP advertises registrar TTL bounds and supported protocols, including A2A, at /.well-known/ardp/meta and resolves an endpoint with RESOLVE, while A2A remains the Agent Card and JSON-RPC 2.0, gRPC, or HTTP+JSON task binding used after that resolution. [3][7] |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | ARDP advertises supported protocols, including MCP, in registrar metadata at /.well-known/ardp/meta and in REGISTER capability documents, while MCP remains the JSON-RPC 2.0 session for tools, resources, and prompt templates opened at the resolved endpoint. [3][8] |\n| **[DNS-AID (DNS for AI Discovery, draft-nemethi-dawn-dnsaid)](/protocols/dns-aid/)** | Peer alternative | ARDP advertises registrar metadata at /.well-known/ardp/meta, registers agents with REGISTER, and resolves them with RESOLVE and QUERY, while DNS-AID (draft-nemethi-dawn-dnsaid, succeeding draft-mozleywilliams-dnsop-dnsaid) publishes discovery data as DNS SVCB records. [3][9] |\n| **[Agent Name Service v2 (ANS)](/protocols/ans/)** | Peer alternative | ARDP advertises registrar metadata at /.well-known/ardp/meta and registers soft-state bindings with REGISTER, while ANS v2 publishes agent identity in DNS-AID SVCB records (with an opt-in _ans TXT profile), X.509 certificates, and a C2SP transparency log. [3][10][11] |\n\n---\n\n## See also\n\n- **[A Framework for Agent Discovery in DAWN](/protocols/dawn-agent-discovery-framework/)** *(Peer alternative)* — DAWN's cross-domain mechanism is DNS publication and resolution, with mDNS/DNS-SD only on the local plane, while ARDP publishes registrar metadata at /.well-known/ardp/meta, registers agents with REGISTER, and resolves them with RESOLVE and QUERY.\n- **Category:** [Discover protocols](/category/discover/)\n\n---\n\n## References\n\n1. R. Pioli, *Agent Registration and Discovery Protocol (ARDP) (draft-pioli-agent-discovery-01)* (checked 2026-10-31) — <https://www.ietf.org/archive/id/draft-pioli-agent-discovery-01.txt>\n2. R. Pioli, *draft-pioli-agent-discovery — Agent Registration and Discovery Protocol (ARDP) (IETF Datatracker)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/draft-pioli-agent-discovery/>\n3. R. Pioli, *Agent Registration and Discovery Protocol (ARDP) (draft-pioli-agent-discovery-01 HTML)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/html/draft-pioli-agent-discovery-01>\n4. R. Pioli, *Agent Registration and Discovery Protocol (ARDP) (draft-pioli-agent-discovery-00 HTML)* (historical revision (checked 2026-10-31)) — <https://datatracker.ietf.org/doc/html/draft-pioli-agent-discovery-00>\n5. M. Nottingham, *RFC 8615: Well-Known Uniform Resource Identifiers (URIs)* (May 2019) — <https://www.rfc-editor.org/rfc/rfc8615.html>\n6. S. Cheshire and M. Krochmal, *RFC 6763: DNS-Based Service Discovery* (February 2013) — <https://www.rfc-editor.org/rfc/rfc6763.html>\n7. Agentic AI Foundation, *A2A joins AAIF's open agentic stack* (published 2026-08-17; modified 2026-09-24) — <https://aaif.io/blog/a2a-joins-aaif>\n8. Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation* (2026-07-28) — <https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning>\n9. J. Mozley and N. Williams (Infoblox), B. Sarikaya, R. Schott (Deutsche Telekom), and J. Damick (Amazon), *draft-mozleywilliams-dnsop-dnsaid — DNS for AI Discovery (IETF Datatracker; succeeded by draft-nemethi-dawn-dnsaid)* (checked 2026-10-29) — <https://datatracker.ietf.org/doc/draft-mozleywilliams-dnsop-dnsaid/>\n10. Scott Courtney, Vineeth Sai Narajala, Ken Huang, Idan Habler, and Akram Sheriff, *draft-narajala-courtney-ansv2 — Agent Name Service v2 (ANS): A Domain-Anchored Identity Layer for Autonomous AI Agents (IETF Datatracker)* (checked 2026-10-30) — <https://datatracker.ietf.org/doc/draft-narajala-courtney-ansv2/>\n11. S. Courtney (GoDaddy), V. S. Narajala (OWASP), K. Huang (DistributedApps.ai), I. Habler (OWASP), and A. Sheriff (Cisco Systems), *Agent Name Service v2 (ANS): A Domain-Anchored Identity Layer for Autonomous AI Agents (draft-narajala-courtney-ansv2-02)* (26 October 2026; expires 29 April 2027) — <https://www.ietf.org/archive/id/draft-narajala-courtney-ansv2-02.txt>\n",
   "superseded_by": null
  },
  {
   "acronym": "ADS",
   "adoption": {
    "level": "observed",
    "by": "AGNTCY Directory (agntcy/dir)",
    "probe_run": null
   },
   "aliases": [
    "AGNTCY Directory",
    "dir"
   ],
   "analog": "a distributed package registry (like npm or an OCI container registry) combined with an LDAP-style directory, applied to agents",
   "collisions": [
    "ADS is a generic acronym also used for Active Directory Services and Alternate Data Streams; within the agentic space, unrelated to ARDS/ARD"
   ],
   "discovery": {
    "mechanism": "Content-addressed OCI artifacts plus a DHT mapping skills to content identifiers and content identifiers to peer IDs; a host-local AI Finder exposes the same records over gRPC and a REST gateway",
    "path": "GET /v1/agents; GET /.well-known/ai-catalog.json"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.ietf.org/archive/id/draft-mp-agntcy-ads-03.txt",
     "claim": "L. Muscariello and R. Polic (Cisco), *Agent Directory Service (draft-mp-agntcy-ads-03)*, 2 November 2026",
     "date": null,
     "quote": "draft-mp-agntcy-ads-03 ... The Agent Directory Service (ADS) is a distributed directory service designed to store metadata for AI agent applications. This metadata, stored as directory records, enables the discovery of agent applications with specific skills for solving various problems. The implementation features distributed directories that interconnect through a content-routing protocol. / Independent Submission ... L. Muscariello ... R. Polic ... Intended status: Informational ... Cisco ... Luca Muscariello ... Cisco ... Ramiz Polic ... Cisco / A Record Artifact is an AGNTCY OASF Record packaged as an OCI artifact. / Records MUST be addressed by digest for immutable retrieval. Tags are mutable aliases and can be used as human- ... readable pointers, but implementations MUST NOT assume a tag resolves to more than one manifest at a time. / ADS exposes AI Catalog content through the AI Finder service, offered over gRPC and, via a gateway, as a REST API. / GET /v1/agents ... GET /v1/agents/{cid} ... GET /v1/agents/{cid}/export ... GET /.well-known/ai-catalog.json / Expires: 6 May 2027 ... 2 November 2026 ... draft-mp-agntcy-ads-03 ... This Internet-Draft will expire on 6 May 2027. / This note is to be removed before publishing as an RFC. ... The latest revision of this draft can be found at https://spec.dir.agncty.org. ... Source for this draft and an issue tracker can be found at https://github.com/agntcy/dir. / 2 November 2026 ... draft-mp-agntcy-ads-03 / Source for this draft and an issue tracker can be found at https://github.com/agntcy/dir. / Independent Submission ... Intended status: Informational / Agent Directory Service ... draft-mp-agntcy-ads-03 / Intended status: Informational ... The latest revision of this draft can be found at https://spec.dir.agncty.org. ... Source for this draft and an issue tracker can be found at https://github.com/agntcy/dir. ... work in progress. ... This Internet-Draft will expire on 6 May 2027. / A Record Artifact is an AGNTCY OASF Record packaged as an OCI artifact. ... artifactType string ... application/ ... vnd.agntcy.dir.record.v1+json / The first level maps agent capabilities and skills to their corresponding Content Identifiers (CID) ... The second level maps Content Identifiers to the Peer IDs of nodes that store the corresponding agent records / Copyright (c) 2026 IETF Trust and the persons identified as the document authors. / Traditional keyword-based search approaches face significant limitations when applied to agent discovery ... Without structured organization, every query potentially requires examining every agent record / The first level maps agent capabilities and skills to their corresponding Content Identifiers (CID) ... find all agents capable of natural language processing ... to quickly resolve to a set of content identifiers without needing to search through individual agent records / The second level maps Content Identifiers to the Peer IDs of nodes that store the corresponding agent records / Once discovery identifies the relevant CIDs and their hosting peers, the actual agent records are retrieved using the OCI distribution protocol / The Open Agent Schema Framework (OASF) ... complements Record Artifact Specification by defining the actual data models for agent-related information referenced in the OCI artifacts. / Domain-only or module-only queries are not supported, as they would bypass the primary indexing structure ... This skill-mandatory rule applies to the DHT capability index ... does not constrain the host-local AI Finder catalog browse surface ... filters and orders entries over arbitrary fields and tags without requiring a skill criterion / Supported formats include oasf, a2a, agent-skill, and mcp-ghcopilot / This document has no IANA actions.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://datatracker.ietf.org/doc/draft-mp-agntcy-ads/",
     "claim": "Luca Muscariello and Ramiz Polic, *Agent Directory Service (draft-mp-agntcy-ads datatracker document page)*, checked 2026-10-31",
     "date": null,
     "quote": "Document history ... 2026-07-06 ... draft-mp-agntcy-ads-02.txt ... 2026-02-24 ... draft-mp-agntcy-ads-01.txt ... 2025-10-17 ... draft-mp-agntcy-ads-00.txt / IESG state ... I-D Exists ... This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. ... Active Internet-Draft (individual) ... RFC stream (None)",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://github.com/agntcy/dir",
     "claim": "AGNTCY, *GitHub repository record agntcy/dir*, checked 2026-10-31",
     "date": null,
     "quote": "\"full_name\": \"agntcy/dir\" / \"license\": { \"key\": \"apache-2.0\", \"name\": \"Apache License 2.0\" / \"full_name\": \"agntcy/dir\" ... \"description\": \"Distributed Announce and Discovery of Multi-Agentic-Systems\" ... \"pushed_at\": \"2026-10-30T18:18:57Z\" ... \"language\": \"Go\" ... \"spdx_id\": \"Apache-2.0\"",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://www.rfc-editor.org/rfc/rfc4511.html",
     "claim": "J. Sermersheim, Ed., *RFC 4511: Lightweight Directory Access Protocol (LDAP): The Protocol*, June 2006",
     "date": null,
     "quote": "This document describes the protocol elements, along with their",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://www.rfc-editor.org/rfc/rfc8615.html",
     "claim": "M. Nottingham, *RFC 8615: Well-Known Uniform Resource Identifiers (URIs)*, May 2019",
     "date": null,
     "quote": "This memo defines a path prefix for \"well-known locations\",",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://github.com/agntcy/oasf/releases",
     "claim": "AGNTCY, *agntcy/oasf releases*, checked 2026-10-31",
     "date": null,
     "quote": "\"html_url\": \"https://github.com/agntcy/oasf/releases/tag/v1.1.0\", \"id\": 352159727, \"author\": { \"login\": \"github-actions[bot]\", \"id\": 41898282, \"node_id\": \"MDM6Qm90NDE4OTgyODI=\", \"avatar_url\":",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://raw.githubusercontent.com/Agent-Card/ai-catalog/main/specification/ai-catalog.md",
     "claim": "Agent Card Working Group, *Agent Card Working Group — ai-catalog.md*, checked 2026-10-29",
     "date": null,
     "quote": "This section registers the ai-catalog.json well-known URI in the IANA \"Well-Known URIs\" registry [[RFC8615]]. URI Suffix:: ai-catalog.json Change Controller:: Agent Card Working Group",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://aaif.io/blog/a2a-joins-aaif",
     "claim": "Agentic AI Foundation, *A2A joins AAIF's open agentic stack*, published 2026-08-17; modified 2026-09-24",
     "date": null,
     "quote": "A2A v1.0, the first stable specification, shipped in March 2026.",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://agenticresourcediscovery.org/spec/",
     "claim": "Agentic Resource Discovery Project (ards-project), *Agentic Resource Discovery Specification v0.91*, 2026-08-26; fetched 2026-10-30",
     "date": null,
     "quote": "Version: v0.91 Status: Proposal Date: August 26, 2026",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Current : the current protocol version, which is ready for use and may continue to receive backwards compatible changes.",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://raw.githubusercontent.com/agntcy/dir/main/README.md",
     "claim": "AGNTCY, *AGNTCY Directory README*, checked 2026-10-31",
     "date": null,
     "quote": "The Directory (dir) allows publication, exchange, and discovery of information about records over a distributed peer-to-peer network. ... Directory uses content-addressing for global uniqueness and implements distributed hash tables (DHT) for scalable content discovery and synchronization across decentralized networks. ... ghcr.io/agntcy/dir-apiserver:v1.8.0 ... It bundles the gRPC apiserver and reconciler into a single process with embedded SQLite and a local OCI store.",
     "ref": 11
    }
   ],
   "form": "endpoint",
   "governance": "Independent Submission by L. Muscariello and R. Polic (Cisco); source and issue tracker at github.com/agntcy/dir",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against draft-mp-agntcy-ads-02 spec text via datatracker.ietf.org"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "ads",
   "implementation": "shipping",
   "last_verified": "2026-11-12",
   "name": "Agent Directory Service",
   "native_status": "Internet-Draft; work in progress; intended status Informational; latest-revision pointer: https://spec.dir.agncty.org ([sic], as printed in the draft; source repository https://github.com/agntcy/dir)",
   "origin": {
    "date": "2025-10-17",
    "org": "AGNTCY (Cisco Outshift-led project, now under the Linux Foundation)"
   },
   "part_of": null,
   "parties": [
    "agent-site",
    "agent-registry"
   ],
   "phase": "draft",
   "probe": {
    "method": "GET",
    "on_absent": "Host does not run an AGNTCY ADS AI Finder REST gateway; the record may still exist in the distributed hash table without a host-local HTTP surface",
    "parse": "200 response is a paginated JSON list of CatalogEntry records; a companion GET /.well-known/ai-catalog.json returns the host's WellKnownCatalog document",
    "path": "https://{origin}/v1/agents"
   },
   "question": "Given a required skill, which agents provide it, where are they, and how can I fetch a verifiable, content-addressed record describing them?",
   "scope": "general",
   "spec_url": "https://www.ietf.org/archive/id/draft-mp-agntcy-ads-03.txt",
   "step": "discover",
   "summary_md": "The **Agent Directory Service** (**ADS**, `draft-mp-agntcy-ads-03`) is a distributed directory service designed to store metadata for AI agent applications. This metadata, stored as directory records, enables the discovery of agent applications with specific skills for solving various problems. The implementation features distributed directories that interconnect through a content-routing protocol. L. Muscariello and R. Polic of Cisco submitted it as an Independent Submission with intended status Informational. The authors' addresses name Luca Muscariello and Ramiz Polic, both at Cisco. A Record Artifact is an AGNTCY OASF Record packaged as an OCI artifact. Records MUST be addressed by digest for immutable retrieval. Tags are mutable aliases and can be used as human-readable pointers, but implementations MUST NOT assume a tag resolves to more than one manifest at a time. ADS exposes AI Catalog content through the AI Finder service, offered over gRPC and, via a gateway, as a REST API. That REST surface lists `GET /v1/agents`, `GET /v1/agents/{cid}`, `GET /v1/agents/{cid}/export`, and `GET /.well-known/ai-catalog.json`. `draft-mp-agntcy-ads-03` is dated 2 November 2026 and expires on 6 May 2027. About This Document states that the note is to be removed before publishing as an RFC, points to the source repository and issue tracker at https://github.com/agntcy/dir, and prints the latest-revision URL with the transposed spelling `https://spec.dir.agncty.org` [sic]. Revision history spans `draft-mp-agntcy-ads-00` on `2025-10-17`, `draft-mp-agntcy-ads-01` on `2026-02-24`, `draft-mp-agntcy-ads-02` on `2026-07-06`, and `draft-mp-agntcy-ads-03` on 2 November 2026.",
   "track": "linux-foundation",
   "version": {
    "date": "2026-11-02",
    "label": "draft-mp-agntcy-ads-03"
   },
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-mp-agntcy-ads"
    }
   ],
   "use_cases": [
    "describe-agent-capabilities",
    "discover-my-api",
    "agent-to-agent-messaging",
    "agent-naming"
   ],
   "audience": [
    "agent-builder",
    "platform",
    "standards-body"
   ],
   "pairs_with": [
    "oasf",
    "ai-catalog-well-known-file",
    "a2a",
    "ard",
    "mcp"
   ],
   "prerequisites": [
    "oasf"
   ],
   "ietf_tracker": {
    "doc": "draft-mp-agntcy-ads",
    "rev": "03",
    "state": "active",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-11-02",
    "expires_utc": "2027-05-06",
    "as_of": "2026-11-07",
    "source": "https://datatracker.ietf.org/doc/draft-mp-agntcy-ads/",
    "source_label": "per IETF Datatracker"
   },
   "hatnote_md": "",
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "harnesses_rpc_ui",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": null,
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "The **Agent Directory Service** (**ADS**, `draft-mp-agntcy-ads-03`) is a distributed directory service designed to store metadata for AI agent applications. This metadata, stored as directory records, enables the discovery of agent applications with specific skills for solving various problems. The implementation features distributed directories that interconnect through a content-routing protocol. [1] L. Muscariello and R. Polic of Cisco submitted it as an Independent Submission with intended status Informational. The authors' addresses name Luca Muscariello and Ramiz Polic, both at Cisco. [1] A Record Artifact is an AGNTCY OASF Record packaged as an OCI artifact. [1] Records MUST be addressed by digest for immutable retrieval. Tags are mutable aliases and can be used as human-readable pointers, but implementations MUST NOT assume a tag resolves to more than one manifest at a time. [1] ADS exposes AI Catalog content through the AI Finder service, offered over gRPC and, via a gateway, as a REST API. That REST surface lists `GET /v1/agents`, `GET /v1/agents/{cid}`, `GET /v1/agents/{cid}/export`, and `GET /.well-known/ai-catalog.json`. [1] `draft-mp-agntcy-ads-03` is dated 2 November 2026 and expires on 6 May 2027. [1] About This Document states that the note is to be removed before publishing as an RFC, points to the source repository and issue tracker at https://github.com/agntcy/dir, and prints the latest-revision URL with the transposed spelling `https://spec.dir.agncty.org` [sic]. [1] Revision history spans `draft-mp-agntcy-ads-00` on `2025-10-17`, `draft-mp-agntcy-ads-01` on `2026-02-24`, `draft-mp-agntcy-ads-02` on `2026-07-06`, and `draft-mp-agntcy-ads-03` on 2 November 2026. [1][2]",
   "v05_identity_sentence_md": "The **Agent Directory Service** (**ADS**, `draft-mp-agntcy-ads-03`) is a distributed directory service designed to store metadata for AI agent applications. This metadata, stored as directory records, enables the discovery of agent applications with specific skills for solving various problems. The implementation features distributed directories that interconnect through a content-routing protocol. [1] L. Muscariello and R. Polic of Cisco submitted it as an Independent Submission with intended status Informational. The authors' addresses name Luca Muscariello and Ramiz Polic, both at Cisco. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Discover](/category/discover/) (`discover`)"
    },
    {
     "label": "Form",
     "value_md": "Endpoint (`endpoint`)"
    },
    {
     "label": "Originated by",
     "value_md": "Luca Muscariello and Ramiz Polic (Cisco); source and issue tracker at https://github.com/agntcy/dir [1]"
    },
    {
     "label": "Governed by",
     "value_md": "Independent Submission; intended status Informational. Datatracker: Active Internet-Draft (individual), RFC stream (None), IESG state I-D Exists. This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. [1][2]"
    },
    {
     "label": "Track",
     "value_md": "Linux Foundation AGNTCY open-source directory (`agntcy/dir`) and Independent Submission IETF Internet-Draft (`draft-mp-agntcy-ads-03`, Intended status: Informational) [1]"
    },
    {
     "label": "Status",
     "value_md": "Internet-Draft; work in progress; intended status Informational; expires 6 May 2027. Source repository: https://github.com/agntcy/dir (latest-revision URL printed in the draft with the transposed spelling `https://spec.dir.agncty.org` [sic]) [1]"
    },
    {
     "label": "Version",
     "value_md": "`draft-mp-agntcy-ads-03`, dated 2 November 2026, expires 6 May 2027 [1]"
    },
    {
     "label": "Wire format",
     "value_md": "AGNTCY OASF record packaged as an OCI artifact (`application/vnd.agntcy.dir.record.v1+json`); AI Finder over gRPC and a REST gateway [1]"
    },
    {
     "label": "Specification",
     "value_md": "[draft-mp-agntcy-ads-03.txt](https://www.ietf.org/archive/id/draft-mp-agntcy-ads-03.txt) [1]"
    },
    {
     "label": "Found at",
     "value_md": "DHT skills-to-CID and CID-to-peer mappings; `GET /v1/agents`; `GET /.well-known/ai-catalog.json` [1]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust Legal Provisions (BCP 78, `draft-mp-agntcy-ads-03`); Apache License 2.0 (`agntcy/dir`) [1][3]"
    },
    {
     "label": "IETF state",
     "value_md": "`draft-mp-agntcy-ads-03` · **Active Internet-Draft** (expires 2027-05-06) · Individual · as of 2026-11-07 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-mp-agntcy-ads/))"
    }
   ],
   "v05_problem_md": "Traditional keyword-based search approaches face significant limitations when applied to agent discovery. Without structured organization, every query potentially requires examining every agent record. [1] The first level maps agent capabilities and skills to their corresponding Content Identifiers (CID). A query for agents capable of natural language processing resolves to a set of content identifiers without searching individual agent records. [1] The second level maps Content Identifiers to the Peer IDs of nodes that store the corresponding agent records. [1] Once discovery identifies the relevant CIDs and their hosting peers, the actual agent records are retrieved using the OCI distribution protocol. [1] The Open Agent Schema Framework (OASF) complements Record Artifact Specification by defining the actual data models for agent-related information referenced in the OCI artifacts. [1] Domain-only or module-only queries are not supported, as they would bypass the primary indexing structure. That skill-mandatory rule applies to the DHT capability index and does not constrain the host-local AI Finder catalog browse surface. [1] Supported export formats include `oasf`, `a2a`, `agent-skill`, and `mcp-ghcopilot`. [1] The specification has no IANA actions. [1]",
   "v05_mechanism_delta_md": "The first level maps agent capabilities and skills to their corresponding Content Identifiers (CID). A query for agents capable of natural language processing resolves to a set of content identifiers without searching individual agent records. [1] The second level maps Content Identifiers to the Peer IDs of nodes that store the corresponding agent records. [1] Once discovery identifies the relevant CIDs and their hosting peers, the actual agent records are retrieved using the OCI distribution protocol. [1]",
   "v05_scope_boundary_md": "The Open Agent Schema Framework (OASF) complements Record Artifact Specification by defining the actual data models for agent-related information referenced in the OCI artifacts. [1] Domain-only or module-only queries are not supported, as they would bypass the primary indexing structure. That skill-mandatory rule applies to the DHT capability index and does not constrain the host-local AI Finder catalog browse surface. [1] Supported export formats include `oasf`, `a2a`, `agent-skill`, and `mcp-ghcopilot`. [1] The specification has no IANA actions. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "Lightweight Directory Access Protocol (LDAP, RFC 4511)",
      "spec_or_rfc": "RFC 4511",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "ADS packages each agent record as an OCI artifact identified by a content ID, exposes the host-local AI Finder over GET /v1/agents and /.well-known/ai-catalog.json, and routes cross-host capability queries through a DHT rather than LDAP Bind and Search. [1][4]"
     },
     {
      "name": "Well-Known URIs (RFC 8615)",
      "spec_or_rfc": "RFC 8615",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "A host-local AI Finder is published at /.well-known/ai-catalog.json as the static on-origin entry point alongside the host-local GET /v1/agents REST API, while cross-host routing runs over the DHT. [1][5]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "oasf",
      "target_name": "Open Agentic Schema Framework",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "ADS stores records natively in OASF and answers GET /v1/agents, while OASF is the skill, domain, and module taxonomy with numeric codes and defines no directory protocol of its own. [1][6]"
     },
     {
      "target_id": "ai-catalog-well-known-file",
      "target_name": "AI Catalog well-known file",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "ADS uses /.well-known/ai-catalog.json as the host-local finder and GET /v1/agents as the directory API, while the AI Catalog file format is the document at that well-known path. [1][7]"
     },
     {
      "target_id": "a2a",
      "target_name": "Agent2Agent Protocol (A2A)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "ADS stores OASF records as OCI artifacts and can export one with GET /v1/agents/{cid}/export into an A2A card, while A2A then delegates tasks over JSON-RPC 2.0, gRPC, or HTTP+JSON using the Agent Card at /.well-known/agent-card.json. [1][8]"
     },
     {
      "target_id": "ard",
      "target_name": "Agentic Resource Discovery (ARD)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ADS serves GET /.well-known/ai-catalog.json as a host-local catalog designed to interoperate with the ARD AI Catalog, and GET /v1/agents/{cid}/export renders a stored OASF record into other card formats, while ARD is that well-known resource-discovery document. [1][9]"
     },
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "ADS indexes agent applications and their skills, while MCP is the JSON-RPC tool session a client opens to one server. [1][10]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (1 probed or cited example; non-exhaustive).",
    "side_a": {
     "visible": true,
     "heading": "Servers, repos & skill indexes",
     "col4_header": "Transport & Scope",
     "note_md": null,
     "rows": [
      {
       "actor": "AGNTCY Directory (`agntcy/dir`)",
       "role": "Directory server & CLI",
       "status": "Development",
       "status_display": "Development · as of 2026-10-30",
       "col4_md": "Source repository named in `draft-mp-agntcy-ads-03` (Go, `Apache-2.0`, pushed 2026-10-30). Implements the gRPC `apiserver`, `reconciler`, and `dirctl` daemon backed by OCI artifact storage and DHT content routing for OASF agent records, with `v1.8.0` container images and Helm chart plus Go, Python, and JavaScript SDKs documented in the repository README (documented from repository metadata rather than a probed public ADS endpoint).",
       "source_md": "[AGNTCY Directory README](https://raw.githubusercontent.com/agntcy/dir/main/README.md) [11] · [GitHub API (agntcy/dir)](https://github.com/agntcy/dir) [3] · [draft-mp-agntcy-ads-03](https://www.ietf.org/archive/id/draft-mp-agntcy-ads-03.txt) [1]"
      }
     ]
    },
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "slim",
     "target_name": "Secure Low-Latency Interactive Messaging (SLIM)",
     "relation_label": "Complements",
     "delta": "ADS serves a host-local AI Finder at /.well-known/ai-catalog.json and GET /v1/agents, while SLIM delivers messages on its gRPC and MLS overlay once a peer is selected.",
     "item_md": "**[Secure Low-Latency Interactive Messaging (SLIM)](/protocols/slim/)** (Complements) — ADS serves a host-local AI Finder at /.well-known/ai-catalog.json and GET /v1/agents, while SLIM delivers messages on its gRPC and MLS overlay once a peer is selected."
    },
    {
     "target_id": "agent-connect-protocol",
     "target_name": "Agent Connect Protocol",
     "relation_label": "Complements",
     "delta": "ADS, the Agent Directory Service, is a distributed directory of metadata for AI agent applications, and its REST surface lists catalog entries with GET /v1/agents; an AGNTCY blog also shows a local ADS node started in the background. ACP was the separate OpenAPI interface that searched agents at POST /agents/search and kept each descriptor on the ACP server or in the directory record.",
     "item_md": "**[Agent Connect Protocol](/protocols/agent-connect-protocol/)** (Complements) — ADS, the Agent Directory Service, is a distributed directory of metadata for AI agent applications, and its REST surface lists catalog entries with GET /v1/agents; an AGNTCY blog also shows a local ADS node started in the background. ACP was the separate OpenAPI interface that searched agents at POST /agents/search and kept each descriptor on the ACP server or in the directory record."
    },
    {
     "target_id": "gbz-185-agent-interconnection",
     "target_name": "GB/Z 185 Artificial intelligence — Agent interconnection",
     "relation_label": "Complements",
     "delta": "ADS lists catalog entries with GET /v1/agents and returns a host catalog at GET /.well-known/ai-catalog.json. GB/Z 185 defines an agent discovery service whose query interface may be an API, a GUI, or an LUI.",
     "item_md": "**[GB/Z 185 Artificial intelligence — Agent interconnection](/protocols/gbz-185-agent-interconnection/)** (Complements) — ADS lists catalog entries with GET /v1/agents and returns a host catalog at GET /.well-known/ai-catalog.json. GB/Z 185 defines an agent discovery service whose query interface may be an API, a GUI, or an LUI."
    },
    {
     "target_id": "dawn-agent-discovery-framework",
     "target_name": "A Framework for Agent Discovery in DAWN",
     "relation_label": "Complements",
     "delta": "DAWN's Federation Plane supports application-level queries across an aggregated multi-domain directory alongside its DNS baseline, and ADS is one such directory, with GET /v1/agents and a host-local file at /.well-known/ai-catalog.json.",
     "item_md": "**[A Framework for Agent Discovery in DAWN](/protocols/dawn-agent-discovery-framework/)** (Complements) — DAWN's Federation Plane supports application-level queries across an aggregated multi-domain directory alongside its DNS baseline, and ADS is one such directory, with GET /v1/agents and a host-local file at /.well-known/ai-catalog.json."
    },
    {
     "item_md": "**[Discover protocols](/category/discover/)** — Category index for `discover` standards."
    }
   ],
   "v05_compiled_md": "---\nid: ads\ntitle: \"Agent Directory Service\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: discover\nform: endpoint\nwire_archetype: harnesses_rpc_ui\nspec_url: https://www.ietf.org/archive/id/draft-mp-agntcy-ads-03.txt\nlast_checked: 2026-11-12\n---\n\n# Agent Directory Service\n\n**Category:** [Discover](/category/discover/) (`discover`) · **Form:** Endpoint (`endpoint`) · **Last checked:** 2026-11-12\n\nThe **Agent Directory Service** (**ADS**, `draft-mp-agntcy-ads-03`) is a distributed directory service designed to store metadata for AI agent applications. This metadata, stored as directory records, enables the discovery of agent applications with specific skills for solving various problems. The implementation features distributed directories that interconnect through a content-routing protocol. [1] L. Muscariello and R. Polic of Cisco submitted it as an Independent Submission with intended status Informational. The authors' addresses name Luca Muscariello and Ramiz Polic, both at Cisco. [1] A Record Artifact is an AGNTCY OASF Record packaged as an OCI artifact. [1] Records MUST be addressed by digest for immutable retrieval. Tags are mutable aliases and can be used as human-readable pointers, but implementations MUST NOT assume a tag resolves to more than one manifest at a time. [1] ADS exposes AI Catalog content through the AI Finder service, offered over gRPC and, via a gateway, as a REST API. That REST surface lists `GET /v1/agents`, `GET /v1/agents/{cid}`, `GET /v1/agents/{cid}/export`, and `GET /.well-known/ai-catalog.json`. [1] `draft-mp-agntcy-ads-03` is dated 2 November 2026 and expires on 6 May 2027. [1] About This Document states that the note is to be removed before publishing as an RFC, points to the source repository and issue tracker at https://github.com/agntcy/dir, and prints the latest-revision URL with the transposed spelling `https://spec.dir.agncty.org` [sic]. [1] Revision history spans `draft-mp-agntcy-ads-00` on `2025-10-17`, `draft-mp-agntcy-ads-01` on `2026-02-24`, `draft-mp-agntcy-ads-02` on `2026-07-06`, and `draft-mp-agntcy-ads-03` on 2 November 2026. [1][2]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Discover](/category/discover/) (`discover`) |\n| **Form** | Endpoint (`endpoint`) |\n| **Originated by** | Luca Muscariello and Ramiz Polic (Cisco); source and issue tracker at https://github.com/agntcy/dir [1] |\n| **Governed by** | Independent Submission; intended status Informational. Datatracker: Active Internet-Draft (individual), RFC stream (None), IESG state I-D Exists. This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. [1][2] |\n| **Track** | Linux Foundation AGNTCY open-source directory (`agntcy/dir`) and Independent Submission IETF Internet-Draft (`draft-mp-agntcy-ads-03`, Intended status: Informational) [1] |\n| **Status** | Internet-Draft; work in progress; intended status Informational; expires 6 May 2027. Source repository: https://github.com/agntcy/dir (latest-revision URL printed in the draft with the transposed spelling `https://spec.dir.agncty.org` [sic]) [1] |\n| **Version** | `draft-mp-agntcy-ads-03`, dated 2 November 2026, expires 6 May 2027 [1] |\n| **Wire format** | AGNTCY OASF record packaged as an OCI artifact (`application/vnd.agntcy.dir.record.v1+json`); AI Finder over gRPC and a REST gateway [1] |\n| **Specification** | [draft-mp-agntcy-ads-03.txt](https://www.ietf.org/archive/id/draft-mp-agntcy-ads-03.txt) [1] |\n| **Found at** | DHT skills-to-CID and CID-to-peer mappings; `GET /v1/agents`; `GET /.well-known/ai-catalog.json` [1] |\n| **Licence** | IETF Trust Legal Provisions (BCP 78, `draft-mp-agntcy-ads-03`); Apache License 2.0 (`agntcy/dir`) [1][3] |\n| **IETF state** | `draft-mp-agntcy-ads-03` · **Active Internet-Draft** (expires 2027-05-06) · Individual · as of 2026-11-07 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-mp-agntcy-ads/)) |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [Adoption and ecosystem](#adoption-and-ecosystem)\n4. [See also](#see-also)\n5. [References](#references)\n\n---\n\n## Problem and scope\n\nTraditional keyword-based search approaches face significant limitations when applied to agent discovery. Without structured organization, every query potentially requires examining every agent record. [1] The first level maps agent capabilities and skills to their corresponding Content Identifiers (CID). A query for agents capable of natural language processing resolves to a set of content identifiers without searching individual agent records. [1] The second level maps Content Identifiers to the Peer IDs of nodes that store the corresponding agent records. [1] Once discovery identifies the relevant CIDs and their hosting peers, the actual agent records are retrieved using the OCI distribution protocol. [1] The Open Agent Schema Framework (OASF) complements Record Artifact Specification by defining the actual data models for agent-related information referenced in the OCI artifacts. [1] Domain-only or module-only queries are not supported, as they would bypass the primary indexing structure. That skill-mandatory rule applies to the DHT capability index and does not constrain the host-local AI Finder catalog browse surface. [1] Supported export formats include `oasf`, `a2a`, `agent-skill`, and `mcp-ghcopilot`. [1] The specification has no IANA actions. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **Lightweight Directory Access Protocol (LDAP, RFC 4511)** | `RFC 4511` | Analogous to classic standard | ADS packages each agent record as an OCI artifact identified by a content ID, exposes the host-local AI Finder over GET /v1/agents and /.well-known/ai-catalog.json, and routes cross-host capability queries through a DHT rather than LDAP Bind and Search. [1][4] |\n| **Well-Known URIs (RFC 8615)** | `RFC 8615` | Profiles classic standard | A host-local AI Finder is published at /.well-known/ai-catalog.json as the static on-origin entry point alongside the host-local GET /v1/agents REST API, while cross-host routing runs over the DHT. [1][5] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Open Agentic Schema Framework](/protocols/oasf/)** | Builds on | ADS stores records natively in OASF and answers GET /v1/agents, while OASF is the skill, domain, and module taxonomy with numeric codes and defines no directory protocol of its own. [1][6] |\n| **[AI Catalog well-known file](/protocols/ai-catalog-well-known-file/)** | Complements | ADS uses /.well-known/ai-catalog.json as the host-local finder and GET /v1/agents as the directory API, while the AI Catalog file format is the document at that well-known path. [1][7] |\n| **[Agent2Agent Protocol (A2A)](/protocols/a2a/)** | Complements | ADS stores OASF records as OCI artifacts and can export one with GET /v1/agents/{cid}/export into an A2A card, while A2A then delegates tasks over JSON-RPC 2.0, gRPC, or HTTP+JSON using the Agent Card at /.well-known/agent-card.json. [1][8] |\n| **[Agentic Resource Discovery (ARD)](/protocols/ard/)** | Peer alternative | ADS serves GET /.well-known/ai-catalog.json as a host-local catalog designed to interoperate with the ARD AI Catalog, and GET /v1/agents/{cid}/export renders a stored OASF record into other card formats, while ARD is that well-known resource-discovery document. [1][9] |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | ADS indexes agent applications and their skills, while MCP is the JSON-RPC tool session a client opens to one server. [1][10] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (1 probed or cited example; non-exhaustive).*\n\n### Servers, repos & skill indexes\n\n| Actor | Role | Status | Transport & Scope | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **AGNTCY Directory (`agntcy/dir`)** | Directory server & CLI | Development · as of 2026-10-30 | Source repository named in `draft-mp-agntcy-ads-03` (Go, `Apache-2.0`, pushed 2026-10-30). Implements the gRPC `apiserver`, `reconciler`, and `dirctl` daemon backed by OCI artifact storage and DHT content routing for OASF agent records, with `v1.8.0` container images and Helm chart plus Go, Python, and JavaScript SDKs documented in the repository README (documented from repository metadata rather than a probed public ADS endpoint). | [AGNTCY Directory README](https://raw.githubusercontent.com/agntcy/dir/main/README.md) [11] · [GitHub API (agntcy/dir)](https://github.com/agntcy/dir) [3] · [draft-mp-agntcy-ads-03](https://www.ietf.org/archive/id/draft-mp-agntcy-ads-03.txt) [1] |\n\n---\n\n## See also\n\n- **[Secure Low-Latency Interactive Messaging (SLIM)](/protocols/slim/)** *(Complements)* — ADS serves a host-local AI Finder at /.well-known/ai-catalog.json and GET /v1/agents, while SLIM delivers messages on its gRPC and MLS overlay once a peer is selected.\n- **[Agent Connect Protocol](/protocols/agent-connect-protocol/)** *(Complements)* — ADS, the Agent Directory Service, is a distributed directory of metadata for AI agent applications, and its REST surface lists catalog entries with GET /v1/agents; an AGNTCY blog also shows a local ADS node started in the background. ACP was the separate OpenAPI interface that searched agents at POST /agents/search and kept each descriptor on the ACP server or in the directory record.\n- **[GB/Z 185 Artificial intelligence — Agent interconnection](/protocols/gbz-185-agent-interconnection/)** *(Complements)* — ADS lists catalog entries with GET /v1/agents and returns a host catalog at GET /.well-known/ai-catalog.json. GB/Z 185 defines an agent discovery service whose query interface may be an API, a GUI, or an LUI.\n- **[A Framework for Agent Discovery in DAWN](/protocols/dawn-agent-discovery-framework/)** *(Complements)* — DAWN's Federation Plane supports application-level queries across an aggregated multi-domain directory alongside its DNS baseline, and ADS is one such directory, with GET /v1/agents and a host-local file at /.well-known/ai-catalog.json.\n- **Category:** [Discover protocols](/category/discover/)\n\n---\n\n## References\n\n1. L. Muscariello and R. Polic (Cisco), *Agent Directory Service (draft-mp-agntcy-ads-03)* (2 November 2026) — <https://www.ietf.org/archive/id/draft-mp-agntcy-ads-03.txt>\n2. Luca Muscariello and Ramiz Polic, *Agent Directory Service (draft-mp-agntcy-ads datatracker document page)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/draft-mp-agntcy-ads/>\n3. AGNTCY, *GitHub repository record agntcy/dir* (checked 2026-10-31) — <https://github.com/agntcy/dir>\n4. J. Sermersheim, Ed., *RFC 4511: Lightweight Directory Access Protocol (LDAP): The Protocol* (June 2006) — <https://www.rfc-editor.org/rfc/rfc4511.html>\n5. M. Nottingham, *RFC 8615: Well-Known Uniform Resource Identifiers (URIs)* (May 2019) — <https://www.rfc-editor.org/rfc/rfc8615.html>\n6. AGNTCY, *agntcy/oasf releases* (checked 2026-10-31) — <https://github.com/agntcy/oasf/releases>\n7. Agent Card Working Group, *Agent Card Working Group — ai-catalog.md* (checked 2026-10-29) — <https://raw.githubusercontent.com/Agent-Card/ai-catalog/main/specification/ai-catalog.md>\n8. Agentic AI Foundation, *A2A joins AAIF's open agentic stack* (published 2026-08-17; modified 2026-09-24) — <https://aaif.io/blog/a2a-joins-aaif>\n9. Agentic Resource Discovery Project (ards-project), *Agentic Resource Discovery Specification v0.91* (2026-08-26; fetched 2026-10-30) — <https://agenticresourcediscovery.org/spec/>\n10. Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation* (2026-07-28) — <https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning>\n11. AGNTCY, *AGNTCY Directory README* (checked 2026-10-31) — <https://raw.githubusercontent.com/agntcy/dir/main/README.md>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "OASF",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "aliases": [],
   "analog": "schema.org for agents, or an industry-standard product taxonomy (like GS1) applied to AI capabilities",
   "collisions": [],
   "discovery": {
    "mechanism": "not a discovery-path mechanism itself; consumed as the record schema underlying AGNTCY's Agent Directory Service (ADS) and its OCI-artifact export format",
    "path": "none"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://raw.githubusercontent.com/agntcy/oasf/main/README.md",
     "claim": "AGNTCY, *Open Agentic Schema Framework README*, checked 2026-10-31",
     "date": null,
     "quote": "The Open Agentic Schema Framework (OASF) is a standardized schema system for defining and managing AI agent capabilities, interactions, and metadata. It provides a structured way to describe agent attributes, capabilities, and relationships using attribute-based taxonomies. / At the core of OASF is the record object, which serves as the primary data structure for representing collections of information and metadata relevant to agentic AI applications. OASF records can be annotated with skills and domains to enable effective announcement and discovery across agentic systems. Formats other than OASF records, such as A2A Agent Cards and AI Catalog entries, can carry the same skills and domains through the discovery extension. Additionally, modules provide a flexible mechanism to extend records with additional information in a modular and composable way, supporting a wide range of agentic use cases. / A convenient way to browse and use the OASF schema is through the Open Agentic Schema Framework Server hosted by Outshift by Cisco. / Once a schema version is released, no changes to that version of the schema are expected, except for non-breaking fixes such as documentation updates or minor bug corrections. Any deletions, additions, or structural changes made after a schema version is released will be part of the next schema version. / The server is a derivative work of OCSF schema server and the schema update / generate complete OASF records from your codebase - Validation: Check records against the schema",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://github.com/agntcy/oasf",
     "claim": "AGNTCY, *GitHub repository record agntcy/oasf*, checked 2026-10-31",
     "date": null,
     "quote": "\"created_at\": \"2025-02-10T22:00:08Z\" / \"https://api.github.com/users/agntcy/received_events\", \"type\": \"Organization\", \"user_view_type\": \"public\", \"site_admin\": false }, \"html_url\": \"https://github.com/agntcy/oasf\", \"description\": \"Open Agentic / \"name\": \"Apache License 2.0\", \"spdx_id\": \"Apache-2.0\"",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://www.ietf.org/archive/id/draft-mp-agntcy-ads-03.txt",
     "claim": "L. Muscariello and R. Polic (Cisco), *Agent Directory Service (draft-mp-agntcy-ads-03)*, 2 November 2026; checked 2026-11-07",
     "date": null,
     "quote": "The system leverages the Open Agentic Schema Framework (OASF) to model agent information in a structured, extensible format. / A Record Artifact is an AGNTCY OASF Record packaged as an OCI artifact. / Architectural Foundation … 3. Storage Architecture … 3.1. Content-Addressed Storage … 3.2. OCI Integration / the well-known document and the REST API describe the records held or indexed by / Different publishers may describe similar capabilities using varying terminology. For example, \"sentiment analysis,\" \"opinion mining,\" and \"emotional classification\" may all refer to similar agent capabilities, leading to search results that miss relevant agents due to terminology mismatches. / An agent capable of \"named entity recognition\" is inherently relevant to searches for broader \"text analysis\" capabilities, but keyword matching alone cannot establish these connections. / ADS addresses these challenges through a structured hierarchical taxonomy that provides several critical optimization benefits: / The taxonomy enables efficient partitioning of the search space. When processing a query for \"computer vision\" capabilities, the system can immediately focus on the relevant taxonomy branch, eliminating the need to examine agents in unrelated categories like natural language processing or mathematical reasoning. / All searches must include at least one skill criterion as the mandatory foundation / with domain and module taxonomies providing additional filtering dimensions / The Open Agent Schema Framework (OASF) [AGNTCY-OASF] complements Record Artifact Specification by defining the actual data models for agent-related information referenced in the OCI artifacts. / Intended status: Informational ... The latest revision of this draft can be found at https://spec.dir.agncty.org. ... Source for this draft and an issue tracker can be found at https://github.com/agntcy/dir. ... work in progress. ... This Internet-Draft will expire on 6 May 2027.",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://github.com/agntcy/oasf/releases",
     "claim": "AGNTCY, *agntcy/oasf releases*, checked 2026-10-31",
     "date": null,
     "quote": "\"published_at\": \"2026-07-10T15:00:19Z\" / \"html_url\": \"https://github.com/agntcy/oasf/releases/tag/v1.1.0\", \"id\": 352159727, \"author\": { \"login\": \"github-actions[bot]\", \"id\": 41898282, \"node_id\": \"MDM6Qm90NDE4OTgyODI=\", \"avatar_url\": / \"html_url\": \"https://github.com/agntcy/oasf/releases/tag/v1.1.0\", / github-actions released this 06 Mar 09:44 v0.8.5 This tag was signed with the committer's / a module.artifact attribute to the schema (#458) JSON schema constraints - Extended the JSON",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://schema.oasf.outshift.com/",
     "claim": "Outshift by Cisco, *Open Agentic Schema Framework schema server*, checked 2026-10-31",
     "date": null,
     "quote": "Open Agentic Schema Framework 0.8.0 1.0.0 1.1.0 / or tag video content. Video Object Tracking 20402 Track objects across video frames. Text / Open Agentic Schema Framework // GA Loading Logic window.dataLayer = window.dataLayer || []; function",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://outshift.cisco.com/blog/open-agentic-schema-framework-oasf",
     "claim": "Outshift by Cisco, *Open Agentic Schema Framework (Outshift)*, checked 2026-10-31",
     "date": null,
     "quote": "Team\\\",\\\"url\\\":\\\"https://outshift.cisco.com/our-team\\\",\\\"eyebrow\\\":null,\\\"internal\\\":true,\\\"segmentOpt\\\":null,\\\"submenu\\\":null,\\\"type\\\":\\\"Footer\\\"},{\\\"id\\\":1175,\\\"text\\\":\\\"The / projects part of AGNTCY, a Linux Foundation",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://docs.agntcy.org/",
     "claim": "AGNTCY, *AGNTCY documentation*, checked 2026-10-31",
     "date": null,
     "quote": "AGNTCY is an open source collective building the software components and services",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://raw.githubusercontent.com/agntcy/dir/main/README.md",
     "claim": "AGNTCY, *AGNTCY Directory README*, checked 2026-10-31",
     "date": null,
     "quote": "The Directory (dir) allows publication, exchange, and discovery of information about records over a distributed peer-to-peer network. / The Directory (dir) allows publication, exchange, and discovery of information about records over a distributed peer-to-peer network. It leverages OASF to describe AI agents and provides a set of APIs and tools to store, publish, and discover records across the network by their attributes and constraints.",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://json-schema.org/draft/2020-12/json-schema-core.html",
     "claim": "Austin Wright, Henry Andrews, Ben Hutton, and Greg Dennis, *JSON Schema: A Media Type for Describing JSON Documents (Draft 2020-12)*, 2022-06-16",
     "date": "2022-06-16",
     "quote": "JSON Schema defines the media type \"application/schema+json\", a JSON-based format",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://schema.org/docs/schemas.html",
     "claim": "Schema.org, *Schema.org Schemas*, fetched 2026-11-12",
     "date": null,
     "quote": "L����q�\u0015J���H���SEM\u000e�>���B���l\u000f�Kw~�y%�:Rz\u000f����\u0000ԝ��l����}\u000fwD�T��5��&���[��G �\bAQ���]t�#�� ��\u0003���\u0011�",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://claude.com/resources/articles/organization-skills-and-directory",
     "claim": "Anthropic, *Skills for organizations, partners, the ecosystem*, published 2025-12-18",
     "date": null,
     "quote": "We're also publishing Agent Skills as an open standard.",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://aaif.io/blog/a2a-joins-aaif",
     "claim": "Agentic AI Foundation, *A2A joins AAIF's open agentic stack*, published 2026-08-17; modified 2026-09-24",
     "date": null,
     "quote": "A2A v1.0, the first stable specification, shipped in March 2026.",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://agenticresourcediscovery.org/spec/",
     "claim": "Agentic Resource Discovery Project (ards-project), *Agentic Resource Discovery Specification v0.91*, 2026-08-26; fetched 2026-10-30",
     "date": null,
     "quote": "Version: v0.91 Status: Proposal Date: August 26, 2026",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Current : the current protocol version, which is ready for use and may continue to receive backwards compatible changes.",
     "ref": 14
    }
   ],
   "form": "document-format",
   "governance": "AGNTCY project, published under Linux Foundation-adjacent open governance; source and issue tracker on GitHub, browsable schema at schema.oasf.outshift.com",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against live OASF schema browser at schema.oasf.outshift.com and cross-checked against draft-mp-agntcy-ads-02"
    },
    {
     "date": "2026-10-16",
     "note": "OASF v1.1.0 released on 2026-07-10"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "oasf",
   "implementation": "shipping",
   "last_verified": "2026-11-12",
   "name": "Open Agentic Schema Framework",
   "native_status": "Active, versioned schema framework",
   "origin": {
    "date": null,
    "org": "Cisco Outshift / AGNTCY"
   },
   "part_of": null,
   "parties": [
    "agent-registry",
    "agent-site"
   ],
   "phase": "living",
   "probe": {
    "method": "GET",
    "on_absent": "Not applicable at a per-domain level -- OASF is a shared taxonomy consumed by registries and records, not a well-known site artifact; absence just means a given record does not declare an OASF-conformant schema_version",
    "parse": "200 response is a JSON Schema document for the requested OASF class/version, confirming which schema version a given record or registry claims to conform to",
    "path": "https://schema.oasf.outshift.com/{version}/objects/{class}.json"
   },
   "question": "How can an agent's skills, domains, deployment modules and identity be described using a shared, versioned taxonomy so registries can classify and filter it consistently?",
   "scope": "general",
   "spec_url": "https://schema.oasf.outshift.com/",
   "step": "discover",
   "summary_md": "**Open Agentic Schema Framework** (`OASF`) is a standardized schema system for defining and managing AI agent capabilities, interactions, and metadata. It provides a structured way to describe agent attributes, capabilities, and relationships using attribute-based taxonomies. The record object is the primary data structure for collections of information and metadata relevant to agentic AI applications. Records can be annotated with skills and domains to enable announcement and discovery across agentic systems, and modules provide a flexible mechanism to extend records with additional information in a modular and composable way. The `agntcy/oasf` repository was created on 2025-02-10 and is licensed under the Apache License 2.0. The Open Agentic Schema Framework Server used to browse the schema is hosted by Outshift by Cisco. In the companion IETF Agent Directory Service draft (`draft-mp-agntcy-ads-03`), the system leverages the Open Agentic Schema Framework (`v1.1.0` released `2026-07-10`) to model agent information in a structured, extensible format and packages an AGNTCY OASF Record as an OCI Record Artifact. Release `v1.1.0` was published on 2026-07-10. The schema server lists 0.8.0, 1.0.0, and 1.1.0. Once a schema version is released, no changes to that version of the schema are expected, except for non-breaking fixes such as documentation updates or minor bug corrections. Deletions, additions, or structural changes made after a schema version is released are part of the next schema version.",
   "track": "linux-foundation",
   "version": {
    "label": "v1.1.0",
    "date": "2026-07-10"
   },
   "watch": [
    {
     "type": "page",
     "url": "https://schema.oasf.outshift.com/",
     "selector": "main",
     "cadence": "weekly"
    },
    {
     "type": "github",
     "repo": "agntcy/oasf",
     "mode": "release"
    }
   ],
   "use_cases": [
    "describe-agent-capabilities",
    "discover-my-api"
   ],
   "audience": [
    "agent-builder",
    "platform",
    "standards-body"
   ],
   "pairs_with": [
    "ads",
    "anthropic-agent-skills-format",
    "a2a",
    "ard",
    "mcp"
   ],
   "prerequisites": [],
   "hatnote_md": "",
   "tier": "spec_brief",
   "lifecycle_status": "active",
   "wire_archetype": "harnesses_rpc_ui",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": null,
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Open Agentic Schema Framework** (`OASF`) is a standardized schema system for defining and managing AI agent capabilities, interactions, and metadata. It provides a structured way to describe agent attributes, capabilities, and relationships using attribute-based taxonomies. The record object is the primary data structure for collections of information and metadata relevant to agentic AI applications. Records can be annotated with skills and domains to enable announcement and discovery across agentic systems, and modules provide a flexible mechanism to extend records with additional information in a modular and composable way. [1] The `agntcy/oasf` repository was created on 2025-02-10 and is licensed under the Apache License 2.0. The Open Agentic Schema Framework Server used to browse the schema is hosted by Outshift by Cisco. [1][2] In the companion IETF Agent Directory Service draft (`draft-mp-agntcy-ads-03`), the system leverages the Open Agentic Schema Framework (`v1.1.0` released `2026-07-10`) to model agent information in a structured, extensible format and packages an AGNTCY OASF Record as an OCI Record Artifact. [3][4] Release `v1.1.0` was published on 2026-07-10. The schema server lists 0.8.0, 1.0.0, and 1.1.0. [4][5] Once a schema version is released, no changes to that version of the schema are expected, except for non-breaking fixes such as documentation updates or minor bug corrections. Deletions, additions, or structural changes made after a schema version is released are part of the next schema version. [1]",
   "v05_identity_sentence_md": "**Open Agentic Schema Framework** (`OASF`) is a standardized schema system for defining and managing AI agent capabilities, interactions, and metadata. It provides a structured way to describe agent attributes, capabilities, and relationships using attribute-based taxonomies. The record object is the primary data structure for collections of information and metadata relevant to agentic AI applications. Records can be annotated with skills and domains to enable announcement and discovery across agentic systems, and modules provide a flexible mechanism to extend records with additional information in a modular and composable way. [1] The `agntcy/oasf` repository was created on 2025-02-10 and is licensed under the Apache License 2.0. The Open Agentic Schema Framework Server used to browse the schema is hosted by Outshift by Cisco. [1][2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Discover](/category/discover/) (`discover`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "Outshift by Cisco, which hosts the reference schema server; the server is a derivative of the OCSF schema server [1][6]"
    },
    {
     "label": "Governed by",
     "value_md": "The AGNTCY open-source collective, with source maintained in the `agntcy` GitHub organization [2][7]"
    },
    {
     "label": "Track",
     "value_md": "Consortium open-source specification (AGNTCY / Linux Foundation) [6][7]"
    },
    {
     "label": "Status",
     "value_md": "Active, versioned schema framework [4][5]"
    },
    {
     "label": "Version",
     "value_md": "v1.1.0, released 2026-07-10 as a signed tag [4]"
    },
    {
     "label": "Wire format",
     "value_md": "JSON records validated against versioned JSON Schema; stored by ADS as content-addressed OCI artifacts [1][3][4]"
    },
    {
     "label": "Specification",
     "value_md": "https://schema.oasf.outshift.com/ [5]"
    },
    {
     "label": "Found at",
     "value_md": "No well-known path, DNS record or HTTP header of its own; records are found through ADS DHT routing on skill and domain labels [3][8]"
    },
    {
     "label": "Licence",
     "value_md": "Apache-2.0 [2]"
    }
   ],
   "v05_problem_md": "Different publishers may describe similar capabilities using varying terminology, such as \"sentiment analysis,\" \"opinion mining,\" and \"emotional classification,\" so search results miss relevant agents. [3] Many agent capabilities have natural hierarchical relationships that flat keyword systems cannot capture. An agent capable of named entity recognition is relevant to a broader text-analysis search, but keyword matching alone cannot establish that connection. [3] The draft addresses those limits through a structured hierarchical taxonomy that partitions the search space, so a query can focus on one branch instead of examining unrelated records. [3] All searches must include at least one skill criterion as the mandatory foundation, with domain and module taxonomies providing additional filtering dimensions. [3] The Open Agentic Schema Framework complements the Record Artifact Specification by defining the actual data models for agent-related information referenced in the OCI artifacts. [3] The Directory leverages OASF to describe AI agents and provides the APIs and tools to store, publish, and discover records by their attributes and constraints. [8]",
   "v05_mechanism_delta_md": "The draft addresses those limits through a structured hierarchical taxonomy that partitions the search space, so a query can focus on one branch instead of examining unrelated records. [3] All searches must include at least one skill criterion as the mandatory foundation, with domain and module taxonomies providing additional filtering dimensions. [3]",
   "v05_scope_boundary_md": "The Open Agentic Schema Framework complements the Record Artifact Specification by defining the actual data models for agent-related information referenced in the OCI artifacts. [3] The Directory leverages OASF to describe AI agents and provides the APIs and tools to store, publish, and discover records by their attributes and constraints. [8]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "JSON Schema 2020-12",
      "spec_or_rfc": "JSON Schema 2020-12",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "OASF publishes a versioned JSON Schema taxonomy of skills, domains, and modules with stable numeric codes, browser releases from 0.7.0 through 1.1.0, and it defines no discovery URL of its own. [1][9]"
     },
     {
      "name": "schema.org Vocabulary",
      "spec_or_rfc": "Schema.org",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "OASF is a skill, domain, and module taxonomy whose codes other directories use to classify agents, in the role schema.org plays for web content, and OASF defines no discovery path. [1][10]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "ads",
      "target_name": "Agent Directory Service",
      "relation_type": "depended_on_by",
      "relation_label": "Depended on by",
      "delta_md": "ADS lists OASF as its native record schema, packages each record as an OCI artifact, and answers GET /v1/agents, while OASF is the skill, domain, and module taxonomy and defines no discovery URL. [1][3]"
     },
     {
      "target_id": "anthropic-agent-skills-format",
      "target_name": "Agent Skills",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "OASF assigns stable numeric codes in a versioned skill, domain, and module hierarchy and defines no discovery URL, while Agent Skills is the SKILL.md folder layout a client loads by name and description first. [1][11]"
     },
     {
      "target_id": "a2a",
      "target_name": "Agent2Agent Protocol (A2A)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "An A2A Agent Card is the discovery document at /.well-known/agent-card.json, and OASF is the separate skill, domain, and module taxonomy. [1][12]"
     },
     {
      "target_id": "ard",
      "target_name": "Agentic Resource Discovery (ARD)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "ARD links to discoverable agent resources on a host, and OASF is the schema used to describe capabilities inside records that a discovery document can point at. [1][13]"
     },
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "MCP exposes the tools and resources of one connected server, and OASF is a shared skill, domain, and module taxonomy those capabilities can be classified with, not an MCP method. [1][14]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "osi",
     "target_name": "Apache Ossie (formerly Open Semantic Interchange)",
     "relation_label": "Complements",
     "delta": "Ossie is a schema file exchanged between tools, with ossie-schema.json requiring const 0.2.0.dev0, while OASF is the Open Agentic Schema Framework, a separate document format.",
     "item_md": "**[Apache Ossie (formerly Open Semantic Interchange)](/protocols/osi/)** (Complements) — Ossie is a schema file exchanged between tools, with ossie-schema.json requiring const 0.2.0.dev0, while OASF is the Open Agentic Schema Framework, a separate document format."
    },
    {
     "target_id": "slim",
     "target_name": "Secure Low-Latency Interactive Messaging (SLIM)",
     "relation_label": "Complements",
     "delta": "OASF is the versioned skill, domain, and module schema, while SLIM is the gRPC and MLS messaging overlay and does not define that taxonomy.",
     "item_md": "**[Secure Low-Latency Interactive Messaging (SLIM)](/protocols/slim/)** (Complements) — OASF is the versioned skill, domain, and module schema, while SLIM is the gRPC and MLS messaging overlay and does not define that taxonomy."
    },
    {
     "target_id": "lmos",
     "target_name": "Eclipse LMOS (Language Model Operating System)",
     "relation_label": "Peer alternative",
     "delta": "LMOS records are W3C WoT Thing Descriptions under the LMOS v1 namespace discovered via mDNS, DNS-SD, or well-known URLs and TDDs, while OASF is a versioned skill, domain, and module schema with no discovery path.",
     "item_md": "**[Eclipse LMOS (Language Model Operating System)](/protocols/lmos/)** (Peer alternative) — LMOS records are W3C WoT Thing Descriptions under the LMOS v1 namespace discovered via mDNS, DNS-SD, or well-known URLs and TDDs, while OASF is a versioned skill, domain, and module schema with no discovery path."
    },
    {
     "target_id": "agent-connect-protocol",
     "target_name": "Agent Connect Protocol",
     "relation_label": "Complements",
     "delta": "OASF, the Open Agentic Schema Framework, is the extensible data model for agent attributes, skills, and capabilities, and its module list marks the ACP manifest deprecated since v0.8.0 in favor of A2A. ACP was the REST interface whose descriptor is also stored as the ACP extension of the agent-directory record.",
     "item_md": "**[Agent Connect Protocol](/protocols/agent-connect-protocol/)** (Complements) — OASF, the Open Agentic Schema Framework, is the extensible data model for agent attributes, skills, and capabilities, and its module list marks the ACP manifest deprecated since v0.8.0 in favor of A2A. ACP was the REST interface whose descriptor is also stored as the ACP extension of the agent-directory record."
    },
    {
     "target_id": "mcp-registry",
     "target_name": "Official MCP Registry",
     "relation_label": "Peer alternative",
     "delta": "OASF models agent information in a structured, extensible format, and the Agent Directory Service draft organizes skill, domain, and module taxonomies. The MCP Registry indexes servers as server.json records.",
     "item_md": "**[Official MCP Registry](/protocols/mcp-registry/)** (Peer alternative) — OASF models agent information in a structured, extensible format, and the Agent Directory Service draft organizes skill, domain, and module taxonomies. The MCP Registry indexes servers as server.json records."
    },
    {
     "target_id": "agent-communication-protocol",
     "target_name": "Agent Communication Protocol",
     "relation_label": "Complements",
     "delta": "OASF is the AGNTCY schema for agent skills, domains, and modules, and IBM ACP's /agents path is not described as using that schema.",
     "item_md": "**[Agent Communication Protocol](/protocols/agent-communication-protocol/)** (Complements) — OASF is the AGNTCY schema for agent skills, domains, and modules, and IBM ACP's /agents path is not described as using that schema."
    },
    {
     "target_id": "coral-protocol",
     "target_name": "Coral Protocol (CoralOS)",
     "relation_label": "Complements",
     "delta": "OASF is a versioned skill, domain, and module taxonomy, while Coral discovery is the Coral marketplace and the local session-creation API rather than an OASF directory.",
     "item_md": "**[Coral Protocol (CoralOS)](/protocols/coral-protocol/)** (Complements) — OASF is a versioned skill, domain, and module taxonomy, while Coral discovery is the Coral marketplace and the local session-creation API rather than an OASF directory."
    },
    {
     "item_md": "**[Discover protocols](/category/discover/)** — Category index for `discover` standards."
    }
   ],
   "v05_compiled_md": "---\nid: oasf\ntitle: \"Open Agentic Schema Framework\"\ntier: spec_brief\nlifecycle_status: active\ncategory: discover\nform: document-format\nwire_archetype: harnesses_rpc_ui\nspec_url: https://schema.oasf.outshift.com/\nlast_checked: 2026-11-12\n---\n\n# Open Agentic Schema Framework\n\n**Category:** [Discover](/category/discover/) (`discover`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-11-12\n\n**Open Agentic Schema Framework** (`OASF`) is a standardized schema system for defining and managing AI agent capabilities, interactions, and metadata. It provides a structured way to describe agent attributes, capabilities, and relationships using attribute-based taxonomies. The record object is the primary data structure for collections of information and metadata relevant to agentic AI applications. Records can be annotated with skills and domains to enable announcement and discovery across agentic systems, and modules provide a flexible mechanism to extend records with additional information in a modular and composable way. [1] The `agntcy/oasf` repository was created on 2025-02-10 and is licensed under the Apache License 2.0. The Open Agentic Schema Framework Server used to browse the schema is hosted by Outshift by Cisco. [1][2] In the companion IETF Agent Directory Service draft (`draft-mp-agntcy-ads-03`), the system leverages the Open Agentic Schema Framework (`v1.1.0` released `2026-07-10`) to model agent information in a structured, extensible format and packages an AGNTCY OASF Record as an OCI Record Artifact. [3][4] Release `v1.1.0` was published on 2026-07-10. The schema server lists 0.8.0, 1.0.0, and 1.1.0. [4][5] Once a schema version is released, no changes to that version of the schema are expected, except for non-breaking fixes such as documentation updates or minor bug corrections. Deletions, additions, or structural changes made after a schema version is released are part of the next schema version. [1]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Discover](/category/discover/) (`discover`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | Outshift by Cisco, which hosts the reference schema server; the server is a derivative of the OCSF schema server [1][6] |\n| **Governed by** | The AGNTCY open-source collective, with source maintained in the `agntcy` GitHub organization [2][7] |\n| **Track** | Consortium open-source specification (AGNTCY / Linux Foundation) [6][7] |\n| **Status** | Active, versioned schema framework [4][5] |\n| **Version** | v1.1.0, released 2026-07-10 as a signed tag [4] |\n| **Wire format** | JSON records validated against versioned JSON Schema; stored by ADS as content-addressed OCI artifacts [1][3][4] |\n| **Specification** | https://schema.oasf.outshift.com/ [5] |\n| **Found at** | No well-known path, DNS record or HTTP header of its own; records are found through ADS DHT routing on skill and domain labels [3][8] |\n| **Licence** | Apache-2.0 [2] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nDifferent publishers may describe similar capabilities using varying terminology, such as \"sentiment analysis,\" \"opinion mining,\" and \"emotional classification,\" so search results miss relevant agents. [3] Many agent capabilities have natural hierarchical relationships that flat keyword systems cannot capture. An agent capable of named entity recognition is relevant to a broader text-analysis search, but keyword matching alone cannot establish that connection. [3] The draft addresses those limits through a structured hierarchical taxonomy that partitions the search space, so a query can focus on one branch instead of examining unrelated records. [3] All searches must include at least one skill criterion as the mandatory foundation, with domain and module taxonomies providing additional filtering dimensions. [3] The Open Agentic Schema Framework complements the Record Artifact Specification by defining the actual data models for agent-related information referenced in the OCI artifacts. [3] The Directory leverages OASF to describe AI agents and provides the APIs and tools to store, publish, and discover records by their attributes and constraints. [8]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **JSON Schema 2020-12** | `JSON Schema 2020-12` | Analogous to classic standard | OASF publishes a versioned JSON Schema taxonomy of skills, domains, and modules with stable numeric codes, browser releases from 0.7.0 through 1.1.0, and it defines no discovery URL of its own. [1][9] |\n| **schema.org Vocabulary** | `Schema.org` | Analogous to classic standard | OASF is a skill, domain, and module taxonomy whose codes other directories use to classify agents, in the role schema.org plays for web content, and OASF defines no discovery path. [1][10] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Agent Directory Service](/protocols/ads/)** | Depended on by | ADS lists OASF as its native record schema, packages each record as an OCI artifact, and answers GET /v1/agents, while OASF is the skill, domain, and module taxonomy and defines no discovery URL. [1][3] |\n| **[Agent Skills](/protocols/anthropic-agent-skills-format/)** | Peer alternative | OASF assigns stable numeric codes in a versioned skill, domain, and module hierarchy and defines no discovery URL, while Agent Skills is the SKILL.md folder layout a client loads by name and description first. [1][11] |\n| **[Agent2Agent Protocol (A2A)](/protocols/a2a/)** | Complements | An A2A Agent Card is the discovery document at /.well-known/agent-card.json, and OASF is the separate skill, domain, and module taxonomy. [1][12] |\n| **[Agentic Resource Discovery (ARD)](/protocols/ard/)** | Complements | ARD links to discoverable agent resources on a host, and OASF is the schema used to describe capabilities inside records that a discovery document can point at. [1][13] |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | MCP exposes the tools and resources of one connected server, and OASF is a shared skill, domain, and module taxonomy those capabilities can be classified with, not an MCP method. [1][14] |\n\n---\n\n## See also\n\n- **[Apache Ossie (formerly Open Semantic Interchange)](/protocols/osi/)** *(Complements)* — Ossie is a schema file exchanged between tools, with ossie-schema.json requiring const 0.2.0.dev0, while OASF is the Open Agentic Schema Framework, a separate document format.\n- **[Secure Low-Latency Interactive Messaging (SLIM)](/protocols/slim/)** *(Complements)* — OASF is the versioned skill, domain, and module schema, while SLIM is the gRPC and MLS messaging overlay and does not define that taxonomy.\n- **[Eclipse LMOS (Language Model Operating System)](/protocols/lmos/)** *(Peer alternative)* — LMOS records are W3C WoT Thing Descriptions under the LMOS v1 namespace discovered via mDNS, DNS-SD, or well-known URLs and TDDs, while OASF is a versioned skill, domain, and module schema with no discovery path.\n- **[Agent Connect Protocol](/protocols/agent-connect-protocol/)** *(Complements)* — OASF, the Open Agentic Schema Framework, is the extensible data model for agent attributes, skills, and capabilities, and its module list marks the ACP manifest deprecated since v0.8.0 in favor of A2A. ACP was the REST interface whose descriptor is also stored as the ACP extension of the agent-directory record.\n- **[Official MCP Registry](/protocols/mcp-registry/)** *(Peer alternative)* — OASF models agent information in a structured, extensible format, and the Agent Directory Service draft organizes skill, domain, and module taxonomies. The MCP Registry indexes servers as server.json records.\n- **[Agent Communication Protocol](/protocols/agent-communication-protocol/)** *(Complements)* — OASF is the AGNTCY schema for agent skills, domains, and modules, and IBM ACP's /agents path is not described as using that schema.\n- **[Coral Protocol (CoralOS)](/protocols/coral-protocol/)** *(Complements)* — OASF is a versioned skill, domain, and module taxonomy, while Coral discovery is the Coral marketplace and the local session-creation API rather than an OASF directory.\n- **Category:** [Discover protocols](/category/discover/)\n\n---\n\n## References\n\n1. AGNTCY, *Open Agentic Schema Framework README* (checked 2026-10-31) — <https://raw.githubusercontent.com/agntcy/oasf/main/README.md>\n2. AGNTCY, *GitHub repository record agntcy/oasf* (checked 2026-10-31) — <https://github.com/agntcy/oasf>\n3. L. Muscariello and R. Polic (Cisco), *Agent Directory Service (draft-mp-agntcy-ads-03)* (2 November 2026; checked 2026-11-07) — <https://www.ietf.org/archive/id/draft-mp-agntcy-ads-03.txt>\n4. AGNTCY, *agntcy/oasf releases* (checked 2026-10-31) — <https://github.com/agntcy/oasf/releases>\n5. Outshift by Cisco, *Open Agentic Schema Framework schema server* (checked 2026-10-31) — <https://schema.oasf.outshift.com/>\n6. Outshift by Cisco, *Open Agentic Schema Framework (Outshift)* (checked 2026-10-31) — <https://outshift.cisco.com/blog/open-agentic-schema-framework-oasf>\n7. AGNTCY, *AGNTCY documentation* (checked 2026-10-31) — <https://docs.agntcy.org/>\n8. AGNTCY, *AGNTCY Directory README* (checked 2026-10-31) — <https://raw.githubusercontent.com/agntcy/dir/main/README.md>\n9. Austin Wright, Henry Andrews, Ben Hutton, and Greg Dennis, *JSON Schema: A Media Type for Describing JSON Documents (Draft 2020-12)* (2022-06-16) — <https://json-schema.org/draft/2020-12/json-schema-core.html>\n10. Schema.org, *Schema.org Schemas* (fetched 2026-11-12) — <https://schema.org/docs/schemas.html>\n11. Anthropic, *Skills for organizations, partners, the ecosystem* (published 2025-12-18) — <https://claude.com/resources/articles/organization-skills-and-directory>\n12. Agentic AI Foundation, *A2A joins AAIF's open agentic stack* (published 2026-08-17; modified 2026-09-24) — <https://aaif.io/blog/a2a-joins-aaif>\n13. Agentic Resource Discovery Project (ards-project), *Agentic Resource Discovery Specification v0.91* (2026-08-26; fetched 2026-10-30) — <https://agenticresourcediscovery.org/spec/>\n14. Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation* (2026-07-28) — <https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "A2UI",
   "adoption": {
    "level": "observed",
    "by": "AG2 A2UIAgent, Google ADK, A2UI Python agent packages, A2UI over MCP samples, Gemini Enterprise, ADK Web, CopilotKit, Flutter GenUI SDK, and 14 other verified implementations",
    "probe_run": null
   },
   "aliases": [
    "Agent-to-UI Protocol",
    "Agent to UI Protocol"
   ],
   "analog": "HTML (declarative UI markup)",
   "collisions": [
    "AG-UI"
   ],
   "discovery": {
    "mechanism": "Transport-specific handshakes (A2A Agent Card extension / MCP metadata)",
    "path": "No well-known path. Over A2A, an agent can list the A2UI extension in its Agent Card (the v0.9.1 extension specification defines URI https://a2ui.org/a2a-extension/a2ui/v0.9.1, which is an identifier and returned HTTP 404 as a web page on 2026-10-28; v1.0 maps A2UI over the A2A Extension). The spec says \"Agents advertising A2UI support in their AgentCard is encouraged as clients may rely on it to determine if they should send message.metadata[\"a2uiClientCapabilities\"], however it is not explicitly required.\""
   },
   "dispute": {
    "claims": [
     "a2ui.org 'View source' points to github.com/a2ui-project/a2ui (used as canonical here)",
     "docs.ag-ui.com/introduction links A2UI to github.com/google/A2UI"
    ],
    "summary": "Two GitHub locations are both cited for A2UI: the canonical 'View source of this page' link on a2ui.org points to a2ui-project/a2ui, but AG-UI's own docs (fetched 2026-09-05) still link A2UI to github.com/google/A2UI. This looks like an org rename or fork that the AG-UI docs have not caught up with, not a governance dispute, but it is unresolved which is authoritative going forward."
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://a2ui.org/",
     "claim": "A2UI project, *A2UI*, project home page",
     "date": null,
     "quote": "A2UI is Apache 2.0 licensed, created by Google with contributions from CopilotKit and the open source community, and is in active development on GitHub. / v0.9.1 Previous Minor refinements to v0.9, standardizing on the application/a2ui+json MIME type / v0.8 Deprecated Deprecated legacy version. Structured Output first.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://a2ui.org/specification/v0.9.1-a2ui/",
     "claim": "A2UI project, *A2UI Protocol v0.9.1*, version 0.9.1; status Closed; created 2025-11-20; last updated 2025-12-03",
     "date": null,
     "quote": "The A2UI Protocol is designed for dynamically rendering user interfaces from a stream of JSON objects sent from a server (Agent). / The server-to-client protocol defines four message types: createSurface: Signals the client to create a new surface and begin rendering it. updateComponents: Provides a list of component definitions to be added to or updated in a specific surface. updateDataModel: Provides new data to be inserted into or to replace a surface's data model. deleteSurface: Explicitly removes a surface and its contents from the UI. / A Specification for a JSON-Based, Streaming UI Protocol / Version: 0.9.1 Status: Closed Created: Nov 20, 2025 Last Updated: Dec 3, 2025 / Version 0.9 introduced A2UI's prompt-first protocol family. While v0.8 was optimized for LLMs that support structured output, v0.9 is designed to be embedded directly within a model's prompt. / The LLM is then asked to produce JSON that matches the provided examples and schema descriptions. / The A2UI protocol is designed to be transport-agnostic. It defines the JSON message structure and the semantic contract between the server (Agent) and the client (Renderer), but it does not mandate a specific transport layer. / A2A (Agent-to-Agent) is an excellent transport option for A2UI in agentic systems / AG-UI is also an excellent transport option for A2UI Agent-User Interaction protocol. / The A2UI protocol uses a unidirectional stream of JSON messages from the server to the client to describe and update the UI. The client consumes this stream, builds the UI, and renders it. User interactions are handled separately, typically by sending events to a different endpoint, which may in turn trigger new messages on the UI stream. / Here is an example sequence of events (which don't have to be in exactly this order): / The following example demonstrates a complete interaction to render a Contact Form, expressed as a JSONL stream. / \"version\": \"v0.9.1\" / createSurface: Signals the client to create a new surface and begin rendering it. / surfaceId (string, required): The unique identifier for the UI surface to be rendered. / catalogId (string, required): A string that uniquely identifies the catalog (components and functions) used for this surface. / Once a surface is created, its surfaceId and catalogId are fixed; to reconfigure them, the surface must be deleted and recreated. / It is an error to send createSurface for a surfaceId that already exists without first deleting it. / One of the components in one of the component lists MUST have an id of root to serve as the root of the component tree. / The components are provided as a flat list, and their relationships are defined by ID references in an adjacency list. / This message may only be sent to a surface that has already been created. / This model allows the server to send component definitions in any order. / There must be exactly one component with the ID root in the component tree / Until that component is defined, other component updates will have no visible effect, and they will be buffered until a root component is defined. / The A2UI protocol defines the UI as a flat list of components. The tree structure is built implicitly using ID references. This is known as an adjacency list model. / updateDataModel: Provides new data to be inserted into or to replace a surface's data model. / path (string, optional): A JSON Pointer to the location in the data model to update. Defaults to /. / If path is omitted (or is /), the entire data model for the surface is replaced. / Data bindings in A2UI are defined using JSON Pointers (RFC 6901). / During the initial streaming phase, data paths may resolve to undefined if the updateDataModel message containing that data has not yet arrived. / Renderers should handle undefined values gracefully (e.g., by treating them as empty strings or showing a loading indicator) to support progressive rendering. / This message is sent when the user interacts with a component that has an action defined, such as a Button. / name (string, required): The name of the action. / surfaceId (string, required): The ID of the surface where the action originated. / sourceComponentId (string, required): The ID of the component that triggered the action. / timestamp (string, required): An ISO 8601 timestamp. / context (object, required): A JSON object containing any context provided in the component's action property. / The server references these functions by name in FunctionCall objects. This avoids sending executable code. / Message framing: The transport must clearly delimit individual JSON envelope messages (e.g., using newlines in JSONL, WebSocket frames, or SSE events). / Reliable delivery: Messages must be delivered in the order they were generated. A2UI relies on stateful updates (e.g., creating a surface before updating it), so out-of-order delivery can corrupt the UI state. / Client capabilities (supported catalogs, custom components) and Server capabilities are exchanged via metadata or transport-specific handshakes",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://github.com/a2ui-project/a2ui",
     "claim": "a2ui-project, *a2ui*, repository overview",
     "date": null,
     "quote": "The client application then renders this using its own native component library (Flutter, Angular, Lit, etc.). / Agents send a declarative JSON format describing the intent of the UI. / \"spdx_id\": \"Apache-2.0\" / \"created_at\": \"2025-09-24T23:14:02Z\" / \"name\": \"Apache License 2.0\" / Running arbitrary code generated by an LLM may present a security risk. / A2UI is a declarative data format, not executable code. / Your client application maintains a \"catalog\" of trusted, pre-approved UI components (e.g., Card, Button, TextField), and the agent can only request to render components from that catalog. / Agent SDK: teaches the LLM a catalog and parses its response into A2UI messages. / Protocol messages, data model, data binding and catalog validation. / Connects the agent SDK to the / Agent Development Kit (ADK) / Agent-to-Agent (A2A) protocol / Not published yet",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://a2ui.org/introduction/agent-ui-ecosystem/",
     "claim": "A2UI project, *How Does A2UI Compare?*, comparison with MCP Apps and AG-UI",
     "date": null,
     "quote": "AG-UI is a transport protocol connecting agent backends to frontends with real-time state sync. A2UI is a UI format: the payload that describes what to render. / AG-UI is a project by the CopilotKit team. / AG-UI has day-zero A2UI compatibility. / MCP extension (SEP-1865) / MCP Apps treat UI as a resource: servers provide pre-built HTML via ui:// URIs, rendered in sandboxed iframes. / Declarative data, no code execution / A2UI takes a declarative UI approach: agents send component blueprints",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://developers.googleblog.com/introducing-a2ui-an-open-project-for-agent-driven-interfaces/",
     "claim": "Google A2UI Team, *Introducing A2UI: An open project for agent-driven interfaces*, 2025-12-15",
     "date": "2025-12-15",
     "quote": "\"name\": \"Google A2UI Team\" / \"datePublished\": \"2025-12-15\" / Today we are making the A2UI project public so we can collaborate with others on this early stage format and implementations. / Instead of retrieving an opaque payload to display in a sandbox, an A2UI agent sends a blueprint of native components. / 2025-12-15 / AG-UI fully supports the A2UI spec for rich declarative generative UIs dynamically generated by agents. / day-0 compatibility between AG-UI and A2UI.",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://github.com/a2ui-project",
     "claim": "Google / A2UI Project, *a2ui-project organization*, created 2026-03-03",
     "date": null,
     "quote": "\"created_at\": \"2026-03-03T15:37:09Z\" / \"login\": \"a2ui-project\" / \"description\": \"A Protocol for Agent-Driven User Interfaces\"",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://raw.githubusercontent.com/a2ui-project/a2ui/main/CONTRIBUTING.md",
     "claim": "a2ui-project, *How to contribute to A2UI*, CONTRIBUTING.md on main",
     "date": null,
     "quote": "Contributions to this project must be accompanied by a Contributor License Agreement (CLA). / This project follows Google's Open Source Community Guidelines.",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://a2ui.org/specification/v1.0-a2ui/",
     "claim": "A2UI project, *A2UI Protocol v1.0*, version 1.0; status Current; created 2025-11-20; last updated 2026-06-08",
     "date": null,
     "quote": "Version: 1.0 Status: Current Created: Nov 20, 2025 Last Updated: Jun 8, 2026 / Last Updated: Jun 8, 2026 / Version: 1.0 Status: Current Created: Nov 20, 2025 Last Updated: Jun 8, 2026 A Specification for a JSON-Based, Streaming UI Protocol / While A2UI is transport agnostic, it is most commonly used with the following transports. / AG-UI is the standard transport binding for Agent-to-User Interaction. / The A2A Extension maps A2UI over the A2A Protocol. / A2UI can be carried over MCP tool calls, tool outputs, or resource subscriptions / WebSockets: For bidirectional, real-time sessions. / REST: For simple use case, REST APIs will work but lack streaming capabilities.",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://a2ui.org/specification/v0.9-a2ui/",
     "claim": "A2UI project, *A2UI Protocol v0.9*, version 0.9; status Stable; created 2025-11-20",
     "date": null,
     "quote": "Version: 0.9 Status: Stable Created: Nov 20, 2025",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://raw.githubusercontent.com/a2ui-project/a2ui/main/README.md",
     "claim": "a2ui-project/a2ui (GitHub), *a2ui-project/a2ui — README.md*, checked 2026-11-08",
     "date": null,
     "quote": "A2UI is an open-source generative UI framework",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://a2ui.org/specification/v0.8-a2ui/",
     "claim": "A2UI project, *A2UI Protocol v0.8 (Legacy)*, created 2025-09-19; updated 2025-11-12",
     "date": null,
     "quote": "Version 0.8 is a legacy release, maintained for backward compatibility. For production use, consider v0.9.1 (Current). / Communication occurs via a JSON Lines (JSONL) stream. / The server-to-client protocol defines four message types: surfaceUpdate: Provides a list of component definitions to be added to or updated in a specific UI area called a \"surface.\" dataModelUpdate: Provides new data to be inserted into or to replace a surface's data model. Each surface has its own data model. beginRendering: Signals to the client that it has enough information to perform the initial render, specifying the ID of the root component and, optionally, the component catalog to use. deleteSurface: Explicitly removes a surface and its contents from the UI.",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://developers.googleblog.com/a2ui-10-build-delightful-fast-reliable-agentic-experiences/",
     "claim": "Vishal Motwani and the Google A2UI Team (Google Developers Blog), *A2UI 1.0: Build delightful, fast, reliable, agentic experiences*, NOV. 11, 2026; fetched 2026-11-11",
     "date": null,
     "quote": "NOV. 11, 2026 / Today, we&#x27;re releasing A2UI 1.0, the first stable version of our open protocol for generative UI. It lets AI agents answer with interactive screens, such as a form to confirm or a chart. / Developers can use it now with open-source renderer SDKs for the web, Android, and iOS and agent SDKs for Python, TypeScript, and Dart. / SwiftUI on iOS and Jetpack Compose on Android (currently v0.9.1, and v1.0 coming soon). / Today, we&#x27;re releasing A2UI 1.0, the first stable version of our open protocol for generative UI. / Version 1.0 adds bidirectional function calls, so a flight or reservation picker can check availability on the spot. / The protocol also adds support for accessibility and extensions for any additional metadata. / The web and Flutter renderers also work inside MCP Apps / Lynx supports A2UI 0.9 today and is adapting to 1.0 with the A2UI team. / The Jetpack Compose renderer supports 0.9.1 today, with 1.0 coming soon. / Atlassian is bringing A2UI to Jira, where teams can assign work items to AI agents. / Companies such as Atlassian, Alation, Bloomberg, and ByteDance are already building with it. / When an agent needs a follow-up from the team to finish a work item, such as a missing detail or a decision, it asks with an interactive card in the work item, and the team answers right there in Jira. / The Alation Intelligence Operating System (AIOS) builds its feeds using A2UI: metric cards, charts, and more. / ByteDance released an A2UI renderer for Lynx, its cross-platform framework, in June 2026.",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://github.com/a2ui-project/a2ui/tags",
     "claim": "Google / A2UI Project, *a2ui-project/a2ui tags*, tags include v0.9 and v0.8 at commit 19919ef",
     "date": null,
     "quote": "\"name\": \"v0.9\" / \"name\": \"v0.8\" / \"sha\": \"19919ef4c8ad3185867f70386fa4669284d7714c\"",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://github.com/a2ui-project/a2ui/commit/19919ef4c8ad3185867f70386fa4669284d7714c",
     "claim": "wrenj (Google), *get a2ui over mcp sample working again (#1076)*, committed 2026-04-06",
     "date": null,
     "quote": "\"date\": \"2026-04-06T20:08:45Z\"",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://github.com/a2ui-project/a2ui/releases",
     "claim": "Google / A2UI Project, *a2ui-project/a2ui releases*, python/a2ui-agent-sdk/v0.9.0 published 2026-10-17",
     "date": null,
     "quote": "\"tag_name\": \"python/a2ui-agent-sdk/v0.9.0\" / \"published_at\": \"2026-10-17T00:12:54Z\" / \"tag_name\":\"python/a2ui-agent-sdk/v0.9.0\" / \"name\":\"a2ui-agent-sdk 0.9.0\" / \"published_at\":\"2026-10-17T00:12:54Z\" / \"tag_name\":\"python/a2ui-core/v0.4.0\" / \"published_at\":\"2026-10-17T00:12:52Z\" / \"tag_name\":\"python/a2ui-adk/v0.1.0\" / \"published_at\":\"2026-10-17T00:12:59Z\" / \"tag_name\":\"python/a2ui-a2a/v0.1.0\" / \"published_at\":\"2026-10-17T00:12:57Z\" / \"tag_name\":\"cli-v0.1.0\" / A2UI CLI v0.1.0 / \"published_at\":\"2026-10-30T03:01:56Z\"",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://developers.googleblog.com/a2ui-and-mcp-apps/",
     "claim": "Google A2UI Team, Ido Salomon, and Liad Yosef, *A2UI + MCP Apps: Combining the best of declarative and custom agentic UIs*, 2026-06-17",
     "date": "2026-06-17",
     "quote": "it returns a structured JSON payload with a specific MIME type: application/a2ui+json / 2026-06-17 / application/a2ui+json / a2ui://dynamic-ui/recipe-card / via MCP Resources (resources/read) or through MCP Tool invocations (tools/call) / web-based Pong Game / the native A2UI components are rehydrated with the updated score / packaging the A2UI rendering engine directly within the MCP App bundle / We are considering making a MCP extension to support A2UI",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://a2ui.org/specification/v0.9.1-a2ui-extension-specification/",
     "claim": "A2UI project, *A2A Extension*, extension URI for A2UI v0.9.1",
     "date": null,
     "quote": "The URI of this extension is https://a2ui.org/a2a-extension/a2ui/v0.9.1 / Agents advertising A2UI support in their AgentCard is encouraged as clients may rely on it to determine if they should send message.metadata[\"a2uiClientCapabilities\"], however it is not explicitly required.",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://raw.githubusercontent.com/a2ui-project/a2ui/main/LICENSE",
     "claim": "Apache Software Foundation, *Apache License, Version 2.0*, January 2004",
     "date": null,
     "quote": "Apache License Version 2.0, January 2004",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://a2ui.org/reference/renderers",
     "claim": "A2UI, *Renderers (Clients)*, checked 2026-11-06",
     "date": null,
     "quote": "| Renderer | Platform | v0.8 | v0.9.1 | v1.0 | Links | / | **React** | Web | ✅ Stable | ✅ Stable | 🚧 Planned | Code | / | **Lit (Web Components)** | Web | ✅ Stable | ✅ Stable | 🚧 Planned | Code | / | **Angular** | Web | ✅ Stable | ✅ Stable | 🚧 Planned | Code | / | **Flutter (GenUI SDK)** | Mobile/Desktop/Web | ✅ Stable | ✅ Stable | 🚧 Planned | Docs · Code | / | **SwiftUI** | iOS/macOS | — | — | 🚧 Planned | — | / | **Jetpack Compose** | Android | — | ✅ Alpha | 🚧 Planned | Docs · Code | / Renderers convert A2UI JSON messages into native UI components for different platforms. / A compliant renderer must meet the following key requirements: / Parse A2UI JSON messages, specifically the adjacency list format. / A2UI-Android** — Community Jetpack Compose renderer, 20+ components (~15 ⭐, v0.8) / a2ui-react-native** — React Native renderer for iOS/Android (~9 ⭐, v0.8) / **SwiftUI** | iOS/macOS | — | — | 🚧 Planned | — | / **Jetpack Compose** | Android | — | ✅ Alpha | 🚧 Planned | Docs · Code | / **json-render** — Vercel's React library for rendering A2UI catalogs via Zod schemas / **A2UI-Android** — Community Jetpack Compose renderer, 20+ components (~15 ⭐, v0.8) / **a2ui-react-native** — React Native renderer for iOS/Android (~9 ⭐, v0.8) / **Lynx A2UI** — ReactLynx renderer for A2UI (v0.9) / **AGenUI** — Cross-platform native renderer covering iOS, Android, and HarmonyOS. (v0.9)",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://a2ui.org/guides/client-setup",
     "claim": "A2UI, *Client Setup*, checked 2026-11-06",
     "date": null,
     "quote": "| Renderer | Platform | v0.8 | v0.9 | Status | / | **React** | Web | ✅ | ✅ | ✅ Stable | / | **Lit (Web Components)** | Web | ✅ | ✅ | ✅ Stable | / | **Angular** | Web | ✅ | ✅ | ✅ Stable | / | **Flutter (GenUI SDK)** | Mobile/Desktop/Web | ✅ | ✅ | ✅ Stable | / | **Jetpack Compose** | Android | — | — | 🚧 Planned Q2 2026 | / npm install @a2ui/lit @a2ui/web_core / npm install @a2ui/angular @a2ui/web_core / npm install @a2ui/react @a2ui/web_core / flutter pub add flutter_genui / A component catalog is any collection of components. A2UI provides a \"Basic Catalog\" but we expect you will add your own components, or shared libraries or fully replace the basic components with your own. / You can register any collection of components and functions, and A2UI will work with them. The catalog is just the contract between your agent and your renderer. / All web renderers (Lit, Angular, React) share a common foundation: **`@a2ui/web_core`**. / `<a2ui-surface>` component**: Renders surfaces in your app. / **Jetpack Compose** | Android | — | — | 🚧 Planned Q2 2026 |",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://github.com/a2ui-project/a2ui/blob/main/docs/public/guides/client-setup.md",
     "claim": "A2UI Project, *Client Setup Guide (repository source)*, checked 2026-11-06",
     "date": null,
     "quote": "| Renderer                                                                        | Platform           | v1.0 | v0.9.1 | Status    | / The React, Lit, and Angular renderers also support the deprecated v0.8. / Flutter (`a2ui_flutter`) / | **Jetpack Compose** | Android | 🚧 | ✅ | 🧪 Alpha | / flutter pub add a2ui_flutter a2ui_core / These packages replace the `genui` package; the older `flutter_genui` and `genui_a2ui` packages are discontinued.",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://docs.ag-ui.com/spec/1.0/index",
     "claim": "CopilotKit, *AG-UI Specification 1.0*, specifies the event stream and the run input",
     "date": null,
     "quote": "HTTP + Server-Sent Events / HTTP + Protobuf / This document specifies the protocol: the event stream, the run input, and the obligations of the parties exchanging them.",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://a2a-protocol.org/latest/specification/",
     "claim": "A2A Protocol, *Overview*, JSONRPC, GRPC, and HTTP+JSON bindings",
     "date": null,
     "quote": "Enable agents to delegate tasks, exchange context, and work together on complex user requests. / The core ones officially supported are JSONRPC, GRPC and HTTP+JSON. / GET /.well-known/agent-card.json",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://modelcontextprotocol.io/seps/1865-mcp-apps-interactive-user-interfaces-for-mcp",
     "claim": "Ido Salomon (@idosal) and Liad Yosef, *SEP-1865: MCP Apps - Interactive User Interfaces for MCP*, created 2025-11-21; status Final",
     "date": null,
     "quote": "text/html;profile=mcp-app",
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28",
     "claim": "Model Context Protocol, *Specification*, version 2026-07-28 (latest)",
     "date": null,
     "quote": "The protocol uses JSON-RPC 2.0 messages to establish communication between: / Servers offer any of the following features to clients: Resources : Context and data, for the user or the AI model to use Prompts : Templated messages and workflows for users Tools : Functions for the AI model to execute",
     "ref": 25
    },
    {
     "label": "[26]",
     "url": "https://docs.ag2.ai/latest/docs/blog/2026/03/20/AG2-A2UI/",
     "claim": "Mark Sze (AG2), *A2UIAgent: Rich UI from Your AG2 Agents*, 2026-03-20",
     "date": "2026-03-20",
     "quote": "March 20, 2026 / A2UIAgent extends AG2's ConversableAgent / Schema validation + retry / Works with both AG-UI (streaming) and A2A (agent-to-agent) out of the box",
     "ref": 26
    },
    {
     "label": "[27]",
     "url": "https://a2ui.org/ecosystem/a2ui-in-the-world/",
     "claim": "A2UI project, *A2UI in the World*, ecosystem page",
     "date": null,
     "quote": "Serves the same UI over A2A (JSON-RPC) and AG-UI (SSE). / ADK integrated the A2UI v0.8 basic catalog / The A2UI Python agent SDK provides an ADK extension for generating A2UI from agents. / Restaurant Finder (samples/agent/adk/restaurant_finder) / A2UI rendering in Gemini Enterprise currently requires self-serve agents registered using the Agent-to-Agent (A2A) path (a2aAgentDefinition). / Managed agents deployed on Vertex AI Agent Engine and registered using the adkAgentDefinition path do not currently support A2UI rendering. / The built-in developer UI, ADK Web, includes native A2UI rendering. / ADK integrated the A2UI v0.8 basic catalog to automatically render spec-compliant agent parts as native UI components directly in the chat. / A2UI messages are converted between A2A DataPart metadata and ADK events. / with day-zero A2UI compatibility / React, Vue, Angular, and other app surfaces through CopilotKit. / GenUI SDK uses A2UI as the underlying protocol for communication between server-side agents and Flutter applications. / json-render - Vercel's React library for rendering A2UI component catalogs via Zod schemas. / They use A2UI to power the dynamic, generative UI system that makes Opal's AI mini-apps possible. / A2UI is being adopted by teams at Google and partner organizations to build the next generation of agent-driven applications. / Production Deployments Google Opal: AI Mini-Apps for Everyone Gemini Enterprise: Custom Agents for Business Flutter GenUI SDK: Generative UI for Mobile Google ADK: Agent Development Kit",
     "ref": 27
    },
    {
     "label": "[28]",
     "url": "https://a2ui.org/roadmap/",
     "claim": "A2UI project, *Roadmap*, renderer status table",
     "date": null,
     "quote": "Complete A2UIAgent / In Progress Still designing developer ergonomics, see samples / Flutter (GenUI SDK) / Works on mobile, web, desktop / Shared core lib for all web renderers / Web Components (Lit) / Framework-agnostic, works anywhere / Full Angular integration / Official React renderer / ReactLynx renderer for A2UI v0.9 / Alpha iOS/macOS v0.9, v0.9.1 and v1.0 / Planned for Q2 2026 / Web Core Lib ✅ Stable Web Shared core lib for all web renderers Web Components (Lit) ✅ Stable Web Framework-agnostic, works anywhere Angular ✅ Stable Web Full Angular integration Flutter (GenUI SDK) ✅ Stable Multi-platform Works on mobile, web, desktop React ✅ Stable Web Official React renderer Lynx ✅ Stable Mobile, Web, Desktop ReactLynx renderer for A2UI v0.9 SwiftUI ✅ Alpha iOS/macOS v0.9, v0.9.1 and v1.0, see code Jetpack Compose 📋 Planned Android Planned for Q2 2026 / Vue 💡 Proposed Web Community interest Svelte/Kit 💡 Proposed Web Community interest ShadCN (React) 💡 Proposed Web Community interest",
     "ref": 28
    },
    {
     "label": "[29]",
     "url": "https://cloud.google.com/blog/topics/developers-practitioners/guide-to-gemini-enterprise-and-a2ui-integration/",
     "claim": "Dave Wang and Yuan Tian (Google Cloud), *Guide to Gemini Enterprise and A2UI integration*, byline 2026-05-30; JSON-LD datePublished 2026-05-29",
     "date": null,
     "quote": "Gemini Enterprise - GE is the shell, the renderer, and the transport client. You only build the agent. / May 30, 2026 / \"datePublished\":\"2026-05-29\" / CopilotKit owns the chat shell, an A2UI renderer is registered inside it for rich cards.",
     "ref": 29
    },
    {
     "label": "[30]",
     "url": "https://docs.copilotkit.ai/generative-ui/a2ui",
     "claim": "CopilotKit, *A2UI*, generative UI docs",
     "date": null,
     "quote": "This automatically applies A2UIMiddleware to all registered agents. / @copilotkit/react-core/v2",
     "ref": 30
    },
    {
     "label": "[31]",
     "url": "https://flutter.dev/blog/new-updates-to-a2ui-and-flutters-genui-package",
     "claim": "Andrew Brogdon (Flutter), *New updates to A2UI and Flutter's GenUI package*, 2026-05-14",
     "date": "2026-05-14",
     "quote": "May 14, 2026 / genui, a package that uses A2UI to connect with an agent and provide it with a catalog of widgets to use, and then presents those widgets to the user. / Driven by adoption of v0.9 of the A2UI protocol",
     "ref": 31
    },
    {
     "label": "[32]",
     "url": "https://developers.googleblog.com/a2ui-v0-9-generative-ui/",
     "claim": "Google A2UI Team, *A2UI v0.9: The New Standard for Portable, Framework-Agnostic Generative UI*, 2026-04-17",
     "date": "2026-04-17",
     "quote": "2026-04-17 / We've also landed the official React renderer and version-bumped all A2UI supported renderers (Flutter, Lit, Angular, and React)",
     "ref": 32
    },
    {
     "label": "[33]",
     "url": "https://registry.npmjs.org/@lynx-js/genui",
     "claim": "npm, *@lynx-js/genui*, created 2026-05-25; latest 0.7.2 published 2026-10-30",
     "date": null,
     "quote": "\"latest\":\"0.7.2\" / \"0.7.2\":\"2026-10-30T15:19:31.225Z\" / \"description\":\"Generative UI for Lynx.\" / \"@a2ui/web_core\"",
     "ref": 33
    },
    {
     "label": "[34]",
     "url": "https://github.com/AGenUI/AGenUI",
     "claim": "AGenUI, *AGenUI*, v1.7.0 released 2026-10-19",
     "date": null,
     "quote": "Native A2UI Renderer for iOS/Android/HarmonyOS. / What's New in v1.7.0",
     "ref": 34
    },
    {
     "label": "[35]",
     "url": "https://opal.google/",
     "claim": "Google, *Opal*, graduating out of Labs on 2026-11-17; fetched page does not contain A2UI",
     "date": null,
     "quote": "Opal [Experiment] / Opal is graduating out of Labs on November 17, 2026, as custom workflows transition to skills in Gemini.",
     "ref": 35
    }
   ],
   "form": "document-format",
   "governance": "The A2UI open-source project in the a2ui-project GitHub organization (organization created 2026-03-03); the old address https://github.com/google/A2UI now answers with an HTTP 301 redirect to https://github.com/a2ui-project/a2ui (checked 2026-10-28). Contributions go through the Google CLA: \"Contributions to this project must be accompanied by a Contributor License Agreement (CLA).\" and \"This project follows Google's Open Source Community Guidelines\". Licence Apache-2.0. No standards body or foundation was found holding A2UI (checked 2026-10-28)",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against a2ui.org v1.0 spec and github.com/a2ui-project/a2ui"
    },
    {
     "date": "2026-10-16",
     "note": "A2UI moved from google/A2UI to the a2ui-project GitHub organisation"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "a2ui",
   "implementation": "multi-implementation",
   "last_verified": "2026-11-11",
   "name": "A2UI (Agent to UI) Protocol",
   "native_status": "v1.0 (Current); v0.9.1 (Closed); v0.9 (Previous, Stable); v0.8 (Deprecated). The main README omits the earlier early-stage public preview notice. Google Developers Blog, NOV. 11, 2026, announced the public release of A2UI 1.0 as the first stable version. SwiftUI on iOS and Jetpack Compose on Android are currently v0.9.1, with v1.0 coming soon. The v1.0 specification page still says Last Updated: Jun 8, 2026.",
   "origin": {
    "org": "Google",
    "date": "2025-12-15"
   },
   "part_of": null,
   "parties": [
    "agent-human"
   ],
   "phase": "candidate",
   "probe": {
    "method": "GET",
    "on_absent": "No A2UI capability declared; the agent returns only text or opaque structured JSON, not a declarative UI surface",
    "parse": "Presence of an A2UI catalogId/capability declaration in the handshake metadata, or a createSurface/updateComponents/updateDataModel/deleteSurface message in the response stream",
    "path": "{endpoint} — the AG-UI, A2A, or MCP endpoint the agent exposes; inspect its handshake/Agent Card/initialization payload"
   },
   "question": "How can an agent describe and stream a framework-neutral, declarative UI to a renderer?",
   "scope": "general",
   "spec_url": "https://a2ui.org/specification/v1.0-a2ui/",
   "step": "present",
   "summary_md": "**A2UI (Agent to UI) Protocol** (`A2UI`) is an `Apache-2.0` open specification originated by Google (announced 2025-12-15 and maintained in `a2ui-project` with CopilotKit contributions) for rendering user interfaces from a stream of declarative JSON objects sent by an agent. Instead of executing arbitrary agent-generated code, the client renders the UI description using its own native component library (Flutter, Angular, React, or Lit). In `v1.0` and `v0.9.1`, the server-to-client protocol defines four core JSON message types—`createSurface`, `updateComponents`, `updateDataModel`, and `deleteSurface`—standardized on the `application/a2ui+json` MIME type. The specification tracks mark `v1.0` as Current (Jun 8, 2026), `v0.9.1` as Closed (Dec 3, 2025), `v0.9` as Stable, and `v0.8` as Deprecated. Legacy `v0.8` streamed `surfaceUpdate`, `dataModelUpdate`, `beginRendering`, and `deleteSurface` over JSON Lines (`JSONL`), whereas `v0.9` introduced a prompt-first schema family embedded directly in model prompts. On NOV. 11, 2026, the Google Developers Blog announced the public release of A2UI 1.0 as the first stable version of the open protocol for generative UI, with open-source renderer SDKs for the web, Android, and iOS and agent SDKs for Python, TypeScript, and Dart. The canonical specification page still lists Last Updated: Jun 8, 2026.",
   "track": "single-vendor",
   "version": {
    "label": "v1.0 (Current; public release announced NOV. 11, 2026); v0.9.1 (Closed); v0.8 (Deprecated)",
    "date": "2026-06-08"
   },
   "watch": [
    {
     "type": "page",
     "url": "https://a2ui.org/specification/v1.0-a2ui/",
     "selector": "main",
     "cadence": "weekly"
    },
    {
     "type": "github",
     "repo": "a2ui-project/A2UI",
     "mode": "release",
     "version": false
    }
   ],
   "use_cases": [
    "render-agent-ui"
   ],
   "audience": [
    "agent-builder",
    "platform"
   ],
   "pairs_with": [
    "ag-ui",
    "a2a",
    "mcp-apps",
    "mcp"
   ],
   "prerequisites": [],
   "hatnote_md": "This page is about the Google-originated A2UI (Agent to UI) Protocol. For the agent-frontend event transport originated by CopilotKit (which can carry A2UI payloads), see [Agent-User Interaction Protocol (AG-UI)](/protocols/ag-ui/). For the Model Context Protocol extension (SEP-1865) that renders pre-built ui:// HTML resources in sandboxed iframes, see [MCP Apps](/protocols/mcp-apps/).",
   "tier": "flagship",
   "lifecycle_status": "active",
   "wire_archetype": "harnesses_rpc_ui",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-11",
   "v05_hatnote_html_md": "This page is about the Google-originated A2UI (Agent to UI) Protocol. For the agent-frontend event transport originated by CopilotKit (which can carry A2UI payloads), see [Agent-User Interaction Protocol (AG-UI)](/protocols/ag-ui/). For the Model Context Protocol extension (SEP-1865) that renders pre-built ui:// HTML resources in sandboxed iframes, see [MCP Apps](/protocols/mcp-apps/). [1][2][3][4]",
   "v05_elevator_pitch_md": "A2UI (Agent to UI) is a declarative generative-UI standard that lets AI agents assemble rich, interactive forms and cards inside a host application without sending executable frontend code over the wire. Rather than rendering untrusted LLM-generated HTML or JavaScript inside sandboxes, the agent streams `application/a2ui+json` messages—such as `createSurface`, `updateComponents`, and `updateDataModel`—that the client maps onto its own pre-approved React, Flutter, Angular, or Lit widget catalog. [1][2][3]",
   "v05_lead_md": "**A2UI (Agent to UI) Protocol** (`A2UI`) is an `Apache-2.0` open specification originated by Google (announced 2025-12-15 and maintained in `a2ui-project` with CopilotKit contributions) for rendering user interfaces from a stream of declarative JSON objects sent by an agent. Instead of executing arbitrary agent-generated code, the client renders the UI description using its own native component library (Flutter, Angular, React, or Lit). [1][2][3][5][6][7] In `v1.0` and `v0.9.1`, the server-to-client protocol defines four core JSON message types—`createSurface`, `updateComponents`, `updateDataModel`, and `deleteSurface`—standardized on the `application/a2ui+json` MIME type. [1][2][8] The specification tracks mark `v1.0` as Current (Jun 8, 2026), `v0.9.1` as Closed (Dec 3, 2025), `v0.9` as Stable, and `v0.8` as Deprecated. Legacy `v0.8` streamed `surfaceUpdate`, `dataModelUpdate`, `beginRendering`, and `deleteSurface` over JSON Lines (`JSONL`), whereas `v0.9` introduced a prompt-first schema family embedded directly in model prompts. [1][2][8][9][10][11] On NOV. 11, 2026, the Google Developers Blog announced the public release of A2UI 1.0 as the first stable version of the open protocol for generative UI, with open-source renderer SDKs for the web, Android, and iOS and agent SDKs for Python, TypeScript, and Dart. The canonical specification page still lists Last Updated: Jun 8, 2026. [8][12]",
   "v05_identity_sentence_md": "**A2UI (Agent to UI) Protocol** (`A2UI`) is an `Apache-2.0` open specification originated by Google (announced 2025-12-15 and maintained in `a2ui-project` with CopilotKit contributions) for rendering user interfaces from a stream of declarative JSON objects sent by an agent. Instead of executing arbitrary agent-generated code, the client renders the UI description using its own native component library (Flutter, Angular, React, or Lit). [1][2][3][5][6][7]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Present](/category/present/) (`present`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "Google announced A2UI on 2025-12-15. Repo `a2ui-project/a2ui` created 2025-09-24, with CopilotKit contributions. [1][3][5]"
    },
    {
     "label": "Governed by",
     "value_md": "a2ui-project organization (created 2026-03-03). Contributions require a CLA and follow Google's Open Source Community Guidelines. [6][7]"
    },
    {
     "label": "Track",
     "value_md": "Open-source project created by Google, Apache-2.0, maintained in the a2ui-project organization. [1][3][6]"
    },
    {
     "label": "Status",
     "value_md": "`v1.0` Current; `v0.9.1` Closed; `v0.9` Previous (Stable); `v0.8` Deprecated. The main README omits the earlier public-preview notice. The NOV. 11, 2026 Google Developers Blog calls A2UI 1.0 the first stable version. It says SwiftUI on iOS and Jetpack Compose on Android are currently v0.9.1, with v1.0 coming soon. [1][2][8][9][10][12]"
    },
    {
     "label": "Version",
     "value_md": "v1.0 (Current); v0.9.1 (Closed); v0.9 (Stable); v0.8 (Deprecated). Spec `v1.0` updated 2026-06-08; `v0.9.1` updated 2025-12-03; `v0.9` created 2025-11-20. Release `python/a2ui-agent-sdk/v0.9.0` (2026-10-17); tags `v0.8`/`v0.9` point to `19919ef` (2026-04-06). Public `v1.0` release announced on the Google Developers Blog on November 11, 2026 (while the `v1.0` specification page header still reads Last Updated: Jun 8, 2026). [1][2][8][9][12][13][14][15]"
    },
    {
     "label": "Message format",
     "value_md": "v1.0 and v0.9.1 JSON: `createSurface`, `updateComponents`, `updateDataModel`, `deleteSurface`. MIME `application/a2ui+json`. v0.8 used JSONL. [2][8][11][16]"
    },
    {
     "label": "Transports",
     "value_md": "Transport agnostic. The v1.0 specification lists AG-UI, A2A, MCP, WebSockets, and REST. [8]"
    },
    {
     "label": "Specification",
     "value_md": "[A2UI Protocol v1.0](https://a2ui.org/specification/v1.0-a2ui/) (Current); [A2UI Protocol v0.9.1](https://a2ui.org/specification/v0.9.1-a2ui/) (Closed) [2][8]"
    },
    {
     "label": "Found at",
     "value_md": "A2A Extension (`v1.0` maps A2UI over A2A; the `v0.9.1` extension spec defines URI `https://a2ui.org/a2a-extension/a2ui/v0.9.1`). Advertising A2UI in an Agent Card is encouraged and is not explicitly required. [8][17]"
    },
    {
     "label": "Licence",
     "value_md": "Apache-2.0 (Apache License, Version 2.0, January 2004). [1][3][18]"
    }
   ],
   "v05_problem_md": "Rendering agent-driven interfaces traditionally required retrieving an opaque code payload to display inside a sandbox rather than streaming a blueprint of native UI components. [5] Because running arbitrary code generated by an LLM presents a security risk, A2UI uses a declarative JSON data format rather than executable code. The client application maintains a catalog of trusted, pre-approved UI components (such as Card, Button, and TextField) and renders the blueprint using its own native component library, restricting the agent to components in that catalog. [3] A2UI is designed to be transport-agnostic: it defines the JSON message structure and semantic contract between the server (Agent) and client (Renderer) without mandating a specific transport layer. In `v1.0`, AG-UI serves as the standard transport binding for agent-to-user interaction, while the A2A Extension maps A2UI payloads over the A2A protocol. [2][8]",
   "v05_mechanism_delta_md": "Because running arbitrary code generated by an LLM presents a security risk, A2UI uses a declarative JSON data format rather than executable code. The client application maintains a catalog of trusted, pre-approved UI components (such as Card, Button, and TextField) and renders the blueprint using its own native component library, restricting the agent to components in that catalog. [3]",
   "v05_scope_boundary_md": "A2UI is designed to be transport-agnostic: it defines the JSON message structure and semantic contract between the server (Agent) and client (Renderer) without mandating a specific transport layer. In `v1.0`, AG-UI serves as the standard transport binding for agent-to-user interaction, while the A2A Extension maps A2UI payloads over the A2A protocol. [2][8]",
   "v05_fuzzy_additions": [
    {
     "id": "surface-lifecycle-messages-flat-adjacency-component-model-and-data-binding",
     "heading": "Surface lifecycle messages, flat adjacency component model, and data binding",
     "body_md": "In `v1.0` and `v0.9.1`, an agent drives a UI surface through four server-to-client messages (`createSurface`, `updateComponents`, `updateDataModel`, and `deleteSurface`), replacing the `v0.8` JSON Lines (`JSONL`) message set (`surfaceUpdate`, `dataModelUpdate`, `beginRendering`, and `deleteSurface`). Once a surface is initialized, subsequent component and data model update events do not have to arrive in a rigid fixed order. [2][8][11]",
     "bullets": [
      {
       "label": "`createSurface` and `catalogId`",
       "text_md": "`createSurface` signals the client to create a new surface and begin rendering it. Once created, a surface's `surfaceId` and `catalogId` are fixed and can only be reconfigured by deleting and recreating the surface; sending another `createSurface` for an existing `surfaceId` without first deleting it is an error, and one component in the surface must have an ID of `root`. [2]"
      },
      {
       "label": "Adjacency list by ID",
       "text_md": "`updateComponents` supplies component definitions as a flat list whose parent-child relationships are defined by ID references in an adjacency list. It may only be sent to an already created surface, allows the server to stream component definitions in any order, and buffers updates without visible effect until the single required `root` component is defined. [2]"
      },
      {
       "label": "JSON Pointer binding",
       "text_md": "`updateDataModel` inserts or replaces data for a surface using an optional `path` parameter formatted as an RFC 6901 JSON Pointer (defaulting to `/`, which replaces the entire surface data model). Because data paths may temporarily resolve to undefined while messages stream in, renderers handle undefined values gracefully to support progressive rendering. [2]"
      },
      {
       "label": "`action` and catalogs",
       "text_md": "When a user interacts with a component that defines an action (such as a Button), the client sends an `action` message containing five required fields: `name`, `surfaceId`, `sourceComponentId`, `timestamp` (an ISO 8601 timestamp), and `context`. On the server side, components reference pre-registered client functions by name in `FunctionCall` objects rather than transmitting executable code. [2][3]"
      }
     ]
    },
    {
     "id": "native-client-renderers-version-tracks-and-transport-bindings",
     "heading": "Native client renderers, version tracks, and transport bindings",
     "body_md": "Compliant client renderers parse A2UI's flat adjacency-list JSON messages and convert them into native platform widgets across Web, mobile, and desktop targets, with official and community packages spanning the `v0.8`, `v0.9.1`, and `v1.0` specification tracks. [1][2][8][10][11][19]",
     "bullets": [
      {
       "label": "Renderer version matrix",
       "text_md": "On the 6 November 2026 renderers reference table (captured prior to the 11 November 2026 `v1.0` release announcement), React, Lit (Web Components), Angular, and Flutter (GenUI SDK) are listed as Stable on `v0.8` and `v0.9.1` and Planned on `v1.0`, SwiftUI is Planned on `v1.0`, and Jetpack Compose is Alpha on `v0.9.1` and Planned on `v1.0`. Renderers convert A2UI JSON messages into native UI components and must parse the adjacency list format. [12][19]"
      },
      {
       "label": "`client-setup` packages",
       "text_md": "The published client-setup guide table (`v0.8`, `v0.9`) marks React, Lit, Angular, and Flutter (GenUI SDK) Status Stable and Jetpack Compose Planned Q2 2026 (`@a2ui/web_core`, `@a2ui/lit`, `@a2ui/angular`, `@a2ui/react`, `flutter pub add flutter_genui`). By contrast, the repository `client-setup.md` table (`v1.0`, `v0.9.1`) updates `a2ui_flutter` (`flutter pub add a2ui_flutter a2ui_core`, replacing `genui`) and Jetpack Compose to Status Alpha while retaining deprecated `v0.8` on React, Lit, and Angular. [20][21]"
      },
      {
       "label": "`JSONL`, AG-UI, and A2A",
       "text_md": "Because A2UI relies on stateful updates (such as creating a surface before updating it), the underlying transport must clearly delimit individual JSON envelopes (for example using `JSONL` newlines, WebSocket frames, or SSE events) and deliver them in generation order. Over A2A, support is advertised via the `https://a2ui.org/a2a-extension/a2ui/v0.9.1` extension URI (and the `v1.0` A2A Extension), while `v1.0` designates AG-UI as the standard agent-to-user transport binding. [2][8][17]"
      },
      {
       "label": "Custom catalog registration",
       "text_md": "A component catalog acts as the contract between an agent and a client renderer. Applications can extend or replace A2UI's Basic Catalog by registering custom components and functions identified by the surface's required `catalogId`, and clients and servers exchange supported catalog identifiers via message metadata or transport-specific handshakes. [2][20]"
      }
     ]
    }
   ],
   "v05_diagram": {
    "title": "Surface lifecycle",
    "heading": "Surface lifecycle",
    "mermaid": "sequenceDiagram\n    participant Server\n    participant Client\n    participant User\n\n    Server->>Client: 1. createSurface(surfaceId: \"main\")\n    Server->>Client: 2. updateComponents(surfaceId: \"main\", components: [...])\n    Server->>Client: 3. updateDataModel(surfaceId: \"main\", path: \"/user\", value: \"Alice\")\n    Note right of Client: Client renders initial UI (UI is displayed)\n    User->>Client: Interact with UI (e.g. click button)\n    Client->>Server: action(name: \"submit\", context: {...})\n\n    Note over Client, Server: Time passes, user interacts, or new data arrives...\n\n    Server->>Client: 4. updateComponents or updateDataModel (Dynamic Update)\n    Note right of Client: Client re-renders the UI to reflect changes (UI is updated)\n\n    Server->>Client: 5. deleteSurface(surfaceId: \"main\")\n    Note right of Client: Client removes the UI for the \"main\" surface (UI is gone)",
    "caption_md": "The server sends `createSurface`, `updateComponents`, and `updateDataModel`. The client renders the surface and sends `action` on user interaction. The server later sends dynamic updates and `deleteSurface`. [2]"
   },
   "v05_wire_artifact": {
    "title": "A2UI v0.9.1 contact form JSONL stream (`createSurface` through `deleteSurface`)",
    "heading": "A2UI v0.9.1 contact form JSONL stream (`createSurface` through `deleteSurface`)",
    "lang": "jsonl",
    "code": "{\"version\": \"v0.9.1\", \"createSurface\":{\"surfaceId\":\"contact_form_1\",\"catalogId\":\"https://a2ui.org/specification/v0_9_1/catalogs/basic/catalog.json\"}}\n{\"version\": \"v0.9.1\", \"updateComponents\":{\"surfaceId\":\"contact_form_1\",\"components\":[{\"id\":\"root\",\"component\":\"Card\",\"child\":\"form_container\"},{\"id\":\"form_container\",\"component\":\"Column\",\"children\":[\"header_row\",\"name_row\",\"email_group\",\"phone_group\",\"pref_group\",\"divider_1\",\"newsletter_checkbox\",\"submit_button\"],\"justify\":\"start\",\"align\":\"stretch\"},{\"id\":\"header_row\",\"component\":\"Row\",\"children\":[\"header_icon\",\"header_text\"],\"align\":\"center\"},{\"id\":\"header_icon\",\"component\":\"Icon\",\"name\":\"mail\"},{\"id\":\"header_text\",\"component\":\"Text\",\"text\":\"# Contact Us\",\"variant\":\"h2\"},{\"id\":\"name_row\",\"component\":\"Row\",\"children\":[\"first_name_group\",\"last_name_group\"],\"justify\":\"spaceBetween\"},{\"id\":\"first_name_group\",\"component\":\"Column\",\"children\":[\"first_name_label\",\"first_name_field\"],\"weight\":1},{\"id\":\"first_name_label\",\"component\":\"Text\",\"text\":\"First Name\",\"variant\":\"caption\"},{\"id\":\"first_name_field\",\"component\":\"TextField\",\"label\":\"First Name\",\"value\":{\"path\":\"/contact/firstName\"},\"variant\":\"shortText\"},{\"id\":\"last_name_group\",\"component\":\"Column\",\"children\":[\"last_name_label\",\"last_name_field\"],\"weight\":1},{\"id\":\"last_name_label\",\"component\":\"Text\",\"text\":\"Last Name\",\"variant\":\"caption\"},{\"id\":\"last_name_field\",\"component\":\"TextField\",\"label\":\"Last Name\",\"value\":{\"path\":\"/contact/lastName\"},\"variant\":\"shortText\"},{\"id\":\"email_group\",\"component\":\"Column\",\"children\":[\"email_label\",\"email_field\"]},{\"id\":\"email_label\",\"component\":\"Text\",\"text\":\"Email Address\",\"variant\":\"caption\"},{\"id\":\"email_field\",\"component\":\"TextField\",\"label\":\"Email\",\"value\":{\"path\":\"/contact/email\"},\"variant\":\"shortText\",\"checks\":[{\"call\":\"required\",\"args\":{\"value\":{\"path\":\"/contact/email\"}},\"message\":\"Email is required.\"},{\"call\":\"email\",\"args\":{\"value\":{\"path\":\"/contact/email\"}},\"message\":\"Please enter a valid email address.\"}]},{\"id\":\"phone_group\",\"component\":\"Column\",\"children\":[\"phone_label\",\"phone_field\"]},{\"id\":\"phone_label\",\"component\":\"Text\",\"text\":\"Phone Number\",\"variant\":\"caption\"},{\"id\":\"phone_field\",\"component\":\"TextField\",\"label\":\"Phone\",\"value\":{\"path\":\"/contact/phone\"},\"variant\":\"shortText\",\"checks\":[{\"call\":\"regex\",\"args\":{\"value\":{\"path\":\"/contact/phone\"},\"pattern\":\"^\\\\d{10}$\"},\"message\":\"Phone number must be 10 digits.\"}]},{\"id\":\"pref_group\",\"component\":\"Column\",\"children\":[\"pref_label\",\"pref_picker\"]},{\"id\":\"pref_label\",\"component\":\"Text\",\"text\":\"Preferred Contact Method\",\"variant\":\"caption\"},{\"id\":\"pref_picker\",\"component\":\"ChoicePicker\",\"variant\":\"mutuallyExclusive\",\"options\":[{\"label\":\"Email\",\"value\":\"email\"},{\"label\":\"Phone\",\"value\":\"phone\"},{\"label\":\"SMS\",\"value\":\"sms\"}],\"value\":{\"path\":\"/contact/preference\"}},{\"id\":\"divider_1\",\"component\":\"Divider\",\"axis\":\"horizontal\"},{\"id\":\"newsletter_checkbox\",\"component\":\"CheckBox\",\"label\":\"Subscribe to our newsletter\",\"value\":{\"path\":\"/contact/subscribe\"}},{\"id\":\"submit_button_label\",\"component\":\"Text\",\"text\":\"Send Message\"},{\"id\":\"submit_button\",\"component\":\"Button\",\"child\":\"submit_button_label\",\"variant\":\"primary\",\"action\":{\"event\":{\"name\":\"submitContactForm\",\"context\":{\"formId\":\"contact_form_1\",\"clientTime\":{\"call\":\"formatDate\",\"args\":{\"value\": \"2026-02-02T15:17:00Z\", \"format\": \"E MMM d, YYYY h:mm a\"},\"returnType\":\"string\"},\"isNewsletterSubscribed\":{\"path\":\"/contact/subscribe\"}}}}}]}}\n{\"version\": \"v0.9.1\", \"updateDataModel\":{\"surfaceId\":\"contact_form_1\",\"path\":\"/contact\",\"value\":{\"firstName\":\"John\",\"lastName\":\"Doe\",\"email\":\"john.doe@example.com\",\"phone\":\"1234567890\",\"preference\":[\"email\"],\"subscribe\":true}}}\n{\"version\": \"v0.9.1\", \"deleteSurface\":{\"surfaceId\":\"contact_form_1\"}}",
    "caption_md": "A2UI `v0.9.1` contact form JSONL stream for `contact_form_1`, from `createSurface` through `updateComponents`, `updateDataModel`, and `deleteSurface`. [2]"
   },
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "HTML Sandboxed iframes & Custom Elements (WHATWG)",
      "spec_or_rfc": "WHATWG HTML",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "HTML iframes embed supplied documents; A2UI sends declarative data that clients render only as pre-approved catalog components. [3][4]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "ag-ui",
      "target_name": "Agent-User Interaction Protocol (AG-UI)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "AG-UI is CopilotKit's agent-to-frontend transport; A2UI is the UI payload, with day-zero AG-UI compatibility. [2][4][22]"
     },
     {
      "target_id": "a2a",
      "target_name": "Agent2Agent Protocol (A2A)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "A2A delegates over `JSONRPC`, `GRPC`, or `HTTP+JSON`; the A2UI A2A Extension maps A2UI over A2A (`v0.9.1` extension URI `https://a2ui.org/a2a-extension/a2ui/v0.9.1`). [8][17][23]"
     },
     {
      "target_id": "mcp-apps",
      "target_name": "MCP Apps",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "MCP Apps (SEP-1865) renders pre-built `ui://` HTML in sandboxed iframes; A2UI sends component blueprints. A2UI version 1.0 adds bidirectional function calls, support for accessibility, and extensions for any additional metadata. The web and Flutter A2UI renderers also work inside MCP Apps. [4][12][24]"
     },
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "MCP uses JSON-RPC 2.0 for tools, resources, and prompts; v1.0 can carry A2UI over MCP. [8][25]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (22 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).",
    "side_a": {
     "visible": true,
     "heading": "Agent frameworks, servers & backend integrations",
     "col4_header": "Transport & Scope",
     "note_md": null,
     "rows": [
      {
       "actor": "AG2 A2UIAgent",
       "role": "Agent framework",
       "status": "Supported",
       "status_display": "Supported · as of 2026-03-20",
       "col4_md": "`A2UIAgent` extends `ConversableAgent` over AG-UI and A2A; roadmap marks AG2 Complete.",
       "source_md": "[AG2 A2UIAgent](https://docs.ag2.ai/latest/docs/blog/2026/03/20/AG2-A2UI/) [26] · [A2UI in the World](https://a2ui.org/ecosystem/a2ui-in-the-world/) [27] · [A2UI roadmap](https://a2ui.org/roadmap/) [28]"
      },
      {
       "actor": "Google ADK",
       "role": "Agent framework",
       "status": "Partial",
       "status_display": "Partial · checked 2026-10-30",
       "col4_md": "ADK integrated the `v0.8` basic catalog; the roadmap still lists ADK as In Progress.",
       "source_md": "[A2UI in the World](https://a2ui.org/ecosystem/a2ui-in-the-world/) [27] · [A2UI roadmap](https://a2ui.org/roadmap/) [28]"
      },
      {
       "actor": "A2UI Python agent packages",
       "role": "Agent SDK",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-17",
       "col4_md": "Release snapshot publishes `python/a2ui-agent-sdk/v0.9.0`, `python/a2ui-core/v0.4.0`, `python/a2ui-adk/v0.1.0`, and `python/a2ui-a2a/v0.1.0`.",
       "source_md": "[a2ui-project/a2ui releases](https://github.com/a2ui-project/a2ui/releases) [15] · [a2ui-project/a2ui](https://github.com/a2ui-project/a2ui) [3]"
      },
      {
       "actor": "A2UI over MCP samples",
       "role": "Reference server",
       "status": "Partial",
       "status_display": "Partial · as of 2026-06-17",
       "col4_md": "Recipe Studio returns `application/a2ui+json` at `a2ui://dynamic-ui/recipe-card` via `resources/read` or `tools/call`.",
       "source_md": "[A2UI and MCP Apps](https://developers.googleblog.com/a2ui-and-mcp-apps/) [16]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Frontend UI clients, renderers & client SDKs",
     "col4_header": "Transport & Scope",
     "note_md": null,
     "rows": [
      {
       "actor": "Gemini Enterprise",
       "role": "Host renderer",
       "status": "Partial",
       "status_display": "Partial · as of 2026-05-30",
       "col4_md": "Shell and renderer for `a2aAgentDefinition` agents; `adkAgentDefinition` agents do not render A2UI.",
       "source_md": "[Gemini Enterprise and A2UI](https://cloud.google.com/blog/topics/developers-practitioners/guide-to-gemini-enterprise-and-a2ui-integration/) [29] · [A2UI in the World](https://a2ui.org/ecosystem/a2ui-in-the-world/) [27]"
      },
      {
       "actor": "ADK Web",
       "role": "Developer UI",
       "status": "Partial",
       "status_display": "Partial · checked 2026-10-30",
       "col4_md": "ADK Web renders the `v0.8` basic catalog and converts A2UI between A2A DataPart metadata and ADK events.",
       "source_md": "[A2UI in the World](https://a2ui.org/ecosystem/a2ui-in-the-world/) [27]"
      },
      {
       "actor": "CopilotKit",
       "role": "Chat renderer",
       "status": "Supported",
       "status_display": "Supported · as of 2025-12-15",
       "col4_md": "Day-zero A2UI via AG-UI; docs apply `A2UIMiddleware` and name `@copilotkit/react-core/v2`.",
       "source_md": "[Introducing A2UI](https://developers.googleblog.com/introducing-a2ui-an-open-project-for-agent-driven-interfaces/) [5] · [A2UI in the World](https://a2ui.org/ecosystem/a2ui-in-the-world/) [27] · [CopilotKit A2UI](https://docs.copilotkit.ai/generative-ui/a2ui) [30] · [Gemini Enterprise and A2UI](https://cloud.google.com/blog/topics/developers-practitioners/guide-to-gemini-enterprise-and-a2ui-integration/) [29]"
      },
      {
       "actor": "Flutter GenUI SDK",
       "role": "Client renderer",
       "status": "Supported",
       "status_display": "Supported · as of 2026-05-14",
       "col4_md": "Roadmap marks Flutter GenUI Stable; the May 14, 2026 post adopts `v0.9`.",
       "source_md": "[A2UI roadmap](https://a2ui.org/roadmap/) [28] · [Flutter GenUI update](https://flutter.dev/blog/new-updates-to-a2ui-and-flutters-genui-package) [31] · [A2UI in the World](https://a2ui.org/ecosystem/a2ui-in-the-world/) [27]"
      },
      {
       "actor": "Official web renderers",
       "role": "Web renderer",
       "status": "Supported",
       "status_display": "Supported · as of 2026-04-17",
       "col4_md": "Roadmap marks Web Core, Lit, Angular, and React Stable; the v0.9 post landed the React renderer.",
       "source_md": "[A2UI roadmap](https://a2ui.org/roadmap/) [28] · [A2UI v0.9](https://developers.googleblog.com/a2ui-v0-9-generative-ui/) [32]"
      },
      {
       "actor": "Lynx GenUI",
       "role": "Client SDK",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-30",
       "col4_md": "Roadmap: Stable ReactLynx renderer for `v0.9`. npm `@lynx-js/genui` `0.7.2` depends on `@a2ui/web_core`. ByteDance's Lynx renderer supports A2UI 0.9 today and is adapting to 1.0.",
       "source_md": "[A2UI roadmap](https://a2ui.org/roadmap/) [28] · [npm @lynx-js/genui](https://registry.npmjs.org/@lynx-js/genui) [33] · [Google Developers Blog (NOV. 11, 2026)](https://developers.googleblog.com/a2ui-10-build-delightful-fast-reliable-agentic-experiences/) [12]"
      },
      {
       "actor": "SwiftUI",
       "role": "Apple renderer",
       "status": "Experimental",
       "status_display": "Experimental · checked 2026-10-30",
       "col4_md": "Roadmap marks SwiftUI Alpha for iOS/macOS (v0.9, v0.9.1, v1.0); renderers matrix marks v1.0 Planned. The Google Developers Blog says SwiftUI on iOS and Jetpack Compose on Android are currently v0.9.1, with v1.0 coming soon.",
       "source_md": "[A2UI roadmap](https://a2ui.org/roadmap/) [28] · [A2UI renderers reference](https://a2ui.org/reference/renderers) [19] · [Google Developers Blog (NOV. 11, 2026)](https://developers.googleblog.com/a2ui-10-build-delightful-fast-reliable-agentic-experiences/) [12]"
      },
      {
       "actor": "Jetpack Compose",
       "role": "Android renderer",
       "status": "Experimental",
       "status_display": "Experimental · checked 2026-10-30",
       "col4_md": "Roadmap lists Jetpack Compose Planned for Q2 2026; renderers matrix marks v0.9.1 Alpha and v1.0 Planned. The Google Developers Blog says the Jetpack Compose renderer supports 0.9.1 today, with 1.0 coming soon.",
       "source_md": "[A2UI roadmap](https://a2ui.org/roadmap/) [28] · [A2UI renderers reference](https://a2ui.org/reference/renderers) [19] · [Google Developers Blog (NOV. 11, 2026)](https://developers.googleblog.com/a2ui-10-build-delightful-fast-reliable-agentic-experiences/) [12]"
      },
      {
       "actor": "json-render",
       "role": "React renderer",
       "status": "Listed",
       "status_display": "Listed · checked 2026-10-30",
       "col4_md": "The ecosystem page lists json-render as Vercel's React library for rendering A2UI component catalogs via Zod schemas.",
       "source_md": "[A2UI in the World](https://a2ui.org/ecosystem/a2ui-in-the-world/) [27]"
      },
      {
       "actor": "AGenUI",
       "role": "Native renderer",
       "status": "Listed",
       "status_display": "Listed · checked 2026-10-30",
       "col4_md": "AGenUI describes a native A2UI renderer for iOS, Android, and HarmonyOS (`v1.7.0`).",
       "source_md": "[AGenUI/AGenUI](https://github.com/AGenUI/AGenUI) [34]"
      },
      {
       "actor": "Google Opal",
       "role": "Host app",
       "status": "Experimental",
       "status_display": "Experimental · checked 2026-10-30",
       "col4_md": "Ecosystem page says Opal uses A2UI for mini-apps; the Opal site labels the product Experiment.",
       "source_md": "[A2UI in the World](https://a2ui.org/ecosystem/a2ui-in-the-world/) [27] · [Opal](https://opal.google/) [35]"
      },
      {
       "actor": "A2UI-Android",
       "role": "Community Jetpack Compose renderer",
       "status": "Listed",
       "status_display": "Listed · checked 2026-11-06",
       "col4_md": "Community Jetpack Compose renderer with 20+ components (`v0.8`).",
       "source_md": "[A2UI-Android](https://a2ui.org/reference/renderers) [19]"
      },
      {
       "actor": "a2ui-react-native",
       "role": "Community React Native renderer",
       "status": "Listed",
       "status_display": "Listed · checked 2026-11-06",
       "col4_md": "Community React Native renderer for iOS/Android (`v0.8`).",
       "source_md": "[a2ui-react-native](https://a2ui.org/reference/renderers) [19]"
      },
      {
       "actor": "A2UI web client packages",
       "role": "Official web renderer packages",
       "status": "Supported",
       "status_display": "Supported · checked 2026-11-06",
       "col4_md": "Client-setup guide: `npm install @a2ui/lit @a2ui/web_core` and `npm install @a2ui/angular @a2ui/web_core`, with Lit element `<a2ui-surface>` on shared `@a2ui/web_core`.",
       "source_md": "[A2UI web client packages](https://a2ui.org/guides/client-setup) [20]"
      },
      {
       "actor": "Atlassian",
       "role": "Product host",
       "status": "Supported (release announcement)",
       "status_display": "Supported (release announcement) · as of 2026-11-11",
       "col4_md": "Atlassian is bringing A2UI to Jira, where teams can assign work items to AI agents, and is named among companies already building with A2UI.",
       "source_md": "[Google Developers Blog (NOV. 11, 2026)](https://developers.googleblog.com/a2ui-10-build-delightful-fast-reliable-agentic-experiences/) [12]"
      },
      {
       "actor": "Alation",
       "role": "Product host",
       "status": "Supported (release announcement)",
       "status_display": "Supported (release announcement) · as of 2026-11-11",
       "col4_md": "The Alation Intelligence Operating System (AIOS) builds its feeds using A2UI, and Alation is named among companies already building with A2UI.",
       "source_md": "[Google Developers Blog (NOV. 11, 2026)](https://developers.googleblog.com/a2ui-10-build-delightful-fast-reliable-agentic-experiences/) [12]"
      },
      {
       "actor": "Bloomberg",
       "role": "Named builder",
       "status": "Supported (release announcement)",
       "status_display": "Supported (release announcement) · as of 2026-11-11",
       "col4_md": "Named among companies already building with A2UI, together with Atlassian, Alation, and ByteDance.",
       "source_md": "[Google Developers Blog (NOV. 11, 2026)](https://developers.googleblog.com/a2ui-10-build-delightful-fast-reliable-agentic-experiences/) [12]"
      },
      {
       "actor": "ByteDance",
       "role": "Renderer publisher",
       "status": "Supported (release announcement)",
       "status_display": "Supported (release announcement) · as of 2026-11-11",
       "col4_md": "ByteDance released an A2UI renderer for Lynx and is named among companies already building with A2UI. Lynx supports A2UI 0.9 today and is adapting to 1.0.",
       "source_md": "[Google Developers Blog (NOV. 11, 2026)](https://developers.googleblog.com/a2ui-10-build-delightful-fast-reliable-agentic-experiences/) [12]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [
     {
      "label": "A2UI roadmap",
      "as_of": null,
      "value_md": "The A2UI roadmap marks Web Core, Web Components (Lit), Angular, Flutter (GenUI SDK), React, and Lynx Stable; SwiftUI Alpha for iOS/macOS across v0.9, v0.9.1, and v1.0; and Jetpack Compose Planned for Android in Q2 2026. Vue, Svelte/Kit, and ShadCN are Proposed. [28]"
     },
     {
      "label": "A2UI in the World",
      "as_of": null,
      "value_md": "A2UI in the World says A2UI is being adopted by teams at Google and partner organizations, and groups Google Opal, Gemini Enterprise, the Flutter GenUI SDK, and Google ADK under Production Deployments. [27]"
     },
     {
      "label": "A2UI renderers reference",
      "as_of": "2026-11-06",
      "value_md": "Unlike the roadmap page, the renderers reference table marks React, Lit (Web Components), Angular, and Flutter (GenUI SDK) Stable on v0.8 and v0.9.1 with v1.0 Planned, SwiftUI Planned for v1.0, and Jetpack Compose Alpha on v0.9.1 and Planned for v1.0. The same reference page also lists five community and ecosystem renderers: json-render, A2UI-Android, a2ui-react-native, Lynx A2UI, and AGenUI. [19]"
     }
    ],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "openai-apps-sdk-manifests",
     "target_name": "OpenAI Apps SDK manifests",
     "relation_label": "Peer alternative",
     "delta": "A2UI is declarative JSON rendered by native client components. Apps SDK returns MCP Apps HTML that ChatGPT iframes.",
     "item_md": "**[OpenAI Apps SDK manifests](/protocols/openai-apps-sdk-manifests/)** (Peer alternative) — A2UI is declarative JSON rendered by native client components. Apps SDK returns MCP Apps HTML that ChatGPT iframes."
    },
    {
     "target_id": "aitp",
     "target_name": "Agent Interaction & Transaction Protocol (AITP)",
     "relation_label": "Complements",
     "delta": "AITP defines no discovery document and addresses agents out of band, while A2UI is a pre-approved component catalog that can be advertised on an A2A Agent Card at https://a2ui.org/a2a-extension/a2ui/v0.9.1.",
     "item_md": "**[Agent Interaction & Transaction Protocol (AITP)](/protocols/aitp/)** (Complements) — AITP defines no discovery document and addresses agents out of band, while A2UI is a pre-approved component catalog that can be advertised on an A2A Agent Card at https://a2ui.org/a2a-extension/a2ui/v0.9.1."
    },
    {
     "item_md": "**[Present protocols](/category/present/)** — Category index for `present` standards."
    }
   ],
   "v05_compiled_md": "---\nid: a2ui\ntitle: \"A2UI (Agent to UI) Protocol\"\ntier: flagship\nlifecycle_status: active\ncategory: present\nform: document-format\nwire_archetype: harnesses_rpc_ui\nspec_url: https://a2ui.org/specification/v1.0-a2ui/\nlast_checked: 2026-11-11\n---\n\n# A2UI (Agent to UI) Protocol\n\n**Category:** [Present](/category/present/) (`present`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-11-11\n\n> *This page is about the Google-originated A2UI (Agent to UI) Protocol. For the agent-frontend event transport originated by CopilotKit (which can carry A2UI payloads), see [Agent-User Interaction Protocol (AG-UI)](/protocols/ag-ui/). For the Model Context Protocol extension (SEP-1865) that renders pre-built ui:// HTML resources in sandboxed iframes, see [MCP Apps](/protocols/mcp-apps/). [1][2][3][4]*\n\n> **In brief:** A2UI (Agent to UI) is a declarative generative-UI standard that lets AI agents assemble rich, interactive forms and cards inside a host application without sending executable frontend code over the wire. Rather than rendering untrusted LLM-generated HTML or JavaScript inside sandboxes, the agent streams `application/a2ui+json` messages—such as `createSurface`, `updateComponents`, and `updateDataModel`—that the client maps onto its own pre-approved React, Flutter, Angular, or Lit widget catalog. [1][2][3]\n\n**A2UI (Agent to UI) Protocol** (`A2UI`) is an `Apache-2.0` open specification originated by Google (announced 2025-12-15 and maintained in `a2ui-project` with CopilotKit contributions) for rendering user interfaces from a stream of declarative JSON objects sent by an agent. Instead of executing arbitrary agent-generated code, the client renders the UI description using its own native component library (Flutter, Angular, React, or Lit). [1][2][3][5][6][7] In `v1.0` and `v0.9.1`, the server-to-client protocol defines four core JSON message types—`createSurface`, `updateComponents`, `updateDataModel`, and `deleteSurface`—standardized on the `application/a2ui+json` MIME type. [1][2][8] The specification tracks mark `v1.0` as Current (Jun 8, 2026), `v0.9.1` as Closed (Dec 3, 2025), `v0.9` as Stable, and `v0.8` as Deprecated. Legacy `v0.8` streamed `surfaceUpdate`, `dataModelUpdate`, `beginRendering`, and `deleteSurface` over JSON Lines (`JSONL`), whereas `v0.9` introduced a prompt-first schema family embedded directly in model prompts. [1][2][8][9][10][11] On NOV. 11, 2026, the Google Developers Blog announced the public release of A2UI 1.0 as the first stable version of the open protocol for generative UI, with open-source renderer SDKs for the web, Android, and iOS and agent SDKs for Python, TypeScript, and Dart. The canonical specification page still lists Last Updated: Jun 8, 2026. [8][12]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Present](/category/present/) (`present`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | Google announced A2UI on 2025-12-15. Repo `a2ui-project/a2ui` created 2025-09-24, with CopilotKit contributions. [1][3][5] |\n| **Governed by** | a2ui-project organization (created 2026-03-03). Contributions require a CLA and follow Google's Open Source Community Guidelines. [6][7] |\n| **Track** | Open-source project created by Google, Apache-2.0, maintained in the a2ui-project organization. [1][3][6] |\n| **Status** | `v1.0` Current; `v0.9.1` Closed; `v0.9` Previous (Stable); `v0.8` Deprecated. The main README omits the earlier public-preview notice. The NOV. 11, 2026 Google Developers Blog calls A2UI 1.0 the first stable version. It says SwiftUI on iOS and Jetpack Compose on Android are currently v0.9.1, with v1.0 coming soon. [1][2][8][9][10][12] |\n| **Version** | v1.0 (Current); v0.9.1 (Closed); v0.9 (Stable); v0.8 (Deprecated). Spec `v1.0` updated 2026-06-08; `v0.9.1` updated 2025-12-03; `v0.9` created 2025-11-20. Release `python/a2ui-agent-sdk/v0.9.0` (2026-10-17); tags `v0.8`/`v0.9` point to `19919ef` (2026-04-06). Public `v1.0` release announced on the Google Developers Blog on November 11, 2026 (while the `v1.0` specification page header still reads Last Updated: Jun 8, 2026). [1][2][8][9][12][13][14][15] |\n| **Message format** | v1.0 and v0.9.1 JSON: `createSurface`, `updateComponents`, `updateDataModel`, `deleteSurface`. MIME `application/a2ui+json`. v0.8 used JSONL. [2][8][11][16] |\n| **Transports** | Transport agnostic. The v1.0 specification lists AG-UI, A2A, MCP, WebSockets, and REST. [8] |\n| **Specification** | [A2UI Protocol v1.0](https://a2ui.org/specification/v1.0-a2ui/) (Current); [A2UI Protocol v0.9.1](https://a2ui.org/specification/v0.9.1-a2ui/) (Closed) [2][8] |\n| **Found at** | A2A Extension (`v1.0` maps A2UI over A2A; the `v0.9.1` extension spec defines URI `https://a2ui.org/a2a-extension/a2ui/v0.9.1`). Advertising A2UI in an Agent Card is encouraged and is not explicitly required. [8][17] |\n| **Licence** | Apache-2.0 (Apache License, Version 2.0, January 2004). [1][3][18] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Surface lifecycle messages, flat adjacency component model, and data binding](#surface-lifecycle-messages-flat-adjacency-component-model-and-data-binding)\n3. [Native client renderers, version tracks, and transport bindings](#native-client-renderers-version-tracks-and-transport-bindings)\n4. [Counterparts and related standards](#counterparts-and-related-standards)\n5. [Adoption and ecosystem](#adoption-and-ecosystem)\n6. [See also](#see-also)\n7. [References](#references)\n\n---\n\n## Problem and scope\n\nRendering agent-driven interfaces traditionally required retrieving an opaque code payload to display inside a sandbox rather than streaming a blueprint of native UI components. [5] Because running arbitrary code generated by an LLM presents a security risk, A2UI uses a declarative JSON data format rather than executable code. The client application maintains a catalog of trusted, pre-approved UI components (such as Card, Button, and TextField) and renders the blueprint using its own native component library, restricting the agent to components in that catalog. [3] A2UI is designed to be transport-agnostic: it defines the JSON message structure and semantic contract between the server (Agent) and client (Renderer) without mandating a specific transport layer. In `v1.0`, AG-UI serves as the standard transport binding for agent-to-user interaction, while the A2A Extension maps A2UI payloads over the A2A protocol. [2][8]\n\n### Surface lifecycle\n\n```mermaid\nsequenceDiagram\n    participant Server\n    participant Client\n    participant User\n\n    Server->>Client: 1. createSurface(surfaceId: \"main\")\n    Server->>Client: 2. updateComponents(surfaceId: \"main\", components: [...])\n    Server->>Client: 3. updateDataModel(surfaceId: \"main\", path: \"/user\", value: \"Alice\")\n    Note right of Client: Client renders initial UI (UI is displayed)\n    User->>Client: Interact with UI (e.g. click button)\n    Client->>Server: action(name: \"submit\", context: {...})\n\n    Note over Client, Server: Time passes, user interacts, or new data arrives...\n\n    Server->>Client: 4. updateComponents or updateDataModel (Dynamic Update)\n    Note right of Client: Client re-renders the UI to reflect changes (UI is updated)\n\n    Server->>Client: 5. deleteSurface(surfaceId: \"main\")\n    Note right of Client: Client removes the UI for the \"main\" surface (UI is gone)\n```\n\n*The server sends `createSurface`, `updateComponents`, and `updateDataModel`. The client renders the surface and sends `action` on user interaction. The server later sends dynamic updates and `deleteSurface`. [2]*\n\n### A2UI v0.9.1 contact form JSONL stream (`createSurface` through `deleteSurface`)\n\n```jsonl\n{\"version\": \"v0.9.1\", \"createSurface\":{\"surfaceId\":\"contact_form_1\",\"catalogId\":\"https://a2ui.org/specification/v0_9_1/catalogs/basic/catalog.json\"}}\n{\"version\": \"v0.9.1\", \"updateComponents\":{\"surfaceId\":\"contact_form_1\",\"components\":[{\"id\":\"root\",\"component\":\"Card\",\"child\":\"form_container\"},{\"id\":\"form_container\",\"component\":\"Column\",\"children\":[\"header_row\",\"name_row\",\"email_group\",\"phone_group\",\"pref_group\",\"divider_1\",\"newsletter_checkbox\",\"submit_button\"],\"justify\":\"start\",\"align\":\"stretch\"},{\"id\":\"header_row\",\"component\":\"Row\",\"children\":[\"header_icon\",\"header_text\"],\"align\":\"center\"},{\"id\":\"header_icon\",\"component\":\"Icon\",\"name\":\"mail\"},{\"id\":\"header_text\",\"component\":\"Text\",\"text\":\"# Contact Us\",\"variant\":\"h2\"},{\"id\":\"name_row\",\"component\":\"Row\",\"children\":[\"first_name_group\",\"last_name_group\"],\"justify\":\"spaceBetween\"},{\"id\":\"first_name_group\",\"component\":\"Column\",\"children\":[\"first_name_label\",\"first_name_field\"],\"weight\":1},{\"id\":\"first_name_label\",\"component\":\"Text\",\"text\":\"First Name\",\"variant\":\"caption\"},{\"id\":\"first_name_field\",\"component\":\"TextField\",\"label\":\"First Name\",\"value\":{\"path\":\"/contact/firstName\"},\"variant\":\"shortText\"},{\"id\":\"last_name_group\",\"component\":\"Column\",\"children\":[\"last_name_label\",\"last_name_field\"],\"weight\":1},{\"id\":\"last_name_label\",\"component\":\"Text\",\"text\":\"Last Name\",\"variant\":\"caption\"},{\"id\":\"last_name_field\",\"component\":\"TextField\",\"label\":\"Last Name\",\"value\":{\"path\":\"/contact/lastName\"},\"variant\":\"shortText\"},{\"id\":\"email_group\",\"component\":\"Column\",\"children\":[\"email_label\",\"email_field\"]},{\"id\":\"email_label\",\"component\":\"Text\",\"text\":\"Email Address\",\"variant\":\"caption\"},{\"id\":\"email_field\",\"component\":\"TextField\",\"label\":\"Email\",\"value\":{\"path\":\"/contact/email\"},\"variant\":\"shortText\",\"checks\":[{\"call\":\"required\",\"args\":{\"value\":{\"path\":\"/contact/email\"}},\"message\":\"Email is required.\"},{\"call\":\"email\",\"args\":{\"value\":{\"path\":\"/contact/email\"}},\"message\":\"Please enter a valid email address.\"}]},{\"id\":\"phone_group\",\"component\":\"Column\",\"children\":[\"phone_label\",\"phone_field\"]},{\"id\":\"phone_label\",\"component\":\"Text\",\"text\":\"Phone Number\",\"variant\":\"caption\"},{\"id\":\"phone_field\",\"component\":\"TextField\",\"label\":\"Phone\",\"value\":{\"path\":\"/contact/phone\"},\"variant\":\"shortText\",\"checks\":[{\"call\":\"regex\",\"args\":{\"value\":{\"path\":\"/contact/phone\"},\"pattern\":\"^\\\\d{10}$\"},\"message\":\"Phone number must be 10 digits.\"}]},{\"id\":\"pref_group\",\"component\":\"Column\",\"children\":[\"pref_label\",\"pref_picker\"]},{\"id\":\"pref_label\",\"component\":\"Text\",\"text\":\"Preferred Contact Method\",\"variant\":\"caption\"},{\"id\":\"pref_picker\",\"component\":\"ChoicePicker\",\"variant\":\"mutuallyExclusive\",\"options\":[{\"label\":\"Email\",\"value\":\"email\"},{\"label\":\"Phone\",\"value\":\"phone\"},{\"label\":\"SMS\",\"value\":\"sms\"}],\"value\":{\"path\":\"/contact/preference\"}},{\"id\":\"divider_1\",\"component\":\"Divider\",\"axis\":\"horizontal\"},{\"id\":\"newsletter_checkbox\",\"component\":\"CheckBox\",\"label\":\"Subscribe to our newsletter\",\"value\":{\"path\":\"/contact/subscribe\"}},{\"id\":\"submit_button_label\",\"component\":\"Text\",\"text\":\"Send Message\"},{\"id\":\"submit_button\",\"component\":\"Button\",\"child\":\"submit_button_label\",\"variant\":\"primary\",\"action\":{\"event\":{\"name\":\"submitContactForm\",\"context\":{\"formId\":\"contact_form_1\",\"clientTime\":{\"call\":\"formatDate\",\"args\":{\"value\": \"2026-02-02T15:17:00Z\", \"format\": \"E MMM d, YYYY h:mm a\"},\"returnType\":\"string\"},\"isNewsletterSubscribed\":{\"path\":\"/contact/subscribe\"}}}}}]}}\n{\"version\": \"v0.9.1\", \"updateDataModel\":{\"surfaceId\":\"contact_form_1\",\"path\":\"/contact\",\"value\":{\"firstName\":\"John\",\"lastName\":\"Doe\",\"email\":\"john.doe@example.com\",\"phone\":\"1234567890\",\"preference\":[\"email\"],\"subscribe\":true}}}\n{\"version\": \"v0.9.1\", \"deleteSurface\":{\"surfaceId\":\"contact_form_1\"}}\n```\n\n*A2UI `v0.9.1` contact form JSONL stream for `contact_form_1`, from `createSurface` through `updateComponents`, `updateDataModel`, and `deleteSurface`. [2]*\n\n---\n\n## Surface lifecycle messages, flat adjacency component model, and data binding\n\nIn `v1.0` and `v0.9.1`, an agent drives a UI surface through four server-to-client messages (`createSurface`, `updateComponents`, `updateDataModel`, and `deleteSurface`), replacing the `v0.8` JSON Lines (`JSONL`) message set (`surfaceUpdate`, `dataModelUpdate`, `beginRendering`, and `deleteSurface`). Once a surface is initialized, subsequent component and data model update events do not have to arrive in a rigid fixed order. [2][8][11]\n\n- **`createSurface` and `catalogId`:** `createSurface` signals the client to create a new surface and begin rendering it. Once created, a surface's `surfaceId` and `catalogId` are fixed and can only be reconfigured by deleting and recreating the surface; sending another `createSurface` for an existing `surfaceId` without first deleting it is an error, and one component in the surface must have an ID of `root`. [2]\n- **Adjacency list by ID:** `updateComponents` supplies component definitions as a flat list whose parent-child relationships are defined by ID references in an adjacency list. It may only be sent to an already created surface, allows the server to stream component definitions in any order, and buffers updates without visible effect until the single required `root` component is defined. [2]\n- **JSON Pointer binding:** `updateDataModel` inserts or replaces data for a surface using an optional `path` parameter formatted as an RFC 6901 JSON Pointer (defaulting to `/`, which replaces the entire surface data model). Because data paths may temporarily resolve to undefined while messages stream in, renderers handle undefined values gracefully to support progressive rendering. [2]\n- **`action` and catalogs:** When a user interacts with a component that defines an action (such as a Button), the client sends an `action` message containing five required fields: `name`, `surfaceId`, `sourceComponentId`, `timestamp` (an ISO 8601 timestamp), and `context`. On the server side, components reference pre-registered client functions by name in `FunctionCall` objects rather than transmitting executable code. [2][3]\n\n---\n\n## Native client renderers, version tracks, and transport bindings\n\nCompliant client renderers parse A2UI's flat adjacency-list JSON messages and convert them into native platform widgets across Web, mobile, and desktop targets, with official and community packages spanning the `v0.8`, `v0.9.1`, and `v1.0` specification tracks. [1][2][8][10][11][19]\n\n- **Renderer version matrix:** On the 6 November 2026 renderers reference table (captured prior to the 11 November 2026 `v1.0` release announcement), React, Lit (Web Components), Angular, and Flutter (GenUI SDK) are listed as Stable on `v0.8` and `v0.9.1` and Planned on `v1.0`, SwiftUI is Planned on `v1.0`, and Jetpack Compose is Alpha on `v0.9.1` and Planned on `v1.0`. Renderers convert A2UI JSON messages into native UI components and must parse the adjacency list format. [12][19]\n- **`client-setup` packages:** The published client-setup guide table (`v0.8`, `v0.9`) marks React, Lit, Angular, and Flutter (GenUI SDK) Status Stable and Jetpack Compose Planned Q2 2026 (`@a2ui/web_core`, `@a2ui/lit`, `@a2ui/angular`, `@a2ui/react`, `flutter pub add flutter_genui`). By contrast, the repository `client-setup.md` table (`v1.0`, `v0.9.1`) updates `a2ui_flutter` (`flutter pub add a2ui_flutter a2ui_core`, replacing `genui`) and Jetpack Compose to Status Alpha while retaining deprecated `v0.8` on React, Lit, and Angular. [20][21]\n- **`JSONL`, AG-UI, and A2A:** Because A2UI relies on stateful updates (such as creating a surface before updating it), the underlying transport must clearly delimit individual JSON envelopes (for example using `JSONL` newlines, WebSocket frames, or SSE events) and deliver them in generation order. Over A2A, support is advertised via the `https://a2ui.org/a2a-extension/a2ui/v0.9.1` extension URI (and the `v1.0` A2A Extension), while `v1.0` designates AG-UI as the standard agent-to-user transport binding. [2][8][17]\n- **Custom catalog registration:** A component catalog acts as the contract between an agent and a client renderer. Applications can extend or replace A2UI's Basic Catalog by registering custom components and functions identified by the surface's required `catalogId`, and clients and servers exchange supported catalog identifiers via message metadata or transport-specific handshakes. [2][20]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **HTML Sandboxed iframes & Custom Elements (WHATWG)** | `WHATWG HTML` | Analogous to classic standard | HTML iframes embed supplied documents; A2UI sends declarative data that clients render only as pre-approved catalog components. [3][4] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Agent-User Interaction Protocol (AG-UI)](/protocols/ag-ui/)** | Complements | AG-UI is CopilotKit's agent-to-frontend transport; A2UI is the UI payload, with day-zero AG-UI compatibility. [2][4][22] |\n| **[Agent2Agent Protocol (A2A)](/protocols/a2a/)** | Complements | A2A delegates over `JSONRPC`, `GRPC`, or `HTTP+JSON`; the A2UI A2A Extension maps A2UI over A2A (`v0.9.1` extension URI `https://a2ui.org/a2a-extension/a2ui/v0.9.1`). [8][17][23] |\n| **[MCP Apps](/protocols/mcp-apps/)** | Peer alternative | MCP Apps (SEP-1865) renders pre-built `ui://` HTML in sandboxed iframes; A2UI sends component blueprints. A2UI version 1.0 adds bidirectional function calls, support for accessibility, and extensions for any additional metadata. The web and Flutter A2UI renderers also work inside MCP Apps. [4][12][24] |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | MCP uses JSON-RPC 2.0 for tools, resources, and prompts; v1.0 can carry A2UI over MCP. [8][25] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (22 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).*\n\n### Agent frameworks, servers & backend integrations\n\n| Actor | Role | Status | Transport & Scope | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **AG2 A2UIAgent** | Agent framework | Supported · as of 2026-03-20 | `A2UIAgent` extends `ConversableAgent` over AG-UI and A2A; roadmap marks AG2 Complete. | [AG2 A2UIAgent](https://docs.ag2.ai/latest/docs/blog/2026/03/20/AG2-A2UI/) [26] · [A2UI in the World](https://a2ui.org/ecosystem/a2ui-in-the-world/) [27] · [A2UI roadmap](https://a2ui.org/roadmap/) [28] |\n| **Google ADK** | Agent framework | Partial · checked 2026-10-30 | ADK integrated the `v0.8` basic catalog; the roadmap still lists ADK as In Progress. | [A2UI in the World](https://a2ui.org/ecosystem/a2ui-in-the-world/) [27] · [A2UI roadmap](https://a2ui.org/roadmap/) [28] |\n| **A2UI Python agent packages** | Agent SDK | Supported · as of 2026-10-17 | Release snapshot publishes `python/a2ui-agent-sdk/v0.9.0`, `python/a2ui-core/v0.4.0`, `python/a2ui-adk/v0.1.0`, and `python/a2ui-a2a/v0.1.0`. | [a2ui-project/a2ui releases](https://github.com/a2ui-project/a2ui/releases) [15] · [a2ui-project/a2ui](https://github.com/a2ui-project/a2ui) [3] |\n| **A2UI over MCP samples** | Reference server | Partial · as of 2026-06-17 | Recipe Studio returns `application/a2ui+json` at `a2ui://dynamic-ui/recipe-card` via `resources/read` or `tools/call`. | [A2UI and MCP Apps](https://developers.googleblog.com/a2ui-and-mcp-apps/) [16] |\n\n### Frontend UI clients, renderers & client SDKs\n\n| Actor | Role | Status | Transport & Scope | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Gemini Enterprise** | Host renderer | Partial · as of 2026-05-30 | Shell and renderer for `a2aAgentDefinition` agents; `adkAgentDefinition` agents do not render A2UI. | [Gemini Enterprise and A2UI](https://cloud.google.com/blog/topics/developers-practitioners/guide-to-gemini-enterprise-and-a2ui-integration/) [29] · [A2UI in the World](https://a2ui.org/ecosystem/a2ui-in-the-world/) [27] |\n| **ADK Web** | Developer UI | Partial · checked 2026-10-30 | ADK Web renders the `v0.8` basic catalog and converts A2UI between A2A DataPart metadata and ADK events. | [A2UI in the World](https://a2ui.org/ecosystem/a2ui-in-the-world/) [27] |\n| **CopilotKit** | Chat renderer | Supported · as of 2025-12-15 | Day-zero A2UI via AG-UI; docs apply `A2UIMiddleware` and name `@copilotkit/react-core/v2`. | [Introducing A2UI](https://developers.googleblog.com/introducing-a2ui-an-open-project-for-agent-driven-interfaces/) [5] · [A2UI in the World](https://a2ui.org/ecosystem/a2ui-in-the-world/) [27] · [CopilotKit A2UI](https://docs.copilotkit.ai/generative-ui/a2ui) [30] · [Gemini Enterprise and A2UI](https://cloud.google.com/blog/topics/developers-practitioners/guide-to-gemini-enterprise-and-a2ui-integration/) [29] |\n| **Flutter GenUI SDK** | Client renderer | Supported · as of 2026-05-14 | Roadmap marks Flutter GenUI Stable; the May 14, 2026 post adopts `v0.9`. | [A2UI roadmap](https://a2ui.org/roadmap/) [28] · [Flutter GenUI update](https://flutter.dev/blog/new-updates-to-a2ui-and-flutters-genui-package) [31] · [A2UI in the World](https://a2ui.org/ecosystem/a2ui-in-the-world/) [27] |\n| **Official web renderers** | Web renderer | Supported · as of 2026-04-17 | Roadmap marks Web Core, Lit, Angular, and React Stable; the v0.9 post landed the React renderer. | [A2UI roadmap](https://a2ui.org/roadmap/) [28] · [A2UI v0.9](https://developers.googleblog.com/a2ui-v0-9-generative-ui/) [32] |\n| **Lynx GenUI** | Client SDK | Supported · as of 2026-10-30 | Roadmap: Stable ReactLynx renderer for `v0.9`. npm `@lynx-js/genui` `0.7.2` depends on `@a2ui/web_core`. ByteDance's Lynx renderer supports A2UI 0.9 today and is adapting to 1.0. | [A2UI roadmap](https://a2ui.org/roadmap/) [28] · [npm @lynx-js/genui](https://registry.npmjs.org/@lynx-js/genui) [33] · [Google Developers Blog (NOV. 11, 2026)](https://developers.googleblog.com/a2ui-10-build-delightful-fast-reliable-agentic-experiences/) [12] |\n| **SwiftUI** | Apple renderer | Experimental · checked 2026-10-30 | Roadmap marks SwiftUI Alpha for iOS/macOS (v0.9, v0.9.1, v1.0); renderers matrix marks v1.0 Planned. The Google Developers Blog says SwiftUI on iOS and Jetpack Compose on Android are currently v0.9.1, with v1.0 coming soon. | [A2UI roadmap](https://a2ui.org/roadmap/) [28] · [A2UI renderers reference](https://a2ui.org/reference/renderers) [19] · [Google Developers Blog (NOV. 11, 2026)](https://developers.googleblog.com/a2ui-10-build-delightful-fast-reliable-agentic-experiences/) [12] |\n| **Jetpack Compose** | Android renderer | Experimental · checked 2026-10-30 | Roadmap lists Jetpack Compose Planned for Q2 2026; renderers matrix marks v0.9.1 Alpha and v1.0 Planned. The Google Developers Blog says the Jetpack Compose renderer supports 0.9.1 today, with 1.0 coming soon. | [A2UI roadmap](https://a2ui.org/roadmap/) [28] · [A2UI renderers reference](https://a2ui.org/reference/renderers) [19] · [Google Developers Blog (NOV. 11, 2026)](https://developers.googleblog.com/a2ui-10-build-delightful-fast-reliable-agentic-experiences/) [12] |\n| **json-render** | React renderer | Listed · checked 2026-10-30 | The ecosystem page lists json-render as Vercel's React library for rendering A2UI component catalogs via Zod schemas. | [A2UI in the World](https://a2ui.org/ecosystem/a2ui-in-the-world/) [27] |\n| **AGenUI** | Native renderer | Listed · checked 2026-10-30 | AGenUI describes a native A2UI renderer for iOS, Android, and HarmonyOS (`v1.7.0`). | [AGenUI/AGenUI](https://github.com/AGenUI/AGenUI) [34] |\n| **Google Opal** | Host app | Experimental · checked 2026-10-30 | Ecosystem page says Opal uses A2UI for mini-apps; the Opal site labels the product Experiment. | [A2UI in the World](https://a2ui.org/ecosystem/a2ui-in-the-world/) [27] · [Opal](https://opal.google/) [35] |\n| **A2UI-Android** | Community Jetpack Compose renderer | Listed · checked 2026-11-06 | Community Jetpack Compose renderer with 20+ components (`v0.8`). | [A2UI-Android](https://a2ui.org/reference/renderers) [19] |\n| **a2ui-react-native** | Community React Native renderer | Listed · checked 2026-11-06 | Community React Native renderer for iOS/Android (`v0.8`). | [a2ui-react-native](https://a2ui.org/reference/renderers) [19] |\n| **A2UI web client packages** | Official web renderer packages | Supported · checked 2026-11-06 | Client-setup guide: `npm install @a2ui/lit @a2ui/web_core` and `npm install @a2ui/angular @a2ui/web_core`, with Lit element `<a2ui-surface>` on shared `@a2ui/web_core`. | [A2UI web client packages](https://a2ui.org/guides/client-setup) [20] |\n| **Atlassian** | Product host | Supported (release announcement) · as of 2026-11-11 | Atlassian is bringing A2UI to Jira, where teams can assign work items to AI agents, and is named among companies already building with A2UI. | [Google Developers Blog (NOV. 11, 2026)](https://developers.googleblog.com/a2ui-10-build-delightful-fast-reliable-agentic-experiences/) [12] |\n| **Alation** | Product host | Supported (release announcement) · as of 2026-11-11 | The Alation Intelligence Operating System (AIOS) builds its feeds using A2UI, and Alation is named among companies already building with A2UI. | [Google Developers Blog (NOV. 11, 2026)](https://developers.googleblog.com/a2ui-10-build-delightful-fast-reliable-agentic-experiences/) [12] |\n| **Bloomberg** | Named builder | Supported (release announcement) · as of 2026-11-11 | Named among companies already building with A2UI, together with Atlassian, Alation, and ByteDance. | [Google Developers Blog (NOV. 11, 2026)](https://developers.googleblog.com/a2ui-10-build-delightful-fast-reliable-agentic-experiences/) [12] |\n| **ByteDance** | Renderer publisher | Supported (release announcement) · as of 2026-11-11 | ByteDance released an A2UI renderer for Lynx and is named among companies already building with A2UI. Lynx supports A2UI 0.9 today and is adapting to 1.0. | [Google Developers Blog (NOV. 11, 2026)](https://developers.googleblog.com/a2ui-10-build-delightful-fast-reliable-agentic-experiences/) [12] |\n\n### Ecosystem censuses\n\n- **A2UI roadmap**: The A2UI roadmap marks Web Core, Web Components (Lit), Angular, Flutter (GenUI SDK), React, and Lynx Stable; SwiftUI Alpha for iOS/macOS across v0.9, v0.9.1, and v1.0; and Jetpack Compose Planned for Android in Q2 2026. Vue, Svelte/Kit, and ShadCN are Proposed. [28]\n- **A2UI in the World**: A2UI in the World says A2UI is being adopted by teams at Google and partner organizations, and groups Google Opal, Gemini Enterprise, the Flutter GenUI SDK, and Google ADK under Production Deployments. [27]\n- **A2UI renderers reference** (*as of 2026-11-06*): Unlike the roadmap page, the renderers reference table marks React, Lit (Web Components), Angular, and Flutter (GenUI SDK) Stable on v0.8 and v0.9.1 with v1.0 Planned, SwiftUI Planned for v1.0, and Jetpack Compose Alpha on v0.9.1 and Planned for v1.0. The same reference page also lists five community and ecosystem renderers: json-render, A2UI-Android, a2ui-react-native, Lynx A2UI, and AGenUI. [19]\n\n---\n\n## See also\n\n- **[OpenAI Apps SDK manifests](/protocols/openai-apps-sdk-manifests/)** *(Peer alternative)* — A2UI is declarative JSON rendered by native client components. Apps SDK returns MCP Apps HTML that ChatGPT iframes.\n- **[Agent Interaction & Transaction Protocol (AITP)](/protocols/aitp/)** *(Complements)* — AITP defines no discovery document and addresses agents out of band, while A2UI is a pre-approved component catalog that can be advertised on an A2A Agent Card at https://a2ui.org/a2a-extension/a2ui/v0.9.1.\n- **Category:** [Present protocols](/category/present/)\n\n---\n\n## References\n\n1. A2UI project, *A2UI* (project home page) — <https://a2ui.org/>\n2. A2UI project, *A2UI Protocol v0.9.1* (version 0.9.1; status Closed; created 2025-11-20; last updated 2025-12-03) — <https://a2ui.org/specification/v0.9.1-a2ui/>\n3. a2ui-project, *a2ui* (repository overview) — <https://github.com/a2ui-project/a2ui>\n4. A2UI project, *How Does A2UI Compare?* (comparison with MCP Apps and AG-UI) — <https://a2ui.org/introduction/agent-ui-ecosystem/>\n5. Google A2UI Team, *Introducing A2UI: An open project for agent-driven interfaces* (2025-12-15) — <https://developers.googleblog.com/introducing-a2ui-an-open-project-for-agent-driven-interfaces/>\n6. Google / A2UI Project, *a2ui-project organization* (created 2026-03-03) — <https://github.com/a2ui-project>\n7. a2ui-project, *How to contribute to A2UI* (CONTRIBUTING.md on main) — <https://raw.githubusercontent.com/a2ui-project/a2ui/main/CONTRIBUTING.md>\n8. A2UI project, *A2UI Protocol v1.0* (version 1.0; status Current; created 2025-11-20; last updated 2026-06-08) — <https://a2ui.org/specification/v1.0-a2ui/>\n9. A2UI project, *A2UI Protocol v0.9* (version 0.9; status Stable; created 2025-11-20) — <https://a2ui.org/specification/v0.9-a2ui/>\n10. a2ui-project/a2ui (GitHub), *a2ui-project/a2ui — README.md* (checked 2026-11-08) — <https://raw.githubusercontent.com/a2ui-project/a2ui/main/README.md>\n11. A2UI project, *A2UI Protocol v0.8 (Legacy)* (created 2025-09-19; updated 2025-11-12) — <https://a2ui.org/specification/v0.8-a2ui/>\n12. Vishal Motwani and the Google A2UI Team (Google Developers Blog), *A2UI 1.0: Build delightful, fast, reliable, agentic experiences* (NOV. 11, 2026; fetched 2026-11-11) — <https://developers.googleblog.com/a2ui-10-build-delightful-fast-reliable-agentic-experiences/>\n13. Google / A2UI Project, *a2ui-project/a2ui tags* (tags include v0.9 and v0.8 at commit 19919ef) — <https://github.com/a2ui-project/a2ui/tags>\n14. wrenj (Google), *get a2ui over mcp sample working again (#1076)* (committed 2026-04-06) — <https://github.com/a2ui-project/a2ui/commit/19919ef4c8ad3185867f70386fa4669284d7714c>\n15. Google / A2UI Project, *a2ui-project/a2ui releases* (python/a2ui-agent-sdk/v0.9.0 published 2026-10-17) — <https://github.com/a2ui-project/a2ui/releases>\n16. Google A2UI Team, Ido Salomon, and Liad Yosef, *A2UI + MCP Apps: Combining the best of declarative and custom agentic UIs* (2026-06-17) — <https://developers.googleblog.com/a2ui-and-mcp-apps/>\n17. A2UI project, *A2A Extension* (extension URI for A2UI v0.9.1) — <https://a2ui.org/specification/v0.9.1-a2ui-extension-specification/>\n18. Apache Software Foundation, *Apache License, Version 2.0* (January 2004) — <https://raw.githubusercontent.com/a2ui-project/a2ui/main/LICENSE>\n19. A2UI, *Renderers (Clients)* (checked 2026-11-06) — <https://a2ui.org/reference/renderers>\n20. A2UI, *Client Setup* (checked 2026-11-06) — <https://a2ui.org/guides/client-setup>\n21. A2UI Project, *Client Setup Guide (repository source)* (checked 2026-11-06) — <https://github.com/a2ui-project/a2ui/blob/main/docs/public/guides/client-setup.md>\n22. CopilotKit, *AG-UI Specification 1.0* (specifies the event stream and the run input) — <https://docs.ag-ui.com/spec/1.0/index>\n23. A2A Protocol, *Overview* (JSONRPC, GRPC, and HTTP+JSON bindings) — <https://a2a-protocol.org/latest/specification/>\n24. Ido Salomon (@idosal) and Liad Yosef, *SEP-1865: MCP Apps - Interactive User Interfaces for MCP* (created 2025-11-21; status Final) — <https://modelcontextprotocol.io/seps/1865-mcp-apps-interactive-user-interfaces-for-mcp>\n25. Model Context Protocol, *Specification* (version 2026-07-28 (latest)) — <https://modelcontextprotocol.io/specification/2026-07-28>\n26. Mark Sze (AG2), *A2UIAgent: Rich UI from Your AG2 Agents* (2026-03-20) — <https://docs.ag2.ai/latest/docs/blog/2026/03/20/AG2-A2UI/>\n27. A2UI project, *A2UI in the World* (ecosystem page) — <https://a2ui.org/ecosystem/a2ui-in-the-world/>\n28. A2UI project, *Roadmap* (renderer status table) — <https://a2ui.org/roadmap/>\n29. Dave Wang and Yuan Tian (Google Cloud), *Guide to Gemini Enterprise and A2UI integration* (byline 2026-05-30; JSON-LD datePublished 2026-05-29) — <https://cloud.google.com/blog/topics/developers-practitioners/guide-to-gemini-enterprise-and-a2ui-integration/>\n30. CopilotKit, *A2UI* (generative UI docs) — <https://docs.copilotkit.ai/generative-ui/a2ui>\n31. Andrew Brogdon (Flutter), *New updates to A2UI and Flutter's GenUI package* (2026-05-14) — <https://flutter.dev/blog/new-updates-to-a2ui-and-flutters-genui-package>\n32. Google A2UI Team, *A2UI v0.9: The New Standard for Portable, Framework-Agnostic Generative UI* (2026-04-17) — <https://developers.googleblog.com/a2ui-v0-9-generative-ui/>\n33. npm, *@lynx-js/genui* (created 2026-05-25; latest 0.7.2 published 2026-10-30) — <https://registry.npmjs.org/@lynx-js/genui>\n34. AGenUI, *AGenUI* (v1.7.0 released 2026-10-19) — <https://github.com/AGenUI/AGenUI>\n35. Google, *Opal* (graduating out of Labs on 2026-11-17; fetched page does not contain A2UI) — <https://opal.google/>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "AG-UI",
   "adoption": {
    "level": "observed",
    "by": "Amazon Bedrock AgentCore Runtime, AWS Strands Agents, Microsoft Agent Framework, Google Agent Development Kit, Google Antigravity, CopilotKit, AG-UI Channels SDK (OpenTag), Terminal + Agent, and 19 other verified implementations",
    "probe_run": null
   },
   "aliases": [
    "Agent-User Interaction Protocol"
   ],
   "analog": "Event-based bi-directional runtime connection between an AI agent backend and a user-facing application",
   "audience": [
    "agent-builder",
    "platform"
   ],
   "collisions": [],
   "discovery": {
    "mechanism": "Application-defined HTTP POST run endpoint",
    "path": "No well-known path or discovery document was found in the specification. A client is given the address of an agent endpoint and sends the run input to it as an HTTP POST"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://docs.ag-ui.com/introduction",
     "claim": "CopilotKit, *AG-UI Overview*, modified 2026-10-28",
     "date": null,
     "quote": "AG-UI is an open, lightweight, event-based protocol that standardizes how AI agents connect to user-facing applications. / A2UI is a generative UI specification - allowing agents to deliver UI widgets, where AG-UI is the Agent … Interaction protocol - which connects an agentic frontend to any agentic backend. / AG-UI is designed to be the general-purpose, bi-directional connection between a user-facing application and any agentic backend. / AWS Bedrock AgentCore Supported Docs / AWS Strands Agents Supported Docs, Demos / Microsoft Agent Framework Supported Docs, Demos / Google ADK Supported Docs, Demos / Google ADK (JavaScript) Supported Quickstart, Demos / Google Antigravity Supported Docs, Demos / Pydantic AI Supported Docs, Demos / CrewAI Supported Docs, Demos / partnership with LangChain and CrewAI / Mastra Supported Docs, Demos / Oracle Agent Spec Supported Docs, Demos / LangChain Supported Docs, Demos / AG-UI was born from CopilotKit's initial partnership with LangChain and CrewAI / LlamaIndex Supported Docs, Demos / Agno Supported Docs, Demos / AG2 Supported Docs Demos / CopilotKit Supported Getting Started 1st Party / Chat platforms (Slack, Microsoft Teams) Supported / The Channels SDK is one implementation of it, and OpenTag is a complete application built on it: a Python LangGraph agent served over AG-UI into Slack and Microsoft Teams. / platform credentials and message delivery are handled by CopilotKit Intelligence - a hosted service, not part of the protocol. / Terminal + Agent Supported Getting Started Community / An AG-UI client does not have to be a web application. The protocol describes an event stream rather than a rendering target, so a terminal, a mobile app, or a chat platform can each act as a client. / React Native Supported Example 1st Party / .NET Supported Getting Started / Supported Integrations Direct to LLM Agent Framework - Partnerships Agent Framework - 1st Party Agent Framework - Community Agent Interaction Protocols Infrastructure / Deployment Specification (standard) Generative UI SDKs Clients / 1st party = the platforms that have AG‑UI built in and provide documentation for guidance. / Claude Agent SDK Supported Demos Claude Managed Agents SDK Supported Integration, Demos Langroid Supported Demos Omnara Supported Quickstart, Integration, Demos OpenAI Agent SDK In Progress - Cloudflare Agents Supported Integration / Kotlin Supported Getting Started Community Golang Supported Getting Started Community Dart Supported Getting Started Community Java Supported Getting Started Community Rust Supported Getting Started Community Ruby Supported Getting Started Community C++ Supported GitHub Source Community / A2A Middleware Supported Docs Partnership",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://docs.ag-ui.com/concepts/generative-ui-specs",
     "claim": "CopilotKit, *Generative UI*, modified 2026-01-23",
     "date": null,
     "quote": "A2UI Google A declarative, LLM-friendly Generative UI spec. / AG-UI natively supports all of the above generative UI specs / AG-UI is not a generative UI specification - it's a User Interaction protocol that provides the bi-directional runtime connection between the agent and the application. / AG-UI natively supports all of the above generative UI specs and allows developers to define their own custom generative UI standards as well.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://modelcontextprotocol.io/seps/1865-mcp-apps-interactive-user-interfaces-for-mcp",
     "claim": "Model Context Protocol, *SEP-1865: MCP Apps - Interactive User Interfaces for MCP*, modified 2026-07-31",
     "date": null,
     "quote": "SEP-1865: MCP Apps / ui:// URI scheme / This specification focuses on HTML content (text/html;profile=mcp-app) / sandboxed iframes with restricted permissions",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://docs.ag-ui.com/integrations",
     "claim": "CopilotKit, *Integrations*, modified 2026-10-16",
     "date": null,
     "quote": "MCP Apps - Render interactive UI components from MCP servers directly in your chat interface",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://zed.dev/blog/bring-your-own-agent-to-zed",
     "claim": "Nathan Sobo (Zed), *Bring Your Own Agent to Zed — Featuring Gemini CLI*, published 2025-08-27",
     "date": null,
     "quote": "You can now interact with third-party agents directly within Zed. To make this possible, we created the Agent Client Protocol (ACP)",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://docs.ag-ui.com/spec/1.0/basic/transports/index",
     "claim": "CopilotKit, *Transports (1.0)*, modified 2026-09-17",
     "date": null,
     "quote": "Delivery of the RunAgentInput that opens the exchange, before any events. / the run input is an HTTP POST; the events stream back as SSE frames carrying JSON. / An implementation that speaks HTTP MUST support the SSE binding; the protobuf binding is OPTIONAL. / HTTP + Protobuf: the same POST, negotiated to a binary response of length-prefixed protobuf frames. / Implementations MAY carry AG-UI over other channels - WebSockets, message buses, in-process pipes. / AG-UI defines no credential / Authentication and authorization are properties of the binding and the application, not of the protocol / Protocol semantics are identical on every transport. A transport is a binding: it defines how the run input is delivered, how events are framed and encoded, and how a stream terminates or fails. / HTTP + Server-Sent Events: the run input is an HTTP POST; the events stream back as SSE frames carrying JSON. / A stream that ends cleanly after a terminal event is a closed run, and a connection that dies without one is a truncated run. / A consumer MUST NOT synthesize a RUN_FINISHED",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://practicallyagents.com/articles/the-agent-ui-gap-ag-ui-and-copilotkit/",
     "claim": "Michał Pasierbski (Practically Agents), *Bridging Agents to UI: How AG-UI and CopilotKit Make It Stupidly Easy*, published 2026-02-25",
     "date": null,
     "quote": "Connecting an agent backend to a real-time UI used to mean custom SSE handlers, proprietary event schemas, and hand-rolled state sync. / For state synchronization, STATE_DELTA events use JSON Patch (RFC 6902), an established format for describing changes to a JSON document. / The agent sends a diff instead of its full state on every update. / You do have to model that state explicitly up front, which takes some design work.",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://docs.ag-ui.com/spec/1.0/index",
     "claim": "CopilotKit, *Specification 1.0*, modified 2026-09-17",
     "date": null,
     "quote": "AG-UI is an open protocol that standardizes how agents talk to user-facing applications: one request in, one ordered stream of typed events out, carrying everything the user sees of the agent - text, tool calls, reasoning, shared state, progress. / Run input - the one message that travels from application to agent. / The behavioural specification for the AG-UI protocol - 1.0 / \"dateModified\":\"2026-09-17T17:19:23.281Z\" / 1.1 (draft)",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://www.copilotkit.ai/blog/introducing-ag-ui-the-protocol-where-agents-meet-users",
     "claim": "Nathan Tarbert (CopilotKit), *Introducing AG-UI: The Protocol Where Agents Meet Users*, published 2025-05-12",
     "date": null,
     "quote": "By Nathan Tarbert May 12, 2025 We're thrilled to announce AG-UI, the Agent-User Interaction Protocol",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://github.com/ag-ui-protocol/ag-ui",
     "claim": "AG-UI Protocol, *ag-ui-protocol/ag-ui repository*, created 2025-05-07; updated 2026-10-30",
     "date": null,
     "quote": "\"created_at\": \"2025-05-07T12:49:37Z\" / \"default_branch\": \"main\" … \"pushed_at\": \"2026-10-30T22:14:47Z\" / \"name\": \"MIT License\", \"spdx_id\": \"MIT\"",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://github.com/ag-ui-protocol/ag-ui/blob/main/.github/CODEOWNERS",
     "claim": "ag-ui-protocol/ag-ui, *.github/CODEOWNERS*, checked 2026-10-28",
     "date": null,
     "quote": "* @ag-ui-protocol/copilotkit",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://github.com/ag-ui-protocol/ag-ui/discussions/2792",
     "claim": "mme (ag-ui-protocol/ag-ui), *AG-UI 1.0 is officially released*, created 2026-09-18",
     "date": null,
     "quote": "Following the draft period and the feedback collected here, AG-UI 1.0 is now officially released and frozen. / The 1.0 specification will remain unchanged, while future protocol evolution will happen through new draft specifications and open community discussion before each release. / <link rel=\"dns-prefetch\" href=\"https://github.githubassets.com\">",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://docs.ag-ui.com/migrating-to-1-0",
     "claim": "CopilotKit, *Migrating to 1.0*, modified 2026-10-26",
     "date": null,
     "quote": "AG-UI 1.0 is the first release with a specification behind it / The wire is the same. JSON over SSE and the protobuf binding are unchanged in framing. / A 1.0 producer MUST declare the protocol version it speaks on RUN_STARTED / the five THINKING_* events become their REASONING_* equivalents / A REASONING_MESSAGE_CONTENT or REASONING_MESSAGE_END naming a message nothing opened / Replace dictionary reads such as patch[\"path\"] and patch.get(\"op\") with patch.path and patch.op / preserves wire keys such as from on move and copy operations",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://docs.ag-ui.com/spec/1.0/changelog",
     "claim": "CopilotKit, *Key Changes (1.0 against 0.x)*, modified 2026-09-17",
     "date": null,
     "quote": "The 0.x THINKING_* events are retired in favour of the reasoning family: spans, streamed reasoning messages matched by messageId, and REASONING_ENCRYPTED_VALUE for provider artefacts a consumer stores and returns without reading. / consumers declare theirs on RunAgentInput.protocolVersion, producers answer with their own on RUN_STARTED.protocolVersion / RUN_FINISHED carries an optional outcome: absent or success means success, the interrupt outcome carries what the run is waiting for, and the cancelled outcome marks a run stopped on purpose before it completed. / A late RUN_ERROR after RUN_FINISHED is admitted, reporting a failure that surfaced after success was already reported / TOOL_CALL_RESULT is a message in its own right and does not reopen the call it answers / First chunks MUST carry what opening requires (messageId and role semantics for text, toolCallId and toolCallName for tool calls); later chunks MAY omit them",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://github.com/ag-ui-protocol/ag-ui/blob/main/README.md",
     "claim": "ag-ui-protocol/ag-ui, *README.md*, checked 2026-10-28",
     "date": null,
     "quote": "AG-UI was born from CopilotKit's initial … partnership … with LangChain and CrewAI / Biweekly AG-UI Working Group / Works with any event transport (SSE, WebSockets, webhooks, etc.)",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://github.com/ag-ui-protocol/ag-ui/blob/main/CONTRIBUTING.md",
     "claim": "ag-ui-protocol/ag-ui, *CONTRIBUTING.md*, checked 2026-10-28",
     "date": null,
     "quote": "This step is only needed if you want to be added as a co-owner who can merge changes to your integration without core team review.",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://www.copilotkit.ai/blog/ag-ui-1.0",
     "claim": "Anmol Baranwal and Eli Berman (CopilotKit), *Introducing AG-UI 1.0: a stable spec for connecting any agent to any application*, published 2026-09-30",
     "date": null,
     "quote": "Introducing AG-UI 1.0: a stable spec for connecting any agent to any application / The JSON Schema is a single file: schema.json. It describes every event, the request your app sends (RunAgentInput) and every type they use. / 2026-09-30 / The TypeScript, Python and.NET SDKs are now generated from that schema.",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://registry.npmjs.org/@ag-ui/core",
     "claim": "Markus Ecker, *@ag-ui/core*, latest 1.0.3 published 2026-10-16",
     "date": null,
     "quote": "\"latest\":\"1.0.3\" … \"1.0.3\":\"2026-10-16T08:40:38.297Z\" / \"latest\":\"1.0.3\" / \"1.0.3\":\"2026-10-16T08:40:38.297Z\" / \"protocolVersion\":\"1.0\"",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://github.com/ag-ui-protocol/ag-ui/releases",
     "claim": "ag-ui-protocol/ag-ui, *GitHub releases*, release/2026-10-30 published 2026-10-30",
     "date": null,
     "quote": "\"tag_name\": \"release/2026-10-30\" … \"published_at\": \"2026-10-30T20:53:07Z\"",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://raw.githubusercontent.com/ag-ui-protocol/ag-ui/main/sdks/typescript/packages/core/package.json",
     "claim": "Markus Ecker (ag-ui-protocol), *@ag-ui/core package.json*, version 1.0.4; protocolVersion 1.0; fetched 2026-11-11",
     "date": null,
     "quote": "\"name\": \"@ag-ui/core\",\n  \"author\": \"Markus Ecker <[email redacted]>\",\n  \"version\": \"1.0.4\",\n  \"agui\": {\n    \"protocolVersion\": \"1.0\"\n  },",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://docs.ag-ui.com/spec/1.0/events/index",
     "claim": "CopilotKit, *Event Streams (1.0)*, modified 2026-09-17",
     "date": null,
     "quote": "Everything a producer has to say arrives as events, in eight families. / Only the run lifecycle is mandatory for a producer - every other family is a feature it emits when it has something to say with it. / A consumer MUST accept all of them: an event from a family a consumer has no use for is still a well-formed event, not unrecognised material. / Runs and steps RUN_STARTED · RUN_FINISHED · RUN_ERROR · STEP_STARTED · STEP_FINISHED lifecycle the client itself / Tool calls The agent proposes, the application disposes. / State STATE_SNAPSHOT · STATE_DELTA · MESSAGES_SNAPSHOT snapshot-delta the application store / State Shared state and the conversation, replaced and amended.",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://github.com/ag-ui-protocol/ag-ui/blob/main/LICENSE",
     "claim": "ag-ui-protocol/ag-ui, *ag-ui-protocol/ag-ui — LICENSE*, Copyright (c) 2025",
     "date": null,
     "quote": "MIT License … Copyright (c) 2025",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://docs.ag-ui.com/agentic-protocols",
     "claim": "CopilotKit, *MCP, A2A, and AG-UI*, modified 2026-05-15",
     "date": null,
     "quote": "MCP (Model Context Protocol) Connects agents to tools and to context / A2A (Agent to Agent) Connects agents to other agents. / AG-UI (Agent-User Interaction) Connects agents to users (through user-facing applications). / These three agentic protocols are complementary and have distinct technical goals; a single agent can and often does use all 3 simultaneously. / allowing AG-UI to \"front for\" agents through MCP and A2A protocols / AG-UI contributors have recently added handshakes / a family of open, complementary protocols - each addressing a distinct layer of interaction.",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://pydantic.dev/docs/ai/integrations/ui/ag-ui/",
     "claim": "Pydantic, *Agent-User Interaction (AG-UI) Protocol*, checked 2026-10-28",
     "date": null,
     "quote": "The integration receives messages in the form of a RunAgentInput object that describes the details of the requested agent run including message history, state, and available tools. / open standard introduced by the CopilotKit team that standardises how frontend applications communicate with AI agents, with support for streaming, frontend tools, shared state, and custom events. / contributed in collaboration with the Pydantic AI and CopilotKit teams. / The AGUIAdapter.dispatch_request() class method takes an agent and a Starlette request / The AGUIAdapter.run_stream() method",
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/runtime-agui.html",
     "claim": "Amazon Web Services, *Deploy AG-UI servers in AgentCore Runtime*, fetched 2026-10-30",
     "date": null,
     "quote": "\"threadId\": \"test-123\", \"runId\": \"run-456\", \"state\": {}, \"messages\" / \"tools\": [], \"context\": [], \"forwardedProps\": {} / Amazon Bedrock AgentCore expects containers to run servers on port 8080 at the /invocations path for HTTP/SSE or /ws for WebSocket connections. / AG-UI servers use /invocations for HTTP/SSE and /ws for WebSocket / Amazon Bedrock AgentCore handles authentication (SigV4/OAuth 2.0), session isolation, and scaling.",
     "ref": 25
    },
    {
     "label": "[26]",
     "url": "https://ridewithvia.com/resources/agent-user-interaction-protocol-when-the-frontend-got-an-ai-protocol",
     "claim": "Roi Dannon (Via), *Agent-User Interaction Protocol: When the frontend got an AI protocol*, published 2026-01-07; modified 2026-02-26",
     "date": null,
     "quote": "TEXT_MESSAGE_START: text message start: / TEXT_MESSAGE_CONTENT: The actual text streams in, often broken down word-by-word. / TEXT_MESSAGE_END: The full text message is complete. / The event flow for a tool call involves: / TOOL_CALL_START: tool call start event. / TOOL_CALL_ARGS: tool call Args event(s) to pass specific parameters / TOOL_CALL_END: an indication that the frontend tool calling has ended / STATE_SNAPSHOT: The server shares the user with his existing state / STATE_DELTA: The state is changing / Roi Dannon / January 7, 2026 / We built a specialized chatbot assistant for our backoffice rider management system / Front-end Tool Calls / STATE_SNAPSHOT / STATE_DELTA",
     "ref": 26
    },
    {
     "label": "[27]",
     "url": "https://learn.microsoft.com/en-us/agent-framework/integrations/by-component/ui/ag-ui/",
     "claim": "Microsoft, *AG-UI Integration with Agent Framework*, modified 2026-10-23",
     "date": null,
     "quote": "By default, AgentFrameworkAgent emits a terminal MESSAGES_SNAPSHOT event containing the full transcript. / set emit_messages_snapshot=False to avoid rewriting the client transcript at the end of each run / This setting suppresses only the terminal message snapshot. Other streamed events, including RUN_FINISHED, are unchanged. / The Agent Framework AG-UI integration provides seamless connectivity between your agents and web clients. / Stream agent responses using Server-Sent Events (SSE) / MapAGUIServer adapts the AG-UI request to MAF messages and run options. / dotnet add package Microsoft.Agents.AI.Hosting.AGUI.AspNetCore --prerelease",
     "ref": 27
    },
    {
     "label": "[28]",
     "url": "https://a2ui.org/specification/v1.0-a2ui/",
     "claim": "A2UI Project (Google), *A2UI Protocol v1.0 Specification*, version 1.0; last updated 2026-06-08",
     "date": null,
     "quote": "Version: 1.0 Status: Current / createSurface updateComponents updateDataModel deleteSurface",
     "ref": 28
    },
    {
     "label": "[29]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28",
     "claim": "Model Context Protocol, *Model Context Protocol specification (2026-07-28)*, version 2026-07-28",
     "date": null,
     "quote": "Model Context Protocol (MCP) is an open protocol that enables seamless integration between LLM applications and external data sources and tools. / JSON-RPC 2.0 messages to establish communication between:",
     "ref": 29
    },
    {
     "label": "[30]",
     "url": "https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/2026-01-26/apps.mdx",
     "claim": "modelcontextprotocol/ext-apps, *MCP Apps specification (2026-01-26)*, dated 2026-01-26",
     "date": null,
     "quote": "resources/read response for UI resource",
     "ref": 30
    },
    {
     "label": "[31]",
     "url": "https://a2a-protocol.org/latest/specification/",
     "claim": "A2A Protocol (The Linux Foundation), *Agent2Agent (A2A) protocol specification*, copyright 2026",
     "date": null,
     "quote": "an open standard for secure communication and interoperability between AI agents. / Agent Card: A JSON metadata document published by an A2A Server, describing its identity, capabilities, skills, service endpoint, and authentication requirements. / JSON-RPC Protocol Binding … gRPC Protocol Binding … HTTP+JSON/REST Protocol Binding",
     "ref": 31
    },
    {
     "label": "[32]",
     "url": "https://agentclientprotocol.com/protocol/v1/overview",
     "claim": "Zed, *Agent Client Protocol v1 overview*, modified 2026-10-30",
     "date": null,
     "quote": "JSON-RPC 2.0 specification / They typically run as subprocesses of the Client.",
     "ref": 32
    },
    {
     "label": "[33]",
     "url": "https://aws.amazon.com/about-aws/whats-new/2026/03/amazon-bedrock-agentcore-runtime-ag-ui-protocol/",
     "claim": "Amazon Web Services, *Amazon Bedrock AgentCore Runtime now supports the AG-UI protocol*, published 2026-03-13",
     "date": null,
     "quote": "Amazon Bedrock AgentCore Runtime now supports the AG-UI protocol / 2026-03-13",
     "ref": 33
    },
    {
     "label": "[34]",
     "url": "https://devblogs.microsoft.com/dotnet/announcing-dotnet-10/",
     "claim": ".NET Team (Microsoft), *Announcing .NET 10*, published 2025-11-11; modified 2026-06-08",
     "date": null,
     "quote": "2025-11-11 / Microsoft Agent Framework now supports the AG-UI protocol",
     "ref": 34
    },
    {
     "label": "[35]",
     "url": "https://devblogs.microsoft.com/dotnet/ag-ui-dotnet-sdk/",
     "claim": "Daniel Roth (Microsoft), *AG-UI Protocol now has a first-class .NET SDK*, published 2026-09-25",
     "date": null,
     "quote": "September 25th, 2026 / The Microsoft Agent Framework (MAF) AG-UI support for.NET is now based on the AG-UI.NET SDK. / we've contributed a.NET SDK for AG-UI in collaboration with CopilotKit. / published on NuGet under the MIT license. / AGUI.Server turns an agent into an AG-UI endpoint, and AGUI.Client lets a.NET application consume one.",
     "ref": 35
    },
    {
     "label": "[36]",
     "url": "https://developers.googleblog.com/en/delight-users-by-combining-adk-agents-with-fancy-frontends-using-ag-ui/",
     "claim": "Alan Blount (Google), *Delight users by combining ADK Agents with Fancy Frontends using AG-UI*, published 2025-09-26",
     "date": null,
     "quote": "2025-09-26 / the Agent Development Kit (ADK) now works with AG-UI",
     "ref": 36
    },
    {
     "label": "[37]",
     "url": "https://adk.dev/integrations/ag-ui/",
     "claim": "Google Agent Development Kit, *AG-UI user interface for ADK*, checked 2026-10-28",
     "date": null,
     "quote": "AG-UI is an open protocol that handles streaming events, client state, and bi-directional communication between your agents and users.",
     "ref": 37
    },
    {
     "label": "[38]",
     "url": "https://docs.crewai.com/edge/en/guides/frontend/overview",
     "claim": "CrewAI, *Frontend Overview*, modified 2026-08-31",
     "date": null,
     "quote": "The ag-ui-crewai package exposes any Crew or Flow as an AG-UI endpoint. / CopilotKit's React hooks and components consume that endpoint. / a Python process that serves your Crew or Flow over AG-UI (FastAPI + ag-ui-crewai)",
     "ref": 38
    },
    {
     "label": "[39]",
     "url": "https://mastra.ai/integrations/agentic-ui/copilotkit",
     "claim": "Mastra, *CopilotKit (Agentic UI)*, checked 2026-10-28",
     "date": null,
     "quote": "CopilotKit talks to Mastra through the AG-UI protocol. / The @ag-ui/mastra package exposes your Mastra agents as an AG-UI endpoint / registerCopilotKit()",
     "ref": 39
    },
    {
     "label": "[40]",
     "url": "https://oracle.github.io/agent-spec/development/howtoguides/howto_ag_ui.html",
     "claim": "Oracle (PyAgentSpec), *How to Use AG-UI with Agent Spec*, checked 2026-10-28",
     "date": null,
     "quote": "you can take a portable Agent Spec configuration (JSON) and interact with it in AG-UI frontends, while keeping your choice of runtime (LangGraph, WayFlow). / The adapter bridges Agent Spec Tracing and AG-UI events so frontends receive standardized messages, tool activity, and UI state",
     "ref": 40
    },
    {
     "label": "[41]",
     "url": "https://www.copilotkit.ai/blog/oracle-adopts-ag-ui-protocol-for-agent-spec",
     "claim": "Nathan Tarbert and Eli Berman (CopilotKit), *Oracle adopts AG-UI protocol for Agent Spec*, published 2025-12-18",
     "date": null,
     "quote": "2025-12-18 / Oracle's Open Agent Specification (Agent Spec) and AG-UI now work together to solve that gap.",
     "ref": 41
    },
    {
     "label": "[42]",
     "url": "https://aws.amazon.com/blogs/architecture/build-adaptive-ai-interfaces-with-the-ag-ui-protocol-agent-swarms-and-nova-act-on-aws/",
     "claim": "Anand Bilgaiyan and Renjith Pillai (AWS Architecture Blog), *Build adaptive AI interfaces with the AG-UI protocol, agent swarms, and Nova Act on AWS*, 29 SEP 2026; fetched 2026-11-11",
     "date": null,
     "quote": "by Anand Bilgaiyan and Renjith Pillai on 29 SEP 2026 / In this post, we show you how to build interfaces that automatically adapt to your AI’s variable outputs. / using the AG-UI protocol, the Strands Agents Software Development Kit (SDK), and Amazon Nova Act / the Strands Agents SDK Swarm pattern for multi-agent collaboration, and Amazon Nova Act for legacy system integration",
     "ref": 42
    },
    {
     "label": "[43]",
     "url": "https://docs.ag-ui.com/quickstart/clients",
     "claim": "CopilotKit, *Build clients*, modified 2026-08-05",
     "date": null,
     "quote": "For production use, use a full-featured client like CopilotKit.",
     "ref": 43
    },
    {
     "label": "[44]",
     "url": "https://pypi.org/pypi/ag-ui-protocol/json",
     "claim": "Markus Ecker, *ag-ui-protocol*, 1.0.0 uploaded 2026-09-17",
     "date": null,
     "quote": "Python SDK for the Agent-User Interaction (AG-UI) Protocol. / \"version\":\"1.0.0\" / \"requires_python\":\">=3.9\" / pydantic>=2.11.2 / \"upload_time\":\"2026-09-17T18:31:18\"",
     "ref": 44
    },
    {
     "label": "[45]",
     "url": "https://github.com/copilotkit/skills/blob/HEAD/skills/copilotkit-integrations/SKILL.md",
     "claim": "CopilotKit, *CopilotKit integrations skill (archived Jun 3, 2026)*, checked 2026-11-06",
     "date": null,
     "quote": "This repository was archived by the owner on Jun 3, 2026. It is now read-only. / version: 1.0.0 / LangGraphHttpAgent` from `@copilotkit/runtime/langgraph / ag-ui-langgraph` (`add_langgraph_fastapi_endpoint`) | 8123 / LangGraph (Python, LangGraph Platform) | Python | `LangGraphAgent` from `@copilotkit/runtime/langgraph` | LangGraph Platform (managed) | varies / LangGraph (JS) | TypeScript | `LangGraphAgent` from `@copilotkit/runtime/langgraph` | Built into `@copilotkit/sdk-js/langgraph` | 8123 / A2A Middleware | Python + TS | `A2AMiddlewareAgent` from `@ag-ui/a2a-middleware` | Per-agent (mixed frameworks) | 9000-9002 / MCP Apps | TypeScript | `BuiltInAgent` with `MCPAppsMiddleware` | N/A (middleware on BuiltInAgent) | 3108",
     "ref": 45
    }
   ],
   "form": "endpoint",
   "governance": "The repository CODEOWNERS file assigns every path by default to @ag-ui-protocol/copilotkit. Integration authors can be added as co-owners who can merge changes to their integration without core team review. The README lists a biweekly AG-UI Working Group.",
   "group": null,
   "hatnote_md": "This page is about the Agent-User Interaction Protocol (AG-UI) originated by CopilotKit. For Google's declarative JSON widget format carried over transports such as AG-UI, see [A2UI](https://agenticweb.wiki/protocols/a2ui/). For the Model Context Protocol extension (SEP-1865) that renders ui:// HTML resources in sandboxed iframes, see [MCP Apps](https://agenticweb.wiki/protocols/mcp-apps/). For Zed's JSON-RPC 2.0 protocol for editor-hosted agents, see [Agent Client Protocol](https://agenticweb.wiki/protocols/agent-client-protocol/).",
   "history": [
    {
     "date": "2026-10-28",
     "note": "Verified record against 38 primary and secondary sources."
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "ag-ui",
   "implementation": "multi-implementation",
   "last_verified": "2026-11-11",
   "name": "Agent-User Interaction Protocol (AG-UI)",
   "native_status": "On 2026-09-18 the maintainers wrote that AG-UI 1.0 is officially released and frozen, and that the 1.0 specification will remain unchanged. The documentation says AG-UI 1.0 is the first release with a specification behind it. CopilotKit says AG-UI 1.0 is backwards compatible, so existing agents and apps keep working.",
   "origin": {
    "date": "2025-05-12",
    "org": "CopilotKit"
   },
   "pairs_with": [
    "a2ui",
    "mcp",
    "mcp-apps",
    "a2a",
    "agent-client-protocol"
   ],
   "part_of": null,
   "parties": [
    "agent-human"
   ],
   "phase": "stable",
   "prerequisites": [],
   "probe": {
    "method": "POST",
    "on_absent": "No AG-UI-shaped event stream; the backend is not exposing an AG-UI-compatible interface",
    "parse": "Response is an event stream using AG-UI event types",
    "path": "{endpoint}"
   },
   "question": "How does an agent stream state, generative UI, messages, and tool activity into a user-facing application in real time?",
   "scope": "general",
   "spec_url": "https://docs.ag-ui.com/spec/1.0/index",
   "step": "present",
   "summary_md": "**Agent-User Interaction Protocol** (`AG-UI`) is an open, lightweight, event-based protocol originated by CopilotKit (`* @ag-ui-protocol/copilotkit`) that standardizes the bi-directional runtime connection between user-facing applications and agentic backends. Announced by Nathan Tarbert on 12 May 2025 following repository creation on 2025-05-07, it pairs a single request with an ordered stream of typed events carrying text, tool calls, reasoning, shared state, and progress. A consumer opens an exchange by sending a `RunAgentInput` payload over an HTTP POST request, and the producer streams typed events back over a mandatory Server-Sent Events (SSE) JSON binding or an optional length-prefixed protobuf binary response. AG-UI 1.0—the first release backed by a formal specification—was officially released and frozen on 2026-09-18, with future evolution occurring through new draft specifications while the 1.0 specification remains unchanged. The 1.0 release also retires the 0.x `THINKING_*` events in favor of the reasoning family.",
   "track": "single-vendor",
   "use_cases": [
    "render-agent-ui",
    "expose-tools-to-agents",
    "agent-to-agent-messaging"
   ],
   "version": {
    "date": "2026-10-30",
    "label": "Specification 1.0 (@ag-ui/core 1.0.4 on main, protocolVersion 1.0; npm latest 1.0.3)"
   },
   "watch": [
    {
     "cadence": "weekly",
     "selector": "main",
     "type": "page",
     "url": "https://docs.ag-ui.com/introduction"
    },
    {
     "mode": "release",
     "repo": "ag-ui-protocol/ag-ui",
     "type": "github",
     "version": false
    },
    {
     "pkg": "@ag-ui/core",
     "type": "npm"
    }
   ],
   "tier": "flagship",
   "lifecycle_status": "published_standard",
   "wire_archetype": "harnesses_rpc_ui",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-11",
   "v05_hatnote_html_md": "This page is about the Agent-User Interaction Protocol (AG-UI) originated by CopilotKit. For Google's declarative JSON widget format carried over transports such as AG-UI, see [A2UI](/protocols/a2ui/). For the Model Context Protocol extension (SEP-1865) that renders ui:// HTML resources in sandboxed iframes, see [MCP Apps](/protocols/mcp-apps/). For Zed's JSON-RPC 2.0 protocol for editor-hosted agents, see [Agent Client Protocol](/protocols/agent-client-protocol/). [1][2][3][4][5]",
   "v05_elevator_pitch_md": "Agent-User Interaction Protocol (AG-UI) is a streaming interaction standard that connects backend AI agents to frontend web and mobile interfaces for live chat, tool-call progress, and synchronized application state. Instead of writing custom WebSocket glue and bespoke state-diff logic for every agent framework, a frontend posts a single `RunAgentInput` request and consumes a standardized Server-Sent Events (SSE) stream of typed JSON lifecycle, text, tool, and state events. [1][6][7]",
   "v05_lead_md": "**Agent-User Interaction Protocol** (`AG-UI`) is an open, lightweight, event-based protocol originated by CopilotKit (`* @ag-ui-protocol/copilotkit`) that standardizes the bi-directional runtime connection between user-facing applications and agentic backends. Announced by Nathan Tarbert on 12 May 2025 following repository creation on 2025-05-07, it pairs a single request with an ordered stream of typed events carrying text, tool calls, reasoning, shared state, and progress. [1][8][9][10][11] A consumer opens an exchange by sending a `RunAgentInput` payload over an HTTP POST request, and the producer streams typed events back over a mandatory Server-Sent Events (SSE) JSON binding or an optional length-prefixed protobuf binary response. [6][8] AG-UI 1.0—the first release backed by a formal specification—was officially released and frozen on 2026-09-18, with future evolution occurring through new draft specifications while the 1.0 specification remains unchanged. The 1.0 release also retires the 0.x `THINKING_*` events in favor of the reasoning family. [12][13][14]",
   "v05_identity_sentence_md": "**Agent-User Interaction Protocol** (`AG-UI`) is an open, lightweight, event-based protocol originated by CopilotKit (`* @ag-ui-protocol/copilotkit`) that standardizes the bi-directional runtime connection between user-facing applications and agentic backends. Announced by Nathan Tarbert on 12 May 2025 following repository creation on 2025-05-07, it pairs a single request with an ordered stream of typed events carrying text, tool calls, reasoning, shared state, and progress. [1][8][9][10][11]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Present](/category/present/) (`present`)"
    },
    {
     "label": "Form",
     "value_md": "Endpoint (`endpoint`)"
    },
    {
     "label": "Originated by",
     "value_md": "CopilotKit (Nathan Tarbert), announced 2025-05-12; repository created 2025-05-07 [9][10][15]"
    },
    {
     "label": "Governed by",
     "value_md": "CopilotKit team (`* @ag-ui-protocol/copilotkit` in CODEOWNERS); biweekly AG-UI Working Group [11][15][16]"
    },
    {
     "label": "Track",
     "value_md": "Open vendor-originated specification (CopilotKit / AG-UI open community specification) [12][17]"
    },
    {
     "label": "Status",
     "value_md": "1.0 released and frozen on 2026-09-18; the 1.0 specification will remain unchanged [12]"
    },
    {
     "label": "Version",
     "value_md": "Spec 1.0 modified 2026-09-17; 1.1 draft listed; main `@ag-ui/core` `1.0.4` (`protocolVersion` `1.0`); npm latest `1.0.3`; fetched releases list leads with `release/2026-10-30` [8][10][18][19][20]"
    },
    {
     "label": "Transports",
     "value_md": "HTTP POST input; SSE binding MUST; protobuf binding OPTIONAL; WebSockets and other channels MAY [6]"
    },
    {
     "label": "Message format",
     "value_md": "Ordered typed events in eight families; only the run lifecycle is mandatory for a producer [21]"
    },
    {
     "label": "Specification",
     "value_md": "[Specification 1.0](https://docs.ag-ui.com/spec/1.0/index) [8]"
    },
    {
     "label": "Found at",
     "value_md": "HTTP POST that delivers `RunAgentInput` before any events [6]"
    },
    {
     "label": "Licence",
     "value_md": "MIT (Copyright (c) 2025) [10][22]"
    }
   ],
   "v05_problem_md": "Connecting an agent backend to a real-time UI used to mean custom SSE handlers, proprietary event schemas, and hand-rolled state sync. [7] Every message from a producer arrives as a typed event belonging to one of eight event families, of which only the run lifecycle family is mandatory for a producer to emit. [21] A consumer must accept all eight families, treating any event from a family it does not use as a well-formed event rather than unrecognized material. [21] AG-UI defines no credential; authentication and authorization remain properties of the transport binding and host application rather than the protocol. [6] Rather than defining a generative UI widget format of its own, `AG-UI` provides the user-facing interaction layer alongside `MCP` (which connects agents to tools and context) and `A2A` (which connects agents to other agents). [2][23]",
   "v05_mechanism_delta_md": "Every message from a producer arrives as a typed event belonging to one of eight event families, of which only the run lifecycle family is mandatory for a producer to emit. [21] A consumer must accept all eight families, treating any event from a family it does not use as a well-formed event rather than unrecognized material. [21]",
   "v05_scope_boundary_md": "AG-UI defines no credential; authentication and authorization remain properties of the transport binding and host application rather than the protocol. [6] Rather than defining a generative UI widget format of its own, `AG-UI` provides the user-facing interaction layer alongside `MCP` (which connects agents to tools and context) and `A2A` (which connects agents to other agents). [2][23]",
   "v05_fuzzy_additions": [
    {
     "id": "run-lifecycle-event-families-and-streaming-messages",
     "heading": "Run lifecycle, event families, and streaming messages",
     "body_md": "Within the eight-family event stream, run and step execution is bracketed by five lifecycle event types: `RUN_STARTED`, `RUN_FINISHED`, `RUN_ERROR`, `STEP_STARTED`, and `STEP_FINISHED`. [21]",
     "bullets": [
      {
       "label": "RunAgentInput request fields",
       "text_md": "The single-file JSON Schema (`schema.json`) defines every event and the `RunAgentInput` request payload describing message history, state, and available tools. Consumers declare `RunAgentInput.protocolVersion` and producers answer on `RUN_STARTED.protocolVersion`; a typical request payload carries `threadId`, `runId`, `state`, `messages`, `tools`, `context`, and `forwardedProps`. [14][17][24][25]"
      },
      {
       "label": "Mandatory run lifecycle events",
       "text_md": "A 1.0 producer must declare the protocol version it speaks on `RUN_STARTED`. `RUN_FINISHED` carries an optional outcome field (`success` or absent for normal completion, `interrupt` when awaiting external input, and `cancelled` when stopped intentionally), and a late `RUN_ERROR` after `RUN_FINISHED` is permitted if a post-completion failure surfaces. [13][14][21]"
      },
      {
       "label": "Streaming text and reasoning",
       "text_md": "Streaming text uses `TEXT_MESSAGE_START`, `TEXT_MESSAGE_CONTENT`, and `TEXT_MESSAGE_END`. In 1.0, the five 0.x `THINKING_*` events are replaced by `REASONING_*` equivalents matched by `messageId`, and a `REASONING_MESSAGE_END` referencing an unopened message fails the run. [13][14][26]"
      },
      {
       "label": "Tool-call lifecycle",
       "text_md": "Under AG-UI's tool-call model, the agent proposes and the application disposes through `TOOL_CALL_START`, `TOOL_CALL_ARGS`, and `TOOL_CALL_END`, while `TOOL_CALL_RESULT` is a standalone message that does not reopen the call it answers. Opening chunks must carry `messageId` for text or `toolCallId` and `toolCallName` for tool calls, whereas subsequent chunks may omit them. [14][21][26]"
      }
     ]
    },
    {
     "id": "state-synchronization-json-patch-deltas-and-transport-bindings",
     "heading": "State synchronization, JSON Patch deltas, and transport bindings",
     "body_md": "The state event family comprises `STATE_SNAPSHOT`, `STATE_DELTA`, and `MESSAGES_SNAPSHOT`, providing a snapshot-and-delta synchronization model that replaces or amends shared application state and conversation history. [21] For state synchronization, `STATE_DELTA` events use JSON Patch (`RFC 6902`), an established format for describing changes to a JSON document. The agent sends a diff instead of its full state on every update. [7]",
     "bullets": [
      {
       "label": "Full state versus JSON Patch",
       "text_md": "`STATE_SNAPSHOT` delivers the complete state object to the client, whereas `STATE_DELTA` streams incremental updates as RFC 6902 JSON Patch operations. Applications must model shared state explicitly up front; in 1.0 SDKs, typed attributes `patch.path` and `patch.op` replace dictionary reads while `from` remains the wire key on move and copy operations. [7][13][26]"
      },
      {
       "label": "Message history snapshots",
       "text_md": "`MESSAGES_SNAPSHOT` belongs to the optional state family and replaces the conversation transcript in the application store. In Microsoft Agent Framework, `AgentFrameworkAgent` emits a terminal `MESSAGES_SNAPSHOT` containing the full transcript by default; setting `emit_messages_snapshot=False` suppresses that terminal rewrite while leaving `RUN_FINISHED` and other streamed events unchanged. [21][27]"
      },
      {
       "label": "HTTP, binary, and webhook transports",
       "text_md": "Over HTTP, implementations must support the SSE JSON binding in response to the `RunAgentInput` POST and may optionally negotiate length-prefixed protobuf binary frames. If a stream terminates early, a consumer must not synthesize a `RUN_FINISHED` event; middleware also supports WebSockets and webhooks. [6][15]"
      },
      {
       "label": "Protocol handshakes and generative UI",
       "text_md": "Protocol handshakes allow `AG-UI` to front for agents communicating over `MCP` and `A2A` so a single agent can use all three protocols simultaneously. Because `AG-UI` is a runtime interaction transport rather than a widget schema, it natively carries declarative generative UI specifications such as `A2UI`. [2][23]"
      }
     ]
    }
   ],
   "v05_diagram": {
    "title": "Transport binding",
    "heading": "Transport binding",
    "mermaid": "sequenceDiagram\n  participant Consumer\n  participant Producer\n  Consumer->>Producer: HTTP POST carrying the run input\n  Note over Producer: RunAgentInput opens the exchange before any events\n  Producer-->>Consumer: SSE frames carrying JSON\n  alt closed run\n    Producer-->>Consumer: terminal event\n  else truncated run\n    Note over Consumer: MUST NOT synthesize a RUN_FINISHED\n  end",
    "caption_md": "The consumer sends an HTTP POST carrying `RunAgentInput`. The producer returns SSE frames carrying JSON. A closed run ends after a terminal event. A truncated run must not synthesize `RUN_FINISHED`. [6]"
   },
   "v05_wire_artifact": {
    "title": "`RUN_STARTED` event the 1.0 producer must declare",
    "heading": "`RUN_STARTED` event the 1.0 producer must declare",
    "lang": "ts",
    "code": "import { EventType, PROTOCOL_VERSION, type RunStartedEvent } from \"@ag-ui/core\";\n\nconst runStarted: RunStartedEvent = {\n  type: EventType.RUN_STARTED,\n  threadId: input.threadId,\n  runId: input.runId,\n  protocolVersion: PROTOCOL_VERSION,\n};",
    "caption_md": "A 1.0 producer declares `EventType.RUN_STARTED` with `threadId`, `runId`, and `protocolVersion`. [13]"
   },
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "Server-Sent Events (WHATWG HTML)",
      "spec_or_rfc": "WHATWG HTML",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "HTTP run input is a POST; an HTTP implementation MUST support SSE, and protobuf is OPTIONAL. [6]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "a2ui",
      "target_name": "A2UI (Agent to UI) Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "A2UI v1.0 delivers declarative UI widgets via `createSurface`, `updateComponents`, `updateDataModel`, and `deleteSurface`; AG-UI connects agentic frontends to agentic backends and natively transports A2UI surfaces. [1][2][28]"
     },
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "MCP links LLM apps to tools with JSON-RPC 2.0; AG-UI links agents to users as a complementary protocol. [23][29]"
     },
     {
      "target_id": "mcp-apps",
      "target_name": "MCP Apps",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "MCP Apps (SEP-1865) renders ui:// HTML resources in sandboxed iframes; AG-UI streams typed events between an agent backend and a frontend. [3][4][30]"
     },
     {
      "target_id": "a2a",
      "target_name": "Agent2Agent Protocol (A2A)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "A2A publishes an Agent Card and defines JSON-RPC, gRPC, and HTTP+JSON/REST; AG-UI connects agents to users. [23][31]"
     },
     {
      "target_id": "agent-client-protocol",
      "target_name": "Agent Client Protocol",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ACP is Zed's JSON-RPC 2.0 subprocess-agent protocol; AG-UI uses one request and one ordered event stream. [5][8][32]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (27 probed or cited examples across 3 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).",
    "side_a": {
     "visible": true,
     "heading": "Agent frameworks, servers & backend integrations",
     "col4_header": "Transport & Scope",
     "note_md": null,
     "rows": [
      {
       "actor": "Amazon Bedrock AgentCore Runtime",
       "role": "Agent server",
       "status": "Supported",
       "status_display": "Supported · as of 2026-03-13",
       "col4_md": "Port `8080`: `/invocations` HTTP/SSE and `/ws` WebSocket; runtime auth is `SigV4` or `OAuth 2.0`.",
       "source_md": "[Deploy AG-UI servers in AgentCore Runtime](https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/runtime-agui.html) [25] · [What's New, 2026-03-13](https://aws.amazon.com/about-aws/whats-new/2026/03/amazon-bedrock-agentcore-runtime-ag-ui-protocol/) [33] · [AG-UI overview, Supported Integrations](https://docs.ag-ui.com/introduction) [1]"
      },
      {
       "actor": "AWS Strands Agents",
       "role": "Agent framework",
       "status": "Listed",
       "status_display": "Listed · checked 2026-10-30",
       "col4_md": "Overview lists AWS Strands Agents as Supported under Agent Framework - 1st Party.",
       "source_md": "[AG-UI overview, Supported Integrations](https://docs.ag-ui.com/introduction) [1]"
      },
      {
       "actor": "Microsoft Agent Framework",
       "role": "Agent framework",
       "status": "Supported",
       "status_display": "Supported · as of 2026-09-25",
       "col4_md": "`MapAGUIServer` SSE adapter via `Microsoft.Agents.AI.Hosting.AGUI.AspNetCore` (`--prerelease`).",
       "source_md": "[AG-UI integration with Agent Framework](https://learn.microsoft.com/en-us/agent-framework/integrations/by-component/ui/ag-ui/) [27] · [.NET 10 announcement](https://devblogs.microsoft.com/dotnet/announcing-dotnet-10/) [34] · [AG-UI .NET SDK](https://devblogs.microsoft.com/dotnet/ag-ui-dotnet-sdk/) [35] · [AG-UI overview, Supported Integrations](https://docs.ag-ui.com/introduction) [1]"
      },
      {
       "actor": "Google Agent Development Kit",
       "role": "Agent framework",
       "status": "Supported",
       "status_display": "Supported · as of 2025-09-26",
       "col4_md": "ADK covers streaming events, client state, and bi-directional traffic; overview lists ADK and ADK JavaScript.",
       "source_md": "[ADK agents with AG-UI frontends](https://developers.googleblog.com/en/delight-users-by-combining-adk-agents-with-fancy-frontends-using-ag-ui/) [36] · [AG-UI user interface for ADK](https://adk.dev/integrations/ag-ui/) [37] · [AG-UI overview, Supported Integrations](https://docs.ag-ui.com/introduction) [1]"
      },
      {
       "actor": "Google Antigravity",
       "role": "Agent framework",
       "status": "Listed",
       "status_display": "Listed · checked 2026-10-30",
       "col4_md": "Overview lists Google Antigravity as Supported under Agent Framework - 1st Party.",
       "source_md": "[AG-UI overview, Supported Integrations](https://docs.ag-ui.com/introduction) [1]"
      },
      {
       "actor": "Pydantic AI",
       "role": "Agent framework",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "`AGUIAdapter.dispatch_request()` and `run_stream()` return a stream of AG-UI events.",
       "source_md": "[Pydantic AI AG-UI integration](https://pydantic.dev/docs/ai/integrations/ui/ag-ui/) [24] · [AG-UI overview, Supported Integrations](https://docs.ag-ui.com/introduction) [1]"
      },
      {
       "actor": "CrewAI",
       "role": "Agent framework",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "`ag-ui-crewai` exposes a Crew or Flow over FastAPI for CopilotKit React hooks.",
       "source_md": "[CrewAI frontend overview](https://docs.crewai.com/edge/en/guides/frontend/overview) [38] · [AG-UI overview, Supported Integrations](https://docs.ag-ui.com/introduction) [1]"
      },
      {
       "actor": "Mastra",
       "role": "Agent framework",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "`@ag-ui/mastra` exposes Mastra agents; `registerCopilotKit()` adds the CopilotKit route.",
       "source_md": "[Mastra CopilotKit integration](https://mastra.ai/integrations/agentic-ui/copilotkit) [39] · [AG-UI overview, Supported Integrations](https://docs.ag-ui.com/introduction) [1]"
      },
      {
       "actor": "Oracle Agent Spec",
       "role": "Agent framework",
       "status": "Supported",
       "status_display": "Supported · as of 2025-12-18",
       "col4_md": "JSON Agent Spec config keeps `LangGraph` or `WayFlow`; adapter maps tracing to AG-UI events.",
       "source_md": "[Use AG-UI with Agent Spec](https://oracle.github.io/agent-spec/development/howtoguides/howto_ag_ui.html) [40] · [Oracle adopts AG-UI](https://www.copilotkit.ai/blog/oracle-adopts-ag-ui-protocol-for-agent-spec) [41] · [AG-UI overview, Supported Integrations](https://docs.ag-ui.com/introduction) [1]"
      },
      {
       "actor": "LangChain",
       "role": "Agent framework",
       "status": "Listed",
       "status_display": "Listed · checked 2026-10-30",
       "col4_md": "Overview lists LangChain as Supported; AG-UI began with the CopilotKit, LangChain, and CrewAI partnership.",
       "source_md": "[AG-UI overview, Supported Integrations](https://docs.ag-ui.com/introduction) [1]"
      },
      {
       "actor": "LlamaIndex",
       "role": "Agent framework",
       "status": "Listed",
       "status_display": "Listed · checked 2026-10-30",
       "col4_md": "Overview lists LlamaIndex as Supported under Agent Framework - 1st Party, with Docs and Demos.",
       "source_md": "[AG-UI overview, Supported Integrations](https://docs.ag-ui.com/introduction) [1]"
      },
      {
       "actor": "Agno",
       "role": "Agent framework",
       "status": "Listed",
       "status_display": "Listed · checked 2026-10-30",
       "col4_md": "Overview lists Agno as Supported under Agent Framework - 1st Party, with Docs and Demos.",
       "source_md": "[AG-UI overview, Supported Integrations](https://docs.ag-ui.com/introduction) [1]"
      },
      {
       "actor": "AG2",
       "role": "Agent framework",
       "status": "Listed",
       "status_display": "Listed · checked 2026-10-30",
       "col4_md": "Overview lists AG2 as Supported under Agent Framework - 1st Party, with Docs and Demos.",
       "source_md": "[AG-UI overview, Supported Integrations](https://docs.ag-ui.com/introduction) [1]"
      },
      {
       "actor": "Amazon Nova Act",
       "role": "Reference architecture",
       "status": "Supported (release announcement)",
       "status_display": "Supported (release announcement) · as of 2026-09-29",
       "col4_md": "29 SEP 2026 Architecture Blog post shows adaptive interfaces built with the AG-UI protocol, the Strands Agents SDK Swarm pattern, and Amazon Nova Act.",
       "source_md": "[AWS Architecture Blog (29 SEP 2026)](https://aws.amazon.com/blogs/architecture/build-adaptive-ai-interfaces-with-the-ag-ui-protocol-agent-swarms-and-nova-act-on-aws/) [42]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Frontend UI clients, renderers & client SDKs",
     "col4_header": "Transport & Scope",
     "note_md": null,
     "rows": [
      {
       "actor": "CopilotKit",
       "role": "Frontend client",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Client quickstart names CopilotKit for production; the overview lists it as 1st Party.",
       "source_md": "[AG-UI client quickstart](https://docs.ag-ui.com/quickstart/clients) [43] · [AG-UI overview, Supported Integrations](https://docs.ag-ui.com/introduction) [1]"
      },
      {
       "actor": "AG-UI Channels SDK (OpenTag)",
       "role": "Chat client",
       "status": "Listed",
       "status_display": "Listed · checked 2026-10-30",
       "col4_md": "`OpenTag` serves a Python LangGraph agent over AG-UI into Slack and Microsoft Teams.",
       "source_md": "[AG-UI overview, Clients](https://docs.ag-ui.com/introduction) [1]"
      },
      {
       "actor": "Terminal + Agent",
       "role": "Terminal client",
       "status": "Listed",
       "status_display": "Listed · checked 2026-10-30",
       "col4_md": "Overview lists a terminal client; AG-UI is an event stream, not a web-only renderer.",
       "source_md": "[AG-UI overview, Clients](https://docs.ag-ui.com/introduction) [1]"
      },
      {
       "actor": "React Native",
       "role": "Mobile client",
       "status": "Listed",
       "status_display": "Listed · checked 2026-10-30",
       "col4_md": "Overview lists React Native as Supported, with an Example, and marks it 1st Party.",
       "source_md": "[AG-UI overview, Clients](https://docs.ag-ui.com/introduction) [1]"
      },
      {
       "actor": "Via Operator Console",
       "role": "Internal host",
       "status": "Experimental",
       "status_display": "Experimental · as of 2026-01-07",
       "col4_md": "Via backoffice experiment uses front-end tool calls plus `STATE_SNAPSHOT` and `STATE_DELTA`.",
       "source_md": "[Via, when the frontend got an AI protocol](https://ridewithvia.com/resources/agent-user-interaction-protocol-when-the-frontend-got-an-ai-protocol) [26]"
      },
      {
       "actor": "@ag-ui/core",
       "role": "TypeScript SDK",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-16",
       "col4_md": "npm `@ag-ui/core` latest `1.0.3` sets `protocolVersion` to `1.0`.",
       "source_md": "[npm @ag-ui/core](https://registry.npmjs.org/@ag-ui/core) [18] · [AG-UI 1.0](https://www.copilotkit.ai/blog/ag-ui-1.0) [17]"
      },
      {
       "actor": "ag-ui-protocol",
       "role": "Python SDK",
       "status": "Supported",
       "status_display": "Supported · as of 2026-09-17",
       "col4_md": "PyPI `ag-ui-protocol` `1.0.0` requires Python `>=3.9` and `pydantic>=2.11.2`.",
       "source_md": "[PyPI ag-ui-protocol](https://pypi.org/pypi/ag-ui-protocol/json) [44] · [AG-UI 1.0](https://www.copilotkit.ai/blog/ag-ui-1.0) [17]"
      },
      {
       "actor": "AG-UI .NET SDK",
       "role": "Client and server SDK",
       "status": "Supported",
       "status_display": "Supported · as of 2026-09-25",
       "col4_md": "`AGUI.Server` exposes an endpoint and `AGUI.Client` consumes one; published on NuGet.",
       "source_md": "[AG-UI .NET SDK](https://devblogs.microsoft.com/dotnet/ag-ui-dotnet-sdk/) [35] · [AG-UI overview, SDKs](https://docs.ag-ui.com/introduction) [1]"
      }
     ]
    },
    "additional_tables": [
     {
      "visible": true,
      "heading": "Archived CopilotKit skills adapter bindings",
      "col4_header": "Client class, server adapter, and port",
      "note_md": null,
      "rows": [
       {
        "actor": "LangGraph (Python, self-hosted)",
        "role": "Archived AG-UI adapter binding",
        "status": "Listed integration",
        "status_display": "Listed integration · as of 2026-06-03",
        "col4_md": "Archived Jun 3, 2026 skill `1.0.0`: client `LangGraphHttpAgent` from `@copilotkit/runtime/langgraph`, adapter `ag-ui-langgraph` (`add_langgraph_fastapi_endpoint`), port 8123.",
        "source_md": "[LangGraph (Python, self-hosted)](https://github.com/copilotkit/skills/blob/HEAD/skills/copilotkit-integrations/SKILL.md) [45]"
       },
       {
        "actor": "LangGraph (Python, LangGraph Platform)",
        "role": "Archived AG-UI adapter binding",
        "status": "Listed integration",
        "status_display": "Listed integration · as of 2026-06-03",
        "col4_md": "Archived Jun 3, 2026 skill `1.0.0` (Python): `LangGraphAgent` from `@copilotkit/runtime/langgraph`; adapter LangGraph Platform (managed); port varies.",
        "source_md": "[LangGraph (Python, LangGraph Platform)](https://github.com/copilotkit/skills/blob/HEAD/skills/copilotkit-integrations/SKILL.md) [45]"
       },
       {
        "actor": "LangGraph (JS)",
        "role": "Archived AG-UI adapter binding",
        "status": "Listed integration",
        "status_display": "Listed integration · as of 2026-06-03",
        "col4_md": "Archived Jun 3, 2026 skill `1.0.0` (TypeScript): `LangGraphAgent` from `@copilotkit/runtime/langgraph`; adapter Built into `@copilotkit/sdk-js/langgraph`; port 8123.",
        "source_md": "[LangGraph (JS)](https://github.com/copilotkit/skills/blob/HEAD/skills/copilotkit-integrations/SKILL.md) [45]"
       },
       {
        "actor": "A2A Middleware",
        "role": "Archived AG-UI adapter binding",
        "status": "Listed integration",
        "status_display": "Listed integration · as of 2026-06-03",
        "col4_md": "Archived Jun 3, 2026 skill `1.0.0` (Python + TS): `A2AMiddlewareAgent` from `@ag-ui/a2a-middleware`; adapter Per-agent (mixed frameworks); port 9000-9002.",
        "source_md": "[A2A Middleware](https://github.com/copilotkit/skills/blob/HEAD/skills/copilotkit-integrations/SKILL.md) [45]"
       },
       {
        "actor": "MCP Apps",
        "role": "Archived AG-UI adapter binding",
        "status": "Listed integration",
        "status_display": "Listed integration · as of 2026-06-03",
        "col4_md": "Archived Jun 3, 2026 skill `1.0.0` (TypeScript): `BuiltInAgent` with `MCPAppsMiddleware`; adapter N/A (middleware on BuiltInAgent); port 3108.",
        "source_md": "[MCP Apps](https://github.com/copilotkit/skills/blob/HEAD/skills/copilotkit-integrations/SKILL.md) [45]"
       }
      ]
     }
    ],
    "censuses": [
     {
      "label": "AG-UI overview",
      "as_of": null,
      "value_md": "The AG-UI overview groups Supported Integrations into Direct to LLM, Agent Framework partnerships, 1st party, and community, plus agent interaction protocols, infrastructure, specification, generative UI, SDKs, and clients. It says 1st party means the platforms that have AG-UI built in and provide documentation for guidance. [1]"
     },
     {
      "label": "AG-UI overview",
      "as_of": null,
      "value_md": "Under Agent Framework - Community, the overview lists Claude Agent SDK, Claude Managed Agents SDK, Langroid, Omnara, and Cloudflare Agents as Supported, and the OpenAI Agent SDK as In Progress. Under SDKs it lists Kotlin, Golang, Dart, Java, Rust, Ruby, and C++ as Supported. A2A Middleware is listed as Supported under Agent Interaction Protocols. [1]"
     }
    ],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "open-responses",
     "target_name": "Open Responses",
     "relation_label": "Peer alternative",
     "delta": "Open Responses release 2026-04-24 serves /v1/responses, including a WebSocket whose turns start with response.create, while AG-UI 1.0 requires an HTTP POST and the SSE binding on an implementer-chosen endpoint.",
     "item_md": "**[Open Responses](/protocols/open-responses/)** (Peer alternative) — Open Responses release 2026-04-24 serves /v1/responses, including a WebSocket whose turns start with response.create, while AG-UI 1.0 requires an HTTP POST and the SSE binding on an implementer-chosen endpoint."
    },
    {
     "target_id": "agent-channel-fan-out",
     "target_name": "Agent-Channel Frame for Identity-Keyed Fan-Out Delivery to Concurrent Sessions",
     "relation_label": "Peer alternative",
     "delta": "Fan-out delivers agent-channel frames on per-handle SSE streams addressed by DNS discovery, while AG-UI's required SSE stream follows one HTTP POST of a user-facing run.",
     "item_md": "**[Agent-Channel Frame for Identity-Keyed Fan-Out Delivery to Concurrent Sessions](/protocols/agent-channel-fan-out/)** (Peer alternative) — Fan-out delivers agent-channel frames on per-handle SSE streams addressed by DNS discovery, while AG-UI's required SSE stream follows one HTTP POST of a user-facing run."
    },
    {
     "target_id": "a2wp",
     "target_name": "Agent-to-Wallet Protocol for Digital Credentials",
     "relation_label": "Peer alternative",
     "delta": "A2WP is the agent-to-wallet hand-off of OpenID4VCI and OpenID4VP requests, while AG-UI is an HTTP POST plus a required SSE stream for a user-facing run.",
     "item_md": "**[Agent-to-Wallet Protocol for Digital Credentials](/protocols/a2wp/)** (Peer alternative) — A2WP is the agent-to-wallet hand-off of OpenID4VCI and OpenID4VP requests, while AG-UI is an HTTP POST plus a required SSE stream for a user-facing run."
    },
    {
     "item_md": "**[Present protocols](/category/present/)** — Category index for `present` standards."
    }
   ],
   "v05_compiled_md": "---\nid: ag-ui\ntitle: \"Agent-User Interaction Protocol (AG-UI)\"\ntier: flagship\nlifecycle_status: published_standard\ncategory: present\nform: endpoint\nwire_archetype: harnesses_rpc_ui\nspec_url: https://docs.ag-ui.com/spec/1.0/index\nlast_checked: 2026-11-11\n---\n\n# Agent-User Interaction Protocol (AG-UI)\n\n**Category:** [Present](/category/present/) (`present`) · **Form:** Endpoint (`endpoint`) · **Last checked:** 2026-11-11\n\n> *This page is about the Agent-User Interaction Protocol (AG-UI) originated by CopilotKit. For Google's declarative JSON widget format carried over transports such as AG-UI, see [A2UI](/protocols/a2ui/). For the Model Context Protocol extension (SEP-1865) that renders ui:// HTML resources in sandboxed iframes, see [MCP Apps](/protocols/mcp-apps/). For Zed's JSON-RPC 2.0 protocol for editor-hosted agents, see [Agent Client Protocol](/protocols/agent-client-protocol/). [1][2][3][4][5]*\n\n> **In brief:** Agent-User Interaction Protocol (AG-UI) is a streaming interaction standard that connects backend AI agents to frontend web and mobile interfaces for live chat, tool-call progress, and synchronized application state. Instead of writing custom WebSocket glue and bespoke state-diff logic for every agent framework, a frontend posts a single `RunAgentInput` request and consumes a standardized Server-Sent Events (SSE) stream of typed JSON lifecycle, text, tool, and state events. [1][6][7]\n\n**Agent-User Interaction Protocol** (`AG-UI`) is an open, lightweight, event-based protocol originated by CopilotKit (`* @ag-ui-protocol/copilotkit`) that standardizes the bi-directional runtime connection between user-facing applications and agentic backends. Announced by Nathan Tarbert on 12 May 2025 following repository creation on 2025-05-07, it pairs a single request with an ordered stream of typed events carrying text, tool calls, reasoning, shared state, and progress. [1][8][9][10][11] A consumer opens an exchange by sending a `RunAgentInput` payload over an HTTP POST request, and the producer streams typed events back over a mandatory Server-Sent Events (SSE) JSON binding or an optional length-prefixed protobuf binary response. [6][8] AG-UI 1.0—the first release backed by a formal specification—was officially released and frozen on 2026-09-18, with future evolution occurring through new draft specifications while the 1.0 specification remains unchanged. The 1.0 release also retires the 0.x `THINKING_*` events in favor of the reasoning family. [12][13][14]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Present](/category/present/) (`present`) |\n| **Form** | Endpoint (`endpoint`) |\n| **Originated by** | CopilotKit (Nathan Tarbert), announced 2025-05-12; repository created 2025-05-07 [9][10][15] |\n| **Governed by** | CopilotKit team (`* @ag-ui-protocol/copilotkit` in CODEOWNERS); biweekly AG-UI Working Group [11][15][16] |\n| **Track** | Open vendor-originated specification (CopilotKit / AG-UI open community specification) [12][17] |\n| **Status** | 1.0 released and frozen on 2026-09-18; the 1.0 specification will remain unchanged [12] |\n| **Version** | Spec 1.0 modified 2026-09-17; 1.1 draft listed; main `@ag-ui/core` `1.0.4` (`protocolVersion` `1.0`); npm latest `1.0.3`; fetched releases list leads with `release/2026-10-30` [8][10][18][19][20] |\n| **Transports** | HTTP POST input; SSE binding MUST; protobuf binding OPTIONAL; WebSockets and other channels MAY [6] |\n| **Message format** | Ordered typed events in eight families; only the run lifecycle is mandatory for a producer [21] |\n| **Specification** | [Specification 1.0](https://docs.ag-ui.com/spec/1.0/index) [8] |\n| **Found at** | HTTP POST that delivers `RunAgentInput` before any events [6] |\n| **Licence** | MIT (Copyright (c) 2025) [10][22] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Run lifecycle, event families, and streaming messages](#run-lifecycle-event-families-and-streaming-messages)\n3. [State synchronization, JSON Patch deltas, and transport bindings](#state-synchronization-json-patch-deltas-and-transport-bindings)\n4. [Counterparts and related standards](#counterparts-and-related-standards)\n5. [Adoption and ecosystem](#adoption-and-ecosystem)\n6. [See also](#see-also)\n7. [References](#references)\n\n---\n\n## Problem and scope\n\nConnecting an agent backend to a real-time UI used to mean custom SSE handlers, proprietary event schemas, and hand-rolled state sync. [7] Every message from a producer arrives as a typed event belonging to one of eight event families, of which only the run lifecycle family is mandatory for a producer to emit. [21] A consumer must accept all eight families, treating any event from a family it does not use as a well-formed event rather than unrecognized material. [21] AG-UI defines no credential; authentication and authorization remain properties of the transport binding and host application rather than the protocol. [6] Rather than defining a generative UI widget format of its own, `AG-UI` provides the user-facing interaction layer alongside `MCP` (which connects agents to tools and context) and `A2A` (which connects agents to other agents). [2][23]\n\n### Transport binding\n\n```mermaid\nsequenceDiagram\n  participant Consumer\n  participant Producer\n  Consumer->>Producer: HTTP POST carrying the run input\n  Note over Producer: RunAgentInput opens the exchange before any events\n  Producer-->>Consumer: SSE frames carrying JSON\n  alt closed run\n    Producer-->>Consumer: terminal event\n  else truncated run\n    Note over Consumer: MUST NOT synthesize a RUN_FINISHED\n  end\n```\n\n*The consumer sends an HTTP POST carrying `RunAgentInput`. The producer returns SSE frames carrying JSON. A closed run ends after a terminal event. A truncated run must not synthesize `RUN_FINISHED`. [6]*\n\n### `RUN_STARTED` event the 1.0 producer must declare\n\n```ts\nimport { EventType, PROTOCOL_VERSION, type RunStartedEvent } from \"@ag-ui/core\";\n\nconst runStarted: RunStartedEvent = {\n  type: EventType.RUN_STARTED,\n  threadId: input.threadId,\n  runId: input.runId,\n  protocolVersion: PROTOCOL_VERSION,\n};\n```\n\n*A 1.0 producer declares `EventType.RUN_STARTED` with `threadId`, `runId`, and `protocolVersion`. [13]*\n\n---\n\n## Run lifecycle, event families, and streaming messages\n\nWithin the eight-family event stream, run and step execution is bracketed by five lifecycle event types: `RUN_STARTED`, `RUN_FINISHED`, `RUN_ERROR`, `STEP_STARTED`, and `STEP_FINISHED`. [21]\n\n- **RunAgentInput request fields:** The single-file JSON Schema (`schema.json`) defines every event and the `RunAgentInput` request payload describing message history, state, and available tools. Consumers declare `RunAgentInput.protocolVersion` and producers answer on `RUN_STARTED.protocolVersion`; a typical request payload carries `threadId`, `runId`, `state`, `messages`, `tools`, `context`, and `forwardedProps`. [14][17][24][25]\n- **Mandatory run lifecycle events:** A 1.0 producer must declare the protocol version it speaks on `RUN_STARTED`. `RUN_FINISHED` carries an optional outcome field (`success` or absent for normal completion, `interrupt` when awaiting external input, and `cancelled` when stopped intentionally), and a late `RUN_ERROR` after `RUN_FINISHED` is permitted if a post-completion failure surfaces. [13][14][21]\n- **Streaming text and reasoning:** Streaming text uses `TEXT_MESSAGE_START`, `TEXT_MESSAGE_CONTENT`, and `TEXT_MESSAGE_END`. In 1.0, the five 0.x `THINKING_*` events are replaced by `REASONING_*` equivalents matched by `messageId`, and a `REASONING_MESSAGE_END` referencing an unopened message fails the run. [13][14][26]\n- **Tool-call lifecycle:** Under AG-UI's tool-call model, the agent proposes and the application disposes through `TOOL_CALL_START`, `TOOL_CALL_ARGS`, and `TOOL_CALL_END`, while `TOOL_CALL_RESULT` is a standalone message that does not reopen the call it answers. Opening chunks must carry `messageId` for text or `toolCallId` and `toolCallName` for tool calls, whereas subsequent chunks may omit them. [14][21][26]\n\n---\n\n## State synchronization, JSON Patch deltas, and transport bindings\n\nThe state event family comprises `STATE_SNAPSHOT`, `STATE_DELTA`, and `MESSAGES_SNAPSHOT`, providing a snapshot-and-delta synchronization model that replaces or amends shared application state and conversation history. [21] For state synchronization, `STATE_DELTA` events use JSON Patch (`RFC 6902`), an established format for describing changes to a JSON document. The agent sends a diff instead of its full state on every update. [7]\n\n- **Full state versus JSON Patch:** `STATE_SNAPSHOT` delivers the complete state object to the client, whereas `STATE_DELTA` streams incremental updates as RFC 6902 JSON Patch operations. Applications must model shared state explicitly up front; in 1.0 SDKs, typed attributes `patch.path` and `patch.op` replace dictionary reads while `from` remains the wire key on move and copy operations. [7][13][26]\n- **Message history snapshots:** `MESSAGES_SNAPSHOT` belongs to the optional state family and replaces the conversation transcript in the application store. In Microsoft Agent Framework, `AgentFrameworkAgent` emits a terminal `MESSAGES_SNAPSHOT` containing the full transcript by default; setting `emit_messages_snapshot=False` suppresses that terminal rewrite while leaving `RUN_FINISHED` and other streamed events unchanged. [21][27]\n- **HTTP, binary, and webhook transports:** Over HTTP, implementations must support the SSE JSON binding in response to the `RunAgentInput` POST and may optionally negotiate length-prefixed protobuf binary frames. If a stream terminates early, a consumer must not synthesize a `RUN_FINISHED` event; middleware also supports WebSockets and webhooks. [6][15]\n- **Protocol handshakes and generative UI:** Protocol handshakes allow `AG-UI` to front for agents communicating over `MCP` and `A2A` so a single agent can use all three protocols simultaneously. Because `AG-UI` is a runtime interaction transport rather than a widget schema, it natively carries declarative generative UI specifications such as `A2UI`. [2][23]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **Server-Sent Events (WHATWG HTML)** | `WHATWG HTML` | Profiles classic standard | HTTP run input is a POST; an HTTP implementation MUST support SSE, and protobuf is OPTIONAL. [6] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[A2UI (Agent to UI) Protocol](/protocols/a2ui/)** | Complements | A2UI v1.0 delivers declarative UI widgets via `createSurface`, `updateComponents`, `updateDataModel`, and `deleteSurface`; AG-UI connects agentic frontends to agentic backends and natively transports A2UI surfaces. [1][2][28] |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | MCP links LLM apps to tools with JSON-RPC 2.0; AG-UI links agents to users as a complementary protocol. [23][29] |\n| **[MCP Apps](/protocols/mcp-apps/)** | Peer alternative | MCP Apps (SEP-1865) renders ui:// HTML resources in sandboxed iframes; AG-UI streams typed events between an agent backend and a frontend. [3][4][30] |\n| **[Agent2Agent Protocol (A2A)](/protocols/a2a/)** | Complements | A2A publishes an Agent Card and defines JSON-RPC, gRPC, and HTTP+JSON/REST; AG-UI connects agents to users. [23][31] |\n| **[Agent Client Protocol](/protocols/agent-client-protocol/)** | Peer alternative | ACP is Zed's JSON-RPC 2.0 subprocess-agent protocol; AG-UI uses one request and one ordered event stream. [5][8][32] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (27 probed or cited examples across 3 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).*\n\n### Agent frameworks, servers & backend integrations\n\n| Actor | Role | Status | Transport & Scope | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Amazon Bedrock AgentCore Runtime** | Agent server | Supported · as of 2026-03-13 | Port `8080`: `/invocations` HTTP/SSE and `/ws` WebSocket; runtime auth is `SigV4` or `OAuth 2.0`. | [Deploy AG-UI servers in AgentCore Runtime](https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/runtime-agui.html) [25] · [What's New, 2026-03-13](https://aws.amazon.com/about-aws/whats-new/2026/03/amazon-bedrock-agentcore-runtime-ag-ui-protocol/) [33] · [AG-UI overview, Supported Integrations](https://docs.ag-ui.com/introduction) [1] |\n| **AWS Strands Agents** | Agent framework | Listed · checked 2026-10-30 | Overview lists AWS Strands Agents as Supported under Agent Framework - 1st Party. | [AG-UI overview, Supported Integrations](https://docs.ag-ui.com/introduction) [1] |\n| **Microsoft Agent Framework** | Agent framework | Supported · as of 2026-09-25 | `MapAGUIServer` SSE adapter via `Microsoft.Agents.AI.Hosting.AGUI.AspNetCore` (`--prerelease`). | [AG-UI integration with Agent Framework](https://learn.microsoft.com/en-us/agent-framework/integrations/by-component/ui/ag-ui/) [27] · [.NET 10 announcement](https://devblogs.microsoft.com/dotnet/announcing-dotnet-10/) [34] · [AG-UI .NET SDK](https://devblogs.microsoft.com/dotnet/ag-ui-dotnet-sdk/) [35] · [AG-UI overview, Supported Integrations](https://docs.ag-ui.com/introduction) [1] |\n| **Google Agent Development Kit** | Agent framework | Supported · as of 2025-09-26 | ADK covers streaming events, client state, and bi-directional traffic; overview lists ADK and ADK JavaScript. | [ADK agents with AG-UI frontends](https://developers.googleblog.com/en/delight-users-by-combining-adk-agents-with-fancy-frontends-using-ag-ui/) [36] · [AG-UI user interface for ADK](https://adk.dev/integrations/ag-ui/) [37] · [AG-UI overview, Supported Integrations](https://docs.ag-ui.com/introduction) [1] |\n| **Google Antigravity** | Agent framework | Listed · checked 2026-10-30 | Overview lists Google Antigravity as Supported under Agent Framework - 1st Party. | [AG-UI overview, Supported Integrations](https://docs.ag-ui.com/introduction) [1] |\n| **Pydantic AI** | Agent framework | Supported · checked 2026-10-30 | `AGUIAdapter.dispatch_request()` and `run_stream()` return a stream of AG-UI events. | [Pydantic AI AG-UI integration](https://pydantic.dev/docs/ai/integrations/ui/ag-ui/) [24] · [AG-UI overview, Supported Integrations](https://docs.ag-ui.com/introduction) [1] |\n| **CrewAI** | Agent framework | Supported · checked 2026-10-30 | `ag-ui-crewai` exposes a Crew or Flow over FastAPI for CopilotKit React hooks. | [CrewAI frontend overview](https://docs.crewai.com/edge/en/guides/frontend/overview) [38] · [AG-UI overview, Supported Integrations](https://docs.ag-ui.com/introduction) [1] |\n| **Mastra** | Agent framework | Supported · checked 2026-10-30 | `@ag-ui/mastra` exposes Mastra agents; `registerCopilotKit()` adds the CopilotKit route. | [Mastra CopilotKit integration](https://mastra.ai/integrations/agentic-ui/copilotkit) [39] · [AG-UI overview, Supported Integrations](https://docs.ag-ui.com/introduction) [1] |\n| **Oracle Agent Spec** | Agent framework | Supported · as of 2025-12-18 | JSON Agent Spec config keeps `LangGraph` or `WayFlow`; adapter maps tracing to AG-UI events. | [Use AG-UI with Agent Spec](https://oracle.github.io/agent-spec/development/howtoguides/howto_ag_ui.html) [40] · [Oracle adopts AG-UI](https://www.copilotkit.ai/blog/oracle-adopts-ag-ui-protocol-for-agent-spec) [41] · [AG-UI overview, Supported Integrations](https://docs.ag-ui.com/introduction) [1] |\n| **LangChain** | Agent framework | Listed · checked 2026-10-30 | Overview lists LangChain as Supported; AG-UI began with the CopilotKit, LangChain, and CrewAI partnership. | [AG-UI overview, Supported Integrations](https://docs.ag-ui.com/introduction) [1] |\n| **LlamaIndex** | Agent framework | Listed · checked 2026-10-30 | Overview lists LlamaIndex as Supported under Agent Framework - 1st Party, with Docs and Demos. | [AG-UI overview, Supported Integrations](https://docs.ag-ui.com/introduction) [1] |\n| **Agno** | Agent framework | Listed · checked 2026-10-30 | Overview lists Agno as Supported under Agent Framework - 1st Party, with Docs and Demos. | [AG-UI overview, Supported Integrations](https://docs.ag-ui.com/introduction) [1] |\n| **AG2** | Agent framework | Listed · checked 2026-10-30 | Overview lists AG2 as Supported under Agent Framework - 1st Party, with Docs and Demos. | [AG-UI overview, Supported Integrations](https://docs.ag-ui.com/introduction) [1] |\n| **Amazon Nova Act** | Reference architecture | Supported (release announcement) · as of 2026-09-29 | 29 SEP 2026 Architecture Blog post shows adaptive interfaces built with the AG-UI protocol, the Strands Agents SDK Swarm pattern, and Amazon Nova Act. | [AWS Architecture Blog (29 SEP 2026)](https://aws.amazon.com/blogs/architecture/build-adaptive-ai-interfaces-with-the-ag-ui-protocol-agent-swarms-and-nova-act-on-aws/) [42] |\n\n### Frontend UI clients, renderers & client SDKs\n\n| Actor | Role | Status | Transport & Scope | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **CopilotKit** | Frontend client | Supported · checked 2026-10-30 | Client quickstart names CopilotKit for production; the overview lists it as 1st Party. | [AG-UI client quickstart](https://docs.ag-ui.com/quickstart/clients) [43] · [AG-UI overview, Supported Integrations](https://docs.ag-ui.com/introduction) [1] |\n| **AG-UI Channels SDK (OpenTag)** | Chat client | Listed · checked 2026-10-30 | `OpenTag` serves a Python LangGraph agent over AG-UI into Slack and Microsoft Teams. | [AG-UI overview, Clients](https://docs.ag-ui.com/introduction) [1] |\n| **Terminal + Agent** | Terminal client | Listed · checked 2026-10-30 | Overview lists a terminal client; AG-UI is an event stream, not a web-only renderer. | [AG-UI overview, Clients](https://docs.ag-ui.com/introduction) [1] |\n| **React Native** | Mobile client | Listed · checked 2026-10-30 | Overview lists React Native as Supported, with an Example, and marks it 1st Party. | [AG-UI overview, Clients](https://docs.ag-ui.com/introduction) [1] |\n| **Via Operator Console** | Internal host | Experimental · as of 2026-01-07 | Via backoffice experiment uses front-end tool calls plus `STATE_SNAPSHOT` and `STATE_DELTA`. | [Via, when the frontend got an AI protocol](https://ridewithvia.com/resources/agent-user-interaction-protocol-when-the-frontend-got-an-ai-protocol) [26] |\n| **@ag-ui/core** | TypeScript SDK | Supported · as of 2026-10-16 | npm `@ag-ui/core` latest `1.0.3` sets `protocolVersion` to `1.0`. | [npm @ag-ui/core](https://registry.npmjs.org/@ag-ui/core) [18] · [AG-UI 1.0](https://www.copilotkit.ai/blog/ag-ui-1.0) [17] |\n| **ag-ui-protocol** | Python SDK | Supported · as of 2026-09-17 | PyPI `ag-ui-protocol` `1.0.0` requires Python `>=3.9` and `pydantic>=2.11.2`. | [PyPI ag-ui-protocol](https://pypi.org/pypi/ag-ui-protocol/json) [44] · [AG-UI 1.0](https://www.copilotkit.ai/blog/ag-ui-1.0) [17] |\n| **AG-UI .NET SDK** | Client and server SDK | Supported · as of 2026-09-25 | `AGUI.Server` exposes an endpoint and `AGUI.Client` consumes one; published on NuGet. | [AG-UI .NET SDK](https://devblogs.microsoft.com/dotnet/ag-ui-dotnet-sdk/) [35] · [AG-UI overview, SDKs](https://docs.ag-ui.com/introduction) [1] |\n\n### Archived CopilotKit skills adapter bindings\n\n| Actor | Role | Status | Client class, server adapter, and port | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **LangGraph (Python, self-hosted)** | Archived AG-UI adapter binding | Listed integration · as of 2026-06-03 | Archived Jun 3, 2026 skill `1.0.0`: client `LangGraphHttpAgent` from `@copilotkit/runtime/langgraph`, adapter `ag-ui-langgraph` (`add_langgraph_fastapi_endpoint`), port 8123. | [LangGraph (Python, self-hosted)](https://github.com/copilotkit/skills/blob/HEAD/skills/copilotkit-integrations/SKILL.md) [45] |\n| **LangGraph (Python, LangGraph Platform)** | Archived AG-UI adapter binding | Listed integration · as of 2026-06-03 | Archived Jun 3, 2026 skill `1.0.0` (Python): `LangGraphAgent` from `@copilotkit/runtime/langgraph`; adapter LangGraph Platform (managed); port varies. | [LangGraph (Python, LangGraph Platform)](https://github.com/copilotkit/skills/blob/HEAD/skills/copilotkit-integrations/SKILL.md) [45] |\n| **LangGraph (JS)** | Archived AG-UI adapter binding | Listed integration · as of 2026-06-03 | Archived Jun 3, 2026 skill `1.0.0` (TypeScript): `LangGraphAgent` from `@copilotkit/runtime/langgraph`; adapter Built into `@copilotkit/sdk-js/langgraph`; port 8123. | [LangGraph (JS)](https://github.com/copilotkit/skills/blob/HEAD/skills/copilotkit-integrations/SKILL.md) [45] |\n| **A2A Middleware** | Archived AG-UI adapter binding | Listed integration · as of 2026-06-03 | Archived Jun 3, 2026 skill `1.0.0` (Python + TS): `A2AMiddlewareAgent` from `@ag-ui/a2a-middleware`; adapter Per-agent (mixed frameworks); port 9000-9002. | [A2A Middleware](https://github.com/copilotkit/skills/blob/HEAD/skills/copilotkit-integrations/SKILL.md) [45] |\n| **MCP Apps** | Archived AG-UI adapter binding | Listed integration · as of 2026-06-03 | Archived Jun 3, 2026 skill `1.0.0` (TypeScript): `BuiltInAgent` with `MCPAppsMiddleware`; adapter N/A (middleware on BuiltInAgent); port 3108. | [MCP Apps](https://github.com/copilotkit/skills/blob/HEAD/skills/copilotkit-integrations/SKILL.md) [45] |\n\n### Ecosystem censuses\n\n- **AG-UI overview**: The AG-UI overview groups Supported Integrations into Direct to LLM, Agent Framework partnerships, 1st party, and community, plus agent interaction protocols, infrastructure, specification, generative UI, SDKs, and clients. It says 1st party means the platforms that have AG-UI built in and provide documentation for guidance. [1]\n- **AG-UI overview**: Under Agent Framework - Community, the overview lists Claude Agent SDK, Claude Managed Agents SDK, Langroid, Omnara, and Cloudflare Agents as Supported, and the OpenAI Agent SDK as In Progress. Under SDKs it lists Kotlin, Golang, Dart, Java, Rust, Ruby, and C++ as Supported. A2A Middleware is listed as Supported under Agent Interaction Protocols. [1]\n\n---\n\n## See also\n\n- **[Open Responses](/protocols/open-responses/)** *(Peer alternative)* — Open Responses release 2026-04-24 serves /v1/responses, including a WebSocket whose turns start with response.create, while AG-UI 1.0 requires an HTTP POST and the SSE binding on an implementer-chosen endpoint.\n- **[Agent-Channel Frame for Identity-Keyed Fan-Out Delivery to Concurrent Sessions](/protocols/agent-channel-fan-out/)** *(Peer alternative)* — Fan-out delivers agent-channel frames on per-handle SSE streams addressed by DNS discovery, while AG-UI's required SSE stream follows one HTTP POST of a user-facing run.\n- **[Agent-to-Wallet Protocol for Digital Credentials](/protocols/a2wp/)** *(Peer alternative)* — A2WP is the agent-to-wallet hand-off of OpenID4VCI and OpenID4VP requests, while AG-UI is an HTTP POST plus a required SSE stream for a user-facing run.\n- **Category:** [Present protocols](/category/present/)\n\n---\n\n## References\n\n1. CopilotKit, *AG-UI Overview* (modified 2026-10-28) — <https://docs.ag-ui.com/introduction>\n2. CopilotKit, *Generative UI* (modified 2026-01-23) — <https://docs.ag-ui.com/concepts/generative-ui-specs>\n3. Model Context Protocol, *SEP-1865: MCP Apps - Interactive User Interfaces for MCP* (modified 2026-07-31) — <https://modelcontextprotocol.io/seps/1865-mcp-apps-interactive-user-interfaces-for-mcp>\n4. CopilotKit, *Integrations* (modified 2026-10-16) — <https://docs.ag-ui.com/integrations>\n5. Nathan Sobo (Zed), *Bring Your Own Agent to Zed — Featuring Gemini CLI* (published 2025-08-27) — <https://zed.dev/blog/bring-your-own-agent-to-zed>\n6. CopilotKit, *Transports (1.0)* (modified 2026-09-17) — <https://docs.ag-ui.com/spec/1.0/basic/transports/index>\n7. Michał Pasierbski (Practically Agents), *Bridging Agents to UI: How AG-UI and CopilotKit Make It Stupidly Easy* (published 2026-02-25) — <https://practicallyagents.com/articles/the-agent-ui-gap-ag-ui-and-copilotkit/>\n8. CopilotKit, *Specification 1.0* (modified 2026-09-17) — <https://docs.ag-ui.com/spec/1.0/index>\n9. Nathan Tarbert (CopilotKit), *Introducing AG-UI: The Protocol Where Agents Meet Users* (published 2025-05-12) — <https://www.copilotkit.ai/blog/introducing-ag-ui-the-protocol-where-agents-meet-users>\n10. AG-UI Protocol, *ag-ui-protocol/ag-ui repository* (created 2025-05-07; updated 2026-10-30) — <https://github.com/ag-ui-protocol/ag-ui>\n11. ag-ui-protocol/ag-ui, *.github/CODEOWNERS* (checked 2026-10-28) — <https://github.com/ag-ui-protocol/ag-ui/blob/main/.github/CODEOWNERS>\n12. mme (ag-ui-protocol/ag-ui), *AG-UI 1.0 is officially released* (created 2026-09-18) — <https://github.com/ag-ui-protocol/ag-ui/discussions/2792>\n13. CopilotKit, *Migrating to 1.0* (modified 2026-10-26) — <https://docs.ag-ui.com/migrating-to-1-0>\n14. CopilotKit, *Key Changes (1.0 against 0.x)* (modified 2026-09-17) — <https://docs.ag-ui.com/spec/1.0/changelog>\n15. ag-ui-protocol/ag-ui, *README.md* (checked 2026-10-28) — <https://github.com/ag-ui-protocol/ag-ui/blob/main/README.md>\n16. ag-ui-protocol/ag-ui, *CONTRIBUTING.md* (checked 2026-10-28) — <https://github.com/ag-ui-protocol/ag-ui/blob/main/CONTRIBUTING.md>\n17. Anmol Baranwal and Eli Berman (CopilotKit), *Introducing AG-UI 1.0: a stable spec for connecting any agent to any application* (published 2026-09-30) — <https://www.copilotkit.ai/blog/ag-ui-1.0>\n18. Markus Ecker, *@ag-ui/core* (latest 1.0.3 published 2026-10-16) — <https://registry.npmjs.org/@ag-ui/core>\n19. ag-ui-protocol/ag-ui, *GitHub releases* (release/2026-10-30 published 2026-10-30) — <https://github.com/ag-ui-protocol/ag-ui/releases>\n20. Markus Ecker (ag-ui-protocol), *@ag-ui/core package.json* (version 1.0.4; protocolVersion 1.0; fetched 2026-11-11) — <https://raw.githubusercontent.com/ag-ui-protocol/ag-ui/main/sdks/typescript/packages/core/package.json>\n21. CopilotKit, *Event Streams (1.0)* (modified 2026-09-17) — <https://docs.ag-ui.com/spec/1.0/events/index>\n22. ag-ui-protocol/ag-ui, *ag-ui-protocol/ag-ui — LICENSE* (Copyright (c) 2025) — <https://github.com/ag-ui-protocol/ag-ui/blob/main/LICENSE>\n23. CopilotKit, *MCP, A2A, and AG-UI* (modified 2026-05-15) — <https://docs.ag-ui.com/agentic-protocols>\n24. Pydantic, *Agent-User Interaction (AG-UI) Protocol* (checked 2026-10-28) — <https://pydantic.dev/docs/ai/integrations/ui/ag-ui/>\n25. Amazon Web Services, *Deploy AG-UI servers in AgentCore Runtime* (fetched 2026-10-30) — <https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/runtime-agui.html>\n26. Roi Dannon (Via), *Agent-User Interaction Protocol: When the frontend got an AI protocol* (published 2026-01-07; modified 2026-02-26) — <https://ridewithvia.com/resources/agent-user-interaction-protocol-when-the-frontend-got-an-ai-protocol>\n27. Microsoft, *AG-UI Integration with Agent Framework* (modified 2026-10-23) — <https://learn.microsoft.com/en-us/agent-framework/integrations/by-component/ui/ag-ui/>\n28. A2UI Project (Google), *A2UI Protocol v1.0 Specification* (version 1.0; last updated 2026-06-08) — <https://a2ui.org/specification/v1.0-a2ui/>\n29. Model Context Protocol, *Model Context Protocol specification (2026-07-28)* (version 2026-07-28) — <https://modelcontextprotocol.io/specification/2026-07-28>\n30. modelcontextprotocol/ext-apps, *MCP Apps specification (2026-01-26)* (dated 2026-01-26) — <https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/2026-01-26/apps.mdx>\n31. A2A Protocol (The Linux Foundation), *Agent2Agent (A2A) protocol specification* (copyright 2026) — <https://a2a-protocol.org/latest/specification/>\n32. Zed, *Agent Client Protocol v1 overview* (modified 2026-10-30) — <https://agentclientprotocol.com/protocol/v1/overview>\n33. Amazon Web Services, *Amazon Bedrock AgentCore Runtime now supports the AG-UI protocol* (published 2026-03-13) — <https://aws.amazon.com/about-aws/whats-new/2026/03/amazon-bedrock-agentcore-runtime-ag-ui-protocol/>\n34. .NET Team (Microsoft), *Announcing .NET 10* (published 2025-11-11; modified 2026-06-08) — <https://devblogs.microsoft.com/dotnet/announcing-dotnet-10/>\n35. Daniel Roth (Microsoft), *AG-UI Protocol now has a first-class .NET SDK* (published 2026-09-25) — <https://devblogs.microsoft.com/dotnet/ag-ui-dotnet-sdk/>\n36. Alan Blount (Google), *Delight users by combining ADK Agents with Fancy Frontends using AG-UI* (published 2025-09-26) — <https://developers.googleblog.com/en/delight-users-by-combining-adk-agents-with-fancy-frontends-using-ag-ui/>\n37. Google Agent Development Kit, *AG-UI user interface for ADK* (checked 2026-10-28) — <https://adk.dev/integrations/ag-ui/>\n38. CrewAI, *Frontend Overview* (modified 2026-08-31) — <https://docs.crewai.com/edge/en/guides/frontend/overview>\n39. Mastra, *CopilotKit (Agentic UI)* (checked 2026-10-28) — <https://mastra.ai/integrations/agentic-ui/copilotkit>\n40. Oracle (PyAgentSpec), *How to Use AG-UI with Agent Spec* (checked 2026-10-28) — <https://oracle.github.io/agent-spec/development/howtoguides/howto_ag_ui.html>\n41. Nathan Tarbert and Eli Berman (CopilotKit), *Oracle adopts AG-UI protocol for Agent Spec* (published 2025-12-18) — <https://www.copilotkit.ai/blog/oracle-adopts-ag-ui-protocol-for-agent-spec>\n42. Anand Bilgaiyan and Renjith Pillai (AWS Architecture Blog), *Build adaptive AI interfaces with the AG-UI protocol, agent swarms, and Nova Act on AWS* (29 SEP 2026; fetched 2026-11-11) — <https://aws.amazon.com/blogs/architecture/build-adaptive-ai-interfaces-with-the-ag-ui-protocol-agent-swarms-and-nova-act-on-aws/>\n43. CopilotKit, *Build clients* (modified 2026-08-05) — <https://docs.ag-ui.com/quickstart/clients>\n44. Markus Ecker, *ag-ui-protocol* (1.0.0 uploaded 2026-09-17) — <https://pypi.org/pypi/ag-ui-protocol/json>\n45. CopilotKit, *CopilotKit integrations skill (archived Jun 3, 2026)* (checked 2026-11-06) — <https://github.com/copilotkit/skills/blob/HEAD/skills/copilotkit-integrations/SKILL.md>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "Ossie",
   "adoption": {
    "level": "observed",
    "by": "dbt, Cube, Honeydew, Snowflake, and Veezoo",
    "probe_run": null
   },
   "aliases": [
    "Open Semantic Interchange",
    "Apache Ossie"
   ],
   "analog": "a shared data dictionary made machine-readable, distributed like a schema file rather than an API",
   "collisions": [
    "Open Source Initiative (osi.org)"
   ],
   "discovery": {
    "mechanism": "No fixed web path: Ossie files are exchanged between tools. Probe file: https://raw.githubusercontent.com/apache/ossie/main/core-spec/ossie-schema.json, which requires `\"const\": \"0.2.0.dev0\"`",
    "path": null
   },
   "dispute": {
    "claims": [
     "Marketing claims the spec is 'finalized'; the repository's own version marker says draft/unreleased.",
     "track=community is a placeholder; the real governance is 'ASF Incubator podling,' which the current vocab does not model."
    ],
    "summary": "Snowflake's January 2026 post is titled 'OSI Specification Finalized,' but the specification text in the repository is versioned 0.2.0.dev0 and explicitly marked DRAFT, with the only tagged release a release-candidate (osi-0.1.1-rc1). 'Finalized' appears to describe the *initial publication* of a spec document, not a stable/final version number. Separately, vocab.json has no track value for 'Apache Software Foundation incubator project' distinct from 'linux-foundation' (LF-specific) or 'industry-body' (trade association); 'community' was chosen as the least-wrong fit but understates that Ossie now has ASF Incubator governance (mentors, PPMC, a defined graduation process) rather than no formal governance."
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://raw.githubusercontent.com/apache/ossie/main/core-spec/spec.md",
     "claim": "Apache Software Foundation, *Apache Ossie Core Metadata Specification*, checked 2026-10-30",
     "date": null,
     "quote": "Each JSON or YAML document represents exactly one semantic model. A standalone document must contain version, name, and a non-empty datasets array. For bulk exchange, use separate model documents. This specification does not define a bundle format or cross-model references. / Each JSON or YAML document represents exactly one semantic model. / A standalone document must contain `version`, `name`, and a non-empty `datasets` array. / Here's a complete semantic model example showing all components working together: / DRAFT version — in development, schema may change before 0.2.0 is released. / 0.2.0.dev0 (Unreleased): In-development next minor release. Schema is mutable; do not depend on this version in production. / # Apache Ossie - Core Metadata Specification DRAFT version - in development, schema may / custom_extensions: - vendor_name: DBT data: '{\"project_name\": \"tpcds_analytics\", \"models_path\": \"models/semantic\"}' The same document structure in / An Ossie model has three levels of names: / Metrics and relationships do not reach through a dataset to its source columns, so a dataset that declares no fields exposes nothing to them. / A dataset-scoped metric's expression MUST reference only the declared fields of the dataset that declares it, written by single-part (unqualified) name / It MUST NOT reference a field of another dataset; a metric that must do so is model-scoped and MUST be declared in the model-root `metrics`. / This specification does not define a bundle format or cross-model references. / For bulk exchange, use separate model documents. / This version of the specification does not support: / Future versions may add these.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://raw.githubusercontent.com/apache/ossie/main/README.md",
     "claim": "Apache Software Foundation, *Apache Ossie README*, checked 2026-10-30",
     "date": null,
     "quote": "Apache Ossie was formerly known as Open Semantic Interchange (OSI). Apache Ossie provides a single JSON- and YAML-based specification that any tool can read and write / addressing the semantic fragmentation common across today's data stack: the same KPI defined differently across tools, teams spending significant effort manually reconciling definitions, and AI agents producing unreliable outputs grounded in inconsistent business logic.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://www.snowflake.com/en/news/press-releases/snowflake-salesforce-dbt-labs-and-more-revolutionize-data-readiness-for-ai-with-open-semantic-interchange-initiative/",
     "claim": "Snowflake, *Snowflake announcement of the Open Semantic Interchange initiative*, checked 2026-10-30",
     "date": null,
     "quote": "September 23, 2025 - Snowflake (NYSE: SNOW), the AI Data Cloud company in partnership with leading industry partners and ecosystem vendors, including Salesforce, BlackRock, dbt Labs, and RelationalAI, announced a bold commitment to lead the Open Semantic Interchange (OSI), a new open source initiative. / September 23, 2025 – Snowflake (NYSE: SNOW), the AI Data Cloud company in partnership with leading industry partners and ecosystem vendors, including Salesforce, BlackRock, dbt Labs, and RelationalAI, announced a bold commitment to lead the Open Semantic Interchange (OSI), a new open source initiative.",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://incubator.apache.org/projects/ossie.html",
     "claim": "Apache Software Foundation, *Apache Ossie incubation status*, checked 2026-10-30",
     "date": null,
     "quote": "Apache Ossie comes from Open Semantic Interchange. It is an open specification that defines a vendor-neutral format for expressing business metrics, dimensions, and their relationships. / FAQ IPMC Chair Mailing Lists Incubator Website ASF How Apache Works Developer Documentation Foundation",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://github.com/apache/ossie/discussions/80",
     "claim": "Apache Software Foundation, *OSI specification version change (discussion 80)*, checked 2026-10-30",
     "date": null,
     "quote": "We are updating the published OSI specification version from 1.0 to 0.1.1, effective March 6th. / Assigning it version 1.0 implies a level of stability and completeness that does not match our current goals. / khush-bhatia Feb 27, 2026",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://www.thoughtspot.com/blog/apache-ossie",
     "claim": "ThoughtSpot, *Advancing ThoughtSpot's Commitment to Apache Ossie (Incubating), the Next Chapter of OSI*, checked 2026-10-30",
     "date": null,
     "quote": "Google Slides ThoughtSpot in Salesforce SolutionsSolutions Role Business Leader Data Leader Data Analyst Product",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://raw.githubusercontent.com/apache/ossie/main/DISCLAIMER",
     "claim": "Apache Software Foundation, *Apache Ossie incubation disclaimer*, checked 2026-10-30",
     "date": null,
     "quote": "Apache Ossie is an effort undergoing incubation at the Apache Software Foundation (ASF), sponsored by the Apache Incubator PMC. / Apache Ossie is an effort undergoing incubation at the Apache Software Foundation (ASF)",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://incubator.apache.org/clutch/ossie.html",
     "claim": "Apache Software Foundation, *Apache Ossie Clutch report*, checked 2026-10-30",
     "date": null,
     "quote": "Update: 2026-07-16 Reporting: March, June, September, December Committers: 17 PPMC members: 7 Mentors: Jean-Baptiste / Apache Ossie (Incubating) --> Toggle navigation Apache Incubator Policies Incubation Policy Intellectual Property Clearance",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://github.com/apache/ossie",
     "claim": "Apache Software Foundation, *GitHub repository record apache/ossie*, checked 2026-10-30",
     "date": null,
     "quote": "\"full_name\": \"apache/ossie\" / \"spdx_id\": \"Apache-2.0\"",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://raw.githubusercontent.com/apache/ossie/main/core-spec/ossie-schema.json",
     "claim": "Apache Software Foundation, *Apache Ossie core JSON Schema*, checked 2026-10-30",
     "date": null,
     "quote": "30 Oct 2026 22:48:49 GMT source-age: 0 { \"$schema\": \"https://json-schema.org/draft/2020-12/schema\", \"$id\": \"https://github.com/apache/ossie/core-spec/ossie-schema.json\", \"title\": \"Apache / \"JSON Schema for validating a single Apache Ossie semantic model document\", \"type\": \"object\", \"properties\": / { \"$schema\": \"https://json-schema.org/draft/2020-12/schema\", \"$id\": \"https://github.com/apache/ossie/core-spec/ossie-schema.json\", \"title\": \"Apache Ossie Core Metadata Specification\", \"description\": \"JSON / \"description\": \"JSON Schema for validating a single Apache Ossie semantic model document\", \"type\": \"object\", \"properties\": { \"version\": { \"type\": \"string\", \"const\": \"0.2.0.dev0\"",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://github.com/apache/ossie/tags",
     "claim": "Apache Software Foundation, *GitHub tags API apache/ossie*, checked 2026-10-30",
     "date": null,
     "quote": "[ { \"name\": \"osi-0.1.1-rc1\", \"zipball_url\": \"https://api.github.com/repos/apache/ossie/zipball/refs/tags/osi-0.1.1-rc1\", \"tarball_url\": / \"name\": \"osi-0.1.1-rc1\"",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://raw.githubusercontent.com/apache/ossie-converters/main/README.md",
     "claim": "Apache Software Foundation, *apache/ossie-converters README*, checked 2026-10-30",
     "date": null,
     "quote": "Ossie contribution guide. Document format Converters use the flat 0.2.0.dev0 core format: one model / model definition - Ossie → dbt semantic_models YAML - Ossie → Tableau data source",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://ossie.apache.org/",
     "claim": "Apache Software Foundation, *Apache Ossie project site*, checked 2026-10-30",
     "date": null,
     "quote": "data: blob: 'unsafe-inline' 'unsafe-eval' https://www.apachecon.com/ https://www.communityovercode.org/ https://*.apache.org/ https://apache.org/ https://*.scarf.sh/; script-src 'self' data: blob:",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://www.snowflake.com/en/blog/open-semantic-interchanges-specs-finalized/",
     "claim": "Snowflake, *Open Semantic Interchange (OSI) Specification Finalized*, checked 2026-10-30",
     "date": null,
     "quote": "The first version of the OSI specification is now available via an Apache 2 licensed Git repository at https://github.com/open-semantic-interchange/OSI.",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://json-schema.org/specification",
     "claim": "JSON Schema Organization, *JSON Schema Specification*, fetched 2026-11-12",
     "date": null,
     "quote": "JSON Schema - Specification [#section] The JSON Schema Office Hours Now Runs Weekly!",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://www.w3.org/TR/rdf11-concepts/",
     "claim": "W3C, *RDF 1.1 Concepts and Abstract Syntax*, 2014-02-25",
     "date": "2014-02-25",
     "quote": "The Resource Description Framework (RDF) is a framework for",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://github.com/GoogleCloudPlatform/open-knowledge-format/blob/main/SPEC.md",
     "claim": "GoogleCloudPlatform, *Open Knowledge Format (OKF), Version 0.2*, Version 0.2; fetched 2026-10-30",
     "date": null,
     "quote": "Version 0.2",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://github.com/agntcy/oasf/releases",
     "claim": "AGNTCY, *agntcy/oasf releases*, checked 2026-10-31",
     "date": null,
     "quote": "\"html_url\": \"https://github.com/agntcy/oasf/releases/tag/v1.1.0\", \"id\": 352159727, \"author\": { \"login\": \"github-actions[bot]\", \"id\": 41898282, \"node_id\": \"MDM6Qm90NDE4OTgyODI=\", \"avatar_url\":",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Current : the current protocol version, which is ready for use and may continue to receive backwards compatible changes.",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://llmstxt.org",
     "claim": "Jeremy Howard, *The /llms.txt file, v2*, published 2024-09-03; modified 2026-08-10; HTTP last-modified 2026-09-24",
     "date": null,
     "quote": "This is v2 of the proposal … The llms.txt specification is open for community input. A GitHub repository hosts this informal overview",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://docs.getdbt.com/docs/build/ossie-semantic-models",
     "claim": "dbt Labs, *Apache Ossie Semantic Layer Documents*, checked 2026-10-30",
     "date": null,
     "quote": "Labs\"},\"url\":\"https://docs.getdbt.com/docs/build/ossie-semantic-models\"} Build dbt projects Build your metrics Semantic models Apache Ossie semantic layer documents",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://docs.cube.dev/docs/integrations/apache-ossie",
     "claim": "Cube, *Apache Ossie — Cube Documentation*, checked 2026-10-30",
     "date": null,
     "quote": "Apache Ossie Cube converter: Export converts a Cube data model to one Ossie model:",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://cube.dev/blog/introducing-apache-ossie-integration",
     "claim": "Cube, *Introducing Apache Ossie Integration*, checked 2026-10-30",
     "date": null,
     "quote": "You can now convert a Cube data model to Apache Ossie and back.",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://honeydew.ai/docs/integration/apache-ossie-osi",
     "claim": "Honeydew, *Apache Ossie (OSI) — Honeydew Documentation*, checked 2026-10-30",
     "date": null,
     "quote": "Because Apache Ossie is still evolving, the converter tracks the current draft of the specification and may change as the specification stabilizes.",
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://docs.snowflake.com/en/sql-reference/stored-procedures/system_create_semantic_view_from_ossie_yaml",
     "claim": "Snowflake, *SYSTEM$CREATE_SEMANTIC_VIEW_FROM_OSSIE_YAML — Snowflake Documentation*, checked 2026-10-30",
     "date": null,
     "quote": "This stored procedure accepts an Ossie YAML document, converts it to the Snowflake semantic model format, and creates the corresponding semantic view in the specified schema.",
     "ref": 25
    },
    {
     "label": "[26]",
     "url": "https://www.veezoo.com/apache-ossie",
     "claim": "Veezoo, *Veezoo & Apache Ossie*, checked 2026-10-30",
     "date": null,
     "quote": "Veezoo reads Apache Ossie documents as a native source for its Knowledge Graph, the semantic layer behind its agentic analytics.",
     "ref": 26
    }
   ],
   "form": "document-format",
   "governance": "Apache Software Foundation, Apache Incubator. \"Apache Ossie is an effort undergoing incubation at the Apache Software Foundation (ASF), sponsored by the Apache Incubator PMC.\". Vote opened 2026-06-16: \"I call for a formal vote to accept Ossie into the Apache Incubator.\"; result: \"This vote passed with the following result:\" ([RESULT][VOTE] Accept Ossie into the Apache Incubator 2026/06/19 06:03:11 UTC). \"Started: 2026-06-19\"; \"Committers: 17 PPMC members: 7\". \"Champion jbonofre JB Onofre Mentors jbonofre JB Onofré. holden Holden Karau. tison Zili Chen. russellspitzer Russell Spitzer\"",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against github.com/apache/ossie (README, core-spec/spec.md), incubator.apache.org/projects/ossie.html, and Snowflake's 2025-09-23 and 2026-01-27 posts; moved step from 'account' to 'read', corrected spec_url, name, governance, and version; flagged draft-vs-finalized dispute"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "osi",
   "implementation": "prototype",
   "last_verified": "2026-11-12",
   "name": "Apache Ossie (formerly Open Semantic Interchange)",
   "native_status": "Draft specification (`0.1.1` initial pre-incubation specification release, tag `osi-0.1.1-rc1`); no ASF incubating release or GitHub Release entry yet (\"DRAFT version — in development, schema may change before 0.2.0 is released.\"; \"Date of last release: None yet — no Apache release has been made since entering incubation.\")",
   "origin": {
    "org": "Snowflake with Salesforce, BlackRock, dbt Labs and RelationalAI",
    "date": "2025-09-23"
   },
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "draft",
   "probe": {
    "method": "GET",
    "on_absent": "If a tool claims 'OSI' or 'Ossie compatibility' but cannot produce a document that validates against this schema, the claim cannot be confirmed.",
    "parse": "Fetch the JSON Schema, then validate a candidate semantic-model file (dataset/metric/dimension document) against it; a pass confirms the file is Ossie/OSI-conformant. There is no fixed well-known path or origin endpoint — OSI/Ossie is an exchanged document format, not a runtime discovery protocol.",
    "path": "https://raw.githubusercontent.com/apache/ossie/main/core-spec/ossie-schema.json"
   },
   "question": "How can an AI agent or BI tool read a metric or data-model definition and get the same meaning another tool intended?",
   "scope": "general",
   "spec_url": "https://raw.githubusercontent.com/apache/ossie/main/core-spec/spec.md",
   "step": "read",
   "summary_md": "**Apache Ossie (formerly Open Semantic Interchange)** (`Ossie`) is a single JSON- and YAML-based specification that any tool can read and write. Each JSON or YAML document represents exactly one semantic model. Its goals are a uniform language for semantic model definitions, domain-specific extensions that keep core compatibility, and exchange of those definitions across AI and BI applications. On September 23, 2025, Snowflake, in partnership with Salesforce, BlackRock, dbt Labs, and RelationalAI, announced the Open Semantic Interchange (OSI) as a new open source initiative. The Apache Incubator status page records that the project enters incubation on 2026-06-22, and it describes Apache Ossie as coming from Open Semantic Interchange, a vendor-neutral format for business metrics, dimensions, and their relationships. A standalone document must contain `version`, `name`, and a non-empty `datasets` array. The complete example is the semantic model `ecommerce_analytics` at version `0.2.0.dev0`, with datasets `orders` and `customers` and the relationship `orders_to_customers`. The specification is marked a draft, and the schema may change before 0.2.0 is released. `0.2.0.dev0` is an unreleased in-development minor release; the schema is mutable, and the version history says not to depend on this version in production. A breaking change puts one model at the document root and removes the `semantic_model` array. `0.1.1` retains the 2025-12-11 initial release date. A 2026-02-27 project discussion says the published OSI specification version is being updated from 1.0 to 0.1.1, effective 6 March 2026 (\"effective March 6th\"), because assigning version 1.0 implies a level of stability and completeness that does not match the authors' current goals.",
   "track": "community",
   "version": {
    "label": "0.2.0.dev0 in development (last released spec version 0.1.1)",
    "date": "2025-12-11"
   },
   "watch": [
    {
     "type": "github",
     "repo": "apache/ossie",
     "mode": "release",
     "version": false
    }
   ],
   "use_cases": [
    "serve-content-to-agents",
    "describe-agent-capabilities"
   ],
   "audience": [
    "platform",
    "agent-builder",
    "standards-body"
   ],
   "pairs_with": [
    "okf",
    "oasf",
    "mcp",
    "llms-txt"
   ],
   "prerequisites": [],
   "hatnote_md": "This page is about Apache Ossie (incubating), formerly Open Semantic Interchange (OSI), a JSON and YAML format for sharing metric and data-model definitions between analytics, BI and AI tools. It is not the Open Source Initiative or any other project called OSI; the project took the name Ossie to avoid that confusion. For the format agents use to read knowledge pages, see [Open Knowledge Format](/protocols/okf/).",
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "web_discovery",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "This page is about Apache Ossie (incubating), formerly Open Semantic Interchange (OSI), a JSON and YAML format for sharing metric and data-model definitions between analytics, BI and AI tools. It is not the Open Source Initiative or any other project called OSI; the project took the name Ossie to avoid that confusion. For the format agents use to read knowledge pages, see [Open Knowledge Format](/protocols/okf/). [1]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Apache Ossie (formerly Open Semantic Interchange)** (`Ossie`) is a single JSON- and YAML-based specification that any tool can read and write. Each JSON or YAML document represents exactly one semantic model. Its goals are a uniform language for semantic model definitions, domain-specific extensions that keep core compatibility, and exchange of those definitions across AI and BI applications. [1][2] On September 23, 2025, Snowflake, in partnership with Salesforce, BlackRock, dbt Labs, and RelationalAI, announced the Open Semantic Interchange (OSI) as a new open source initiative. The Apache Incubator status page records that the project enters incubation on 2026-06-22, and it describes Apache Ossie as coming from Open Semantic Interchange, a vendor-neutral format for business metrics, dimensions, and their relationships. [3][4] A standalone document must contain `version`, `name`, and a non-empty `datasets` array. The complete example is the semantic model `ecommerce_analytics` at version `0.2.0.dev0`, with datasets `orders` and `customers` and the relationship `orders_to_customers`. [1] The specification is marked a draft, and the schema may change before 0.2.0 is released. `0.2.0.dev0` is an unreleased in-development minor release; the schema is mutable, and the version history says not to depend on this version in production. A breaking change puts one model at the document root and removes the `semantic_model` array. `0.1.1` retains the 2025-12-11 initial release date. [1] A 2026-02-27 project discussion says the published OSI specification version is being updated from 1.0 to 0.1.1, effective 6 March 2026 (\"effective March 6th\"), because assigning version 1.0 implies a level of stability and completeness that does not match the authors' current goals. [5]",
   "v05_identity_sentence_md": "**Apache Ossie (formerly Open Semantic Interchange)** (`Ossie`) is a single JSON- and YAML-based specification that any tool can read and write. Each JSON or YAML document represents exactly one semantic model. Its goals are a uniform language for semantic model definitions, domain-specific extensions that keep core compatibility, and exchange of those definitions across AI and BI applications. [1][2] On September 23, 2025, Snowflake, in partnership with Salesforce, BlackRock, dbt Labs, and RelationalAI, announced the Open Semantic Interchange (OSI) as a new open source initiative. The Apache Incubator status page records that the project enters incubation on 2026-06-22, and it describes Apache Ossie as coming from Open Semantic Interchange, a vendor-neutral format for business metrics, dimensions, and their relationships. [3][4]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Read](/category/read/) (`read`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "Snowflake with Salesforce, BlackRock, dbt Labs, RelationalAI, and ThoughtSpot (`2025-09-23`, 17-vendor coalition) [3][6]"
    },
    {
     "label": "Governed by",
     "value_md": "Apache Software Foundation (`ASF`), Apache Incubator podling (`ossie`, accepted `2026-06-19`; 17 committers, 7 PPMC members, 4 mentors) [4][7][8]"
    },
    {
     "label": "Track",
     "value_md": "Apache Incubator podling draft specification (`apache/ossie`, Apache Software Foundation) [7][9]"
    },
    {
     "label": "Status",
     "value_md": "Draft specification (`0.1.1` initial pre-incubation specification release, tag `osi-0.1.1-rc1`); no ASF incubating release or GitHub Release entry yet (\"DRAFT version — in development, schema may change before 0.2.0 is released.\"; \"Date of last release: None yet — no Apache release has been made since entering incubation.\") [1][10][11]"
    },
    {
     "label": "Version",
     "value_md": "`0.2.0.dev0` (unreleased draft on `main`); `0.1.1` (`2025-12-11` initial release date, renumbered from `1.0` in a `2026-02-27` announcement effective 6 March 2026, tag `osi-0.1.1-rc1` on `2026-05-19`); `0.3.0-incubating` proposed [1][10][11]"
    },
    {
     "label": "Wire format",
     "value_md": "Standalone YAML or JSON document (`core-spec/ossie-schema.json`) holding one model at the root (`0.2.0.dev0`) or inside a `semantic_model` array (`0.1.0`/`0.1.1`) [1][10][12]"
    },
    {
     "label": "Specification",
     "value_md": "[Core Spec (`core-spec/spec.md`)](https://raw.githubusercontent.com/apache/ossie/main/core-spec/spec.md) · [JSON Schema (`core-spec/ossie-schema.json`)](https://raw.githubusercontent.com/apache/ossie/main/core-spec/ossie-schema.json) · [Project Site (`ossie.apache.org`)](https://ossie.apache.org/) · [Converters (`apache/ossie-converters`)](https://raw.githubusercontent.com/apache/ossie-converters/main/README.md) [1][10][13]"
    },
    {
     "label": "Found at",
     "value_md": "No `.well-known` HTTP path or runtime header; exchanged via project directories (`osi/*.json` or `osi-paths` in `dbt_project.yml`), SQL procedures (`SYSTEM$CREATE_SEMANTIC_VIEW_FROM_OSSIE_YAML`), URL/file imports, or converters [1][10][12]"
    },
    {
     "label": "Licence",
     "value_md": "Apache License 2.0 (`Apache-2.0`) [8][9][14]"
    }
   ],
   "v05_problem_md": "The project describes semantic fragmentation across the data stack: the same KPI defined differently across tools, teams spending significant effort manually reconciling definitions, and AI agents producing unreliable outputs grounded in inconsistent business logic. [2] An Ossie model has three levels of names: source columns, dataset fields, and metrics. Metrics and relationships do not reach through a dataset to its source columns, so a dataset that declares no fields exposes nothing to them. [1] A dataset-scoped metric's expression MUST reference only the declared fields of the dataset that declares it, by single-part name. It MUST NOT reference a field of another dataset. A metric that must do so is model-scoped and MUST be declared in the model-root `metrics`. [1] This specification does not define a bundle format or cross-model references. For bulk exchange, use separate model documents. [1] This version does not support a field expression that refers to another field, a metric that refers to another metric, or a dataset that uses another dataset as its `source`. Future versions may add these. [1]",
   "v05_mechanism_delta_md": "An Ossie model has three levels of names: source columns, dataset fields, and metrics. Metrics and relationships do not reach through a dataset to its source columns, so a dataset that declares no fields exposes nothing to them. [1] A dataset-scoped metric's expression MUST reference only the declared fields of the dataset that declares it, by single-part name. It MUST NOT reference a field of another dataset. A metric that must do so is model-scoped and MUST be declared in the model-root `metrics`. [1]",
   "v05_scope_boundary_md": "This specification does not define a bundle format or cross-model references. For bulk exchange, use separate model documents. [1] This version does not support a field expression that refers to another field, a metric that refers to another metric, or a dataset that uses another dataset as its `source`. Future versions may add these. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "JSON Schema (2020-12)",
      "spec_or_rfc": "JSON Schema 2020-12",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "Ossie files are semantic models exchanged between tools, carrying instructions, synonyms, and example questions, with no fixed URL, and ossie-schema.json requires the schema const 0.2.0.dev0, whereas JSON Schema 2020-12 only constrains JSON instances and does not define that semantic-layer model. [1][10][15]"
     },
     {
      "name": "RDF 1.1 Concepts and Abstract Syntax",
      "spec_or_rfc": "W3C RDF 1.1",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "Ossie interchanges a versioned semantic-layer document validated by ossie-schema.json, whereas RDF 1.1 models data as triples serialized as Turtle, JSON-LD, or RDF/XML. [1][10][16]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "okf",
      "target_name": "Open Knowledge Format",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "Ossie is a semantic model checked by ossie-schema.json, which requires const 0.2.0.dev0, while OKF is a directory of Markdown files with YAML frontmatter whose only required field is type. [1][10][17]"
     },
     {
      "target_id": "oasf",
      "target_name": "Open Agentic Schema Framework",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Ossie is a schema file exchanged between tools, with ossie-schema.json requiring const 0.2.0.dev0, while OASF is the Open Agentic Schema Framework, a separate document format. [1][10][18]"
     },
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Ossie documents are exchanged as files between tools and have no fixed web path, while MCP is an endpoint protocol and does not define ossie-schema.json. [1][10][19]"
     },
     {
      "target_id": "llms-txt",
      "target_name": "llms.txt",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Ossie has no fixed web path, while llms.txt is a file at /llms.txt or a subpath. [1][20]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (5 probed or cited examples; non-exhaustive).",
    "side_a": {
     "visible": true,
     "heading": "Who publishes or hosts it",
     "col4_header": "Behavior / Provisioning",
     "note_md": null,
     "rows": [
      {
       "actor": "dbt",
       "role": "Data platform",
       "status": "Supported",
       "status_display": "Supported · as of 2026-09-25",
       "col4_md": "dbt v1.12 defines semantic models and metrics in Apache Ossie YAML. Documents must use version 0.1.0 or 0.1.1. Docs page last updated 2026-09-25 and returned status 200 on 2026-10.",
       "source_md": "[dbt Ossie semantic models](https://docs.getdbt.com/docs/build/ossie-semantic-models) [21]"
      },
      {
       "actor": "Cube",
       "role": "Data platform",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-29",
       "col4_md": "Cube converts a data model to Apache Ossie YAML and back. Docs checked 2026-10-29 say the conversion is in preview. Announced 2026-10-15.",
       "source_md": "[Cube Ossie docs](https://docs.cube.dev/docs/integrations/apache-ossie) [22] · [Cube announcement](https://cube.dev/blog/introducing-apache-ossie-integration) [23]"
      },
      {
       "actor": "Honeydew",
       "role": "Data platform",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-29",
       "col4_md": "Honeydew ships a bidirectional converter between Apache Ossie YAML and the Honeydew workspace format. The converter tracks the current draft and can change as the spec stabilizes. Docs returned status 200 on 2026-10-29.",
       "source_md": "[Honeydew Ossie docs](https://honeydew.ai/docs/integration/apache-ossie-osi) [24]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Bot, client & tool support",
     "col4_header": "Behavior / Provisioning",
     "note_md": null,
     "rows": [
      {
       "actor": "Snowflake",
       "role": "BI / Query engine",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-29",
       "col4_md": "Stored procedure `SYSTEM$CREATE_SEMANTIC_VIEW_FROM_OSSIE_YAML` creates a semantic view from Apache Ossie YAML. Snowflake labels the procedure Preview Feature, Open, available to all accounts. Docs returned status 200 on 2026-10-29.",
       "source_md": "[SYSTEM$CREATE_SEMANTIC_VIEW_FROM_OSSIE_YAML](https://docs.snowflake.com/en/sql-reference/stored-procedures/system_create_semantic_view_from_ossie_yaml) [25]"
      },
      {
       "actor": "Veezoo",
       "role": "BI / Query engine",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-29",
       "col4_md": "Veezoo reads Apache Ossie documents as a native source for its Knowledge Graph, the semantic layer behind its agentic analytics. Page returned HTTP 200 on 2026-10-29.",
       "source_md": "[Veezoo Apache Ossie](https://www.veezoo.com/apache-ossie) [26]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Read protocols](/category/read/)** — Category index for `read` standards."
    }
   ],
   "v05_compiled_md": "---\nid: osi\ntitle: \"Apache Ossie (formerly Open Semantic Interchange)\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: read\nform: document-format\nwire_archetype: web_discovery\nspec_url: https://raw.githubusercontent.com/apache/ossie/main/core-spec/spec.md\nlast_checked: 2026-11-12\n---\n\n# Apache Ossie (formerly Open Semantic Interchange)\n\n**Category:** [Read](/category/read/) (`read`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-11-12\n\n> *This page is about Apache Ossie (incubating), formerly Open Semantic Interchange (OSI), a JSON and YAML format for sharing metric and data-model definitions between analytics, BI and AI tools. It is not the Open Source Initiative or any other project called OSI; the project took the name Ossie to avoid that confusion. For the format agents use to read knowledge pages, see [Open Knowledge Format](/protocols/okf/). [1]*\n\n**Apache Ossie (formerly Open Semantic Interchange)** (`Ossie`) is a single JSON- and YAML-based specification that any tool can read and write. Each JSON or YAML document represents exactly one semantic model. Its goals are a uniform language for semantic model definitions, domain-specific extensions that keep core compatibility, and exchange of those definitions across AI and BI applications. [1][2] On September 23, 2025, Snowflake, in partnership with Salesforce, BlackRock, dbt Labs, and RelationalAI, announced the Open Semantic Interchange (OSI) as a new open source initiative. The Apache Incubator status page records that the project enters incubation on 2026-06-22, and it describes Apache Ossie as coming from Open Semantic Interchange, a vendor-neutral format for business metrics, dimensions, and their relationships. [3][4] A standalone document must contain `version`, `name`, and a non-empty `datasets` array. The complete example is the semantic model `ecommerce_analytics` at version `0.2.0.dev0`, with datasets `orders` and `customers` and the relationship `orders_to_customers`. [1] The specification is marked a draft, and the schema may change before 0.2.0 is released. `0.2.0.dev0` is an unreleased in-development minor release; the schema is mutable, and the version history says not to depend on this version in production. A breaking change puts one model at the document root and removes the `semantic_model` array. `0.1.1` retains the 2025-12-11 initial release date. [1] A 2026-02-27 project discussion says the published OSI specification version is being updated from 1.0 to 0.1.1, effective 6 March 2026 (\"effective March 6th\"), because assigning version 1.0 implies a level of stability and completeness that does not match the authors' current goals. [5]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Read](/category/read/) (`read`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | Snowflake with Salesforce, BlackRock, dbt Labs, RelationalAI, and ThoughtSpot (`2025-09-23`, 17-vendor coalition) [3][6] |\n| **Governed by** | Apache Software Foundation (`ASF`), Apache Incubator podling (`ossie`, accepted `2026-06-19`; 17 committers, 7 PPMC members, 4 mentors) [4][7][8] |\n| **Track** | Apache Incubator podling draft specification (`apache/ossie`, Apache Software Foundation) [7][9] |\n| **Status** | Draft specification (`0.1.1` initial pre-incubation specification release, tag `osi-0.1.1-rc1`); no ASF incubating release or GitHub Release entry yet (\"DRAFT version — in development, schema may change before 0.2.0 is released.\"; \"Date of last release: None yet — no Apache release has been made since entering incubation.\") [1][10][11] |\n| **Version** | `0.2.0.dev0` (unreleased draft on `main`); `0.1.1` (`2025-12-11` initial release date, renumbered from `1.0` in a `2026-02-27` announcement effective 6 March 2026, tag `osi-0.1.1-rc1` on `2026-05-19`); `0.3.0-incubating` proposed [1][10][11] |\n| **Wire format** | Standalone YAML or JSON document (`core-spec/ossie-schema.json`) holding one model at the root (`0.2.0.dev0`) or inside a `semantic_model` array (`0.1.0`/`0.1.1`) [1][10][12] |\n| **Specification** | [Core Spec (`core-spec/spec.md`)](https://raw.githubusercontent.com/apache/ossie/main/core-spec/spec.md) · [JSON Schema (`core-spec/ossie-schema.json`)](https://raw.githubusercontent.com/apache/ossie/main/core-spec/ossie-schema.json) · [Project Site (`ossie.apache.org`)](https://ossie.apache.org/) · [Converters (`apache/ossie-converters`)](https://raw.githubusercontent.com/apache/ossie-converters/main/README.md) [1][10][13] |\n| **Found at** | No `.well-known` HTTP path or runtime header; exchanged via project directories (`osi/*.json` or `osi-paths` in `dbt_project.yml`), SQL procedures (`SYSTEM$CREATE_SEMANTIC_VIEW_FROM_OSSIE_YAML`), URL/file imports, or converters [1][10][12] |\n| **Licence** | Apache License 2.0 (`Apache-2.0`) [8][9][14] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [Adoption and ecosystem](#adoption-and-ecosystem)\n4. [See also](#see-also)\n5. [References](#references)\n\n---\n\n## Problem and scope\n\nThe project describes semantic fragmentation across the data stack: the same KPI defined differently across tools, teams spending significant effort manually reconciling definitions, and AI agents producing unreliable outputs grounded in inconsistent business logic. [2] An Ossie model has three levels of names: source columns, dataset fields, and metrics. Metrics and relationships do not reach through a dataset to its source columns, so a dataset that declares no fields exposes nothing to them. [1] A dataset-scoped metric's expression MUST reference only the declared fields of the dataset that declares it, by single-part name. It MUST NOT reference a field of another dataset. A metric that must do so is model-scoped and MUST be declared in the model-root `metrics`. [1] This specification does not define a bundle format or cross-model references. For bulk exchange, use separate model documents. [1] This version does not support a field expression that refers to another field, a metric that refers to another metric, or a dataset that uses another dataset as its `source`. Future versions may add these. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **JSON Schema (2020-12)** | `JSON Schema 2020-12` | Analogous to classic standard | Ossie files are semantic models exchanged between tools, carrying instructions, synonyms, and example questions, with no fixed URL, and ossie-schema.json requires the schema const 0.2.0.dev0, whereas JSON Schema 2020-12 only constrains JSON instances and does not define that semantic-layer model. [1][10][15] |\n| **RDF 1.1 Concepts and Abstract Syntax** | `W3C RDF 1.1` | Analogous to classic standard | Ossie interchanges a versioned semantic-layer document validated by ossie-schema.json, whereas RDF 1.1 models data as triples serialized as Turtle, JSON-LD, or RDF/XML. [1][10][16] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Open Knowledge Format](/protocols/okf/)** | Peer alternative | Ossie is a semantic model checked by ossie-schema.json, which requires const 0.2.0.dev0, while OKF is a directory of Markdown files with YAML frontmatter whose only required field is type. [1][10][17] |\n| **[Open Agentic Schema Framework](/protocols/oasf/)** | Complements | Ossie is a schema file exchanged between tools, with ossie-schema.json requiring const 0.2.0.dev0, while OASF is the Open Agentic Schema Framework, a separate document format. [1][10][18] |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | Ossie documents are exchanged as files between tools and have no fixed web path, while MCP is an endpoint protocol and does not define ossie-schema.json. [1][10][19] |\n| **[llms.txt](/protocols/llms-txt/)** | Complements | Ossie has no fixed web path, while llms.txt is a file at /llms.txt or a subpath. [1][20] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (5 probed or cited examples; non-exhaustive).*\n\n### Who publishes or hosts it\n\n| Actor | Role | Status | Behavior / Provisioning | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **dbt** | Data platform | Supported · as of 2026-09-25 | dbt v1.12 defines semantic models and metrics in Apache Ossie YAML. Documents must use version 0.1.0 or 0.1.1. Docs page last updated 2026-09-25 and returned status 200 on 2026-10. | [dbt Ossie semantic models](https://docs.getdbt.com/docs/build/ossie-semantic-models) [21] |\n| **Cube** | Data platform | Supported · as of 2026-10-29 | Cube converts a data model to Apache Ossie YAML and back. Docs checked 2026-10-29 say the conversion is in preview. Announced 2026-10-15. | [Cube Ossie docs](https://docs.cube.dev/docs/integrations/apache-ossie) [22] · [Cube announcement](https://cube.dev/blog/introducing-apache-ossie-integration) [23] |\n| **Honeydew** | Data platform | Supported · as of 2026-10-29 | Honeydew ships a bidirectional converter between Apache Ossie YAML and the Honeydew workspace format. The converter tracks the current draft and can change as the spec stabilizes. Docs returned status 200 on 2026-10-29. | [Honeydew Ossie docs](https://honeydew.ai/docs/integration/apache-ossie-osi) [24] |\n\n### Bot, client & tool support\n\n| Actor | Role | Status | Behavior / Provisioning | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Snowflake** | BI / Query engine | Supported · as of 2026-10-29 | Stored procedure `SYSTEM$CREATE_SEMANTIC_VIEW_FROM_OSSIE_YAML` creates a semantic view from Apache Ossie YAML. Snowflake labels the procedure Preview Feature, Open, available to all accounts. Docs returned status 200 on 2026-10-29. | [SYSTEM$CREATE_SEMANTIC_VIEW_FROM_OSSIE_YAML](https://docs.snowflake.com/en/sql-reference/stored-procedures/system_create_semantic_view_from_ossie_yaml) [25] |\n| **Veezoo** | BI / Query engine | Supported · as of 2026-10-29 | Veezoo reads Apache Ossie documents as a native source for its Knowledge Graph, the semantic layer behind its agentic analytics. Page returned HTTP 200 on 2026-10-29. | [Veezoo Apache Ossie](https://www.veezoo.com/apache-ossie) [26] |\n\n---\n\n## See also\n\n- **Category:** [Read protocols](/category/read/)\n\n---\n\n## References\n\n1. Apache Software Foundation, *Apache Ossie Core Metadata Specification* (checked 2026-10-30) — <https://raw.githubusercontent.com/apache/ossie/main/core-spec/spec.md>\n2. Apache Software Foundation, *Apache Ossie README* (checked 2026-10-30) — <https://raw.githubusercontent.com/apache/ossie/main/README.md>\n3. Snowflake, *Snowflake announcement of the Open Semantic Interchange initiative* (checked 2026-10-30) — <https://www.snowflake.com/en/news/press-releases/snowflake-salesforce-dbt-labs-and-more-revolutionize-data-readiness-for-ai-with-open-semantic-interchange-initiative/>\n4. Apache Software Foundation, *Apache Ossie incubation status* (checked 2026-10-30) — <https://incubator.apache.org/projects/ossie.html>\n5. Apache Software Foundation, *OSI specification version change (discussion 80)* (checked 2026-10-30) — <https://github.com/apache/ossie/discussions/80>\n6. ThoughtSpot, *Advancing ThoughtSpot's Commitment to Apache Ossie (Incubating), the Next Chapter of OSI* (checked 2026-10-30) — <https://www.thoughtspot.com/blog/apache-ossie>\n7. Apache Software Foundation, *Apache Ossie incubation disclaimer* (checked 2026-10-30) — <https://raw.githubusercontent.com/apache/ossie/main/DISCLAIMER>\n8. Apache Software Foundation, *Apache Ossie Clutch report* (checked 2026-10-30) — <https://incubator.apache.org/clutch/ossie.html>\n9. Apache Software Foundation, *GitHub repository record apache/ossie* (checked 2026-10-30) — <https://github.com/apache/ossie>\n10. Apache Software Foundation, *Apache Ossie core JSON Schema* (checked 2026-10-30) — <https://raw.githubusercontent.com/apache/ossie/main/core-spec/ossie-schema.json>\n11. Apache Software Foundation, *GitHub tags API apache/ossie* (checked 2026-10-30) — <https://github.com/apache/ossie/tags>\n12. Apache Software Foundation, *apache/ossie-converters README* (checked 2026-10-30) — <https://raw.githubusercontent.com/apache/ossie-converters/main/README.md>\n13. Apache Software Foundation, *Apache Ossie project site* (checked 2026-10-30) — <https://ossie.apache.org/>\n14. Snowflake, *Open Semantic Interchange (OSI) Specification Finalized* (checked 2026-10-30) — <https://www.snowflake.com/en/blog/open-semantic-interchanges-specs-finalized/>\n15. JSON Schema Organization, *JSON Schema Specification* (fetched 2026-11-12) — <https://json-schema.org/specification>\n16. W3C, *RDF 1.1 Concepts and Abstract Syntax* (2014-02-25) — <https://www.w3.org/TR/rdf11-concepts/>\n17. GoogleCloudPlatform, *Open Knowledge Format (OKF), Version 0.2* (Version 0.2; fetched 2026-10-30) — <https://github.com/GoogleCloudPlatform/open-knowledge-format/blob/main/SPEC.md>\n18. AGNTCY, *agntcy/oasf releases* (checked 2026-10-31) — <https://github.com/agntcy/oasf/releases>\n19. Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation* (2026-07-28) — <https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning>\n20. Jeremy Howard, *The /llms.txt file, v2* (published 2024-09-03; modified 2026-08-10; HTTP last-modified 2026-09-24) — <https://llmstxt.org>\n21. dbt Labs, *Apache Ossie Semantic Layer Documents* (checked 2026-10-30) — <https://docs.getdbt.com/docs/build/ossie-semantic-models>\n22. Cube, *Apache Ossie — Cube Documentation* (checked 2026-10-30) — <https://docs.cube.dev/docs/integrations/apache-ossie>\n23. Cube, *Introducing Apache Ossie Integration* (checked 2026-10-30) — <https://cube.dev/blog/introducing-apache-ossie-integration>\n24. Honeydew, *Apache Ossie (OSI) — Honeydew Documentation* (checked 2026-10-30) — <https://honeydew.ai/docs/integration/apache-ossie-osi>\n25. Snowflake, *SYSTEM$CREATE_SEMANTIC_VIEW_FROM_OSSIE_YAML — Snowflake Documentation* (checked 2026-10-30) — <https://docs.snowflake.com/en/sql-reference/stored-procedures/system_create_semantic_view_from_ossie_yaml>\n26. Veezoo, *Veezoo & Apache Ossie* (checked 2026-10-30) — <https://www.veezoo.com/apache-ossie>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "OKF",
   "adoption": {
    "level": "observed",
    "by": "Aembit, The Website Specification, FastEndpoints, Floret, Google Cloud Knowledge Catalog, llm-wiki-compiler (atomicstrata), okf-mcp (Rodrigo Serradura), xMatrix, and 1 other verified implementation",
    "probe_run": null
   },
   "aliases": [],
   "analog": "a wiki or knowledge base (Obsidian vault, Notion space) with structured frontmatter, kept in git",
   "collisions": [
    "Open Knowledge Foundation (okfn.org) — an unrelated, pre-existing nonprofit that also uses the initialism OKF"
   ],
   "discovery": {
    "mechanism": "Bundle root index at /okf/index.md (web origins) or root index.md of a git repository / tarball declaring okf_version",
    "path": "Any directory, git repository, tarball or zip archive, or subdirectory. A bundle-root index.md may declare okf_version. The spec defines no web path: /okf/index.md is a convention some sites use, not spec text"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://cloud.google.com/blog/products/data-analytics/how-the-open-knowledge-format-can-improve-data-sharing",
     "claim": "Sam McVeety and Amir Hormati (Google Cloud), *Introducing the Open Knowledge Format*, published 2026-06-12",
     "date": null,
     "quote": "we're introducing the Open Knowledge Format (OKF), an open specification that formalizes the LLM-wiki pattern into a portable, interoperable format. / \"datePublished\":\"2026-06-12\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Google Cloud\" / Today, these atoms of knowledge live in a variety of highly fragmented systems: Metadata catalogs with their own APIs Wikis, third-party systems, or in shared drives Code comments, docstrings, or notebook cells / As published, OKF v0.1 represents knowledge as a directory of markdown files with YAML frontmatter, with a small set of agreed-upon conventions that let wikis written by different producers be consumed by different agents without translation. / Introducing the Open Knowledge Format June 12, 2026 Sam McVeety Tech Lead, Data Analytics Amir Hormati Tech Lead, BigQuery, Engineering, Data Cloud / OKF v0.1 is a starting point, not a finished standard. / In most organizations, the information that foundation models use is overwhelmingly internal knowledge: the schema of a table, your business' meaning of a metric, the runbook for an incident, the join paths between two systems / similar knowledge-as-wiki pattern keeps reappearing under different names: obsidian vaults wired to coding agents, the AGENTS.md / CLAUDE.md family of convention files, repos full of index.md and log.md artifacts that agents consult before doing real work, and \"metadata as code\" repositories inside data teams. The pattern is compelling and powerful, but each instance is bespoke. / We have also updated Google Cloud's Knowledge Catalog to be able to ingest Open Knowledge Format and serve it to our agents.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://github.com/GoogleCloudPlatform/open-knowledge-format/blob/main/SPEC.md",
     "claim": "GoogleCloudPlatform, *Open Knowledge Format (OKF), Version 0.2*, Version 0.2; fetched 2026-10-30",
     "date": null,
     "quote": "The format is intentionally minimal: a directory of markdown files with YAML frontmatter. / type is the only always-required key; a concept carrying just type is fully conformant (§11). / index.md MAY carry an okf_version key (§12). / Consumers SHOULD preserve unknown keys when round-tripping and MUST NOT reject documents with unrecognized fields. / OKF v0.2 makes provenance, trust, lifecycle, and attestation first-class while keeping the format minimally opinionated. / Version 0.2 / Every timestamp-valued key in OKF is an ISO 8601 datetime with an explicit UTC offset / OKF is an open, human- and agent-friendly format for representing / A bundle MAY be distributed as: / A git repository (recommended, since it provides history, attribution, and diffs). / A tarball or zip archive of the directory. / A subdirectory within a larger repository. / There is no schema registry, no central authority, and no required tooling. / Defining a fixed taxonomy of concept types. Prescribing storage, serving, or query infrastructure. Replacing domain-specific schemas (Avro, Protobuf, OpenAPI, and so on). / Example: a concept bound to a resource / The format is intentionally minimal: a directory of markdown files with YAML frontmatter. There is no schema registry, no central authority, and no required tooling. If you can cat a file, you can read OKF; if you can git clone a repo, you can ship it. / Everything else (bundle structure, reserved filenames, the required type, recommended title/description/resource/tags, cross-linking, index files, log files, permissive conformance) is carried forward unchanged. / Extensions: Producers MAY include any additional keys. Consumers SHOULD preserve unknown keys when round-tripping and MUST NOT reject documents with unrecognized fields. / Type values are not registered centrally. Producers SHOULD pick values that are descriptive and self-explanatory; consumers MUST tolerate unknown types gracefully, typically by treating them as generic concepts. / The specific kind (parent/child, references, joins-with, depends-on) is conveyed by the surrounding prose, not by the link itself. / A bundle MAY be distributed as: A git repository (recommended, since it provides history, attribution, and diffs). A tarball or zip archive of the directory. A subdirectory within a larger repository. / Bundles MAY declare the version they target with okf_version: \"0.2\" in a bundle-root index.md frontmatter block (the only place frontmatter is permitted in an index.md). / A bundle is conformant with OKF v0.2 if: 1. Every non-reserved.md file in the tree contains a parseable YAML frontmatter block. 2. Every frontmatter block contains a non-empty type field. / OKF v0.2 makes provenance, trust, lifecycle, and attestation first-class while keeping the format minimally opinionated. ... 13.1 Breaking Changes - timestamp is superseded by generated.at. ... the body # Citations list is superseded by sources. Provenance moves to frontmatter / sources records the materials a concept derives from, external or internal to the bundle. / generated.at: An ISO 8601 datetime marking the content's last meaningful change. Consumers use it to tell a recent edit from a stale fact. / Trust tiers are advisory signals, not access control. ... draft: not yet reviewed; possibly incomplete. stable: default; ready for consumption. deprecated: kept for links and history; no longer current. Absent status ⇒ stable.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://okfn.org/en/",
     "claim": "Open Knowledge Foundation, *Open Knowledge Foundation – For a fair, sustainable and open future*, fetched 2026-10-30",
     "date": null,
     "quote": "The Open Knowledge Foundation is a global not-for-profit organisation",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://cloud.google.com/blog/products/data-analytics/okf-v0-2-adds-trust-signals",
     "claim": "Sam McVeety and Amir Hormati (Google Cloud), *Open Knowledge format v0.2 tackles agentic trust*, datePublished 2026-07-24; page byline July 25, 2026",
     "date": null,
     "quote": "\"datePublished\":\"2026-07-24\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Google Cloud\" / Open Knowledge format v0.2 tackles agentic trust July 25, 2026 Sam McVeety / type is still the only always-required field, every new field is opt-in / type is still the only always-required field, every new field is opt-in, custom keys are still preserved rather than rejected, and a bundle that adopts none of the additions is exactly as valid as it was under v0.1. Everything new below is optional, but its absence now carries meaning: an unverified concept is distinguishable from a verified one (although never rejected for the difference). / from verified, a consumer derives a trust tier: no verified key is unverified; confirmation by machine actors only is machine-confirmed; confirmation by a human: actor is human-reviewed. / OKF v0.2 spec, samples, and reference implementations: github.com/GoogleCloudPlatform/knowledge-catalog/tree/main/okf",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://raw.githubusercontent.com/GoogleCloudPlatform/knowledge-catalog/main/okf/README.md",
     "claim": "GoogleCloudPlatform, *okf/README.md (frozen snapshot in knowledge-catalog)*, fetched 2026-10-30",
     "date": null,
     "quote": "OKF now lives in its own repository: GoogleCloudPlatform/open-knowledge-format. That repository is the canonical home of the specification, the reference agent, and the sample bundles. / Stop using the copy under okf/ in this repository. It is a frozen snapshot, no longer maintained / That repository is the canonical home of the specification, the reference agent, and the sample bundles. / It is a frozen snapshot, no longer maintained / OKF now lives in its own repository: GoogleCloudPlatform/open-knowledge-format. That repository is the canonical home of the specification, the reference agent, and the sample bundles. ... Stop using the copy under okf/ in this repository. It is a frozen snapshot, no longer maintained",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://github.com/GoogleCloudPlatform/open-knowledge-format",
     "claim": "GoogleCloudPlatform, *open-knowledge-format*, created 2026-08-11; Apache License 2.0; fetched 2026-10-30",
     "date": null,
     "quote": "ownerLogin\":\"GoogleCloudPlatform\" / \"createdAt\":\"2026-08-11T18:29:55.000Z\" / \"spdxId\":\"Apache-2.0\",\"name\":\"Apache License 2.0\"",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://github.com/GoogleCloudPlatform/knowledge-catalog/commits/HEAD/okf/SPEC.md",
     "claim": "GitHub (GoogleCloudPlatform/knowledge-catalog), *Commits for okf/SPEC.md*, v0.2 migration commit 2026-07-24; timestamp commit 2026-08-21",
     "date": null,
     "quote": "\"date\": \"2026-07-24T16:45:07Z\" }, \"message\": \"okf: migrate format and tooling to Open Knowledge Format v0.2 (#227) / \"date\": \"2026-08-21T01:44:53Z\" }, \"message\": \"okf: make every timestamp an ISO 8601 datetime with an explicit offset (#323)",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://okfgem.com/blog/okf-mcp-1-0-0/",
     "claim": "Rodrigo Serradura, *Your bundles, served to any agent: okf-mcp 1.0.0*, published 2026-08-11",
     "date": null,
     "quote": "ten tools map the CLI's read verbs: list_bundles, dirs, index, search, read_concept, catalog, log, validate, lint, graph. The list is less interesting than the discipline behind it: every answer is bounded for a context window / okf-mcp 1.0.0 serves your OKF bundles over the Model Context Protocol: ten read-only tools, answers bounded for a context window / any host speaking the Model Context Protocol, Claude Desktop, Claude Code, or whatever your team runs next, reads the bundles on your machine directly. / \"datePublished\":\"2026-08-11T14:00:00.000Z\" / \"author\":{\"@type\":\"Person\",\"name\":\"Rodrigo Serradura\" / okf-mcp 1.0.0 serves your OKF bundles over the Model Context Protocol: ten read-only tools",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://specification.website/spec/agent-readiness/okf-bundle/",
     "claim": "Joost de Valk (The Website Specification), *Open Knowledge Format (OKF) bundle*, fetched 2026-10-30",
     "date": null,
     "quote": "OKF deliberately leaves serving and discovery out of scope. A bundle on its own is undiscoverable; pair it with a discovery surface - an AI Catalog entry and an llms.txt pointer - so agents can find it. / This site ships it: the bundle targets OKF 0.2, is generated from the same content collection as every other surface, and is served browsable at /okf/, with the whole tree packaged as /okf.tar.gz.",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://www.rfc-editor.org/rfc/rfc7763.html",
     "claim": "S. Leonard (Penango, Inc. / IETF), *RFC 7763: The text/markdown Media Type*, published March 2016",
     "date": null,
     "quote": "This document registers the text/markdown media type for use with",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://docs.github.com/en/communities/setting-up-your-project-for-healthy-contributions/setting-guidelines-for-repository-contributors",
     "claim": "GitHub, *Setting guidelines for repository contributors*, fetched 2026-11-12",
     "date": null,
     "quote": "To help your project contributors do good work, you can add a file with contribution guidelines to your project repository's root, docs , or .github folder.",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://agents.md/",
     "claim": "Agentic AI Foundation (Linux Foundation), *AGENTS.md*, fetched 2026-10-30",
     "date": null,
     "quote": "Think of AGENTS.md as a README for agents: a dedicated, predictable place to provide the context and instructions to help AI coding agents work on your project.",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://llmstxt.org",
     "claim": "Jeremy Howard, *The /llms.txt file, v2*, published 2024-09-03; modified 2026-08-10",
     "date": null,
     "quote": "We propose adding a /llms.txt markdown file to websites to provide LLM-friendly content. The file can be placed at the site root, or at any path within it / An H1 with the name of the project or site. This is the only required section",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://raw.githubusercontent.com/apache/ossie/main/core-spec/spec.md",
     "claim": "Apache Software Foundation, *Apache Ossie - Core Metadata Specification*, draft version 0.2.0.dev0; fetched 2026-10-30",
     "date": null,
     "quote": "Version: 0.2.0.dev0 / Apache Ossie specification version (0.2.0.dev0) / Unique identifier for the semantic model",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://raw.githubusercontent.com/apache/ossie/main/README.md",
     "claim": "Apache Software Foundation, *Apache Ossie (incubating)*, fetched 2026-10-30",
     "date": null,
     "quote": "Apache Ossie is a collaborative, open-source effort dedicated to standardizing and streamlining semantic model exchange",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://agentskills.io/specification",
     "claim": "Agent Skills, *Specification*, fetched 2026-10-30",
     "date": null,
     "quote": "A skill is a directory containing, at minimum, a SKILL.md file / The SKILL.md file must contain YAML frontmatter followed by Markdown content.",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://agentskills.io/home",
     "claim": "Agent Skills (originally developed by Anthropic), *Agent Skills Overview*, fetched 2026-10-30",
     "date": null,
     "quote": "This file includes metadata (name and description, at minimum) and instructions that tell an agent how to perform a specific task.",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/",
     "claim": "Cloudflare, *Markdown for Agents*, fetched 2026-10-30",
     "date": null,
     "quote": "the client needs to add the Accept negotiation header with text/markdown as one of the options. / they can express the preference for text/markdown in the request and our network will automatically and efficiently convert the HTML to Markdown, when possible, on the fly.",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://docs.aembit.io/llm-resources/",
     "claim": "Aembit, *AI Assistant Integration Resources*, fetched 2026-10-30",
     "date": null,
     "quote": "Aembit publishes its documentation in two machine-readable formats for AI coding assistants and large language models (LLMs). / Use the OKF bundle when your agent has a persistent workspace and file tools (Claude Code, Cursor, Copilot agents). / Tarball: docs.aembit.io/okf.tar.gz",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://docs.aembit.io/okf/index.md",
     "claim": "Aembit, *OKF bundle index.md*, okf_version \"0.1\"; fetched 2026-10-30",
     "date": null,
     "quote": "okf_version: \"0.1\" / This is an Open Knowledge Format (OKF) bundle of the Aembit documentation / content-type: text/markdown; charset=utf-8",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://specification.website/okf/index.md",
     "claim": "The Website Specification, *OKF bundle index.md*, okf_version \"0.2\"; fetched 2026-10-30",
     "date": null,
     "quote": "okf_version: \"0.2\" / content-type: text/markdown; charset=utf-8 / An Open Knowledge Format bundle of 178 checks across 10 categories",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://raw.githubusercontent.com/FastEndpoints/FastEndpoints/main/.okf/index.md",
     "claim": "FastEndpoints, *.okf/index.md*, okf_version \"0.1\"; fetched 2026-11-04",
     "date": null,
     "quote": "HTTP 200 ... content-type: text/plain; charset=utf-8 ... okf_version: \"0.1\" ... # OKF Knowledge Set Compact operational knowledge for agents working in the FastEndpoints repository. / okf_version: \"0.1\"",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://raw.githubusercontent.com/floegence/floret/main/okf/index.md",
     "claim": "Floret (floegence/floret), *okf/index.md*, okf_version \"0.1\"; fetched 2026-11-04",
     "date": null,
     "quote": "HTTP 200 ... content-type: text/plain; charset=utf-8 ... okf_version: \"0.1\" ... # Floret Knowledge Bundle This bundle gives humans and agents a compact map of Floret's purpose / okf_version: \"0.1\"",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://cloud.google.com/blog/products/data-analytics/knowledge-catalog-self-learning-context-enrichment-for-ai-agents",
     "claim": "Firat Elbey and Vasiya Krishnan (Google Cloud), *Introducing new self-learning context enrichment in Knowledge Catalog*, datePublished 2026-10-22; page byline October 23, 2026",
     "date": null,
     "quote": "you can import an OKF bundle to become a context set and export it back out as OKF so your context stays portable. / \"datePublished\":\"2026-10-22\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Google Cloud\" / Introducing new self-learning context enrichment in Knowledge Catalog October 23, 2026 Firat Elbey",
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://github.com/atomicstrata/llm-wiki-compiler/releases/tag/v0.10.0",
     "claim": "atomicstrata, *Release v0.10.0 · llm-wiki-compiler*, published 2026-06-14",
     "date": null,
     "quote": "Adds a review-policy gate for generated knowledge, a full Open Knowledge Format (OKF) export/import round-trip, and a Mintlify documentation site. / \"published_at\": \"2026-06-14T23:58:57Z\"",
     "ref": 25
    },
    {
     "label": "[26]",
     "url": "https://github.com/GoogleCloudPlatform/open-knowledge-format/issues/37",
     "claim": "Danielmelody, *Community implementation: xMatrix bidirectional OKF Pages*, opened 2026-10-12",
     "date": null,
     "quote": "xMatrix now supports bidirectional OKF v0.2 bundles for its collaborative Pages. / This is a community implementation, not a request to imply Google endorsement. / \"createdAt\":\"2026-10-12T17:50:59Z\" / \"updatedAt\":\"2026-10-12T17:50:59Z\",\"title\":\"Community implementation: xMatrix bidirectional OKF Pages\"",
     "ref": 26
    },
    {
     "label": "[27]",
     "url": "https://docs.memanto.ai/integrations/okf",
     "claim": "Memanto, *Open Knowledge Format (OKF)*, modified 2026-10-19",
     "date": null,
     "quote": "Memanto exports OKF v0.2 bundles; the bundle's root index.md declares okf_version: \"0.2\". / Load any OKF bundle into an agent with memanto migrate okf / \"dateModified\":\"2026-10-19T20:26:14.549Z\"",
     "ref": 27
    },
    {
     "label": "[28]",
     "url": "https://openknowledgeformat.com/ecosystem",
     "claim": "Open Knowledge Format, *The OKF ecosystem*, verified 2026-09-14",
     "date": null,
     "quote": "Verified 2026-09-14 / This matrix records capabilities declared in linked documentation or repositories as of 2026-09-14. It is an implementation snapshot, not a certification mark. / | Google reference agent ↗ | v0.2 | Producer and viewer | Emits and displays v0.2 fields | Index, search, and graph viewer | / | Google Cloud Knowledge Catalog ↗ | v0.2 | Publisher and governed serving layer | Maps v0.2 signal fields to indexed aspects | Search, LookupContext, entries.get, and IAM | / | OpenKnowledge ↗ | v0.2 | Editor, rules, CLI, MCP | Validates optional field families | Agentic search and generated indexes | / | serradura/okf ↗ | v0.2 | Ruby library, CLI, MCP, TUI | Reads, validates, and searches v0.2 | Text search, MCP, and graph | / | okfcli/okf ↗ | v0.2 | Go library and CLI | Trust tiers, staleness, provenance | Search, graph, links, and list | / | W4G1/okf ↗ | v0.2 | Rust library and CLI | Trust and clock-pinned staleness | Links, graph, parse, and diff | / | okf-toolkit ↗ | v0.1 and v0.2 | CLI, MCP, GitHub Action | Version-scoped lint rules | MCP resources and tools | / | OpenWiki ↗ | v0.1 | Wiki producer and viewer | v0.2 migration remains open | Indexes, graph, connectors |",
     "ref": 28
    }
   ],
   "form": "document-format",
   "governance": "GoogleCloudPlatform/open-knowledge-format, created 2026-08-11, is the canonical home of the specification. The okf/ copy in GoogleCloudPlatform/knowledge-catalog is a frozen snapshot, no longer maintained.",
   "group": null,
   "hatnote_md": "This page is about the Open Knowledge Format (OKF), an open specification from Google Cloud for a directory of Markdown files with YAML frontmatter. It is not the Open Knowledge Foundation (okfn.org), a global not-for-profit organization. For a site-level list of pages for LLMs, see [llms.txt](/protocols/llms-txt/). For instructions to coding agents in a repository, see [AGENTS.md](/protocols/agents-md/).",
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against the OKF v0.2 SPEC.md, the original Google Cloud blog announcement, and the repo-migration notice in the old knowledge-catalog/okf directory"
    },
    {
     "date": "2026-10-28",
     "note": "Expanded primary-source verified record with 4 live OKF bundles, 6 implementation citations, 3 recent coverage items, and 17 primary-source references"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "okf",
   "implementation": "shipping",
   "last_verified": "2026-11-12",
   "name": "Open Knowledge Format",
   "native_status": "Version 0.2. Google called v0.1 \"a starting point, not a finished standard.\" The repository license record is Apache License 2.0.",
   "origin": {
    "date": "2026-06-12",
    "org": "Google Cloud (Sam McVeety, Tech Lead, Data Analytics; Amir Hormati, Tech Lead, BigQuery, Engineering, Data Cloud)"
   },
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "draft",
   "probe": {
    "method": "GET",
    "on_absent": "No web-served OKF bundle index at /okf/index.md; the organization may still distribute OKF bundles via git repositories or tarballs",
    "parse": "YAML frontmatter at /okf/index.md declaring okf_version (0.1 or 0.2), linking to concept .md files whose frontmatter carries a non-empty type field (OKF §8, §11)",
    "path": "{origin}/okf/index.md"
   },
   "question": "How can an organization package durable, structured knowledge (schemas, metrics, playbooks, runbooks) so both humans and agents can read, produce, and trust it without a bespoke SDK?",
   "scope": "general",
   "spec_url": "https://github.com/GoogleCloudPlatform/open-knowledge-format/blob/main/SPEC.md",
   "step": "read",
   "summary_md": "**Open Knowledge Format** (`OKF`) is an open specification introduced by Google Cloud on 2026-06-12 that formalizes the LLM-wiki pattern into a portable directory of Markdown files with YAML frontmatter. Every non-reserved Markdown concept file requires only a `type` key in its YAML frontmatter, while a bundle-root `index.md` may optionally declare `okf_version`. Consumers SHOULD preserve unknown keys when round-tripping and MUST NOT reject documents containing unrecognized fields. Following v0.1, Version 0.2 (published 2026-07-24) added opt-in frontmatter fields for provenance, trust tiers, and lifecycle status. The canonical specification, reference agent, and sample bundles are maintained in `GoogleCloudPlatform/open-knowledge-format`, superseding the frozen `okf/` snapshot in `GoogleCloudPlatform/knowledge-catalog`.",
   "track": "single-vendor",
   "version": {
    "date": "2026-07-24",
    "label": "0.2"
   },
   "watch": [
    {
     "type": "github",
     "repo": "GoogleCloudPlatform/open-knowledge-format",
     "mode": "release"
    }
   ],
   "use_cases": [
    "serve-content-to-agents",
    "describe-agent-capabilities",
    "audit-agent-actions"
   ],
   "audience": [
    "agent-builder",
    "platform",
    "standards-body"
   ],
   "pairs_with": [
    "agents-md",
    "llms-txt",
    "osi",
    "anthropic-agent-skills-format",
    "cloudflare-markdown-for-agents"
   ],
   "prerequisites": [],
   "tier": "flagship",
   "lifecycle_status": "active",
   "wire_archetype": "web_discovery",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "This page is about the Open Knowledge Format (OKF), an open specification from Google Cloud for a directory of Markdown files with YAML frontmatter. It is not the Open Knowledge Foundation (okfn.org), a global not-for-profit organization. For a site-level list of pages for LLMs, see [llms.txt](/protocols/llms-txt/). For instructions to coding agents in a repository, see [AGENTS.md](/protocols/agents-md/). [1][2][3]",
   "v05_elevator_pitch_md": "Open Knowledge Format (OKF) is a portable packaging specification from Google Cloud that turns internal organizational context—such as table schemas, metric definitions, and incident runbooks—into structured directories of Markdown files for AI agents. Instead of leaving institutional knowledge scattered across disconnected catalogs, wikis, and bespoke agent adapters, teams publish versioned Markdown bundles with standardized YAML frontmatter (`type` and optional `index.md` metadata) that any compatible LLM tool can consume directly. [1][2]",
   "v05_lead_md": "**Open Knowledge Format** (`OKF`) is an open specification introduced by Google Cloud on 2026-06-12 that formalizes the LLM-wiki pattern into a portable directory of Markdown files with YAML frontmatter. [1] Every non-reserved Markdown concept file requires only a `type` key in its YAML frontmatter, while a bundle-root `index.md` may optionally declare `okf_version`. Consumers SHOULD preserve unknown keys when round-tripping and MUST NOT reject documents containing unrecognized fields. [2] Following v0.1, Version 0.2 (published 2026-07-24) added opt-in frontmatter fields for provenance, trust tiers, and lifecycle status. The canonical specification, reference agent, and sample bundles are maintained in `GoogleCloudPlatform/open-knowledge-format`, superseding the frozen `okf/` snapshot in `GoogleCloudPlatform/knowledge-catalog`. [2][4][5]",
   "v05_identity_sentence_md": "**Open Knowledge Format** (`OKF`) is an open specification introduced by Google Cloud on 2026-06-12 that formalizes the LLM-wiki pattern into a portable directory of Markdown files with YAML frontmatter. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Read](/category/read/) (`read`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "Sam McVeety (Tech Lead, Data Analytics) and Amir Hormati (Tech Lead, BigQuery, Engineering, Data Cloud), Google Cloud, 2026-06-12 [1]"
    },
    {
     "label": "Governed by",
     "value_md": "Google Cloud (`GoogleCloudPlatform/open-knowledge-format`, canonical home; supersedes frozen `knowledge-catalog` `okf/` snapshot) [5][6]"
    },
    {
     "label": "Track",
     "value_md": "Published by Google Cloud (`GoogleCloudPlatform/open-knowledge-format`, created 2026-08-11; `single-vendor`) [1][6]"
    },
    {
     "label": "Status",
     "value_md": "Version 0.2 (v0.1 introduced as \"a starting point, not a finished standard\") [1][2]"
    },
    {
     "label": "Version",
     "value_md": "Version 0.2 (2026-07-24; ISO 8601 UTC offset amendment 2026-08-21) [2][4][7]"
    },
    {
     "label": "Message format",
     "value_md": "YAML frontmatter; `type` is the only always-required key. SHOULD preserve unknown keys; MUST NOT reject them. [2]"
    },
    {
     "label": "Specification",
     "value_md": "[Open Knowledge Format (OKF), Version 0.2](https://github.com/GoogleCloudPlatform/open-knowledge-format/blob/main/SPEC.md) [2]"
    },
    {
     "label": "Found at",
     "value_md": "A git repository, tarball, or zip, or a subdirectory. Root `index.md` may declare `okf_version`. [2]"
    },
    {
     "label": "Licence",
     "value_md": "Apache License 2.0 (`Apache-2.0`) on the GoogleCloudPlatform/open-knowledge-format repository. [6]"
    }
   ],
   "v05_problem_md": "A table schema, a metric's meaning, an incident runbook, and join paths are internal knowledge that foundation models use. Today these atoms of knowledge live in highly fragmented systems: metadata catalogs, wikis, shared drives, and code comments. [1] OKF packages curated domain context into versioned Markdown bundles with shared frontmatter conventions, letting wikis written by different producers be consumed by different agents without custom translation adapters. [1][4] There is no schema registry, no central authority, and no required tooling. Non-goals include prescribing storage, serving, or query infrastructure and replacing domain-specific schemas such as Avro, Protobuf, or OpenAPI. [2]",
   "v05_mechanism_delta_md": "OKF packages curated domain context into versioned Markdown bundles with shared frontmatter conventions, letting wikis written by different producers be consumed by different agents without custom translation adapters. [1][4]",
   "v05_scope_boundary_md": "There is no schema registry, no central authority, and no required tooling. Non-goals include prescribing storage, serving, or query infrastructure and replacing domain-specific schemas such as Avro, Protobuf, or OpenAPI. [2]",
   "v05_fuzzy_additions": [
    {
     "id": "markdown-concept-files-yaml-frontmatter-and-bundle-distribution",
     "heading": "Markdown concept files, YAML frontmatter, and bundle distribution",
     "body_md": "An OKF bundle is intentionally minimal so that any tool capable of reading plain text with `cat` or cloning a repository with `git clone` can inspect and distribute it without specialized runtime dependencies. [2]",
     "bullets": [
      {
       "label": "Concept file and frontmatter",
       "text_md": "Beyond the mandatory `type` key, recommended frontmatter keys carried forward across versions are `title`, `description`, `resource`, and `tags`, alongside reserved navigation (`index.md`) and changelog (`log.md`) files. Producers MAY include arbitrary extension keys. [2]"
      },
      {
       "label": "Types and link relationships",
       "text_md": "Type values are not registered centrally, and consumers MUST tolerate unknown types gracefully. The specific kind of a link (parent/child, references, joins-with, or `depends-on`) is conveyed by the surrounding prose, not by the link itself. [2]"
      },
      {
       "label": "Bundle distribution",
       "text_md": "A bundle MAY be distributed as a git repository, a tarball or zip archive, or a subdirectory within a larger repository. Bundles MAY declare `okf_version` in a bundle-root `index.md`, the only place frontmatter is permitted in an `index.md`. [2]"
      },
      {
       "label": "Conformance and bounded reads",
       "text_md": "A bundle is conformant with OKF v0.2 when every non-reserved markdown file contains a parseable YAML frontmatter block and a non-empty `type` field. The okf-mcp 1.0.0 tools map CLI read verbs, including `validate`, and every answer is bounded for a context window. [2][8]"
      }
     ]
    },
    {
     "id": "provenance-trust-lifecycle-and-spec-v0-2-migration",
     "heading": "Provenance, trust, lifecycle, and SPEC v0.2 migration",
     "body_md": "OKF v0.2 makes provenance, trust, lifecycle, and attestation first-class in frontmatter while keeping a v0.1 bundle valid without modification: an unverified concept is distinguishable from a verified one, although never rejected for the difference. Section 13.1 lists two breaking changes from v0.1: `timestamp` is superseded by `generated.at`, and the body `# Citations` list is superseded by frontmatter `sources`. [2][4]",
     "bullets": [
      {
       "label": "Provenance timestamps",
       "text_md": "`sources` records the materials a concept derives from, external or internal to the bundle. `generated.at` is an ISO 8601 datetime marking the content's last meaningful change, and consumers use it to tell a recent edit from a stale fact. [2]"
      },
      {
       "label": "Trust tiers and status",
       "text_md": "From `verified`, a consumer derives a trust tier: no `verified` key is unverified, confirmation by machine actors only is machine-confirmed, and confirmation by a `human:` actor is human-reviewed. Trust tiers are advisory signals, not access control. `status` is `draft`, `stable`, or `deprecated`, and absent `status` means stable. [2][4]"
      },
      {
       "label": "Web discovery pairing",
       "text_md": "Initial v0.2 materials were published under `github.com/GoogleCloudPlatform/knowledge-catalog/tree/main/okf` before moving to the standalone repository. Because OKF leaves serving and discovery out of scope, web publishers such as `specification.website` pair hosted bundles with an AI Catalog entry or `llms.txt` pointer so agents can locate them. [4][5][9]"
      },
      {
       "label": "Convention files and MCP",
       "text_md": "A similar knowledge-as-wiki pattern keeps reappearing as the `AGENTS.md` family of convention files and as repos full of `index.md` and `log.md`, and each instance is bespoke. Separately, okf-mcp 1.0.0 serves OKF bundles over the Model Context Protocol, with answers bounded for a context window. [1][8]"
      }
     ]
    }
   ],
   "v05_diagram": null,
   "v05_wire_artifact": {
    "title": "§4.3 concept bound to a resource: Customer Orders",
    "heading": "§4.3 concept bound to a resource: Customer Orders",
    "lang": "markdown",
    "code": "---\ntype: BigQuery Table\ntitle: Customer Orders\ndescription: One row per completed customer order across all channels.\nresource: https://console.cloud.google.com/bigquery?p=acme&d=sales&t=orders\ntags: [sales, orders, revenue]\ngenerated: { by: reference_agent/gemini-2.5-pro, at: 2026-05-28T14:30:00Z }\n---\n\n# Schema\n\n| Column        | Type      | Description                              |\n|---------------|-----------|------------------------------------------|\n| `order_id`    | STRING    | Globally unique order identifier.        |\n| `customer_id` | STRING    | Foreign key into [customers](/tables/customers.md). |\n| `total_usd`   | NUMERIC   | Order total in US dollars.               |\n| `placed_at`   | TIMESTAMP | When the customer submitted the order.   |\n\n# Joins\n\nJoined with [customers](/tables/customers.md) on `customer_id`.",
    "caption_md": "Example of a concept bound to a resource. Frontmatter sets `type` to `BigQuery Table` and `title` to `Customer Orders`. [2]"
   },
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "The text/markdown Media Type (RFC 7763)",
      "spec_or_rfc": "RFC 7763",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "OKF is a directory of Markdown files with YAML frontmatter; RFC 7763 only registers text/markdown. [2][10]"
     },
     {
      "name": "Repository README.md & CONTRIBUTING.md Conventions",
      "spec_or_rfc": "CONTRIBUTING.md",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "OKF concept files require a type field; a README.md or CONTRIBUTING.md has no okf_version. [2][11]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "agents-md",
      "target_name": "AGENTS.md",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "AGENTS.md is one README for coding agents; OKF is a directory of Markdown files with YAML frontmatter. [2][12]"
     },
     {
      "target_id": "llms-txt",
      "target_name": "llms.txt",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "llms.txt is one Markdown file whose only required section is an H1; OKF is a multi-file directory. [2][13]"
     },
     {
      "target_id": "osi",
      "target_name": "Apache Ossie (formerly Open Semantic Interchange)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "Ossie 0.2.0.dev0 requires a version and a name; OKF requires only a type key. [2][14][15]"
     },
     {
      "target_id": "anthropic-agent-skills-format",
      "target_name": "Agent Skills",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "A skill is a SKILL.md directory with name and description; OKF's only required key is type. [2][16][17]"
     },
     {
      "target_id": "cloudflare-markdown-for-agents",
      "target_name": "Markdown for Agents",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Markdown for Agents converts HTML when Accept includes text/markdown; OKF stores Markdown files. [2][18]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (9 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).",
    "side_a": {
     "visible": true,
     "heading": "Who publishes or hosts it",
     "col4_header": "Artifact",
     "note_md": null,
     "rows": [
      {
       "actor": "Aembit",
       "role": "Docs publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "`okf_version: \"0.1\"` at `https://docs.aembit.io/okf/index.md` (`text/markdown`, HTTP 200).",
       "source_md": "[Aembit / AI Assistant Integration Resources](https://docs.aembit.io/llm-resources/) [19] · [Aembit / OKF index.md (checked 2026-10-30)](https://docs.aembit.io/okf/index.md) [20]"
      },
      {
       "actor": "The Website Specification",
       "role": "Docs publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "`okf_version: \"0.2\"` at `https://specification.website/okf/index.md` (`text/markdown`, HTTP 200).",
       "source_md": "[The Website Specification / Open Knowledge Format (OKF) bundle](https://specification.website/spec/agent-readiness/okf-bundle/) [9] · [The Website Specification / OKF index.md (checked 2026-10-30)](https://specification.website/okf/index.md) [21]"
      },
      {
       "actor": "FastEndpoints",
       "role": "Repository publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-11-04",
       "col4_md": "`okf_version: \"0.1\"` at `.okf/index.md` (`text/plain`, HTTP 200) on main.",
       "source_md": "[FastEndpoints / .okf/index.md (checked 2026-11-04)](https://raw.githubusercontent.com/FastEndpoints/FastEndpoints/main/.okf/index.md) [22]"
      },
      {
       "actor": "Floret",
       "role": "Repository publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-11-04",
       "col4_md": "`okf_version: \"0.1\"` at `okf/index.md` (`text/plain`, HTTP 200) on main.",
       "source_md": "[Floret / okf/index.md (checked 2026-11-04)](https://raw.githubusercontent.com/floegence/floret/main/okf/index.md) [23]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Bot, client & tool support",
     "col4_header": "Checked behavior",
     "note_md": null,
     "rows": [
      {
       "actor": "Google Cloud Knowledge Catalog",
       "role": "Context catalog",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-23",
       "col4_md": "Imports an OKF bundle as a context set and exports it back out as OKF.",
       "source_md": "[Google Cloud / Introducing the Open Knowledge Format (2026-06-12)](https://cloud.google.com/blog/products/data-analytics/how-the-open-knowledge-format-can-improve-data-sharing) [1] · [Google Cloud / Knowledge Catalog context enrichment (2026-10-22)](https://cloud.google.com/blog/products/data-analytics/knowledge-catalog-self-learning-context-enrichment-for-ai-agents) [24]"
      },
      {
       "actor": "llm-wiki-compiler (atomicstrata)",
       "role": "Compiler",
       "status": "Supported",
       "status_display": "Supported · as of 2026-06-14",
       "col4_md": "Release `v0.10.0` adds an OKF export/import round-trip.",
       "source_md": "[atomicstrata / llm-wiki-compiler v0.10.0 (2026-06-14)](https://github.com/atomicstrata/llm-wiki-compiler/releases/tag/v0.10.0) [25]"
      },
      {
       "actor": "okf-mcp (Rodrigo Serradura)",
       "role": "MCP server",
       "status": "Supported",
       "status_display": "Supported · as of 2026-08-11",
       "col4_md": "`okf-mcp 1.0.0` serves bundles over MCP with ten read-only tools.",
       "source_md": "[Rodrigo Serradura / okf-mcp 1.0.0 (2026-08-11)](https://okfgem.com/blog/okf-mcp-1-0-0/) [8]"
      },
      {
       "actor": "xMatrix",
       "role": "Community implementation",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-12",
       "col4_md": "Issue #37 says xMatrix supports bidirectional OKF v0.2 Pages bundles.",
       "source_md": "[Danielmelody / OKF issue #37 (2026-10-12)](https://github.com/GoogleCloudPlatform/open-knowledge-format/issues/37) [26]"
      },
      {
       "actor": "Memanto",
       "role": "Agent memory",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-19",
       "col4_md": "Exports OKF v0.2; root `index.md` declares `okf_version: \"0.2\"`.",
       "source_md": "[Memanto / Open Knowledge Format (OKF) (modified 2026-10-19)](https://docs.memanto.ai/integrations/okf) [27]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [
     {
      "label": "Probed bundle-root version field",
      "as_of": "2026-11-04",
      "value_md": "Of 4 probed bundle-root index.md files (checked 2026-10-30 to 2026-11-04), 1 declares okf_version 0.2 (specification.website) and 3 declare okf_version 0.1 (Aembit, FastEndpoints, and Floret). [20][21][22][23]"
     },
     {
      "label": "Documented consumer version claims",
      "as_of": "2026-10-22",
      "value_md": "2 of 5 documented consumer write-ups name OKF v0.2 in their text: Memanto export and xMatrix Pages. Google Cloud's October 2026 Knowledge Catalog blog post, llm-wiki-compiler v0.10.0, and okf-mcp 1.0.0 describe OKF ingest, export, or read without naming spec version 0.2 in the post text (whereas the separate OKF ecosystem directory compatibility matrix below lists Google Cloud Knowledge Catalog at v0.2). [8][24][25][26][27]"
     },
     {
      "label": "OKF ecosystem directory",
      "as_of": "2026-09-14",
      "value_md": "The OKF ecosystem directory, verified 2026-09-14, lists 8 tools. Six declare v0.2 only (Google reference agent, Google Cloud Knowledge Catalog, OpenKnowledge, serradura/okf, okfcli/okf, and W4G1/okf). okf-toolkit declares v0.1 and v0.2. OpenWiki declares v0.1. [28]"
     }
    ],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "knowledge-linkset",
     "target_name": "The 'knowledge-linkset' Well-Known URI for Publishing Knowledge Artefacts",
     "relation_label": "Complements",
     "delta": "knowledge-linkset is a catalog of knowledge artefacts at /.well-known/knowledge-linkset and can attach a SHA-256 digest, while OKF is a bundle of Markdown files with YAML frontmatter and defines no web path.",
     "item_md": "**[The 'knowledge-linkset' Well-Known URI for Publishing Knowledge Artefacts](/protocols/knowledge-linkset/)** (Complements) — knowledge-linkset is a catalog of knowledge artefacts at /.well-known/knowledge-linkset and can attach a SHA-256 digest, while OKF is a bundle of Markdown files with YAML frontmatter and defines no web path."
    },
    {
     "item_md": "**[Read protocols](/category/read/)** — Category index for `read` standards."
    }
   ],
   "v05_compiled_md": "---\nid: okf\ntitle: \"Open Knowledge Format\"\ntier: flagship\nlifecycle_status: active\ncategory: read\nform: document-format\nwire_archetype: web_discovery\nspec_url: https://github.com/GoogleCloudPlatform/open-knowledge-format/blob/main/SPEC.md\nlast_checked: 2026-11-12\n---\n\n# Open Knowledge Format\n\n**Category:** [Read](/category/read/) (`read`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-11-12\n\n> *This page is about the Open Knowledge Format (OKF), an open specification from Google Cloud for a directory of Markdown files with YAML frontmatter. It is not the Open Knowledge Foundation (okfn.org), a global not-for-profit organization. For a site-level list of pages for LLMs, see [llms.txt](/protocols/llms-txt/). For instructions to coding agents in a repository, see [AGENTS.md](/protocols/agents-md/). [1][2][3]*\n\n> **In brief:** Open Knowledge Format (OKF) is a portable packaging specification from Google Cloud that turns internal organizational context—such as table schemas, metric definitions, and incident runbooks—into structured directories of Markdown files for AI agents. Instead of leaving institutional knowledge scattered across disconnected catalogs, wikis, and bespoke agent adapters, teams publish versioned Markdown bundles with standardized YAML frontmatter (`type` and optional `index.md` metadata) that any compatible LLM tool can consume directly. [1][2]\n\n**Open Knowledge Format** (`OKF`) is an open specification introduced by Google Cloud on 2026-06-12 that formalizes the LLM-wiki pattern into a portable directory of Markdown files with YAML frontmatter. [1] Every non-reserved Markdown concept file requires only a `type` key in its YAML frontmatter, while a bundle-root `index.md` may optionally declare `okf_version`. Consumers SHOULD preserve unknown keys when round-tripping and MUST NOT reject documents containing unrecognized fields. [2] Following v0.1, Version 0.2 (published 2026-07-24) added opt-in frontmatter fields for provenance, trust tiers, and lifecycle status. The canonical specification, reference agent, and sample bundles are maintained in `GoogleCloudPlatform/open-knowledge-format`, superseding the frozen `okf/` snapshot in `GoogleCloudPlatform/knowledge-catalog`. [2][4][5]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Read](/category/read/) (`read`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | Sam McVeety (Tech Lead, Data Analytics) and Amir Hormati (Tech Lead, BigQuery, Engineering, Data Cloud), Google Cloud, 2026-06-12 [1] |\n| **Governed by** | Google Cloud (`GoogleCloudPlatform/open-knowledge-format`, canonical home; supersedes frozen `knowledge-catalog` `okf/` snapshot) [5][6] |\n| **Track** | Published by Google Cloud (`GoogleCloudPlatform/open-knowledge-format`, created 2026-08-11; `single-vendor`) [1][6] |\n| **Status** | Version 0.2 (v0.1 introduced as \"a starting point, not a finished standard\") [1][2] |\n| **Version** | Version 0.2 (2026-07-24; ISO 8601 UTC offset amendment 2026-08-21) [2][4][7] |\n| **Message format** | YAML frontmatter; `type` is the only always-required key. SHOULD preserve unknown keys; MUST NOT reject them. [2] |\n| **Specification** | [Open Knowledge Format (OKF), Version 0.2](https://github.com/GoogleCloudPlatform/open-knowledge-format/blob/main/SPEC.md) [2] |\n| **Found at** | A git repository, tarball, or zip, or a subdirectory. Root `index.md` may declare `okf_version`. [2] |\n| **Licence** | Apache License 2.0 (`Apache-2.0`) on the GoogleCloudPlatform/open-knowledge-format repository. [6] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Markdown concept files, YAML frontmatter, and bundle distribution](#markdown-concept-files-yaml-frontmatter-and-bundle-distribution)\n3. [Provenance, trust, lifecycle, and SPEC v0.2 migration](#provenance-trust-lifecycle-and-spec-v0-2-migration)\n4. [Counterparts and related standards](#counterparts-and-related-standards)\n5. [Adoption and ecosystem](#adoption-and-ecosystem)\n6. [See also](#see-also)\n7. [References](#references)\n\n---\n\n## Problem and scope\n\nA table schema, a metric's meaning, an incident runbook, and join paths are internal knowledge that foundation models use. Today these atoms of knowledge live in highly fragmented systems: metadata catalogs, wikis, shared drives, and code comments. [1] OKF packages curated domain context into versioned Markdown bundles with shared frontmatter conventions, letting wikis written by different producers be consumed by different agents without custom translation adapters. [1][4] There is no schema registry, no central authority, and no required tooling. Non-goals include prescribing storage, serving, or query infrastructure and replacing domain-specific schemas such as Avro, Protobuf, or OpenAPI. [2]\n\n### §4.3 concept bound to a resource: Customer Orders\n\n```markdown\n---\ntype: BigQuery Table\ntitle: Customer Orders\ndescription: One row per completed customer order across all channels.\nresource: https://console.cloud.google.com/bigquery?p=acme&d=sales&t=orders\ntags: [sales, orders, revenue]\ngenerated: { by: reference_agent/gemini-2.5-pro, at: 2026-05-28T14:30:00Z }\n---\n\n# Schema\n\n| Column        | Type      | Description                              |\n|---------------|-----------|------------------------------------------|\n| `order_id`    | STRING    | Globally unique order identifier.        |\n| `customer_id` | STRING    | Foreign key into [customers](/tables/customers.md). |\n| `total_usd`   | NUMERIC   | Order total in US dollars.               |\n| `placed_at`   | TIMESTAMP | When the customer submitted the order.   |\n\n# Joins\n\nJoined with [customers](/tables/customers.md) on `customer_id`.\n```\n\n*Example of a concept bound to a resource. Frontmatter sets `type` to `BigQuery Table` and `title` to `Customer Orders`. [2]*\n\n---\n\n## Markdown concept files, YAML frontmatter, and bundle distribution\n\nAn OKF bundle is intentionally minimal so that any tool capable of reading plain text with `cat` or cloning a repository with `git clone` can inspect and distribute it without specialized runtime dependencies. [2]\n\n- **Concept file and frontmatter:** Beyond the mandatory `type` key, recommended frontmatter keys carried forward across versions are `title`, `description`, `resource`, and `tags`, alongside reserved navigation (`index.md`) and changelog (`log.md`) files. Producers MAY include arbitrary extension keys. [2]\n- **Types and link relationships:** Type values are not registered centrally, and consumers MUST tolerate unknown types gracefully. The specific kind of a link (parent/child, references, joins-with, or `depends-on`) is conveyed by the surrounding prose, not by the link itself. [2]\n- **Bundle distribution:** A bundle MAY be distributed as a git repository, a tarball or zip archive, or a subdirectory within a larger repository. Bundles MAY declare `okf_version` in a bundle-root `index.md`, the only place frontmatter is permitted in an `index.md`. [2]\n- **Conformance and bounded reads:** A bundle is conformant with OKF v0.2 when every non-reserved markdown file contains a parseable YAML frontmatter block and a non-empty `type` field. The okf-mcp 1.0.0 tools map CLI read verbs, including `validate`, and every answer is bounded for a context window. [2][8]\n\n---\n\n## Provenance, trust, lifecycle, and SPEC v0.2 migration\n\nOKF v0.2 makes provenance, trust, lifecycle, and attestation first-class in frontmatter while keeping a v0.1 bundle valid without modification: an unverified concept is distinguishable from a verified one, although never rejected for the difference. Section 13.1 lists two breaking changes from v0.1: `timestamp` is superseded by `generated.at`, and the body `# Citations` list is superseded by frontmatter `sources`. [2][4]\n\n- **Provenance timestamps:** `sources` records the materials a concept derives from, external or internal to the bundle. `generated.at` is an ISO 8601 datetime marking the content's last meaningful change, and consumers use it to tell a recent edit from a stale fact. [2]\n- **Trust tiers and status:** From `verified`, a consumer derives a trust tier: no `verified` key is unverified, confirmation by machine actors only is machine-confirmed, and confirmation by a `human:` actor is human-reviewed. Trust tiers are advisory signals, not access control. `status` is `draft`, `stable`, or `deprecated`, and absent `status` means stable. [2][4]\n- **Web discovery pairing:** Initial v0.2 materials were published under `github.com/GoogleCloudPlatform/knowledge-catalog/tree/main/okf` before moving to the standalone repository. Because OKF leaves serving and discovery out of scope, web publishers such as `specification.website` pair hosted bundles with an AI Catalog entry or `llms.txt` pointer so agents can locate them. [4][5][9]\n- **Convention files and MCP:** A similar knowledge-as-wiki pattern keeps reappearing as the `AGENTS.md` family of convention files and as repos full of `index.md` and `log.md`, and each instance is bespoke. Separately, okf-mcp 1.0.0 serves OKF bundles over the Model Context Protocol, with answers bounded for a context window. [1][8]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **The text/markdown Media Type (RFC 7763)** | `RFC 7763` | Analogous to classic standard | OKF is a directory of Markdown files with YAML frontmatter; RFC 7763 only registers text/markdown. [2][10] |\n| **Repository README.md & CONTRIBUTING.md Conventions** | `CONTRIBUTING.md` | Analogous to classic standard | OKF concept files require a type field; a README.md or CONTRIBUTING.md has no okf_version. [2][11] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[AGENTS.md](/protocols/agents-md/)** | Peer alternative | AGENTS.md is one README for coding agents; OKF is a directory of Markdown files with YAML frontmatter. [2][12] |\n| **[llms.txt](/protocols/llms-txt/)** | Peer alternative | llms.txt is one Markdown file whose only required section is an H1; OKF is a multi-file directory. [2][13] |\n| **[Apache Ossie (formerly Open Semantic Interchange)](/protocols/osi/)** | Peer alternative | Ossie 0.2.0.dev0 requires a version and a name; OKF requires only a type key. [2][14][15] |\n| **[Agent Skills](/protocols/anthropic-agent-skills-format/)** | Complements | A skill is a SKILL.md directory with name and description; OKF's only required key is type. [2][16][17] |\n| **[Markdown for Agents](/protocols/cloudflare-markdown-for-agents/)** | Complements | Markdown for Agents converts HTML when Accept includes text/markdown; OKF stores Markdown files. [2][18] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (9 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).*\n\n### Who publishes or hosts it\n\n| Actor | Role | Status | Artifact | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Aembit** | Docs publisher | Live (HTTP 200) · checked 2026-10-30 | `okf_version: \"0.1\"` at `https://docs.aembit.io/okf/index.md` (`text/markdown`, HTTP 200). | [Aembit / AI Assistant Integration Resources](https://docs.aembit.io/llm-resources/) [19] · [Aembit / OKF index.md (checked 2026-10-30)](https://docs.aembit.io/okf/index.md) [20] |\n| **The Website Specification** | Docs publisher | Live (HTTP 200) · checked 2026-10-30 | `okf_version: \"0.2\"` at `https://specification.website/okf/index.md` (`text/markdown`, HTTP 200). | [The Website Specification / Open Knowledge Format (OKF) bundle](https://specification.website/spec/agent-readiness/okf-bundle/) [9] · [The Website Specification / OKF index.md (checked 2026-10-30)](https://specification.website/okf/index.md) [21] |\n| **FastEndpoints** | Repository publisher | Live (HTTP 200) · checked 2026-11-04 | `okf_version: \"0.1\"` at `.okf/index.md` (`text/plain`, HTTP 200) on main. | [FastEndpoints / .okf/index.md (checked 2026-11-04)](https://raw.githubusercontent.com/FastEndpoints/FastEndpoints/main/.okf/index.md) [22] |\n| **Floret** | Repository publisher | Live (HTTP 200) · checked 2026-11-04 | `okf_version: \"0.1\"` at `okf/index.md` (`text/plain`, HTTP 200) on main. | [Floret / okf/index.md (checked 2026-11-04)](https://raw.githubusercontent.com/floegence/floret/main/okf/index.md) [23] |\n\n### Bot, client & tool support\n\n| Actor | Role | Status | Checked behavior | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Google Cloud Knowledge Catalog** | Context catalog | Supported · as of 2026-10-23 | Imports an OKF bundle as a context set and exports it back out as OKF. | [Google Cloud / Introducing the Open Knowledge Format (2026-06-12)](https://cloud.google.com/blog/products/data-analytics/how-the-open-knowledge-format-can-improve-data-sharing) [1] · [Google Cloud / Knowledge Catalog context enrichment (2026-10-22)](https://cloud.google.com/blog/products/data-analytics/knowledge-catalog-self-learning-context-enrichment-for-ai-agents) [24] |\n| **llm-wiki-compiler (atomicstrata)** | Compiler | Supported · as of 2026-06-14 | Release `v0.10.0` adds an OKF export/import round-trip. | [atomicstrata / llm-wiki-compiler v0.10.0 (2026-06-14)](https://github.com/atomicstrata/llm-wiki-compiler/releases/tag/v0.10.0) [25] |\n| **okf-mcp (Rodrigo Serradura)** | MCP server | Supported · as of 2026-08-11 | `okf-mcp 1.0.0` serves bundles over MCP with ten read-only tools. | [Rodrigo Serradura / okf-mcp 1.0.0 (2026-08-11)](https://okfgem.com/blog/okf-mcp-1-0-0/) [8] |\n| **xMatrix** | Community implementation | Supported · as of 2026-10-12 | Issue #37 says xMatrix supports bidirectional OKF v0.2 Pages bundles. | [Danielmelody / OKF issue #37 (2026-10-12)](https://github.com/GoogleCloudPlatform/open-knowledge-format/issues/37) [26] |\n| **Memanto** | Agent memory | Supported · as of 2026-10-19 | Exports OKF v0.2; root `index.md` declares `okf_version: \"0.2\"`. | [Memanto / Open Knowledge Format (OKF) (modified 2026-10-19)](https://docs.memanto.ai/integrations/okf) [27] |\n\n### Ecosystem censuses\n\n- **Probed bundle-root version field** (*as of 2026-11-04*): Of 4 probed bundle-root index.md files (checked 2026-10-30 to 2026-11-04), 1 declares okf_version 0.2 (specification.website) and 3 declare okf_version 0.1 (Aembit, FastEndpoints, and Floret). [20][21][22][23]\n- **Documented consumer version claims** (*as of 2026-10-22*): 2 of 5 documented consumer write-ups name OKF v0.2 in their text: Memanto export and xMatrix Pages. Google Cloud's October 2026 Knowledge Catalog blog post, llm-wiki-compiler v0.10.0, and okf-mcp 1.0.0 describe OKF ingest, export, or read without naming spec version 0.2 in the post text (whereas the separate OKF ecosystem directory compatibility matrix below lists Google Cloud Knowledge Catalog at v0.2). [8][24][25][26][27]\n- **OKF ecosystem directory** (*as of 2026-09-14*): The OKF ecosystem directory, verified 2026-09-14, lists 8 tools. Six declare v0.2 only (Google reference agent, Google Cloud Knowledge Catalog, OpenKnowledge, serradura/okf, okfcli/okf, and W4G1/okf). okf-toolkit declares v0.1 and v0.2. OpenWiki declares v0.1. [28]\n\n---\n\n## See also\n\n- **[The 'knowledge-linkset' Well-Known URI for Publishing Knowledge Artefacts](/protocols/knowledge-linkset/)** *(Complements)* — knowledge-linkset is a catalog of knowledge artefacts at /.well-known/knowledge-linkset and can attach a SHA-256 digest, while OKF is a bundle of Markdown files with YAML frontmatter and defines no web path.\n- **Category:** [Read protocols](/category/read/)\n\n---\n\n## References\n\n1. Sam McVeety and Amir Hormati (Google Cloud), *Introducing the Open Knowledge Format* (published 2026-06-12) — <https://cloud.google.com/blog/products/data-analytics/how-the-open-knowledge-format-can-improve-data-sharing>\n2. GoogleCloudPlatform, *Open Knowledge Format (OKF), Version 0.2* (Version 0.2; fetched 2026-10-30) — <https://github.com/GoogleCloudPlatform/open-knowledge-format/blob/main/SPEC.md>\n3. Open Knowledge Foundation, *Open Knowledge Foundation – For a fair, sustainable and open future* (fetched 2026-10-30) — <https://okfn.org/en/>\n4. Sam McVeety and Amir Hormati (Google Cloud), *Open Knowledge format v0.2 tackles agentic trust* (datePublished 2026-07-24; page byline July 25, 2026) — <https://cloud.google.com/blog/products/data-analytics/okf-v0-2-adds-trust-signals>\n5. GoogleCloudPlatform, *okf/README.md (frozen snapshot in knowledge-catalog)* (fetched 2026-10-30) — <https://raw.githubusercontent.com/GoogleCloudPlatform/knowledge-catalog/main/okf/README.md>\n6. GoogleCloudPlatform, *open-knowledge-format* (created 2026-08-11; Apache License 2.0; fetched 2026-10-30) — <https://github.com/GoogleCloudPlatform/open-knowledge-format>\n7. GitHub (GoogleCloudPlatform/knowledge-catalog), *Commits for okf/SPEC.md* (v0.2 migration commit 2026-07-24; timestamp commit 2026-08-21) — <https://github.com/GoogleCloudPlatform/knowledge-catalog/commits/HEAD/okf/SPEC.md>\n8. Rodrigo Serradura, *Your bundles, served to any agent: okf-mcp 1.0.0* (published 2026-08-11) — <https://okfgem.com/blog/okf-mcp-1-0-0/>\n9. Joost de Valk (The Website Specification), *Open Knowledge Format (OKF) bundle* (fetched 2026-10-30) — <https://specification.website/spec/agent-readiness/okf-bundle/>\n10. S. Leonard (Penango, Inc. / IETF), *RFC 7763: The text/markdown Media Type* (published March 2016) — <https://www.rfc-editor.org/rfc/rfc7763.html>\n11. GitHub, *Setting guidelines for repository contributors* (fetched 2026-11-12) — <https://docs.github.com/en/communities/setting-up-your-project-for-healthy-contributions/setting-guidelines-for-repository-contributors>\n12. Agentic AI Foundation (Linux Foundation), *AGENTS.md* (fetched 2026-10-30) — <https://agents.md/>\n13. Jeremy Howard, *The /llms.txt file, v2* (published 2024-09-03; modified 2026-08-10) — <https://llmstxt.org>\n14. Apache Software Foundation, *Apache Ossie - Core Metadata Specification* (draft version 0.2.0.dev0; fetched 2026-10-30) — <https://raw.githubusercontent.com/apache/ossie/main/core-spec/spec.md>\n15. Apache Software Foundation, *Apache Ossie (incubating)* (fetched 2026-10-30) — <https://raw.githubusercontent.com/apache/ossie/main/README.md>\n16. Agent Skills, *Specification* (fetched 2026-10-30) — <https://agentskills.io/specification>\n17. Agent Skills (originally developed by Anthropic), *Agent Skills Overview* (fetched 2026-10-30) — <https://agentskills.io/home>\n18. Cloudflare, *Markdown for Agents* (fetched 2026-10-30) — <https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/>\n19. Aembit, *AI Assistant Integration Resources* (fetched 2026-10-30) — <https://docs.aembit.io/llm-resources/>\n20. Aembit, *OKF bundle index.md* (okf_version \"0.1\"; fetched 2026-10-30) — <https://docs.aembit.io/okf/index.md>\n21. The Website Specification, *OKF bundle index.md* (okf_version \"0.2\"; fetched 2026-10-30) — <https://specification.website/okf/index.md>\n22. FastEndpoints, *.okf/index.md* (okf_version \"0.1\"; fetched 2026-11-04) — <https://raw.githubusercontent.com/FastEndpoints/FastEndpoints/main/.okf/index.md>\n23. Floret (floegence/floret), *okf/index.md* (okf_version \"0.1\"; fetched 2026-11-04) — <https://raw.githubusercontent.com/floegence/floret/main/okf/index.md>\n24. Firat Elbey and Vasiya Krishnan (Google Cloud), *Introducing new self-learning context enrichment in Knowledge Catalog* (datePublished 2026-10-22; page byline October 23, 2026) — <https://cloud.google.com/blog/products/data-analytics/knowledge-catalog-self-learning-context-enrichment-for-ai-agents>\n25. atomicstrata, *Release v0.10.0 · llm-wiki-compiler* (published 2026-06-14) — <https://github.com/atomicstrata/llm-wiki-compiler/releases/tag/v0.10.0>\n26. Danielmelody, *Community implementation: xMatrix bidirectional OKF Pages* (opened 2026-10-12) — <https://github.com/GoogleCloudPlatform/open-knowledge-format/issues/37>\n27. Memanto, *Open Knowledge Format (OKF)* (modified 2026-10-19) — <https://docs.memanto.ai/integrations/okf>\n28. Open Knowledge Format, *The OKF ecosystem* (verified 2026-09-14) — <https://openknowledgeformat.com/ecosystem>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "",
   "adoption": {
    "level": "observed",
    "by": "Booking.com, Canva, Coursera, Expedia, Figma, ChatGPT, Codex, OpenAI Apps SDK UI, and 4 other verified implementations",
    "probe_run": null
   },
   "aliases": [
    "Apps SDK",
    "ChatGPT Apps",
    "OpenAI Apps SDK",
    "OpenAI Plugins"
   ],
   "analog": "Plugin manifest plus iframe component",
   "collisions": [
    "ChatGPT Plugins (the 2023 predecessor product, since retired)",
    "MCP Apps (the underlying open standard OpenAI's UI layer now builds on)"
   ],
   "discovery": {
    "mechanism": "A plugin is an MCP server (streamable-HTTP, stable endpoint) plus optional Skills and an optional UI resource; ChatGPT/Codex discover a plugin's tools through the standard MCP tools/list call after a user installs/connects it, not through open web crawling",
    "path": "No public discovery file. Apps are found in the directory: \"ChatGPT and Codex share one universal plugin directory. When you publish a public plugin, people can discover the same listing from supported surfaces in either product.\" The only well-known path is for verifying domain ownership during submission, not for discovery: \"For domain verification, host the exact challenge token as plain text at the URL shown in the portal: https://<challenge-base-host>/.well-known/openai-apps-challenge\""
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://developers.openai.com/plugins/concepts/plugins",
     "claim": "OpenAI, *Plugin architecture*, checked 2026-10-30",
     "date": null,
     "quote": "Plugin architecture - Plugins | OpenAI Developers / Plugins are the packages people discover, install, share, and publish in ChatGPT and Codex. / An MCP server that exposes tools and connects to external systems. / ChatGPT and Codex share one universal plugin directory. When you publish a public plugin, people can discover the same listing from supported surfaces in either product. / ChatGPT and Codex share one universal plugin directory.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://developers.openai.com/plugins/build/chatgpt-ui",
     "claim": "OpenAI, *Add UI to your MCP server*, checked 2026-10-30",
     "date": null,
     "quote": "ChatGPT implements the open MCP Apps standard for UI returned by an MCP server. / Components run inside an iframe in ChatGPT / Recommended call flow: / The model calls the data tool (for example, roll_dice). / The model receives structuredContent from the data tool. / The model calls the render tool with that data. / Only the render tool should include _meta.ui.resourceUri. / The widget renders once with final, model-checked context. / Expose the component as an MCP resource with the MCP Apps UI MIME type (text/html;profile=mcp-app). / The compatibility aliases remain available for existing integrations. New UI should use the shared fields and bridge methods in the middle column. / Declare the UI resource with _meta.ui.resourceUri. / Add UI to your MCP server - Plugins | OpenAI Developers / After the MCP Apps flow works, use window.openai only for capabilities that the shared specification does not cover. / Custom UI is optional. Add it when a plugin use case requires people to inspect, compare, edit, confirm, or navigate structured information. Keep the MCP tools useful without a component so ChatGPT and Codex can complete the workflow without UI. / Use the ui/* JSON-RPC bridge over postMessage / ui://widget/dice.html / text/html;profile=mcp-app / window.openai / the same UI run in ChatGPT and other compatible MCP Apps hosts / The @openai/apps-sdk-ui component library provides ready-made buttons, cards, input controls, and layout primitives that match ChatGPT's container.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://developers.openai.com/plugins/build/plugins",
     "claim": "OpenAI, *Package your plugin*, checked 2026-10-30",
     "date": null,
     "quote": "A portable plugin has a plugin.json manifest at its root. / A portable plugin has a plugin.json manifest at its root. It can also include a skills/ directory, an mcp.json file for bundled MCP servers, and assets. / For a portable Agent Plugins package, add plugin.json at the plugin root and declare the Agent Plugins schema. / \"$schema\": \"https://agent-plugins.org/schemas/1.0.0/plugin.schema.json\" / Package your plugin - Plugins | OpenAI Developers / add plugin.json at the plugin root / A skills/ directory containing the workflows you built. / An mcp.json file for MCP servers distributed with the plugin. / extensions.com.openai in root plugin.json / .codex-plugin/plugin.json files remain supported as a compatibility fallback. / Use @plugin-creator for the fastest OpenAI-specific path",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://agent-plugins.org/",
     "claim": "Agent Plugins, *Agent Plugins*, checked 2026-10-30",
     "date": null,
     "quote": "Agent Plugins is an open, vendor-neutral standard for packaging reusable components into portable plugins. / Its initial Technical Steering Committee includes Core Maintainers from Amazon, Cursor, Microsoft, OpenAI, and Vercel. / Its version 1.0.0 specification defines a shared format for Agent Skills and MCP servers / Agent Plugins is openly licensed and developed in public.",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://techcrunch.com/2025/10/06/openai-launches-apps-inside-of-chatgpt/",
     "claim": "Maxwell Zeff (TechCrunch), *OpenAI launches apps inside of ChatGPT*, published 2025-10-06; modified 2025-10-06",
     "date": null,
     "quote": "OpenAI is launching a new way for developers to build applications inside of ChatGPT. / OpenAI is also launching a preview of the Apps SDK, the developer-facing toolkit to build these apps. / \"datePublished\":\"2025-10-06T17:57:59+00:00\" / \"name\":\"Maxwell Zeff\" / interactive applications from companies like Booking.com, Expedia, Spotify, Figma, Coursera, Zillow, and Canva. / OpenAI is also launching a preview of the Apps SDK / October 6, 2025 / Booking.com, Expedia, Spotify, Figma, Coursera, Zillow, and Canva.",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://developers.openai.com/plugins/concepts/mcp-server",
     "claim": "OpenAI, *MCP server*, checked 2026-10-30",
     "date": null,
     "quote": "Deploy production MCP servers at stable HTTPS endpoints using the streamable HTTP transport. / Plugins primarily use tools. Each tool has a name, description, input schema, and optional output schema.",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://developers.openai.com/plugins/changelog",
     "claim": "OpenAI, *Plugin UI changelog*, checked 2026-10-30",
     "date": null,
     "quote": "2026-02-22 MCP Apps compatibility Fixes & improvements ChatGPT is now fully compatible with the MCP Apps spec. / 2026-03-25 Plugin distribution guidance Fixes & improvements Approved Apps SDK integrations could be distributed as Codex plugins. At launch, plugins were available only in Codex.",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://developers.openai.com/plugins/reference",
     "claim": "OpenAI, *Reference*, checked 2026-10-30",
     "date": null,
     "quote": "_meta[\"openai/outputTemplate\"] Tool descriptor string (URI) None OpenAI-specific optional/compatibility alias for _meta.ui.resourceUri in ChatGPT.",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://techcrunch.com/2025/12/18/chatgpt-launches-an-app-store-lets-developers-know-its-open-for-business/",
     "claim": "Lucas Ropek (TechCrunch), *ChatGPT launches an app store, lets developers know it's open for business*, published 2025-12-18; modified 2025-12-18",
     "date": null,
     "quote": "App developers looking to launch their programs in ChatGPT can now submit them for review and potential publication, OpenAI said Wednesday. / OpenAI's Apps SDK, which is still in beta / \"datePublished\":\"2025-12-18T20:22:50+00:00\"",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://www.cnbc.com/2026/09/29/openai-devday-2026-live-updates.html",
     "claim": "Ashley Capoot, Kate Rooney, and Chris Eudaily (CNBC), *OpenAI DevDay 2026 recap*, published 2026-09-29; modified 2026-09-30",
     "date": null,
     "quote": "Altman said OpenAI is launching plugin extensions, which means developers can build plugins that are \"essentially entire applications that feel native to ChatGPT\" and are distributed through OpenAI. / \"datePublished\":\"2026-09-29T12:00:02+0000\" / Altman said OpenAI is launching plugin extensions, which means developers can build plugins that are",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://www.theverge.com/news/793039/openai-chatgpt-apps-developers-sdk-canva-zillow-devday-2025",
     "claim": "Jay Peters (The Verge), *OpenAI will let developers build apps that work inside ChatGPT*, published 2025-10-06",
     "date": null,
     "quote": "Developers can access the SDK for making apps in preview starting today. / \"datePublished\":\"2025-10-06T17:48:48+00:00\" / Apps available inside ChatGPT starting today will include Booking.com, Canva, Coursera, Expedia, Figma, Spotify, and Zillow.",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://modelcontextprotocol.io/extensions/apps/overview",
     "claim": "Model Context Protocol, *MCP Apps*, modified 2026-09-02",
     "date": null,
     "quote": "https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/2026-01-26/apps.mdx",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://developers.openai.com/plugins/deploy/troubleshooting",
     "claim": "OpenAI, *Troubleshooting*, checked 2026-10-30",
     "date": null,
     "quote": "mimeType: \"text/html;profile=mcp-app\"",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://modelcontextprotocol.io/seps/1865-mcp-apps-interactive-user-interfaces-for-mcp",
     "claim": "Ido Salomon, Liad Yosef, Olivier Chafik, Jerome Swannack, Jonathan Hefner, Anton Pidkuiko, Nick Cooper, Bryan Ashley, and Alexi Christakis, *SEP-1865: MCP Apps - Interactive User Interfaces for MCP*, created 2025-11-21; modified 2026-07-31",
     "date": null,
     "quote": "declaring UI resources via the ui:// URI scheme / MCP lacks a standardized way for servers to deliver rich, interactive user interfaces to hosts. / This gap blocks many use cases that require visual presentation and interactivity that go beyond plain text or structured data. / text/html;profile=mcp-app",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://developers.openai.com/plugins/deploy/submission",
     "claim": "OpenAI, *Upload and submit your plugin*, checked 2026-10-30",
     "date": null,
     "quote": "For domain verification, host the exact challenge token as plain text at the URL shown in the portal: https://<challenge-base-host>/.well-known/openai-apps-challenge",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://developers.openai.com/blog/openai-for-developers-2025",
     "claim": "Vaibhav (VB) Srivastav and Katia Gil Guzman (OpenAI), *OpenAI for Developers in 2025*, published 2025-12-30",
     "date": null,
     "quote": "we introduced the Apps SDK-an open-source framework that extends the Model Context Protocol (MCP) to let developers build UIs alongside their MCP servers, defining both the logic and interactive interface of applications that can run in clients like ChatGPT.",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28",
     "claim": "Model Context Protocol, *Specification*, version 2026-07-28; modified 2026-10-30",
     "date": null,
     "quote": "The protocol uses JSON-RPC 2.0 messages to establish communication between:",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://developers.googleblog.com/introducing-a2ui-an-open-project-for-agent-driven-interfaces/",
     "claim": "Google A2UI Team, *Introducing A2UI: An open project for agent-driven interfaces*, published 2025-12-15",
     "date": null,
     "quote": "a secure, declarative data format for agents to compose bespoke interfaces from a trusted component catalog / The JSON payload can be sent to the client over A2A, AG UI, and potentially other transports. The client application renders using its own native UI components.",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://modelcontextprotocol.io/registry/about",
     "claim": "Model Context Protocol, *The MCP Registry*, modified 2026-10-30",
     "date": null,
     "quote": "The MCP Registry is currently in preview. / Server metadata is stored in a standardized server.json format / Where to locate the server (e.g., npm package name, remote server URL)",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://raw.githubusercontent.com/openai/plugins/main/plugins/canva/.codex-plugin/plugin.json",
     "claim": "Canva Pty Ltd. (openai/plugins), *plugins/canva/.codex-plugin/plugin.json*, fetched 2026-10-30",
     "date": null,
     "quote": "Canva Pty Ltd. / invoke Canva directly with @Canva / \"./.app.json\"",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://raw.githubusercontent.com/openai/plugins/main/plugins/canva/.app.json",
     "claim": "OpenAI (openai/plugins), *plugins/canva/.app.json*, fetched 2026-10-30",
     "date": null,
     "quote": "connector_68df33b1a2d081918778431a9cfca8ba",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://raw.githubusercontent.com/openai/plugins/main/plugins/figma/.codex-plugin/plugin.json",
     "claim": "Figma (openai/plugins), *plugins/figma/.codex-plugin/plugin.json*, fetched 2026-10-30",
     "date": null,
     "quote": "\"name\": \"figma\", \"version\": \"2.0.20\" / Figma workflows for design implementation, Code Connect templates, and design system rule generation. / \"skills\": \"./skills/\" / \"apps\": \"./.app.json\"",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://raw.githubusercontent.com/openai/plugins/main/plugins/figma/.app.json",
     "claim": "OpenAI (openai/plugins), *plugins/figma/.app.json*, fetched 2026-10-30",
     "date": null,
     "quote": "connector_68df038e0ba48191908c8434991bbac2",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://newsroom.spotify.com/2025-10-06/spotify-personalized-prompts-chatgpt/",
     "claim": "Spotify, *Your Prompts, Spotify's Personalized Picks: Introducing Spotify in ChatGPT*, published 2025-10-06; modified 2026-06-25",
     "date": null,
     "quote": "2025-10-06 / The Spotify app in ChatGPT is now live in English across 145 countries to all logged-in ChatGPT Free, Plus, and Pro accounts, available on both web and mobile (iOS and Android).",
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://www.zillow.com/news/zillow-becomes-first-real-estate-app-in-chatgpt/",
     "claim": "Zillow, *Zillow becomes the only real estate app in ChatGPT*, published 2025-10-06; modified 2026-02-11",
     "date": null,
     "quote": "2025-10-06 / The Zillow App in ChatGPT is live right now for all logged-in ChatGPT users in the U.S. on Free, Plus and Pro plans.",
     "ref": 25
    },
    {
     "label": "[26]",
     "url": "https://blog.adobe.com/en/publish/2025/12/10/edit-photoshop-chatgpt",
     "claim": "Pam Clark (Adobe), *Edit with Photoshop in ChatGPT*, published 2025-12-10",
     "date": null,
     "quote": "Today, we're empowering anyone to edit with Photoshop directly in ChatGPT / Adobe Acrobat and Adobe Express are also now available / edit your PDFs directly in ChatGPT",
     "ref": 26
    },
    {
     "label": "[27]",
     "url": "https://github.com/openai/openai-apps-sdk-examples/",
     "claim": "OpenAI, *Example apps for the Apps SDK*, checked 2026-11-06",
     "date": null,
     "quote": "example MCP servers that expose a collection of components as tools / `kitchen_sink_server_node/` – Node MCP server for the kitchen-sink-lite widget. / `kitchen_sink_server_python/` – Python MCP server for the kitchen-sink-lite widget. / each tool can light up widgets by combining structured payloads with `_meta.ui.resourceUri` metadata returned from the MCP servers.",
     "ref": 27
    },
    {
     "label": "[28]",
     "url": "https://github.com/openai/plugins/blob/HEAD/plugins",
     "claim": "OpenAI, *openai/plugins plugins directory listing*, fetched 2026-10-30",
     "date": null,
     "quote": "\"name\": \"adobe\", \"path\": \"plugins/adobe\" / \"name\": \"canva\", \"path\": \"plugins/canva\" / \"name\": \"figma\", \"path\": \"plugins/figma\" / \"type\": \"dir\"",
     "ref": 28
    }
   ],
   "form": "endpoint",
   "governance": "OpenAI (single vendor) for the ChatGPT-only parts: the `openai/*` metadata keys, the `window.openai` bridge, review and the directory. The UI layer follows MCP Apps, an extension of the Model Context Protocol. The package format follows Agent Plugins: \"Its initial Technical Steering Committee includes Core Maintainers from Amazon, Cursor, Microsoft, OpenAI, and Vercel.\"",
   "group": null,
   "hatnote_md": "This page is about OpenAI's Apps SDK, documented on the OpenAI Developers site as Plugins for ChatGPT and Codex. ChatGPT implements the open MCP Apps standard for UI returned by an MCP server, and components run inside an iframe in ChatGPT. A portable plugin has a plugin.json manifest at its root. Agent Plugins, which supplies that package format, is a separate open, vendor-neutral standard.",
   "history": [
    {
     "date": "2026-10-29",
     "note": "Primary-source verification sweep across 33 primary specifications, OpenAI plugin docs, vendor announcements, and press sources."
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "openai-apps-sdk-manifests",
   "implementation": "shipping",
   "last_verified": "2026-11-06",
   "name": "OpenAI Apps SDK manifests",
   "native_status": "Preview at launch: \"Developers can access the SDK for making apps in preview starting today. Later this year, developers will be able to submit apps for review and publication, and OpenAI also plans to offer a directory for users to browse apps, according to OpenAI CEO Sam Altman.\". Submissions opened in December 2025: \"App developers looking to launch their programs in ChatGPT can now submit them for review and potential publication, OpenAI said Wednesday.\" \"OpenAI's Apps SDK, which is still in beta, currently provides a toolkit for developers looking to create new experiences for ChatGPT users.\". Changelog: \"2026-02-22 MCP Apps compatibility Fixes & improvements ChatGPT is now fully compatible with the MCP Apps spec.\" \"2026-03-25 Plugin distribution guidance Fixes & improvements Approved Apps SDK integrations could be distributed as Codex plugins. At launch, plugins were available only in Codex.\". Plugin extensions were launched on 2026-09-29: \"Altman said OpenAI is launching plugin extensions, which means developers can build plugins that are \"essentially entire applications that feel native to ChatGPT\" and are distributed through OpenAI.\". No general-availability statement for the Apps SDK was found in the live sources",
   "origin": {
    "date": "2025-10-06",
    "org": "OpenAI"
   },
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "living",
   "probe": {
    "method": "POST",
    "on_absent": "no `_meta.ui.resourceUri`/`_meta[\"openai/outputTemplate\"]` on any tool: the plugin is tools-only with no custom UI (this is an explicitly supported, non-deficient configuration)",
    "parse": "a tool whose definition includes `_meta.ui.resourceUri` (or the ChatGPT compatibility alias `_meta[\"openai/outputTemplate\"]`) pointing to a `ui://` resource with mimeType `text/html;profile=mcp-app` indicates this plugin serves an MCP Apps-style interactive component; the tool list itself confirms a plugin/MCP server regardless of UI",
    "path": "{endpoint}/mcp (initialize, then tools/list)"
   },
   "question": "How does a developer publish a tool with an optional interactive UI that ChatGPT and Codex can call?",
   "scope": "general",
   "spec_url": "https://developers.openai.com/plugins/build/chatgpt-ui",
   "step": "act",
   "summary_md": "**OpenAI Apps SDK manifests** covers OpenAI's Apps SDK. On 2025-10-06, OpenAI launched a preview of the Apps SDK, the developer-facing toolkit to build applications inside of ChatGPT. Plugins are the packages people discover, install, share, and publish in ChatGPT and Codex. A plugin can contain an MCP server that exposes tools and connects to external systems. A portable plugin has a `plugin.json` manifest at its root. It can also include a `skills/` directory, an `mcp.json` file for bundled MCP servers, and assets. ChatGPT implements the open MCP Apps standard for UI returned by an MCP server. Agent Plugins is an open, vendor-neutral standard for packaging reusable components into portable plugins. Its initial Technical Steering Committee includes Core Maintainers from Amazon, Cursor, Microsoft, OpenAI, and Vercel. Production MCP servers are deployed at stable HTTPS endpoints using the streamable HTTP transport. In the recommended call flow, the model calls the data tool, receives `structuredContent` from the data tool, and then calls the render tool with that data. Only the render tool should include `_meta.ui.resourceUri`. The widget renders once with final, model-checked context. UI components are exposed as MCP resources with the MCP Apps UI MIME type `text/html;profile=mcp-app`. A portable Agent Plugins package places `plugin.json` at the plugin root and declares the Agent Plugins schema `https://agent-plugins.org/schemas/1.0.0/plugin.schema.json`. On 2026-02-22, the changelog says ChatGPT is now fully compatible with the MCP Apps spec. `_meta[\"openai/outputTemplate\"]` is an OpenAI-specific optional compatibility alias for `_meta.ui.resourceUri` in ChatGPT. The compatibility aliases remain available for existing integrations. New UI should use the shared fields and bridge methods. A 2025-12-18 TechCrunch report said developers can now submit apps for review and potential publication, and called the Apps SDK still in beta. On 2026-03-25, the changelog says approved Apps SDK integrations could be distributed as Codex plugins. At launch, plugins were available only in Codex. On 2026-09-29, Altman said OpenAI is launching plugin extensions, which means developers can build plugins that are essentially entire applications that feel native to ChatGPT and are distributed through OpenAI.",
   "track": "single-vendor",
   "version": {
    "date": null,
    "label": "1.0.0 (Agent Plugins schema)"
   },
   "watch": [
    {
     "type": "page",
     "url": "https://developers.openai.com/plugins/build/chatgpt-ui",
     "selector": "main",
     "cadence": "weekly"
    }
   ],
   "use_cases": [
    "expose-tools-to-agents",
    "render-agent-ui",
    "describe-agent-capabilities"
   ],
   "audience": [
    "agent-builder",
    "platform"
   ],
   "pairs_with": [
    "mcp-apps",
    "mcp",
    "a2ui",
    "mcp-registry"
   ],
   "prerequisites": [
    "mcp"
   ],
   "tier": "spec_brief",
   "lifecycle_status": "active",
   "wire_archetype": "harnesses_rpc_ui",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-06",
   "v05_hatnote_html_md": "This page is about OpenAI's Apps SDK, documented on the OpenAI Developers site as Plugins for ChatGPT and Codex. ChatGPT implements the open MCP Apps standard for UI returned by an MCP server, and components run inside an iframe in ChatGPT. A portable plugin has a plugin.json manifest at its root. Agent Plugins, which supplies that package format, is a separate open, vendor-neutral standard. [1][2][3][4]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**OpenAI Apps SDK manifests** covers OpenAI's Apps SDK. On 2025-10-06, OpenAI launched a preview of the Apps SDK, the developer-facing toolkit to build applications inside of ChatGPT. [5] Plugins are the packages people discover, install, share, and publish in ChatGPT and Codex. A plugin can contain an MCP server that exposes tools and connects to external systems. [1] A portable plugin has a `plugin.json` manifest at its root. It can also include a `skills/` directory, an `mcp.json` file for bundled MCP servers, and assets. [3] ChatGPT implements the open MCP Apps standard for UI returned by an MCP server. [2] Agent Plugins is an open, vendor-neutral standard for packaging reusable components into portable plugins. Its initial Technical Steering Committee includes Core Maintainers from Amazon, Cursor, Microsoft, OpenAI, and Vercel. [4] Production MCP servers are deployed at stable HTTPS endpoints using the streamable HTTP transport. [6] In the recommended call flow, the model calls the data tool, receives `structuredContent` from the data tool, and then calls the render tool with that data. Only the render tool should include `_meta.ui.resourceUri`. The widget renders once with final, model-checked context. [2] UI components are exposed as MCP resources with the MCP Apps UI MIME type `text/html;profile=mcp-app`. [2] A portable Agent Plugins package places `plugin.json` at the plugin root and declares the Agent Plugins schema `https://agent-plugins.org/schemas/1.0.0/plugin.schema.json`. [3] On 2026-02-22, the changelog says ChatGPT is now fully compatible with the MCP Apps spec. [7] `_meta[\"openai/outputTemplate\"]` is an OpenAI-specific optional compatibility alias for `_meta.ui.resourceUri` in ChatGPT. The compatibility aliases remain available for existing integrations. New UI should use the shared fields and bridge methods. [2][8] A 2025-12-18 TechCrunch report said developers can now submit apps for review and potential publication, and called the Apps SDK still in beta. [9] On 2026-03-25, the changelog says approved Apps SDK integrations could be distributed as Codex plugins. At launch, plugins were available only in Codex. [7] On 2026-09-29, Altman said OpenAI is launching plugin extensions, which means developers can build plugins that are essentially entire applications that feel native to ChatGPT and are distributed through OpenAI. [10]",
   "v05_identity_sentence_md": "**OpenAI Apps SDK manifests** covers OpenAI's Apps SDK. On 2025-10-06, OpenAI launched a preview of the Apps SDK, the developer-facing toolkit to build applications inside of ChatGPT. [5] Plugins are the packages people discover, install, share, and publish in ChatGPT and Codex. A plugin can contain an MCP server that exposes tools and connects to external systems. [1] A portable plugin has a `plugin.json` manifest at its root. It can also include a `skills/` directory, an `mcp.json` file for bundled MCP servers, and assets. [3] ChatGPT implements the open MCP Apps standard for UI returned by an MCP server. [2] Agent Plugins is an open, vendor-neutral standard for packaging reusable components into portable plugins. Its initial Technical Steering Committee includes Core Maintainers from Amazon, Cursor, Microsoft, OpenAI, and Vercel. [4]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Act](/category/act/) (`act`)"
    },
    {
     "label": "Form",
     "value_md": "Endpoint (`endpoint`)"
    },
    {
     "label": "Originated by",
     "value_md": "OpenAI, 2025-10-06 [5]"
    },
    {
     "label": "Governed by",
     "value_md": "OpenAI publishes plugin docs. UI follows MCP Apps. Agent Plugins TSC: Amazon, Cursor, Microsoft, OpenAI, Vercel. [1][2][4]"
    },
    {
     "label": "Track",
     "value_md": "OpenAI Developers documents the plugin surface. Agent Plugins is an open, vendor-neutral package standard. [1][4]"
    },
    {
     "label": "Status",
     "value_md": "Preview 2025-10-06; beta 2025-12-18; MCP Apps compatible 2026-02-22; Codex plugins 2026-03-25; plugin extensions 2026-09-29. [7][9][10][11]"
    },
    {
     "label": "Version",
     "value_md": "Agent Plugins schema 1.0.0, not a publication date. MCP Apps path: `main` `specification/2026-01-26`. [3][4][12]"
    },
    {
     "label": "Transports",
     "value_md": "Streamable HTTP at a stable HTTPS endpoint [6]"
    },
    {
     "label": "Message format",
     "value_md": "MCP tool descriptors (name, description, input schema, optional output schema). Optional HTML UI resource with mime type `text/html;profile=mcp-app`. [6][13]"
    },
    {
     "label": "Schemes",
     "value_md": "`ui://` resource URIs for MCP Apps UI [2][14]"
    },
    {
     "label": "Record format",
     "value_md": "Root `plugin.json` manifest, using the Agent Plugins schema. The package may also include `skills/`, `mcp.json`, and assets. [3]"
    },
    {
     "label": "Specification",
     "value_md": "[Add UI to your MCP server](https://developers.openai.com/plugins/build/chatgpt-ui) · [Package your plugin](https://developers.openai.com/plugins/build/plugins) [2][3]"
    },
    {
     "label": "Found at",
     "value_md": "One universal plugin directory shared by ChatGPT and Codex. Domain verification, not discovery, uses `https://<challenge-base-host>/.well-known/openai-apps-challenge`. [1][15]"
    },
    {
     "label": "Licence",
     "value_md": "Agent Plugins (the package format) is openly licensed and developed in public. [4]"
    }
   ],
   "v05_problem_md": "SEP-1865 states that MCP lacks a standardized way for servers to deliver rich, interactive user interfaces to hosts. This gap blocks many use cases that require visual presentation and interactivity that go beyond plain text or structured data. [14] In OpenAI for Developers in 2025, the authors write that they introduced the Apps SDK, an open-source framework that extends the Model Context Protocol (MCP) to let developers build UIs alongside their MCP servers, defining both the logic and interactive interface of applications that can run in clients like ChatGPT. [16] Once the standard MCP Apps flow is in place, `window.openai` is reserved for host capabilities that the shared specification does not cover. [2] Custom UI is optional and applies when a plugin workflow requires users to inspect, compare, edit, confirm, or navigate structured information; MCP tools remain usable without a UI component so ChatGPT and Codex can complete workflows headlessly. [2]",
   "v05_mechanism_delta_md": "In OpenAI for Developers in 2025, the authors write that they introduced the Apps SDK, an open-source framework that extends the Model Context Protocol (MCP) to let developers build UIs alongside their MCP servers, defining both the logic and interactive interface of applications that can run in clients like ChatGPT. [16] Once the standard MCP Apps flow is in place, `window.openai` is reserved for host capabilities that the shared specification does not cover. [2]",
   "v05_scope_boundary_md": "Custom UI is optional and applies when a plugin workflow requires users to inspect, compare, edit, confirm, or navigate structured information; MCP tools remain usable without a UI component so ChatGPT and Codex can complete workflows headlessly. [2]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "HTML Sandboxed iframes & Custom Elements (WHATWG)",
      "spec_or_rfc": "WHATWG HTML",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "HTML sandboxed iframes embed a document. Apps SDK components run inside a ChatGPT iframe as `text/html;profile=mcp-app`. [1][2][13]"
     },
     {
      "name": "Well-Known URIs (RFC 8615)",
      "spec_or_rfc": "RFC 8615",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "RFC 8615 defines fixed `/.well-known/` paths. Apps SDK domain verification uses `/.well-known/openai-apps-challenge`, not directory discovery. [1][15]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "mcp-apps",
      "target_name": "MCP Apps",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "MCP Apps defines `text/html;profile=mcp-app` and `ui://` resources. ChatGPT implements that standard and is fully compatible as of 2026-02-22. [2][7][14]"
     },
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "MCP uses JSON-RPC 2.0 among hosts, clients, and servers. Apps SDK plugins that include an MCP server deploy it over streamable HTTP; `window.openai` is ChatGPT-only. [1][2][6][17]"
     },
     {
      "target_id": "a2ui",
      "target_name": "A2UI (Agent to UI) Protocol",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "A2UI is declarative JSON rendered by native client components. Apps SDK returns MCP Apps HTML that ChatGPT iframes. [2][18]"
     },
     {
      "target_id": "mcp-registry",
      "target_name": "Official MCP Registry",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "MCP Registry (preview) stores `server.json` locations. Apps SDK public plugins use the shared ChatGPT and Codex directory. [1][19]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (12 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).",
    "side_a": {
     "visible": true,
     "heading": "Published apps & plugin packages",
     "col4_header": "Transport & Scope",
     "note_md": null,
     "rows": [
      {
       "actor": "Booking.com",
       "role": "ChatGPT app",
       "status": "Listed",
       "status_display": "Listed · as of 2025-10-06",
       "col4_md": "Named in the 2025-10-06 DevDay launch set, alongside the Apps SDK preview.",
       "source_md": "[TechCrunch, apps inside ChatGPT](https://techcrunch.com/2025/10/06/openai-launches-apps-inside-of-chatgpt/) [5] · [The Verge, ChatGPT apps](https://www.theverge.com/news/793039/openai-chatgpt-apps-developers-sdk-canva-zillow-devday-2025) [11]"
      },
      {
       "actor": "Canva",
       "role": "Plugin package",
       "status": "Partial",
       "status_display": "Partial · checked 2026-10-30",
       "col4_md": "Main-branch `canva` `14.0.0`; invoke `@Canva`; id in `.app.json`.",
       "source_md": "[Canva plugin.json](https://raw.githubusercontent.com/openai/plugins/main/plugins/canva/.codex-plugin/plugin.json) [20] · [Canva .app.json](https://raw.githubusercontent.com/openai/plugins/main/plugins/canva/.app.json) [21] · [The Verge, ChatGPT apps](https://www.theverge.com/news/793039/openai-chatgpt-apps-developers-sdk-canva-zillow-devday-2025) [11]"
      },
      {
       "actor": "Coursera",
       "role": "ChatGPT app",
       "status": "Listed",
       "status_display": "Listed · as of 2025-10-06",
       "col4_md": "Named with Booking.com, Canva, Expedia, Figma, Spotify, and Zillow in the launch set.",
       "source_md": "[The Verge, ChatGPT apps](https://www.theverge.com/news/793039/openai-chatgpt-apps-developers-sdk-canva-zillow-devday-2025) [11] · [TechCrunch, apps inside ChatGPT](https://techcrunch.com/2025/10/06/openai-launches-apps-inside-of-chatgpt/) [5]"
      },
      {
       "actor": "Expedia",
       "role": "ChatGPT app",
       "status": "Listed",
       "status_display": "Listed · as of 2025-10-06",
       "col4_md": "Named by TechCrunch and The Verge among the interactive apps inside ChatGPT at launch.",
       "source_md": "[TechCrunch, apps inside ChatGPT](https://techcrunch.com/2025/10/06/openai-launches-apps-inside-of-chatgpt/) [5] · [The Verge, ChatGPT apps](https://www.theverge.com/news/793039/openai-chatgpt-apps-developers-sdk-canva-zillow-devday-2025) [11]"
      },
      {
       "actor": "Figma",
       "role": "Plugin package",
       "status": "Partial",
       "status_display": "Partial · checked 2026-10-30",
       "col4_md": "Main-branch `figma` `2.0.20` with `skills/` and connector `.app.json`.",
       "source_md": "[Figma plugin.json](https://raw.githubusercontent.com/openai/plugins/main/plugins/figma/.codex-plugin/plugin.json) [22] · [Figma .app.json](https://raw.githubusercontent.com/openai/plugins/main/plugins/figma/.app.json) [23] · [The Verge, ChatGPT apps](https://www.theverge.com/news/793039/openai-chatgpt-apps-developers-sdk-canva-zillow-devday-2025) [11]"
      },
      {
       "actor": "Spotify",
       "role": "ChatGPT app",
       "status": "Supported",
       "status_display": "Supported · as of 2025-10-06",
       "col4_md": "Live in English in 145 countries for logged-in Free, Plus, and Pro on web and mobile.",
       "source_md": "[Spotify in ChatGPT](https://newsroom.spotify.com/2025-10-06/spotify-personalized-prompts-chatgpt/) [24] · [The Verge, ChatGPT apps](https://www.theverge.com/news/793039/openai-chatgpt-apps-developers-sdk-canva-zillow-devday-2025) [11]"
      },
      {
       "actor": "Zillow",
       "role": "ChatGPT app",
       "status": "Supported",
       "status_display": "Supported · as of 2025-10-06",
       "col4_md": "Live for logged-in U.S. users on Free, Plus, and Pro, and named in the launch set.",
       "source_md": "[Zillow in ChatGPT](https://www.zillow.com/news/zillow-becomes-first-real-estate-app-in-chatgpt/) [25] · [The Verge, ChatGPT apps](https://www.theverge.com/news/793039/openai-chatgpt-apps-developers-sdk-canva-zillow-devday-2025) [11]"
      },
      {
       "actor": "Adobe",
       "role": "ChatGPT app",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Photoshop editing in ChatGPT, plus Acrobat and Express for photos, designs, and PDFs.",
       "source_md": "[Photoshop in ChatGPT](https://blog.adobe.com/en/publish/2025/12/10/edit-photoshop-chatgpt) [26]"
      },
      {
       "actor": "Apps SDK Examples Gallery",
       "role": "Official example MCP servers",
       "status": "Listed",
       "status_display": "Listed · checked 2026-11-06",
       "col4_md": "Official example MCP servers, including `kitchen_sink_server_node/` and `kitchen_sink_server_python/`, light up widgets with `_meta.ui.resourceUri`.",
       "source_md": "[Apps SDK Examples Gallery](https://github.com/openai/openai-apps-sdk-examples/) [27]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Host surfaces & SDK tooling",
     "col4_header": "Transport & Scope",
     "note_md": null,
     "rows": [
      {
       "actor": "ChatGPT",
       "role": "Apps host",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "MCP Apps host: `_meta.ui.resourceUri`, `ui/*` postMessage, `text/html;profile=mcp-app`.",
       "source_md": "[Add UI to your MCP server](https://developers.openai.com/plugins/build/chatgpt-ui) [2]"
      },
      {
       "actor": "Codex",
       "role": "Plugin host",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Shared plugin directory; root `plugin.json`, `skills/`, `mcp.json`, and `extensions.com.openai`.",
       "source_md": "[Plugins concept](https://developers.openai.com/plugins/concepts/plugins) [1] · [Build a plugin](https://developers.openai.com/plugins/build/plugins) [3]"
      },
      {
       "actor": "OpenAI Apps SDK UI",
       "role": "SDK",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "`@openai/apps-sdk-ui` controls match ChatGPT and use the MCP Apps `ui/*` bridge.",
       "source_md": "[Add UI to your MCP server](https://developers.openai.com/plugins/build/chatgpt-ui) [2]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [
     {
      "label": "openai/plugins contents",
      "as_of": "2026-10-30",
      "value_md": "The GitHub contents listing for openai/plugins under plugins/ contains 62 directories, including adobe, canva, and figma. — Count of objects in the contents array whose path is `plugins/<name>` and whose type is dir. [28]"
     },
     {
      "label": "The Verge, ChatGPT apps",
      "as_of": "2025-10-06",
      "value_md": "The Verge names seven apps available inside ChatGPT at launch: Booking.com, Canva, Coursera, Expedia, Figma, Spotify, and Zillow. — Count of company names in The Verge sentence that lists apps available inside ChatGPT starting that day. [11]"
     }
    ],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Act protocols](/category/act/)** — Category index for `act` standards."
    }
   ],
   "v05_compiled_md": "---\nid: openai-apps-sdk-manifests\ntitle: \"OpenAI Apps SDK manifests\"\ntier: spec_brief\nlifecycle_status: active\ncategory: act\nform: endpoint\nwire_archetype: harnesses_rpc_ui\nspec_url: https://developers.openai.com/plugins/build/chatgpt-ui\nlast_checked: 2026-11-06\n---\n\n# OpenAI Apps SDK manifests\n\n**Category:** [Act](/category/act/) (`act`) · **Form:** Endpoint (`endpoint`) · **Last checked:** 2026-11-06\n\n> *This page is about OpenAI's Apps SDK, documented on the OpenAI Developers site as Plugins for ChatGPT and Codex. ChatGPT implements the open MCP Apps standard for UI returned by an MCP server, and components run inside an iframe in ChatGPT. A portable plugin has a plugin.json manifest at its root. Agent Plugins, which supplies that package format, is a separate open, vendor-neutral standard. [1][2][3][4]*\n\n**OpenAI Apps SDK manifests** covers OpenAI's Apps SDK. On 2025-10-06, OpenAI launched a preview of the Apps SDK, the developer-facing toolkit to build applications inside of ChatGPT. [5] Plugins are the packages people discover, install, share, and publish in ChatGPT and Codex. A plugin can contain an MCP server that exposes tools and connects to external systems. [1] A portable plugin has a `plugin.json` manifest at its root. It can also include a `skills/` directory, an `mcp.json` file for bundled MCP servers, and assets. [3] ChatGPT implements the open MCP Apps standard for UI returned by an MCP server. [2] Agent Plugins is an open, vendor-neutral standard for packaging reusable components into portable plugins. Its initial Technical Steering Committee includes Core Maintainers from Amazon, Cursor, Microsoft, OpenAI, and Vercel. [4] Production MCP servers are deployed at stable HTTPS endpoints using the streamable HTTP transport. [6] In the recommended call flow, the model calls the data tool, receives `structuredContent` from the data tool, and then calls the render tool with that data. Only the render tool should include `_meta.ui.resourceUri`. The widget renders once with final, model-checked context. [2] UI components are exposed as MCP resources with the MCP Apps UI MIME type `text/html;profile=mcp-app`. [2] A portable Agent Plugins package places `plugin.json` at the plugin root and declares the Agent Plugins schema `https://agent-plugins.org/schemas/1.0.0/plugin.schema.json`. [3] On 2026-02-22, the changelog says ChatGPT is now fully compatible with the MCP Apps spec. [7] `_meta[\"openai/outputTemplate\"]` is an OpenAI-specific optional compatibility alias for `_meta.ui.resourceUri` in ChatGPT. The compatibility aliases remain available for existing integrations. New UI should use the shared fields and bridge methods. [2][8] A 2025-12-18 TechCrunch report said developers can now submit apps for review and potential publication, and called the Apps SDK still in beta. [9] On 2026-03-25, the changelog says approved Apps SDK integrations could be distributed as Codex plugins. At launch, plugins were available only in Codex. [7] On 2026-09-29, Altman said OpenAI is launching plugin extensions, which means developers can build plugins that are essentially entire applications that feel native to ChatGPT and are distributed through OpenAI. [10]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Act](/category/act/) (`act`) |\n| **Form** | Endpoint (`endpoint`) |\n| **Originated by** | OpenAI, 2025-10-06 [5] |\n| **Governed by** | OpenAI publishes plugin docs. UI follows MCP Apps. Agent Plugins TSC: Amazon, Cursor, Microsoft, OpenAI, Vercel. [1][2][4] |\n| **Track** | OpenAI Developers documents the plugin surface. Agent Plugins is an open, vendor-neutral package standard. [1][4] |\n| **Status** | Preview 2025-10-06; beta 2025-12-18; MCP Apps compatible 2026-02-22; Codex plugins 2026-03-25; plugin extensions 2026-09-29. [7][9][10][11] |\n| **Version** | Agent Plugins schema 1.0.0, not a publication date. MCP Apps path: `main` `specification/2026-01-26`. [3][4][12] |\n| **Transports** | Streamable HTTP at a stable HTTPS endpoint [6] |\n| **Message format** | MCP tool descriptors (name, description, input schema, optional output schema). Optional HTML UI resource with mime type `text/html;profile=mcp-app`. [6][13] |\n| **Schemes** | `ui://` resource URIs for MCP Apps UI [2][14] |\n| **Record format** | Root `plugin.json` manifest, using the Agent Plugins schema. The package may also include `skills/`, `mcp.json`, and assets. [3] |\n| **Specification** | [Add UI to your MCP server](https://developers.openai.com/plugins/build/chatgpt-ui) · [Package your plugin](https://developers.openai.com/plugins/build/plugins) [2][3] |\n| **Found at** | One universal plugin directory shared by ChatGPT and Codex. Domain verification, not discovery, uses `https://<challenge-base-host>/.well-known/openai-apps-challenge`. [1][15] |\n| **Licence** | Agent Plugins (the package format) is openly licensed and developed in public. [4] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [Adoption and ecosystem](#adoption-and-ecosystem)\n4. [See also](#see-also)\n5. [References](#references)\n\n---\n\n## Problem and scope\n\nSEP-1865 states that MCP lacks a standardized way for servers to deliver rich, interactive user interfaces to hosts. This gap blocks many use cases that require visual presentation and interactivity that go beyond plain text or structured data. [14] In OpenAI for Developers in 2025, the authors write that they introduced the Apps SDK, an open-source framework that extends the Model Context Protocol (MCP) to let developers build UIs alongside their MCP servers, defining both the logic and interactive interface of applications that can run in clients like ChatGPT. [16] Once the standard MCP Apps flow is in place, `window.openai` is reserved for host capabilities that the shared specification does not cover. [2] Custom UI is optional and applies when a plugin workflow requires users to inspect, compare, edit, confirm, or navigate structured information; MCP tools remain usable without a UI component so ChatGPT and Codex can complete workflows headlessly. [2]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **HTML Sandboxed iframes & Custom Elements (WHATWG)** | `WHATWG HTML` | Analogous to classic standard | HTML sandboxed iframes embed a document. Apps SDK components run inside a ChatGPT iframe as `text/html;profile=mcp-app`. [1][2][13] |\n| **Well-Known URIs (RFC 8615)** | `RFC 8615` | Profiles classic standard | RFC 8615 defines fixed `/.well-known/` paths. Apps SDK domain verification uses `/.well-known/openai-apps-challenge`, not directory discovery. [1][15] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[MCP Apps](/protocols/mcp-apps/)** | Builds on | MCP Apps defines `text/html;profile=mcp-app` and `ui://` resources. ChatGPT implements that standard and is fully compatible as of 2026-02-22. [2][7][14] |\n| **[Model Context Protocol](/protocols/mcp/)** | Builds on | MCP uses JSON-RPC 2.0 among hosts, clients, and servers. Apps SDK plugins that include an MCP server deploy it over streamable HTTP; `window.openai` is ChatGPT-only. [1][2][6][17] |\n| **[A2UI (Agent to UI) Protocol](/protocols/a2ui/)** | Peer alternative | A2UI is declarative JSON rendered by native client components. Apps SDK returns MCP Apps HTML that ChatGPT iframes. [2][18] |\n| **[Official MCP Registry](/protocols/mcp-registry/)** | Peer alternative | MCP Registry (preview) stores `server.json` locations. Apps SDK public plugins use the shared ChatGPT and Codex directory. [1][19] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (12 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).*\n\n### Published apps & plugin packages\n\n| Actor | Role | Status | Transport & Scope | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Booking.com** | ChatGPT app | Listed · as of 2025-10-06 | Named in the 2025-10-06 DevDay launch set, alongside the Apps SDK preview. | [TechCrunch, apps inside ChatGPT](https://techcrunch.com/2025/10/06/openai-launches-apps-inside-of-chatgpt/) [5] · [The Verge, ChatGPT apps](https://www.theverge.com/news/793039/openai-chatgpt-apps-developers-sdk-canva-zillow-devday-2025) [11] |\n| **Canva** | Plugin package | Partial · checked 2026-10-30 | Main-branch `canva` `14.0.0`; invoke `@Canva`; id in `.app.json`. | [Canva plugin.json](https://raw.githubusercontent.com/openai/plugins/main/plugins/canva/.codex-plugin/plugin.json) [20] · [Canva .app.json](https://raw.githubusercontent.com/openai/plugins/main/plugins/canva/.app.json) [21] · [The Verge, ChatGPT apps](https://www.theverge.com/news/793039/openai-chatgpt-apps-developers-sdk-canva-zillow-devday-2025) [11] |\n| **Coursera** | ChatGPT app | Listed · as of 2025-10-06 | Named with Booking.com, Canva, Expedia, Figma, Spotify, and Zillow in the launch set. | [The Verge, ChatGPT apps](https://www.theverge.com/news/793039/openai-chatgpt-apps-developers-sdk-canva-zillow-devday-2025) [11] · [TechCrunch, apps inside ChatGPT](https://techcrunch.com/2025/10/06/openai-launches-apps-inside-of-chatgpt/) [5] |\n| **Expedia** | ChatGPT app | Listed · as of 2025-10-06 | Named by TechCrunch and The Verge among the interactive apps inside ChatGPT at launch. | [TechCrunch, apps inside ChatGPT](https://techcrunch.com/2025/10/06/openai-launches-apps-inside-of-chatgpt/) [5] · [The Verge, ChatGPT apps](https://www.theverge.com/news/793039/openai-chatgpt-apps-developers-sdk-canva-zillow-devday-2025) [11] |\n| **Figma** | Plugin package | Partial · checked 2026-10-30 | Main-branch `figma` `2.0.20` with `skills/` and connector `.app.json`. | [Figma plugin.json](https://raw.githubusercontent.com/openai/plugins/main/plugins/figma/.codex-plugin/plugin.json) [22] · [Figma .app.json](https://raw.githubusercontent.com/openai/plugins/main/plugins/figma/.app.json) [23] · [The Verge, ChatGPT apps](https://www.theverge.com/news/793039/openai-chatgpt-apps-developers-sdk-canva-zillow-devday-2025) [11] |\n| **Spotify** | ChatGPT app | Supported · as of 2025-10-06 | Live in English in 145 countries for logged-in Free, Plus, and Pro on web and mobile. | [Spotify in ChatGPT](https://newsroom.spotify.com/2025-10-06/spotify-personalized-prompts-chatgpt/) [24] · [The Verge, ChatGPT apps](https://www.theverge.com/news/793039/openai-chatgpt-apps-developers-sdk-canva-zillow-devday-2025) [11] |\n| **Zillow** | ChatGPT app | Supported · as of 2025-10-06 | Live for logged-in U.S. users on Free, Plus, and Pro, and named in the launch set. | [Zillow in ChatGPT](https://www.zillow.com/news/zillow-becomes-first-real-estate-app-in-chatgpt/) [25] · [The Verge, ChatGPT apps](https://www.theverge.com/news/793039/openai-chatgpt-apps-developers-sdk-canva-zillow-devday-2025) [11] |\n| **Adobe** | ChatGPT app | Supported · checked 2026-10-30 | Photoshop editing in ChatGPT, plus Acrobat and Express for photos, designs, and PDFs. | [Photoshop in ChatGPT](https://blog.adobe.com/en/publish/2025/12/10/edit-photoshop-chatgpt) [26] |\n| **Apps SDK Examples Gallery** | Official example MCP servers | Listed · checked 2026-11-06 | Official example MCP servers, including `kitchen_sink_server_node/` and `kitchen_sink_server_python/`, light up widgets with `_meta.ui.resourceUri`. | [Apps SDK Examples Gallery](https://github.com/openai/openai-apps-sdk-examples/) [27] |\n\n### Host surfaces & SDK tooling\n\n| Actor | Role | Status | Transport & Scope | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **ChatGPT** | Apps host | Supported · checked 2026-10-30 | MCP Apps host: `_meta.ui.resourceUri`, `ui/*` postMessage, `text/html;profile=mcp-app`. | [Add UI to your MCP server](https://developers.openai.com/plugins/build/chatgpt-ui) [2] |\n| **Codex** | Plugin host | Supported · checked 2026-10-30 | Shared plugin directory; root `plugin.json`, `skills/`, `mcp.json`, and `extensions.com.openai`. | [Plugins concept](https://developers.openai.com/plugins/concepts/plugins) [1] · [Build a plugin](https://developers.openai.com/plugins/build/plugins) [3] |\n| **OpenAI Apps SDK UI** | SDK | Supported · checked 2026-10-30 | `@openai/apps-sdk-ui` controls match ChatGPT and use the MCP Apps `ui/*` bridge. | [Add UI to your MCP server](https://developers.openai.com/plugins/build/chatgpt-ui) [2] |\n\n### Ecosystem censuses\n\n- **openai/plugins contents** (*as of 2026-10-30*): The GitHub contents listing for openai/plugins under plugins/ contains 62 directories, including adobe, canva, and figma. — Count of objects in the contents array whose path is `plugins/<name>` and whose type is dir. [28]\n- **The Verge, ChatGPT apps** (*as of 2025-10-06*): The Verge names seven apps available inside ChatGPT at launch: Booking.com, Canva, Coursera, Expedia, Figma, Spotify, and Zillow. — Count of company names in The Verge sentence that lists apps available inside ChatGPT starting that day. [11]\n\n---\n\n## See also\n\n- **Category:** [Act protocols](/category/act/)\n\n---\n\n## References\n\n1. OpenAI, *Plugin architecture* (checked 2026-10-30) — <https://developers.openai.com/plugins/concepts/plugins>\n2. OpenAI, *Add UI to your MCP server* (checked 2026-10-30) — <https://developers.openai.com/plugins/build/chatgpt-ui>\n3. OpenAI, *Package your plugin* (checked 2026-10-30) — <https://developers.openai.com/plugins/build/plugins>\n4. Agent Plugins, *Agent Plugins* (checked 2026-10-30) — <https://agent-plugins.org/>\n5. Maxwell Zeff (TechCrunch), *OpenAI launches apps inside of ChatGPT* (published 2025-10-06; modified 2025-10-06) — <https://techcrunch.com/2025/10/06/openai-launches-apps-inside-of-chatgpt/>\n6. OpenAI, *MCP server* (checked 2026-10-30) — <https://developers.openai.com/plugins/concepts/mcp-server>\n7. OpenAI, *Plugin UI changelog* (checked 2026-10-30) — <https://developers.openai.com/plugins/changelog>\n8. OpenAI, *Reference* (checked 2026-10-30) — <https://developers.openai.com/plugins/reference>\n9. Lucas Ropek (TechCrunch), *ChatGPT launches an app store, lets developers know it's open for business* (published 2025-12-18; modified 2025-12-18) — <https://techcrunch.com/2025/12/18/chatgpt-launches-an-app-store-lets-developers-know-its-open-for-business/>\n10. Ashley Capoot, Kate Rooney, and Chris Eudaily (CNBC), *OpenAI DevDay 2026 recap* (published 2026-09-29; modified 2026-09-30) — <https://www.cnbc.com/2026/09/29/openai-devday-2026-live-updates.html>\n11. Jay Peters (The Verge), *OpenAI will let developers build apps that work inside ChatGPT* (published 2025-10-06) — <https://www.theverge.com/news/793039/openai-chatgpt-apps-developers-sdk-canva-zillow-devday-2025>\n12. Model Context Protocol, *MCP Apps* (modified 2026-09-02) — <https://modelcontextprotocol.io/extensions/apps/overview>\n13. OpenAI, *Troubleshooting* (checked 2026-10-30) — <https://developers.openai.com/plugins/deploy/troubleshooting>\n14. Ido Salomon, Liad Yosef, Olivier Chafik, Jerome Swannack, Jonathan Hefner, Anton Pidkuiko, Nick Cooper, Bryan Ashley, and Alexi Christakis, *SEP-1865: MCP Apps - Interactive User Interfaces for MCP* (created 2025-11-21; modified 2026-07-31) — <https://modelcontextprotocol.io/seps/1865-mcp-apps-interactive-user-interfaces-for-mcp>\n15. OpenAI, *Upload and submit your plugin* (checked 2026-10-30) — <https://developers.openai.com/plugins/deploy/submission>\n16. Vaibhav (VB) Srivastav and Katia Gil Guzman (OpenAI), *OpenAI for Developers in 2025* (published 2025-12-30) — <https://developers.openai.com/blog/openai-for-developers-2025>\n17. Model Context Protocol, *Specification* (version 2026-07-28; modified 2026-10-30) — <https://modelcontextprotocol.io/specification/2026-07-28>\n18. Google A2UI Team, *Introducing A2UI: An open project for agent-driven interfaces* (published 2025-12-15) — <https://developers.googleblog.com/introducing-a2ui-an-open-project-for-agent-driven-interfaces/>\n19. Model Context Protocol, *The MCP Registry* (modified 2026-10-30) — <https://modelcontextprotocol.io/registry/about>\n20. Canva Pty Ltd. (openai/plugins), *plugins/canva/.codex-plugin/plugin.json* (fetched 2026-10-30) — <https://raw.githubusercontent.com/openai/plugins/main/plugins/canva/.codex-plugin/plugin.json>\n21. OpenAI (openai/plugins), *plugins/canva/.app.json* (fetched 2026-10-30) — <https://raw.githubusercontent.com/openai/plugins/main/plugins/canva/.app.json>\n22. Figma (openai/plugins), *plugins/figma/.codex-plugin/plugin.json* (fetched 2026-10-30) — <https://raw.githubusercontent.com/openai/plugins/main/plugins/figma/.codex-plugin/plugin.json>\n23. OpenAI (openai/plugins), *plugins/figma/.app.json* (fetched 2026-10-30) — <https://raw.githubusercontent.com/openai/plugins/main/plugins/figma/.app.json>\n24. Spotify, *Your Prompts, Spotify's Personalized Picks: Introducing Spotify in ChatGPT* (published 2025-10-06; modified 2026-06-25) — <https://newsroom.spotify.com/2025-10-06/spotify-personalized-prompts-chatgpt/>\n25. Zillow, *Zillow becomes the only real estate app in ChatGPT* (published 2025-10-06; modified 2026-02-11) — <https://www.zillow.com/news/zillow-becomes-first-real-estate-app-in-chatgpt/>\n26. Pam Clark (Adobe), *Edit with Photoshop in ChatGPT* (published 2025-12-10) — <https://blog.adobe.com/en/publish/2025/12/10/edit-photoshop-chatgpt>\n27. OpenAI, *Example apps for the Apps SDK* (checked 2026-11-06) — <https://github.com/openai/openai-apps-sdk-examples/>\n28. OpenAI, *openai/plugins plugins directory listing* (fetched 2026-10-30) — <https://github.com/openai/plugins/blob/HEAD/plugins>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "AAMP",
   "adoption": {
    "level": "observed",
    "by": "IAB Tech Lab Seller Agent, Agentic Direct, IAB Tech Lab Buyer Agent, and Registry Agent example",
    "probe_run": null
   },
   "aliases": [],
   "analog": "no single classic-web analog; closest is an umbrella of OpenRTB/OpenDirect-style transaction protocols reworked for agent-to-agent negotiation",
   "collisions": [
    "Agent Authorization Profile (also abbreviated AAP, IETF OAuth draft, unrelated)"
   ],
   "discovery": {
    "mechanism": "endpoint",
    "path": "/a2a/{role}/.well-known/agent-card.json"
   },
   "dispute": {
    "claims": [
     "'AAMP 2.3' names a coordinated release of several independently-versioned repos, not a version of one document.",
     "Its Trust and Transparency pillar (Agent Registry) functions like an identity/disclosure directory, which arguably also belongs partly under this site's 'identify' step."
    ],
    "summary": "AAMP is not one protocol: it is a named umbrella for at least five separately-versioned repositories and three conceptually distinct pillars (execution via ARTF, which this site tracks as its own record under 'act'; negotiation/transaction via Agentic Direct and Agentic Audiences; and identity/disclosure via the Agent Registry, which overlaps with this site's 'identify' step). 'AAMP 2.3' is a marketing-level release label for the coalition's roadmap, not a single spec version that a probe can confirm end-to-end. This record is kept (per instructions, not withdrawn) but should be read as a program name whose most testable component (ARTF) already has its own row; readers wanting a single executable spec should look at ARTF, Agentic Direct or the Agent Registry individually."
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://iabtechlab.com/standards/aamp-agentic-advertising-management-protocols/",
     "claim": "IAB Tech Lab, *AAMP Agentic Advertising Management Protocols*, published 2026-02-26; modified 2026-10-27",
     "date": null,
     "quote": "AAMP is an IAB Tech Lab umbrella initiative for bringing agentic AI into the advertising ecosystem in a responsible and scalable fashion. / AAMP is an IAB Tech Lab umbrella initiative for bringing agentic AI into the advertising ecosystem in a responsible and scalable fashion. ... being executed as an open-source project with the Agentic Task Force at IAB Tech Lab weighing in on requirements ... announced in early 2026 / AAMP is an IAB Tech Lab umbrella initiative / how AAMP has developed since it was announced in early 2026 / \"datePublished\":\"2026-02-26T19:53:59+00:00\" / with the Agentic Task Force at IAB Tech Lab weighing in on requirements / Sign up to join the Agentic Task Force and build with us by emailing techlab@iabtechlab.com. / being executed as an open-source project with the Agentic Task Force at IAB Tech Lab weighing in on requirements / Last updated: October 27, 2026 / It also encompasses far more than a single framework. / This is provided by the IAB Tech Lab Agent Registry, which is part of the Tools Portal / The key agentic protocols - MCP from Anthropic, and Google's Agent to Agent - perform best when they have utility schemas along with reference implementations to establish context. / reviews the 3 pillars of the AAMP (Agentic Advertising Management Protocols) framework - Foundations, Protocols, and Trust and Transparency. / we have included open-source reference implementation for Ad Buyer Systems and Ad Seller Systems. / You can download the Buyer Agent SDK and the Seller Agent SDK in our GitHub repository.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://raw.githubusercontent.com/IABTechLab/AAMP/main/README.md",
     "claim": "IAB Tech Lab, *AAMP — Agentic Advertising Management Protocols (README)*, fetched 2026-10-31",
     "date": null,
     "quote": "ARTF is a foundation for implementing agent services which operate within a host platform and that the orchestrating platform can call directly to accomplish a shared goal. / Each repository uses independent semantic versioning. ... Cross-repository alignment occurs via governance coordination. / All repositories follow IAB Tech Lab contribution and code of conduct policies. / Each repository uses independent semantic versioning. / Cross-repository alignment occurs via governance coordination. / This repository serves as the central hub for the AAMP framework / AAMP is the umbrella initiative under which all of Tech Lab's Agentic work is being developed / Reference implementation of supply-side coordination and marketplace interaction. / Provides the core communication framework and orchestration layer for agent interaction. / Reference implementation of demand-side agent logic and decision workflows. / Demonstrates agent discovery, registration, and coordination patterns. / This repository serves as the central hub for the AAMP framework with links to each AAMP repository outlined below. / Agentic Direct (Core Orchestration) / Open Proposal / Registry Agent (Example) / Agentic Real Time Framework (ARTF) / Agentic Audiences",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://adcontextprotocol.org/",
     "claim": "AgenticAdvertising.org, *AgenticAdvertising.org — The open standard for AI-powered advertising*, AdCP 3.2 generally available; fetched 2026-10-31",
     "date": null,
     "quote": "AgenticAdvertising.org publishes AdCP — the open protocol that lets AI agents discover, plan, buy, sell, and measure media across every channel. / AdCP 3.2 is now generally available",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://raw.githubusercontent.com/IABTechLab/agentic-direct/main/README.md",
     "claim": "IAB Tech Lab, *A2A AgenticDirect*, fetched 2026-10-31",
     "date": null,
     "quote": "GET /a2a/{role}/.well-known/agent-card.json Agent card discovery (A2A v0.3.0) ... POST /a2a/{role}/jsonrpc ... sendMessage - Send message to agent ... getTask - Get task status / POST /a2a/{role}/jsonrpc / JSON-RPC 2.0: Standard protocol for agent communication / sendMessage - Send message to agent / getTask - Get task status / Automatically generates MCP tools from OpenAPI spec / GET /a2a/{role}/.well-known/agent-card.json / currently returns mock data / A2A v0.3.0 Compliant: Full agent card with skills, OAuth2, interfaces / JSON-RPC 2.0 Router / integration for OpenDirect v2.1 / Clean, schema-driven implementation of A2A (Agent-to-Agent) protocol with MCP (Model Context Protocol) integration for OpenDirect v2.1. / Returns mock responses / Agent Card Generator (v0.3.0) / @a2a-js/sdk integration",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://raw.githubusercontent.com/IABTechLab/seller-agent/main/README.md",
     "claim": "IAB Tech Lab, *IAB Tech Lab — Seller Agent*, fetched 2026-10-31",
     "date": null,
     "quote": "/mcp (Streamable HTTP) ... /api/v1/* / /mcp (Streamable HTTP) / /api/v1/* / Authorization\": \"Bearer / Apache 2.0 / Human-in-the-loop approval gates with configurable guard conditions ... set_approval_gates / 46 MCP tools / V2 - Feature Complete / An AI-powered inventory management system for publishers and SSPs to automate programmatic deal negotiation, booking, and distribution using IAB Tech Lab standards (OpenDirect 2.1, Deals API v1.0, sellers.json). / Distribute deals through SSPs - PubMatic (MCP), Index Exchange (REST), Magnite (REST) / GAM, FreeWheel, and CSV (demo/testing) supported",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://iabtechlab.com/press-releases/iab-tech-lab-releases-aamp-2-3-bringing-enterprise-grade-infrastructure-and-privacy-diligence-to-agentic-advertising/",
     "claim": "IAB Tech Lab, *IAB Tech Lab Releases AAMP 2.3, Bringing Enterprise-Grade Infrastructure and Privacy Diligence to Agentic Advertising*, dateline 2026-07-30; published 2026-07-31; modified 2026-08-25",
     "date": null,
     "quote": "NEW YORK, July 30, 2026 - Today, IAB Tech Lab, the global digital advertising technical standards body, announced the release of AAMP 2.3 / announced the release of AAMP 2.3 / Agent-run advertising has been stuck in the demo phase because the deal plane-the systems and protocols used to create, share, and manage programmatic deals-remains fragmented across platforms,\" said Mano Pillai, CEO, Co-Founder, HyperMindZ. / IAB Diligence Platform and SafeGuard Privacy directly into the Buyer Agent ... Any path that commits spend is deterministic and provable with human approvals outside of value-based thresholds",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://raw.githubusercontent.com/IABTechLab/OpenProposal/main/README.md",
     "claim": "IAB Tech Lab, *OpenProposal, AAMP 3.0 Object Model Specification*, public comment 2026-09-22 to 2026-10-22; fetched 2026-10-31",
     "date": null,
     "quote": "open for public comment ... OpenProposal is the core AAMP 3.0 object ... Comment period closes ... 2026-10-22 ... the draft announced for public comment is v3.0-draft-1 ... This is a draft. Nothing here is a ratified IAB Tech Lab standard. / This is a draft. Nothing here is a ratified IAB Tech Lab standard. / the draft announced for public comment is v3.0-draft-1 / Comment period opens / 2026-09-22 / Comment period closes / 2026-10-22 / Creative Commons Attribution 3.0 License / OpenProposal does not replace IAB Tech Lab execution standards - each line item lands in the one its transaction_mechanism maps to (OpenDirect 2.1, Deals API, OpenRTB 2.6). / Nothing here is a ratified IAB Tech Lab standard.",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://raw.githubusercontent.com/IABTechLab/registry-agent-example/main/README.md",
     "claim": "IAB Tech Lab, *Registry Agent*, fetched 2026-10-31",
     "date": null,
     "quote": "Bearer token for registry MCP authentication. / REGISTRY_MCP_TOKEN / An Agent Development Kit (ADK) TypeScript agent that interacts with the Tech Lab agent registry MCP server. / REGISTRY_MCP_TOKEN=\"your-token-here\" / Web interface (development only, not for production)",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://github.com/IABTechLab/AAMP",
     "claim": "IAB Tech Lab, *AAMP — Agentic Advertising Management Protocols*, repository created 2026-02-26; fetched 2026-10-31",
     "date": null,
     "quote": "AAMP - Agentic Advertising Management Protocols / Apache License 2.0",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://raw.githubusercontent.com/IABTechLab/buyer-agent/main/README.md",
     "claim": "IAB Tech Lab, *IAB Tech Lab — Buyer Agent*, fetched 2026-10-31",
     "date": null,
     "quote": "Apache 2.0 / Browse seller media kits ... Automate deal negotiations ... Book deals programmatically via IAB OpenDirect 2.1 protocol / Vendor Approval Gating (optional) ... When SGP_ENFORCE=true ... Off by default - with SGP_ENFORCE unset there are zero SGP calls and booking behavior is unchanged. / V2 - Active Development / An AI-powered media buying system for DSPs, agencies, and advertisers to automate programmatic direct purchases using IAB OpenDirect 2.1 standards. / Obtain Deal IDs for DSP activation in The Trade Desk, DV360, Amazon DSP, and other platforms / MCP Client / A2A Client / JSON-RPC 2.0 / REST Client / When SGP_ENFORCE=true / Off by default - with SGP_ENFORCE unset there are zero SGP calls and booking behavior is unchanged.",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://iabtechlab.com/a-milestone-for-the-agentic-advertising-ecosystem/",
     "claim": "IAB Tech Lab, *A Milestone for the Agentic Advertising Ecosystem*, published 2026-08-12",
     "date": null,
     "quote": "ARTF is a container and MCP-based standard that can be deployed by companies within the programmatic bidstream.",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://docs.adcontextprotocol.org/dist/docs/3.2.8/intro",
     "claim": "AgenticAdvertising.org, *AdCP — Introduction to the Protocol*, modified 2026-10-29",
     "date": null,
     "quote": "every AdCP-enabled publisher hosts an adagents.json file / https://streamhaus.tv/.well-known/adagents.json",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28",
     "claim": "Model Context Protocol, *Model Context Protocol specification*, version 2026-07-28; page modified 2026-10-30",
     "date": null,
     "quote": "Model Context Protocol (MCP) is an open protocol that enables seamless integration between LLM applications and external data sources and tools. / The protocol uses JSON-RPC 2.0 messages / version 2026-07-28 (latest)",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://a2a-protocol.org/latest/specification/",
     "claim": "The Linux Foundation, *Overview — A2A Protocol*, copyright 2026; fetched 2026-10-30",
     "date": null,
     "quote": "Agent2Agent Protocol (A2A): Focuses on standardizing how independent, often opaque, AI agents communicate and collaborate with each other as peers.",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://iabtechlab.com/iab-tech-lab-agentic-advertising-with-aamp-pilot-program",
     "claim": "IAB Tech Lab, *AAMP Pilot Program*, fetched 2026-11-06",
     "date": null,
     "quote": "Pilot the Agentic Advertising Management Protocols (AAMP) Buyer Agent SDK and Seller Agent SDK / Buy-side platforms, agencies, and brands / building a buyer agent / Publishers, SSPs, and sell-side platforms / building a seller agent / OpenDirect, the Deals API, AdCOM, or the Tech Lab Agent Registry",
     "ref": 15
    }
   ],
   "form": "endpoint",
   "governance": "IAB Tech Lab; Agentic Task Force weighs in on requirements",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against iabtechlab.com/standards/aamp-agentic-advertising-management-protocols/, the 2026-07-30 AAMP 2.3 press release, and github.com/IABTechLab/AAMP; moved step from 'account' to 'coordinate'; flagged umbrella-program dispute and acronym collision with IETF AAP (Agent Authorization Profile)"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "aamp",
   "implementation": "multi-implementation",
   "last_verified": "2026-10-31",
   "name": "Agentic Advertising Management Protocols",
   "native_status": "Umbrella initiative, AAMP 2.3 announced 2026-07-30; OpenProposal is an unratified public-comment draft; the standards page says AAMP is far more than a single framework",
   "origin": {
    "date": "2026-02-26",
    "org": "IAB Tech Lab, Agentic Task Force"
   },
   "part_of": null,
   "parties": [
    "agent-agent"
   ],
   "phase": "living",
   "probe": {
    "method": "GET",
    "on_absent": "No registry entry for a company does not mean no AAMP deployment -- only that it has not self-registered.",
    "parse": "A response listing registered agents (buyer/seller/registry agents) indicates the IAB Tech Lab Agent Registry, AAMP's 'Trust and Transparency' pillar, is live; absence of a listing for a given company is not proof they lack an AAMP integration, since registration is voluntary.",
    "path": "https://registry.iabtechlab.ai/"
   },
   "question": "How do a buyer's agent and a seller's agent discover each other's inventory, negotiate terms and hand off a transaction inside the existing ad-tech stack?",
   "scope": "advertising",
   "spec_url": "https://github.com/IABTechLab/AAMP",
   "step": "coordinate",
   "summary_md": "Agentic Advertising Management Protocols (`AAMP`) is an IAB Tech Lab umbrella initiative for bringing agentic AI into the advertising ecosystem, announced in early 2026 and being executed as an open-source project. Agentic Direct publishes an A2A v0.3.0 agent card at `GET /a2a/{role}/.well-known/agent-card.json` and accepts JSON-RPC 2.0 `sendMessage` and `getTask` at `POST /a2a/{role}/jsonrpc`. The seller reference agent exposes Streamable HTTP MCP at `/mcp` and programmatic REST at `/api/v1/*`. IAB Tech Lab announced the release of AAMP 2.3 in New York on July 30, 2026. Each repository uses independent semantic versioning, and cross-repository alignment occurs via governance coordination. OpenProposal, the core AAMP 3.0 object, is public-comment draft v3.0-draft-1 from 2026-09-22 to 2026-10-22. The README heading still says open for public comment, though the comment period closed on 2026-10-22; the text is still a draft, and no ratification is announced.",
   "track": "industry-body",
   "version": {
    "date": "2026-07-30",
    "label": "AAMP 2.3"
   },
   "watch": [
    {
     "type": "github",
     "repo": "IABTechLab/AAMP",
     "mode": "release"
    }
   ],
   "use_cases": [
    "agent-to-agent-messaging",
    "describe-agent-capabilities",
    "prove-agent-identity"
   ],
   "audience": [
    "platform",
    "agent-builder",
    "standards-body"
   ],
   "pairs_with": [
    "artf",
    "adcp",
    "mcp",
    "a2a"
   ],
   "prerequisites": [],
   "hatnote_md": "This page is about IAB Tech Lab's Agentic Advertising Management Protocols (AAMP), an umbrella initiative grouping buyer and seller reference agents, Agentic Direct orchestration, OpenProposal, and [Agentic Real Time Framework (ARTF)](/protocols/artf/). It is not AgenticAdvertising.org's [Ad Context Protocol (AdCP)](/protocols/adcp/), nor the unrelated IETF OAuth Agent Authorization Profile ([AAP](/protocols/aap/)).",
   "tier": "spec_brief",
   "lifecycle_status": "active",
   "wire_archetype": "harnesses_rpc_ui",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-10-31",
   "v05_hatnote_html_md": "This page is about IAB Tech Lab's Agentic Advertising Management Protocols (AAMP), an umbrella initiative grouping buyer and seller reference agents, Agentic Direct orchestration, OpenProposal, and [Agentic Real Time Framework (ARTF)](/protocols/artf/). It is not AgenticAdvertising.org's [Ad Context Protocol (AdCP)](/protocols/adcp/), nor the unrelated IETF OAuth Agent Authorization Profile ([AAP](/protocols/aap/)). [1][2][3]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "Agentic Advertising Management Protocols (`AAMP`) is an IAB Tech Lab umbrella initiative for bringing agentic AI into the advertising ecosystem, announced in early 2026 and being executed as an open-source project. [1] Agentic Direct publishes an A2A v0.3.0 agent card at `GET /a2a/{role}/.well-known/agent-card.json` and accepts JSON-RPC 2.0 `sendMessage` and `getTask` at `POST /a2a/{role}/jsonrpc`. [4] The seller reference agent exposes Streamable HTTP MCP at `/mcp` and programmatic REST at `/api/v1/*`. [5] IAB Tech Lab announced the release of AAMP 2.3 in New York on July 30, 2026. [6] Each repository uses independent semantic versioning, and cross-repository alignment occurs via governance coordination. [2] OpenProposal, the core AAMP 3.0 object, is public-comment draft v3.0-draft-1 from 2026-09-22 to 2026-10-22. The README heading still says open for public comment, though the comment period closed on 2026-10-22; the text is still a draft, and no ratification is announced. [7]",
   "v05_identity_sentence_md": "Agentic Advertising Management Protocols (`AAMP`) is an IAB Tech Lab umbrella initiative for bringing agentic AI into the advertising ecosystem, announced in early 2026 and being executed as an open-source project. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Coordinate](/category/coordinate/) (`coordinate`)"
    },
    {
     "label": "Form",
     "value_md": "Endpoint (`endpoint`)"
    },
    {
     "label": "Originated by",
     "value_md": "IAB Tech Lab, announced in early 2026 (standards page published 2026-02-26) [1]"
    },
    {
     "label": "Governed by",
     "value_md": "IAB Tech Lab; the Agentic Task Force weighs in on requirements (join at techlab@iabtechlab.com). Child repositories follow IAB Tech Lab contribution policies. [1][2]"
    },
    {
     "label": "Track",
     "value_md": "Open-source project under IAB Tech Lab [1]"
    },
    {
     "label": "Status",
     "value_md": "AAMP 2.3 announced 2026-07-30. The standards page (last updated 2026-10-27) says AAMP encompasses far more than a single framework. OpenProposal, the AAMP 3.0 object, is a public-comment draft and not a ratified standard. [1][6][7]"
    },
    {
     "label": "Version",
     "value_md": "AAMP 2.3 (announced 2026-07-30). Each child repository uses independent semantic versioning, aligned by governance coordination. OpenProposal public-comment draft v3.0-draft-1 (2026-09-22 to 2026-10-22). [2][6][7]"
    },
    {
     "label": "Transports",
     "value_md": "MCP (Streamable HTTP at `/mcp`), A2A JSON-RPC 2.0 over HTTP, REST `/api/v1/*` [4][5]"
    },
    {
     "label": "Message format",
     "value_md": "JSON-RPC 2.0 (`sendMessage`, `getTask`) and MCP tools generated from an OpenAPI schema [4]"
    },
    {
     "label": "Headers",
     "value_md": "`Authorization: Bearer` on the seller-agent MCP client config; bearer token (`REGISTRY_MCP_TOKEN`) on the registry MCP server [5][8]"
    },
    {
     "label": "Found at",
     "value_md": "Agent card at `GET /a2a/{role}/.well-known/agent-card.json`. Trust and transparency is the IAB Tech Lab Agent Registry, part of the Tools Portal. [1][4]"
    },
    {
     "label": "Specification",
     "value_md": "[AAMP — Agentic Advertising Management Protocols](https://github.com/IABTechLab/AAMP) [2][9]"
    },
    {
     "label": "Licence",
     "value_md": "Hub repository: Apache License 2.0. Buyer and Seller Agent READMEs: Apache 2.0. OpenProposal specification: Creative Commons Attribution 3.0. [5][7][9][10]"
    }
   ],
   "v05_problem_md": "Mano Pillai, CEO and co-founder of HyperMindZ, said agent-run advertising has been stuck in the demo phase because the deal plane remains fragmented across platforms. [6] MCP from Anthropic and Google's Agent to Agent perform best when they have utility schemas along with reference implementations. [1] The buyer agent browses seller media kits, automates deal negotiations, and books deals programmatically via IAB OpenDirect 2.1. [10] AAMP 2.3 integrates the IAB Diligence Platform and SafeGuard Privacy into the Buyer Agent, claiming spend-committing paths are deterministic and provable with human approvals (IAB Tech Lab's own claim, not an independent conformance check). The vendor approval gate is off by default (`SGP_ENFORCE=true` opt-in; zero SGP calls when unset), and seller-agent configures approval gates via `set_approval_gates`. [5][6][10] OpenProposal does not replace IAB Tech Lab execution standards; each line item lands in OpenDirect 2.1, the Deals API, or OpenRTB 2.6. [7] Nothing in OpenProposal is a ratified IAB Tech Lab standard. [7] Agentic Direct tool execution currently returns mock data. [4]",
   "v05_mechanism_delta_md": "The buyer agent browses seller media kits, automates deal negotiations, and books deals programmatically via IAB OpenDirect 2.1. [10] AAMP 2.3 integrates the IAB Diligence Platform and SafeGuard Privacy into the Buyer Agent, claiming spend-committing paths are deterministic and provable with human approvals (IAB Tech Lab's own claim, not an independent conformance check). The vendor approval gate is off by default (`SGP_ENFORCE=true` opt-in; zero SGP calls when unset), and seller-agent configures approval gates via `set_approval_gates`. [5][6][10]",
   "v05_scope_boundary_md": "OpenProposal does not replace IAB Tech Lab execution standards; each line item lands in OpenDirect 2.1, the Deals API, or OpenRTB 2.6. [7] Nothing in OpenProposal is a ratified IAB Tech Lab standard. [7] Agentic Direct tool execution currently returns mock data. [4]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "OpenRTB",
      "spec_or_rfc": "OpenRTB 2.6",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "OpenRTB 2.6 is one of the IAB execution standards an OpenProposal line item can land in, and ARTF is the container standard for agent services inside the programmatic bidstream. AAMP is the umbrella that links those repositories, rather than an OpenRTB exchange itself. [2][7][11]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "artf",
      "target_name": "Agentic Real Time Framework",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "ARTF is a container and MCP-based standard that companies can deploy inside the programmatic bidstream, and the AAMP hub lists it as a foundation for agent services a host platform can call directly. AAMP is the umbrella that links that repository with the other agentic-advertising repositories. [1][2][11]"
     },
     {
      "target_id": "adcp",
      "target_name": "Ad Context Protocol (AdCP)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "AdCP is the open protocol AgenticAdvertising.org publishes so AI agents can discover, plan, buy, sell, and measure media. AdCP 3.2 is generally available, and an AdCP publisher hosts an adagents.json file, as in the documented `/.well-known/adagents.json` example. AAMP is IAB Tech Lab's separate umbrella of reference agents and specifications. [1][3][12]"
     },
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "MCP is an open protocol that uses JSON-RPC 2.0 messages so an LLM application can connect to external tools; the specification checked here is version 2026-07-28. AAMP does not replace MCP: its seller reference agent exposes MCP tools, and Agentic Direct generates MCP tools from an OpenDirect schema. [4][5][13]"
     },
     {
      "target_id": "a2a",
      "target_name": "Agent2Agent Protocol (A2A)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "A2A is the Agent2Agent protocol, an open standard for how independent AI agents communicate and collaborate as peers. AAMP's Agentic Direct repository implements an A2A v0.3.0 agent card and a JSON-RPC 2.0 router on OpenDirect, so A2A is a message binding that reference uses. [4][14]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (4 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).",
    "side_a": {
     "visible": true,
     "heading": "Reference seller runtimes",
     "col4_header": "Transport & Scope",
     "note_md": null,
     "rows": [
      {
       "actor": "IAB Tech Lab Seller Agent",
       "role": "Reference seller runtime",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-31",
       "col4_md": "The standards page says IAB Tech Lab included an open-source reference implementation for Ad Seller Systems, and that companies can download the Seller Agent SDK. The Seller Agent README marks the repo `V2 - Feature Complete`. It is an inventory system for publishers and SSPs using OpenDirect 2.1, Deals API v1.0, and sellers.json, with `46 MCP tools`. It distributes deals through PubMatic (MCP), Index Exchange (REST), and Magnite (REST), and connects to GAM, FreeWheel, and CSV for demo and testing.",
       "source_md": "[Seller Agent README (checked 2026-10-31)](https://raw.githubusercontent.com/IABTechLab/seller-agent/main/README.md) [5] · [AAMP standards page (checked 2026-10-31)](https://iabtechlab.com/standards/aamp-agentic-advertising-management-protocols/) [1] · [AAMP hub README (checked 2026-10-31)](https://raw.githubusercontent.com/IABTechLab/AAMP/main/README.md) [2]"
      },
      {
       "actor": "Agentic Direct",
       "role": "Reference orchestration server",
       "status": "Experimental",
       "status_display": "Experimental · checked 2026-10-31",
       "col4_md": "The hub README calls Agentic Direct the core communication framework and orchestration layer for agent interaction. The repository README describes a schema-driven A2A and MCP implementation for OpenDirect v2.1. The MCP server layer returns mock responses. The A2A layer includes an Agent Card Generator (`v0.3.0`) and a JSON-RPC 2.0 router. The JavaScript client uses `@a2a-js/sdk`.",
       "source_md": "[Agentic Direct README (checked 2026-10-31)](https://raw.githubusercontent.com/IABTechLab/agentic-direct/main/README.md) [4] · [AAMP hub README (checked 2026-10-31)](https://raw.githubusercontent.com/IABTechLab/AAMP/main/README.md) [2]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Reference buyer agents & registry clients",
     "col4_header": "Transport & Scope",
     "note_md": null,
     "rows": [
      {
       "actor": "IAB Tech Lab Buyer Agent",
       "role": "Reference buyer agent",
       "status": "Development",
       "status_display": "Development · checked 2026-10-31",
       "col4_md": "The standards page says IAB Tech Lab included an open-source reference implementation for Ad Buyer Systems, and that companies can download the Buyer Agent SDK. The Buyer Agent README marks the repo `V2 - Active Development`. It is a media buying system for DSPs, agencies, and advertisers. It obtains Deal IDs for The Trade Desk, DV360, and Amazon DSP. Sellers are called through an `MCP Client`, an `A2A Client` using `JSON-RPC 2.0`, and a `REST Client`. Optional vendor approval gating (`SGP_ENFORCE=true`) is off by default: when `SGP_ENFORCE` is unset there are zero SGP calls. The hub README calls it a reference implementation of demand-side agent logic.",
       "source_md": "[Buyer Agent README (checked 2026-10-31)](https://raw.githubusercontent.com/IABTechLab/buyer-agent/main/README.md) [10] · [AAMP standards page (checked 2026-10-31)](https://iabtechlab.com/standards/aamp-agentic-advertising-management-protocols/) [1] · [AAMP hub README (checked 2026-10-31)](https://raw.githubusercontent.com/IABTechLab/AAMP/main/README.md) [2]"
      },
      {
       "actor": "Registry Agent example",
       "role": "Registry client",
       "status": "Development",
       "status_display": "Development · checked 2026-10-31",
       "col4_md": "The hub README says the Registry Agent example demonstrates agent discovery, registration, and coordination patterns. The README describes an ADK TypeScript agent for the Tech Lab agent registry MCP server. It reads `REGISTRY_MCP_TOKEN` as a bearer token. The web interface is development only, not for production.",
       "source_md": "[Registry Agent example README (checked 2026-10-31)](https://raw.githubusercontent.com/IABTechLab/registry-agent-example/main/README.md) [8] · [AAMP hub README (checked 2026-10-31)](https://raw.githubusercontent.com/IABTechLab/AAMP/main/README.md) [2]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [
     {
      "label": "AAMP hub README (checked 2026-10-31)",
      "as_of": "2026-10-31",
      "value_md": "The AAMP hub README is the central hub for seven linked repositories and says each repository uses independent semantic versioning. The named repositories are Agentic Direct, Buyer Agent, Seller Agent, Open Proposal, Registry Agent (Example), Agentic Real Time Framework (ARTF), and Agentic Audiences. [2]"
     },
     {
      "label": "IAB Tech Lab, AAMP Pilot Program (fetched 2026-11-06)",
      "as_of": null,
      "value_md": "The AAMP Pilot invites buy-side platforms, agencies, and brands building a buyer agent; publishers, SSPs, and sell-side platforms building a seller agent; and adtech providers building on OpenDirect, the Deals API, AdCOM, or the Tech Lab Agent Registry. Participants pilot the Buyer Agent SDK and the Seller Agent SDK with IAB Tech Lab's Agentic team. [15]"
     }
    ],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "iab-comp",
     "target_name": "CoMP (Content Monetization Protocols)",
     "relation_label": "Complements",
     "delta": "CoMP carries terms at licenseurl and leaves supply discovery out of scope, while AAMP is the umbrella initiative for IAB Tech Lab's agentic advertising work and is described as the foundation for an agentic future based on existing standards.",
     "item_md": "**[CoMP (Content Monetization Protocols)](/protocols/iab-comp/)** (Complements) — CoMP carries terms at licenseurl and leaves supply discovery out of scope, while AAMP is the umbrella initiative for IAB Tech Lab's agentic advertising work and is described as the foundation for an agentic future based on existing standards."
    },
    {
     "item_md": "**[Coordinate protocols](/category/coordinate/)** — Category index for `coordinate` standards."
    }
   ],
   "v05_compiled_md": "---\nid: aamp\ntitle: \"Agentic Advertising Management Protocols\"\ntier: spec_brief\nlifecycle_status: active\ncategory: coordinate\nform: endpoint\nwire_archetype: harnesses_rpc_ui\nspec_url: https://github.com/IABTechLab/AAMP\nlast_checked: 2026-10-31\n---\n\n# Agentic Advertising Management Protocols\n\n**Category:** [Coordinate](/category/coordinate/) (`coordinate`) · **Form:** Endpoint (`endpoint`) · **Last checked:** 2026-10-31\n\n> *This page is about IAB Tech Lab's Agentic Advertising Management Protocols (AAMP), an umbrella initiative grouping buyer and seller reference agents, Agentic Direct orchestration, OpenProposal, and [Agentic Real Time Framework (ARTF)](/protocols/artf/). It is not AgenticAdvertising.org's [Ad Context Protocol (AdCP)](/protocols/adcp/), nor the unrelated IETF OAuth Agent Authorization Profile ([AAP](/protocols/aap/)). [1][2][3]*\n\nAgentic Advertising Management Protocols (`AAMP`) is an IAB Tech Lab umbrella initiative for bringing agentic AI into the advertising ecosystem, announced in early 2026 and being executed as an open-source project. [1] Agentic Direct publishes an A2A v0.3.0 agent card at `GET /a2a/{role}/.well-known/agent-card.json` and accepts JSON-RPC 2.0 `sendMessage` and `getTask` at `POST /a2a/{role}/jsonrpc`. [4] The seller reference agent exposes Streamable HTTP MCP at `/mcp` and programmatic REST at `/api/v1/*`. [5] IAB Tech Lab announced the release of AAMP 2.3 in New York on July 30, 2026. [6] Each repository uses independent semantic versioning, and cross-repository alignment occurs via governance coordination. [2] OpenProposal, the core AAMP 3.0 object, is public-comment draft v3.0-draft-1 from 2026-09-22 to 2026-10-22. The README heading still says open for public comment, though the comment period closed on 2026-10-22; the text is still a draft, and no ratification is announced. [7]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Coordinate](/category/coordinate/) (`coordinate`) |\n| **Form** | Endpoint (`endpoint`) |\n| **Originated by** | IAB Tech Lab, announced in early 2026 (standards page published 2026-02-26) [1] |\n| **Governed by** | IAB Tech Lab; the Agentic Task Force weighs in on requirements (join at techlab@iabtechlab.com). Child repositories follow IAB Tech Lab contribution policies. [1][2] |\n| **Track** | Open-source project under IAB Tech Lab [1] |\n| **Status** | AAMP 2.3 announced 2026-07-30. The standards page (last updated 2026-10-27) says AAMP encompasses far more than a single framework. OpenProposal, the AAMP 3.0 object, is a public-comment draft and not a ratified standard. [1][6][7] |\n| **Version** | AAMP 2.3 (announced 2026-07-30). Each child repository uses independent semantic versioning, aligned by governance coordination. OpenProposal public-comment draft v3.0-draft-1 (2026-09-22 to 2026-10-22). [2][6][7] |\n| **Transports** | MCP (Streamable HTTP at `/mcp`), A2A JSON-RPC 2.0 over HTTP, REST `/api/v1/*` [4][5] |\n| **Message format** | JSON-RPC 2.0 (`sendMessage`, `getTask`) and MCP tools generated from an OpenAPI schema [4] |\n| **Headers** | `Authorization: Bearer` on the seller-agent MCP client config; bearer token (`REGISTRY_MCP_TOKEN`) on the registry MCP server [5][8] |\n| **Found at** | Agent card at `GET /a2a/{role}/.well-known/agent-card.json`. Trust and transparency is the IAB Tech Lab Agent Registry, part of the Tools Portal. [1][4] |\n| **Specification** | [AAMP — Agentic Advertising Management Protocols](https://github.com/IABTechLab/AAMP) [2][9] |\n| **Licence** | Hub repository: Apache License 2.0. Buyer and Seller Agent READMEs: Apache 2.0. OpenProposal specification: Creative Commons Attribution 3.0. [5][7][9][10] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [Adoption and ecosystem](#adoption-and-ecosystem)\n4. [See also](#see-also)\n5. [References](#references)\n\n---\n\n## Problem and scope\n\nMano Pillai, CEO and co-founder of HyperMindZ, said agent-run advertising has been stuck in the demo phase because the deal plane remains fragmented across platforms. [6] MCP from Anthropic and Google's Agent to Agent perform best when they have utility schemas along with reference implementations. [1] The buyer agent browses seller media kits, automates deal negotiations, and books deals programmatically via IAB OpenDirect 2.1. [10] AAMP 2.3 integrates the IAB Diligence Platform and SafeGuard Privacy into the Buyer Agent, claiming spend-committing paths are deterministic and provable with human approvals (IAB Tech Lab's own claim, not an independent conformance check). The vendor approval gate is off by default (`SGP_ENFORCE=true` opt-in; zero SGP calls when unset), and seller-agent configures approval gates via `set_approval_gates`. [5][6][10] OpenProposal does not replace IAB Tech Lab execution standards; each line item lands in OpenDirect 2.1, the Deals API, or OpenRTB 2.6. [7] Nothing in OpenProposal is a ratified IAB Tech Lab standard. [7] Agentic Direct tool execution currently returns mock data. [4]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **OpenRTB** | `OpenRTB 2.6` | Analogous to classic standard | OpenRTB 2.6 is one of the IAB execution standards an OpenProposal line item can land in, and ARTF is the container standard for agent services inside the programmatic bidstream. AAMP is the umbrella that links those repositories, rather than an OpenRTB exchange itself. [2][7][11] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Agentic Real Time Framework](/protocols/artf/)** | Complements | ARTF is a container and MCP-based standard that companies can deploy inside the programmatic bidstream, and the AAMP hub lists it as a foundation for agent services a host platform can call directly. AAMP is the umbrella that links that repository with the other agentic-advertising repositories. [1][2][11] |\n| **[Ad Context Protocol (AdCP)](/protocols/adcp/)** | Peer alternative | AdCP is the open protocol AgenticAdvertising.org publishes so AI agents can discover, plan, buy, sell, and measure media. AdCP 3.2 is generally available, and an AdCP publisher hosts an adagents.json file, as in the documented `/.well-known/adagents.json` example. AAMP is IAB Tech Lab's separate umbrella of reference agents and specifications. [1][3][12] |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | MCP is an open protocol that uses JSON-RPC 2.0 messages so an LLM application can connect to external tools; the specification checked here is version 2026-07-28. AAMP does not replace MCP: its seller reference agent exposes MCP tools, and Agentic Direct generates MCP tools from an OpenDirect schema. [4][5][13] |\n| **[Agent2Agent Protocol (A2A)](/protocols/a2a/)** | Complements | A2A is the Agent2Agent protocol, an open standard for how independent AI agents communicate and collaborate as peers. AAMP's Agentic Direct repository implements an A2A v0.3.0 agent card and a JSON-RPC 2.0 router on OpenDirect, so A2A is a message binding that reference uses. [4][14] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (4 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).*\n\n### Reference seller runtimes\n\n| Actor | Role | Status | Transport & Scope | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **IAB Tech Lab Seller Agent** | Reference seller runtime | Supported · checked 2026-10-31 | The standards page says IAB Tech Lab included an open-source reference implementation for Ad Seller Systems, and that companies can download the Seller Agent SDK. The Seller Agent README marks the repo `V2 - Feature Complete`. It is an inventory system for publishers and SSPs using OpenDirect 2.1, Deals API v1.0, and sellers.json, with `46 MCP tools`. It distributes deals through PubMatic (MCP), Index Exchange (REST), and Magnite (REST), and connects to GAM, FreeWheel, and CSV for demo and testing. | [Seller Agent README (checked 2026-10-31)](https://raw.githubusercontent.com/IABTechLab/seller-agent/main/README.md) [5] · [AAMP standards page (checked 2026-10-31)](https://iabtechlab.com/standards/aamp-agentic-advertising-management-protocols/) [1] · [AAMP hub README (checked 2026-10-31)](https://raw.githubusercontent.com/IABTechLab/AAMP/main/README.md) [2] |\n| **Agentic Direct** | Reference orchestration server | Experimental · checked 2026-10-31 | The hub README calls Agentic Direct the core communication framework and orchestration layer for agent interaction. The repository README describes a schema-driven A2A and MCP implementation for OpenDirect v2.1. The MCP server layer returns mock responses. The A2A layer includes an Agent Card Generator (`v0.3.0`) and a JSON-RPC 2.0 router. The JavaScript client uses `@a2a-js/sdk`. | [Agentic Direct README (checked 2026-10-31)](https://raw.githubusercontent.com/IABTechLab/agentic-direct/main/README.md) [4] · [AAMP hub README (checked 2026-10-31)](https://raw.githubusercontent.com/IABTechLab/AAMP/main/README.md) [2] |\n\n### Reference buyer agents & registry clients\n\n| Actor | Role | Status | Transport & Scope | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **IAB Tech Lab Buyer Agent** | Reference buyer agent | Development · checked 2026-10-31 | The standards page says IAB Tech Lab included an open-source reference implementation for Ad Buyer Systems, and that companies can download the Buyer Agent SDK. The Buyer Agent README marks the repo `V2 - Active Development`. It is a media buying system for DSPs, agencies, and advertisers. It obtains Deal IDs for The Trade Desk, DV360, and Amazon DSP. Sellers are called through an `MCP Client`, an `A2A Client` using `JSON-RPC 2.0`, and a `REST Client`. Optional vendor approval gating (`SGP_ENFORCE=true`) is off by default: when `SGP_ENFORCE` is unset there are zero SGP calls. The hub README calls it a reference implementation of demand-side agent logic. | [Buyer Agent README (checked 2026-10-31)](https://raw.githubusercontent.com/IABTechLab/buyer-agent/main/README.md) [10] · [AAMP standards page (checked 2026-10-31)](https://iabtechlab.com/standards/aamp-agentic-advertising-management-protocols/) [1] · [AAMP hub README (checked 2026-10-31)](https://raw.githubusercontent.com/IABTechLab/AAMP/main/README.md) [2] |\n| **Registry Agent example** | Registry client | Development · checked 2026-10-31 | The hub README says the Registry Agent example demonstrates agent discovery, registration, and coordination patterns. The README describes an ADK TypeScript agent for the Tech Lab agent registry MCP server. It reads `REGISTRY_MCP_TOKEN` as a bearer token. The web interface is development only, not for production. | [Registry Agent example README (checked 2026-10-31)](https://raw.githubusercontent.com/IABTechLab/registry-agent-example/main/README.md) [8] · [AAMP hub README (checked 2026-10-31)](https://raw.githubusercontent.com/IABTechLab/AAMP/main/README.md) [2] |\n\n### Ecosystem censuses\n\n- **AAMP hub README (checked 2026-10-31)** (*as of 2026-10-31*): The AAMP hub README is the central hub for seven linked repositories and says each repository uses independent semantic versioning. The named repositories are Agentic Direct, Buyer Agent, Seller Agent, Open Proposal, Registry Agent (Example), Agentic Real Time Framework (ARTF), and Agentic Audiences. [2]\n- **IAB Tech Lab, AAMP Pilot Program (fetched 2026-11-06)**: The AAMP Pilot invites buy-side platforms, agencies, and brands building a buyer agent; publishers, SSPs, and sell-side platforms building a seller agent; and adtech providers building on OpenDirect, the Deals API, AdCOM, or the Tech Lab Agent Registry. Participants pilot the Buyer Agent SDK and the Seller Agent SDK with IAB Tech Lab's Agentic team. [15]\n\n---\n\n## See also\n\n- **[CoMP (Content Monetization Protocols)](/protocols/iab-comp/)** *(Complements)* — CoMP carries terms at licenseurl and leaves supply discovery out of scope, while AAMP is the umbrella initiative for IAB Tech Lab's agentic advertising work and is described as the foundation for an agentic future based on existing standards.\n- **Category:** [Coordinate protocols](/category/coordinate/)\n\n---\n\n## References\n\n1. IAB Tech Lab, *AAMP Agentic Advertising Management Protocols* (published 2026-02-26; modified 2026-10-27) — <https://iabtechlab.com/standards/aamp-agentic-advertising-management-protocols/>\n2. IAB Tech Lab, *AAMP — Agentic Advertising Management Protocols (README)* (fetched 2026-10-31) — <https://raw.githubusercontent.com/IABTechLab/AAMP/main/README.md>\n3. AgenticAdvertising.org, *AgenticAdvertising.org — The open standard for AI-powered advertising* (AdCP 3.2 generally available; fetched 2026-10-31) — <https://adcontextprotocol.org/>\n4. IAB Tech Lab, *A2A AgenticDirect* (fetched 2026-10-31) — <https://raw.githubusercontent.com/IABTechLab/agentic-direct/main/README.md>\n5. IAB Tech Lab, *IAB Tech Lab — Seller Agent* (fetched 2026-10-31) — <https://raw.githubusercontent.com/IABTechLab/seller-agent/main/README.md>\n6. IAB Tech Lab, *IAB Tech Lab Releases AAMP 2.3, Bringing Enterprise-Grade Infrastructure and Privacy Diligence to Agentic Advertising* (dateline 2026-07-30; published 2026-07-31; modified 2026-08-25) — <https://iabtechlab.com/press-releases/iab-tech-lab-releases-aamp-2-3-bringing-enterprise-grade-infrastructure-and-privacy-diligence-to-agentic-advertising/>\n7. IAB Tech Lab, *OpenProposal, AAMP 3.0 Object Model Specification* (public comment 2026-09-22 to 2026-10-22; fetched 2026-10-31) — <https://raw.githubusercontent.com/IABTechLab/OpenProposal/main/README.md>\n8. IAB Tech Lab, *Registry Agent* (fetched 2026-10-31) — <https://raw.githubusercontent.com/IABTechLab/registry-agent-example/main/README.md>\n9. IAB Tech Lab, *AAMP — Agentic Advertising Management Protocols* (repository created 2026-02-26; fetched 2026-10-31) — <https://github.com/IABTechLab/AAMP>\n10. IAB Tech Lab, *IAB Tech Lab — Buyer Agent* (fetched 2026-10-31) — <https://raw.githubusercontent.com/IABTechLab/buyer-agent/main/README.md>\n11. IAB Tech Lab, *A Milestone for the Agentic Advertising Ecosystem* (published 2026-08-12) — <https://iabtechlab.com/a-milestone-for-the-agentic-advertising-ecosystem/>\n12. AgenticAdvertising.org, *AdCP — Introduction to the Protocol* (modified 2026-10-29) — <https://docs.adcontextprotocol.org/dist/docs/3.2.8/intro>\n13. Model Context Protocol, *Model Context Protocol specification* (version 2026-07-28; page modified 2026-10-30) — <https://modelcontextprotocol.io/specification/2026-07-28>\n14. The Linux Foundation, *Overview — A2A Protocol* (copyright 2026; fetched 2026-10-30) — <https://a2a-protocol.org/latest/specification/>\n15. IAB Tech Lab, *AAMP Pilot Program* (fetched 2026-11-06) — <https://iabtechlab.com/iab-tech-lab-agentic-advertising-with-aamp-pilot-program>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "ARTF",
   "adoption": {
    "level": "observed",
    "by": "IAB Tech Lab Go reference server, IAB Tech Lab Rust reference implementation, and IAB Tech Lab protobuf codegen",
    "probe_run": null
   },
   "aliases": [
    "agentic-rtb-framework",
    "Agentic RTB Framework"
   ],
   "analog": "a plugin/sidecar execution framework for real-time bidding -- closer to a serverless function contract than a classic-web analog",
   "collisions": [],
   "discovery": {
    "mechanism": "endpoint",
    "path": "Deployed into the host infrastructure. Reference health port 8080; MCP at /mcp on port 8081 when the web UI and MCP are both enabled."
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://iabtechlab.com/standards/artf/",
     "claim": "IAB Tech Lab, *ARTF (Agentic Real Time Framework)*, published 2025-11-13; modified 2026-10-20",
     "date": null,
     "quote": "The Agentic Real Time Framework (ARTF) specification defines a foundation for implementing agent services which operate within a host platform and that the orchestrating platform can call directly to accomplish a shared goal. / The Agentic Real Time Framework (ARTF) specification defines a foundation for implementing agent services which operate within a host platform and that the orchestrating platform can call directly to accomplish a shared goal. … The model leverages containers which are deployed into the infrastructure of a host … defining an API which enables reliable, protected and private bidstream mutation. / \"dateModified\":\"2026-10-20T20:53:52+00:00\" … will be finalized soon. Work on Version 2.0 is already underway. / You can still join the Agentic Working Group to help develop it. / The ARTF Specification was in Public Comment until January 15, 2026, and will be finalized soon. Work on Version 2.0 is already underway. / \"dateModified\":\"2026-10-20T20:53:52+00:00\" / Access the Finalized ARTF (Agentic Real Time Framework) Specification v1 in GitHub / containers which are deployed into the infrastructure of a host / the orchestrating platform can call directly … defining an API which enables reliable, protected and private bidstream mutation … service providers package their offering once and deploy it to any standard-compliant platform / the primary focus here is on systematic agentic integration (service to service integration), but autonomic agentic functionality (model to service) is also envisioned … as the integrating technology matures / defining an API which enables reliable, protected and private bidstream mutation",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://iabtechlab.com/a-milestone-for-the-agentic-advertising-ecosystem/",
     "claim": "Barnaby (IAB Tech Lab), *A Milestone for the Agentic Advertising Ecosystem*, published 2026-08-12",
     "date": null,
     "quote": "the real-time agentic layer for OpenRTB / \"datePublished\":\"2026-08-12T12:34:12+00:00\" … announce the finalized v1.0 release of the Agentic Real Time Framework (ARTF) / IAB Tech Lab and the Agentic Task Force are excited to announce the finalized v1.0 release / \"datePublished\":\"2026-08-12T12:34:12+00:00\" / announce the finalized v1.0 release of the Agentic Real Time Framework (ARTF) / a stable, production-ready foundation that implementers can build on / each deployed agent runs in an isolated, locked-down environment on the host's own infrastructure, with no external network access by default / A Rust reference implementation / An orchestration layer that allows one ARTF node to call other ARTF nodes (potentially from other organizations) and merge their responses to a single bid request mutation",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://github.com/IABTechLab/AAMP",
     "claim": "IAB Tech Lab, *Agentic Advertising Management Protocols (AAMP)*, repository created 2026-02-26",
     "date": null,
     "quote": "ARTF is a foundation for implementing agent services which operate within a host platform and that the orchestrating platform can call directly to accomplish a shared goal.",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://docs.adcontextprotocol.org/dist/docs/3.2.8/intro",
     "claim": "AgenticAdvertising.org, *Introduction to AdCP*, modified 2026-10-29",
     "date": null,
     "quote": "AdCP is an open agentic advertising standard. / These agents communicate over two transport protocols: MCP (for AI assistants calling tools) and A2A (for agent-to-agent collaboration). / https://streamhaus.tv/.well-known/adagents.json",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://raw.githubusercontent.com/IABTechLab/agentic-real-time-framework/main/README.md",
     "claim": "IAB Tech Lab, *Agentic Real Time Framework README*, fetched 2026-10-31",
     "date": null,
     "quote": "gRPC | 50051 | Native RTBExtensionPoint service … MCP | 50052* | Model Context Protocol for AI agents … When both Web UI and MCP are enabled, MCP is served on the Web UI port (8081) at `/mcp` … Health | 8080 | Kubernetes liveness/readiness probes … service RTBExtensionPoint { rpc GetMutations (RTBRequest) returns (RTBResponse); } … The MCP server exposes an extend_rtb tool that accepts OpenRTB bid requests and returns proposed mutations. / The IAB Technology Laboratory is a nonprofit research and development consortium / Agentic Real Time Framework (ARTF) v1.0 / service RTBExtensionPoint { rpc GetMutations (RTBRequest) returns (RTBResponse); } / The MCP server exposes an extend_rtb tool that accepts OpenRTB bid requests and returns proposed mutations. / gRPC | 50051 | Native RTBExtensionPoint service / MCP | 50052* | Model Context Protocol for AI agents / When both Web UI and MCP are enabled, MCP is served on the Web UI port (8081) at `/mcp` / Health | 8080 | Kubernetes liveness/readiness probes / The IAB Tech Lab ARTF Specification is licensed under a Creative Commons Attribution 3.0 License. / The Go reference implementation in this repository is Copyright (c) 2025 Index Exchange Inc. and is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0). / A Go implementation of the IAB Tech Lab's Agentic Real Time Framework (ARTF) v1.0 specification for agent-driven containers in OpenRTB and Digital Advertising. / github.com/mark3labs/mcp-go | 0.43.1 | Model Context Protocol server / make generate will fetch the OpenRTB 2.6 proto automatically / LANG and LANGS are both accepted; if neither is set, Go is generated by default. / make generate LANG=go,cpp,java / make generate LANGS=rust",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://iabtechlab.com/press-releases/iab-tech-lab-announces-agentic-rtb-framework-artf-v1-0-for-public-comment/",
     "claim": "IAB Tech Lab, *IAB Tech Lab Announces Agentic Real Time Framework (ARTF) v1.0 for Public Comment*, published 2025-11-13; modified 2026-03-20",
     "date": null,
     "quote": "Open for Public Comment Until January 15, 2026 / November 13, 2025 - IAB Tech Lab, the global digital advertising technical standard-setting body, today announced the release of Agentic Real Time Framework (ARTF) v1.0 for public comment. / NEW YORK, November 13, 2025 - IAB Tech Lab, the global digital advertising technical standard-setting body, today announced the release of Agentic Real Time Framework (ARTF) v1.0 for public comment. / IAB Tech Lab, the global digital advertising technical standard-setting body / within the same data center, server, or even virtual machine rather than across networks / The ARTF v1.0 framework is designed to reduce the current time for bid requests and responses up to 80% … within the same data center, server, or even virtual machine rather than across networks",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://github.com/IABTechLab/agentic-real-time-framework/releases",
     "claim": "IAB Tech Lab (IABTechLab), *IABTechLab/agentic-real-time-framework releases (v1.0, published 2026-07-20)*, v1.0 published 2026-07-20; fetched 2026-11-08",
     "date": null,
     "quote": "\"tag_name\":\"v1.0\" ... \"published_at\":\"2026-07-20T22:52:21Z\"",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://github.com/IABTechLab/agentic-real-time-framework/tree/HEAD",
     "claim": "IAB Tech Lab, *IABTechLab/agentic-real-time-framework repository contents*, fetched 2026-10-31",
     "date": null,
     "quote": "\"name\": \"Agentic_Real_Time_Framework_Version_1_0_FINAL.md\"",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://github.com/IABTechLab/agentic-real-time-framework",
     "claim": "IAB Tech Lab, *Agentic Real Time Framework*, repository created 2025-11-10; pushed 2026-10-29",
     "date": null,
     "quote": "\"full_name\": \"IABTechLab/agentic-real-time-framework\" / \"name\": \"GNU Affero General Public License v3.0\"",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://iabtechlab.com/standards/openrtb/",
     "claim": "IAB Tech Lab, *OpenRTB (Real-Time Bidding)*, published 2016-02-23; modified 2026-01-12",
     "date": null,
     "quote": "The OpenRTB specification is the foundation of the programmatic advertising ecosystem enabling real time bidding on digital ads",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28",
     "claim": "Model Context Protocol, *Specification*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "The protocol uses JSON-RPC 2.0 messages to establish communication between: Hosts : LLM applications that initiate connections Clients : Connectors within the host application Servers : Services that provide context and capabilities / MCP provides a standardized way for applications to: Share contextual information with language models Expose tools and capabilities to AI systems",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://iabtechlab.com/standards/aamp-agentic-advertising-management-protocols/",
     "claim": "IAB Tech Lab, *AAMP Agentic Advertising Management Protocols*, published 2026-02-26; modified 2026-10-27",
     "date": null,
     "quote": "AAMP 2.3 takes agentic media buying beyond demos and first live implementations to capabilities integrated into production media buying stacks",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://aampexplorer.com/repos/agentic-rtb-framework",
     "claim": "AAMP Explorer, *agentic-rtb-framework repository record*, fetched 2026-11-06",
     "date": null,
     "quote": "agentic-rtb-framework is an AAMP specification repository from IAB Tech Lab. / v1.0 (1 commits past the tag) / 7f481614 / agentic-rtb-framework on 12 August 2026 / The single ARTF RPC: a host platform passes a bid request or response to an in-path agent, which returns mutations to apply.",
     "ref": 13
    }
   ],
   "form": "endpoint",
   "governance": "IAB Tech Lab Agentic Working Group; Agentic Task Force named on the finalized-release post",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against iabtechlab.com/standards/artf/, the 2025-11-13 launch press release, the 2026-08-12 milestone post, and github.com/IABTechLab/agentic-real-time-framework (README, internal/health, cmd/agent/main.go); moved step from 'account' to 'act'; filled probe, discovery, adoption=claimed"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "artf",
   "implementation": "multi-implementation",
   "last_verified": "2026-11-08",
   "name": "Agentic Real Time Framework",
   "native_status": "Finalized v1.0 announced 2026-08-12; the standards page still says the specification will be finalized soon, and Version 2.0 work is already underway",
   "origin": {
    "date": "2025-11-13",
    "org": "IAB Tech Lab"
   },
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "stable",
   "probe": {
    "method": "GET",
    "on_absent": "Connection refused or non-200 means no ARTF container is deployed at that host/port -- expected for the overwhelming majority of ad-tech origins, since ARTF nodes run inside a host platform's private infrastructure rather than being publicly addressable.",
    "parse": "HTTP 200 with the readiness handler's OK body indicates a running ARTF node (per internal/health in the Go reference implementation); a companion MCP tool 'extend_rtb' is exposed at {host}:8081/mcp and a gRPC RTBExtensionPoint.GetMutations service at port 50051.",
    "path": "http://{host}:8080/health/ready"
   },
   "question": "How does a host advertising platform invoke a third party's agent service, deployed as a container inside its own infrastructure, to mutate a bid request in real time?",
   "scope": "advertising",
   "spec_url": "https://github.com/IABTechLab/agentic-real-time-framework",
   "step": "act",
   "summary_md": "**Agentic Real Time Framework** (`ARTF`) specifies agent services that operate within a host platform the orchestrating platform can call directly, with containers deployed into that host and an API for protected, private bidstream mutation. The Go reference implementation exposes gRPC service `RTBExtensionPoint` and RPC `GetMutations` on port `50051`, MCP tool `extend_rtb` on port `50052`, and `/mcp` on port `8081` when the web UI and MCP are both enabled, with health probes on port `8080`. Public comment opened November 13, 2025 and ran until January 15, 2026. GitHub release `v1.0` was published on `2026-07-20` (`2026-07-20T22:52:21Z`), and the `2026-08-12` post announces finalized v1.0. Repository contents list `Agentic_Real_Time_Framework_Version_1_0_FINAL.md`. Modified `2026-10-20`, the standards page still says the specification will be finalized soon, while Version 2.0 work is underway.",
   "track": "industry-body",
   "version": {
    "date": "2026-08-12",
    "label": "v1.0"
   },
   "watch": [
    {
     "type": "github",
     "repo": "IABTechLab/agentic-real-time-framework",
     "mode": "release"
    }
   ],
   "use_cases": [
    "expose-tools-to-agents",
    "describe-agent-capabilities"
   ],
   "audience": [
    "platform",
    "agent-builder"
   ],
   "pairs_with": [
    "mcp",
    "aamp",
    "adcp"
   ],
   "prerequisites": [
    "mcp"
   ],
   "hatnote_md": "This page is about the Agentic Real Time Framework (ARTF), IAB Tech Lab's container and API specification for agent services deployed inside a host platform to mutate an OpenRTB bidstream. For IAB Tech Lab's broader agentic advertising umbrella initiative that includes ARTF, see [Agentic Advertising Management Protocols (AAMP)](/protocols/aamp/). For AgenticAdvertising.org's open media-buying protocol over [MCP](/protocols/mcp/) and [A2A](/protocols/a2a/), see [Ad Context Protocol (AdCP)](/protocols/adcp/).",
   "tier": "spec_brief",
   "lifecycle_status": "published_standard",
   "wire_archetype": "harnesses_rpc_ui",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-08",
   "v05_hatnote_html_md": "This page is about the Agentic Real Time Framework (ARTF), IAB Tech Lab's container and API specification for agent services deployed inside a host platform to mutate an OpenRTB bidstream. For IAB Tech Lab's broader agentic advertising umbrella initiative that includes ARTF, see [Agentic Advertising Management Protocols (AAMP)](/protocols/aamp/). For AgenticAdvertising.org's open media-buying protocol over [MCP](/protocols/mcp/) and [A2A](/protocols/a2a/), see [Ad Context Protocol (AdCP)](/protocols/adcp/). [1][2][3][4]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Agentic Real Time Framework** (`ARTF`) specifies agent services that operate within a host platform the orchestrating platform can call directly, with containers deployed into that host and an API for protected, private bidstream mutation. [1] The Go reference implementation exposes gRPC service `RTBExtensionPoint` and RPC `GetMutations` on port `50051`, MCP tool `extend_rtb` on port `50052`, and `/mcp` on port `8081` when the web UI and MCP are both enabled, with health probes on port `8080`. [5] Public comment opened November 13, 2025 and ran until January 15, 2026. [6] GitHub release `v1.0` was published on `2026-07-20` (`2026-07-20T22:52:21Z`), and the `2026-08-12` post announces finalized v1.0. [2][7] Repository contents list `Agentic_Real_Time_Framework_Version_1_0_FINAL.md`. [8] Modified `2026-10-20`, the standards page still says the specification will be finalized soon, while Version 2.0 work is underway. [1]",
   "v05_identity_sentence_md": "**Agentic Real Time Framework** (`ARTF`) specifies agent services that operate within a host platform the orchestrating platform can call directly, with containers deployed into that host and an API for protected, private bidstream mutation. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Act](/category/act/) (`act`)"
    },
    {
     "label": "Form",
     "value_md": "Endpoint (`endpoint`)"
    },
    {
     "label": "Originated by",
     "value_md": "IAB Tech Lab, 2025-11-13; Agentic Task Force named on the 2026-08-12 finalized-release post [2][6]"
    },
    {
     "label": "Governed by",
     "value_md": "IAB Tech Lab Agentic Working Group [1][5]"
    },
    {
     "label": "Track",
     "value_md": "IAB Tech Lab industry specification [6]"
    },
    {
     "label": "Status",
     "value_md": "Finalized v1.0 announced 2026-08-12; standards page (modified 2026-10-20) still says it will be finalized soon; Version 2.0 work is underway [1][2]"
    },
    {
     "label": "Version",
     "value_md": "v1.0 (GitHub release `v1.0` published 2026-07-20; `Agentic_Real_Time_Framework_Version_1_0_FINAL.md` on `main`) [1][5][7][8]"
    },
    {
     "label": "Message format",
     "value_md": "Protocol Buffers over gRPC (`RTBExtensionPoint.GetMutations`); MCP tool `extend_rtb` [5]"
    },
    {
     "label": "Transports",
     "value_md": "gRPC port 50051; MCP port 50052, or `/mcp` on port 8081 when the web UI and MCP are both enabled; health probes on port 8080 [5]"
    },
    {
     "label": "Networks",
     "value_md": "Host data center, server, or virtual machine [1][6]"
    },
    {
     "label": "Specification",
     "value_md": "[Agentic Real Time Framework](https://github.com/IABTechLab/agentic-real-time-framework) [1][9]"
    },
    {
     "label": "Found at",
     "value_md": "No public discovery document. Containers are deployed into the host. Reference health port 8080; MCP at `/mcp` on port 8081 when the web UI and MCP are both enabled. [1][5]"
    },
    {
     "label": "Licence",
     "value_md": "Specification: Creative Commons Attribution 3.0. Go reference implementation: AGPL-3.0 (Copyright 2025 Index Exchange Inc.) [5][9]"
    }
   ],
   "v05_problem_md": "The November 13, 2025 announcement says ARTF v1.0 is designed to reduce the time for bid requests and responses by up to 80% when technologies interact in the same data center, server, or virtual machine rather than across networks. [6] Service providers package their offering once and deploy it to any standard-compliant platform, and the orchestrating platform can call the agent directly through an API for protected and private bidstream mutation. [1] The reference `extend_rtb` tool accepts OpenRTB bid requests and returns proposed mutations. [5] Each deployed agent runs in an isolated, locked-down environment on the host's own infrastructure, with no external network access by default. [2] Systematic service-to-service integration is the primary focus, while autonomic model-to-service functionality is also envisioned as the integrating technology matures. [1]",
   "v05_mechanism_delta_md": "Service providers package their offering once and deploy it to any standard-compliant platform, and the orchestrating platform can call the agent directly through an API for protected and private bidstream mutation. [1] The reference `extend_rtb` tool accepts OpenRTB bid requests and returns proposed mutations. [5]",
   "v05_scope_boundary_md": "Each deployed agent runs in an isolated, locked-down environment on the host's own infrastructure, with no external network access by default. [2] Systematic service-to-service integration is the primary focus, while autonomic model-to-service functionality is also envisioned as the integrating technology matures. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "OpenRTB (IAB Tech Lab)",
      "spec_or_rfc": "OpenRTB",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "OpenRTB is the IAB Tech Lab specification described as the foundation of the programmatic advertising ecosystem for real-time bidding on digital ads. ARTF is the real-time agentic layer for OpenRTB: a host calls an in-host agent for a bidstream mutation rather than treating ARTF as that bid-request exchange. [1][2][10]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "MCP standardizes JSON-RPC 2.0 between a host, a client, and a server so applications can share context and expose tools. ARTF's Go reference server adds an MCP tool, extend_rtb, that accepts an OpenRTB bid request and returns proposed mutations, beside gRPC RTBExtensionPoint.GetMutations. [5][11]"
     },
     {
      "target_id": "aamp",
      "target_name": "Agentic Advertising Management Protocols",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "AAMP 2.3 is IAB Tech Lab's agentic media-buying release aimed at production media-buying stacks. ARTF, which the AAMP repository lists separately, is the foundation for agent services a host platform calls directly inside its own infrastructure. [1][3][12]"
     },
     {
      "target_id": "adcp",
      "target_name": "Ad Context Protocol (AdCP)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "AdCP is an open agentic advertising standard whose agents communicate over MCP or A2A and whose publishers host an adagents.json file at /.well-known/adagents.json. ARTF is the separate IAB container layer a host calls inside its own infrastructure to mutate an OpenRTB bidstream. [1][2][4]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (3 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).",
    "side_a": {
     "visible": true,
     "heading": "Reference server & exchange implementations",
     "col4_header": "Transport & Scope",
     "note_md": null,
     "rows": [
      {
       "actor": "IAB Tech Lab Go reference server",
       "role": "Reference server",
       "status": "Development",
       "status_display": "Development · checked 2026-10-31",
       "col4_md": "Go reference server for ARTF v1.0. gRPC RTBExtensionPoint.GetMutations on port 50051. MCP tool extend_rtb on port 50052, or /mcp on port 8081 when the web UI and MCP are both enabled. Kubernetes liveness and readiness probes on port 8080. MCP library pin github.com/mark3labs/mcp-go 0.43.1.",
       "source_md": "[ARTF Go reference README](https://raw.githubusercontent.com/IABTechLab/agentic-real-time-framework/main/README.md) [5] · [IABTechLab/agentic-real-time-framework](https://github.com/IABTechLab/agentic-real-time-framework) [9]"
      },
      {
       "actor": "IAB Tech Lab Rust reference implementation",
       "role": "Reference server",
       "status": "Experimental",
       "status_display": "Experimental · as of 2026-08-12",
       "col4_md": "The 2026-08-12 milestone lists a Rust reference implementation with the orchestration layer that allows one ARTF node to call other ARTF nodes and merge their responses to a single bid request mutation.",
       "source_md": "[A Milestone for the Agentic Advertising Ecosystem (2026-08-12)](https://iabtechlab.com/a-milestone-for-the-agentic-advertising-ecosystem/) [2]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Codegen & client SDKs",
     "col4_header": "Transport & Scope",
     "note_md": null,
     "rows": [
      {
       "actor": "IAB Tech Lab protobuf codegen",
       "role": "SDK",
       "status": "Development",
       "status_display": "Development · checked 2026-10-31",
       "col4_md": "make generate fetches the OpenRTB 2.6 proto and emits Go by default. LANG or LANGS selects Java, C++, and Rust bindings.",
       "source_md": "[ARTF Go reference README](https://raw.githubusercontent.com/IABTechLab/agentic-real-time-framework/main/README.md) [5]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [
     {
      "label": "AAMP Explorer, agentic-rtb-framework (12 August 2026)",
      "as_of": "2026-08-12",
      "value_md": "AAMP Explorer records agentic-rtb-framework as an IAB Tech Lab AAMP specification repository, version v1.0 (1 commits past the tag), commit 7f481614, dated 12 August 2026. It counts one request and response pair, GetMutations: a host platform passes a bid request or response to an in-path agent, which returns mutations to apply. [13]"
     }
    ],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Act protocols](/category/act/)** — Category index for `act` standards."
    }
   ],
   "v05_compiled_md": "---\nid: artf\ntitle: \"Agentic Real Time Framework\"\ntier: spec_brief\nlifecycle_status: published_standard\ncategory: act\nform: endpoint\nwire_archetype: harnesses_rpc_ui\nspec_url: https://github.com/IABTechLab/agentic-real-time-framework\nlast_checked: 2026-11-08\n---\n\n# Agentic Real Time Framework\n\n**Category:** [Act](/category/act/) (`act`) · **Form:** Endpoint (`endpoint`) · **Last checked:** 2026-11-08\n\n> *This page is about the Agentic Real Time Framework (ARTF), IAB Tech Lab's container and API specification for agent services deployed inside a host platform to mutate an OpenRTB bidstream. For IAB Tech Lab's broader agentic advertising umbrella initiative that includes ARTF, see [Agentic Advertising Management Protocols (AAMP)](/protocols/aamp/). For AgenticAdvertising.org's open media-buying protocol over [MCP](/protocols/mcp/) and [A2A](/protocols/a2a/), see [Ad Context Protocol (AdCP)](/protocols/adcp/). [1][2][3][4]*\n\n**Agentic Real Time Framework** (`ARTF`) specifies agent services that operate within a host platform the orchestrating platform can call directly, with containers deployed into that host and an API for protected, private bidstream mutation. [1] The Go reference implementation exposes gRPC service `RTBExtensionPoint` and RPC `GetMutations` on port `50051`, MCP tool `extend_rtb` on port `50052`, and `/mcp` on port `8081` when the web UI and MCP are both enabled, with health probes on port `8080`. [5] Public comment opened November 13, 2025 and ran until January 15, 2026. [6] GitHub release `v1.0` was published on `2026-07-20` (`2026-07-20T22:52:21Z`), and the `2026-08-12` post announces finalized v1.0. [2][7] Repository contents list `Agentic_Real_Time_Framework_Version_1_0_FINAL.md`. [8] Modified `2026-10-20`, the standards page still says the specification will be finalized soon, while Version 2.0 work is underway. [1]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Act](/category/act/) (`act`) |\n| **Form** | Endpoint (`endpoint`) |\n| **Originated by** | IAB Tech Lab, 2025-11-13; Agentic Task Force named on the 2026-08-12 finalized-release post [2][6] |\n| **Governed by** | IAB Tech Lab Agentic Working Group [1][5] |\n| **Track** | IAB Tech Lab industry specification [6] |\n| **Status** | Finalized v1.0 announced 2026-08-12; standards page (modified 2026-10-20) still says it will be finalized soon; Version 2.0 work is underway [1][2] |\n| **Version** | v1.0 (GitHub release `v1.0` published 2026-07-20; `Agentic_Real_Time_Framework_Version_1_0_FINAL.md` on `main`) [1][5][7][8] |\n| **Message format** | Protocol Buffers over gRPC (`RTBExtensionPoint.GetMutations`); MCP tool `extend_rtb` [5] |\n| **Transports** | gRPC port 50051; MCP port 50052, or `/mcp` on port 8081 when the web UI and MCP are both enabled; health probes on port 8080 [5] |\n| **Networks** | Host data center, server, or virtual machine [1][6] |\n| **Specification** | [Agentic Real Time Framework](https://github.com/IABTechLab/agentic-real-time-framework) [1][9] |\n| **Found at** | No public discovery document. Containers are deployed into the host. Reference health port 8080; MCP at `/mcp` on port 8081 when the web UI and MCP are both enabled. [1][5] |\n| **Licence** | Specification: Creative Commons Attribution 3.0. Go reference implementation: AGPL-3.0 (Copyright 2025 Index Exchange Inc.) [5][9] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [Adoption and ecosystem](#adoption-and-ecosystem)\n4. [See also](#see-also)\n5. [References](#references)\n\n---\n\n## Problem and scope\n\nThe November 13, 2025 announcement says ARTF v1.0 is designed to reduce the time for bid requests and responses by up to 80% when technologies interact in the same data center, server, or virtual machine rather than across networks. [6] Service providers package their offering once and deploy it to any standard-compliant platform, and the orchestrating platform can call the agent directly through an API for protected and private bidstream mutation. [1] The reference `extend_rtb` tool accepts OpenRTB bid requests and returns proposed mutations. [5] Each deployed agent runs in an isolated, locked-down environment on the host's own infrastructure, with no external network access by default. [2] Systematic service-to-service integration is the primary focus, while autonomic model-to-service functionality is also envisioned as the integrating technology matures. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **OpenRTB (IAB Tech Lab)** | `OpenRTB` | Analogous to classic standard | OpenRTB is the IAB Tech Lab specification described as the foundation of the programmatic advertising ecosystem for real-time bidding on digital ads. ARTF is the real-time agentic layer for OpenRTB: a host calls an in-host agent for a bidstream mutation rather than treating ARTF as that bid-request exchange. [1][2][10] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Model Context Protocol](/protocols/mcp/)** | Builds on | MCP standardizes JSON-RPC 2.0 between a host, a client, and a server so applications can share context and expose tools. ARTF's Go reference server adds an MCP tool, extend_rtb, that accepts an OpenRTB bid request and returns proposed mutations, beside gRPC RTBExtensionPoint.GetMutations. [5][11] |\n| **[Agentic Advertising Management Protocols](/protocols/aamp/)** | Complements | AAMP 2.3 is IAB Tech Lab's agentic media-buying release aimed at production media-buying stacks. ARTF, which the AAMP repository lists separately, is the foundation for agent services a host platform calls directly inside its own infrastructure. [1][3][12] |\n| **[Ad Context Protocol (AdCP)](/protocols/adcp/)** | Peer alternative | AdCP is an open agentic advertising standard whose agents communicate over MCP or A2A and whose publishers host an adagents.json file at /.well-known/adagents.json. ARTF is the separate IAB container layer a host calls inside its own infrastructure to mutate an OpenRTB bidstream. [1][2][4] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (3 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).*\n\n### Reference server & exchange implementations\n\n| Actor | Role | Status | Transport & Scope | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **IAB Tech Lab Go reference server** | Reference server | Development · checked 2026-10-31 | Go reference server for ARTF v1.0. gRPC RTBExtensionPoint.GetMutations on port 50051. MCP tool extend_rtb on port 50052, or /mcp on port 8081 when the web UI and MCP are both enabled. Kubernetes liveness and readiness probes on port 8080. MCP library pin github.com/mark3labs/mcp-go 0.43.1. | [ARTF Go reference README](https://raw.githubusercontent.com/IABTechLab/agentic-real-time-framework/main/README.md) [5] · [IABTechLab/agentic-real-time-framework](https://github.com/IABTechLab/agentic-real-time-framework) [9] |\n| **IAB Tech Lab Rust reference implementation** | Reference server | Experimental · as of 2026-08-12 | The 2026-08-12 milestone lists a Rust reference implementation with the orchestration layer that allows one ARTF node to call other ARTF nodes and merge their responses to a single bid request mutation. | [A Milestone for the Agentic Advertising Ecosystem (2026-08-12)](https://iabtechlab.com/a-milestone-for-the-agentic-advertising-ecosystem/) [2] |\n\n### Codegen & client SDKs\n\n| Actor | Role | Status | Transport & Scope | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **IAB Tech Lab protobuf codegen** | SDK | Development · checked 2026-10-31 | make generate fetches the OpenRTB 2.6 proto and emits Go by default. LANG or LANGS selects Java, C++, and Rust bindings. | [ARTF Go reference README](https://raw.githubusercontent.com/IABTechLab/agentic-real-time-framework/main/README.md) [5] |\n\n### Ecosystem censuses\n\n- **AAMP Explorer, agentic-rtb-framework (12 August 2026)** (*as of 2026-08-12*): AAMP Explorer records agentic-rtb-framework as an IAB Tech Lab AAMP specification repository, version v1.0 (1 commits past the tag), commit 7f481614, dated 12 August 2026. It counts one request and response pair, GetMutations: a host platform passes a bid request or response to an in-path agent, which returns mutations to apply. [13]\n\n---\n\n## See also\n\n- **Category:** [Act protocols](/category/act/)\n\n---\n\n## References\n\n1. IAB Tech Lab, *ARTF (Agentic Real Time Framework)* (published 2025-11-13; modified 2026-10-20) — <https://iabtechlab.com/standards/artf/>\n2. Barnaby (IAB Tech Lab), *A Milestone for the Agentic Advertising Ecosystem* (published 2026-08-12) — <https://iabtechlab.com/a-milestone-for-the-agentic-advertising-ecosystem/>\n3. IAB Tech Lab, *Agentic Advertising Management Protocols (AAMP)* (repository created 2026-02-26) — <https://github.com/IABTechLab/AAMP>\n4. AgenticAdvertising.org, *Introduction to AdCP* (modified 2026-10-29) — <https://docs.adcontextprotocol.org/dist/docs/3.2.8/intro>\n5. IAB Tech Lab, *Agentic Real Time Framework README* (fetched 2026-10-31) — <https://raw.githubusercontent.com/IABTechLab/agentic-real-time-framework/main/README.md>\n6. IAB Tech Lab, *IAB Tech Lab Announces Agentic Real Time Framework (ARTF) v1.0 for Public Comment* (published 2025-11-13; modified 2026-03-20) — <https://iabtechlab.com/press-releases/iab-tech-lab-announces-agentic-rtb-framework-artf-v1-0-for-public-comment/>\n7. IAB Tech Lab (IABTechLab), *IABTechLab/agentic-real-time-framework releases (v1.0, published 2026-07-20)* (v1.0 published 2026-07-20; fetched 2026-11-08) — <https://github.com/IABTechLab/agentic-real-time-framework/releases>\n8. IAB Tech Lab, *IABTechLab/agentic-real-time-framework repository contents* (fetched 2026-10-31) — <https://github.com/IABTechLab/agentic-real-time-framework/tree/HEAD>\n9. IAB Tech Lab, *Agentic Real Time Framework* (repository created 2025-11-10; pushed 2026-10-29) — <https://github.com/IABTechLab/agentic-real-time-framework>\n10. IAB Tech Lab, *OpenRTB (Real-Time Bidding)* (published 2016-02-23; modified 2026-01-12) — <https://iabtechlab.com/standards/openrtb/>\n11. Model Context Protocol, *Specification* (2026-07-28) — <https://modelcontextprotocol.io/specification/2026-07-28>\n12. IAB Tech Lab, *AAMP Agentic Advertising Management Protocols* (published 2026-02-26; modified 2026-10-27) — <https://iabtechlab.com/standards/aamp-agentic-advertising-management-protocols/>\n13. AAMP Explorer, *agentic-rtb-framework repository record* (fetched 2026-11-06) — <https://aampexplorer.com/repos/agentic-rtb-framework>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "AdCP",
   "adoption": {
    "level": "observed",
    "by": "Talpa Network, Swivel, Triton Digital, Interchange, PubMatic AgenticOS, @adcp/sdk, @adcp/client, adcp Python SDK, and 5 other verified implementations",
    "probe_run": null
   },
   "aliases": [
    "Advertising Context Protocol"
   ],
   "analog": "Ad-tech capability and transaction API",
   "collisions": [],
   "discovery": {
    "mechanism": "Publisher-side well-known file (adagents.json) declares authorized agent endpoints and capabilities; brand-side well-known file (brand.json) declares operator identity, agent endpoints, and signing-key discovery; a hosted Registry API additionally resolves brands/publishers to AdCP agents by capability, category, or geography",
    "path": "/.well-known/adagents.json (publisher) and /.well-known/brand.json (brand/operator)"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://agenticadvertising.org/",
     "claim": "AgenticAdvertising.org, *AgenticAdvertising.org*, fetched 2026-10-30",
     "date": null,
     "quote": "AgenticAdvertising.org publishes AdCP - the open protocol that lets AI agents discover, plan, buy, sell, and measure media across every channel. / We certify the professionals who use it and govern how it evolves. / AdCP 3.2 is now generally available / On October 16, 2025, the first-ever agent-to-agent media buy was executed - real money, real inventory from LG Ads / 157+ members including Yahoo PubMatic Scope3 Samba TV LG Ads Kargo",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://raw.githubusercontent.com/adcontextprotocol/adcp/main/CHARTER.md",
     "claim": "AgenticAdvertising.org, *AgenticAdvertising.Org Charter*, fetched 2026-10-30",
     "date": null,
     "quote": "notably the Advertising Context Protocol (AdCP). / The interim board will be replaced by an elected board at the first Annual General Meeting (AGM), scheduled for **May 6, 2026**. / It does not create or modify governance. / In any conflict between this document and the Bylaws, Membership Agreement, or IPR Policy, those documents control. / AgenticAdvertising.Org (the \"Foundation\") is a pending 501(c)(6) nonprofit trade association incorporated in Delaware.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://docs.adcontextprotocol.org/dist/docs/3.2.8/intro",
     "claim": "AgenticAdvertising.org, *AdCP — Introduction to the Protocol*, docs 3.2.8; fetched 2026-10-30",
     "date": null,
     "quote": "Same tasks, same schemas, different transport. / MCP (for AI assistants calling tools) and A2A (for agent-to-agent collaboration). / MCP (for AI assistants calling tools) and A2A (for agent-to-agent collaboration). Same tasks, same schemas, different transport. / AdCP 3.2 is generally available (release 3.2.1, wire pin \"3.2\"). / AdCP is a project of AgenticAdvertising.org, an industry organization of publishers, platforms, agencies, and technology providers advancing open standards for AI-powered advertising. / an industry organization of publishers, platforms, agencies, and technology providers advancing open standards for AI-powered advertising. / These agents communicate over two transport protocols: MCP (for AI assistants calling tools) and A2A (for agent-to-agent collaboration). / GET /api/registry/agents?capability=get_products&channel=ctv / AdCP - Introduction to the Protocol / AdCP is a project of AgenticAdvertising.org / It adds a proposal-to-operation lifecycle buyers and sellers can audit ... AdCP standardizes the capabilities a participant actually advertises. / Payment rails, legal agreements, settlement, disputes, credits, and makegoods remain account or platform integrations unless the relevant AdCP contract is explicitly present. / MCP (for AI assistants calling tools) / A2A (for agent-to-agent collaboration). / The Prebid Sales Agent is a full-stack seller agent (Python backend, TypeScript protocol layer) with GAM integration, built by a Prebid working group. / It is a community example, not a maintained reference implementation. / npm install @adcp/sdk pip install adcp go get github.com/adcontextprotocol/adcp-go/adcp / Ask questions about AdCP, explore the protocol, and test tasks - no code required",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://docs.adcontextprotocol.org/dist/docs/3.2.8/reference/known-limitations.md",
     "claim": "AgenticAdvertising.org, *Protocol Boundaries and Known Limitations*, docs 3.2.8; fetched 2026-10-30",
     "date": null,
     "quote": "No in-protocol payment or settlement.",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://docs.adcontextprotocol.org/dist/docs/3.2.8/governance/property/adagents.md",
     "claim": "AgenticAdvertising.org, *adagents.json Tech Spec*, docs 3.2.8; fetched 2026-10-30",
     "date": null,
     "quote": "Publishers must host the adagents.json file at: ... https://example.com/.well-known/adagents.json / The file must be valid JSON with UTF-8 encoding and return HTTP 200 status. / https://example.com/.well-known/adagents.json / Following RFC 8615 well-known URI conventions / return HTTP 200 status. / **`authorized_agents`** *(required)* / adagents.json is the publisher-hosted file in AdCP",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://docs.adcontextprotocol.org/dist/docs/3.2.8/brand-protocol/brand-json.md",
     "claim": "AgenticAdvertising.org, *brand.json Specification*, docs 3.2.8; fetched 2026-10-30",
     "date": null,
     "quote": "Brands host the brand.json file at: ... https://example.com/.well-known/brand.json / https://example.com/.well-known/brand.json / Following RFC 8615 well-known URI conventions.",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://docs.adcontextprotocol.org/dist/docs/3.2.8/reference/versions.md",
     "claim": "AgenticAdvertising.org, *Versions & Compatibility*, docs 3.2.8; fetched 2026-10-30",
     "date": null,
     "quote": "Active | 3.2 (current stable: 3.2.1) | \"3.2\" | Current production minor release, published 2026-09-30. 3.2.0 was never released. / 3.2 (current stable: 3.2.1) / Current production minor release, published 2026-09-30. 3.2.0 was never released. / 3.0.0 | 2026-04-22 | GA - stable baseline for the 3.x cycle.",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://github.com/adcontextprotocol/adcp/releases",
     "claim": "adcontextprotocol, *Release v3.2.8*, published 2026-10-28",
     "date": null,
     "quote": "\"tag_name\": \"v3.2.8\" / \"published_at\": \"2026-10-28T20:56:12Z\"",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://github.com/adcontextprotocol/adcp",
     "claim": "adcontextprotocol, *adcp repository*, created 2025-07-19; fetched 2026-10-30",
     "date": null,
     "quote": "\"created_at\": \"2025-07-19T12:56:11Z\" / \"description\": \"Docs and reference implementation for the Ad Context Protocol\" / \"archived\": false / \"name\": \"Apache License 2.0\" / \"spdx_id\": \"Apache-2.0\"",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://www.adexchanger.com/marketers/the-ad-context-protocol-aims-to-make-sense-of-agentic-ad-demand/",
     "claim": "James Hercher (AdExchanger), *The Ad Context Protocol Aims To Make Sense Of Agentic Ad Demand*, published 2025-10-15; modified 2025-10-15",
     "date": null,
     "quote": "The co-founding members include Triton Digital, Yahoo!, PubMatic, Scope3, Optable and Swivel",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://github.com/adcontextprotocol/adcp/releases/tag/v2.0.0",
     "claim": "adcontextprotocol, *AdCP v2.0.0 — Production Release*, published 2025-10-15",
     "date": null,
     "quote": "\"tag_name\": \"v2.0.0\" / \"published_at\": \"2025-10-15T14:42:54Z\"",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://agenticadvertising.org/perspectives/launch-announcement",
     "claim": "AgenticAdvertising.org, *AgenticAdvertising.org Launches to Help Brands, Publishers, Agencies, and Ad Tech Adopt AI*, published 2025-12-12; modified 2026-10-22",
     "date": null,
     "quote": "\"datePublished\": \"2025-12-12T00:00:00.000Z\" / today announced the incorporation of AgenticAdvertising.org / wide-industry support from companies like Magnite, Kargo, Raptive, LG Ad Solutions, The Weather Company, AccuWeather, Butler/Till, Classify, and Samba TV.",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://agenticadvertising.org/about",
     "claim": "AgenticAdvertising.org, *About AgenticAdvertising.org*, fetched 2026-10-30",
     "date": null,
     "quote": "AgenticAdvertising.org is a Delaware nonprofit nonstock corporation, founded in 2025 and intended to qualify under Section 501(c)(6). / Benjamin Masse was named Board President in the September 2026 announcement.",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://agenticadvertising.org/governance/",
     "claim": "AgenticAdvertising.org, *Governance*, fetched 2026-10-30",
     "date": null,
     "quote": "They adopted the current bylaws by unanimous written consent on June 11, 2026, subject to voting member ratification.",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://docs.adcontextprotocol.org/dist/docs/3.2.8/faq",
     "claim": "AgenticAdvertising.org, *AdCP — Frequently asked questions*, docs 3.2.8; fetched 2026-10-30",
     "date": null,
     "quote": "The interim board is replaced by the elected board at the first Annual General Meeting on May 6, 2026. / Signing is optional through AdCP 3.2 and is planned to become mandatory for spend-committing operations in 4.0.",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://docs.adcontextprotocol.org/dist/docs/3.2.8/reference/release-notes.md",
     "claim": "AgenticAdvertising.org, *Release Notes*, docs 3.2.8; fetched 2026-10-30",
     "date": null,
     "quote": "**Status:** General availability, published 2026-09-30.",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://github.com/adcontextprotocol/adcp/releases/tag/v3.0.0",
     "claim": "adcontextprotocol, *AdCP v3.0.0*, published 2026-04-22",
     "date": null,
     "quote": "\"tag_name\": \"v3.0.0\" / \"published_at\": \"2026-04-22T09:53:15Z\"",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://docs.adcontextprotocol.org/dist/docs/3.2.8/building/by-layer/L0/mcp-guide.md",
     "claim": "AgenticAdvertising.org, *MCP Guide*, docs 3.2.8; fetched 2026-10-30",
     "date": null,
     "quote": "await mcp.call('get_adcp_capabilities', {...}); // Discover agent capabilities (start here)",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://adcontextprotocol.org/schemas/v3/media-buy/create-media-buy-request.json",
     "claim": "AgenticAdvertising.org, *Create Media Buy Request*, schema 3.2.8; fetched 2026-10-30",
     "date": null,
     "quote": "New 3.2 callers use buy_products for direct published-offer purchases or accept_proposal for proposal execution. / \"deprecated\": true",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://docs.adcontextprotocol.org/dist/docs/3.2.8/building/by-layer/L1/security.md",
     "claim": "AgenticAdvertising.org, *Security*, docs 3.2.8; fetched 2026-10-30",
     "date": null,
     "quote": "Spend-committing (create_media_buy, update_media_buy, acquire_*, activate_signal) | Signing optional; legacy body-binding modes available | Signing optional; every signed body is digest-bound | Signing required and every signed body is digest-bound / 9421 webhook signing is baseline-required in 3.0. / required_for governs the signature requirement relative to a caller's credential path, not absolutely. / A verifier typically accepts more than one authenticator (bearer, API key, mTLS, 9421) / Read calls remain bearer-authenticated. / 9421 webhook signing is baseline-required in 3.0. Any seller that emits webhooks MUST sign them per the Webhook callbacks profile unless the buyer explicitly opts into the legacy scheme",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://digiday.com/media-buying/wtf-ad-context-protocol/",
     "claim": "Ronan Shields (Digiday), *WTF is Ad Context Protocol (AdCP)?*, published 2025-10-15; modified 2025-10-23",
     "date": null,
     "quote": "While OpenRTB standardized real-time bidding and ad exchange transactions, AdCP is designed to standardize agentic communication - the kind of back-and-forth negotiation that may precede a buy / AdCP is a parallel protocol to OpenRTB, intended to orchestrate advertising technology solutions, including DSPs and SSPs, that enhance their functionality through agentic interfaces ... said a spokesperson for the AdCP consortium / While OpenRTB standardized real-time bidding and ad exchange transactions / AdCP is a parallel protocol to OpenRTB",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://www.rfc-editor.org/rfc/rfc9421.html",
     "claim": "A. Backman (Amazon), J. Richer (Bespoke Engineering), and M. Sporny (Digital Bazaar), *RFC 9421: HTTP Message Signatures*, February 2024",
     "date": null,
     "quote": "This document describes a mechanism for creating, encoding, and verifying digital signatures or message authentication codes over components of an HTTP message. / RFC 9421: HTTP Message Signatures",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28",
     "claim": "Model Context Protocol, *Specification*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "The protocol uses JSON-RPC 2.0 messages to establish communication between",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://a2a-protocol.org/latest/specification/",
     "claim": "A2A Protocol (The Linux Foundation), *Agent2Agent (A2A) Protocol Specification*, copyright 2026; fetched 2026-10-30",
     "date": null,
     "quote": "The Agent2Agent (A2A) Protocol is an open standard designed to facilitate communication and interoperability between independent, potentially opaque AI agent systems.",
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://iabtechlab.com/standards/aamp-agentic-advertising-management-protocols/",
     "claim": "IAB Tech Lab, *AAMP Agentic Advertising Management Protocols*, published 2026-02-26; modified 2026-10-27",
     "date": null,
     "quote": "AAMP is an IAB Tech Lab umbrella initiative for bringing agentic AI into the advertising ecosystem",
     "ref": 25
    },
    {
     "label": "[26]",
     "url": "https://iabtechlab.com/clarifying-the-aamp-scope-why-so-many-aamp-vs-adcp-comparisons-miss-the-mark/",
     "claim": "IAB Tech Lab, *Clarifying the AAMP Scope: Why So Many AAMP vs. AdCP Comparisons Miss the Mark*, published 2026-08-19; modified 2026-08-19",
     "date": null,
     "quote": "AAMP and AdCP are agentic advertising frameworks with different design philosophies - not two cleanly separated layers that fit together naturally.",
     "ref": 26
    },
    {
     "label": "[27]",
     "url": "https://iabtechlab.com/press-releases/iab-tech-lab-announces-agentic-rtb-framework-artf-v1-0-for-public-comment/",
     "claim": "IAB Tech Lab, *IAB Tech Lab Announces Agentic Real Time Framework (ARTF) v1.0 for Public Comment*, published 2025-11-13; modified 2026-03-20",
     "date": null,
     "quote": "IAB Tech Lab releases v1.0 of the Agentic Real Time Framework (ARTF) for Public Comment",
     "ref": 27
    },
    {
     "label": "[28]",
     "url": "https://github.com/IABTechLab/agentic-real-time-framework",
     "claim": "IAB Tech Lab (IABTechLab), *Agentic Real Time Framework*, fetched 2026-10-31",
     "date": null,
     "quote": "specification for agent-driven containers in OpenRTB and Digital Advertising. / MCP Tool: extend_rtb / Agentic_Real_Time_Framework_Version_1_0_FINAL.md",
     "ref": 28
    },
    {
     "label": "[29]",
     "url": "https://kijk.nl/.well-known/adagents.json",
     "claim": "Talpa Media, *adagents.json*, fetched 2026-10-30",
     "date": null,
     "quote": "\"$schema\": \"https://adcontextprotocol.org/schemas/v3/adagents.json\" / \"name\": \"Talpa Media\" / \"seller_id\": \"58523\" / \"last_updated\": \"2026-06-19T00:00:00.000Z\" / \"url\": \"https://adcp.swivel.ai/mcp\", \"authorized_for\": \"All Talpa Network properties\", \"authorization_type\": \"property_tags\" / \"url\": \"https://adcp-salesagent.api.tritondigital.com/mcp\", \"authorized_for\": \"Talpa audio and podcast properties\", \"authorization_type\": \"property_tags\" / \"url\": \"https://interchange.io\", \"authorized_for\": \"All Talpa Network properties\", \"authorization_type\": \"property_tags\" / \"url\": \"https://adcp.swivel.ai/mcp\", \"authorized_for\": \"All Talpa Network properties\", \"authorization_type\": \"property_tags\", \"property_tags\": [\"talpa_video\", \"talpa_editorial\"], \"delegation_type\": \"direct\" / \"url\": \"https://adcp-salesagent.api.tritondigital.com/mcp\", \"authorized_for\": \"Talpa audio and podcast properties\", \"authorization_type\": \"property_tags\", \"property_tags\": [\"talpa_audio\", \"talpa_podcast\", \"adcp_triton\"], \"delegation_type\": \"direct\" / \"url\": \"https://interchange.io\", \"authorized_for\": \"All Talpa Network properties\", \"authorization_type\": \"property_tags\", \"property_tags\": [\"talpa_video\", \"talpa_editorial\"], \"delegation_type\": \"direct\"",
     "ref": 29
    },
    {
     "label": "[30]",
     "url": "https://pubmatic.com/news/pubmatic-launches-agenticos-the-operating-system-for-agent-to-agent-advertising/",
     "claim": "PubMatic, *PubMatic Launches AgenticOS, the Operating System for Agentic Advertising*, published 2026-01-05; modified 2026-01-05",
     "date": null,
     "quote": "\"datePublished\":\"2026-01-05T13:00:15+00:00\" / January 5, 2026 - PubMatic / today announced the launch of PubMatic AgenticOS / Agentic capabilities embedded across PubMatic's platform interpret intent expressed through protocols such as the Ad Context Protocol (AdCP) and Model Context Protocol (MCP).",
     "ref": 30
    },
    {
     "label": "[31]",
     "url": "https://raw.githubusercontent.com/prebid/salesagent/main/README.md",
     "claim": "Prebid.org, *Prebid Sales Agent*, fetched 2026-10-30",
     "date": null,
     "quote": "An open-source implementation of the Ad Context Protocol (AdCP) sales-agent role, maintained under Prebid.org. / standardized MCP and A2A interfaces. / Status: alpha. A pre-1.0 implementation of a pre-release protocol (AdCP 3.1.1), under active development. / This implementation targets AdCP spec version 3.1.1 via the adcp==6.6.0 Python SDK.",
     "ref": 31
    },
    {
     "label": "[32]",
     "url": "https://www.adexchanger.com/publishers/prebid-takes-over-adcps-code-for-creating-sell-side-ai-agents/",
     "claim": "Anthony Vargas (AdExchanger), *Prebid Takes Over AdCP's Code For Creating Sell-Side AI Agents*, published 2026-01-29; modified 2026-02-04",
     "date": null,
     "quote": "The new offering, dubbed the Prebid Sales Agent, is now available to all publishers.",
     "ref": 32
    },
    {
     "label": "[33]",
     "url": "https://github.com/prebid/salesagent",
     "claim": "Prebid.org, *salesagent repository*, pushed 2026-10-28; fetched 2026-10-30",
     "date": null,
     "quote": "\"pushed_at\": \"2026-10-28T22:26:21Z\" / \"description\": \"A media sales agent that implements the AdCP Media Buy protocol\"",
     "ref": 33
    },
    {
     "label": "[34]",
     "url": "https://agenticadvertising.org/api/registry/stats",
     "claim": "AgenticAdvertising.org, *Registry stats*, fetched 2026-10-30",
     "date": null,
     "quote": "{\"registered_agents\":33,\"registered_publishers\":14,\"discovered_agents\":87,\"discovered_publishers\":450,\"discovered_properties\":22705,\"authorizations\":7742,\"authorizations_by_source\":{\"adagents_json\":7314,\"agent_claim\":428} / \"website\":19544 / \"podcast\":2081 / \"radio\":966 / \"ctv_app\":64",
     "ref": 34
    },
    {
     "label": "[35]",
     "url": "https://docs.adcontextprotocol.org/dist/docs/3.2.6/aao/directory-api",
     "claim": "Ad Context Protocol, *AAO Directory API, agent and publisher inverse lookup (docs 3.2.6)*, docs 3.2.6",
     "date": null,
     "quote": "This endpoint is discovery, not authorization. / HTTP API for sales-agent operators to discover which publishers authorize their agent / Returns provenance, per-publisher property counts, and lifecycle status. / publisher adagents.json files / agenticadvertising.org / cafemedia alone delegates ~6,800 publisher domains under a single manager file / verify_agent_authorization / fetch_agent_authorizations",
     "ref": 35
    },
    {
     "label": "[36]",
     "url": "https://registry.npmjs.org/@adcp/sdk",
     "claim": "AdCP Community, *@adcp/sdk*, 16.6.1 published 2026-10-29; fetched 2026-10-30",
     "date": null,
     "quote": "\"latest\":\"16.6.1\" / \"16.6.1\":\"2026-10-29T00:24:01.393Z\" / \"description\":\"AdCP SDK - client, server, and compliance harnesses for the AdContext Protocol (MCP + A2A)\"",
     "ref": 36
    },
    {
     "label": "[37]",
     "url": "https://registry.npmjs.org/@adcp/client",
     "claim": "AdCP Community, *@adcp/client*, deprecated; fetched 2026-10-30",
     "date": null,
     "quote": "\"deprecated\":\"Renamed to @adcp/sdk in v6.0. Install @adcp/sdk@^6.1.0 instead.\"",
     "ref": 37
    },
    {
     "label": "[38]",
     "url": "https://pypi.org/pypi/adcp/json",
     "claim": "AdCP Community, *adcp*, 9.3.1 uploaded 2026-10-29; fetched 2026-10-30",
     "date": null,
     "quote": "\"summary\":\"Official Python client for the Ad Context Protocol (AdCP)\",\"version\":\"9.3.1\" / \"upload_time\":\"2026-10-29T13:41:22\" / from adcp import ADCPClient / from adcp.server import ADCPHandler",
     "ref": 38
    },
    {
     "label": "[39]",
     "url": "https://github.com/adcontextprotocol/adcp-go",
     "claim": "adcontextprotocol, *adcp-go*, pushed 2026-10-30; fetched 2026-10-30",
     "date": null,
     "quote": "\"description\": \"Golang SDK for the AdCP protocol\" / \"spdx_id\": \"Apache-2.0\" / \"pushed_at\": \"2026-10-30T07:48:34Z\"",
     "ref": 39
    }
   ],
   "form": "well-known-file",
   "governance": "AgenticAdvertising.org. \"AdCP is a project of AgenticAdvertising.org, an industry organization of publishers, platforms, agencies, and technology providers advancing open standards for AI-powered advertising.\" \"AgenticAdvertising.org is a Delaware nonprofit nonstock corporation, founded in 2025 and intended to qualify under Section 501(c)(6).\" Its directors \"adopted the current bylaws by unanimous written consent on June 11, 2026, subject to voting member ratification.\"; \"Benjamin Masse was named Board President in the September 2026 announcement.\" The repository charter and the docs FAQ still describe an interim board to be replaced on May 6, 2026",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against docs.adcontextprotocol.org/dist/docs/3.1.20/intro"
    },
    {
     "date": "2026-10-16",
     "note": "AdCP v3.2.4 released on 2026-10-12"
    },
    {
     "date": "2026-10-17",
     "note": "version v3.2.5"
    },
    {
     "date": "2026-10-20",
     "note": "spec_url updated from pinned 3.1.20 docs to the docs home (current release v3.2.5)"
    },
    {
     "date": "2026-10-23",
     "note": "version v3.2.6"
    },
    {
     "date": "2026-10-24",
     "note": "version v3.2.7"
    },
    {
     "date": "2026-10-29",
     "note": "Primary-source verification across 39 primary sources (release v3.2.8)"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "adcp",
   "implementation": "shipping",
   "last_verified": "2026-11-06",
   "name": "Ad Context Protocol (AdCP)",
   "native_status": "Active, generally available (latest release v3.2.8 published 2026-10-28; general availability announced 2026-09-30)",
   "origin": {
    "date": "2025",
    "org": "AgenticAdvertising.org"
   },
   "part_of": null,
   "parties": [
    "agent-site",
    "agent-agent"
   ],
   "phase": "working-group",
   "probe": {
    "method": "GET",
    "on_absent": "404 or non-JSON response at /.well-known/adagents.json: the origin has not published AdCP publisher discovery (it may still run an AdCP agent without publishing the file, but that cannot be crawled)",
    "parse": "JSON body with `version`, `publisher.name`/`publisher.domain`, and an `agents[]` array of {url, protocol, capabilities}; a `get_adcp_capabilities` MCP/A2A call against a listed agent url confirms the endpoint actually speaks AdCP",
    "path": "{origin}/.well-known/adagents.json"
   },
   "question": "How can an AI agent discover ad inventory, execute a media buy, sync creative, and report performance across many ad platforms through one protocol?",
   "scope": "advertising",
   "spec_url": "https://docs.adcontextprotocol.org/dist/docs/3.2.8/intro",
   "step": "act",
   "summary_md": "**Ad Context Protocol** (`AdCP`) is the open protocol AgenticAdvertising.org publishes so AI agents discover, plan, buy, sell, and measure media. The same tasks and schemas run on `MCP` and on `A2A`. Publishers must host `adagents.json` at `https://example.com/.well-known/adagents.json` as valid JSON with UTF-8 encoding that returns HTTP 200. Brands host `brand.json` at `https://example.com/.well-known/brand.json`. AdCP 3.2 is generally available (release `3.2.1`, wire pin `\"3.2\"`). The `3.2.8` versions table lists 3.2 as Active (current stable: `3.2.1`), published `2026-09-30`; `3.2.0` was never released. The latest GitHub release tag is `v3.2.8`, published `2026-10-28`.",
   "track": "industry-body",
   "version": {
    "label": "v3.2.8",
    "date": "2026-10-28"
   },
   "watch": [
    {
     "type": "page",
     "url": "https://docs.adcontextprotocol.org/",
     "selector": "main",
     "cadence": "weekly"
    },
    {
     "type": "github",
     "repo": "adcontextprotocol/adcp",
     "mode": "release"
    }
   ],
   "use_cases": [
    "discover-my-api",
    "agent-checkout",
    "describe-agent-capabilities",
    "attribute-agent-traffic"
   ],
   "audience": [
    "agent-builder",
    "platform",
    "standards-body"
   ],
   "pairs_with": [
    "mcp",
    "a2a",
    "http-message-signatures",
    "aamp",
    "artf"
   ],
   "prerequisites": [
    "mcp",
    "a2a",
    "http-message-signatures"
   ],
   "hatnote_md": "This page is about the Ad Context Protocol (AdCP), the open protocol AgenticAdvertising.org publishes so AI agents can discover, plan, buy, sell, and measure media. The repository charter also names the Advertising Context Protocol. AdCP carries the same tasks and schemas over the [Model Context Protocol (MCP)](https://agenticweb.wiki/protocols/mcp/) and the [Agent2Agent Protocol (A2A)](https://agenticweb.wiki/protocols/a2a/). There is no in-protocol payment or settlement.",
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "harnesses_rpc_ui",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-06",
   "v05_hatnote_html_md": "This page is about the Ad Context Protocol (AdCP), the open protocol AgenticAdvertising.org publishes so AI agents can discover, plan, buy, sell, and measure media. The repository charter also names the Advertising Context Protocol. AdCP carries the same tasks and schemas over the [Model Context Protocol (MCP)](/protocols/mcp/) and the [Agent2Agent Protocol (A2A)](/protocols/a2a/). There is no in-protocol payment or settlement. [1][2][3][4]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Ad Context Protocol** (`AdCP`) is the open protocol AgenticAdvertising.org publishes so AI agents discover, plan, buy, sell, and measure media. [1] The same tasks and schemas run on `MCP` and on `A2A`. [3] Publishers must host `adagents.json` at `https://example.com/.well-known/adagents.json` as valid JSON with UTF-8 encoding that returns HTTP 200. [5] Brands host `brand.json` at `https://example.com/.well-known/brand.json`. [6] AdCP 3.2 is generally available (release `3.2.1`, wire pin `\"3.2\"`). [3] The `3.2.8` versions table lists 3.2 as Active (current stable: `3.2.1`), published `2026-09-30`; `3.2.0` was never released. [7] The latest GitHub release tag is `v3.2.8`, published `2026-10-28`. [8]",
   "v05_identity_sentence_md": "**Ad Context Protocol** (`AdCP`) is the open protocol AgenticAdvertising.org publishes so AI agents discover, plan, buy, sell, and measure media. [1] The same tasks and schemas run on `MCP` and on `A2A`. [3]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Act](/category/act/) (`act`)"
    },
    {
     "label": "Form",
     "value_md": "Well-known file (`well-known-file`)"
    },
    {
     "label": "Originated by",
     "value_md": "AgenticAdvertising.org. Repository adcontextprotocol/adcp was created 2025-07-19. AdExchanger (2025-10-15) names co-founding members Triton Digital, Yahoo!, PubMatic, Scope3, Optable, and Swivel. Release v2.0.0 was published 2025-10-15. The organization announced its incorporation on 2025-12-12. [9][10][11][12]"
    },
    {
     "label": "Governed by",
     "value_md": "AgenticAdvertising.org, a Delaware nonprofit nonstock corporation founded in 2025 and intended to qualify under Section 501(c)(6). Directors adopted the current bylaws by unanimous written consent on June 11, 2026, subject to voting member ratification. Benjamin Masse was named Board President in the September 2026 announcement. The repository charter and the docs FAQ still describe an interim board to be replaced at an annual general meeting on May 6, 2026. The charter says it does not create or modify governance, and that the bylaws control if they conflict. [1][2][3][13][14][15]"
    },
    {
     "label": "Track",
     "value_md": "Industry body (AgenticAdvertising.org) [2][3]"
    },
    {
     "label": "Status",
     "value_md": "Active (unarchived GitHub repository). Release notes for 3.2.1 say general availability, published 2026-09-30. The home page says AdCP 3.2 is now generally available. The latest GitHub release is v3.2.8, published 2026-10-28. [1][8][9][16]"
    },
    {
     "label": "Version",
     "value_md": "Docs 3.2.8: active line 3.2 (current stable 3.2.1), wire pin \"3.2\", published 2026-09-30. 3.2.0 was never released. 3.0.0 was the 2026-04-22 GA baseline. GitHub tags include v3.0.0 (published 2026-04-22), v2.0.0 (published 2025-10-15), and latest v3.2.8 (published 2026-10-28). [3][7][8][11][17]"
    },
    {
     "label": "Transports",
     "value_md": "MCP, for AI assistants calling tools, and A2A, for agent-to-agent collaboration. Same tasks and schemas on either transport. [3]"
    },
    {
     "label": "Message format",
     "value_md": "Shared task schemas. The MCP guide starts with get_adcp_capabilities. The create-media-buy request schema is deprecated: new 3.2 callers use buy_products or accept_proposal. [3][18][19]"
    },
    {
     "label": "Headers",
     "value_md": "RFC 9421 HTTP Message Signatures: `required_for` governs the signature requirement relative to a caller's credential path, not absolutely. A verifier typically accepts more than one authenticator (bearer, API key, mTLS, 9421). Read calls remain bearer-authenticated. Request signing is optional through AdCP 3.2 (every signed body is digest-bound) and is planned to become mandatory for spend-committing operations (`create_media_buy`, `update_media_buy`, `acquire_*`, `activate_signal`) in 4.0. 9421 webhook signing is baseline-required in 3.0. [15][20]"
    },
    {
     "label": "Found at",
     "value_md": "Publisher file at `/.well-known/adagents.json` (HTTP 200 JSON). Brand file at `/.well-known/brand.json`. Hosted registry lookup `GET /api/registry/agents`. [3][5][6]"
    },
    {
     "label": "Specification",
     "value_md": "[AdCP — Introduction to the Protocol, docs 3.2.8](https://docs.adcontextprotocol.org/dist/docs/3.2.8/intro) [3]"
    },
    {
     "label": "Licence",
     "value_md": "Apache License 2.0 (`Apache-2.0`) on adcontextprotocol/adcp [9]"
    }
   ],
   "v05_problem_md": "While OpenRTB standardized real-time bidding and ad exchange transactions, AdCP is designed to standardize agentic communication that may precede a buy. A spokesperson for the AdCP consortium called AdCP a parallel protocol to OpenRTB, intended to orchestrate advertising technology solutions, including DSPs and SSPs. [21] AdCP standardizes the capabilities a participant actually advertises. It adds a proposal-to-operation lifecycle buyers and sellers can audit. [3] In 3.0, 9421 webhook signing is baseline-required. Any seller that emits webhooks MUST sign them per the Webhook callbacks profile unless the buyer explicitly opts into the legacy scheme. [20] There is no in-protocol payment or settlement. Payment rails, legal agreements, settlement, disputes, credits, and makegoods remain account or platform integrations unless the relevant AdCP contract is explicitly present. [3][4]",
   "v05_mechanism_delta_md": "AdCP standardizes the capabilities a participant actually advertises. It adds a proposal-to-operation lifecycle buyers and sellers can audit. [3] In 3.0, 9421 webhook signing is baseline-required. Any seller that emits webhooks MUST sign them per the Webhook callbacks profile unless the buyer explicitly opts into the legacy scheme. [20]",
   "v05_scope_boundary_md": "There is no in-protocol payment or settlement. Payment rails, legal agreements, settlement, disputes, credits, and makegoods remain account or platform integrations unless the relevant AdCP contract is explicitly present. [3][4]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "Well-Known URIs",
      "spec_or_rfc": "RFC 8615",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "AdCP requires publishers to host adagents.json at /.well-known/adagents.json and return HTTP 200, and brands to host brand.json at /.well-known/brand.json, following RFC 8615 well-known URI conventions. [5][6]"
     },
     {
      "name": "OpenRTB",
      "spec_or_rfc": "OpenRTB",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "OpenRTB standardized real-time bidding and ad exchange transactions. AdCP is described as a parallel protocol to OpenRTB, and AdCP carries the same advertising tasks and schemas over MCP or A2A. [3][21]"
     },
     {
      "name": "HTTP Message Signatures",
      "spec_or_rfc": "RFC 9421",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "RFC 9421 describes digital signatures over components of an HTTP message. In AdCP, `required_for` governs the RFC 9421 signature requirement relative to a caller's credential path, not absolutely, and a verifier typically accepts more than one authenticator (bearer, API key, mTLS, 9421). Read calls remain bearer-authenticated. Request signing is optional through AdCP 3.2 (every signed body is digest-bound) and is planned to become mandatory for spend-committing operations (`create_media_buy`, `update_media_buy`, `acquire_*`, `activate_signal`) in 4.0, while 9421 webhook signing is baseline-required in 3.0. [15][20][22]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "MCP uses JSON-RPC 2.0 messages between a host and a tool server. AdCP carries assistant tool calls on MCP, starting with get_adcp_capabilities, and publisher discovery stays at /.well-known/adagents.json. [3][5][18][23]"
     },
     {
      "target_id": "a2a",
      "target_name": "Agent2Agent Protocol (A2A)",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "A2A is the Agent2Agent protocol for communication between independent AI agent systems. AdCP carries the same tasks and schemas over A2A for agent-to-agent collaboration, and publishers list authorized agents in adagents.json. [3][5][24]"
     },
     {
      "target_id": "http-message-signatures",
      "target_name": "HTTP Message Signatures",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "HTTP Message Signatures (RFC 9421) define how a sender creates and verifies digital signatures over components of an HTTP message. In AdCP, `required_for` governs the signature requirement relative to a caller's credential path, not absolutely, and a verifier typically accepts more than one authenticator (bearer, API key, mTLS, 9421). Read calls remain bearer-authenticated. Request signing is optional through AdCP 3.2 (every signed body is digest-bound) and is planned to become mandatory for spend-committing operations (`create_media_buy`, `update_media_buy`, `acquire_*`, `activate_signal`) in 4.0, while 9421 webhook signing is baseline-required in 3.0. [15][20][22]"
     },
     {
      "target_id": "aamp",
      "target_name": "Agentic Advertising Management Protocols",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "AAMP is an IAB Tech Lab umbrella initiative for agentic advertising. IAB Tech Lab says AAMP and AdCP are frameworks with different design philosophies, not two cleanly separated layers. AdCP carries the same advertising tasks and schemas over MCP or A2A, and publishers host adagents.json. [3][5][25][26]"
     },
     {
      "target_id": "artf",
      "target_name": "Agentic Real Time Framework",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ARTF (IAB Tech Lab Agentic Real Time Framework, ARTF v1.0 FINAL, published in repository specification `Agentic_Real_Time_Framework_Version_1_0_FINAL.md` after its initial v1.0 public-comment release) defines agent-driven containers in OpenRTB with an MCP tool named `extend_rtb`. AdCP defines advertising task schemas carried on MCP or A2A and the publisher file `adagents.json`. [3][5][27][28]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (13 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).",
    "side_a": {
     "visible": true,
     "heading": "Publishers, sales agents, ad-tech platforms & registries",
     "col4_header": "Transport & Scope",
     "note_md": null,
     "rows": [
      {
       "actor": "Talpa Network",
       "role": "Publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "HTTP 200 at `https://kijk.nl/.well-known/adagents.json`. The document sets `$schema` to `https://adcontextprotocol.org/schemas/v3/adagents.json`, contact `seller_id` `58523` for Talpa Media, and `last_updated` 2026-06-19. `authorized_agents` names `https://adcp.swivel.ai/mcp`, `https://adcp-salesagent.api.tritondigital.com/mcp`, and `https://interchange.io`, each with `authorization_type` `property_tags`.",
       "source_md": "[Talpa Network, kijk.nl adagents.json (checked 2026-10-30)](https://kijk.nl/.well-known/adagents.json) [29]"
      },
      {
       "actor": "Swivel",
       "role": "Sales agent",
       "status": "Listed",
       "status_display": "Listed · as of 2026-06-19",
       "col4_md": "Talpa's adagents.json lists `https://adcp.swivel.ai/mcp` under `authorized_agents`, `authorized_for` All Talpa Network properties, with `authorization_type` `property_tags` and `delegation_type` `direct`.",
       "source_md": "[Talpa Network, kijk.nl adagents.json (checked 2026-10-30)](https://kijk.nl/.well-known/adagents.json) [29]"
      },
      {
       "actor": "Triton Digital",
       "role": "Sales agent",
       "status": "Listed",
       "status_display": "Listed · as of 2026-06-19",
       "col4_md": "Talpa's adagents.json lists `https://adcp-salesagent.api.tritondigital.com/mcp` under `authorized_agents`, `authorized_for` Talpa audio and podcast properties, with `authorization_type` `property_tags` and `delegation_type` `direct`.",
       "source_md": "[Talpa Network, kijk.nl adagents.json (checked 2026-10-30)](https://kijk.nl/.well-known/adagents.json) [29]"
      },
      {
       "actor": "Interchange",
       "role": "Sales agent",
       "status": "Listed",
       "status_display": "Listed · as of 2026-06-19",
       "col4_md": "Talpa's adagents.json lists `https://interchange.io` under `authorized_agents`, `authorized_for` All Talpa Network properties, with `authorization_type` `property_tags` and `delegation_type` `direct`.",
       "source_md": "[Talpa Network, kijk.nl adagents.json (checked 2026-10-30)](https://kijk.nl/.well-known/adagents.json) [29]"
      },
      {
       "actor": "PubMatic AgenticOS",
       "role": "Ad-tech platform",
       "status": "Supported",
       "status_display": "Supported · as of 2026-01-05",
       "col4_md": "On 2026-01-05 PubMatic announced PubMatic AgenticOS. The announcement says agentic capabilities embedded across the platform interpret intent expressed through the Ad Context Protocol (AdCP) and Model Context Protocol (MCP).",
       "source_md": "[PubMatic, AgenticOS launch (2026-01-05)](https://pubmatic.com/news/pubmatic-launches-agenticos-the-operating-system-for-agent-to-agent-advertising/) [30]"
      },
      {
       "actor": "Prebid Sales Agent",
       "role": "Sales agent",
       "status": "Experimental",
       "status_display": "Experimental · as of 2026-10-28",
       "col4_md": "Open-source AdCP sales-agent role maintained under Prebid.org, with MCP and A2A interfaces. The README says Status: alpha, a pre-1.0 implementation of AdCP `3.1.1` via the `adcp==6.6.0` Python SDK. The AdCP introduction calls it a community example, not a maintained reference implementation, and a full-stack seller agent with a Python backend, a TypeScript protocol layer, and GAM integration. AdExchanger says the Prebid Sales Agent is now available to all publishers. Last pushed on 2026-10-28.",
       "source_md": "[Prebid Sales Agent README (checked 2026-10-30)](https://raw.githubusercontent.com/prebid/salesagent/main/README.md) [31] · [AdCP 3.2.8 introduction (checked 2026-10-30)](https://docs.adcontextprotocol.org/dist/docs/3.2.8/intro) [3] · [AdExchanger, Prebid Sales Agent (January 29, 2026)](https://www.adexchanger.com/publishers/prebid-takes-over-adcps-code-for-creating-sell-side-ai-agents/) [32] · [prebid/salesagent repository (pushed 2026-10-28)](https://github.com/prebid/salesagent) [33]"
      },
      {
       "actor": "LG Ad Solutions",
       "role": "Publisher",
       "status": "Supported",
       "status_display": "Supported · as of 2025-12-12",
       "col4_md": "AgenticAdvertising.org says that on October 16, 2025 the first agent-to-agent media buy was executed with real inventory from LG Ads. The December 12, 2025 launch announcement lists LG Ad Solutions among companies giving wide-industry support. `datePublished` on that announcement is 2025-12-12.",
       "source_md": "[AgenticAdvertising.org home (checked 2026-10-30)](https://agenticadvertising.org/) [1] · [AgenticAdvertising.org launch announcement (2025-12-12)](https://agenticadvertising.org/perspectives/launch-announcement) [12]"
      },
      {
       "actor": "AgenticAdvertising.org registry",
       "role": "Directory/registry (discovery)",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "HTTP 200 from `https://agenticadvertising.org/api/registry/stats`. The body reports `registered_agents` 33, `registered_publishers` 14, `discovered_agents` 87, `discovered_publishers` 450, `discovered_properties` 22705, and `authorizations` 7742. `authorizations_by_source` splits `adagents_json` 7314 and `agent_claim` 428. `properties_by_type` includes `website` 19544, `podcast` 2081, `radio` 966, and `ctv_app` 64. The AAO Directory API page states that this endpoint is discovery, not authorization. The HTTP 200 stats response is declared registry presence, not conformance or live trading.",
       "source_md": "[Registry stats (checked 2026-10-30)](https://agenticadvertising.org/api/registry/stats) [34] · [AAO Directory API](https://docs.adcontextprotocol.org/dist/docs/3.2.6/aao/directory-api) [35]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Buying agents, client SDKs & testing assistants",
     "col4_header": "Transport & Scope",
     "note_md": null,
     "rows": [
      {
       "actor": "@adcp/sdk",
       "role": "Client SDK",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-29",
       "col4_md": "npm dist-tag `latest` is `16.6.1`, published 2026-10-29. The package description is AdCP SDK - client, server, and compliance harnesses for the AdContext Protocol (`MCP` + `A2A`). The 3.2.8 introduction install line begins `npm install @adcp/sdk`.",
       "source_md": "[npm @adcp/sdk (16.6.1, 2026-10-29)](https://registry.npmjs.org/@adcp/sdk) [36] · [AdCP 3.2.8 introduction (checked 2026-10-30)](https://docs.adcontextprotocol.org/dist/docs/3.2.8/intro) [3]"
      },
      {
       "actor": "@adcp/client",
       "role": "Client SDK",
       "status": "Partial",
       "status_display": "Partial · as of 2026-10-30",
       "col4_md": "The npm record marks `@adcp/client` `deprecated`: Renamed to `@adcp/sdk` in `v6.0`. Install `@adcp/sdk@^6.1.0` instead.",
       "source_md": "[npm @adcp/client (deprecated)](https://registry.npmjs.org/@adcp/client) [37]"
      },
      {
       "actor": "adcp Python SDK",
       "role": "Client SDK",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-29",
       "col4_md": "PyPI `adcp` version `9.3.1` was uploaded on 2026-10-29. The summary is Official Python client for the Ad Context Protocol (AdCP). The packaged README names `ADCPClient` and `ADCPHandler`. The 3.2.8 introduction install line includes `pip install adcp`.",
       "source_md": "[PyPI adcp 9.3.1 (uploaded 2026-10-29)](https://pypi.org/pypi/adcp/json) [38] · [AdCP 3.2.8 introduction (checked 2026-10-30)](https://docs.adcontextprotocol.org/dist/docs/3.2.8/intro) [3]"
      },
      {
       "actor": "adcp-go",
       "role": "Client SDK",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-30",
       "col4_md": "GitHub describes adcontextprotocol/adcp-go as the Golang SDK for the AdCP protocol, licensed under `Apache-2.0` and last pushed on 2026-10-30. The 3.2.8 introduction install line ends with `go get github.com/adcontextprotocol/adcp-go/adcp`.",
       "source_md": "[adcontextprotocol/adcp-go (pushed 2026-10-30)](https://github.com/adcontextprotocol/adcp-go) [39] · [AdCP 3.2.8 introduction (checked 2026-10-30)](https://docs.adcontextprotocol.org/dist/docs/3.2.8/intro) [3]"
      },
      {
       "actor": "Addie",
       "role": "Testing assistant",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-30",
       "col4_md": "The 3.2.8 introduction tells builders to ask Addie to ask questions about AdCP, explore the protocol, and test tasks, with no code required.",
       "source_md": "[AdCP 3.2.8 introduction (checked 2026-10-30)](https://docs.adcontextprotocol.org/dist/docs/3.2.8/intro) [3]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [
     {
      "label": "AgenticAdvertising.org registry stats (checked 2026-10-30)",
      "as_of": "2026-10-30",
      "value_md": "The registry stats endpoint reports 33 registered agents, 14 registered publishers, 87 discovered agents, 450 discovered publishers, 22,705 discovered properties, and 7,742 authorizations. [34]"
     },
     {
      "label": "AgenticAdvertising.org home (checked 2026-10-30)",
      "as_of": "2026-10-30",
      "value_md": "The AgenticAdvertising.org home page says 157+ members, and names Yahoo, PubMatic, Scope3, Samba TV, LG Ads, and Kargo in that list. [1]"
     },
     {
      "label": "AdCP 3.2.6 AAO Directory API",
      "as_of": "2026-11-06",
      "value_md": "The AdCP 3.2.6 AAO Directory API is an HTTP API for sales-agent operators to discover which publishers authorize their agent. It returns provenance, per-publisher property counts, and lifecycle status, and the page states that this endpoint is discovery, not authorization. The AAO directory at agenticadvertising.org indexes publisher adagents.json files. cafemedia alone delegates ~6,800 publisher domains under a single manager file. The page names the SDK primitives verify_agent_authorization and fetch_agent_authorizations. [35]"
     }
    ],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Act protocols](/category/act/)** — Category index for `act` standards."
    }
   ],
   "v05_compiled_md": "---\nid: adcp\ntitle: \"Ad Context Protocol (AdCP)\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: act\nform: well-known-file\nwire_archetype: harnesses_rpc_ui\nspec_url: https://docs.adcontextprotocol.org/dist/docs/3.2.8/intro\nlast_checked: 2026-11-06\n---\n\n# Ad Context Protocol (AdCP)\n\n**Category:** [Act](/category/act/) (`act`) · **Form:** Well-known file (`well-known-file`) · **Last checked:** 2026-11-06\n\n> *This page is about the Ad Context Protocol (AdCP), the open protocol AgenticAdvertising.org publishes so AI agents can discover, plan, buy, sell, and measure media. The repository charter also names the Advertising Context Protocol. AdCP carries the same tasks and schemas over the [Model Context Protocol (MCP)](/protocols/mcp/) and the [Agent2Agent Protocol (A2A)](/protocols/a2a/). There is no in-protocol payment or settlement. [1][2][3][4]*\n\n**Ad Context Protocol** (`AdCP`) is the open protocol AgenticAdvertising.org publishes so AI agents discover, plan, buy, sell, and measure media. [1] The same tasks and schemas run on `MCP` and on `A2A`. [3] Publishers must host `adagents.json` at `https://example.com/.well-known/adagents.json` as valid JSON with UTF-8 encoding that returns HTTP 200. [5] Brands host `brand.json` at `https://example.com/.well-known/brand.json`. [6] AdCP 3.2 is generally available (release `3.2.1`, wire pin `\"3.2\"`). [3] The `3.2.8` versions table lists 3.2 as Active (current stable: `3.2.1`), published `2026-09-30`; `3.2.0` was never released. [7] The latest GitHub release tag is `v3.2.8`, published `2026-10-28`. [8]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Act](/category/act/) (`act`) |\n| **Form** | Well-known file (`well-known-file`) |\n| **Originated by** | AgenticAdvertising.org. Repository adcontextprotocol/adcp was created 2025-07-19. AdExchanger (2025-10-15) names co-founding members Triton Digital, Yahoo!, PubMatic, Scope3, Optable, and Swivel. Release v2.0.0 was published 2025-10-15. The organization announced its incorporation on 2025-12-12. [9][10][11][12] |\n| **Governed by** | AgenticAdvertising.org, a Delaware nonprofit nonstock corporation founded in 2025 and intended to qualify under Section 501(c)(6). Directors adopted the current bylaws by unanimous written consent on June 11, 2026, subject to voting member ratification. Benjamin Masse was named Board President in the September 2026 announcement. The repository charter and the docs FAQ still describe an interim board to be replaced at an annual general meeting on May 6, 2026. The charter says it does not create or modify governance, and that the bylaws control if they conflict. [1][2][3][13][14][15] |\n| **Track** | Industry body (AgenticAdvertising.org) [2][3] |\n| **Status** | Active (unarchived GitHub repository). Release notes for 3.2.1 say general availability, published 2026-09-30. The home page says AdCP 3.2 is now generally available. The latest GitHub release is v3.2.8, published 2026-10-28. [1][8][9][16] |\n| **Version** | Docs 3.2.8: active line 3.2 (current stable 3.2.1), wire pin \"3.2\", published 2026-09-30. 3.2.0 was never released. 3.0.0 was the 2026-04-22 GA baseline. GitHub tags include v3.0.0 (published 2026-04-22), v2.0.0 (published 2025-10-15), and latest v3.2.8 (published 2026-10-28). [3][7][8][11][17] |\n| **Transports** | MCP, for AI assistants calling tools, and A2A, for agent-to-agent collaboration. Same tasks and schemas on either transport. [3] |\n| **Message format** | Shared task schemas. The MCP guide starts with get_adcp_capabilities. The create-media-buy request schema is deprecated: new 3.2 callers use buy_products or accept_proposal. [3][18][19] |\n| **Headers** | RFC 9421 HTTP Message Signatures: `required_for` governs the signature requirement relative to a caller's credential path, not absolutely. A verifier typically accepts more than one authenticator (bearer, API key, mTLS, 9421). Read calls remain bearer-authenticated. Request signing is optional through AdCP 3.2 (every signed body is digest-bound) and is planned to become mandatory for spend-committing operations (`create_media_buy`, `update_media_buy`, `acquire_*`, `activate_signal`) in 4.0. 9421 webhook signing is baseline-required in 3.0. [15][20] |\n| **Found at** | Publisher file at `/.well-known/adagents.json` (HTTP 200 JSON). Brand file at `/.well-known/brand.json`. Hosted registry lookup `GET /api/registry/agents`. [3][5][6] |\n| **Specification** | [AdCP — Introduction to the Protocol, docs 3.2.8](https://docs.adcontextprotocol.org/dist/docs/3.2.8/intro) [3] |\n| **Licence** | Apache License 2.0 (`Apache-2.0`) on adcontextprotocol/adcp [9] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [Adoption and ecosystem](#adoption-and-ecosystem)\n4. [See also](#see-also)\n5. [References](#references)\n\n---\n\n## Problem and scope\n\nWhile OpenRTB standardized real-time bidding and ad exchange transactions, AdCP is designed to standardize agentic communication that may precede a buy. A spokesperson for the AdCP consortium called AdCP a parallel protocol to OpenRTB, intended to orchestrate advertising technology solutions, including DSPs and SSPs. [21] AdCP standardizes the capabilities a participant actually advertises. It adds a proposal-to-operation lifecycle buyers and sellers can audit. [3] In 3.0, 9421 webhook signing is baseline-required. Any seller that emits webhooks MUST sign them per the Webhook callbacks profile unless the buyer explicitly opts into the legacy scheme. [20] There is no in-protocol payment or settlement. Payment rails, legal agreements, settlement, disputes, credits, and makegoods remain account or platform integrations unless the relevant AdCP contract is explicitly present. [3][4]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **Well-Known URIs** | `RFC 8615` | Profiles classic standard | AdCP requires publishers to host adagents.json at /.well-known/adagents.json and return HTTP 200, and brands to host brand.json at /.well-known/brand.json, following RFC 8615 well-known URI conventions. [5][6] |\n| **OpenRTB** | `OpenRTB` | Analogous to classic standard | OpenRTB standardized real-time bidding and ad exchange transactions. AdCP is described as a parallel protocol to OpenRTB, and AdCP carries the same advertising tasks and schemas over MCP or A2A. [3][21] |\n| **HTTP Message Signatures** | `RFC 9421` | Profiles classic standard | RFC 9421 describes digital signatures over components of an HTTP message. In AdCP, `required_for` governs the RFC 9421 signature requirement relative to a caller's credential path, not absolutely, and a verifier typically accepts more than one authenticator (bearer, API key, mTLS, 9421). Read calls remain bearer-authenticated. Request signing is optional through AdCP 3.2 (every signed body is digest-bound) and is planned to become mandatory for spend-committing operations (`create_media_buy`, `update_media_buy`, `acquire_*`, `activate_signal`) in 4.0, while 9421 webhook signing is baseline-required in 3.0. [15][20][22] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Model Context Protocol](/protocols/mcp/)** | Builds on | MCP uses JSON-RPC 2.0 messages between a host and a tool server. AdCP carries assistant tool calls on MCP, starting with get_adcp_capabilities, and publisher discovery stays at /.well-known/adagents.json. [3][5][18][23] |\n| **[Agent2Agent Protocol (A2A)](/protocols/a2a/)** | Builds on | A2A is the Agent2Agent protocol for communication between independent AI agent systems. AdCP carries the same tasks and schemas over A2A for agent-to-agent collaboration, and publishers list authorized agents in adagents.json. [3][5][24] |\n| **[HTTP Message Signatures](/protocols/http-message-signatures/)** | Builds on | HTTP Message Signatures (RFC 9421) define how a sender creates and verifies digital signatures over components of an HTTP message. In AdCP, `required_for` governs the signature requirement relative to a caller's credential path, not absolutely, and a verifier typically accepts more than one authenticator (bearer, API key, mTLS, 9421). Read calls remain bearer-authenticated. Request signing is optional through AdCP 3.2 (every signed body is digest-bound) and is planned to become mandatory for spend-committing operations (`create_media_buy`, `update_media_buy`, `acquire_*`, `activate_signal`) in 4.0, while 9421 webhook signing is baseline-required in 3.0. [15][20][22] |\n| **[Agentic Advertising Management Protocols](/protocols/aamp/)** | Peer alternative | AAMP is an IAB Tech Lab umbrella initiative for agentic advertising. IAB Tech Lab says AAMP and AdCP are frameworks with different design philosophies, not two cleanly separated layers. AdCP carries the same advertising tasks and schemas over MCP or A2A, and publishers host adagents.json. [3][5][25][26] |\n| **[Agentic Real Time Framework](/protocols/artf/)** | Peer alternative | ARTF (IAB Tech Lab Agentic Real Time Framework, ARTF v1.0 FINAL, published in repository specification `Agentic_Real_Time_Framework_Version_1_0_FINAL.md` after its initial v1.0 public-comment release) defines agent-driven containers in OpenRTB with an MCP tool named `extend_rtb`. AdCP defines advertising task schemas carried on MCP or A2A and the publisher file `adagents.json`. [3][5][27][28] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (13 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).*\n\n### Publishers, sales agents, ad-tech platforms & registries\n\n| Actor | Role | Status | Transport & Scope | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Talpa Network** | Publisher | Live (HTTP 200) · checked 2026-10-30 | HTTP 200 at `https://kijk.nl/.well-known/adagents.json`. The document sets `$schema` to `https://adcontextprotocol.org/schemas/v3/adagents.json`, contact `seller_id` `58523` for Talpa Media, and `last_updated` 2026-06-19. `authorized_agents` names `https://adcp.swivel.ai/mcp`, `https://adcp-salesagent.api.tritondigital.com/mcp`, and `https://interchange.io`, each with `authorization_type` `property_tags`. | [Talpa Network, kijk.nl adagents.json (checked 2026-10-30)](https://kijk.nl/.well-known/adagents.json) [29] |\n| **Swivel** | Sales agent | Listed · as of 2026-06-19 | Talpa's adagents.json lists `https://adcp.swivel.ai/mcp` under `authorized_agents`, `authorized_for` All Talpa Network properties, with `authorization_type` `property_tags` and `delegation_type` `direct`. | [Talpa Network, kijk.nl adagents.json (checked 2026-10-30)](https://kijk.nl/.well-known/adagents.json) [29] |\n| **Triton Digital** | Sales agent | Listed · as of 2026-06-19 | Talpa's adagents.json lists `https://adcp-salesagent.api.tritondigital.com/mcp` under `authorized_agents`, `authorized_for` Talpa audio and podcast properties, with `authorization_type` `property_tags` and `delegation_type` `direct`. | [Talpa Network, kijk.nl adagents.json (checked 2026-10-30)](https://kijk.nl/.well-known/adagents.json) [29] |\n| **Interchange** | Sales agent | Listed · as of 2026-06-19 | Talpa's adagents.json lists `https://interchange.io` under `authorized_agents`, `authorized_for` All Talpa Network properties, with `authorization_type` `property_tags` and `delegation_type` `direct`. | [Talpa Network, kijk.nl adagents.json (checked 2026-10-30)](https://kijk.nl/.well-known/adagents.json) [29] |\n| **PubMatic AgenticOS** | Ad-tech platform | Supported · as of 2026-01-05 | On 2026-01-05 PubMatic announced PubMatic AgenticOS. The announcement says agentic capabilities embedded across the platform interpret intent expressed through the Ad Context Protocol (AdCP) and Model Context Protocol (MCP). | [PubMatic, AgenticOS launch (2026-01-05)](https://pubmatic.com/news/pubmatic-launches-agenticos-the-operating-system-for-agent-to-agent-advertising/) [30] |\n| **Prebid Sales Agent** | Sales agent | Experimental · as of 2026-10-28 | Open-source AdCP sales-agent role maintained under Prebid.org, with MCP and A2A interfaces. The README says Status: alpha, a pre-1.0 implementation of AdCP `3.1.1` via the `adcp==6.6.0` Python SDK. The AdCP introduction calls it a community example, not a maintained reference implementation, and a full-stack seller agent with a Python backend, a TypeScript protocol layer, and GAM integration. AdExchanger says the Prebid Sales Agent is now available to all publishers. Last pushed on 2026-10-28. | [Prebid Sales Agent README (checked 2026-10-30)](https://raw.githubusercontent.com/prebid/salesagent/main/README.md) [31] · [AdCP 3.2.8 introduction (checked 2026-10-30)](https://docs.adcontextprotocol.org/dist/docs/3.2.8/intro) [3] · [AdExchanger, Prebid Sales Agent (January 29, 2026)](https://www.adexchanger.com/publishers/prebid-takes-over-adcps-code-for-creating-sell-side-ai-agents/) [32] · [prebid/salesagent repository (pushed 2026-10-28)](https://github.com/prebid/salesagent) [33] |\n| **LG Ad Solutions** | Publisher | Supported · as of 2025-12-12 | AgenticAdvertising.org says that on October 16, 2025 the first agent-to-agent media buy was executed with real inventory from LG Ads. The December 12, 2025 launch announcement lists LG Ad Solutions among companies giving wide-industry support. `datePublished` on that announcement is 2025-12-12. | [AgenticAdvertising.org home (checked 2026-10-30)](https://agenticadvertising.org/) [1] · [AgenticAdvertising.org launch announcement (2025-12-12)](https://agenticadvertising.org/perspectives/launch-announcement) [12] |\n| **AgenticAdvertising.org registry** | Directory/registry (discovery) | Live (HTTP 200) · checked 2026-10-30 | HTTP 200 from `https://agenticadvertising.org/api/registry/stats`. The body reports `registered_agents` 33, `registered_publishers` 14, `discovered_agents` 87, `discovered_publishers` 450, `discovered_properties` 22705, and `authorizations` 7742. `authorizations_by_source` splits `adagents_json` 7314 and `agent_claim` 428. `properties_by_type` includes `website` 19544, `podcast` 2081, `radio` 966, and `ctv_app` 64. The AAO Directory API page states that this endpoint is discovery, not authorization. The HTTP 200 stats response is declared registry presence, not conformance or live trading. | [Registry stats (checked 2026-10-30)](https://agenticadvertising.org/api/registry/stats) [34] · [AAO Directory API](https://docs.adcontextprotocol.org/dist/docs/3.2.6/aao/directory-api) [35] |\n\n### Buying agents, client SDKs & testing assistants\n\n| Actor | Role | Status | Transport & Scope | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **@adcp/sdk** | Client SDK | Supported · as of 2026-10-29 | npm dist-tag `latest` is `16.6.1`, published 2026-10-29. The package description is AdCP SDK - client, server, and compliance harnesses for the AdContext Protocol (`MCP` + `A2A`). The 3.2.8 introduction install line begins `npm install @adcp/sdk`. | [npm @adcp/sdk (16.6.1, 2026-10-29)](https://registry.npmjs.org/@adcp/sdk) [36] · [AdCP 3.2.8 introduction (checked 2026-10-30)](https://docs.adcontextprotocol.org/dist/docs/3.2.8/intro) [3] |\n| **@adcp/client** | Client SDK | Partial · as of 2026-10-30 | The npm record marks `@adcp/client` `deprecated`: Renamed to `@adcp/sdk` in `v6.0`. Install `@adcp/sdk@^6.1.0` instead. | [npm @adcp/client (deprecated)](https://registry.npmjs.org/@adcp/client) [37] |\n| **adcp Python SDK** | Client SDK | Supported · as of 2026-10-29 | PyPI `adcp` version `9.3.1` was uploaded on 2026-10-29. The summary is Official Python client for the Ad Context Protocol (AdCP). The packaged README names `ADCPClient` and `ADCPHandler`. The 3.2.8 introduction install line includes `pip install adcp`. | [PyPI adcp 9.3.1 (uploaded 2026-10-29)](https://pypi.org/pypi/adcp/json) [38] · [AdCP 3.2.8 introduction (checked 2026-10-30)](https://docs.adcontextprotocol.org/dist/docs/3.2.8/intro) [3] |\n| **adcp-go** | Client SDK | Supported · as of 2026-10-30 | GitHub describes adcontextprotocol/adcp-go as the Golang SDK for the AdCP protocol, licensed under `Apache-2.0` and last pushed on 2026-10-30. The 3.2.8 introduction install line ends with `go get github.com/adcontextprotocol/adcp-go/adcp`. | [adcontextprotocol/adcp-go (pushed 2026-10-30)](https://github.com/adcontextprotocol/adcp-go) [39] · [AdCP 3.2.8 introduction (checked 2026-10-30)](https://docs.adcontextprotocol.org/dist/docs/3.2.8/intro) [3] |\n| **Addie** | Testing assistant | Supported · as of 2026-10-30 | The 3.2.8 introduction tells builders to ask Addie to ask questions about AdCP, explore the protocol, and test tasks, with no code required. | [AdCP 3.2.8 introduction (checked 2026-10-30)](https://docs.adcontextprotocol.org/dist/docs/3.2.8/intro) [3] |\n\n### Ecosystem censuses\n\n- **AgenticAdvertising.org registry stats (checked 2026-10-30)** (*as of 2026-10-30*): The registry stats endpoint reports 33 registered agents, 14 registered publishers, 87 discovered agents, 450 discovered publishers, 22,705 discovered properties, and 7,742 authorizations. [34]\n- **AgenticAdvertising.org home (checked 2026-10-30)** (*as of 2026-10-30*): The AgenticAdvertising.org home page says 157+ members, and names Yahoo, PubMatic, Scope3, Samba TV, LG Ads, and Kargo in that list. [1]\n- **AdCP 3.2.6 AAO Directory API** (*as of 2026-11-06*): The AdCP 3.2.6 AAO Directory API is an HTTP API for sales-agent operators to discover which publishers authorize their agent. It returns provenance, per-publisher property counts, and lifecycle status, and the page states that this endpoint is discovery, not authorization. The AAO directory at agenticadvertising.org indexes publisher adagents.json files. cafemedia alone delegates ~6,800 publisher domains under a single manager file. The page names the SDK primitives verify_agent_authorization and fetch_agent_authorizations. [35]\n\n---\n\n## See also\n\n- **Category:** [Act protocols](/category/act/)\n\n---\n\n## References\n\n1. AgenticAdvertising.org, *AgenticAdvertising.org* (fetched 2026-10-30) — <https://agenticadvertising.org/>\n2. AgenticAdvertising.org, *AgenticAdvertising.Org Charter* (fetched 2026-10-30) — <https://raw.githubusercontent.com/adcontextprotocol/adcp/main/CHARTER.md>\n3. AgenticAdvertising.org, *AdCP — Introduction to the Protocol* (docs 3.2.8; fetched 2026-10-30) — <https://docs.adcontextprotocol.org/dist/docs/3.2.8/intro>\n4. AgenticAdvertising.org, *Protocol Boundaries and Known Limitations* (docs 3.2.8; fetched 2026-10-30) — <https://docs.adcontextprotocol.org/dist/docs/3.2.8/reference/known-limitations.md>\n5. AgenticAdvertising.org, *adagents.json Tech Spec* (docs 3.2.8; fetched 2026-10-30) — <https://docs.adcontextprotocol.org/dist/docs/3.2.8/governance/property/adagents.md>\n6. AgenticAdvertising.org, *brand.json Specification* (docs 3.2.8; fetched 2026-10-30) — <https://docs.adcontextprotocol.org/dist/docs/3.2.8/brand-protocol/brand-json.md>\n7. AgenticAdvertising.org, *Versions & Compatibility* (docs 3.2.8; fetched 2026-10-30) — <https://docs.adcontextprotocol.org/dist/docs/3.2.8/reference/versions.md>\n8. adcontextprotocol, *Release v3.2.8* (published 2026-10-28) — <https://github.com/adcontextprotocol/adcp/releases>\n9. adcontextprotocol, *adcp repository* (created 2025-07-19; fetched 2026-10-30) — <https://github.com/adcontextprotocol/adcp>\n10. James Hercher (AdExchanger), *The Ad Context Protocol Aims To Make Sense Of Agentic Ad Demand* (published 2025-10-15; modified 2025-10-15) — <https://www.adexchanger.com/marketers/the-ad-context-protocol-aims-to-make-sense-of-agentic-ad-demand/>\n11. adcontextprotocol, *AdCP v2.0.0 — Production Release* (published 2025-10-15) — <https://github.com/adcontextprotocol/adcp/releases/tag/v2.0.0>\n12. AgenticAdvertising.org, *AgenticAdvertising.org Launches to Help Brands, Publishers, Agencies, and Ad Tech Adopt AI* (published 2025-12-12; modified 2026-10-22) — <https://agenticadvertising.org/perspectives/launch-announcement>\n13. AgenticAdvertising.org, *About AgenticAdvertising.org* (fetched 2026-10-30) — <https://agenticadvertising.org/about>\n14. AgenticAdvertising.org, *Governance* (fetched 2026-10-30) — <https://agenticadvertising.org/governance/>\n15. AgenticAdvertising.org, *AdCP — Frequently asked questions* (docs 3.2.8; fetched 2026-10-30) — <https://docs.adcontextprotocol.org/dist/docs/3.2.8/faq>\n16. AgenticAdvertising.org, *Release Notes* (docs 3.2.8; fetched 2026-10-30) — <https://docs.adcontextprotocol.org/dist/docs/3.2.8/reference/release-notes.md>\n17. adcontextprotocol, *AdCP v3.0.0* (published 2026-04-22) — <https://github.com/adcontextprotocol/adcp/releases/tag/v3.0.0>\n18. AgenticAdvertising.org, *MCP Guide* (docs 3.2.8; fetched 2026-10-30) — <https://docs.adcontextprotocol.org/dist/docs/3.2.8/building/by-layer/L0/mcp-guide.md>\n19. AgenticAdvertising.org, *Create Media Buy Request* (schema 3.2.8; fetched 2026-10-30) — <https://adcontextprotocol.org/schemas/v3/media-buy/create-media-buy-request.json>\n20. AgenticAdvertising.org, *Security* (docs 3.2.8; fetched 2026-10-30) — <https://docs.adcontextprotocol.org/dist/docs/3.2.8/building/by-layer/L1/security.md>\n21. Ronan Shields (Digiday), *WTF is Ad Context Protocol (AdCP)?* (published 2025-10-15; modified 2025-10-23) — <https://digiday.com/media-buying/wtf-ad-context-protocol/>\n22. A. Backman (Amazon), J. Richer (Bespoke Engineering), and M. Sporny (Digital Bazaar), *RFC 9421: HTTP Message Signatures* (February 2024) — <https://www.rfc-editor.org/rfc/rfc9421.html>\n23. Model Context Protocol, *Specification* (2026-07-28) — <https://modelcontextprotocol.io/specification/2026-07-28>\n24. A2A Protocol (The Linux Foundation), *Agent2Agent (A2A) Protocol Specification* (copyright 2026; fetched 2026-10-30) — <https://a2a-protocol.org/latest/specification/>\n25. IAB Tech Lab, *AAMP Agentic Advertising Management Protocols* (published 2026-02-26; modified 2026-10-27) — <https://iabtechlab.com/standards/aamp-agentic-advertising-management-protocols/>\n26. IAB Tech Lab, *Clarifying the AAMP Scope: Why So Many AAMP vs. AdCP Comparisons Miss the Mark* (published 2026-08-19; modified 2026-08-19) — <https://iabtechlab.com/clarifying-the-aamp-scope-why-so-many-aamp-vs-adcp-comparisons-miss-the-mark/>\n27. IAB Tech Lab, *IAB Tech Lab Announces Agentic Real Time Framework (ARTF) v1.0 for Public Comment* (published 2025-11-13; modified 2026-03-20) — <https://iabtechlab.com/press-releases/iab-tech-lab-announces-agentic-rtb-framework-artf-v1-0-for-public-comment/>\n28. IAB Tech Lab (IABTechLab), *Agentic Real Time Framework* (fetched 2026-10-31) — <https://github.com/IABTechLab/agentic-real-time-framework>\n29. Talpa Media, *adagents.json* (fetched 2026-10-30) — <https://kijk.nl/.well-known/adagents.json>\n30. PubMatic, *PubMatic Launches AgenticOS, the Operating System for Agentic Advertising* (published 2026-01-05; modified 2026-01-05) — <https://pubmatic.com/news/pubmatic-launches-agenticos-the-operating-system-for-agent-to-agent-advertising/>\n31. Prebid.org, *Prebid Sales Agent* (fetched 2026-10-30) — <https://raw.githubusercontent.com/prebid/salesagent/main/README.md>\n32. Anthony Vargas (AdExchanger), *Prebid Takes Over AdCP's Code For Creating Sell-Side AI Agents* (published 2026-01-29; modified 2026-02-04) — <https://www.adexchanger.com/publishers/prebid-takes-over-adcps-code-for-creating-sell-side-ai-agents/>\n33. Prebid.org, *salesagent repository* (pushed 2026-10-28; fetched 2026-10-30) — <https://github.com/prebid/salesagent>\n34. AgenticAdvertising.org, *Registry stats* (fetched 2026-10-30) — <https://agenticadvertising.org/api/registry/stats>\n35. Ad Context Protocol, *AAO Directory API, agent and publisher inverse lookup (docs 3.2.6)* (docs 3.2.6) — <https://docs.adcontextprotocol.org/dist/docs/3.2.6/aao/directory-api>\n36. AdCP Community, *@adcp/sdk* (16.6.1 published 2026-10-29; fetched 2026-10-30) — <https://registry.npmjs.org/@adcp/sdk>\n37. AdCP Community, *@adcp/client* (deprecated; fetched 2026-10-30) — <https://registry.npmjs.org/@adcp/client>\n38. AdCP Community, *adcp* (9.3.1 uploaded 2026-10-29; fetched 2026-10-30) — <https://pypi.org/pypi/adcp/json>\n39. adcontextprotocol, *adcp-go* (pushed 2026-10-30; fetched 2026-10-30) — <https://github.com/adcontextprotocol/adcp-go>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "TAP",
   "adoption": {
    "level": "observed",
    "by": "Visa, Cloudflare, Akamai, and Cleverbridge",
    "probe_run": null
   },
   "aliases": [
    "Trusted Agent Protocol",
    "Visa Trusted Agent Protocol"
   ],
   "analog": "Signed merchant/client verification layered on card-network trust",
   "collisions": [],
   "discovery": {
    "mechanism": "Signed HTTP request headers (Signature-Input and Signature per RFC 9421) sent by the agent, verified by the merchant or its CDN against Visa's published agent key store",
    "path": "In request headers sent by the agent, not on the merchant's site, so a merchant's use cannot be seen from outside. Merchant side: \"The core of the protocol is simple: a trusted agent will include a message signature in its request to your server. A merchant's primary task is to validate this signature.\""
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://developer.visa.com/docs/trusted-agent-protocol/trusted-agent-protocol-specifications",
     "claim": "Visa, *Trusted Agent Protocol specifications*, checked 2026-10-30",
     "date": null,
     "quote": "The Agent recognition signature is based on the HTTP Message Signatures defined by RCF 9421 [and aligned with web-bot-auth] and offers a secure, standardized, and verifiable way to ensure the legitimacy of clients (bots, agents, or any automated traffic) and the integrity of their requests. / By accessing, downloading, or using this specification, you agree to the terms and conditions outlined in the Visa Trusted Agent Protocol Product Terms. / The trust model described hereunder is comprised of three distinct signatures. / The Agent recognition signature is based on the HTTP Message Signatures defined by RCF 9421 [and aligned with web-bot-auth] / Will contain the value of agent-browser-auth or agent-payer-auth based on the type of interaction / An Agentic Consumer Recognition Object is provided in the message request body and contains consumer recognition data and a signature that links the content provided in the object to the message signature. / An Agentic Payment Container object is provided in the message request body and contains payment data and a signature that links the content provided in the object to the message signature. / The ID Token is a JSON Web Token (JWT) in line with RFC 7519 and compatible with an OpenID Connect ID Token. The Visa implementation of the ID Token is digitally signed by Visa. / material: Signature-Input: sig2=(\"@authority\" \"@path\"); created=1735689600; expires=1735693200; keyId=\"poqkLGiymh_W0uP6PZFw-dvez3QJT5SolqXBCW38r0U\"; alg=\"Ed25519\"; nonce= / this protocol is applicable to the scenario when the Agent is initially unknown to the Merchant. / confuse these Agent interactions with bots (web crawlers, etc.) or nefarious actors that could be attempting to degrade the Merchant services, be a product reseller of limited-edition releases, or be trying to actively attack the Merchant property. / Traditional bot detection often relies on IP addresses or adding content to other HTTP header fields. HTTP message signatures are specifically intended to provide cryptographic assurance of origin. / a more efficient mechanism is to provide linked, verifiable, purpose-identifying, and time-based signed credentials in the headers and/or in the request body of messages / These validation processes can be performed independently by the Merchant or by a Site Protection Provider on behalf of the Merchant. / Each of these signatures can be ignored by Merchants that do not adopt, or have not yet adopted, this mechanism. / Merchants are not required to use this proposal and do not necessarily have to be registered with the Payment Schemes to accept these payment credentials. / the only expectation in regard to this proposal is that these entities will pass through [to the Merchant] any message signatures and query parameters provided by the Agents.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://developer.visa.com/docs/trusted-agent-protocol",
     "claim": "Visa, *Trusted Agent Protocol — Getting Started*, checked 2026-10-30",
     "date": null,
     "quote": "This content is provided for merchants and infrastructure providers who want to securely recognize and transact with Visa-approved AI agents. / Protocol Getting started Merchant specifications Product terms Visa Consent Management Service Visa DCVV2 Generate / from the request and then use the agent's public key to verify the signature.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://investor.visa.com/news/news-details/2025/Visa-Introduces-Trusted-Agent-Protocol-An-Ecosystem-Led-Framework-for-AI-Commerce/default.aspx",
     "claim": "Visa, *Visa Introduces Trusted Agent Protocol: An Ecosystem-Led Framework for AI Commerce*, 2025-10-14; checked 2026-10-29",
     "date": null,
     "quote": "With the release of this protocol – developed in collaboration with Cloudflare – Visa reinforces its commitment to supporting safer and more seamless interactions / Trusted Agent Protocol is available today in the Visa Developer Center and GitHub. / In developing this protocol, we have received insightful feedback from other early partners including Adyen, Ant International, Checkout.com, Coinbase, CyberSource, Elavon, Fiserv, Microsoft, Nuvei, Shopify, Stripe and Worldpay.",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://raw.githubusercontent.com/visa/trusted-agent-protocol/main/LICENSE.md",
     "claim": "visa/trusted-agent-protocol, *LICENSE.md*, checked 2026-10-29",
     "date": null,
     "quote": "By using, downloading, or installing this code, you agree to the terms and conditions contained in the Visa Developer Center Terms of Use / By using, downloading, or installing this code, you agree to the terms and conditions contained in the Visa Developer Center Terms of Use (including the related Visa Trusted Agent Protocol Product Terms).",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://developer.visa.com/docs/trusted-agent-protocol/product-terms",
     "claim": "Visa Developer, *Trusted Agent Protocol product terms*, 2025-10-10; checked 2026-10-29",
     "date": null,
     "quote": "Available for use by: Merchants Independent developers October 10, 2025 The following Visa Product Terms apply to You / Visa Developer Center Terms of Use (the \"\\u003Cstrong>Agreement\\u003C\\u002Fstrong>\") and these Visa Product Terms. All / Product Terms - Trusted Agent Protocol try{var",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://github.com/visa/trusted-agent-protocol",
     "claim": "GitHub REST API, *visa/trusted-agent-protocol*, checked 2026-10-29",
     "date": null,
     "quote": "\"created_at\": \"2025-10-10T02:05:59Z\", \"updated_at\": \"2026-10-28T16:38:18Z\", \"pushed_at\": \"2025-10-28T22:43:43Z\" / \"spdx_id\": \"NOASSERTION\" / \"https://api.github.com/repos/visa/trusted-agent-protocol/assignees{/user}\", \"branches_url\": \"https://api.github.com/repos/visa/trusted-agent-protocol/branches{/branch}\", \"tags_url\": / \"deployments_url\": \"https://api.github.com/repos/visa/trusted-agent-protocol/deployments\", \"created_at\": \"2025-10-10T02:05:59Z\", \"updated_at\": \"2026-10-28T16:38:18Z\", \"pushed_at\": \"2025-10-28T22:43:43Z\",",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://www.cloudflare.com/press/press-releases/2025/cloudflare-collaborates-with-leading-payments-companies-to-secure-and-enable-agentic-commerce/",
     "claim": "Cloudflare, *Cloudflare Collaborates with Leading Payments Companies to Secure and Enable Agentic Commerce*, 2025-10-14; checked 2026-10-29",
     "date": null,
     "quote": "framework together: Adyen, Checkout.com, Circle, Fiserv, Microsoft, Nuvei, Shopify, Webflow, and Worldpay. Securing Agent-to-Merchant",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://blog.cloudflare.com/secure-agentic-commerce/",
     "claim": "Rohin Lohe and Will Allen (Cloudflare Blog), *Securing agentic commerce: helping AI Agents transact with Visa and Mastercard*, 2025-10-24; checked 2026-10-29",
     "date": null,
     "quote": "of agentic commerce. https://blog.cloudflare.com/_emdash/api/media/file/01KW45N60SVQNJ5GQ4DJ0W85SX.png article Securing agentic commerce: helping AI Agents transact with Visa / Securing agentic commerce: helping AI Agents transact with Visa / signedRequestHeaders = new Headers(request.headers); signedRequestHeaders.set('Host', new URL(targetUrl).hostname); signedRequestHeaders.set('Signature-Input', signatureHeaders.get('Signature-Input')); / If the agent is browsing, the tag should be agent-browser-auth. If the agent is paying, the tag should be agent-payer-auth. / Both Trusted Agent Protocol and Agent Pay leverage Web Bot Auth as the agent authentication layer to allow networks like Cloudflare to verify traffic from AI shopping agents that register with a payment network.",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://raw.githubusercontent.com/visa/trusted-agent-protocol/main/agent-registry/README.md",
     "claim": "visa/trusted-agent-protocol, *agent-registry/README.md*, checked 2026-10-29",
     "date": null,
     "quote": "Sample service for managing TAP (Trusted Agent Protocol) agents and their public keys, demonstrating RFC 9421 signature verification. / The Agent Registry supports multiple keys per agent, enabling key rotation and multi-algorithm support.",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://www.rfc-editor.org/rfc/rfc9421.html",
     "claim": "A. Backman, Ed., J. Richer, Ed., and M. Sporny (IETF), *RFC 9421: HTTP Message Signatures*, published February 2024",
     "date": null,
     "quote": "<meta content=\"Common,Latin\" name=\"scripts\">",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://www.rfc-editor.org/rfc/rfc7519.html",
     "claim": "M. Jones, J. Bradley, and N. Sakimura (IETF), *RFC 7519: JSON Web Token (JWT)*, published May 2015",
     "date": null,
     "quote": "JSON Web Token (JWT) is a compact, URL-safe means of representing",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://datatracker.ietf.org/doc/rfc9421/",
     "claim": "IETF Datatracker, *HTTP Message Signatures (RFC 9421)*, Proposed Standard (February 2024); checked 2026-10-30",
     "date": null,
     "quote": "RFC - Proposed Standard (February 2024)",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-webbotauth-httpsig-protocol/",
     "claim": "IETF Datatracker, *draft-ietf-webbotauth-httpsig-protocol — HTTP Message Signatures for automated traffic (IETF Datatracker)*, current tracker, checked 2026-10-30 (latest revision -01 dated 2026-10-29)",
     "date": null,
     "quote": "WG state WG Document",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://www.ietf.org/archive/id/draft-meunier-webbotauth-registry-04.txt",
     "claim": "M. Guerreiro (Cloudflare), U. Kirazci (Amazon), and T. Meunier (Cloudflare), *Registry and Signature Agent card for Web bot auth (draft-meunier-webbotauth-registry-04)*, checked 2026-10-30",
     "date": null,
     "quote": "https://www.ietf.org/mailman/listinfo/web-bot-auth/. Source for this draft and an issue tracker can be found at https://github.com/thibmeu/draft-meunier-webbotauth-registry.",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/specification.md",
     "claim": "Google (google-agentic-commerce), *Agentic Payment Protocol (v0.2)*, fetched 2026-10-30",
     "date": null,
     "quote": "Agentic Payment Protocol (v0.2)",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://www.linuxfoundation.org/press/linux-foundation-announces-operational-launch-of-x402-foundation-to-standardize-internet-native-payments-for-ai-agents-and-applications",
     "claim": "Linux Foundation, *Linux Foundation Announces Operational Launch of x402 Foundation to Standardize Internet-Native Payments for AI Agents and Applications*, July 14, 2026",
     "date": null,
     "quote": "SAN FRANCISCO, July 14, 2026 – The Linux Foundation , the nonprofit organization enabling mass innovation through open source, today announced the operational launch of the x402 Foundation",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://investor.visa.com/news/news-details/2025/Akamai-and-Visa-Collaborate-to-Build-Trust-in-Agentic-Commerce/default.aspx",
     "claim": "Akamai and Visa, *Akamai and Visa Collaborate to Build Trust in Agentic Commerce*, 2025-12-17; checked 2026-10-29",
     "date": null,
     "quote": "Through its integration of Visa's Trusted Agent Protocol with Akamai's edge-based behavioral intelligence, user recognition, and bot and abuse protection, the companies will deliver the identity, authentication, and fraud controls required to let merchants confidently welcome AI agents with commerce intent into their digital storefronts.",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://grow.cleverbridge.com/news/cleverbridge-visa-trusted-agent-protocol",
     "claim": "Cleverbridge, *Cleverbridge Among First to Enable Visa's Trusted Agent Protocol*, 2026-07-02; checked 2026-10-29",
     "date": null,
     "quote": "Cleverbridge is one of the first merchants to take advantage of these capabilities, allowing it to distinguish trusted agents from unknown or unverified traffic and define how approved agents can access its platform and product information — all within existing risk and control frameworks.",
     "ref": 18
    }
   ],
   "form": "http-header",
   "governance": "Visa alone, under its own terms: \"By accessing, downloading, or using this specification, you agree to the terms and conditions outlined in the Visa Trusted Agent Protocol Product Terms.\"; the sample code is under the Visa Developer Center Terms of Use: \"By using, downloading, or installing this code, you agree to the terms and conditions contained in the Visa Developer Center Terms of Use\". It is not the work of a standards body; Visa states only an intent: \"We are committed to aligning closely with global standards bodies like IETF, OpenID Foundation and EMVCo.\"",
   "group": null,
   "hatnote_md": "This page is about Visa's Trusted Agent Protocol (TAP), with which an AI agent proves its identity and authorization to merchants by signing its requests. It is not [Web Bot Auth](/protocols/webbotauth/), the IETF work on signed bot traffic, nor [HTTP Message Signatures](/protocols/http-message-signatures/) (RFC 9421); TAP builds its agent signature on both: \"The Agent recognition signature is based on the HTTP Message Signatures defined by RCF 9421 [sic] [and aligned with web-bot-auth] and offers a secure, standardized, and verifiable way to ensure the legitimacy of clients (bots, agents, or any automated traffic) and the integrity of their requests.\" It is not Mastercard Agent Pay, Mastercard's separate program, which also uses Web Bot Auth: \"Both Trusted Agent Protocol and Agent Pay leverage Web Bot Auth as the agent authentication layer to allow networks like Cloudflare to verify traffic from AI shopping agents that register with a payment network.\" It is not Visa Intelligent Commerce, Visa's wider agentic payments platform, into which Visa is incorporating TAP. It is also not [EMV agentic payments](/protocols/emv-agentic-payments/), the [Agent Payments Protocol (AP2)](/protocols/ap2/), the [Agentic Commerce Protocol (ACP)](/protocols/agentic-commerce-protocol/), [x402](/protocols/x402/), the [Universal Commerce Protocol (UCP)](/protocols/ucp/) or the [Machine Payments Protocol (MPP)](/protocols/mpp/), which are separate specifications. Visa says TAP will complement ACP and align with x402, and that its Intelligent Commerce Connect accepts payments made through TAP, MPP, ACP and UCP.",
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against Visa's live merchant specification page and the 2025-10-14 launch announcement"
    },
    {
     "date": "2026-10-29",
     "note": "Re-verified record against 24 primary, vendor, and coverage sources."
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "tap",
   "implementation": "multi-implementation",
   "last_verified": "2026-11-12",
   "name": "Trusted Agent Protocol (TAP)",
   "native_status": "Published specification plus a sample implementation: \"Trusted Agent Protocol is available today in the Visa Developer Center and GitHub.\" The repository holds a sample agent, merchant, CDN proxy and Agent Registry",
   "origin": {
    "date": "2025-10-14",
    "org": "Visa, with Cloudflare"
   },
   "part_of": null,
   "parties": [
    "agent-site",
    "agent-payment"
   ],
   "phase": "candidate",
   "probe": {
    "method": "GET",
    "on_absent": "The referenced key cannot be retrieved, so the agent-recognition signature or Visa ID Token cannot be verified",
    "parse": "200 response body is a JWK object (kty, kid, use, alg, and RSA/EC key material) matching the keyID used to sign the agent's request or the Visa-issued ID Token",
    "path": "https://{tap-key-service}/keys?keyID={kid}"
   },
   "question": "How does a merchant recognize that an approved commerce agent, rather than a crawler or fraudulent bot, is interacting with its site or API?",
   "scope": "commerce",
   "spec_url": "https://developer.visa.com/docs/trusted-agent-protocol/trusted-agent-protocol-specifications",
   "step": "identify",
   "summary_md": "**Trusted Agent Protocol** (`TAP`) is a specification developed by Visa in collaboration with Cloudflare for merchants and infrastructure providers who want to securely recognize and transact with Visa-approved AI agents. Access, download, or use of the specification is governed by the Visa Trusted Agent Protocol Product Terms, while the sample repository code is governed by the Visa Developer Center Terms of Use. The trust model comprises three distinct signatures across the message header and request body. In the HTTP header, the agent recognition signature uses RFC 9421 `Signature-Input` and `Signature` fields aligned with `web-bot-auth`, carrying `tag` values `agent-browser-auth` or `agent-payer-auth`. In the request body, the agent may include a signed `agenticConsumer` object carrying a Visa-signed RFC 7519 `ID Token` JWT and a signed `agenticPaymentContainer` object linked to the header signature by `nonce` and `kid`. The specification page carries no version number, the Product Terms are dated October 10, 2025, and Visa announced the protocol on October 14, 2025. The `visa/trusted-agent-protocol` repository was created on `2025-10-10` with license `NOASSERTION` and pushed on `2025-10-28`.",
   "track": "single-vendor",
   "version": {
    "date": null,
    "label": "None numbered"
   },
   "watch": [
    {
     "type": "page",
     "url": "https://developer.visa.com/docs/trusted-agent-protocol/trusted-agent-protocol-specifications",
     "selector": "main",
     "cadence": "weekly"
    },
    {
     "type": "github",
     "repo": "visa/trusted-agent-protocol",
     "mode": "tag"
    },
    {
     "type": "page",
     "url": "https://developer.visa.com/docs/trusted-agent-protocol",
     "selector": "main"
    }
   ],
   "use_cases": [
    "prove-agent-identity",
    "agent-checkout",
    "attribute-agent-traffic"
   ],
   "audience": [
    "site-owner",
    "platform",
    "agent-builder"
   ],
   "pairs_with": [
    "http-message-signatures",
    "webbotauth",
    "web-bot-auth-signature-agent-card",
    "ap2",
    "x402"
   ],
   "prerequisites": [
    "http-message-signatures",
    "webbotauth"
   ],
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "This page is about Visa's Trusted Agent Protocol (TAP), with which an AI agent proves its identity and authorization to merchants by signing its requests. It is not [Web Bot Auth](/protocols/webbotauth/), the IETF work on signed bot traffic, nor [HTTP Message Signatures](/protocols/http-message-signatures/) (RFC 9421); TAP builds its agent signature on both: \"The Agent recognition signature is based on the HTTP Message Signatures defined by RCF 9421 [sic] [and aligned with web-bot-auth] and offers a secure, standardized, and verifiable way to ensure the legitimacy of clients (bots, agents, or any automated traffic) and the integrity of their requests.\" It is not Mastercard Agent Pay, Mastercard's separate program, which also uses Web Bot Auth: \"Both Trusted Agent Protocol and Agent Pay leverage Web Bot Auth as the agent authentication layer to allow networks like Cloudflare to verify traffic from AI shopping agents that register with a payment network.\" It is not Visa Intelligent Commerce, Visa's wider agentic payments platform, into which Visa is incorporating TAP. It is also not [EMV agentic payments](/protocols/emv-agentic-payments/), the [Agent Payments Protocol (AP2)](/protocols/ap2/), the [Agentic Commerce Protocol (ACP)](/protocols/agentic-commerce-protocol/), [x402](/protocols/x402/), the [Universal Commerce Protocol (UCP)](/protocols/ucp/) or the [Machine Payments Protocol (MPP)](/protocols/mpp/), which are separate specifications. Visa says TAP will complement ACP and align with x402, and that its Intelligent Commerce Connect accepts payments made through TAP, MPP, ACP and UCP. [1]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Trusted Agent Protocol** (`TAP`) is a specification developed by Visa in collaboration with Cloudflare for merchants and infrastructure providers who want to securely recognize and transact with Visa-approved AI agents. [2][3] Access, download, or use of the specification is governed by the Visa Trusted Agent Protocol Product Terms, while the sample repository code is governed by the Visa Developer Center Terms of Use. [1][4] The trust model comprises three distinct signatures across the message header and request body. [1] In the HTTP header, the agent recognition signature uses RFC 9421 `Signature-Input` and `Signature` fields aligned with `web-bot-auth`, carrying `tag` values `agent-browser-auth` or `agent-payer-auth`. [1] In the request body, the agent may include a signed `agenticConsumer` object carrying a Visa-signed RFC 7519 `ID Token` JWT and a signed `agenticPaymentContainer` object linked to the header signature by `nonce` and `kid`. [1] The specification page carries no version number, the Product Terms are dated October 10, 2025, and Visa announced the protocol on October 14, 2025. [3][5] The `visa/trusted-agent-protocol` repository was created on `2025-10-10` with license `NOASSERTION` and pushed on `2025-10-28`. [6]",
   "v05_identity_sentence_md": "**Trusted Agent Protocol** (`TAP`) is a specification developed by Visa in collaboration with Cloudflare for merchants and infrastructure providers who want to securely recognize and transact with Visa-approved AI agents. [2][3] Access, download, or use of the specification is governed by the Visa Trusted Agent Protocol Product Terms, while the sample repository code is governed by the Visa Developer Center Terms of Use. [1][4]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Identify](/category/identify/) (`identify`)"
    },
    {
     "label": "Form",
     "value_md": "HTTP header (`http-header`)"
    },
    {
     "label": "Originated by",
     "value_md": "Visa Inc. with Cloudflare; early partner feedback from Adyen, Ant International, Checkout.com, Coinbase, CyberSource, Elavon, Fiserv, Microsoft, Nuvei, Shopify, Stripe, and Worldpay [3][7][8]"
    },
    {
     "label": "Governed by",
     "value_md": "Visa Inc. under Visa Trusted Agent Protocol Product Terms and Developer Center Terms of Use; stated intent to align with IETF, OpenID Foundation, and EMVCo [1][4][5]"
    },
    {
     "label": "Track",
     "value_md": "Single-vendor / payment-network specification (Visa Inc., with Cloudflare) [1][8]"
    },
    {
     "label": "Status",
     "value_md": "Published specification plus a sample implementation: \"Trusted Agent Protocol is available today in the Visa Developer Center and GitHub.\" The repository holds a sample agent, merchant, CDN proxy and Agent Registry [1][5][6]"
    },
    {
     "label": "Version",
     "value_md": "Unnumbered specification (Product Terms `2025-10-10`, launch `2025-10-14`); `visa/trusted-agent-protocol` has `0` releases, `0` tags, and `6` commits (`2025-10-12` to `2025-10-28` UTC) [1][5][6]"
    },
    {
     "label": "Wire format",
     "value_md": "RFC 9421 Structured Field headers (`Signature-Input`, `Signature`), JSON body containers (`agenticConsumer`, `agenticPaymentContainer`), RFC 7519/7515 JWT/JWS (`JWT+ext.id_token`), and RFC 7517 `JWK` [1][8][9]"
    },
    {
     "label": "Specification",
     "value_md": "[Trusted Agent Protocol Specifications](https://developer.visa.com/docs/trusted-agent-protocol/trusted-agent-protocol-specifications) · [Getting Started](https://developer.visa.com/docs/trusted-agent-protocol) · [Product Terms](https://developer.visa.com/docs/trusted-agent-protocol/product-terms) · [visa/trusted-agent-protocol](https://github.com/visa/trusted-agent-protocol) [1][2][5]"
    },
    {
     "label": "Found at",
     "value_md": "Headers `Signature-Input: sig2=(\"@authority\" \"@path\"); ...` with `tag=\"agent-browser-auth\"` or `tag=\"agent-payer-auth\"` and `Signature: sig2=:...:`, verified via `GET /keys?keyID={kid}` (or `GET /keys/{key_id}` in `agent-registry`) [1][8][9]"
    },
    {
     "label": "Licence",
     "value_md": "Proprietary evaluation/implementation license under Visa Product Terms (`2025-10-10`) and Developer Center Terms (`NOASSERTION` on GitHub) [1][5][6]"
    }
   ],
   "v05_problem_md": "The protocol applies when an agent with consumer-directed commerce intent is initially unknown to the merchant. [1] Without a recognition mechanism, merchants or their Site Protection Providers could confuse agent interactions with web crawlers, product resellers of limited-edition releases, or actors attempting to degrade or attack merchant services, while IP addresses and header fields lack cryptographic assurance of origin. [1] Instead of relying on user-agent headers, IP allow-listing, or shared keys, the agent provides linked, verifiable, purpose-identifying, and time-based signed credentials in the headers and request body. [1] Validation can be performed independently by the merchant or by a Site Protection Provider on the merchant's behalf using public keys retrieved from a Key Store. [1] Each signature can be ignored by merchants that do not adopt the mechanism, and merchants do not necessarily have to be registered with Payment Schemes to accept the payment credentials. [1] When Checkout Enablers are used, the only expectation in the specification is that they pass through any message signatures and query parameters provided by the agents. [1]",
   "v05_mechanism_delta_md": "Instead of relying on user-agent headers, IP allow-listing, or shared keys, the agent provides linked, verifiable, purpose-identifying, and time-based signed credentials in the headers and request body. [1] Validation can be performed independently by the merchant or by a Site Protection Provider on the merchant's behalf using public keys retrieved from a Key Store. [1]",
   "v05_scope_boundary_md": "Each signature can be ignored by merchants that do not adopt the mechanism, and merchants do not necessarily have to be registered with Payment Schemes to accept the payment credentials. [1] When Checkout Enablers are used, the only expectation in the specification is that they pass through any message signatures and query parameters provided by the agents. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "HTTP Message Signatures (RFC 9421)",
      "spec_or_rfc": "RFC 9421",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "TAP signs the agent HTTP request with RFC 9421 using the signature tag agent-browser-auth or agent-payer-auth. [1][10]"
     },
     {
      "name": "JSON Web Token (JWT, RFC 7519)",
      "spec_or_rfc": "RFC 7519",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "Visa signs an ID Token JWT that travels with that request, and the merchant checks Visa's signature on the JWT. [1][11]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "http-message-signatures",
      "target_name": "HTTP Message Signatures",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "The request signature uses RFC 9421 Signature and Signature-Input, restricted to TAP's agent-browser-auth or agent-payer-auth tag. [1][12]"
     },
     {
      "target_id": "webbotauth",
      "target_name": "Web Bot Auth",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "TAP Layer 1 agent recognition is based on the HTTP Message Signatures defined by RFC 9421 (`RCF 9421` in the specification text) and aligned with `web-bot-auth`, using signature tag `agent-browser-auth` or `agent-payer-auth`. [1][13]"
     },
     {
      "target_id": "web-bot-auth-signature-agent-card",
      "target_name": "Signature Agent Card (Web Bot Auth registry)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "A Signature Agent Card publishes the bot's own keys, while TAP's ID Token is a Visa-signed JWT carried on the request. [1][14]"
     },
     {
      "target_id": "ap2",
      "target_name": "Agent Payments Protocol (AP2)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "AP2 carries checkout and payment mandates for a purchase, while TAP authenticates the agent HTTP call to the merchant with the message signature and Visa ID Token. [1][15]"
     },
     {
      "target_id": "x402",
      "target_name": "x402",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "x402 settles an HTTP 402 payment, while TAP recognizes the agent with an RFC 9421 signature tagged agent-browser-auth or agent-payer-auth and a Visa-signed JWT. [1][16]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (4 probed or cited examples; non-exhaustive).",
    "side_a": {
     "visible": true,
     "heading": "Issuers, signers & metadata publishers",
     "col4_header": "Boundary & Format",
     "note_md": null,
     "rows": [
      {
       "actor": "Visa",
       "role": "Identity issuer / CA",
       "status": "Supported",
       "status_display": "Supported · as of 2025-10-24",
       "col4_md": "Three signatures. The agent-recognition signature is HTTP Message Signatures (RFC 9421), aligned with Web Bot Auth. The tag is `agent-browser-auth` or `agent-payer-auth`. A public key associated with Visa means the agent is in Visa Intelligent Commerce. The ID Token is an OpenID Connect-compatible JWT (RFC 7519) digitally signed by Visa. The specification says Visa will host a well-known URL for its keys. Cloudflare's 2025-10-24 post says Visa hosts a directory of Visa-registered agents.",
       "source_md": "[TAP specification](https://developer.visa.com/docs/trusted-agent-protocol/trusted-agent-protocol-specifications) [1] · [Cloudflare on TAP tags](https://blog.cloudflare.com/secure-agentic-commerce/) [2][8]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Verifiers, WAFs & relying servers",
     "col4_header": "Boundary & Format",
     "note_md": null,
     "rows": [
      {
       "actor": "Cloudflare",
       "role": "CDN / WAF verifier",
       "status": "Supported",
       "status_display": "Supported · as of 2025-10-24",
       "col4_md": "Merchants set the rules and use Cloudflare as the validator. TAP uses Web Bot Auth so Cloudflare can verify agents that registered with the payment network. Browsing signatures use tag `agent-browser-auth`. Payment signatures use tag `agent-payer-auth`. Post dated 2025-10-24.",
       "source_md": "[Securing agentic commerce](https://blog.cloudflare.com/secure-agentic-commerce/) [8]"
      },
      {
       "actor": "Akamai",
       "role": "CDN / WAF verifier",
       "status": "Supported",
       "status_display": "Supported · as of 2025-12-17",
       "col4_md": "Joint announcement of 2025-12-17: Trusted Agent Protocol is supported across Akamai Cloud, with Akamai's edge user recognition and bot and abuse protection, to establish the agent and the person the agent represents.",
       "source_md": "[Akamai and Visa](https://investor.visa.com/news/news-details/2025/Akamai-and-Visa-Collaborate-to-Build-Trust-in-Agentic-Commerce/default.aspx) [17]"
      },
      {
       "actor": "Cleverbridge",
       "role": "Relying server / Gateway",
       "status": "Supported",
       "status_display": "Supported · as of 2026-07-02",
       "col4_md": "Cleverbridge's 2026-07-02 announcement says it is enabling and testing TAP and the Agentic Directory so the commerce platform can separate trusted agents from other traffic and set how approved agents reach the catalog and product data.",
       "source_md": "[Cleverbridge and TAP](https://grow.cleverbridge.com/news/cleverbridge-visa-trusted-agent-protocol) [18]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "agentic-commerce-protocol",
     "target_name": "Agentic Commerce Protocol",
     "relation_label": "Complements",
     "delta": "TAP signs with HTTP message signatures to prove agent's payment-scheme participation. ACP Delegate Payment issues a delegated vault token; Stripe shared payment tokens grant scoped access for agent-initiated purchases.",
     "item_md": "**[Agentic Commerce Protocol](/protocols/agentic-commerce-protocol/)** (Complements) — TAP signs with HTTP message signatures to prove agent's payment-scheme participation. ACP Delegate Payment issues a delegated vault token; Stripe shared payment tokens grant scoped access for agent-initiated purchases."
    },
    {
     "target_id": "ap2-checkout-mandate",
     "target_name": "AP2 Checkout Mandate",
     "relation_label": "Complements",
     "delta": "TAP checks an agent by a signature on the merchant request, while the checkout mandate is the user-signed Checkout Mandate, produced on a Trusted Surface, over one merchant checkout.",
     "item_md": "**[AP2 Checkout Mandate](/protocols/ap2-checkout-mandate/)** (Complements) — TAP checks an agent by a signature on the merchant request, while the checkout mandate is the user-signed Checkout Mandate, produced on a Trusted Surface, over one merchant checkout."
    },
    {
     "target_id": "emv-agentic-payments",
     "target_name": "EMV® Agentic Payments – Framework for Specifications",
     "relation_label": "Complements",
     "delta": "TAP's specifications require Signature-Input and a message signature on the HTTP message, which Visa describes as HTTP Message Signatures that provide cryptographic assurance of origin. EMVCo's draft introduces Intent Services and describes ecosystem roles and data fields, and Boston Identity's review says the draft prescribes no protocol.",
     "item_md": "**[EMV® Agentic Payments – Framework for Specifications](/protocols/emv-agentic-payments/)** (Complements) — TAP's specifications require Signature-Input and a message signature on the HTTP message, which Visa describes as HTTP Message Signatures that provide cryptographic assurance of origin. EMVCo's draft introduces Intent Services and describes ecosystem roles and data fields, and Boston Identity's review says the draft prescribes no protocol."
    },
    {
     "target_id": "amp-ant",
     "target_name": "Agentic Mobile Protocol (AMP)",
     "relation_label": "Complements",
     "delta": "TAP identifies an agent by a signature on the merchant HTTP request, while AMP's agent binding is the Agent ID from Alipay+ Know Your Agent onboarding and the SD-JWT mandate that precedes the CGCP Payment Token.",
     "item_md": "**[Agentic Mobile Protocol (AMP)](/protocols/amp-ant/)** (Complements) — TAP identifies an agent by a signature on the merchant HTTP request, while AMP's agent binding is the Agent ID from Alipay+ Know Your Agent onboarding and the SD-JWT mandate that precedes the CGCP Payment Token."
    },
    {
     "target_id": "kyapay-token",
     "target_name": "KYAPay Token",
     "relation_label": "Complements",
     "delta": "TAP identifies an agent by signing the merchant request, while a KYAPay card token is a JWT in the KYAPay-Token header whose card instrument is visa_vic or mastercard_scof.",
     "item_md": "**[KYAPay Token](/protocols/kyapay-token/)** (Complements) — TAP identifies an agent by signing the merchant request, while a KYAPay card token is a JWT in the KYAPay-Token header whose card instrument is visa_vic or mastercard_scof."
    },
    {
     "target_id": "x401",
     "target_name": "x401: HTTP Proof Requirement Protocol",
     "relation_label": "Peer alternative",
     "delta": "TAP authenticates the agent with an RFC 9421 signature tagged agent-browser-auth or agent-payer-auth and a Visa-signed JWT, while x401 asks the client to satisfy PROOF-REQUEST.",
     "item_md": "**[x401: HTTP Proof Requirement Protocol](/protocols/x401/)** (Peer alternative) — TAP authenticates the agent with an RFC 9421 signature tagged agent-browser-auth or agent-payer-auth and a Visa-signed JWT, while x401 asks the client to satisfy PROOF-REQUEST."
    },
    {
     "target_id": "kya-os",
     "target_name": "KYA-OS (Know Your Agent Operating System)",
     "relation_label": "Peer alternative",
     "delta": "TAP uses RFC 9421 agent-browser-auth or agent-payer-auth plus a Visa-signed JWT. KYA-OS uses a DID, VC chain, and detached JWS.",
     "item_md": "**[KYA-OS (Know Your Agent Operating System)](/protocols/kya-os/)** (Peer alternative) — TAP uses RFC 9421 agent-browser-auth or agent-payer-auth plus a Visa-signed JWT. KYA-OS uses a DID, VC chain, and detached JWS."
    },
    {
     "target_id": "vi",
     "target_name": "Verifiable Intent",
     "relation_label": "Complements",
     "delta": "TAP recognizes the agent with an RFC 9421 signature tagged agent-browser-auth or agent-payer-auth and a Visa-signed JWT, while Verifiable Intent is the SD-JWT consent chain for the purchase.",
     "item_md": "**[Verifiable Intent](/protocols/vi/)** (Complements) — TAP recognizes the agent with an RFC 9421 signature tagged agent-browser-auth or agent-payer-auth and a Visa-signed JWT, while Verifiable Intent is the SD-JWT consent chain for the purchase."
    },
    {
     "item_md": "**[Identify protocols](/category/identify/)** — Category index for `identify` standards."
    }
   ],
   "v05_compiled_md": "---\nid: tap\ntitle: \"Trusted Agent Protocol (TAP)\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: identify\nform: http-header\nwire_archetype: identity_auth_crypto\nspec_url: https://developer.visa.com/docs/trusted-agent-protocol/trusted-agent-protocol-specifications\nlast_checked: 2026-11-12\n---\n\n# Trusted Agent Protocol (TAP)\n\n**Category:** [Identify](/category/identify/) (`identify`) · **Form:** HTTP header (`http-header`) · **Last checked:** 2026-11-12\n\n> *This page is about Visa's Trusted Agent Protocol (TAP), with which an AI agent proves its identity and authorization to merchants by signing its requests. It is not [Web Bot Auth](/protocols/webbotauth/), the IETF work on signed bot traffic, nor [HTTP Message Signatures](/protocols/http-message-signatures/) (RFC 9421); TAP builds its agent signature on both: \"The Agent recognition signature is based on the HTTP Message Signatures defined by RCF 9421 [sic] [and aligned with web-bot-auth] and offers a secure, standardized, and verifiable way to ensure the legitimacy of clients (bots, agents, or any automated traffic) and the integrity of their requests.\" It is not Mastercard Agent Pay, Mastercard's separate program, which also uses Web Bot Auth: \"Both Trusted Agent Protocol and Agent Pay leverage Web Bot Auth as the agent authentication layer to allow networks like Cloudflare to verify traffic from AI shopping agents that register with a payment network.\" It is not Visa Intelligent Commerce, Visa's wider agentic payments platform, into which Visa is incorporating TAP. It is also not [EMV agentic payments](/protocols/emv-agentic-payments/), the [Agent Payments Protocol (AP2)](/protocols/ap2/), the [Agentic Commerce Protocol (ACP)](/protocols/agentic-commerce-protocol/), [x402](/protocols/x402/), the [Universal Commerce Protocol (UCP)](/protocols/ucp/) or the [Machine Payments Protocol (MPP)](/protocols/mpp/), which are separate specifications. Visa says TAP will complement ACP and align with x402, and that its Intelligent Commerce Connect accepts payments made through TAP, MPP, ACP and UCP. [1]*\n\n**Trusted Agent Protocol** (`TAP`) is a specification developed by Visa in collaboration with Cloudflare for merchants and infrastructure providers who want to securely recognize and transact with Visa-approved AI agents. [2][3] Access, download, or use of the specification is governed by the Visa Trusted Agent Protocol Product Terms, while the sample repository code is governed by the Visa Developer Center Terms of Use. [1][4] The trust model comprises three distinct signatures across the message header and request body. [1] In the HTTP header, the agent recognition signature uses RFC 9421 `Signature-Input` and `Signature` fields aligned with `web-bot-auth`, carrying `tag` values `agent-browser-auth` or `agent-payer-auth`. [1] In the request body, the agent may include a signed `agenticConsumer` object carrying a Visa-signed RFC 7519 `ID Token` JWT and a signed `agenticPaymentContainer` object linked to the header signature by `nonce` and `kid`. [1] The specification page carries no version number, the Product Terms are dated October 10, 2025, and Visa announced the protocol on October 14, 2025. [3][5] The `visa/trusted-agent-protocol` repository was created on `2025-10-10` with license `NOASSERTION` and pushed on `2025-10-28`. [6]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Identify](/category/identify/) (`identify`) |\n| **Form** | HTTP header (`http-header`) |\n| **Originated by** | Visa Inc. with Cloudflare; early partner feedback from Adyen, Ant International, Checkout.com, Coinbase, CyberSource, Elavon, Fiserv, Microsoft, Nuvei, Shopify, Stripe, and Worldpay [3][7][8] |\n| **Governed by** | Visa Inc. under Visa Trusted Agent Protocol Product Terms and Developer Center Terms of Use; stated intent to align with IETF, OpenID Foundation, and EMVCo [1][4][5] |\n| **Track** | Single-vendor / payment-network specification (Visa Inc., with Cloudflare) [1][8] |\n| **Status** | Published specification plus a sample implementation: \"Trusted Agent Protocol is available today in the Visa Developer Center and GitHub.\" The repository holds a sample agent, merchant, CDN proxy and Agent Registry [1][5][6] |\n| **Version** | Unnumbered specification (Product Terms `2025-10-10`, launch `2025-10-14`); `visa/trusted-agent-protocol` has `0` releases, `0` tags, and `6` commits (`2025-10-12` to `2025-10-28` UTC) [1][5][6] |\n| **Wire format** | RFC 9421 Structured Field headers (`Signature-Input`, `Signature`), JSON body containers (`agenticConsumer`, `agenticPaymentContainer`), RFC 7519/7515 JWT/JWS (`JWT+ext.id_token`), and RFC 7517 `JWK` [1][8][9] |\n| **Specification** | [Trusted Agent Protocol Specifications](https://developer.visa.com/docs/trusted-agent-protocol/trusted-agent-protocol-specifications) · [Getting Started](https://developer.visa.com/docs/trusted-agent-protocol) · [Product Terms](https://developer.visa.com/docs/trusted-agent-protocol/product-terms) · [visa/trusted-agent-protocol](https://github.com/visa/trusted-agent-protocol) [1][2][5] |\n| **Found at** | Headers `Signature-Input: sig2=(\"@authority\" \"@path\"); ...` with `tag=\"agent-browser-auth\"` or `tag=\"agent-payer-auth\"` and `Signature: sig2=:...:`, verified via `GET /keys?keyID={kid}` (or `GET /keys/{key_id}` in `agent-registry`) [1][8][9] |\n| **Licence** | Proprietary evaluation/implementation license under Visa Product Terms (`2025-10-10`) and Developer Center Terms (`NOASSERTION` on GitHub) [1][5][6] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [Adoption and ecosystem](#adoption-and-ecosystem)\n4. [See also](#see-also)\n5. [References](#references)\n\n---\n\n## Problem and scope\n\nThe protocol applies when an agent with consumer-directed commerce intent is initially unknown to the merchant. [1] Without a recognition mechanism, merchants or their Site Protection Providers could confuse agent interactions with web crawlers, product resellers of limited-edition releases, or actors attempting to degrade or attack merchant services, while IP addresses and header fields lack cryptographic assurance of origin. [1] Instead of relying on user-agent headers, IP allow-listing, or shared keys, the agent provides linked, verifiable, purpose-identifying, and time-based signed credentials in the headers and request body. [1] Validation can be performed independently by the merchant or by a Site Protection Provider on the merchant's behalf using public keys retrieved from a Key Store. [1] Each signature can be ignored by merchants that do not adopt the mechanism, and merchants do not necessarily have to be registered with Payment Schemes to accept the payment credentials. [1] When Checkout Enablers are used, the only expectation in the specification is that they pass through any message signatures and query parameters provided by the agents. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **HTTP Message Signatures (RFC 9421)** | `RFC 9421` | Profiles classic standard | TAP signs the agent HTTP request with RFC 9421 using the signature tag agent-browser-auth or agent-payer-auth. [1][10] |\n| **JSON Web Token (JWT, RFC 7519)** | `RFC 7519` | Profiles classic standard | Visa signs an ID Token JWT that travels with that request, and the merchant checks Visa's signature on the JWT. [1][11] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[HTTP Message Signatures](/protocols/http-message-signatures/)** | Builds on | The request signature uses RFC 9421 Signature and Signature-Input, restricted to TAP's agent-browser-auth or agent-payer-auth tag. [1][12] |\n| **[Web Bot Auth](/protocols/webbotauth/)** | Builds on | TAP Layer 1 agent recognition is based on the HTTP Message Signatures defined by RFC 9421 (`RCF 9421` in the specification text) and aligned with `web-bot-auth`, using signature tag `agent-browser-auth` or `agent-payer-auth`. [1][13] |\n| **[Signature Agent Card (Web Bot Auth registry)](/protocols/web-bot-auth-signature-agent-card/)** | Complements | A Signature Agent Card publishes the bot's own keys, while TAP's ID Token is a Visa-signed JWT carried on the request. [1][14] |\n| **[Agent Payments Protocol (AP2)](/protocols/ap2/)** | Complements | AP2 carries checkout and payment mandates for a purchase, while TAP authenticates the agent HTTP call to the merchant with the message signature and Visa ID Token. [1][15] |\n| **[x402](/protocols/x402/)** | Peer alternative | x402 settles an HTTP 402 payment, while TAP recognizes the agent with an RFC 9421 signature tagged agent-browser-auth or agent-payer-auth and a Visa-signed JWT. [1][16] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (4 probed or cited examples; non-exhaustive).*\n\n### Issuers, signers & metadata publishers\n\n| Actor | Role | Status | Boundary & Format | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Visa** | Identity issuer / CA | Supported · as of 2025-10-24 | Three signatures. The agent-recognition signature is HTTP Message Signatures (RFC 9421), aligned with Web Bot Auth. The tag is `agent-browser-auth` or `agent-payer-auth`. A public key associated with Visa means the agent is in Visa Intelligent Commerce. The ID Token is an OpenID Connect-compatible JWT (RFC 7519) digitally signed by Visa. The specification says Visa will host a well-known URL for its keys. Cloudflare's 2025-10-24 post says Visa hosts a directory of Visa-registered agents. | [TAP specification](https://developer.visa.com/docs/trusted-agent-protocol/trusted-agent-protocol-specifications) [1] · [Cloudflare on TAP tags](https://blog.cloudflare.com/secure-agentic-commerce/) [2][8] |\n\n### Verifiers, WAFs & relying servers\n\n| Actor | Role | Status | Boundary & Format | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Cloudflare** | CDN / WAF verifier | Supported · as of 2025-10-24 | Merchants set the rules and use Cloudflare as the validator. TAP uses Web Bot Auth so Cloudflare can verify agents that registered with the payment network. Browsing signatures use tag `agent-browser-auth`. Payment signatures use tag `agent-payer-auth`. Post dated 2025-10-24. | [Securing agentic commerce](https://blog.cloudflare.com/secure-agentic-commerce/) [8] |\n| **Akamai** | CDN / WAF verifier | Supported · as of 2025-12-17 | Joint announcement of 2025-12-17: Trusted Agent Protocol is supported across Akamai Cloud, with Akamai's edge user recognition and bot and abuse protection, to establish the agent and the person the agent represents. | [Akamai and Visa](https://investor.visa.com/news/news-details/2025/Akamai-and-Visa-Collaborate-to-Build-Trust-in-Agentic-Commerce/default.aspx) [17] |\n| **Cleverbridge** | Relying server / Gateway | Supported · as of 2026-07-02 | Cleverbridge's 2026-07-02 announcement says it is enabling and testing TAP and the Agentic Directory so the commerce platform can separate trusted agents from other traffic and set how approved agents reach the catalog and product data. | [Cleverbridge and TAP](https://grow.cleverbridge.com/news/cleverbridge-visa-trusted-agent-protocol) [18] |\n\n---\n\n## See also\n\n- **[Agentic Commerce Protocol](/protocols/agentic-commerce-protocol/)** *(Complements)* — TAP signs with HTTP message signatures to prove agent's payment-scheme participation. ACP Delegate Payment issues a delegated vault token; Stripe shared payment tokens grant scoped access for agent-initiated purchases.\n- **[AP2 Checkout Mandate](/protocols/ap2-checkout-mandate/)** *(Complements)* — TAP checks an agent by a signature on the merchant request, while the checkout mandate is the user-signed Checkout Mandate, produced on a Trusted Surface, over one merchant checkout.\n- **[EMV® Agentic Payments – Framework for Specifications](/protocols/emv-agentic-payments/)** *(Complements)* — TAP's specifications require Signature-Input and a message signature on the HTTP message, which Visa describes as HTTP Message Signatures that provide cryptographic assurance of origin. EMVCo's draft introduces Intent Services and describes ecosystem roles and data fields, and Boston Identity's review says the draft prescribes no protocol.\n- **[Agentic Mobile Protocol (AMP)](/protocols/amp-ant/)** *(Complements)* — TAP identifies an agent by a signature on the merchant HTTP request, while AMP's agent binding is the Agent ID from Alipay+ Know Your Agent onboarding and the SD-JWT mandate that precedes the CGCP Payment Token.\n- **[KYAPay Token](/protocols/kyapay-token/)** *(Complements)* — TAP identifies an agent by signing the merchant request, while a KYAPay card token is a JWT in the KYAPay-Token header whose card instrument is visa_vic or mastercard_scof.\n- **[x401: HTTP Proof Requirement Protocol](/protocols/x401/)** *(Peer alternative)* — TAP authenticates the agent with an RFC 9421 signature tagged agent-browser-auth or agent-payer-auth and a Visa-signed JWT, while x401 asks the client to satisfy PROOF-REQUEST.\n- **[KYA-OS (Know Your Agent Operating System)](/protocols/kya-os/)** *(Peer alternative)* — TAP uses RFC 9421 agent-browser-auth or agent-payer-auth plus a Visa-signed JWT. KYA-OS uses a DID, VC chain, and detached JWS.\n- **[Verifiable Intent](/protocols/vi/)** *(Complements)* — TAP recognizes the agent with an RFC 9421 signature tagged agent-browser-auth or agent-payer-auth and a Visa-signed JWT, while Verifiable Intent is the SD-JWT consent chain for the purchase.\n- **Category:** [Identify protocols](/category/identify/)\n\n---\n\n## References\n\n1. Visa, *Trusted Agent Protocol specifications* (checked 2026-10-30) — <https://developer.visa.com/docs/trusted-agent-protocol/trusted-agent-protocol-specifications>\n2. Visa, *Trusted Agent Protocol — Getting Started* (checked 2026-10-30) — <https://developer.visa.com/docs/trusted-agent-protocol>\n3. Visa, *Visa Introduces Trusted Agent Protocol: An Ecosystem-Led Framework for AI Commerce* (2025-10-14; checked 2026-10-29) — <https://investor.visa.com/news/news-details/2025/Visa-Introduces-Trusted-Agent-Protocol-An-Ecosystem-Led-Framework-for-AI-Commerce/default.aspx>\n4. visa/trusted-agent-protocol, *LICENSE.md* (checked 2026-10-29) — <https://raw.githubusercontent.com/visa/trusted-agent-protocol/main/LICENSE.md>\n5. Visa Developer, *Trusted Agent Protocol product terms* (2025-10-10; checked 2026-10-29) — <https://developer.visa.com/docs/trusted-agent-protocol/product-terms>\n6. GitHub REST API, *visa/trusted-agent-protocol* (checked 2026-10-29) — <https://github.com/visa/trusted-agent-protocol>\n7. Cloudflare, *Cloudflare Collaborates with Leading Payments Companies to Secure and Enable Agentic Commerce* (2025-10-14; checked 2026-10-29) — <https://www.cloudflare.com/press/press-releases/2025/cloudflare-collaborates-with-leading-payments-companies-to-secure-and-enable-agentic-commerce/>\n8. Rohin Lohe and Will Allen (Cloudflare Blog), *Securing agentic commerce: helping AI Agents transact with Visa and Mastercard* (2025-10-24; checked 2026-10-29) — <https://blog.cloudflare.com/secure-agentic-commerce/>\n9. visa/trusted-agent-protocol, *agent-registry/README.md* (checked 2026-10-29) — <https://raw.githubusercontent.com/visa/trusted-agent-protocol/main/agent-registry/README.md>\n10. A. Backman, Ed., J. Richer, Ed., and M. Sporny (IETF), *RFC 9421: HTTP Message Signatures* (published February 2024) — <https://www.rfc-editor.org/rfc/rfc9421.html>\n11. M. Jones, J. Bradley, and N. Sakimura (IETF), *RFC 7519: JSON Web Token (JWT)* (published May 2015) — <https://www.rfc-editor.org/rfc/rfc7519.html>\n12. IETF Datatracker, *HTTP Message Signatures (RFC 9421)* (Proposed Standard (February 2024); checked 2026-10-30) — <https://datatracker.ietf.org/doc/rfc9421/>\n13. IETF Datatracker, *draft-ietf-webbotauth-httpsig-protocol — HTTP Message Signatures for automated traffic (IETF Datatracker)* (current tracker, checked 2026-10-30 (latest revision -01 dated 2026-10-29)) — <https://datatracker.ietf.org/doc/draft-ietf-webbotauth-httpsig-protocol/>\n14. M. Guerreiro (Cloudflare), U. Kirazci (Amazon), and T. Meunier (Cloudflare), *Registry and Signature Agent card for Web bot auth (draft-meunier-webbotauth-registry-04)* (checked 2026-10-30) — <https://www.ietf.org/archive/id/draft-meunier-webbotauth-registry-04.txt>\n15. Google (google-agentic-commerce), *Agentic Payment Protocol (v0.2)* (fetched 2026-10-30) — <https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/specification.md>\n16. Linux Foundation, *Linux Foundation Announces Operational Launch of x402 Foundation to Standardize Internet-Native Payments for AI Agents and Applications* (July 14, 2026) — <https://www.linuxfoundation.org/press/linux-foundation-announces-operational-launch-of-x402-foundation-to-standardize-internet-native-payments-for-ai-agents-and-applications>\n17. Akamai and Visa, *Akamai and Visa Collaborate to Build Trust in Agentic Commerce* (2025-12-17; checked 2026-10-29) — <https://investor.visa.com/news/news-details/2025/Akamai-and-Visa-Collaborate-to-Build-Trust-in-Agentic-Commerce/default.aspx>\n18. Cleverbridge, *Cleverbridge Among First to Enable Visa's Trusted Agent Protocol* (2026-07-02; checked 2026-10-29) — <https://grow.cleverbridge.com/news/cleverbridge-visa-trusted-agent-protocol>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "VI",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "aliases": [],
   "analog": "a verifiable-credential audit trail for a single transaction's chain of consent -- closest classic-web analog is a signed receipt plus consent log",
   "collisions": [],
   "discovery": {
    "mechanism": "none",
    "path": null
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.mastercard.com/global/en/news-and-trends/stories/2026/verifiable-intent.html",
     "claim": "Mastercard, *How Verifiable Intent builds trust in agentic AI commerce*, modified 2026-10-28; fetched 2026-10-31",
     "date": null,
     "quote": "Verifiable Intent introduces a new trust layer for agentic AI, enabling provable user authorization, consumer protection, accountability and interoperability in agent-led commerce. / for agentic commerce, co-developed with Google. Pablo Fourez Chief Digital Officer, Mastercard As&nbsp;AI agents&nbsp;begin",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://verifiableintent.dev/spec/",
     "claim": "Verifiable Intent Working Group, *Verifiable Intent (VI) — Specification Overview (v0.1-draft)*, 2026-02-18 (v0.1-draft); fetched 2026-10-31",
     "date": null,
     "quote": "Verifiable Intent (VI) defines a layered SD-JWT credential format that creates a cryptographically verifiable chain binding an AI agent's commercial actions to an end-user's explicitly stated purchase intent. / The Layer 1 cnf.jwk claim MUST contain the user's public key. Layer 2 MUST be signed by the corresponding private key. / For L2, sd_hash MUST equal B64U(SHA-256(ASCII(serialized_L1))), binding it to the complete serialized form of L1. / In Autonomous mode, each Layer 2 mandate cnf claim MUST contain jwk with the agent's public key and kid with a key identifier. Layer 3 MUST be signed by the corresponding private key. In Immediate mode, Layer 2 mandates MUST NOT contain a cnf claim. / Implementations MUST support ES256 (ECDSA using the P-256 curve and SHA-256) as defined in [RFC 7518] Section 3.4. The _sd_alg claim MUST be \"sha-256\". / Verifiable Intent (VI) - Specification Overview ¶ Version: 0.1-draft Status: Draft Date: 2026-02-18 Authors: Verifiable Intent Working Group / Authors : Verifiable Intent Working Group / Overview¶ Version: 0.1-draft Status: Draft Date: 2026-02-18 Authors: Verifiable Intent Working Group Abstract¶ Verifiable / Key Binding for further delegation. Extends KB-SD-JWT by including a cnf.jwk claim in the / Verifiable Intent (VI) — Specification Overview ¶ / 1 SD-JWTs with the alg, typ, and kid header parameters as specified in credential-format.md / Copyright © 2026 Verifiable Intent Contributors - Apache 2.0 / The checkout mandate carries this hash as checkout_hash; the payment mandate carries the same hash as transaction_id. / Verifiable Intent (VI) — Specification Overview",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://raw.githubusercontent.com/agent-intent/verifiable-intent/main/README.md",
     "claim": "Mastercard and Verifiable Intent Working Group, *Verifiable Intent (VI) Repository README (Draft v0.1)*, Draft v0.1; fetched 2026-10-31",
     "date": null,
     "quote": "Verifiable Intent defines a layered SD-JWT credential format that creates a tamper-evident chain providing cryptographic evidence that an AI agent's actions were within the scope delegated by a human user. / Status: Draft (v0.1). Maintained by Mastercard; open to multi-stakeholder contribution. / cryptographic agent authorization in commerce. Visit verifiableintent.dev for full documentation. Status: Draft (v0.1). Maintained / **Status**: Draft (v0.1). Maintained by Mastercard; open to multi-stakeholder contribution. See [CONTRIBUTING.md](CONTRIBUTING.md). / When a human delegates a purchase to an AI agent, no party in the transaction can verify that the agent's actions actually reflect the user's wishes. The agent might select the wrong product, overspend, or transact with an unapproved merchant. Today's payment infrastructure assumes human presence at the point of transaction / Merchant | Increased chargebacks from unauthorized agent transactions; no proof that agent was authorized | | Payment Network | Dispute liability is ambiguous - who authorized the transaction? / VI creates a cryptographic delegation chain from credential provider to user to agent using SD-JWT credentials. Each layer binds the next through key confirmation claims (RFC 7800), and selective disclosure ensures each party sees only the claims relevant to its role. / Out of scope: Transport protocols, key management/provisioning, credential provider enrollment, agent platform APIs, dispute resolution, regulatory compliance mapping (PCI DSS, PSD2, etc.).",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://github.com/agent-intent/verifiable-intent",
     "claim": "Mastercard (agent-intent), *agent-intent/verifiable-intent GitHub Repository*, fetched 2026-10-31",
     "date": null,
     "quote": "Tests pytest tests/ -v Repository Structure verifiable-intent/ ├── spec/ # Normative specification documents │ / \"pushed_at\": \"2026-04-20T20:43:36Z\" / mandate each contain cnf.jwk binding\\n │ the same agent key. These MUST be identical\\n / the payment mandate references the same checkout the user approved). Out of scope: Transport / \"name\": \"Apache License 2.0\", \"spdx_id\": \"Apache-2.0\"",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://fidoalliance.org/fido-alliance-to-develop-standards-for-trusted-ai-agent-interactions/",
     "claim": "FIDO Alliance, *FIDO Alliance to Develop Standards for Trusted AI Agent Interactions*, fetched 2026-10-31",
     "date": null,
     "quote": "is designed to enable. By contributing Verifiable Intent to the FIDO Alliance's standards work, / By contributing Verifiable Intent to the FIDO Alliance's standards work,",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://www.rfc-editor.org/rfc/rfc9901.html",
     "claim": "IETF, *RFC 9901: Selective Disclosure for JSON Web Tokens*, IETF RFC",
     "date": null,
     "quote": "This specification defines a mechanism for the selective disclosure of individual elements of a JSON data structure used as the payload of a JSON Web Signature (JWS).",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://www.rfc-editor.org/rfc/rfc7800.html",
     "claim": "IETF, *RFC 7800: Proof-of-Possession Key Semantics for JSON Web Tokens (JWTs)*, IETF RFC",
     "date": null,
     "quote": "This specification describes how to declare in a JSON Web Token (JWT)",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/specification.md",
     "claim": "Google (google-agentic-commerce), *Agentic Payment Protocol (v0.2)*, fetched 2026-10-30",
     "date": null,
     "quote": "Agentic Payment Protocol (v0.2)",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/checkout_mandate.md",
     "claim": "Google Agentic Commerce, *AP2 Specification: Checkout Mandate*, v0.2.0; fetched 2026-10-31",
     "date": null,
     "quote": "Versioning for how the version suffix works. ## Mandate Schema The closed Checkout Mandate",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://ucp.dev/documentation/announcements/",
     "claim": "Universal Commerce Protocol, *Announcements*, fetched 2026-10-30",
     "date": null,
     "quote": "August 25, 2026: Protocol Release v2026-08-25",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://github.com/agentic-commerce-protocol/agentic-commerce-protocol/blob/main/README.md",
     "claim": "OpenAI and Stripe, *Agentic Commerce Protocol README*, checked 2026-10-28",
     "date": null,
     "quote": "The specification is maintained by OpenAI and Stripe and is currently in beta.",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://developer.visa.com/docs/trusted-agent-protocol/trusted-agent-protocol-specifications",
     "claim": "Visa, *Trusted Agent Protocol specifications*, checked 2026-10-30",
     "date": null,
     "quote": "By accessing, downloading, or using this specification, you agree to the terms and conditions outlined in the Visa Trusted Agent Protocol Product Terms.",
     "ref": 12
    }
   ],
   "form": "document-format",
   "governance": "Mastercard; contributed to the FIDO Alliance Payments TWG (2026-04-28); built on FIDO Alliance, EMVCo, IETF and W3C primitives",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against mastercard.com/.../verifiable-intent.html, verifiableintent.dev/spec/, and github.com/agent-intent/verifiable-intent README and spec/credential-format.md; corrected version date to 2026-02-18, origin.date to 2026-03-05, governance and scope; kept step=account"
    },
    {
     "date": "2026-10-16",
     "note": "Mastercard contributed Verifiable Intent to the FIDO Alliance Payments TWG on 2026-04-28"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "vi",
   "implementation": "prototype",
   "last_verified": "2026-11-12",
   "name": "Verifiable Intent",
   "native_status": "Draft (v0.1); open-sourced specification and reference implementation",
   "origin": {
    "date": "2026-03-05",
    "org": "Mastercard, co-developed with Google"
   },
   "part_of": null,
   "parties": [
    "agent-payment"
   ],
   "phase": "draft",
   "probe": {
    "method": "GET",
    "on_absent": "Expected in nearly all cases today: VI has not defined a well-known discovery path, and Mastercard states integration into Mastercard Agent Pay's intent APIs is still 'in the coming months' as of the 2026-03-05 announcement.",
    "parse": "Non-normative: the VI specification does not define a discovery mechanism (transport, agent-platform APIs and credential-provider enrollment are explicitly out of scope). This checks a plausible-but-unofficial convention only; a real signal of VI usage is the presence of an SD-JWT credential in a checkout flow with header typ 'kb-sd-jwt' (Immediate/Autonomous modes) or 'sd+jwt' (L1), and vct 'https://credentials.mastercard.com/card' for the Mastercard reference profile.",
    "path": "{merchant_origin}/.well-known/verifiable-intent"
   },
   "question": "After an agent completes a purchase on a user's behalf, can the merchant, issuer and consumer all point to the same cryptographic record of what the user actually authorized?",
   "scope": "payments",
   "spec_url": "https://verifiableintent.dev/spec/",
   "step": "account",
   "summary_md": "**Verifiable Intent** (`VI`) is an open specification originated by Mastercard, co-developed with Google, and authored by the Verifiable Intent Working Group that defines a layered Selective Disclosure JWT (`SD-JWT`, RFC 9901) credential format for cryptographic agent authorization in commerce. It creates a tamper-evident delegation chain from credential provider to user to agent so merchants and payment networks can verify that an agent's purchase actions stay within the scope delegated by the user. In Layer 1 (`L1`, `typ: \"sd+jwt\"`), an Issuer or Credential Provider signs an SD-JWT binding the user's identity and public key via `cnf.jwk` (RFC 7800), and in Layer 2 (`L2`), the user signs a Key-Bound SD-JWT containing `sd_hash` (`B64U(SHA-256(ASCII(serialized_L1)))`) and selectively disclosable checkout and payment mandates. In Immediate mode (`typ: \"kb-sd-jwt\"`), `L2` carries finalized checkout and payment values with no `cnf` claim, whereas in Autonomous mode (`typ: \"kb-sd-jwt+kb\"`), `L2` mandates bind the agent's public key in `cnf.jwk` (`kid`) and the agent signs split Layer 3 credentials (`L3a` payment for the network, `L3b` checkout for the merchant) with `ES256` and `_sd_alg` set to `\"sha-256\"`. The public specification is at version `0.1-draft` (`Status: Draft`, dated `2026-02-18`), licensed under Apache 2.0 and maintained by Mastercard in the `agent-intent/verifiable-intent` repository alongside a Python reference implementation.",
   "track": "vendor-consortium",
   "version": {
    "date": "2026-02-18",
    "label": "0.1-draft"
   },
   "watch": [
    {
     "type": "page",
     "url": "https://verifiableintent.dev/spec/",
     "selector": "main",
     "cadence": "weekly"
    },
    {
     "type": "page",
     "url": "https://fidoalliance.org/specifications/",
     "selector": "main",
     "cadence": "weekly"
    }
   ],
   "use_cases": [
    "agent-checkout",
    "delegate-user-authority",
    "audit-agent-actions",
    "prove-agent-identity"
   ],
   "audience": [
    "platform",
    "agent-builder",
    "standards-body"
   ],
   "pairs_with": [
    "ap2",
    "ap2-checkout-mandate",
    "ucp",
    "agentic-commerce-protocol",
    "tap"
   ],
   "prerequisites": [],
   "hatnote_md": "",
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": null,
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Verifiable Intent** (`VI`) is an open specification originated by Mastercard, co-developed with Google, and authored by the Verifiable Intent Working Group that defines a layered Selective Disclosure JWT (`SD-JWT`, RFC 9901) credential format for cryptographic agent authorization in commerce. [1][2] It creates a tamper-evident delegation chain from credential provider to user to agent so merchants and payment networks can verify that an agent's purchase actions stay within the scope delegated by the user. [3] In Layer 1 (`L1`, `typ: \"sd+jwt\"`), an Issuer or Credential Provider signs an SD-JWT binding the user's identity and public key via `cnf.jwk` (RFC 7800), and in Layer 2 (`L2`), the user signs a Key-Bound SD-JWT containing `sd_hash` (`B64U(SHA-256(ASCII(serialized_L1)))`) and selectively disclosable checkout and payment mandates. [2] In Immediate mode (`typ: \"kb-sd-jwt\"`), `L2` carries finalized checkout and payment values with no `cnf` claim, whereas in Autonomous mode (`typ: \"kb-sd-jwt+kb\"`), `L2` mandates bind the agent's public key in `cnf.jwk` (`kid`) and the agent signs split Layer 3 credentials (`L3a` payment for the network, `L3b` checkout for the merchant) with `ES256` and `_sd_alg` set to `\"sha-256\"`. [2] The public specification is at version `0.1-draft` (`Status: Draft`, dated `2026-02-18`), licensed under Apache 2.0 and maintained by Mastercard in the `agent-intent/verifiable-intent` repository alongside a Python reference implementation. [2][3]",
   "v05_identity_sentence_md": "**Verifiable Intent** (`VI`) is an open specification originated by Mastercard, co-developed with Google, and authored by the Verifiable Intent Working Group that defines a layered Selective Disclosure JWT (`SD-JWT`, RFC 9901) credential format for cryptographic agent authorization in commerce. [1][2] It creates a tamper-evident delegation chain from credential provider to user to agent so merchants and payment networks can verify that an agent's purchase actions stay within the scope delegated by the user. [3]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Account](/category/account/) (`account`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "Mastercard, co-developed with Google [1]"
    },
    {
     "label": "Governed by",
     "value_md": "Verifiable Intent Working Group (spec authors); repository maintained by Mastercard; contributed to FIDO Alliance work [2][4][5]"
    },
    {
     "label": "Track",
     "value_md": "Vendor-consortium open specification (Verifiable Intent Working Group / Mastercard; contributed to FIDO Alliance) [2][5]"
    },
    {
     "label": "Status",
     "value_md": "Draft (`v0.1`, dated `2026-02-18`); open-sourced specification and reference repository (last pushed `2026-04-20`) [2][3][4]"
    },
    {
     "label": "Version",
     "value_md": "0.1-draft, dated 2026-02-18; repository status \"Draft (v0.1)\" [2][3]"
    },
    {
     "label": "Wire format",
     "value_md": "Layered SD-JWT (RFC 9901) and Key-Bound SD-JWT, key binding via RFC 7800 `cnf.jwk` [2][4]"
    },
    {
     "label": "Specification",
     "value_md": "https://verifiableintent.dev/spec/ [2]"
    },
    {
     "label": "Found at",
     "value_md": "No discovery mechanism; transport out of scope; JWS `typ` and `kid` header parameters only [2][4]"
    },
    {
     "label": "Licence",
     "value_md": "Apache License 2.0 (`Apache-2.0`) [2][4]"
    }
   ],
   "v05_problem_md": "Existing payment infrastructure assumes human presence at the point of transaction; when a user delegates a purchase to an AI agent, no party in the transaction can cryptographically verify that the agent's product selection, price, or merchant choice reflects the user's wishes. [3] Without a provable authorization chain binding checkout contents to payment authorization, users risk overspending, merchants face unauthorized-transaction chargebacks, and payment networks face ambiguous dispute liability. [3] Verifiable Intent chains `L1`, `L2`, and optional `L3` SD-JWT credentials via RFC 7800 `cnf.jwk` key confirmation and `sd_hash` commitments, using selective disclosure so the merchant sees only checkout claims and the payment network sees only payment claims while `checkout_hash` and `transaction_id` cryptographically bind both legs to the same `checkout_jwt`. [2][3] The specification leaves transport protocols, key management and provisioning, credential provider enrollment, agent platform APIs, dispute resolution workflows, and regulatory compliance mapping (`PCI DSS`, `PSD2`, `SCA`) out of scope. [3]",
   "v05_mechanism_delta_md": "Verifiable Intent chains `L1`, `L2`, and optional `L3` SD-JWT credentials via RFC 7800 `cnf.jwk` key confirmation and `sd_hash` commitments, using selective disclosure so the merchant sees only checkout claims and the payment network sees only payment claims while `checkout_hash` and `transaction_id` cryptographically bind both legs to the same `checkout_jwt`. [2][3]",
   "v05_scope_boundary_md": "The specification leaves transport protocols, key management and provisioning, credential provider enrollment, agent platform APIs, dispute resolution workflows, and regulatory compliance mapping (`PCI DSS`, `PSD2`, `SCA`) out of scope. [3]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "Selective Disclosure for JSON Web Tokens (SD-JWT, RFC 9901)",
      "spec_or_rfc": "RFC 9901",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "Selective disclosure uses SD-JWT (RFC 9901) across an L1 credential-provider signature, an L2 wallet constraint layer, and an L3 binding of the agent's own key. [2][6]"
     },
     {
      "name": "Proof-of-Possession Key Semantics for JWTs (RFC 7800)",
      "spec_or_rfc": "RFC 7800",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "L3 binds the agent's own key into the SD-JWT chain after the L1 signature and the L2 constraints, in the possession-binding role RFC 7800 defines for a cnf confirmation claim. [2][7]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "ap2",
      "target_name": "Agent Payments Protocol (AP2)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "AP2 authorizes payment with checkout and payment mandates, while Verifiable Intent records the same purchase as an SD-JWT (RFC 9901) chain of L1, L2, and L3 layers and publishes no discovery file. [2][8]"
     },
     {
      "target_id": "ap2-checkout-mandate",
      "target_name": "AP2 Checkout Mandate",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "An AP2 checkout mandate authorizes the cart, while Verifiable Intent's L2 layer binds amount, merchant, and line-item constraints into an SD-JWT (RFC 9901). [2][9]"
     },
     {
      "target_id": "ucp",
      "target_name": "Universal Commerce Protocol (UCP)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "UCP is the merchant commerce and checkout surface, and Verifiable Intent attaches an SD-JWT (RFC 9901) consent chain, L1 through L3, to that checkout. [2][10]"
     },
     {
      "target_id": "agentic-commerce-protocol",
      "target_name": "Agentic Commerce Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "The Agentic Commerce Protocol moves the order with the merchant, and Verifiable Intent supplies the SD-JWT (RFC 9901) L1, L2, and L3 mandate chain for that order. [2][11]"
     },
     {
      "target_id": "tap",
      "target_name": "Trusted Agent Protocol (TAP)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "TAP recognizes the agent with an RFC 9421 signature tagged agent-browser-auth or agent-payer-auth and a Visa-signed JWT, while Verifiable Intent is the SD-JWT consent chain for the purchase. [2][12]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "emv-agentic-payments",
     "target_name": "EMV® Agentic Payments – Framework for Specifications",
     "relation_label": "Complements",
     "delta": "Verifiable Intent defines a layered SD-JWT credential format that binds an agent's commercial actions to a user's stated purchase intent, and Mastercard's March 2026 story introduces that format with Google. EMVCo says its draft complements cryptographic assurance from solutions such as Verifiable Intent with a common coordination point, and the draft's own concept is Intent Services. [2]",
     "item_md": "**[EMV® Agentic Payments – Framework for Specifications](/protocols/emv-agentic-payments/)** (Complements) — Verifiable Intent defines a layered SD-JWT credential format that binds an agent's commercial actions to a user's stated purchase intent, and Mastercard's March 2026 story introduces that format with Google. EMVCo says its draft complements cryptographic assurance from solutions such as Verifiable Intent with a common coordination point, and the draft's own concept is Intent Services. [2]"
    },
    {
     "target_id": "x401",
     "target_name": "x401: HTTP Proof Requirement Protocol",
     "relation_label": "Peer alternative",
     "delta": "Verifiable Intent is an SD-JWT (RFC 9901) chain of L1, L2, and L3 consent layers with no discovery file, while x401 carries the proof in PROOF-REQUEST, PROOF-RESPONSE, and PROOF-RESULT. [2]",
     "item_md": "**[x401: HTTP Proof Requirement Protocol](/protocols/x401/)** (Peer alternative) — Verifiable Intent is an SD-JWT (RFC 9901) chain of L1, L2, and L3 consent layers with no discovery file, while x401 carries the proof in PROOF-REQUEST, PROOF-RESPONSE, and PROOF-RESULT. [2]"
    },
    {
     "target_id": "agent-decision-commitment",
     "target_name": "Agent Decision Commitments for Payments",
     "relation_label": "Complements",
     "delta": "Verifiable Intent is an SD-JWT (RFC 9901) L1 through L3 consent chain, and decision_context is the selectively disclosable claim the draft puts on the payment mandate for the model inputs and the action. [2]",
     "item_md": "**[Agent Decision Commitments for Payments](/protocols/agent-decision-commitment/)** (Complements) — Verifiable Intent is an SD-JWT (RFC 9901) L1 through L3 consent chain, and decision_context is the selectively disclosable claim the draft puts on the payment mandate for the model inputs and the action. [2]"
    },
    {
     "item_md": "**[Account protocols](/category/account/)** — Category index for `account` standards."
    }
   ],
   "v05_compiled_md": "---\nid: vi\ntitle: \"Verifiable Intent\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: account\nform: document-format\nwire_archetype: identity_auth_crypto\nspec_url: https://verifiableintent.dev/spec/\nlast_checked: 2026-11-12\n---\n\n# Verifiable Intent\n\n**Category:** [Account](/category/account/) (`account`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-11-12\n\n**Verifiable Intent** (`VI`) is an open specification originated by Mastercard, co-developed with Google, and authored by the Verifiable Intent Working Group that defines a layered Selective Disclosure JWT (`SD-JWT`, RFC 9901) credential format for cryptographic agent authorization in commerce. [1][2] It creates a tamper-evident delegation chain from credential provider to user to agent so merchants and payment networks can verify that an agent's purchase actions stay within the scope delegated by the user. [3] In Layer 1 (`L1`, `typ: \"sd+jwt\"`), an Issuer or Credential Provider signs an SD-JWT binding the user's identity and public key via `cnf.jwk` (RFC 7800), and in Layer 2 (`L2`), the user signs a Key-Bound SD-JWT containing `sd_hash` (`B64U(SHA-256(ASCII(serialized_L1)))`) and selectively disclosable checkout and payment mandates. [2] In Immediate mode (`typ: \"kb-sd-jwt\"`), `L2` carries finalized checkout and payment values with no `cnf` claim, whereas in Autonomous mode (`typ: \"kb-sd-jwt+kb\"`), `L2` mandates bind the agent's public key in `cnf.jwk` (`kid`) and the agent signs split Layer 3 credentials (`L3a` payment for the network, `L3b` checkout for the merchant) with `ES256` and `_sd_alg` set to `\"sha-256\"`. [2] The public specification is at version `0.1-draft` (`Status: Draft`, dated `2026-02-18`), licensed under Apache 2.0 and maintained by Mastercard in the `agent-intent/verifiable-intent` repository alongside a Python reference implementation. [2][3]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Account](/category/account/) (`account`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | Mastercard, co-developed with Google [1] |\n| **Governed by** | Verifiable Intent Working Group (spec authors); repository maintained by Mastercard; contributed to FIDO Alliance work [2][4][5] |\n| **Track** | Vendor-consortium open specification (Verifiable Intent Working Group / Mastercard; contributed to FIDO Alliance) [2][5] |\n| **Status** | Draft (`v0.1`, dated `2026-02-18`); open-sourced specification and reference repository (last pushed `2026-04-20`) [2][3][4] |\n| **Version** | 0.1-draft, dated 2026-02-18; repository status \"Draft (v0.1)\" [2][3] |\n| **Wire format** | Layered SD-JWT (RFC 9901) and Key-Bound SD-JWT, key binding via RFC 7800 `cnf.jwk` [2][4] |\n| **Specification** | https://verifiableintent.dev/spec/ [2] |\n| **Found at** | No discovery mechanism; transport out of scope; JWS `typ` and `kid` header parameters only [2][4] |\n| **Licence** | Apache License 2.0 (`Apache-2.0`) [2][4] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nExisting payment infrastructure assumes human presence at the point of transaction; when a user delegates a purchase to an AI agent, no party in the transaction can cryptographically verify that the agent's product selection, price, or merchant choice reflects the user's wishes. [3] Without a provable authorization chain binding checkout contents to payment authorization, users risk overspending, merchants face unauthorized-transaction chargebacks, and payment networks face ambiguous dispute liability. [3] Verifiable Intent chains `L1`, `L2`, and optional `L3` SD-JWT credentials via RFC 7800 `cnf.jwk` key confirmation and `sd_hash` commitments, using selective disclosure so the merchant sees only checkout claims and the payment network sees only payment claims while `checkout_hash` and `transaction_id` cryptographically bind both legs to the same `checkout_jwt`. [2][3] The specification leaves transport protocols, key management and provisioning, credential provider enrollment, agent platform APIs, dispute resolution workflows, and regulatory compliance mapping (`PCI DSS`, `PSD2`, `SCA`) out of scope. [3]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **Selective Disclosure for JSON Web Tokens (SD-JWT, RFC 9901)** | `RFC 9901` | Profiles classic standard | Selective disclosure uses SD-JWT (RFC 9901) across an L1 credential-provider signature, an L2 wallet constraint layer, and an L3 binding of the agent's own key. [2][6] |\n| **Proof-of-Possession Key Semantics for JWTs (RFC 7800)** | `RFC 7800` | Analogous to classic standard | L3 binds the agent's own key into the SD-JWT chain after the L1 signature and the L2 constraints, in the possession-binding role RFC 7800 defines for a cnf confirmation claim. [2][7] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Agent Payments Protocol (AP2)](/protocols/ap2/)** | Peer alternative | AP2 authorizes payment with checkout and payment mandates, while Verifiable Intent records the same purchase as an SD-JWT (RFC 9901) chain of L1, L2, and L3 layers and publishes no discovery file. [2][8] |\n| **[AP2 Checkout Mandate](/protocols/ap2-checkout-mandate/)** | Peer alternative | An AP2 checkout mandate authorizes the cart, while Verifiable Intent's L2 layer binds amount, merchant, and line-item constraints into an SD-JWT (RFC 9901). [2][9] |\n| **[Universal Commerce Protocol (UCP)](/protocols/ucp/)** | Complements | UCP is the merchant commerce and checkout surface, and Verifiable Intent attaches an SD-JWT (RFC 9901) consent chain, L1 through L3, to that checkout. [2][10] |\n| **[Agentic Commerce Protocol](/protocols/agentic-commerce-protocol/)** | Complements | The Agentic Commerce Protocol moves the order with the merchant, and Verifiable Intent supplies the SD-JWT (RFC 9901) L1, L2, and L3 mandate chain for that order. [2][11] |\n| **[Trusted Agent Protocol (TAP)](/protocols/tap/)** | Complements | TAP recognizes the agent with an RFC 9421 signature tagged agent-browser-auth or agent-payer-auth and a Visa-signed JWT, while Verifiable Intent is the SD-JWT consent chain for the purchase. [2][12] |\n\n---\n\n## See also\n\n- **[EMV® Agentic Payments – Framework for Specifications](/protocols/emv-agentic-payments/)** *(Complements)* — Verifiable Intent defines a layered SD-JWT credential format that binds an agent's commercial actions to a user's stated purchase intent, and Mastercard's March 2026 story introduces that format with Google. EMVCo says its draft complements cryptographic assurance from solutions such as Verifiable Intent with a common coordination point, and the draft's own concept is Intent Services. [2]\n- **[x401: HTTP Proof Requirement Protocol](/protocols/x401/)** *(Peer alternative)* — Verifiable Intent is an SD-JWT (RFC 9901) chain of L1, L2, and L3 consent layers with no discovery file, while x401 carries the proof in PROOF-REQUEST, PROOF-RESPONSE, and PROOF-RESULT. [2]\n- **[Agent Decision Commitments for Payments](/protocols/agent-decision-commitment/)** *(Complements)* — Verifiable Intent is an SD-JWT (RFC 9901) L1 through L3 consent chain, and decision_context is the selectively disclosable claim the draft puts on the payment mandate for the model inputs and the action. [2]\n- **Category:** [Account protocols](/category/account/)\n\n---\n\n## References\n\n1. Mastercard, *How Verifiable Intent builds trust in agentic AI commerce* (modified 2026-10-28; fetched 2026-10-31) — <https://www.mastercard.com/global/en/news-and-trends/stories/2026/verifiable-intent.html>\n2. Verifiable Intent Working Group, *Verifiable Intent (VI) — Specification Overview (v0.1-draft)* (2026-02-18 (v0.1-draft); fetched 2026-10-31) — <https://verifiableintent.dev/spec/>\n3. Mastercard and Verifiable Intent Working Group, *Verifiable Intent (VI) Repository README (Draft v0.1)* (Draft v0.1; fetched 2026-10-31) — <https://raw.githubusercontent.com/agent-intent/verifiable-intent/main/README.md>\n4. Mastercard (agent-intent), *agent-intent/verifiable-intent GitHub Repository* (fetched 2026-10-31) — <https://github.com/agent-intent/verifiable-intent>\n5. FIDO Alliance, *FIDO Alliance to Develop Standards for Trusted AI Agent Interactions* (fetched 2026-10-31) — <https://fidoalliance.org/fido-alliance-to-develop-standards-for-trusted-ai-agent-interactions/>\n6. IETF, *RFC 9901: Selective Disclosure for JSON Web Tokens* (IETF RFC) — <https://www.rfc-editor.org/rfc/rfc9901.html>\n7. IETF, *RFC 7800: Proof-of-Possession Key Semantics for JSON Web Tokens (JWTs)* (IETF RFC) — <https://www.rfc-editor.org/rfc/rfc7800.html>\n8. Google (google-agentic-commerce), *Agentic Payment Protocol (v0.2)* (fetched 2026-10-30) — <https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/specification.md>\n9. Google Agentic Commerce, *AP2 Specification: Checkout Mandate* (v0.2.0; fetched 2026-10-31) — <https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/checkout_mandate.md>\n10. Universal Commerce Protocol, *Announcements* (fetched 2026-10-30) — <https://ucp.dev/documentation/announcements/>\n11. OpenAI and Stripe, *Agentic Commerce Protocol README* (checked 2026-10-28) — <https://github.com/agentic-commerce-protocol/agentic-commerce-protocol/blob/main/README.md>\n12. Visa, *Trusted Agent Protocol specifications* (checked 2026-10-30) — <https://developer.visa.com/docs/trusted-agent-protocol/trusted-agent-protocol-specifications>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "SPIFFE",
   "adoption": {
    "level": "observed",
    "by": "SPIRE (CNCF), Uber, Google Cloud Agent Identity, Google Cloud Managed Workload Identities, Red Hat OpenShift Zero Trust Workload Identity Manager, Microsoft Entra Workload ID, HashiCorp Vault 1.21, Pinterest Knox, and 15 other verified implementations",
    "probe_run": null
   },
   "aliases": [
    "Secure Production Identity Framework for Everyone"
   ],
   "analog": "Workload-scoped X.509/mTLS or JWT identity, analogous to per-service TLS certs",
   "collisions": [],
   "discovery": {
    "mechanism": "No public web URL. A workload reads its identity from the local SPIFFE Workload Endpoint, which the specification describes this way: \"The SPIFFE Workload Endpoint MUST be served over gRPC, and compliant clients MUST support gRPC. It may be exposed as either a Unix Domain Socket (UDS) or a TCP listen socket.\" Between trust domains, bundles are published at a bundle endpoint URL that each operator chooses",
    "path": "No public web URL. A workload reads its identity from the local SPIFFE Workload Endpoint, which the specification describes this way: \"The SPIFFE Workload Endpoint MUST be served over gRPC, and compliant clients MUST support gRPC. It may be exposed as either a Unix Domain Socket (UDS) or a TCP listen socket.\" Between trust domains, bundles are published at a bundle endpoint URL that each operator chooses"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://spiffe.io/docs/latest/spiffe-about/overview/",
     "claim": "SPIFFE, *SPIFFE Overview*, checked 2026-10-30",
     "date": null,
     "quote": "SPIFFE, the Secure Production Identity Framework for Everyone, is a set of open-source standards for securely identifying software systems in dynamic and heterogeneous environments. / Systems that adopt SPIFFE can easily and reliably mutually authenticate wherever they are running. / The heart of these specifications is the one that defines short lived cryptographic identity documents - called SVIDs via a simple API. / Workloads can then use these identity documents when authenticating to other workloads, for example by establishing a TLS connection or by signing and verifying a JWT token. / SPIFFE Overview / Open Source Software That Implements SPIFFE / Serverless Support SPIRE ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ / Can generate X.509 SVIDs for workloads / Can generate JWT SVIDs for workloads / Leverages node and/or workload attestation for issuing SVIDs / Can serve the Workload API for automatic rotation / Can serve Envoy SDS API / Can serve and consume the SPIFFE Federation API / Can serve OIDC Federation API / Can leverage existing or external PKI for X.509 SVID issuance / Supports workloads running in Kubernetes / Supports workloads running in VMs or on bare metal / Supports workloads running in serverless environments / software that supports SPIFFE as a first class citizen / Open Source Software that Works with SPIFFE / Knox ✔ ✔ VMware Secrets Manager / X.509 SVID Supports X.509 SVID-based authentication / JWT SVID Supports JWT SVID-based authentication / SPIFFE Authentication Supports federated SPIFFE authentication based on trust domain name / Workload API Supports attaching to the SPIFFE Workload API / VMware Secrets Manager ✔ ✔ ✔ SPIKE / SPIKE ✔ ✔ ✔ / Commercial Software that Works with SPIFFE / AWS IAM Roles Anywhere ✔ GCP / GCP Workload Identity Federation ✔ ✔ Greymatter.io / WarpStream ✔ / Envoy ✔ ✔ ✔ Ghostunnel / Ghostunnel ✔ ✔ ✔ Istio ✔ ✔ ✔ / Greymatter.io ✔ ✔ ✔ ✔ Idira",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://www.cncf.io/blog/2020/06/22/toc-approves-spiffe-and-spire-to-incubation/",
     "claim": "Cloud Native Computing Foundation, *TOC Approves SPIFFE and SPIRE to Incubation*, published 2020-06-22",
     "date": null,
     "quote": "SPIRE (the SPIFFE Runtime Environment) is the code that implements the SPIFFE specification on a wide variety of platforms / Posted on June 22, 2020 / Today, the CNCF Technical Oversight Committee (TOC) voted to accept SPIFFE and SPIRE as incubation-level hosted projects.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://datatracker.ietf.org/wg/wimse/about/",
     "claim": "IETF wimse Working Group, *Workload Identity in Multi System Environments (wimse) charter*, checked 2026-10-30",
     "date": null,
     "quote": "Dependencies and Liaisons / The Cloud Native Computing Foundation (CNCF), particularly with regard to the SPIFFE/SPIRE project. / The WIMSE working group will closely collaborate with:",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-wimse-arch/",
     "claim": "Joseph A. Salowey, Yaroslav Rosomakho, and Hannes Tschofenig, *draft-ietf-wimse-arch — Workload Identity in a Multi System Environment (WIMSE) Architecture (IETF Datatracker)*, draft-ietf-wimse-arch-08; last updated 2026-07-06",
     "date": null,
     "quote": "An example of an identifier format that conforms to this definition is [SPIFFE-ID].",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://github.com/spiffe/spiffe/blob/main/standards/SPIFFE-ID.md",
     "claim": "SPIFFE, *SPIFFE ID*, checked 2026-10-30",
     "date": null,
     "quote": "spiffe://trust-domain-name/path / Stability: Stable / Valid SPIFFE IDs MUST have the scheme set to spiffe, include a non-zero trust domain name, and MUST NOT include a query or fragment component. / A SPIFFE Identity (or SPIFFE ID) is defined as an RFC 3986 compliant URI / The path component of a SPIFFE ID allows for the unique identification of a given workload. / SPIFFE implementations MUST support SPIFFE URIs up to 2048 bytes in length and SHOULD NOT generate URIs of length greater than 2048 bytes. / a SPIFFE ID is defined in its entirety by the spiffe scheme and a site-specific hier-part which includes an authority component and an optional path. / spiffe://staging.example.com/payments/web-fe / All URI components contribute to the URI length, including the \"spiffe\" scheme, \"://\" separator, trust domain name, and path component. / a maximum length of a trust domain name is 255 bytes. / The trust domain corresponds to the trust root of a system. / The trust domain name stands as the authority component of the URI / The host part of the authority MUST NOT be empty. / The host part of the authority MUST be lowercase. / The host part of the authority MUST contain only letters, numbers, dots, dashes, and underscores ([a-z0-9.-_]). / The host part of the authority MUST NOT contain percent-encoded characters. / The userinfo and port parts of the authority component MUST be empty. / Please note that this definition does not exclude IPv4 addresses in dotted-quad notation, but does exclude IPv6 addresses. / Trust domain names are nominally self-registered / using a registered domain name as a suffix of a trust domain name / When a collision does occur, those trust domains will continue to operate independently but will be unable to federate / Individual path segments MUST contain only letters, numbers, dots, dashes, and underscores ([a-zA-Z0-9.-_]). / The path component MUST NOT include segments that are empty or are relative path modifiers / The path component MUST NOT include a trailing",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://github.com/spiffe/spiffe/blob/main/standards/SPIFFE.md",
     "claim": "SPIFFE, *The SPIFFE standard*, checked 2026-10-30",
     "date": null,
     "quote": "Conventional security practices (such as network policies that only allow traffic between particular IP addresses) struggle to scale under this complexity. / These components are known as the SPIFFE ID, the SPIFFE Verifiable Identity Document (SVID) and the Workload API / The SPIFFE standard comprises three major components / Distributed design patterns and practices such as microservices, container orchestrators, and cloud computing have led to production environments that are increasingly dynamic and heterogeneous. / The SPIFFE standard comprises three major components - one which standardizes an identity namespace, one which dictates the manner in which an issued identity may be presented and verified, and another which specifies an API through which identity may be retrieved and/or issued. These components are known as the SPIFFE ID, the SPIFFE Verifiable Identity Document (SVID) and the Workload API, respectively. / The SPIFFE Workload API is the method through which workloads, or compute processes, obtain their SVID(s). It is typically exposed locally (eg. via a Unix domain socket), and explicitly does not include an authentication handshake or authenticating token from the workload. / In addition to providing a workload with its necessary SVIDs, the Workload API delivers the CA bundles which the workload should outwardly trust. These bundles are associated with trust domains outside of the issued SVID, and are used for federation. / It is typically exposed locally (eg. via a Unix domain socket), and explicitly does not include an authentication handshake or authenticating token from the workload. / explicitly does not include an authentication handshake or authenticating token from the workload. / It is typically exposed locally (eg. via a Unix domain socket)",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://spiffe.io/pdf/Solving-the-bottom-turtle-SPIFFE-SPIRE-Book.pdf",
     "claim": "Daniel Feldman, Emily Fox, Evan Gilman, Ian Haken, Frederick Kautz, Umair Khan, Max Lambrecht, Brandon Lum, Agustín Martínez Fayó, Eli Nesterov, Andres Vega, and Michael Wardrop, *Solving the Bottom Turtle: a SPIFFE Way to Establish Trust in Your Infrastructure via Universal Identity*, first edition 2020",
     "date": null,
     "quote": "k8s founding engineer Joe Beda, embarked on a call to arms in 2016 to create a solution for production identity / Beda's paper was presented at GlueCon in 2016",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://www.cncf.io/blog/2018/03/29/cncf-to-host-the-spiffe-project/",
     "claim": "Kristen Evans (CNCF), *CNCF to host the SPIFFE Project*, published 2018-03-29",
     "date": null,
     "quote": "Posted on March 29, 2018 / Today, the Cloud Native Computing Foundation accepted SPIFFE into the CNCF Sandbox / Sunil James, CEO of Scytale, a venture-backed company that serves as SPIFFE's primary maintainer",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://github.com/spiffe/spiffe/blob/main/GOVERNANCE.md",
     "claim": "SPIFFE, *GOVERNANCE.md*, checked 2026-10-30",
     "date": null,
     "quote": "The SPIFFE Project is governed by the SSC that is exclusively responsible for SPIFFE's standards and the Project's strategic goals and direction. / The SSC is comprised of at least five (5) members. / Apache License version 2.0 … and all documentation is licensed under the … Creative Commons License version 4.0",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://github.com/spiffe/spiffe/blob/main/standards/SPIFFE_Workload_Endpoint.md",
     "claim": "SPIFFE, *SPIFFE Workload Endpoint*, checked 2026-10-30",
     "date": null,
     "quote": "The SPIFFE Workload Endpoint MUST be served over gRPC, and compliant clients MUST support gRPC. It may be exposed as either a Unix Domain Socket (UDS) or a TCP listen socket. / The SPIFFE Workload Endpoint MUST NOT require any direct authentication of its clients. / Stability: Stable / The SPIFFE Workload Endpoint MUST be served over gRPC, and compliant clients MUST support gRPC. It may be exposed as either a Unix Domain Socket (UDS) or a TCP listen socket. Implementations SHOULD prefer Unix Domain Socket transport / Implementations SHOULD prefer Unix Domain Socket transport / If not explicitly configured, conforming clients MUST fall back to the environment variable. / unix:///path/to/endpoint.sock / tcp://127.0.0.1:8000 / Transport Layer Security MUST NOT be required, despite the fact that gRPC strongly prefers it. / every client request to the SPIFFE Workload Endpoint MUST include the static gRPC metadata key workload.spiffe.io with a value of true / This prevents an attacker from exploiting an SSRF vulnerability to access the SPIFFE Workload Endpoint unless the vulnerability also gives the attacker control over outgoing gRPC metadata. / This may include techniques such as kernel introspection or orchestrator interrogation. / the chosen method(s) MUST NOT require the workload to actively participate.",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://github.com/spiffe/spire/blob/main/README.md",
     "claim": "SPIRE, *SPIRE README*, checked 2026-10-30",
     "date": null,
     "quote": "SPIRE exposes the SPIFFE Workload API, which can attest running software systems and issue SPIFFE IDs and SVIDs to them. / This in turn allows two workloads to establish trust between each other, for example by establishing an mTLS connection or by signing and verifying a JWT token. / for example by establishing an mTLS connection or by signing and verifying a JWT token. / SPIRE (the SPIFFE Runtime Environment) is a toolchain of APIs for establishing trust between software systems / Container images are published for spire-server, spire-agent, and oidc-discovery-provider. / SPIRE is a graduated project of the Cloud Native Computing Foundation / SPIRE provides an implementation of the Envoy Secret Discovery Service (SDS) for use with Envoy Proxy. / SDS can be used to transparently install and rotate TLS certificates and trust bundles in Envoy. / Officially maintained client libraries for interacting with the ... are available in ... Go ... and ... Java / https://github.com/spiffe/go-spiffe/tree/main / https://github.com/spiffe/java-spiffe",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://github.com/spiffe/spiffe/blob/main/standards/SPIFFE_Workload_API.md",
     "claim": "SPIFFE, *SPIFFE Workload API*, checked 2026-10-30",
     "date": null,
     "quote": "The X.509-SVID and JWT-SVID profiles are mandatory and MUST be supported by SPIFFE implementations. / The WIT-SVID Profile is optional and MAY be supported by SPIFFE implementations. / Stability: Stable / Stability: Incubating (this section only - the remainder of this document … is Stable.) / Fetch X.509-SVIDs for all SPIFFE identities the workload is entitled to",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://github.com/spiffe/spiffe/blob/main/standards/STABILITY.md",
     "claim": "SPIFFE, *SPIFFE specification stability levels*, checked 2026-10-30",
     "date": null,
     "quote": "This document defines stability levels for SPIFFE specifications and the process for moving a specification between them. / This document defines stability levels for SPIFFE",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://github.com/spiffe/spiffe/commits/HEAD/standards/STABILITY.md",
     "claim": "Noah Stride (GitHub commit history, spiffe/spiffe), *Commit history of standards/STABILITY.md*, commit 2026-07-01; Introduce Stability/Graduation process for SPIFFE specifications",
     "date": null,
     "quote": "\"date\": \"2026-07-01T15:58:51Z\" / Introduce Stability/Graduation process for SPIFFE specifications (#399) / 2026-07-01T15:58:51Z / Introduce Stability/Graduation process for SPIFFE specifications",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://github.com/spiffe/spiffe/commits/HEAD/standards/WIT-SVID.md",
     "claim": "Noah Stride (GitHub commit history, spiffe/spiffe), *Commit history of standards/WIT-SVID.md*, commit 2026-07-01; Integrating WIT to the SPIFFE standards",
     "date": null,
     "quote": "\"date\": \"2026-07-01T16:46:48Z\" / Integrating WIT to the SPIFFE standards (#362) / 2026-07-01T16:46:48Z / Integrating WIT to the SPIFFE standards",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://github.com/spiffe/spiffe/blob/main/standards/WIT-SVID.md",
     "claim": "SPIFFE, *WIT-SVID*, checked 2026-10-30",
     "date": null,
     "quote": "Stability: Incubating / The Workload Identity Token (WIT) is a token format specified by the IETF WIMSE working group / The WIT-SVID is a sub-profiling of this token format for use in SPIFFE contexts. / WIT-SVIDs are JSON Web Tokens (JWT) encoded using JSON Web Signature (JWS) compact serialization. / For a WIT-SVID, this parameter MUST be present and MUST be set to wit+jwt.",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://github.com/spiffe/spiffe/blob/main/ssc/README.md",
     "claim": "SPIFFE, *The SPIFFE Steering Committee*, checked 2026-10-30",
     "date": null,
     "quote": "The SPIFFE Steering Committee (or SSC) is a group of volunteers that oversee the strategic direction and growth of all projects falling under the SPIFFE umbrella.",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://www.cncf.io/projects/spiffe/",
     "claim": "Cloud Native Computing Foundation, *SPIFFE*, modified 2026-10-30",
     "date": null,
     "quote": "SPIFFE was accepted to CNCF on March 29, 2018, moved to the Incubating maturity level on June 22, 2020, and then moved to the Graduated maturity level on August 23, 2022.",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://www.cncf.io/projects/spire/",
     "claim": "Cloud Native Computing Foundation, *SPIRE*, modified 2026-10-30",
     "date": null,
     "quote": "SPIRE was accepted to CNCF on March 29, 2018, moved to the Incubating maturity level on June 22, 2020, and then moved to the Graduated maturity level on August 22, 2022. / moved to the Graduated maturity level on August 22, 2022.",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://www.cncf.io/announcements/2022/09/20/spiffe-and-spire-projects-graduate-from-cloud-native-computing-foundation-incubator/",
     "claim": "Cloud Native Computing Foundation, *SPIFFE and SPIRE Projects Graduate from Cloud Native Computing Foundation Incubator*, published 2022-09-20",
     "date": null,
     "quote": "San Francisco, CA - September 20, 2022 / announced today the graduation of the SPIFFE and SPIRE projects.",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://github.com/spiffe/spiffe/blob/main/standards/X509-SVID.md",
     "claim": "SPIFFE, *X.509-SVID*, checked 2026-10-30",
     "date": null,
     "quote": "Stability: Stable / In an X.509 SVID, the corresponding SPIFFE ID is set as a URI type in the Subject Alternative Name extension / An X.509 SVID MUST contain exactly one URI SAN, and by extension, exactly one SPIFFE ID. / The use parameter of each JWK entry MUST be set to x509-svid. / each entry representing an X509-SVID CA certificate MUST contain the x5c parameter with a value equal to the base64 encoded DER CA certificate that the entry represents. / The value MUST include exactly one CA certificate, and the certificate SHOULD be self-signed. / Validators encountering an SVID containing more than one URI SAN MUST reject the SVID. / Leaf certificate SPIFFE IDs MUST have a non-root path component. / A leaf certificate is an SVID which serves to identify a caller or resource / Leaf SVIDs SHOULD include this extension, and it MAY be marked as critical. When included, fields id-kp-serverAuth and id-kp-clientAuth MUST be set. / RFC 5280 section 4.2.1.6",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://github.com/spiffe/spiffe/blob/main/standards/JWT-SVID.md",
     "claim": "SPIFFE, *JWT-SVID*, checked 2026-10-30",
     "date": null,
     "quote": "Stability: Stable / JWT-SVID is the first token-based SVID in the SPIFFE specification set. / Aimed at providing immediate value in solving difficulties associated with asserting identity across Layer 7 boundaries / The use parameter of each JWK entry MUST be set to jwt-svid. / Additionally, the kid parameter of each JWK entry MUST be set. / JWT-SVIDs are JSON Web Signature (JWS) data structures utilizing JWS Compact Serialization in all cases. / The sub claim MUST be set to the SPIFFE ID of the workload to which it is issued. / The aud claim MUST be present, containing one or more values. / Use of an aggressive value for the exp claim is recommended. / Being a bearer token, JWT-SVIDs are susceptible to replay attacks. / JWT-SVIDs transmitted via HTTP SHOULD be transmitted in the “Authorization” header (“authorization” for HTTP/2) using the “Bearer” authentication scheme",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://github.com/spiffe/spiffe/blob/main/standards/SPIFFE_Trust_Domain_and_Bundle.md",
     "claim": "SPIFFE, *SPIFFE Trust Domain and Bundle*, checked 2026-10-30",
     "date": null,
     "quote": "Stability: Stable / A SPIFFE bundle is an object containing a trust domain's cryptographic keys. / RFC 7517 / compliant JWK Set. / The keys within the bundle are considered authoritative for the trust domain that the bundle represents, and are used to prove the validity of SVIDs that reside in that trust domain. / SPIFFE bundles are represented as an RFC 7517 compliant JWK Set. / The parameter keys MUST be present. / The keys parameter may contain an empty array. / workloads MUST treat all SVIDs from the trust domain as invalid and untrusted. / The parameter spiffe_sequence SHOULD be set. / When present, its value MUST be a monotonically increasing integer, and MUST be changed whenever the contents of the bundle are updated. / The parameter spiffe_refresh_hint SHOULD be set. / its value MUST be an integer representing the suggested consumer refresh interval in seconds. / Bundle publishers may advertise a refresh hint as a function of their key rotation frequency. / the refresh hint may also affect how rapidly a key redaction is propagated. / The use parameter MUST be set. Its value indicates the type of identity document (or SVID) that it is authoritative for. / At the time of this writing, three SVID types are supported: x509-svid, jwt-svid, and wit-svid. / The values are case sensitive.",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://github.com/spiffe/spiffe/blob/main/standards/SPIFFE_Federation.md",
     "claim": "SPIFFE, *SPIFFE Federation*, checked 2026-10-30",
     "date": null,
     "quote": "Stability: Stable / which is a URL that serves up a SPIFFE bundle for a particular trust domain. / SPIFFE Federation enables the authentication of identity credentials (SVIDs) across trust domains. / Possession of a trust domain's bundle is required in order to validate SVIDs from it. / SPIFFE Federation defines a \"bundle endpoint\", which is a URL that serves up a SPIFFE bundle for a particular trust domain.",
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://github.com/spiffe/spire/releases",
     "claim": "SPIRE, *SPIRE release v1.16.0*, published 2026-11-05",
     "date": null,
     "quote": "\"tag_name\":\"v1.16.0\" / \"published_at\":\"2026-11-05T18:37:05Z\"",
     "ref": 25
    },
    {
     "label": "[26]",
     "url": "https://www.redhat.com/en/blog/zero-trust-workload-identity-manager-generally-available-red-hat-openshift",
     "claim": "Anjali Telang and Trilok Geer (Red Hat), *Zero trust workload identity manager generally available on Red Hat OpenShift*, published 2026-01-23",
     "date": null,
     "quote": "the reference implementation of the SPIFFE standard for workload identity. / January 23, 2026 / general availability of zero trust workload identity manager / Zero trust workload identity manager generally available on Red Hat OpenShift / Zero trust workload identity manager is based on the upstream SPIRE project, the reference implementation of the SPIFFE standard for workload identity.",
     "ref": 26
    },
    {
     "label": "[27]",
     "url": "https://unit42.paloaltonetworks.com/kubernetes-spiffe-spire-identity-spoofing/",
     "claim": "Eviatar Garzi (Palo Alto Networks Unit 42), *The Machine With Many Faces: Post-Exploitation Identity Misuse in SPIFFE/SPIRE*, published 2026-09-10",
     "date": null,
     "quote": "The Secure Production Identity Framework for Everyone (SPIFFE)/the SPIFFE Runtime Environment (SPIRE) is widely deployed in Kubernetes and cloud-native environments to replace long-lived secrets with short-lived, cryptographically verifiable workload identities. / SPIRE performs attestation at two levels: Node attestation establishes trust in the agent running on a node Workload attestation determines the identity of individual workloads",
     "ref": 27
    },
    {
     "label": "[28]",
     "url": "https://www.informationweek.com/responsible-ai/spiffe-can-identify-your-ai-agents-but-can-it-control-them-",
     "claim": "Pam Baker (InformationWeek), *SPIFFE can identify your AI agents. But can it control them?*, published 2026-10-15; modified 2026-10-19",
     "date": null,
     "quote": "SPIFFE confirms the presence of agents and prevents spoofing. That's it, / an authorization layer must be layered on top of SPIFFE.",
     "ref": 28
    },
    {
     "label": "[29]",
     "url": "https://www.uber.com/us/en/blog/our-journey-adopting-spiffe-spire/",
     "claim": "Andrew Moore, Zachary Train, and Kirutthika Raja (Uber), *Our Journey Adopting SPIFFE/SPIRE at Scale*, published 2023-11-09",
     "date": null,
     "quote": "an unauthenticated API used by workloads to fetch their identity. / The Workload API discovers caller process metadata through configured trusted authorities such as the kubelet, Linux kernel, and container runtimes. / Workload attestor plugins map the discovered metadata to \"selectors\" which SPIRE Agent then compares against the registrations / November 9, 2023 / We use SPIRE at Uber to provide identity to workloads running in multiple clouds (GCP, OCI, AWS, on-premise) for a variety of jobs, including stateless services, stateful storage, batch and streaming jobs, CI jobs, workflow executions, infrastructure services, and more. / We have worked with the open source community since the early stages of the project in mid-2018",
     "ref": 29
    },
    {
     "label": "[30]",
     "url": "https://github.com/spiffe/spire/blob/main/CHANGELOG.md",
     "claim": "SPIRE, *SPIRE CHANGELOG*, 1.16.0 dated 2026-11-05; checked 2026-11-08",
     "date": null,
     "quote": "## [1.16.0] - 2026-11-05 / Experimental WIT-SVID support, enabled with the `enable_wit_svids` server and agent options, including Workload API methods, a `spire-agent api fetch wit` CLI command",
     "ref": 30
    },
    {
     "label": "[31]",
     "url": "https://www.ietf.org/archive/id/draft-ietf-wimse-aims-01.txt",
     "claim": "IETF WIMSE WG, *Agent Identity Management System (draft-ietf-wimse-aims-01)*, 2026-11-02",
     "date": "2026-11-02",
     "quote": "This document proposes best practices for authentication and / rather than defining new protocols, this document describes how existing and widely deployed standards can be applied or extended / SPIFFE defines three credential formats: the X.509-SVID … WIT-SVID … and JWT-SVID / An agent participating in this framework MUST be assigned exactly one WIMSE identifier, which MAY be a SPIFFE ID. / leverage existing standards defined by SPIFFE … WIMSE, OAuth and OpenID SSF / draft-ietf-wimse-aims-01 / 2 November 2026 / ietf-oauth-spiffe-client-auth-03, 2 November 2026",
     "ref": 31
    },
    {
     "label": "[32]",
     "url": "https://datatracker.ietf.org/doc/draft-klrc-aiagent-auth/",
     "claim": "Pieter Kasselman, Jeff Lombardo, Yaroslav Rosomakho, Brian Campbell, Nick Steele, and Aaron Parecki, *draft-klrc-aiagent-auth — AI Agent Authentication and Authorization (IETF Datatracker)*, draft-klrc-aiagent-auth-03; last updated 2026-09-09; revision 2026-07-06",
     "date": null,
     "quote": "Replaced by | | draft-ietf-wimse-aims / A SPIFFE identifier ([SPIFFE-ID]) is a URI in the form of spiffe:/// that uniquely identifies a workload within a trust domain. / An agent participating in this framework MUST be assigned exactly one WIMSE identifier, which MAY be a SPIFFE ID.",
     "ref": 32
    },
    {
     "label": "[33]",
     "url": "https://www.ietf.org/archive/id/draft-heigh-wimse-workload-identity-metadata-00.txt",
     "claim": "S. Heigh and J. Salowey (Palo Alto Networks) and Y. Rosomakho (Zscaler), *Workload Identity Metadata (draft-heigh-wimse-workload-identity-metadata-00)*, draft-heigh-wimse-workload-identity-metadata-00; 16 October 2026",
     "date": null,
     "quote": "An optional JWT claim or X.509 certificate extension identifies the metadata endpoint for the credential's subject. / or a JWT-SVID, or retrieved from an authenticated metadata endpoint.",
     "ref": 33
    },
    {
     "label": "[34]",
     "url": "https://docs.cloud.google.com/iam/docs/agent-identity-overview",
     "claim": "Google Cloud, *Agent Identity overview*, last updated 2026-10-29",
     "date": null,
     "quote": "Agent Identity provides a strongly attested, cryptographic identity for each agent that is based on the SPIFFE standard. / Each agent is assigned a unique identity string, or SPIFFE ID / This identity is strongly attested, tied to the agent's lifecycle, and mapped directly to the resource URI where the agent is hosted. / With Agent Identity, your agent can securely authenticate to MCP servers, cloud resources, endpoints, and other agents / Last updated 2026-10-29 UTC.",
     "ref": 34
    },
    {
     "label": "[35]",
     "url": "https://docs.cloud.google.com/iam/docs/managed-workload-identity",
     "claim": "Google Cloud, *Managed workload identities overview | Identity and Access Management (IAM) | Google Cloud Documentation*, checked 2026-11-04",
     "date": null,
     "quote": "Last updated 2026-11-04 UTC. / Managed workload identities for GKE ( Preview ) / Managed workload identities for Compute Engine / To enable interoperability across dynamic and heterogeneous environments, managed workload identities is based on Secure Production Identity Framework For Everyone (SPIFFE) / In Google Cloud, a SPIFFE ID has the following formats: Compute Engine workloads: spiffe://POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID GKE workloads: spiffe://PROJECT_ID.svc.id.goog/ns/KUBERNETES_NAMESPACE/sa/KUBERNETES_SERVICE_ACCOUNT Agent identity workloads: spiffe://agents.global.org-ORGANIZATION_ID.system.id.goog/resources/aiplatform/projects/PROJECT_NUMBER/locations/LOCATION/reasoningEngines/AGENT_NAME",
     "ref": 35
    },
    {
     "label": "[36]",
     "url": "https://cloud.google.com/blog/products/identity-security/whats-new-in-iam-access-risk-and-cloud-governance",
     "claim": "Abhishek A Hemrajani (Google Cloud), *What's new in IAM, Access Risk, and Cloud Governance*, published 2025-05-02",
     "date": null,
     "quote": null,
     "ref": 36
    },
    {
     "label": "[37]",
     "url": "https://www.paloaltonetworks.com/blog/identity-security/ai-agent-security-spiffe-machine-identity/",
     "claim": "Venu Shastri and Joe Garcia (Palo Alto Networks), *Why Cryptographically Verifiable SPIFFE Identity is Key to Scaling AI Agents*, published 2026-07-20",
     "date": null,
     "quote": "Jul 20, 2026 / The Idira Secure AI Agent solution leverages SPIFFE to issue every AI agent a unique, verifiable cryptographic identity / a SPIFFE Verifiable Identity Document (SVID)",
     "ref": 37
    },
    {
     "label": "[38]",
     "url": "https://goteleport.com/blog/workload-identity/",
     "claim": "Ben Arent (Teleport), *Teleport Workload Identity*, published 2024-04-11",
     "date": null,
     "quote": "Published April 11, 2024 / Teleport Workload Identity extends Teleport Machine ID with a SPIFFE workload API endpoint, the ability to issue SVIDs, new TPM server attestation* and support for AWS Roles Anywhere.",
     "ref": 38
    },
    {
     "label": "[39]",
     "url": "https://learn.microsoft.com/en-us/entra/workload-id/workload-identity-federation-spiffe-spire",
     "claim": "Microsoft Learn, *Federate a SPIFFE/SPIRE workload identity*, last updated 2026-08-13",
     "date": null,
     "quote": "the workload exchanges its SPIFFE JWT-SVID for a Microsoft Entra access token and calls an Azure resource, such as Azure Blob Storage, without storing any secrets or certificates. / Last updated on 2026-08-13",
     "ref": 39
    },
    {
     "label": "[40]",
     "url": "https://developer.hashicorp.com/vault/docs/auth/spiffe",
     "claim": "HashiCorp, *SPIFFE auth method overview | Vault | HashiCorp Developer*, checked 2026-10-30",
     "date": null,
     "quote": "The spiffe auth method lets workloads authenticate to Vault using SPIFFE Verifiable Identity Documents (SVIDs). You can choose either X.509 certificates or JWTs whose trust comes from a configured trust bundle. / Appropriate Vault Enterprise license required",
     "ref": 40
    },
    {
     "label": "[41]",
     "url": "https://www.infoq.com/news/2026/03/hashicorp-vault-1-21/",
     "claim": "Diogo Carleto (InfoQ), *HashiCorp Vault 1.21 Brings SPIFFE Authentication, Granular Secret Recovery, and More*, published 2026-03-28",
     "date": null,
     "quote": "HashiCorp Vault 1.21 Brings SPIFFE Authentication, Granular Secret Recovery, and More / Mar 28, 2026 / This version introduces native SPIFFE authentication for non-human workloads / Beyond authentication, Vault can now issue X509-SVIDs to workloads that already authenticate through methods like AppRole or AWS auth / This makes Vault both a consumer and issuer of SPIFFE identities",
     "ref": 41
    },
    {
     "label": "[42]",
     "url": "https://github.com/spiffe/new-website/blob/master/data/users.yaml",
     "claim": "SPIFFE, *SPIFFE website users.yaml*, fetched 2026-11-06",
     "date": null,
     "quote": "Customers can authenticate to Knox with SPIFFE IDs / VMware Secrets Manager is a Kubernetes-first, secure-by-default, cloud-native secrets management solution that uses SPIFFE and SPIRE as its identity control plane. / SPIKE is a lightweight secrets store that uses SPIFFE as its identity control plane. / Idira® Secrets Manager, SaaS by Palo Alto Networks\n    link: https://www.paloaltonetworks.com/idira/machine/secrets-management\n    logo: PANW-logo.svg\n  - name: Istio\n    logo: istio.svg\n  - name: Kubernetes\n    logo: Kubernetes_logo.png\n  - name: Red Hat Zero Trust Workload Identity Manager\n    link: https://docs.redhat.com/en/documentation/openshift_container_platform/latest/html/security_and_compliance/zero-trust-workload-identity-manager\n    logo: redhat.svg\n  - name: Teleport Workload Identity\n    logo: teleport_logo.svg\n    link: https://goteleport.com/platform/machine-and-workload-identity/\n\nconsumers:\n  - name: The Envoy proxy\n    description: Customers can use SPIFFE IDs to establish [mTLS](https://en.wikipedia.org/wiki/Mutual_authentication#mTLS) connections between Envoy proxies\n    link: https://blog.envoyproxy.io/securing-the-service-mesh-with-spire-0-3-abb45cd79810\n    logo: envoy.svg\n  - name: The Ghostunnel proxy\n    description: Customers can use SPIFFE IDs to establish [mTLS](https://en.wikipedia.org/wiki/Mutual_authentication#mTLS) connections between Ghostunnel proxies with built-in support for obtaining X.509-SVID identities via the [SPIFFE Workload API](/docs/latest/spiffe-about/spiffe-concepts/#spiffe-workload-api)\n    link: https://github.com/square/ghostunnel\n    logo: square.jpg\n  - name: Greymatter.io\n    description: Customers can seamlessly leverage SPIFFE IDs to establish secure [mTLS](https://en.wikipedia.org/wiki/Mutual_authentication#mTLS) connections between Greymatter proxies.\n    link: https://greymatter.io/\n    logo: Greymatter-logo.svg\n  - name: Palo Alto Networks\n    description: Idira® Secrets Manager by Palo Alto Networks is a SaaS secrets manager supporting SPIFFE authentication.",
     "ref": 42
    },
    {
     "label": "[43]",
     "url": "https://platform.claude.com/docs/en/manage-claude/workload-identity-federation",
     "claim": "Anthropic, *Workload Identity Federation*, Claude Platform docs; fetched 2026-11-11",
     "date": null,
     "quote": "Workloads with SPIFFE JWT-SVIDs from SPIRE or another conformant issuer. / lets your workloads authenticate to the Claude API with short-lived OpenID Connect (OIDC) tokens / Your workload presents a signed JWT from your identity provider. Anthropic validates it against trust rules you configure in the Claude Console and returns a short-lived Anthropic access token bound to a service account in your organization. / any standards-compliant OIDC issuer such as GitHub Actions, Kubernetes, SPIFFE, Microsoft Entra ID, or Okta.",
     "ref": 43
    },
    {
     "label": "[44]",
     "url": "https://github.com/spiffe/go-spiffe",
     "claim": "SPIFFE, *go-spiffe*, checked 2026-10-30",
     "date": null,
     "quote": null,
     "ref": 44
    },
    {
     "label": "[45]",
     "url": "https://github.com/spiffe/java-spiffe",
     "claim": "SPIFFE, *java-spiffe*, checked 2026-10-30",
     "date": null,
     "quote": null,
     "ref": 45
    },
    {
     "label": "[46]",
     "url": "https://www.cncf.io/blog/2026/09/14/cilium-1-20-gateway-api-externalauth-tcproute-udproute-eni-ipam-for-ipv6-and-more/",
     "claim": "Nico Vibert and Donia Chaiehloudj (Cilium), *Cilium 1.20: Gateway API ExternalAuth, TCPRoute/UDPRoute, ENI IPAM for IPv6, and more*, posted September 14, 2026; fetched 2026-11-11",
     "date": null,
     "quote": "mode uses SPIFFE workload identities, with SPIRE issuing and rotating certificates for teams that want the CNCF-graduated SPIFFE and SPIRE identity stack. / ztunnel remains Beta, but Cilium 1.20 improves its operational readiness. / Posted on September 14, 2026 / the default <code>internal</code> mode runs ztunnel mTLS without requiring SPIRE",
     "ref": 46
    },
    {
     "label": "[47]",
     "url": "https://github.com/spiffe/spire/blob/HEAD/ADOPTERS.md",
     "claim": "SPIRE, *SPIRE ADOPTERS.md*, fetched 2026-11-06",
     "date": null,
     "quote": "Known end users with notable contributions to the advancement of the project include:\n\n* Anthem\n* Bloomberg\n* ByteDance\n* Duke Energy\n* GitHub\n* Netflix\n* Niantic\n* Pinterest\n* Square\n* Twilio\n* Uber\n* Unity Technologies\n* Z Lab Corporation / SPIFFE and SPIRE are being used by numerous other companies, both large and small, to build higher layer products and services. / SPIFFE and SPIRE have integrations available with a number of open-source projects.",
     "ref": 47
    }
   ],
   "form": "endpoint",
   "governance": "The SPIFFE Project is governed by the SPIFFE Steering Committee (SSC), which is exclusively responsible for SPIFFE's standards and the project's strategic goals and direction. The SSC has at least five members. SPIFFE and SPIRE are CNCF graduated projects. Software is Apache License 2.0 and documentation is Creative Commons License 4.0.",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against spiffe.io's own overview/ecosystem page and draft-klrc-aiagent-auth-03"
    },
    {
     "date": "2026-10-28",
     "note": "Verified specification record (SPIRE v1.15.5, 39 sources)"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "spiffe",
   "implementation": "multi-implementation",
   "last_verified": "2026-11-11",
   "name": "SPIFFE (Secure Production Identity Framework for Everyone)",
   "native_status": "SPIFFE ID, X.509-SVID, JWT-SVID, the Workload API, the Workload Endpoint, trust domain and bundle, and federation are each marked Stability: Stable. WIT-SVID is Stability: Incubating, as is the WIT-SVID section of the Workload API.",
   "origin": {
    "date": "2016",
    "org": "Joe Beda / Scytale / CNCF"
   },
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "stable",
   "probe": {
    "method": "n/a (local IPC, not remotely probable)",
    "on_absent": "No SPIFFE identity is available to the workload; it cannot present an SVID for mTLS or JWT-based authentication",
    "parse": "Workload API FetchX509SVID/FetchJWTSVID response contains a SPIFFE ID (spiffe://trust-domain/path) and a short-lived SVID",
    "path": "unix:///run/spire/sockets/agent.sock (SPIRE's default; not part of the SPIFFE spec itself)"
   },
   "question": "Which workload instance — potentially including an AI agent process — is making this request, verifiable independent of network location?",
   "scope": "general",
   "spec_url": "https://spiffe.io/docs/latest/spiffe-about/overview/",
   "step": "identify",
   "summary_md": "**SPIFFE (Secure Production Identity Framework for Everyone)** is an open-source specification set—originated by Joe Beda in 2016, accepted into the CNCF Sandbox in March 2018 with Scytale as primary maintainer, and governed by the SPIFFE Steering Committee—for mutually authenticating software workloads across dynamic, heterogeneous environments. It defines `spiffe://` workload URIs and short-lived cryptographic **SVIDs** that workloads use to establish mutual TLS (mTLS) connections or sign and verify JWT tokens. A workload retrieves its identity over gRPC from the local **SPIFFE Workload Endpoint** (exposed via a Unix Domain Socket or TCP listen socket) without presenting a caller token. The reference runtime **SPIRE** exposes this Workload API, attests running software systems, and issues `X.509-SVID` and `JWT-SVID` credentials. While `X.509-SVID` and `JWT-SVID` are mandatory `Stable` profiles, SPIFFE introduced formal specification stability levels on 2026-07-01 alongside the optional `Incubating` **WIT-SVID** profile.",
   "track": "linux-foundation",
   "version": {
    "date": "2026-10-20",
    "label": "SPIRE v1.15.5 (specifications carry stability levels; the stability process was introduced 2026-07-01)"
   },
   "watch": [
    {
     "type": "page",
     "url": "https://spiffe.io/docs/latest/spiffe-about/overview/",
     "selector": "main",
     "cadence": "weekly"
    }
   ],
   "use_cases": [
    "prove-agent-identity",
    "delegate-user-authority"
   ],
   "audience": [
    "platform",
    "agent-builder"
   ],
   "pairs_with": [
    "wimse",
    "wimse-aims",
    "aiagent-auth",
    "wimse-workload-identity-metadata"
   ],
   "prerequisites": [],
   "hatnote_md": "This page covers the CNCF SPIFFE specification set and its SPIRE reference runtime. For the IETF multi-system workload identity architecture that accepts SPIFFE IDs as conforming identifiers, see [WIMSE](/protocols/wimse/); for signing individual HTTP requests, see [HTTP Message Signatures](/protocols/http-message-signatures/).",
   "tier": "flagship",
   "lifecycle_status": "published_standard",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-11",
   "v05_hatnote_html_md": "This page covers the CNCF SPIFFE specification set and its SPIRE reference runtime. For the IETF multi-system workload identity architecture that accepts SPIFFE IDs as conforming identifiers, see [WIMSE](/protocols/wimse/); for signing individual HTTP requests, see [HTTP Message Signatures](/protocols/http-message-signatures/). [1][2][3][4]",
   "v05_elevator_pitch_md": "SPIFFE is a cloud-native identity standard that gives software services and AI workloads a verifiable cryptographic identity so they can authenticate to one another across Kubernetes clusters, virtual machines, and multi-cloud networks. Instead of relying on brittle IP allowlists or long-lived API keys stored on disk, each workload queries a local Unix socket over gRPC to obtain short-lived `X.509-SVID` certificates or `JWT-SVID` tokens bound to a canonical `spiffe://` URI. [1][5][6]",
   "v05_lead_md": "**SPIFFE (Secure Production Identity Framework for Everyone)** is an open-source specification set—originated by Joe Beda in 2016, accepted into the CNCF Sandbox in March 2018 with Scytale as primary maintainer, and governed by the SPIFFE Steering Committee—for mutually authenticating software workloads across dynamic, heterogeneous environments. [1][7][8][9] It defines `spiffe://` workload URIs and short-lived cryptographic **SVIDs** that workloads use to establish mutual TLS (mTLS) connections or sign and verify JWT tokens. [1][5] A workload retrieves its identity over gRPC from the local **SPIFFE Workload Endpoint** (exposed via a Unix Domain Socket or TCP listen socket) without presenting a caller token. The reference runtime **SPIRE** exposes this Workload API, attests running software systems, and issues `X.509-SVID` and `JWT-SVID` credentials. [10][11][12] While `X.509-SVID` and `JWT-SVID` are mandatory `Stable` profiles, SPIFFE introduced formal specification stability levels on 2026-07-01 alongside the optional `Incubating` **WIT-SVID** profile. [12][13][14][15][16]",
   "v05_identity_sentence_md": "**SPIFFE (Secure Production Identity Framework for Everyone)** is an open-source specification set—originated by Joe Beda in 2016, accepted into the CNCF Sandbox in March 2018 with Scytale as primary maintainer, and governed by the SPIFFE Steering Committee—for mutually authenticating software workloads across dynamic, heterogeneous environments. [1][7][8][9] It defines `spiffe://` workload URIs and short-lived cryptographic **SVIDs** that workloads use to establish mutual TLS (mTLS) connections or sign and verify JWT tokens. [1][5]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Identify](/category/identify/) (`identify`)"
    },
    {
     "label": "Form",
     "value_md": "Standards framework (identifiers, documents, APIs, and endpoints) (`endpoint`)"
    },
    {
     "label": "Originated by",
     "value_md": "Joe Beda, 2016 (paper presented at GlueCon). Scytale was the primary maintainer when the CNCF accepted SPIFFE into the Sandbox on 2018-03-29. [7][8]"
    },
    {
     "label": "Governed by",
     "value_md": "SPIFFE Steering Committee (SSC, at least five members) sets SPIFFE standards and strategy. CNCF Graduated: SPIFFE 2022-08-23, SPIRE 2022-08-22 (announced 2022-09-20). [9][17][18][19][20]"
    },
    {
     "label": "Track",
     "value_md": "CNCF. Sandbox on 2018-03-29, Incubating on 2020-06-22, Graduated on 2022-08-23 (SPIRE graduated on 2022-08-22). [2][18][19]"
    },
    {
     "label": "Status",
     "value_md": "X.509-SVID, JWT-SVID, SPIFFE ID, Workload API, Endpoint, trust domain, bundle, and federation: Stable. WIT-SVID and its API section: Incubating. [5][10][12][16][21][22][23][24]"
    },
    {
     "label": "Version",
     "value_md": "Stability levels since 2026-07-01, when WIT-SVID was integrated. SPIRE v1.16.0 published 2026-11-05; SPIRE is the reference implementation. [13][14][15][25][26]"
    },
    {
     "label": "Message format",
     "value_md": "SPIFFE ID: `spiffe` scheme, non-zero trust domain, no query or fragment. Three components: SPIFFE ID, SVID, and the Workload API. [5][6]"
    },
    {
     "label": "Token format",
     "value_md": "JWT-SVID, the first token-based SVID. WIT-SVID, a sub-profile of the WIMSE Workload Identity Token, marked Stability: Incubating. [16][22]"
    },
    {
     "label": "Record format",
     "value_md": "X.509-SVID: exactly one URI SAN, the SPIFFE ID. SPIFFE bundle: an RFC 7517 JWK Set of the trust domain's keys. [21][23]"
    },
    {
     "label": "Transports",
     "value_md": "Workload Endpoint is gRPC on a Unix domain socket or a TCP listen socket; prefer the Unix domain socket. [10]"
    },
    {
     "label": "Specification",
     "value_md": "[SPIFFE Overview](https://spiffe.io/docs/latest/spiffe-about/overview/) · [The SPIFFE standard](https://github.com/spiffe/spiffe/blob/main/standards/SPIFFE.md) [1][6]"
    },
    {
     "label": "Found at",
     "value_md": "Local Workload Endpoint over gRPC (Unix domain socket or TCP). A bundle endpoint URL serves the trust domain's SPIFFE bundle. [10][24]"
    },
    {
     "label": "Licence",
     "value_md": "Software under the Apache License version 2.0. Documentation under the Creative Commons License version 4.0. [9]"
    }
   ],
   "v05_problem_md": "Microservices, container orchestrators, and cloud computing create dynamic, heterogeneous production environments where conventional IP-based network policies and long-lived static secrets struggle to scale. In Kubernetes and cloud-native deployments, SPIFFE and SPIRE replace static secrets with short-lived, cryptographically verifiable workload identities. [6][27] SPIFFE binds each workload to a platform-agnostic `spiffe://trust-domain-name/path` URI encoded either as the single URI Subject Alternative Name inside an `X.509-SVID` certificate or as the subject of a token-based `JWT-SVID` (for Layer 7 traversal) or `WIT-SVID` (a WIMSE Workload Identity Token sub-profile). Relying parties validate presented SVIDs against the authoritative public keys published in the issuing trust domain's SPIFFE bundle. [5][12][16][21][22][23] SPIFFE authenticates workload and agent identity to prevent spoofing, leaving access control to a separate authorization policy layer above it, while SPIFFE Federation authenticates SVIDs across distinct trust domains. [24][28]",
   "v05_mechanism_delta_md": "SPIFFE binds each workload to a platform-agnostic `spiffe://trust-domain-name/path` URI encoded either as the single URI Subject Alternative Name inside an `X.509-SVID` certificate or as the subject of a token-based `JWT-SVID` (for Layer 7 traversal) or `WIT-SVID` (a WIMSE Workload Identity Token sub-profile). Relying parties validate presented SVIDs against the authoritative public keys published in the issuing trust domain's SPIFFE bundle. [5][12][16][21][22][23]",
   "v05_scope_boundary_md": "SPIFFE authenticates workload and agent identity to prevent spoofing, leaving access control to a separate authorization policy layer above it, while SPIFFE Federation authenticates SVIDs across distinct trust domains. [24][28]",
   "v05_fuzzy_additions": [
    {
     "id": "spiffe-id-syntax-trust-domains-and-trust-bundles",
     "heading": "SPIFFE ID syntax, trust domains, and trust bundles",
     "body_md": "Each SPIFFE ID is an RFC 3986 URI of the form `spiffe://trust-domain-name/path`, combining the `spiffe` scheme, an authority naming the trust root, and a workload path of up to 2048 total bytes. Each trust domain publishes an authoritative SPIFFE bundle of public keys that relying workloads and federated domains use to verify its SVIDs. [5][23][24]",
     "bullets": [
      {
       "label": "URI shape and length",
       "text_md": "Valid SPIFFE IDs use the `spiffe` scheme, a non-zero trust domain authority, and a site-specific `hier-part` path (such as `spiffe://staging.example.com/payments/web-fe`) with no query or fragment component. All components count toward the mandatory 2048-byte URI support limit, while the trust domain name itself is capped at 255 bytes. [5]"
      },
      {
       "label": "Trust domain character rules",
       "text_md": "The authority `host` must be lowercase `[a-z0-9.-_]` without percent-encoding, with empty `userinfo` and `port` fields (allowing IPv4 dotted quads but excluding IPv6). Because trust domain names are self-registered and collisions prevent federation, operators should suffix a DNS domain they own; path segments match `[a-zA-Z0-9.-_]` with no relative modifiers (`.` or `..`) or trailing slash. [5]"
      },
      {
       "label": "Bundles, sequence, and refresh",
       "text_md": "A SPIFFE bundle is serialized as an RFC 7517 JWK Set whose required `keys` array may be empty (instructing workloads to treat all SVIDs from that trust domain as untrusted). Publishers set a monotonically increasing `spiffe_sequence` integer to order updates and a `spiffe_refresh_hint` interval in seconds to govern consumer polling and key-redaction propagation. [23]"
      },
      {
       "label": "Keys and cross-domain federation",
       "text_md": "Each JWK entry in a bundle sets a case-sensitive `use` parameter (`x509-svid`, `jwt-svid`, or `wit-svid`): X.509 authorities store a single base64-encoded DER CA certificate in `x5c`, while JWT signing keys require a `kid` identifier. For cross-domain authentication, SPIFFE Federation exposes a bundle endpoint URL serving the trust domain's current bundle. [21][22][23][24]"
      }
     ]
    },
    {
     "id": "workload-api-attestation-and-svid-credential-formats",
     "heading": "Workload API attestation and SVID credential formats",
     "body_md": "Rather than provisioning static bootstrap credentials on disk, workloads invoke the local unauthenticated Workload API so the node agent can attest the caller process out-of-band and stream short-lived SVIDs and federated trust bundles. [6][11][12][16][22]",
     "bullets": [
      {
       "label": "gRPC without a caller token",
       "text_md": "The SPIFFE Workload Endpoint is served over gRPC on a Unix Domain Socket (preferred) or TCP listen socket without TLS or client authentication; if unconfigured, clients fall back to `SPIFFE_ENDPOINT_SOCKET` (such as `unix:///path/to/endpoint.sock` or `tcp://127.0.0.1:8000`). Every request must include the static gRPC metadata header `workload.spiffe.io` set to `true` as a server-side request forgery (SSRF) guard. [6][10]"
      },
      {
       "label": "SPIRE kernel and platform attestation",
       "text_md": "SPIRE performs two-tier attestation before issuing SVIDs: node attestation establishes trust in the node agent, and workload attestation inspects caller process metadata via kernel introspection, the kubelet, or container runtimes to match attestor selectors against registered entries without active workload participation. [10][11][27][29]"
      },
      {
       "label": "X.509-SVID leaves for mTLS",
       "text_md": "An `X.509-SVID` leaf certificate encodes the workload's SPIFFE ID as its single URI Subject Alternative Name (SAN) with a non-root path; validators reject certificates containing multiple URI SANs. When the Extended Key Usage extension is present on a leaf SVID, both `id-kp-serverAuth` and `id-kp-clientAuth` must be set to support mutual TLS. [11][12][21]"
      },
      {
       "label": "JWT-SVID and WIT-SVID tokens",
       "text_md": "`JWT-SVID` encodes Layer 7 workload identity as a JWS Compact Serialization token carrying the workload's SPIFFE ID in `sub`, mandatory `aud` and aggressive `exp` claims to limit bearer-token replay, and HTTP transport via `Authorization: Bearer`. `WIT-SVID` (`Stability: Incubating`, integrated 2026-07-01) sub-profiles the IETF WIMSE Workload Identity Token as a compact JWS with `typ` header `wit+jwt`; SPIRE `v1.16.0` (2026-11-05) added experimental `WIT-SVID` issuance behind `enable_wit_svids` and `spire-agent api fetch wit` while tracking issue 6326 remains open. [12][14][15][16][22][25][30]"
      }
     ]
    }
   ],
   "v05_diagram": {
    "title": "SPIFFE ID, SVID, and Workload API",
    "heading": "SPIFFE ID, SVID, and Workload API",
    "mermaid": "flowchart LR\n    Workload[Workload]\n    API[\"Workload API, local, no client authentication handshake\"]\n    SVID[\"SVID: X.509, JWT, or WIT\"]\n    ID[SPIFFE ID]\n    Bundles[CA bundles for other trust domains]\n    Workload -->|retrieves or is issued an SVID| API\n    API --> SVID\n    SVID -->|carries| ID\n    API -->|delivers bundles used for federation| Bundles",
    "caption_md": "The workload obtains an `SVID` from the local `Workload API`. The `SVID` carries a `SPIFFE ID`. Named document types are `X.509`, `JWT`, and `WIT`. The Workload API delivers `CA bundles` for federation. [6]"
   },
   "v05_wire_artifact": {
    "title": "FetchX509SVID stream response: SVIDs and federated bundles",
    "heading": "FetchX509SVID stream response: SVIDs and federated bundles",
    "lang": "protobuf",
    "code": "rpc FetchX509SVID(X509SVIDRequest) returns (stream X509SVIDResponse);\n\nmessage X509SVIDRequest {  }\n\nmessage X509SVIDResponse {\n    repeated X509SVID svids = 1;\n    repeated bytes crl = 2;\n    map<string, bytes> federated_bundles = 3;\n}\n\nmessage X509SVID {\n    string spiffe_id = 1;\n    bytes x509_svid = 2;\n    bytes x509_svid_key = 3;\n    bytes bundle = 4;\n    string hint = 5;\n}",
    "caption_md": "`FetchX509SVID` streams `X509SVIDResponse` with `svids`, `crl`, and `federated_bundles`. [12]"
   },
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "X.509 PKI Certificates (RFC 5280)",
      "spec_or_rfc": "RFC 5280",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "RFC 5280 section 4.2.1.6 is the SAN an X.509-SVID cites: the SPIFFE ID is the single URI in that extension. [21]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "wimse",
      "target_name": "Workload Identity in Multi System Environments (WIMSE)",
      "relation_type": "depended_on_by",
      "relation_label": "Depended on by",
      "delta_md": "SPIFFE defines concrete `spiffe://` URIs, SVID formats, and the local gRPC Workload API, while the IETF WIMSE architecture standardizes cross-system workload identity in liaison with CNCF SPIFFE/SPIRE and names the SPIFFE ID as a conforming identifier format. [1][3][4]"
     },
     {
      "target_id": "wimse-aims",
      "target_name": "AI Identity Management System (AIMS)",
      "relation_type": "depended_on_by",
      "relation_label": "Depended on by",
      "delta_md": "The 2 November 2026 working-group draft `draft-ietf-wimse-aims-01` (Informational) applies existing SPIFFE (`X.509-SVID`, `WIT-SVID`, `JWT-SVID`), WIMSE, OAuth, and OpenID SSF standards rather than defining new protocols, and requires each AI agent to hold exactly one WIMSE identifier, which may be a SPIFFE ID. That revision cites OAuth SPIFFE Client Authentication `draft-ietf-oauth-spiffe-client-auth-03` (2 November 2026). [1][31]"
     },
     {
      "target_id": "aiagent-auth",
      "target_name": "AI Agent Authentication and Authorization",
      "relation_type": "depended_on_by",
      "relation_label": "Depended on by",
      "delta_md": "The individual submission `draft-klrc-aiagent-auth` (replaced by `draft-ietf-wimse-aims`) profiles SPIFFE `spiffe://` trust-domain URIs as a conforming WIMSE identifier format for AI agent authentication. [1][32]"
     },
     {
      "target_id": "wimse-workload-identity-metadata",
      "target_name": "Workload Identity Metadata",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Optional JWT claim or X.509 extension identifies the subject's metadata endpoint. Attributes may be in a JWT-SVID or fetched from that authenticated endpoint. [1][33]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (23 probed or cited examples across 3 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).",
    "side_a": {
     "visible": true,
     "heading": "Identity issuers & control planes",
     "col4_header": "SVID formats & control-plane boundary",
     "note_md": null,
     "rows": [
      {
       "actor": "SPIRE (CNCF)",
       "role": "Identity issuer / CA",
       "status": "Supported",
       "status_display": "Supported · as of 2026-11-05",
       "col4_md": "Reference implementation of SPIFFE (CNCF Graduated); issues X.509-SVIDs, JWT-SVIDs, and (in v1.16.0, 2026-11-05) experimental WIT-SVIDs via the Workload API.",
       "source_md": "[SPIRE README](https://github.com/spiffe/spire/blob/main/README.md) [11] · [CNCF SPIRE project](https://www.cncf.io/projects/spire/) [19] · [SPIRE latest release](https://github.com/spiffe/spire/releases) [25] · [SPIFFE overview](https://spiffe.io/docs/latest/spiffe-about/overview/) [1][30]"
      },
      {
       "actor": "Uber",
       "role": "Identity issuer / CA",
       "status": "Supported",
       "status_display": "Supported · as of 2023-11-09",
       "col4_md": "Uses SPIRE for workload identity across GCP, OCI, AWS, and on-premise since mid-2018.",
       "source_md": "[Uber, adopting SPIFFE/SPIRE](https://www.uber.com/us/en/blog/our-journey-adopting-spiffe-spire/) [29]"
      },
      {
       "actor": "Google Cloud Agent Identity",
       "role": "Identity issuer / CA",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-29",
       "col4_md": "Attested SPIFFE ID per agent, used with MCP servers and mapped to the resource URI.",
       "source_md": "[Agent Identity overview](https://docs.cloud.google.com/iam/docs/agent-identity-overview) [34]"
      },
      {
       "actor": "Google Cloud Managed Workload Identities",
       "role": "Identity issuer / CA",
       "status": "Partial",
       "status_display": "Partial · as of 2026-11-04",
       "col4_md": "Issues SPIFFE IDs for mTLS across Compute Engine (`.workload.id.goog`), GKE (`.svc.id.goog`, Preview), and agents (`.system.id.goog`).",
       "source_md": "[About managed workload identities](https://docs.cloud.google.com/iam/docs/managed-workload-identity) [35] · [What's new in IAM (May 2, 2025)](https://cloud.google.com/blog/products/identity-security/whats-new-in-iam-access-risk-and-cloud-governance) [36]"
      },
      {
       "actor": "Red Hat OpenShift Zero Trust Workload Identity Manager",
       "role": "Identity issuer / CA",
       "status": "Supported",
       "status_display": "Supported · as of 2026-01-23",
       "col4_md": "Generally available on OpenShift, based on upstream SPIRE, the SPIFFE reference implementation.",
       "source_md": "[Red Hat OpenShift GA](https://www.redhat.com/en/blog/zero-trust-workload-identity-manager-generally-available-red-hat-openshift) [26]"
      },
      {
       "actor": "Palo Alto Networks Idira",
       "role": "Identity issuer / CA",
       "status": "Supported",
       "status_display": "Supported · as of 2026-07-20",
       "col4_md": "Issues every AI agent a unique SPIFFE Verifiable Identity Document (SVID).",
       "source_md": "[Idira and SPIFFE](https://www.paloaltonetworks.com/blog/identity-security/ai-agent-security-spiffe-machine-identity/) [37]"
      },
      {
       "actor": "Teleport Workload Identity",
       "role": "Identity issuer / CA",
       "status": "Supported",
       "status_display": "Supported · as of 2024-04-11",
       "col4_md": "Adds a SPIFFE Workload API, SVID issuance, TPM attestation, and AWS Roles Anywhere.",
       "source_md": "[Teleport Workload Identity](https://goteleport.com/blog/workload-identity/) [38]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Relying cloud IAM, gateways & secrets managers",
     "col4_header": "Federation / secret-store mechanism",
     "note_md": null,
     "rows": [
      {
       "actor": "Microsoft Entra Workload ID",
       "role": "Relying server / Gateway",
       "status": "Supported",
       "status_display": "Supported · as of 2026-08-13",
       "col4_md": "Exchanges a SPIFFE JWT-SVID for an Entra token without stored secrets or certificates.",
       "source_md": "[Federate SPIFFE/SPIRE with Entra](https://learn.microsoft.com/en-us/entra/workload-id/workload-identity-federation-spiffe-spire) [39]"
      },
      {
       "actor": "HashiCorp Vault 1.21",
       "role": "Relying server / Gateway",
       "status": "Supported",
       "status_display": "Supported · as of 2026-03-28",
       "col4_md": "Vault Enterprise `spiffe` auth takes X.509 or JWT SVIDs and can issue X509-SVIDs.",
       "source_md": "[Vault SPIFFE auth method docs](https://developer.hashicorp.com/vault/docs/auth/spiffe) [40] · [InfoQ Vault 1.21 report](https://www.infoq.com/news/2026/03/hashicorp-vault-1-21/) [41]"
      },
      {
       "actor": "Pinterest Knox",
       "role": "Relying service",
       "status": "Listed integration",
       "status_display": "Listed integration · checked 2026-10-30",
       "col4_md": "Open-source works-with listing: X.509 SVID and JWT SVID only.",
       "source_md": "[SPIFFE overview](https://spiffe.io/docs/latest/spiffe-about/overview/) [1] · [SPIFFE users.yaml](https://github.com/spiffe/new-website/blob/master/data/users.yaml) [42]"
      },
      {
       "actor": "VMware Secrets Manager",
       "role": "Relying service",
       "status": "Listed integration",
       "status_display": "Listed integration · checked 2026-10-30",
       "col4_md": "Open-source works-with listing: X.509 SVID, JWT SVID, and SPIFFE Authentication.",
       "source_md": "[SPIFFE overview](https://spiffe.io/docs/latest/spiffe-about/overview/) [1] · [SPIFFE users.yaml](https://github.com/spiffe/new-website/blob/master/data/users.yaml) [42]"
      },
      {
       "actor": "SPIKE",
       "role": "Relying service",
       "status": "Listed integration",
       "status_display": "Listed integration · checked 2026-10-30",
       "col4_md": "Open-source works-with listing: X.509 SVID, JWT SVID, and SPIFFE Authentication.",
       "source_md": "[SPIFFE overview](https://spiffe.io/docs/latest/spiffe-about/overview/) [1] · [SPIFFE users.yaml](https://github.com/spiffe/new-website/blob/master/data/users.yaml) [42]"
      },
      {
       "actor": "AWS IAM Roles Anywhere",
       "role": "Relying service",
       "status": "Listed integration",
       "status_display": "Listed integration · checked 2026-10-30",
       "col4_md": "Commercial works-with listing: X.509 SVID authentication only.",
       "source_md": "[SPIFFE overview](https://spiffe.io/docs/latest/spiffe-about/overview/) [1]"
      },
      {
       "actor": "GCP Workload Identity Federation",
       "role": "Relying service",
       "status": "Listed integration",
       "status_display": "Listed integration · checked 2026-10-30",
       "col4_md": "Commercial works-with listing: X.509 SVID and JWT SVID authentication.",
       "source_md": "[SPIFFE overview](https://spiffe.io/docs/latest/spiffe-about/overview/) [1]"
      },
      {
       "actor": "WarpStream",
       "role": "Relying service",
       "status": "Listed integration",
       "status_display": "Listed integration · checked 2026-10-30",
       "col4_md": "Commercial works-with listing: X.509 SVID authentication only.",
       "source_md": "[SPIFFE overview](https://spiffe.io/docs/latest/spiffe-about/overview/) [1]"
      },
      {
       "actor": "Idira Secrets Manager",
       "role": "Relying service",
       "status": "Listed integration",
       "status_display": "Listed integration · checked 2026-11-06",
       "col4_md": "SaaS secrets manager supporting SPIFFE authentication.",
       "source_md": "[SPIFFE users.yaml](https://github.com/spiffe/new-website/blob/master/data/users.yaml) [42]"
      },
      {
       "actor": "Anthropic Claude Platform",
       "role": "Relying server / Gateway",
       "status": "Supported",
       "status_display": "Supported · checked 2026-11-11",
       "col4_md": "Accepts SPIFFE JWT-SVIDs from SPIRE or another conformant issuer and returns a short-lived Anthropic access token for the Claude API.",
       "source_md": "[Workload Identity Federation](https://platform.claude.com/docs/en/manage-claude/workload-identity-federation) [43]"
      }
     ]
    },
    "additional_tables": [
     {
      "visible": true,
      "heading": "Service proxies, meshes & Workload API SDKs",
      "col4_header": "mTLS / SVID consumption surface",
      "note_md": null,
      "rows": [
       {
        "actor": "Envoy",
        "role": "Relying proxy",
        "status": "Supported",
        "status_display": "Supported · checked 2026-10-30",
        "col4_md": "SPIRE SDS installs and rotates TLS certificates and trust bundles inside Envoy.",
        "source_md": "[SPIRE README](https://github.com/spiffe/spire/blob/main/README.md) [11] · [SPIFFE overview](https://spiffe.io/docs/latest/spiffe-about/overview/) [1]"
       },
       {
        "actor": "SPIFFE Workload API client libraries",
        "role": "Workload API SDK",
        "status": "Supported",
        "status_display": "Supported · checked 2026-10-30",
        "col4_md": "Official Workload API clients in Go (`go-spiffe`) and Java (`java-spiffe`).",
        "source_md": "[SPIRE README](https://github.com/spiffe/spire/blob/main/README.md) [11] · [go-spiffe](https://github.com/spiffe/go-spiffe) [44] · [java-spiffe](https://github.com/spiffe/java-spiffe) [45]"
       },
       {
        "actor": "Ghostunnel",
        "role": "Relying proxy",
        "status": "Listed integration",
        "status_display": "Listed integration · checked 2026-10-30",
        "col4_md": "Open-source works-with listing: X.509 SVID, JWT SVID, and SPIFFE Authentication.",
        "source_md": "[SPIFFE overview](https://spiffe.io/docs/latest/spiffe-about/overview/) [1]"
       },
       {
        "actor": "Istio",
        "role": "Relying service",
        "status": "Listed integration",
        "status_display": "Listed integration · checked 2026-10-30",
        "col4_md": "Open-source works-with listing: X.509 SVID, JWT SVID, and SPIFFE Authentication.",
        "source_md": "[SPIFFE overview](https://spiffe.io/docs/latest/spiffe-about/overview/) [1]"
       },
       {
        "actor": "Cilium",
        "role": "Relying proxy",
        "status": "Supported (preview)",
        "status_display": "Supported (preview) · as of 2026-09-14",
        "col4_md": "Cilium 1.20 (2026-09-14) spire mode uses SPIFFE workload identities, with SPIRE issuing and rotating certificates. ztunnel remains Beta.",
        "source_md": "[Cilium 1.20 announcement](https://www.cncf.io/blog/2026/09/14/cilium-1-20-gateway-api-externalauth-tcproute-udproute-eni-ipam-for-ipv6-and-more/) [46]"
       },
       {
        "actor": "Greymatter.io",
        "role": "Relying service",
        "status": "Listed integration",
        "status_display": "Listed integration · checked 2026-10-30",
        "col4_md": "Commercial works-with listing marks all four columns, including Workload API.",
        "source_md": "[SPIFFE overview](https://spiffe.io/docs/latest/spiffe-about/overview/) [1]"
       }
      ]
     }
    ],
    "censuses": [
     {
      "label": "SPIRE ADOPTERS.md directory",
      "as_of": null,
      "value_md": "Lists 13 end-user organizations with notable contributions (Anthem, Bloomberg, ByteDance, Duke Energy, GitHub, Netflix, Niantic, Pinterest, Square, Twilio, Uber, Unity Technologies, and Z Lab Corporation), 17 vendor and platform builders (including Amazon, Anthropic, Cisco, Google, HashiCorp, IBM, SAP, Tigera, and VMware), and 23 open-source project integrations (including Cert-Manager, Consul, Dapr, Envoy, Ghostunnel, Istio, Keycloak, Knox, Kubernetes, Linkerd, Sigstore, Tornjak, Traefik, and Vault). [47]"
     }
    ],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "ans",
     "target_name": "Agent Name Service v2 (ANS)",
     "relation_label": "Peer alternative",
     "delta": "A SPIFFE ID is a spiffe:// URI carried in one X.509-SVID URI SAN or a JWT-SVID, while ANS publishes _ans-badge and _ans TXT records and a transparency log at transparency.ans.godaddy.com.",
     "item_md": "**[Agent Name Service v2 (ANS)](/protocols/ans/)** (Peer alternative) — A SPIFFE ID is a spiffe:// URI carried in one X.509-SVID URI SAN or a JWT-SVID, while ANS publishes _ans-badge and _ans TXT records and a transparency log at transparency.ans.godaddy.com."
    },
    {
     "target_id": "agent-audit-trail",
     "target_name": "Agent Audit Trail",
     "relation_label": "Complements",
     "delta": "SPIFFE defines the workload SVID, while the Agent Audit Trail is the separate hash-chained JSON log of identity, principal, action, outcome, and trust level.",
     "item_md": "**[Agent Audit Trail](/protocols/agent-audit-trail/)** (Complements) — SPIFFE defines the workload SVID, while the Agent Audit Trail is the separate hash-chained JSON log of identity, principal, action, outcome, and trust level."
    },
    {
     "target_id": "scitt-ai-agent-execution",
     "target_name": "AI Agent Execution Profile of SCITT",
     "relation_label": "Complements",
     "delta": "The optional agent_workload_id field of an AgentInteractionRecord can hold a SPIFFE ID, and the record remains the COSE-signed statement registered with the evidence custodian.",
     "item_md": "**[AI Agent Execution Profile of SCITT](/protocols/scitt-ai-agent-execution/)** (Complements) — The optional agent_workload_id field of an AgentInteractionRecord can hold a SPIFFE ID, and the record remains the COSE-signed statement registered with the evidence custodian."
    },
    {
     "target_id": "workload-authz-grant",
     "target_name": "Workload Authorization Grant (WAG)",
     "relation_label": "Complements",
     "delta": "SPIFFE defines X.509-SVID, WIT-SVID, and JWT-SVID workload credentials, while `draft-carleton-workload-authz-grant-02` (2 November 2026) binds short-lived workload authorization grants (oauth-wag+jwt) to WIMSE/SPIFFE workload identifiers.",
     "item_md": "**[Workload Authorization Grant (WAG)](/protocols/workload-authz-grant/)** (Complements) — SPIFFE defines X.509-SVID, WIT-SVID, and JWT-SVID workload credentials, while `draft-carleton-workload-authz-grant-02` (2 November 2026) binds short-lived workload authorization grants (oauth-wag+jwt) to WIMSE/SPIFFE workload identifiers."
    },
    {
     "target_id": "wimse-agent-audit-record",
     "target_name": "An Audit Record Format for AI Agent Authorization Decisions",
     "relation_label": "Complements",
     "delta": "The audited workload identity can be a SPIFFE ID, and the signed object is the DSSE in-toto audit record rather than the X.509-SVID.",
     "item_md": "**[An Audit Record Format for AI Agent Authorization Decisions](/protocols/wimse-agent-audit-record/)** (Complements) — The audited workload identity can be a SPIFFE ID, and the signed object is the DSSE in-toto audit record rather than the X.509-SVID."
    },
    {
     "target_id": "lws10-authn-ssi-cid",
     "target_name": "LWS 1.0 Authentication Suite: Self-signed Identity using Controlled Identifiers",
     "relation_label": "Peer alternative",
     "delta": "A SPIFFE JWT-SVID is issued inside a trust domain and read from the local Workload API, while this JWT's key is resolved from the subject's HTTPS or DID document.",
     "item_md": "**[LWS 1.0 Authentication Suite: Self-signed Identity using Controlled Identifiers](/protocols/lws10-authn-ssi-cid/)** (Peer alternative) — A SPIFFE JWT-SVID is issued inside a trust domain and read from the local Workload API, while this JWT's key is resolved from the subject's HTTPS or DID document."
    },
    {
     "target_id": "agent-authorization-envelope",
     "target_name": "Agent Authorization Envelope",
     "relation_label": "Complements",
     "delta": "A SPIFFE X.509-SVID or JWT-SVID identifies the workload, while the envelope is a JWS-secured W3C Verifiable Credential carrying a mandate, constraints, and a validity block.",
     "item_md": "**[Agent Authorization Envelope](/protocols/agent-authorization-envelope/)** (Complements) — A SPIFFE X.509-SVID or JWT-SVID identifies the workload, while the envelope is a JWS-secured W3C Verifiable Credential carrying a mandate, constraints, and a validity block."
    },
    {
     "item_md": "**[Identify protocols](/category/identify/)** — Category index for `identify` standards."
    }
   ],
   "v05_compiled_md": "---\nid: spiffe\ntitle: \"SPIFFE (Secure Production Identity Framework for Everyone)\"\ntier: flagship\nlifecycle_status: published_standard\ncategory: identify\nform: endpoint\nwire_archetype: identity_auth_crypto\nspec_url: https://spiffe.io/docs/latest/spiffe-about/overview/\nlast_checked: 2026-11-11\n---\n\n# SPIFFE (Secure Production Identity Framework for Everyone)\n\n**Category:** [Identify](/category/identify/) (`identify`) · **Form:** Standards framework (identifiers, documents, APIs, and endpoints) (`endpoint`) · **Last checked:** 2026-11-11\n\n> *This page covers the CNCF SPIFFE specification set and its SPIRE reference runtime. For the IETF multi-system workload identity architecture that accepts SPIFFE IDs as conforming identifiers, see [WIMSE](/protocols/wimse/); for signing individual HTTP requests, see [HTTP Message Signatures](/protocols/http-message-signatures/). [1][2][3][4]*\n\n> **In brief:** SPIFFE is a cloud-native identity standard that gives software services and AI workloads a verifiable cryptographic identity so they can authenticate to one another across Kubernetes clusters, virtual machines, and multi-cloud networks. Instead of relying on brittle IP allowlists or long-lived API keys stored on disk, each workload queries a local Unix socket over gRPC to obtain short-lived `X.509-SVID` certificates or `JWT-SVID` tokens bound to a canonical `spiffe://` URI. [1][5][6]\n\n**SPIFFE (Secure Production Identity Framework for Everyone)** is an open-source specification set—originated by Joe Beda in 2016, accepted into the CNCF Sandbox in March 2018 with Scytale as primary maintainer, and governed by the SPIFFE Steering Committee—for mutually authenticating software workloads across dynamic, heterogeneous environments. [1][7][8][9] It defines `spiffe://` workload URIs and short-lived cryptographic **SVIDs** that workloads use to establish mutual TLS (mTLS) connections or sign and verify JWT tokens. [1][5] A workload retrieves its identity over gRPC from the local **SPIFFE Workload Endpoint** (exposed via a Unix Domain Socket or TCP listen socket) without presenting a caller token. The reference runtime **SPIRE** exposes this Workload API, attests running software systems, and issues `X.509-SVID` and `JWT-SVID` credentials. [10][11][12] While `X.509-SVID` and `JWT-SVID` are mandatory `Stable` profiles, SPIFFE introduced formal specification stability levels on 2026-07-01 alongside the optional `Incubating` **WIT-SVID** profile. [12][13][14][15][16]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Identify](/category/identify/) (`identify`) |\n| **Form** | Standards framework (identifiers, documents, APIs, and endpoints) (`endpoint`) |\n| **Originated by** | Joe Beda, 2016 (paper presented at GlueCon). Scytale was the primary maintainer when the CNCF accepted SPIFFE into the Sandbox on 2018-03-29. [7][8] |\n| **Governed by** | SPIFFE Steering Committee (SSC, at least five members) sets SPIFFE standards and strategy. CNCF Graduated: SPIFFE 2022-08-23, SPIRE 2022-08-22 (announced 2022-09-20). [9][17][18][19][20] |\n| **Track** | CNCF. Sandbox on 2018-03-29, Incubating on 2020-06-22, Graduated on 2022-08-23 (SPIRE graduated on 2022-08-22). [2][18][19] |\n| **Status** | X.509-SVID, JWT-SVID, SPIFFE ID, Workload API, Endpoint, trust domain, bundle, and federation: Stable. WIT-SVID and its API section: Incubating. [5][10][12][16][21][22][23][24] |\n| **Version** | Stability levels since 2026-07-01, when WIT-SVID was integrated. SPIRE v1.16.0 published 2026-11-05; SPIRE is the reference implementation. [13][14][15][25][26] |\n| **Message format** | SPIFFE ID: `spiffe` scheme, non-zero trust domain, no query or fragment. Three components: SPIFFE ID, SVID, and the Workload API. [5][6] |\n| **Token format** | JWT-SVID, the first token-based SVID. WIT-SVID, a sub-profile of the WIMSE Workload Identity Token, marked Stability: Incubating. [16][22] |\n| **Record format** | X.509-SVID: exactly one URI SAN, the SPIFFE ID. SPIFFE bundle: an RFC 7517 JWK Set of the trust domain's keys. [21][23] |\n| **Transports** | Workload Endpoint is gRPC on a Unix domain socket or a TCP listen socket; prefer the Unix domain socket. [10] |\n| **Specification** | [SPIFFE Overview](https://spiffe.io/docs/latest/spiffe-about/overview/) · [The SPIFFE standard](https://github.com/spiffe/spiffe/blob/main/standards/SPIFFE.md) [1][6] |\n| **Found at** | Local Workload Endpoint over gRPC (Unix domain socket or TCP). A bundle endpoint URL serves the trust domain's SPIFFE bundle. [10][24] |\n| **Licence** | Software under the Apache License version 2.0. Documentation under the Creative Commons License version 4.0. [9] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [SPIFFE ID syntax, trust domains, and trust bundles](#spiffe-id-syntax-trust-domains-and-trust-bundles)\n3. [Workload API attestation and SVID credential formats](#workload-api-attestation-and-svid-credential-formats)\n4. [Counterparts and related standards](#counterparts-and-related-standards)\n5. [Adoption and ecosystem](#adoption-and-ecosystem)\n6. [See also](#see-also)\n7. [References](#references)\n\n---\n\n## Problem and scope\n\nMicroservices, container orchestrators, and cloud computing create dynamic, heterogeneous production environments where conventional IP-based network policies and long-lived static secrets struggle to scale. In Kubernetes and cloud-native deployments, SPIFFE and SPIRE replace static secrets with short-lived, cryptographically verifiable workload identities. [6][27] SPIFFE binds each workload to a platform-agnostic `spiffe://trust-domain-name/path` URI encoded either as the single URI Subject Alternative Name inside an `X.509-SVID` certificate or as the subject of a token-based `JWT-SVID` (for Layer 7 traversal) or `WIT-SVID` (a WIMSE Workload Identity Token sub-profile). Relying parties validate presented SVIDs against the authoritative public keys published in the issuing trust domain's SPIFFE bundle. [5][12][16][21][22][23] SPIFFE authenticates workload and agent identity to prevent spoofing, leaving access control to a separate authorization policy layer above it, while SPIFFE Federation authenticates SVIDs across distinct trust domains. [24][28]\n\n### SPIFFE ID, SVID, and Workload API\n\n```mermaid\nflowchart LR\n    Workload[Workload]\n    API[\"Workload API, local, no client authentication handshake\"]\n    SVID[\"SVID: X.509, JWT, or WIT\"]\n    ID[SPIFFE ID]\n    Bundles[CA bundles for other trust domains]\n    Workload -->|retrieves or is issued an SVID| API\n    API --> SVID\n    SVID -->|carries| ID\n    API -->|delivers bundles used for federation| Bundles\n```\n\n*The workload obtains an `SVID` from the local `Workload API`. The `SVID` carries a `SPIFFE ID`. Named document types are `X.509`, `JWT`, and `WIT`. The Workload API delivers `CA bundles` for federation. [6]*\n\n### FetchX509SVID stream response: SVIDs and federated bundles\n\n```protobuf\nrpc FetchX509SVID(X509SVIDRequest) returns (stream X509SVIDResponse);\n\nmessage X509SVIDRequest {  }\n\nmessage X509SVIDResponse {\n    repeated X509SVID svids = 1;\n    repeated bytes crl = 2;\n    map<string, bytes> federated_bundles = 3;\n}\n\nmessage X509SVID {\n    string spiffe_id = 1;\n    bytes x509_svid = 2;\n    bytes x509_svid_key = 3;\n    bytes bundle = 4;\n    string hint = 5;\n}\n```\n\n*`FetchX509SVID` streams `X509SVIDResponse` with `svids`, `crl`, and `federated_bundles`. [12]*\n\n---\n\n## SPIFFE ID syntax, trust domains, and trust bundles\n\nEach SPIFFE ID is an RFC 3986 URI of the form `spiffe://trust-domain-name/path`, combining the `spiffe` scheme, an authority naming the trust root, and a workload path of up to 2048 total bytes. Each trust domain publishes an authoritative SPIFFE bundle of public keys that relying workloads and federated domains use to verify its SVIDs. [5][23][24]\n\n- **URI shape and length:** Valid SPIFFE IDs use the `spiffe` scheme, a non-zero trust domain authority, and a site-specific `hier-part` path (such as `spiffe://staging.example.com/payments/web-fe`) with no query or fragment component. All components count toward the mandatory 2048-byte URI support limit, while the trust domain name itself is capped at 255 bytes. [5]\n- **Trust domain character rules:** The authority `host` must be lowercase `[a-z0-9.-_]` without percent-encoding, with empty `userinfo` and `port` fields (allowing IPv4 dotted quads but excluding IPv6). Because trust domain names are self-registered and collisions prevent federation, operators should suffix a DNS domain they own; path segments match `[a-zA-Z0-9.-_]` with no relative modifiers (`.` or `..`) or trailing slash. [5]\n- **Bundles, sequence, and refresh:** A SPIFFE bundle is serialized as an RFC 7517 JWK Set whose required `keys` array may be empty (instructing workloads to treat all SVIDs from that trust domain as untrusted). Publishers set a monotonically increasing `spiffe_sequence` integer to order updates and a `spiffe_refresh_hint` interval in seconds to govern consumer polling and key-redaction propagation. [23]\n- **Keys and cross-domain federation:** Each JWK entry in a bundle sets a case-sensitive `use` parameter (`x509-svid`, `jwt-svid`, or `wit-svid`): X.509 authorities store a single base64-encoded DER CA certificate in `x5c`, while JWT signing keys require a `kid` identifier. For cross-domain authentication, SPIFFE Federation exposes a bundle endpoint URL serving the trust domain's current bundle. [21][22][23][24]\n\n---\n\n## Workload API attestation and SVID credential formats\n\nRather than provisioning static bootstrap credentials on disk, workloads invoke the local unauthenticated Workload API so the node agent can attest the caller process out-of-band and stream short-lived SVIDs and federated trust bundles. [6][11][12][16][22]\n\n- **gRPC without a caller token:** The SPIFFE Workload Endpoint is served over gRPC on a Unix Domain Socket (preferred) or TCP listen socket without TLS or client authentication; if unconfigured, clients fall back to `SPIFFE_ENDPOINT_SOCKET` (such as `unix:///path/to/endpoint.sock` or `tcp://127.0.0.1:8000`). Every request must include the static gRPC metadata header `workload.spiffe.io` set to `true` as a server-side request forgery (SSRF) guard. [6][10]\n- **SPIRE kernel and platform attestation:** SPIRE performs two-tier attestation before issuing SVIDs: node attestation establishes trust in the node agent, and workload attestation inspects caller process metadata via kernel introspection, the kubelet, or container runtimes to match attestor selectors against registered entries without active workload participation. [10][11][27][29]\n- **X.509-SVID leaves for mTLS:** An `X.509-SVID` leaf certificate encodes the workload's SPIFFE ID as its single URI Subject Alternative Name (SAN) with a non-root path; validators reject certificates containing multiple URI SANs. When the Extended Key Usage extension is present on a leaf SVID, both `id-kp-serverAuth` and `id-kp-clientAuth` must be set to support mutual TLS. [11][12][21]\n- **JWT-SVID and WIT-SVID tokens:** `JWT-SVID` encodes Layer 7 workload identity as a JWS Compact Serialization token carrying the workload's SPIFFE ID in `sub`, mandatory `aud` and aggressive `exp` claims to limit bearer-token replay, and HTTP transport via `Authorization: Bearer`. `WIT-SVID` (`Stability: Incubating`, integrated 2026-07-01) sub-profiles the IETF WIMSE Workload Identity Token as a compact JWS with `typ` header `wit+jwt`; SPIRE `v1.16.0` (2026-11-05) added experimental `WIT-SVID` issuance behind `enable_wit_svids` and `spire-agent api fetch wit` while tracking issue 6326 remains open. [12][14][15][16][22][25][30]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **X.509 PKI Certificates (RFC 5280)** | `RFC 5280` | Profiles classic standard | RFC 5280 section 4.2.1.6 is the SAN an X.509-SVID cites: the SPIFFE ID is the single URI in that extension. [21] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Workload Identity in Multi System Environments (WIMSE)](/protocols/wimse/)** | Depended on by | SPIFFE defines concrete `spiffe://` URIs, SVID formats, and the local gRPC Workload API, while the IETF WIMSE architecture standardizes cross-system workload identity in liaison with CNCF SPIFFE/SPIRE and names the SPIFFE ID as a conforming identifier format. [1][3][4] |\n| **[AI Identity Management System (AIMS)](/protocols/wimse-aims/)** | Depended on by | The 2 November 2026 working-group draft `draft-ietf-wimse-aims-01` (Informational) applies existing SPIFFE (`X.509-SVID`, `WIT-SVID`, `JWT-SVID`), WIMSE, OAuth, and OpenID SSF standards rather than defining new protocols, and requires each AI agent to hold exactly one WIMSE identifier, which may be a SPIFFE ID. That revision cites OAuth SPIFFE Client Authentication `draft-ietf-oauth-spiffe-client-auth-03` (2 November 2026). [1][31] |\n| **[AI Agent Authentication and Authorization](/protocols/aiagent-auth/)** | Depended on by | The individual submission `draft-klrc-aiagent-auth` (replaced by `draft-ietf-wimse-aims`) profiles SPIFFE `spiffe://` trust-domain URIs as a conforming WIMSE identifier format for AI agent authentication. [1][32] |\n| **[Workload Identity Metadata](/protocols/wimse-workload-identity-metadata/)** | Complements | Optional JWT claim or X.509 extension identifies the subject's metadata endpoint. Attributes may be in a JWT-SVID or fetched from that authenticated endpoint. [1][33] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (23 probed or cited examples across 3 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).*\n\n### Identity issuers & control planes\n\n| Actor | Role | Status | SVID formats & control-plane boundary | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **SPIRE (CNCF)** | Identity issuer / CA | Supported · as of 2026-11-05 | Reference implementation of SPIFFE (CNCF Graduated); issues X.509-SVIDs, JWT-SVIDs, and (in v1.16.0, 2026-11-05) experimental WIT-SVIDs via the Workload API. | [SPIRE README](https://github.com/spiffe/spire/blob/main/README.md) [11] · [CNCF SPIRE project](https://www.cncf.io/projects/spire/) [19] · [SPIRE latest release](https://github.com/spiffe/spire/releases) [25] · [SPIFFE overview](https://spiffe.io/docs/latest/spiffe-about/overview/) [1][30] |\n| **Uber** | Identity issuer / CA | Supported · as of 2023-11-09 | Uses SPIRE for workload identity across GCP, OCI, AWS, and on-premise since mid-2018. | [Uber, adopting SPIFFE/SPIRE](https://www.uber.com/us/en/blog/our-journey-adopting-spiffe-spire/) [29] |\n| **Google Cloud Agent Identity** | Identity issuer / CA | Supported · as of 2026-10-29 | Attested SPIFFE ID per agent, used with MCP servers and mapped to the resource URI. | [Agent Identity overview](https://docs.cloud.google.com/iam/docs/agent-identity-overview) [34] |\n| **Google Cloud Managed Workload Identities** | Identity issuer / CA | Partial · as of 2026-11-04 | Issues SPIFFE IDs for mTLS across Compute Engine (`.workload.id.goog`), GKE (`.svc.id.goog`, Preview), and agents (`.system.id.goog`). | [About managed workload identities](https://docs.cloud.google.com/iam/docs/managed-workload-identity) [35] · [What's new in IAM (May 2, 2025)](https://cloud.google.com/blog/products/identity-security/whats-new-in-iam-access-risk-and-cloud-governance) [36] |\n| **Red Hat OpenShift Zero Trust Workload Identity Manager** | Identity issuer / CA | Supported · as of 2026-01-23 | Generally available on OpenShift, based on upstream SPIRE, the SPIFFE reference implementation. | [Red Hat OpenShift GA](https://www.redhat.com/en/blog/zero-trust-workload-identity-manager-generally-available-red-hat-openshift) [26] |\n| **Palo Alto Networks Idira** | Identity issuer / CA | Supported · as of 2026-07-20 | Issues every AI agent a unique SPIFFE Verifiable Identity Document (SVID). | [Idira and SPIFFE](https://www.paloaltonetworks.com/blog/identity-security/ai-agent-security-spiffe-machine-identity/) [37] |\n| **Teleport Workload Identity** | Identity issuer / CA | Supported · as of 2024-04-11 | Adds a SPIFFE Workload API, SVID issuance, TPM attestation, and AWS Roles Anywhere. | [Teleport Workload Identity](https://goteleport.com/blog/workload-identity/) [38] |\n\n### Relying cloud IAM, gateways & secrets managers\n\n| Actor | Role | Status | Federation / secret-store mechanism | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Microsoft Entra Workload ID** | Relying server / Gateway | Supported · as of 2026-08-13 | Exchanges a SPIFFE JWT-SVID for an Entra token without stored secrets or certificates. | [Federate SPIFFE/SPIRE with Entra](https://learn.microsoft.com/en-us/entra/workload-id/workload-identity-federation-spiffe-spire) [39] |\n| **HashiCorp Vault 1.21** | Relying server / Gateway | Supported · as of 2026-03-28 | Vault Enterprise `spiffe` auth takes X.509 or JWT SVIDs and can issue X509-SVIDs. | [Vault SPIFFE auth method docs](https://developer.hashicorp.com/vault/docs/auth/spiffe) [40] · [InfoQ Vault 1.21 report](https://www.infoq.com/news/2026/03/hashicorp-vault-1-21/) [41] |\n| **Pinterest Knox** | Relying service | Listed integration · checked 2026-10-30 | Open-source works-with listing: X.509 SVID and JWT SVID only. | [SPIFFE overview](https://spiffe.io/docs/latest/spiffe-about/overview/) [1] · [SPIFFE users.yaml](https://github.com/spiffe/new-website/blob/master/data/users.yaml) [42] |\n| **VMware Secrets Manager** | Relying service | Listed integration · checked 2026-10-30 | Open-source works-with listing: X.509 SVID, JWT SVID, and SPIFFE Authentication. | [SPIFFE overview](https://spiffe.io/docs/latest/spiffe-about/overview/) [1] · [SPIFFE users.yaml](https://github.com/spiffe/new-website/blob/master/data/users.yaml) [42] |\n| **SPIKE** | Relying service | Listed integration · checked 2026-10-30 | Open-source works-with listing: X.509 SVID, JWT SVID, and SPIFFE Authentication. | [SPIFFE overview](https://spiffe.io/docs/latest/spiffe-about/overview/) [1] · [SPIFFE users.yaml](https://github.com/spiffe/new-website/blob/master/data/users.yaml) [42] |\n| **AWS IAM Roles Anywhere** | Relying service | Listed integration · checked 2026-10-30 | Commercial works-with listing: X.509 SVID authentication only. | [SPIFFE overview](https://spiffe.io/docs/latest/spiffe-about/overview/) [1] |\n| **GCP Workload Identity Federation** | Relying service | Listed integration · checked 2026-10-30 | Commercial works-with listing: X.509 SVID and JWT SVID authentication. | [SPIFFE overview](https://spiffe.io/docs/latest/spiffe-about/overview/) [1] |\n| **WarpStream** | Relying service | Listed integration · checked 2026-10-30 | Commercial works-with listing: X.509 SVID authentication only. | [SPIFFE overview](https://spiffe.io/docs/latest/spiffe-about/overview/) [1] |\n| **Idira Secrets Manager** | Relying service | Listed integration · checked 2026-11-06 | SaaS secrets manager supporting SPIFFE authentication. | [SPIFFE users.yaml](https://github.com/spiffe/new-website/blob/master/data/users.yaml) [42] |\n| **Anthropic Claude Platform** | Relying server / Gateway | Supported · checked 2026-11-11 | Accepts SPIFFE JWT-SVIDs from SPIRE or another conformant issuer and returns a short-lived Anthropic access token for the Claude API. | [Workload Identity Federation](https://platform.claude.com/docs/en/manage-claude/workload-identity-federation) [43] |\n\n### Service proxies, meshes & Workload API SDKs\n\n| Actor | Role | Status | mTLS / SVID consumption surface | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Envoy** | Relying proxy | Supported · checked 2026-10-30 | SPIRE SDS installs and rotates TLS certificates and trust bundles inside Envoy. | [SPIRE README](https://github.com/spiffe/spire/blob/main/README.md) [11] · [SPIFFE overview](https://spiffe.io/docs/latest/spiffe-about/overview/) [1] |\n| **SPIFFE Workload API client libraries** | Workload API SDK | Supported · checked 2026-10-30 | Official Workload API clients in Go (`go-spiffe`) and Java (`java-spiffe`). | [SPIRE README](https://github.com/spiffe/spire/blob/main/README.md) [11] · [go-spiffe](https://github.com/spiffe/go-spiffe) [44] · [java-spiffe](https://github.com/spiffe/java-spiffe) [45] |\n| **Ghostunnel** | Relying proxy | Listed integration · checked 2026-10-30 | Open-source works-with listing: X.509 SVID, JWT SVID, and SPIFFE Authentication. | [SPIFFE overview](https://spiffe.io/docs/latest/spiffe-about/overview/) [1] |\n| **Istio** | Relying service | Listed integration · checked 2026-10-30 | Open-source works-with listing: X.509 SVID, JWT SVID, and SPIFFE Authentication. | [SPIFFE overview](https://spiffe.io/docs/latest/spiffe-about/overview/) [1] |\n| **Cilium** | Relying proxy | Supported (preview) · as of 2026-09-14 | Cilium 1.20 (2026-09-14) spire mode uses SPIFFE workload identities, with SPIRE issuing and rotating certificates. ztunnel remains Beta. | [Cilium 1.20 announcement](https://www.cncf.io/blog/2026/09/14/cilium-1-20-gateway-api-externalauth-tcproute-udproute-eni-ipam-for-ipv6-and-more/) [46] |\n| **Greymatter.io** | Relying service | Listed integration · checked 2026-10-30 | Commercial works-with listing marks all four columns, including Workload API. | [SPIFFE overview](https://spiffe.io/docs/latest/spiffe-about/overview/) [1] |\n\n### Ecosystem censuses\n\n- **SPIRE ADOPTERS.md directory**: Lists 13 end-user organizations with notable contributions (Anthem, Bloomberg, ByteDance, Duke Energy, GitHub, Netflix, Niantic, Pinterest, Square, Twilio, Uber, Unity Technologies, and Z Lab Corporation), 17 vendor and platform builders (including Amazon, Anthropic, Cisco, Google, HashiCorp, IBM, SAP, Tigera, and VMware), and 23 open-source project integrations (including Cert-Manager, Consul, Dapr, Envoy, Ghostunnel, Istio, Keycloak, Knox, Kubernetes, Linkerd, Sigstore, Tornjak, Traefik, and Vault). [47]\n\n---\n\n## See also\n\n- **[Agent Name Service v2 (ANS)](/protocols/ans/)** *(Peer alternative)* — A SPIFFE ID is a spiffe:// URI carried in one X.509-SVID URI SAN or a JWT-SVID, while ANS publishes _ans-badge and _ans TXT records and a transparency log at transparency.ans.godaddy.com.\n- **[Agent Audit Trail](/protocols/agent-audit-trail/)** *(Complements)* — SPIFFE defines the workload SVID, while the Agent Audit Trail is the separate hash-chained JSON log of identity, principal, action, outcome, and trust level.\n- **[AI Agent Execution Profile of SCITT](/protocols/scitt-ai-agent-execution/)** *(Complements)* — The optional agent_workload_id field of an AgentInteractionRecord can hold a SPIFFE ID, and the record remains the COSE-signed statement registered with the evidence custodian.\n- **[Workload Authorization Grant (WAG)](/protocols/workload-authz-grant/)** *(Complements)* — SPIFFE defines X.509-SVID, WIT-SVID, and JWT-SVID workload credentials, while `draft-carleton-workload-authz-grant-02` (2 November 2026) binds short-lived workload authorization grants (oauth-wag+jwt) to WIMSE/SPIFFE workload identifiers.\n- **[An Audit Record Format for AI Agent Authorization Decisions](/protocols/wimse-agent-audit-record/)** *(Complements)* — The audited workload identity can be a SPIFFE ID, and the signed object is the DSSE in-toto audit record rather than the X.509-SVID.\n- **[LWS 1.0 Authentication Suite: Self-signed Identity using Controlled Identifiers](/protocols/lws10-authn-ssi-cid/)** *(Peer alternative)* — A SPIFFE JWT-SVID is issued inside a trust domain and read from the local Workload API, while this JWT's key is resolved from the subject's HTTPS or DID document.\n- **[Agent Authorization Envelope](/protocols/agent-authorization-envelope/)** *(Complements)* — A SPIFFE X.509-SVID or JWT-SVID identifies the workload, while the envelope is a JWS-secured W3C Verifiable Credential carrying a mandate, constraints, and a validity block.\n- **Category:** [Identify protocols](/category/identify/)\n\n---\n\n## References\n\n1. SPIFFE, *SPIFFE Overview* (checked 2026-10-30) — <https://spiffe.io/docs/latest/spiffe-about/overview/>\n2. Cloud Native Computing Foundation, *TOC Approves SPIFFE and SPIRE to Incubation* (published 2020-06-22) — <https://www.cncf.io/blog/2020/06/22/toc-approves-spiffe-and-spire-to-incubation/>\n3. IETF wimse Working Group, *Workload Identity in Multi System Environments (wimse) charter* (checked 2026-10-30) — <https://datatracker.ietf.org/wg/wimse/about/>\n4. Joseph A. Salowey, Yaroslav Rosomakho, and Hannes Tschofenig, *draft-ietf-wimse-arch — Workload Identity in a Multi System Environment (WIMSE) Architecture (IETF Datatracker)* (draft-ietf-wimse-arch-08; last updated 2026-07-06) — <https://datatracker.ietf.org/doc/draft-ietf-wimse-arch/>\n5. SPIFFE, *SPIFFE ID* (checked 2026-10-30) — <https://github.com/spiffe/spiffe/blob/main/standards/SPIFFE-ID.md>\n6. SPIFFE, *The SPIFFE standard* (checked 2026-10-30) — <https://github.com/spiffe/spiffe/blob/main/standards/SPIFFE.md>\n7. Daniel Feldman, Emily Fox, Evan Gilman, Ian Haken, Frederick Kautz, Umair Khan, Max Lambrecht, Brandon Lum, Agustín Martínez Fayó, Eli Nesterov, Andres Vega, and Michael Wardrop, *Solving the Bottom Turtle: a SPIFFE Way to Establish Trust in Your Infrastructure via Universal Identity* (first edition 2020) — <https://spiffe.io/pdf/Solving-the-bottom-turtle-SPIFFE-SPIRE-Book.pdf>\n8. Kristen Evans (CNCF), *CNCF to host the SPIFFE Project* (published 2018-03-29) — <https://www.cncf.io/blog/2018/03/29/cncf-to-host-the-spiffe-project/>\n9. SPIFFE, *GOVERNANCE.md* (checked 2026-10-30) — <https://github.com/spiffe/spiffe/blob/main/GOVERNANCE.md>\n10. SPIFFE, *SPIFFE Workload Endpoint* (checked 2026-10-30) — <https://github.com/spiffe/spiffe/blob/main/standards/SPIFFE_Workload_Endpoint.md>\n11. SPIRE, *SPIRE README* (checked 2026-10-30) — <https://github.com/spiffe/spire/blob/main/README.md>\n12. SPIFFE, *SPIFFE Workload API* (checked 2026-10-30) — <https://github.com/spiffe/spiffe/blob/main/standards/SPIFFE_Workload_API.md>\n13. SPIFFE, *SPIFFE specification stability levels* (checked 2026-10-30) — <https://github.com/spiffe/spiffe/blob/main/standards/STABILITY.md>\n14. Noah Stride (GitHub commit history, spiffe/spiffe), *Commit history of standards/STABILITY.md* (commit 2026-07-01; Introduce Stability/Graduation process for SPIFFE specifications) — <https://github.com/spiffe/spiffe/commits/HEAD/standards/STABILITY.md>\n15. Noah Stride (GitHub commit history, spiffe/spiffe), *Commit history of standards/WIT-SVID.md* (commit 2026-07-01; Integrating WIT to the SPIFFE standards) — <https://github.com/spiffe/spiffe/commits/HEAD/standards/WIT-SVID.md>\n16. SPIFFE, *WIT-SVID* (checked 2026-10-30) — <https://github.com/spiffe/spiffe/blob/main/standards/WIT-SVID.md>\n17. SPIFFE, *The SPIFFE Steering Committee* (checked 2026-10-30) — <https://github.com/spiffe/spiffe/blob/main/ssc/README.md>\n18. Cloud Native Computing Foundation, *SPIFFE* (modified 2026-10-30) — <https://www.cncf.io/projects/spiffe/>\n19. Cloud Native Computing Foundation, *SPIRE* (modified 2026-10-30) — <https://www.cncf.io/projects/spire/>\n20. Cloud Native Computing Foundation, *SPIFFE and SPIRE Projects Graduate from Cloud Native Computing Foundation Incubator* (published 2022-09-20) — <https://www.cncf.io/announcements/2022/09/20/spiffe-and-spire-projects-graduate-from-cloud-native-computing-foundation-incubator/>\n21. SPIFFE, *X.509-SVID* (checked 2026-10-30) — <https://github.com/spiffe/spiffe/blob/main/standards/X509-SVID.md>\n22. SPIFFE, *JWT-SVID* (checked 2026-10-30) — <https://github.com/spiffe/spiffe/blob/main/standards/JWT-SVID.md>\n23. SPIFFE, *SPIFFE Trust Domain and Bundle* (checked 2026-10-30) — <https://github.com/spiffe/spiffe/blob/main/standards/SPIFFE_Trust_Domain_and_Bundle.md>\n24. SPIFFE, *SPIFFE Federation* (checked 2026-10-30) — <https://github.com/spiffe/spiffe/blob/main/standards/SPIFFE_Federation.md>\n25. SPIRE, *SPIRE release v1.16.0* (published 2026-11-05) — <https://github.com/spiffe/spire/releases>\n26. Anjali Telang and Trilok Geer (Red Hat), *Zero trust workload identity manager generally available on Red Hat OpenShift* (published 2026-01-23) — <https://www.redhat.com/en/blog/zero-trust-workload-identity-manager-generally-available-red-hat-openshift>\n27. Eviatar Garzi (Palo Alto Networks Unit 42), *The Machine With Many Faces: Post-Exploitation Identity Misuse in SPIFFE/SPIRE* (published 2026-09-10) — <https://unit42.paloaltonetworks.com/kubernetes-spiffe-spire-identity-spoofing/>\n28. Pam Baker (InformationWeek), *SPIFFE can identify your AI agents. But can it control them?* (published 2026-10-15; modified 2026-10-19) — <https://www.informationweek.com/responsible-ai/spiffe-can-identify-your-ai-agents-but-can-it-control-them->\n29. Andrew Moore, Zachary Train, and Kirutthika Raja (Uber), *Our Journey Adopting SPIFFE/SPIRE at Scale* (published 2023-11-09) — <https://www.uber.com/us/en/blog/our-journey-adopting-spiffe-spire/>\n30. SPIRE, *SPIRE CHANGELOG* (1.16.0 dated 2026-11-05; checked 2026-11-08) — <https://github.com/spiffe/spire/blob/main/CHANGELOG.md>\n31. IETF WIMSE WG, *Agent Identity Management System (draft-ietf-wimse-aims-01)* (2026-11-02) — <https://www.ietf.org/archive/id/draft-ietf-wimse-aims-01.txt>\n32. Pieter Kasselman, Jeff Lombardo, Yaroslav Rosomakho, Brian Campbell, Nick Steele, and Aaron Parecki, *draft-klrc-aiagent-auth — AI Agent Authentication and Authorization (IETF Datatracker)* (draft-klrc-aiagent-auth-03; last updated 2026-09-09; revision 2026-07-06) — <https://datatracker.ietf.org/doc/draft-klrc-aiagent-auth/>\n33. S. Heigh and J. Salowey (Palo Alto Networks) and Y. Rosomakho (Zscaler), *Workload Identity Metadata (draft-heigh-wimse-workload-identity-metadata-00)* (draft-heigh-wimse-workload-identity-metadata-00; 16 October 2026) — <https://www.ietf.org/archive/id/draft-heigh-wimse-workload-identity-metadata-00.txt>\n34. Google Cloud, *Agent Identity overview* (last updated 2026-10-29) — <https://docs.cloud.google.com/iam/docs/agent-identity-overview>\n35. Google Cloud, *Managed workload identities overview | Identity and Access Management (IAM) | Google Cloud Documentation* (checked 2026-11-04) — <https://docs.cloud.google.com/iam/docs/managed-workload-identity>\n36. Abhishek A Hemrajani (Google Cloud), *What's new in IAM, Access Risk, and Cloud Governance* (published 2025-05-02) — <https://cloud.google.com/blog/products/identity-security/whats-new-in-iam-access-risk-and-cloud-governance>\n37. Venu Shastri and Joe Garcia (Palo Alto Networks), *Why Cryptographically Verifiable SPIFFE Identity is Key to Scaling AI Agents* (published 2026-07-20) — <https://www.paloaltonetworks.com/blog/identity-security/ai-agent-security-spiffe-machine-identity/>\n38. Ben Arent (Teleport), *Teleport Workload Identity* (published 2024-04-11) — <https://goteleport.com/blog/workload-identity/>\n39. Microsoft Learn, *Federate a SPIFFE/SPIRE workload identity* (last updated 2026-08-13) — <https://learn.microsoft.com/en-us/entra/workload-id/workload-identity-federation-spiffe-spire>\n40. HashiCorp, *SPIFFE auth method overview | Vault | HashiCorp Developer* (checked 2026-10-30) — <https://developer.hashicorp.com/vault/docs/auth/spiffe>\n41. Diogo Carleto (InfoQ), *HashiCorp Vault 1.21 Brings SPIFFE Authentication, Granular Secret Recovery, and More* (published 2026-03-28) — <https://www.infoq.com/news/2026/03/hashicorp-vault-1-21/>\n42. SPIFFE, *SPIFFE website users.yaml* (fetched 2026-11-06) — <https://github.com/spiffe/new-website/blob/master/data/users.yaml>\n43. Anthropic, *Workload Identity Federation* (Claude Platform docs; fetched 2026-11-11) — <https://platform.claude.com/docs/en/manage-claude/workload-identity-federation>\n44. SPIFFE, *go-spiffe* (checked 2026-10-30) — <https://github.com/spiffe/go-spiffe>\n45. SPIFFE, *java-spiffe* (checked 2026-10-30) — <https://github.com/spiffe/java-spiffe>\n46. Nico Vibert and Donia Chaiehloudj (Cilium), *Cilium 1.20: Gateway API ExternalAuth, TCPRoute/UDPRoute, ENI IPAM for IPv6, and more* (posted September 14, 2026; fetched 2026-11-11) — <https://www.cncf.io/blog/2026/09/14/cilium-1-20-gateway-api-externalauth-tcproute-udproute-eni-ipam-for-ipv6-and-more/>\n47. SPIRE, *SPIRE ADOPTERS.md* (fetched 2026-11-06) — <https://github.com/spiffe/spire/blob/HEAD/ADOPTERS.md>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "WIMSE",
   "adoption": {
    "level": "observed",
    "by": "SPIRE, Cofide, Solo.io, Defakto Security, Teleport, and wimsey",
    "probe_run": null
   },
   "aliases": [
    "Workload Identity in a Multi System Environment",
    "Workload Identity in Multi-Service Environments"
   ],
   "analog": "Cross-domain workload identity and token-exchange architecture",
   "audience": [
    "platform",
    "standards-body",
    "agent-builder"
   ],
   "collisions": [],
   "discovery": {
    "mechanism": "HTTP request headers between workloads (Workload-Identity-Token header field, Authorization: WPT, RFC 9421 HTTP Message Signatures, or mutual TLS)",
    "path": "HTTP request headers between workloads. The WIT travels in its own header field: \"ABNF [RFC5234] for the value of Workload-Identity-Token header field\". A WPT goes in the Authorization header: \"The WPT is sent in the Authorization header field (Section 11.6.2 of [RFC9110]) of the request, using the WPT authentication scheme defined by this document.\" The HTTP-signature profile signs requests with RFC 9421 and sets \"tag - the value for implementations of this specification is wimse-workload-to-workload\". The mutual-TLS profile uses X.509 certificates in the TLS handshake"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://datatracker.ietf.org/wg/wimse/about/",
     "claim": "IETF, *Workload Identity in Multi System Environments (wimse) working group and charter*, charter-ietf-wimse-01; checked 2026-10-30",
     "date": null,
     "quote": "workloads deployed across multiple service platforms / Dependencies and Liaisons / The Cloud Native Computing Foundation (CNCF), particularly with regard to the SPIFFE/SPIRE project. / The Workload Identity in Multi-Service Environments (WIMSE) working group is chartered to address the challenges associated with implementing fine-grained, least privilege access control for workloads deployed across multiple service platforms / Name | | Workload Identity in Multi System Environments / Acronym | | wimse / Area | | Applications and Real-Time Area (art) / State | | Active / Charter | | charter-ietf-wimse-01 Approved / Chairs | | Justin Richer, Pieter Kasselman / Area Director | | Charles Eckel / Workload Identity in Multi System Environments / the WG will focus on only specific REST-based technologies using HTTP. / These technologies (specifically: OAuth, JWT, and SPIFFE) have been combined in a variety of ways in practice, but the solutions have existed in relative isolation. / the WG will focus on only specific REST-based technologies using HTTP. ... While recognizing that the broader workload ecosystem uses a variety of application protocols (e.g., gRPC, Kafka and GraphQL) / State Active / charter-ietf-wimse-01 Approved / particularly with regard to the SPIFFE/SPIRE project / 2026-07-31 / Submit informational document describing the WIMSE architecture to the IESG",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://www.ietf.org/archive/id/draft-ietf-wimse-arch-08.txt",
     "claim": "J. Salowey (Palo Alto Networks), Y. Rosomakho (Zscaler), and H. Tschofenig (UniBw M.), *Workload Identity in a Multi System Environment (WIMSE) Architecture (draft-ietf-wimse-arch-08)*, 6 July 2026",
     "date": null,
     "quote": "This document discusses an architecture for designing and standardizing protocols and payloads for conveying workload identity and security context information. / An example of an identifier format that conforms to this definition is [SPIFFE-ID]. / J. Salowey Internet-Draft Palo Alto Networks Intended status: Informational Y. Rosomakho Expires: 7 January 2027 Zscaler H. Tschofenig UniBw M. 6 July 2026 / 6 July 2026 Workload Identity in a Multi System Environment (WIMSE) Architecture draft-ietf-wimse-arch-08 / draft-ietf-wimse-arch-08 / Copyright (c) 2026 IETF Trust and the persons identified as the document authors. / Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://www.ietf.org/archive/id/draft-ietf-wimse-aims-01.txt",
     "claim": "P. Kasselman, J. Lombardo, Y. Rosomakho, B. Campbell, N. Steele, and A. Parecki, *AI Identity Management System (draft-ietf-wimse-aims-01)*, 2 November 2026; expires 6 May 2027",
     "date": null,
     "quote": "This document proposes best practices for authentication and authorization of AI agent interactions. / architecture and OAuth 2.0 family of specifications. Rather than defining new protocols / Expires: 6 May 2027 ... 2 November 2026 AI Identity Management System draft-ietf-wimse-aims-01 / draft-ietf-wimse-aims-01 / AI Identity Management System draft-ietf-wimse-aims-01 ... many of these efforts develop solutions in isolation / AI Identity Management System draft-ietf-wimse-aims-01 ... It leverages existing standards such as the Workload Identity in Multi-System Environments (WIMSE) architecture and OAuth 2.0 family of specifications. / An agent participating in this framework MUST be assigned exactly one WIMSE identifier, which MAY be a SPIFFE ID. / Rather than defining new protocols, this document describes how existing and widely deployed standards can be applied or extended to establish agent authentication and authorization.",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://datatracker.ietf.org/wg/webbotauth/about/",
     "claim": "IETF, *Web Bot Auth (webbotauth) working group*, checked 2026-10-30",
     "date": null,
     "quote": "Automated clients (colloquially, 'bots') are increasingly used on the Web.",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://www.ietf.org/archive/id/draft-ietf-wimse-http-signature-08.txt",
     "claim": "J. Salowey (Palo Alto Networks) and Y. Sheffer (Independent), *WIMSE Workload-to-Workload Authentication with HTTP Signatures (draft-ietf-wimse-http-signature-08)*, 20 October 2026",
     "date": null,
     "quote": "We define a profile of the HTTP Signatures protocol [RFC9421] to protect the service traffic. / the value for implementations of this specification is wimse-workload-to-workload / 20 October 2026 ... draft-ietf-wimse-http-signature-08 ... draft-ietf-wimse-s2s-protocol-07 / draft-ietf-wimse-http-signature-08 / draft-ietf-wimse-http-signature-08 ... WIMSE is specifying two approaches for application-layer protection, both using the newly introduced Workload Identity Token / The first alternative [I-D.ietf-wimse-wpt] is inspired by the OAuth DPoP specification [RFC9449]. / Organization: Cofide / Implementation: https://github.com/cofide/wimse-s2s-httpsig-poc / WIT + HTTP Message Signatures: proof-of-concept / Coverage: WIT, HTTP Message Signatures / License: Apache 2.0 / Last updated: 13-Nov-2025 / Organization: independent / Implementation: https://github.com/kanywst/wimsey / WIT + HTTP Message Signatures: alpha / Coverage: WIT, HTTP Message Signatures, signed responses / Last updated: 08-Sep-2026 / 4.2. wimsey",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://www.ietf.org/archive/id/draft-ietf-wimse-workload-creds-03.txt",
     "claim": "B. Campbell, J. Salowey, A. Schwenkschuster, Y. Sheffer, and Y. Rosomakho, *WIMSE Workload Credentials (draft-ietf-wimse-workload-creds-03)*, 30 October 2026; expires 3 May 2027",
     "date": null,
     "quote": "draft-ietf-wimse-workload-creds-03 ... A WIT is conveyed in an HTTP header field ... ABNF [RFC5234] for the value of Workload-Identity-Token header field / Expires: 3 May 2027 ... 30 October 2026 WIMSE Workload Credentials draft-ietf-wimse-workload-creds-03 / ABNF [RFC5234] for the value of Workload-Identity-Token header field / typ: the WIT is explicitly typed, as recommended in Section 3.11 of [I-D.ietf-oauth-rfc8725bis], using the wit+jwt media type. / Subtype name: wit+jwt / application/wit+jwt, per Section 11.1.1. / draft-ietf-wimse-workload-creds-03 / draft-ietf-wimse-workload-creds-03 ... binds a public key to the workload identity. ... The workload MUST prove possession of the corresponding private key when presenting the WIT to another party. As such, it MUST NOT be used as a bearer token and is not intended for use in the Authorization header. / it MUST NOT be used as a bearer token / using the wit+jwt media type. / 30 October 2026 / Organization: Defakto Security (prior SPIRL) / Workload Identity Certificate: production / Workload Identity Token: alpha / Coverage: Workload Identity Certificate, WIT / Teleport - Machine & Workload Identity / Organization: Teleport / Workload Identity Token: research / Workload Identity Certificate: fully compatible with the X509-SVID and widely used. / Workload Identity Token: beta",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://www.ietf.org/archive/id/draft-ietf-wimse-identifier-04.txt",
     "claim": "Y. Rosomakho (Zscaler) and J. Salowey (Palo Alto Networks), *Workload Identifier (draft-ietf-wimse-identifier-04)*, 23 October 2026",
     "date": null,
     "quote": "draft-ietf-wimse-identifier-04 ... A Workload Identifier is a URI that uniquely identifies a workload within the context of a specific trust domain. / 23 October 2026 Workload Identifier draft-ietf-wimse-identifier-04 / A Workload Identifier is a URI that uniquely identifies a workload within the context of a specific trust domain. / wimse defined in Section 4.4 / draft-ietf-wimse-identifier-04",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://www.ietf.org/archive/id/draft-ietf-wimse-wpt-02.txt",
     "claim": "B. Campbell (Ping Identity) and A. Schwenkschuster (Defakto Security), *WIMSE Workload Proof Token (draft-ietf-wimse-wpt-02)*, 27 August 2026",
     "date": null,
     "quote": "The WPT is sent in the Authorization header field (Section 11.6.2 of [RFC9110]) of the request, using the WPT authentication scheme defined by this document. / 27 August 2026 WIMSE Workload Proof Token draft-ietf-wimse-wpt-02 / The WPT is a signed JWT / using the application/wpt+jwt media type. / Authentication Scheme Name: WPT / draft-ietf-wimse-wpt-02 / draft-ietf-wimse-wpt-02 ... The WPT is sent in the Authorization header field",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://www.ietf.org/archive/id/draft-ietf-wimse-mutual-tls-03.txt",
     "claim": "J. Salowey (Palo Alto Networks) and Y. Rosomakho (Zscaler), *Workload Authentication Using Mutual TLS (draft-ietf-wimse-mutual-tls-03)*, 24 October 2026",
     "date": null,
     "quote": "This document profiles workload authentication based on X.509 Workload Identity Certificates using mutual TLS (mTLS). / 24 October 2026 Workload Authentication Using Mutual TLS draft-ietf-wimse-mutual-tls-03 / draft-ietf-wimse-mutual-tls-03",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://datatracker.ietf.org/api/v1/doc/document/?group__acronym=wimse&type=rfc&format=json",
     "claim": "IETF Datatracker, *wimse documents of type RFC*, checked 2026-10-30; 0 published RFCs",
     "date": null,
     "quote": "\"offset\": 0, \"previous\": null, \"total_count\": 0 / \"total_count\": 0 / \"objects\": []",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-wimse-http-signature/history/",
     "claim": "IETF, *draft-ietf-wimse-http-signature document history*, revision 08 events through 2026-10-28",
     "date": null,
     "quote": "2026-10-28 | 08 | Justin Richer | IETF WG state changed to Submitted to IESG for Publication from WG Document ... IESG state changed to Publication Requested from I-D Exists / 2026-10-28 | 08 | Justin Richer | IETF WG state changed to Submitted to IESG for Publication from WG Document / IESG state changed to Publication Requested from I-D Exists / 2026-10-20 | 08 | Yaron Sheffer | New version available: draft-ietf-wimse-http-signature-08.txt",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-wimse-http-signature/",
     "claim": "IETF, *draft-ietf-wimse-http-signature — WIMSE Workload-to-Workload Authentication with HTTP Signatures (IETF Datatracker)*, summary last updated 2026-10-09 (latest revision shown 2026-09-20)",
     "date": null,
     "quote": "draft-ietf-wimse-http-signature ... IESG state | | I-D Exists / Intended RFC status | | Proposed Standard / Last updated | 2026-10-09 (Latest revision 2026-09-20) / WG state | | WG Document Doc Shepherd Follow-up Underway / IESG state | | I-D Exists / Proposed Standard / IETF WG state changed to Submitted to IESG for Publication from WG Document / IESG state changed to Publication Requested from I-D Exists / 2026-10-28",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://datatracker.ietf.org/wg/wimse/documents/",
     "claim": "IETF, *Workload Identity in Multi System Environments (wimse) documents*, checked 2026-10-30",
     "date": null,
     "quote": "draft-ietf-wimse-workload-creds-03 WIMSE Workload Credentials 2026-10-30 ... draft-ietf-wimse-workload-identity-practices-08 Workload Identity Practices 2026-10-30 / draft-ietf-wimse-arch-08 Workload Identity in a Multi System Environment (WIMSE) Architecture | 2026-07-06 / draft-ietf-wimse-workload-creds-03 WIMSE Workload Credentials 2026-10-30",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://datatracker.ietf.org/api/v1/doc/document/draft-ietf-wimse-aims/",
     "claim": "IETF Datatracker, *IETF Datatracker document record for draft-ietf-wimse-aims*, updated 2026-11-02; expires 2027-05-06",
     "date": null,
     "quote": "\"expires\": \"2027-05-06T18:20:54Z\" ... \"rev\": \"01\" ... \"time\": \"2026-11-02T18:20:54Z\"",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://datatracker.ietf.org/wg/wimse/history/",
     "claim": "IETF, *Workload Identity in Multi System Environments (wimse) group history*, group created 2023-09-28; charter approved 2024-03-07; checked 2026-10-30",
     "date": null,
     "quote": "2023-09-28 | Cindy Morgan | Group created in state BOF / 2024-03-07 | Cindy Morgan | Charter approved, group active / Charter approved / Group created in state BOF",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-wimse-arch/",
     "claim": "IETF, *draft-ietf-wimse-arch — Workload Identity in a Multi System Environment (WIMSE) Architecture (IETF Datatracker)*, last updated 2026-07-06",
     "date": null,
     "quote": "RFC stream | | Internet Engineering Task Force (IETF) / WG state | | WG Document / IESG state | | I-D Exists",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-wimse-workload-identity-practices/",
     "claim": "IETF, *draft-ietf-wimse-workload-identity-practices — Workload Identity Practices (IETF Datatracker)*, last updated 2026-09-22",
     "date": null,
     "quote": "Intended RFC status | | Informational / AD Evaluation::AD Followup / Submitted to IESG for Publication",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-wimse-workload-identity-practices/history/",
     "claim": "IETF, *draft-ietf-wimse-workload-identity-practices — Workload Identity Practices document history (IETF Datatracker)*, submitted to the IESG 2026-06-30",
     "date": null,
     "quote": "2026-06-30 | 05 | Justin Richer | IETF WG state changed to Submitted to IESG for Publication from WG Consensus: Waiting for Write-Up",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-wimse-workload-creds/",
     "claim": "IETF, *draft-ietf-wimse-workload-creds — WIMSE Workload Credentials (IETF Datatracker)*, last updated 2026-07-02",
     "date": null,
     "quote": "WG state | | WG Document / IESG state | | I-D Exists",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-wimse-wpt/",
     "claim": "IETF, *draft-ietf-wimse-wpt — WIMSE Workload Proof Token (IETF Datatracker)*, last updated 2026-08-27",
     "date": null,
     "quote": "IESG state | | I-D Exists",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-wimse-mutual-tls/",
     "claim": "IETF, *draft-ietf-wimse-mutual-tls — Workload Authentication Using Mutual TLS (IETF Datatracker)*, last updated 2026-10-24",
     "date": null,
     "quote": "IESG state | | I-D Exists",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-wimse-identifier/",
     "claim": "IETF, *draft-ietf-wimse-identifier — Workload Identifier (IETF Datatracker)*, last updated 2026-10-23",
     "date": null,
     "quote": "IESG state | | I-D Exists",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-wimse-aims/",
     "claim": "IETF, *draft-ietf-wimse-aims — AI Identity Management System (IETF Datatracker)*, last updated 2026-11-02; expires 2027-05-06",
     "date": null,
     "quote": "IESG state | | I-D Exists / WG state | | WG Document / Replaces | | draft-klrc-aiagent-auth",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://www.ietf.org/archive/id/draft-ietf-wimse-workload-identity-practices-08.txt",
     "claim": "A. Schwenkschuster and Y. Rosomakho, *Workload Identity Practices (draft-ietf-wimse-workload-identity-practices-08)*, 30 October 2026; expires 3 May 2027",
     "date": null,
     "quote": "Expires: 3 May 2027 ... 30 October 2026 Workload Identity Practices draft-ietf-wimse-workload-identity-practices-08 / draft-ietf-wimse-workload-identity-practices-08 / Workload Identity Practices draft-ietf-wimse-workload-identity-practices-08 ... It does not take into account the standards work in progress for the WIMSE architecture and associated protocols.",
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://www.ietf.org/archive/id/draft-carleton-workload-authz-grant-02.txt",
     "claim": "P. Carleton, N. Steele, A. Parecki, A. Schwenkschuster, and B. Campbell, *Workload Authorization Grant (draft-carleton-workload-authz-grant-02)*, 2 November 2026; expires 6 May 2027",
     "date": null,
     "quote": "Expires: 6 May 2027 ... 2 November 2026 Workload Authorization Grant draft-carleton-workload-authz-grant-02 / draft-carleton-workload-authz-grant-02 / Workload Authorization Grant draft-carleton-workload-authz-grant-02",
     "ref": 25
    },
    {
     "label": "[26]",
     "url": "https://www.ietf.org/archive/id/draft-ietf-oauth-spiffe-client-auth-03.txt",
     "claim": "A. Schwenkschuster, P. Kasselmann, S. Rose, S. Thorgersen, and N. Cam-Winget, *OAuth SPIFFE Client Authentication (draft-ietf-oauth-spiffe-client-auth-03)*, 2 November 2026; expires 6 May 2027",
     "date": null,
     "quote": "Expires: 6 May 2027 ... 2 November 2026 OAuth SPIFFE Client Authentication draft-ietf-oauth-spiffe-client-auth-03 / draft-ietf-oauth-spiffe-client-auth-03 / OAuth SPIFFE Client Authentication draft-ietf-oauth-spiffe-client-auth-03",
     "ref": 26
    },
    {
     "label": "[27]",
     "url": "https://www.iana.org/assignments/http-authschemes/authschemes.csv",
     "claim": "IANA, *Hypertext Transfer Protocol (HTTP) Authentication Scheme Registry (CSV)*, checked 2026-10-30",
     "date": null,
     "quote": "Authentication Scheme Name,Reference,Notes Basic,[RFC 7617], Bearer,[RFC 6750]",
     "ref": 27
    },
    {
     "label": "[28]",
     "url": "https://www.ietf.org/archive/id/draft-gilda-audit-agent-audit-record-03.txt",
     "claim": "S. Gilda, *An Audit Record Format for AI Agent Authorization Decisions (draft-gilda-audit-agent-audit-record-03)*, 29 October 2026",
     "date": null,
     "quote": "An Audit Record Format for AI Agent Authorization Decisions / A record is an in-toto Statement [IN-TOTO] carried in a DSSE envelope [DSSE].",
     "ref": 28
    },
    {
     "label": "[29]",
     "url": "https://datatracker.ietf.org/doc/draft-klrc-aiagent-auth/",
     "claim": "Pieter Kasselman, Jeff Lombardo, Yaroslav Rosomakho, Brian Campbell, Nick Steele, and Aaron Parecki, *draft-klrc-aiagent-auth — AI Agent Authentication and Authorization (IETF Datatracker)*, replaced Internet-Draft; last updated 2026-09-09",
     "date": null,
     "quote": "Replaced Internet-Draft / AI Agent Authentication and Authorization",
     "ref": 29
    },
    {
     "label": "[30]",
     "url": "https://datatracker.ietf.org/doc/draft-klrc-aiagent-auth/history/",
     "claim": "P. Kasselman, J. Lombardo, Y. Rosomakho, and B. Campbell, *draft-klrc-aiagent-auth document history*, adopted by a WG 2026-09-09",
     "date": null,
     "quote": "2026-09-09 | 03 | Justin Richer | IETF WG state changed to Adopted by a WG",
     "ref": 30
    },
    {
     "label": "[31]",
     "url": "https://github.com/spiffe/spire/issues/6326",
     "claim": "Arndt Schwenkschuster (spiffe/spire), *WIT-SVID support in SPIRE, issue #6326*, created 2025-09-18; state OPEN; checked 2026-10-30",
     "date": null,
     "quote": "WIT-SVID support in SPIRE / 2025-09-18T14:22:38Z / \"state\": \"OPEN\" / SPIFFE sig-spec is actively working on bringing Workload Identity Token support into SPIFFE.",
     "ref": 31
    },
    {
     "label": "[32]",
     "url": "https://raw.githubusercontent.com/spiffe/spire/main/CHANGELOG.md",
     "claim": "SPIRE (spiffe/spire), *CHANGELOG*, main; includes 1.16.0 dated 2026-11-05; checked 2026-11-09",
     "date": null,
     "quote": "[1.14.0] - 2025-12-11 / Dummy implementations for the WIT-SVID profile (#6399) / [1.15.0] - 2026-05-19 / iss claim support for WIT-SVIDs (#6857) / [1.15.3] - 2026-08-21 / Incremental WIT-SVID work, including support for building WIT-SVIDs in the svid.v1 API client and marshalling support for WIT-SVID keys (#7132, #7134) / ## [1.16.0] - 2026-11-05 / Experimental WIT-SVID support, enabled with the `enable_wit_svids` server and agent options, including Workload API methods, a `spire-agent api fetch wit` CLI command",
     "ref": 32
    },
    {
     "label": "[33]",
     "url": "https://github.com/cofide/wimse-s2s-httpsig-poc",
     "claim": "cofide, *wimse-s2s-httpsig-poc*, created 2024-12-13; Apache-2.0",
     "date": null,
     "quote": "PoC implementation of the draft-ietf-wimse-s2s-protocol based on HTTP Message Signatures / Proof-of-concept demo of WIMSE Workload-to-Workload Authentication with HTTP Signatures / a lightweight SPIFFE implementation that has been extended to issue / SVIDs to a demo client and server. / provides a simple way to get workload identities issued without the need of a whole SPIRE setup",
     "ref": 33
    },
    {
     "label": "[34]",
     "url": "https://www.cofide.io/resources/solving-the-middlebox-dilemma-with-wimse-and-http-message-signatures",
     "claim": "The Cofide Authors, *Solving the middlebox dilemma with WIMSE and HTTP Message Signatures*, published 20 October 2025",
     "date": null,
     "quote": "The team at Cofide have put together a proof-of-concept implementation of the WIMSE application-level authentication with HTTP Message Signatures methodology / issues a developmental version of the proposed WIT-SVID credential / should be considered a demonstrator system",
     "ref": 34
    },
    {
     "label": "[35]",
     "url": "https://docs.solo.io/agentgateway/kubernetes/latest/documentation/security/wimse/",
     "claim": "Solo.io, *Workload identity tokens (WIMSE), Solo Enterprise for agentgateway*, modified 2026-10-30",
     "date": null,
     "quote": "Use WIMSE Workload Identity Tokens with agentgateway to authenticate service-to-service traffic when agentgateway is deployed as a waypoint proxy in an ambient mesh. / WIMSE/WIT support is in the alpha state. Alpha features are likely to change, are not fully tested, and are not supported for production. / forward or exchange the WIT / Emission works with both SourceDelegation and SelfIdentification. / Latest (currently 2026.10.2) / \"dateModified\":\"2026-10-30T15:49:08-04:00\" / To validate proofs on the receive side, set traffic.entWptEnforcement / When VALIDATE_SPIFFE_TRUST_DOMAIN_NAMES=STRICT is set on agentgateway and a request carries a WIT, agentgateway verifies the x5c certificate chain / Workload-Identity-Token",
     "ref": 35
    },
    {
     "label": "[36]",
     "url": "https://github.com/kanywst/wimsey",
     "claim": "kanywst, *wimsey*, checked 2026-10-30",
     "date": null,
     "quote": "A vendor-neutral reference implementation of the IETF WIMSE workload-identity specs, in Rust. / Pre-alpha. / The specs are Internet-Drafts (no RFC yet) and / Not production-ready. / wimsey-wit / Workload Identity Token (WIT / WIC) / \"created_at\": \"2026-06-29T14:03:35Z\" / \"spdx_id\": \"Apache-2.0\" / conformance/ / records inputs, the exact bytes they must produce / a language-neutral code naming",
     "ref": 36
    },
    {
     "label": "[37]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-wimse-wpt/referencedby",
     "claim": "IETF, *draft-ietf-wimse-wpt — References (IETF Datatracker)*, fetched 2026-11-06",
     "date": null,
     "quote": "References to draft-ietf-wimse-wpt / draft-ietf-wimse-aims / AI Identity Management System / normatively references / draft-mcguinness-oauth-actor-profile / OAuth Actor Profile for Delegation / draft-reddy-wimse-workload-attestation",
     "ref": 37
    }
   ],
   "form": "endpoint",
   "governance": "IETF wimse working group: \"Acronym wimse Area Applications and Real-Time Area (art) State Active Charter charter-ietf-wimse-01 Approved\" \"Chairs Justin Richer, Pieter Kasselman Area Director Charles Eckel\". The charter commits the group to work with \"The Cloud Native Computing Foundation (CNCF), particularly with regard to the SPIFFE/SPIRE project.\" Naming: the Datatracker group name is \"Workload Identity in Multi System Environments\", while the charter text says \"The Workload Identity in Multi-Service Environments (WIMSE) working group is chartered to address the challenges associated with implementing fine-grained, least privilege access control for workloads deployed across multiple service platforms, spanning both public and private clouds.\"",
   "group": null,
   "hatnote_md": "This page is about WIMSE, the IETF wimse working group and its Internet-Drafts for conveying workload identity across multiple service platforms, including authentication and authorization of AI agent interactions. It is not SPIFFE, the CNCF project the charter lists under Dependencies and Liaisons and whose identifier the architecture draft gives as a conforming example; see [SPIFFE](https://agenticweb.wiki/protocols/spiffe/). It is not Web Bot Auth, the separate IETF webbotauth working group for automated clients on the Web; see [Web Bot Auth](https://agenticweb.wiki/protocols/webbotauth/). Its AI-agent document, AIMS, applies the WIMSE architecture and the OAuth 2.0 family of specifications rather than defining new protocols; see [WIMSE AI Identity Management System (AIMS)](https://agenticweb.wiki/protocols/wimse-aims/). For the HTTP Signatures protocol one WIMSE draft profiles, see [HTTP Message Signatures](https://agenticweb.wiki/protocols/http-message-signatures/).",
   "history": [
    {
     "date": "2026-10-28",
     "note": "Verified record against 42 primary and secondary sources."
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "wimse",
   "implementation": "prototype",
   "last_verified": "2026-11-08",
   "name": "Workload Identity in Multi System Environments (WIMSE)",
   "native_status": "No WIMSE RFC has been published: the Datatracker lists no RFC for the group (checked 2026-10-28). Furthest along: draft-ietf-wimse-http-signature-08, \"WG state Submitted to IESG for Publication\" \"IESG state Publication Requested\"; the history records \"IESG state changed to Publication Requested from I-D Exists\" on 2026-10-28. draft-ietf-wimse-workload-identity-practices-07 was submitted to the IESG on 2026-06-30 and is in \"IESG state AD Evaluation::AD Followup\". All other current documents are active working-group drafts in \"WG Document\" state with IESG state \"I-D Exists\"",
   "origin": {
    "date": "2023-09-28",
    "org": "IETF wimse Working Group (J. Salowey, Y. Rosomakho, H. Tschofenig)"
   },
   "pairs_with": [
    "spiffe",
    "http-message-signatures",
    "wimse-aims",
    "wimse-agent-audit-record",
    "aiagent-auth"
   ],
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "working-group",
   "prerequisites": [
    "spiffe"
   ],
   "probe": {
    "method": "n/a",
    "on_absent": "Absence of a site artifact means nothing; WIMSE governs workload-to-workload identity, not a site-facing endpoint.",
    "parse": "n/a",
    "path": "n/a (workload identity architecture; no fixed origin artifact)"
   },
   "question": "How do workloads — including AI agents — identify and authenticate themselves to one another across platforms and trust domains?",
   "scope": "general",
   "spec_url": "https://datatracker.ietf.org/wg/wimse/documents/",
   "step": "identify",
   "summary_md": "The Workload Identity in Multi-Service Environments (`WIMSE`) working group is chartered to address fine-grained, least privilege access control for workloads across multiple service platforms. `draft-ietf-wimse-arch` discusses an architecture for conveying workload identity and security context. The HTTP-signature specification profiles the HTTP Signatures protocol, and the `tag` value is `wimse-workload-to-workload`. A WIT (`draft-ietf-wimse-workload-creds-03`) is conveyed in the `Workload-Identity-Token` header field and identifies a single Workload Identifier URI (`draft-ietf-wimse-identifier-04`). The WPT is sent in the Authorization header using the `WPT` authentication scheme. Mutual TLS profiles X.509 Workload Identity Certificates. The WIMSE working group has 0 published RFCs in the IETF Datatracker. On 2026-10-28, revision 08 of `draft-ietf-wimse-http-signature` moved to Submitted to IESG for Publication (Publication Requested). Current drafts include `draft-ietf-wimse-workload-creds-03` (`2026-10-30`, expires 3 May 2027), `draft-ietf-wimse-workload-identity-practices-08` (`2026-10-30`), and `draft-ietf-wimse-aims-01` (`2026-11-02`, expires `2027-05-06`).",
   "track": "ietf",
   "use_cases": [
    "prove-agent-identity",
    "delegate-user-authority"
   ],
   "version": {
    "date": "2026-11-02",
    "label": "Working-group drafts: draft-ietf-wimse-arch-08 (2026-07-06); draft-ietf-wimse-workload-creds-03 (2026-10-30, expires 2027-05-03); draft-ietf-wimse-wpt-02 (2026-08-27); draft-ietf-wimse-http-signature-08 (2026-10-20, Publication Requested 2026-10-28); draft-ietf-wimse-mutual-tls-03 (2026-10-24); draft-ietf-wimse-identifier-04 (2026-10-23); draft-ietf-wimse-workload-identity-practices-08 (2026-10-30); draft-ietf-wimse-aims-01 (2026-11-02, expires 2027-05-06)"
   },
   "watch": [
    {
     "doc": "draft-ietf-wimse-arch",
     "type": "ietf"
    },
    {
     "doc": "draft-ietf-wimse-http-signature",
     "type": "ietf"
    }
   ],
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-08",
   "v05_hatnote_html_md": "This page is about WIMSE, the IETF wimse working group and its Internet-Drafts for conveying workload identity across multiple service platforms, including authentication and authorization of AI agent interactions. It is not SPIFFE, the CNCF project the charter lists under Dependencies and Liaisons and whose identifier the architecture draft gives as a conforming example; see [SPIFFE](/protocols/spiffe/). It is not Web Bot Auth, the separate IETF webbotauth working group for automated clients on the Web; see [Web Bot Auth](/protocols/webbotauth/). Its AI-agent document, AIMS, applies the WIMSE architecture and the OAuth 2.0 family of specifications rather than defining new protocols; see [WIMSE AI Identity Management System (AIMS)](/protocols/wimse-aims/). For the HTTP Signatures protocol one WIMSE draft profiles, see [HTTP Message Signatures](/protocols/http-message-signatures/). [1][2][3][4][5]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "The Workload Identity in Multi-Service Environments (`WIMSE`) working group is chartered to address fine-grained, least privilege access control for workloads across multiple service platforms. [1] `draft-ietf-wimse-arch` discusses an architecture for conveying workload identity and security context. [2] The HTTP-signature specification profiles the HTTP Signatures protocol, and the `tag` value is `wimse-workload-to-workload`. [5] A WIT (`draft-ietf-wimse-workload-creds-03`) is conveyed in the `Workload-Identity-Token` header field and identifies a single Workload Identifier URI (`draft-ietf-wimse-identifier-04`). [6][7] The WPT is sent in the Authorization header using the `WPT` authentication scheme. [8] Mutual TLS profiles X.509 Workload Identity Certificates. [9] The WIMSE working group has 0 published RFCs in the IETF Datatracker. [10] On 2026-10-28, revision 08 of `draft-ietf-wimse-http-signature` moved to Submitted to IESG for Publication (Publication Requested). Current drafts include `draft-ietf-wimse-workload-creds-03` (`2026-10-30`, expires 3 May 2027), `draft-ietf-wimse-workload-identity-practices-08` (`2026-10-30`), and `draft-ietf-wimse-aims-01` (`2026-11-02`, expires `2027-05-06`). [3][6][11][12][13][14]",
   "v05_identity_sentence_md": "The Workload Identity in Multi-Service Environments (`WIMSE`) working group is chartered to address fine-grained, least privilege access control for workloads across multiple service platforms. [1] `draft-ietf-wimse-arch` discusses an architecture for conveying workload identity and security context. [2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Identify](/category/identify/) (`identify`)"
    },
    {
     "label": "Form",
     "value_md": "Endpoint (`endpoint`)"
    },
    {
     "label": "Originated by",
     "value_md": "J. Salowey (Palo Alto Networks), Y. Rosomakho (Zscaler), and H. Tschofenig (UniBw M.) wrote draft-ietf-wimse-arch-08, dated 6 July 2026. The IETF wimse group was created in state BOF on 2023-09-28. [2][15]"
    },
    {
     "label": "Governed by",
     "value_md": "IETF wimse working group. Name: Workload Identity in Multi System Environments. Acronym: wimse. Area: Applications and Real-Time Area (art). State: Active. Charter: charter-ietf-wimse-01 Approved. Chairs: Justin Richer and Pieter Kasselman. Area Director: Charles Eckel. The charter text calls it the Workload Identity in Multi-Service Environments (WIMSE) working group. [1][15]"
    },
    {
     "label": "Track",
     "value_md": "IETF. Working-group drafts in this set name the RFC stream Internet Engineering Task Force (IETF). The HTTP-signature draft's intended RFC status is Proposed Standard, and the practices draft's intended RFC status is Informational. [12][16][17]"
    },
    {
     "label": "IETF tracker",
     "value_md": "[wimse working group](https://datatracker.ietf.org/wg/wimse/about/) and [documents](https://datatracker.ietf.org/wg/wimse/documents/) [1][13]"
    },
    {
     "label": "Status",
     "value_md": "The wimse working group has not yet published an RFC. On 2026-10-28, revision 08, the http-signature history records that Justin Richer changed the IETF WG state to Submitted to IESG for Publication from WG Document, and changed the IESG state to Publication Requested from I-D Exists. That document's summary box in this fetch still shows Last updated 2026-10-09 (Latest revision 2026-09-20), WG state WG Document with Doc Shepherd Follow-up Underway, and IESG state I-D Exists. draft-ietf-wimse-workload-identity-practices-07 shows IESG state AD Evaluation::AD Followup and WG state Submitted to IESG for Publication. Its history records the WG state change to Submitted to IESG for Publication on 2026-06-30 at revision 05. The architecture, workload-credentials, WPT, mutual-TLS, identifier, and AIMS document pages show WG state WG Document and IESG state I-D Exists. [10][11][12][16][17][18][19][20][21][22][23]"
    },
    {
     "label": "Version",
     "value_md": "draft-ietf-wimse-arch-08 (6 July 2026); draft-ietf-wimse-workload-creds-03 (30 October 2026, expires 3 May 2027); draft-ietf-wimse-wpt-02 (27 August 2026); draft-ietf-wimse-http-signature-08 (20 October 2026; history records New version available: draft-ietf-wimse-http-signature-08.txt on 2026-10-20, replacing draft-ietf-wimse-s2s-protocol-07); draft-ietf-wimse-mutual-tls-03 (24 October 2026); draft-ietf-wimse-identifier-04 (23 October 2026); draft-ietf-wimse-workload-identity-practices-08 (30 October 2026, expires 3 May 2027); draft-ietf-wimse-aims-01 (2 November 2026, expires 6 May 2027). Related OAuth/workload drafts: draft-carleton-workload-authz-grant-02 (2 November 2026) and draft-ietf-oauth-spiffe-client-auth-03 (2 November 2026). [2][3][5][6][7][8][9][11][24][25][26]"
    },
    {
     "label": "Headers",
     "value_md": "Workload-Identity-Token header field for the Workload Identity Token. Authorization header field with the WPT authentication scheme for the Workload Proof Token. HTTP Message Signature tag wimse-workload-to-workload. [5][6][8]"
    },
    {
     "label": "Token format",
     "value_md": "The WIT is explicitly typed with the wit+jwt media type and registered as application/wit+jwt. The WPT is a signed JWT typed with the application/wpt+jwt media type. A Workload Identifier is a URI, with spiffe and wimse among the schemes the identifier draft allows. [6][7][8]"
    },
    {
     "label": "IANA registration",
     "value_md": "The WIMSE credentials Internet-Draft specifies IANA registration of media type `application/wit+jwt` (subtype `wit+jwt`) and the `Workload-Identity-Token` header field. The WPT Internet-Draft specifies IANA registration of media type `application/wpt+jwt` and HTTP authentication scheme name `WPT`. Because both documents are active Internet-Drafts, the fetched IANA HTTP Authentication Scheme Registry does not yet list `WPT`. [6][8][27]"
    },
    {
     "label": "Transports",
     "value_md": "HTTP, limited by the charter to specific REST-based technologies, and mutual TLS using X.509 Workload Identity Certificates. [1][9]"
    },
    {
     "label": "Specification",
     "value_md": "[Architecture, draft-ietf-wimse-arch-08](https://www.ietf.org/archive/id/draft-ietf-wimse-arch-08.txt), [Workload Credentials, draft-ietf-wimse-workload-creds-03](https://www.ietf.org/archive/id/draft-ietf-wimse-workload-creds-03.txt), [Workload Proof Token, draft-ietf-wimse-wpt-02](https://www.ietf.org/archive/id/draft-ietf-wimse-wpt-02.txt), [HTTP Signatures, draft-ietf-wimse-http-signature-08](https://www.ietf.org/archive/id/draft-ietf-wimse-http-signature-08.txt), [Mutual TLS, draft-ietf-wimse-mutual-tls-03](https://www.ietf.org/archive/id/draft-ietf-wimse-mutual-tls-03.txt), [Workload Identifier, draft-ietf-wimse-identifier-04](https://www.ietf.org/archive/id/draft-ietf-wimse-identifier-04.txt), [Practices, draft-ietf-wimse-workload-identity-practices-08](https://www.ietf.org/archive/id/draft-ietf-wimse-workload-identity-practices-08.txt), [AIMS, draft-ietf-wimse-aims-01](https://www.ietf.org/archive/id/draft-ietf-wimse-aims-01.txt), [WAG, draft-carleton-workload-authz-grant-02](https://www.ietf.org/archive/id/draft-carleton-workload-authz-grant-02.txt), [SPIFFE Client Auth, draft-ietf-oauth-spiffe-client-auth-03](https://www.ietf.org/archive/id/draft-ietf-oauth-spiffe-client-auth-03.txt) [2][3][5][6][7][8][9][24][25][26]"
    },
    {
     "label": "Found at",
     "value_md": "[IETF Datatracker, wimse documents](https://datatracker.ietf.org/wg/wimse/documents/) [13]"
    },
    {
     "label": "Licence",
     "value_md": "Copyright (c) 2026 IETF Trust and the persons identified as the document authors. Code components extracted from the architecture draft must include Revised BSD License text. [2]"
    }
   ],
   "v05_problem_md": "OAuth, JWT, and SPIFFE have been combined in a variety of ways in practice, but the solutions have existed in relative isolation. [1][3][24] In `draft-ietf-wimse-workload-creds-03`, the WIT binds a public key to the single Workload Identifier URI (`draft-ietf-wimse-identifier-04`). The workload MUST prove possession of the corresponding private key when presenting the WIT (`draft-ietf-wimse-http-signature-08` or `draft-ietf-wimse-wpt-02`), so it MUST NOT be used as a bearer token and is not intended for use in the Authorization header. [5][6][7][8] The working group will focus on only specific REST-based technologies using HTTP, while recognizing protocols such as gRPC, Kafka, and GraphQL. Adjacent OAuth client-authentication and authorization-grant profiles for workloads and agents are specified in `draft-ietf-oauth-spiffe-client-auth-03` and `draft-carleton-workload-authz-grant-02`, while `draft-ietf-wimse-aims-01` composes WIMSE and OAuth for AI agents. [1][3][25][26]",
   "v05_mechanism_delta_md": "In `draft-ietf-wimse-workload-creds-03`, the WIT binds a public key to the single Workload Identifier URI (`draft-ietf-wimse-identifier-04`). The workload MUST prove possession of the corresponding private key when presenting the WIT (`draft-ietf-wimse-http-signature-08` or `draft-ietf-wimse-wpt-02`), so it MUST NOT be used as a bearer token and is not intended for use in the Authorization header. [5][6][7][8]",
   "v05_scope_boundary_md": "The working group will focus on only specific REST-based technologies using HTTP, while recognizing protocols such as gRPC, Kafka, and GraphQL. Adjacent OAuth client-authentication and authorization-grant profiles for workloads and agents are specified in `draft-ietf-oauth-spiffe-client-auth-03` and `draft-carleton-workload-authz-grant-02`, while `draft-ietf-wimse-aims-01` composes WIMSE and OAuth for AI agents. [1][3][25][26]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "JSON Web Token (JWT, RFC 7519)",
      "spec_or_rfc": "RFC 7519",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "The Workload Identity Token is WIMSE's JWT: it is explicitly typed with the wit+jwt media type, registered as application/wit+jwt, carried in the Workload-Identity-Token header field, and the credentials draft says it must not be used as a bearer token. [6]"
     },
     {
      "name": "OAuth 2.0 Demonstrating Proof of Possession (DPoP, RFC 9449)",
      "spec_or_rfc": "RFC 9449",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "DPoP is the model named for WIMSE's first proof alternative: the HTTP-signature draft says the Workload Proof Token alternative is inspired by the OAuth DPoP specification, and the WPT draft sends that signed JWT, typed application/wpt+jwt, in the Authorization header field. [5][8]"
     },
     {
      "name": "SPIFFE",
      "spec_or_rfc": "SPIFFE-ID",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "SPIFFE is one of the three technologies the WIMSE charter names, with OAuth and JWT, and the architecture draft gives SPIFFE-ID as an example of an identifier format that conforms to the WIMSE workload identifier. [1][2]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "spiffe",
      "target_name": "SPIFFE (Secure Production Identity Framework for Everyone)",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "SPIFFE is the identifier profile WIMSE builds on: the architecture draft's conforming example is SPIFFE-ID, and AIMS says an agent must be assigned exactly one WIMSE identifier, which may be a SPIFFE ID. [2][3]"
     },
     {
      "target_id": "http-message-signatures",
      "target_name": "HTTP Message Signatures",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "HTTP Message Signatures (RFC 9421) is what draft-ietf-wimse-http-signature profiles to protect service traffic, while the Workload Identity Token stays in the Workload-Identity-Token header field. [5][6]"
     },
     {
      "target_id": "wimse-aims",
      "target_name": "AI Identity Management System (AIMS)",
      "relation_type": "has_component",
      "relation_label": "Has component",
      "delta_md": "AIMS (draft-ietf-wimse-aims-01, dated 2026-11-02, expiring 2027-05-06) is the WIMSE draft that replaced draft-klrc-aiagent-auth. It requires exactly one WIMSE identifier, which may be a SPIFFE ID, and it describes applying existing standards rather than defining new protocols. [3][14][23]"
     },
     {
      "target_id": "wimse-agent-audit-record",
      "target_name": "An Audit Record Format for AI Agent Authorization Decisions",
      "relation_type": "depended_on_by",
      "relation_label": "Depended on by",
      "delta_md": "The Agent Audit Record is an in-toto Statement carried in a DSSE envelope for an AI agent authorization decision, which is a different artifact from the wit+jwt Workload Identity Token and the application/wpt+jwt Workload Proof Token. [6][8][28]"
     },
     {
      "target_id": "aiagent-auth",
      "target_name": "AI Agent Authentication and Authorization",
      "relation_type": "adopted_by",
      "relation_label": "Adopted by WG",
      "delta_md": "Adopted by the working group (now AIMS). AI Agent Authentication and Authorization (draft-klrc-aiagent-auth) is a replaced Internet-Draft. The wimse working group adopted it on 2026-09-09, and draft-ietf-wimse-aims replaces it. [2][23][29][30]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (8 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).",
    "side_a": {
     "visible": true,
     "heading": "Issuers, identity planes & control planes",
     "col4_header": "Boundary & format",
     "note_md": null,
     "rows": [
      {
       "actor": "SPIRE",
       "role": "WIT-SVID issuer",
       "status": "Development",
       "status_display": "Development · as of 2026-11-05",
       "col4_md": "Issue #6326, WIT-SVID support in SPIRE, was opened on 2025-09-18 and remains open; the SPIFFE sig-spec note states Workload Identity Token support is being brought into SPIFFE. The changelog records dummy implementations for the WIT-SVID profile (#6399) in 1.14.0 (2025-12-11), iss claim support for WIT-SVIDs (#6857) in 1.15.0 (2026-05-19), incremental WIT-SVID work for the `svid.v1` API client (#7132, #7134) in 1.15.3 (2026-08-21), and experimental WIT-SVID support in 1.16.0 (2026-11-05) gated behind the `enable_wit_svids` server and agent options with a `spire-agent api fetch wit` CLI command (#7243, #7244, #7273, #7282, #7302, #7306, #7354).",
       "source_md": "[SPIRE issue #6326](https://github.com/spiffe/spire/issues/6326) [31] · [SPIRE changelog](https://raw.githubusercontent.com/spiffe/spire/main/CHANGELOG.md) [32]"
      },
      {
       "actor": "Cofide",
       "role": "WIT issuer",
       "status": "Experimental",
       "status_display": "Experimental · as of 2025-11-13",
       "col4_md": "draft-ietf-wimse-http-signature-08 section 4.1 records Cofide's implementation at `cofide/wimse-s2s-httpsig-poc` with maturity proof-of-concept for WIT plus HTTP Message Signatures, Apache 2.0, last updated 13-Nov-2025. The repository is a proof-of-concept demo of WIMSE workload-to-workload authentication with HTTP signatures, based on draft-ietf-wimse-s2s-protocol. It extends minispire, a lightweight SPIFFE implementation, to issue WIMSE Workload Identity Token SVIDs to a demo client and server, as an approximation of the in-development WIT-SVID, without a whole SPIRE setup. Cofide describes the system as a demonstrator and says minispire issues a developmental version of the proposed WIT-SVID credential.",
       "source_md": "[HTTP signature draft](https://www.ietf.org/archive/id/draft-ietf-wimse-http-signature-08.txt) [5] · [cofide/wimse-s2s-httpsig-poc](https://github.com/cofide/wimse-s2s-httpsig-poc) [33] · [Cofide middlebox note](https://www.cofide.io/resources/solving-the-middlebox-dilemma-with-wimse-and-http-message-signatures) [34]"
      },
      {
       "actor": "Solo.io",
       "role": "WIT issuer / waypoint",
       "status": "Experimental",
       "status_display": "Experimental · as of 2026-10-30",
       "col4_md": "Solo Enterprise for agentgateway documents WIMSE Workload Identity Tokens for service-to-service traffic when agentgateway is deployed as a waypoint proxy in an ambient mesh. WIMSE/WIT support is in the alpha state: alpha features are likely to change, are not fully tested, and are not supported for production. Deployed as a waypoint, agentgateway can forward or exchange the WIT. Emitting a proof works with both `SourceDelegation` and `SelfIdentification`. The docs page identifies the current line as `2026.10.2` and records `dateModified` 2026-10-30.",
       "source_md": "[agentgateway WIMSE docs](https://docs.solo.io/agentgateway/kubernetes/latest/documentation/security/wimse/) [35]"
      },
      {
       "actor": "Defakto Security",
       "role": "Workload credential issuer",
       "status": "Partial",
       "status_display": "Partial · as of 2026-10-30",
       "col4_md": "draft-ietf-wimse-workload-creds-03 (dated 30 October 2026) records Defakto Security (prior SPIRL) with Workload Identity Certificate maturity production and Workload Identity Token maturity alpha. The coverage line lists the Workload Identity Certificate and WIT.",
       "source_md": "[WIMSE Workload Credentials (-03)](https://www.ietf.org/archive/id/draft-ietf-wimse-workload-creds-03.txt) [6]"
      },
      {
       "actor": "Teleport",
       "role": "Workload credential issuer",
       "status": "Development",
       "status_display": "Development · as of 2026-10-30",
       "col4_md": "draft-ietf-wimse-workload-creds-03 (dated 30 October 2026) records Teleport Machine & Workload Identity with Workload Identity Certificate maturity production and Workload Identity Token maturity research. The coverage line for that entry lists the Workload Identity Certificate.",
       "source_md": "[WIMSE Workload Credentials (-03)](https://www.ietf.org/archive/id/draft-ietf-wimse-workload-creds-03.txt) [6]"
      },
      {
       "actor": "wimsey",
       "role": "Reference WIT / WIC issuer",
       "status": "Development",
       "status_display": "Development · as of 2026-09-08",
       "col4_md": "wimsey is a vendor-neutral reference implementation of the IETF WIMSE workload-identity specs, in Rust. The repository says it is pre-alpha, that the specs are Internet-Drafts with no RFC yet, and that it is not production-ready. The `wimsey-wit` crate covers the Workload Identity Token (WIT / WIC). draft-ietf-wimse-http-signature-08 section 4.2 records the same repository at alpha maturity for WIT plus HTTP Message Signatures, including signed responses, Apache 2.0, last updated 08-Sep-2026. GitHub records repository creation on 2026-06-29 under the `Apache-2.0` license.",
       "source_md": "[kanywst/wimsey](https://github.com/kanywst/wimsey) [36] · [HTTP signature draft](https://www.ietf.org/archive/id/draft-ietf-wimse-http-signature-08.txt) [5]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Verifiers, gateways & relying services",
     "col4_header": "Boundary & format",
     "note_md": null,
     "rows": [
      {
       "actor": "Solo.io",
       "role": "Gateway verifier",
       "status": "Experimental",
       "status_display": "Experimental · as of 2026-10-30",
       "col4_md": "On the receive side, Solo Enterprise for agentgateway validates proofs by setting `traffic.entWptEnforcement` in an EnterpriseAgentgatewayPolicy. When `VALIDATE_SPIFFE_TRUST_DOMAIN_NAMES=STRICT` is set and a request carries a WIT, agentgateway verifies the `x5c` certificate chain embedded in the WIT in addition to the mTLS certificate chain. WIMSE/WIT support is in the alpha state and is not supported for production. The same docs identify the current line as `2026.10.2`.",
       "source_md": "[agentgateway WIMSE docs](https://docs.solo.io/agentgateway/kubernetes/latest/documentation/security/wimse/) [35]"
      },
      {
       "actor": "wimsey",
       "role": "Reference verifier",
       "status": "Development",
       "status_display": "Development · as of 2026-09-08",
       "col4_md": "draft-ietf-wimse-http-signature-08 section 4.2 records wimsey at alpha maturity with coverage of WIT, HTTP Message Signatures, and signed responses. The repository is pre-alpha and not production-ready. Its `conformance/` notes record inputs, the exact bytes they must produce, and, for every negative case, a language-neutral code naming why the input must be rejected.",
       "source_md": "[kanywst/wimsey](https://github.com/kanywst/wimsey) [36] · [HTTP signature draft](https://www.ietf.org/archive/id/draft-ietf-wimse-http-signature-08.txt) [5]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [
     {
      "label": "Datatracker documents of type RFC",
      "as_of": "2026-10-30",
      "value_md": "0 published RFCs as of 2026-10-30 in the IETF Datatracker for the WIMSE working group. [10]"
     },
     {
      "label": "wimse about page and history",
      "as_of": "2026-07-31",
      "value_md": "The wimse working group is Active under charter-ietf-wimse-01, which was approved on 2024-03-07 after the group was created in state BOF. The charter names a liaison with the Cloud Native Computing Foundation (particularly with regard to the SPIFFE/SPIRE project) and a 2026-07-31 milestone to submit the informational WIMSE architecture document to the IESG; that July 2026 milestone date has passed with 0 published WIMSE RFCs. [1][15]"
     },
     {
      "label": "draft-ietf-wimse-http-signature Datatracker",
      "as_of": "2026-10-28",
      "value_md": "draft-ietf-wimse-http-signature has intended RFC status Proposed Standard. On 2026-10-28 the IETF WG state changed to Submitted to IESG for Publication, and the IESG state changed to Publication Requested from I-D Exists. [12]"
     },
     {
      "label": "draft-ietf-wimse-workload-creds-03",
      "as_of": "2026-10-30",
      "value_md": "The implementation status in draft-ietf-wimse-workload-creds-03, dated 30 October 2026, records SPIFFE (Standard) Workload Identity Certificate as fully compatible with the X509-SVID and widely used, and Workload Identity Token as beta. Defakto Security (prior SPIRL) records the certificate at production and the token at alpha. Teleport records the certificate at production and the token at research. [6]"
     },
     {
      "label": "IETF Datatracker, references to draft-ietf-wimse-wpt (fetched 2026-11-06)",
      "as_of": null,
      "value_md": "The referenced-by index for draft-ietf-wimse-wpt lists normative referencers draft-ietf-wimse-aims (AI Identity Management System), draft-mcguinness-oauth-actor-profile (OAuth Actor Profile for Delegation), and draft-reddy-wimse-workload-attestation. [37]"
     }
    ],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "workload-authz-grant",
     "target_name": "Workload Authorization Grant (WAG)",
     "relation_label": "Complements",
     "delta": "WIMSE credential formats include the Workload Identity Token (WIT), which binds a cryptographic key to a workload identifier for authentication. Workload Authorization Grant (`draft-carleton-workload-authz-grant-02`, 2 November 2026) defines short-lived `oauth-wag+jwt` authorization grants as an RFC 7523 profile bound to WIMSE/SPIFFE workload identifiers rather than a WIMSE WIT, while WIMSE provides the cross-domain workload identity layer.",
     "item_md": "**[Workload Authorization Grant (WAG)](/protocols/workload-authz-grant/)** (Complements) — WIMSE credential formats include the Workload Identity Token (WIT), which binds a cryptographic key to a workload identifier for authentication. Workload Authorization Grant (`draft-carleton-workload-authz-grant-02`, 2 November 2026) defines short-lived `oauth-wag+jwt` authorization grants as an RFC 7523 profile bound to WIMSE/SPIFFE workload identifiers rather than a WIMSE WIT, while WIMSE provides the cross-domain workload identity layer."
    },
    {
     "target_id": "aip",
     "target_name": "Agent Identity Protocol (AIP)",
     "relation_label": "Peer alternative",
     "delta": "WIMSE puts a wit+jwt in the Workload-Identity-Token header, while this draft identifies the agent with did:aip and an AIP-GRANT ceremony.",
     "item_md": "**[Agent Identity Protocol (AIP)](/protocols/aip/)** (Peer alternative) — WIMSE puts a wit+jwt in the Workload-Identity-Token header, while this draft identifies the agent with did:aip and an AIP-GRANT ceremony."
    },
    {
     "target_id": "agent-principal-binding",
     "target_name": "Security Principal and Verifier Binding for Agent Communication Protocols",
     "relation_label": "Complements",
     "delta": "Applied to WIMSE, the matrix keeps the WIT, the Workload Proof Token, and any user delegation as separately verified claims.",
     "item_md": "**[Security Principal and Verifier Binding for Agent Communication Protocols](/protocols/agent-principal-binding/)** (Complements) — Applied to WIMSE, the matrix keeps the WIT, the Workload Proof Token, and any user delegation as separately verified claims."
    },
    {
     "target_id": "lws10-authn-ssi-cid",
     "target_name": "LWS 1.0 Authentication Suite: Self-signed Identity using Controlled Identifiers",
     "relation_label": "Peer alternative",
     "delta": "A WIMSE WIT is a wit+jwt in the Workload-Identity-Token header from a workload issuer, while this JWT is self-signed and verified from the subject's own identifier document.",
     "item_md": "**[LWS 1.0 Authentication Suite: Self-signed Identity using Controlled Identifiers](/protocols/lws10-authn-ssi-cid/)** (Peer alternative) — A WIMSE WIT is a wit+jwt in the Workload-Identity-Token header from a workload issuer, while this JWT is self-signed and verified from the subject's own identifier document."
    },
    {
     "target_id": "wimse-workload-identity-metadata",
     "target_name": "Workload Identity Metadata",
     "relation_label": "Has component",
     "delta": "The optional JWT claim or X.509 extension sits on a WIMSE workload credential and points at the metadata endpoint for that workload.",
     "item_md": "**[Workload Identity Metadata](/protocols/wimse-workload-identity-metadata/)** (Has component) — The optional JWT claim or X.509 extension sits on a WIMSE workload credential and points at the metadata endpoint for that workload."
    },
    {
     "target_id": "agent-authorization-envelope",
     "target_name": "Agent Authorization Envelope",
     "relation_label": "Complements",
     "delta": "The wit+jwt Workload Identity Token in the Workload-Identity-Token header authenticates the workload, and the envelope is the separate JWS-secured Verifiable Credential the agent presents.",
     "item_md": "**[Agent Authorization Envelope](/protocols/agent-authorization-envelope/)** (Complements) — The wit+jwt Workload Identity Token in the Workload-Identity-Token header authenticates the workload, and the envelope is the separate JWS-secured Verifiable Credential the agent presents."
    },
    {
     "target_id": "webbotauth",
     "target_name": "Web Bot Auth",
     "relation_label": "Complements",
     "delta": "IETF `webbotauth` charter designates the WIMSE working group as a formal liaison counterpart for workload and agent authentication.",
     "item_md": "**[Web Bot Auth](/protocols/webbotauth/)** (Complements) — IETF `webbotauth` charter designates the WIMSE working group as a formal liaison counterpart for workload and agent authentication."
    },
    {
     "item_md": "**[Identify protocols](/category/identify/)** — Category index for `identify` standards."
    }
   ],
   "v05_compiled_md": "---\nid: wimse\ntitle: \"Workload Identity in Multi System Environments (WIMSE)\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: identify\nform: endpoint\nwire_archetype: identity_auth_crypto\nspec_url: https://www.ietf.org/archive/id/draft-ietf-wimse-arch-08.txt\nlast_checked: 2026-11-08\n---\n\n# Workload Identity in Multi System Environments (WIMSE)\n\n**Category:** [Identify](/category/identify/) (`identify`) · **Form:** Endpoint (`endpoint`) · **Last checked:** 2026-11-08\n\n> *This page is about WIMSE, the IETF wimse working group and its Internet-Drafts for conveying workload identity across multiple service platforms, including authentication and authorization of AI agent interactions. It is not SPIFFE, the CNCF project the charter lists under Dependencies and Liaisons and whose identifier the architecture draft gives as a conforming example; see [SPIFFE](/protocols/spiffe/). It is not Web Bot Auth, the separate IETF webbotauth working group for automated clients on the Web; see [Web Bot Auth](/protocols/webbotauth/). Its AI-agent document, AIMS, applies the WIMSE architecture and the OAuth 2.0 family of specifications rather than defining new protocols; see [WIMSE AI Identity Management System (AIMS)](/protocols/wimse-aims/). For the HTTP Signatures protocol one WIMSE draft profiles, see [HTTP Message Signatures](/protocols/http-message-signatures/). [1][2][3][4][5]*\n\nThe Workload Identity in Multi-Service Environments (`WIMSE`) working group is chartered to address fine-grained, least privilege access control for workloads across multiple service platforms. [1] `draft-ietf-wimse-arch` discusses an architecture for conveying workload identity and security context. [2] The HTTP-signature specification profiles the HTTP Signatures protocol, and the `tag` value is `wimse-workload-to-workload`. [5] A WIT (`draft-ietf-wimse-workload-creds-03`) is conveyed in the `Workload-Identity-Token` header field and identifies a single Workload Identifier URI (`draft-ietf-wimse-identifier-04`). [6][7] The WPT is sent in the Authorization header using the `WPT` authentication scheme. [8] Mutual TLS profiles X.509 Workload Identity Certificates. [9] The WIMSE working group has 0 published RFCs in the IETF Datatracker. [10] On 2026-10-28, revision 08 of `draft-ietf-wimse-http-signature` moved to Submitted to IESG for Publication (Publication Requested). Current drafts include `draft-ietf-wimse-workload-creds-03` (`2026-10-30`, expires 3 May 2027), `draft-ietf-wimse-workload-identity-practices-08` (`2026-10-30`), and `draft-ietf-wimse-aims-01` (`2026-11-02`, expires `2027-05-06`). [3][6][11][12][13][14]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Identify](/category/identify/) (`identify`) |\n| **Form** | Endpoint (`endpoint`) |\n| **Originated by** | J. Salowey (Palo Alto Networks), Y. Rosomakho (Zscaler), and H. Tschofenig (UniBw M.) wrote draft-ietf-wimse-arch-08, dated 6 July 2026. The IETF wimse group was created in state BOF on 2023-09-28. [2][15] |\n| **Governed by** | IETF wimse working group. Name: Workload Identity in Multi System Environments. Acronym: wimse. Area: Applications and Real-Time Area (art). State: Active. Charter: charter-ietf-wimse-01 Approved. Chairs: Justin Richer and Pieter Kasselman. Area Director: Charles Eckel. The charter text calls it the Workload Identity in Multi-Service Environments (WIMSE) working group. [1][15] |\n| **Track** | IETF. Working-group drafts in this set name the RFC stream Internet Engineering Task Force (IETF). The HTTP-signature draft's intended RFC status is Proposed Standard, and the practices draft's intended RFC status is Informational. [12][16][17] |\n| **IETF tracker** | [wimse working group](https://datatracker.ietf.org/wg/wimse/about/) and [documents](https://datatracker.ietf.org/wg/wimse/documents/) [1][13] |\n| **Status** | The wimse working group has not yet published an RFC. On 2026-10-28, revision 08, the http-signature history records that Justin Richer changed the IETF WG state to Submitted to IESG for Publication from WG Document, and changed the IESG state to Publication Requested from I-D Exists. That document's summary box in this fetch still shows Last updated 2026-10-09 (Latest revision 2026-09-20), WG state WG Document with Doc Shepherd Follow-up Underway, and IESG state I-D Exists. draft-ietf-wimse-workload-identity-practices-07 shows IESG state AD Evaluation::AD Followup and WG state Submitted to IESG for Publication. Its history records the WG state change to Submitted to IESG for Publication on 2026-06-30 at revision 05. The architecture, workload-credentials, WPT, mutual-TLS, identifier, and AIMS document pages show WG state WG Document and IESG state I-D Exists. [10][11][12][16][17][18][19][20][21][22][23] |\n| **Version** | draft-ietf-wimse-arch-08 (6 July 2026); draft-ietf-wimse-workload-creds-03 (30 October 2026, expires 3 May 2027); draft-ietf-wimse-wpt-02 (27 August 2026); draft-ietf-wimse-http-signature-08 (20 October 2026; history records New version available: draft-ietf-wimse-http-signature-08.txt on 2026-10-20, replacing draft-ietf-wimse-s2s-protocol-07); draft-ietf-wimse-mutual-tls-03 (24 October 2026); draft-ietf-wimse-identifier-04 (23 October 2026); draft-ietf-wimse-workload-identity-practices-08 (30 October 2026, expires 3 May 2027); draft-ietf-wimse-aims-01 (2 November 2026, expires 6 May 2027). Related OAuth/workload drafts: draft-carleton-workload-authz-grant-02 (2 November 2026) and draft-ietf-oauth-spiffe-client-auth-03 (2 November 2026). [2][3][5][6][7][8][9][11][24][25][26] |\n| **Headers** | Workload-Identity-Token header field for the Workload Identity Token. Authorization header field with the WPT authentication scheme for the Workload Proof Token. HTTP Message Signature tag wimse-workload-to-workload. [5][6][8] |\n| **Token format** | The WIT is explicitly typed with the wit+jwt media type and registered as application/wit+jwt. The WPT is a signed JWT typed with the application/wpt+jwt media type. A Workload Identifier is a URI, with spiffe and wimse among the schemes the identifier draft allows. [6][7][8] |\n| **IANA registration** | The WIMSE credentials Internet-Draft specifies IANA registration of media type `application/wit+jwt` (subtype `wit+jwt`) and the `Workload-Identity-Token` header field. The WPT Internet-Draft specifies IANA registration of media type `application/wpt+jwt` and HTTP authentication scheme name `WPT`. Because both documents are active Internet-Drafts, the fetched IANA HTTP Authentication Scheme Registry does not yet list `WPT`. [6][8][27] |\n| **Transports** | HTTP, limited by the charter to specific REST-based technologies, and mutual TLS using X.509 Workload Identity Certificates. [1][9] |\n| **Specification** | [Architecture, draft-ietf-wimse-arch-08](https://www.ietf.org/archive/id/draft-ietf-wimse-arch-08.txt), [Workload Credentials, draft-ietf-wimse-workload-creds-03](https://www.ietf.org/archive/id/draft-ietf-wimse-workload-creds-03.txt), [Workload Proof Token, draft-ietf-wimse-wpt-02](https://www.ietf.org/archive/id/draft-ietf-wimse-wpt-02.txt), [HTTP Signatures, draft-ietf-wimse-http-signature-08](https://www.ietf.org/archive/id/draft-ietf-wimse-http-signature-08.txt), [Mutual TLS, draft-ietf-wimse-mutual-tls-03](https://www.ietf.org/archive/id/draft-ietf-wimse-mutual-tls-03.txt), [Workload Identifier, draft-ietf-wimse-identifier-04](https://www.ietf.org/archive/id/draft-ietf-wimse-identifier-04.txt), [Practices, draft-ietf-wimse-workload-identity-practices-08](https://www.ietf.org/archive/id/draft-ietf-wimse-workload-identity-practices-08.txt), [AIMS, draft-ietf-wimse-aims-01](https://www.ietf.org/archive/id/draft-ietf-wimse-aims-01.txt), [WAG, draft-carleton-workload-authz-grant-02](https://www.ietf.org/archive/id/draft-carleton-workload-authz-grant-02.txt), [SPIFFE Client Auth, draft-ietf-oauth-spiffe-client-auth-03](https://www.ietf.org/archive/id/draft-ietf-oauth-spiffe-client-auth-03.txt) [2][3][5][6][7][8][9][24][25][26] |\n| **Found at** | [IETF Datatracker, wimse documents](https://datatracker.ietf.org/wg/wimse/documents/) [13] |\n| **Licence** | Copyright (c) 2026 IETF Trust and the persons identified as the document authors. Code components extracted from the architecture draft must include Revised BSD License text. [2] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [Adoption and ecosystem](#adoption-and-ecosystem)\n4. [See also](#see-also)\n5. [References](#references)\n\n---\n\n## Problem and scope\n\nOAuth, JWT, and SPIFFE have been combined in a variety of ways in practice, but the solutions have existed in relative isolation. [1][3][24] In `draft-ietf-wimse-workload-creds-03`, the WIT binds a public key to the single Workload Identifier URI (`draft-ietf-wimse-identifier-04`). The workload MUST prove possession of the corresponding private key when presenting the WIT (`draft-ietf-wimse-http-signature-08` or `draft-ietf-wimse-wpt-02`), so it MUST NOT be used as a bearer token and is not intended for use in the Authorization header. [5][6][7][8] The working group will focus on only specific REST-based technologies using HTTP, while recognizing protocols such as gRPC, Kafka, and GraphQL. Adjacent OAuth client-authentication and authorization-grant profiles for workloads and agents are specified in `draft-ietf-oauth-spiffe-client-auth-03` and `draft-carleton-workload-authz-grant-02`, while `draft-ietf-wimse-aims-01` composes WIMSE and OAuth for AI agents. [1][3][25][26]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **JSON Web Token (JWT, RFC 7519)** | `RFC 7519` | Profiles classic standard | The Workload Identity Token is WIMSE's JWT: it is explicitly typed with the wit+jwt media type, registered as application/wit+jwt, carried in the Workload-Identity-Token header field, and the credentials draft says it must not be used as a bearer token. [6] |\n| **OAuth 2.0 Demonstrating Proof of Possession (DPoP, RFC 9449)** | `RFC 9449` | Analogous to classic standard | DPoP is the model named for WIMSE's first proof alternative: the HTTP-signature draft says the Workload Proof Token alternative is inspired by the OAuth DPoP specification, and the WPT draft sends that signed JWT, typed application/wpt+jwt, in the Authorization header field. [5][8] |\n| **SPIFFE** | `SPIFFE-ID` | Analogous to classic standard | SPIFFE is one of the three technologies the WIMSE charter names, with OAuth and JWT, and the architecture draft gives SPIFFE-ID as an example of an identifier format that conforms to the WIMSE workload identifier. [1][2] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[SPIFFE (Secure Production Identity Framework for Everyone)](/protocols/spiffe/)** | Builds on | SPIFFE is the identifier profile WIMSE builds on: the architecture draft's conforming example is SPIFFE-ID, and AIMS says an agent must be assigned exactly one WIMSE identifier, which may be a SPIFFE ID. [2][3] |\n| **[HTTP Message Signatures](/protocols/http-message-signatures/)** | Builds on | HTTP Message Signatures (RFC 9421) is what draft-ietf-wimse-http-signature profiles to protect service traffic, while the Workload Identity Token stays in the Workload-Identity-Token header field. [5][6] |\n| **[AI Identity Management System (AIMS)](/protocols/wimse-aims/)** | Has component | AIMS (draft-ietf-wimse-aims-01, dated 2026-11-02, expiring 2027-05-06) is the WIMSE draft that replaced draft-klrc-aiagent-auth. It requires exactly one WIMSE identifier, which may be a SPIFFE ID, and it describes applying existing standards rather than defining new protocols. [3][14][23] |\n| **[An Audit Record Format for AI Agent Authorization Decisions](/protocols/wimse-agent-audit-record/)** | Depended on by | The Agent Audit Record is an in-toto Statement carried in a DSSE envelope for an AI agent authorization decision, which is a different artifact from the wit+jwt Workload Identity Token and the application/wpt+jwt Workload Proof Token. [6][8][28] |\n| **[AI Agent Authentication and Authorization](/protocols/aiagent-auth/)** | Adopted by WG | Adopted by the working group (now AIMS). AI Agent Authentication and Authorization (draft-klrc-aiagent-auth) is a replaced Internet-Draft. The wimse working group adopted it on 2026-09-09, and draft-ietf-wimse-aims replaces it. [2][23][29][30] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (8 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).*\n\n### Issuers, identity planes & control planes\n\n| Actor | Role | Status | Boundary & format | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **SPIRE** | WIT-SVID issuer | Development · as of 2026-11-05 | Issue #6326, WIT-SVID support in SPIRE, was opened on 2025-09-18 and remains open; the SPIFFE sig-spec note states Workload Identity Token support is being brought into SPIFFE. The changelog records dummy implementations for the WIT-SVID profile (#6399) in 1.14.0 (2025-12-11), iss claim support for WIT-SVIDs (#6857) in 1.15.0 (2026-05-19), incremental WIT-SVID work for the `svid.v1` API client (#7132, #7134) in 1.15.3 (2026-08-21), and experimental WIT-SVID support in 1.16.0 (2026-11-05) gated behind the `enable_wit_svids` server and agent options with a `spire-agent api fetch wit` CLI command (#7243, #7244, #7273, #7282, #7302, #7306, #7354). | [SPIRE issue #6326](https://github.com/spiffe/spire/issues/6326) [31] · [SPIRE changelog](https://raw.githubusercontent.com/spiffe/spire/main/CHANGELOG.md) [32] |\n| **Cofide** | WIT issuer | Experimental · as of 2025-11-13 | draft-ietf-wimse-http-signature-08 section 4.1 records Cofide's implementation at `cofide/wimse-s2s-httpsig-poc` with maturity proof-of-concept for WIT plus HTTP Message Signatures, Apache 2.0, last updated 13-Nov-2025. The repository is a proof-of-concept demo of WIMSE workload-to-workload authentication with HTTP signatures, based on draft-ietf-wimse-s2s-protocol. It extends minispire, a lightweight SPIFFE implementation, to issue WIMSE Workload Identity Token SVIDs to a demo client and server, as an approximation of the in-development WIT-SVID, without a whole SPIRE setup. Cofide describes the system as a demonstrator and says minispire issues a developmental version of the proposed WIT-SVID credential. | [HTTP signature draft](https://www.ietf.org/archive/id/draft-ietf-wimse-http-signature-08.txt) [5] · [cofide/wimse-s2s-httpsig-poc](https://github.com/cofide/wimse-s2s-httpsig-poc) [33] · [Cofide middlebox note](https://www.cofide.io/resources/solving-the-middlebox-dilemma-with-wimse-and-http-message-signatures) [34] |\n| **Solo.io** | WIT issuer / waypoint | Experimental · as of 2026-10-30 | Solo Enterprise for agentgateway documents WIMSE Workload Identity Tokens for service-to-service traffic when agentgateway is deployed as a waypoint proxy in an ambient mesh. WIMSE/WIT support is in the alpha state: alpha features are likely to change, are not fully tested, and are not supported for production. Deployed as a waypoint, agentgateway can forward or exchange the WIT. Emitting a proof works with both `SourceDelegation` and `SelfIdentification`. The docs page identifies the current line as `2026.10.2` and records `dateModified` 2026-10-30. | [agentgateway WIMSE docs](https://docs.solo.io/agentgateway/kubernetes/latest/documentation/security/wimse/) [35] |\n| **Defakto Security** | Workload credential issuer | Partial · as of 2026-10-30 | draft-ietf-wimse-workload-creds-03 (dated 30 October 2026) records Defakto Security (prior SPIRL) with Workload Identity Certificate maturity production and Workload Identity Token maturity alpha. The coverage line lists the Workload Identity Certificate and WIT. | [WIMSE Workload Credentials (-03)](https://www.ietf.org/archive/id/draft-ietf-wimse-workload-creds-03.txt) [6] |\n| **Teleport** | Workload credential issuer | Development · as of 2026-10-30 | draft-ietf-wimse-workload-creds-03 (dated 30 October 2026) records Teleport Machine & Workload Identity with Workload Identity Certificate maturity production and Workload Identity Token maturity research. The coverage line for that entry lists the Workload Identity Certificate. | [WIMSE Workload Credentials (-03)](https://www.ietf.org/archive/id/draft-ietf-wimse-workload-creds-03.txt) [6] |\n| **wimsey** | Reference WIT / WIC issuer | Development · as of 2026-09-08 | wimsey is a vendor-neutral reference implementation of the IETF WIMSE workload-identity specs, in Rust. The repository says it is pre-alpha, that the specs are Internet-Drafts with no RFC yet, and that it is not production-ready. The `wimsey-wit` crate covers the Workload Identity Token (WIT / WIC). draft-ietf-wimse-http-signature-08 section 4.2 records the same repository at alpha maturity for WIT plus HTTP Message Signatures, including signed responses, Apache 2.0, last updated 08-Sep-2026. GitHub records repository creation on 2026-06-29 under the `Apache-2.0` license. | [kanywst/wimsey](https://github.com/kanywst/wimsey) [36] · [HTTP signature draft](https://www.ietf.org/archive/id/draft-ietf-wimse-http-signature-08.txt) [5] |\n\n### Verifiers, gateways & relying services\n\n| Actor | Role | Status | Boundary & format | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Solo.io** | Gateway verifier | Experimental · as of 2026-10-30 | On the receive side, Solo Enterprise for agentgateway validates proofs by setting `traffic.entWptEnforcement` in an EnterpriseAgentgatewayPolicy. When `VALIDATE_SPIFFE_TRUST_DOMAIN_NAMES=STRICT` is set and a request carries a WIT, agentgateway verifies the `x5c` certificate chain embedded in the WIT in addition to the mTLS certificate chain. WIMSE/WIT support is in the alpha state and is not supported for production. The same docs identify the current line as `2026.10.2`. | [agentgateway WIMSE docs](https://docs.solo.io/agentgateway/kubernetes/latest/documentation/security/wimse/) [35] |\n| **wimsey** | Reference verifier | Development · as of 2026-09-08 | draft-ietf-wimse-http-signature-08 section 4.2 records wimsey at alpha maturity with coverage of WIT, HTTP Message Signatures, and signed responses. The repository is pre-alpha and not production-ready. Its `conformance/` notes record inputs, the exact bytes they must produce, and, for every negative case, a language-neutral code naming why the input must be rejected. | [kanywst/wimsey](https://github.com/kanywst/wimsey) [36] · [HTTP signature draft](https://www.ietf.org/archive/id/draft-ietf-wimse-http-signature-08.txt) [5] |\n\n### Ecosystem censuses\n\n- **Datatracker documents of type RFC** (*as of 2026-10-30*): 0 published RFCs as of 2026-10-30 in the IETF Datatracker for the WIMSE working group. [10]\n- **wimse about page and history** (*as of 2026-07-31*): The wimse working group is Active under charter-ietf-wimse-01, which was approved on 2024-03-07 after the group was created in state BOF. The charter names a liaison with the Cloud Native Computing Foundation (particularly with regard to the SPIFFE/SPIRE project) and a 2026-07-31 milestone to submit the informational WIMSE architecture document to the IESG; that July 2026 milestone date has passed with 0 published WIMSE RFCs. [1][15]\n- **draft-ietf-wimse-http-signature Datatracker** (*as of 2026-10-28*): draft-ietf-wimse-http-signature has intended RFC status Proposed Standard. On 2026-10-28 the IETF WG state changed to Submitted to IESG for Publication, and the IESG state changed to Publication Requested from I-D Exists. [12]\n- **draft-ietf-wimse-workload-creds-03** (*as of 2026-10-30*): The implementation status in draft-ietf-wimse-workload-creds-03, dated 30 October 2026, records SPIFFE (Standard) Workload Identity Certificate as fully compatible with the X509-SVID and widely used, and Workload Identity Token as beta. Defakto Security (prior SPIRL) records the certificate at production and the token at alpha. Teleport records the certificate at production and the token at research. [6]\n- **IETF Datatracker, references to draft-ietf-wimse-wpt (fetched 2026-11-06)**: The referenced-by index for draft-ietf-wimse-wpt lists normative referencers draft-ietf-wimse-aims (AI Identity Management System), draft-mcguinness-oauth-actor-profile (OAuth Actor Profile for Delegation), and draft-reddy-wimse-workload-attestation. [37]\n\n---\n\n## See also\n\n- **[Workload Authorization Grant (WAG)](/protocols/workload-authz-grant/)** *(Complements)* — WIMSE credential formats include the Workload Identity Token (WIT), which binds a cryptographic key to a workload identifier for authentication. Workload Authorization Grant (`draft-carleton-workload-authz-grant-02`, 2 November 2026) defines short-lived `oauth-wag+jwt` authorization grants as an RFC 7523 profile bound to WIMSE/SPIFFE workload identifiers rather than a WIMSE WIT, while WIMSE provides the cross-domain workload identity layer.\n- **[Agent Identity Protocol (AIP)](/protocols/aip/)** *(Peer alternative)* — WIMSE puts a wit+jwt in the Workload-Identity-Token header, while this draft identifies the agent with did:aip and an AIP-GRANT ceremony.\n- **[Security Principal and Verifier Binding for Agent Communication Protocols](/protocols/agent-principal-binding/)** *(Complements)* — Applied to WIMSE, the matrix keeps the WIT, the Workload Proof Token, and any user delegation as separately verified claims.\n- **[LWS 1.0 Authentication Suite: Self-signed Identity using Controlled Identifiers](/protocols/lws10-authn-ssi-cid/)** *(Peer alternative)* — A WIMSE WIT is a wit+jwt in the Workload-Identity-Token header from a workload issuer, while this JWT is self-signed and verified from the subject's own identifier document.\n- **[Workload Identity Metadata](/protocols/wimse-workload-identity-metadata/)** *(Has component)* — The optional JWT claim or X.509 extension sits on a WIMSE workload credential and points at the metadata endpoint for that workload.\n- **[Agent Authorization Envelope](/protocols/agent-authorization-envelope/)** *(Complements)* — The wit+jwt Workload Identity Token in the Workload-Identity-Token header authenticates the workload, and the envelope is the separate JWS-secured Verifiable Credential the agent presents.\n- **[Web Bot Auth](/protocols/webbotauth/)** *(Complements)* — IETF `webbotauth` charter designates the WIMSE working group as a formal liaison counterpart for workload and agent authentication.\n- **Category:** [Identify protocols](/category/identify/)\n\n---\n\n## References\n\n1. IETF, *Workload Identity in Multi System Environments (wimse) working group and charter* (charter-ietf-wimse-01; checked 2026-10-30) — <https://datatracker.ietf.org/wg/wimse/about/>\n2. J. Salowey (Palo Alto Networks), Y. Rosomakho (Zscaler), and H. Tschofenig (UniBw M.), *Workload Identity in a Multi System Environment (WIMSE) Architecture (draft-ietf-wimse-arch-08)* (6 July 2026) — <https://www.ietf.org/archive/id/draft-ietf-wimse-arch-08.txt>\n3. P. Kasselman, J. Lombardo, Y. Rosomakho, B. Campbell, N. Steele, and A. Parecki, *AI Identity Management System (draft-ietf-wimse-aims-01)* (2 November 2026; expires 6 May 2027) — <https://www.ietf.org/archive/id/draft-ietf-wimse-aims-01.txt>\n4. IETF, *Web Bot Auth (webbotauth) working group* (checked 2026-10-30) — <https://datatracker.ietf.org/wg/webbotauth/about/>\n5. J. Salowey (Palo Alto Networks) and Y. Sheffer (Independent), *WIMSE Workload-to-Workload Authentication with HTTP Signatures (draft-ietf-wimse-http-signature-08)* (20 October 2026) — <https://www.ietf.org/archive/id/draft-ietf-wimse-http-signature-08.txt>\n6. B. Campbell, J. Salowey, A. Schwenkschuster, Y. Sheffer, and Y. Rosomakho, *WIMSE Workload Credentials (draft-ietf-wimse-workload-creds-03)* (30 October 2026; expires 3 May 2027) — <https://www.ietf.org/archive/id/draft-ietf-wimse-workload-creds-03.txt>\n7. Y. Rosomakho (Zscaler) and J. Salowey (Palo Alto Networks), *Workload Identifier (draft-ietf-wimse-identifier-04)* (23 October 2026) — <https://www.ietf.org/archive/id/draft-ietf-wimse-identifier-04.txt>\n8. B. Campbell (Ping Identity) and A. Schwenkschuster (Defakto Security), *WIMSE Workload Proof Token (draft-ietf-wimse-wpt-02)* (27 August 2026) — <https://www.ietf.org/archive/id/draft-ietf-wimse-wpt-02.txt>\n9. J. Salowey (Palo Alto Networks) and Y. Rosomakho (Zscaler), *Workload Authentication Using Mutual TLS (draft-ietf-wimse-mutual-tls-03)* (24 October 2026) — <https://www.ietf.org/archive/id/draft-ietf-wimse-mutual-tls-03.txt>\n10. IETF Datatracker, *wimse documents of type RFC* (checked 2026-10-30; 0 published RFCs) — <https://datatracker.ietf.org/api/v1/doc/document/?group__acronym=wimse&type=rfc&format=json>\n11. IETF, *draft-ietf-wimse-http-signature document history* (revision 08 events through 2026-10-28) — <https://datatracker.ietf.org/doc/draft-ietf-wimse-http-signature/history/>\n12. IETF, *draft-ietf-wimse-http-signature — WIMSE Workload-to-Workload Authentication with HTTP Signatures (IETF Datatracker)* (summary last updated 2026-10-09 (latest revision shown 2026-09-20)) — <https://datatracker.ietf.org/doc/draft-ietf-wimse-http-signature/>\n13. IETF, *Workload Identity in Multi System Environments (wimse) documents* (checked 2026-10-30) — <https://datatracker.ietf.org/wg/wimse/documents/>\n14. IETF Datatracker, *IETF Datatracker document record for draft-ietf-wimse-aims* (updated 2026-11-02; expires 2027-05-06) — <https://datatracker.ietf.org/api/v1/doc/document/draft-ietf-wimse-aims/>\n15. IETF, *Workload Identity in Multi System Environments (wimse) group history* (group created 2023-09-28; charter approved 2024-03-07; checked 2026-10-30) — <https://datatracker.ietf.org/wg/wimse/history/>\n16. IETF, *draft-ietf-wimse-arch — Workload Identity in a Multi System Environment (WIMSE) Architecture (IETF Datatracker)* (last updated 2026-07-06) — <https://datatracker.ietf.org/doc/draft-ietf-wimse-arch/>\n17. IETF, *draft-ietf-wimse-workload-identity-practices — Workload Identity Practices (IETF Datatracker)* (last updated 2026-09-22) — <https://datatracker.ietf.org/doc/draft-ietf-wimse-workload-identity-practices/>\n18. IETF, *draft-ietf-wimse-workload-identity-practices — Workload Identity Practices document history (IETF Datatracker)* (submitted to the IESG 2026-06-30) — <https://datatracker.ietf.org/doc/draft-ietf-wimse-workload-identity-practices/history/>\n19. IETF, *draft-ietf-wimse-workload-creds — WIMSE Workload Credentials (IETF Datatracker)* (last updated 2026-07-02) — <https://datatracker.ietf.org/doc/draft-ietf-wimse-workload-creds/>\n20. IETF, *draft-ietf-wimse-wpt — WIMSE Workload Proof Token (IETF Datatracker)* (last updated 2026-08-27) — <https://datatracker.ietf.org/doc/draft-ietf-wimse-wpt/>\n21. IETF, *draft-ietf-wimse-mutual-tls — Workload Authentication Using Mutual TLS (IETF Datatracker)* (last updated 2026-10-24) — <https://datatracker.ietf.org/doc/draft-ietf-wimse-mutual-tls/>\n22. IETF, *draft-ietf-wimse-identifier — Workload Identifier (IETF Datatracker)* (last updated 2026-10-23) — <https://datatracker.ietf.org/doc/draft-ietf-wimse-identifier/>\n23. IETF, *draft-ietf-wimse-aims — AI Identity Management System (IETF Datatracker)* (last updated 2026-11-02; expires 2027-05-06) — <https://datatracker.ietf.org/doc/draft-ietf-wimse-aims/>\n24. A. Schwenkschuster and Y. Rosomakho, *Workload Identity Practices (draft-ietf-wimse-workload-identity-practices-08)* (30 October 2026; expires 3 May 2027) — <https://www.ietf.org/archive/id/draft-ietf-wimse-workload-identity-practices-08.txt>\n25. P. Carleton, N. Steele, A. Parecki, A. Schwenkschuster, and B. Campbell, *Workload Authorization Grant (draft-carleton-workload-authz-grant-02)* (2 November 2026; expires 6 May 2027) — <https://www.ietf.org/archive/id/draft-carleton-workload-authz-grant-02.txt>\n26. A. Schwenkschuster, P. Kasselmann, S. Rose, S. Thorgersen, and N. Cam-Winget, *OAuth SPIFFE Client Authentication (draft-ietf-oauth-spiffe-client-auth-03)* (2 November 2026; expires 6 May 2027) — <https://www.ietf.org/archive/id/draft-ietf-oauth-spiffe-client-auth-03.txt>\n27. IANA, *Hypertext Transfer Protocol (HTTP) Authentication Scheme Registry (CSV)* (checked 2026-10-30) — <https://www.iana.org/assignments/http-authschemes/authschemes.csv>\n28. S. Gilda, *An Audit Record Format for AI Agent Authorization Decisions (draft-gilda-audit-agent-audit-record-03)* (29 October 2026) — <https://www.ietf.org/archive/id/draft-gilda-audit-agent-audit-record-03.txt>\n29. Pieter Kasselman, Jeff Lombardo, Yaroslav Rosomakho, Brian Campbell, Nick Steele, and Aaron Parecki, *draft-klrc-aiagent-auth — AI Agent Authentication and Authorization (IETF Datatracker)* (replaced Internet-Draft; last updated 2026-09-09) — <https://datatracker.ietf.org/doc/draft-klrc-aiagent-auth/>\n30. P. Kasselman, J. Lombardo, Y. Rosomakho, and B. Campbell, *draft-klrc-aiagent-auth document history* (adopted by a WG 2026-09-09) — <https://datatracker.ietf.org/doc/draft-klrc-aiagent-auth/history/>\n31. Arndt Schwenkschuster (spiffe/spire), *WIT-SVID support in SPIRE, issue #6326* (created 2025-09-18; state OPEN; checked 2026-10-30) — <https://github.com/spiffe/spire/issues/6326>\n32. SPIRE (spiffe/spire), *CHANGELOG* (main; includes 1.16.0 dated 2026-11-05; checked 2026-11-09) — <https://raw.githubusercontent.com/spiffe/spire/main/CHANGELOG.md>\n33. cofide, *wimse-s2s-httpsig-poc* (created 2024-12-13; Apache-2.0) — <https://github.com/cofide/wimse-s2s-httpsig-poc>\n34. The Cofide Authors, *Solving the middlebox dilemma with WIMSE and HTTP Message Signatures* (published 20 October 2025) — <https://www.cofide.io/resources/solving-the-middlebox-dilemma-with-wimse-and-http-message-signatures>\n35. Solo.io, *Workload identity tokens (WIMSE), Solo Enterprise for agentgateway* (modified 2026-10-30) — <https://docs.solo.io/agentgateway/kubernetes/latest/documentation/security/wimse/>\n36. kanywst, *wimsey* (checked 2026-10-30) — <https://github.com/kanywst/wimsey>\n37. IETF, *draft-ietf-wimse-wpt — References (IETF Datatracker)* (fetched 2026-11-06) — <https://datatracker.ietf.org/doc/draft-ietf-wimse-wpt/referencedby>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "AAuth",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "aliases": [],
   "analog": "OAuth Device Authorization Grant",
   "collisions": [
    "AAuth (Hardt), draft-hardt-oauth-aauth-protocol"
   ],
   "discovery": {
    "mechanism": "OAuth Authorization Server Metadata member agent_authorization_endpoint; resource server publishes OAuth Protected Resource Metadata at the well-known location derived from its resource identifier",
    "path": null
   },
   "dispute": {
    "claims": [
     "IETF Datatracker document state: Expired Internet-Draft"
    ],
    "summary": "The draft is expired per the IETF Datatracker's own document-state field, and no independent implementation was found; it is retained here as a documented proposal rather than an active spec."
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.ietf.org/archive/id/draft-rosenberg-oauth-aauth-02.txt",
     "claim": "J. Rosenberg (jdrosen.net) and P. White (Bitwave), *AAuth - Agentic Authorization OAuth 2.1 Extension (draft-rosenberg-oauth-aauth-02)*, 1 November 2026",
     "date": null,
     "quote": "This specification shares the name aauth with [I-D.hardt-oauth-aauth-protocol], but differs significantly in its approach. / AAuth - Agentic Authorization OAuth 2.1 Extension ... draft-rosenberg-oauth-aauth-02 ... proposes a simple OAuth2.1 extension that enables AI Agents to obtain access tokens at time of resource access using Human-In-the-Loop or other approval flows. We call this the Agent Authorization Grant (aauth) grant flow. / rejects the request with a 403 (Forbidden) response carrying an insufficient_scope error code in the WWW-Authenticate header ... scope_challenge. Its value is a Scope Challenge ... HTTP/1.1 403 Forbidden ... typ: MUST be scope-challenge+jwt / Intended status: Standards Track ... 1 November 2026 ... draft-rosenberg-oauth-aauth-02 ... This Internet-Draft will expire on 5 May 2027. / Jonathan Rosenberg ... jdrosen.net ... Pat White ... Bitwave / Intended status: Standards Track ... draft-rosenberg-oauth-aauth-02 ... Discussion of this document takes place on the Web Authorization Protocol Working Group mailing list ... work in progress. / Intended status: Standards Track / Expires: 5 May 2027 ... 1 November 2026 ... draft-rosenberg-oauth-aauth-02 / HTTP/1.1 403 Forbidden ... WWW-Authenticate: Bearer error=\"insufficient_scope\" ... scope_challenge ... Figure 1: Resource server response carrying a Scope Challenge ... grant_type=urn:ietf:params:oauth:grant-type:agent_authorization / AAuth - Agentic Authorization OAuth 2.1 Extension ... draft-rosenberg-oauth-aauth-02 / agent_authorization_endpoint: URL of the AS's agent authorization endpoint ... publishes OAuth Protected Resource Metadata ... at the well-known location derived from its resource identifier ... MUST include jwks_uri ... SHOULD include scope_descriptions_uri / Copyright (c) 2026 IETF Trust and the persons identified as the document authors. / The key assumption behind OAuth is that software applications know in advance what kinds of access they require. ... It is not known what APIs an AI Agent might need to access ahead of time. ... AI Agents can make mistakes. As a result, giving them broadly scoped tokens could potentially lead to disastrous results. / This scope serves two purposes - (1) it only allows the AI Agent to do a minimum set of operations which are not risky, (2) it informs the resource server that it can execute the AAuth grant flow defined here. ... The resource server rejects the request, and passes a signed object to the AI agent. This signed object contains the reason - in natural language ... The signed object also contains the list of required scopes. ... The AS verifies the signature / This specification does not depend on an authenticated identifier that is unique to AI Agents. It restricts what the AI Agent can do not by its identity, but rather, by the baseline minimum scope it obtains. ... a malicious AI Agent can still avoid this specification entirely and just request access tokens through existing OAuth grant flows which give it elevated privilege.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://www.ietf.org/archive/id/draft-rosenberg-oauth-aauth-00.txt",
     "claim": "J. Rosenberg (Five9 / jdrosen.net) and P. White (Bitwave), *AAuth - Agentic Authorization OAuth 2.1 Extension (draft-rosenberg-oauth-aauth-00)*, historical revision (checked 2026-10-31)",
     "date": null,
     "quote": "Public Switched Telephone Network (PSTN) or texting",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://www.rfc-editor.org/rfc/rfc8628.html",
     "claim": "W. Denniss, J. Bradley, M. Jones, and H. Tschofenig, *RFC 8628: OAuth 2.0 Device Authorization Grant*, August 2019",
     "date": null,
     "quote": "The OAuth 2.0 device authorization grant is designed for Internet-",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://www.rfc-editor.org/rfc/rfc6749.html",
     "claim": "D. Hardt, Ed., *RFC 6749: The OAuth 2.0 Authorization Framework*, October 2012",
     "date": null,
     "quote": "The OAuth 2.0 authorization framework enables a third-party",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://datatracker.ietf.org/doc/draft-hardt-oauth-aauth-protocol/",
     "claim": "Dick Hardt, *draft-hardt-oauth-aauth-protocol — AAuth Protocol (IETF Datatracker)*, checked 2026-10-31",
     "date": null,
     "quote": "is at https://raw.githubusercontent.com/dickhardt/AAuth/refs/heads/main/ draft-hardt-oauth-aauth-protocol.md (https://raw.githubusercontent.com/dickhardt/AAuth/refs/heads/main/",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://datatracker.ietf.org/doc/draft-mishra-oauth-agent-grants/",
     "claim": "S. Kumar (Orchestrum Technologies LLP), *draft-mishra-oauth-agent-grants — OAuth Profile for Delegated AI Agent Authorization (IETF Datatracker)*, checked 2026-10-31",
     "date": null,
     "quote": "is at https://mailarchive.ietf.org/arch/browse/oauth/. Kumar Expires 3 March 2027 [Page 3] Internet-Draft DAAP August 2026",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://www.ietf.org/archive/id/draft-aap-oauth-profile-01.txt",
     "claim": "A. Cruz (Independent), *Agent Authorization Profile (AAP) for OAuth 2.0 (draft-aap-oauth-profile-01)*, checked 2026-10-31",
     "date": null,
     "quote": "Expires 11 August 2026 [Page 56] Internet-Draft AAP for OAuth 2.0 February 2026 16.7.",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-oauth-identity-assertion-authz-grant/",
     "claim": "Aaron Parecki, Karl McGuinness, and Brian Campbell (IETF Web Authorization Protocol Working Group), *draft-ietf-oauth-identity-assertion-authz-grant — Identity Assertion JWT Authorization Grant (IETF Datatracker)*, checked 2026-11-08",
     "date": null,
     "quote": "Active Internet-Draft (oauth WG) … Intended RFC status | | (None) … WG state | | WG Document … IESG state | | I-D Exists",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://datatracker.ietf.org/doc/html/rfc9728",
     "claim": "IETF Datatracker, *RFC 9728: OAuth 2.0 Protected Resource Metadata*, RFC - Proposed Standard (April 2025)",
     "date": null,
     "quote": "RFC - Proposed Standard April 2025",
     "ref": 9
    }
   ],
   "form": "endpoint",
   "governance": "Individual Internet-Draft `draft-rosenberg-oauth-aauth-02` (intended status: Standards Track; discussed on the Web Authorization Protocol Working Group mailing list, not WG-adopted).",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against datatracker.ietf.org/doc/html/draft-rosenberg-oauth-aauth; found expired"
    },
    {
     "date": "2026-10-16",
     "note": "draft-rosenberg-oauth-aauth-01 (2026-04-22) expired on 2026-04-23; the active AAuth lineage is draft-hardt-oauth-aauth-protocol-11"
    },
    {
     "date": "2026-10-16",
     "note": "Expired Internet-Draft (expired 2026-04-23)"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "aauth",
   "implementation": "none-found",
   "last_verified": "2026-11-12",
   "name": "Agent Authorization Grant",
   "native_status": "Internet-Draft draft-rosenberg-oauth-aauth-02 (intended status: Standards Track; expires 5 May 2027)",
   "origin": {
    "date": "2025-10",
    "org": "IETF individual submission"
   },
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "draft",
   "probe": {
    "method": "POST",
    "on_absent": "Authorization server does not implement this grant; this is expected, since the draft is expired and no implementation was found",
    "parse": "A 200 response containing an access_token issued via the collected-PII flow described in the draft",
    "path": "{authorization_server}/token with grant_type indicating the Agent Authorization Grant (exact grant_type string not fixed in the draft text reviewed)"
   },
   "question": "How can a conversational AI agent, reached over a channel without browser redirect (phone, SMS), obtain a properly scoped OAuth access token without impersonating the user?",
   "scope": "general",
   "spec_url": "https://www.ietf.org/archive/id/draft-rosenberg-oauth-aauth-02.txt",
   "step": "permit",
   "summary_md": "**Agent Authorization Grant** (`aauth`), `draft-rosenberg-oauth-aauth-02`, is an OAuth 2.1 extension that lets an AI Agent obtain an access token at the time of resource access, using a human-in-the-loop or other approval flow. When the minimum scope is insufficient, the resource server rejects the operation with `HTTP/1.1 403 Forbidden` and a `WWW-Authenticate` header that carries `insufficient_scope` and a `scope_challenge` JWT whose `typ` is `scope-challenge+jwt`. `draft-rosenberg-oauth-aauth-02` is dated 1 November 2026. Its intended status is Standards Track, and this Internet-Draft will expire on 5 May 2027. Revision -02 (1 November 2026) replaced -00's earlier PSTN and texting user-approval framing with the resource-server-signed scope_challenge JWT and authorization-server-selected approval channels.",
   "track": "ietf",
   "version": {
    "label": "draft-rosenberg-oauth-aauth-02",
    "date": "2026-11-01"
   },
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-rosenberg-oauth-aauth"
    },
    {
     "type": "ietf",
     "doc": "draft-hardt-oauth-aauth-protocol"
    }
   ],
   "use_cases": [
    "delegate-user-authority",
    "prove-agent-identity"
   ],
   "audience": [
    "agent-builder",
    "standards-body"
   ],
   "pairs_with": [
    "aauth-hardt",
    "daap",
    "aap",
    "identity-assertion-authz-grant",
    "oauth-metadata-for-agents"
   ],
   "prerequisites": [],
   "ietf_tracker": {
    "doc": "draft-rosenberg-oauth-aauth",
    "rev": "02",
    "state": "active",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-11-01",
    "expires_utc": "2027-05-05",
    "as_of": "2026-11-07",
    "source": "https://datatracker.ietf.org/doc/draft-rosenberg-oauth-aauth/",
    "source_label": "per IETF Datatracker"
   },
   "hatnote_md": "This page is about the Agent Authorization Grant (`aauth`), the OAuth 2.1 extension by Jonathan Rosenberg and Pat White (`draft-rosenberg-oauth-aauth-02`). Not to be confused with [AAuth (Hardt)](/protocols/aauth-hardt/) (`draft-hardt-oauth-aauth-protocol`), the separate agent authorization protocol by Dick Hardt.",
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "This page is about the Agent Authorization Grant (`aauth`), the OAuth 2.1 extension by Jonathan Rosenberg and Pat White (`draft-rosenberg-oauth-aauth-02`). Not to be confused with [AAuth (Hardt)](/protocols/aauth-hardt/) (`draft-hardt-oauth-aauth-protocol`), the separate agent authorization protocol by Dick Hardt. [1]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Agent Authorization Grant** (`aauth`), `draft-rosenberg-oauth-aauth-02`, is an OAuth 2.1 extension that lets an AI Agent obtain an access token at the time of resource access, using a human-in-the-loop or other approval flow. [1] When the minimum scope is insufficient, the resource server rejects the operation with `HTTP/1.1 403 Forbidden` and a `WWW-Authenticate` header that carries `insufficient_scope` and a `scope_challenge` JWT whose `typ` is `scope-challenge+jwt`. [1] `draft-rosenberg-oauth-aauth-02` is dated 1 November 2026. Its intended status is Standards Track, and this Internet-Draft will expire on 5 May 2027. Revision -02 (1 November 2026) replaced -00's earlier PSTN and texting user-approval framing with the resource-server-signed scope_challenge JWT and authorization-server-selected approval channels. [1][2]",
   "v05_identity_sentence_md": "**Agent Authorization Grant** (`aauth`), `draft-rosenberg-oauth-aauth-02`, is an OAuth 2.1 extension that lets an AI Agent obtain an access token at the time of resource access, using a human-in-the-loop or other approval flow. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Permit](/category/permit/) (`permit`)"
    },
    {
     "label": "Form",
     "value_md": "Endpoint (`endpoint`)"
    },
    {
     "label": "Originated by",
     "value_md": "Jonathan Rosenberg (jdrosen.net) and Pat White (Bitwave) [1]"
    },
    {
     "label": "Governed by",
     "value_md": "Individual Internet-Draft `draft-rosenberg-oauth-aauth-02` (intended status: Standards Track; discussed on the Web Authorization Protocol Working Group mailing list, not WG-adopted). [1]"
    },
    {
     "label": "Track",
     "value_md": "IETF Internet-Draft (Standards Track) [1]"
    },
    {
     "label": "Status",
     "value_md": "Active Internet-Draft `draft-rosenberg-oauth-aauth-02` (intended status: Standards Track), dated 1 November 2026, expires 5 May 2027 [1]"
    },
    {
     "label": "Version",
     "value_md": "`draft-rosenberg-oauth-aauth-02` (1 November 2026; expires 5 May 2027) [1]"
    },
    {
     "label": "IETF tracker",
     "value_md": "`draft-rosenberg-oauth-aauth-02` · Active Internet-Draft (individual; intended status Standards Track; published 1 November 2026; expires 5 May 2027) [1]"
    },
    {
     "label": "Wire format",
     "value_md": "Resource server `HTTP/1.1 403 Forbidden` with `WWW-Authenticate` Bearer `scope_challenge` (Figure 1). The agent authorization request sets `grant_type` to `urn:ietf:params:oauth:grant-type:agent_authorization`. [1]"
    },
    {
     "label": "Specification",
     "value_md": "https://www.ietf.org/archive/id/draft-rosenberg-oauth-aauth-02.txt [1]"
    },
    {
     "label": "Found at",
     "value_md": "`agent_authorization_endpoint` in OAuth Authorization Server Metadata. The resource server publishes OAuth Protected Resource Metadata at the well-known location derived from its resource identifier. That metadata MUST include `jwks_uri` and SHOULD include `scope_descriptions_uri`. [1]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust Legal Provisions (BCP 78) [1]"
    }
   ],
   "v05_problem_md": "OAuth assumes a software application knows in advance what access it requires and can request those scopes up front. An AI Agent does not know which APIs it might need ahead of time, and a broadly scoped token can lead to disastrous results when the agent makes a mistake. [1] The grant limits the agent's first access token to a minimum set of operations that are not risky, and it tells the resource server this flow can run. When that scope is insufficient, the resource server passes a signed object that contains the required scopes and a natural-language reason, and the authorization server verifies the signature. [1] This specification does not depend on an authenticated identifier that is unique to AI Agents. It restricts the agent by the baseline minimum scope the agent obtains. A malicious agent can still skip this specification and request elevated tokens through existing OAuth grant flows. [1]",
   "v05_mechanism_delta_md": "The grant limits the agent's first access token to a minimum set of operations that are not risky, and it tells the resource server this flow can run. When that scope is insufficient, the resource server passes a signed object that contains the required scopes and a natural-language reason, and the authorization server verifies the signature. [1]",
   "v05_scope_boundary_md": "This specification does not depend on an authenticated identifier that is unique to AI Agents. It restricts the agent by the baseline minimum scope the agent obtains. A malicious agent can still skip this specification and request elevated tokens through existing OAuth grant flows. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "OAuth 2.0 Device Authorization Grant (RFC 8628)",
      "spec_or_rfc": "RFC 8628",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "The Agent Authorization Grant is an OAuth 2.1 extension-grant flow at agent_authorization_endpoint that reuses RFC 8414 and RFC 9728 metadata, modeled on the OAuth 2.0 Device Authorization Grant (RFC 8628) and its out-of-band user-approval step. [1][3]"
     },
     {
      "name": "OAuth 2.0 Authorization Framework (RFC 6749)",
      "spec_or_rfc": "RFC 6749",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "The grant adds an agent_authorization_endpoint extension and a signed scope_challenge on 403 to OAuth 2.1 while reusing RFC 8414 and RFC 9728 metadata. [1][4]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "aauth-hardt",
      "target_name": "AAuth (Hardt)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "Rosenberg's grant is an OAuth 2.1 extension that adds a signed scope_challenge on 403 and an agent_authorization_endpoint, whereas the Hardt draft defines a standalone HTTP-signature and agent-identity authorization protocol alongside OAuth 2.0, defining its own token types, roles, and an agent-written justification document instead of a resource-signed scope_challenge. [1][5]"
     },
     {
      "target_id": "daap",
      "target_name": "OAuth Profile for Delegated AI Agent Authorization",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "DAAP is an OAuth delegated-grant profile discovered at /.well-known/oauth-authorization-server, while Rosenberg's grant is an OAuth 2.1 agent_authorization_endpoint extension that reuses RFC 8414 and RFC 9728 metadata. [1][6]"
     },
     {
      "target_id": "aap",
      "target_name": "Agent Authorization Profile",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "The Agent Authorization Profile places authorization in structured JWT claims, while Rosenberg's grant is an OAuth 2.1 agent_authorization_endpoint extension triggered by a 403 scope_challenge JWT. [1][7]"
     },
     {
      "target_id": "identity-assertion-authz-grant",
      "target_name": "Identity Assertion JWT Authorization Grant (ID-JAG)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ID-JAG exchanges an oauth-id-jag+jwt assertion minted by an identity provider, while Rosenberg's grant posts a resource-signed scope_challenge JWT to agent_authorization_endpoint. [1][8]"
     },
     {
      "target_id": "oauth-metadata-for-agents",
      "target_name": "OAuth Protected Resource and Authorization Server Metadata (as used for agent authorization)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "The grant is an OAuth 2.1 agent_authorization_endpoint extension that defines no new well-known URI of its own and instead publishes its endpoint and jwks_uri/scope_descriptions_uri in RFC 8414 and RFC 9728 metadata. [1][9]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Permit protocols](/category/permit/)** — Category index for `permit` standards."
    }
   ],
   "v05_compiled_md": "---\nid: aauth\ntitle: \"Agent Authorization Grant\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: permit\nform: endpoint\nwire_archetype: identity_auth_crypto\nspec_url: https://www.ietf.org/archive/id/draft-rosenberg-oauth-aauth-02.txt\nlast_checked: 2026-11-12\n---\n\n# Agent Authorization Grant\n\n**Category:** [Permit](/category/permit/) (`permit`) · **Form:** Endpoint (`endpoint`) · **Last checked:** 2026-11-12\n\n> *This page is about the Agent Authorization Grant (`aauth`), the OAuth 2.1 extension by Jonathan Rosenberg and Pat White (`draft-rosenberg-oauth-aauth-02`). Not to be confused with [AAuth (Hardt)](/protocols/aauth-hardt/) (`draft-hardt-oauth-aauth-protocol`), the separate agent authorization protocol by Dick Hardt. [1]*\n\n**Agent Authorization Grant** (`aauth`), `draft-rosenberg-oauth-aauth-02`, is an OAuth 2.1 extension that lets an AI Agent obtain an access token at the time of resource access, using a human-in-the-loop or other approval flow. [1] When the minimum scope is insufficient, the resource server rejects the operation with `HTTP/1.1 403 Forbidden` and a `WWW-Authenticate` header that carries `insufficient_scope` and a `scope_challenge` JWT whose `typ` is `scope-challenge+jwt`. [1] `draft-rosenberg-oauth-aauth-02` is dated 1 November 2026. Its intended status is Standards Track, and this Internet-Draft will expire on 5 May 2027. Revision -02 (1 November 2026) replaced -00's earlier PSTN and texting user-approval framing with the resource-server-signed scope_challenge JWT and authorization-server-selected approval channels. [1][2]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Permit](/category/permit/) (`permit`) |\n| **Form** | Endpoint (`endpoint`) |\n| **Originated by** | Jonathan Rosenberg (jdrosen.net) and Pat White (Bitwave) [1] |\n| **Governed by** | Individual Internet-Draft `draft-rosenberg-oauth-aauth-02` (intended status: Standards Track; discussed on the Web Authorization Protocol Working Group mailing list, not WG-adopted). [1] |\n| **Track** | IETF Internet-Draft (Standards Track) [1] |\n| **Status** | Active Internet-Draft `draft-rosenberg-oauth-aauth-02` (intended status: Standards Track), dated 1 November 2026, expires 5 May 2027 [1] |\n| **Version** | `draft-rosenberg-oauth-aauth-02` (1 November 2026; expires 5 May 2027) [1] |\n| **IETF tracker** | `draft-rosenberg-oauth-aauth-02` · Active Internet-Draft (individual; intended status Standards Track; published 1 November 2026; expires 5 May 2027) [1] |\n| **Wire format** | Resource server `HTTP/1.1 403 Forbidden` with `WWW-Authenticate` Bearer `scope_challenge` (Figure 1). The agent authorization request sets `grant_type` to `urn:ietf:params:oauth:grant-type:agent_authorization`. [1] |\n| **Specification** | https://www.ietf.org/archive/id/draft-rosenberg-oauth-aauth-02.txt [1] |\n| **Found at** | `agent_authorization_endpoint` in OAuth Authorization Server Metadata. The resource server publishes OAuth Protected Resource Metadata at the well-known location derived from its resource identifier. That metadata MUST include `jwks_uri` and SHOULD include `scope_descriptions_uri`. [1] |\n| **Licence** | IETF Trust Legal Provisions (BCP 78) [1] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nOAuth assumes a software application knows in advance what access it requires and can request those scopes up front. An AI Agent does not know which APIs it might need ahead of time, and a broadly scoped token can lead to disastrous results when the agent makes a mistake. [1] The grant limits the agent's first access token to a minimum set of operations that are not risky, and it tells the resource server this flow can run. When that scope is insufficient, the resource server passes a signed object that contains the required scopes and a natural-language reason, and the authorization server verifies the signature. [1] This specification does not depend on an authenticated identifier that is unique to AI Agents. It restricts the agent by the baseline minimum scope the agent obtains. A malicious agent can still skip this specification and request elevated tokens through existing OAuth grant flows. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **OAuth 2.0 Device Authorization Grant (RFC 8628)** | `RFC 8628` | Analogous to classic standard | The Agent Authorization Grant is an OAuth 2.1 extension-grant flow at agent_authorization_endpoint that reuses RFC 8414 and RFC 9728 metadata, modeled on the OAuth 2.0 Device Authorization Grant (RFC 8628) and its out-of-band user-approval step. [1][3] |\n| **OAuth 2.0 Authorization Framework (RFC 6749)** | `RFC 6749` | Profiles classic standard | The grant adds an agent_authorization_endpoint extension and a signed scope_challenge on 403 to OAuth 2.1 while reusing RFC 8414 and RFC 9728 metadata. [1][4] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[AAuth (Hardt)](/protocols/aauth-hardt/)** | Peer alternative | Rosenberg's grant is an OAuth 2.1 extension that adds a signed scope_challenge on 403 and an agent_authorization_endpoint, whereas the Hardt draft defines a standalone HTTP-signature and agent-identity authorization protocol alongside OAuth 2.0, defining its own token types, roles, and an agent-written justification document instead of a resource-signed scope_challenge. [1][5] |\n| **[OAuth Profile for Delegated AI Agent Authorization](/protocols/daap/)** | Peer alternative | DAAP is an OAuth delegated-grant profile discovered at /.well-known/oauth-authorization-server, while Rosenberg's grant is an OAuth 2.1 agent_authorization_endpoint extension that reuses RFC 8414 and RFC 9728 metadata. [1][6] |\n| **[Agent Authorization Profile](/protocols/aap/)** | Peer alternative | The Agent Authorization Profile places authorization in structured JWT claims, while Rosenberg's grant is an OAuth 2.1 agent_authorization_endpoint extension triggered by a 403 scope_challenge JWT. [1][7] |\n| **[Identity Assertion JWT Authorization Grant (ID-JAG)](/protocols/identity-assertion-authz-grant/)** | Peer alternative | ID-JAG exchanges an oauth-id-jag+jwt assertion minted by an identity provider, while Rosenberg's grant posts a resource-signed scope_challenge JWT to agent_authorization_endpoint. [1][8] |\n| **[OAuth Protected Resource and Authorization Server Metadata (as used for agent authorization)](/protocols/oauth-metadata-for-agents/)** | Complements | The grant is an OAuth 2.1 agent_authorization_endpoint extension that defines no new well-known URI of its own and instead publishes its endpoint and jwks_uri/scope_descriptions_uri in RFC 8414 and RFC 9728 metadata. [1][9] |\n\n---\n\n## See also\n\n- **Category:** [Permit protocols](/category/permit/)\n\n---\n\n## References\n\n1. J. Rosenberg (jdrosen.net) and P. White (Bitwave), *AAuth - Agentic Authorization OAuth 2.1 Extension (draft-rosenberg-oauth-aauth-02)* (1 November 2026) — <https://www.ietf.org/archive/id/draft-rosenberg-oauth-aauth-02.txt>\n2. J. Rosenberg (Five9 / jdrosen.net) and P. White (Bitwave), *AAuth - Agentic Authorization OAuth 2.1 Extension (draft-rosenberg-oauth-aauth-00)* (historical revision (checked 2026-10-31)) — <https://www.ietf.org/archive/id/draft-rosenberg-oauth-aauth-00.txt>\n3. W. Denniss, J. Bradley, M. Jones, and H. Tschofenig, *RFC 8628: OAuth 2.0 Device Authorization Grant* (August 2019) — <https://www.rfc-editor.org/rfc/rfc8628.html>\n4. D. Hardt, Ed., *RFC 6749: The OAuth 2.0 Authorization Framework* (October 2012) — <https://www.rfc-editor.org/rfc/rfc6749.html>\n5. Dick Hardt, *draft-hardt-oauth-aauth-protocol — AAuth Protocol (IETF Datatracker)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/draft-hardt-oauth-aauth-protocol/>\n6. S. Kumar (Orchestrum Technologies LLP), *draft-mishra-oauth-agent-grants — OAuth Profile for Delegated AI Agent Authorization (IETF Datatracker)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/draft-mishra-oauth-agent-grants/>\n7. A. Cruz (Independent), *Agent Authorization Profile (AAP) for OAuth 2.0 (draft-aap-oauth-profile-01)* (checked 2026-10-31) — <https://www.ietf.org/archive/id/draft-aap-oauth-profile-01.txt>\n8. Aaron Parecki, Karl McGuinness, and Brian Campbell (IETF Web Authorization Protocol Working Group), *draft-ietf-oauth-identity-assertion-authz-grant — Identity Assertion JWT Authorization Grant (IETF Datatracker)* (checked 2026-11-08) — <https://datatracker.ietf.org/doc/draft-ietf-oauth-identity-assertion-authz-grant/>\n9. IETF Datatracker, *RFC 9728: OAuth 2.0 Protected Resource Metadata* (RFC - Proposed Standard (April 2025)) — <https://datatracker.ietf.org/doc/html/rfc9728>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "DAAP",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "aliases": [
    "Delegated Agent Authorization Protocol",
    "draft-mishra-oauth-agent-grants"
   ],
   "analog": "OAuth delegated grant / consent screen",
   "collisions": [],
   "discovery": {
    "mechanism": "Standard OAuth 2.0 authorization/token endpoints; discovery via RFC 8414 Authorization Server Metadata (no new endpoints defined)",
    "path": "/.well-known/oauth-authorization-server"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.ietf.org/archive/id/draft-mishra-oauth-agent-grants-02.txt",
     "claim": "S. Kumar (Orchestrum Technologies LLP), *OAuth Profile for Delegated AI Agent Authorization (draft-mishra-oauth-agent-grants-02)*, checked 2026-10-31",
     "date": null,
     "quote": "Web Authorization Protocol S. Kumar Internet-Draft Orchestrum Technologies LLP Intended status: Informational 30 August 2026 Expires: 3 March 2027 OAuth Profile for Delegated AI Agent Authorization draft-mishra-oauth-agent-grants-02 / The term \"DAAP\" is a convenient name for this profile. It is not a new authorization framework, a new credential format, or a claim that an AI agent is a legal person. / Clients conforming to this profile MUST use PAR [RFC9126]. / The client exchanges the authorization code at the OAuth token endpoint using grant_type=authorization_code, the code, the same redirect_uri, and the PKCE code_verifier. The authorization server MUST: 1. authenticate or otherwise identify the client as required for its client type; 2. require exact redirect_uri equality with the authorization request; 3. validate the S256 verifier; 4. bind the code to the client, Principal, resource, and approved scopes; and 5. consume the code atomically with successful token issuance. An error while signing or storing tokens MUST leave the authorization code usable for a later retry or MUST produce an unambiguous terminal error. It MUST NOT create a partially committed grant. / The token MUST be sender-constrained: / a DPoP-bound token carries the public-key thumbprint in cnf.jkt as defined by [RFC9449]; or * an mTLS-bound token carries the certificate thumbprint in cnf as defined by [RFC8705]. An authorization server MUST NOT emit cnf solely because a public key was uploaded. It MUST first establish proof of possession. The resource server MUST verify the DPoP proof or mutual-TLS binding on every protected request. / Alternate email: [email redacted] URI: https://grantex.dev Author's Address Sanjeev Kumar Orchestrum Technologies LLP Email: [email redacted] / list at oauth@ietf.org. The archive is at https://mailarchive.ietf.org/arch/browse/oauth/. Kumar Expires 3 March 2027 Page / document. Kumar Expires 3 March 2027 [Page 1] Internet-Draft DAAP August 2026 Please review / OAuth deployments already support software acting for users. AI agent deployments add operational pressure because agent instances can be created dynamically, can call high-impact APIs, and can delegate work to other agent instances. / These characteristics do not justify replacing OAuth. They do justify a strict profile that removes unsafe choices and makes the acting client, user, resource, and sender key explicit. / Bearer tokens are especially hazardous for autonomous software because agents may pass data through tools, logs, prompts, and subprocesses. / Resource binding limits where a token can be used; sender constraint limits who can use it. This profile requires both / Delegation uses OAuth Token Exchange [RFC8693]. The delegating token is the subject_token. When an agent or service is acting as a distinct actor, the authorization server represents that chain using the standard act claim. / This profile requires both rotation and sender constraint for Agent Client Instances. On a successful refresh, the authorization server MUST invalidate the presented refresh token and return a new refresh token atomically. The new access token MUST NOT expand the original resource, scope, delegation, sender binding, or grant lifetime. / The profile uses existing OAuth and JOSE mechanisms wherever possible and defines no new JWT claims or OAuth endpoints / This document does not standardize agent orchestration, model selection, policy languages, payments, budget ledgers, audit storage APIs, event delivery, credential vaults, SCIM, SSO configuration, or vendor deployment endpoints / Grantex is an incomplete reference implementation and is not required for conformance",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://datatracker.ietf.org/doc/draft-mishra-oauth-agent-grants/",
     "claim": "S. Kumar (Orchestrum Technologies LLP), *draft-mishra-oauth-agent-grants — OAuth Profile for Delegated AI Agent Authorization (IETF Datatracker)*, checked 2026-10-31",
     "date": null,
     "quote": "This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. | | | | | --- | --- | --- | | Document | Type | Active Internet-Draft (individual) | | Author | | Sanjeev Kumar | | Last updated | 2026-08-30 | | RFC stream | | (None) | | Intended RFC status | | (None) | | Formats | | txt html xml htmlized bibtex bibxml | | Stream | Stream state | | (No stream defined) | | Consensus boilerplate | | Unknown | | RFC Editor Note | | (None) | | IESG | IESG state | | I-D Exists / Group mailing list at oauth@ietf.org. The archive is at https://mailarchive.ietf.org/arch/browse/oauth/.¶ Author contact:¶ * Primary: / Intended status: Informational / is at https://mailarchive.ietf.org/arch/browse/oauth/. Kumar Expires 3 March 2027 [Page 3] Internet-Draft DAAP August 2026 / 3 March 2027 OAuth Profile for Delegated AI Agent Authorization draft-mishra-oauth-agent-grants-02 Abstract AI agents / Copyright (c) 2026 IETF Trust and the persons identified as the document authors.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://datatracker.ietf.org/doc/html/draft-mishra-oauth-agent-grants-02",
     "claim": "S. Kumar (Orchestrum Technologies LLP), *OAuth Profile for Delegated AI Agent Authorization (draft-mishra-oauth-agent-grants-02 HTML)*, checked 2026-10-31",
     "date": null,
     "quote": "the OAuth Working Group mailing list at oauth@ietf.org. The archive is at https://mailarchive.ietf.org/arch/browse/oauth/.¶ oauth@ietf.org / Domains\", Work in Progress, Internet-Draft, draft-ietf-oauth-identity-chaining-17, 19 July 2026, < https://datatracker.ietf.org/doc/html/draft-ietf-oauth-identity-chaining-17 >. / with authenticated human consent;¶ resource-bound, sender-constrained JWT access tokens;¶ attenuated delegation using OAuth Token / no new JWT claims or OAuth endpoints. Operational facilities such as policy engines, audit",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://www.rfc-editor.org/rfc/rfc6749.html",
     "claim": "D. Hardt, Ed., *RFC 6749: The OAuth 2.0 Authorization Framework*, October 2012",
     "date": null,
     "quote": "The OAuth 2.0 authorization framework enables a third-party",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://www.rfc-editor.org/rfc/rfc8693.html",
     "claim": "M. Jones, A. Nadalin, B. Campbell, Ed., J. Bradley, and C. Mortimore, *RFC 8693: OAuth 2.0 Token Exchange*, January 2020",
     "date": null,
     "quote": "This specification defines a protocol for an HTTP- and JSON-based",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://datatracker.ietf.org/doc/html/rfc9728",
     "claim": "IETF Datatracker, *RFC 9728: OAuth 2.0 Protected Resource Metadata*, RFC - Proposed Standard (April 2025)",
     "date": null,
     "quote": "RFC - Proposed Standard April 2025",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://www.rfc-editor.org/rfc/rfc8414.html",
     "claim": "M. Jones (Microsoft), N. Sakimura (NRI), and J. Bradley (Yubico), *RFC 8414: OAuth 2.0 Authorization Server Metadata*, June 2018",
     "date": null,
     "quote": "OAuth 2.0 Authorization Server Metadata … /.well-known/oauth-authorization-server",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://www.ietf.org/archive/id/draft-rosenberg-oauth-aauth-02.txt",
     "claim": "J. Rosenberg (jdrosen.net) and P. White (Bitwave), *AAuth - Agentic Authorization OAuth 2.1 Extension (draft-rosenberg-oauth-aauth-02)*, 1 November 2026",
     "date": null,
     "quote": "Intended status: Standards Track ... 1 November 2026 ... draft-rosenberg-oauth-aauth-02 ... This Internet-Draft will expire on 5 May 2027.",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://www.ietf.org/archive/id/draft-aap-oauth-profile-01.txt",
     "claim": "A. Cruz (Independent), *Agent Authorization Profile (AAP) for OAuth 2.0 (draft-aap-oauth-profile-01)*, checked 2026-10-31",
     "date": null,
     "quote": "Expires 11 August 2026 [Page 56] Internet-Draft AAP for OAuth 2.0 February 2026 16.7.",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-oauth-identity-assertion-authz-grant/",
     "claim": "Aaron Parecki, Karl McGuinness, and Brian Campbell (IETF Web Authorization Protocol Working Group), *draft-ietf-oauth-identity-assertion-authz-grant — Identity Assertion JWT Authorization Grant (IETF Datatracker)*, checked 2026-11-08",
     "date": null,
     "quote": "Active Internet-Draft (oauth WG) … Intended RFC status | | (None) … WG state | | WG Document … IESG state | | I-D Exists",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://datatracker.ietf.org/doc/draft-carleton-workload-authz-grant/",
     "claim": "Paul Carleton (Anthropic), Nick Steele (OpenAI), Aaron Parecki (Okta), Arndt Schwenkschuster (Defakto Security), and Brian Campbell (Ping Identity), *draft-carleton-workload-authz-grant — Workload Authorization Grant (IETF Datatracker)*, checked 2026-11-08",
     "date": null,
     "quote": "Active Internet-Draft (individual)",
     "ref": 11
    }
   ],
   "form": "endpoint",
   "governance": "IETF individual Internet-Draft (OAuth-adjacent; not yet adopted by the OAuth Working Group as of this verification)",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against datatracker.ietf.org/doc/html/draft-mishra-oauth-agent-grants-02; corrected canonical title to match draft"
    },
    {
     "date": "2026-10-16",
     "note": "draft-mishra-oauth-agent-grants-02 is dated 2026-08-30"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "daap",
   "implementation": "prototype",
   "last_verified": "2026-11-12",
   "name": "OAuth Profile for Delegated AI Agent Authorization",
   "native_status": "Internet-Draft, individual submission, Active",
   "origin": {
    "date": "2026-02",
    "org": "IETF individual submission"
   },
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "draft",
   "probe": {
    "method": "GET",
    "on_absent": "Authorization server does not advertise the OAuth building blocks (Token Exchange, sender-constrained tokens) DAAP requires; this alone does not prove DAAP is unused, since DAAP defines no unique discoverable marker",
    "parse": "Presence of Token Exchange (RFC 8693) grant support and sender-constraining (DPoP/mTLS) in the advertised grant_types_supported / token_endpoint_auth_methods_supported, as DAAP composes these existing mechanisms rather than adding new ones",
    "path": "{authorization_server}/.well-known/oauth-authorization-server"
   },
   "question": "How can a human user delegate constrained, attenuable, revocable authority to an AI agent using standard OAuth mechanisms, with no new endpoints or claims required?",
   "scope": "general",
   "spec_url": "https://datatracker.ietf.org/doc/html/draft-mishra-oauth-agent-grants-02",
   "step": "permit",
   "summary_md": "**OAuth Profile for Delegated AI Agent Authorization** (`draft-mishra-oauth-agent-grants-02`) is an Internet-Draft by S. Kumar of Orchestrum Technologies LLP, with intended status Informational. It is dated 30 August 2026 and expires 3 March 2027. The term \"DAAP\" is a convenient name for this profile. It is not a new authorization framework, a new credential format, or a claim that an AI agent is a legal person. Clients conforming to this profile MUST use PAR. The client exchanges the authorization code at the OAuth token endpoint using `grant_type=authorization_code`, the code, the same `redirect_uri`, and the PKCE `code_verifier`. The token MUST be sender-constrained. A DPoP-bound token carries the public-key thumbprint in `cnf.jkt`, or an mTLS-bound token carries the certificate thumbprint in `cnf`. Datatracker lists an Active Internet-Draft (individual) by Sanjeev Kumar, last updated `2026-08-30`, with RFC stream (None), stream state (No stream defined), and IESG state I-D Exists. This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process.",
   "track": "ietf",
   "version": {
    "label": "draft-mishra-oauth-agent-grants-02",
    "date": "2026-08-30"
   },
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-mishra-oauth-agent-grants"
    }
   ],
   "use_cases": [
    "delegate-user-authority",
    "prove-agent-identity"
   ],
   "audience": [
    "agent-builder",
    "platform",
    "standards-body"
   ],
   "pairs_with": [
    "oauth-metadata-for-agents",
    "aauth",
    "aap",
    "identity-assertion-authz-grant",
    "workload-authz-grant"
   ],
   "prerequisites": [
    "oauth-metadata-for-agents"
   ],
   "ietf_tracker": {
    "doc": "draft-mishra-oauth-agent-grants",
    "rev": "02",
    "state": "active",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-08-30",
    "expires_utc": "2027-03-03",
    "as_of": "2026-10-31",
    "source": "https://datatracker.ietf.org/doc/draft-mishra-oauth-agent-grants/",
    "source_label": "per IETF Datatracker"
   },
   "hatnote_md": "",
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": null,
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**OAuth Profile for Delegated AI Agent Authorization** (`draft-mishra-oauth-agent-grants-02`) is an Internet-Draft by S. Kumar of Orchestrum Technologies LLP, with intended status Informational. It is dated 30 August 2026 and expires 3 March 2027. [1] The term \"DAAP\" is a convenient name for this profile. It is not a new authorization framework, a new credential format, or a claim that an AI agent is a legal person. [1] Clients conforming to this profile MUST use PAR. [1] The client exchanges the authorization code at the OAuth token endpoint using `grant_type=authorization_code`, the code, the same `redirect_uri`, and the PKCE `code_verifier`. [1] The token MUST be sender-constrained. A DPoP-bound token carries the public-key thumbprint in `cnf.jkt`, or an mTLS-bound token carries the certificate thumbprint in `cnf`. [1] Datatracker lists an Active Internet-Draft (individual) by Sanjeev Kumar, last updated `2026-08-30`, with RFC stream (None), stream state (No stream defined), and IESG state I-D Exists. This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. [2]",
   "v05_identity_sentence_md": "**OAuth Profile for Delegated AI Agent Authorization** (`draft-mishra-oauth-agent-grants-02`) is an Internet-Draft by S. Kumar of Orchestrum Technologies LLP, with intended status Informational. It is dated 30 August 2026 and expires 3 March 2027. [1] The term \"DAAP\" is a convenient name for this profile. It is not a new authorization framework, a new credential format, or a claim that an AI agent is a legal person. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Permit](/category/permit/) (`permit`)"
    },
    {
     "label": "Form",
     "value_md": "Endpoint (`endpoint`)"
    },
    {
     "label": "Originated by",
     "value_md": "S. Kumar (Sanjeev Kumar), Orchestrum Technologies LLP [1]"
    },
    {
     "label": "Governed by",
     "value_md": "Individual Internet-Draft with no IETF stream; discussion directed to the OAuth Working Group list `oauth@ietf.org` [2][3]"
    },
    {
     "label": "Track",
     "value_md": "IETF Internet-Draft (Informational) [2]"
    },
    {
     "label": "Status",
     "value_md": "Internet-Draft, individual submission, Active [1][2][3]"
    },
    {
     "label": "Version",
     "value_md": "`draft-mishra-oauth-agent-grants-02`, dated 30 August 2026, expires 3 March 2027 [1][2]"
    },
    {
     "label": "Wire format",
     "value_md": "JWT access tokens (RFC 9068) issued over standard OAuth 2.0 HTTP endpoints using JOSE [3]"
    },
    {
     "label": "Specification",
     "value_md": "https://datatracker.ietf.org/doc/html/draft-mishra-oauth-agent-grants-02 [3]"
    },
    {
     "label": "Found at",
     "value_md": "Defines no new JWT claims or OAuth endpoints; reuses PAR, the token endpoint, and DPoP or mutual-TLS sender constraint [3]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust Legal Provisions (BCP 78) [2]"
    },
    {
     "label": "IETF state",
     "value_md": "`draft-mishra-oauth-agent-grants-02` · **Active Internet-Draft** (expires 2027-03-03) · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-mishra-oauth-agent-grants/))"
    }
   ],
   "v05_problem_md": "OAuth deployments already support software acting for users. AI agent deployments add operational pressure because agent instances can be created dynamically, can call high-impact APIs, and can delegate work to other agent instances. [1] These characteristics do not justify replacing OAuth. They do justify a strict profile that removes unsafe choices and makes the acting client, user, resource, and sender key explicit. [1] Bearer tokens are especially hazardous for autonomous software because agents may pass data through tools, logs, prompts, and subprocesses. [1] Resource binding limits where a token can be used; sender constraint limits who can use it. This profile requires both. [1] Delegation uses OAuth Token Exchange. The delegating token is the `subject_token`. [1] This profile requires both rotation and sender constraint for Agent Client Instances. [1] The profile uses existing OAuth and JOSE mechanisms wherever possible and defines no new JWT claims or OAuth endpoints. [1] This document does not standardize agent orchestration, model selection, policy languages, payments, budget ledgers, audit storage APIs, event delivery, credential vaults, SCIM, SSO configuration, or vendor deployment endpoints. [1] Grantex is an incomplete reference implementation and is not required for conformance. [1]",
   "v05_mechanism_delta_md": "Resource binding limits where a token can be used; sender constraint limits who can use it. This profile requires both. [1] Delegation uses OAuth Token Exchange. The delegating token is the `subject_token`. [1] This profile requires both rotation and sender constraint for Agent Client Instances. [1]",
   "v05_scope_boundary_md": "The profile uses existing OAuth and JOSE mechanisms wherever possible and defines no new JWT claims or OAuth endpoints. [1] This document does not standardize agent orchestration, model selection, policy languages, payments, budget ledgers, audit storage APIs, event delivery, credential vaults, SCIM, SSO configuration, or vendor deployment endpoints. [1] Grantex is an incomplete reference implementation and is not required for conformance. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "OAuth 2.0 Authorization Framework (RFC 6749)",
      "spec_or_rfc": "RFC 6749",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "DAAP issues audience-restricted, sender-constrained access tokens bound to the agent key, attenuates them through RFC 8693 token exchange, and defines no new JWT claims or OAuth endpoints. [3][4]"
     },
     {
      "name": "OAuth 2.0 Token Exchange (RFC 8693)",
      "spec_or_rfc": "RFC 8693",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "Later hops narrow the agent's authority through RFC 8693 token exchange, and the profile defines no new JWT claims or OAuth endpoints. [3][5]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "oauth-metadata-for-agents",
      "target_name": "OAuth Protected Resource and Authorization Server Metadata (as used for agent authorization)",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "DAAP requires RFC 8414 authorization server metadata (publishing jwks_uri) and adds no new well-known URI of its own. [3][6][7]"
     },
     {
      "target_id": "aauth",
      "target_name": "Agent Authorization Grant",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "Rosenberg's Agent Authorization Grant (draft-rosenberg-oauth-aauth-02) challenges insufficient scope with HTTP 403 and a WWW-Authenticate scope_challenge JWT (scope-challenge+jwt), while DAAP requires RFC 8414 authorization server metadata (jwks_uri), PAR, and rotated sender-constrained tokens. [3][8]"
     },
     {
      "target_id": "aap",
      "target_name": "Agent Authorization Profile",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "The Agent Authorization Profile puts delegation chains and human-oversight flags in structured JWT claims, while DAAP defines no new JWT claims and constrains the token to the agent's key. [3][9]"
     },
     {
      "target_id": "identity-assertion-authz-grant",
      "target_name": "Identity Assertion JWT Authorization Grant (ID-JAG)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "An ID-JAG is an oauth-id-jag+jwt from RFC 8693 token exchange presented with the jwt-bearer grant, while DAAP uses that same token-exchange hop to narrow a sender-constrained agent token and defines no new claims. [3][10]"
     },
     {
      "target_id": "workload-authz-grant",
      "target_name": "Workload Authorization Grant (WAG)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "The Workload Authorization Grant trades a platform-signed JWT for an access token with the jwt-bearer grant, while DAAP attenuates a user-consented agent token through RFC 8693 and defines no new claims. [3][11]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Permit protocols](/category/permit/)** — Category index for `permit` standards."
    }
   ],
   "v05_compiled_md": "---\nid: daap\ntitle: \"OAuth Profile for Delegated AI Agent Authorization\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: permit\nform: endpoint\nwire_archetype: identity_auth_crypto\nspec_url: https://datatracker.ietf.org/doc/html/draft-mishra-oauth-agent-grants-02\nlast_checked: 2026-11-12\n---\n\n# OAuth Profile for Delegated AI Agent Authorization\n\n**Category:** [Permit](/category/permit/) (`permit`) · **Form:** Endpoint (`endpoint`) · **Last checked:** 2026-11-12\n\n**OAuth Profile for Delegated AI Agent Authorization** (`draft-mishra-oauth-agent-grants-02`) is an Internet-Draft by S. Kumar of Orchestrum Technologies LLP, with intended status Informational. It is dated 30 August 2026 and expires 3 March 2027. [1] The term \"DAAP\" is a convenient name for this profile. It is not a new authorization framework, a new credential format, or a claim that an AI agent is a legal person. [1] Clients conforming to this profile MUST use PAR. [1] The client exchanges the authorization code at the OAuth token endpoint using `grant_type=authorization_code`, the code, the same `redirect_uri`, and the PKCE `code_verifier`. [1] The token MUST be sender-constrained. A DPoP-bound token carries the public-key thumbprint in `cnf.jkt`, or an mTLS-bound token carries the certificate thumbprint in `cnf`. [1] Datatracker lists an Active Internet-Draft (individual) by Sanjeev Kumar, last updated `2026-08-30`, with RFC stream (None), stream state (No stream defined), and IESG state I-D Exists. This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. [2]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Permit](/category/permit/) (`permit`) |\n| **Form** | Endpoint (`endpoint`) |\n| **Originated by** | S. Kumar (Sanjeev Kumar), Orchestrum Technologies LLP [1] |\n| **Governed by** | Individual Internet-Draft with no IETF stream; discussion directed to the OAuth Working Group list `oauth@ietf.org` [2][3] |\n| **Track** | IETF Internet-Draft (Informational) [2] |\n| **Status** | Internet-Draft, individual submission, Active [1][2][3] |\n| **Version** | `draft-mishra-oauth-agent-grants-02`, dated 30 August 2026, expires 3 March 2027 [1][2] |\n| **Wire format** | JWT access tokens (RFC 9068) issued over standard OAuth 2.0 HTTP endpoints using JOSE [3] |\n| **Specification** | https://datatracker.ietf.org/doc/html/draft-mishra-oauth-agent-grants-02 [3] |\n| **Found at** | Defines no new JWT claims or OAuth endpoints; reuses PAR, the token endpoint, and DPoP or mutual-TLS sender constraint [3] |\n| **Licence** | IETF Trust Legal Provisions (BCP 78) [2] |\n| **IETF state** | `draft-mishra-oauth-agent-grants-02` · **Active Internet-Draft** (expires 2027-03-03) · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-mishra-oauth-agent-grants/)) |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nOAuth deployments already support software acting for users. AI agent deployments add operational pressure because agent instances can be created dynamically, can call high-impact APIs, and can delegate work to other agent instances. [1] These characteristics do not justify replacing OAuth. They do justify a strict profile that removes unsafe choices and makes the acting client, user, resource, and sender key explicit. [1] Bearer tokens are especially hazardous for autonomous software because agents may pass data through tools, logs, prompts, and subprocesses. [1] Resource binding limits where a token can be used; sender constraint limits who can use it. This profile requires both. [1] Delegation uses OAuth Token Exchange. The delegating token is the `subject_token`. [1] This profile requires both rotation and sender constraint for Agent Client Instances. [1] The profile uses existing OAuth and JOSE mechanisms wherever possible and defines no new JWT claims or OAuth endpoints. [1] This document does not standardize agent orchestration, model selection, policy languages, payments, budget ledgers, audit storage APIs, event delivery, credential vaults, SCIM, SSO configuration, or vendor deployment endpoints. [1] Grantex is an incomplete reference implementation and is not required for conformance. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **OAuth 2.0 Authorization Framework (RFC 6749)** | `RFC 6749` | Profiles classic standard | DAAP issues audience-restricted, sender-constrained access tokens bound to the agent key, attenuates them through RFC 8693 token exchange, and defines no new JWT claims or OAuth endpoints. [3][4] |\n| **OAuth 2.0 Token Exchange (RFC 8693)** | `RFC 8693` | Profiles classic standard | Later hops narrow the agent's authority through RFC 8693 token exchange, and the profile defines no new JWT claims or OAuth endpoints. [3][5] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[OAuth Protected Resource and Authorization Server Metadata (as used for agent authorization)](/protocols/oauth-metadata-for-agents/)** | Builds on | DAAP requires RFC 8414 authorization server metadata (publishing jwks_uri) and adds no new well-known URI of its own. [3][6][7] |\n| **[Agent Authorization Grant](/protocols/aauth/)** | Peer alternative | Rosenberg's Agent Authorization Grant (draft-rosenberg-oauth-aauth-02) challenges insufficient scope with HTTP 403 and a WWW-Authenticate scope_challenge JWT (scope-challenge+jwt), while DAAP requires RFC 8414 authorization server metadata (jwks_uri), PAR, and rotated sender-constrained tokens. [3][8] |\n| **[Agent Authorization Profile](/protocols/aap/)** | Peer alternative | The Agent Authorization Profile puts delegation chains and human-oversight flags in structured JWT claims, while DAAP defines no new JWT claims and constrains the token to the agent's key. [3][9] |\n| **[Identity Assertion JWT Authorization Grant (ID-JAG)](/protocols/identity-assertion-authz-grant/)** | Peer alternative | An ID-JAG is an oauth-id-jag+jwt from RFC 8693 token exchange presented with the jwt-bearer grant, while DAAP uses that same token-exchange hop to narrow a sender-constrained agent token and defines no new claims. [3][10] |\n| **[Workload Authorization Grant (WAG)](/protocols/workload-authz-grant/)** | Peer alternative | The Workload Authorization Grant trades a platform-signed JWT for an access token with the jwt-bearer grant, while DAAP attenuates a user-consented agent token through RFC 8693 and defines no new claims. [3][11] |\n\n---\n\n## See also\n\n- **Category:** [Permit protocols](/category/permit/)\n\n---\n\n## References\n\n1. S. Kumar (Orchestrum Technologies LLP), *OAuth Profile for Delegated AI Agent Authorization (draft-mishra-oauth-agent-grants-02)* (checked 2026-10-31) — <https://www.ietf.org/archive/id/draft-mishra-oauth-agent-grants-02.txt>\n2. S. Kumar (Orchestrum Technologies LLP), *draft-mishra-oauth-agent-grants — OAuth Profile for Delegated AI Agent Authorization (IETF Datatracker)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/draft-mishra-oauth-agent-grants/>\n3. S. Kumar (Orchestrum Technologies LLP), *OAuth Profile for Delegated AI Agent Authorization (draft-mishra-oauth-agent-grants-02 HTML)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/html/draft-mishra-oauth-agent-grants-02>\n4. D. Hardt, Ed., *RFC 6749: The OAuth 2.0 Authorization Framework* (October 2012) — <https://www.rfc-editor.org/rfc/rfc6749.html>\n5. M. Jones, A. Nadalin, B. Campbell, Ed., J. Bradley, and C. Mortimore, *RFC 8693: OAuth 2.0 Token Exchange* (January 2020) — <https://www.rfc-editor.org/rfc/rfc8693.html>\n6. IETF Datatracker, *RFC 9728: OAuth 2.0 Protected Resource Metadata* (RFC - Proposed Standard (April 2025)) — <https://datatracker.ietf.org/doc/html/rfc9728>\n7. M. Jones (Microsoft), N. Sakimura (NRI), and J. Bradley (Yubico), *RFC 8414: OAuth 2.0 Authorization Server Metadata* (June 2018) — <https://www.rfc-editor.org/rfc/rfc8414.html>\n8. J. Rosenberg (jdrosen.net) and P. White (Bitwave), *AAuth - Agentic Authorization OAuth 2.1 Extension (draft-rosenberg-oauth-aauth-02)* (1 November 2026) — <https://www.ietf.org/archive/id/draft-rosenberg-oauth-aauth-02.txt>\n9. A. Cruz (Independent), *Agent Authorization Profile (AAP) for OAuth 2.0 (draft-aap-oauth-profile-01)* (checked 2026-10-31) — <https://www.ietf.org/archive/id/draft-aap-oauth-profile-01.txt>\n10. Aaron Parecki, Karl McGuinness, and Brian Campbell (IETF Web Authorization Protocol Working Group), *draft-ietf-oauth-identity-assertion-authz-grant — Identity Assertion JWT Authorization Grant (IETF Datatracker)* (checked 2026-11-08) — <https://datatracker.ietf.org/doc/draft-ietf-oauth-identity-assertion-authz-grant/>\n11. Paul Carleton (Anthropic), Nick Steele (OpenAI), Aaron Parecki (Okta), Arndt Schwenkschuster (Defakto Security), and Brian Campbell (Ping Identity), *draft-carleton-workload-authz-grant — Workload Authorization Grant (IETF Datatracker)* (checked 2026-11-08) — <https://datatracker.ietf.org/doc/draft-carleton-workload-authz-grant/>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "AAP",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "aliases": [],
   "analog": "OAuth profile / scoped service-account token",
   "collisions": [
    "AAP also collides with the unrelated Automated Access Point / Advanced Authoring Program acronyms in other domains",
    "Agent Attribution Protocol (AAP)",
    "OpenA2A Agent Authorization Protocol (draft-fane-opena2a-aap-02), a different current individual draft recorded as opena2a-aap"
   ],
   "discovery": {
    "mechanism": "OAuth 2.0 authorization-server metadata plus structured JWT claims; no dedicated well-known file defined in the spec text reviewed",
    "path": null
   },
   "dispute": {
    "claims": [
     "IETF Datatracker: Expired Internet-Draft (individual), IESG state Expired",
     "aapspec/spec repository shows zero stars and no post-launch activity",
     "draft-fane-opena2a-aap-02 (OpenA2A, A. Fane, posted 2 October 2026, expires 5 April 2027) is a different document and is not expired. It is recorded as opena2a-aap."
    ],
    "summary": "This record is the expired individual draft draft-aap-oauth-profile-01. A different document, draft-fane-opena2a-aap-02, is current through 3 April 2027 and is recorded separately as opena2a-aap. The Workload Authorization Grant, the identity-continuation assertion, and the Agent-Delegation header are further separate records."
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.ietf.org/archive/id/draft-aap-oauth-profile-01.txt",
     "claim": "A. Cruz (Independent), *Agent Authorization Profile (AAP) for OAuth 2.0 (draft-aap-oauth-profile-01)*, checked 2026-10-31",
     "date": null,
     "quote": "draft-aap-oauth-profile-01 Abstract This document defines the Agent Authorization Profile (AAP), an authorization profile for OAuth 2.0 and JWT designed for autonomous AI agents. / A. Cruz Internet-Draft Independent Intended status: Standards Track 7 February 2026 Expires: 11 August 2026 Agent Authorization Profile (AAP) for OAuth 2.0 draft-aap-oauth-profile-01 / Token issuance follows OAuth 2.0; typically the Client Credentials Grant [RFC6749] Section 4.4 is used for agent-to-API (M2M) flows. / Tokens issued by the AS include additional structured claims that Resource Servers MUST evaluate before allowing operations. / OAuth Working Group A. Cruz Internet-Draft Independent Intended status: Standards Track 7 February 2026 / Intended status: Standards Track / Expires 11 August 2026 [Page 56] Internet-Draft AAP for OAuth 2.0 February 2026 16.7. / draft-aap-oauth-profile-01 / Copyright (c) 2026 IETF Trust and the persons identified as the document authors. / Traditional OAuth-based systems were designed primarily for user-to- application-to-API interactions. Autonomous AI agents introduce different characteristics: actions can be autonomous and high frequency; human approval may not be present at execution time; risk depends on task context; and execution may be delegated across multiple tools or agents. Existing scope-based models are not expressive enough to represent these requirements safely and transparently. / AAP extends existing standards with structured claims and validation rules so that systems can reason about agent identity, task context, operational constraints, delegation chains, and human oversight requirements. It does not introduce a new protocol; it specifies how to use OAuth 2.0, JWT, Token Exchange, and proof-of- possession mechanisms in agent-to-API (M2M) scenarios with context- aware, auditable authorization. / 1.3. Non-Goals * Defining internal AI model behavior. * Judging the correctness or ethics of agent decisions. * Replacing organizational security or compliance frameworks. * Standardizing log storage formats or SIEM integrations. / Human oversight requirements are expressed as policy metadata in oversight (e.g. requires_approval_for for certain capability types, or max_autonomous_scope). AAP only carries the intent; enforcement is at the Resource Server or orchestrator (e.g. OIDC step-up with acr_values or an external approval API), and is out of scope for this profile.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://datatracker.ietf.org/doc/draft-aap-oauth-profile/",
     "claim": "A. Cruz (Independent), *draft-aap-oauth-profile — Agent Authorization Profile (AAP) for OAuth 2.0 (IETF Datatracker)*, checked 2026-10-31",
     "date": null,
     "quote": "This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. | | | | | --- | --- | --- | | Document | Type | Expired Internet-Draft (individual) Expired & archived | | Author | | angel cruz | | Last updated | 2026-08-11 (Latest revision 2026-02-07) | | RFC stream | | (None) | | Intended RFC status | | (None) | | Formats | | txt html xml htmlized bibtex bibxml | | Stream | Stream state | | (No stream defined) | | Consensus boilerplate | | Unknown | | RFC Editor Note | | (None) | | IESG | IESG state | | Expired / | | 2026-02-07 | 01 | angel cruz | Uploaded new revision | | / Expired Internet-Draft (individual) Expired & archived / expired, audience mismatch, Cruz Expires 11 August 2026 Page 27 Internet-Draft AAP for OAuth",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://raw.githubusercontent.com/aapspec/spec/main/README.md",
     "claim": "aapspec/spec (GitHub), *Agent Authorization Profile (AAP)*, checked 2026-10-31",
     "date": null,
     "quote": "approval ## IETF Status Current: Internet-Draft (draft-00) Target: RFC via OAuth Working Group - / Target: RFC via OAuth Working Group",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://www.ietf.org/archive/id/draft-aap-oauth-profile-01.html",
     "claim": "A. Cruz (Independent), *AAP for OAuth 2.0 (draft-aap-oauth-profile-01)*, checked 2026-10-31",
     "date": null,
     "quote": "| Internet-Draft | AAP for OAuth 2.0 | February 2026 | | --- | / Agent Authorization Profile (AAP) for OAuth 2.0 ## Abstract This document defines the Agent Authorization Profile (AAP), an authoriza / proof-of-possession (DPoP and/or mTLS) when the profile requires it. It SHOULD support token exchange",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://datatracker.ietf.org/doc/html/draft-aap-oauth-profile-01",
     "claim": "A. Cruz (Independent), *Agent Authorization Profile (AAP) for OAuth 2.0 (draft-aap-oauth-profile-01 HTML)*, checked 2026-10-31",
     "date": null,
     "quote": "required AAP claims: agent, task, capabilities¶ agent task capabilities Validates capabilities against operator policy / Authorization Server¶ `iss` Checks token revocation status (if revocation mechanism in place)¶ **Proof-of-Possession Validation:**¶",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://www.rfc-editor.org/rfc/rfc7519.html",
     "claim": "M. Jones, J. Bradley, and N. Sakimura, *RFC 7519: JSON Web Token (JWT)*, May 2015",
     "date": null,
     "quote": "JSON Web Token (JWT) is a compact, URL-safe means of representing",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://www.rfc-editor.org/rfc/rfc8693.html",
     "claim": "M. Jones, A. Nadalin, B. Campbell, Ed., J. Bradley, and C. Mortimore, *RFC 8693: OAuth 2.0 Token Exchange*, January 2020",
     "date": null,
     "quote": "This specification defines a protocol for an HTTP- and JSON-based",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://datatracker.ietf.org/doc/html/rfc9728",
     "claim": "IETF Datatracker, *RFC 9728: OAuth 2.0 Protected Resource Metadata*, RFC - Proposed Standard (April 2025)",
     "date": null,
     "quote": "RFC - Proposed Standard April 2025",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://www.rfc-editor.org/rfc/rfc8414.html",
     "claim": "M. Jones (Microsoft), N. Sakimura (NRI), and J. Bradley (Yubico), *RFC 8414: OAuth 2.0 Authorization Server Metadata*, June 2018",
     "date": null,
     "quote": "OAuth 2.0 Authorization Server Metadata … /.well-known/oauth-authorization-server",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://datatracker.ietf.org/doc/draft-mishra-oauth-agent-grants/",
     "claim": "S. Kumar (Orchestrum Technologies LLP), *draft-mishra-oauth-agent-grants — OAuth Profile for Delegated AI Agent Authorization (IETF Datatracker)*, checked 2026-10-31",
     "date": null,
     "quote": "is at https://mailarchive.ietf.org/arch/browse/oauth/. Kumar Expires 3 March 2027 [Page 3] Internet-Draft DAAP August 2026",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://www.ietf.org/archive/id/draft-fane-opena2a-aap-02.txt",
     "claim": "A. Fane (OpenA2A), *OpenA2A Agent Authorization Protocol (AAP) (draft-fane-opena2a-aap-02)*, 30 September 2026",
     "date": null,
     "quote": "Standards Track 30 September 2026 Expires: 3 April 2027 OpenA2A Agent Authorization Protocol (AAP)",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://www.ietf.org/archive/id/draft-rosenberg-oauth-aauth-02.txt",
     "claim": "J. Rosenberg (jdrosen.net) and P. White (Bitwave), *AAuth - Agentic Authorization OAuth 2.1 Extension (draft-rosenberg-oauth-aauth-02)*, 1 November 2026",
     "date": null,
     "quote": "Intended status: Standards Track ... 1 November 2026 ... draft-rosenberg-oauth-aauth-02 ... This Internet-Draft will expire on 5 May 2027.",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-oauth-identity-assertion-authz-grant/",
     "claim": "Aaron Parecki, Karl McGuinness, and Brian Campbell (IETF Web Authorization Protocol Working Group), *draft-ietf-oauth-identity-assertion-authz-grant — Identity Assertion JWT Authorization Grant (IETF Datatracker)*, checked 2026-11-08",
     "date": null,
     "quote": "Active Internet-Draft (oauth WG) … Intended RFC status | | (None) … WG state | | WG Document … IESG state | | I-D Exists",
     "ref": 13
    }
   ],
   "form": "endpoint",
   "governance": "No formal governance body; single individual author plus a GitHub organization (aapspec) hosting the spec text, reference implementation, schemas, and test vectors",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against datatracker.ietf.org/doc/draft-aap-oauth-profile/ and github.com/aapspec/spec; found expired"
    },
    {
     "date": "2026-10-16",
     "note": "Expired Internet-Draft (expired 2026-08-11)"
    },
    {
     "date": "2026-10-20",
     "note": "noted that draft-fane-opena2a-aap-02 is a different, unexpired draft and is recorded as opena2a-aap; this record stays draft-aap-oauth-profile-01"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "aap",
   "implementation": "prototype",
   "last_verified": "2026-11-12",
   "name": "Agent Authorization Profile",
   "native_status": "Expired Internet-Draft (expired 2026-08-11)",
   "origin": {
    "date": "2026-02-07",
    "org": "Individual author (\"angel cruz\"), published via IETF individual submission and the aapspec GitHub organization"
   },
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "deprecated",
   "probe": {
    "method": "GET",
    "on_absent": "No AAP claims present; given the draft's expired status this is the expected default across the ecosystem",
    "parse": "Decode a returned access token as a JWT and check for AAP-specific claim names (agent identity, task binding, delegation chain) as documented in the aapspec/spec repository's JSON Schemas",
    "path": "{authorization_server}/.well-known/oauth-authorization-server"
   },
   "question": "How can OAuth 2.0/JWT claims carry structured agent identity, task context, operational constraints, delegation chains, and human-oversight requirements for machine-to-machine agent calls?",
   "scope": "general",
   "spec_url": "https://www.ietf.org/archive/id/draft-aap-oauth-profile-01.html",
   "step": "permit",
   "summary_md": "**Agent Authorization Profile** (`AAP`), `draft-aap-oauth-profile-01`, is an authorization profile for OAuth 2.0 and JWT designed for autonomous AI agents. Submitted as an individual Internet-Draft by A. Cruz (Independent) with intended status Standards Track, the specification is not endorsed by the IETF and has no formal standing in the IETF standards process. Token issuance follows OAuth 2.0; typically the Client Credentials Grant [RFC6749] Section 4.4 is used for agent-to-API (M2M) flows. Tokens issued by the AS include additional structured claims that Resource Servers MUST evaluate before allowing operations. `draft-aap-oauth-profile-01` was published on `2026-02-07` and expired on `2026-08-11`; IETF Datatracker records it as an Expired Internet-Draft (individual) with IESG state Expired.",
   "track": "community",
   "version": {
    "date": "2026-02-07",
    "label": "draft-aap-oauth-profile-01"
   },
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-aap-oauth-profile"
    }
   ],
   "use_cases": [
    "delegate-user-authority",
    "prove-agent-identity",
    "audit-agent-actions"
   ],
   "audience": [
    "standards-body",
    "agent-builder",
    "platform"
   ],
   "pairs_with": [
    "oauth-metadata-for-agents",
    "daap",
    "opena2a-aap",
    "aauth",
    "identity-assertion-authz-grant"
   ],
   "prerequisites": [
    "oauth-metadata-for-agents"
   ],
   "ietf_tracker": {
    "doc": "draft-aap-oauth-profile",
    "rev": "01",
    "state": "expired",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-02-07",
    "expires_utc": "2026-08-11",
    "as_of": "2026-10-31",
    "source": "https://datatracker.ietf.org/doc/draft-aap-oauth-profile/",
    "source_label": "per IETF Datatracker"
   },
   "hatnote_md": "This page is about the Agent Authorization Profile (AAP, draft-aap-oauth-profile-01), an expired individual Internet-Draft by A. Cruz. For the active OpenA2A authorization broker draft sharing the AAP acronym, see [OpenA2A Agent Authorization Protocol](/protocols/opena2a-aap/). For Rako's commerce recommendation and conversion attribution specification, see [Agent Attribution Protocol](/protocols/agent-attribution-protocol/).",
   "tier": "spec_brief",
   "lifecycle_status": "expired_draft",
   "wire_archetype": "identity_auth_crypto",
   "status_notice_md": "**Status notice (Expired Internet-Draft):** Individual submission `draft-aap-oauth-profile-01` expired on `2026-08-11` without working-group adoption.",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "**Status notice (Expired Internet-Draft):** Individual submission `draft-aap-oauth-profile-01` expired on `2026-08-11` without working-group adoption. This page is about the Agent Authorization Profile (AAP, draft-aap-oauth-profile-01), an expired individual Internet-Draft by A. Cruz. For the active OpenA2A authorization broker draft sharing the AAP acronym, see [OpenA2A Agent Authorization Protocol](/protocols/opena2a-aap/). For Rako's commerce recommendation and conversion attribution specification, see [Agent Attribution Protocol](/protocols/agent-attribution-protocol/). [1]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Agent Authorization Profile** (`AAP`), `draft-aap-oauth-profile-01`, is an authorization profile for OAuth 2.0 and JWT designed for autonomous AI agents. [1] Submitted as an individual Internet-Draft by A. Cruz (Independent) with intended status Standards Track, the specification is not endorsed by the IETF and has no formal standing in the IETF standards process. [1][2] Token issuance follows OAuth 2.0; typically the Client Credentials Grant [RFC6749] Section 4.4 is used for agent-to-API (M2M) flows. [1] Tokens issued by the AS include additional structured claims that Resource Servers MUST evaluate before allowing operations. [1] `draft-aap-oauth-profile-01` was published on `2026-02-07` and expired on `2026-08-11`; IETF Datatracker records it as an Expired Internet-Draft (individual) with IESG state Expired. [1][2]",
   "v05_identity_sentence_md": "**Agent Authorization Profile** (`AAP`), `draft-aap-oauth-profile-01`, is an authorization profile for OAuth 2.0 and JWT designed for autonomous AI agents. [1] Submitted as an individual Internet-Draft by A. Cruz (Independent) with intended status Standards Track, the specification is not endorsed by the IETF and has no formal standing in the IETF standards process. [1][2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Permit](/category/permit/) (`permit`)"
    },
    {
     "label": "Form",
     "value_md": "Endpoint (`endpoint`)"
    },
    {
     "label": "Originated by",
     "value_md": "Angel Cruz (listed as \"Independent\"), single-author individual submission [1][2]"
    },
    {
     "label": "Governed by",
     "value_md": "No governing body: individual Internet-Draft with no RFC stream and no working group. The README says it is aiming for the OAuth Working Group [2][3]"
    },
    {
     "label": "Track",
     "value_md": "Open specification repository (`aapspec/spec`) and expired individual IETF Internet-Draft (`draft-aap-oauth-profile-01`, Intended status: Standards Track) [1][2][3]"
    },
    {
     "label": "Status",
     "value_md": "Expired Internet-Draft (expired 2026-08-11) [1][2][4]"
    },
    {
     "label": "Version",
     "value_md": "`draft-aap-oauth-profile-01`, dated 7 February 2026; expired 11 August 2026 [1][2]"
    },
    {
     "label": "Wire format",
     "value_md": "OAuth 2.0 access token as a JWT carrying the AAP claims `agent`, `task`, `capabilities`, `oversight`, `delegation`, `context` and `audit` [5]"
    },
    {
     "label": "Specification",
     "value_md": "https://www.ietf.org/archive/id/draft-aap-oauth-profile-01.html [4]"
    },
    {
     "label": "Found at",
     "value_md": "No new discovery mechanism or header. It uses the standard OAuth token endpoint, and proof-of-possession comes from DPoP or mTLS [4][5]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust Legal Provisions (BCP 78, `draft-aap-oauth-profile-01`) [1]"
    },
    {
     "label": "IETF state",
     "value_md": "`draft-aap-oauth-profile-01` · **Expired** 2026-08-11 · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-aap-oauth-profile/))"
    }
   ],
   "v05_problem_md": "Traditional OAuth-based systems were designed primarily for user-to-application-to-API interactions. Autonomous AI agents introduce different characteristics: actions can be autonomous and high frequency; human approval may not be present at execution time; risk depends on task context; and execution may be delegated across multiple tools or agents. Existing scope-based models are not expressive enough to represent these requirements safely and transparently. [1] AAP extends existing standards with structured claims and validation rules so that systems can reason about agent identity, task context, operational constraints, delegation chains, and human oversight requirements. It does not introduce a new protocol; it specifies how to use OAuth 2.0, JWT, Token Exchange, and proof-of-possession mechanisms in agent-to-API (M2M) scenarios with context-aware, auditable authorization. [1] Non-goals are defining internal AI model behavior, judging the correctness or ethics of agent decisions, replacing organizational security or compliance frameworks, and standardizing log storage formats or SIEM integrations. [1] Human oversight requirements are policy metadata in oversight. AAP only carries the intent, and enforcement at the Resource Server or orchestrator is out of scope for this profile. [1]",
   "v05_mechanism_delta_md": "AAP extends existing standards with structured claims and validation rules so that systems can reason about agent identity, task context, operational constraints, delegation chains, and human oversight requirements. It does not introduce a new protocol; it specifies how to use OAuth 2.0, JWT, Token Exchange, and proof-of-possession mechanisms in agent-to-API (M2M) scenarios with context-aware, auditable authorization. [1]",
   "v05_scope_boundary_md": "Non-goals are defining internal AI model behavior, judging the correctness or ethics of agent decisions, replacing organizational security or compliance frameworks, and standardizing log storage formats or SIEM integrations. [1] Human oversight requirements are policy metadata in oversight. AAP only carries the intent, and enforcement at the Resource Server or orchestrator is out of scope for this profile. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "JSON Web Token (JWT, RFC 7519)",
      "spec_or_rfc": "RFC 7519",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "The profile adds structured JWT claims for agent identity, task context, operational constraints, delegation chains, and a human-oversight flag, and it defines no dedicated well-known file. [4][6]"
     },
     {
      "name": "OAuth 2.0 Token Exchange (RFC 8693)",
      "spec_or_rfc": "RFC 8693",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "Delegation hops extend RFC 8693 token exchange, and the profile puts agent identity, task context, and human-oversight flags in structured OAuth 2.0 JWT claims. [4][7]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "oauth-metadata-for-agents",
      "target_name": "OAuth Protected Resource and Authorization Server Metadata (as used for agent authorization)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Clients locate the authorization server through RFC 8414 metadata, and the profile adds no well-known file of its own. [4][8][9]"
     },
     {
      "target_id": "daap",
      "target_name": "OAuth Profile for Delegated AI Agent Authorization",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "DAAP defines no new JWT claims and binds the access token to the agent key, while this profile puts the delegation chain and human-oversight flag in structured JWT claims in OAuth 2.0 access tokens and token-exchange grants. [4][10]"
     },
     {
      "target_id": "opena2a-aap",
      "target_name": "OpenA2A Agent Authorization Protocol",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "OpenA2A AAP defines six authorization components and a broker that keeps credentials out of the model context, while this expired profile puts structured JWT claims in OAuth 2.0 access tokens and token-exchange grants and defines no new protocol. [4][11]"
     },
     {
      "target_id": "aauth",
      "target_name": "Agent Authorization Grant",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "Rosenberg's grant challenges an under-scoped call on 403 WWW-Authenticate with a signed scope_challenge JWT and posts it to agent_authorization_endpoint, while this profile carries delegation and human-oversight in structured JWT claims. [4][12]"
     },
     {
      "target_id": "identity-assertion-authz-grant",
      "target_name": "Identity Assertion JWT Authorization Grant (ID-JAG)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "An ID-JAG is a single oauth-id-jag+jwt assertion, while this profile adds structured JWT claims for the delegation chain and whether human oversight is required on the call. [4][13]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Permit protocols](/category/permit/)** — Category index for `permit` standards."
    }
   ],
   "v05_compiled_md": "---\nid: aap\ntitle: \"Agent Authorization Profile\"\ntier: spec_brief\nlifecycle_status: expired_draft\ncategory: permit\nform: endpoint\nwire_archetype: identity_auth_crypto\nspec_url: https://www.ietf.org/archive/id/draft-aap-oauth-profile-01.html\nlast_checked: 2026-11-12\n---\n\n# Agent Authorization Profile\n\n**Category:** [Permit](/category/permit/) (`permit`) · **Form:** Endpoint (`endpoint`) · **Last checked:** 2026-11-12\n\n> ***Status notice (Expired Internet-Draft):** Individual submission `draft-aap-oauth-profile-01` expired on `2026-08-11` without working-group adoption. This page is about the Agent Authorization Profile (AAP, draft-aap-oauth-profile-01), an expired individual Internet-Draft by A. Cruz. For the active OpenA2A authorization broker draft sharing the AAP acronym, see [OpenA2A Agent Authorization Protocol](/protocols/opena2a-aap/). For Rako's commerce recommendation and conversion attribution specification, see [Agent Attribution Protocol](/protocols/agent-attribution-protocol/). [1]*\n\n**Agent Authorization Profile** (`AAP`), `draft-aap-oauth-profile-01`, is an authorization profile for OAuth 2.0 and JWT designed for autonomous AI agents. [1] Submitted as an individual Internet-Draft by A. Cruz (Independent) with intended status Standards Track, the specification is not endorsed by the IETF and has no formal standing in the IETF standards process. [1][2] Token issuance follows OAuth 2.0; typically the Client Credentials Grant [RFC6749] Section 4.4 is used for agent-to-API (M2M) flows. [1] Tokens issued by the AS include additional structured claims that Resource Servers MUST evaluate before allowing operations. [1] `draft-aap-oauth-profile-01` was published on `2026-02-07` and expired on `2026-08-11`; IETF Datatracker records it as an Expired Internet-Draft (individual) with IESG state Expired. [1][2]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Permit](/category/permit/) (`permit`) |\n| **Form** | Endpoint (`endpoint`) |\n| **Originated by** | Angel Cruz (listed as \"Independent\"), single-author individual submission [1][2] |\n| **Governed by** | No governing body: individual Internet-Draft with no RFC stream and no working group. The README says it is aiming for the OAuth Working Group [2][3] |\n| **Track** | Open specification repository (`aapspec/spec`) and expired individual IETF Internet-Draft (`draft-aap-oauth-profile-01`, Intended status: Standards Track) [1][2][3] |\n| **Status** | Expired Internet-Draft (expired 2026-08-11) [1][2][4] |\n| **Version** | `draft-aap-oauth-profile-01`, dated 7 February 2026; expired 11 August 2026 [1][2] |\n| **Wire format** | OAuth 2.0 access token as a JWT carrying the AAP claims `agent`, `task`, `capabilities`, `oversight`, `delegation`, `context` and `audit` [5] |\n| **Specification** | https://www.ietf.org/archive/id/draft-aap-oauth-profile-01.html [4] |\n| **Found at** | No new discovery mechanism or header. It uses the standard OAuth token endpoint, and proof-of-possession comes from DPoP or mTLS [4][5] |\n| **Licence** | IETF Trust Legal Provisions (BCP 78, `draft-aap-oauth-profile-01`) [1] |\n| **IETF state** | `draft-aap-oauth-profile-01` · **Expired** 2026-08-11 · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-aap-oauth-profile/)) |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nTraditional OAuth-based systems were designed primarily for user-to-application-to-API interactions. Autonomous AI agents introduce different characteristics: actions can be autonomous and high frequency; human approval may not be present at execution time; risk depends on task context; and execution may be delegated across multiple tools or agents. Existing scope-based models are not expressive enough to represent these requirements safely and transparently. [1] AAP extends existing standards with structured claims and validation rules so that systems can reason about agent identity, task context, operational constraints, delegation chains, and human oversight requirements. It does not introduce a new protocol; it specifies how to use OAuth 2.0, JWT, Token Exchange, and proof-of-possession mechanisms in agent-to-API (M2M) scenarios with context-aware, auditable authorization. [1] Non-goals are defining internal AI model behavior, judging the correctness or ethics of agent decisions, replacing organizational security or compliance frameworks, and standardizing log storage formats or SIEM integrations. [1] Human oversight requirements are policy metadata in oversight. AAP only carries the intent, and enforcement at the Resource Server or orchestrator is out of scope for this profile. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **JSON Web Token (JWT, RFC 7519)** | `RFC 7519` | Profiles classic standard | The profile adds structured JWT claims for agent identity, task context, operational constraints, delegation chains, and a human-oversight flag, and it defines no dedicated well-known file. [4][6] |\n| **OAuth 2.0 Token Exchange (RFC 8693)** | `RFC 8693` | Profiles classic standard | Delegation hops extend RFC 8693 token exchange, and the profile puts agent identity, task context, and human-oversight flags in structured OAuth 2.0 JWT claims. [4][7] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[OAuth Protected Resource and Authorization Server Metadata (as used for agent authorization)](/protocols/oauth-metadata-for-agents/)** | Complements | Clients locate the authorization server through RFC 8414 metadata, and the profile adds no well-known file of its own. [4][8][9] |\n| **[OAuth Profile for Delegated AI Agent Authorization](/protocols/daap/)** | Peer alternative | DAAP defines no new JWT claims and binds the access token to the agent key, while this profile puts the delegation chain and human-oversight flag in structured JWT claims in OAuth 2.0 access tokens and token-exchange grants. [4][10] |\n| **[OpenA2A Agent Authorization Protocol](/protocols/opena2a-aap/)** | Peer alternative | OpenA2A AAP defines six authorization components and a broker that keeps credentials out of the model context, while this expired profile puts structured JWT claims in OAuth 2.0 access tokens and token-exchange grants and defines no new protocol. [4][11] |\n| **[Agent Authorization Grant](/protocols/aauth/)** | Peer alternative | Rosenberg's grant challenges an under-scoped call on 403 WWW-Authenticate with a signed scope_challenge JWT and posts it to agent_authorization_endpoint, while this profile carries delegation and human-oversight in structured JWT claims. [4][12] |\n| **[Identity Assertion JWT Authorization Grant (ID-JAG)](/protocols/identity-assertion-authz-grant/)** | Peer alternative | An ID-JAG is a single oauth-id-jag+jwt assertion, while this profile adds structured JWT claims for the delegation chain and whether human oversight is required on the call. [4][13] |\n\n---\n\n## See also\n\n- **Category:** [Permit protocols](/category/permit/)\n\n---\n\n## References\n\n1. A. Cruz (Independent), *Agent Authorization Profile (AAP) for OAuth 2.0 (draft-aap-oauth-profile-01)* (checked 2026-10-31) — <https://www.ietf.org/archive/id/draft-aap-oauth-profile-01.txt>\n2. A. Cruz (Independent), *draft-aap-oauth-profile — Agent Authorization Profile (AAP) for OAuth 2.0 (IETF Datatracker)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/draft-aap-oauth-profile/>\n3. aapspec/spec (GitHub), *Agent Authorization Profile (AAP)* (checked 2026-10-31) — <https://raw.githubusercontent.com/aapspec/spec/main/README.md>\n4. A. Cruz (Independent), *AAP for OAuth 2.0 (draft-aap-oauth-profile-01)* (checked 2026-10-31) — <https://www.ietf.org/archive/id/draft-aap-oauth-profile-01.html>\n5. A. Cruz (Independent), *Agent Authorization Profile (AAP) for OAuth 2.0 (draft-aap-oauth-profile-01 HTML)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/html/draft-aap-oauth-profile-01>\n6. M. Jones, J. Bradley, and N. Sakimura, *RFC 7519: JSON Web Token (JWT)* (May 2015) — <https://www.rfc-editor.org/rfc/rfc7519.html>\n7. M. Jones, A. Nadalin, B. Campbell, Ed., J. Bradley, and C. Mortimore, *RFC 8693: OAuth 2.0 Token Exchange* (January 2020) — <https://www.rfc-editor.org/rfc/rfc8693.html>\n8. IETF Datatracker, *RFC 9728: OAuth 2.0 Protected Resource Metadata* (RFC - Proposed Standard (April 2025)) — <https://datatracker.ietf.org/doc/html/rfc9728>\n9. M. Jones (Microsoft), N. Sakimura (NRI), and J. Bradley (Yubico), *RFC 8414: OAuth 2.0 Authorization Server Metadata* (June 2018) — <https://www.rfc-editor.org/rfc/rfc8414.html>\n10. S. Kumar (Orchestrum Technologies LLP), *draft-mishra-oauth-agent-grants — OAuth Profile for Delegated AI Agent Authorization (IETF Datatracker)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/draft-mishra-oauth-agent-grants/>\n11. A. Fane (OpenA2A), *OpenA2A Agent Authorization Protocol (AAP) (draft-fane-opena2a-aap-02)* (30 September 2026) — <https://www.ietf.org/archive/id/draft-fane-opena2a-aap-02.txt>\n12. J. Rosenberg (jdrosen.net) and P. White (Bitwave), *AAuth - Agentic Authorization OAuth 2.1 Extension (draft-rosenberg-oauth-aauth-02)* (1 November 2026) — <https://www.ietf.org/archive/id/draft-rosenberg-oauth-aauth-02.txt>\n13. Aaron Parecki, Karl McGuinness, and Brian Campbell (IETF Web Authorization Protocol Working Group), *draft-ietf-oauth-identity-assertion-authz-grant — Identity Assertion JWT Authorization Grant (IETF Datatracker)* (checked 2026-11-08) — <https://datatracker.ietf.org/doc/draft-ietf-oauth-identity-assertion-authz-grant/>\n",
   "superseded_by": null
  },
  {
   "acronym": "AIP",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "aliases": [
    "agent-identity-protocol-singla",
    "did:aip",
    "AIP-GRANT"
   ],
   "analog": "W3C DID plus a delegated-capability credential chain",
   "collisions": [
    "Agent Interaction Protocol (unrelated proposals sometimes use the same AIP initialism)",
    "did:aip Solana-based DID method in the W3C DID method registry",
    "Agent Identity Protocol (Prakash, draft-prakash-aip / arXiv 2603.24775)"
   ],
   "discovery": {
    "mechanism": "W3C Decentralized Identifier (DID) resolution plus cryptographic delegation-chain verification",
    "path": "none"
   },
   "dispute": {
    "claims": [
     "Author-declared 'Intended Status: Standards Track' does not itself confer IETF consensus or WG adoption; treat as aspirational until a WG picks it up."
    ],
    "summary": "This is a single-author draft with an author-stated Standards Track intent but no WG sponsorship and no located implementation; the acronym AIP is also used elsewhere for unrelated agent-interaction proposals, which is a collision worth flagging to readers."
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.ietf.org/archive/id/draft-singla-agent-identity-protocol-03.txt",
     "claim": "P. Singla (Independent), *Agent Identity Protocol (AIP): Decentralized Identity and Delegation for AI Agents (draft-singla-agent-identity-protocol-03)*, checked 2026-10-31",
     "date": null,
     "quote": "draft-singla-agent-identity-protocol-03 Abstract The Agent Identity Protocol (AIP) defines a decentralized identity, delegation, and authorization framework for autonomous AI agents. / An AIP agent MAY exchange its Credential Token for a scoped access token targeting a specific MCP server or OAuth-protected resource. / The agent sends an RFC 8693 token exchange request: ... POST /v1/oauth/token HTTP/1.1 ... grant_type MUST be urn:ietf:params:oauth:grant-type:token-exchange ... subject_token MUST be a valid AIP Credential Token. / P. Singla Internet-Draft Independent Intended status: Standards Track 10 June 2026 Expires: 12 December 2026 ... draft-singla-agent-identity-protocol-03 / The X-AIP-Version HTTP header MUST carry the full protocol version string, identical to the aip_version JWT claim. For this specification, the value MUST be \"0.3\". This value is the AIP protocol compatibility version defined in Section 20, not the Internet-Draft revision suffix. Implementations MUST reject requests with unsupported_version when the X-AIP-Version header is absent, carries an unsupported value, or does not match the token aip_version claim. / Network Working Group P. Singla Internet-Draft Independent Intended status: Standards Track 10 June 2026 / Intended status: Standards Track / 10 June 2026 Expires: 12 December 2026 Agent Identity Protocol (AIP): Decentralized Identity and / Copyright (c) 2026 IETF Trust and the persons identified as the document authors. / When an agent presents itself to an API, a payment processor, or another agent, there is no standard mechanism to establish: the agent's persistent identity across interactions; the human or organisation on whose authority it acts; the specific actions it is permitted to take; whether it has been compromised or revoked; or whether it has a trustworthy history. / AIP introduces fine-grained capability declarations. A principal can grant email.read without email.send / This document defines the AIP DID method did:aip ... An AID is derived deterministically from the agent's Ed25519 public key ... This derivation is deterministic and cryptographically self-verifying / The maximum delegation depth is a hard constraint of 10. ... The default value of max_delegation_depth MUST NOT exceed 3. When a Principal Token does not explicitly set max_delegation_depth, implementations MUST treat the default as 3. / Out of scope - Prompt injection prevention. AIP is an identity and authorisation protocol. Whether the content an agent processes contains adversarial instructions is an application-layer and model-layer concern outside this specification's scope. / AIP does not replace MCP's tool-access OAuth flow / This document does not define a new HTTP authentication scheme and does not define a new Well-Known URI.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://datatracker.ietf.org/doc/draft-singla-agent-identity-protocol/",
     "claim": "P. Singla (Independent), *draft-singla-agent-identity-protocol — Agent Identity Protocol (AIP): Decentralized Identity and Delegation for AI Agents (IETF Datatracker)*, checked 2026-10-31",
     "date": null,
     "quote": "Active Internet-Draft (individual) | | Author | | Paras Singla | | Last updated | 2026-06-09 / This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. ... Last updated | 2026-06-09 | | RFC stream | | (None) | | Intended RFC status | | (None) / This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://www.ietf.org/archive/id/draft-singla-agent-identity-protocol-03.html",
     "claim": "P. Singla (Independent), *Agent Identity Protocol (AIP): Decentralized Identity and Delegation for AI Agents (draft-singla-agent-identity-protocol-03, IETF Archive HTML)*, checked 2026-10-31",
     "date": null,
     "quote": "information: Paras Singla ¶ Intended usage: COMMON¶ Restrictions on usage: None¶ Author: Paras Singla",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://datatracker.ietf.org/doc/html/draft-singla-agent-identity-protocol-03",
     "claim": "P. Singla (Independent), *Agent Identity Protocol (AIP): Decentralized Identity and Delegation for AI Agents (draft-singla-agent-identity-protocol-03 HTML)*, checked 2026-10-31",
     "date": null,
     "quote": "99] Internet-Draft AIP June 2026 10.4. Delegated Identity Chaining for A2A Workflows Agent-to-agent asynchronous / existing standards. AIP builds on W3C DID, JWT [RFC7519], JWK [RFC7517], DPoP [RFC9449], and / draft-singla-agent-identity-protocol-03 / for DPoP-bound requests. AIP Registries that act as OAuth Authorization Servers publish authorization-server metadata",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://www.w3.org/TR/did-core/",
     "claim": "W3C, *Decentralized Identifiers (DIDs) v1.0*, 2022-07-19",
     "date": "2022-07-19",
     "quote": "Decentralized identifiers (DIDs) are a new type of identifier that",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://raw.githubusercontent.com/ethereum/ERCs/master/ERCS/erc-8004.md",
     "claim": "Marco De Rossi, Davide Crapis, Jordan Ellis, and Erik Reppel, *ERCS/erc-8004.md (Trustless Agents)*, created 2025-08-13; fetched 2026-10-30",
     "date": null,
     "quote": "author: Marco De Rossi (@MarcoMetaMask), Davide Crapis (@dcrapis) <davide@ethereum.org>, Jordan Ellis <jordanellis@google.com>, Erik Reppel <erik.reppel@coinbase.com> discussions-to: https://ethereum-magicians.org/t/erc-8004-trustless-agents/25098 status: Draft type: Standards Track category: ERC created: 2025-08-13 requires: 155, 712, 721, 1271",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://datatracker.ietf.org/doc/draft-narajala-courtney-ansv2/",
     "claim": "Scott Courtney, Vineeth Sai Narajala, Ken Huang, Idan Habler, and Akram Sheriff, *draft-narajala-courtney-ansv2 — Agent Name Service v2 (ANS): A Domain-Anchored Identity Layer for Autonomous AI Agents (IETF Datatracker)*, checked 2026-10-30",
     "date": null,
     "quote": "Document Type Active Internet-Draft (individual) Authors Scott Courtney, Vineeth Sai Narajala, Ken Huang, Idan Habler, Akram Sheriff Last updated 2026-10-26 Replaces draft-narajala-ans RFC stream (None) Intended RFC status (None)",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://www.ietf.org/archive/id/draft-ietf-wimse-workload-creds-03.txt",
     "claim": "B. Campbell, J. Salowey, A. Schwenkschuster, Y. Sheffer, and Y. Rosomakho, *WIMSE Workload Credentials (draft-ietf-wimse-workload-creds-03)*, 30 October 2026; expires 3 May 2027",
     "date": null,
     "quote": "typ: the WIT is explicitly typed, as recommended in Section 3.11 of [I-D.ietf-oauth-rfc8725bis], using the wit+jwt media type. / ABNF [RFC5234] for the value of Workload-Identity-Token header field",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Current : the current protocol version, which is ready for use and may continue to receive backwards compatible changes.",
     "ref": 9
    }
   ],
   "form": "endpoint",
   "governance": "IETF individual draft; sole author, no working group",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against draft-singla-agent-identity-protocol-03's abstract, introduction and document header; flagged limited depth of review and the AIP acronym collision"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "aip",
   "implementation": "none-found",
   "last_verified": "2026-11-12",
   "name": "Agent Identity Protocol (AIP)",
   "native_status": "Internet-Draft, Intended Status: Standards Track (author's stated intent; not adopted by any WG)",
   "origin": {
    "date": "2026-04-16",
    "org": "Paras Singla (Independent)"
   },
   "part_of": null,
   "parties": [
    "agent-agent"
   ],
   "phase": "draft",
   "probe": {
    "method": "n/a",
    "on_absent": "Absence of a site artifact means nothing; AIP is negotiated between agents.",
    "parse": "n/a",
    "path": "n/a (client-side protocol; no fixed origin artifact)"
   },
   "question": "How can an autonomous agent prove a decentralized identity and a verifiable chain of delegated authority from its human or organizational principal?",
   "scope": "general",
   "spec_url": "https://datatracker.ietf.org/doc/html/draft-singla-agent-identity-protocol-03",
   "step": "identify",
   "summary_md": "**Agent Identity Protocol** (`AIP`), `draft-singla-agent-identity-protocol-03`, defines a decentralized identity, delegation, and authorization framework for autonomous AI agents. Document type is Active Internet-Draft (individual). The author is Paras Singla. Last updated `2026-06-09`. An AIP agent MAY exchange its Credential Token for a scoped access token targeting a specific MCP server or OAuth-protected resource. The agent sends an RFC 8693 token exchange request to `POST /v1/oauth/token`. `grant_type` MUST be `urn:ietf:params:oauth:grant-type:token-exchange`, and `subject_token` MUST be a valid AIP Credential Token. `draft-singla-agent-identity-protocol-03` by P. Singla (Independent) is dated 10 June 2026, expires on 12 December 2026, and prints `Intended status: Standards Track` in its draft header. The `X-AIP-Version` HTTP header MUST carry the full protocol version string, identical to the `aip_version` JWT claim. For `draft-singla-agent-identity-protocol-03`, the value MUST be `0.3`. This value is the AIP protocol compatibility version, not the Internet-Draft revision suffix. Implementations MUST reject requests with `unsupported_version` when the header is absent, carries an unsupported value, or does not match the token `aip_version` claim. Because the draft is an individual submission not adopted by any working group or endorsed by the IETF, IETF Datatracker (last updated `2026-06-09`) records `RFC stream` as `(None)` and `Intended RFC status` as `(None)` alongside the author's stated Standards Track intent.",
   "track": "ietf",
   "version": {
    "date": "2026-06-10",
    "label": "draft-singla-agent-identity-protocol-03, published 2026-06-10"
   },
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-singla-agent-identity-protocol"
    }
   ],
   "use_cases": [
    "prove-agent-identity",
    "delegate-user-authority",
    "audit-agent-actions"
   ],
   "audience": [
    "agent-builder",
    "standards-body",
    "platform"
   ],
   "pairs_with": [
    "erc-8004",
    "ans",
    "wimse",
    "mcp"
   ],
   "prerequisites": [],
   "ietf_tracker": {
    "doc": "draft-singla-agent-identity-protocol",
    "rev": "03",
    "state": "active",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-06-10",
    "expires_utc": "2026-12-12",
    "as_of": "2026-10-31",
    "source": "https://datatracker.ietf.org/doc/draft-singla-agent-identity-protocol/",
    "source_label": "per IETF Datatracker"
   },
   "hatnote_md": "This page is about the Agent Identity Protocol (AIP, draft-singla-agent-identity-protocol), an individual Internet-Draft by P. Singla using did:aip decentralized identifiers and capability-grant ceremonies. For S. Prakash's JWT and Biscuit delegation-chain draft sharing the AIP name, see [Agent Identity Protocol: Verifiable Delegation for AI Agent Systems](/protocols/aip-delegation-chain/). For China's national agent interconnection standard series and its accompanying Agent Interconnection Protocol (AIP), see [GB/Z 185 Agent Interconnection](/protocols/gbz-185-agent-interconnection/).",
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "This page is about the Agent Identity Protocol (AIP, draft-singla-agent-identity-protocol), an individual Internet-Draft by P. Singla using did:aip decentralized identifiers and capability-grant ceremonies. For S. Prakash's JWT and Biscuit delegation-chain draft sharing the AIP name, see [Agent Identity Protocol: Verifiable Delegation for AI Agent Systems](/protocols/aip-delegation-chain/). For China's national agent interconnection standard series and its accompanying Agent Interconnection Protocol (AIP), see [GB/Z 185 Agent Interconnection](/protocols/gbz-185-agent-interconnection/). [1]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Agent Identity Protocol** (`AIP`), `draft-singla-agent-identity-protocol-03`, defines a decentralized identity, delegation, and authorization framework for autonomous AI agents. [1] Document type is Active Internet-Draft (individual). The author is Paras Singla. Last updated `2026-06-09`. [2] An AIP agent MAY exchange its Credential Token for a scoped access token targeting a specific MCP server or OAuth-protected resource. [1] The agent sends an RFC 8693 token exchange request to `POST /v1/oauth/token`. `grant_type` MUST be `urn:ietf:params:oauth:grant-type:token-exchange`, and `subject_token` MUST be a valid AIP Credential Token. [1] `draft-singla-agent-identity-protocol-03` by P. Singla (Independent) is dated 10 June 2026, expires on 12 December 2026, and prints `Intended status: Standards Track` in its draft header. [1] The `X-AIP-Version` HTTP header MUST carry the full protocol version string, identical to the `aip_version` JWT claim. For `draft-singla-agent-identity-protocol-03`, the value MUST be `0.3`. This value is the AIP protocol compatibility version, not the Internet-Draft revision suffix. Implementations MUST reject requests with `unsupported_version` when the header is absent, carries an unsupported value, or does not match the token `aip_version` claim. [1] Because the draft is an individual submission not adopted by any working group or endorsed by the IETF, IETF Datatracker (last updated `2026-06-09`) records `RFC stream` as `(None)` and `Intended RFC status` as `(None)` alongside the author's stated Standards Track intent. [2]",
   "v05_identity_sentence_md": "**Agent Identity Protocol** (`AIP`), `draft-singla-agent-identity-protocol-03`, defines a decentralized identity, delegation, and authorization framework for autonomous AI agents. [1] Document type is Active Internet-Draft (individual). The author is Paras Singla. Last updated `2026-06-09`. [2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Identify](/category/identify/) (`identify`)"
    },
    {
     "label": "Form",
     "value_md": "Endpoint (`endpoint`)"
    },
    {
     "label": "Originated by",
     "value_md": "P. Singla (Independent), sole author [1][3]"
    },
    {
     "label": "Governed by",
     "value_md": "No working group; individual Internet-Draft under the \"Network Working Group\" banner with no formal standing in the IETF standards process [2]"
    },
    {
     "label": "Track",
     "value_md": "IETF Internet-Draft (Standards Track) [1]"
    },
    {
     "label": "Status",
     "value_md": "Internet-Draft, Intended Status: Standards Track (author's stated intent; not adopted by any WG) [1][4]"
    },
    {
     "label": "Version",
     "value_md": "`draft-singla-agent-identity-protocol-03`, dated 10 June 2026, expires 12 December 2026; on-wire version header `X-AIP-Version: 0.3` [1][4]"
    },
    {
     "label": "Wire format",
     "value_md": "JSON objects and JWT-based Credential Tokens (JWT, JWK), DPoP proofs, OAuth 2.0 token exchange [4]"
    },
    {
     "label": "Specification",
     "value_md": "https://datatracker.ietf.org/doc/html/draft-singla-agent-identity-protocol-03 [4]"
    },
    {
     "label": "Found at",
     "value_md": "`did:aip` resolution, `AIPRegistry` DID service entry, protected resource metadata; `Authorization: DPoP`, `DPoP`, `X-AIP-Version` [4]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust Legal Provisions (BCP 78) [1]"
    },
    {
     "label": "IETF state",
     "value_md": "`draft-singla-agent-identity-protocol-03` · **Active Internet-Draft** (expires 2026-12-12) · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-singla-agent-identity-protocol/))"
    }
   ],
   "v05_problem_md": "When an agent presents itself to an API, a payment processor, or another agent, there is no standard mechanism to establish: the agent's persistent identity across interactions; the human or organization on whose authority it acts; the specific actions it is permitted to take; whether it has been compromised or revoked; or whether it has a trustworthy history. [1] AIP introduces fine-grained capability declarations. A principal can grant `email.read` without `email.send`. [1] The draft defines the AIP DID method `did:aip`. An AID is derived deterministically from the agent's Ed25519 public key, and that derivation is cryptographically self-verifying. [1] The maximum delegation depth is a hard constraint of 10. The default value of `max_delegation_depth` MUST NOT exceed 3. When a Principal Token does not explicitly set `max_delegation_depth`, implementations MUST treat the default as 3. [1] Prompt injection prevention is out of scope. Whether the content an agent processes contains adversarial instructions is an application-layer and model-layer concern outside the specification's scope. [1] AIP does not replace MCP's tool-access OAuth flow. [1] The draft does not define a new HTTP authentication scheme and does not define a new Well-Known URI. [1]",
   "v05_mechanism_delta_md": "AIP introduces fine-grained capability declarations. A principal can grant `email.read` without `email.send`. [1] The draft defines the AIP DID method `did:aip`. An AID is derived deterministically from the agent's Ed25519 public key, and that derivation is cryptographically self-verifying. [1] The maximum delegation depth is a hard constraint of 10. The default value of `max_delegation_depth` MUST NOT exceed 3. When a Principal Token does not explicitly set `max_delegation_depth`, implementations MUST treat the default as 3. [1]",
   "v05_scope_boundary_md": "Prompt injection prevention is out of scope. Whether the content an agent processes contains adversarial instructions is an application-layer and model-layer concern outside the specification's scope. [1] AIP does not replace MCP's tool-access OAuth flow. [1] The draft does not define a new HTTP authentication scheme and does not define a new Well-Known URI. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "W3C Decentralized Identifiers (DID 1.0) & Verifiable Credentials (VC 2.0)",
      "spec_or_rfc": "W3C DID 1.0",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "The draft defines did:aip from the agent's Ed25519 key, Capability Manifests attenuated to a default depth of 3 and a hard cap of 10, and an AIP-GRANT ceremony that yields DPoP-bound OAuth tokens via RFC 8693. [4][5]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "erc-8004",
      "target_name": "ERC-8004: Trustless Agents",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ERC-8004's agentId is an ERC-721 tokenId on the Identity Registry, while AIP identifies the agent with did:aip derived from an Ed25519 key. [4][6]"
     },
     {
      "target_id": "ans",
      "target_name": "Agent Name Service v2 (ANS)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ANS anchors the name in _ans-badge and _ans TXT records under DNSSEC, while AIP anchors it in a did:aip document and a capability-credential chain. [4][7]"
     },
     {
      "target_id": "wimse",
      "target_name": "Workload Identity in Multi System Environments (WIMSE)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "WIMSE puts a wit+jwt in the Workload-Identity-Token header, while AIP identifies the agent with did:aip and an AIP-GRANT ceremony. [4][8]"
     },
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "The draft's registry issues DPoP-bound OAuth tokens for MCP servers through RFC 8693 token exchange after an AIP-GRANT ceremony, and MCP remains the tool-call protocol. [4][9]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "lws10-authn-ssi-cid",
     "target_name": "LWS 1.0 Authentication Suite: Self-signed Identity using Controlled Identifiers",
     "relation_label": "Peer alternative",
     "delta": "Singla's draft identifies the agent with did:aip derived from an Ed25519 key and an AIP-GRANT ceremony, while this suite checks a self-signed JWT, with sub, iss, and client_id set to the same URI, against the controlled identifier document selected by kid.",
     "item_md": "**[LWS 1.0 Authentication Suite: Self-signed Identity using Controlled Identifiers](/protocols/lws10-authn-ssi-cid/)** (Peer alternative) — Singla's draft identifies the agent with did:aip derived from an Ed25519 key and an AIP-GRANT ceremony, while this suite checks a self-signed JWT, with sub, iss, and client_id set to the same URI, against the controlled identifier document selected by kid."
    },
    {
     "item_md": "**[Identify protocols](/category/identify/)** — Category index for `identify` standards."
    }
   ],
   "v05_compiled_md": "---\nid: aip\ntitle: \"Agent Identity Protocol (AIP)\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: identify\nform: endpoint\nwire_archetype: identity_auth_crypto\nspec_url: https://datatracker.ietf.org/doc/html/draft-singla-agent-identity-protocol-03\nlast_checked: 2026-11-12\n---\n\n# Agent Identity Protocol (AIP)\n\n**Category:** [Identify](/category/identify/) (`identify`) · **Form:** Endpoint (`endpoint`) · **Last checked:** 2026-11-12\n\n> *This page is about the Agent Identity Protocol (AIP, draft-singla-agent-identity-protocol), an individual Internet-Draft by P. Singla using did:aip decentralized identifiers and capability-grant ceremonies. For S. Prakash's JWT and Biscuit delegation-chain draft sharing the AIP name, see [Agent Identity Protocol: Verifiable Delegation for AI Agent Systems](/protocols/aip-delegation-chain/). For China's national agent interconnection standard series and its accompanying Agent Interconnection Protocol (AIP), see [GB/Z 185 Agent Interconnection](/protocols/gbz-185-agent-interconnection/). [1]*\n\n**Agent Identity Protocol** (`AIP`), `draft-singla-agent-identity-protocol-03`, defines a decentralized identity, delegation, and authorization framework for autonomous AI agents. [1] Document type is Active Internet-Draft (individual). The author is Paras Singla. Last updated `2026-06-09`. [2] An AIP agent MAY exchange its Credential Token for a scoped access token targeting a specific MCP server or OAuth-protected resource. [1] The agent sends an RFC 8693 token exchange request to `POST /v1/oauth/token`. `grant_type` MUST be `urn:ietf:params:oauth:grant-type:token-exchange`, and `subject_token` MUST be a valid AIP Credential Token. [1] `draft-singla-agent-identity-protocol-03` by P. Singla (Independent) is dated 10 June 2026, expires on 12 December 2026, and prints `Intended status: Standards Track` in its draft header. [1] The `X-AIP-Version` HTTP header MUST carry the full protocol version string, identical to the `aip_version` JWT claim. For `draft-singla-agent-identity-protocol-03`, the value MUST be `0.3`. This value is the AIP protocol compatibility version, not the Internet-Draft revision suffix. Implementations MUST reject requests with `unsupported_version` when the header is absent, carries an unsupported value, or does not match the token `aip_version` claim. [1] Because the draft is an individual submission not adopted by any working group or endorsed by the IETF, IETF Datatracker (last updated `2026-06-09`) records `RFC stream` as `(None)` and `Intended RFC status` as `(None)` alongside the author's stated Standards Track intent. [2]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Identify](/category/identify/) (`identify`) |\n| **Form** | Endpoint (`endpoint`) |\n| **Originated by** | P. Singla (Independent), sole author [1][3] |\n| **Governed by** | No working group; individual Internet-Draft under the \"Network Working Group\" banner with no formal standing in the IETF standards process [2] |\n| **Track** | IETF Internet-Draft (Standards Track) [1] |\n| **Status** | Internet-Draft, Intended Status: Standards Track (author's stated intent; not adopted by any WG) [1][4] |\n| **Version** | `draft-singla-agent-identity-protocol-03`, dated 10 June 2026, expires 12 December 2026; on-wire version header `X-AIP-Version: 0.3` [1][4] |\n| **Wire format** | JSON objects and JWT-based Credential Tokens (JWT, JWK), DPoP proofs, OAuth 2.0 token exchange [4] |\n| **Specification** | https://datatracker.ietf.org/doc/html/draft-singla-agent-identity-protocol-03 [4] |\n| **Found at** | `did:aip` resolution, `AIPRegistry` DID service entry, protected resource metadata; `Authorization: DPoP`, `DPoP`, `X-AIP-Version` [4] |\n| **Licence** | IETF Trust Legal Provisions (BCP 78) [1] |\n| **IETF state** | `draft-singla-agent-identity-protocol-03` · **Active Internet-Draft** (expires 2026-12-12) · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-singla-agent-identity-protocol/)) |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nWhen an agent presents itself to an API, a payment processor, or another agent, there is no standard mechanism to establish: the agent's persistent identity across interactions; the human or organization on whose authority it acts; the specific actions it is permitted to take; whether it has been compromised or revoked; or whether it has a trustworthy history. [1] AIP introduces fine-grained capability declarations. A principal can grant `email.read` without `email.send`. [1] The draft defines the AIP DID method `did:aip`. An AID is derived deterministically from the agent's Ed25519 public key, and that derivation is cryptographically self-verifying. [1] The maximum delegation depth is a hard constraint of 10. The default value of `max_delegation_depth` MUST NOT exceed 3. When a Principal Token does not explicitly set `max_delegation_depth`, implementations MUST treat the default as 3. [1] Prompt injection prevention is out of scope. Whether the content an agent processes contains adversarial instructions is an application-layer and model-layer concern outside the specification's scope. [1] AIP does not replace MCP's tool-access OAuth flow. [1] The draft does not define a new HTTP authentication scheme and does not define a new Well-Known URI. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **W3C Decentralized Identifiers (DID 1.0) & Verifiable Credentials (VC 2.0)** | `W3C DID 1.0` | Profiles classic standard | The draft defines did:aip from the agent's Ed25519 key, Capability Manifests attenuated to a default depth of 3 and a hard cap of 10, and an AIP-GRANT ceremony that yields DPoP-bound OAuth tokens via RFC 8693. [4][5] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[ERC-8004: Trustless Agents](/protocols/erc-8004/)** | Peer alternative | ERC-8004's agentId is an ERC-721 tokenId on the Identity Registry, while AIP identifies the agent with did:aip derived from an Ed25519 key. [4][6] |\n| **[Agent Name Service v2 (ANS)](/protocols/ans/)** | Peer alternative | ANS anchors the name in _ans-badge and _ans TXT records under DNSSEC, while AIP anchors it in a did:aip document and a capability-credential chain. [4][7] |\n| **[Workload Identity in Multi System Environments (WIMSE)](/protocols/wimse/)** | Peer alternative | WIMSE puts a wit+jwt in the Workload-Identity-Token header, while AIP identifies the agent with did:aip and an AIP-GRANT ceremony. [4][8] |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | The draft's registry issues DPoP-bound OAuth tokens for MCP servers through RFC 8693 token exchange after an AIP-GRANT ceremony, and MCP remains the tool-call protocol. [4][9] |\n\n---\n\n## See also\n\n- **[LWS 1.0 Authentication Suite: Self-signed Identity using Controlled Identifiers](/protocols/lws10-authn-ssi-cid/)** *(Peer alternative)* — Singla's draft identifies the agent with did:aip derived from an Ed25519 key and an AIP-GRANT ceremony, while this suite checks a self-signed JWT, with sub, iss, and client_id set to the same URI, against the controlled identifier document selected by kid.\n- **Category:** [Identify protocols](/category/identify/)\n\n---\n\n## References\n\n1. P. Singla (Independent), *Agent Identity Protocol (AIP): Decentralized Identity and Delegation for AI Agents (draft-singla-agent-identity-protocol-03)* (checked 2026-10-31) — <https://www.ietf.org/archive/id/draft-singla-agent-identity-protocol-03.txt>\n2. P. Singla (Independent), *draft-singla-agent-identity-protocol — Agent Identity Protocol (AIP): Decentralized Identity and Delegation for AI Agents (IETF Datatracker)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/draft-singla-agent-identity-protocol/>\n3. P. Singla (Independent), *Agent Identity Protocol (AIP): Decentralized Identity and Delegation for AI Agents (draft-singla-agent-identity-protocol-03, IETF Archive HTML)* (checked 2026-10-31) — <https://www.ietf.org/archive/id/draft-singla-agent-identity-protocol-03.html>\n4. P. Singla (Independent), *Agent Identity Protocol (AIP): Decentralized Identity and Delegation for AI Agents (draft-singla-agent-identity-protocol-03 HTML)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/html/draft-singla-agent-identity-protocol-03>\n5. W3C, *Decentralized Identifiers (DIDs) v1.0* (2022-07-19) — <https://www.w3.org/TR/did-core/>\n6. Marco De Rossi, Davide Crapis, Jordan Ellis, and Erik Reppel, *ERCS/erc-8004.md (Trustless Agents)* (created 2025-08-13; fetched 2026-10-30) — <https://raw.githubusercontent.com/ethereum/ERCs/master/ERCS/erc-8004.md>\n7. Scott Courtney, Vineeth Sai Narajala, Ken Huang, Idan Habler, and Akram Sheriff, *draft-narajala-courtney-ansv2 — Agent Name Service v2 (ANS): A Domain-Anchored Identity Layer for Autonomous AI Agents (IETF Datatracker)* (checked 2026-10-30) — <https://datatracker.ietf.org/doc/draft-narajala-courtney-ansv2/>\n8. B. Campbell, J. Salowey, A. Schwenkschuster, Y. Sheffer, and Y. Rosomakho, *WIMSE Workload Credentials (draft-ietf-wimse-workload-creds-03)* (30 October 2026; expires 3 May 2027) — <https://www.ietf.org/archive/id/draft-ietf-wimse-workload-creds-03.txt>\n9. Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation* (2026-07-28) — <https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "AGTP",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "aliases": [],
   "analog": "none",
   "collisions": [],
   "discovery": {
    "mechanism": "advisory HTTPS bootstrap at /.well-known/agtp, plus agtp:// URI forms",
    "path": "https://{domain}/.well-known/agtp"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.ietf.org/archive/id/draft-hood-independent-agtp-10.txt",
     "claim": "Chris Hood, Nomotic, Inc., *Agent Transfer Protocol (AGTP) (draft-hood-independent-agtp-10)*, checked 2026-11-07",
     "date": null,
     "quote": "Independent Submission ... C. Hood ... Nomotic, Inc. ... draft-hood-independent-agtp-10 ... This document defines the Agent Transfer Protocol (AGTP): a transfer protocol for AI agent traffic. / This document defines the Agent Transfer Protocol (AGTP): a transfer protocol for AI agent traffic. AGTP carries agent identity, authority, delegation, and attribution as protocol elements of every exchange, on an eighteen-method floor of intent-named methods, over TCP/TLS or QUIC on IANA-assigned port 4480 and the IANA-registered agtp:// URI scheme. / 13.6. URI Scheme Registration The agtp:// URI scheme is registered per [RFC7595]. Full registration template is documented in Section 7.1.13. / AGTP requests and responses *MUST* be framed by an explicit Content- ... Length header. Content-Length is the sole signal of request and response completion. / The AGTP wire format puts the protocol version and method on the request line (AGTP/1.0 METHOD PATH ... and the status code on the response line (AGTP/1.0 STATUS STATUS-TEXT ... Headers *MUST NOT* carry information already present on those lines / The following examples use a human-readable pseudo-wire format with HTTP-style headers followed by a JSON body. The Content-Type for all AGTP message bodies is application/vnd.agtp+json. / AGTP requests and responses *MUST* be framed by an explicit Content- Length header. Content-Length is the sole signal of request and response completion. / Intended status: Informational ... 30 October 2026 ... Expires: 3 May 2027 ... draft-hood-independent-agtp-10 ... This Internet-Draft will expire on 3 May 2027. / Independent Submission ... C. Hood ... Nomotic, Inc. ... Chris Hood ... Nomotic, Inc. / Independent Submission ... Intended status: Informational / Intended status: Informational / Intended status: Informational ... 30 October 2026 ... Expires: 3 May 2027 ... draft-hood-independent-agtp-10 ... work in progress. ... This Internet-Draft will expire on 3 May 2027. / over TCP/TLS or QUIC on IANA-assigned port 4480 and the IANA-registered agtp:// URI scheme. ... service names agtp (TCP/TLS) and agtp-quic (QUIC). ... Content-Length is the sole signal of request and response completion. ... The AGTP wire format puts the protocol version and method on the request line (AGTP/1.0 METHOD PATH ... The Content-Type for all AGTP message bodies is application/vnd.agtp+json. / Agent Transfer Protocol (AGTP) ... draft-hood-independent-agtp-10 / Form 1a embeds an explicit host alongside the canonical Agent-ID: ... agtp://7f3a9c2d...e1f8b0a4@agents.acme.com ... defaults to 4480 ... https://{domain}/.well-known/agtp / Independent Submission ... 30 October 2026 ... Expires: 3 May 2027 ... draft-hood-independent-agtp-10 ... This Internet-Draft will expire on 3 May 2027. / Copyright (c) 2026 IETF Trust and the persons identified as the document authors. / AI agents generate intent-driven, structured traffic that is functionally invisible to the infrastructure it traverses. This traffic flows through HTTP alongside human traffic with no protocol- ... level differentiation. / HTTP's method vocabulary was designed to describe operations on resources; purposeful action has no place in it. / AGTP response: a dedicated protocol environment for agent traffic. Infrastructure can distinguish, route, monitor, and govern agent traffic natively. / AGTP response: a vocabulary of agent-native methods that express intent at the protocol level. / Version 10 adds per-request proof of possession, so that a verified identity document and a live sender are bound by signature / The method vocabulary beyond the floor, the path grammar, and the endpoint contract are specified in [AGTP-METHODS]; runtime negotiation of endpoints is specified in [AGTP-RCNS]; the agent identity document in [AGTP-IDDOC]; transport bindings in [AGTP-BINDINGS]. / The bootstrap is advisory; absence of a .well-known/agtp document is no indication that the domain has no AGTP presence, only that the domain has chosen against advertising one through this mechanism. A .well-known/agtp document returning HTTP 404 is a positive declaration that the domain operates no AGTP namespace.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://datatracker.ietf.org/doc/draft-hood-independent-agtp/",
     "claim": "C. Hood (Nomotic, Inc.), *draft-hood-independent-agtp — Agent Transfer Protocol (AGTP) (IETF Datatracker)*, checked 2026-10-31",
     "date": null,
     "quote": "draft-hood-independent-agtp-10 ... This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. ... Active Internet-Draft (individual) / Active Internet-Draft (individual) / draft-hood-independent-agtp-10 ... Last updated ... 2026-10-30 ... Replaces ... draft-hood-independent-atp ... 2026-10-30 ... New version available: draft-hood-independent-agtp-10.txt / This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. ... Active Internet-Draft (individual) / draft-hood-independent-agtp-10 ... Active Internet-Draft (individual)",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://www.rfc-editor.org/rfc/rfc9110.html",
     "claim": "R. Fielding, Ed., M. Nottingham, Ed., and J. Reschke, Ed., *RFC 9110: HTTP Semantics*, June 2022",
     "date": null,
     "quote": "<meta content=\"Common,Latin\" name=\"scripts\">",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://www.rfc-editor.org/rfc/rfc8615.html",
     "claim": "M. Nottingham, *RFC 8615: Well-Known Uniform Resource Identifiers (URIs)*, May 2019",
     "date": null,
     "quote": "This memo defines a path prefix for \"well-known locations\",",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Current : the current protocol version, which is ready for use and may continue to receive backwards compatible changes.",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://aaif.io/blog/a2a-joins-aaif",
     "claim": "Agentic AI Foundation, *A2A joins AAIF's open agentic stack*, published 2026-08-17; modified 2026-09-24",
     "date": null,
     "quote": "A2A v1.0, the first stable specification, shipped in March 2026.",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/README.md",
     "claim": "Agent Network Protocol community, *Agent Network Protocol (ANP) README*, checked 2026-10-30",
     "date": null,
     "quote": "the AgentConnect repository: - https://github.com/agent-network-protocol/AgentConnect AgentConnect focuses on practical SDK support for did:wba, authentication,",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://raw.githubusercontent.com/i-am-bee/acp/main/README.md",
     "claim": "BeeAI project (i-am-bee), *Agent Communication Protocol README*, fetched 2026-10-31",
     "date": null,
     "quote": "ACP is now part of A2A under the Linux Foundation!",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://github.com/agentic-commerce-protocol/agentic-commerce-protocol/blob/main/README.md",
     "claim": "OpenAI and Stripe, *Agentic Commerce Protocol README*, checked 2026-10-28",
     "date": null,
     "quote": "The specification is maintained by OpenAI and Stripe and is currently in beta.",
     "ref": 9
    }
   ],
   "form": "endpoint",
   "governance": "IETF Independent Submission (individual Internet-Draft); not endorsed by the IETF and no formal standing in the IETF standards process",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against IETF datatracker and draft-hood-independent-agtp-09 (updated spec_url from -04 to current -09, dated 2026-06-28); no implementations found"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "agtp",
   "implementation": "none-found",
   "last_verified": "2026-11-12",
   "name": "Agent Transfer Protocol",
   "native_status": "Internet-Draft (work in progress); Independent Submission; intended status Informational; expires 3 May 2027",
   "origin": {
    "date": "2026-03-19",
    "org": "Nomotic, Inc. (Chris Hood, independent submission)"
   },
   "part_of": null,
   "parties": [
    "agent-agent",
    "agent-site"
   ],
   "phase": "draft",
   "probe": {
    "method": "none",
    "on_absent": "not applicable — no implementation of AGTP has been located anywhere, so there is nothing to probe for absence against; see summary_md",
    "parse": "not applicable: there is no HTTP response body or header to parse because AGTP does not run over HTTP",
    "path": "none — AGTP is a non-HTTP application-layer protocol (QUIC preferred, TCP/TLS fallback) with its own method vocabulary (QUERY, SUMMARIZE, BOOK, SCHEDULE, LEARN, DELEGATE, COLLABORATE, CONFIRM, ESCALATE, NOTIFY, DESCRIBE, SUSPEND); it defines no well-known HTTP path or endpoint that a curl-style probe could hit"
   },
   "question": "How can AI agent traffic be identified, authenticated, and governed as a distinct application-layer protocol rather than blending into ordinary HTTP?",
   "scope": "general",
   "spec_url": "https://www.ietf.org/archive/id/draft-hood-independent-agtp-10.txt",
   "step": "coordinate",
   "summary_md": "**Agent Transfer Protocol** (**AGTP**, `draft-hood-independent-agtp-10`) is an Independent Submission by C. Hood of Nomotic, Inc. that defines a transfer protocol for AI agent traffic. Datatracker lists it as an Active Internet-Draft (individual). The draft is not endorsed by the IETF and has no formal standing in the IETF standards process. AGTP carries agent identity, authority, delegation, and attribution as protocol elements of every exchange, on an eighteen-method floor of intent-named methods, over TCP/TLS or QUIC on IANA-assigned port 4480 and the `agtp://` URI scheme (proposed for IANA registration per RFC 7595 in Section 13.6 of the draft, not yet registered). Requests and responses are framed by an explicit `Content-Length` header. `Content-Length` is the sole signal of request and response completion. The request line is `AGTP/1.0` METHOD PATH and the response line is `AGTP/1.0` STATUS STATUS-TEXT. Headers must not carry information already present on those lines. Appendix D illustrates a human-readable pseudo-wire with HTTP-style headers and an `application/vnd.agtp+json` JSON body, omitting the request `PATH` token and `Content-Length` framing header required on the wire by Sections 6.4.1 and 6.5. `draft-hood-independent-agtp-10` is dated 30 October 2026, intended status Informational, and expires on 3 May 2027. Datatracker last updated the series on `2026-10-30` and records revision 10 as `draft-hood-independent-agtp-10`, which replaces `draft-hood-independent-atp`.",
   "track": "ietf",
   "version": {
    "date": "2026-10-30",
    "label": "draft-hood-independent-agtp-10"
   },
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-hood-independent-agtp"
    }
   ],
   "use_cases": [
    "agent-to-agent-messaging",
    "prove-agent-identity",
    "describe-agent-capabilities"
   ],
   "audience": [
    "standards-body",
    "agent-builder",
    "platform"
   ],
   "pairs_with": [
    "mcp",
    "a2a",
    "anp",
    "agent-communication-protocol",
    "agentic-commerce-protocol"
   ],
   "prerequisites": [],
   "ietf_tracker": {
    "doc": "draft-hood-independent-agtp",
    "rev": "10",
    "state": "active",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-10-30",
    "expires_utc": "2027-05-03",
    "as_of": "2026-11-08",
    "source": "https://datatracker.ietf.org/doc/draft-hood-independent-agtp/",
    "source_label": "per IETF Datatracker"
   },
   "hatnote_md": "",
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "harnesses_rpc_ui",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": null,
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Agent Transfer Protocol** (**AGTP**, `draft-hood-independent-agtp-10`) is an Independent Submission by C. Hood of Nomotic, Inc. that defines a transfer protocol for AI agent traffic. [1] Datatracker lists it as an Active Internet-Draft (individual). The draft is not endorsed by the IETF and has no formal standing in the IETF standards process. [2] AGTP carries agent identity, authority, delegation, and attribution as protocol elements of every exchange, on an eighteen-method floor of intent-named methods, over TCP/TLS or QUIC on IANA-assigned port 4480 and the `agtp://` URI scheme (proposed for IANA registration per RFC 7595 in Section 13.6 of the draft, not yet registered). [1][2] Requests and responses are framed by an explicit `Content-Length` header. `Content-Length` is the sole signal of request and response completion. [1] The request line is `AGTP/1.0` METHOD PATH and the response line is `AGTP/1.0` STATUS STATUS-TEXT. Headers must not carry information already present on those lines. [1] Appendix D illustrates a human-readable pseudo-wire with HTTP-style headers and an `application/vnd.agtp+json` JSON body, omitting the request `PATH` token and `Content-Length` framing header required on the wire by Sections 6.4.1 and 6.5. [1] `draft-hood-independent-agtp-10` is dated 30 October 2026, intended status Informational, and expires on 3 May 2027. [1] Datatracker last updated the series on `2026-10-30` and records revision 10 as `draft-hood-independent-agtp-10`, which replaces `draft-hood-independent-atp`. [2]",
   "v05_identity_sentence_md": "**Agent Transfer Protocol** (**AGTP**, `draft-hood-independent-agtp-10`) is an Independent Submission by C. Hood of Nomotic, Inc. that defines a transfer protocol for AI agent traffic. [1] Datatracker lists it as an Active Internet-Draft (individual). The draft is not endorsed by the IETF and has no formal standing in the IETF standards process. [2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Coordinate](/category/coordinate/) (`coordinate`)"
    },
    {
     "label": "Form",
     "value_md": "Endpoint (`endpoint`)"
    },
    {
     "label": "Originated by",
     "value_md": "Chris Hood, Nomotic, Inc. (Independent Submission) [1]"
    },
    {
     "label": "Governed by",
     "value_md": "Independent Submission; intended status Informational. Active Internet-Draft (individual); the draft is not endorsed by the IETF and has no formal standing in the IETF standards process. [1][2]"
    },
    {
     "label": "Track",
     "value_md": "IETF Internet-Draft (Informational) [1]"
    },
    {
     "label": "Status",
     "value_md": "Internet-Draft (work in progress); Independent Submission; intended status Informational; expires 3 May 2027 [1]"
    },
    {
     "label": "Version",
     "value_md": "`draft-hood-independent-agtp-10` (30 October 2026; expires 3 May 2027). Datatracker last updated 2026-10-30, revision 10. [1][2]"
    },
    {
     "label": "Wire format",
     "value_md": "Request line `AGTP/1.0`, `Content-Length` framing, body `application/vnd.agtp+json`; TCP/TLS (`agtp`) and QUIC (`agtp-quic`) on port 4480 [1]"
    },
    {
     "label": "Specification",
     "value_md": "[draft-hood-independent-agtp-10.txt](https://www.ietf.org/archive/id/draft-hood-independent-agtp-10.txt) [1]"
    },
    {
     "label": "Found at",
     "value_md": "`agtp://` Form 1a with an explicit host; default port 4480; advisory `https://{domain}/.well-known/agtp` [1]"
    },
    {
     "label": "IETF tracker",
     "value_md": "[draft-hood-independent-agtp-10](https://datatracker.ietf.org/doc/draft-hood-independent-agtp/) (Active Internet-Draft, Independent Submission; published 30 October 2026; expires 3 May 2027) [1][2]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust Legal Provisions (BCP 78) [1]"
    }
   ],
   "v05_problem_md": "AI agents generate intent-driven, structured traffic that is functionally invisible to the infrastructure it traverses. This traffic flows through HTTP alongside human traffic with no protocol-level differentiation. [1] HTTP's method vocabulary was designed to describe operations on resources; purposeful action has no place in it. [1] AGTP response: a dedicated protocol environment for agent traffic. Infrastructure can distinguish, route, monitor, and govern agent traffic natively. [1] AGTP response: a vocabulary of agent-native methods that express intent at the protocol level. [1] Version 10 adds per-request proof of possession, so that a verified identity document and a live sender are bound by signature. [1] The method vocabulary beyond the floor, the path grammar, and the endpoint contract are specified in AGTP-METHODS. Runtime negotiation of endpoints is specified in AGTP-RCNS. The agent identity document is specified in AGTP-IDDOC, and transport bindings in AGTP-BINDINGS. [1] In Section 7.1.14, the draft states that the `.well-known/agtp` bootstrap is advisory and its absence is no indication that a domain has no AGTP presence, while the immediately following paragraph states that an HTTP `404` response from `.well-known/agtp` is a positive declaration that the domain operates no AGTP namespace. [1]",
   "v05_mechanism_delta_md": "AGTP response: a dedicated protocol environment for agent traffic. Infrastructure can distinguish, route, monitor, and govern agent traffic natively. [1] AGTP response: a vocabulary of agent-native methods that express intent at the protocol level. [1] Version 10 adds per-request proof of possession, so that a verified identity document and a live sender are bound by signature. [1]",
   "v05_scope_boundary_md": "The method vocabulary beyond the floor, the path grammar, and the endpoint contract are specified in AGTP-METHODS. Runtime negotiation of endpoints is specified in AGTP-RCNS. The agent identity document is specified in AGTP-IDDOC, and transport bindings in AGTP-BINDINGS. [1] In Section 7.1.14, the draft states that the `.well-known/agtp` bootstrap is advisory and its absence is no indication that a domain has no AGTP presence, while the immediately following paragraph states that an HTTP `404` response from `.well-known/agtp` is a positive declaration that the domain operates no AGTP namespace. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "HTTP Semantics (RFC 9110)",
      "spec_or_rfc": "RFC 9110",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "AGTP draft-hood-independent-agtp-10 proposes a non-HTTP application protocol over TCP/TLS (agtp) or QUIC (agtp-quic) on port 4480 and defines an eighteen-method embedded floor across cognitive (QUERY, DISCOVER, DESCRIBE, INSPECT, SUMMARIZE, PLAN, PROPOSE), mechanics (EXECUTE, DELEGATE, ESCALATE, CONFIRM, SUSPEND, NOTIFY), and lifecycle (ACTIVATE, DEACTIVATE, REINSTATE, REVOKE, DEPRECATE) groups rather than HTTP methods on http or https URLs. [1][3]"
     },
     {
      "name": "Well-Known URIs (RFC 8615)",
      "spec_or_rfc": "RFC 8615",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "AGTP draft-hood-independent-agtp-10 uses _agtp._tcp DNS SRV records and Form 1a explicit-host URIs as primary resolution, while permitting an optional advisory https://{domain}/.well-known/agtp bootstrap document. [1][4]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "AGTP draft-10 frames MCP as an Agent Group Messaging Protocol (AGMP) layer that can be carried inside AGTP's eighteen-method floor (such as EXECUTE carrying an MCP tool invocation or QUERY and DELEGATE) over TCP/TLS or QUIC on port 4480, while MCP's own specification defines stdio and Streamable HTTP transports. [1][5]"
     },
     {
      "target_id": "a2a",
      "target_name": "Agent2Agent Protocol (A2A)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "AGTP draft-10 frames A2A as an AGMP coordination layer above AGTP transport and resolves agents via _agtp._tcp DNS SRV records or optional advisory /.well-known/agtp bootstrap, while A2A delegates tasks over JSON-RPC 2.0, gRPC, or HTTP+JSON via /.well-known/agent-card.json. [1][6]"
     },
     {
      "target_id": "anp",
      "target_name": "Agent Network Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "AGTP draft-10 frames ANP as an AGMP layer and resolves agents via agtp:// URIs, _agtp._tcp DNS SRV records, or advisory /.well-known/agtp, while ANP publishes /.well-known/agent-descriptions and requires RFC 9421 Signature-Input and Signature headers in ANP-02. [1][7]"
     },
     {
      "target_id": "agent-communication-protocol",
      "target_name": "Agent Communication Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "AGTP draft-10 frames ACP as an AGMP layer above AGTP's transport-level semantic methods and agent identity, while IBM ACP's archived OpenAPI surface was GET /agents and POST /runs before the repository was archived into A2A on 2025-08-27. [1][8]"
     },
     {
      "target_id": "agentic-commerce-protocol",
      "target_name": "Agentic Commerce Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "AGTP draft-10 defines governance and authority headers alongside its eighteen-method embedded floor (including EXECUTE, DELEGATE, and CONFIRM), while the Agentic Commerce Protocol is the separate OpenAI and Stripe checkout protocol. [1][9]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Coordinate protocols](/category/coordinate/)** — Category index for `coordinate` standards."
    }
   ],
   "v05_compiled_md": "---\nid: agtp\ntitle: \"Agent Transfer Protocol\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: coordinate\nform: endpoint\nwire_archetype: harnesses_rpc_ui\nspec_url: https://www.ietf.org/archive/id/draft-hood-independent-agtp-10.txt\nlast_checked: 2026-11-12\n---\n\n# Agent Transfer Protocol\n\n**Category:** [Coordinate](/category/coordinate/) (`coordinate`) · **Form:** Endpoint (`endpoint`) · **Last checked:** 2026-11-12\n\n**Agent Transfer Protocol** (**AGTP**, `draft-hood-independent-agtp-10`) is an Independent Submission by C. Hood of Nomotic, Inc. that defines a transfer protocol for AI agent traffic. [1] Datatracker lists it as an Active Internet-Draft (individual). The draft is not endorsed by the IETF and has no formal standing in the IETF standards process. [2] AGTP carries agent identity, authority, delegation, and attribution as protocol elements of every exchange, on an eighteen-method floor of intent-named methods, over TCP/TLS or QUIC on IANA-assigned port 4480 and the `agtp://` URI scheme (proposed for IANA registration per RFC 7595 in Section 13.6 of the draft, not yet registered). [1][2] Requests and responses are framed by an explicit `Content-Length` header. `Content-Length` is the sole signal of request and response completion. [1] The request line is `AGTP/1.0` METHOD PATH and the response line is `AGTP/1.0` STATUS STATUS-TEXT. Headers must not carry information already present on those lines. [1] Appendix D illustrates a human-readable pseudo-wire with HTTP-style headers and an `application/vnd.agtp+json` JSON body, omitting the request `PATH` token and `Content-Length` framing header required on the wire by Sections 6.4.1 and 6.5. [1] `draft-hood-independent-agtp-10` is dated 30 October 2026, intended status Informational, and expires on 3 May 2027. [1] Datatracker last updated the series on `2026-10-30` and records revision 10 as `draft-hood-independent-agtp-10`, which replaces `draft-hood-independent-atp`. [2]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Coordinate](/category/coordinate/) (`coordinate`) |\n| **Form** | Endpoint (`endpoint`) |\n| **Originated by** | Chris Hood, Nomotic, Inc. (Independent Submission) [1] |\n| **Governed by** | Independent Submission; intended status Informational. Active Internet-Draft (individual); the draft is not endorsed by the IETF and has no formal standing in the IETF standards process. [1][2] |\n| **Track** | IETF Internet-Draft (Informational) [1] |\n| **Status** | Internet-Draft (work in progress); Independent Submission; intended status Informational; expires 3 May 2027 [1] |\n| **Version** | `draft-hood-independent-agtp-10` (30 October 2026; expires 3 May 2027). Datatracker last updated 2026-10-30, revision 10. [1][2] |\n| **Wire format** | Request line `AGTP/1.0`, `Content-Length` framing, body `application/vnd.agtp+json`; TCP/TLS (`agtp`) and QUIC (`agtp-quic`) on port 4480 [1] |\n| **Specification** | [draft-hood-independent-agtp-10.txt](https://www.ietf.org/archive/id/draft-hood-independent-agtp-10.txt) [1] |\n| **Found at** | `agtp://` Form 1a with an explicit host; default port 4480; advisory `https://{domain}/.well-known/agtp` [1] |\n| **IETF tracker** | [draft-hood-independent-agtp-10](https://datatracker.ietf.org/doc/draft-hood-independent-agtp/) (Active Internet-Draft, Independent Submission; published 30 October 2026; expires 3 May 2027) [1][2] |\n| **Licence** | IETF Trust Legal Provisions (BCP 78) [1] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nAI agents generate intent-driven, structured traffic that is functionally invisible to the infrastructure it traverses. This traffic flows through HTTP alongside human traffic with no protocol-level differentiation. [1] HTTP's method vocabulary was designed to describe operations on resources; purposeful action has no place in it. [1] AGTP response: a dedicated protocol environment for agent traffic. Infrastructure can distinguish, route, monitor, and govern agent traffic natively. [1] AGTP response: a vocabulary of agent-native methods that express intent at the protocol level. [1] Version 10 adds per-request proof of possession, so that a verified identity document and a live sender are bound by signature. [1] The method vocabulary beyond the floor, the path grammar, and the endpoint contract are specified in AGTP-METHODS. Runtime negotiation of endpoints is specified in AGTP-RCNS. The agent identity document is specified in AGTP-IDDOC, and transport bindings in AGTP-BINDINGS. [1] In Section 7.1.14, the draft states that the `.well-known/agtp` bootstrap is advisory and its absence is no indication that a domain has no AGTP presence, while the immediately following paragraph states that an HTTP `404` response from `.well-known/agtp` is a positive declaration that the domain operates no AGTP namespace. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **HTTP Semantics (RFC 9110)** | `RFC 9110` | Analogous to classic standard | AGTP draft-hood-independent-agtp-10 proposes a non-HTTP application protocol over TCP/TLS (agtp) or QUIC (agtp-quic) on port 4480 and defines an eighteen-method embedded floor across cognitive (QUERY, DISCOVER, DESCRIBE, INSPECT, SUMMARIZE, PLAN, PROPOSE), mechanics (EXECUTE, DELEGATE, ESCALATE, CONFIRM, SUSPEND, NOTIFY), and lifecycle (ACTIVATE, DEACTIVATE, REINSTATE, REVOKE, DEPRECATE) groups rather than HTTP methods on http or https URLs. [1][3] |\n| **Well-Known URIs (RFC 8615)** | `RFC 8615` | Analogous to classic standard | AGTP draft-hood-independent-agtp-10 uses _agtp._tcp DNS SRV records and Form 1a explicit-host URIs as primary resolution, while permitting an optional advisory https://{domain}/.well-known/agtp bootstrap document. [1][4] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | AGTP draft-10 frames MCP as an Agent Group Messaging Protocol (AGMP) layer that can be carried inside AGTP's eighteen-method floor (such as EXECUTE carrying an MCP tool invocation or QUERY and DELEGATE) over TCP/TLS or QUIC on port 4480, while MCP's own specification defines stdio and Streamable HTTP transports. [1][5] |\n| **[Agent2Agent Protocol (A2A)](/protocols/a2a/)** | Complements | AGTP draft-10 frames A2A as an AGMP coordination layer above AGTP transport and resolves agents via _agtp._tcp DNS SRV records or optional advisory /.well-known/agtp bootstrap, while A2A delegates tasks over JSON-RPC 2.0, gRPC, or HTTP+JSON via /.well-known/agent-card.json. [1][6] |\n| **[Agent Network Protocol](/protocols/anp/)** | Complements | AGTP draft-10 frames ANP as an AGMP layer and resolves agents via agtp:// URIs, _agtp._tcp DNS SRV records, or advisory /.well-known/agtp, while ANP publishes /.well-known/agent-descriptions and requires RFC 9421 Signature-Input and Signature headers in ANP-02. [1][7] |\n| **[Agent Communication Protocol](/protocols/agent-communication-protocol/)** | Complements | AGTP draft-10 frames ACP as an AGMP layer above AGTP's transport-level semantic methods and agent identity, while IBM ACP's archived OpenAPI surface was GET /agents and POST /runs before the repository was archived into A2A on 2025-08-27. [1][8] |\n| **[Agentic Commerce Protocol](/protocols/agentic-commerce-protocol/)** | Complements | AGTP draft-10 defines governance and authority headers alongside its eighteen-method embedded floor (including EXECUTE, DELEGATE, and CONFIRM), while the Agentic Commerce Protocol is the separate OpenAI and Stripe checkout protocol. [1][9] |\n\n---\n\n## See also\n\n- **Category:** [Coordinate protocols](/category/coordinate/)\n\n---\n\n## References\n\n1. Chris Hood, Nomotic, Inc., *Agent Transfer Protocol (AGTP) (draft-hood-independent-agtp-10)* (checked 2026-11-07) — <https://www.ietf.org/archive/id/draft-hood-independent-agtp-10.txt>\n2. C. Hood (Nomotic, Inc.), *draft-hood-independent-agtp — Agent Transfer Protocol (AGTP) (IETF Datatracker)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/draft-hood-independent-agtp/>\n3. R. Fielding, Ed., M. Nottingham, Ed., and J. Reschke, Ed., *RFC 9110: HTTP Semantics* (June 2022) — <https://www.rfc-editor.org/rfc/rfc9110.html>\n4. M. Nottingham, *RFC 8615: Well-Known Uniform Resource Identifiers (URIs)* (May 2019) — <https://www.rfc-editor.org/rfc/rfc8615.html>\n5. Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation* (2026-07-28) — <https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning>\n6. Agentic AI Foundation, *A2A joins AAIF's open agentic stack* (published 2026-08-17; modified 2026-09-24) — <https://aaif.io/blog/a2a-joins-aaif>\n7. Agent Network Protocol community, *Agent Network Protocol (ANP) README* (checked 2026-10-30) — <https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/README.md>\n8. BeeAI project (i-am-bee), *Agent Communication Protocol README* (fetched 2026-10-31) — <https://raw.githubusercontent.com/i-am-bee/acp/main/README.md>\n9. OpenAI and Stripe, *Agentic Commerce Protocol README* (checked 2026-10-28) — <https://github.com/agentic-commerce-protocol/agentic-commerce-protocol/blob/main/README.md>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "VCAP",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "aliases": [
    "VCAP"
   ],
   "analog": "Escrow with proof-of-delivery, formalized as an internet-draft message protocol",
   "collisions": [],
   "discovery": {
    "mechanism": "none published — the draft defines message formats and state machines for agent-to-agent settlement, not a discoverable site-level signal",
    "path": "none"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.ietf.org/archive/id/draft-stone-vcap-02.txt",
     "claim": "B. Stone, SwarmSync.AI, *VCAP: Verified Commerce for Agent Protocols (draft-stone-vcap-02)*, 4 September 2026; expires 8 March 2027",
     "date": null,
     "quote": "This document specifies the *Verified Commerce for Agent Protocols (VCAP)*, an open standard for settling financial transactions between autonomous AI agents using cryptographically verifiable proof of work delivery. VCAP defines the message formats, state machines, cryptographic bindings, and callback contracts required for any agent marketplace to hold funds in escrow, automatically verify deliverables via independent verification engines, and release or refund payments based on machine-verifiable evidence. / Individual Submission B. Stone Internet-Draft SwarmSync.AI Intended status: Informational / All messages are JSON objects. Fields marked REQUIRED must be present; fields marked OPTIONAL may be omitted. Implementations MUST ignore unknown fields for forward compatibility. / 1. NEGOTIATE ───────>│ │ │ │ │──── 2. FORWARD ─────────>│ │ │ │<─── 3. RESPOND ──────────│ │ │<─── 4. TERMS ───────────│ │ │ │──── 5. ACCEPT ─────────>│ │ │ │ │── 6. ESCROW_HOLD ───────>│ (funds reserved) │ │ │── 7. AGREEMENT_CREATED ─>│ │ │ │ │ │ │ │ [Provider works...] │ │ │ │ │ │ │ │<─── 8. DELIVER ──────────│ │ │ │──────────── 9. VERIFY ──────────────────────>│ │ │ │ │ │ │ [Verifier runs...] │ │ │ │ │ │ │ │<──────── 10. CALLBACK ──────────────────────│ │ │ │ │ │ │── 11a. ESCROW_RELEASE ──>│ (if VERIFIED) │ │ │── 11b. ESCROW_REFUND ───>│ (if FAILED) │ │<── 12. SETTLEMENT_RECEIPT / Sent by the verifier back to the marketplace. / \"passed\":\"boolean (true = verified, false = failed)\",\"proof_hash\":\"string (SHA-256 hex digest of the canonical proof bundle)\",\"proof_signature\":\"string (Ed25519 signature, Base64-encoded)\",\"verifier_key_id\":\"string (stable key identifier or verification-method URI)\",\"extracted_content\":\"string (OPTIONAL, truncated content from target)\",\"failure_reason\":\"string (OPTIONAL, human-readable when passed=false)\",\"action_log\": / Individual Submission B. Stone Internet-Draft SwarmSync.AI Intended status: Informational 4 September 2026 Expires: 8 March 2027 VCAP: Verified Commerce for Agent Protocols draft-stone-vcap-02 / This Internet-Draft will expire on 8 March 2027. / 1.0-draft | 2026-03-14 | Initial draft specification / 1.1-draft | 2026-04-16 | Replaced HMAC-SHA256 with Ed25519 for / proof_signature (Section 5.2, per / 1.2-draft | 2026-09-04 | Aligned AP2 relationship to the / current mandate/UCP architecture / Implementations MUST check the vcap_version field to determine which signature algorithm to use during verification. / added verifier key identifiers and / upstream-version pinning; updated / Individual Submission B. Stone Internet-Draft SwarmSync.AI Intended status: Informational 4 September 2026 Expires: 8 / Intended status: Informational / draft-stone-vcap-02 / Stone Expires 8 March 2027 [Page 1] Internet-Draft VCAP September 2026 This document is / Stone Expires 8 March 2027 [Page 11] Internet-Draft VCAP September 2026 { \"vcap_version\": \"1.0\", / Copyright (c) 2026 IETF Trust and the persons identified as the document authors. / they increasingly need to transact with one another: hire other agents, delegate subtasks, and pay for completed work. Today there is no standard for: 1. How an agent requests work and holds payment in escrow 2. How a delivering agent proves the work was actually done 3. How a verification engine independently confirms delivery 4. How proof of verification cryptographically triggers fund release 5. How timeouts and disputes are escalated to human review Each marketplace invents its own ad-hoc system, creating fragmentation and vendor lock-in. / A financial hold on the requester's funds, released only upon verified delivery / Escrow releases (on verification) or / refunds (on failure) / The HELD -> RELEASED/REFUNDED transition MUST use an atomic compare-and-swap (CAS) operation to prevent double-release. / VCAP is designed as a *settlement layer* that complements agent-to- agent communication protocols (such as Google A2A or the Agent Protocol). Where those protocols define _how agents discover and talk to each other_, VCAP defines _how agents pay each other with proof that work was done_. / VCAP does not mandate a specific verification technology. / VCAP does not assume AP2 defines escrow, capture, refund, or settlement state transitions. / implementers MUST NOT infer AP2 fields or state transitions that are not present in the referenced AP2 specification. / A2A messages; VCAP does not / redefine A2A transport / { \"vcap_version\": \"1.0\", \"message_type\": \"verification_callback\", \"verification_id\": \"string (matches request)\", \"passed\": \"boolean (true = verified, false = failed)\" / The original VCAP v1.0 used HMAC- SHA256 for proof_signature. ... VCAP v1.1 aligns all signature operations on Ed25519. Implementations MUST check the vcap_version field to determine which signature algorithm to use during verification. / proof_hash\": \"string (SHA-256 hex digest of the canonical proof bundle)\" / proof_signature\": \"string (Ed25519 signature, Base64-encoded)\" / The proof_hash field in the Verification Callback MUST be computed as: proof_hash = SHA-256(canonical_json(proof_bundle)) Where canonical_json serializes the proof bundle with: * Object keys sorted alphabetically (recursive) * No whitespace between tokens * UTF-8 encoding * No trailing newline / The proof_signature field MUST be computed using Ed25519 / The verifier's Ed25519 public key MUST be registered with the marketplace out-of-band before the first verification request is processed. / The original VCAP v1.0 used HMAC-SHA256 for proof_signature. ... VCAP v1.1 aligns all signature operations on Ed25519. Implementations MUST check the vcap_version field to determine which signature algorithm to use during verification. / A compliant VCAP verifier MUST: 1. Accept a verification_request message 2. Return a verification_callback message within the specified timeout_seconds 3. Include a proof_hash computed per Section 5.1 4. Include a proof_signature computed per Section 5.2 5. Set passed to true only if the verification criteria are met 6. Include an action_log documenting all steps taken / Use hash-chained action logs per Section 5.3 2. Include extracted_content when applicable 3. Provide human-readable failure_reason when passed=false / the action log SHOULD be hash-chained / The final hash_n SHOULD be included in the proof bundle. Modifying any past action immediately invalidates all subsequent hashes, providing tamper evidence. / verification_callback / If a verification does not complete within timeout_seconds (default: 1800 seconds / 30 minutes): 1. The marketplace MUST transition the verification to TIMEOUT status 2. The escrow MUST remain in HELD status (funds are NOT auto- released or auto-refunded) 3. The marketplace SHOULD create a manual review queue entry with status PENDING 4. A human reviewer MUST make the final settlement decision / The reviewer MUST produce a standard verification_callback message with: * passed = true or passed = false * action_log containing a single entry documenting the manual decision * proof_hash and proof_signature computed normally / Implementations SHOULD use database-level atomic updates / If the same provider submits delivery for the same escrow multiple times, the marketplace MUST return the existing verification result rather than creating a new one. / Double-release of escrow funds * Duplicate verification jobs / If a verifier sends the same callback multiple times (e.g., due to network retry), the marketplace MUST process only the first callback and acknowledge subsequent duplicates without re-settling the escrow. / The proof_signature field MUST be computed using Ed25519: proof_body = canonical_json({ \"verification_id\": verification_id, \"negotiation_id\": negotiation_id, \"escrow_ref\": escrow_ref, \"passed\": passed, \"proof_hash\": proof_hash / \"public_key\": \"string (PEM, Ed25519 SPKI format)\" ... Replaced HMAC-SHA256 with Ed25519 / Machine-readable JSON Schema definitions for all VCAP message types are available at: https://github.com/swarmsync-ai/vcap-spec/tree/main/schemas/",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://datatracker.ietf.org/doc/draft-stone-vcap/",
     "claim": "B. Stone (SwarmSync.AI), *draft-stone-vcap Datatracker document page*, checked 2026-10-31",
     "date": null,
     "quote": "This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. Document Type Active Internet-Draft (individual) Author Ben Stone / the IETF standards process. Document Type Active Internet-Draft (individual) Author Ben Stone Last updated",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://raw.githubusercontent.com/swarmsync-ai/vcap-spec/main/README.md",
     "claim": "SwarmSync AI (swarmsync-ai/vcap-spec), *VCAP: Verified Commerce for Agent Protocols — Specification Repository*, checked 2026-11-12",
     "date": null,
     "quote": "VCAP: Verified Commerce for Agent Protocols",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://www.ietf.org/archive/id/draft-stone-vcap-02.html",
     "claim": "B. Stone, SwarmSync.AI, *VCAP: Verified Commerce for Agent Protocols (draft-stone-vcap-02)*, 4 September 2026; expires 8 March 2027",
     "date": null,
     "quote": "--- --- --- --- --- Stone Expires 8 March 2027 Page VCAP: Verified Commerce",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://datatracker.ietf.org/doc/html/draft-stone-vcap-02",
     "claim": "B. Stone (SwarmSync.AI), *VCAP: Verified Commerce for Agent Protocols (draft-stone-vcap-02 HTML)*, 4 September 2026; expires 8 March 2027",
     "date": null,
     "quote": "or custom objects. Standard VCAP processors MUST ignore unknown fields. ¶ ### 11.2. 11.2 / carried alongside A2A messages; VCAP does not redefine A2A transport Agent Protocol Task Execution",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://json-schema.org/specification",
     "claim": "JSON Schema Organization, *JSON Schema Specification*, fetched 2026-11-12",
     "date": null,
     "quote": "The specification is split into two parts, Core and Validation.",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://json-schema.org/draft/2020-12/json-schema-core.html",
     "claim": "Austin Wright, Henry Andrews, Ben Hutton, and Greg Dennis, *JSON Schema: A Media Type for Describing JSON Documents (Draft 2020-12)*, 2022-06-16",
     "date": "2022-06-16",
     "quote": "JSON Schema defines the media type \"application/schema+json\", a JSON-based format",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://aaif.io/blog/a2a-joins-aaif",
     "claim": "Agentic AI Foundation, *A2A joins AAIF's open agentic stack*, published 2026-08-17; modified 2026-09-24",
     "date": null,
     "quote": "A2A v1.0, the first stable specification, shipped in March 2026.",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://www.linuxfoundation.org/press/linux-foundation-announces-operational-launch-of-x402-foundation-to-standardize-internet-native-payments-for-ai-agents-and-applications",
     "claim": "Linux Foundation, *Linux Foundation Announces Operational Launch of x402 Foundation to Standardize Internet-Native Payments for AI Agents and Applications*, July 14, 2026",
     "date": null,
     "quote": "SAN FRANCISCO, July 14, 2026 – The Linux Foundation , the nonprofit organization enabling mass innovation through open source, today announced the operational launch of the x402 Foundation",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/specification.md",
     "claim": "Google (google-agentic-commerce), *Agentic Payment Protocol (v0.2)*, fetched 2026-10-30",
     "date": null,
     "quote": "Agentic Payment Protocol (v0.2)",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://eips.ethereum.org/EIPS/eip-8183",
     "claim": "Davide Crapis, Bryan Lim, Tay Weixiong, and Chooi Zuhwa, *ERC-8183: Agentic Commerce*, created 2026-02-25; fetched 2026-10-31",
     "date": null,
     "quote": "(@ai-virtual-b), Tay Weixiong (@twx-virtuals), Chooi Zuhwa (@Zuhwa) Created 2026-02-25 Discussion Link https://ethereum-magicians.org/t/erc-8183-agentic-commerce/27902 Requires EIP-20",
     "ref": 11
    }
   ],
   "form": "endpoint",
   "governance": "IETF individual Internet-Draft; not endorsed by the IETF, no working group, no formal standing in the IETF standards process",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against datatracker.ietf.org/doc/draft-stone-vcap/ and the draft-stone-vcap-02 text; confirmed individual-submission, no-IETF-standing status"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "vcap",
   "implementation": "none-found",
   "last_verified": "2026-11-12",
   "name": "VCAP: Verified Commerce for Agent Protocols",
   "native_status": "Active Internet-Draft (individual); Intended status: Informational (draft header; Datatracker stream status is None)",
   "origin": {
    "date": "2026-03-17",
    "org": "Individual submission (Ben Stone, SwarmSync.AI)"
   },
   "part_of": null,
   "parties": [
    "agent-agent"
   ],
   "phase": "draft",
   "probe": {
    "method": "none",
    "on_absent": "No probe exists; this is an early-stage individual draft with no independent deployed implementation outside the author's own marketplace, so absence cannot be distinguished from non-adoption.",
    "parse": "not applicable — no public endpoint to probe was located",
    "path": "none"
   },
   "question": "How can two autonomous agent-run marketplaces settle a payment only once independent evidence shows the purchased work was actually delivered?",
   "scope": "commerce",
   "spec_url": "https://www.ietf.org/archive/id/draft-stone-vcap-02.html",
   "step": "pay",
   "summary_md": "**VCAP: Verified Commerce for Agent Protocols** (`VCAP`) is an open standard for settling financial transactions between autonomous AI agents using cryptographically verifiable proof of work delivery. It defines the message formats, state machines, cryptographic bindings, and callback contracts required for any agent marketplace to hold funds in escrow, automatically verify deliverables via independent verification engines, and release or refund payments based on machine-verifiable evidence. B. Stone of SwarmSync.AI submitted this Individual Submission with intended status Informational. The Datatracker records an Active Internet-Draft (individual) by Ben Stone and states that this I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. All messages are JSON objects. Fields marked REQUIRED must be present; fields marked OPTIONAL may be omitted. Implementations MUST ignore unknown fields for forward compatibility. Section 2.1 numbers the exchange NEGOTIATE, FORWARD, RESPOND, TERMS, ACCEPT, ESCROW_HOLD, AGREEMENT_CREATED, DELIVER, VERIFY, and CALLBACK. ESCROW_RELEASE is the step if VERIFIED, and ESCROW_REFUND is the step if FAILED. Step 12 is SETTLEMENT_RECEIPT. A `verification_callback` is sent by the verifier back to the marketplace and includes `passed`, `proof_hash`, `proof_signature`, and `action_log`. `draft-stone-vcap-02` is dated 4 September 2026 and expires on 8 March 2027. Appendix D lists `1.0-draft` on 2026-03-14 as the initial draft specification. `1.1-draft`, dated 2026-04-16, replaced `HMAC-SHA256` with Ed25519 for `proof_signature`. `1.2-draft`, dated 2026-09-04, aligned the AP2 relationship to the current mandate/UCP architecture. Implementations MUST check the `vcap_version` field to determine which signature algorithm to use during verification. The `1.2-draft` entry added verifier key identifiers and upstream-version pinning.",
   "track": "ietf",
   "version": {
    "date": "2026-09-04",
    "label": "draft-stone-vcap-02"
   },
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-stone-vcap"
    }
   ],
   "use_cases": [
    "accept-agent-payments",
    "agent-checkout",
    "audit-agent-actions",
    "agent-to-agent-messaging"
   ],
   "audience": [
    "platform",
    "agent-builder",
    "standards-body"
   ],
   "pairs_with": [
    "a2a",
    "x402",
    "ap2",
    "erc-8183"
   ],
   "prerequisites": [],
   "ietf_tracker": {
    "doc": "draft-stone-vcap",
    "rev": "02",
    "state": "active",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-09-04",
    "expires_utc": "2027-03-08",
    "as_of": "2026-10-31",
    "source": "https://datatracker.ietf.org/doc/draft-stone-vcap/",
    "source_label": "per IETF Datatracker"
   },
   "hatnote_md": "",
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "payments_onchain",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": null,
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**VCAP: Verified Commerce for Agent Protocols** (`VCAP`) is an open standard for settling financial transactions between autonomous AI agents using cryptographically verifiable proof of work delivery. It defines the message formats, state machines, cryptographic bindings, and callback contracts required for any agent marketplace to hold funds in escrow, automatically verify deliverables via independent verification engines, and release or refund payments based on machine-verifiable evidence. [1] B. Stone of SwarmSync.AI submitted this Individual Submission with intended status Informational. The Datatracker records an Active Internet-Draft (individual) by Ben Stone and states that this I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. [1][2] All messages are JSON objects. Fields marked REQUIRED must be present; fields marked OPTIONAL may be omitted. Implementations MUST ignore unknown fields for forward compatibility. [1] Section 2.1 numbers the exchange NEGOTIATE, FORWARD, RESPOND, TERMS, ACCEPT, ESCROW_HOLD, AGREEMENT_CREATED, DELIVER, VERIFY, and CALLBACK. ESCROW_RELEASE is the step if VERIFIED, and ESCROW_REFUND is the step if FAILED. Step 12 is SETTLEMENT_RECEIPT. [1] A `verification_callback` is sent by the verifier back to the marketplace and includes `passed`, `proof_hash`, `proof_signature`, and `action_log`. [1] `draft-stone-vcap-02` is dated 4 September 2026 and expires on 8 March 2027. [1] Appendix D lists `1.0-draft` on 2026-03-14 as the initial draft specification. [1] `1.1-draft`, dated 2026-04-16, replaced `HMAC-SHA256` with Ed25519 for `proof_signature`. [1] `1.2-draft`, dated 2026-09-04, aligned the AP2 relationship to the current mandate/UCP architecture. [1] Implementations MUST check the `vcap_version` field to determine which signature algorithm to use during verification. [1] The `1.2-draft` entry added verifier key identifiers and upstream-version pinning. [1]",
   "v05_identity_sentence_md": "**VCAP: Verified Commerce for Agent Protocols** (`VCAP`) is an open standard for settling financial transactions between autonomous AI agents using cryptographically verifiable proof of work delivery. It defines the message formats, state machines, cryptographic bindings, and callback contracts required for any agent marketplace to hold funds in escrow, automatically verify deliverables via independent verification engines, and release or refund payments based on machine-verifiable evidence. [1] B. Stone of SwarmSync.AI submitted this Individual Submission with intended status Informational. The Datatracker records an Active Internet-Draft (individual) by Ben Stone and states that this I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. [1][2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Pay](/category/pay/) (`pay`)"
    },
    {
     "label": "Form",
     "value_md": "Endpoint (`endpoint`)"
    },
    {
     "label": "Originated by",
     "value_md": "Ben Stone, SwarmSync.AI (sole author, Individual Submission) [1][2]"
    },
    {
     "label": "Governed by",
     "value_md": "No working group or stream; individual Internet-Draft \"not endorsed by the IETF\" [2]"
    },
    {
     "label": "Track",
     "value_md": "Individual IETF Internet-Draft (`draft-stone-vcap-02`, Intended status: Informational) and SwarmSync.AI open specification repository (`swarmsync-ai/vcap-spec`) [1][3]"
    },
    {
     "label": "Status",
     "value_md": "Active Internet-Draft (individual); Intended status: Informational (draft header; Datatracker stream status is None) [1][4]"
    },
    {
     "label": "Version",
     "value_md": "`draft-stone-vcap-02` (4 September 2026, expires 8 March 2027; v1.1-draft in Section 5.2 and Appendix D, while Section 3 JSON examples carry `\"vcap_version\": \"1.0\"`) [1][4]"
    },
    {
     "label": "Wire format",
     "value_md": "JSON objects discriminated by a `message_type` field; unknown fields MUST be ignored [5]"
    },
    {
     "label": "Specification",
     "value_md": "[draft-stone-vcap-02.txt](https://www.ietf.org/archive/id/draft-stone-vcap-02.txt) · [IETF Datatracker](https://datatracker.ietf.org/doc/draft-stone-vcap/) · [VCAP Spec Repository (`swarmsync-ai/vcap-spec`)](https://github.com/swarmsync-ai/vcap-spec) [1][3]"
    },
    {
     "label": "Found at",
     "value_md": "None defined; VCAP rides alongside A2A, Agent Protocol or custom transports [5]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust Legal Provisions (BCP 78) [1]"
    },
    {
     "label": "IETF state",
     "value_md": "`draft-stone-vcap-02` · **Active Internet-Draft** (expires 2027-03-08) · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-stone-vcap/))"
    }
   ],
   "v05_problem_md": "Agents increasingly need to hire other agents, delegate subtasks, and pay for completed work. There is no standard for how an agent requests work and holds payment in escrow, how a delivering agent proves the work was actually done, how a verification engine independently confirms delivery, how proof of verification cryptographically triggers fund release, or how timeouts and disputes are escalated to human review. [1] Escrow is a financial hold on the requester's funds, released only upon verified delivery. [1] Settlement releases escrow on verification or refunds on failure. [1] The HELD to RELEASED/REFUNDED transition MUST use an atomic compare-and-swap (CAS) operation to prevent double-release. [1] VCAP is designed as a settlement layer that complements agent-to-agent communication protocols. Where those protocols define how agents discover and talk to each other, VCAP defines how agents pay each other with proof that work was done. [1] VCAP does not mandate a specific verification technology. [1] VCAP does not assume AP2 defines escrow, capture, refund, or settlement state transitions. [1] Implementers MUST NOT infer AP2 fields or state transitions that are not present in the referenced AP2 specification. [1] VCAP does not redefine A2A transport. [1]",
   "v05_mechanism_delta_md": "Escrow is a financial hold on the requester's funds, released only upon verified delivery. [1] Settlement releases escrow on verification or refunds on failure. [1] The HELD to RELEASED/REFUNDED transition MUST use an atomic compare-and-swap (CAS) operation to prevent double-release. [1]",
   "v05_scope_boundary_md": "VCAP is designed as a settlement layer that complements agent-to-agent communication protocols. Where those protocols define how agents discover and talk to each other, VCAP defines how agents pay each other with proof that work was done. [1] VCAP does not mandate a specific verification technology. [1] VCAP does not assume AP2 defines escrow, capture, refund, or settlement state transitions. [1] Implementers MUST NOT infer AP2 fields or state transitions that are not present in the referenced AP2 specification. [1] VCAP does not redefine A2A transport. [1]",
   "v05_fuzzy_additions": [
    {
     "id": "verification-callback-and-proof-binding",
     "heading": "Verification callback and proof binding",
     "body_md": "`draft-stone-vcap-02` binds escrow settlement between buyer and seller agents to deterministic verification callbacks carrying canonical JSON `SHA-256` proof digests and `Ed25519` verifier signatures. Sequential verifier actions can be linked into a hash-chained audit log anchored in the callback payload. [1]",
     "bullets": [
      {
       "label": "Proof hash",
       "text_md": "The `proof_hash` field in the verification callback MUST be computed as SHA-256 of `canonical_json` of the proof bundle. `canonical_json` serializes that bundle with object keys sorted alphabetically (recursive), no whitespace between tokens, UTF-8 encoding, and no trailing newline. [1]"
      },
      {
       "label": "Ed25519 signature",
       "text_md": "In VCAP v1.1, the `proof_signature` field MUST be computed using Ed25519 (replacing the `HMAC-SHA256` algorithm used in original v1.0, so verifiers check `vcap_version` to select the algorithm). The verifier's Ed25519 public key MUST be registered with the marketplace out-of-band before the first verification request is processed. [1]"
      },
      {
       "label": "Verifier requirements",
       "text_md": "A compliant VCAP verifier MUST accept a `verification_request`, return a `verification_callback` within the specified `timeout_seconds`, include a `proof_hash` computed per Section 5.1 and a `proof_signature` computed per Section 5.2, set `passed` to true only if the verification criteria are met, and include an `action_log` documenting all steps taken. A compliant verifier SHOULD use hash-chained action logs, include `extracted_content` when applicable, and provide a human-readable `failure_reason` when `passed` is false. [1]"
      },
      {
       "label": "Action log chain",
       "text_md": "For verifiers that record sequential actions, the action log SHOULD be hash-chained. The final `hash_n` SHOULD be included in the proof bundle. Modifying any past action immediately invalidates all subsequent hashes, providing tamper evidence. [1]"
      }
     ]
    },
    {
     "id": "timeout-idempotency-and-escrow-guards",
     "heading": "Timeout, idempotency, and escrow guards",
     "body_md": "Escrow state transitions enforce strict timeout escalation, atomic compare-and-swap state guards, and idempotency checks across both work-delivery submissions and `verification_callback` messages so duplicate or replayed callbacks cannot trigger double release. [1]",
     "bullets": [
      {
       "label": "Timeout rules",
       "text_md": "The marketplace MUST transition the verification to TIMEOUT status. The escrow MUST remain in HELD status, and funds are NOT auto-released or auto-refunded. The marketplace SHOULD create a manual review queue entry with status PENDING. A human reviewer MUST make the final settlement decision. The reviewer MUST produce a standard `verification_callback` with `passed` true or false, an `action_log` containing a single entry documenting the manual decision, and a `proof_hash` and `proof_signature` computed normally. [1]"
      },
      {
       "label": "Compare-and-swap",
       "text_md": "The HELD to RELEASED/REFUNDED transition MUST use an atomic compare-and-swap (CAS) operation to prevent double-release. Implementations SHOULD use database-level atomic updates. [1]"
      },
      {
       "label": "Delivery replay",
       "text_md": "If the same provider submits delivery for the same escrow multiple times, the marketplace MUST return the existing verification result rather than creating a new one. This prevents double-release of escrow funds and duplicate verification jobs. [1]"
      },
      {
       "label": "Callback replay",
       "text_md": "If a verifier sends the same callback multiple times, for example because of a network retry, the marketplace MUST process only the first callback and acknowledge subsequent duplicates without re-settling the escrow. [1]"
      }
     ]
    }
   ],
   "v05_diagram": null,
   "v05_wire_artifact": {
    "title": "verification_callback",
    "heading": "verification_callback",
    "lang": "json",
    "code": "{\n  \"vcap_version\": \"1.0\",\n  \"message_type\": \"verification_callback\",\n  \"verification_id\": \"string (matches request)\",\n  \"passed\": \"boolean (true = verified, false = failed)\",\n  \"proof_hash\": \"string (SHA-256 hex digest of the canonical proof bundle)\",\n  \"proof_signature\": \"string (Ed25519 signature, Base64-encoded)\",\n  \"verifier_key_id\": \"string (stable key identifier or verification-method URI)\",\n  \"extracted_content\": \"string (OPTIONAL, truncated content from target)\",\n  \"failure_reason\": \"string (OPTIONAL, human-readable when passed=false)\",\n  \"action_log\": [\n    {\n      \"index\": \"number (0-based sequential order)\",\n      \"action\": \"string (e.g., 'NAVIGATE', 'EXTRACT', 'SCREENSHOT', 'FINGERPRINT')\",\n      \"url\": \"string (OPTIONAL)\",\n      \"selector\": \"string (OPTIONAL)\",\n      \"success\": \"boolean\",\n      \"cost_cents\": \"number (cost of this action)\",\n      \"duration_ms\": \"number (OPTIONAL)\",\n      \"timestamp\": \"string (ISO 8601)\",\n      \"data_snippet\": \"string (OPTIONAL, first N chars of extracted data)\"\n    }\n  ],\n  \"completed_at\": \"string (ISO 8601)\"\n}",
    "caption_md": "The Section 3.6 `verification_callback` is sent by the verifier back to the marketplace to trigger escrow settlement; in the draft's own JSON example, `\"vcap_version\": \"1.0\"` is paired with an `ed25519:` `proof_signature` even though Section 5.2 and Appendix D associate `\"1.0\"` with `HMAC-SHA256` and `v1.1` with `Ed25519`. [1]"
   },
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "Ed25519 Digital Signatures",
      "spec_or_rfc": "Ed25519",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "VCAP v1.1+ computes `proof_signature` on verification callbacks and signs agent identity headers with `Ed25519` (`Ed25519 SPKI format` public keys) over deterministic `canonical_json` payloads (replacing v1.0 `HMAC-SHA256`), binding `verification_id`, `negotiation_id`, `escrow_ref`, `passed`, and `proof_hash`. [1]"
     },
     {
      "name": "JSON Schema (Draft 2020-12)",
      "spec_or_rfc": "JSON Schema",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "Appendix B publishes machine-readable JSON Schema definitions for all VCAP negotiation, escrow, and verification message types, whereas JSON Schema Core and Validation do not define escrow state transitions. [1][6][7]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "a2a",
      "target_name": "Agent2Agent Protocol (A2A)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "VCAP's message formats, state machine, and callback contracts for escrow release or refund can be carried alongside A2A, and VCAP does not redefine A2A discovery or transport. [1][8]"
     },
     {
      "target_id": "x402",
      "target_name": "x402",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "VCAP specifies the escrow hold, verification, and release or refund, while x402 is a separate HTTP 402 PAYMENT-SIGNATURE settlement a marketplace can use as that rail. [1][9]"
     },
     {
      "target_id": "ap2",
      "target_name": "Agent Payments Protocol (AP2)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "VCAP binds release and refund to machine-checkable delivery evidence, while AP2 is the SD-JWT Checkout Mandate and does not define those escrow transitions. [1][10]"
     },
     {
      "target_id": "erc-8183",
      "target_name": "ERC-8183: Agentic Commerce",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "VCAP escrow is held on an external rail and released or refunded from a verification callback, while ERC-8183 escrow is an EIP-20 balance inside the job contract across states Open, Funded, Submitted, Completed, Rejected, and Expired. [1][11]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": "`draft-stone-vcap-02` is an individual IETF Internet-Draft originated by SwarmSync AI (`swarmsync-ai/vcap-spec`, which also publishes a draft `VCAP-AP2 Binding` for `escrow_release`); no independent third-party escrow or verifier deployments have been verified yet. [1][3]",
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Pay protocols](/category/pay/)** — Category index for `pay` standards."
    }
   ],
   "v05_compiled_md": "---\nid: vcap\ntitle: \"VCAP: Verified Commerce for Agent Protocols\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: pay\nform: endpoint\nwire_archetype: payments_onchain\nspec_url: https://www.ietf.org/archive/id/draft-stone-vcap-02.txt\nlast_checked: 2026-11-12\n---\n\n# VCAP: Verified Commerce for Agent Protocols\n\n**Category:** [Pay](/category/pay/) (`pay`) · **Form:** Endpoint (`endpoint`) · **Last checked:** 2026-11-12\n\n**VCAP: Verified Commerce for Agent Protocols** (`VCAP`) is an open standard for settling financial transactions between autonomous AI agents using cryptographically verifiable proof of work delivery. It defines the message formats, state machines, cryptographic bindings, and callback contracts required for any agent marketplace to hold funds in escrow, automatically verify deliverables via independent verification engines, and release or refund payments based on machine-verifiable evidence. [1] B. Stone of SwarmSync.AI submitted this Individual Submission with intended status Informational. The Datatracker records an Active Internet-Draft (individual) by Ben Stone and states that this I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. [1][2] All messages are JSON objects. Fields marked REQUIRED must be present; fields marked OPTIONAL may be omitted. Implementations MUST ignore unknown fields for forward compatibility. [1] Section 2.1 numbers the exchange NEGOTIATE, FORWARD, RESPOND, TERMS, ACCEPT, ESCROW_HOLD, AGREEMENT_CREATED, DELIVER, VERIFY, and CALLBACK. ESCROW_RELEASE is the step if VERIFIED, and ESCROW_REFUND is the step if FAILED. Step 12 is SETTLEMENT_RECEIPT. [1] A `verification_callback` is sent by the verifier back to the marketplace and includes `passed`, `proof_hash`, `proof_signature`, and `action_log`. [1] `draft-stone-vcap-02` is dated 4 September 2026 and expires on 8 March 2027. [1] Appendix D lists `1.0-draft` on 2026-03-14 as the initial draft specification. [1] `1.1-draft`, dated 2026-04-16, replaced `HMAC-SHA256` with Ed25519 for `proof_signature`. [1] `1.2-draft`, dated 2026-09-04, aligned the AP2 relationship to the current mandate/UCP architecture. [1] Implementations MUST check the `vcap_version` field to determine which signature algorithm to use during verification. [1] The `1.2-draft` entry added verifier key identifiers and upstream-version pinning. [1]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Pay](/category/pay/) (`pay`) |\n| **Form** | Endpoint (`endpoint`) |\n| **Originated by** | Ben Stone, SwarmSync.AI (sole author, Individual Submission) [1][2] |\n| **Governed by** | No working group or stream; individual Internet-Draft \"not endorsed by the IETF\" [2] |\n| **Track** | Individual IETF Internet-Draft (`draft-stone-vcap-02`, Intended status: Informational) and SwarmSync.AI open specification repository (`swarmsync-ai/vcap-spec`) [1][3] |\n| **Status** | Active Internet-Draft (individual); Intended status: Informational (draft header; Datatracker stream status is None) [1][4] |\n| **Version** | `draft-stone-vcap-02` (4 September 2026, expires 8 March 2027; v1.1-draft in Section 5.2 and Appendix D, while Section 3 JSON examples carry `\"vcap_version\": \"1.0\"`) [1][4] |\n| **Wire format** | JSON objects discriminated by a `message_type` field; unknown fields MUST be ignored [5] |\n| **Specification** | [draft-stone-vcap-02.txt](https://www.ietf.org/archive/id/draft-stone-vcap-02.txt) · [IETF Datatracker](https://datatracker.ietf.org/doc/draft-stone-vcap/) · [VCAP Spec Repository (`swarmsync-ai/vcap-spec`)](https://github.com/swarmsync-ai/vcap-spec) [1][3] |\n| **Found at** | None defined; VCAP rides alongside A2A, Agent Protocol or custom transports [5] |\n| **Licence** | IETF Trust Legal Provisions (BCP 78) [1] |\n| **IETF state** | `draft-stone-vcap-02` · **Active Internet-Draft** (expires 2027-03-08) · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-stone-vcap/)) |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Verification callback and proof binding](#verification-callback-and-proof-binding)\n3. [Timeout, idempotency, and escrow guards](#timeout-idempotency-and-escrow-guards)\n4. [Counterparts and related standards](#counterparts-and-related-standards)\n5. [Adoption and ecosystem](#adoption-and-ecosystem)\n6. [See also](#see-also)\n7. [References](#references)\n\n---\n\n## Problem and scope\n\nAgents increasingly need to hire other agents, delegate subtasks, and pay for completed work. There is no standard for how an agent requests work and holds payment in escrow, how a delivering agent proves the work was actually done, how a verification engine independently confirms delivery, how proof of verification cryptographically triggers fund release, or how timeouts and disputes are escalated to human review. [1] Escrow is a financial hold on the requester's funds, released only upon verified delivery. [1] Settlement releases escrow on verification or refunds on failure. [1] The HELD to RELEASED/REFUNDED transition MUST use an atomic compare-and-swap (CAS) operation to prevent double-release. [1] VCAP is designed as a settlement layer that complements agent-to-agent communication protocols. Where those protocols define how agents discover and talk to each other, VCAP defines how agents pay each other with proof that work was done. [1] VCAP does not mandate a specific verification technology. [1] VCAP does not assume AP2 defines escrow, capture, refund, or settlement state transitions. [1] Implementers MUST NOT infer AP2 fields or state transitions that are not present in the referenced AP2 specification. [1] VCAP does not redefine A2A transport. [1]\n\n### verification_callback\n\n```json\n{\n  \"vcap_version\": \"1.0\",\n  \"message_type\": \"verification_callback\",\n  \"verification_id\": \"string (matches request)\",\n  \"passed\": \"boolean (true = verified, false = failed)\",\n  \"proof_hash\": \"string (SHA-256 hex digest of the canonical proof bundle)\",\n  \"proof_signature\": \"string (Ed25519 signature, Base64-encoded)\",\n  \"verifier_key_id\": \"string (stable key identifier or verification-method URI)\",\n  \"extracted_content\": \"string (OPTIONAL, truncated content from target)\",\n  \"failure_reason\": \"string (OPTIONAL, human-readable when passed=false)\",\n  \"action_log\": [\n    {\n      \"index\": \"number (0-based sequential order)\",\n      \"action\": \"string (e.g., 'NAVIGATE', 'EXTRACT', 'SCREENSHOT', 'FINGERPRINT')\",\n      \"url\": \"string (OPTIONAL)\",\n      \"selector\": \"string (OPTIONAL)\",\n      \"success\": \"boolean\",\n      \"cost_cents\": \"number (cost of this action)\",\n      \"duration_ms\": \"number (OPTIONAL)\",\n      \"timestamp\": \"string (ISO 8601)\",\n      \"data_snippet\": \"string (OPTIONAL, first N chars of extracted data)\"\n    }\n  ],\n  \"completed_at\": \"string (ISO 8601)\"\n}\n```\n\n*The Section 3.6 `verification_callback` is sent by the verifier back to the marketplace to trigger escrow settlement; in the draft's own JSON example, `\"vcap_version\": \"1.0\"` is paired with an `ed25519:` `proof_signature` even though Section 5.2 and Appendix D associate `\"1.0\"` with `HMAC-SHA256` and `v1.1` with `Ed25519`. [1]*\n\n---\n\n## Verification callback and proof binding\n\n`draft-stone-vcap-02` binds escrow settlement between buyer and seller agents to deterministic verification callbacks carrying canonical JSON `SHA-256` proof digests and `Ed25519` verifier signatures. Sequential verifier actions can be linked into a hash-chained audit log anchored in the callback payload. [1]\n\n- **Proof hash:** The `proof_hash` field in the verification callback MUST be computed as SHA-256 of `canonical_json` of the proof bundle. `canonical_json` serializes that bundle with object keys sorted alphabetically (recursive), no whitespace between tokens, UTF-8 encoding, and no trailing newline. [1]\n- **Ed25519 signature:** In VCAP v1.1, the `proof_signature` field MUST be computed using Ed25519 (replacing the `HMAC-SHA256` algorithm used in original v1.0, so verifiers check `vcap_version` to select the algorithm). The verifier's Ed25519 public key MUST be registered with the marketplace out-of-band before the first verification request is processed. [1]\n- **Verifier requirements:** A compliant VCAP verifier MUST accept a `verification_request`, return a `verification_callback` within the specified `timeout_seconds`, include a `proof_hash` computed per Section 5.1 and a `proof_signature` computed per Section 5.2, set `passed` to true only if the verification criteria are met, and include an `action_log` documenting all steps taken. A compliant verifier SHOULD use hash-chained action logs, include `extracted_content` when applicable, and provide a human-readable `failure_reason` when `passed` is false. [1]\n- **Action log chain:** For verifiers that record sequential actions, the action log SHOULD be hash-chained. The final `hash_n` SHOULD be included in the proof bundle. Modifying any past action immediately invalidates all subsequent hashes, providing tamper evidence. [1]\n\n---\n\n## Timeout, idempotency, and escrow guards\n\nEscrow state transitions enforce strict timeout escalation, atomic compare-and-swap state guards, and idempotency checks across both work-delivery submissions and `verification_callback` messages so duplicate or replayed callbacks cannot trigger double release. [1]\n\n- **Timeout rules:** The marketplace MUST transition the verification to TIMEOUT status. The escrow MUST remain in HELD status, and funds are NOT auto-released or auto-refunded. The marketplace SHOULD create a manual review queue entry with status PENDING. A human reviewer MUST make the final settlement decision. The reviewer MUST produce a standard `verification_callback` with `passed` true or false, an `action_log` containing a single entry documenting the manual decision, and a `proof_hash` and `proof_signature` computed normally. [1]\n- **Compare-and-swap:** The HELD to RELEASED/REFUNDED transition MUST use an atomic compare-and-swap (CAS) operation to prevent double-release. Implementations SHOULD use database-level atomic updates. [1]\n- **Delivery replay:** If the same provider submits delivery for the same escrow multiple times, the marketplace MUST return the existing verification result rather than creating a new one. This prevents double-release of escrow funds and duplicate verification jobs. [1]\n- **Callback replay:** If a verifier sends the same callback multiple times, for example because of a network retry, the marketplace MUST process only the first callback and acknowledge subsequent duplicates without re-settling the escrow. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **Ed25519 Digital Signatures** | `Ed25519` | Profiles classic standard | VCAP v1.1+ computes `proof_signature` on verification callbacks and signs agent identity headers with `Ed25519` (`Ed25519 SPKI format` public keys) over deterministic `canonical_json` payloads (replacing v1.0 `HMAC-SHA256`), binding `verification_id`, `negotiation_id`, `escrow_ref`, `passed`, and `proof_hash`. [1] |\n| **JSON Schema (Draft 2020-12)** | `JSON Schema` | Profiles classic standard | Appendix B publishes machine-readable JSON Schema definitions for all VCAP negotiation, escrow, and verification message types, whereas JSON Schema Core and Validation do not define escrow state transitions. [1][6][7] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Agent2Agent Protocol (A2A)](/protocols/a2a/)** | Complements | VCAP's message formats, state machine, and callback contracts for escrow release or refund can be carried alongside A2A, and VCAP does not redefine A2A discovery or transport. [1][8] |\n| **[x402](/protocols/x402/)** | Complements | VCAP specifies the escrow hold, verification, and release or refund, while x402 is a separate HTTP 402 PAYMENT-SIGNATURE settlement a marketplace can use as that rail. [1][9] |\n| **[Agent Payments Protocol (AP2)](/protocols/ap2/)** | Complements | VCAP binds release and refund to machine-checkable delivery evidence, while AP2 is the SD-JWT Checkout Mandate and does not define those escrow transitions. [1][10] |\n| **[ERC-8183: Agentic Commerce](/protocols/erc-8183/)** | Peer alternative | VCAP escrow is held on an external rail and released or refunded from a verification callback, while ERC-8183 escrow is an EIP-20 balance inside the job contract across states Open, Funded, Submitted, Completed, Rejected, and Expired. [1][11] |\n\n---\n\n## Adoption and ecosystem\n\n`draft-stone-vcap-02` is an individual IETF Internet-Draft originated by SwarmSync AI (`swarmsync-ai/vcap-spec`, which also publishes a draft `VCAP-AP2 Binding` for `escrow_release`); no independent third-party escrow or verifier deployments have been verified yet. [1][3]\n\n---\n\n## See also\n\n- **Category:** [Pay protocols](/category/pay/)\n\n---\n\n## References\n\n1. B. Stone, SwarmSync.AI, *VCAP: Verified Commerce for Agent Protocols (draft-stone-vcap-02)* (4 September 2026; expires 8 March 2027) — <https://www.ietf.org/archive/id/draft-stone-vcap-02.txt>\n2. B. Stone (SwarmSync.AI), *draft-stone-vcap Datatracker document page* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/draft-stone-vcap/>\n3. SwarmSync AI (swarmsync-ai/vcap-spec), *VCAP: Verified Commerce for Agent Protocols — Specification Repository* (checked 2026-11-12) — <https://raw.githubusercontent.com/swarmsync-ai/vcap-spec/main/README.md>\n4. B. Stone, SwarmSync.AI, *VCAP: Verified Commerce for Agent Protocols (draft-stone-vcap-02)* (4 September 2026; expires 8 March 2027) — <https://www.ietf.org/archive/id/draft-stone-vcap-02.html>\n5. B. Stone (SwarmSync.AI), *VCAP: Verified Commerce for Agent Protocols (draft-stone-vcap-02 HTML)* (4 September 2026; expires 8 March 2027) — <https://datatracker.ietf.org/doc/html/draft-stone-vcap-02>\n6. JSON Schema Organization, *JSON Schema Specification* (fetched 2026-11-12) — <https://json-schema.org/specification>\n7. Austin Wright, Henry Andrews, Ben Hutton, and Greg Dennis, *JSON Schema: A Media Type for Describing JSON Documents (Draft 2020-12)* (2022-06-16) — <https://json-schema.org/draft/2020-12/json-schema-core.html>\n8. Agentic AI Foundation, *A2A joins AAIF's open agentic stack* (published 2026-08-17; modified 2026-09-24) — <https://aaif.io/blog/a2a-joins-aaif>\n9. Linux Foundation, *Linux Foundation Announces Operational Launch of x402 Foundation to Standardize Internet-Native Payments for AI Agents and Applications* (July 14, 2026) — <https://www.linuxfoundation.org/press/linux-foundation-announces-operational-launch-of-x402-foundation-to-standardize-internet-native-payments-for-ai-agents-and-applications>\n10. Google (google-agentic-commerce), *Agentic Payment Protocol (v0.2)* (fetched 2026-10-30) — <https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/specification.md>\n11. Davide Crapis, Bryan Lim, Tay Weixiong, and Chooi Zuhwa, *ERC-8183: Agentic Commerce* (created 2026-02-25; fetched 2026-10-31) — <https://eips.ethereum.org/EIPS/eip-8183>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "ANP",
   "adoption": {
    "level": "observed",
    "by": "OpenANP (AgentConnect), Open DID Server, MCP2ANP, ANP Proxy, ANP SDKs (anp, Rust anp, @awiki/anp-typescript-sdk), OpenManus-ANP, and OWL-ANP",
    "probe_run": null
   },
   "aliases": [],
   "analog": "none",
   "collisions": [],
   "discovery": {
    "mechanism": "Agent Discovery Service Protocol (ADSP), active .well-known discovery",
    "path": "/.well-known/agent-descriptions"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://github.com/agent-network-protocol/AgentNetworkProtocol",
     "claim": "Agent Network Protocol community, *AgentNetworkProtocol repository*, checked 2026-11-03",
     "date": null,
     "quote": "support for \\u003ccode\\u003edid:wba\\u003c/code\\u003e, authentication, agent description, protocol negotiation, secure communication, and application protocols.\\u003c/p\\u003e\\n\\u003cdiv / \"created_at\": \"2024-10-23T01:15:51Z\", \"updated_at\": \"2026-10-30T09:20:35Z\", \"pushed_at\": \"2026-10-30T08:41:40Z\" / \"public\", \"site_admin\": false }, \"html_url\": \"https://github.com/agent-network-protocol/AgentNetworkProtocol\", \"description\": \"AgentNetworkProtocol(ANP) is an open source protocol for",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/README.md",
     "claim": "Agent Network Protocol community, *Agent Network Protocol (ANP) README*, checked 2026-10-30",
     "date": null,
     "quote": "Agent Network Protocol (ANP) is an open-source communication protocol for intelligent agents. Its goal is to define how agents connect with each other and to build an open, secure, and efficient collaboration network for billions of agents. / ANP is built on existing Internet infrastructure and organizes the released protocol capabilities into two core protocol layers plus domain-specific application protocols: / Identity and Encrypted Communication Layer: based on W3C DID and Web infrastructure. ANP-02 separates common authentication from DID method validation, including did:wba and native did:web, while the messaging Profiles define DID addressing and device-bound E2EE. / Version: 1.2 identifies the specification/document release version, not a wire version. / P6 Group E2EE is included in the 1.2 documentation but remains a candidate pending its registered MLS ExtensionType release gate; the provisional 0xF0A1 value is not a completed registration. / protocols. ## Contact Us We have established an ANP open-source technical community to advance / ANP aims to become the HTTP of the Agentic Web era: a protocol suite for agent identity, naming, discovery, negotiation, secure messaging, and application-level collaboration. Note: This project has not issued any digital currency on any platform or blockchain. Vision and Positioning Agent Network Protocol (ANP) is an open-source communication protocol for intelligent agents. Its goal is to define how agents connect with each other and to build an open, secure, and efficient collaboration network for billions of agents. / We have established an ANP open-source technical community / the AgentConnect repository: - https://github.com/agent-network-protocol/AgentConnect AgentConnect focuses on practical SDK support for did:wba, authentication, / Current specification set: ANP 1.2. Core specifications and all nine messaging documents have been integrated from vNext into their canonical release paths. ANP-02 provides DID-method-independent authentication for did:wba and native did:web; ANP-03 defines WBA method rules and identity continuity; ANP-04 defines WNS naming. Agent description and discovery documents are aligned with this release. / ANP Community This file is released under the Apache License 2.0. You are free / Current specification set: ANP 1.2. ... ANP-05: DID-Based Authorization | Draft / not released; v0.7 ... ANP-06: Agent Communication Meta-Protocol ... ANP-10: AP2 Payment Adaptation Draft | Draft / not released; EN document v1.1",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://github.com/w3c-cg/ai-agent-protocol",
     "claim": "w3c-cg/ai-agent-protocol (GitHub), *w3c-cg/ai-agent-protocol repository record*, checked 2026-10-30",
     "date": null,
     "quote": "\"full_name\": \"w3c-cg/ai-agent-protocol\" / \"public\", \"site_admin\": false }, \"html_url\": \"https://github.com/w3c-cg/ai-agent-protocol\", \"description\": \"Agent Network Protocol White Paper\", \"fork\": false,",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/08-ANP-Agent-Discovery-Protocol-Specification.md",
     "claim": "Agent Network Protocol Community, *08-ANP-Agent-Discovery-Protocol-Specification.md (ANP-08)*, checked 2026-10-30",
     "date": null,
     "quote": "According to RFC 8615,.well-known URI provides a standardized way to discover services and resources. For agent discovery, we define the following path: https://{domain}/.well-known/agent-descriptions / Active discovery documents adopt the JSON-LD format, using the CollectionPage type, containing the following core properties:",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/07-anp-agent-description-protocol-specification.md",
     "claim": "Agent Network Protocol Community, *07-anp-agent-description-protocol-specification.md (ANP-07)*, checked 2026-10-30",
     "date": null,
     "quote": "The Agent Description (AD) document serves as the entry point for accessing an agent, similar to a website's homepage. / Other agents can obtain information such as the agent's name, affiliated entity, capabilities, products, services, interaction APIs, or protocols from this AD document.",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/02-anp-did-authentication-protocol-specification.md",
     "claim": "Agent Network Protocol Community, *02-anp-did-authentication-protocol-specification.md (ANP-02)*, checked 2026-10-30",
     "date": null,
     "quote": "Clients MUST send authentication information using the Signature-Input and Signature header fields defined in RFC 9421. When a request includes a message body, the client MUST also send the Content-Digest header field defined in RFC 9530. / The server MUST return the access token via the Authentication-Info response header, not the Authorization response header. / JSON Canonicalization Scheme - RFC 7519: JSON Web Token - ANP-03: did:wba Method Specification / Request: Signature-Input, Signature, Content-Digest Agent B Server->>Agent A DID Server: Get DID Document Agent / Clients MUST send authentication information using the Signature-Input and Signature header fields defined in RFC 9421. / Business permissions, human authorization, message origin proof, and E2EE object proof are defined by their owning application or Profile; authentication alone does not imply business authority.",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://github.com/agent-network-protocol/AgentNetworkProtocol/releases",
     "claim": "agent-network-protocol/AgentNetworkProtocol (GitHub), *AgentNetworkProtocol releases (ANP 1.2)*, 2026-09-24; checked 2026-10-30",
     "date": null,
     "quote": "\"tag_name\": \"v1.2\", \"target_commitish\": \"26ff75c634fa032fcc42291b10188174d9d4b4b0\", \"name\": \"ANP 1.2 Release\", \"draft\": false, \"immutable\": false, \"prerelease\": false, \"created_at\": \"2026-09-24T04:43:37Z\" / \"2026-09-24T04:45:30Z\", \"published_at\": \"2026-09-24T04:45:30Z\", \"assets\": [ ], \"tarball_url\": \"https://api.github.com/repos/agent-network-protocol/AgentNetworkProtocol/tarball/v1.2\", \"zipball_url\": / Added the ANP Agent Instant Messaging protocol suite, covering core binding, identity and discovery,",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://arxiv.org/abs/2508.00007",
     "claim": "Gaowei Chang et al. (arXiv), *[2508.00007] Agent Network Protocol Technical White Paper*, 2025-07-18; checked 2026-10-30",
     "date": null,
     "quote": "Title: Agent Network Protocol Technical White Paper Authors: Gaowei Chang, Eidan Lin, Chengxuan Yuan, Rizhao Cai, Binbin Chen, Xuan Xie, Yin Zhang / Network Protocol Technical White Paper website arXiv.org Agent Network Protocol Technical White Paper https://arxiv.org/abs/2508.00007v1 / existing internet infrastructure is primarily designed for human interaction, creating data silos, unfriendly interfaces, and high collaboration costs among agents, making it difficult to support the needs for large-scale agent interconnection and collaboration.",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://w3c-cg.github.io/ai-agent-protocol/",
     "claim": "W3C AI Agent Protocol Community Group, *Agent Network Protocol White Paper*, checked 2026-10-30",
     "date": null,
     "quote": "Agent Network Protocol White Paper / Agent Network Protocol White Paper // See https://github.com/w3c/respec/wiki/ for how to configure ReSpec var",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/05-anp-did-authorization-protocol-specification.md",
     "claim": "Agent Network Protocol Community, *05-anp-did-authorization-protocol-specification.md (ANP-05)*, checked 2026-10-30",
     "date": null,
     "quote": "ANP-05 defines the DID-based agent authorization workstream with two complementary mechanisms: the OAuth Profile, in which an authorization server trusted by the resource side issues access tokens, and the VC Profile, in which a user or organization that holds the authority issues a W3C Verifiable Credential (VC) that the Agent holds and presents. DID identifies principals at the ANP layer. In the OAuth path, an ordinary AS uses the URL client identifier and its own resource-owner identity; only an explicitly verified DID binding establishes the associated DID at that AS. The VC path identifies its issuer and authorized Agent by DID. The first release (v1) is a DID–OAuth client identity and basic delegated-access Profile, plus directly presented single-level VC delegation and organization-role credentials, not a complete agent delegation system. The current document is its unreleased v0.7 draft. / be carried by an ANP-02-authenticated HTTP interface or an authenticated messaging session without changing",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/06-anp-agent-communication-meta-protocol-specification.md",
     "claim": "Agent Network Protocol Community, *06-anp-agent-communication-meta-protocol-specification.md (ANP-06)*, checked 2026-10-30",
     "date": null,
     "quote": "Document ID: ANP-06 - Title: ANP Agent Communication Meta-Protocol Specification - Status: Draft - Version: 1.2 / Define a standard Profile: anp.meta.negotiation.v1; Define MetaProtocolInterface as an interface type that can be declared in the interfaces array of an Agent Description document; Reuse ANP Core Binding's JSON-RPC 2.0, params.meta/body/auth, profile, security_profile, target, and error model; Reuse anp.get_capabilities as the runtime capability confirmation method; Define anp.negotiate for selecting the final execution interface based on caller intent, caller capabilities, and constraints; Support structured-interface-first negotiation, natural-language fallback, cache reuse, and future protocol artifact publication; Explicitly mark the early PT=00 message negotiation model as deprecated and outside the compatibility scope of this specification. / 2024 ANP Open Source Community This file is released under the Apache License 2.0.",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/application/10-anp-agent-payment-protocol-specification.md",
     "claim": "Agent Network Protocol, *ANP-10: Agent Payment Protocol Specification (v1.1 Draft)*, checked 2026-10-30",
     "date": null,
     "quote": "Document ID: ANP-10 - Title: ANP Agent Payment Protocol Specification - Status: Draft / not released - Version: 1.1 / Original AP2 Protocol: An open protocol released by Google in September 2025 ... CartMandate, PaymentMandate, and DeliveryReceipt 3. Using JWT/JWS standard for authorization signatures ... did:wba for agent identity authentication ... IntentMandate | Supports pre-authorized autonomous agent shopping | Not supported (planned) ... - [ ] Support SD-JWT",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/03-did-wba-method-design-specification.md",
     "claim": "Agent Network Protocol Community, *03-did-wba-method-design-specification.md (ANP-03)*, checked 2026-10-30",
     "date": null,
     "quote": "Recommendation. Retrieved from https://www.w3.org/TR/did-core/ 2. did:web. Retrieved from https://w3c-ccg.github.io/did-method-web/ 3. RFC 7638. JSON Web / no path is specified in the URL, /.well-known is appended. Append /did.json to complete / e1_: Binds the Ed25519 public key, recommended for new deployments, and can directly integrate the W3C standard Data Integrity EdDSA proof.",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/04-anp-did-wba-name-space-specification.md",
     "claim": "Agent Network Protocol Community, *04-anp-did-wba-name-space-specification.md (ANP-04)*, checked 2026-10-30",
     "date": null,
     "quote": "Provider: - URL: https://{domain}/.well-known/handle/{local-part} - Method: GET - Response Content-Type: application/json Where {domain} is",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/message/README.md",
     "claim": "agent-network-protocol/AgentNetworkProtocol (GitHub), *ANP Messaging 1.2 Profile Index*, checked 2026-10-30",
     "date": null,
     "quote": "ANP Open Source Community This file is released under the Apache License 2.0. You",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://www.rfc-editor.org/rfc/rfc8615.html",
     "claim": "M. Nottingham, *RFC 8615: Well-Known Uniform Resource Identifiers (URIs)*, May 2019",
     "date": null,
     "quote": "This memo defines a path prefix for \"well-known locations\",",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://www.rfc-editor.org/rfc/rfc9421.html",
     "claim": "A. Backman, Ed., J. Richer, Ed., and M. Sporny, *RFC 9421: HTTP Message Signatures*, February 2024",
     "date": null,
     "quote": "<meta content=\"Common,Latin\" name=\"scripts\">",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://www.w3.org/TR/did-core/",
     "claim": "W3C, *Decentralized Identifiers (DIDs) v1.0*, 2022-07-19",
     "date": "2022-07-19",
     "quote": "Decentralized identifiers (DIDs) are a new type of identifier that",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://aaif.io/blog/a2a-joins-aaif",
     "claim": "Agentic AI Foundation, *A2A joins AAIF's open agentic stack*, published 2026-08-17; modified 2026-09-24",
     "date": null,
     "quote": "A2A v1.0, the first stable specification, shipped in March 2026.",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://agoraprotocol.org/docs/protocol/specification",
     "claim": "Samuele Marro, *Agora Protocol for Two-Party JSON Exchanges*, updated Jan 19, 2025",
     "date": null,
     "quote": "Below is the Working Standard for the Agora Protocol, structured in a style similar to IETF RFCs. It includes the sections outlined previously, along with normative language (per RFC 2119 and RFC 8174). While this document follows a typical RFC format, it should be understood as a draft.",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Current : the current protocol version, which is ready for use and may continue to receive backwards compatible changes.",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://datatracker.ietf.org/doc/draft-narajala-courtney-ansv2/",
     "claim": "Scott Courtney, Vineeth Sai Narajala, Ken Huang, Idan Habler, and Akram Sheriff, *draft-narajala-courtney-ansv2 — Agent Name Service v2 (ANS): A Domain-Anchored Identity Layer for Autonomous AI Agents (IETF Datatracker)*, checked 2026-10-30",
     "date": null,
     "quote": "Document Type Active Internet-Draft (individual) Authors Scott Courtney, Vineeth Sai Narajala, Ken Huang, Idan Habler, Akram Sheriff Last updated 2026-10-26 Replaces draft-narajala-ans RFC stream (None) Intended RFC status (None)",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://raw.githubusercontent.com/agent-network-protocol/anp/main/README.md",
     "claim": "Agent Network Protocol Community, *agent-network-protocol/anp README*, checked 2026-10-30",
     "date": null,
     "quote": "AgentConnect is the multi-language SDK and reference implementation for the Agent Network Protocol (ANP). It helps agents identify each other, publish discoverable interfaces, call each other over standard RPC, attach verifiable proofs, resolve human-readable handles, and build end-to-end encrypted communication flows. The Python package name is anp; this repository also contains Go, Rust, Dart, TypeScript, and Java SDK implementations or SDK workspaces.",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://github.com/agent-network-protocol/anp/releases",
     "claim": "OpenANP (AgentConnect), *Release release-20260912*, checked 2026-10-30",
     "date": null,
     "quote": "Python, Go, and Rust ANP SDKs.\\r\\n\\r\\n AgentConnect is the multi-language SDK and reference implementation",
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://raw.githubusercontent.com/agent-network-protocol/open-did-server/main/README.md",
     "claim": "Agent Network Protocol Community, *agent-network-protocol/open-did-server README*, checked 2026-10-30",
     "date": null,
     "quote": "Open DID Server 是一个开源 DID 文档服务。它托管本实例签发的 did:wba（E1）和 did:web 文档，按标准 DID 路径把客户端上传的原文分发出去，并提供 Handle 到 DID 的查询。调用方用自己的认证私钥对 HTTP 请求签名；服务只接受一种有限形态的 ANP HTTP Message Signature。",
     "ref": 25
    },
    {
     "label": "[26]",
     "url": "https://raw.githubusercontent.com/agent-network-protocol/mcp2anp/main/README.md",
     "claim": "Agent Network Protocol Community, *agent-network-protocol/mcp2anp README*, checked 2026-10-30",
     "date": null,
     "quote": "mcp2anp.server 第四步：运行官方 Demo 运行官方演示脚本，查看完整的使用示例： bash uv run python examples/mcp_client_demo.py Demo 会演示： 列出可用工具 调用 anp.fetchDoc",
     "ref": 26
    },
    {
     "label": "[27]",
     "url": "https://raw.githubusercontent.com/agent-network-protocol/anp-proxy/main/README.md",
     "claim": "Agent Network Protocol Community, *agent-network-protocol/anp-proxy README*, checked 2026-10-30",
     "date": null,
     "quote": "Agent Network Proxy (ANP) - 高性能 HTTP over WebSocket 隧道，用于私有网络服务的安全对外暴露。",
     "ref": 27
    },
    {
     "label": "[28]",
     "url": "https://pypi.org/pypi/anp/json",
     "claim": "PyPI, *PyPI anp package metadata*, checked 2026-10-30",
     "date": null,
     "quote": "\"summary\":\"An SDK that enables agents to connect with each other, allowing them to perform identity authentication, end-to-end encrypted communication, automatic protocol negotiation based on LLMs, and efficient data exchange.\",\"version\":\"1.0.7\",\"yanked\":false",
     "ref": 28
    },
    {
     "label": "[29]",
     "url": "https://crates.io/api/v1/crates/anp",
     "claim": "crates.io (Rust Registry), *crates.io anp package metadata*, checked 2026-10-30",
     "date": null,
     "quote": "\"description\":\"Rust SDK for Agent Network Protocol (ANP)\",\"homepage\":\"https://agent-network-protocol.com/\",\"documentation\":\"https://docs.rs/anp\",\"repository\":\"https://github.com/agent-network-protocol/AgentConnect\"",
     "ref": 29
    },
    {
     "label": "[30]",
     "url": "https://registry.npmjs.org/@awiki/anp-typescript-sdk",
     "claim": "npm Registry API, *@awiki/anp-typescript-sdk package metadata*, checked 2026-10-30",
     "date": null,
     "quote": "ANP TypeScript SDK\\n\\nTypeScript SDK for the Agent Network Protocol focused on four Rust-aligned modules:\\n\\n-",
     "ref": 30
    },
    {
     "label": "[31]",
     "url": "https://github.com/agent-network-protocol/OpenManus-ANP",
     "claim": "OpenManus-ANP, *GitHub - agent-network-protocol/OpenManus-ANP*, checked 2026-11-03",
     "date": null,
     "quote": "\"type\": \"Organization\", \"user_view_type\": \"public\", \"site_admin\": false }, \"html_url\": \"https://github.com/agent-network-protocol/OpenManus-ANP\", \"description\": \"OpenManus-ANP\", \"fork\": true, \"url\":",
     "ref": 31
    },
    {
     "label": "[32]",
     "url": "https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/blogs/One-Prompt-One-HTTP-Function-Enabling-Open-Source-Manus-to-Interact-with-Other-Agents-via-ANP.md",
     "claim": "Agent Network Protocol Community, *One Prompt, One HTTP Function: Enabling Open-Source Manus to Interact with Other Agents via ANP*, checked 2026-11-03",
     "date": null,
     "quote": "This week, members of the ANP open-source technology community completed a task by adding support for the ANP protocol to the two most popular open-source Manus projects (owl and OpenManus), allowing open-source Manus to access the internet via ANP. (Thanks again to the community developers for their contributions!) We first conducted a small-scale test within our developer community and agent communication protocol exchange group, and today we are officially releasing it to the public. During the integration process, we observed the strengths of ANP compared to MCP. With just one prompt and one HTTP function, agents can communicate and collaborate with any other agent.",
     "ref": 32
    },
    {
     "label": "[33]",
     "url": "https://github.com/agent-network-protocol/owl_anp",
     "claim": "OWL-ANP, *GitHub - agent-network-protocol/owl_anp*, checked 2026-11-03",
     "date": null,
     "quote": "discussions!\\u003c/p\\u003e\\n\\n\\u003cp dir=\\\"auto\\\"\\u003e\\u003ca target=\\\"_blank\\\" rel=\\\"noopener noreferrer\\\" href=\\\"/agent-network-protocol/owl_anp/blob/main/assets/community_5.jpg\\\"\\u003e\\u003cimg",
     "ref": 33
    }
   ],
   "form": "well-known-file",
   "governance": "Community-led open-source project (agent-network-protocol GitHub org)",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against agent-network-protocol.com and github.com/agent-network-protocol/AgentNetworkProtocol README + ANP-08 discovery spec; corrected version from v0.1/experimental to released v1.1 and filled discovery path"
    },
    {
     "date": "2026-10-16",
     "note": "Agent Network Protocol v1.2 released on 2026-09-24"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "anp",
   "implementation": "shipping",
   "last_verified": "2026-11-12",
   "name": "Agent Network Protocol",
   "native_status": "Released v1.2 (core suite); meta-protocol (ANP-06) remains draft/unreleased",
   "origin": {
    "date": null,
    "org": "Agent Network Protocol community project"
   },
   "part_of": null,
   "parties": [
    "agent-agent"
   ],
   "phase": "stable",
   "probe": {
    "method": "GET",
    "on_absent": "404 or non-JSON-LD response means the domain does not expose ANP active discovery; agents there may still be reachable only via passive registration with a search service",
    "parse": "JSON-LD CollectionPage document with an items[] array of ad:AgentDescription entries confirms ANP active discovery is exposed",
    "path": "{origin}/.well-known/agent-descriptions"
   },
   "question": "How can decentralized agents from different platforms authenticate, discover, and message each other without a central registry?",
   "scope": "general",
   "spec_url": "https://github.com/agent-network-protocol/AgentNetworkProtocol",
   "step": "coordinate",
   "summary_md": "**Agent Network Protocol** (`ANP`) is an open-source communication protocol suite for intelligent agents originated by Gaowei Chang and the ANP Community, with ongoing standardization work in the W3C AI Agent Protocol Community Group (`w3c-cg/ai-agent-protocol`). Built on existing HTTP, DNS, and TLS infrastructure, the protocol organizes released capabilities into an Identity and Encrypted Communication Layer based on W3C Decentralized Identifiers (`did:wba` and native `did:web`) and an Application Protocol Layer covering Agent Description (`ANP-07`), Agent Discovery (`ANP-08`), and end-to-end instant messaging (`ANP-09`). For active discovery under `ANP-08`, a client retrieves `https://{domain}/.well-known/agent-descriptions` to obtain a JSON-LD `CollectionPage` listing `ad:AgentDescription` URLs, and fetches each `AgentDescription` document (`ANP-07`) for `securityDefinitions` and `NaturalLanguageInterface` or `StructuredInterface` endpoints. Under `ANP-02`, a client's initial cross-platform HTTP request MUST carry RFC 9421 `Signature-Input` and `Signature` headers (plus RFC 9530 `Content-Digest` when a message body is present) with `keyid` pointing to a `did:wba` or `did:web` verification method, after which the server can return an access token via the `Authentication-Info` response header for subsequent `Authorization` requests. The `agent-network-protocol/AgentNetworkProtocol` repository was created on 2024-10-23 under the `Apache-2.0` license and published `ANP 1.2` (`v1.2`) on 2026-09-24. `Version: 1.2` identifies the specification document release version rather than a wire version, while `ANP-05` (`v0.7`), `ANP-06`, and `ANP-10` remain unreleased drafts and `P6` Group E2EE remains a candidate pending its registered MLS `ExtensionType` gate.",
   "track": "community",
   "version": {
    "label": "v1.2",
    "date": "2026-09-24"
   },
   "watch": [
    {
     "type": "github",
     "repo": "agent-network-protocol/AgentNetworkProtocol",
     "mode": "release"
    }
   ],
   "use_cases": [
    "agent-to-agent-messaging",
    "prove-agent-identity",
    "discover-my-api",
    "agent-naming"
   ],
   "audience": [
    "agent-builder",
    "standards-body",
    "platform"
   ],
   "pairs_with": [
    "a2a",
    "agora-protocol",
    "mcp",
    "ap2",
    "ans"
   ],
   "prerequisites": [
    "http-message-signatures"
   ],
   "hatnote_md": "For Google's Agent2Agent task-delegation protocol, see [Agent2Agent Protocol (A2A)](/protocols/a2a/). For the Oxford meta-protocol negotiation specification, see [Agora Protocol](/protocols/agora-protocol/). For GoDaddy's DNS- and transparency-log-anchored agent naming architecture, see [Agent Name Service v2 (ANS)](/protocols/ans/).",
   "tier": "spec_brief",
   "lifecycle_status": "published_standard",
   "wire_archetype": "harnesses_rpc_ui",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "For Google's Agent2Agent task-delegation protocol, see [Agent2Agent Protocol (A2A)](/protocols/a2a/). For the Oxford meta-protocol negotiation specification, see [Agora Protocol](/protocols/agora-protocol/). For GoDaddy's DNS- and transparency-log-anchored agent naming architecture, see [Agent Name Service v2 (ANS)](/protocols/ans/). [1]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Agent Network Protocol** (`ANP`) is an open-source communication protocol suite for intelligent agents originated by Gaowei Chang and the ANP Community, with ongoing standardization work in the W3C AI Agent Protocol Community Group (`w3c-cg/ai-agent-protocol`). [2][3] Built on existing HTTP, DNS, and TLS infrastructure, the protocol organizes released capabilities into an Identity and Encrypted Communication Layer based on W3C Decentralized Identifiers (`did:wba` and native `did:web`) and an Application Protocol Layer covering Agent Description (`ANP-07`), Agent Discovery (`ANP-08`), and end-to-end instant messaging (`ANP-09`). [2] For active discovery under `ANP-08`, a client retrieves `https://{domain}/.well-known/agent-descriptions` to obtain a JSON-LD `CollectionPage` listing `ad:AgentDescription` URLs, and fetches each `AgentDescription` document (`ANP-07`) for `securityDefinitions` and `NaturalLanguageInterface` or `StructuredInterface` endpoints. [4][5] Under `ANP-02`, a client's initial cross-platform HTTP request MUST carry RFC 9421 `Signature-Input` and `Signature` headers (plus RFC 9530 `Content-Digest` when a message body is present) with `keyid` pointing to a `did:wba` or `did:web` verification method, after which the server can return an access token via the `Authentication-Info` response header for subsequent `Authorization` requests. [6] The `agent-network-protocol/AgentNetworkProtocol` repository was created on 2024-10-23 under the `Apache-2.0` license and published `ANP 1.2` (`v1.2`) on 2026-09-24. [1][7] `Version: 1.2` identifies the specification document release version rather than a wire version, while `ANP-05` (`v0.7`), `ANP-06`, and `ANP-10` remain unreleased drafts and `P6` Group E2EE remains a candidate pending its registered MLS `ExtensionType` gate. [2]",
   "v05_identity_sentence_md": "**Agent Network Protocol** (`ANP`) is an open-source communication protocol suite for intelligent agents originated by Gaowei Chang and the ANP Community, with ongoing standardization work in the W3C AI Agent Protocol Community Group (`w3c-cg/ai-agent-protocol`). [2][3] Built on existing HTTP, DNS, and TLS infrastructure, the protocol organizes released capabilities into an Identity and Encrypted Communication Layer based on W3C Decentralized Identifiers (`did:wba` and native `did:web`) and an Application Protocol Layer covering Agent Description (`ANP-07`), Agent Discovery (`ANP-08`), and end-to-end instant messaging (`ANP-09`). [2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Coordinate](/category/coordinate/) (`coordinate`)"
    },
    {
     "label": "Form",
     "value_md": "Well-known file (`well-known-file`)"
    },
    {
     "label": "Originated by",
     "value_md": "Gaowei Chang (`chgaowei`) and the ANP Community (with E. Lin, C. Yuan, R. Cai, B. Chen, X. Xie, and Y. Zhang on `arXiv:2508.00007`) [1][2][8]"
    },
    {
     "label": "Governed by",
     "value_md": "ANP Community (`agent-network-protocol`) and W3C AI Agent Protocol Community Group (`w3c-cg/ai-agent-protocol`, a W3C Community Group rather than a Recommendation-track Working Group) [1][2][3]"
    },
    {
     "label": "Track",
     "value_md": "Open-source community specification (`AgentNetworkProtocol`) and W3C AI Agent Protocol Community Group report (non-Recommendation track) [2][9]"
    },
    {
     "label": "Status",
     "value_md": "Released v1.2 (core suite); ANP-05 (v0.7), ANP-06 (v1.2), and ANP-10 (v1.1) remain unreleased drafts [2][7][10][11][12]"
    },
    {
     "label": "Version",
     "value_md": "`ANP 1.2` (`2026-09-24` core & `ANP Messaging 1.2`; `ANP-05` `v0.7`, `ANP-06` `v1.2`, `ANP-10` `v1.1` drafts; `P6` MLS-gated; `anp` SDK `v1.0.7`) [2][7][10][11][12]"
    },
    {
     "label": "Wire format",
     "value_md": "JSON-RPC 2.0 (`anp.core.binding.v1` `params.meta`/`body`/`auth`), JSON-LD (`CollectionPage`, `ad:AgentDescription`), DID Documents (`did:wba`/`did:web`), OpenRPC 1.3.2 / OpenAPI 3.x, RFC 9421 / 9530 [6][11][13]"
    },
    {
     "label": "Specification",
     "value_md": "[AgentNetworkProtocol (`ANP 1.2`)](https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/README.md) · [ANP-10 Payment Draft (v1.1)](https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/application/10-anp-agent-payment-protocol-specification.md) · [White Paper (`arXiv:2508.00007`)](https://arxiv.org/abs/2508.00007) · [W3C CG Drafts](https://w3c-cg.github.io/ai-agent-protocol/) · [AgentConnect SDK](https://raw.githubusercontent.com/agent-network-protocol/anp/main/README.md) [2][8][9][12]"
    },
    {
     "label": "Found at",
     "value_md": "`GET /.well-known/agent-descriptions`, `/.well-known/did.json` or `/{path}/e1_<fp>/did.json`, `/.well-known/handle/{local-part}`, `Signature-Input`, `Signature`, `Content-Digest`, `WWW-Authenticate: DIDWba` [6][13][14]"
    },
    {
     "label": "Licence",
     "value_md": "Apache-2.0 (`AgentNetworkProtocol` and `anp`) [2][11][15]"
    }
   ],
   "v05_problem_md": "Existing internet infrastructure is primarily designed for human interaction, creating data silos, unfriendly interfaces, and high collaboration costs among agents that make large-scale cross-platform agent interconnection difficult. [8] ANP layers decentralized identity and discovery over existing HTTP, DNS, and TLS infrastructure: `ANP-02` and `ANP-03` authenticate cross-domain requests using `did:wba` (with `e1_` Ed25519 path fingerprints or `/.well-known/did.json`) or `did:web` documents and RFC 9421 `Signature-Input` and `Signature` headers. [6][13] At the application layer, `ANP-08` exposes public agents via JSON-LD `CollectionPage` documents at `https://{domain}/.well-known/agent-descriptions` and `ANP-07` publishes machine-readable `AgentDescription` documents linking `openrpc`, `YAML`, `MCP`, or `WebRTC` interfaces. [4][5] `ANP-02` authentication verifies identity and message integrity without implying business authority, human authorization, or `E2EE` object proof, while `ANP-05` and `ANP-06` remain drafts outside stable `ANP 1.2`. Likewise, `ANP-10` (`Version: 1.1`, `Status: Draft / not released`) adapts September 2025 `AP2` v0.1-style `CartMandate` and `PaymentMandate` objects (plus `DeliveryReceipt`) signed with `JWT`/`JWS` for `did:wba` agents (`IntentMandate` not supported/planned; `SD-JWT` an unchecked roadmap item), rather than `AP2` v0.2's `SD-JWT` checkout and payment mandates. [2][6][12]",
   "v05_mechanism_delta_md": "ANP layers decentralized identity and discovery over existing HTTP, DNS, and TLS infrastructure: `ANP-02` and `ANP-03` authenticate cross-domain requests using `did:wba` (with `e1_` Ed25519 path fingerprints or `/.well-known/did.json`) or `did:web` documents and RFC 9421 `Signature-Input` and `Signature` headers. [6][13] At the application layer, `ANP-08` exposes public agents via JSON-LD `CollectionPage` documents at `https://{domain}/.well-known/agent-descriptions` and `ANP-07` publishes machine-readable `AgentDescription` documents linking `openrpc`, `YAML`, `MCP`, or `WebRTC` interfaces. [4][5]",
   "v05_scope_boundary_md": "`ANP-02` authentication verifies identity and message integrity without implying business authority, human authorization, or `E2EE` object proof, while `ANP-05` and `ANP-06` remain drafts outside stable `ANP 1.2`. Likewise, `ANP-10` (`Version: 1.1`, `Status: Draft / not released`) adapts September 2025 `AP2` v0.1-style `CartMandate` and `PaymentMandate` objects (plus `DeliveryReceipt`) signed with `JWT`/`JWS` for `did:wba` agents (`IntentMandate` not supported/planned; `SD-JWT` an unchecked roadmap item), rather than `AP2` v0.2's `SD-JWT` checkout and payment mandates. [2][6][12]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "Well-Known URIs (RFC 8615)",
      "spec_or_rfc": "RFC 8615",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "ANP publishes agent description documents at /.well-known/agent-descriptions and handle resolution at /.well-known/handle/{local-part}; neither path is registered in the IANA Well-Known URIs registry. [2][16]"
     },
     {
      "name": "HTTP Message Signatures (RFC 9421)",
      "spec_or_rfc": "RFC 9421",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "ANP-02 requires clients to send RFC 9421 Signature-Input and Signature headers, and RFC 9530 Content-Digest when the request has a body, covering @method, @target-uri, and content-digest, which is request authentication rather than the agent-description document. [2][17]"
     },
     {
      "name": "W3C Decentralized Identifiers and Verifiable Credentials",
      "spec_or_rfc": "W3C DID 1.0",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "ANP-03 defines did:wba, resolving a bare domain such as did:wba:example.com to https://example.com/.well-known/did.json, and ANP-08 active discovery reads a JSON-LD CollectionPage at /.well-known/agent-descriptions. [2][18]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "a2a",
      "target_name": "Agent2Agent Protocol (A2A)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ANP publishes /.well-known/agent-descriptions, requires RFC 9421 Signature-Input and Signature plus Content-Digest in ANP-02, and addresses did:wba agents, while A2A uses an Agent Card at /.well-known/agent-card.json and delegates tasks over JSON-RPC 2.0, gRPC, or HTTP+JSON. [2][19]"
     },
     {
      "target_id": "agora-protocol",
      "target_name": "Agora Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "ANP-06 remains draft and cites Agora as a design inspiration, while ANP's released core is the v1.2 suite published at /.well-known/agent-descriptions. [2][20]"
     },
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "The mcp2anp bridge exposes MCP tools to ANP agents, and MCP's own session remains JSON-RPC over stdio or Streamable HTTP rather than ANP's signed HTTP. [2][21]"
     },
     {
      "target_id": "ap2",
      "target_name": "Agent Payments Protocol (AP2)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "`ANP-10` (`Version: 1.1`, `Status: Draft / not released`) adapts `AP2` `v0.1`-style `CartMandate` and `PaymentMandate` objects (plus `DeliveryReceipt`) signed with `JWT`/`JWS` for `did:wba` agents (`IntentMandate` not supported / deferred; `SD-JWT` listed as an unchecked future roadmap item), whereas `AP2` `v0.2` uses `mandate.checkout.1` / `mandate.payment.1` `SD-JWT` schemas not adopted by `ANP-10`. [12]"
     },
     {
      "target_id": "ans",
      "target_name": "Agent Name Service v2 (ANS)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "ANS v2 publishes agent names in DNS under _ans and _ra-badge labels, while ANP publishes the agent description at /.well-known/agent-descriptions and uses did:wba agents in ANP-10. [2][22]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (7 probed or cited examples; non-exhaustive).",
    "side_a": {
     "visible": true,
     "heading": "Servers, repos & skill indexes",
     "col4_header": "Transport & Scope",
     "note_md": null,
     "rows": [
      {
       "actor": "OpenANP (AgentConnect)",
       "role": "Agent framework",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "OpenANP, in agent-network-protocol/anp, turns Python methods into discoverable ANP interfaces and exposes the standard agent documents and a JSON-RPC endpoint. The repo is the multi-language reference implementation (Python package anp; Go, Rust, Dart, TypeScript, and Java workspaces). Coordinated release tag release-20260912.",
       "source_md": "[agent-network-protocol/anp README](https://raw.githubusercontent.com/agent-network-protocol/anp/main/README.md) [23] · [Release release-20260912](https://github.com/agent-network-protocol/anp/releases) [24]"
      },
      {
       "actor": "Open DID Server",
       "role": "Messaging node / Server",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-01",
       "col4_md": "agent-network-protocol/open-did-server (created 2026-10-01) hosts did:wba (e1_) and did:web documents on standard DID paths, resolves WNS Handles, and accepts only a limited ANP HTTP Message Signature (RFC 9421 sig1) over the caller's authentication key.",
       "source_md": "[open-did-server README](https://raw.githubusercontent.com/agent-network-protocol/open-did-server/main/README.md) [25]"
      },
      {
       "actor": "MCP2ANP",
       "role": "Messaging node / Server",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "MCP bridge exposing tools anp.fetchDoc and anp.invokeOpenRPC so an MCP host can discover and call remote ANP agents with did:wba credentials.",
       "source_md": "[mcp2anp README](https://raw.githubusercontent.com/agent-network-protocol/mcp2anp/main/README.md) [26]"
      },
      {
       "actor": "ANP Proxy",
       "role": "Messaging node / Server",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "asyncio HTTP-over-WebSocket tunnel that exposes private ASGI agent services.",
       "source_md": "[anp-proxy README](https://raw.githubusercontent.com/agent-network-protocol/anp-proxy/main/README.md) [27]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "IDEs, hosts & coding agents",
     "col4_header": "Transport & Scope",
     "note_md": null,
     "rows": [
      {
       "actor": "ANP SDKs (anp, Rust anp, @awiki/anp-typescript-sdk)",
       "role": "Client SDK / Runtime",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "PyPI anp 1.0.7 (identity authentication, end-to-end encrypted communication, LLM protocol negotiation, and data exchange), the Rust anp crate on crates.io, and npm @awiki/anp-typescript-sdk 0.9.5. Legacy PyPI package agent-connect remains published.",
       "source_md": "[PyPI anp](https://pypi.org/pypi/anp/json) [28] · [crates.io anp](https://crates.io/api/v1/crates/anp) [29] · [npm @awiki/anp-typescript-sdk](https://registry.npmjs.org/@awiki/anp-typescript-sdk) [30]"
      },
      {
       "actor": "OpenManus-ANP",
       "role": "AI host / assistant",
       "status": "Supported",
       "status_display": "Supported · checked 2026-11-03",
       "col4_md": "Fork agent-network-protocol/OpenManus-ANP adds ANP through anp_tool.py: one prompt and one HTTP function so the agent can call other ANP agents.",
       "source_md": "[OpenManus-ANP](https://github.com/agent-network-protocol/OpenManus-ANP) [31] · [Integration note](https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/blogs/One-Prompt-One-HTTP-Function-Enabling-Open-Source-Manus-to-Interact-with-Other-Agents-via-ANP.md) [32]"
      },
      {
       "actor": "OWL-ANP",
       "role": "AI host / assistant",
       "status": "Supported",
       "status_display": "Supported · checked 2026-11-03",
       "col4_md": "agent-network-protocol/owl_anp is the matching OWL integration, using the same anp_tool.py HTTP adapter described in the community release note.",
       "source_md": "[owl_anp](https://github.com/agent-network-protocol/owl_anp) [33] · [Integration note](https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/blogs/One-Prompt-One-HTTP-Function-Enabling-Open-Source-Manus-to-Interact-with-Other-Agents-via-ANP.md) [32]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "lmos",
     "target_name": "Eclipse LMOS (Language Model Operating System)",
     "relation_label": "Peer alternative",
     "delta": "LMOS uses a DID-signed Thing Description discovered via mDNS, DNS-SD, or well-known URLs and W3C WoT TDDs, while ANP uses /.well-known/agent-descriptions, RFC 9421 Signature-Input and Signature in ANP-02, and did:wba agents.",
     "item_md": "**[Eclipse LMOS (Language Model Operating System)](/protocols/lmos/)** (Peer alternative) — LMOS uses a DID-signed Thing Description discovered via mDNS, DNS-SD, or well-known URLs and W3C WoT TDDs, while ANP uses /.well-known/agent-descriptions, RFC 9421 Signature-Input and Signature in ANP-02, and did:wba agents."
    },
    {
     "target_id": "aitp",
     "target_name": "Agent Interaction & Transaction Protocol (AITP)",
     "relation_label": "Peer alternative",
     "delta": "AITP has no discovery document and addresses agents out of band, while ANP publishes /.well-known/agent-descriptions and uses RFC 9421 HTTP signatures in ANP-02.",
     "item_md": "**[Agent Interaction & Transaction Protocol (AITP)](/protocols/aitp/)** (Peer alternative) — AITP has no discovery document and addresses agents out of band, while ANP publishes /.well-known/agent-descriptions and uses RFC 9421 HTTP signatures in ANP-02."
    },
    {
     "target_id": "nlip",
     "target_name": "Natural Language Interaction Protocol (NLIP)",
     "relation_label": "Peer alternative",
     "delta": "ANP aims to be a protocol suite for agent identity, naming, discovery, negotiation, secure messaging, and application-level collaboration. NLIP standardizes a JSON message envelope and an HTTP POST binding at the path /nlip.",
     "item_md": "**[Natural Language Interaction Protocol (NLIP)](/protocols/nlip/)** (Peer alternative) — ANP aims to be a protocol suite for agent identity, naming, discovery, negotiation, secure messaging, and application-level collaboration. NLIP standardizes a JSON message envelope and an HTTP POST binding at the path /nlip."
    },
    {
     "target_id": "gbz-185-agent-interconnection",
     "target_name": "GB/Z 185 Artificial intelligence — Agent interconnection",
     "relation_label": "Peer alternative",
     "delta": "ANP-08, the Agent Discovery Protocol, uses .well-known discovery and passive registration with search agents, and ANP-02 separates common authentication from DID method validation, including did:wba and did:web. GB/Z 185 defines discovery as an agent discovery service or preset information.",
     "item_md": "**[GB/Z 185 Artificial intelligence — Agent interconnection](/protocols/gbz-185-agent-interconnection/)** (Peer alternative) — ANP-08, the Agent Discovery Protocol, uses .well-known discovery and passive registration with search agents, and ANP-02 separates common authentication from DID method validation, including did:wba and did:web. GB/Z 185 defines discovery as an agent discovery service or preset information."
    },
    {
     "target_id": "agtp",
     "target_name": "Agent Transfer Protocol",
     "relation_label": "Complements",
     "delta": "AGTP draft-10 frames ANP as an AGMP layer and resolves agents via agtp:// URIs, _agtp._tcp DNS SRV records, or advisory /.well-known/agtp, while ANP publishes /.well-known/agent-descriptions and requires RFC 9421 Signature-Input and Signature headers in ANP-02.",
     "item_md": "**[Agent Transfer Protocol](/protocols/agtp/)** (Complements) — AGTP draft-10 frames ANP as an AGMP layer and resolves agents via agtp:// URIs, _agtp._tcp DNS SRV records, or advisory /.well-known/agtp, while ANP publishes /.well-known/agent-descriptions and requires RFC 9421 Signature-Input and Signature headers in ANP-02."
    },
    {
     "item_md": "**[Coordinate protocols](/category/coordinate/)** — Category index for `coordinate` standards."
    }
   ],
   "v05_compiled_md": "---\nid: anp\ntitle: \"Agent Network Protocol\"\ntier: spec_brief\nlifecycle_status: published_standard\ncategory: coordinate\nform: well-known-file\nwire_archetype: harnesses_rpc_ui\nspec_url: https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/README.md\nlast_checked: 2026-11-12\n---\n\n# Agent Network Protocol\n\n**Category:** [Coordinate](/category/coordinate/) (`coordinate`) · **Form:** Well-known file (`well-known-file`) · **Last checked:** 2026-11-12\n\n> *For Google's Agent2Agent task-delegation protocol, see [Agent2Agent Protocol (A2A)](/protocols/a2a/). For the Oxford meta-protocol negotiation specification, see [Agora Protocol](/protocols/agora-protocol/). For GoDaddy's DNS- and transparency-log-anchored agent naming architecture, see [Agent Name Service v2 (ANS)](/protocols/ans/). [1]*\n\n**Agent Network Protocol** (`ANP`) is an open-source communication protocol suite for intelligent agents originated by Gaowei Chang and the ANP Community, with ongoing standardization work in the W3C AI Agent Protocol Community Group (`w3c-cg/ai-agent-protocol`). [2][3] Built on existing HTTP, DNS, and TLS infrastructure, the protocol organizes released capabilities into an Identity and Encrypted Communication Layer based on W3C Decentralized Identifiers (`did:wba` and native `did:web`) and an Application Protocol Layer covering Agent Description (`ANP-07`), Agent Discovery (`ANP-08`), and end-to-end instant messaging (`ANP-09`). [2] For active discovery under `ANP-08`, a client retrieves `https://{domain}/.well-known/agent-descriptions` to obtain a JSON-LD `CollectionPage` listing `ad:AgentDescription` URLs, and fetches each `AgentDescription` document (`ANP-07`) for `securityDefinitions` and `NaturalLanguageInterface` or `StructuredInterface` endpoints. [4][5] Under `ANP-02`, a client's initial cross-platform HTTP request MUST carry RFC 9421 `Signature-Input` and `Signature` headers (plus RFC 9530 `Content-Digest` when a message body is present) with `keyid` pointing to a `did:wba` or `did:web` verification method, after which the server can return an access token via the `Authentication-Info` response header for subsequent `Authorization` requests. [6] The `agent-network-protocol/AgentNetworkProtocol` repository was created on 2024-10-23 under the `Apache-2.0` license and published `ANP 1.2` (`v1.2`) on 2026-09-24. [1][7] `Version: 1.2` identifies the specification document release version rather than a wire version, while `ANP-05` (`v0.7`), `ANP-06`, and `ANP-10` remain unreleased drafts and `P6` Group E2EE remains a candidate pending its registered MLS `ExtensionType` gate. [2]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Coordinate](/category/coordinate/) (`coordinate`) |\n| **Form** | Well-known file (`well-known-file`) |\n| **Originated by** | Gaowei Chang (`chgaowei`) and the ANP Community (with E. Lin, C. Yuan, R. Cai, B. Chen, X. Xie, and Y. Zhang on `arXiv:2508.00007`) [1][2][8] |\n| **Governed by** | ANP Community (`agent-network-protocol`) and W3C AI Agent Protocol Community Group (`w3c-cg/ai-agent-protocol`, a W3C Community Group rather than a Recommendation-track Working Group) [1][2][3] |\n| **Track** | Open-source community specification (`AgentNetworkProtocol`) and W3C AI Agent Protocol Community Group report (non-Recommendation track) [2][9] |\n| **Status** | Released v1.2 (core suite); ANP-05 (v0.7), ANP-06 (v1.2), and ANP-10 (v1.1) remain unreleased drafts [2][7][10][11][12] |\n| **Version** | `ANP 1.2` (`2026-09-24` core & `ANP Messaging 1.2`; `ANP-05` `v0.7`, `ANP-06` `v1.2`, `ANP-10` `v1.1` drafts; `P6` MLS-gated; `anp` SDK `v1.0.7`) [2][7][10][11][12] |\n| **Wire format** | JSON-RPC 2.0 (`anp.core.binding.v1` `params.meta`/`body`/`auth`), JSON-LD (`CollectionPage`, `ad:AgentDescription`), DID Documents (`did:wba`/`did:web`), OpenRPC 1.3.2 / OpenAPI 3.x, RFC 9421 / 9530 [6][11][13] |\n| **Specification** | [AgentNetworkProtocol (`ANP 1.2`)](https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/README.md) · [ANP-10 Payment Draft (v1.1)](https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/application/10-anp-agent-payment-protocol-specification.md) · [White Paper (`arXiv:2508.00007`)](https://arxiv.org/abs/2508.00007) · [W3C CG Drafts](https://w3c-cg.github.io/ai-agent-protocol/) · [AgentConnect SDK](https://raw.githubusercontent.com/agent-network-protocol/anp/main/README.md) [2][8][9][12] |\n| **Found at** | `GET /.well-known/agent-descriptions`, `/.well-known/did.json` or `/{path}/e1_<fp>/did.json`, `/.well-known/handle/{local-part}`, `Signature-Input`, `Signature`, `Content-Digest`, `WWW-Authenticate: DIDWba` [6][13][14] |\n| **Licence** | Apache-2.0 (`AgentNetworkProtocol` and `anp`) [2][11][15] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [Adoption and ecosystem](#adoption-and-ecosystem)\n4. [See also](#see-also)\n5. [References](#references)\n\n---\n\n## Problem and scope\n\nExisting internet infrastructure is primarily designed for human interaction, creating data silos, unfriendly interfaces, and high collaboration costs among agents that make large-scale cross-platform agent interconnection difficult. [8] ANP layers decentralized identity and discovery over existing HTTP, DNS, and TLS infrastructure: `ANP-02` and `ANP-03` authenticate cross-domain requests using `did:wba` (with `e1_` Ed25519 path fingerprints or `/.well-known/did.json`) or `did:web` documents and RFC 9421 `Signature-Input` and `Signature` headers. [6][13] At the application layer, `ANP-08` exposes public agents via JSON-LD `CollectionPage` documents at `https://{domain}/.well-known/agent-descriptions` and `ANP-07` publishes machine-readable `AgentDescription` documents linking `openrpc`, `YAML`, `MCP`, or `WebRTC` interfaces. [4][5] `ANP-02` authentication verifies identity and message integrity without implying business authority, human authorization, or `E2EE` object proof, while `ANP-05` and `ANP-06` remain drafts outside stable `ANP 1.2`. Likewise, `ANP-10` (`Version: 1.1`, `Status: Draft / not released`) adapts September 2025 `AP2` v0.1-style `CartMandate` and `PaymentMandate` objects (plus `DeliveryReceipt`) signed with `JWT`/`JWS` for `did:wba` agents (`IntentMandate` not supported/planned; `SD-JWT` an unchecked roadmap item), rather than `AP2` v0.2's `SD-JWT` checkout and payment mandates. [2][6][12]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **Well-Known URIs (RFC 8615)** | `RFC 8615` | Profiles classic standard | ANP publishes agent description documents at /.well-known/agent-descriptions and handle resolution at /.well-known/handle/{local-part}; neither path is registered in the IANA Well-Known URIs registry. [2][16] |\n| **HTTP Message Signatures (RFC 9421)** | `RFC 9421` | Profiles classic standard | ANP-02 requires clients to send RFC 9421 Signature-Input and Signature headers, and RFC 9530 Content-Digest when the request has a body, covering @method, @target-uri, and content-digest, which is request authentication rather than the agent-description document. [2][17] |\n| **W3C Decentralized Identifiers and Verifiable Credentials** | `W3C DID 1.0` | Profiles classic standard | ANP-03 defines did:wba, resolving a bare domain such as did:wba:example.com to https://example.com/.well-known/did.json, and ANP-08 active discovery reads a JSON-LD CollectionPage at /.well-known/agent-descriptions. [2][18] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Agent2Agent Protocol (A2A)](/protocols/a2a/)** | Peer alternative | ANP publishes /.well-known/agent-descriptions, requires RFC 9421 Signature-Input and Signature plus Content-Digest in ANP-02, and addresses did:wba agents, while A2A uses an Agent Card at /.well-known/agent-card.json and delegates tasks over JSON-RPC 2.0, gRPC, or HTTP+JSON. [2][19] |\n| **[Agora Protocol](/protocols/agora-protocol/)** | Complements | ANP-06 remains draft and cites Agora as a design inspiration, while ANP's released core is the v1.2 suite published at /.well-known/agent-descriptions. [2][20] |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | The mcp2anp bridge exposes MCP tools to ANP agents, and MCP's own session remains JSON-RPC over stdio or Streamable HTTP rather than ANP's signed HTTP. [2][21] |\n| **[Agent Payments Protocol (AP2)](/protocols/ap2/)** | Complements | `ANP-10` (`Version: 1.1`, `Status: Draft / not released`) adapts `AP2` `v0.1`-style `CartMandate` and `PaymentMandate` objects (plus `DeliveryReceipt`) signed with `JWT`/`JWS` for `did:wba` agents (`IntentMandate` not supported / deferred; `SD-JWT` listed as an unchecked future roadmap item), whereas `AP2` `v0.2` uses `mandate.checkout.1` / `mandate.payment.1` `SD-JWT` schemas not adopted by `ANP-10`. [12] |\n| **[Agent Name Service v2 (ANS)](/protocols/ans/)** | Complements | ANS v2 publishes agent names in DNS under _ans and _ra-badge labels, while ANP publishes the agent description at /.well-known/agent-descriptions and uses did:wba agents in ANP-10. [2][22] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (7 probed or cited examples; non-exhaustive).*\n\n### Servers, repos & skill indexes\n\n| Actor | Role | Status | Transport & Scope | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **OpenANP (AgentConnect)** | Agent framework | Supported · checked 2026-10-30 | OpenANP, in agent-network-protocol/anp, turns Python methods into discoverable ANP interfaces and exposes the standard agent documents and a JSON-RPC endpoint. The repo is the multi-language reference implementation (Python package anp; Go, Rust, Dart, TypeScript, and Java workspaces). Coordinated release tag release-20260912. | [agent-network-protocol/anp README](https://raw.githubusercontent.com/agent-network-protocol/anp/main/README.md) [23] · [Release release-20260912](https://github.com/agent-network-protocol/anp/releases) [24] |\n| **Open DID Server** | Messaging node / Server | Supported · as of 2026-10-01 | agent-network-protocol/open-did-server (created 2026-10-01) hosts did:wba (e1_) and did:web documents on standard DID paths, resolves WNS Handles, and accepts only a limited ANP HTTP Message Signature (RFC 9421 sig1) over the caller's authentication key. | [open-did-server README](https://raw.githubusercontent.com/agent-network-protocol/open-did-server/main/README.md) [25] |\n| **MCP2ANP** | Messaging node / Server | Supported · checked 2026-10-30 | MCP bridge exposing tools anp.fetchDoc and anp.invokeOpenRPC so an MCP host can discover and call remote ANP agents with did:wba credentials. | [mcp2anp README](https://raw.githubusercontent.com/agent-network-protocol/mcp2anp/main/README.md) [26] |\n| **ANP Proxy** | Messaging node / Server | Supported · checked 2026-10-30 | asyncio HTTP-over-WebSocket tunnel that exposes private ASGI agent services. | [anp-proxy README](https://raw.githubusercontent.com/agent-network-protocol/anp-proxy/main/README.md) [27] |\n\n### IDEs, hosts & coding agents\n\n| Actor | Role | Status | Transport & Scope | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **ANP SDKs (anp, Rust anp, @awiki/anp-typescript-sdk)** | Client SDK / Runtime | Supported · checked 2026-10-30 | PyPI anp 1.0.7 (identity authentication, end-to-end encrypted communication, LLM protocol negotiation, and data exchange), the Rust anp crate on crates.io, and npm @awiki/anp-typescript-sdk 0.9.5. Legacy PyPI package agent-connect remains published. | [PyPI anp](https://pypi.org/pypi/anp/json) [28] · [crates.io anp](https://crates.io/api/v1/crates/anp) [29] · [npm @awiki/anp-typescript-sdk](https://registry.npmjs.org/@awiki/anp-typescript-sdk) [30] |\n| **OpenManus-ANP** | AI host / assistant | Supported · checked 2026-11-03 | Fork agent-network-protocol/OpenManus-ANP adds ANP through anp_tool.py: one prompt and one HTTP function so the agent can call other ANP agents. | [OpenManus-ANP](https://github.com/agent-network-protocol/OpenManus-ANP) [31] · [Integration note](https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/blogs/One-Prompt-One-HTTP-Function-Enabling-Open-Source-Manus-to-Interact-with-Other-Agents-via-ANP.md) [32] |\n| **OWL-ANP** | AI host / assistant | Supported · checked 2026-11-03 | agent-network-protocol/owl_anp is the matching OWL integration, using the same anp_tool.py HTTP adapter described in the community release note. | [owl_anp](https://github.com/agent-network-protocol/owl_anp) [33] · [Integration note](https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/blogs/One-Prompt-One-HTTP-Function-Enabling-Open-Source-Manus-to-Interact-with-Other-Agents-via-ANP.md) [32] |\n\n---\n\n## See also\n\n- **[Eclipse LMOS (Language Model Operating System)](/protocols/lmos/)** *(Peer alternative)* — LMOS uses a DID-signed Thing Description discovered via mDNS, DNS-SD, or well-known URLs and W3C WoT TDDs, while ANP uses /.well-known/agent-descriptions, RFC 9421 Signature-Input and Signature in ANP-02, and did:wba agents.\n- **[Agent Interaction & Transaction Protocol (AITP)](/protocols/aitp/)** *(Peer alternative)* — AITP has no discovery document and addresses agents out of band, while ANP publishes /.well-known/agent-descriptions and uses RFC 9421 HTTP signatures in ANP-02.\n- **[Natural Language Interaction Protocol (NLIP)](/protocols/nlip/)** *(Peer alternative)* — ANP aims to be a protocol suite for agent identity, naming, discovery, negotiation, secure messaging, and application-level collaboration. NLIP standardizes a JSON message envelope and an HTTP POST binding at the path /nlip.\n- **[GB/Z 185 Artificial intelligence — Agent interconnection](/protocols/gbz-185-agent-interconnection/)** *(Peer alternative)* — ANP-08, the Agent Discovery Protocol, uses .well-known discovery and passive registration with search agents, and ANP-02 separates common authentication from DID method validation, including did:wba and did:web. GB/Z 185 defines discovery as an agent discovery service or preset information.\n- **[Agent Transfer Protocol](/protocols/agtp/)** *(Complements)* — AGTP draft-10 frames ANP as an AGMP layer and resolves agents via agtp:// URIs, _agtp._tcp DNS SRV records, or advisory /.well-known/agtp, while ANP publishes /.well-known/agent-descriptions and requires RFC 9421 Signature-Input and Signature headers in ANP-02.\n- **Category:** [Coordinate protocols](/category/coordinate/)\n\n---\n\n## References\n\n1. Agent Network Protocol community, *AgentNetworkProtocol repository* (checked 2026-11-03) — <https://github.com/agent-network-protocol/AgentNetworkProtocol>\n2. Agent Network Protocol community, *Agent Network Protocol (ANP) README* (checked 2026-10-30) — <https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/README.md>\n3. w3c-cg/ai-agent-protocol (GitHub), *w3c-cg/ai-agent-protocol repository record* (checked 2026-10-30) — <https://github.com/w3c-cg/ai-agent-protocol>\n4. Agent Network Protocol Community, *08-ANP-Agent-Discovery-Protocol-Specification.md (ANP-08)* (checked 2026-10-30) — <https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/08-ANP-Agent-Discovery-Protocol-Specification.md>\n5. Agent Network Protocol Community, *07-anp-agent-description-protocol-specification.md (ANP-07)* (checked 2026-10-30) — <https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/07-anp-agent-description-protocol-specification.md>\n6. Agent Network Protocol Community, *02-anp-did-authentication-protocol-specification.md (ANP-02)* (checked 2026-10-30) — <https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/02-anp-did-authentication-protocol-specification.md>\n7. agent-network-protocol/AgentNetworkProtocol (GitHub), *AgentNetworkProtocol releases (ANP 1.2)* (2026-09-24; checked 2026-10-30) — <https://github.com/agent-network-protocol/AgentNetworkProtocol/releases>\n8. Gaowei Chang et al. (arXiv), *[2508.00007] Agent Network Protocol Technical White Paper* (2025-07-18; checked 2026-10-30) — <https://arxiv.org/abs/2508.00007>\n9. W3C AI Agent Protocol Community Group, *Agent Network Protocol White Paper* (checked 2026-10-30) — <https://w3c-cg.github.io/ai-agent-protocol/>\n10. Agent Network Protocol Community, *05-anp-did-authorization-protocol-specification.md (ANP-05)* (checked 2026-10-30) — <https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/05-anp-did-authorization-protocol-specification.md>\n11. Agent Network Protocol Community, *06-anp-agent-communication-meta-protocol-specification.md (ANP-06)* (checked 2026-10-30) — <https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/06-anp-agent-communication-meta-protocol-specification.md>\n12. Agent Network Protocol, *ANP-10: Agent Payment Protocol Specification (v1.1 Draft)* (checked 2026-10-30) — <https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/application/10-anp-agent-payment-protocol-specification.md>\n13. Agent Network Protocol Community, *03-did-wba-method-design-specification.md (ANP-03)* (checked 2026-10-30) — <https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/03-did-wba-method-design-specification.md>\n14. Agent Network Protocol Community, *04-anp-did-wba-name-space-specification.md (ANP-04)* (checked 2026-10-30) — <https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/04-anp-did-wba-name-space-specification.md>\n15. agent-network-protocol/AgentNetworkProtocol (GitHub), *ANP Messaging 1.2 Profile Index* (checked 2026-10-30) — <https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/message/README.md>\n16. M. Nottingham, *RFC 8615: Well-Known Uniform Resource Identifiers (URIs)* (May 2019) — <https://www.rfc-editor.org/rfc/rfc8615.html>\n17. A. Backman, Ed., J. Richer, Ed., and M. Sporny, *RFC 9421: HTTP Message Signatures* (February 2024) — <https://www.rfc-editor.org/rfc/rfc9421.html>\n18. W3C, *Decentralized Identifiers (DIDs) v1.0* (2022-07-19) — <https://www.w3.org/TR/did-core/>\n19. Agentic AI Foundation, *A2A joins AAIF's open agentic stack* (published 2026-08-17; modified 2026-09-24) — <https://aaif.io/blog/a2a-joins-aaif>\n20. Samuele Marro, *Agora Protocol for Two-Party JSON Exchanges* (updated Jan 19, 2025) — <https://agoraprotocol.org/docs/protocol/specification>\n21. Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation* (2026-07-28) — <https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning>\n22. Scott Courtney, Vineeth Sai Narajala, Ken Huang, Idan Habler, and Akram Sheriff, *draft-narajala-courtney-ansv2 — Agent Name Service v2 (ANS): A Domain-Anchored Identity Layer for Autonomous AI Agents (IETF Datatracker)* (checked 2026-10-30) — <https://datatracker.ietf.org/doc/draft-narajala-courtney-ansv2/>\n23. Agent Network Protocol Community, *agent-network-protocol/anp README* (checked 2026-10-30) — <https://raw.githubusercontent.com/agent-network-protocol/anp/main/README.md>\n24. OpenANP (AgentConnect), *Release release-20260912* (checked 2026-10-30) — <https://github.com/agent-network-protocol/anp/releases>\n25. Agent Network Protocol Community, *agent-network-protocol/open-did-server README* (checked 2026-10-30) — <https://raw.githubusercontent.com/agent-network-protocol/open-did-server/main/README.md>\n26. Agent Network Protocol Community, *agent-network-protocol/mcp2anp README* (checked 2026-10-30) — <https://raw.githubusercontent.com/agent-network-protocol/mcp2anp/main/README.md>\n27. Agent Network Protocol Community, *agent-network-protocol/anp-proxy README* (checked 2026-10-30) — <https://raw.githubusercontent.com/agent-network-protocol/anp-proxy/main/README.md>\n28. PyPI, *PyPI anp package metadata* (checked 2026-10-30) — <https://pypi.org/pypi/anp/json>\n29. crates.io (Rust Registry), *crates.io anp package metadata* (checked 2026-10-30) — <https://crates.io/api/v1/crates/anp>\n30. npm Registry API, *@awiki/anp-typescript-sdk package metadata* (checked 2026-10-30) — <https://registry.npmjs.org/@awiki/anp-typescript-sdk>\n31. OpenManus-ANP, *GitHub - agent-network-protocol/OpenManus-ANP* (checked 2026-11-03) — <https://github.com/agent-network-protocol/OpenManus-ANP>\n32. Agent Network Protocol Community, *One Prompt, One HTTP Function: Enabling Open-Source Manus to Interact with Other Agents via ANP* (checked 2026-11-03) — <https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/blogs/One-Prompt-One-HTTP-Function-Enabling-Open-Source-Manus-to-Interact-with-Other-Agents-via-ANP.md>\n33. OWL-ANP, *GitHub - agent-network-protocol/owl_anp* (checked 2026-11-03) — <https://github.com/agent-network-protocol/owl_anp>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "",
   "hatnote_md": "This page is about the Agora Protocol from Samuele Marro and co-authors at the University of Oxford (arXiv 2410.11905): a meta-protocol in which LLM agents talk in natural language, agree on plain-text protocol documents identified by a hash, and then exchange JSON through generated routines. It is not [Agora (agent marketplace protocol)](/protocols/agora-commerce-protocol/) at agoraproto.org, an unrelated escrow marketplace that shares the name. Protocols it is compared with have their own pages: the [Agent2Agent Protocol (A2A)](/protocols/a2a/), the [Agent Network Protocol (ANP)](/protocols/anp/), the [Model Context Protocol (MCP)](/protocols/mcp/), the [Agent Communication Protocol](/protocols/agent-communication-protocol/) and the [Agent Connect Protocol](/protocols/agent-connect-protocol/) (see [ACP](/terms/acp/)).",
   "adoption": {
    "level": "observed",
    "by": "agora-protocol (PyPI)",
    "probe_run": null
   },
   "aliases": [
    "Agora (academic)"
   ],
   "analog": "A natural-language negotiation handshake that compiles repeated conversations into deterministic JSON routines",
   "collisions": [],
   "discovery": {
    "mechanism": "Optional `GET {baseURL}/wellknown`, relative to the agent's Agora endpoint, not the site root. \"A Server MAY implement: GET { baseURL } / wellknown The Server MUST return a JSON object where each key is a supported protocolHash, and the value is a (non-empty) list of Protocol Document sources.\" \"Optional features (like the well-known endpoint) remain RECOMMENDED but not mandatory.\" A `.well-known` URI is only a future idea: \"If future versions wish to register a well-known URI (e.g.,.well-known/agora), that would be addressed in an update.\"",
    "path": "{baseURL}/wellknown"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://agoraprotocol.org/docs/protocol/specification",
     "claim": "Samuele Marro, *Agora Protocol for Two-Party JSON Exchanges*, updated Jan 19, 2025",
     "date": null,
     "quote": "This document specifies the Agora Protocol, a lightweight JSON-based framework for two-party exchanges (client and server). The protocol accommodates both single-round (stateless) and multi-round (stateful) conversations, supports optional strict \"Protocol Documents\" identified by a SHA1 hash, and defines a clear separation of transport-level, Agora-level, and protocol-level errors. / Below is the Working Standard for the Agora Protocol, structured in a style similar to IETF RFCs. It includes the sections outlined previously, along with normative language (per RFC 2119 and RFC 8174). While this document follows a typical RFC format, it should be understood as a draft. / This document is intended to be a Proposed Standard. Distribution of this memo is unlimited. Copyright Notice (C) 2025 Samuele Marro. / All Agora exchanges MUST occur over HTTPS using HTTP POST. Implementations MUST set the Content-Type header to application/json for both requests and responses. Additional HTTP headers (e.g., Accept, Accept-Charset) MAY be used but are not mandated by this specification. / The Client sends an HTTPS POST request to the Server's base URL (e.g., https://api.example.com/agora), providing a JSON body that MUST include at least: / The Server MUST respond with a JSON body that includes: status: either \"success\" or \"failure\". / Last updated on Jan 19, 2025 / This specification does not create or modify any existing IANA registries. If future versions wish to register a well-known URI (e.g., .well-known/agora), that would be addressed in an update. / unlimited. Copyright Notice (C) 2025 Samuele Marro. 1. Abstract This document specifies the Agora / Below is the Working Standard for the Agora Protocol, structured in a style similar to IETF / over HTTPS using HTTP POST. Implementations MUST set the Content-Type header to application/json for / Protocol Python Reference Search Specification Beginner-Friendly Specification Standard On this page Standard Below is / A Server MAY implement: GET {baseURL}/wellknown The Server MUST return a JSON object where each key is a supported protocolHash, and the value is a (non-empty) list of Protocol Document sources. / Systems often need a simple way to exchange structured data with optional support for higher-level conventions (e.g., domain-specific request/response formats). / This protocol is agnostic to underlying application logic, letting users handle domain-specific details within the message body or via Protocol Documents. / It requires HTTPS to ensure confidentiality but is otherwise minimal in security assumptions. / A consistent JSON envelope for client requests and server replies. Optional in-conversation state (multi-round) via a conversation identifier. Protocol Document references (via protocolHash) to impose additional constraints on message bodies. / A Protocol Document is a text file with two parts, separated by a line containing ---: YAML Metadata (top section), containing at least: name (string) description (string) multiround (boolean) Specification (freeform text), describing how requests and responses MUST or SHOULD be structured at the application level. / Implementations MUST use the entire Protocol Document text (including metadata, the --- separator, and the specification) as input to the SHA1 function. The resulting 40-character hexadecimal digest MUST serve as the unique protocol identifier in protocolHash. / In Scope: JSON message format and structure. Error handling conventions (transport-level vs. application-level). Support for protocol documents and conversation state management. Out of Scope: Authentication, authorization, or key management. Negotiation mechanisms beyond providing a well-known endpoint for protocol discovery. Advanced privacy requirements. / supports optional strict \"Protocol Documents\" identified by a SHA1 hash / Conversation ID Security: Servers SHOULD generate random, hard-to-guess conversationId values to mitigate session hijacking. / Authentication: Out of scope. Systems MAY layer on top of the Agora Protocol with tokens, OAuth, etc.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://arxiv.org/abs/2410.11905",
     "claim": "Samuele Marro and 6 other authors, *A Scalable Communication Protocol for Networks of Large Language Models*, submitted 14 Oct 2024",
     "date": null,
     "quote": "Submitted on 14 Oct 2024] Title:A Scalable Communication Protocol for Networks of Large Language Models Authors:Samuele Marro, Emanuele La Malfa, Jesse Wright, Guohao Li, Nigel Shadbolt, Michael Wooldridge, Philip Torr / We introduce Agora, a meta protocol that leverages existing communication standards to make LLM-powered agents solve complex problems efficiently. / Marro, Emanuele La Malfa, Jesse Wright, Guohao Li, Nigel Shadbolt, Michael Wooldridge, Philip Torr / arXiv:2410.11905",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://github.com/agora-protocol/python/releases",
     "claim": "Samuele Marro, *agora-protocol Python GitHub releases*, published 2025-01-03",
     "date": null,
     "quote": "\"tag_name\": \"0.2.0\" … \"published_at\": \"2025-01-03T15:06:09Z\" … Initial release of the Agora Python client. / \"upload_url\": \"https://uploads.github.com/repos/agora-protocol/python/releases/193080005/assets{?name,label}\", \"html_url\": \"https://github.com/agora-protocol/python/releases/tag/0.2.0\", \"id\": 193080005, / \"2025-01-03T14:41:25Z\", \"updated_at\": \"2025-01-03T15:06:09Z\", \"published_at\": \"2025-01-03T15:06:09Z\", \"assets\": [ ], \"tarball_url\": \"https://api.github.com/repos/agora-protocol/python/tarball/0.2.0\",",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://raw.githubusercontent.com/agora-protocol/python/main/README.md",
     "claim": "Samuele Marro, *agora-protocol Python README*, checked 2026-10-30",
     "date": null,
     "quote": "Note: Agora Python is currently in Open Beta! Expect breaking changes from one version to the other. / Agora Python is currently in Open Beta! Expect breaking changes from one version to the other. / This is a quick example where two agents (a LangChain agent and a Camel agent) exchange weather data.",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://agoraprotocol.org/",
     "claim": "Agora Protocol, *Agora Protocol homepage*, checked 2026-10-30",
     "date": null,
     "quote": "What license does Agora use? Agora is released under MIT license. / use? Agora is released under MIT license. Develop Guides Protocol Python Reference Find us",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://arxiv.org/html/2410.11905v1",
     "claim": "Samuele Marro and 6 other authors, *arXiv HTML 2410.11905v1*, submitted 14 Oct 2024",
     "date": null,
     "quote": "Emanuele La Malfa is funded by the Alan Turing Institute. Jesse Wright is funded / Our code is available at github.com/agora-protocol/paper-demo.",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://github.com/agora-protocol/python/graphs/contributors",
     "claim": "Agora Protocol, *agora-protocol Python contributors API*, checked 2026-10-30",
     "date": null,
     "quote": "\"login\": \"samuelemarro\"",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://agoraprotocol.org/community/overview",
     "claim": "Agora Protocol, *Agora Protocol community overview*, checked 2026-10-30",
     "date": null,
     "quote": "2025 Develop Guides Protocol Python Reference Find us X GitHub Copyright © 2025 Agora",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://github.com/agora-protocol/python/commits",
     "claim": "Agora Protocol, *agora-protocol Python commits API*, checked 2026-10-30",
     "date": null,
     "quote": "\"html_url\": \"https://github.com/agora-protocol/python/commit/7fb516856baf6027d32271a93a60f87112aa6db1\" } ] }, { \"sha\": \"7fb516856baf6027d32271a93a60f87112aa6db1\", \"node_id\": / \"https://github.com/agora-protocol/python/commit/d4628c312d34d041bbdfe2b1bc8e7c0dab7f07d6\", \"comments_url\":",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://raw.githubusercontent.com/agora-protocol/paper-demo/main/README.md",
     "claim": "Agora Protocol, *Agora paper-demo README*, checked 2026-10-30",
     "date": null,
     "quote": "We're building the next iteration of Agora, with more features for real-world use cases.",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://agoraprotocol.org/docs/protocol/beginner-friendly",
     "claim": "Agora Protocol, *Beginner-friendly Agora specification*, checked 2026-10-30",
     "date": null,
     "quote": "Protocol date: Fri, 30 Oct 2026 22:48:41 GMT content-type: text/html; charset=utf-8 transfer-encoding: chunked connection: / main content Agora Protocol Docs Guides Protocol Python Reference Search Specification Beginner-Friendly Specification Standard / sends a POST to Bob's Agora endpoint containing the following JSON document: { \"protocolHash\":",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://raw.githubusercontent.com/agora-protocol/agora-protocol.github.io/master/specs.html",
     "claim": "Agora Protocol, *Agora specs.html*, checked 2026-10-30",
     "date": null,
     "quote": "cache-control: max-age=300 content-security-policy: default-src 'none'; style-src 'unsafe-inline'; sandbox content-type: text/plain; charset=utf-8 etag: / https://agoraprotocol.org/ static/images/landing.png 1200 675 Agora - Specification Agora is a cross-platform, dead-simple protocol for / Agents can expose an endpoint, namely /.wellknown, which returns a JSON list of supported protocol hashes and corresponding sources.",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://pypi.org/pypi/agora-protocol/json",
     "claim": "Python Package Index, *agora-protocol package metadata*, checked 2026-10-30",
     "date": null,
     "quote": "Language:: Python:: 3.11\",\"Programming Language:: Python:: 3.12\"],\"description\":\"# python\\nPython library for the Agora Protocol.\\n\\nThe Agora Protocol / receiver.\\n\\nThis is a quick example where two agents (a LangChain agent and a Camel",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://arxiv.org/html/2602.11327v2",
     "claim": "Zeynab Anbiaee, Mahdi Rabbani, Mansur Mirani, Gunjan Piya, Igor Opushnyev, Ali Ghorbani, and Sajjad Dadkhah, *Security Threat Modeling for Emerging AI-Agent Protocols: A Comparative Analysis of MCP, A2A, Agora, and ANP (arXiv:2602.11327v2)*, checked 2026-10-30",
     "date": null,
     "quote": "the design assumes a cooperative and non-adversarial environment and does not define an explicit threat model.",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://json-schema.org/draft/2020-12/json-schema-core.html",
     "claim": "Austin Wright, Henry Andrews, Ben Hutton, and Greg Dennis, *JSON Schema: A Media Type for Describing JSON Documents (Draft 2020-12)*, 2022-06-16",
     "date": "2022-06-16",
     "quote": "JSON Schema defines the media type \"application/schema+json\", a JSON-based format",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://www.rfc-editor.org/rfc/rfc9110.html",
     "claim": "R. Fielding, Ed., M. Nottingham, Ed., and J. Reschke, Ed., *RFC 9110: HTTP Semantics*, June 2022",
     "date": null,
     "quote": "<meta content=\"Common,Latin\" name=\"scripts\">",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/README.md",
     "claim": "Agent Network Protocol community, *Agent Network Protocol (ANP) README*, checked 2026-10-30",
     "date": null,
     "quote": "the AgentConnect repository: - https://github.com/agent-network-protocol/AgentConnect AgentConnect focuses on practical SDK support for did:wba, authentication,",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://aaif.io/blog/a2a-joins-aaif",
     "claim": "Agentic AI Foundation, *A2A joins AAIF's open agentic stack*, published 2026-08-17; modified 2026-09-24",
     "date": null,
     "quote": "A2A v1.0, the first stable specification, shipped in March 2026.",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://api.agoraproto.org/v1/openapi.json",
     "claim": "Agora Marketplace, *Agora API v0.1.0 OpenAPI 3.1.0 Specification*, checked 2026-10-29",
     "date": null,
     "quote": "{\"openapi\":\"3.1.0\",\"info\":{\"title\":\"Agora API\",\"description\":\"Open marketplace and communication protocol for AI",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Current : the current protocol version, which is ready for use and may continue to receive backwards compatible changes.",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://schema.oasf.outshift.com/1.1.0/modules",
     "claim": "AGNTCY (Open Agentic Schema Framework), *OASF schema 1.1.0 modules*, fetched 2026-10-30",
     "date": null,
     "quote": "Agent Connect Protocol manifest DEPRECATED since v0.8.0 ACP is deprecated, please use A2A instead.",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://github.com/agntcy/acp-spec",
     "claim": "AGNTCY, *agntcy/acp-spec: Agent Connect Protocol Specification*, archived 2026-04-11",
     "date": null,
     "quote": "This repository was archived by the owner on Apr 11, 2026. It is now read-only. / \"pushed_at\": \"2025-05-23T13:54:01Z\"",
     "ref": 22
    }
   ],
   "form": "endpoint",
   "governance": "The author group, with no foundation or standards body found. The Working Standard says \"Copyright Notice (C) 2025 Samuele Marro.\" The Python library has 2 contributors on GitHub (samuelemarro 133, ShayekhBinIslam 1 commits). \"Our main community point is on Discord!\"",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against agora-protocol paper-demo README, agora-protocol.github.io specs.html, and agoraproto.org's own disambiguation notice; confirmed distinct from agora-commerce-protocol"
    },
    {
     "date": "2026-10-29",
     "note": "Primary-source verification across 28 primary specification, arXiv, GitHub, PyPI, and Hugging Face sources"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "agora-protocol",
   "implementation": "prototype",
   "last_verified": "2026-11-12",
   "name": "Agora Protocol",
   "native_status": "Draft, and inactive since March 2025. \"Below is the Working Standard for the Agora Protocol, structured in a style similar to IETF RFCs. It includes the sections outlined previously, along with normative language (per RFC 2119 and RFC 8174). While this document follows a typical RFC format, it should be understood as a draft.\" \"We're building the next iteration of Agora, with more features for real-world use cases.\" \"This document is intended to be a Proposed Standard.\" The library says \"Agora Python is currently in Open Beta! Expect breaking changes from one version to the other.\" The last commit in the organization is dated 2025-03-08 (UTC), in agora-protocol/python.",
   "origin": {
    "date": "2024-10-14",
    "org": "University of Oxford & Eigent AI (Marro, La Malfa, Wright, Li, Shadbolt, Wooldridge, Torr)"
   },
   "part_of": null,
   "parties": [
    "agent-agent"
   ],
   "phase": "deprecated",
   "probe": {
    "method": "GET",
    "on_absent": "Absence means the agent does not advertise pre-negotiated protocols and any Agora exchange would fall back to natural-language negotiation over the same transaction envelope",
    "parse": "JSON object mapping protocol hashes to arrays of protocol-document source URIs confirms the agent declares Agora-supported protocols",
    "path": "{origin}/.wellknown"
   },
   "question": "How can two heterogeneous LLM agents communicate efficiently, moving from expensive natural-language negotiation to a cheap, mutually agreed structured protocol?",
   "scope": "general",
   "spec_url": "https://agoraprotocol.org/docs/protocol/specification",
   "step": "coordinate",
   "summary_md": "**Agora Protocol** specifies a lightweight JSON framework for two-party client and server exchanges. It covers single-round stateless conversations and multi-round stateful conversations, optional Protocol Documents identified by a SHA1 hash, and separate transport-level, Agora-level, and protocol-level errors. The page presents a working standard, styled like an IETF RFC, and says the document should be understood as a draft. It is intended to be a Proposed Standard, distribution is unlimited, and the copyright notice is (C) 2025 Samuele Marro. arXiv:2410.11905, submitted on 14 Oct 2024 by Samuele Marro and 6 other authors, introduces Agora as a meta protocol that uses existing communication standards so LLM-powered agents can solve complex problems efficiently. All Agora exchanges MUST occur over HTTPS using HTTP POST. Implementations MUST set `Content-Type` to `application/json` on requests and responses. Other HTTP headers MAY be used and are not mandated by the specification. The client sends an HTTPS POST whose JSON body MUST include at least `body`. The server MUST respond with JSON that includes `status`, either \"success\" or \"failure\". The specification page was last updated on Jan 19, 2025. It does not create or modify any IANA registry. Registering a well-known URI such as `.well-known/agora` would be addressed in an update. Python release `0.2.0`, published on `2025-01-03`, is the initial release of the Agora Python client. The library README states that it is in Open Beta and that breaking changes are expected between versions. The project FAQ on the Agora Protocol site says Agora is released under the MIT license.",
   "track": "academic",
   "version": {
    "date": "2025-01-19",
    "label": "Working Standard (2025-01-19); agora-protocol 0.2.0"
   },
   "watch": [
    {
     "type": "github",
     "repo": "agora-protocol/python",
     "mode": "release"
    },
    {
     "type": "pypi",
     "pkg": "agora-protocol"
    }
   ],
   "use_cases": [
    "agent-to-agent-messaging",
    "describe-agent-capabilities"
   ],
   "audience": [
    "agent-builder",
    "standards-body"
   ],
   "pairs_with": [
    "anp",
    "a2a",
    "agora-commerce-protocol",
    "mcp",
    "agent-connect-protocol"
   ],
   "prerequisites": [],
   "tier": "spec_brief",
   "lifecycle_status": "retired",
   "wire_archetype": "harnesses_rpc_ui",
   "status_notice_md": "**Status notice (Inactive Draft):** The academic Agora Protocol working standard has had no specification commits since March 2025.",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "**Status notice (Inactive Draft):** The academic Agora Protocol working standard has had no specification commits since March 2025. This page is about the Agora Protocol from Samuele Marro and co-authors at the University of Oxford (arXiv 2410.11905): a meta-protocol in which LLM agents talk in natural language, agree on plain-text protocol documents identified by a hash, and then exchange JSON through generated routines. It is not [Agora (agent marketplace protocol)](/protocols/agora-commerce-protocol/) at agoraproto.org, an unrelated escrow marketplace that shares the name. Protocols it is compared with have their own pages: the [Agent2Agent Protocol (A2A)](/protocols/a2a/), the [Agent Network Protocol (ANP)](/protocols/anp/), the [Model Context Protocol (MCP)](/protocols/mcp/), the [Agent Communication Protocol](/protocols/agent-communication-protocol/) and the [Agent Connect Protocol](/protocols/agent-connect-protocol/) (see [ACP](/terms/acp/)). [1]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Agora Protocol** specifies a lightweight JSON framework for two-party client and server exchanges. It covers single-round stateless conversations and multi-round stateful conversations, optional Protocol Documents identified by a SHA1 hash, and separate transport-level, Agora-level, and protocol-level errors. [1] The page presents a working standard, styled like an IETF RFC, and says the document should be understood as a draft. It is intended to be a Proposed Standard, distribution is unlimited, and the copyright notice is (C) 2025 Samuele Marro. [1] arXiv:2410.11905, submitted on 14 Oct 2024 by Samuele Marro and 6 other authors, introduces Agora as a meta protocol that uses existing communication standards so LLM-powered agents can solve complex problems efficiently. [2] All Agora exchanges MUST occur over HTTPS using HTTP POST. Implementations MUST set `Content-Type` to `application/json` on requests and responses. Other HTTP headers MAY be used and are not mandated by the specification. [1] The client sends an HTTPS POST whose JSON body MUST include at least `body`. The server MUST respond with JSON that includes `status`, either \"success\" or \"failure\". [1] The specification page was last updated on Jan 19, 2025. It does not create or modify any IANA registry. Registering a well-known URI such as `.well-known/agora` would be addressed in an update. [1] Python release `0.2.0`, published on `2025-01-03`, is the initial release of the Agora Python client. The library README states that it is in Open Beta and that breaking changes are expected between versions. [3][4] The project FAQ on the Agora Protocol site says Agora is released under the MIT license. [5]",
   "v05_identity_sentence_md": "**Agora Protocol** specifies a lightweight JSON framework for two-party client and server exchanges. It covers single-round stateless conversations and multi-round stateful conversations, optional Protocol Documents identified by a SHA1 hash, and separate transport-level, Agora-level, and protocol-level errors. [1] The page presents a working standard, styled like an IETF RFC, and says the document should be understood as a draft. It is intended to be a Proposed Standard, distribution is unlimited, and the copyright notice is (C) 2025 Samuele Marro. [1] arXiv:2410.11905, submitted on 14 Oct 2024 by Samuele Marro and 6 other authors, introduces Agora as a meta protocol that uses existing communication standards so LLM-powered agents can solve complex problems efficiently. [2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Coordinate](/category/coordinate/) (`coordinate`)"
    },
    {
     "label": "Form",
     "value_md": "Endpoint (`endpoint`)"
    },
    {
     "label": "Originated by",
     "value_md": "Samuele Marro, Emanuele La Malfa, Jesse Wright, Nigel Shadbolt, Michael Wooldridge, Philip Torr (Oxford), and Guohao Li (Eigent AI) (`2024-10-14`) [2][6]"
    },
    {
     "label": "Governed by",
     "value_md": "Author group (`Samuele Marro`, copyright `2025`); no foundation or standards body (`Discord` hub; two contributors on `agora-protocol/python`) [1][7][8]"
    },
    {
     "label": "Track",
     "value_md": "Academic research paper (`arXiv:2410.11905`) and author-maintained Working Standard draft (`agoraprotocol.org`) [1][2]"
    },
    {
     "label": "Status",
     "value_md": "Draft, and inactive since March 2025. \"Below is the Working Standard for the Agora Protocol, structured in a style similar to IETF RFCs. It includes the sections outlined previously, along with normative language (per RFC 2119 and RFC 8174). While this document follows a typical RFC format, it should be understood as a draft.\" \"We're building the next iteration of Agora, with more features for real-world use cases.\" \"This document is intended to be a Proposed Standard.\" The library says \"Agora Python is currently in Open Beta! Expect breaking changes from one version to the other.\" The last commit in the organization is dated 2025-03-08 (UTC), in agora-protocol/python. [1][3][4][9][10]"
    },
    {
     "label": "Version",
     "value_md": "Working Standard (`2025-01-19`, *Proposed Standard* draft); Beginner Spec (`2025-02-16`); `agora-protocol` `v0.2.0` (`2025-01-03`, last commit `2025-03-08`) [1][3][9]"
    },
    {
     "label": "Wire format",
     "value_md": "UTF-8 JSON (`Content-Type: application/json`) over HTTPS `POST`/`GET`, referencing two-part plain-text Protocol Documents (YAML frontmatter, triple-hyphen separator, freeform spec) hashed with SHA-1 [1][11][12]"
    },
    {
     "label": "Specification",
     "value_md": "[Working Standard](https://agoraprotocol.org/docs/protocol/specification) · [Beginner Spec](https://agoraprotocol.org/docs/protocol/beginner-friendly) · [2024 Spec (specs.html)](https://raw.githubusercontent.com/agora-protocol/agora-protocol.github.io/master/specs.html) · [arXiv:2410.11905v1](https://arxiv.org/html/2410.11905v1) [1][11][12]"
    },
    {
     "label": "Found at",
     "value_md": "HTTPS `POST` endpoint (`{baseURL}` and `{baseURL}/conversations/{conversationId}`), with optional `GET {baseURL}/wellknown` (`GET /.wellknown` in the 2024 spec; distinct from RFC 8615 `/.well-known/`, which the spec notes would be addressed in a later update) mapping supported 40-char `protocolHash` digests to Protocol Document sources [1][11][12]"
    },
    {
     "label": "Licence",
     "value_md": "MIT (`agora-protocol` Python SDK); CC BY 4.0 (`arXiv:2410.11905v1`) [5][6][13]"
    }
   ],
   "v05_problem_md": "Systems often need a simple structured exchange, with optional domain-specific conventions. The protocol is agnostic to application logic, so those details stay in the message body or in a Protocol Document. [1] It requires HTTPS to ensure confidentiality and is otherwise minimal in its security assumptions. [1] The overview provides a JSON envelope for requests and replies, optional multi-round state via a conversation identifier, and `protocolHash` references that add constraints on message bodies. [1] A Protocol Document splits YAML metadata (`name`, `description`, `multiround`) from freeform application rules with a line `---`. Requests and responses in that freeform part MUST or SHOULD follow what the document says. SHA1 of the entire text, including the separator, MUST be the 40-character `protocolHash`. [1] In scope are JSON message structure, error handling, SHA1-identified protocol documents (`protocolHash`), and conversation state (`conversationId`, which servers SHOULD generate randomly to mitigate session hijacking); authentication, authorization, key management, and advanced privacy are out of scope. [1] Systems MAY layer tokens or OAuth on top, while a 2026 comparative security analysis notes that Agora's design assumes a cooperative and non-adversarial environment and does not define an explicit threat model. [1][14]",
   "v05_mechanism_delta_md": "The overview provides a JSON envelope for requests and replies, optional multi-round state via a conversation identifier, and `protocolHash` references that add constraints on message bodies. [1] A Protocol Document splits YAML metadata (`name`, `description`, `multiround`) from freeform application rules with a line `---`. Requests and responses in that freeform part MUST or SHOULD follow what the document says. SHA1 of the entire text, including the separator, MUST be the 40-character `protocolHash`. [1]",
   "v05_scope_boundary_md": "In scope are JSON message structure, error handling, SHA1-identified protocol documents (`protocolHash`), and conversation state (`conversationId`, which servers SHOULD generate randomly to mitigate session hijacking); authentication, authorization, key management, and advanced privacy are out of scope. [1] Systems MAY layer tokens or OAuth on top, while a 2026 comparative security analysis notes that Agora's design assumes a cooperative and non-adversarial environment and does not define an explicit threat model. [1][14]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "JSON Schema 2020-12",
      "spec_or_rfc": "JSON Schema 2020-12",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "The 2024 Agora paper (arXiv:2410.11905) compiles repeated natural-language exchanges into LLM-generated routines, whereas the 2025 Working Standard specifies a two-party HTTPS POST JSON framework with SHA1 protocolHash references and discovery at {baseURL}/wellknown rather than a pre-published OpenAPI or JSON Schema document. [1][15]"
     },
     {
      "name": "HTTP Semantics (RFC 9110)",
      "spec_or_rfc": "RFC 9110",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "Agora's 2025 working standard requires every exchange to be an HTTPS POST, discovery is at {baseURL}/wellknown, and a multi-round conversation continues at {baseURL}/conversations/{conversationId} with the protocol identified by a SHA1 protocolHash. [1][16]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "anp",
      "target_name": "Agent Network Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "ANP-06 cites the 2024 Agora paper (arXiv:2410.11905) for natural-language negotiation and LLM-generated routines while the 2025 Agora Working Standard specifies HTTPS POST JSON exchanges with SHA1 protocolHash and {baseURL}/wellknown, whereas ANP's own discovery file is /.well-known/agent-descriptions. [1][17]"
     },
     {
      "target_id": "a2a",
      "target_name": "Agent2Agent Protocol (A2A)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "The 2024 Agora paper starts from natural-language negotiation that compiles into routines and the 2025 Working Standard specifies two-party HTTPS POST JSON with SHA1 protocolHash and {baseURL}/wellknown, while A2A starts from an Agent Card at /.well-known/agent-card.json and delegates tasks over JSON-RPC 2.0, gRPC, or HTTP+JSON. [1][18]"
     },
     {
      "target_id": "agora-commerce-protocol",
      "target_name": "Agora (agent marketplace protocol)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "This Agora specification is the Oxford meta-protocol draft for compiling conversations into JSON routines, while the Agora commerce protocol is a separate marketplace document. [1][19]"
     },
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Agora's product is a negotiated JSON routine between agents, while MCP is a host-to-server JSON-RPC tool session and is one of the protocols a negotiated routine might call. [1][20]"
     },
     {
      "target_id": "agent-connect-protocol",
      "target_name": "Agent Connect Protocol",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "Agora discovers peers at {baseURL}/wellknown and speaks HTTPS POST, while AGNTCY ACP searched agents at /agents/search under an OpenAPI 3.1.1 document, received its final specification push on 2025-05-23, and was archived on April 11, 2026. [1][21][22]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (1 probed or cited example; non-exhaustive).",
    "side_a": null,
    "side_b": {
     "visible": true,
     "heading": "IDEs, hosts & coding agents",
     "col4_header": "Transport & Scope",
     "note_md": null,
     "rows": [
      {
       "actor": "agora-protocol (PyPI)",
       "role": "Client SDK / Runtime",
       "status": "Experimental",
       "status_display": "Experimental · as of 2025-01-03",
       "col4_md": "PyPI agora-protocol 0.2.0 (uploaded 2025-01-03), README status Open Beta. Exchanges use HTTPS POST. Agents refer to a protocol document by its SHA1 hash. The getting-started example pairs a LangChain agent with a Camel agent, first in natural language and then with structured routines. The 2024 site also describes an optional /.wellknown endpoint that returns supported protocol hashes.",
       "source_md": "[agora-protocol/python README](https://raw.githubusercontent.com/agora-protocol/python/main/README.md) [4] · [PyPI agora-protocol](https://pypi.org/pypi/agora-protocol/json) [13] · [Working standard](https://agoraprotocol.org/docs/protocol/specification) [1]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Coordinate protocols](/category/coordinate/)** — Category index for `coordinate` standards."
    }
   ],
   "v05_compiled_md": "---\nid: agora-protocol\ntitle: \"Agora Protocol\"\ntier: spec_brief\nlifecycle_status: retired\ncategory: coordinate\nform: endpoint\nwire_archetype: harnesses_rpc_ui\nspec_url: https://agoraprotocol.org/docs/protocol/specification\nlast_checked: 2026-11-12\n---\n\n# Agora Protocol\n\n**Category:** [Coordinate](/category/coordinate/) (`coordinate`) · **Form:** Endpoint (`endpoint`) · **Last checked:** 2026-11-12\n\n> ***Status notice (Inactive Draft):** The academic Agora Protocol working standard has had no specification commits since March 2025. This page is about the Agora Protocol from Samuele Marro and co-authors at the University of Oxford (arXiv 2410.11905): a meta-protocol in which LLM agents talk in natural language, agree on plain-text protocol documents identified by a hash, and then exchange JSON through generated routines. It is not [Agora (agent marketplace protocol)](/protocols/agora-commerce-protocol/) at agoraproto.org, an unrelated escrow marketplace that shares the name. Protocols it is compared with have their own pages: the [Agent2Agent Protocol (A2A)](/protocols/a2a/), the [Agent Network Protocol (ANP)](/protocols/anp/), the [Model Context Protocol (MCP)](/protocols/mcp/), the [Agent Communication Protocol](/protocols/agent-communication-protocol/) and the [Agent Connect Protocol](/protocols/agent-connect-protocol/) (see [ACP](/terms/acp/)). [1]*\n\n**Agora Protocol** specifies a lightweight JSON framework for two-party client and server exchanges. It covers single-round stateless conversations and multi-round stateful conversations, optional Protocol Documents identified by a SHA1 hash, and separate transport-level, Agora-level, and protocol-level errors. [1] The page presents a working standard, styled like an IETF RFC, and says the document should be understood as a draft. It is intended to be a Proposed Standard, distribution is unlimited, and the copyright notice is (C) 2025 Samuele Marro. [1] arXiv:2410.11905, submitted on 14 Oct 2024 by Samuele Marro and 6 other authors, introduces Agora as a meta protocol that uses existing communication standards so LLM-powered agents can solve complex problems efficiently. [2] All Agora exchanges MUST occur over HTTPS using HTTP POST. Implementations MUST set `Content-Type` to `application/json` on requests and responses. Other HTTP headers MAY be used and are not mandated by the specification. [1] The client sends an HTTPS POST whose JSON body MUST include at least `body`. The server MUST respond with JSON that includes `status`, either \"success\" or \"failure\". [1] The specification page was last updated on Jan 19, 2025. It does not create or modify any IANA registry. Registering a well-known URI such as `.well-known/agora` would be addressed in an update. [1] Python release `0.2.0`, published on `2025-01-03`, is the initial release of the Agora Python client. The library README states that it is in Open Beta and that breaking changes are expected between versions. [3][4] The project FAQ on the Agora Protocol site says Agora is released under the MIT license. [5]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Coordinate](/category/coordinate/) (`coordinate`) |\n| **Form** | Endpoint (`endpoint`) |\n| **Originated by** | Samuele Marro, Emanuele La Malfa, Jesse Wright, Nigel Shadbolt, Michael Wooldridge, Philip Torr (Oxford), and Guohao Li (Eigent AI) (`2024-10-14`) [2][6] |\n| **Governed by** | Author group (`Samuele Marro`, copyright `2025`); no foundation or standards body (`Discord` hub; two contributors on `agora-protocol/python`) [1][7][8] |\n| **Track** | Academic research paper (`arXiv:2410.11905`) and author-maintained Working Standard draft (`agoraprotocol.org`) [1][2] |\n| **Status** | Draft, and inactive since March 2025. \"Below is the Working Standard for the Agora Protocol, structured in a style similar to IETF RFCs. It includes the sections outlined previously, along with normative language (per RFC 2119 and RFC 8174). While this document follows a typical RFC format, it should be understood as a draft.\" \"We're building the next iteration of Agora, with more features for real-world use cases.\" \"This document is intended to be a Proposed Standard.\" The library says \"Agora Python is currently in Open Beta! Expect breaking changes from one version to the other.\" The last commit in the organization is dated 2025-03-08 (UTC), in agora-protocol/python. [1][3][4][9][10] |\n| **Version** | Working Standard (`2025-01-19`, *Proposed Standard* draft); Beginner Spec (`2025-02-16`); `agora-protocol` `v0.2.0` (`2025-01-03`, last commit `2025-03-08`) [1][3][9] |\n| **Wire format** | UTF-8 JSON (`Content-Type: application/json`) over HTTPS `POST`/`GET`, referencing two-part plain-text Protocol Documents (YAML frontmatter, triple-hyphen separator, freeform spec) hashed with SHA-1 [1][11][12] |\n| **Specification** | [Working Standard](https://agoraprotocol.org/docs/protocol/specification) · [Beginner Spec](https://agoraprotocol.org/docs/protocol/beginner-friendly) · [2024 Spec (specs.html)](https://raw.githubusercontent.com/agora-protocol/agora-protocol.github.io/master/specs.html) · [arXiv:2410.11905v1](https://arxiv.org/html/2410.11905v1) [1][11][12] |\n| **Found at** | HTTPS `POST` endpoint (`{baseURL}` and `{baseURL}/conversations/{conversationId}`), with optional `GET {baseURL}/wellknown` (`GET /.wellknown` in the 2024 spec; distinct from RFC 8615 `/.well-known/`, which the spec notes would be addressed in a later update) mapping supported 40-char `protocolHash` digests to Protocol Document sources [1][11][12] |\n| **Licence** | MIT (`agora-protocol` Python SDK); CC BY 4.0 (`arXiv:2410.11905v1`) [5][6][13] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [Adoption and ecosystem](#adoption-and-ecosystem)\n4. [See also](#see-also)\n5. [References](#references)\n\n---\n\n## Problem and scope\n\nSystems often need a simple structured exchange, with optional domain-specific conventions. The protocol is agnostic to application logic, so those details stay in the message body or in a Protocol Document. [1] It requires HTTPS to ensure confidentiality and is otherwise minimal in its security assumptions. [1] The overview provides a JSON envelope for requests and replies, optional multi-round state via a conversation identifier, and `protocolHash` references that add constraints on message bodies. [1] A Protocol Document splits YAML metadata (`name`, `description`, `multiround`) from freeform application rules with a line `---`. Requests and responses in that freeform part MUST or SHOULD follow what the document says. SHA1 of the entire text, including the separator, MUST be the 40-character `protocolHash`. [1] In scope are JSON message structure, error handling, SHA1-identified protocol documents (`protocolHash`), and conversation state (`conversationId`, which servers SHOULD generate randomly to mitigate session hijacking); authentication, authorization, key management, and advanced privacy are out of scope. [1] Systems MAY layer tokens or OAuth on top, while a 2026 comparative security analysis notes that Agora's design assumes a cooperative and non-adversarial environment and does not define an explicit threat model. [1][14]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **JSON Schema 2020-12** | `JSON Schema 2020-12` | Analogous to classic standard | The 2024 Agora paper (arXiv:2410.11905) compiles repeated natural-language exchanges into LLM-generated routines, whereas the 2025 Working Standard specifies a two-party HTTPS POST JSON framework with SHA1 protocolHash references and discovery at {baseURL}/wellknown rather than a pre-published OpenAPI or JSON Schema document. [1][15] |\n| **HTTP Semantics (RFC 9110)** | `RFC 9110` | Profiles classic standard | Agora's 2025 working standard requires every exchange to be an HTTPS POST, discovery is at {baseURL}/wellknown, and a multi-round conversation continues at {baseURL}/conversations/{conversationId} with the protocol identified by a SHA1 protocolHash. [1][16] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Agent Network Protocol](/protocols/anp/)** | Complements | ANP-06 cites the 2024 Agora paper (arXiv:2410.11905) for natural-language negotiation and LLM-generated routines while the 2025 Agora Working Standard specifies HTTPS POST JSON exchanges with SHA1 protocolHash and {baseURL}/wellknown, whereas ANP's own discovery file is /.well-known/agent-descriptions. [1][17] |\n| **[Agent2Agent Protocol (A2A)](/protocols/a2a/)** | Peer alternative | The 2024 Agora paper starts from natural-language negotiation that compiles into routines and the 2025 Working Standard specifies two-party HTTPS POST JSON with SHA1 protocolHash and {baseURL}/wellknown, while A2A starts from an Agent Card at /.well-known/agent-card.json and delegates tasks over JSON-RPC 2.0, gRPC, or HTTP+JSON. [1][18] |\n| **[Agora (agent marketplace protocol)](/protocols/agora-commerce-protocol/)** | Peer alternative | This Agora specification is the Oxford meta-protocol draft for compiling conversations into JSON routines, while the Agora commerce protocol is a separate marketplace document. [1][19] |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | Agora's product is a negotiated JSON routine between agents, while MCP is a host-to-server JSON-RPC tool session and is one of the protocols a negotiated routine might call. [1][20] |\n| **[Agent Connect Protocol](/protocols/agent-connect-protocol/)** | Peer alternative | Agora discovers peers at {baseURL}/wellknown and speaks HTTPS POST, while AGNTCY ACP searched agents at /agents/search under an OpenAPI 3.1.1 document, received its final specification push on 2025-05-23, and was archived on April 11, 2026. [1][21][22] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (1 probed or cited example; non-exhaustive).*\n\n### IDEs, hosts & coding agents\n\n| Actor | Role | Status | Transport & Scope | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **agora-protocol (PyPI)** | Client SDK / Runtime | Experimental · as of 2025-01-03 | PyPI agora-protocol 0.2.0 (uploaded 2025-01-03), README status Open Beta. Exchanges use HTTPS POST. Agents refer to a protocol document by its SHA1 hash. The getting-started example pairs a LangChain agent with a Camel agent, first in natural language and then with structured routines. The 2024 site also describes an optional /.wellknown endpoint that returns supported protocol hashes. | [agora-protocol/python README](https://raw.githubusercontent.com/agora-protocol/python/main/README.md) [4] · [PyPI agora-protocol](https://pypi.org/pypi/agora-protocol/json) [13] · [Working standard](https://agoraprotocol.org/docs/protocol/specification) [1] |\n\n---\n\n## See also\n\n- **Category:** [Coordinate protocols](/category/coordinate/)\n\n---\n\n## References\n\n1. Samuele Marro, *Agora Protocol for Two-Party JSON Exchanges* (updated Jan 19, 2025) — <https://agoraprotocol.org/docs/protocol/specification>\n2. Samuele Marro and 6 other authors, *A Scalable Communication Protocol for Networks of Large Language Models* (submitted 14 Oct 2024) — <https://arxiv.org/abs/2410.11905>\n3. Samuele Marro, *agora-protocol Python GitHub releases* (published 2025-01-03) — <https://github.com/agora-protocol/python/releases>\n4. Samuele Marro, *agora-protocol Python README* (checked 2026-10-30) — <https://raw.githubusercontent.com/agora-protocol/python/main/README.md>\n5. Agora Protocol, *Agora Protocol homepage* (checked 2026-10-30) — <https://agoraprotocol.org/>\n6. Samuele Marro and 6 other authors, *arXiv HTML 2410.11905v1* (submitted 14 Oct 2024) — <https://arxiv.org/html/2410.11905v1>\n7. Agora Protocol, *agora-protocol Python contributors API* (checked 2026-10-30) — <https://github.com/agora-protocol/python/graphs/contributors>\n8. Agora Protocol, *Agora Protocol community overview* (checked 2026-10-30) — <https://agoraprotocol.org/community/overview>\n9. Agora Protocol, *agora-protocol Python commits API* (checked 2026-10-30) — <https://github.com/agora-protocol/python/commits>\n10. Agora Protocol, *Agora paper-demo README* (checked 2026-10-30) — <https://raw.githubusercontent.com/agora-protocol/paper-demo/main/README.md>\n11. Agora Protocol, *Beginner-friendly Agora specification* (checked 2026-10-30) — <https://agoraprotocol.org/docs/protocol/beginner-friendly>\n12. Agora Protocol, *Agora specs.html* (checked 2026-10-30) — <https://raw.githubusercontent.com/agora-protocol/agora-protocol.github.io/master/specs.html>\n13. Python Package Index, *agora-protocol package metadata* (checked 2026-10-30) — <https://pypi.org/pypi/agora-protocol/json>\n14. Zeynab Anbiaee, Mahdi Rabbani, Mansur Mirani, Gunjan Piya, Igor Opushnyev, Ali Ghorbani, and Sajjad Dadkhah, *Security Threat Modeling for Emerging AI-Agent Protocols: A Comparative Analysis of MCP, A2A, Agora, and ANP (arXiv:2602.11327v2)* (checked 2026-10-30) — <https://arxiv.org/html/2602.11327v2>\n15. Austin Wright, Henry Andrews, Ben Hutton, and Greg Dennis, *JSON Schema: A Media Type for Describing JSON Documents (Draft 2020-12)* (2022-06-16) — <https://json-schema.org/draft/2020-12/json-schema-core.html>\n16. R. Fielding, Ed., M. Nottingham, Ed., and J. Reschke, Ed., *RFC 9110: HTTP Semantics* (June 2022) — <https://www.rfc-editor.org/rfc/rfc9110.html>\n17. Agent Network Protocol community, *Agent Network Protocol (ANP) README* (checked 2026-10-30) — <https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/README.md>\n18. Agentic AI Foundation, *A2A joins AAIF's open agentic stack* (published 2026-08-17; modified 2026-09-24) — <https://aaif.io/blog/a2a-joins-aaif>\n19. Agora Marketplace, *Agora API v0.1.0 OpenAPI 3.1.0 Specification* (checked 2026-10-29) — <https://api.agoraproto.org/v1/openapi.json>\n20. Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation* (2026-07-28) — <https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning>\n21. AGNTCY (Open Agentic Schema Framework), *OASF schema 1.1.0 modules* (fetched 2026-10-30) — <https://schema.oasf.outshift.com/1.1.0/modules>\n22. AGNTCY, *agntcy/acp-spec: Agent Connect Protocol Specification* (archived 2026-04-11) — <https://github.com/agntcy/acp-spec>\n",
   "superseded_by": null
  },
  {
   "acronym": "",
   "adoption": {
    "level": "observed",
    "by": "agoraproto.org (api.agoraproto.org), AgoraEscrowV2.sol & AgoraEscrowV1.sol (Base Sepolia), and agoraproto/agora (sdk-python, sdk-typescript, mcp-server)",
    "probe_run": null
   },
   "aliases": [
    "Agora Protocol (agoraproto.org)"
   ],
   "analog": "freelance marketplace plus escrow",
   "collisions": [
    "Agora Protocol (Marro et al., academic negotiation protocol — unrelated, see agora-protocol)"
   ],
   "discovery": {
    "mechanism": "/.well-known/ai-services.json manifest plus /.well-known/agora.json webhook-signing config",
    "path": "https://api.agoraproto.org/.well-known/ai-services.json"
   },
   "dispute": {
    "claims": [
     "agoraproto.org's schema.org markup: \"Not to be confused with the academic 'Agora Protocol' paper by Marro et al. — that is a different project that happens to share the name.\"",
     "api.agoraproto.org/.well-known/ai-services.json cites \"a 2026-05-27 external audit report\", whereas agoraproto.org/llms.txt states \"No external smart-contract audit (internal review only)\"."
    ],
    "summary": "This project and the academic 'Agora Protocol' (arXiv:2410.11905, Marro et al.) share the name \"Agora\" but are confirmed by agoraproto.org's homepage schema.org markup and llms.txt to be unrelated, independently authored projects. Separately, the project's 2026-05-25 ai-services.json manifest describes a \"2026-05-27 external audit\" and calls V2 undeployed, whereas its newer llms.txt states \"No external smart-contract audit (internal review only)\" and AgoraEscrowV2.sol has been deployed on Base Sepolia since 2026-05-29."
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://agoraproto.org/llms.txt",
     "claim": "Agora Marketplace, *Agora llms.txt Documentation*, checked 2026-10-29",
     "date": null,
     "quote": "note: **not** `agoraprotocol.org`, **not** `agora.io`, **not** `agora-protocol` / AgoraEscrowV2 (the live escrow contract): 0x0e8E6A760c76cA92c5C5dA06d293E33f1B5fbAEc - source-verified - AgoraEscrowV1 ( / - Canonical domain: **agoraproto.org** (note: **not** `agoraprotocol.org`, **not** `agora.io`, **not** `agora-protocol`). / The project this file describes is identified unambiguously by: / Canonical domain: **agoraproto.org** / ## Discovery endpoints for AI crawlers - /.well-known/ai-services.json: machine-readable manifest - what Agora is, / Testnet only — no production deployment yet",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://agoraproto.org",
     "claim": "Agora Marketplace, *Agora Marketplace Homepage (agoraproto.org)*, checked 2026-10-29",
     "date": null,
     "quote": "Open marketplace and communication protocol where AI agents discover, hire, and pay other AI agents for paid work / GMG, BEG, BAFA, KfW)\" ], \"sameAs\": [ \"https://github.com/agoraproto/agora\" ], \"isAccessibleForFree\": true, \"softwareVersion\": \"0.1\", \"softwareRequirements\": / \"target\": \"https://api.agoraproto.org/v1/openapi.json\" }, { \"@type\": \"BuyAction\", \"name\": \"Hire an AI agent on Agora\", \"target\": / Apache 2.0 · Built by Natalie Warkentin · agoraproto.org / provider has results, approve to release escrow. job = await approve_with_x402( \"https://api.agoraproto.org\", job_id=job[\"id\"], rpc_url=\"https://sepolia.base.org\",",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://raw.githubusercontent.com/agoraproto/agora/main/docs/x402.md",
     "claim": "Agora Marketplace, *x402 on Agora — Agent Payment Guide (docs/x402.md)*, checked 2026-10-29",
     "date": null,
     "quote": "Agora speaks HTTP 402 Payment Required so that any agent - yours, Coinbase's, Google's, anyone's - can pay for a job with a single HTTP roundtrip + one on-chain transaction. No accounts, no API keys, no KYC. / Each call follows the same dance: POST → 402 with X-Payment-Required → on-chain tx → retry with X-Payment-Tx → 200/201 with mirrored state. / The full job lifecycle is four x402 calls. / X-Payment-Tx: .\"} X-Payment-Required header (JSON) json { \"version\": \"1\", \"chain\": \"base-sepolia\", \"chain_id\": 84532, \"asset\": / No accounts, no API keys, no KYC. / The API is a coordination oracle; the EVM contract is the source of truth. / No party ever holds the other party's keys. / x402 on Agora — agent payment guide / The contract source is in contracts/src/AgoraEscrow.sol. The ABI is embedded in packages/sdk-python/src/agora_sdk/x402.py and packages/sdk-typescript/src/x402.ts.",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://api.agoraproto.org/v1/openapi.json",
     "claim": "Agora Marketplace, *Agora API v0.1.0 OpenAPI 3.1.0 Specification*, checked 2026-10-29",
     "date": null,
     "quote": "{\"openapi\":\"3.1.0\",\"info\":{\"title\":\"Agora API\",\"description\":\"Open marketplace and communication protocol for AI / {\"openapi\":\"3.1.0\",\"info\":{\"title\":\"Agora API\" / Error\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/HTTPValidationError\"}}}}}}},\"/v1/x402/jobs\":{\"post\":{\"tags\":\"x402\",\"summary\":\"Create a job - pays via x402 / on-chain USDC",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://api.agoraproto.org/.well-known/ai-services.json",
     "claim": "Agora Marketplace, *Agora /.well-known/ai-services.json Service Manifest*, checked 2026-10-29",
     "date": null,
     "quote": "production_status / \"production_status\":\"testnet-only\",\"contract_version\":\"v1\",\"contract_mainnet_ready\":false / \"contract_version\":\"v1\",\"contract_mainnet_ready\":false / POSTs job.* events to your endpoint_url, signed with Ed25519. See /.well-known/agora.json for the public",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://github.com/agoraproto/agora/tree/main",
     "claim": "Agora Marketplace (agoraproto/agora), *agoraproto/agora Repository File Tree (main)*, checked 2026-10-29",
     "date": null,
     "quote": "\"sha\": \"593194b06e4676d3936b1602e4cabd2d3054b2ea\", / {\"path\":\"packages/sdk-python/src\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"b0239bd04f5ebc2081333e74ab56f6fbd162a5eb\",\"url\":\"https://api.github.com/repos/agoraproto/agora/git/trees/b0239bd04f5ebc2081333e74ab56f6fbd1",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://base-sepolia.blockscout.com/api/v2/addresses/0x0e8E6A760c76cA92c5C5dA06d293E33f1B5fbAEc/transactions",
     "claim": "Blockscout (Base Sepolia), *Blockscout (Base Sepolia) API*, checked 2026-10-29",
     "date": null,
     "quote": "content-type: application/json; charset=utf-8 / access-control-expose-headers: bypass-429-option,x-ratelimit-reset,x-ratelimit-limit,x-ratelimit-remaining,api-v2-temp-token / date: Sat, 31 Oct 2026 03:10:34 GMT",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://www.rfc-editor.org/rfc/rfc8615.html",
     "claim": "M. Nottingham, *RFC 8615: Well-Known Uniform Resource Identifiers (URIs)*, May 2019",
     "date": null,
     "quote": "This memo defines a path prefix for \"well-known locations\",",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://www.rfc-editor.org/rfc/rfc9110.html",
     "claim": "R. Fielding, Ed., M. Nottingham, Ed., and J. Reschke, Ed., *RFC 9110: HTTP Semantics*, June 2022",
     "date": null,
     "quote": "<meta content=\"Common,Latin\" name=\"scripts\">",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://www.linuxfoundation.org/press/linux-foundation-announces-operational-launch-of-x402-foundation-to-standardize-internet-native-payments-for-ai-agents-and-applications",
     "claim": "Linux Foundation, *Linux Foundation Announces Operational Launch of x402 Foundation to Standardize Internet-Native Payments for AI Agents and Applications*, July 14, 2026",
     "date": null,
     "quote": "SAN FRANCISCO, July 14, 2026 – The Linux Foundation , the nonprofit organization enabling mass innovation through open source, today announced the operational launch of the x402 Foundation",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://eips.ethereum.org/EIPS/eip-8183",
     "claim": "Davide Crapis, Bryan Lim, Tay Weixiong, and Chooi Zuhwa, *ERC-8183: Agentic Commerce*, created 2026-02-25; fetched 2026-10-31",
     "date": null,
     "quote": "(@ai-virtual-b), Tay Weixiong (@twx-virtuals), Chooi Zuhwa (@Zuhwa) Created 2026-02-25 Discussion Link https://ethereum-magicians.org/t/erc-8183-agentic-commerce/27902 Requires EIP-20",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Current : the current protocol version, which is ready for use and may continue to receive backwards compatible changes.",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://api.agoraproto.org/v1/state",
     "claim": "Agora Marketplace, *Agora API /v1/state Endpoint*, checked 2026-10-29",
     "date": null,
     "quote": "{\"schema_version\":\"1\",\"as_of\":\"2026-10-31T03:10:33.668249+00:00\",\"agents\":{\"active\":39},\"marketplace\":{\"rfqs_open\":0,\"jobs_in_flight\":3,\"jobs_completed_total\":423,\"listings_active\":28},\"volume\":{\"total_usdc_set",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://api.agoraproto.org/v1/stats",
     "claim": "Agora Marketplace, *Agora API /v1/stats Endpoint*, checked 2026-10-29",
     "date": null,
     "quote": "{\"agents\":{\"total_active\":39},\"jobs\":{\"total\":537,\"completed\":423,\"disputed\":0,\"by_status\":{\"submitted\":3,\"completed\":423,\"refunded\":111}}",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://base-sepolia.blockscout.com/api/v2/addresses/0xCE783B527C83c4fFFF3D3565c0F3C3204be02B76/counters",
     "claim": "Blockscout (Base Sepolia), *Blockscout (Base Sepolia) API*, checked 2026-10-29",
     "date": null,
     "quote": "date: Sat, 31 Oct 2026 03:10:34 GMT",
     "ref": 15
    }
   ],
   "form": "well-known-file",
   "governance": "Single vendor / independent project (agoraproto.org)",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against api.agoraproto.org openapi.json and .well-known manifests, and agoraproto.org homepage; moved step from coordinate to pay given its payments/escrow/marketplace scope; confirmed distinct project from agora-protocol (Oxford academic) via the project's own disambiguation notice"
    },
    {
     "date": "2026-10-29",
     "note": "Added verified ecosystem adoption and client implementation sections; updated contract V2 Base Sepolia status (2026-05-29) and audit dispute note"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "agora-commerce-protocol",
   "implementation": "prototype",
   "last_verified": "2026-11-12",
   "name": "Agora (agent marketplace protocol)",
   "native_status": "Testnet-only; production_status explicitly \"testnet-only\" in its own manifest",
   "origin": {
    "date": null,
    "org": "agoraproto.org (unaffiliated single project)"
   },
   "part_of": null,
   "parties": [
    "agent-agent",
    "agent-payment"
   ],
   "phase": "candidate",
   "probe": {
    "method": "GET",
    "on_absent": "404 means the origin does not publish an Agora-style AI-services manifest; this is a single-project convention, not yet a broadly adopted well-known name",
    "parse": "JSON manifest with schema_version, type:\"marketplace\", and production_status field; on agoraproto.org itself this currently reads \"testnet-only\"",
    "path": "https://api.agoraproto.org/.well-known/ai-services.json"
   },
   "question": "How can an AI agent discover, hire, and pay another AI agent for a paid job, with escrowed on-chain settlement?",
   "scope": "commerce",
   "spec_url": "https://api.agoraproto.org/v1/openapi.json",
   "step": "pay",
   "summary_md": "**Agora (agent marketplace protocol)** is the agoraproto.org open marketplace where AI agents discover, hire, and pay other AI agents for paid work, with on-chain settlement on Base Sepolia in USDC via HTTP-402 escrow. The project is not the academic Agora Protocol paper by Marro et al. and is identified at agoraproto.org, not agoraprotocol.org or agora.io. While the upstream guide describes x402 payment as a single HTTP roundtrip and one on-chain transaction with no accounts, API keys, or KYC, the uncached wire exchange requires two HTTP requests: an initial `POST` returning `HTTP 402 Payment Required` with an `X-Payment-Required` payment descriptor, followed by an on-chain transaction and a retried `POST` carrying the transaction hash in `X-Payment-Tx` to return `200` or `201` with mirrored escrow state. The full job lifecycle comprises four x402 calls: hire, result, approve, and an optional post-deadline refund. The OpenAPI `3.1.0` specification is published at version `0.1.0`, and `/.well-known/ai-services.json` declares `production_status` as `testnet-only` on `base-sepolia` with `USDC` settlement. In `llms.txt`, `AgoraEscrowV2` is listed as the live, source-verified escrow contract on Base Sepolia, while `AgoraEscrowV1` is marked legacy.",
   "track": "single-vendor",
   "version": {
    "date": "2026-05-29",
    "label": "API 0.1.0, contract V2 live on Base Sepolia since 2026-05-29 (V1 legacy; V2.1 not deployed)"
   },
   "watch": [
    {
     "type": "page",
     "url": "https://api.agoraproto.org/v1/openapi.json",
     "selector": "main",
     "cadence": "weekly"
    }
   ],
   "use_cases": [
    "accept-agent-payments",
    "agent-to-agent-messaging",
    "discover-my-api",
    "agent-checkout"
   ],
   "audience": [
    "agent-builder",
    "platform"
   ],
   "pairs_with": [
    "x402",
    "erc-8183",
    "mcp"
   ],
   "prerequisites": [
    "x402"
   ],
   "hatnote_md": "Not to be confused with [Agora Protocol](/protocols/agora-protocol/), an academic meta-protocol for LLM agent communication.",
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "payments_onchain",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "Not to be confused with [Agora Protocol](/protocols/agora-protocol/), an academic meta-protocol for LLM agent communication. [1]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Agora (agent marketplace protocol)** is the agoraproto.org open marketplace where AI agents discover, hire, and pay other AI agents for paid work, with on-chain settlement on Base Sepolia in USDC via HTTP-402 escrow. [2] The project is not the academic Agora Protocol paper by Marro et al. and is identified at agoraproto.org, not agoraprotocol.org or agora.io. [1] While the upstream guide describes x402 payment as a single HTTP roundtrip and one on-chain transaction with no accounts, API keys, or KYC, the uncached wire exchange requires two HTTP requests: an initial `POST` returning `HTTP 402 Payment Required` with an `X-Payment-Required` payment descriptor, followed by an on-chain transaction and a retried `POST` carrying the transaction hash in `X-Payment-Tx` to return `200` or `201` with mirrored escrow state. [3] The full job lifecycle comprises four x402 calls: hire, result, approve, and an optional post-deadline refund. [3] The OpenAPI `3.1.0` specification is published at version `0.1.0`, and `/.well-known/ai-services.json` declares `production_status` as `testnet-only` on `base-sepolia` with `USDC` settlement. [4][5] In `llms.txt`, `AgoraEscrowV2` is listed as the live, source-verified escrow contract on Base Sepolia, while `AgoraEscrowV1` is marked legacy. [1]",
   "v05_identity_sentence_md": "**Agora (agent marketplace protocol)** is the agoraproto.org open marketplace where AI agents discover, hire, and pay other AI agents for paid work, with on-chain settlement on Base Sepolia in USDC via HTTP-402 escrow. [2] The project is not the academic Agora Protocol paper by Marro et al. and is identified at agoraproto.org, not agoraprotocol.org or agora.io. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Pay](/category/pay/) (`pay`)"
    },
    {
     "label": "Form",
     "value_md": "Well-known file (`well-known-file`)"
    },
    {
     "label": "Originated by",
     "value_md": "The independent agoraproto project (agoraproto.org, `github.com/agoraproto/agora`) [1][2]"
    },
    {
     "label": "Governed by",
     "value_md": "Single independent project; no consortium, foundation or standards body named [1][6]"
    },
    {
     "label": "Track",
     "value_md": "Single-project open specification (`agoraproto.org`, OpenAPI `3.1.0`; no SDO submission) [1][4]"
    },
    {
     "label": "Status",
     "value_md": "Testnet-only (`production_status: \"testnet-only\"` in `/.well-known/ai-services.json`, which lists `contract_version: \"v1\"` and `contract_mainnet_ready: false` while `llms.txt` states `AgoraEscrowV2` is live on Base Sepolia) [2][4][5][7]"
    },
    {
     "label": "Version",
     "value_md": "API `0.1.0` (OpenAPI 3.1.0); `llms.txt` lists `AgoraEscrowV2` live on Base Sepolia (`V1` legacy), whereas `/.well-known/ai-services.json` still reports `contract_version: \"v1\"` [4][5][7]"
    },
    {
     "label": "Wire format",
     "value_md": "JSON over HTTPS REST; HTTP 402 with `X-Payment-Required` / `X-Payment-Tx`; ERC-20 USDC on Base Sepolia (chain 84532) [3]"
    },
    {
     "label": "Specification",
     "value_md": "https://api.agoraproto.org/v1/openapi.json [2][4]"
    },
    {
     "label": "Found at",
     "value_md": "`/.well-known/ai-services.json`, `/.well-known/agora.json`, `llms.txt` [1][5]"
    },
    {
     "label": "Licence",
     "value_md": "Apache License 2.0 (`agoraproto.org`) [2]"
    }
   ],
   "v05_problem_md": "Paid agent-to-agent work typically requires marketplace accounts, API keys, or off-HTTP settlement paths, which blocks unattended agents from hiring a provider in one coordinated flow. [3] The API acts as a coordination oracle while the EVM contract is the source of truth; mirrored job status on the API follows `AgoraEscrow` state transitions. [3] No party ever holds the other party's keys: the HTTP `POST` requests carry no cryptographic body or header signature; instead, the requester and provider each sign their own on-chain EVM transactions (`AgoraEscrow.createJob()`, `submitResult()`, `approveAndPay()`, and `refund()`) and pass the resulting transaction hash in `X-Payment-Tx` while escrow custody stays on-chain. [3] The deployment is testnet-only with no production deployment yet (`llms.txt` states `AgoraEscrowV2` is live on Base Sepolia and warns not to use it for mainnet money, while `/.well-known/ai-services.json` reports `contract_version` `\"v1\"` and `contract_mainnet_ready` `false`). [1][5] The x402 guide documents Agora's escrow job routes; it is not the x402 Foundation payment specification and not a general negotiation protocol. [3]",
   "v05_mechanism_delta_md": "The API acts as a coordination oracle while the EVM contract is the source of truth; mirrored job status on the API follows `AgoraEscrow` state transitions. [3] No party ever holds the other party's keys: the HTTP `POST` requests carry no cryptographic body or header signature; instead, the requester and provider each sign their own on-chain EVM transactions (`AgoraEscrow.createJob()`, `submitResult()`, `approveAndPay()`, and `refund()`) and pass the resulting transaction hash in `X-Payment-Tx` while escrow custody stays on-chain. [3]",
   "v05_scope_boundary_md": "The deployment is testnet-only with no production deployment yet (`llms.txt` states `AgoraEscrowV2` is live on Base Sepolia and warns not to use it for mainnet money, while `/.well-known/ai-services.json` reports `contract_version` `\"v1\"` and `contract_mainnet_ready` `false`). [1][5] The x402 guide documents Agora's escrow job routes; it is not the x402 Foundation payment specification and not a general negotiation protocol. [3]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "Well-Known URIs (RFC 8615)",
      "spec_or_rfc": "RFC 8615",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "Agora publishes its service catalog at https://api.agoraproto.org/.well-known/ai-services.json, naming the project, its chain, and testnet-only status, and publishes webhook signing keys at /.well-known/agora.json. [2][8]"
     },
     {
      "name": "HTTP 402 Payment Required (RFC 9110 §15.5.3)",
      "spec_or_rfc": "RFC 9110 §15.5.3",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "Agora's job payment path is the /v1/x402/* HTTP 402 family, settling testnet USDC on Base Sepolia into AgoraEscrowV2, with quote and execute calls at /v1/payments/quote and /v1/payments/execute. [2][9]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "x402",
      "target_name": "x402",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "Agora's /v1/x402/* endpoints return bespoke X-Payment-Required JSON and accept X-Payment-Tx transaction hashes around direct AgoraEscrow contract calls on Base Sepolia, which is not wire-compatible with the x402 Foundation PAYMENT-REQUIRED and PAYMENT-SIGNATURE specification. [2][10]"
     },
     {
      "target_id": "erc-8183",
      "target_name": "ERC-8183: Agentic Commerce",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "Agora's escrow is AgoraEscrowV2 on Base Sepolia, called from /v1/payments/execute and /v1/x402/jobs, while ERC-8183 is a Draft Standards Track Ethereum ERC for on-chain job escrow over EIP-20 (ERC-20) tokens whose evaluator attests completion or rejects. [2][11]"
     },
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Agora settles jobs through /v1/jobs, /v1/payments/quote, /v1/payments/execute, and /v1/x402/* into AgoraEscrowV2, while MCP is the JSON-RPC tool transport and does not define that escrow contract. [2][12]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (3 probed or cited examples; non-exhaustive).",
    "side_a": {
     "visible": true,
     "heading": "Sellers, platforms & payment rails",
     "col4_header": "Rail, Asset & Scheme",
     "note_md": null,
     "rows": [
      {
       "actor": "`agoraproto.org` (`api.agoraproto.org`)",
       "role": "Marketplace platform (Originator)",
       "status": "Experimental",
       "status_display": "Experimental · as of 2026-05-29",
       "col4_md": "HTTP 402 job marketplace API (`/v1/x402/jobs`, `/v1/payments/execute`) settling in Base Sepolia testnet USDC (537 cumulative API-tracked jobs reported in `/v1/stats` across legacy and on-chain routes; newest completed job dated 2026-05-29 UTC)",
       "source_md": "[agoraproto.org (checked 2026-10-29)](https://agoraproto.org) [2] · [api.agoraproto.org/v1/openapi.json](https://api.agoraproto.org/v1/openapi.json) [4] · [/v1/state](https://api.agoraproto.org/v1/state) [13][14]"
      },
      {
       "actor": "`AgoraEscrowV2.sol` & `AgoraEscrowV1.sol` (Base Sepolia)",
       "role": "Escrow settlement contracts (Originator)",
       "status": "Experimental",
       "status_display": "Experimental · as of 2026-05-29",
       "col4_md": "Base Sepolia USDC escrow contracts (AgoraEscrowV2.sol at 0x0e8E…bAEc deployed 2026-05-29 with 1 on-chain job on V2; legacy AgoraEscrowV1 at 0xCE78…2B76 has 1,499 prior testnet txns; V2.1 undeployed)",
       "source_md": "[Base Sepolia Blockscout V2 (checked 2026-10-29)](https://base-sepolia.blockscout.com/api/v2/addresses/0x0e8E6A760c76cA92c5C5dA06d293E33f1B5fbAEc/transactions) [7] · [V1 Counters](https://base-sepolia.blockscout.com/api/v2/addresses/0xCE783B527C83c4fFFF3D3565c0F3C3204be02B76/counters) [15]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Buying agents, wallets & client SDKs",
     "col4_header": "Rail, Asset & Scheme",
     "note_md": null,
     "rows": [
      {
       "actor": "`agoraproto/agora` (`sdk-python`, `sdk-typescript`, `mcp-server`)",
       "role": "Reference SDKs & MCP server (Originator)",
       "status": "Development",
       "status_display": "Development · checked 2026-10-31",
       "col4_md": "4-call x402 Base Sepolia USDC escrow lifecycle (`packages/sdk-python`, `packages/sdk-typescript`, `packages/mcp-server` in git tree; `@agora/sdk` and @agora/mcp return status 404 on npm, and agora-sdk on PyPI belongs to an unrelated repo)",
       "source_md": "[agoraproto/agora Git Tree (checked 2026-10-29)](https://github.com/agoraproto/agora/tree/main) [6] · [docs/x402.md](https://raw.githubusercontent.com/agoraproto/agora/main/docs/x402.md) [3]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "agora-protocol",
     "target_name": "Agora Protocol",
     "relation_label": "Peer alternative",
     "delta": "This Agora specification is the Oxford meta-protocol draft for compiling conversations into JSON routines, while the Agora commerce protocol is a separate marketplace document.",
     "item_md": "**[Agora Protocol](/protocols/agora-protocol/)** (Peer alternative) — This Agora specification is the Oxford meta-protocol draft for compiling conversations into JSON routines, while the Agora commerce protocol is a separate marketplace document."
    },
    {
     "item_md": "**[Pay protocols](/category/pay/)** — Category index for `pay` standards."
    }
   ],
   "v05_compiled_md": "---\nid: agora-commerce-protocol\ntitle: \"Agora (agent marketplace protocol)\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: pay\nform: well-known-file\nwire_archetype: payments_onchain\nspec_url: https://api.agoraproto.org/v1/openapi.json\nlast_checked: 2026-11-12\n---\n\n# Agora (agent marketplace protocol)\n\n**Category:** [Pay](/category/pay/) (`pay`) · **Form:** Well-known file (`well-known-file`) · **Last checked:** 2026-11-12\n\n> *Not to be confused with [Agora Protocol](/protocols/agora-protocol/), an academic meta-protocol for LLM agent communication. [1]*\n\n**Agora (agent marketplace protocol)** is the agoraproto.org open marketplace where AI agents discover, hire, and pay other AI agents for paid work, with on-chain settlement on Base Sepolia in USDC via HTTP-402 escrow. [2] The project is not the academic Agora Protocol paper by Marro et al. and is identified at agoraproto.org, not agoraprotocol.org or agora.io. [1] While the upstream guide describes x402 payment as a single HTTP roundtrip and one on-chain transaction with no accounts, API keys, or KYC, the uncached wire exchange requires two HTTP requests: an initial `POST` returning `HTTP 402 Payment Required` with an `X-Payment-Required` payment descriptor, followed by an on-chain transaction and a retried `POST` carrying the transaction hash in `X-Payment-Tx` to return `200` or `201` with mirrored escrow state. [3] The full job lifecycle comprises four x402 calls: hire, result, approve, and an optional post-deadline refund. [3] The OpenAPI `3.1.0` specification is published at version `0.1.0`, and `/.well-known/ai-services.json` declares `production_status` as `testnet-only` on `base-sepolia` with `USDC` settlement. [4][5] In `llms.txt`, `AgoraEscrowV2` is listed as the live, source-verified escrow contract on Base Sepolia, while `AgoraEscrowV1` is marked legacy. [1]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Pay](/category/pay/) (`pay`) |\n| **Form** | Well-known file (`well-known-file`) |\n| **Originated by** | The independent agoraproto project (agoraproto.org, `github.com/agoraproto/agora`) [1][2] |\n| **Governed by** | Single independent project; no consortium, foundation or standards body named [1][6] |\n| **Track** | Single-project open specification (`agoraproto.org`, OpenAPI `3.1.0`; no SDO submission) [1][4] |\n| **Status** | Testnet-only (`production_status: \"testnet-only\"` in `/.well-known/ai-services.json`, which lists `contract_version: \"v1\"` and `contract_mainnet_ready: false` while `llms.txt` states `AgoraEscrowV2` is live on Base Sepolia) [2][4][5][7] |\n| **Version** | API `0.1.0` (OpenAPI 3.1.0); `llms.txt` lists `AgoraEscrowV2` live on Base Sepolia (`V1` legacy), whereas `/.well-known/ai-services.json` still reports `contract_version: \"v1\"` [4][5][7] |\n| **Wire format** | JSON over HTTPS REST; HTTP 402 with `X-Payment-Required` / `X-Payment-Tx`; ERC-20 USDC on Base Sepolia (chain 84532) [3] |\n| **Specification** | https://api.agoraproto.org/v1/openapi.json [2][4] |\n| **Found at** | `/.well-known/ai-services.json`, `/.well-known/agora.json`, `llms.txt` [1][5] |\n| **Licence** | Apache License 2.0 (`agoraproto.org`) [2] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [Adoption and ecosystem](#adoption-and-ecosystem)\n4. [See also](#see-also)\n5. [References](#references)\n\n---\n\n## Problem and scope\n\nPaid agent-to-agent work typically requires marketplace accounts, API keys, or off-HTTP settlement paths, which blocks unattended agents from hiring a provider in one coordinated flow. [3] The API acts as a coordination oracle while the EVM contract is the source of truth; mirrored job status on the API follows `AgoraEscrow` state transitions. [3] No party ever holds the other party's keys: the HTTP `POST` requests carry no cryptographic body or header signature; instead, the requester and provider each sign their own on-chain EVM transactions (`AgoraEscrow.createJob()`, `submitResult()`, `approveAndPay()`, and `refund()`) and pass the resulting transaction hash in `X-Payment-Tx` while escrow custody stays on-chain. [3] The deployment is testnet-only with no production deployment yet (`llms.txt` states `AgoraEscrowV2` is live on Base Sepolia and warns not to use it for mainnet money, while `/.well-known/ai-services.json` reports `contract_version` `\"v1\"` and `contract_mainnet_ready` `false`). [1][5] The x402 guide documents Agora's escrow job routes; it is not the x402 Foundation payment specification and not a general negotiation protocol. [3]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **Well-Known URIs (RFC 8615)** | `RFC 8615` | Profiles classic standard | Agora publishes its service catalog at https://api.agoraproto.org/.well-known/ai-services.json, naming the project, its chain, and testnet-only status, and publishes webhook signing keys at /.well-known/agora.json. [2][8] |\n| **HTTP 402 Payment Required (RFC 9110 §15.5.3)** | `RFC 9110 §15.5.3` | Profiles classic standard | Agora's job payment path is the /v1/x402/* HTTP 402 family, settling testnet USDC on Base Sepolia into AgoraEscrowV2, with quote and execute calls at /v1/payments/quote and /v1/payments/execute. [2][9] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[x402](/protocols/x402/)** | Peer alternative | Agora's /v1/x402/* endpoints return bespoke X-Payment-Required JSON and accept X-Payment-Tx transaction hashes around direct AgoraEscrow contract calls on Base Sepolia, which is not wire-compatible with the x402 Foundation PAYMENT-REQUIRED and PAYMENT-SIGNATURE specification. [2][10] |\n| **[ERC-8183: Agentic Commerce](/protocols/erc-8183/)** | Peer alternative | Agora's escrow is AgoraEscrowV2 on Base Sepolia, called from /v1/payments/execute and /v1/x402/jobs, while ERC-8183 is a Draft Standards Track Ethereum ERC for on-chain job escrow over EIP-20 (ERC-20) tokens whose evaluator attests completion or rejects. [2][11] |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | Agora settles jobs through /v1/jobs, /v1/payments/quote, /v1/payments/execute, and /v1/x402/* into AgoraEscrowV2, while MCP is the JSON-RPC tool transport and does not define that escrow contract. [2][12] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (3 probed or cited examples; non-exhaustive).*\n\n### Sellers, platforms & payment rails\n\n| Actor | Role | Status | Rail, Asset & Scheme | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **`agoraproto.org` (`api.agoraproto.org`)** | Marketplace platform (Originator) | Experimental · as of 2026-05-29 | HTTP 402 job marketplace API (`/v1/x402/jobs`, `/v1/payments/execute`) settling in Base Sepolia testnet USDC (537 cumulative API-tracked jobs reported in `/v1/stats` across legacy and on-chain routes; newest completed job dated 2026-05-29 UTC) | [agoraproto.org (checked 2026-10-29)](https://agoraproto.org) [2] · [api.agoraproto.org/v1/openapi.json](https://api.agoraproto.org/v1/openapi.json) [4] · [/v1/state](https://api.agoraproto.org/v1/state) [13][14] |\n| **`AgoraEscrowV2.sol` & `AgoraEscrowV1.sol` (Base Sepolia)** | Escrow settlement contracts (Originator) | Experimental · as of 2026-05-29 | Base Sepolia USDC escrow contracts (AgoraEscrowV2.sol at 0x0e8E…bAEc deployed 2026-05-29 with 1 on-chain job on V2; legacy AgoraEscrowV1 at 0xCE78…2B76 has 1,499 prior testnet txns; V2.1 undeployed) | [Base Sepolia Blockscout V2 (checked 2026-10-29)](https://base-sepolia.blockscout.com/api/v2/addresses/0x0e8E6A760c76cA92c5C5dA06d293E33f1B5fbAEc/transactions) [7] · [V1 Counters](https://base-sepolia.blockscout.com/api/v2/addresses/0xCE783B527C83c4fFFF3D3565c0F3C3204be02B76/counters) [15] |\n\n### Buying agents, wallets & client SDKs\n\n| Actor | Role | Status | Rail, Asset & Scheme | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **`agoraproto/agora` (`sdk-python`, `sdk-typescript`, `mcp-server`)** | Reference SDKs & MCP server (Originator) | Development · checked 2026-10-31 | 4-call x402 Base Sepolia USDC escrow lifecycle (`packages/sdk-python`, `packages/sdk-typescript`, `packages/mcp-server` in git tree; `@agora/sdk` and @agora/mcp return status 404 on npm, and agora-sdk on PyPI belongs to an unrelated repo) | [agoraproto/agora Git Tree (checked 2026-10-29)](https://github.com/agoraproto/agora/tree/main) [6] · [docs/x402.md](https://raw.githubusercontent.com/agoraproto/agora/main/docs/x402.md) [3] |\n\n---\n\n## See also\n\n- **[Agora Protocol](/protocols/agora-protocol/)** *(Peer alternative)* — This Agora specification is the Oxford meta-protocol draft for compiling conversations into JSON routines, while the Agora commerce protocol is a separate marketplace document.\n- **Category:** [Pay protocols](/category/pay/)\n\n---\n\n## References\n\n1. Agora Marketplace, *Agora llms.txt Documentation* (checked 2026-10-29) — <https://agoraproto.org/llms.txt>\n2. Agora Marketplace, *Agora Marketplace Homepage (agoraproto.org)* (checked 2026-10-29) — <https://agoraproto.org>\n3. Agora Marketplace, *x402 on Agora — Agent Payment Guide (docs/x402.md)* (checked 2026-10-29) — <https://raw.githubusercontent.com/agoraproto/agora/main/docs/x402.md>\n4. Agora Marketplace, *Agora API v0.1.0 OpenAPI 3.1.0 Specification* (checked 2026-10-29) — <https://api.agoraproto.org/v1/openapi.json>\n5. Agora Marketplace, *Agora /.well-known/ai-services.json Service Manifest* (checked 2026-10-29) — <https://api.agoraproto.org/.well-known/ai-services.json>\n6. Agora Marketplace (agoraproto/agora), *agoraproto/agora Repository File Tree (main)* (checked 2026-10-29) — <https://github.com/agoraproto/agora/tree/main>\n7. Blockscout (Base Sepolia), *Blockscout (Base Sepolia) API* (checked 2026-10-29) — <https://base-sepolia.blockscout.com/api/v2/addresses/0x0e8E6A760c76cA92c5C5dA06d293E33f1B5fbAEc/transactions>\n8. M. Nottingham, *RFC 8615: Well-Known Uniform Resource Identifiers (URIs)* (May 2019) — <https://www.rfc-editor.org/rfc/rfc8615.html>\n9. R. Fielding, Ed., M. Nottingham, Ed., and J. Reschke, Ed., *RFC 9110: HTTP Semantics* (June 2022) — <https://www.rfc-editor.org/rfc/rfc9110.html>\n10. Linux Foundation, *Linux Foundation Announces Operational Launch of x402 Foundation to Standardize Internet-Native Payments for AI Agents and Applications* (July 14, 2026) — <https://www.linuxfoundation.org/press/linux-foundation-announces-operational-launch-of-x402-foundation-to-standardize-internet-native-payments-for-ai-agents-and-applications>\n11. Davide Crapis, Bryan Lim, Tay Weixiong, and Chooi Zuhwa, *ERC-8183: Agentic Commerce* (created 2026-02-25; fetched 2026-10-31) — <https://eips.ethereum.org/EIPS/eip-8183>\n12. Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation* (2026-07-28) — <https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning>\n13. Agora Marketplace, *Agora API /v1/state Endpoint* (checked 2026-10-29) — <https://api.agoraproto.org/v1/state>\n14. Agora Marketplace, *Agora API /v1/stats Endpoint* (checked 2026-10-29) — <https://api.agoraproto.org/v1/stats>\n15. Blockscout (Base Sepolia), *Blockscout (Base Sepolia) API* (checked 2026-10-29) — <https://base-sepolia.blockscout.com/api/v2/addresses/0xCE783B527C83c4fFFF3D3565c0F3C3204be02B76/counters>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "s402",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "aliases": [],
   "analog": "A chain-specific profile of x402, the way a vendor extension profiles a base HTTP standard",
   "collisions": [],
   "discovery": {
    "mechanism": "HTTP 402 response carrying the x402 v2 PaymentRequired envelope, with an s402-specific extensions.s402 field distinguishing an s402-profile 402 from a plain x402 one",
    "path": "none — no /.well-known/s402.json was found; discovery is per-request via the 402 envelope, matching x402's model"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://github.com/s402-protocol/core",
     "claim": "s402-protocol, *s402-protocol/core GitHub repository*, created 2026-02-15; retired 2026-09-25; archived 2026-10-15; fetched 2026-10-31",
     "date": null,
     "quote": "\"description\": \"Retired 2026-09-25. Use x402 (https://x402.org).\" / \"created_at\": \"2026-02-15T08:33:24Z\", \"updated_at\": \"2026-10-15T21:09:38Z\", \"pushed_at\": \"2026-10-15T21:01:54Z\" / \"https://api.github.com/users/s402-protocol/received_events\", \"type\": \"Organization\", \"user_view_type\": \"public\", \"site_admin\": false }, \"html_url\": \"https://github.com/s402-protocol/core\", \"description\": / \"public\", \"site_admin\": false }, \"html_url\": \"https://github.com/s402-protocol/core\", \"description\": \"Retired 2026-09-25. Use x402 (https://x402.org).\", \"fork\": false, / \"full_name\": \"s402-protocol/core\" / of the work. For new work, use x402. !CI(https://github.com/s402-protocol/core/actions/workflows/ci.yml) !npm version(https://www.npmjs.com/package/s402) A profile of / 's402'; The reference Sui implementation of the schemes is available in @sweefi/sui. Wire Format / \"name\": \"Apache License 2.0\", \"spdx_id\": \"Apache-2.0\"",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://raw.githubusercontent.com/s402-protocol/core/main/docs/specification.md",
     "claim": "s402-protocol, *s402 Wire Format Specification (Version 1, Draft)*, March 2026; fetched 2026-10-31",
     "date": null,
     "quote": "This document defines the s402 wire format — the exact encoding, field definitions, validation rules, and error semantics for the s402 HTTP 402 payment protocol. It is the authoritative reference for any implementation in any language. / These header names are identical to x402 V1 for wire compatibility. The 402 document is x402 V2's, so an unmodified x402 V2 client reads it as well. / Both are x402 V2 envelopes carrying x402Version: 2. extensions.s402 is what marks the s402 profile, and its absence is not a reason to refuse a 402. / What distinguishes an s402-profile 402 from a plain x402 one is the presence of extensions.s402 - and a 402 without it is still payable by an s402 client. / When a payment payload exceeds header size limits (e.g., complex DeFi PTBs exceeding 128 KiB after base64), implementations MAY use body transport instead. - Content-Type: application/s402+json - Encoding: Raw JSON (no base64) / Passes every machine-readable conformance test vector shipped in the s402 npm package (196 vectors across 14 files as of v0.9.0) / The TypeScript reference implementation lives at [github.com/s402-protocol/core](https://github.com/s402-protocol/core). Machine-readable conformance test vectors ship in the npm package (196 vectors across 14 files). / # s402 Wire Format Specification Version: 1 · Status: Draft · Date: March 2026 / ----------- --------- payment-required Server → Client Base64-encoded x402 V2 PaymentRequired envelope x-payment Client → / ## 2. Protocol Overview s402 uses the HTTP 402 status code to negotiate payment / Three levels, and which level a field sits at is the whole design: - the envelope - x402's, byte-compatible with its decoder - each accepts[] entry - one offered scheme, x402's PaymentRequirements - extra and extensions.s402 - everything s402 adds, in the slots x402 leaves for it / For the prepaid scheme (v0.2 mode), providers sign each API response with a receipt header. This enables cryptographic fraud proofs.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://raw.githubusercontent.com/s402-protocol/core/main/README.md",
     "claim": "s402-protocol, *s402 Repository README*, retired September 2026; fetched 2026-10-31",
     "date": null,
     "quote": "s402 is a profile of x402 - types, HTTP encoding, scheme registry, and error handling for six payment schemes, all inside x402's PaymentRequired envelope. The protocol layer contains no chain-specific logic (see S7 invariant); the Sui binding lives in @sweefi/sui. The Sui reference implementation ships separately as @sweefi/sui. / the 167 published conformance vectors run against the code you just cloned - including 45 malformed headers that must be refused. / audited and tested against x402 @ 2cc7e9a6 (x402-foundation/x402, 2026-09-04; @x402/core 2.25.0). / work, use x402. !CI(https://github.com/s402-protocol/core/actions/workflows/ci.yml) !npm version(https://www.npmjs.com/package/s402) A profile of x402: the Sui binding, and / GMT source-age: 0 # s402 > [!IMPORTANT] > **s402 was retired in September 2026.** / s402 was retired in September 2026. It was an HTTP 402 payment protocol for agents on Sui, and x402 has since become / for the full reasoning. ## Why s402? HTTP 402 (\"Payment Required\") has been reserved / Apache-2.0 - see LICENSE for details. / Use s402 if you are charging for an HTTP endpoint that AI agents call, and either you settle on Sui, or you need a payment model x402 does not have - metered draw-down, streaming with rate enforcement, escrow with an arbiter, or pay-to-decrypt. / Without prepaid, per-call settlement costs $7.00 in gas for $1.00 of API usage (economically impossible). With prepaid, it costs $0.014 (economically trivial). / The Sui reference implementation ships separately as @sweefi/sui. Its Prepaid scheme uses Programmable Transaction Blocks to settle 1,000 API calls in 2 on-chain transactions instead of 1,000 / s402 is a wire format and a set of types with zero runtime dependencies. It does not move money, custody funds, or run a facilitator for you. Fiat and card rails are out of scope and will stay that way. / The protocol layer contains no chain-specific logic (see S7 invariant); the Sui binding lives in @sweefi/sui.",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://github.com/s402-protocol/core/releases/tag/v0.8.0",
     "claim": "s402-protocol, *Release v0.8.0 · s402-protocol/core*, 2026-09-25; archived Oct 15, 2026; fetched 2026-10-31",
     "date": null,
     "quote": "by the owner on Oct 15, 2026. It is now read-only. s402-protocol core Repository / Release v0.8.0 · s402-protocol/core · GitHub Skip to content {\"props\":{\"docsUrl\":\"https://docs.github.com/get-started/accessibility/keyboard-shortcuts\"}} {\"props\":{}}",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://www.rfc-editor.org/rfc/rfc9110.html",
     "claim": "IETF, *RFC 9110: HTTP Semantics*, IETF RFC",
     "date": null,
     "quote": "<meta content=\"Common,Latin\" name=\"scripts\">",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://www.linuxfoundation.org/press/linux-foundation-announces-operational-launch-of-x402-foundation-to-standardize-internet-native-payments-for-ai-agents-and-applications",
     "claim": "Linux Foundation, *Linux Foundation Announces Operational Launch of x402 Foundation to Standardize Internet-Native Payments for AI Agents and Applications*, July 14, 2026",
     "date": null,
     "quote": "SAN FRANCISCO, July 14, 2026 – The Linux Foundation , the nonprofit organization enabling mass innovation through open source, today announced the operational launch of the x402 Foundation",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://datatracker.ietf.org/doc/draft-httpauth-payment/",
     "claim": "IETF Datatracker, *draft-httpauth-payment — The \"Payment\" HTTP Authentication Scheme (IETF Datatracker)*, last updated 2026-09-09",
     "date": null,
     "quote": "IESG state I-D Exists",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://raw.githubusercontent.com/Roasbeef/blips/697ae354c205f1aacc450e72067c92a7f2467321/blip-0026.md",
     "claim": "Olaoluwa Osuntokun, Oliver Gugger, and Wilmer Paulino, *bLIP-0026: L402: The Lightning HTTP 402 Protocol*, created 2023-06-06",
     "date": null,
     "quote": "Status: Active",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/specification.md",
     "claim": "Google (google-agentic-commerce), *Agentic Payment Protocol (v0.2)*, fetched 2026-10-30",
     "date": null,
     "quote": "Agentic Payment Protocol (v0.2)",
     "ref": 9
    }
   ],
   "form": "http-header",
   "governance": "Single open-source project (s402-protocol on GitHub); no standards body, no foundation; explicitly a 'profile' of x402 rather than a competing standards effort",
   "group": "HTTP 402 family",
   "history": [
    {
     "date": "2026-09-06",
     "note": "verified against s402-protocol/core (README.md, docs/specification.md) and GitHub repo metadata; corrected discovery mechanism from a nonexistent /.well-known/s402.json to the x402-envelope extensions.s402 signal"
    },
    {
     "date": "2026-10-16",
     "note": "Repository archived by its owner"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "s402",
   "implementation": "prototype",
   "last_verified": "2026-11-08",
   "name": "s402",
   "native_status": "Archived repository (observed 2026-10-16)",
   "origin": {
    "date": "2026-02",
    "org": "s402-protocol (open-source project; Sui reference implementation ships separately as @sweefi/sui)"
   },
   "part_of": null,
   "parties": [
    "agent-site",
    "agent-payment"
   ],
   "phase": "deprecated",
   "probe": {
    "method": "GET",
    "on_absent": "A 402 without extensions.s402 in the decoded PaymentRequired object is a plain x402 (or other x402-compatible) response, not s402; per the spec, such a response is still payable by an s402-aware client, so absence of the s402 extension does not mean the endpoint rejects s402 clients, only that it isn't advertising s402-specific schemes.",
    "parse": "HTTP 402 with a payment-required header decoding (base64+JSON) to an x402 v2 PaymentRequired object whose extensions field contains an s402 key",
    "path": "{origin}/{paid-path}"
   },
   "question": "How can an agent pay a Sui-native resource using six payment schemes (including prepaid batching and escrow), while staying wire-compatible with plain x402 clients?",
   "scope": "payments",
   "spec_url": "https://raw.githubusercontent.com/s402-protocol/core/main/docs/specification.md",
   "step": "pay",
   "summary_md": "**s402** is an HTTP `402` payment protocol profile of x402 originated by the `s402-protocol` open-source project (with the Sui reference implementation shipped separately as `@sweefi/sui`) that defines the wire encoding, field definitions, validation rules, and error semantics for six payment schemes (`exact`, `upto`, `prepaid`, `stream`, `escrow`, and `unlock`) carried inside the x402 V2 `PaymentRequired` envelope. By default, s402 uses three lowercase HTTP headers matching x402 V1 header names: `payment-required` (Server to Client, carrying a base64-encoded x402 V2 `PaymentRequired` envelope with `x402Version: 2`), `x-payment` (Client to Server, carrying a base64-encoded Payment Payload JSON), and `payment-response` (Server to Client, carrying a base64-encoded Settlement Response JSON). An s402-profile `402` response is distinguished from a plain x402 response by `extensions.s402` (with `version` set to `\"2\"`), while payloads exceeding header size limits MAY use raw JSON body transport with `Content-Type: application/s402+json`. The s402 Wire Format Specification Version `1` (Status: Draft, dated March 2026) reports `196` conformance test vectors across `14` files in `s402` `v0.9.0` on npm (whereas `README.md` cites `167` published conformance vectors across the `14` files in `spec/vectors/`) and was audited against `x402-foundation/x402` commit `2cc7e9a6` (`2026-09-04`, `@x402/core` `2.25.0`). The project was retired on `2026-09-25` and the `s402-protocol/core` repository was archived read-only by its owner on `2026-10-15`, directing new work to x402.",
   "track": "community",
   "version": {
    "date": "2026-03",
    "label": "Wire Format Specification v1, Draft, dated March 2026 (repository has continued past this to align with x402 v2)"
   },
   "watch": [
    {
     "type": "github",
     "repo": "s402-protocol/core",
     "mode": "release"
    }
   ],
   "use_cases": [
    "accept-agent-payments",
    "agent-checkout"
   ],
   "audience": [
    "agent-builder",
    "platform"
   ],
   "pairs_with": [
    "x402",
    "mpp",
    "l402",
    "ap2"
   ],
   "prerequisites": [
    "x402"
   ],
   "hatnote_md": "Not to be confused with active [x402](/protocols/x402/), [Machine Payments Protocol (MPP)](/protocols/mpp/), or [L402](/protocols/l402/).",
   "tier": "spec_brief",
   "lifecycle_status": "retired",
   "wire_archetype": "payments_onchain",
   "status_notice_md": "**Status notice (Retired / Archived):** `s402` (the `extensions.s402` Sui profile of `x402`) was retired on `2026-09-25` and its repository archived read-only in October 2026; its archive notice directs new work to standard [x402](/protocols/x402/).",
   "superseded_by": [
    {
     "doc": "x402",
     "protocol_id": "x402",
     "url": "https://agenticweb.wiki/protocols/x402/"
    }
   ],
   "replaced_by": {
    "doc": "x402 v2 Sui payment scheme",
    "page": "/protocols/x402/"
   },
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-08",
   "v05_hatnote_html_md": "**Status notice (Retired / Archived):** `s402` (the `extensions.s402` Sui profile of `x402`) was retired on `2026-09-25` and its repository archived read-only in October 2026; its archive notice directs new work to standard [x402](/protocols/x402/). Not to be confused with active [x402](/protocols/x402/), [Machine Payments Protocol (MPP)](/protocols/mpp/), or [L402](/protocols/l402/). [1]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**s402** is an HTTP `402` payment protocol profile of x402 originated by the `s402-protocol` open-source project (with the Sui reference implementation shipped separately as `@sweefi/sui`) that defines the wire encoding, field definitions, validation rules, and error semantics for six payment schemes (`exact`, `upto`, `prepaid`, `stream`, `escrow`, and `unlock`) carried inside the x402 V2 `PaymentRequired` envelope. [2][3] By default, s402 uses three lowercase HTTP headers matching x402 V1 header names: `payment-required` (Server to Client, carrying a base64-encoded x402 V2 `PaymentRequired` envelope with `x402Version: 2`), `x-payment` (Client to Server, carrying a base64-encoded Payment Payload JSON), and `payment-response` (Server to Client, carrying a base64-encoded Settlement Response JSON). [2] An s402-profile `402` response is distinguished from a plain x402 response by `extensions.s402` (with `version` set to `\"2\"`), while payloads exceeding header size limits MAY use raw JSON body transport with `Content-Type: application/s402+json`. [2] The s402 Wire Format Specification Version `1` (Status: Draft, dated March 2026) reports `196` conformance test vectors across `14` files in `s402` `v0.9.0` on npm (whereas `README.md` cites `167` published conformance vectors across the `14` files in `spec/vectors/`) and was audited against `x402-foundation/x402` commit `2cc7e9a6` (`2026-09-04`, `@x402/core` `2.25.0`). [2][3] The project was retired on `2026-09-25` and the `s402-protocol/core` repository was archived read-only by its owner on `2026-10-15`, directing new work to x402. [1]",
   "v05_identity_sentence_md": "**s402** is an HTTP `402` payment protocol profile of x402 originated by the `s402-protocol` open-source project (with the Sui reference implementation shipped separately as `@sweefi/sui`) that defines the wire encoding, field definitions, validation rules, and error semantics for six payment schemes (`exact`, `upto`, `prepaid`, `stream`, `escrow`, and `unlock`) carried inside the x402 V2 `PaymentRequired` envelope. [2][3]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Pay](/category/pay/) (`pay`)"
    },
    {
     "label": "Form",
     "value_md": "HTTP header (`http-header`)"
    },
    {
     "label": "Originated by",
     "value_md": "`s402-protocol` GitHub organization (with Sui bindings attributed to `@sweefi/*` packages) [1][3]"
    },
    {
     "label": "Governed by",
     "value_md": "Single-repository open-source project (`s402-protocol/core`), retired September 2026 and archived read-only October 15, 2026 [1][3][4]"
    },
    {
     "label": "Track",
     "value_md": "Single-repository open specification (`s402-protocol/core`; retired September 2026 in favor of `x402`) [1][3]"
    },
    {
     "label": "Status",
     "value_md": "Archived repository (observed 2026-10-16) [1][2][4]"
    },
    {
     "label": "Version",
     "value_md": "Wire Format Specification v1 (Draft, March 2026); `s402` npm `0.9.0`; GitHub release `v0.8.0` [1][2][4]"
    },
    {
     "label": "Wire format",
     "value_md": "Unicode-safe base64-encoded JSON in HTTP headers (`payment-required`, `x-payment`, `payment-response`) or raw JSON (`application/s402+json`) inside an x402 v2 `PaymentRequired` envelope [2]"
    },
    {
     "label": "Specification",
     "value_md": "https://raw.githubusercontent.com/s402-protocol/core/main/docs/specification.md [2]"
    },
    {
     "label": "Found at",
     "value_md": "HTTP `402` status code; `payment-required`, `x-payment`, `payment-response`, and scheme-specific `x-stream-id` headers; `extensions.s402` envelope marker [2][3]"
    },
    {
     "label": "Licence",
     "value_md": "Apache License 2.0 (`Apache-2.0`) [1][3]"
    }
   ],
   "v05_problem_md": "In one-shot `exact` HTTP `402` payment flows, settling every API call individually on-chain incurs per-transaction gas overhead on high-frequency agent calls and lacks wire primitives for metered draw-down, per-second streaming, arbiter escrow, or threshold-encrypted content unlock. [3] s402 embeds six schemes (`exact`, `upto`, `prepaid`, `stream`, `escrow`, and `unlock`) inside x402 V2's `PaymentRequired` envelope by placing scheme-specific requirement sub-objects and facilitator settings inside each `accepts[]` entry's `extra` bag and envelope metadata under `extensions.s402`. [2] Because `exact` MUST be listed first whenever offered and unknown `accepts[]` schemes are skipped, an unmodified x402 client can pay an s402 server while s402 clients can use Sui Programmable Transaction Blocks (`@sweefi/sui`), direct settlement, AP2 mandate requirements, and `X-S402-Receipt` signed usage receipts. [2][3] The `s402` core package defines chain-agnostic wire types, HTTP encoding, validation, and key stripping with zero runtime dependencies; on-chain settlement lives in `@sweefi/sui`, and fiat and card rails are out of scope. [3]",
   "v05_mechanism_delta_md": "s402 embeds six schemes (`exact`, `upto`, `prepaid`, `stream`, `escrow`, and `unlock`) inside x402 V2's `PaymentRequired` envelope by placing scheme-specific requirement sub-objects and facilitator settings inside each `accepts[]` entry's `extra` bag and envelope metadata under `extensions.s402`. [2] Because `exact` MUST be listed first whenever offered and unknown `accepts[]` schemes are skipped, an unmodified x402 client can pay an s402 server while s402 clients can use Sui Programmable Transaction Blocks (`@sweefi/sui`), direct settlement, AP2 mandate requirements, and `X-S402-Receipt` signed usage receipts. [2][3]",
   "v05_scope_boundary_md": "The `s402` core package defines chain-agnostic wire types, HTTP encoding, validation, and key stripping with zero runtime dependencies; on-chain settlement lives in `@sweefi/sui`, and fiat and card rails are out of scope. [3]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "HTTP 402 Payment Required (RFC 9110 §15.5.3)",
      "spec_or_rfc": "RFC 9110 §15.5.3",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "s402 returns HTTP 402 with an x402 v2 PaymentRequired document in the payment-required header, and the client retries with a payment payload in x-payment, with the server answer on payment-response. [2][5]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "x402",
      "target_name": "x402",
      "relation_type": "superseded_by",
      "relation_label": "Superseded by",
      "delta_md": "s402 reused x402 v2's PaymentRequired envelope and the headers payment-required, x-payment, and payment-response, added the extensions.s402 key and schemes prepaid, stream, escrow, and unlock, and was retired on 2026-09-25 and archived on 2026-10-15 with a pointer to x402. [2][6]"
     },
     {
      "target_id": "mpp",
      "target_name": "Machine Payments Protocol (MPP)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "Prior to retiring in September 2026 (`2026-09-25`, with new work directed to standard `x402`), `s402` paid with a signed Sui transaction (including Programmable Transaction Blocks for `prepaid`) inside the `x402` `payment-required` envelope, whereas MPP pays with `Authorization: Payment` answering `WWW-Authenticate: Payment`. [1][7]"
     },
     {
      "target_id": "l402",
      "target_name": "L402",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "Prior to retiring in September 2026 (`2026-09-25`, with new work directed to standard `x402`), `s402`'s credential was a signed Sui transaction for schemes `exact`, `upto`, `prepaid`, `stream`, `escrow`, or `unlock`, whereas L402's credential is a macaroon and a BOLT 11 preimage in `Authorization: L402`. [1][8]"
     },
     {
      "target_id": "ap2",
      "target_name": "Agent Payments Protocol (AP2)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Prior to retiring in September 2026 (`2026-09-25`), `s402` marked its profile with the `extensions.s402` key on the `x402` v2 `402` envelope, and its payment bytes remained a Sui transaction rather than an AP2 SD-JWT Checkout Mandate. [1][9]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Pay protocols](/category/pay/)** — Category index for `pay` standards."
    }
   ],
   "v05_compiled_md": "---\nid: s402\ntitle: \"s402\"\ntier: spec_brief\nlifecycle_status: retired\ncategory: pay\nform: http-header\nwire_archetype: payments_onchain\nspec_url: https://raw.githubusercontent.com/s402-protocol/core/main/docs/specification.md\nlast_checked: 2026-11-08\n---\n\n# s402\n\n**Category:** [Pay](/category/pay/) (`pay`) · **Form:** HTTP header (`http-header`) · **Last checked:** 2026-11-08\n\n> ***Status notice (Retired / Archived):** `s402` (the `extensions.s402` Sui profile of `x402`) was retired on `2026-09-25` and its repository archived read-only in October 2026; its archive notice directs new work to standard [x402](/protocols/x402/). Not to be confused with active [x402](/protocols/x402/), [Machine Payments Protocol (MPP)](/protocols/mpp/), or [L402](/protocols/l402/). [1]*\n\n**s402** is an HTTP `402` payment protocol profile of x402 originated by the `s402-protocol` open-source project (with the Sui reference implementation shipped separately as `@sweefi/sui`) that defines the wire encoding, field definitions, validation rules, and error semantics for six payment schemes (`exact`, `upto`, `prepaid`, `stream`, `escrow`, and `unlock`) carried inside the x402 V2 `PaymentRequired` envelope. [2][3] By default, s402 uses three lowercase HTTP headers matching x402 V1 header names: `payment-required` (Server to Client, carrying a base64-encoded x402 V2 `PaymentRequired` envelope with `x402Version: 2`), `x-payment` (Client to Server, carrying a base64-encoded Payment Payload JSON), and `payment-response` (Server to Client, carrying a base64-encoded Settlement Response JSON). [2] An s402-profile `402` response is distinguished from a plain x402 response by `extensions.s402` (with `version` set to `\"2\"`), while payloads exceeding header size limits MAY use raw JSON body transport with `Content-Type: application/s402+json`. [2] The s402 Wire Format Specification Version `1` (Status: Draft, dated March 2026) reports `196` conformance test vectors across `14` files in `s402` `v0.9.0` on npm (whereas `README.md` cites `167` published conformance vectors across the `14` files in `spec/vectors/`) and was audited against `x402-foundation/x402` commit `2cc7e9a6` (`2026-09-04`, `@x402/core` `2.25.0`). [2][3] The project was retired on `2026-09-25` and the `s402-protocol/core` repository was archived read-only by its owner on `2026-10-15`, directing new work to x402. [1]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Pay](/category/pay/) (`pay`) |\n| **Form** | HTTP header (`http-header`) |\n| **Originated by** | `s402-protocol` GitHub organization (with Sui bindings attributed to `@sweefi/*` packages) [1][3] |\n| **Governed by** | Single-repository open-source project (`s402-protocol/core`), retired September 2026 and archived read-only October 15, 2026 [1][3][4] |\n| **Track** | Single-repository open specification (`s402-protocol/core`; retired September 2026 in favor of `x402`) [1][3] |\n| **Status** | Archived repository (observed 2026-10-16) [1][2][4] |\n| **Version** | Wire Format Specification v1 (Draft, March 2026); `s402` npm `0.9.0`; GitHub release `v0.8.0` [1][2][4] |\n| **Wire format** | Unicode-safe base64-encoded JSON in HTTP headers (`payment-required`, `x-payment`, `payment-response`) or raw JSON (`application/s402+json`) inside an x402 v2 `PaymentRequired` envelope [2] |\n| **Specification** | https://raw.githubusercontent.com/s402-protocol/core/main/docs/specification.md [2] |\n| **Found at** | HTTP `402` status code; `payment-required`, `x-payment`, `payment-response`, and scheme-specific `x-stream-id` headers; `extensions.s402` envelope marker [2][3] |\n| **Licence** | Apache License 2.0 (`Apache-2.0`) [1][3] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nIn one-shot `exact` HTTP `402` payment flows, settling every API call individually on-chain incurs per-transaction gas overhead on high-frequency agent calls and lacks wire primitives for metered draw-down, per-second streaming, arbiter escrow, or threshold-encrypted content unlock. [3] s402 embeds six schemes (`exact`, `upto`, `prepaid`, `stream`, `escrow`, and `unlock`) inside x402 V2's `PaymentRequired` envelope by placing scheme-specific requirement sub-objects and facilitator settings inside each `accepts[]` entry's `extra` bag and envelope metadata under `extensions.s402`. [2] Because `exact` MUST be listed first whenever offered and unknown `accepts[]` schemes are skipped, an unmodified x402 client can pay an s402 server while s402 clients can use Sui Programmable Transaction Blocks (`@sweefi/sui`), direct settlement, AP2 mandate requirements, and `X-S402-Receipt` signed usage receipts. [2][3] The `s402` core package defines chain-agnostic wire types, HTTP encoding, validation, and key stripping with zero runtime dependencies; on-chain settlement lives in `@sweefi/sui`, and fiat and card rails are out of scope. [3]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **HTTP 402 Payment Required (RFC 9110 §15.5.3)** | `RFC 9110 §15.5.3` | Profiles classic standard | s402 returns HTTP 402 with an x402 v2 PaymentRequired document in the payment-required header, and the client retries with a payment payload in x-payment, with the server answer on payment-response. [2][5] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[x402](/protocols/x402/)** | Superseded by | s402 reused x402 v2's PaymentRequired envelope and the headers payment-required, x-payment, and payment-response, added the extensions.s402 key and schemes prepaid, stream, escrow, and unlock, and was retired on 2026-09-25 and archived on 2026-10-15 with a pointer to x402. [2][6] |\n| **[Machine Payments Protocol (MPP)](/protocols/mpp/)** | Peer alternative | Prior to retiring in September 2026 (`2026-09-25`, with new work directed to standard `x402`), `s402` paid with a signed Sui transaction (including Programmable Transaction Blocks for `prepaid`) inside the `x402` `payment-required` envelope, whereas MPP pays with `Authorization: Payment` answering `WWW-Authenticate: Payment`. [1][7] |\n| **[L402](/protocols/l402/)** | Peer alternative | Prior to retiring in September 2026 (`2026-09-25`, with new work directed to standard `x402`), `s402`'s credential was a signed Sui transaction for schemes `exact`, `upto`, `prepaid`, `stream`, `escrow`, or `unlock`, whereas L402's credential is a macaroon and a BOLT 11 preimage in `Authorization: L402`. [1][8] |\n| **[Agent Payments Protocol (AP2)](/protocols/ap2/)** | Complements | Prior to retiring in September 2026 (`2026-09-25`), `s402` marked its profile with the `extensions.s402` key on the `x402` v2 `402` envelope, and its payment bytes remained a Sui transaction rather than an AP2 SD-JWT Checkout Mandate. [1][9] |\n\n---\n\n## See also\n\n- **Category:** [Pay protocols](/category/pay/)\n\n---\n\n## References\n\n1. s402-protocol, *s402-protocol/core GitHub repository* (created 2026-02-15; retired 2026-09-25; archived 2026-10-15; fetched 2026-10-31) — <https://github.com/s402-protocol/core>\n2. s402-protocol, *s402 Wire Format Specification (Version 1, Draft)* (March 2026; fetched 2026-10-31) — <https://raw.githubusercontent.com/s402-protocol/core/main/docs/specification.md>\n3. s402-protocol, *s402 Repository README* (retired September 2026; fetched 2026-10-31) — <https://raw.githubusercontent.com/s402-protocol/core/main/README.md>\n4. s402-protocol, *Release v0.8.0 · s402-protocol/core* (2026-09-25; archived Oct 15, 2026; fetched 2026-10-31) — <https://github.com/s402-protocol/core/releases/tag/v0.8.0>\n5. IETF, *RFC 9110: HTTP Semantics* (IETF RFC) — <https://www.rfc-editor.org/rfc/rfc9110.html>\n6. Linux Foundation, *Linux Foundation Announces Operational Launch of x402 Foundation to Standardize Internet-Native Payments for AI Agents and Applications* (July 14, 2026) — <https://www.linuxfoundation.org/press/linux-foundation-announces-operational-launch-of-x402-foundation-to-standardize-internet-native-payments-for-ai-agents-and-applications>\n7. IETF Datatracker, *draft-httpauth-payment — The \"Payment\" HTTP Authentication Scheme (IETF Datatracker)* (last updated 2026-09-09) — <https://datatracker.ietf.org/doc/draft-httpauth-payment/>\n8. Olaoluwa Osuntokun, Oliver Gugger, and Wilmer Paulino, *bLIP-0026: L402: The Lightning HTTP 402 Protocol* (created 2023-06-06) — <https://raw.githubusercontent.com/Roasbeef/blips/697ae354c205f1aacc450e72067c92a7f2467321/blip-0026.md>\n9. Google (google-agentic-commerce), *Agentic Payment Protocol (v0.2)* (fetched 2026-10-30) — <https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/specification.md>\n"
  },
  {
   "acronym": "AAP",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "aliases": [],
   "analog": "affiliate/referral tracking, reinvented for agents that don't click links or carry cookies",
   "collisions": [
    "Agent Authorization Profile (also abbreviated AAP, IETF OAuth draft, unrelated)",
    "AAMP (Agentic Advertising Management Protocols, unrelated, different acronym but easily confused)"
   ],
   "discovery": {
    "mechanism": "none",
    "path": null
   },
   "dispute": {
    "claims": [
     "Vendor calls it 'the open standard'; the spec's own text says trust is centralised in one company (Rako).",
     "Acronym collision with the existing 'aap' record (Agent Authorization Profile, IETF) is a real risk of confusion on this site."
    ],
    "summary": "AAP calls itself 'the open standard' and publishes its spec text under Apache-2.0, but by its own README it has a 'centralised trust model': Rako alone issues and signs the AAP Code, operates the offer registry, and administers commission settlement. This is architecturally closer to a single-vendor affiliate network with a published API than a neutral standard multiple independent operators can run -- readers should weigh 'open spec, closed operation' when comparing it to IETF/W3C-track account specs. It also acronym-collides with both the pre-existing site record 'aap' (Agent Authorization Profile, an unrelated IETF OAuth draft) and, loosely, with IAB Tech Lab's AAMP."
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://raw.githubusercontent.com/rakohq/aap-spec/main/spec/v1/README.md",
     "claim": "Rako (RAKO HQ LTD), *Agent Attribution Protocol (AAP) v1 Specification*, checked 2026-10-31",
     "date": null,
     "quote": "The Agent Attribution Protocol (AAP) is an open specification for attributing AI agent-driven commerce. / The Agent Attribution Protocol (AAP) is an open specification for attributing AI agent-driven commerce. It defines how: 1. Merchants publish offers into a structured registry 2. Agents discover, compare, and recommend those offers / Attribution is recorded cryptographically at the moment of recommendation 4. Conversions are matched to recommendations 5. Commission is calculated and settled / AAP returns offers with signed AAP Codes Session token minted / Current version: v1.0.0 --- *AAP Specification v1.0.0 - Published 2 April 2026* / AAP is an open spec with a centralised trust model. The specification is public - anyone can read it, understand it, build for it. The issuance, verification, and settlement are operated by Rako. / One session, one transaction. A session tracks a single user intent. - 24-hour expiry. No checkout within 24 hours = session expires. - Non-transferable. / Specification v1.0.0 - Published 2 April 2026* *RAKO HQ LTD (Company No. 17132612) - / products to users on behalf of their builders. ### Rako (Protocol Authority) The entity / ### Rako (Protocol Authority) The entity / bumps. Current version: v1.0.0 --- *AAP Specification v1.0.0 - Published 2 April 2026* *RAKO / agents Python SDK agent-attribution-protocol Python agents, LangChain, CrewAI REST API api.rako.sh Any language, any / Agent calls recommend() → attribution event recorded / Binary attribution. Through AAP or nothing. No partial credit. / Calculated based on merchant-defined terms and the applicable network fee schedule; examples in this spec use a 20% network-fee model for illustration unless otherwise agreed.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://rako.sh/aap",
     "claim": "Rako (RAKO HQ LTD), *Rako: Agent Attribution Protocol Overview*, checked 2026-10-31",
     "date": null,
     "quote": "Example: recommendation.event / agent recommendations, attributing conversions, and distributing commissions. Rako https://rako.sh/og-image.png https://rako.sh/aap summary_large_image Agent Attribution Protocol",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://github.com/rakohq/aap-spec",
     "claim": "Rako (RAKO HQ LTD), *rakohq/aap-spec: Agent Attribution Protocol Specification Repository*, checked 2026-10-31",
     "date": null,
     "quote": "LTD (Company No. 17132612) - \\u003ca href=\\\"https://rako.sh\\\" / \"url\": \"https://api.github.com/users/rakohq\", / rako.sh About Agent Attribution Protocol canonical public specification (Apache 2.0) Resources Readme Apache-2.0 license / \"full_name\": \"rakohq/aap-spec\" / (Apache 2.0) - rakohq/aap-spec 1401488693436528 app-id=1477376905, app-argument=https://github.com/rakohq/aap-spec / code required { \"mcpServers\": { \"aap\": { \"command\": \"bunx\", \"args\": [\"@rakohq/mcp\"], \"env\": { \"AAP_API_KEY\":",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://rako.sh/docs",
     "claim": "Rako (RAKO HQ LTD), *Rako Developer Documentation*, checked 2026-10-31",
     "date": null,
     "quote": "record recommendations, and test attribution context in three API calls. Rako https://rako.sh/og-image.png https://rako.sh/docs summary_large_image / mcp-config.json Copy { \"mcpServers\": { \"aap\": { \"command\": \"bunx\", \"args\": [\"@rakohq/mcp\"], \"env\": { \"AAP_API_KEY\":",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://raw.githubusercontent.com/rakohq/aap-spec/main/README.md",
     "claim": "Rako (RAKO HQ LTD), *Agent Attribution Protocol (AAP) Repository README*, checked 2026-10-31",
     "date": null,
     "quote": "\"mcpServers\": { \"aap\": { \"command\": \"bunx\", \"args\": [\"@rakohq/mcp\"], \"env\": { \"AAP_API_KEY\": \"your-key\" } } / ## Licence This specification is published under the Apache 2.0 licence. / Affiliate marketing is a $17B+ industry built on cookies, tracked links, and last-click attribution. AI agents don't click links, don't carry cookies, and don't browse websites. / Trademark notice: \"Agent Attribution Protocol\" is the subject of UK trademark application UK00004367937.",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://www.rfc-editor.org/rfc/rfc7519.html",
     "claim": "M. Jones, J. Bradley, and N. Sakimura, *RFC 7519: JSON Web Token (JWT)*, May 2015",
     "date": null,
     "quote": "JSON Web Token (JWT) is a compact, URL-safe means of representing",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Current : the current protocol version, which is ready for use and may continue to receive backwards compatible changes.",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/specification.md",
     "claim": "Google (google-agentic-commerce), *Agentic Payment Protocol (v0.2)*, fetched 2026-10-30",
     "date": null,
     "quote": "Agentic Payment Protocol (v0.2)",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://github.com/agentic-commerce-protocol/agentic-commerce-protocol/blob/main/README.md",
     "claim": "OpenAI and Stripe, *Agentic Commerce Protocol README*, checked 2026-10-28",
     "date": null,
     "quote": "The specification is maintained by OpenAI and Stripe and is currently in beta.",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://ucp.dev/documentation/announcements/",
     "claim": "Universal Commerce Protocol, *Announcements*, fetched 2026-10-30",
     "date": null,
     "quote": "August 25, 2026: Protocol Release v2026-08-25",
     "ref": 10
    }
   ],
   "form": "endpoint",
   "governance": "Single vendor (Rako); the spec text is published under Apache-2.0, but issuance, verification and settlement are centrally operated by Rako, which the spec calls the 'Protocol Authority'",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "new record: found via search for post-hoc agent commerce attribution specs; verified against rako.sh/aap, rako.sh/docs, and github.com/rakohq/aap-spec (README, spec/v1/README.md); flagged as single-vendor 'open spec, closed operation' and acronym collision"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "agent-attribution-protocol",
   "implementation": "shipping",
   "last_verified": "2026-11-12",
   "name": "Agent Attribution Protocol",
   "native_status": "\"The open standard for AI agent affiliate attribution\" (vendor's own description); v1.0 spec published, centrally operated",
   "origin": {
    "date": "2026-04-02",
    "org": "Rako (RAKO HQ LTD, UK company no. 17132612)"
   },
   "part_of": null,
   "parties": [
    "agent-payment"
   ],
   "phase": "stable",
   "probe": {
    "method": "POST",
    "on_absent": "401/403 without a key is expected and does not indicate absence; a connection failure or 404 would indicate the service is down or the endpoint has moved.",
    "parse": "A successful response with a signed 'AAP Code' and an 'attribution_id'/'recommendation_id' confirms a live Rako-operated AAP session; requires a valid API key, so this probe can confirm the service exists but cannot enumerate third-party agents using it without their cooperation.",
    "path": "https://api.rako.sh/v1/recommend"
   },
   "question": "When an AI agent recommends a product and a sale happens later, on another device or session, can anyone prove which agent (and which recommendation) actually drove it?",
   "scope": "commerce",
   "spec_url": "https://github.com/rakohq/aap-spec",
   "step": "account",
   "summary_md": "**Agent Attribution Protocol** (`AAP`) v1.0 is an open specification from Rako (RAKO HQ LTD) for attributing AI agent-driven commerce. Merchants publish offers, agents discover and recommend them, and attribution is recorded cryptographically at the moment of recommendation. Conversions are matched to those recommendations before commission is calculated and settled. The wire surfaces are search, `recommend()`, and `checkout()` on the Rako service, plus the recommendation event the agent posts when it recommends an offer. Each returned offer carries a Rako-signed **AAP Code**, and a session token is minted at discovery. Semantic versioning applies; v1 is the initial release. The spec labels the current release **v1.0.0**, published 2 April 2026. AAP is an open spec with a centralized trust model: issuance, verification, and settlement are operated by Rako. Sessions are bounded to one transaction, expire if checkout does not happen within 24 hours, and are non-transferable.",
   "track": "single-vendor",
   "version": {
    "date": "2026-04-02",
    "label": "v1.0"
   },
   "watch": [
    {
     "type": "github",
     "repo": "rakohq/aap-spec",
     "mode": "release"
    }
   ],
   "use_cases": [
    "attribute-agent-traffic",
    "agent-checkout",
    "audit-agent-actions"
   ],
   "audience": [
    "agent-builder",
    "platform"
   ],
   "pairs_with": [
    "mcp",
    "ap2",
    "agentic-commerce-protocol",
    "ucp"
   ],
   "prerequisites": [],
   "hatnote_md": "This page is about the Agent Attribution Protocol (AAP) from Rako for attributing AI agent-driven commerce. For unrelated authorization specifications that share the acronym AAP, see [Agent Authorization Profile](/protocols/aap/) and [OpenA2A Agent Authorization Protocol](/protocols/opena2a-aap/).",
   "tier": "spec_brief",
   "lifecycle_status": "published_standard",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "This page is about the Agent Attribution Protocol (AAP) from Rako for attributing AI agent-driven commerce. For unrelated authorization specifications that share the acronym AAP, see [Agent Authorization Profile](/protocols/aap/) and [OpenA2A Agent Authorization Protocol](/protocols/opena2a-aap/). [1]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Agent Attribution Protocol** (`AAP`) v1.0 is an open specification from Rako (RAKO HQ LTD) for attributing AI agent-driven commerce. Merchants publish offers, agents discover and recommend them, and attribution is recorded cryptographically at the moment of recommendation. Conversions are matched to those recommendations before commission is calculated and settled. [1] The wire surfaces are search, `recommend()`, and `checkout()` on the Rako service, plus the recommendation event the agent posts when it recommends an offer. Each returned offer carries a Rako-signed **AAP Code**, and a session token is minted at discovery. [1][2] Semantic versioning applies; v1 is the initial release. The spec labels the current release **v1.0.0**, published 2 April 2026. AAP is an open spec with a centralized trust model: issuance, verification, and settlement are operated by Rako. Sessions are bounded to one transaction, expire if checkout does not happen within 24 hours, and are non-transferable. [1]",
   "v05_identity_sentence_md": "**Agent Attribution Protocol** (`AAP`) v1.0 is an open specification from Rako (RAKO HQ LTD) for attributing AI agent-driven commerce. Merchants publish offers, agents discover and recommend them, and attribution is recorded cryptographically at the moment of recommendation. Conversions are matched to those recommendations before commission is calculated and settled. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Account](/category/account/) (`account`)"
    },
    {
     "label": "Form",
     "value_md": "Endpoint (`endpoint`)"
    },
    {
     "label": "Originated by",
     "value_md": "RAKO HQ LTD (`rakohq`, UK Company No. 17132612) [1][3]"
    },
    {
     "label": "Governed by",
     "value_md": "RAKO HQ LTD as sole centralized Protocol Authority (Apache-2.0 specification license) [1][3]"
    },
    {
     "label": "Track",
     "value_md": "Single-vendor public specification (`rakohq/aap-spec`; operated by RAKO HQ LTD as Protocol Authority) [1][3]"
    },
    {
     "label": "Status",
     "value_md": "\"The open standard for AI agent affiliate attribution\" (vendor's own description); v1.0 spec published, centrally operated [1][3]"
    },
    {
     "label": "Version",
     "value_md": "`v1.0.0` (published 2026-04-02) [1]"
    },
    {
     "label": "Wire format",
     "value_md": "JSON over HTTPS REST API (`api.rako.sh`) and Model Context Protocol (MCP) tool calls [1][2][4]"
    },
    {
     "label": "Specification",
     "value_md": "https://github.com/rakohq/aap-spec [3]"
    },
    {
     "label": "Found at",
     "value_md": "No `.well-known` discovery; explicit API key (`AAP_API_KEY`) via SDK or `@rakohq/mcp` [3][4][5]"
    },
    {
     "label": "Licence",
     "value_md": "Apache License 2.0 (`rakohq/aap-spec`) [3][5]"
    }
   ],
   "v05_problem_md": "Affiliate infrastructure assumes cookies, tracked links, and browser sessions. AI agents do not click affiliate links, do not carry cookies, and do not browse websites, so the familiar last-click attribution chain breaks when software does the shopping. [5] AAP records a recommendation when the agent calls `recommend()`, matching conversions back through the same session rather than a click path. Attribution is binary: credit flows through AAP or not at all. The merchant later reports conversions through the conversions API, AAP matches each conversion to the originating recommendation, and the builder is paid after validation. [1] The public specification does not define a separate discovery mechanism beyond integrating the Rako-operated registry and API. Commission examples in the text are illustrative unless merchants agree otherwise. Trademark status of the name **Agent Attribution Protocol** is flagged separately on the issuer site. [1][5]",
   "v05_mechanism_delta_md": "AAP records a recommendation when the agent calls `recommend()`, matching conversions back through the same session rather than a click path. Attribution is binary: credit flows through AAP or not at all. The merchant later reports conversions through the conversions API, AAP matches each conversion to the originating recommendation, and the builder is paid after validation. [1]",
   "v05_scope_boundary_md": "The public specification does not define a separate discovery mechanism beyond integrating the Rako-operated registry and API. Commission examples in the text are illustrative unless merchants agree otherwise. Trademark status of the name **Agent Attribution Protocol** is flagged separately on the issuer site. [1][5]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "JSON Web Token (JWT, RFC 7519)",
      "spec_or_rfc": "RFC 7519",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "An agent calls a search endpoint, receives offers carrying a Rako-signed AAP Code, calls recommend() to log the attribution event, and calls checkout() to route the user to merchant checkout while the merchant reports the conversion via the conversions API for Rako to match. [3][6]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "The protocol offers an MCP tool server for search, recommend(), and checkout() routing, while the merchant reports conversions via the conversions API so Rako can match them to the earlier recommend() event. [3][7]"
     },
     {
      "target_id": "ap2",
      "target_name": "Agent Payments Protocol (AP2)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "AP2 authorizes a payment with checkout and payment mandates, while AAP uses a Rako-signed AAP Code on recommend() and checkout() routing so merchant conversions reported via the conversions API can be matched. [3][8]"
     },
     {
      "target_id": "agentic-commerce-protocol",
      "target_name": "Agentic Commerce Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "The Agentic Commerce Protocol completes the merchant order, while AAP uses checkout() to route the user to checkout and matches merchant conversions reported via the conversions API back to the Rako-signed AAP Code from recommend(). [3][9]"
     },
     {
      "target_id": "ucp",
      "target_name": "Universal Commerce Protocol (UCP)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "UCP is the merchant commerce surface, and the Rako-signed AAP Code returned by search is the attribution token attached when recommend() records an offer from that surface. [3][10]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Account protocols](/category/account/)** — Category index for `account` standards."
    }
   ],
   "v05_compiled_md": "---\nid: agent-attribution-protocol\ntitle: \"Agent Attribution Protocol\"\ntier: spec_brief\nlifecycle_status: published_standard\ncategory: account\nform: endpoint\nwire_archetype: identity_auth_crypto\nspec_url: https://github.com/rakohq/aap-spec\nlast_checked: 2026-11-12\n---\n\n# Agent Attribution Protocol\n\n**Category:** [Account](/category/account/) (`account`) · **Form:** Endpoint (`endpoint`) · **Last checked:** 2026-11-12\n\n> *This page is about the Agent Attribution Protocol (AAP) from Rako for attributing AI agent-driven commerce. For unrelated authorization specifications that share the acronym AAP, see [Agent Authorization Profile](/protocols/aap/) and [OpenA2A Agent Authorization Protocol](/protocols/opena2a-aap/). [1]*\n\n**Agent Attribution Protocol** (`AAP`) v1.0 is an open specification from Rako (RAKO HQ LTD) for attributing AI agent-driven commerce. Merchants publish offers, agents discover and recommend them, and attribution is recorded cryptographically at the moment of recommendation. Conversions are matched to those recommendations before commission is calculated and settled. [1] The wire surfaces are search, `recommend()`, and `checkout()` on the Rako service, plus the recommendation event the agent posts when it recommends an offer. Each returned offer carries a Rako-signed **AAP Code**, and a session token is minted at discovery. [1][2] Semantic versioning applies; v1 is the initial release. The spec labels the current release **v1.0.0**, published 2 April 2026. AAP is an open spec with a centralized trust model: issuance, verification, and settlement are operated by Rako. Sessions are bounded to one transaction, expire if checkout does not happen within 24 hours, and are non-transferable. [1]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Account](/category/account/) (`account`) |\n| **Form** | Endpoint (`endpoint`) |\n| **Originated by** | RAKO HQ LTD (`rakohq`, UK Company No. 17132612) [1][3] |\n| **Governed by** | RAKO HQ LTD as sole centralized Protocol Authority (Apache-2.0 specification license) [1][3] |\n| **Track** | Single-vendor public specification (`rakohq/aap-spec`; operated by RAKO HQ LTD as Protocol Authority) [1][3] |\n| **Status** | \"The open standard for AI agent affiliate attribution\" (vendor's own description); v1.0 spec published, centrally operated [1][3] |\n| **Version** | `v1.0.0` (published 2026-04-02) [1] |\n| **Wire format** | JSON over HTTPS REST API (`api.rako.sh`) and Model Context Protocol (MCP) tool calls [1][2][4] |\n| **Specification** | https://github.com/rakohq/aap-spec [3] |\n| **Found at** | No `.well-known` discovery; explicit API key (`AAP_API_KEY`) via SDK or `@rakohq/mcp` [3][4][5] |\n| **Licence** | Apache License 2.0 (`rakohq/aap-spec`) [3][5] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nAffiliate infrastructure assumes cookies, tracked links, and browser sessions. AI agents do not click affiliate links, do not carry cookies, and do not browse websites, so the familiar last-click attribution chain breaks when software does the shopping. [5] AAP records a recommendation when the agent calls `recommend()`, matching conversions back through the same session rather than a click path. Attribution is binary: credit flows through AAP or not at all. The merchant later reports conversions through the conversions API, AAP matches each conversion to the originating recommendation, and the builder is paid after validation. [1] The public specification does not define a separate discovery mechanism beyond integrating the Rako-operated registry and API. Commission examples in the text are illustrative unless merchants agree otherwise. Trademark status of the name **Agent Attribution Protocol** is flagged separately on the issuer site. [1][5]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **JSON Web Token (JWT, RFC 7519)** | `RFC 7519` | Analogous to classic standard | An agent calls a search endpoint, receives offers carrying a Rako-signed AAP Code, calls recommend() to log the attribution event, and calls checkout() to route the user to merchant checkout while the merchant reports the conversion via the conversions API for Rako to match. [3][6] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | The protocol offers an MCP tool server for search, recommend(), and checkout() routing, while the merchant reports conversions via the conversions API so Rako can match them to the earlier recommend() event. [3][7] |\n| **[Agent Payments Protocol (AP2)](/protocols/ap2/)** | Complements | AP2 authorizes a payment with checkout and payment mandates, while AAP uses a Rako-signed AAP Code on recommend() and checkout() routing so merchant conversions reported via the conversions API can be matched. [3][8] |\n| **[Agentic Commerce Protocol](/protocols/agentic-commerce-protocol/)** | Complements | The Agentic Commerce Protocol completes the merchant order, while AAP uses checkout() to route the user to checkout and matches merchant conversions reported via the conversions API back to the Rako-signed AAP Code from recommend(). [3][9] |\n| **[Universal Commerce Protocol (UCP)](/protocols/ucp/)** | Complements | UCP is the merchant commerce surface, and the Rako-signed AAP Code returned by search is the attribution token attached when recommend() records an offer from that surface. [3][10] |\n\n---\n\n## See also\n\n- **Category:** [Account protocols](/category/account/)\n\n---\n\n## References\n\n1. Rako (RAKO HQ LTD), *Agent Attribution Protocol (AAP) v1 Specification* (checked 2026-10-31) — <https://raw.githubusercontent.com/rakohq/aap-spec/main/spec/v1/README.md>\n2. Rako (RAKO HQ LTD), *Rako: Agent Attribution Protocol Overview* (checked 2026-10-31) — <https://rako.sh/aap>\n3. Rako (RAKO HQ LTD), *rakohq/aap-spec: Agent Attribution Protocol Specification Repository* (checked 2026-10-31) — <https://github.com/rakohq/aap-spec>\n4. Rako (RAKO HQ LTD), *Rako Developer Documentation* (checked 2026-10-31) — <https://rako.sh/docs>\n5. Rako (RAKO HQ LTD), *Agent Attribution Protocol (AAP) Repository README* (checked 2026-10-31) — <https://raw.githubusercontent.com/rakohq/aap-spec/main/README.md>\n6. M. Jones, J. Bradley, and N. Sakimura, *RFC 7519: JSON Web Token (JWT)* (May 2015) — <https://www.rfc-editor.org/rfc/rfc7519.html>\n7. Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation* (2026-07-28) — <https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning>\n8. Google (google-agentic-commerce), *Agentic Payment Protocol (v0.2)* (fetched 2026-10-30) — <https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/specification.md>\n9. OpenAI and Stripe, *Agentic Commerce Protocol README* (checked 2026-10-28) — <https://github.com/agentic-commerce-protocol/agentic-commerce-protocol/blob/main/README.md>\n10. Universal Commerce Protocol, *Announcements* (fetched 2026-10-30) — <https://ucp.dev/documentation/announcements/>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "AAT",
   "adoption": {
    "level": "observed",
    "by": "CyberSecAI aat-mcp, Agent Console / Testigo, Ujex (ujex-compliance-callback), Mindburn Labs (helm-ai-kernel), CyberSecAI aat-verify, Agent Console aat-verify.mjs, and Last Record (kbipul/last-record)",
    "probe_run": null
   },
   "aliases": [
    "draft-sharif-agent-audit-trail"
   ],
   "analog": "a standardized syslog/audit-log format, but hash-chained like a blockchain for tamper evidence",
   "collisions": [],
   "discovery": {
    "mechanism": "none",
    "path": null
   },
   "dispute": {
    "claims": [
     "Author markets EU AI Act / SOC 2 / ISO alignment; none of those frameworks has adopted or referenced this specific draft as far as could be verified here.",
     "No known implementation exists yet (implementation=none-found); this is a proposal, not a running system."
    ],
    "summary": "This is an individual Internet-Draft, not a Working Group item -- the IETF datatracker explicitly states such drafts are 'not endorsed by the IETF' and have 'no formal standing' in the standards process, and 'Intended status: Standards Track' is only the author's aspiration. No implementation, adopter or third-party citation of AAT was found in the sources checked; it is included here because it is the most complete public account/audit-log spec text found for this step, not because it has traction."
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.ietf.org/archive/id/draft-sharif-agent-audit-trail-09.txt",
     "claim": "R. Sharif (CyberSecAI Ltd), *Agent Audit Trail: A Standard Logging Format for Autonomous AI Systems (draft-sharif-agent-audit-trail-09)*, draft-sharif-agent-audit-trail-09; 26 October 2026",
     "date": null,
     "quote": "The WIMSE agent audit record work [WIMSE-AUDIT] defines a minimum field set and requires attestation by an observer the agent does not control. AAT instead defines graded recording independence (Section 5), permitting self-recording only at L0 and L1 and requiring an independent recorder at L2 and above, and adds pre-execution enforcement evidence (Section 4) and decision reproducibility (Section 13), which that work does not cover. / Internet Engineering Task Force R. Sharif Internet-Draft CyberSecAI Ltd Intended status: Standards Track October 26, 2026 Expires: April 29, 2027 Agent Audit Trail: A Standard Logging Format for Autonomous AI Systems draft-sharif-agent-audit-trail-09 Abstract This document specifies a standard logging format for autonomous AI agent systems. The Agent Audit Trail (AAT) defines a JSON-based record structure with mandatory fields for agent identity, the authorizing principal, action classification, outcome tracking, and trust level reporting. / Records are linked via tamper-evident hash chaining using SHA-256 per RFC 8785, with optional ECDSA signatures for non-repudiation. / The design is transport-agnostic and supports export to JSONL, Syslog (RFC 5424), and CSV while preserving chain integrity. / Intended status: Standards Track October 26, 2026 Expires: April 29, 2027 Agent Audit Trail: A Standard Logging Format for Autonomous AI Systems draft-sharif-agent-audit-trail-09 / This revision (-07) adds a mandatory \"principal\" field (Section 3.1) that binds each record to the party on whose authority the agent acted ... Records produced under -06 and earlier predate the \"principal\" field; verifiers processing mixed-revision archives SHOULD treat its absence as \"principal not recorded\" rather than a validation failure. / Internet Engineering Task Force R. Sharif Internet-Draft CyberSecAI Ltd Intended status: Standards Track October / Intended status: Standards Track / draft-sharif-agent-audit-trail-09 Abstract This document specifies a standard logging format / draft-sharif-agent-audit-trail-09 Abstract This document specifies a standard logging format for autonomous AI agent systems. / Description: reference library for producing and verifying Agent Audit Trail records, including offline chain verification against a public key. Language: Python. Distribution: PyPI package \"aat-mcp\". Coverage: record format (Section 3), hash chaining and chain verification (Section 6), ES256 signatures. / The format addresses requirements from the EU AI Act (Regulation 2024/1689), which mandates automatic recording of events for high-risk AI systems, whose application dates were staged into 2027-2028 by Regulation (EU) 2026/1744. It also maps informatively to SOC 2 Trust Services Criteria, ISO/IEC 42001, the draft ISO/IEC 24970 and prEN 18229-1 logging standards, and PCI DSS v4.0.1 logging requirements. The design is transport-agnostic and supports export to JSONL, Syslog (RFC 5424), and CSV while preserving chain integrity. Privacy is addressed through input/output hashing, content fingerprinting, and tombstone-based deletion compatible with GDPR Article 17. / STRUCTURED-DATA: SD-ID \"aat@IANA-PEN\" containing record_id, session_id, trust_level, prev_hash, record_phase. / IANA Considerations ... 15.1. Action Type Registry ... 15.2. Outcome Registry ... 15.3. Signature Algorithm Registry / This document specifies a standard logging format for autonomous AI agent systems. The Agent Audit Trail (AAT) defines a JSON-based record structure with mandatory fields for agent identity, the authorizing principal, action classification, outcome tracking, and trust level reporting. Records are linked via tamper-evident hash chaining using SHA-256 per RFC 8785, with optional ECDSA signatures for non-repudiation. / Legal Provisions and are provided without warranty as described in the Revised BSD License. / The format addresses requirements from the EU AI Act (Regulation 2024/1689), which mandates automatic recording of events for high-risk AI systems, whose application dates were staged into 2027-2028 by Regulation (EU) 2026/1744. / Article 12 requires that high-risk AI systems \"shall technically allow for the automatic recording of events ('logs') over the lifetime of the system.\" Article 12(2) further specifies that logging capabilities shall conform to recognized standards or common specifications. Despite this regulatory mandate, no standard exists for HOW autonomous AI agents should log their activities. / A post-execution log can be fully conformant to the -00 format while providing no evidence that a policy check actually prevented an action. / \"pre_execution\": The record exists BEFORE the action runs. If the outcome is \"denied\", the record proves that the action was evaluated and rejected prior to execution. / When action_type is \"decision\" and outcome is \"denied\", the record MUST have record_phase set to \"pre_execution\". A denial that is only logged after execution provides no evidence that the denial was enforced. / The mappings in this section are INFORMATIVE. They indicate where AAT records can supply evidence relevant to an obligation; they are not a compliance assessment and do not assert that adopting AAT satisfies any regulation or standard. / Changes from -06 to -07: o Added mandatory \"principal\" field (Section 3.1) binding each record to the party on whose behalf and under whose authority the agent acted / Description: an on-premises secrets manager whose accepted architecture decision record (ADR-118) maps an agent evidence ledger to this document and adopts pre-execution recording (Section 4), with the secret-holding component as the recorder. Status: design accepted; no implementation was available at the time of writing.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://datatracker.ietf.org/doc/draft-gilda-audit-agent-audit-record/",
     "claim": "IETF Datatracker, *draft-gilda-audit-agent-audit-record — An Audit Record Format for AI Agent Authorization Decisions (IETF Datatracker)*, Last updated 2026-10-29",
     "date": null,
     "quote": "Replaces draft-gilda-wimse-agent-audit-record",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://www.ietf.org/archive/id/draft-emirdag-scitt-ai-agent-execution-01.txt",
     "claim": "Pinar Emirdag and Daniel Feichtinger (Veridic Inc.), *AI Agent Execution Profile of SCITT (draft-emirdag-scitt-ai-agent-execution-01)*, 2026-10-12",
     "date": "2026-10-12",
     "quote": "draft-emirdag-scitt-ai-agent-execution-01 / Expires 15 April 2027 [Page 5] Internet-Draft SCITT AI Agent Execution October 2026 AgentInteractionRecord",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://datatracker.ietf.org/doc/draft-sharif-agent-audit-trail/doc.json",
     "claim": "IETF Datatracker JSON Metadata, *IETF Datatracker document JSON metadata for draft-sharif-agent-audit-trail*, checked 2026-10-29",
     "date": null,
     "quote": "\"group\": { \"name\": \"Individual Submissions\", \"type\": \"Individual\", \"acronym\": \"none\" } / \"draft-sharif-agent-audit-trail\", \"rev\": \"09\", \"published\": \"2026-10-26T17:46:36.171595+00:00\", \"url\": \"/doc/draft-sharif-agent-audit-trail/09/\", \"pages\": 65 } ], \"iesg_state\": \"I-D Exists\", / {\"name\":\"draft-sharif-agent-audit-trail\",\"rev\":\"09\",\"pages\":65,\"time\":\"2026-10-26 17:46:36\",\"group\":{\"name\":\"Individual Submissions\",\"type\":\"Individual\",\"acronym\":\"none\" }, \"expires\":\"2027-04-29",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://www.ietf.org/archive/id/draft-sharif-agent-audit-trail-00.txt",
     "claim": "Raza Sharif (CyberSecAI Ltd), *Agent Audit Trail: A Standard Logging Format for Autonomous AI Systems (draft-sharif-agent-audit-trail-00)*, checked 2026-10-29",
     "date": null,
     "quote": "Agent Audit Trail: A Standard Logging Format for Autonomous AI Systems",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://datatracker.ietf.org/ipr/7609/",
     "claim": "IETF Datatracker IPR Disclosure #7609, *IPR Details - Raza Al-Rehman Sharif's Statement about IPR related to draft-sharif-agent-audit-trail, draft-sharif-openid-agent-identity, and draft-sharif-aeba*, checked 2026-10-29",
     "date": null,
     "quote": "| Raza Al-Rehman Sharif | | [email redacted] | Email | [email redacted] | | | / The patent holder commits to a royalty-free license to all implementers for patent claims necessary to implement the referenced Internet-Drafts, on a reasonable and non-discriminatory basis, for standard-conformant implementations of the specifications. The patent holder reserves the right to suspend this commitment, on a reciprocal basis, as to any party that asserts patent claims against implementations of these specifications (defensive suspension). This update supersedes the licensing terms stated in the original disclosure, IPR ID #7559.",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://aat-standard.org/",
     "claim": "CyberSecAI Ltd, *Agent Audit Trail (AAT) — AI Agent Audit Log & Evidence Standard*, checked 2026-10-29",
     "date": null,
     "quote": "Who maintains the standard? Raza Sharif (CyberSecAI Ltd, London), as the IETF Internet-Draft series / Who maintains the standard? Raza Sharif (CyberSecAI Ltd, London) / Ltd; Author, Agent Audit Trail standard\", \"url\": \"https://razasharif.substack.com\", \"sameAs\": [\"https://orcid.org/0009-0001-5126-4722\", \"https://datatracker.ietf.org/doc/draft-sharif-agent-audit-trail/\"] }, {",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://datatracker.ietf.org/doc/draft-sharif-agent-audit-trail/",
     "claim": "R. Sharif (CyberSecAI Ltd), *draft-sharif-agent-audit-trail — Agent Audit Trail: A Standard Logging Format for Autonomous AI Systems (IETF Datatracker)*, checked 2026-10-30",
     "date": null,
     "quote": "working documents of the Internet Engineering Task Force (IETF). Note that other groups may / draft-sharif-agent-audit-trail-09 - Agent Audit Trail: A Standard Logging Format for Autonomous AI Systems",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://www.rfc-editor.org/rfc/rfc8785.html",
     "claim": "A. Rundgren, B. Jordan, and S. Erdtman, *RFC 8785: JSON Canonicalization Scheme (JCS)*, June 2020",
     "date": null,
     "quote": "RFC 8785: JSON Canonicalization Scheme (JCS) /* NOTE: Changes at the bottom of this / <meta content=\"Common,Latin\" name=\"scripts\">",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://www.rfc-editor.org/rfc/rfc5424.html",
     "claim": "R. Gerhards, *RFC 5424: The Syslog Protocol*, checked 2026-10-29",
     "date": null,
     "quote": "RFC 5424 The Syslog Protocol March 2009 The MSG part of the message is / each other standard would need to define its own syslog packet format and transport",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://raw.githubusercontent.com/razashariff/aat-mcp/main/README.md",
     "claim": "razashariff/aat-mcp (GitHub), *aat-mcp*, checked 2026-10-30",
     "date": null,
     "quote": "from aat import core from aat.mcp import MCPRecorder rec = MCPRecorder(agent_id=\"urn:agent:bot.example\", agent_version=\"1.0.0\", private_key=core.gen_key(), trust_level=\"L2\") / Signed, tamper-evident audit trail for MCP tool calls, conformant to draft-sharif-agent-audit-trail-06. Every agent tool invocation becomes a signed, hash-chained record that an independent party can verify offline, without trusting the producer.",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://mailarchive.ietf.org/arch/msg/audit/7jINjQq00C5Wu3_Z3qe-E0ikIe4/",
     "claim": "Raza Sharif (IETF AUDIT Mailing List Archive), *[Audit] Individual draft + running code: draft-sharif-agent-audit-trail-08 (agent audit record format)*, checked 2026-10-29",
     "date": null,
     "quote": "It does not define identity, delegation or authorization; it records the outcome of them and expects those from WIMSE / OAuth work. / author): - Mindburn Labs helm-ai-kernel: full implementation (schema, JCS canonicalisation, hash chain), Go. -",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://www.rfc-editor.org/rfc/rfc9943.html",
     "claim": "H. Birkholz, A. Delignat-Lavaud, C. Fournet, Y. Deshpande, and S. Lasker, *RFC 9943: An Architecture for Trustworthy and Transparent Digital Supply Chains*, June 2026",
     "date": null,
     "quote": "RFC 9943: An Architecture for Trustworthy and Transparent Digital Supply Chains /* NOTE: Changes at the bottom of this file overrides some earlier settings.",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://www.ietf.org/archive/id/draft-gilda-audit-agent-audit-record-03.txt",
     "claim": "S. Gilda, *An Audit Record Format for AI Agent Authorization Decisions (draft-gilda-audit-agent-audit-record-03)*, 29 October 2026",
     "date": null,
     "quote": "S. Gilda Internet-Draft 29 October 2026 Intended status: Standards Track Expires: 2 May 2027",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://github.com/open-telemetry/semantic-conventions-genai/blob/main/docs/gen-ai/gen-ai-agent-spans.md",
     "claim": "OpenTelemetry, *Semantic Conventions for GenAI agent and framework spans*, Status: Development; fetched 2026-10-31",
     "date": null,
     "quote": "Status: Development",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://github.com/spiffe/spiffe/blob/main/standards/SPIFFE-ID.md",
     "claim": "SPIFFE, *SPIFFE ID*, checked 2026-10-30",
     "date": null,
     "quote": "Stability: Stable",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://pypi.org/pypi/aat-mcp/json",
     "claim": "PyPI JSON API, *aat-mcp*, checked 2026-10-29",
     "date": null,
     "quote": "Conformant AAT (draft-sharif-agent-audit-trail-06) audit-trail recorder + MCP middleware: signed, hash-chained, tamper-evident, offline-verifiable evidence for AI agent tool calls.",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://raw.githubusercontent.com/cyl-castillo/agent-console/main/README.md",
     "claim": "Agent Console / Testigo, *Agent Console*, checked 2026-10-30",
     "date": null,
     "quote": "Every session witnessed into a hash-chained evidence ledger (Testigo); export signed proof packets anyone verifies in a browser, or the same ledger as an IETF Agent Audit Trail (JSONL, SHA-256 over RFC 8785) that a third party verifies offline with the dependency-free aat-verify.mjs written alongside.",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://pypi.org/pypi/ujex-compliance-callback/json",
     "claim": "PyPI JSON API, *ujex-compliance-callback*, checked 2026-10-29",
     "date": null,
     "quote": "Drop-in tamper-evident audit callbacks for LangChain, LangGraph, CrewAI, AutoGen, PydanticAI. Streams events into the Ujex hash-chained audit ledger (IETF draft-sharif-agent-audit-trail-00).",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://github.com/Mindburn-Labs/helm-ai-kernel",
     "claim": "GitHub REST API, *Mindburn-Labs/helm-ai-kernel*, checked 2026-10-29",
     "date": null,
     "quote": "\"html_url\":\"https://github.com/Mindburn-Labs/helm-ai-kernel\",\"description\":\"Fail-closed execution firewall for AI agents: quarantine MCP tools, proxy OpenAI-compatible requests, emit signed / \"public\", \"site_admin\": false }, \"html_url\": \"https://github.com/Mindburn-Labs/helm-ai-kernel\", \"description\": \"Fail-closed execution firewall for AI agents: quarantine",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://github.com/keyorixhq/keyorix",
     "claim": "GitHub REST API, *keyorixhq/keyorix*, checked 2026-10-29",
     "date": null,
     "quote": "keyorixhq/keyorix",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://pypi.org/pypi/aat-verify/json",
     "claim": "PyPI JSON API, *aat-verify*, checked 2026-10-29",
     "date": null,
     "quote": "3\",\"Topic:: Security:: Cryptography\",\"description\":\"# aat-verify Standalone reference verifier for the Agent Audit Trail Internet-Draft (draft-sharif-agent-audit-trail).",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://raw.githubusercontent.com/kbipul/last-record/main/README.md",
     "claim": "Bipul (*kbipul/last-record*), *README.md (Last Record)*, checked 2026-10-30",
     "date": null,
     "quote": "This tool takes an agent tool-call log, checks each record against the draft's mandatory fields, recomputes the hash chain, and then answers the question the green badge doesn't: what does a verified chain actually establish?",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://github.com/kbipul/last-record",
     "claim": "GitHub REST API, *kbipul/last-record*, checked 2026-10-29",
     "date": null,
     "quote": "Check an agent tool-call log against the IETF Agent Audit Trail draft, and see what its SHA-256 chain cannot prove.",
     "ref": 24
    }
   ],
   "form": "document-format",
   "governance": "Individual IETF Internet-Draft (`Intended status: Standards Track`, `IESG state: I-D Exists`, not endorsed by the IETF and not adopted by a Working Group); latest revision `-09` published 26 October 2026 (expires 29 April 2027), following `-00` (29 March 2026), `-01` (19 August 2026), `-02` (3 September 2026), `-03` (5 September 2026), `-04` (15 September 2026), `-05` (25 September 2026), `-06` (29 September 2026), `-07` (11 October 2026), and `-08` (13 October 2026)",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "new record: found via search for 'agent audit log standard'; verified against datatracker.ietf.org and the archived draft text (revision -03, 2026-09-05); no implementation found"
    },
    {
     "date": "2026-10-16",
     "note": "revision draft-sharif-agent-audit-trail-03 → 08"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "agent-audit-trail",
   "implementation": "shipping",
   "last_verified": "2026-11-08",
   "name": "Agent Audit Trail",
   "native_status": "Active Internet-Draft (individual submission), Intended status: Standards Track; not a Working Group document",
   "origin": {
    "date": "2026-03",
    "org": "Raza Sharif / CyberSecAI Ltd (individual submitter)"
   },
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "draft",
   "probe": {
    "method": "GET",
    "on_absent": "There is no way to detect AAT usage from outside a system -- it describes an internal/exported logging format, not a discoverable service. Absence just means a given agent's logs were not inspected, not that AAT is unused.",
    "parse": "The spec defines a JSON record format, not a network endpoint: each record MUST carry record_id (UUIDv4), timestamp (RFC 3339), agent_id (URI), agent_version (semver), session_id (UUIDv4), action_type (tool_call/tool_response/decision/delegation/escalation/error/lifecycle), action_detail (object), outcome (success/failure/timeout/denied/escalated), trust_level (L0-L4), parent_record_id and prev_hash (SHA-256 of the previous record's RFC 8785 canonical JSON, forming a hash chain), and record_phase (pre_execution/post_execution/concurrent). The RECOMMENDED export format is JSONL. A conforming log is one where every line validates against these mandatory fields and the hash chain verifies.",
    "path": "{log_export_endpoint}"
   },
   "question": "Is there a standard, tamper-evident log format any autonomous AI agent can write its actions to, so a regulator, auditor or victim can later reconstruct exactly what it did and why?",
   "scope": "general",
   "spec_url": "https://www.ietf.org/archive/id/draft-sharif-agent-audit-trail-09.txt",
   "step": "account",
   "summary_md": "**Agent Audit Trail** (`AAT`, `draft-sharif-agent-audit-trail-09`) is an individual IETF Internet-Draft by R. Sharif (CyberSecAI Ltd) that specifies a standard JSON logging format for autonomous AI agent systems, defining mandatory fields for agent identity (`agent_id`), the authorizing `principal`, action classification (`action_type`), `outcome` tracking, and `trust_level` reporting. Records are linked in a tamper-evident hash chain using `SHA-256` over RFC 8785 Canonical JSON (`JCS`), with optional `ES256`, `ML-DSA-65`, or `Ed25519` signatures for non-repudiation, and can be exported to `JSONL`, Syslog (RFC 5424), or `CSV` while preserving chain integrity. Published as an Individual Submission Internet-Draft (`draft-sharif-agent-audit-trail-09`, intended status Standards Track) on the IETF Datatracker on October 26, 2026 (expiring April 29, 2027, following initial `-00` publication on March 29, 2026), the specification is not adopted by an IETF working group. Revision `-07` introduced a mandatory `principal` object binding each record to the authorizing party, while verifiers processing mixed-revision archives from `-06` or earlier treat its absence as `principal not recorded` rather than a validation failure.",
   "track": "ietf",
   "version": {
    "label": "draft-sharif-agent-audit-trail-09",
    "date": "2026-10-26"
   },
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-sharif-agent-audit-trail"
    }
   ],
   "use_cases": [
    "audit-agent-actions"
   ],
   "audience": [
    "agent-builder",
    "platform",
    "standards-body"
   ],
   "pairs_with": [
    "wimse-agent-audit-record",
    "scitt-ai-agent-execution",
    "otel-genai-semconv",
    "spiffe"
   ],
   "prerequisites": [],
   "hatnote_md": "For the in-toto/DSSE authorization-decision audit record format (`draft-gilda-audit-agent-audit-record`, formerly `draft-gilda-wimse-agent-audit-record`), see [Agent Audit Record](/protocols/wimse-agent-audit-record/). For the COSE/SCITT execution receipt profile (`draft-emirdag-scitt-ai-agent-execution`), see [AI Agent Execution Profile of SCITT](/protocols/scitt-ai-agent-execution/). For campaign and conversion telemetry attribution (AAP), see [Agent Attribution Protocol](/protocols/agent-attribution-protocol/).",
   "ietf_tracker": {
    "doc": "draft-sharif-agent-audit-trail",
    "rev": "09",
    "state": "active",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-10-26",
    "expires_utc": "2027-04-29",
    "as_of": "2026-10-30",
    "source": "https://datatracker.ietf.org/doc/draft-sharif-agent-audit-trail/",
    "source_label": "per IETF Datatracker"
   },
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-08",
   "v05_hatnote_html_md": "For the in-toto/DSSE authorization-decision audit record format (`draft-gilda-audit-agent-audit-record`, formerly `draft-gilda-wimse-agent-audit-record`), see [Agent Audit Record](/protocols/wimse-agent-audit-record/). For the COSE/SCITT execution receipt profile (`draft-emirdag-scitt-ai-agent-execution`), see [AI Agent Execution Profile of SCITT](/protocols/scitt-ai-agent-execution/). For campaign and conversion telemetry attribution (AAP), see [Agent Attribution Protocol](/protocols/agent-attribution-protocol/). [1][2][3]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Agent Audit Trail** (`AAT`, `draft-sharif-agent-audit-trail-09`) is an individual IETF Internet-Draft by R. Sharif (CyberSecAI Ltd) that specifies a standard JSON logging format for autonomous AI agent systems, defining mandatory fields for agent identity (`agent_id`), the authorizing `principal`, action classification (`action_type`), `outcome` tracking, and `trust_level` reporting. [1] Records are linked in a tamper-evident hash chain using `SHA-256` over RFC 8785 Canonical JSON (`JCS`), with optional `ES256`, `ML-DSA-65`, or `Ed25519` signatures for non-repudiation, and can be exported to `JSONL`, Syslog (RFC 5424), or `CSV` while preserving chain integrity. [1] Published as an Individual Submission Internet-Draft (`draft-sharif-agent-audit-trail-09`, intended status Standards Track) on the IETF Datatracker on October 26, 2026 (expiring April 29, 2027, following initial `-00` publication on March 29, 2026), the specification is not adopted by an IETF working group. [1][4][5] Revision `-07` introduced a mandatory `principal` object binding each record to the authorizing party, while verifiers processing mixed-revision archives from `-06` or earlier treat its absence as `principal not recorded` rather than a validation failure. [1]",
   "v05_identity_sentence_md": "**Agent Audit Trail** (`AAT`, `draft-sharif-agent-audit-trail-09`) is an individual IETF Internet-Draft by R. Sharif (CyberSecAI Ltd) that specifies a standard JSON logging format for autonomous AI agent systems, defining mandatory fields for agent identity (`agent_id`), the authorizing `principal`, action classification (`action_type`), `outcome` tracking, and `trust_level` reporting. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Account](/category/account/) (`account`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "Raza Sharif (CyberSecAI Ltd, London) [1][6][7]"
    },
    {
     "label": "Governed by",
     "value_md": "Individual IETF Internet-Draft (`Intended status: Standards Track`, `IESG state: I-D Exists`, no Working Group); portal at `aat-standard.org` [1][4][8]"
    },
    {
     "label": "Track",
     "value_md": "Individual IETF Internet-Draft (`draft-sharif-agent-audit-trail-09`, Intended status: Standards Track) and author-maintained standard portal (`aat-standard.org`) [1][7]"
    },
    {
     "label": "Status",
     "value_md": "Active Internet-Draft (individual submission), Intended status: Standards Track; not a Working Group document [1][4][8]"
    },
    {
     "label": "Version",
     "value_md": "`draft-sharif-agent-audit-trail-09` (`2026-10-26`, expires `2027-04-29`); `aat-mcp` `v0.1.0` (`2026-09-29`); `aat-verify` `v0.1.0` (`2026-09-15`) [1][4][8]"
    },
    {
     "label": "Wire format",
     "value_md": "UTF-8 JSON Lines (`.jsonl`, primary), RFC 5424 Syslog (`FACILITY local0 (16)`, `SD-ID \"aat@IANA-PEN\"` — draft Private Enterprise Number placeholder rather than an assigned IANA PEN registration — with JCS `MSG`), and RFC 4180 CSV [1][9][10]"
    },
    {
     "label": "Specification",
     "value_md": "[draft-sharif-agent-audit-trail-09.txt](https://www.ietf.org/archive/id/draft-sharif-agent-audit-trail-09.txt) · [IETF Datatracker](https://datatracker.ietf.org/doc/draft-sharif-agent-audit-trail/) · [aat-standard.org](https://aat-standard.org/) · [aat-mcp README](https://raw.githubusercontent.com/razashariff/aat-mcp/main/README.md) [1][7][8]"
    },
    {
     "label": "Found at",
     "value_md": "Transport-agnostic log format (no network discovery endpoint); Syslog `SD-ID \"aat@IANA-PEN\"` (draft Private Enterprise Number placeholder rather than an assigned IANA PEN registration) and in-record `prev_hash` / `signer_kid` (RFC 7638) fields [1][10]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust Revised BSD License (spec code); IETF IPR `#7609` (`GB2606543.3`, superseding `#7559`) RF-RAND with defensive suspension; `aat-mcp` Apache-2.0 [1][6][11]"
    },
    {
     "label": "IETF state",
     "value_md": "`draft-sharif-agent-audit-trail-09` · **Active Internet-Draft** (expires 2027-04-29) · Individual · as of 2026-10-30 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-sharif-agent-audit-trail/))"
    }
   ],
   "v05_problem_md": "The EU Artificial Intelligence Act (Regulation (EU) 2024/1689) Article 12 requires that high-risk AI systems technically allow for the automatic recording of events (`logs`) over the lifetime of the system in conformance with recognized standards or common specifications. Despite this regulatory mandate, no standardized wire format exists for how autonomous AI agents should log their activities across vendors. [1] Furthermore, a post-execution log can be syntactically conformant to the `-00` record format while providing no evidence that a policy gate evaluated or blocked an action before execution. [1] AAT binds each action to a `record_phase` (`pre_execution`, `post_execution`, or `concurrent`) and requires `record_phase` set to `pre_execution` whenever a `decision` record has an `outcome` of `denied` or `escalated`, proving the policy evaluation occurred before execution rather than in an after-the-fact log. [1] The regulatory mappings are INFORMATIVE. They indicate where AAT records can supply evidence relevant to an obligation; they are not a compliance assessment and do not assert that adopting AAT satisfies any regulation or standard. [1] It does not define identity, delegation or authorization; it records the outcome of them and expects those from WIMSE / OAuth work. [12]",
   "v05_mechanism_delta_md": "AAT binds each action to a `record_phase` (`pre_execution`, `post_execution`, or `concurrent`) and requires `record_phase` set to `pre_execution` whenever a `decision` record has an `outcome` of `denied` or `escalated`, proving the policy evaluation occurred before execution rather than in an after-the-fact log. [1]",
   "v05_scope_boundary_md": "The regulatory mappings are INFORMATIVE. They indicate where AAT records can supply evidence relevant to an obligation; they are not a compliance assessment and do not assert that adopting AAT satisfies any regulation or standard. [1] It does not define identity, delegation or authorization; it records the outcome of them and expects those from WIMSE / OAuth work. [12]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "JSON Canonicalization Scheme (JCS, RFC 8785)",
      "spec_or_rfc": "RFC 8785",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "Each audit record is JSON whose SHA-256 hash chain is computed over RFC 8785 canonical JSON, with ECDSA signatures optional. [1][9]"
     },
     {
      "name": "IETF SCITT & C2PA Content Credentials",
      "spec_or_rfc": "RFC 9943 (SCITT)",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "The Agent Audit Trail hash-chains its own JSON records and treats a SCITT anchor as optional, while the SCITT agent profile stores a COSE-signed AgentInteractionRecord with an evidence custodian. [1][13]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "wimse-agent-audit-record",
      "target_name": "An Audit Record Format for AI Agent Authorization Decisions",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "The WIMSE audit record is an in-toto/DSSE authorization-decision format, while the Agent Audit Trail is a SHA-256 hash over RFC 8785 JSON with optional ECDSA. [1][14]"
     },
     {
      "target_id": "scitt-ai-agent-execution",
      "target_name": "AI Agent Execution Profile of SCITT",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "The SCITT AI profile registers a COSE-signed AgentInteractionRecord at air-1.0 with an evidence custodian, while the Agent Audit Trail chains RFC 8785 JSON in the operator's own log. [1][3]"
     },
     {
      "target_id": "otel-genai-semconv",
      "target_name": "OpenTelemetry GenAI Semantic Conventions (agents and MCP)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "OpenTelemetry GenAI conventions name span and metric attributes for the operator's tracer, while an Agent Audit Trail record is a hash-chained JSON log with identity, principal, action, outcome, and trust level. [1][15]"
     },
     {
      "target_id": "spiffe",
      "target_name": "SPIFFE (Secure Production Identity Framework for Everyone)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "SPIFFE defines the workload SVID, while the Agent Audit Trail is the separate hash-chained JSON log of identity, principal, action, outcome, and trust level. [1][16]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (9 probed or cited examples; non-exhaustive).",
    "side_a": {
     "visible": true,
     "heading": "Issuers, signers & metadata publishers",
     "col4_header": "Boundary & Format",
     "note_md": null,
     "rows": [
      {
       "actor": "CyberSecAI aat-mcp",
       "role": "Audit emitter",
       "status": "Supported",
       "status_display": "Supported · as of 2026-09-29",
       "col4_md": "PyPI `aat-mcp` `0.1.0`, uploaded 2026-09-29 by cybersecai. MCP middleware that records each tool invocation as a signed, hash-chained AAT record conformant to `draft-sharif-agent-audit-trail-06` (`principal` became mandatory in `-07`, after `aat-mcp` `0.1.0`'s stated `-06` target). Coverage named in the draft's implementation section: record format (Section 3), hash chaining (Section 6), and ES256 signatures, with offline independent verification.",
       "source_md": "[aat-mcp README](https://raw.githubusercontent.com/razashariff/aat-mcp/main/README.md) [11] · [PyPI aat-mcp](https://pypi.org/pypi/aat-mcp/json) [17] · [draft-sharif-agent-audit-trail-09](https://www.ietf.org/archive/id/draft-sharif-agent-audit-trail-09.txt) [1]"
      },
      {
       "actor": "Agent Console / Testigo",
       "role": "Audit emitter",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Testigo (src-tauri/src/services/aat_export.rs) exports every agent session as a draft-sharif-agent-audit-trail-08 JSONL file. The chain is SHA-256 over RFC 8785 canonical JSON. Appendix E of draft -09 lists this exporter. The same tree ships aat-verify.mjs for offline checks.",
       "source_md": "[Agent Console README](https://raw.githubusercontent.com/cyl-castillo/agent-console/main/README.md) [18] · [draft-sharif-agent-audit-trail-09](https://www.ietf.org/archive/id/draft-sharif-agent-audit-trail-09.txt) [1]"
      },
      {
       "actor": "Ujex (ujex-compliance-callback)",
       "role": "Audit emitter",
       "status": "Experimental",
       "status_display": "Experimental · as of 2026-06-18",
       "col4_md": "PyPI ujex-compliance-callback 0.1.1, uploaded 2026-06-18 by axysar. Drop-in callbacks for LangChain, LangGraph, CrewAI, AutoGen, and PydanticAI stream events into a hash-chained ledger aimed at draft-sharif-agent-audit-trail-00. The current draft revision is -09.",
       "source_md": "[PyPI ujex-compliance-callback](https://pypi.org/pypi/ujex-compliance-callback/json) [19]"
      },
      {
       "actor": "Mindburn Labs (helm-ai-kernel)",
       "role": "Audit emitter",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-22",
       "col4_md": "Mindburn-Labs/helm-ai-kernel describes a fail-closed execution firewall that quarantines MCP tools, proxies OpenAI-compatible requests, and emits signed receipts. Sharif's 2026-10-22 note to the IETF AUDIT list calls it an independent implementation of the AAT schema, JCS canonicalization, and the SHA-256 hash chain.",
       "source_md": "[Mindburn-Labs/helm-ai-kernel](https://github.com/Mindburn-Labs/helm-ai-kernel) [20] · [AUDIT list, 2026-10-22](https://mailarchive.ietf.org/arch/msg/audit/7jINjQq00C5Wu3_Z3qe-E0ikIe4/) [12]"
      },
      {
       "actor": "Keyorix",
       "role": "Audit emitter",
       "status": "Design accepted (no implementation)",
       "status_display": "Design accepted (no implementation) · checked 2026-10-30",
       "col4_md": "Appendix E of `draft-sharif-agent-audit-trail-09` records `keyorixhq/keyorix`: accepted architecture decision record `ADR-118` maps its on-premises secrets manager agent evidence ledger onto AAT pre-execution recording (Section 4), with the design accepted and no implementation available at the time of writing.",
       "source_md": "[draft-sharif-agent-audit-trail-09](https://www.ietf.org/archive/id/draft-sharif-agent-audit-trail-09.txt) [1] · [keyorixhq/keyorix](https://github.com/keyorixhq/keyorix) [21]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Verifiers, WAFs & relying servers",
     "col4_header": "Boundary & Format",
     "note_md": null,
     "rows": [
      {
       "actor": "CyberSecAI aat-verify",
       "role": "Verifier / Audit parser",
       "status": "Supported",
       "status_display": "Supported · as of 2026-09-15",
       "col4_md": "PyPI aat-verify 0.1.0, uploaded 2026-09-15 by cybersecai. Standalone reference verifier for draft-sharif-agent-audit-trail. The draft chains records with SHA-256 over RFC 8785 canonical JSON and requires agent identity, the authorizing principal, action classification, outcome, and trust level. ECDSA signatures are optional. aat-mcp's own text also says it can verify a chain offline against a public key.",
       "source_md": "[PyPI aat-verify](https://pypi.org/pypi/aat-verify/json) [22] · [draft-sharif-agent-audit-trail-09](https://www.ietf.org/archive/id/draft-sharif-agent-audit-trail-09.txt) [1]"
      },
      {
       "actor": "Agent Console aat-verify.mjs",
       "role": "Verifier / Audit parser",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Dependency-free Node verifier shipped beside Testigo. It checks the exported JSONL ledger offline. The ledger is SHA-256 over RFC 8785, conformant to draft-sharif-agent-audit-trail-08. The same README also describes a browser check of signed proof packets and a reproducible auditor zip.",
       "source_md": "[Agent Console README](https://raw.githubusercontent.com/cyl-castillo/agent-console/main/README.md) [18]"
      },
      {
       "actor": "Last Record (kbipul/last-record)",
       "role": "Verifier / Audit parser",
       "status": "Supported",
       "status_display": "Supported · as of 2026-09-18",
       "col4_md": "Browser and CLI checker, repository created 2026-09-18. It takes an agent tool-call log, checks each record against the draft's mandatory fields, and recomputes the SHA-256 hash chain. The repository description says the point is to show what that chain cannot prove, including after the tail of the log is cut.",
       "source_md": "[Last Record README](https://raw.githubusercontent.com/kbipul/last-record/main/README.md) [23] · [kbipul/last-record](https://github.com/kbipul/last-record) [24]"
      },
      {
       "actor": "Mindburn Labs (helm-ai-kernel)",
       "role": "Verifier / Audit parser",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-22",
       "col4_md": "The repository description says the firewall verifies EvidencePacks offline. Sharif's 2026-10-22 AUDIT list note calls the same tree an independent implementation of AAT JCS canonicalization and the SHA-256 hash chain, so the offline check is that chain.",
       "source_md": "[Mindburn-Labs/helm-ai-kernel](https://github.com/Mindburn-Labs/helm-ai-kernel) [20] · [AUDIT list, 2026-10-22](https://mailarchive.ietf.org/arch/msg/audit/7jINjQq00C5Wu3_Z3qe-E0ikIe4/) [12]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "agent-delegation-receipts",
     "target_name": "Agent Delegation Receipts",
     "relation_label": "Complements",
     "delta": "The Agent Audit Trail hash-chains records with SHA-256 over RFC 8785 JSON, while a delegation receipt is one JWS or COSE_Sign1 document binding the operator-instruction hash.",
     "item_md": "**[Agent Delegation Receipts](/protocols/agent-delegation-receipts/)** (Complements) — The Agent Audit Trail hash-chains records with SHA-256 over RFC 8785 JSON, while a delegation receipt is one JWS or COSE_Sign1 document binding the operator-instruction hash."
    },
    {
     "item_md": "**[Account protocols](/category/account/)** — Category index for `account` standards."
    }
   ],
   "v05_compiled_md": "---\nid: agent-audit-trail\ntitle: \"Agent Audit Trail\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: account\nform: document-format\nwire_archetype: identity_auth_crypto\nspec_url: https://www.ietf.org/archive/id/draft-sharif-agent-audit-trail-09.txt\nlast_checked: 2026-11-08\n---\n\n# Agent Audit Trail\n\n**Category:** [Account](/category/account/) (`account`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-11-08\n\n> *For the in-toto/DSSE authorization-decision audit record format (`draft-gilda-audit-agent-audit-record`, formerly `draft-gilda-wimse-agent-audit-record`), see [Agent Audit Record](/protocols/wimse-agent-audit-record/). For the COSE/SCITT execution receipt profile (`draft-emirdag-scitt-ai-agent-execution`), see [AI Agent Execution Profile of SCITT](/protocols/scitt-ai-agent-execution/). For campaign and conversion telemetry attribution (AAP), see [Agent Attribution Protocol](/protocols/agent-attribution-protocol/). [1][2][3]*\n\n**Agent Audit Trail** (`AAT`, `draft-sharif-agent-audit-trail-09`) is an individual IETF Internet-Draft by R. Sharif (CyberSecAI Ltd) that specifies a standard JSON logging format for autonomous AI agent systems, defining mandatory fields for agent identity (`agent_id`), the authorizing `principal`, action classification (`action_type`), `outcome` tracking, and `trust_level` reporting. [1] Records are linked in a tamper-evident hash chain using `SHA-256` over RFC 8785 Canonical JSON (`JCS`), with optional `ES256`, `ML-DSA-65`, or `Ed25519` signatures for non-repudiation, and can be exported to `JSONL`, Syslog (RFC 5424), or `CSV` while preserving chain integrity. [1] Published as an Individual Submission Internet-Draft (`draft-sharif-agent-audit-trail-09`, intended status Standards Track) on the IETF Datatracker on October 26, 2026 (expiring April 29, 2027, following initial `-00` publication on March 29, 2026), the specification is not adopted by an IETF working group. [1][4][5] Revision `-07` introduced a mandatory `principal` object binding each record to the authorizing party, while verifiers processing mixed-revision archives from `-06` or earlier treat its absence as `principal not recorded` rather than a validation failure. [1]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Account](/category/account/) (`account`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | Raza Sharif (CyberSecAI Ltd, London) [1][6][7] |\n| **Governed by** | Individual IETF Internet-Draft (`Intended status: Standards Track`, `IESG state: I-D Exists`, no Working Group); portal at `aat-standard.org` [1][4][8] |\n| **Track** | Individual IETF Internet-Draft (`draft-sharif-agent-audit-trail-09`, Intended status: Standards Track) and author-maintained standard portal (`aat-standard.org`) [1][7] |\n| **Status** | Active Internet-Draft (individual submission), Intended status: Standards Track; not a Working Group document [1][4][8] |\n| **Version** | `draft-sharif-agent-audit-trail-09` (`2026-10-26`, expires `2027-04-29`); `aat-mcp` `v0.1.0` (`2026-09-29`); `aat-verify` `v0.1.0` (`2026-09-15`) [1][4][8] |\n| **Wire format** | UTF-8 JSON Lines (`.jsonl`, primary), RFC 5424 Syslog (`FACILITY local0 (16)`, `SD-ID \"aat@IANA-PEN\"` — draft Private Enterprise Number placeholder rather than an assigned IANA PEN registration — with JCS `MSG`), and RFC 4180 CSV [1][9][10] |\n| **Specification** | [draft-sharif-agent-audit-trail-09.txt](https://www.ietf.org/archive/id/draft-sharif-agent-audit-trail-09.txt) · [IETF Datatracker](https://datatracker.ietf.org/doc/draft-sharif-agent-audit-trail/) · [aat-standard.org](https://aat-standard.org/) · [aat-mcp README](https://raw.githubusercontent.com/razashariff/aat-mcp/main/README.md) [1][7][8] |\n| **Found at** | Transport-agnostic log format (no network discovery endpoint); Syslog `SD-ID \"aat@IANA-PEN\"` (draft Private Enterprise Number placeholder rather than an assigned IANA PEN registration) and in-record `prev_hash` / `signer_kid` (RFC 7638) fields [1][10] |\n| **Licence** | IETF Trust Revised BSD License (spec code); IETF IPR `#7609` (`GB2606543.3`, superseding `#7559`) RF-RAND with defensive suspension; `aat-mcp` Apache-2.0 [1][6][11] |\n| **IETF state** | `draft-sharif-agent-audit-trail-09` · **Active Internet-Draft** (expires 2027-04-29) · Individual · as of 2026-10-30 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-sharif-agent-audit-trail/)) |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [Adoption and ecosystem](#adoption-and-ecosystem)\n4. [See also](#see-also)\n5. [References](#references)\n\n---\n\n## Problem and scope\n\nThe EU Artificial Intelligence Act (Regulation (EU) 2024/1689) Article 12 requires that high-risk AI systems technically allow for the automatic recording of events (`logs`) over the lifetime of the system in conformance with recognized standards or common specifications. Despite this regulatory mandate, no standardized wire format exists for how autonomous AI agents should log their activities across vendors. [1] Furthermore, a post-execution log can be syntactically conformant to the `-00` record format while providing no evidence that a policy gate evaluated or blocked an action before execution. [1] AAT binds each action to a `record_phase` (`pre_execution`, `post_execution`, or `concurrent`) and requires `record_phase` set to `pre_execution` whenever a `decision` record has an `outcome` of `denied` or `escalated`, proving the policy evaluation occurred before execution rather than in an after-the-fact log. [1] The regulatory mappings are INFORMATIVE. They indicate where AAT records can supply evidence relevant to an obligation; they are not a compliance assessment and do not assert that adopting AAT satisfies any regulation or standard. [1] It does not define identity, delegation or authorization; it records the outcome of them and expects those from WIMSE / OAuth work. [12]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **JSON Canonicalization Scheme (JCS, RFC 8785)** | `RFC 8785` | Profiles classic standard | Each audit record is JSON whose SHA-256 hash chain is computed over RFC 8785 canonical JSON, with ECDSA signatures optional. [1][9] |\n| **IETF SCITT & C2PA Content Credentials** | `RFC 9943 (SCITT)` | Analogous to classic standard | The Agent Audit Trail hash-chains its own JSON records and treats a SCITT anchor as optional, while the SCITT agent profile stores a COSE-signed AgentInteractionRecord with an evidence custodian. [1][13] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[An Audit Record Format for AI Agent Authorization Decisions](/protocols/wimse-agent-audit-record/)** | Peer alternative | The WIMSE audit record is an in-toto/DSSE authorization-decision format, while the Agent Audit Trail is a SHA-256 hash over RFC 8785 JSON with optional ECDSA. [1][14] |\n| **[AI Agent Execution Profile of SCITT](/protocols/scitt-ai-agent-execution/)** | Peer alternative | The SCITT AI profile registers a COSE-signed AgentInteractionRecord at air-1.0 with an evidence custodian, while the Agent Audit Trail chains RFC 8785 JSON in the operator's own log. [1][3] |\n| **[OpenTelemetry GenAI Semantic Conventions (agents and MCP)](/protocols/otel-genai-semconv/)** | Peer alternative | OpenTelemetry GenAI conventions name span and metric attributes for the operator's tracer, while an Agent Audit Trail record is a hash-chained JSON log with identity, principal, action, outcome, and trust level. [1][15] |\n| **[SPIFFE (Secure Production Identity Framework for Everyone)](/protocols/spiffe/)** | Complements | SPIFFE defines the workload SVID, while the Agent Audit Trail is the separate hash-chained JSON log of identity, principal, action, outcome, and trust level. [1][16] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (9 probed or cited examples; non-exhaustive).*\n\n### Issuers, signers & metadata publishers\n\n| Actor | Role | Status | Boundary & Format | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **CyberSecAI aat-mcp** | Audit emitter | Supported · as of 2026-09-29 | PyPI `aat-mcp` `0.1.0`, uploaded 2026-09-29 by cybersecai. MCP middleware that records each tool invocation as a signed, hash-chained AAT record conformant to `draft-sharif-agent-audit-trail-06` (`principal` became mandatory in `-07`, after `aat-mcp` `0.1.0`'s stated `-06` target). Coverage named in the draft's implementation section: record format (Section 3), hash chaining (Section 6), and ES256 signatures, with offline independent verification. | [aat-mcp README](https://raw.githubusercontent.com/razashariff/aat-mcp/main/README.md) [11] · [PyPI aat-mcp](https://pypi.org/pypi/aat-mcp/json) [17] · [draft-sharif-agent-audit-trail-09](https://www.ietf.org/archive/id/draft-sharif-agent-audit-trail-09.txt) [1] |\n| **Agent Console / Testigo** | Audit emitter | Supported · checked 2026-10-30 | Testigo (src-tauri/src/services/aat_export.rs) exports every agent session as a draft-sharif-agent-audit-trail-08 JSONL file. The chain is SHA-256 over RFC 8785 canonical JSON. Appendix E of draft -09 lists this exporter. The same tree ships aat-verify.mjs for offline checks. | [Agent Console README](https://raw.githubusercontent.com/cyl-castillo/agent-console/main/README.md) [18] · [draft-sharif-agent-audit-trail-09](https://www.ietf.org/archive/id/draft-sharif-agent-audit-trail-09.txt) [1] |\n| **Ujex (ujex-compliance-callback)** | Audit emitter | Experimental · as of 2026-06-18 | PyPI ujex-compliance-callback 0.1.1, uploaded 2026-06-18 by axysar. Drop-in callbacks for LangChain, LangGraph, CrewAI, AutoGen, and PydanticAI stream events into a hash-chained ledger aimed at draft-sharif-agent-audit-trail-00. The current draft revision is -09. | [PyPI ujex-compliance-callback](https://pypi.org/pypi/ujex-compliance-callback/json) [19] |\n| **Mindburn Labs (helm-ai-kernel)** | Audit emitter | Supported · as of 2026-10-22 | Mindburn-Labs/helm-ai-kernel describes a fail-closed execution firewall that quarantines MCP tools, proxies OpenAI-compatible requests, and emits signed receipts. Sharif's 2026-10-22 note to the IETF AUDIT list calls it an independent implementation of the AAT schema, JCS canonicalization, and the SHA-256 hash chain. | [Mindburn-Labs/helm-ai-kernel](https://github.com/Mindburn-Labs/helm-ai-kernel) [20] · [AUDIT list, 2026-10-22](https://mailarchive.ietf.org/arch/msg/audit/7jINjQq00C5Wu3_Z3qe-E0ikIe4/) [12] |\n| **Keyorix** | Audit emitter | Design accepted (no implementation) · checked 2026-10-30 | Appendix E of `draft-sharif-agent-audit-trail-09` records `keyorixhq/keyorix`: accepted architecture decision record `ADR-118` maps its on-premises secrets manager agent evidence ledger onto AAT pre-execution recording (Section 4), with the design accepted and no implementation available at the time of writing. | [draft-sharif-agent-audit-trail-09](https://www.ietf.org/archive/id/draft-sharif-agent-audit-trail-09.txt) [1] · [keyorixhq/keyorix](https://github.com/keyorixhq/keyorix) [21] |\n\n### Verifiers, WAFs & relying servers\n\n| Actor | Role | Status | Boundary & Format | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **CyberSecAI aat-verify** | Verifier / Audit parser | Supported · as of 2026-09-15 | PyPI aat-verify 0.1.0, uploaded 2026-09-15 by cybersecai. Standalone reference verifier for draft-sharif-agent-audit-trail. The draft chains records with SHA-256 over RFC 8785 canonical JSON and requires agent identity, the authorizing principal, action classification, outcome, and trust level. ECDSA signatures are optional. aat-mcp's own text also says it can verify a chain offline against a public key. | [PyPI aat-verify](https://pypi.org/pypi/aat-verify/json) [22] · [draft-sharif-agent-audit-trail-09](https://www.ietf.org/archive/id/draft-sharif-agent-audit-trail-09.txt) [1] |\n| **Agent Console aat-verify.mjs** | Verifier / Audit parser | Supported · checked 2026-10-30 | Dependency-free Node verifier shipped beside Testigo. It checks the exported JSONL ledger offline. The ledger is SHA-256 over RFC 8785, conformant to draft-sharif-agent-audit-trail-08. The same README also describes a browser check of signed proof packets and a reproducible auditor zip. | [Agent Console README](https://raw.githubusercontent.com/cyl-castillo/agent-console/main/README.md) [18] |\n| **Last Record (kbipul/last-record)** | Verifier / Audit parser | Supported · as of 2026-09-18 | Browser and CLI checker, repository created 2026-09-18. It takes an agent tool-call log, checks each record against the draft's mandatory fields, and recomputes the SHA-256 hash chain. The repository description says the point is to show what that chain cannot prove, including after the tail of the log is cut. | [Last Record README](https://raw.githubusercontent.com/kbipul/last-record/main/README.md) [23] · [kbipul/last-record](https://github.com/kbipul/last-record) [24] |\n| **Mindburn Labs (helm-ai-kernel)** | Verifier / Audit parser | Supported · as of 2026-10-22 | The repository description says the firewall verifies EvidencePacks offline. Sharif's 2026-10-22 AUDIT list note calls the same tree an independent implementation of AAT JCS canonicalization and the SHA-256 hash chain, so the offline check is that chain. | [Mindburn-Labs/helm-ai-kernel](https://github.com/Mindburn-Labs/helm-ai-kernel) [20] · [AUDIT list, 2026-10-22](https://mailarchive.ietf.org/arch/msg/audit/7jINjQq00C5Wu3_Z3qe-E0ikIe4/) [12] |\n\n---\n\n## See also\n\n- **[Agent Delegation Receipts](/protocols/agent-delegation-receipts/)** *(Complements)* — The Agent Audit Trail hash-chains records with SHA-256 over RFC 8785 JSON, while a delegation receipt is one JWS or COSE_Sign1 document binding the operator-instruction hash.\n- **Category:** [Account protocols](/category/account/)\n\n---\n\n## References\n\n1. R. Sharif (CyberSecAI Ltd), *Agent Audit Trail: A Standard Logging Format for Autonomous AI Systems (draft-sharif-agent-audit-trail-09)* (draft-sharif-agent-audit-trail-09; 26 October 2026) — <https://www.ietf.org/archive/id/draft-sharif-agent-audit-trail-09.txt>\n2. IETF Datatracker, *draft-gilda-audit-agent-audit-record — An Audit Record Format for AI Agent Authorization Decisions (IETF Datatracker)* (Last updated 2026-10-29) — <https://datatracker.ietf.org/doc/draft-gilda-audit-agent-audit-record/>\n3. Pinar Emirdag and Daniel Feichtinger (Veridic Inc.), *AI Agent Execution Profile of SCITT (draft-emirdag-scitt-ai-agent-execution-01)* (2026-10-12) — <https://www.ietf.org/archive/id/draft-emirdag-scitt-ai-agent-execution-01.txt>\n4. IETF Datatracker JSON Metadata, *IETF Datatracker document JSON metadata for draft-sharif-agent-audit-trail* (checked 2026-10-29) — <https://datatracker.ietf.org/doc/draft-sharif-agent-audit-trail/doc.json>\n5. Raza Sharif (CyberSecAI Ltd), *Agent Audit Trail: A Standard Logging Format for Autonomous AI Systems (draft-sharif-agent-audit-trail-00)* (checked 2026-10-29) — <https://www.ietf.org/archive/id/draft-sharif-agent-audit-trail-00.txt>\n6. IETF Datatracker IPR Disclosure #7609, *IPR Details - Raza Al-Rehman Sharif's Statement about IPR related to draft-sharif-agent-audit-trail, draft-sharif-openid-agent-identity, and draft-sharif-aeba* (checked 2026-10-29) — <https://datatracker.ietf.org/ipr/7609/>\n7. CyberSecAI Ltd, *Agent Audit Trail (AAT) — AI Agent Audit Log & Evidence Standard* (checked 2026-10-29) — <https://aat-standard.org/>\n8. R. Sharif (CyberSecAI Ltd), *draft-sharif-agent-audit-trail — Agent Audit Trail: A Standard Logging Format for Autonomous AI Systems (IETF Datatracker)* (checked 2026-10-30) — <https://datatracker.ietf.org/doc/draft-sharif-agent-audit-trail/>\n9. A. Rundgren, B. Jordan, and S. Erdtman, *RFC 8785: JSON Canonicalization Scheme (JCS)* (June 2020) — <https://www.rfc-editor.org/rfc/rfc8785.html>\n10. R. Gerhards, *RFC 5424: The Syslog Protocol* (checked 2026-10-29) — <https://www.rfc-editor.org/rfc/rfc5424.html>\n11. razashariff/aat-mcp (GitHub), *aat-mcp* (checked 2026-10-30) — <https://raw.githubusercontent.com/razashariff/aat-mcp/main/README.md>\n12. Raza Sharif (IETF AUDIT Mailing List Archive), *[Audit] Individual draft + running code: draft-sharif-agent-audit-trail-08 (agent audit record format)* (checked 2026-10-29) — <https://mailarchive.ietf.org/arch/msg/audit/7jINjQq00C5Wu3_Z3qe-E0ikIe4/>\n13. H. Birkholz, A. Delignat-Lavaud, C. Fournet, Y. Deshpande, and S. Lasker, *RFC 9943: An Architecture for Trustworthy and Transparent Digital Supply Chains* (June 2026) — <https://www.rfc-editor.org/rfc/rfc9943.html>\n14. S. Gilda, *An Audit Record Format for AI Agent Authorization Decisions (draft-gilda-audit-agent-audit-record-03)* (29 October 2026) — <https://www.ietf.org/archive/id/draft-gilda-audit-agent-audit-record-03.txt>\n15. OpenTelemetry, *Semantic Conventions for GenAI agent and framework spans* (Status: Development; fetched 2026-10-31) — <https://github.com/open-telemetry/semantic-conventions-genai/blob/main/docs/gen-ai/gen-ai-agent-spans.md>\n16. SPIFFE, *SPIFFE ID* (checked 2026-10-30) — <https://github.com/spiffe/spiffe/blob/main/standards/SPIFFE-ID.md>\n17. PyPI JSON API, *aat-mcp* (checked 2026-10-29) — <https://pypi.org/pypi/aat-mcp/json>\n18. Agent Console / Testigo, *Agent Console* (checked 2026-10-30) — <https://raw.githubusercontent.com/cyl-castillo/agent-console/main/README.md>\n19. PyPI JSON API, *ujex-compliance-callback* (checked 2026-10-29) — <https://pypi.org/pypi/ujex-compliance-callback/json>\n20. GitHub REST API, *Mindburn-Labs/helm-ai-kernel* (checked 2026-10-29) — <https://github.com/Mindburn-Labs/helm-ai-kernel>\n21. GitHub REST API, *keyorixhq/keyorix* (checked 2026-10-29) — <https://github.com/keyorixhq/keyorix>\n22. PyPI JSON API, *aat-verify* (checked 2026-10-29) — <https://pypi.org/pypi/aat-verify/json>\n23. Bipul (*kbipul/last-record*), *README.md (Last Record)* (checked 2026-10-30) — <https://raw.githubusercontent.com/kbipul/last-record/main/README.md>\n24. GitHub REST API, *kbipul/last-record* (checked 2026-10-29) — <https://github.com/kbipul/last-record>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "slim",
   "hatnote_md": "This page is about Secure Low-Latency Interactive Messaging (SLIM), the AGNTCY project's secure messaging layer that carries agent protocols over gRPC with optional end-to-end encryption by Messaging Layer Security (MLS). It is not an agent protocol in its own right: the [Agent2Agent Protocol (A2A)](/protocols/a2a/) and the [Model Context Protocol (MCP)](/protocols/mcp/) can run over it. It is not IBM's [Agent Communication Protocol (ACP)](/protocols/agent-communication-protocol/), and it is not AGNTCY's [Agent Connect Protocol (ACP)](/protocols/agent-connect-protocol/). For AGNTCY's agent records and directory, see the [Open Agentic Schema Framework (OASF)](/protocols/oasf/) and the [Agent Directory Service (ADS)](/protocols/ads/); for the workload identity that SLIM can use, see [SPIFFE](/protocols/spiffe/).",
   "name": "Secure Low-Latency Interactive Messaging (SLIM)",
   "acronym": "SLIM",
   "adoption": {
    "level": "observed",
    "by": "agntcy/slim, a2a-slimrpc (A2A server bindings), and a2a-slimrpc (A2A client bindings)",
    "probe_run": null
   },
   "aliases": [
    "AGNTCY SLIM",
    "draft-mpsb-agntcy-slim"
   ],
   "analog": "gRPC + MLS session/routing overlay for agent protocols",
   "collisions": [],
   "discovery": {
    "mechanism": "No discovery file of its own. Applications are addressed by hierarchical names (`organization/namespace/service/id`) where the final `id` addresses an instance, supporting anycast and unicast routing as well as service discovery",
    "path": "none — hierarchical name routing (`organization/namespace/service/id`)"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.ietf.org/archive/id/draft-mpsb-agntcy-slim-03.txt",
     "claim": "L. Muscariello, M. Papalini, M. Sardara, and S. Betts (Cisco), *Secure Low-Latency Interactive Messaging (SLIM) (draft-mpsb-agntcy-slim-03)*, 2 November 2026; expires 6 May 2027",
     "date": null,
     "quote": "This document specifies the Secure Low-Latency Interactive Messaging (SLIM), a protocol designed to support real-time interactive AI applications at scale. SLIM provides a name-routed messaging data plane and session layer for agent protocols such as A2A and MCP. The data plane carries Protocol Buffers messages over streaming gRPC on HTTP/2 or WebSocket, while the session layer provides point-to-point and group communication, configurable reliable delivery, and optional end-to-end encryption using MLS. / L. Muscariello Internet-Draft M. Papalini Intended status: Informational M. Sardara Expires: 6 May 2027 S. Betts Cisco 2 November 2026 / SLIM carries Protocol Buffers messages over streaming gRPC using HTTP/2, or over WebSocket. The transport is hop-by-hop and may be protected with TLS; transport-layer encryption is independent of session-layer security. / Figure 3: SLIM message structure carrying channel name, forwarding metadata, session information, and content. / - SLIM Header: Identifies endpoints and carries routing and integrity fields. - Session Header: Present for session-layer messages. - Content: Application data or a session/control payload. / This Internet-Draft will expire on 6 May 2027. / This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79. / Intended status: Informational / draft-mpsb-agntcy-slim-03 / Cohn-Gordon, \"The Messaging Layer Security (MLS) Protocol\", RFC 9420, DOI 10.17487/RFC9420, / SLIM employs hierarchical names of the form organization/namespace/service/id. / Copyright (c) 2026 IETF Trust and the persons identified as the document authors. / Without MLS, application content is not protected from routing nodes beyond any transport encryption in use. / When enabled for a session, MLS [RFC9420] [RFC9750] encrypts application content at the endpoints. Routing nodes can then forward the encrypted content without learning its plaintext. / A moderator invites and removes members. When MLS is enabled, the session layer exchanges MLS updates over SLIM channels; routing nodes provide message delivery and do not act as an MLS authentication service. / MLS is optional; deployments that do not enable it rely on the configured transport security. / MLS-based group encryption and identity binding are optional capabilities; the security properties provided depend on deployment configuration. / SLIMRPC builds request/response and streaming RPC over SLIM sessions (see [SLIMRPC]); it is an application-layer facility rather than a data-plane message type. / Delivery retries and acknowledgements are configurable; they are not guaranteed for every session. / An optional, separate control plane configures and manages routing nodes; it is not in the message path.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://www.linuxfoundation.org/press/linux-foundation-welcomes-the-agntcy-project-to-standardize-open-multi-agent-system-infrastructure-and-break-down-ai-agent-silos",
     "claim": "The Linux Foundation, *Linux Foundation Welcomes the AGNTCY Project*, checked 2026-10-29",
     "date": null,
     "quote": "today welcomed the AGNTCY project, an open source infrastructure that enables discovery, identity, messaging, and observability among AI agents from different vendors and frameworks. / a formative member of the Linux Foundation's AGNTCY project is one such step towards",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://datatracker.ietf.org/doc/draft-mpsb-agntcy-slim/",
     "claim": "L. Muscariello, M. Papalini, M. Sardara, and S. Betts (Cisco), *draft-mpsb-agntcy-slim — Secure Low-Latency Interactive Messaging (SLIM) (IETF Datatracker)*, checked 2026-10-29",
     "date": null,
     "quote": "Active Internet-Draft (individual) / This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. / previous authors: Luca Muscariello, Mauro Sardara, Michele Papalini, Sam Betts | | 2026-02-24 | / IESG state | | I-D Exists / at https://github.com/agntcy/slim-spec. Status of This Memo This Internet-Draft is submitted in full conformance with",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://github.com/agntcy/slim",
     "claim": "AGNTCY, *agntcy/slim repository metadata*, checked 2026-10-29",
     "date": null,
     "quote": "\"releases_url\": \"https://api.github.com/repos/agntcy/slim/releases{/id}\", \"deployments_url\": \"https://api.github.com/repos/agntcy/slim/deployments\", \"created_at\": \"2025-02-05T19:44:53Z\", \"updated_at\": / \"full_name\":\"agntcy/slim\" / \"license\": { \"key\": \"apache-2.0\", \"name\": \"Apache License 2.0\"",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://raw.githubusercontent.com/agntcy/slim/main/MAINTAINERS.md",
     "claim": "AGNTCY, *MAINTAINERS.md*, checked 2026-10-29",
     "date": null,
     "quote": "# Maintainers - msardara, Mauro Sardara - micpapal, Michele Papalini - muscariello, Luca Muscariello",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://github.com/agntcy/slim/releases",
     "claim": "AGNTCY, *agntcy/slim release list*, checked 2026-10-29",
     "date": null,
     "quote": ".com/agntcy/slim/releases/tag/slim-v3.4.6\", \"id\": 418646350, \"author\": { \"login\": \"build-a / \"https://api.github.com/users/build-agntcy/received_events\", \"type\": \"User\", \"user_view_type\": \"public\", \"site_admin\": false }, \"node_id\": \"RE_kwDON08_8M4Y02Zx\", \"tag_name\": \"slim-control-plane-v3.4.5\",",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://pypi.org/pypi/slim-bindings/json",
     "claim": "PyPI, *slim-bindings*, checked 2026-10-29",
     "date": null,
     "quote": "pypi.org/project/slim-bindings/3.3.9/\",\"requires_dist\"",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://pypi.org/pypi/slima2a/json",
     "claim": "PyPI, *slima2a*, checked 2026-10-29",
     "date": null,
     "quote": "pypi.org/project/slima2a/0.9.3/\",\"requires_dist\"",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://pypi.org/pypi/slim-mcp/json",
     "claim": "PyPI, *slim-mcp*, checked 2026-10-29",
     "date": null,
     "quote": "pypi.org/project/slim-mcp/0.2.3/\",\"requires_dist\"",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://slim.agntcy.org/latest/slim/slim-overview/",
     "claim": "SLIM, *Introduction - SLIM*, checked 2026-10-29",
     "date": null,
     "quote": "HTTP/2 - multiplexed, efficient, and NAT/firewall-friendly without any special configuration End-to-end encryption MLS (RFC / \"version\": {\"provider\": \"mike\"}} connection: close content-length: 97589 server: GitHub.com content-type: text/html; charset=utf-8 last-modified: Thu, / organization/namespace/service/ Group channels use the same four-component scheme. Each group gets two channel names / Routing Sessions Sessions Point to Point Groups Authentication Components Components SLIM Data Plane SLIM",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://raw.githubusercontent.com/agntcy/slim/main/CHANGELOG.md",
     "claim": "AGNTCY, *CHANGELOG.md*, checked 2026-10-29",
     "date": null,
     "quote": "A full WebSocket transport (alongside the existing gRPC transport) built on hyper/fastwebsockets, sharing the same auth pipeline, proxy machinery, and config entry points",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://slim.agntcy.org/latest/slim/integrations/a2a/",
     "claim": "SLIM, *A2A - SLIM*, checked 2026-10-29",
     "date": null,
     "quote": "experimental specification in the A2A project. The protocolBinding identifier is: https://a2a-protocol.org/bindings/experimental-slimrpc/v1 SLIM carries A2A / provides a fourth, experimental binding: SLIMRPC. Instead of HTTP, it uses SLIM's encrypted session",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://raw.githubusercontent.com/grpc/grpc/master/doc/PROTOCOL-HTTP2.md",
     "claim": "gRPC Authors, *gRPC over HTTP2 Wire Protocol*, fetched 2026-11-12",
     "date": null,
     "quote": "This document serves as a detailed description for an implementation of gRPC carried over <a href=\"https://tools.ietf.org/html/rfc7540\">HTTP2 framing</a>.",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://www.rfc-editor.org/rfc/rfc9420.html",
     "claim": "R. Barnes, B. Beurdouche, R. Robert, J. Millican, E. Omara, and K. Cohn-Gordon, *RFC 9420: The Messaging Layer Security (MLS) Protocol*, July 2023",
     "date": null,
     "quote": "Messaging applications are increasingly making use of end-to-end",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://aaif.io/blog/a2a-joins-aaif",
     "claim": "Agentic AI Foundation, *A2A joins AAIF's open agentic stack*, published 2026-08-17; modified 2026-09-24",
     "date": null,
     "quote": "A2A v1.0, the first stable specification, shipped in March 2026.",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Current : the current protocol version, which is ready for use and may continue to receive backwards compatible changes.",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://www.ietf.org/archive/id/draft-mp-agntcy-ads-03.txt",
     "claim": "L. Muscariello and R. Polic (Cisco), *Agent Directory Service (draft-mp-agntcy-ads-03)*, 2 November 2026",
     "date": null,
     "quote": "Intended status: Informational ... The latest revision of this draft can be found at https://spec.dir.agncty.org. ... Source for this draft and an issue tracker can be found at https://github.com/agntcy/dir. ... work in progress. ... This Internet-Draft will expire on 6 May 2027.",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://github.com/agntcy/oasf/releases",
     "claim": "AGNTCY, *agntcy/oasf releases*, checked 2026-10-31",
     "date": null,
     "quote": "\"html_url\": \"https://github.com/agntcy/oasf/releases/tag/v1.1.0\", \"id\": 352159727, \"author\": { \"login\": \"github-actions[bot]\", \"id\": 41898282, \"node_id\": \"MDM6Qm90NDE4OTgyODI=\", \"avatar_url\":",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://schema.oasf.outshift.com/1.1.0/modules",
     "claim": "AGNTCY (Open Agentic Schema Framework), *OASF schema 1.1.0 modules*, fetched 2026-10-30",
     "date": null,
     "quote": "Agent Connect Protocol manifest DEPRECATED since v0.8.0 ACP is deprecated, please use A2A instead.",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://slim.agntcy.org/latest/slim/architecture/sessions/group/",
     "claim": "SLIM, *Groups - SLIM*, checked 2026-10-29",
     "date": null,
     "quote": "When MLS is disabled, the group still has consistent membership state and reliable delivery, but messages are not end-to-end encrypted beyond whatever transport-layer TLS is in use.",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://github.com/a2aproject/a2a-rs/tree/main/a2a-slimrpc",
     "claim": "a2aproject, *a2a-rs/a2a-slimrpc*, checked 2026-10-29",
     "date": null,
     "quote": "The peer keys are set only when the session uses MLS (the SLIMRPC default), since MLS is what verifies the token.",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://github.com/a2aproject/experimental-cpb-slimrpc",
     "claim": "a2aproject, *SLIMRPC custom protocol binding for A2A*, checked 2026-10-29",
     "date": null,
     "quote": "Status: Experimental — This is a community-contributed custom protocol binding for A2A. It is not part of the core A2A specification.",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://a2a-protocol.org/latest/topics/custom-protocol-bindings/",
     "claim": "A2A Protocol, *Custom Protocol Bindings - A2A Protocol*, checked 2026-10-29",
     "date": null,
     "quote": "The A2A protocol ships with three standard bindings (JSON-RPC, gRPC, and HTTP+JSON/REST) that cover the majority of deployment scenarios.",
     "ref": 23
    }
   ],
   "form": "endpoint",
   "governance": "The AGNTCY project at the Linux Foundation (announced 2025-07-29; formative members: Cisco, Dell Technologies, Google Cloud, Oracle, Red Hat; 8-member Technical Steering Committee; 5 SLIM repository maintainers; Apache-2.0)",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "new record created during coordinate-step verification; verified against github.com/agntcy/slim README, Linux Foundation/AGNTCY donation coverage, and the IETF individual draft draft-mpsb-agntcy-slim-00"
    },
    {
     "date": "2026-10-16",
     "note": "draft-mpsb-agntcy-slim-02 is dated 2026-07-19"
    },
    {
     "date": "2026-10-29",
     "note": "Expanded primary-source verified record across 39 primary sources including slim-v3.4.6 / slimctl-v3.4.6, draft-mpsb-agntcy-slim-02, draft-mpsb-agntcy-messaging-02, IETF 126 DMSC minutes, a2aproject/experimental-cpb-slimrpc, a2a-slimrpc, SEP-2598, and Remaker-Digital/agntcy-on-azure"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "implementation": "shipping",
   "last_verified": "2026-11-12",
   "native_status": "Released open-source software at major version 3 (slim-v3.4.6 / slimctl-v3.4.6, 2026-10-20); individual IETF Internet-Draft draft-mpsb-agntcy-slim-03 in state \"I-D Exists\" (Intended status: Informational; dated 2 November 2026; expires 6 May 2027)",
   "origin": {
    "date": "2025-02-05",
    "org": "Outshift by Cisco, within AGNTCY (IETF draft authors: L. Muscariello, M. Papalini, M. Sardara, S. Betts, all at Cisco)"
   },
   "part_of": null,
   "parties": [
    "agent-agent"
   ],
   "phase": "draft",
   "probe": {
    "method": "none",
    "on_absent": "not applicable — SLIM has no well-known discovery surface; applications are addressed by hierarchical names (organization/namespace/service/instance)",
    "parse": "not applicable: there is no HTTP discovery document to parse",
    "path": "none — SLIM is a session/routing layer over gRPC (HTTP/2 and HTTP/3)"
   },
   "question": "How can agents send secure, low-latency, group-aware messages (point-to-point, pub/sub, fire-and-forget, streaming) as a transport underneath higher-level protocols like A2A and MCP?",
   "scope": "general",
   "spec_url": "https://www.ietf.org/archive/id/draft-mpsb-agntcy-slim-03.txt",
   "step": "coordinate",
   "summary_md": "**Secure Low-Latency Interactive Messaging** (SLIM), `draft-mpsb-agntcy-slim-03`, specifies a name-routed messaging data plane and session layer for agent protocols such as A2A and MCP. The data plane carries Protocol Buffers messages over streaming gRPC on HTTP/2 or WebSocket, and the session layer provides point-to-point and group communication, configurable reliable delivery, and optional end-to-end encryption using MLS. L. Muscariello, M. Papalini, M. Sardara, and S. Betts of Cisco are the authors, and the draft is dated 2 November 2026. The Linux Foundation welcomed the AGNTCY project as open source infrastructure that enables discovery, identity, messaging, and observability among AI agents from different vendors and frameworks. SLIM carries Protocol Buffers messages over streaming gRPC using HTTP/2, or over WebSocket. The transport is hop-by-hop and may be protected with TLS, and transport-layer encryption is independent of session-layer security. Figure 3 names a SLIM Header, a Session Header, and Content. The SLIM Header identifies endpoints and carries routing and integrity fields. The Session Header is present for session-layer messages. Content is application data or a session/control payload. `draft-mpsb-agntcy-slim-03` is an Internet-Draft dated 2 November 2026. Its intended status is Informational, and this Internet-Draft will expire on 6 May 2027. The Datatracker lists the document type as Active Internet-Draft (individual). This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process.",
   "track": "linux-foundation",
   "version": {
    "label": "slim-v3.4.6 / slimctl-v3.4.6 (2026-10-20); draft-mpsb-agntcy-slim-03 (2 November 2026)",
    "date": "2026-11-02"
   },
   "watch": [
    {
     "type": "github",
     "repo": "agntcy/slim",
     "mode": "release",
     "version": false
    },
    {
     "type": "ietf",
     "doc": "draft-mpsb-agntcy-slim"
    }
   ],
   "use_cases": [
    "agent-to-agent-messaging",
    "expose-tools-to-agents"
   ],
   "audience": [
    "agent-builder",
    "platform",
    "standards-body"
   ],
   "pairs_with": [
    "a2a",
    "mcp",
    "ads",
    "oasf",
    "agent-connect-protocol"
   ],
   "prerequisites": [],
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "harnesses_rpc_ui",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "This page is about Secure Low-Latency Interactive Messaging (SLIM), the AGNTCY project's secure messaging layer that carries agent protocols over gRPC with optional end-to-end encryption by Messaging Layer Security (MLS). It is not an agent protocol in its own right: the [Agent2Agent Protocol (A2A)](/protocols/a2a/) and the [Model Context Protocol (MCP)](/protocols/mcp/) can run over it. It is not IBM's [Agent Communication Protocol (ACP)](/protocols/agent-communication-protocol/), and it is not AGNTCY's [Agent Connect Protocol (ACP)](/protocols/agent-connect-protocol/). For AGNTCY's agent records and directory, see the [Open Agentic Schema Framework (OASF)](/protocols/oasf/) and the [Agent Directory Service (ADS)](/protocols/ads/); for the workload identity that SLIM can use, see [SPIFFE](/protocols/spiffe/). [1]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Secure Low-Latency Interactive Messaging** (SLIM), `draft-mpsb-agntcy-slim-03`, specifies a name-routed messaging data plane and session layer for agent protocols such as A2A and MCP. The data plane carries Protocol Buffers messages over streaming gRPC on HTTP/2 or WebSocket, and the session layer provides point-to-point and group communication, configurable reliable delivery, and optional end-to-end encryption using MLS. [1] L. Muscariello, M. Papalini, M. Sardara, and S. Betts of Cisco are the authors, and the draft is dated 2 November 2026. The Linux Foundation welcomed the AGNTCY project as open source infrastructure that enables discovery, identity, messaging, and observability among AI agents from different vendors and frameworks. [1][2] SLIM carries Protocol Buffers messages over streaming gRPC using HTTP/2, or over WebSocket. The transport is hop-by-hop and may be protected with TLS, and transport-layer encryption is independent of session-layer security. [1] Figure 3 names a SLIM Header, a Session Header, and Content. The SLIM Header identifies endpoints and carries routing and integrity fields. The Session Header is present for session-layer messages. Content is application data or a session/control payload. [1] `draft-mpsb-agntcy-slim-03` is an Internet-Draft dated 2 November 2026. Its intended status is Informational, and this Internet-Draft will expire on 6 May 2027. [1] The Datatracker lists the document type as Active Internet-Draft (individual). This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. [3]",
   "v05_identity_sentence_md": "**Secure Low-Latency Interactive Messaging** (SLIM), `draft-mpsb-agntcy-slim-03`, specifies a name-routed messaging data plane and session layer for agent protocols such as A2A and MCP. The data plane carries Protocol Buffers messages over streaming gRPC on HTTP/2 or WebSocket, and the session layer provides point-to-point and group communication, configurable reliable delivery, and optional end-to-end encryption using MLS. [1] L. Muscariello, M. Papalini, M. Sardara, and S. Betts of Cisco are the authors, and the draft is dated 2 November 2026. The Linux Foundation welcomed the AGNTCY project as open source infrastructure that enables discovery, identity, messaging, and observability among AI agents from different vendors and frameworks. [1][2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Coordinate](/category/coordinate/) (`coordinate`)"
    },
    {
     "label": "Form",
     "value_md": "Endpoint (`endpoint`)"
    },
    {
     "label": "Originated by",
     "value_md": "Outshift by Cisco within AGNTCY (`2025-02-05`); IETF draft by L. Muscariello, M. Papalini, M. Sardara, and S. Betts (Cisco) [1][3][4]"
    },
    {
     "label": "Governed by",
     "value_md": "The AGNTCY Project (`AGNTCY, a Series of LF Projects, LLC`) at The Linux Foundation (8-member TSC; 5 SLIM maintainers); IETF individual draft [1][2][5]"
    },
    {
     "label": "Track",
     "value_md": "Linux Foundation AGNTCY project specification (`agntcy/slim`) and individual IETF Internet-Draft (`draft-mpsb-agntcy-slim-03`, Intended status: Informational) [1][2][4]"
    },
    {
     "label": "Status",
     "value_md": "Released open-source software at major version 3 (slim-v3.4.6 / slimctl-v3.4.6, 2026-10-20); individual IETF Internet-Draft draft-mpsb-agntcy-slim-03 in state \"I-D Exists\" (Intended status: Informational; dated 2 November 2026; expires 6 May 2027) [1][3][6]"
    },
    {
     "label": "Version",
     "value_md": "`slim-v3.4.6` / `slimctl-v3.4.6` (`2026-10-20`); `slim-bindings` `3.3.9` (`2026-10-27`); `slima2a` `0.9.3` (`2026-10-22`); `slim-mcp` `0.2.3` (`2026-06-24`); `draft-mpsb-agntcy-slim-03` (2 November 2026) [1][6][7][8][9]"
    },
    {
     "label": "Wire format",
     "value_md": "Protocol Buffers frames over multiplexed gRPC (`HTTP/2`) and WebSocket (`hyper`/`fastwebsockets`), carrying RFC 9420 MLS ciphertexts, `SLIMRPC` (`SRPC`) frames, and `XxHash3_128` 128-bit channel IDs [1][10][11]"
    },
    {
     "label": "Specification",
     "value_md": "[draft-mpsb-agntcy-slim-03](https://www.ietf.org/archive/id/draft-mpsb-agntcy-slim-03.txt) · [IETF Datatracker](https://datatracker.ietf.org/doc/draft-mpsb-agntcy-slim/) · [SLIM Docs](https://slim.agntcy.org/latest/slim/slim-overview/) · [A2A SLIMRPC Binding](https://github.com/a2aproject/experimental-cpb-slimrpc) [1][3][10]"
    },
    {
     "label": "Found at",
     "value_md": "No HTTP `.well-known` file; 4-part hierarchical names (`organization/namespace/service/id`), `SRPC` handler tokens (`c0/c1/c2-{package}.{service}-{handler}/c3`), A2A `protocolBinding` `https://a2a-protocol.org/bindings/experimental-slimrpc/v1`, and caller keys (`slim-src`, `slim-peer-subject`, `slim-peer-issuer`) [1][10][12]"
    },
    {
     "label": "Licence",
     "value_md": "Apache License 2.0 (`agntcy/slim`); IETF Trust Legal Provisions (`draft-mpsb-agntcy-slim-03`) [1][4]"
    }
   ],
   "v05_problem_md": "Without MLS, application content is not protected from routing nodes beyond any transport encryption in use. TLS protects a transport hop when enabled, and transport-layer encryption is independent of session-layer security. [1] When enabled for a session, MLS encrypts application content at the endpoints. Routing nodes can then forward the encrypted content without learning its plaintext. [1] A moderator invites and removes members. When MLS is enabled, the session layer exchanges MLS updates over SLIM channels. Routing nodes provide message delivery and do not act as an MLS authentication service. [1] MLS is optional, and deployments that do not enable it rely on the configured transport security. MLS-based group encryption and identity binding are optional capabilities, and the security properties provided depend on deployment configuration. [1] SLIMRPC builds request/response and streaming RPC over SLIM sessions, and it is an application-layer facility rather than a data-plane message type. [1] Delivery retries and acknowledgements are configurable; they are not guaranteed for every session. [1] An optional, separate control plane configures and manages routing nodes; it is not in the message path. [1]",
   "v05_mechanism_delta_md": "When enabled for a session, MLS encrypts application content at the endpoints. Routing nodes can then forward the encrypted content without learning its plaintext. [1] A moderator invites and removes members. When MLS is enabled, the session layer exchanges MLS updates over SLIM channels. Routing nodes provide message delivery and do not act as an MLS authentication service. [1]",
   "v05_scope_boundary_md": "MLS is optional, and deployments that do not enable it rely on the configured transport security. MLS-based group encryption and identity binding are optional capabilities, and the security properties provided depend on deployment configuration. [1] SLIMRPC builds request/response and streaming RPC over SLIM sessions, and it is an application-layer facility rather than a data-plane message type. [1] Delivery retries and acknowledgements are configurable; they are not guaranteed for every session. [1] An optional, separate control plane configures and manages routing nodes; it is not in the message path. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "gRPC over HTTP/2",
      "spec_or_rfc": "gRPC HTTP/2",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "SLIM carries agent protocols such as A2A and MCP over gRPC, routed by 4-part hierarchical names of the form organization/namespace/service/id (where the final ID addresses an instance), and A2A over SLIM is an experimental fourth binding called SLIMRPC that the core A2A specification does not include. [1][13]"
     },
     {
      "name": "The Messaging Layer Security (MLS) Protocol (RFC 9420)",
      "spec_or_rfc": "RFC 9420",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "SLIM uses MLS for end-to-end encryption that is optional for groups and the default for the A2A binding, and MLS does not define SLIM's hierarchical name routing or the SLIMRPC binding. [1][14]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "a2a",
      "target_name": "Agent2Agent Protocol (A2A)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "A2A over SLIM is an experimental fourth binding called SLIMRPC on SLIM's gRPC transport, with MLS encryption the default for that binding, and A2A's own specified bindings remain JSON-RPC 2.0 over HTTP(S), gRPC, and HTTP+JSON at the Agent Card. [1][15]"
     },
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "SLIM's draft offers a transport for agent protocols, and MCP's standard transports remain stdio and Streamable HTTP rather than SLIMRPC. [1][16]"
     },
     {
      "target_id": "ads",
      "target_name": "Agent Directory Service",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "ADS serves a host-local AI Finder at /.well-known/ai-catalog.json and GET /v1/agents, while SLIM delivers messages on its gRPC and MLS overlay once a peer is selected. [1][17]"
     },
     {
      "target_id": "oasf",
      "target_name": "Open Agentic Schema Framework",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "OASF is the versioned skill, domain, and module schema, while SLIM is the gRPC and MLS messaging overlay and does not define that taxonomy. [1][18]"
     },
     {
      "target_id": "agent-connect-protocol",
      "target_name": "Agent Connect Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Both come from the AGNTCY project, and ACP is the archived OpenAPI REST API at /agents/search while SLIM is the gRPC and MLS messaging layer. [1][19]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (3 probed or cited examples; non-exhaustive).",
    "side_a": {
     "visible": true,
     "heading": "Servers, repos & skill indexes",
     "col4_header": "Transport & Scope",
     "note_md": null,
     "rows": [
      {
       "actor": "agntcy/slim",
       "role": "Messaging node / Server",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-20",
       "col4_md": "Messaging node software slim-v3.4.6 with slimctl-v3.4.6 (published 2026-10-20). gRPC data plane routed by hierarchical names; Rust control plane. Group sessions optionally use MLS, with key rotation when membership changes. Carries A2A or MCP, or direct point-to-point and group messages.",
       "source_md": "[SLIM overview](https://slim.agntcy.org/latest/slim/slim-overview/) [10] · [slim-v3.4.6 release](https://github.com/agntcy/slim/releases) [6] · [Group sessions](https://slim.agntcy.org/latest/slim/architecture/sessions/group/) [20]"
      },
      {
       "actor": "a2a-slimrpc (A2A server bindings)",
       "role": "Messaging node / Server",
       "status": "Experimental",
       "status_display": "Experimental · as of 2026-05-14",
       "col4_md": "Crate a2aproject/a2a-rs/a2a-slimrpc: SLIMRPC bindings for A2A v1 server implementations. MLS is the SLIMRPC default and is what verifies the token (peer keys are set only for MLS sessions). SLIM docs call SLIMRPC a fourth, experimental A2A binding that uses the encrypted session layer instead of HTTP. a2aproject/experimental-cpb-slimrpc (created 2026-05-14) says it is not part of the core A2A specification.",
       "source_md": "[a2a-slimrpc](https://github.com/a2aproject/a2a-rs/tree/main/a2a-slimrpc) [21] · [SLIM A2A integration](https://slim.agntcy.org/latest/slim/integrations/a2a/) [12] · [experimental-cpb-slimrpc](https://github.com/a2aproject/experimental-cpb-slimrpc) [22]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "IDEs, hosts & coding agents",
     "col4_header": "Transport & Scope",
     "note_md": null,
     "rows": [
      {
       "actor": "a2a-slimrpc (A2A client bindings)",
       "role": "Client SDK / Runtime",
       "status": "Experimental",
       "status_display": "Experimental · checked 2026-10-30",
       "col4_md": "Same crate, a2a-rs/a2a-slimrpc: SLIMRPC bindings for A2A v1 clients. MLS is the default and verifies the token. experimental-cpb-slimrpc is marked Experimental and is not part of the core A2A specification. A2A's three standard bindings stay JSON-RPC, gRPC, and HTTP+JSON/REST.",
       "source_md": "[a2a-slimrpc](https://github.com/a2aproject/a2a-rs/tree/main/a2a-slimrpc) [21] · [Custom protocol bindings](https://a2a-protocol.org/latest/topics/custom-protocol-bindings/) [23] · [experimental-cpb-slimrpc](https://github.com/a2aproject/experimental-cpb-slimrpc) [22]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "nlip",
     "target_name": "Natural Language Interaction Protocol (NLIP)",
     "relation_label": "Complements",
     "delta": "SLIM (Secure Low-latency Interactive Messaging) is a secure peer-to-peer messaging framework. The `draft-mpsb-agntcy-slim-03` specification combines gRPC over HTTP/2 and HTTP/3 with secure messaging, and the SLIM overview uses MLS (RFC 9420) to encrypt data at the session layer. NLIP specifies the JSON message envelope and an HTTP POST binding, which is a different layer from that transport.",
     "item_md": "**[Natural Language Interaction Protocol (NLIP)](/protocols/nlip/)** (Complements) — SLIM (Secure Low-latency Interactive Messaging) is a secure peer-to-peer messaging framework. The `draft-mpsb-agntcy-slim-03` specification combines gRPC over HTTP/2 and HTTP/3 with secure messaging, and the SLIM overview uses MLS (RFC 9420) to encrypt data at the session layer. NLIP specifies the JSON message envelope and an HTTP POST binding, which is a different layer from that transport."
    },
    {
     "item_md": "**[Coordinate protocols](/category/coordinate/)** — Category index for `coordinate` standards."
    }
   ],
   "v05_compiled_md": "---\nid: slim\ntitle: \"Secure Low-Latency Interactive Messaging (SLIM)\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: coordinate\nform: endpoint\nwire_archetype: harnesses_rpc_ui\nspec_url: https://www.ietf.org/archive/id/draft-mpsb-agntcy-slim-03.txt\nlast_checked: 2026-11-12\n---\n\n# Secure Low-Latency Interactive Messaging (SLIM)\n\n**Category:** [Coordinate](/category/coordinate/) (`coordinate`) · **Form:** Endpoint (`endpoint`) · **Last checked:** 2026-11-12\n\n> *This page is about Secure Low-Latency Interactive Messaging (SLIM), the AGNTCY project's secure messaging layer that carries agent protocols over gRPC with optional end-to-end encryption by Messaging Layer Security (MLS). It is not an agent protocol in its own right: the [Agent2Agent Protocol (A2A)](/protocols/a2a/) and the [Model Context Protocol (MCP)](/protocols/mcp/) can run over it. It is not IBM's [Agent Communication Protocol (ACP)](/protocols/agent-communication-protocol/), and it is not AGNTCY's [Agent Connect Protocol (ACP)](/protocols/agent-connect-protocol/). For AGNTCY's agent records and directory, see the [Open Agentic Schema Framework (OASF)](/protocols/oasf/) and the [Agent Directory Service (ADS)](/protocols/ads/); for the workload identity that SLIM can use, see [SPIFFE](/protocols/spiffe/). [1]*\n\n**Secure Low-Latency Interactive Messaging** (SLIM), `draft-mpsb-agntcy-slim-03`, specifies a name-routed messaging data plane and session layer for agent protocols such as A2A and MCP. The data plane carries Protocol Buffers messages over streaming gRPC on HTTP/2 or WebSocket, and the session layer provides point-to-point and group communication, configurable reliable delivery, and optional end-to-end encryption using MLS. [1] L. Muscariello, M. Papalini, M. Sardara, and S. Betts of Cisco are the authors, and the draft is dated 2 November 2026. The Linux Foundation welcomed the AGNTCY project as open source infrastructure that enables discovery, identity, messaging, and observability among AI agents from different vendors and frameworks. [1][2] SLIM carries Protocol Buffers messages over streaming gRPC using HTTP/2, or over WebSocket. The transport is hop-by-hop and may be protected with TLS, and transport-layer encryption is independent of session-layer security. [1] Figure 3 names a SLIM Header, a Session Header, and Content. The SLIM Header identifies endpoints and carries routing and integrity fields. The Session Header is present for session-layer messages. Content is application data or a session/control payload. [1] `draft-mpsb-agntcy-slim-03` is an Internet-Draft dated 2 November 2026. Its intended status is Informational, and this Internet-Draft will expire on 6 May 2027. [1] The Datatracker lists the document type as Active Internet-Draft (individual). This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. [3]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Coordinate](/category/coordinate/) (`coordinate`) |\n| **Form** | Endpoint (`endpoint`) |\n| **Originated by** | Outshift by Cisco within AGNTCY (`2025-02-05`); IETF draft by L. Muscariello, M. Papalini, M. Sardara, and S. Betts (Cisco) [1][3][4] |\n| **Governed by** | The AGNTCY Project (`AGNTCY, a Series of LF Projects, LLC`) at The Linux Foundation (8-member TSC; 5 SLIM maintainers); IETF individual draft [1][2][5] |\n| **Track** | Linux Foundation AGNTCY project specification (`agntcy/slim`) and individual IETF Internet-Draft (`draft-mpsb-agntcy-slim-03`, Intended status: Informational) [1][2][4] |\n| **Status** | Released open-source software at major version 3 (slim-v3.4.6 / slimctl-v3.4.6, 2026-10-20); individual IETF Internet-Draft draft-mpsb-agntcy-slim-03 in state \"I-D Exists\" (Intended status: Informational; dated 2 November 2026; expires 6 May 2027) [1][3][6] |\n| **Version** | `slim-v3.4.6` / `slimctl-v3.4.6` (`2026-10-20`); `slim-bindings` `3.3.9` (`2026-10-27`); `slima2a` `0.9.3` (`2026-10-22`); `slim-mcp` `0.2.3` (`2026-06-24`); `draft-mpsb-agntcy-slim-03` (2 November 2026) [1][6][7][8][9] |\n| **Wire format** | Protocol Buffers frames over multiplexed gRPC (`HTTP/2`) and WebSocket (`hyper`/`fastwebsockets`), carrying RFC 9420 MLS ciphertexts, `SLIMRPC` (`SRPC`) frames, and `XxHash3_128` 128-bit channel IDs [1][10][11] |\n| **Specification** | [draft-mpsb-agntcy-slim-03](https://www.ietf.org/archive/id/draft-mpsb-agntcy-slim-03.txt) · [IETF Datatracker](https://datatracker.ietf.org/doc/draft-mpsb-agntcy-slim/) · [SLIM Docs](https://slim.agntcy.org/latest/slim/slim-overview/) · [A2A SLIMRPC Binding](https://github.com/a2aproject/experimental-cpb-slimrpc) [1][3][10] |\n| **Found at** | No HTTP `.well-known` file; 4-part hierarchical names (`organization/namespace/service/id`), `SRPC` handler tokens (`c0/c1/c2-{package}.{service}-{handler}/c3`), A2A `protocolBinding` `https://a2a-protocol.org/bindings/experimental-slimrpc/v1`, and caller keys (`slim-src`, `slim-peer-subject`, `slim-peer-issuer`) [1][10][12] |\n| **Licence** | Apache License 2.0 (`agntcy/slim`); IETF Trust Legal Provisions (`draft-mpsb-agntcy-slim-03`) [1][4] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [Adoption and ecosystem](#adoption-and-ecosystem)\n4. [See also](#see-also)\n5. [References](#references)\n\n---\n\n## Problem and scope\n\nWithout MLS, application content is not protected from routing nodes beyond any transport encryption in use. TLS protects a transport hop when enabled, and transport-layer encryption is independent of session-layer security. [1] When enabled for a session, MLS encrypts application content at the endpoints. Routing nodes can then forward the encrypted content without learning its plaintext. [1] A moderator invites and removes members. When MLS is enabled, the session layer exchanges MLS updates over SLIM channels. Routing nodes provide message delivery and do not act as an MLS authentication service. [1] MLS is optional, and deployments that do not enable it rely on the configured transport security. MLS-based group encryption and identity binding are optional capabilities, and the security properties provided depend on deployment configuration. [1] SLIMRPC builds request/response and streaming RPC over SLIM sessions, and it is an application-layer facility rather than a data-plane message type. [1] Delivery retries and acknowledgements are configurable; they are not guaranteed for every session. [1] An optional, separate control plane configures and manages routing nodes; it is not in the message path. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **gRPC over HTTP/2** | `gRPC HTTP/2` | Profiles classic standard | SLIM carries agent protocols such as A2A and MCP over gRPC, routed by 4-part hierarchical names of the form organization/namespace/service/id (where the final ID addresses an instance), and A2A over SLIM is an experimental fourth binding called SLIMRPC that the core A2A specification does not include. [1][13] |\n| **The Messaging Layer Security (MLS) Protocol (RFC 9420)** | `RFC 9420` | Profiles classic standard | SLIM uses MLS for end-to-end encryption that is optional for groups and the default for the A2A binding, and MLS does not define SLIM's hierarchical name routing or the SLIMRPC binding. [1][14] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Agent2Agent Protocol (A2A)](/protocols/a2a/)** | Complements | A2A over SLIM is an experimental fourth binding called SLIMRPC on SLIM's gRPC transport, with MLS encryption the default for that binding, and A2A's own specified bindings remain JSON-RPC 2.0 over HTTP(S), gRPC, and HTTP+JSON at the Agent Card. [1][15] |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | SLIM's draft offers a transport for agent protocols, and MCP's standard transports remain stdio and Streamable HTTP rather than SLIMRPC. [1][16] |\n| **[Agent Directory Service](/protocols/ads/)** | Complements | ADS serves a host-local AI Finder at /.well-known/ai-catalog.json and GET /v1/agents, while SLIM delivers messages on its gRPC and MLS overlay once a peer is selected. [1][17] |\n| **[Open Agentic Schema Framework](/protocols/oasf/)** | Complements | OASF is the versioned skill, domain, and module schema, while SLIM is the gRPC and MLS messaging overlay and does not define that taxonomy. [1][18] |\n| **[Agent Connect Protocol](/protocols/agent-connect-protocol/)** | Complements | Both come from the AGNTCY project, and ACP is the archived OpenAPI REST API at /agents/search while SLIM is the gRPC and MLS messaging layer. [1][19] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (3 probed or cited examples; non-exhaustive).*\n\n### Servers, repos & skill indexes\n\n| Actor | Role | Status | Transport & Scope | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **agntcy/slim** | Messaging node / Server | Supported · as of 2026-10-20 | Messaging node software slim-v3.4.6 with slimctl-v3.4.6 (published 2026-10-20). gRPC data plane routed by hierarchical names; Rust control plane. Group sessions optionally use MLS, with key rotation when membership changes. Carries A2A or MCP, or direct point-to-point and group messages. | [SLIM overview](https://slim.agntcy.org/latest/slim/slim-overview/) [10] · [slim-v3.4.6 release](https://github.com/agntcy/slim/releases) [6] · [Group sessions](https://slim.agntcy.org/latest/slim/architecture/sessions/group/) [20] |\n| **a2a-slimrpc (A2A server bindings)** | Messaging node / Server | Experimental · as of 2026-05-14 | Crate a2aproject/a2a-rs/a2a-slimrpc: SLIMRPC bindings for A2A v1 server implementations. MLS is the SLIMRPC default and is what verifies the token (peer keys are set only for MLS sessions). SLIM docs call SLIMRPC a fourth, experimental A2A binding that uses the encrypted session layer instead of HTTP. a2aproject/experimental-cpb-slimrpc (created 2026-05-14) says it is not part of the core A2A specification. | [a2a-slimrpc](https://github.com/a2aproject/a2a-rs/tree/main/a2a-slimrpc) [21] · [SLIM A2A integration](https://slim.agntcy.org/latest/slim/integrations/a2a/) [12] · [experimental-cpb-slimrpc](https://github.com/a2aproject/experimental-cpb-slimrpc) [22] |\n\n### IDEs, hosts & coding agents\n\n| Actor | Role | Status | Transport & Scope | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **a2a-slimrpc (A2A client bindings)** | Client SDK / Runtime | Experimental · checked 2026-10-30 | Same crate, a2a-rs/a2a-slimrpc: SLIMRPC bindings for A2A v1 clients. MLS is the default and verifies the token. experimental-cpb-slimrpc is marked Experimental and is not part of the core A2A specification. A2A's three standard bindings stay JSON-RPC, gRPC, and HTTP+JSON/REST. | [a2a-slimrpc](https://github.com/a2aproject/a2a-rs/tree/main/a2a-slimrpc) [21] · [Custom protocol bindings](https://a2a-protocol.org/latest/topics/custom-protocol-bindings/) [23] · [experimental-cpb-slimrpc](https://github.com/a2aproject/experimental-cpb-slimrpc) [22] |\n\n---\n\n## See also\n\n- **[Natural Language Interaction Protocol (NLIP)](/protocols/nlip/)** *(Complements)* — SLIM (Secure Low-latency Interactive Messaging) is a secure peer-to-peer messaging framework. The `draft-mpsb-agntcy-slim-03` specification combines gRPC over HTTP/2 and HTTP/3 with secure messaging, and the SLIM overview uses MLS (RFC 9420) to encrypt data at the session layer. NLIP specifies the JSON message envelope and an HTTP POST binding, which is a different layer from that transport.\n- **Category:** [Coordinate protocols](/category/coordinate/)\n\n---\n\n## References\n\n1. L. Muscariello, M. Papalini, M. Sardara, and S. Betts (Cisco), *Secure Low-Latency Interactive Messaging (SLIM) (draft-mpsb-agntcy-slim-03)* (2 November 2026; expires 6 May 2027) — <https://www.ietf.org/archive/id/draft-mpsb-agntcy-slim-03.txt>\n2. The Linux Foundation, *Linux Foundation Welcomes the AGNTCY Project* (checked 2026-10-29) — <https://www.linuxfoundation.org/press/linux-foundation-welcomes-the-agntcy-project-to-standardize-open-multi-agent-system-infrastructure-and-break-down-ai-agent-silos>\n3. L. Muscariello, M. Papalini, M. Sardara, and S. Betts (Cisco), *draft-mpsb-agntcy-slim — Secure Low-Latency Interactive Messaging (SLIM) (IETF Datatracker)* (checked 2026-10-29) — <https://datatracker.ietf.org/doc/draft-mpsb-agntcy-slim/>\n4. AGNTCY, *agntcy/slim repository metadata* (checked 2026-10-29) — <https://github.com/agntcy/slim>\n5. AGNTCY, *MAINTAINERS.md* (checked 2026-10-29) — <https://raw.githubusercontent.com/agntcy/slim/main/MAINTAINERS.md>\n6. AGNTCY, *agntcy/slim release list* (checked 2026-10-29) — <https://github.com/agntcy/slim/releases>\n7. PyPI, *slim-bindings* (checked 2026-10-29) — <https://pypi.org/pypi/slim-bindings/json>\n8. PyPI, *slima2a* (checked 2026-10-29) — <https://pypi.org/pypi/slima2a/json>\n9. PyPI, *slim-mcp* (checked 2026-10-29) — <https://pypi.org/pypi/slim-mcp/json>\n10. SLIM, *Introduction - SLIM* (checked 2026-10-29) — <https://slim.agntcy.org/latest/slim/slim-overview/>\n11. AGNTCY, *CHANGELOG.md* (checked 2026-10-29) — <https://raw.githubusercontent.com/agntcy/slim/main/CHANGELOG.md>\n12. SLIM, *A2A - SLIM* (checked 2026-10-29) — <https://slim.agntcy.org/latest/slim/integrations/a2a/>\n13. gRPC Authors, *gRPC over HTTP2 Wire Protocol* (fetched 2026-11-12) — <https://raw.githubusercontent.com/grpc/grpc/master/doc/PROTOCOL-HTTP2.md>\n14. R. Barnes, B. Beurdouche, R. Robert, J. Millican, E. Omara, and K. Cohn-Gordon, *RFC 9420: The Messaging Layer Security (MLS) Protocol* (July 2023) — <https://www.rfc-editor.org/rfc/rfc9420.html>\n15. Agentic AI Foundation, *A2A joins AAIF's open agentic stack* (published 2026-08-17; modified 2026-09-24) — <https://aaif.io/blog/a2a-joins-aaif>\n16. Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation* (2026-07-28) — <https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning>\n17. L. Muscariello and R. Polic (Cisco), *Agent Directory Service (draft-mp-agntcy-ads-03)* (2 November 2026) — <https://www.ietf.org/archive/id/draft-mp-agntcy-ads-03.txt>\n18. AGNTCY, *agntcy/oasf releases* (checked 2026-10-31) — <https://github.com/agntcy/oasf/releases>\n19. AGNTCY (Open Agentic Schema Framework), *OASF schema 1.1.0 modules* (fetched 2026-10-30) — <https://schema.oasf.outshift.com/1.1.0/modules>\n20. SLIM, *Groups - SLIM* (checked 2026-10-29) — <https://slim.agntcy.org/latest/slim/architecture/sessions/group/>\n21. a2aproject, *a2a-rs/a2a-slimrpc* (checked 2026-10-29) — <https://github.com/a2aproject/a2a-rs/tree/main/a2a-slimrpc>\n22. a2aproject, *SLIMRPC custom protocol binding for A2A* (checked 2026-10-29) — <https://github.com/a2aproject/experimental-cpb-slimrpc>\n23. A2A Protocol, *Custom Protocol Bindings - A2A Protocol* (checked 2026-10-29) — <https://a2a-protocol.org/latest/topics/custom-protocol-bindings/>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "RFC 9727",
   "adoption": {
    "level": "observed",
    "by": "Hugging Face, Vercel, ClickHouse, Fly.io, Supabase, Cloudflare Agent Readiness, Cloudflare Developer Documentation, PlanetScale, and 4 other verified implementations",
    "probe_run": null
   },
   "aliases": [
    "api-catalog"
   ],
   "analog": "sitemap.xml, but for APIs instead of pages",
   "audience": [
    "site-owner",
    "platform",
    "standards-body"
   ],
   "collisions": [
    "Not to be confused with the ARD ecosystem's ai-catalog.json well-known file (see ard), a different, agent-specific well-known artifact with no normative relationship to this RFC"
   ],
   "discovery": {
    "mechanism": "GET https://{host}/.well-known/api-catalog returns the catalog; HEAD returns a Link header with rel=\"api-catalog\". The catalog may live at any URI the publisher picks, signposted by the api-catalog link relation in a Link header or an HTML link. Media type application/linkset+json; recommended profile https://www.rfc-editor.org/info/rfc9727",
    "path": "GET https://{host}/.well-known/api-catalog returns the catalog; HEAD returns a Link header with rel=\"api-catalog\". The catalog may live at any URI the publisher picks, signposted by the api-catalog link relation in a Link header or an HTML link. Media type application/linkset+json; recommended profile https://www.rfc-editor.org/info/rfc9727"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.rfc-editor.org/rfc/rfc9727.html",
     "claim": "K. Smith (Vodafone), *api-catalog: A Well-Known URI and Link Relation to Help Discovery of APIs*, published June 2025",
     "date": null,
     "quote": "This document defines the \"api-catalog\" well-known URI and link relation. / SHALL resolve an HTTPS GET request to /.well-known/api-catalog and return an API catalog document / It is intended to facilitate automated discovery and usage of published Application Programming Interfaces (APIs). / Author: K. Smith Vodafone ... Change Controller: IETF / SHALL resolve an HTTPS HEAD request to /.well-known/api-catalog with a response including a Link header / Author: K. Smith Vodafone / This document is a product of the Internet Engineering Task Force (IETF). / Change Controller: IETF / Category: Standards Track / This is an Internet Standards Track document. / Published: June 2025 / RFC: 9727 / The Publisher MUST publish the API catalog document in the Linkset format application/linkset+json / https://www.rfc-editor.org/info/rfc9727 / When used in an API catalog document, the \"item\" … link relation identifies a target resource that represents an API that is a member of the API catalog. / \"service-desc\": Used to link to a description of the API / Status: permanent / RFC 9727: api-catalog: A Well-Known URI and Link Relation to Help Discovery of APIs / The target resource URI may be /.well-known/api-catalog or any other URI chosen by the Publisher. / This document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions / Such APIs must be discovered before they may be used / the external party needs to know what APIs a given Publisher exposes, their purpose, any policies for usage, and the endpoint to interact with each API / The API catalog is a document listing a Publisher's APIs. / The Publisher MUST publish the API catalog document in the Linkset format application/linkset+json ... The Linkset SHOULD include a profile parameter ... value of \"https://www.rfc-editor.org/info/rfc9727\" / The API catalog MUST include hyperlinks to API endpoints. / When used in an API catalog document, the \"item\" ... link relation identifies a target resource that represents an API that is a member of the API catalog. / This document does not mandate paths for API endpoints / A /.well-known/api-catalog location MUST support the Linkset RFC9264 format of application/linkset+json and MAY also support the other formats via content negotiation. / It is RECOMMENDED that the API catalog also includes useful metadata, such as usage policies, API version information, links to the OpenAPI Specification ... definitions for each API / URI Suffix: api-catalog",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://ai-catalog.io/spec/",
     "claim": "Agent Card Working Group (Google, Microsoft, Anthropic, PulseMCP, Cisco Outshift, AWS), *AI Catalog*, Official specification; fetched 2026-10-30",
     "date": null,
     "quote": "/.well-known/ai-catalog.json / application/ai-catalog+json",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://datatracker.ietf.org/doc/rfc9727/",
     "claim": "IETF Datatracker, *RFC 9727: api-catalog: A Well-Known URI and Link Relation to Help Discovery of APIs*, Proposed Standard (June 2025); last updated 2026-05-20",
     "date": null,
     "quote": "RFC - Proposed Standard (June 2025) / Was draft-ietf-httpapi-api-catalog (httpapi WG) / Author's Address Kevin Smith Vodafone / Internet Engineering Task Force (IETF) / Last updated | 2026-05-20",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-httpapi-api-catalog/history/",
     "claim": "IETF Datatracker, *draft-ietf-httpapi-api-catalog document history*, WG -00 published 2023-09-12; individual -00 dated 2023-05-04",
     "date": null,
     "quote": "2023-09-12 | 00 | Kevin Smith | New version available: draft-ietf-httpapi-api-catalog-00.txt / This document now replaces draft-smith-api-catalog instead of None / draft-smith-api-catalog-00 (2023-05-04)",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://datatracker.ietf.org/doc/rfc9727/history/",
     "claim": "IETF Datatracker, *RFC 9727 document history*, RFC published 2025-06-13",
     "date": null,
     "quote": "2025-06-13 | (System) | RFC published",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://errata.rfc-editor.org/search/?rfc_number=9727&presentation=records",
     "claim": "RFC Editor, *RFC Errata records for RFC 9727*, Errata ID 9009 reported 2026-06-21",
     "date": null,
     "quote": "Errata-ID: 9009 Status: Reported Type: Technical / Date Reported: 2026-06-21 Section 5.1 says / Source of RFC: httpapi (wit)",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://datatracker.ietf.org/doc/html/draft-smith-api-catalog-00",
     "claim": "K. Smith, Ed. (Vodafone), *api-catalog: A well-known URI to help discovery of APIs (draft-smith-api-catalog-00 HTML)*, published 4 May 2023",
     "date": null,
     "quote": "Published: 4 May 2023 / Author: K. Smith, Ed. Vodafone / Kevin Smith",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://www.iana.org/assignments/well-known-uris",
     "claim": "IANA, *Well-Known URIs*, registry last updated 2026-10-26",
     "date": null,
     "quote": "api-catalog RFC 9727 permanent IETF 2024-12-23 / Reference RFC 8615: Well-Known Uniform Resource Identifiers (URIs)",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://www.iana.org/assignments/link-relations",
     "claim": "IANA, *Link Relations*, registry last updated 2026-06-12",
     "date": null,
     "quote": "api-catalog Refers to a list of APIs available from the Publisher of the link context. RFC 9727",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://www.iana.org/assignments/profile-uris",
     "claim": "IANA, *Profile URIs*, registry last updated 2026-10-05",
     "date": null,
     "quote": "https://www.rfc-editor.org/info/rfc9727 API catalog A profile URI to request or signal a Linkset representing an API catalog. RFC 9727",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://www.iana.org/assignments/media-types/application/linkset+json",
     "claim": "IANA, *Media type application/linkset+json*, published specification RFC 9264",
     "date": null,
     "quote": "Subtype name: linkset+json",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://www.rfc-editor.org/rfc/rfc9264.html",
     "claim": "E. Wilde (Axway) and H. Van de Sompel (Data Archiving and Networked Services), *Linkset: Media Types and a Link Relation Type for Link Sets*, published July 2022",
     "date": null,
     "quote": "This specification defines two formats and associated media types for representing sets of links as standalone documents. / application/linkset+json / The \"profile\" Parameter for Media Types to Represent Sets of Links",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://agenticresourcediscovery.org/spec/",
     "claim": "Google, Microsoft, Hugging Face, *ARD Specification*, fetched 2026-10-30",
     "date": null,
     "quote": "A consumer resolving a domain's entries MUST fetch /.well-known/ard.json, and MUST honour a rel=\"ard\" link. / Agentmap Directive: Adding an entry-source directive in robots.txt / Publishing Service Binding records",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://modelcontextprotocol.io/seps/2127-mcp-server-cards",
     "claim": "Model Context Protocol, *SEP-2127: MCP Server Cards - HTTP Server Discovery*, modified 2026-10-06",
     "date": null,
     "quote": "MCP Server Cards / For automated domain-level discovery, an AI Catalog can be published at /.well-known/ai-catalog.json.",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://github.com/wild-card-ai/agents-json/blob/master/README.md",
     "claim": "Wildcard AI, *agents.json*, fetched 2026-10-30",
     "date": null,
     "quote": "/.well-known/agents.json / so it is easily discoverable by agents",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://www.ietf.org/archive/id/draft-mozleywilliams-dawn-dnsaid-00.txt",
     "claim": "J. Mozley, N. Williams, B. Sarikaya, R. Schott, J. Damick, and S. Courtney, *DNS for AI Discovery (draft-mozleywilliams-dawn-dnsaid-00)*, 2026-11-02 (fetched 2026-11-07)",
     "date": null,
     "quote": "Service Binding (SVCB) records / _index._agents.",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://huggingface.co/.well-known/api-catalog",
     "claim": "Hugging Face, *huggingface.co API catalog linkset*, fetched 2026-11-04",
     "date": null,
     "quote": "HTTP 200 ... content-type: application/linkset+json; charset=utf-8; profile=\"https://www.rfc-editor.org/info/rfc9727\" ... link: </.well-known/api-catalog>; rel=\"api-catalog\" ... {\"linkset\":[{\"anchor\":\"https://huggingface.co/.well-known/api-catalog\",\"item\":[{\"href\":\"https://huggingface.co\"}]},{\"anchor\":\"https://huggingface.co\",\"service-desc\":[{\"href\":\"https://huggingface.co/.well-known/openapi.json\",\"type\":\"application/json\"}]}]}",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://vercel.com/.well-known/api-catalog",
     "claim": "Vercel, *vercel.com API catalog linkset*, response dated Fri, 30 Oct 2026",
     "date": null,
     "quote": "HTTP 200 ... content-type: application/linkset+json; profile=\"https://www.rfc-editor.org/info/rfc9727\" ... link: </.well-known/api-catalog>; rel=\"api-catalog\" ... {\"linkset\":[{\"anchor\":\"https://vercel.com/.well-known/api-catalog\",\"item\":[{\"href\":\"https://api.vercel.com\"}]}",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://clickhouse.com/.well-known/api-catalog",
     "claim": "ClickHouse, *clickhouse.com API catalog linkset*, response dated Fri, 30 Oct 2026",
     "date": null,
     "quote": "HTTP 200 ... content-type: application/linkset+json; profile=\"https://www.rfc-editor.org/info/rfc9727\" ... link: <https://clickhouse.com/.well-known/api-catalog>; rel=\"api-catalog\" ... {\"linkset\":[{\"anchor\":\"https://clickhouse.com/.well-known/api-catalog\",\"item\":[{\"href\":\"https://api.clickhouse.cloud/v1\"}]}",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://fly.io/.well-known/api-catalog",
     "claim": "Fly.io, *fly.io API catalog linkset*, response dated Fri, 30 Oct 2026",
     "date": null,
     "quote": "HTTP 200 ... content-type: application/linkset+json; profile=\"https://www.rfc-editor.org/info/rfc9727\"; charset=utf-8 ... {\"linkset\":[{\"anchor\":\"https://fly.io/.well-known/api-catalog\",\"item\":[{\"href\":\"https://api.machines.dev/v1\"},{\"href\":\"https://api.sprites.dev/v1\"},{\"href\":\"https://sprites.dev/mcp\"}]}",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://supabase.com/.well-known/api-catalog",
     "claim": "Supabase, *RFC 9727 API Catalog (supabase.com/.well-known/api-catalog)*, checked 2026-11-04",
     "date": null,
     "quote": "HTTP 200 ... content-type: application/linkset+json ... last-modified: Wed, 04 Nov 2026 19:52:25 GMT ... \"anchor\": \"https://supabase.com/.well-known/api-catalog\", \"item\": [ { \"href\": \"https://api.supabase.com/v1\" }, { \"href\": \"https://mcp.supabase.com/mcp\" } ]",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://developers.cloudflare.com/.well-known/api-catalog",
     "claim": "Cloudflare, *developers.cloudflare.com API catalog linkset*, response dated Fri, 30 Oct 2026",
     "date": null,
     "quote": "HTTP 200 ... content-type: application/linkset+json; profile=\"https://www.rfc-editor.org/info/rfc9727\" ... \"service-desc\":[{\"href\":\"https://developers.cloudflare.com/openapi.json\",\"type\":\"application/json\"}]",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://planetscale.com/.well-known/api-catalog",
     "claim": "PlanetScale, *RFC 9727 API Catalog (planetscale.com/.well-known/api-catalog)*, checked 2026-11-04",
     "date": null,
     "quote": "HTTP 200 ... content-type: application/linkset+json ... \"anchor\": \"https://api.planetscale.com/v1\", \"service-desc\": [ { \"href\": \"https://planetscale.com/docs/openapi.yaml\", \"type\": \"text/yaml\" } ]",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://www.getzep.com/.well-known/api-catalog",
     "claim": "Zep, *RFC 9727 API Catalog (getzep.com/.well-known/api-catalog)*, checked 2026-11-04",
     "date": null,
     "quote": "HTTP 200 ... content-type: application/linkset+json; charset=utf-8 ... \"anchor\": \"https://api.getzep.com/\", \"service-doc\": ... \"href\": \"https://www.getzep.com/.well-known/mcp/server-card.json\"",
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://dri.es/.well-known/api-catalog",
     "claim": "Dries Buytaert, *RFC 9727 API Catalog (dri.es/.well-known/api-catalog)*, checked 2026-11-04",
     "date": null,
     "quote": "HTTP 200 ... Content-Type: application/linkset+json; profile=\"https://www.rfc-editor.org/info/rfc9727\" ... \"anchor\": \"https://dri.es/api\" ... \"anchor\": \"https://dri.es/mcp\"",
     "ref": 25
    },
    {
     "label": "[26]",
     "url": "https://dri.es/helping-agents-discover-my-site-search-with-an-api-catalog",
     "claim": "Dries Buytaert, *Helping agents discover my site search with an API Catalog*, published 2026-07-22",
     "date": null,
     "quote": "I added /.well-known/api-catalog support to dri.es so AI agents can discover my search API and search my site efficiently.",
     "ref": 26
    },
    {
     "label": "[27]",
     "url": "https://community.ibm.com/community/user/blogs/xuantong-liu/2025/10/13/introducing-api-catalog-support-in-ibm-api-connect",
     "claim": "Xuantong Liu (IBM), *Introducing API Catalog Support in IBM API Connect CMS Portal in v12.1.0.0*, posted 2025-12-16",
     "date": null,
     "quote": "Introducing API Catalog Support in IBM API Connect CMS Portal in v12.1.0.0 ... Generates a linkset.json file at {portalURL}/.well-known/api-catalog Lists all published APIs with public visibility.",
     "ref": 27
    },
    {
     "label": "[28]",
     "url": "https://www.eventcatalog.dev/blog/api-catalog",
     "claim": "David Boyne (EventCatalog), *Let tools find your APIs from one URL*, published 2026-05-25",
     "date": null,
     "quote": "EventCatalog can now publish an API catalog at /.well-known/api-catalog, giving agents and developer tools one machine-readable place to discover your service, domain, and MCP API surfaces.",
     "ref": 28
    },
    {
     "label": "[29]",
     "url": "https://blog.cloudflare.com/agent-readiness/",
     "claim": "André Jesus and Vance Morrison (Cloudflare), *Introducing the Agent Readiness score. Check to see if your site is agent-ready*, published 2026-04-17; modified 2026-07-15",
     "date": null,
     "quote": "isitagentready.com / Cloudflare makes requests to it to check which standards it supports, and provides a score based on four dimensions / Capabilities: Agent Skills, API Catalog (RFC 9727), OAuth server discovery via RFC 8414 and RFC 9728, MCP Server Card, and WebMCP / André Jesus and Vance Morrison / \"datePublished\":\"2026-04-17",
     "ref": 29
    },
    {
     "label": "[30]",
     "url": "https://apievangelist.com/blog/2026/05/22/four-providers-publishing-well-known-api-catalog/",
     "claim": "Kin Lane (API Evangelist), *Only Four API Providers Publish a Real .well-known/api-catalog Right Now*, published 2026-05-22",
     "date": null,
     "quote": "Four providers serve a real RFC 9727 LinkSet at /.well-known/api-catalog / \"name\": \"Kin Lane\" / \"datePublished\": \"2026-05-22",
     "ref": 30
    },
    {
     "label": "[31]",
     "url": "https://agentic-readiness.lumar.io/docs/capabilities/api-catalog",
     "claim": "Lumar, *API catalog capability*, as of 2026-10-03",
     "date": null,
     "quote": "Early production (L2) / Direction of travel: ▲ rising, as of 2026-10-03. / Moved from 4 real catalogs in a 74-site census (May 2026) to 7 among 37 well-known agent-focused sites (October 2026), and Cloudflare's Agent Readiness score now checks for one. / | Vercel | production | vercel.com | / | Supabase | production | supabase.com | / | Hugging Face | production | huggingface.co | / | Cloudflare (developer docs) | production | developers.cloudflare.com |",
     "ref": 31
    }
   ],
   "form": "well-known-file",
   "governance": "IETF (IETF stream, HTTPAPI working group). Change controller for the well-known URI: IETF",
   "group": null,
   "hatnote_md": "This page is about RFC 9727, the IETF standard that defines the /.well-known/api-catalog URI and the \"api-catalog\" link relation for listing a publisher’s APIs. It is not the agent-specific [AI Catalog well-known file](/protocols/ai-catalog-well-known-file/) (/.well-known/ai-catalog.json), and not a product such as an internal developer-portal \"API catalog\". For agent and MCP discovery files, see [Agentic Resource Discovery (ARD)](/protocols/ard/) and [MCP Server Cards](/protocols/mcp-server-cards/).",
   "history": [
    {
     "date": "2026-09-06",
     "note": "initial record; verified against RFC 9727 text via rfc-editor.org"
    },
    {
     "date": "2026-09-06",
     "note": "added second evidence entry (IANA Well-Known URIs registry, fetched directly) confirming permanent registration"
    },
    {
     "date": "2026-10-28",
     "note": "Re-verified record against 18 sources on 2026-10-28: 5 live /.well-known/api-catalog linkset deployments (Hugging Face, Vercel, ClickHouse, Fly.io, Cloudflare Developers), 3 tooling/checker vendor docs, and 3 independent coverage sources."
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "api-catalog-rfc9727",
   "implementation": "multi-implementation",
   "last_verified": "2026-11-07",
   "name": "api-catalog (RFC 9727)",
   "native_status": "Proposed Standard. One technical erratum (ID 9009, about the Section 5.1 nesting example) reported 2026-06-21, status \"Reported\" (not verified)",
   "origin": {
    "date": "2023-05-04",
    "org": "Vodafone (Kevin Smith)"
   },
   "pairs_with": [
    "ai-catalog-well-known-file",
    "ard",
    "mcp-server-cards",
    "agents-json",
    "dns-aid"
   ],
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "stable",
   "prerequisites": [],
   "probe": {
    "method": "GET",
    "on_absent": "Publisher does not expose an RFC 9727 API catalog at the well-known location; check for an 'api-catalog' Link header or <link rel=\"api-catalog\"> on the site's root response instead, since the RFC allows the catalog to live at any URI the publisher chooses",
    "parse": "200 response with Content-Type application/linkset+json, body containing a top-level \"linkset\" array whose entries carry \"item\" (or other) link relations to API endpoints; a HEAD request instead returns a Link header with rel=api-catalog",
    "path": "https://{origin}/.well-known/api-catalog"
   },
   "question": "Given a publisher's domain, where is the machine-readable list of the APIs it exposes?",
   "scope": "general",
   "spec_url": "https://www.rfc-editor.org/rfc/rfc9727.html",
   "step": "discover",
   "summary_md": "**api-catalog** (RFC 9727) defines the \"api-catalog\" well-known URI and link relation for automated discovery of published APIs. K. Smith (Vodafone) is the author, IETF is change controller, and it is a Proposed Standard (June 2025). A Publisher supporting this URI SHALL resolve an HTTPS GET request to `/.well-known/api-catalog` and return an API catalog document, and SHALL resolve an HTTPS HEAD request to that path with a response including a Link header. On 2023-09-12 Kevin Smith published `draft-ietf-httpapi-api-catalog-00`, and that document replaces `draft-smith-api-catalog`. RFC 9727 was published on 2025-06-13. It was `draft-ietf-httpapi-api-catalog` in the httpapi working group. Technical erratum 9009, type Technical, on Section 5.1 was reported on 2026-06-21 and its status is Reported.",
   "track": "ietf",
   "use_cases": [
    "discover-my-api"
   ],
   "version": {
    "date": "2025-06-13",
    "label": "RFC 9727"
   },
   "watch": [
    {
     "type": "page",
     "url": "https://www.rfc-editor.org/rfc/rfc9727.html",
     "selector": "main",
     "cadence": "weekly"
    }
   ],
   "ietf_tracker": {
    "doc": "rfc9727",
    "rev": null,
    "state": "rfc",
    "stream": "IETF",
    "group_type": "WG",
    "wg": "httpapi",
    "replaced_by": null,
    "posted_utc": "2025-06",
    "expires_utc": null,
    "as_of": "2026-11-06",
    "source": "https://datatracker.ietf.org/doc/rfc9727/",
    "source_label": "per IETF Datatracker"
   },
   "tier": "spec_brief",
   "lifecycle_status": "published_standard",
   "wire_archetype": "web_discovery",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-07",
   "v05_hatnote_html_md": "This page is about RFC 9727, the IETF standard that defines the /.well-known/api-catalog URI and the \"api-catalog\" link relation for listing a publisher’s APIs. It is not the agent-specific [AI Catalog well-known file](/protocols/ai-catalog-well-known-file/) (/.well-known/ai-catalog.json), and not a product such as an internal developer-portal \"API catalog\". For agent and MCP discovery files, see [Agentic Resource Discovery (ARD)](/protocols/ard/) and [MCP Server Cards](/protocols/mcp-server-cards/). [1][2]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**api-catalog** (RFC 9727) defines the \"api-catalog\" well-known URI and link relation for automated discovery of published APIs. [1] K. Smith (Vodafone) is the author, IETF is change controller, and it is a Proposed Standard (June 2025). [1][3] A Publisher supporting this URI SHALL resolve an HTTPS GET request to `/.well-known/api-catalog` and return an API catalog document, and SHALL resolve an HTTPS HEAD request to that path with a response including a Link header. [1] On 2023-09-12 Kevin Smith published `draft-ietf-httpapi-api-catalog-00`, and that document replaces `draft-smith-api-catalog`. [4] RFC 9727 was published on 2025-06-13. It was `draft-ietf-httpapi-api-catalog` in the httpapi working group. [3][5] Technical erratum 9009, type Technical, on Section 5.1 was reported on 2026-06-21 and its status is Reported. [6]",
   "v05_identity_sentence_md": "**api-catalog** (RFC 9727) defines the \"api-catalog\" well-known URI and link relation for automated discovery of published APIs. [1] K. Smith (Vodafone) is the author, IETF is change controller, and it is a Proposed Standard (June 2025). [1][3]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Discover](/category/discover/) (`discover`)"
    },
    {
     "label": "Form",
     "value_md": "Well-known file (`well-known-file`)"
    },
    {
     "label": "Originated by",
     "value_md": "Kevin Smith (Vodafone). Individual draft `draft-smith-api-catalog-00` published 4 May 2023. [1][3][4][7]"
    },
    {
     "label": "Governed by",
     "value_md": "IETF stream (`draft-ietf-httpapi-api-catalog`, httpapi WG). Change controller for `api-catalog`: IETF. [1][3][6]"
    },
    {
     "label": "Track",
     "value_md": "Standards Track. Datatracker type: RFC - Proposed Standard (June 2025). [1][3]"
    },
    {
     "label": "IETF tracker",
     "value_md": "Proposed Standard (June 2025). Was `draft-ietf-httpapi-api-catalog`. Updated 2026-05-20; published 2025-06-13. [3][5]"
    },
    {
     "label": "Status",
     "value_md": "Proposed Standard (June 2025). Technical erratum 9009 on Section 5.1 was reported 2026-06-21, and its status is Reported. [3][6]"
    },
    {
     "label": "Version",
     "value_md": "RFC 9727, published 2025-06-13. `draft-ietf-httpapi-api-catalog-00` (2023-09-12) replaced `draft-smith-api-catalog`. [1][4][5]"
    },
    {
     "label": "Message format",
     "value_md": "MUST publish `application/linkset+json`. SHOULD add profile `https://www.rfc-editor.org/info/rfc9727`. `item` identifies each API. [1]"
    },
    {
     "label": "IANA registration",
     "value_md": "Permanent `api-catalog` well-known URI (IETF, 2024-12-23), plus the link relation and profile URI. [1][8][9][10][11]"
    },
    {
     "label": "Headers",
     "value_md": "HTTPS HEAD to `/.well-known/api-catalog` SHALL return a `Link` header with relation `api-catalog`. [1]"
    },
    {
     "label": "Specification",
     "value_md": "[api-catalog: A Well-Known URI and Link Relation to Help Discovery of APIs](https://www.rfc-editor.org/rfc/rfc9727.html) [1]"
    },
    {
     "label": "Found at",
     "value_md": "`/.well-known/api-catalog`, or any other URI the publisher chooses, signposted by the `api-catalog` link relation. [1]"
    },
    {
     "label": "Licence",
     "value_md": "Revised BSD License text, as described in Section 4.e of the Trust Legal Provisions. [1]"
    }
   ],
   "v05_problem_md": "Such APIs must be discovered before they may be used: the external party needs to know what APIs a given Publisher exposes, their purpose, any policies for usage, and the endpoint to interact with each API. [1] The Publisher MUST publish the API catalog, a document listing a Publisher's APIs, in the Linkset format `application/linkset+json`, and the Linkset SHOULD include profile `https://www.rfc-editor.org/info/rfc9727`. [1] The API catalog MUST include hyperlinks to API endpoints. Used in the catalog, `item` identifies a target resource that represents a member API. [1] RFC 9727 does not mandate paths for API endpoints. [1] A `/.well-known/api-catalog` location MUST support `application/linkset+json` and MAY also support other formats via content negotiation. [1] It is RECOMMENDED that the catalog also include links to OpenAPI Specification definitions for each API. [1]",
   "v05_mechanism_delta_md": "The Publisher MUST publish the API catalog, a document listing a Publisher's APIs, in the Linkset format `application/linkset+json`, and the Linkset SHOULD include profile `https://www.rfc-editor.org/info/rfc9727`. [1] The API catalog MUST include hyperlinks to API endpoints. Used in the catalog, `item` identifies a target resource that represents a member API. [1]",
   "v05_scope_boundary_md": "RFC 9727 does not mandate paths for API endpoints. [1] A `/.well-known/api-catalog` location MUST support `application/linkset+json` and MAY also support other formats via content negotiation. [1] It is RECOMMENDED that the catalog also include links to OpenAPI Specification definitions for each API. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "Linkset (RFC 9264)",
      "spec_or_rfc": "RFC 9264",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "RFC 9264 defines `application/linkset+json` linksets. RFC 9727 requires that type and the `api-catalog` URI. [1][12]"
     },
     {
      "name": "Well-Known URIs (RFC 8615)",
      "spec_or_rfc": "RFC 8615",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "RFC 9727 registers permanent well-known suffix `api-catalog` (IANA 2024-12-23, change controller IETF) under RFC 8615. [1][8]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "ai-catalog-well-known-file",
      "target_name": "AI Catalog well-known file",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "RFC 9727 publishes a linkset at `/.well-known/api-catalog`. AI Catalog uses `application/ai-catalog+json` at `/.well-known/ai-catalog.json`. [1][2]"
     },
     {
      "target_id": "ard",
      "target_name": "Agentic Resource Discovery (ARD)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "RFC 9727 discovers APIs through a linkset and `api-catalog`. ARD fetches JSON at `/.well-known/ard.json`. [1][13]"
     },
     {
      "target_id": "mcp-server-cards",
      "target_name": "MCP Server Cards",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "RFC 9727 links API descriptions. SEP-2127 cards describe MCP servers and may publish `/.well-known/ai-catalog.json`. [1][14]"
     },
     {
      "target_id": "agents-json",
      "target_name": "agents.json",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "RFC 9727 is a linkset at `/.well-known/api-catalog`. agents.json is a separate file at `/.well-known/agents.json`. [1][15]"
     },
     {
      "target_id": "dns-aid",
      "target_name": "DNS-AID (DNS for AI Discovery)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "RFC 9727 is fetched over HTTPS. DNS-AID publishes agent records as Service Binding (SVCB) DNS records. [1][16]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (12 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).",
    "side_a": {
     "visible": true,
     "heading": "Who publishes or hosts it",
     "col4_header": "Artifact",
     "note_md": null,
     "rows": [
      {
       "actor": "Hugging Face",
       "role": "ML hub API catalog",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-11-04",
       "col4_md": "Profiled `application/linkset+json` with `item` and `rel=\"api-catalog\"`.",
       "source_md": "[huggingface.co/.well-known/api-catalog](https://huggingface.co/.well-known/api-catalog) [17]"
      },
      {
       "actor": "Vercel",
       "role": "Cloud platform API catalog",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-11-04",
       "col4_md": "Profiled `application/linkset+json` with `item` `https://api.vercel.com` and `rel=\"api-catalog\"`.",
       "source_md": "[vercel.com/.well-known/api-catalog](https://vercel.com/.well-known/api-catalog) [18]"
      },
      {
       "actor": "ClickHouse",
       "role": "Cloud database API catalog",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-11-04",
       "col4_md": "Profiled `application/linkset+json` with `item` `https://api.clickhouse.cloud/v1` and an absolute `Link`.",
       "source_md": "[clickhouse.com/.well-known/api-catalog](https://clickhouse.com/.well-known/api-catalog) [19]"
      },
      {
       "actor": "Fly.io",
       "role": "Compute platform API catalog",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-11-04",
       "col4_md": "Three `item` APIs in profiled `application/linkset+json`; no catalog `Link` response header.",
       "source_md": "[fly.io/.well-known/api-catalog](https://fly.io/.well-known/api-catalog) [20]"
      },
      {
       "actor": "Supabase",
       "role": "Postgres & MCP API catalog",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-11-04",
       "col4_md": "`application/linkset+json` lists `item` `https://api.supabase.com/v1` and `https://mcp.supabase.com/mcp`; no `Link` header.",
       "source_md": "[supabase.com/.well-known/api-catalog](https://supabase.com/.well-known/api-catalog) [21]"
      },
      {
       "actor": "Cloudflare Developer Documentation",
       "role": "Developer docs API catalog",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-11-04",
       "col4_md": "Profiled `application/linkset+json` anchored at `https://developers.cloudflare.com/api/` with `service-desc`, not `item`.",
       "source_md": "[developers.cloudflare.com/.well-known/api-catalog](https://developers.cloudflare.com/.well-known/api-catalog) [22]"
      },
      {
       "actor": "PlanetScale",
       "role": "Database platform API catalog",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-11-04",
       "col4_md": "`application/linkset+json` anchors `https://api.planetscale.com/v1` with `service-desc` `openapi.yaml`, not an `item` array.",
       "source_md": "[planetscale.com/.well-known/api-catalog](https://planetscale.com/.well-known/api-catalog) [23]"
      },
      {
       "actor": "Zep",
       "role": "Agent memory API & MCP catalog",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-11-04",
       "col4_md": "`application/linkset+json` anchors `https://api.getzep.com/` with `service-doc`, `status`, and `related`, not `item`.",
       "source_md": "[getzep.com/.well-known/api-catalog](https://www.getzep.com/.well-known/api-catalog) [24]"
      },
      {
       "actor": "dri.es",
       "role": "Personal site search API catalog",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-11-04",
       "col4_md": "Profiled `application/linkset+json` for `https://dri.es/api` and `https://dri.es/mcp`, without an `item` array.",
       "source_md": "[dri.es/.well-known/api-catalog](https://dri.es/.well-known/api-catalog) [25] · [Dries Buytaert](https://dri.es/helping-agents-discover-my-site-search-with-an-api-catalog) [26]"
      },
      {
       "actor": "IBM API Connect CMS Portal",
       "role": "API management developer portal",
       "status": "Supported",
       "status_display": "Supported · as of 2025-12-16",
       "col4_md": "CMS Portal `v12.1.0.0` generates `linkset.json` at `{PortalURL}/.well-known/api-catalog` for public APIs.",
       "source_md": "[IBM Community](https://community.ibm.com/community/user/blogs/xuantong-liu/2025/10/13/introducing-api-catalog-support-in-ibm-api-connect) [27]"
      },
      {
       "actor": "EventCatalog",
       "role": "Architecture catalog generator",
       "status": "Supported",
       "status_display": "Supported · as of 2026-05-25",
       "col4_md": "Publishes `/.well-known/api-catalog` as profiled `application/linkset+json` for services, domains, and MCP.",
       "source_md": "[EventCatalog](https://www.eventcatalog.dev/blog/api-catalog) [28]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Bot, client & tool support",
     "col4_header": "Checked behavior",
     "note_md": null,
     "rows": [
      {
       "actor": "Cloudflare Agent Readiness",
       "role": "Readiness checker",
       "status": "Supported",
       "status_display": "Supported · as of 2026-04-17",
       "col4_md": "`isitagentready.com` scores API Catalog (RFC 9727) under Capabilities by requesting the entered site.",
       "source_md": "[André Jesus and Vance Morrison, Cloudflare Blog (published 2026-04-17)](https://blog.cloudflare.com/agent-readiness/) [29]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [
     {
      "label": "Real RFC 9727 LinkSet publishers at /.well-known/api-catalog (API Evangelist)",
      "as_of": "2026-05-22",
      "value_md": "Four providers serve a real RFC 9727 LinkSet at /.well-known/api-catalog [30]"
     },
     {
      "label": "api-catalog adopters among agent-focused sites (Lumar Agentic Readiness)",
      "as_of": "2026-10-03",
      "value_md": "Lumar rates API Catalog Early production (L2), rising as of 2026-10-03, and says publication moved from 4 real catalogs in a 74-site census (May 2026) to 7 among 37 well-known agent-focused sites (October 2026). The visible adopter table marks Vercel, Supabase, Hugging Face, and Cloudflare developer docs as production. [31]"
     }
    ],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "vercel-agent-readability",
     "target_name": "Agent Readability Spec",
     "relation_label": "Complements",
     "delta": "The guide scores human-site readability files, while RFC 9727 serves a linkset of API descriptions at /.well-known/api-catalog.",
     "item_md": "**[Agent Readability Spec](/protocols/vercel-agent-readability/)** (Complements) — The guide scores human-site readability files, while RFC 9727 serves a linkset of API descriptions at /.well-known/api-catalog."
    },
    {
     "target_id": "knowledge-linkset",
     "target_name": "The 'knowledge-linkset' Well-Known URI for Publishing Knowledge Artefacts",
     "relation_label": "Peer alternative",
     "delta": "knowledge-linkset publishes knowledge artefacts as application/linkset+json at /.well-known/knowledge-linkset, with optional SHA-256 digests and rel=\"describedby\", while RFC 9727 is application/linkset+json at /.well-known/api-catalog with profile https://www.rfc-editor.org/info/rfc9727 and rel=\"api-catalog\".",
     "item_md": "**[The 'knowledge-linkset' Well-Known URI for Publishing Knowledge Artefacts](/protocols/knowledge-linkset/)** (Peer alternative) — knowledge-linkset publishes knowledge artefacts as application/linkset+json at /.well-known/knowledge-linkset, with optional SHA-256 digests and rel=\"describedby\", while RFC 9727 is application/linkset+json at /.well-known/api-catalog with profile https://www.rfc-editor.org/info/rfc9727 and rel=\"api-catalog\"."
    },
    {
     "target_id": "oauth-metadata-for-agents",
     "target_name": "OAuth Protected Resource and Authorization Server Metadata (as used for agent authorization)",
     "relation_label": "Complements",
     "delta": "RFC 9727 is a well-known linkset of HTTP APIs. RFC 9728 names one resource's authorization server.",
     "item_md": "**[OAuth Protected Resource and Authorization Server Metadata (as used for agent authorization)](/protocols/oauth-metadata-for-agents/)** (Complements) — RFC 9727 is a well-known linkset of HTTP APIs. RFC 9728 names one resource's authorization server."
    },
    {
     "target_id": "llms-txt",
     "target_name": "llms.txt",
     "relation_label": "Complements",
     "delta": "RFC 9727 publishes a machine-readable API catalog at `/.well-known/api-catalog`, whereas `/llms.txt` indexes Markdown documentation at any site subpath.",
     "item_md": "**[llms.txt](/protocols/llms-txt/)** (Complements) — RFC 9727 publishes a machine-readable API catalog at `/.well-known/api-catalog`, whereas `/llms.txt` indexes Markdown documentation at any site subpath."
    },
    {
     "item_md": "**[Discover protocols](/category/discover/)** — Category index for `discover` standards."
    }
   ],
   "v05_compiled_md": "---\nid: api-catalog-rfc9727\ntitle: \"api-catalog (RFC 9727)\"\ntier: spec_brief\nlifecycle_status: published_standard\ncategory: discover\nform: well-known-file\nwire_archetype: web_discovery\nspec_url: https://www.rfc-editor.org/rfc/rfc9727.html\nlast_checked: 2026-11-07\n---\n\n# api-catalog (RFC 9727)\n\n**Category:** [Discover](/category/discover/) (`discover`) · **Form:** Well-known file (`well-known-file`) · **Last checked:** 2026-11-07\n\n> *This page is about RFC 9727, the IETF standard that defines the /.well-known/api-catalog URI and the \"api-catalog\" link relation for listing a publisher’s APIs. It is not the agent-specific [AI Catalog well-known file](/protocols/ai-catalog-well-known-file/) (/.well-known/ai-catalog.json), and not a product such as an internal developer-portal \"API catalog\". For agent and MCP discovery files, see [Agentic Resource Discovery (ARD)](/protocols/ard/) and [MCP Server Cards](/protocols/mcp-server-cards/). [1][2]*\n\n**api-catalog** (RFC 9727) defines the \"api-catalog\" well-known URI and link relation for automated discovery of published APIs. [1] K. Smith (Vodafone) is the author, IETF is change controller, and it is a Proposed Standard (June 2025). [1][3] A Publisher supporting this URI SHALL resolve an HTTPS GET request to `/.well-known/api-catalog` and return an API catalog document, and SHALL resolve an HTTPS HEAD request to that path with a response including a Link header. [1] On 2023-09-12 Kevin Smith published `draft-ietf-httpapi-api-catalog-00`, and that document replaces `draft-smith-api-catalog`. [4] RFC 9727 was published on 2025-06-13. It was `draft-ietf-httpapi-api-catalog` in the httpapi working group. [3][5] Technical erratum 9009, type Technical, on Section 5.1 was reported on 2026-06-21 and its status is Reported. [6]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Discover](/category/discover/) (`discover`) |\n| **Form** | Well-known file (`well-known-file`) |\n| **Originated by** | Kevin Smith (Vodafone). Individual draft `draft-smith-api-catalog-00` published 4 May 2023. [1][3][4][7] |\n| **Governed by** | IETF stream (`draft-ietf-httpapi-api-catalog`, httpapi WG). Change controller for `api-catalog`: IETF. [1][3][6] |\n| **Track** | Standards Track. Datatracker type: RFC - Proposed Standard (June 2025). [1][3] |\n| **IETF tracker** | Proposed Standard (June 2025). Was `draft-ietf-httpapi-api-catalog`. Updated 2026-05-20; published 2025-06-13. [3][5] |\n| **Status** | Proposed Standard (June 2025). Technical erratum 9009 on Section 5.1 was reported 2026-06-21, and its status is Reported. [3][6] |\n| **Version** | RFC 9727, published 2025-06-13. `draft-ietf-httpapi-api-catalog-00` (2023-09-12) replaced `draft-smith-api-catalog`. [1][4][5] |\n| **Message format** | MUST publish `application/linkset+json`. SHOULD add profile `https://www.rfc-editor.org/info/rfc9727`. `item` identifies each API. [1] |\n| **IANA registration** | Permanent `api-catalog` well-known URI (IETF, 2024-12-23), plus the link relation and profile URI. [1][8][9][10][11] |\n| **Headers** | HTTPS HEAD to `/.well-known/api-catalog` SHALL return a `Link` header with relation `api-catalog`. [1] |\n| **Specification** | [api-catalog: A Well-Known URI and Link Relation to Help Discovery of APIs](https://www.rfc-editor.org/rfc/rfc9727.html) [1] |\n| **Found at** | `/.well-known/api-catalog`, or any other URI the publisher chooses, signposted by the `api-catalog` link relation. [1] |\n| **Licence** | Revised BSD License text, as described in Section 4.e of the Trust Legal Provisions. [1] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [Adoption and ecosystem](#adoption-and-ecosystem)\n4. [See also](#see-also)\n5. [References](#references)\n\n---\n\n## Problem and scope\n\nSuch APIs must be discovered before they may be used: the external party needs to know what APIs a given Publisher exposes, their purpose, any policies for usage, and the endpoint to interact with each API. [1] The Publisher MUST publish the API catalog, a document listing a Publisher's APIs, in the Linkset format `application/linkset+json`, and the Linkset SHOULD include profile `https://www.rfc-editor.org/info/rfc9727`. [1] The API catalog MUST include hyperlinks to API endpoints. Used in the catalog, `item` identifies a target resource that represents a member API. [1] RFC 9727 does not mandate paths for API endpoints. [1] A `/.well-known/api-catalog` location MUST support `application/linkset+json` and MAY also support other formats via content negotiation. [1] It is RECOMMENDED that the catalog also include links to OpenAPI Specification definitions for each API. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **Linkset (RFC 9264)** | `RFC 9264` | Profiles classic standard | RFC 9264 defines `application/linkset+json` linksets. RFC 9727 requires that type and the `api-catalog` URI. [1][12] |\n| **Well-Known URIs (RFC 8615)** | `RFC 8615` | Profiles classic standard | RFC 9727 registers permanent well-known suffix `api-catalog` (IANA 2024-12-23, change controller IETF) under RFC 8615. [1][8] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[AI Catalog well-known file](/protocols/ai-catalog-well-known-file/)** | Peer alternative | RFC 9727 publishes a linkset at `/.well-known/api-catalog`. AI Catalog uses `application/ai-catalog+json` at `/.well-known/ai-catalog.json`. [1][2] |\n| **[Agentic Resource Discovery (ARD)](/protocols/ard/)** | Peer alternative | RFC 9727 discovers APIs through a linkset and `api-catalog`. ARD fetches JSON at `/.well-known/ard.json`. [1][13] |\n| **[MCP Server Cards](/protocols/mcp-server-cards/)** | Complements | RFC 9727 links API descriptions. SEP-2127 cards describe MCP servers and may publish `/.well-known/ai-catalog.json`. [1][14] |\n| **[agents.json](/protocols/agents-json/)** | Complements | RFC 9727 is a linkset at `/.well-known/api-catalog`. agents.json is a separate file at `/.well-known/agents.json`. [1][15] |\n| **[DNS-AID (DNS for AI Discovery)](/protocols/dns-aid/)** | Complements | RFC 9727 is fetched over HTTPS. DNS-AID publishes agent records as Service Binding (SVCB) DNS records. [1][16] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (12 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).*\n\n### Who publishes or hosts it\n\n| Actor | Role | Status | Artifact | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Hugging Face** | ML hub API catalog | Live (HTTP 200) · checked 2026-11-04 | Profiled `application/linkset+json` with `item` and `rel=\"api-catalog\"`. | [huggingface.co/.well-known/api-catalog](https://huggingface.co/.well-known/api-catalog) [17] |\n| **Vercel** | Cloud platform API catalog | Live (HTTP 200) · checked 2026-11-04 | Profiled `application/linkset+json` with `item` `https://api.vercel.com` and `rel=\"api-catalog\"`. | [vercel.com/.well-known/api-catalog](https://vercel.com/.well-known/api-catalog) [18] |\n| **ClickHouse** | Cloud database API catalog | Live (HTTP 200) · checked 2026-11-04 | Profiled `application/linkset+json` with `item` `https://api.clickhouse.cloud/v1` and an absolute `Link`. | [clickhouse.com/.well-known/api-catalog](https://clickhouse.com/.well-known/api-catalog) [19] |\n| **Fly.io** | Compute platform API catalog | Live (HTTP 200) · checked 2026-11-04 | Three `item` APIs in profiled `application/linkset+json`; no catalog `Link` response header. | [fly.io/.well-known/api-catalog](https://fly.io/.well-known/api-catalog) [20] |\n| **Supabase** | Postgres & MCP API catalog | Live (HTTP 200) · checked 2026-11-04 | `application/linkset+json` lists `item` `https://api.supabase.com/v1` and `https://mcp.supabase.com/mcp`; no `Link` header. | [supabase.com/.well-known/api-catalog](https://supabase.com/.well-known/api-catalog) [21] |\n| **Cloudflare Developer Documentation** | Developer docs API catalog | Live (HTTP 200) · checked 2026-11-04 | Profiled `application/linkset+json` anchored at `https://developers.cloudflare.com/api/` with `service-desc`, not `item`. | [developers.cloudflare.com/.well-known/api-catalog](https://developers.cloudflare.com/.well-known/api-catalog) [22] |\n| **PlanetScale** | Database platform API catalog | Live (HTTP 200) · checked 2026-11-04 | `application/linkset+json` anchors `https://api.planetscale.com/v1` with `service-desc` `openapi.yaml`, not an `item` array. | [planetscale.com/.well-known/api-catalog](https://planetscale.com/.well-known/api-catalog) [23] |\n| **Zep** | Agent memory API & MCP catalog | Live (HTTP 200) · checked 2026-11-04 | `application/linkset+json` anchors `https://api.getzep.com/` with `service-doc`, `status`, and `related`, not `item`. | [getzep.com/.well-known/api-catalog](https://www.getzep.com/.well-known/api-catalog) [24] |\n| **dri.es** | Personal site search API catalog | Live (HTTP 200) · checked 2026-11-04 | Profiled `application/linkset+json` for `https://dri.es/api` and `https://dri.es/mcp`, without an `item` array. | [dri.es/.well-known/api-catalog](https://dri.es/.well-known/api-catalog) [25] · [Dries Buytaert](https://dri.es/helping-agents-discover-my-site-search-with-an-api-catalog) [26] |\n| **IBM API Connect CMS Portal** | API management developer portal | Supported · as of 2025-12-16 | CMS Portal `v12.1.0.0` generates `linkset.json` at `{PortalURL}/.well-known/api-catalog` for public APIs. | [IBM Community](https://community.ibm.com/community/user/blogs/xuantong-liu/2025/10/13/introducing-api-catalog-support-in-ibm-api-connect) [27] |\n| **EventCatalog** | Architecture catalog generator | Supported · as of 2026-05-25 | Publishes `/.well-known/api-catalog` as profiled `application/linkset+json` for services, domains, and MCP. | [EventCatalog](https://www.eventcatalog.dev/blog/api-catalog) [28] |\n\n### Bot, client & tool support\n\n| Actor | Role | Status | Checked behavior | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Cloudflare Agent Readiness** | Readiness checker | Supported · as of 2026-04-17 | `isitagentready.com` scores API Catalog (RFC 9727) under Capabilities by requesting the entered site. | [André Jesus and Vance Morrison, Cloudflare Blog (published 2026-04-17)](https://blog.cloudflare.com/agent-readiness/) [29] |\n\n### Ecosystem censuses\n\n- **Real RFC 9727 LinkSet publishers at /.well-known/api-catalog (API Evangelist)** (*as of 2026-05-22*): Four providers serve a real RFC 9727 LinkSet at /.well-known/api-catalog [30]\n- **api-catalog adopters among agent-focused sites (Lumar Agentic Readiness)** (*as of 2026-10-03*): Lumar rates API Catalog Early production (L2), rising as of 2026-10-03, and says publication moved from 4 real catalogs in a 74-site census (May 2026) to 7 among 37 well-known agent-focused sites (October 2026). The visible adopter table marks Vercel, Supabase, Hugging Face, and Cloudflare developer docs as production. [31]\n\n---\n\n## See also\n\n- **[Agent Readability Spec](/protocols/vercel-agent-readability/)** *(Complements)* — The guide scores human-site readability files, while RFC 9727 serves a linkset of API descriptions at /.well-known/api-catalog.\n- **[The 'knowledge-linkset' Well-Known URI for Publishing Knowledge Artefacts](/protocols/knowledge-linkset/)** *(Peer alternative)* — knowledge-linkset publishes knowledge artefacts as application/linkset+json at /.well-known/knowledge-linkset, with optional SHA-256 digests and rel=\"describedby\", while RFC 9727 is application/linkset+json at /.well-known/api-catalog with profile https://www.rfc-editor.org/info/rfc9727 and rel=\"api-catalog\".\n- **[OAuth Protected Resource and Authorization Server Metadata (as used for agent authorization)](/protocols/oauth-metadata-for-agents/)** *(Complements)* — RFC 9727 is a well-known linkset of HTTP APIs. RFC 9728 names one resource's authorization server.\n- **[llms.txt](/protocols/llms-txt/)** *(Complements)* — RFC 9727 publishes a machine-readable API catalog at `/.well-known/api-catalog`, whereas `/llms.txt` indexes Markdown documentation at any site subpath.\n- **Category:** [Discover protocols](/category/discover/)\n\n---\n\n## References\n\n1. K. Smith (Vodafone), *api-catalog: A Well-Known URI and Link Relation to Help Discovery of APIs* (published June 2025) — <https://www.rfc-editor.org/rfc/rfc9727.html>\n2. Agent Card Working Group (Google, Microsoft, Anthropic, PulseMCP, Cisco Outshift, AWS), *AI Catalog* (Official specification; fetched 2026-10-30) — <https://ai-catalog.io/spec/>\n3. IETF Datatracker, *RFC 9727: api-catalog: A Well-Known URI and Link Relation to Help Discovery of APIs* (Proposed Standard (June 2025); last updated 2026-05-20) — <https://datatracker.ietf.org/doc/rfc9727/>\n4. IETF Datatracker, *draft-ietf-httpapi-api-catalog document history* (WG -00 published 2023-09-12; individual -00 dated 2023-05-04) — <https://datatracker.ietf.org/doc/draft-ietf-httpapi-api-catalog/history/>\n5. IETF Datatracker, *RFC 9727 document history* (RFC published 2025-06-13) — <https://datatracker.ietf.org/doc/rfc9727/history/>\n6. RFC Editor, *RFC Errata records for RFC 9727* (Errata ID 9009 reported 2026-06-21) — <https://errata.rfc-editor.org/search/?rfc_number=9727&presentation=records>\n7. K. Smith, Ed. (Vodafone), *api-catalog: A well-known URI to help discovery of APIs (draft-smith-api-catalog-00 HTML)* (published 4 May 2023) — <https://datatracker.ietf.org/doc/html/draft-smith-api-catalog-00>\n8. IANA, *Well-Known URIs* (registry last updated 2026-10-26) — <https://www.iana.org/assignments/well-known-uris>\n9. IANA, *Link Relations* (registry last updated 2026-06-12) — <https://www.iana.org/assignments/link-relations>\n10. IANA, *Profile URIs* (registry last updated 2026-10-05) — <https://www.iana.org/assignments/profile-uris>\n11. IANA, *Media type application/linkset+json* (published specification RFC 9264) — <https://www.iana.org/assignments/media-types/application/linkset+json>\n12. E. Wilde (Axway) and H. Van de Sompel (Data Archiving and Networked Services), *Linkset: Media Types and a Link Relation Type for Link Sets* (published July 2022) — <https://www.rfc-editor.org/rfc/rfc9264.html>\n13. Google, Microsoft, Hugging Face, *ARD Specification* (fetched 2026-10-30) — <https://agenticresourcediscovery.org/spec/>\n14. Model Context Protocol, *SEP-2127: MCP Server Cards - HTTP Server Discovery* (modified 2026-10-06) — <https://modelcontextprotocol.io/seps/2127-mcp-server-cards>\n15. Wildcard AI, *agents.json* (fetched 2026-10-30) — <https://github.com/wild-card-ai/agents-json/blob/master/README.md>\n16. J. Mozley, N. Williams, B. Sarikaya, R. Schott, J. Damick, and S. Courtney, *DNS for AI Discovery (draft-mozleywilliams-dawn-dnsaid-00)* (2026-11-02 (fetched 2026-11-07)) — <https://www.ietf.org/archive/id/draft-mozleywilliams-dawn-dnsaid-00.txt>\n17. Hugging Face, *huggingface.co API catalog linkset* (fetched 2026-11-04) — <https://huggingface.co/.well-known/api-catalog>\n18. Vercel, *vercel.com API catalog linkset* (response dated Fri, 30 Oct 2026) — <https://vercel.com/.well-known/api-catalog>\n19. ClickHouse, *clickhouse.com API catalog linkset* (response dated Fri, 30 Oct 2026) — <https://clickhouse.com/.well-known/api-catalog>\n20. Fly.io, *fly.io API catalog linkset* (response dated Fri, 30 Oct 2026) — <https://fly.io/.well-known/api-catalog>\n21. Supabase, *RFC 9727 API Catalog (supabase.com/.well-known/api-catalog)* (checked 2026-11-04) — <https://supabase.com/.well-known/api-catalog>\n22. Cloudflare, *developers.cloudflare.com API catalog linkset* (response dated Fri, 30 Oct 2026) — <https://developers.cloudflare.com/.well-known/api-catalog>\n23. PlanetScale, *RFC 9727 API Catalog (planetscale.com/.well-known/api-catalog)* (checked 2026-11-04) — <https://planetscale.com/.well-known/api-catalog>\n24. Zep, *RFC 9727 API Catalog (getzep.com/.well-known/api-catalog)* (checked 2026-11-04) — <https://www.getzep.com/.well-known/api-catalog>\n25. Dries Buytaert, *RFC 9727 API Catalog (dri.es/.well-known/api-catalog)* (checked 2026-11-04) — <https://dri.es/.well-known/api-catalog>\n26. Dries Buytaert, *Helping agents discover my site search with an API Catalog* (published 2026-07-22) — <https://dri.es/helping-agents-discover-my-site-search-with-an-api-catalog>\n27. Xuantong Liu (IBM), *Introducing API Catalog Support in IBM API Connect CMS Portal in v12.1.0.0* (posted 2025-12-16) — <https://community.ibm.com/community/user/blogs/xuantong-liu/2025/10/13/introducing-api-catalog-support-in-ibm-api-connect>\n28. David Boyne (EventCatalog), *Let tools find your APIs from one URL* (published 2026-05-25) — <https://www.eventcatalog.dev/blog/api-catalog>\n29. André Jesus and Vance Morrison (Cloudflare), *Introducing the Agent Readiness score. Check to see if your site is agent-ready* (published 2026-04-17; modified 2026-07-15) — <https://blog.cloudflare.com/agent-readiness/>\n30. Kin Lane (API Evangelist), *Only Four API Providers Publish a Real .well-known/api-catalog Right Now* (published 2026-05-22) — <https://apievangelist.com/blog/2026/05/22/four-providers-publishing-well-known-api-catalog/>\n31. Lumar, *API catalog capability* (as of 2026-10-03) — <https://agentic-readiness.lumar.io/docs/capabilities/api-catalog>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "RSL",
   "adoption": {
    "level": "observed",
    "by": "Medium, RSL Standard (rslstandard.org), RSL Collective, Fastly, Cloudflare, and Akamai",
    "probe_run": null
   },
   "aliases": [],
   "analog": "Creative Commons license badge, but machine-enforceable and priced",
   "collisions": [],
   "discovery": {
    "mechanism": "robots.txt reference, HTML <link>, RSS/HTTP header, or a standalone rsl.xml file",
    "path": "/rsl.xml"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://rslstandard.org/rsl",
     "claim": "RSL Technical Steering Committee, *Really Simple Licensing (RSL) 1.0 Specification*, published 2025-12-10",
     "date": null,
     "quote": "This document defines the Really Simple Licensing (RSL) 1.0 protocol, a standardized XML vocabulary and associated discovery and authorization mechanisms for expressing machine-readable usage, licensing, payment, and legal terms that govern how digital assets may be accessed or licensed by AI systems and automated agents. / Document RSL-SPEC-1.0 Category Industry Specification / All mechanisms are functionally equivalent; clients MUST honor whichever is provided. ... robots.txt directive License: [absoluteURL] ... HTTP Link header Link: <license-URL>; rel=\"license\" ... HTML <link> or <script> ... RSS module <rsl:content> inside <item> / The accompanying Open License Protocol, Crawler Authorization Protocol, and Encrypted Media Standard protocols are OPTIONAL extensions ... The XML namespace name for this specification is: https://rslstandard.org/rsl ... The media type associated with RSL documents is: application/rsl+xml / 4.8 Media and Data File Association RSL licenses MAY be embedded directly in the metadata facility of media or data files. / Document RSL-SPEC-1.0 Category Industry Specification Status Recommendation Published 2025-12-10 ... This document was published by the RSL Technical Steering Committee (TSC) as a Recommendation. A Recommendation is considered stable, has received broad review, and is suitable for implementation and deployment. / This document was published by the RSL Technical Steering Committee (TSC) as a Recommendation. / Published 2025-12-10 / Editors G. Boyer (RSL Collective); C. Chen (Condé Nast); J. Fortuna (Ziff Davis); RV Guha (Schema.org); S. Koenig (Yahoo); J. Le Page (Automattic); A. Odewahn (O'Reilly Media); E. Walther (RSL Collective); S. Wistow (Fastly) / Issue Tracker https://github.com/rslstandard/rsl/issues / Document RSL-SPEC-1.0 Category Industry Specification Status Recommendation Published 2025-12-10 / A Recommendation is considered stable, has received broad review, and is suitable for implementation and deployment. / Really Simple Licensing (RSL) 1.0 Specification / Document RSL-SPEC-1.0 / Previous Version https://rslstandard.org/rsl/0.9/ / The XML namespace name for this specification is: https://rslstandard.org/rsl / All RSL documents MUST declare this namespace as the default namespace on the root <rsl> element / The media type associated with RSL documents is: application/rsl+xml / An RSL document, also called a license, defines machine-readable licensing terms for one or more digital assets / RSL supports multiple mechanisms for associating a license with an asset. All mechanisms are functionally equivalent; clients MUST honor whichever is provided. / robots.txt directive License: [absoluteURL] / The value MUST be an absolute URI. / HTTP Link header Link: <license-URL>; rel=\"license\" / HTML <link> or <script> HTML document / RSS module <rsl:content> inside <item> / The Link header rel attribute MUST be \"license\", the type attribute MUST be \"application/rsl+xml\", and the target MUST be an absolute URL to a valid RSL license file. / Open License Protocol (OLP): an OAuth 2.0 extension for acquiring and validating RSL licenses. / Crawler Authorization Protocol (CAP): an HTTP authorization scheme for licensed crawlers. / Encrypted Media Standard (EMS): a format for securely encrypting and licensing digital assets. / The accompanying Open License Protocol, Crawler Authorization Protocol, and Encrypted Media Standard protocols are OPTIONAL extensions / URI https://rslstandard.org/rsl / Copyright © 2025 RSL Collective. Licensed under CC BY-ND 4.0. \"RSL\" and \"Really Simple Licensing\" are trademarks of the RSL Collective. / The publisher allows access to its site for indexing and linking in search results, but prohibits any use by AI systems, including model training or reuse of the content in grounding, retrieval, or generative search summaries. / The publisher requires payment through a third-party platform (example.com) each time an automated agent wants to crawl content on its site. ... For example, a publishing or hosting platform that already operates its own licensing server can expose RSL licenses to ensure its terms are discoverable and machine-readable while continuing to use its existing authorization or payment infrastructure. / The <license> element defines the rights, costs, restrictions, and reporting requirements associated with a digital asset. / These capabilities, the RSL XML vocabulary, and the discovery methods described in Section 4, are the required foundation of any conformant RSL implementation. / The accompanying Open License Protocol, Crawler Authorization Protocol, and Encrypted Media Standard protocols are OPTIONAL extensions that provide additional content rights enforcement, authorization, or encryption functions. Implementers MAY adopt RSL as a licensing and discovery framework without implementing any of these network protocols. / A typical CAP flow proceeds as follows: The client discovers the RSL license governing a digital asset using one of the discovery mechanisms defined in Section 4. Unless the client has already licensed the asset, it obtains a License Token with token_type = \"License\" from the associated License Server via the OLP /token endpoint. The client requests the content from the Resource Server, including the License Token value in the HTTP Authorization header. The Resource Server validates the token, either locally or by calling the License Server's /introspect endpoint, and verifies that the license terms permit access to the requested resource. / Document RSL-SPEC-1.0 ... The XML namespace name for this specification is: https://rslstandard.org/rsl ... The media type associated with RSL documents is: application/rsl+xml / An RSL document, also called a license, defines machine-readable licensing terms for one or more digital assets ... expressing machine-readable usage, licensing, payment, and legal terms that govern how digital assets may be accessed or licensed by AI systems and automated agents. / All RSL documents MUST declare this namespace as the default namespace on the root <rsl> element and SHOULD NOT use a prefix. / Each <content> element MUST include a url attribute and at least one <license> child element. ... server Optional. URL of an RSL License Server that manages this asset and implements the Open License Protocol (OLP). If this attribute is present, the url attribute MUST be non-empty, and clients MUST obtain a license from this server for the specified asset before access, even if the license type is free. ... encrypted Optional. Boolean (true/false, default false). If true, the file is encrypted, and the server MUST support the Encrypted Media Standard. / This vocabulary is used with <permits type=\"usage\"> and <prohibits type=\"usage\">. Token Definition all Any automated processing, including AI training and search. ai-all Any use by AI systems, including training, inference, indexing, retrieval, generation, grounding, or model evaluation. This term explicitly includes the ai-train, ai-input, and ai-index usage types defined below, as well as other AI-related uses not yet enumerated. ai-train Training or fine-tuning AI models. ai-input Input into AI models, including retrieval-augmented generation, grounding, or other use of the content to produce generative AI responses or search summaries. ai-index Inclusion in an AI system's internal index or retrieval database. search Building a search index and providing search results / This vocabulary is used with <permits type=\"user\"> and <prohibits type=\"user\">. Token Definition commercial General commercial use. non-commercial Non-commercial purposes. education Educational use in schools or universities. government Government or public sector purposes. personal Individual or personal use only. ... A <license> element MAY contain at most one <permits> element for each distinct value of the type attribute. ... A <license> element MAY contain at most one <prohibits> element for each distinct value of the type attribute. ... If both <permits> and <prohibits> appear for the same type, prohibitions take precedence. / RSL licenses MUST be interpreted conservatively to avoid the unintended expansion of rights. / allowed activities, user classes, and geographic scope for a license. ... <permits type=\"geo\">US DE</permits> / If two licenses define conflicting terms, clients MUST honor the most restrictive combination of rights. / Implementations MUST retrieve RSL files and related license metadata only over HTTPS / If omitted, the license is assumed to be free. ... type Optional. MUST be one of the following values: • purchase: One-time payment. • subscription: Recurring payment for access. • training: Payment every time the content is used for AI training. • crawl: Payment every time the content is crawled. • use: Payment each time the content contributes to an AI-generated output, including use in inference, grounding, or generation processes. • contribution: A good faith monetary or in-kind contribution ... • attribution: Licensees MUST provide visible credit and a functional link to the original source. • free: No payment or attribution required. / The <amount> element specifies an explicit monetary cost for the permitted use or term, enabling automated billing or reporting. Attribute Description currency Required. ISO 4217 currency code (e.g., USD, EUR). / The <legal> element defines legal representations about the license. ... Each type of legal representation (e.g., warranty) MAY appear no more than once within a given <license> element. ... type=\"warranty\" Optional. Declares warranties made by the licensor about the asset. ... type=\"disclaimer\" Optional. Declares disclaimers that qualify or negate warranties or liability. / The <schema> element associates Schema.org metadata (e.g, CreativeWork, Book, or Person) with the enclosing <content>. ... type=\"application/ld+json\" ... The <copyright> element identifies the individual or organization owning or controlling the asset's rights ... The <terms> element specifies a URL linking to human-readable terms of service or supplemental legal information not encoded in XML. ... Publishers MAY reference the standard access terms / Servers MAY enforce licensing compliance through paywalls, bot management services, or the RSL Crawler Authorization Protocol (CAP) (Section 6) and Open License Protocol (OLP) (Section 5). ... Resource Server Web server or CDN that serves the licensable digital assets and enforces license controls. ... If the server attribute in the <content> element is set, the client sends a licensing request to that License server's /token endpoint, unless it has already obtained a license, or accepted the terms of a <standard> or <custom> license that governs the asset. / The License directive MAY be specified either: globally (outside any User-agent group), in which case it applies to all clients, or within a User-agent group, in which case it applies only to clients that select that group under REP group selection rules. ... The value MUST be an absolute URI. ... The License directive does not modify the access permissions expressed by Allow or Disallow fields. / The <rss> root element MUST declare the namespace xmlns:rsl=\"https://rslstandard.org/rsl\". Each <item> describing a licensed asset SHOULD include an <rsl:content> element that identifies the asset and contains a corresponding <rsl:license> element describing the applicable terms. ... <rss xmlns:rsl=\"https://rslstandard.org/rsl\" version=\"2.0\"> / Servers MAY associate a returned resource with its governing RSL license using the HTTP Link header. The Link header rel attribute MUST be \"license\", the type attribute MUST be \"application/rsl+xml\", and the target MUST be an absolute URL to a valid RSL license file. / An HTML license association applies to the parent element containing the <link> or <script> element and its descendants. ... The rel attribute MUST be \"license\", the type attribute MUST be \"application/rsl+xml\", and the href value MUST be an absolute URL pointing to a valid RSL license file. ... An inline license uses a <script> element with type=\"application/rsl+xml\" ... The embedded RSL document MUST include exactly one <content> element. / 4.8 Media and Data File Association RSL licenses MAY be embedded directly in the metadata facility of media or data files. Embedded media and data file association applies RSL licensing terms to the containing file. The embedded RSL document MUST specify a stable canonical URL in the url attribute of the <content> element. / Be stored in a metadata facility appropriate to the container format (e.g., EPUB, XMP for image/PDF, ID3/atoms for audio/video, PNG iTXt, or equivalent). / OLP extends the OAuth 2.0 authorization framework / If the server attribute in the <content> element is set, the client sends a licensing request to that License server's /token endpoint, unless it has already obtained a license, or accepted the terms of a <standard> or <custom> license that governs the asset. ... If the content is encrypted, the Client uses the /key endpoint of the License Server to obtain a decryption key governed by the license. ... All OLP communications MUST occur over HTTPS ... An RSL License Server implementing the OLP API MUST expose a set of standardized HTTPS endpoints ... /token POST Acquire a License Token ... /introspect POST Validate an existing License Token ... /key POST Retrieve a key for decrypting / The core RSL specification defines a declarative, machine-readable format for terms of service ... This allows hosting providers, CDNs, or pay-per-crawl services to keep their existing registration, payment, and enforcement flows while remaining interoperable with RSL. ... MAY include terms from additional standardized vocabularies as they become available (e.g., IETF AI Preferences). / The License directive specifies an absolute URL that resolves to a valid RSL license document. / <prohibits type=\"usage\">ai-all</prohibits> / A linked license uses a <link> element to associate an HTML element and its descendants with an external RSL license document. The rel attribute MUST be \"license\", the type attribute MUST be \"application/rsl+xml\", and the href value MUST be an absolute URL pointing to a valid RSL license file. / This example license allows anyone to reuse the content under the Creative Commons Attribution 4.0 terms. / [RSS] RSS Advisory Board, \"RSS 2.0 Specification\", March, 2009. / When included in a feed, RSL functions as an RSS module that extends the RSS <item> element with explicit licensing metadata. / The <rss> root element MUST declare the namespace xmlns:rsl=\"https://rslstandard.org/rsl\". / Each <item> describing a licensed asset SHOULD include an <rsl:content> element / [ATOM] M. Nottingham and R. Sayre, \"The Atom Syndication Format\", RFC 4287, December 2005. / RSL builds on the ideas of the RSS syndication format and the Robots Exclusion Protocol [RFC 9309] / Group-scoped: A License directive that appears within a User-agent group applies only to clients that select that group under [RFC 9309]. / This category includes the Cloudflare Content Signals vocabulary and MAY include terms from additional standardized vocabularies as they become available (e.g., IETF AI Preferences). / A linked license uses a <link> element to associate an HTML element and its descendants with an external RSL license document. / <payment type=\"crawl\"> / The publisher requires payment through a third-party platform (example.com) each time an automated agent wants to crawl content on its site. / <standard>https://example.com/pay-per-crawl</standard>",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://www.ietf.org/archive/id/draft-ietf-aipref-vocab-08.txt",
     "claim": "P. Keller (Open Future) and M. Thomson (Mozilla), *A Vocabulary For Expressing AI Usage Preferences (draft-ietf-aipref-vocab-08)*, 14 September 2026",
     "date": null,
     "quote": "This document defines a vocabulary for expressing preferences regarding how digital assets are used by automated processing systems. / train-ai=y, search=n",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://www.ietf.org/archive/id/draft-ietf-aipref-attach-05.txt",
     "claim": "G. Illyes (Google) and M. Thomson (Mozilla), *Associating AI Usage Preferences with Content in HTTP (draft-ietf-aipref-attach-05)*, 19 August 2026",
     "date": null,
     "quote": "This document defines attachment methods using the Robots Exclusion Protocol and HTTP header fields. / User-Agent: * Allow: / Content-Usage: train-ai=n / HTTP Content-Usage Header Field",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://blog.cloudflare.com/content-signals-policy/",
     "claim": "Cloudflare, *Giving users choice with Cloudflare's new Content Signals Policy*, published 2025-09-24; modified 2026-07-15",
     "date": null,
     "quote": "This policy defines three content signals - search, ai-input, and ai-train - and their relevance to crawlers. / Content-Signal: search=yes, ai-train=no",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://blog.cloudflare.com/introducing-pay-per-crawl/",
     "claim": "Will Allen and Simon Newton, Cloudflare Blog, *Introducing pay per crawl: Enabling content owners to charge AI crawlers for access*, published 2025-07-01; modified 2026-07-15",
     "date": null,
     "quote": "Should a crawler request a paid URL, Cloudflare returns an HTTP 402 Payment Required response, accompanied by a crawler-price header.",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://rslstandard.org/press/rsl-1-specification-2025",
     "claim": "RSL Collective, *RSL AI Licensing 1.0 Now an Official Industry Standard*, 10 December 2025; fetched 2026-11-06",
     "date": null,
     "quote": "RSL 1.0 augments the simple yes/no blocking rules of robots.txt with a universal language for content rights and licensing terms / Cloudflare, Akamai, Creative Commons, and the IAB Tech Lab / December 10, 2025 / 1500+ media organizations, brands, and technology companies worldwide now endorse RSL / The Associated Press, Vox Media, USA Today, Boston Globe Media, BuzzFeed, Stack Overflow",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://raw.githubusercontent.com/rslstandard/rsl/main/README.md",
     "claim": "rslstandard, *Really Simple Licensing (RSL) README*, fetched 2026-10-31",
     "date": null,
     "quote": "The specification is maintained by the RSL Technical Steering Committee and is currently in draft.",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://rslstandard.org/press/rsl-standard",
     "claim": "RSL Collective, *New RSL web standard and collective rights organization*, 10 September 2025; fetched 2026-11-06",
     "date": null,
     "quote": "The RSL Collective is led by Doug Leeds, former CEO IAC Publishing, Ask.com, and Eckart Walther, former CEO Cardspring, product executive Uber, Twitter, Yahoo, and co-creator of the RSS standard. / Fastly, Quora, and ADWEEK / September 10, 2025",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://rslstandard.org/rsl/0.9/",
     "claim": "RSL Technical Steering Committee, *Really Simple Licensing (RSL) 0.9 Specification*, last updated 2025-09-16",
     "date": null,
     "quote": "Version 0.9 (Draft). Last updated: 2025-09-16.",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://rslstandard.org/",
     "claim": "Internet Licensing Collective, *RSL: Really Simple Licensing*, fetched 2026-11-03",
     "date": null,
     "quote": "License: https://example.com/license.xml",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://www.theverge.com/news/775072/rsl-standard-licensing-ai-publishing-reddit-yahoo-medium",
     "claim": "Emma Roth (The Verge), *The web has a new system for making AI companies pay up*, 10 September 2025; fetched 2026-11-06",
     "date": null,
     "quote": "The RSL Standard by itself also can't block bots from visiting a website, unlike the \"pay per crawl\" system already offered by Cloudflare. The RSL Collective is currently working with Fastly, a content delivery network, to admit AI bots to websites based on whether they've agreed to license content.",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://www.rfc-editor.org/rfc/rfc9309.html",
     "claim": "M. Koster, G. Illyes, H. Zeller, and L. Sassman (IETF), *RFC 9309: Robots Exclusion Protocol*, published September 2022",
     "date": null,
     "quote": "Crawlers set their own name, which is called a product token, to find relevant groups. / These lines indicate whether accessing a URI that matches the corresponding path is allowed or disallowed.",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://medium.com/robots.txt",
     "claim": "Medium, *robots.txt (medium.com/robots.txt)*, checked 2026-11-04",
     "date": null,
     "quote": "HTTP 200 ... last-modified: Wed, 04 Nov 2026 22:06:47 GMT ... Sitemap: https://medium.com/sitemap/sitemap.xml License: https://medium.com/license.xml / License: https://medium.com/license.xml",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://rslstandard.org/robots.txt",
     "claim": "RSL Standard, *robots.txt (rslstandard.org/robots.txt)*, checked 2026-11-04",
     "date": null,
     "quote": "HTTP 200 ... Content-Type: text/plain; charset=utf-8 ... License: https://internetcollective.org/license.xml User-agent: * / License: https://internetcollective.org/license.xml",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://rslcollective.org/",
     "claim": "RSL Collective, *RSL Collective: The Collective Rights Organization for the Internet*, fetched 2026-11-03",
     "date": null,
     "quote": "The RSL 1.0 Standard Specification is now available. / Featured Supporters / Steve Huffman, CEO of Reddit / Reddit supports the RSL Standard and the RSL Collective as important steps toward protecting the open web. / Vivek Shah, CEO of Ziff Davis / Ziff Davis strongly supports RSL's efforts at ensuring that copyright holders receive fair compensation for their intellectual property. / <permits type=\"usage\">ai-all</permits> / https://api.rslcollective.org / https://rslcollective.org/license",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://www.reddit.com/robots.txt",
     "claim": "Reddit, *robots.txt (reddit.com/robots.txt)*, checked 2026-11-04",
     "date": null,
     "quote": "Welcome to Reddit's robots.txt",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://www.oreilly.com/robots.txt",
     "claim": "O'Reilly Media, *robots.txt (oreilly.com/robots.txt)*, checked 2026-11-04",
     "date": null,
     "quote": "Disallow: /images/",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://www.quora.com/robots.txt",
     "claim": "Quora, *robots.txt (quora.com/robots.txt)*, checked 2026-11-04",
     "date": null,
     "quote": "strictly prohibited from using Quora platform content",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://www.people.com/robots.txt",
     "claim": "People, *robots.txt (people.com/robots.txt)*, checked 2026-11-04",
     "date": null,
     "quote": "Sitemap: https://people.com/sitemap.xml",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://www.yahoo.com/robots.txt",
     "claim": "Yahoo, *robots.txt (yahoo.com/robots.txt)*, checked 2026-11-04",
     "date": null,
     "quote": "Disallow: /info/p.gif",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://www.fastly.com/robots.txt",
     "claim": "Fastly, *robots.txt (fastly.com/robots.txt)*, checked 2026-11-04",
     "date": null,
     "quote": "Sitemap: https://www.fastly.com/sitemap/sitemap-index.xml",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://www.inspiredtaste.net/robots.txt",
     "claim": "Inspired Taste, *robots.txt (inspiredtaste.net/robots.txt)*, checked 2026-11-04",
     "date": null,
     "quote": "Sitemap: https://www.inspiredtaste.net/sitemap.xml",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://rankade.com/robots.txt",
     "claim": "Rankade, *robots.txt (rankade.com/robots.txt)*, checked 2026-11-04",
     "date": null,
     "quote": "Disallow: /signup/thank-you",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://www.ewiki.org/robots.txt",
     "claim": "eWiki, *robots.txt (ewiki.org/robots.txt)*, checked 2026-11-04",
     "date": null,
     "quote": "LLM-Policy: /llms.txt",
     "ref": 24
    }
   ],
   "form": "document-format",
   "governance": "RSL Collective, a vendor consortium; issue tracker at github.com/rslstandard/rsl",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "created and verified against rslstandard.org/rsl"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "rsl",
   "implementation": "shipping",
   "last_verified": "2026-11-06",
   "name": "Really Simple Licensing",
   "native_status": "Recommendation (RSL's own maturity label, not a W3C/IETF Recommendation) — Document RSL-SPEC-1.0, Category 'Industry Specification'",
   "origin": {
    "date": "2025-09",
    "org": "RSL Collective (with Condé Nast, Ziff Davis, Yahoo, Automattic, O'Reilly Media, Fastly, and Schema.org's RV Guha as editors)"
   },
   "part_of": null,
   "parties": [
    "agent-site",
    "agent-payment"
   ],
   "phase": "stable",
   "probe": {
    "method": "GET",
    "on_absent": "No RSL license file is referenced from any of robots.txt, HTML, RSS, or HTTP headers; the site has not published RSL terms",
    "parse": "Look for an RSL reference line in robots.txt (pointing to an rsl.xml license file), or an HTML <link> element with an RSL relation, or a Content-License/Link HTTP header; then GET the referenced XML document and parse the <rsl> root element for <license>, <prohibits>, <permits> or <payment> children",
    "path": "{origin}/robots.txt"
   },
   "question": "What machine-readable license, price, and authorization terms govern how AI systems and crawlers may access or reuse a publisher's content?",
   "scope": "general",
   "spec_url": "https://rslstandard.org/rsl",
   "step": "permit",
   "summary_md": "**Really Simple Licensing** (**RSL**), Document `RSL-SPEC-1.0`, defines an XML vocabulary plus discovery and authorization mechanisms for machine-readable usage, licensing, payment, and legal terms that govern AI systems and automated agents. The root `<rsl>` document uses namespace `https://rslstandard.org/rsl` and media type `application/rsl+xml`. Clients discover it through five equivalent mechanisms: a `robots.txt` `License:` URL, an HTTP `Link` header with `rel=\"license\"`, HTML `<link>` or `<script>`, RSS `<rsl:content>`, or embedded media and data file metadata (Section 4.8, such as EPUB or XMP). OLP, CAP, and EMS are OPTIONAL extensions. The RSL Technical Steering Committee published Document `RSL-SPEC-1.0` as a Recommendation on 2025-12-10. A Recommendation is considered stable, has received broad review, and is suitable for implementation and deployment. The `rslstandard/rsl` README still says the specification is currently in draft.",
   "track": "vendor-consortium",
   "version": {
    "date": "2025-12-10",
    "label": "RSL 1.0"
   },
   "watch": [
    {
     "type": "page",
     "url": "https://rslstandard.org/rsl",
     "selector": "main",
     "cadence": "weekly"
    }
   ],
   "use_cases": [
    "control-ai-crawling",
    "accept-agent-payments",
    "serve-content-to-agents"
   ],
   "audience": [
    "site-owner",
    "platform",
    "standards-body"
   ],
   "pairs_with": [
    "ai-crawler-tokens-robots",
    "aipref-vocabulary",
    "aipref-content-usage-attachment",
    "cloudflare-content-signals-policy",
    "cloudflare-pay-per-crawl"
   ],
   "prerequisites": [
    "ai-crawler-tokens-robots"
   ],
   "hatnote_md": "This page is about Really Simple Licensing (RSL), Document RSL-SPEC-1.0, which defines an XML vocabulary and discovery and authorization mechanisms for machine-readable usage, licensing, payment, and legal terms. It is not the IETF AIPREF working group specifications ([AIPREF vocabulary](/protocols/aipref-vocabulary/) or [AIPREF Content-Usage attachment](/protocols/aipref-content-usage-attachment/)), Cloudflare's [Content Signals Policy](/protocols/cloudflare-content-signals-policy/) or [Pay Per Crawl](/protocols/cloudflare-pay-per-crawl/), or [AI crawler user-agent tokens in robots.txt](/protocols/ai-crawler-tokens-robots/).",
   "tier": "flagship",
   "lifecycle_status": "published_standard",
   "wire_archetype": "web_discovery",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-06",
   "v05_hatnote_html_md": "This page is about Really Simple Licensing (RSL), Document RSL-SPEC-1.0, which defines an XML vocabulary and discovery and authorization mechanisms for machine-readable usage, licensing, payment, and legal terms. It is not the IETF AIPREF working group specifications ([AIPREF vocabulary](/protocols/aipref-vocabulary/) or [AIPREF Content-Usage attachment](/protocols/aipref-content-usage-attachment/)), Cloudflare's [Content Signals Policy](/protocols/cloudflare-content-signals-policy/) or [Pay Per Crawl](/protocols/cloudflare-pay-per-crawl/), or [AI crawler user-agent tokens in robots.txt](/protocols/ai-crawler-tokens-robots/). [1][2][3][4][5]",
   "v05_elevator_pitch_md": "Really Simple Licensing (RSL) is an XML licensing standard that lets websites and digital publishers declare granular, machine-readable usage rights, AI training restrictions, and per-crawl payment terms for automated bots. Where traditional `robots.txt` rules only offer binary allow-or-disallow path blocking, publishers attach an `application/rsl+xml` `<rsl>` document (via `License:` directives, HTTP `Link` headers, or embedded file metadata) to permit search indexing while prohibiting or pricing AI ingestion. [1][6]",
   "v05_lead_md": "**Really Simple Licensing** (**RSL**), Document `RSL-SPEC-1.0`, defines an XML vocabulary plus discovery and authorization mechanisms for machine-readable usage, licensing, payment, and legal terms that govern AI systems and automated agents. [1] The root `<rsl>` document uses namespace `https://rslstandard.org/rsl` and media type `application/rsl+xml`. Clients discover it through five equivalent mechanisms: a `robots.txt` `License:` URL, an HTTP `Link` header with `rel=\"license\"`, HTML `<link>` or `<script>`, RSS `<rsl:content>`, or embedded media and data file metadata (Section 4.8, such as EPUB or XMP). OLP, CAP, and EMS are OPTIONAL extensions. [1] The RSL Technical Steering Committee published Document `RSL-SPEC-1.0` as a Recommendation on 2025-12-10. A Recommendation is considered stable, has received broad review, and is suitable for implementation and deployment. The `rslstandard/rsl` README still says the specification is currently in draft. [1][7]",
   "v05_identity_sentence_md": "**Really Simple Licensing** (**RSL**), Document `RSL-SPEC-1.0`, defines an XML vocabulary plus discovery and authorization mechanisms for machine-readable usage, licensing, payment, and legal terms that govern AI systems and automated agents. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Permit](/category/permit/) (`permit`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "RSL Technical Steering Committee (published December 10, 2025), co-founded by Eckart Walther and Doug Leeds at the RSL Collective with specification editors from eight organizations: RSL Collective, Condé Nast, Ziff Davis, Schema.org, Yahoo, Automattic, O'Reilly Media, and Fastly. [1][8]"
    },
    {
     "label": "Governed by",
     "value_md": "RSL Technical Steering Committee. Issue tracker: `https://github.com/rslstandard/rsl/issues`. [1][7]"
    },
    {
     "label": "Track",
     "value_md": "Industry Specification, published by the RSL Technical Steering Committee [1]"
    },
    {
     "label": "Status",
     "value_md": "Recommendation on the spec page; main README says draft. [1][7]"
    },
    {
     "label": "Version",
     "value_md": "RSL 1.0 (2025-12-10); 0.9 draft (2025-09-16); main README says draft. [1][7][9]"
    },
    {
     "label": "Message format",
     "value_md": "XML license. The root `<rsl>` element declares the namespace `https://rslstandard.org/rsl`. Media type `application/rsl+xml`. [1]"
    },
    {
     "label": "Found at",
     "value_md": "Five equivalent discovery mechanisms (`robots.txt` `License:` directive with a MUST absolute URI, HTTP `Link` header, HTML `<link>` or `<script>`, RSS `<rsl:content>`, and Section 4.8 embedded media or data file metadata in EPUB, XMP, ID3/atoms, or PNG iTXt); clients MUST honor whichever is provided. [1][10]"
    },
    {
     "label": "Headers",
     "value_md": "`Link: <license-URL>; rel=\"license\"`, with type `application/rsl+xml` and an absolute URL of the RSL license. [1]"
    },
    {
     "label": "Schemes",
     "value_md": "OPTIONAL: OLP (OAuth 2.0), CAP (crawler auth), and EMS. [1]"
    },
    {
     "label": "Specification",
     "value_md": "[Really Simple Licensing (RSL) 1.0 Specification](https://rslstandard.org/rsl) [1]"
    },
    {
     "label": "Licence",
     "value_md": "CC BY-ND 4.0. RSL is a trademark of the RSL Collective. [1]"
    }
   ],
   "v05_problem_md": "RSL 1.0 augments `robots.txt` yes/no blocking rules with a machine-readable language for content rights and licensing terms. For example, an `<rsl>` license block can allow indexing and linking in search results while prohibiting any AI use, including model training and reuse in grounding, retrieval, or generative search summaries, through `<prohibits type=\"usage\">ai-all</prohibits>`. [1][6] The `<license>` element defines the rights, costs, restrictions, and reporting requirements of a `<content>` asset. `<payment type=\"crawl\">` applies when the publisher requires payment each time an automated agent crawls. A platform that already operates a licensing server can expose RSL terms and keep its existing authorization or payment infrastructure. [1] The RSL XML vocabulary and the Section 4 discovery methods are the required foundation of any conformant implementation. The Open License Protocol, Crawler Authorization Protocol, and Encrypted Media Standard are OPTIONAL extensions. Implementers MAY adopt RSL without those network protocols. [1]",
   "v05_mechanism_delta_md": "The `<license>` element defines the rights, costs, restrictions, and reporting requirements of a `<content>` asset. `<payment type=\"crawl\">` applies when the publisher requires payment each time an automated agent crawls. A platform that already operates a licensing server can expose RSL terms and keep its existing authorization or payment infrastructure. [1]",
   "v05_scope_boundary_md": "The RSL XML vocabulary and the Section 4 discovery methods are the required foundation of any conformant implementation. The Open License Protocol, Crawler Authorization Protocol, and Encrypted Media Standard are OPTIONAL extensions. Implementers MAY adopt RSL without those network protocols. [1]",
   "v05_fuzzy_additions": [
    {
     "id": "rsl-1-0-xml-vocabulary-license-terms-and-payment-types",
     "heading": "RSL 1.0 XML vocabulary, license terms, and payment types",
     "body_md": "Really Simple Licensing, Document `RSL-SPEC-1.0`, defines an XML document format with media type `application/rsl+xml` and namespace `https://rslstandard.org/rsl`. An RSL document defines machine-readable usage, licensing, payment, and legal terms for one or more digital assets, each identified by a `<content>` url, that govern how those assets may be accessed or licensed by AI systems and automated agents. [1]",
     "bullets": [
      {
       "label": "Content URL scope",
       "text_md": "Root `<rsl>` MUST declare the namespace. Each `<content>` MUST include `url` and at least one `<license>`. If `server` is present, clients MUST obtain a license from the OLP License Server before access. `encrypted` defaults to false; if true, the server MUST support Encrypted Media Standard. [1]"
      },
      {
       "label": "Usage and user rules",
       "text_md": "Usage tokens for `<permits type=\"usage\">` and `<prohibits type=\"usage\">` are `all`, `ai-all`, `ai-train`, `ai-input`, `ai-index`, and `search`. A `<license>` MAY contain at most one `<permits>` and one `<prohibits>` per type, and prohibitions take precedence if both appear. `user` tokens are `commercial`, `non-commercial`, `education`, `government`, and `personal`. A `<license>` MAY state geographic scope with `<permits type=\"geo\">`. If two licenses define conflicting terms, clients MUST honor the most restrictive combination of rights. RSL licenses MUST be interpreted conservatively to avoid the unintended expansion of rights. Implementations MUST retrieve RSL files and related license metadata only over HTTPS. [1]"
      },
      {
       "label": "Payment type values",
       "text_md": "The `<payment>` type MUST be `purchase`, `subscription`, `training`, `crawl`, `use`, `contribution`, `attribution`, or `free`. `use` covers an AI-generated output, including inference. If `<payment>` is omitted, the license is assumed to be free. `<amount>` states the cost with a required ISO 4217 `currency` code. [1]"
      },
      {
       "label": "Legal and metadata links",
       "text_md": "`<legal>` states warranty or disclaimer terms, and each type MAY appear no more than once. `<schema>` associates Schema.org metadata by URL or inline `application/ld+json`. `<copyright>` names the rights-holding person or organization. `<terms>` links to human-readable terms, and publishers MAY reference the RSL Default Access Terms. [1]"
      }
     ]
    },
    {
     "id": "five-discovery-surfaces-and-external-cdn-enforcement-boundary",
     "heading": "Five discovery surfaces and external CDN enforcement boundary",
     "body_md": "Publishers attach an RSL license through five equivalent Section 4 discovery mechanisms—a `robots.txt` `License:` directive, RSS `<rsl:content>`, an HTTP `Link` header, HTML `<link>` or `<script type=\"application/rsl+xml\">` elements, or Section 4.8 embedded media and data file metadata—and clients MUST honor whichever is provided. If `server` is set, the client requests `/token` unless a license is already held or a `<standard>` or `<custom>` license was accepted, and a web server or CDN MAY enforce license controls. [1]",
     "bullets": [
      {
       "label": "robots.txt and RSS",
       "text_md": "The `License:` value MUST be an absolute URI. The directive does not modify Allow or Disallow. Group scope applies only to clients selecting that User-agent group; global scope applies to all clients. RSS `version=\"2.0\"` `<rss>` MUST declare `xmlns:rsl`, and each `<item>` SHOULD include `<rsl:content>`. [1]"
      },
      {
       "label": "HTTP Link, HTML, and embedded media/data files",
       "text_md": "Servers MAY send a `Link` header: rel MUST be `license`, type MUST be `application/rsl+xml`, and the target MUST be an absolute URL. HTML `<link>` MUST use `rel=\"license\"`, that type, and an absolute href, while `<script type=\"application/rsl+xml\">` MUST embed exactly one `<content>` for its parent and descendants. Under Section 4.8 (`Media and Data File Association`), an RSL license fragment in namespace `https://rslstandard.org/rsl` with one `<content>` element and a stable canonical `url` attribute MAY be embedded in container metadata (such as EPUB, XMP for image/PDF, ID3/atoms for audio/video, or PNG iTXt). [1]"
      },
      {
       "label": "OLP token and key",
       "text_md": "OLP extends OAuth 2.0. The License Server MUST expose `/token`, `/introspect`, and `/key` over HTTPS. The client POSTs `/token` unless a license is already held or a `<standard>` or `<custom>` license was accepted. If encrypted, `/key` returns a decryption key. OLP communications MUST use HTTPS. [1]"
      },
      {
       "label": "Preferences and CDN gates",
       "text_md": "RSL is a declarative machine-readable format, and CDNs can keep existing enforcement. The usage vocabulary MAY include IETF AI Preferences terms. RSL can't block bots by itself, unlike Cloudflare pay per crawl. Fastly is working to admit AI bots that have agreed to license content. [1][11]"
      }
     ]
    }
   ],
   "v05_diagram": {
    "title": "RSL robots.txt discovery path and optional OLP / CAP",
    "heading": "RSL robots.txt discovery path and optional OLP / CAP",
    "mermaid": "sequenceDiagram\n  participant C as Client\n  participant O as Origin / Resource Server\n  participant R as RSL Document Host\n  participant L as License Server\n  C->>O: GET /robots.txt (one of five equivalent discovery mechanisms)\n  O-->>C: License: absolute RSL URL\n  C->>R: GET absolute License URL\n  R-->>C: application/rsl+xml\n  Note over C: Required core stops here<br/>Client evaluates the license\n  opt OLP and CAP extensions are implemented\n    C->>L: OLP POST /token (and /key if encrypted)\n    L-->>C: access_token, token_type License\n    C->>O: CAP GET asset<br/>Authorization: License token\n    O->>L: Validate locally or OLP POST /introspect\n    L-->>O: active and permitted, or not\n    alt License authorizes the request\n      O-->>C: 200 content\n    else Missing, unpaid, or not permitted\n      O-->>C: 401 or 402<br/>Link rel=license\n    end\n  end",
    "caption_md": "Illustrated via the `robots.txt` `License:` path (one of five equivalent discovery mechanisms), the client fetches the `application/rsl+xml` document from the absolute `License:` URL. When optional OLP and CAP extensions are used, OLP exposes `/token`, `/introspect`, and `/key` on the License Server while CAP carries `Authorization: License` to the Resource Server. [1]"
   },
   "v05_wire_artifact": {
    "title": "Canonical RSL license (`ai-all` prohibited)",
    "heading": "Canonical RSL license (`ai-all` prohibited)",
    "lang": "xml",
    "code": "<rsl xmlns=\"https://rslstandard.org/rsl\">\n  <content url=\"/\">\n    <license>\n      <prohibits type=\"usage\">ai-all</prohibits>\n    </license>\n  </content>\n</rsl>",
    "caption_md": "Canonical license that prohibits `usage` `ai-all` for the site root: `<prohibits type=\"usage\">ai-all</prohibits>`. [1]"
   },
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "robots.txt (RFC 9309)",
      "spec_or_rfc": "RFC 9309",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "RFC 9309 selects allow or disallow by path. RSL adds a License URI whose license can prohibit ai-all. [1][12]"
     },
     {
      "name": "rel=\"license\" and rights metadata",
      "spec_or_rfc": "rel=\"license\"",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "RSL link rel, type, and href are mandatory. The license can prohibit ai-all or point at a Creative Commons URL. [1]"
     },
     {
      "name": "RSS 2.0",
      "spec_or_rfc": "RSS 2.0 Specification",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "RSL extends the RSS 2.0 `<item>` element as an RSS module: the `<rss>` root element must declare xmlns:rsl=\"https://rslstandard.org/rsl\" and each licensed `<item>` should include an `<rsl:content>` element. [1]"
     },
     {
      "name": "Atom Syndication Format (RFC 4287)",
      "spec_or_rfc": "RFC 4287",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "RSL cites RFC 4287 (The Atom Syndication Format) as an informative syndication reference alongside RSS 2.0, while defining its normative feed module (`<rsl:content>` inside `<item>`) on RSS 2.0. [1]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "ai-crawler-tokens-robots",
      "target_name": "AI crawler tokens in robots.txt",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "Robots.txt tokens select allow or disallow groups. RSL adds a group-scoped License URI for an XML license. [1][12]"
     },
     {
      "target_id": "aipref-vocabulary",
      "target_name": "AIPREF Vocabulary (A Vocabulary For Expressing AI Usage Preferences)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "AIPREF tokens such as train-ai and search state usage; RSL 1.0 Section 3.4.1.1 includes the Cloudflare Content Signals vocabulary (ai-train, ai-input, search) and MAY include terms from IETF AI Preferences as they become available. [1][2]"
     },
     {
      "target_id": "aipref-content-usage-attachment",
      "target_name": "AIPREF Content-Usage Attachment",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "AIPREF attaches `Content-Usage` preferences in `robots.txt` and an HTTP header, whereas RSL discovers XML licenses across five Section 4 surfaces: a `robots.txt` `License` directive, an HTTP `Link` header, HTML `<link>` or `<script>` elements, RSS `<rsl:content>` items, and Section 4.8 embedded media or data file metadata. [1][3]"
     },
     {
      "target_id": "cloudflare-content-signals-policy",
      "target_name": "Content Signals Policy",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Content Signals defines search, ai-input, and ai-train in robots.txt, while RSL 1.0 Section 3.4.1.1 incorporates the Cloudflare Content Signals vocabulary inside XML `<permits>` and `<prohibits>` elements and adds `<payment>` terms. [1][4]"
     },
     {
      "target_id": "cloudflare-pay-per-crawl",
      "target_name": "Cloudflare Pay Per Crawl",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Pay Per Crawl answers with HTTP 402 and crawler-price. RSL can state a crawl payment URL inside the license. [1][5]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (6 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).",
    "side_a": {
     "visible": true,
     "heading": "Who publishes or hosts it",
     "col4_header": "Artifact",
     "note_md": null,
     "rows": [
      {
       "actor": "Medium",
       "role": "Publishing platform",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-11-04",
       "col4_md": "Publishes `License: https://medium.com/license.xml` in `text/plain` robots.txt.",
       "source_md": "[medium.com/robots.txt](https://medium.com/robots.txt) [13]"
      },
      {
       "actor": "RSL Standard (rslstandard.org)",
       "role": "Specification site",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-11-04",
       "col4_md": "Publishes `License: https://internetcollective.org/license.xml` above `User-agent: *`.",
       "source_md": "[rslstandard.org/robots.txt](https://rslstandard.org/robots.txt) [14]"
      },
      {
       "actor": "RSL Collective",
       "role": "Collective rights site",
       "status": "Listed",
       "status_display": "Listed · as of 2026-11-03",
       "col4_md": "Publishes Featured Supporters roster and endorsement quotes from Steve Huffman (Reddit) and Vivek Shah (Ziff Davis) on the collective site.",
       "source_md": "[rslcollective.org](https://rslcollective.org/) [15]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Bot, client & tool support",
     "col4_header": "Checked behavior",
     "note_md": null,
     "rows": [
      {
       "actor": "Fastly",
       "role": "CDN in the launch set",
       "status": "Listed",
       "status_display": "Listed · as of 2025-09-10",
       "col4_md": "Named CDN supporter in the September 10, 2025 launch.",
       "source_md": "[RSL launch release, 10 September 2025](https://rslstandard.org/press/rsl-standard) [8]"
      },
      {
       "actor": "Cloudflare",
       "role": "Infrastructure supporter of RSL 1.0",
       "status": "Listed",
       "status_display": "Listed · as of 2025-12-10",
       "col4_md": "Infrastructure supporter of RSL 1.0 (December 10, 2025).",
       "source_md": "[RSL 1.0 release, 10 December 2025](https://rslstandard.org/press/rsl-1-specification-2025) [6]"
      },
      {
       "actor": "Akamai",
       "role": "Infrastructure supporter of RSL 1.0",
       "status": "Listed",
       "status_display": "Listed · as of 2025-12-10",
       "col4_md": "Infrastructure supporter of RSL 1.0 (December 10, 2025).",
       "source_md": "[RSL 1.0 release, 10 December 2025](https://rslstandard.org/press/rsl-1-specification-2025) [6]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [
     {
      "label": "RSL 1.0 specification announcement & RSL Collective Featured Supporters",
      "as_of": "2025-12-10",
      "value_md": "On December 10, 2025, the RSL Collective stated that 1,500+ media organizations, brands, and technology companies worldwide endorse RSL, naming infrastructure and standards supporters Cloudflare, Akamai, Creative Commons, and the IAB Tech Lab alongside founding and supporting publishers including Reddit, Ziff Davis, People Inc., Yahoo, O'Reilly Media, Medium, Quora, Fastly, The Associated Press, Vox Media, USA Today, Boston Globe Media, BuzzFeed, and Stack Overflow. [6][15]"
     },
     {
      "label": "First-party HTTP robots.txt probe (November 4, 2026)",
      "as_of": "2026-11-04",
      "value_md": "2 of 11 sampled robots.txt responses published a live License: directive on 2026-11-04: medium.com (pointing to https://medium.com/license.xml) and rslstandard.org (pointing to https://internetcollective.org/license.xml), while the remaining 9 sampled publisher and CDN origins (including reddit.com, oreilly.com, quora.com, people.com, yahoo.com, fastly.com, and inspiredtaste.net) returned HTTP 200 without a License: line. [13][14][16][17][18][19][20][21][22][23][24]"
     }
    ],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "tdmrep",
     "target_name": "TDMRep (TDM Reservation Protocol)",
     "relation_label": "Peer alternative",
     "delta": "TDMRep records a mining reservation at /.well-known/tdmrep.json with tdm-reservation equal to 1, while RSL is an XML license document discovered via a robots.txt License directive, an HTTP Link header, an HTML link or script element, an RSS rsl:content element, or Section 4.8 embedded media and data file metadata.",
     "item_md": "**[TDMRep (TDM Reservation Protocol)](/protocols/tdmrep/)** (Peer alternative) — TDMRep records a mining reservation at /.well-known/tdmrep.json with tdm-reservation equal to 1, while RSL is an XML license document discovered via a robots.txt License directive, an HTTP Link header, an HTML link or script element, an RSS rsl:content element, or Section 4.8 embedded media and data file metadata."
    },
    {
     "target_id": "ai-txt",
     "target_name": "ai.txt",
     "relation_label": "Peer alternative",
     "delta": "ai.txt states training or use permissions in /ai.txt or /.well-known/ai.txt, while RSL is an XML license document discovered via a robots.txt License directive, an HTTP Link header, an HTML link or script element, an RSS rsl:content element, or Section 4.8 embedded media and data file metadata that can prohibit usage and state payment terms.",
     "item_md": "**[ai.txt](/protocols/ai-txt/)** (Peer alternative) — ai.txt states training or use permissions in /ai.txt or /.well-known/ai.txt, while RSL is an XML license document discovered via a robots.txt License directive, an HTTP Link header, an HTML link or script element, an RSS rsl:content element, or Section 4.8 embedded media and data file metadata that can prohibit usage and state payment terms."
    },
    {
     "target_id": "iab-comp",
     "target_name": "CoMP (Content Monetization Protocols)",
     "relation_label": "Peer alternative",
     "delta": "CoMP puts supply discovery out of scope and returns licenseurl and reporturl on the Package, while RSL is a standardized XML vocabulary whose five discovery bindings cover robots.txt License directives, HTTP Link headers with rel=\"license\", HTML link or script associations, RSS rsl:content associations, and Section 4.8 embedded media and data file metadata.",
     "item_md": "**[CoMP (Content Monetization Protocols)](/protocols/iab-comp/)** (Peer alternative) — CoMP puts supply discovery out of scope and returns licenseurl and reporturl on the Package, while RSL is a standardized XML vocabulary whose five discovery bindings cover robots.txt License directives, HTTP Link headers with rel=\"license\", HTML link or script associations, RSS rsl:content associations, and Section 4.8 embedded media and data file metadata."
    },
    {
     "item_md": "**[Permit protocols](/category/permit/)** — Category index for `permit` standards."
    }
   ],
   "v05_compiled_md": "---\nid: rsl\ntitle: \"Really Simple Licensing\"\ntier: flagship\nlifecycle_status: published_standard\ncategory: permit\nform: document-format\nwire_archetype: web_discovery\nspec_url: https://rslstandard.org/rsl\nlast_checked: 2026-11-06\n---\n\n# Really Simple Licensing\n\n**Category:** [Permit](/category/permit/) (`permit`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-11-06\n\n> *This page is about Really Simple Licensing (RSL), Document RSL-SPEC-1.0, which defines an XML vocabulary and discovery and authorization mechanisms for machine-readable usage, licensing, payment, and legal terms. It is not the IETF AIPREF working group specifications ([AIPREF vocabulary](/protocols/aipref-vocabulary/) or [AIPREF Content-Usage attachment](/protocols/aipref-content-usage-attachment/)), Cloudflare's [Content Signals Policy](/protocols/cloudflare-content-signals-policy/) or [Pay Per Crawl](/protocols/cloudflare-pay-per-crawl/), or [AI crawler user-agent tokens in robots.txt](/protocols/ai-crawler-tokens-robots/). [1][2][3][4][5]*\n\n> **In brief:** Really Simple Licensing (RSL) is an XML licensing standard that lets websites and digital publishers declare granular, machine-readable usage rights, AI training restrictions, and per-crawl payment terms for automated bots. Where traditional `robots.txt` rules only offer binary allow-or-disallow path blocking, publishers attach an `application/rsl+xml` `<rsl>` document (via `License:` directives, HTTP `Link` headers, or embedded file metadata) to permit search indexing while prohibiting or pricing AI ingestion. [1][6]\n\n**Really Simple Licensing** (**RSL**), Document `RSL-SPEC-1.0`, defines an XML vocabulary plus discovery and authorization mechanisms for machine-readable usage, licensing, payment, and legal terms that govern AI systems and automated agents. [1] The root `<rsl>` document uses namespace `https://rslstandard.org/rsl` and media type `application/rsl+xml`. Clients discover it through five equivalent mechanisms: a `robots.txt` `License:` URL, an HTTP `Link` header with `rel=\"license\"`, HTML `<link>` or `<script>`, RSS `<rsl:content>`, or embedded media and data file metadata (Section 4.8, such as EPUB or XMP). OLP, CAP, and EMS are OPTIONAL extensions. [1] The RSL Technical Steering Committee published Document `RSL-SPEC-1.0` as a Recommendation on 2025-12-10. A Recommendation is considered stable, has received broad review, and is suitable for implementation and deployment. The `rslstandard/rsl` README still says the specification is currently in draft. [1][7]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Permit](/category/permit/) (`permit`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | RSL Technical Steering Committee (published December 10, 2025), co-founded by Eckart Walther and Doug Leeds at the RSL Collective with specification editors from eight organizations: RSL Collective, Condé Nast, Ziff Davis, Schema.org, Yahoo, Automattic, O'Reilly Media, and Fastly. [1][8] |\n| **Governed by** | RSL Technical Steering Committee. Issue tracker: `https://github.com/rslstandard/rsl/issues`. [1][7] |\n| **Track** | Industry Specification, published by the RSL Technical Steering Committee [1] |\n| **Status** | Recommendation on the spec page; main README says draft. [1][7] |\n| **Version** | RSL 1.0 (2025-12-10); 0.9 draft (2025-09-16); main README says draft. [1][7][9] |\n| **Message format** | XML license. The root `<rsl>` element declares the namespace `https://rslstandard.org/rsl`. Media type `application/rsl+xml`. [1] |\n| **Found at** | Five equivalent discovery mechanisms (`robots.txt` `License:` directive with a MUST absolute URI, HTTP `Link` header, HTML `<link>` or `<script>`, RSS `<rsl:content>`, and Section 4.8 embedded media or data file metadata in EPUB, XMP, ID3/atoms, or PNG iTXt); clients MUST honor whichever is provided. [1][10] |\n| **Headers** | `Link: <license-URL>; rel=\"license\"`, with type `application/rsl+xml` and an absolute URL of the RSL license. [1] |\n| **Schemes** | OPTIONAL: OLP (OAuth 2.0), CAP (crawler auth), and EMS. [1] |\n| **Specification** | [Really Simple Licensing (RSL) 1.0 Specification](https://rslstandard.org/rsl) [1] |\n| **Licence** | CC BY-ND 4.0. RSL is a trademark of the RSL Collective. [1] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [RSL 1.0 XML vocabulary, license terms, and payment types](#rsl-1-0-xml-vocabulary-license-terms-and-payment-types)\n3. [Five discovery surfaces and external CDN enforcement boundary](#five-discovery-surfaces-and-external-cdn-enforcement-boundary)\n4. [Counterparts and related standards](#counterparts-and-related-standards)\n5. [Adoption and ecosystem](#adoption-and-ecosystem)\n6. [See also](#see-also)\n7. [References](#references)\n\n---\n\n## Problem and scope\n\nRSL 1.0 augments `robots.txt` yes/no blocking rules with a machine-readable language for content rights and licensing terms. For example, an `<rsl>` license block can allow indexing and linking in search results while prohibiting any AI use, including model training and reuse in grounding, retrieval, or generative search summaries, through `<prohibits type=\"usage\">ai-all</prohibits>`. [1][6] The `<license>` element defines the rights, costs, restrictions, and reporting requirements of a `<content>` asset. `<payment type=\"crawl\">` applies when the publisher requires payment each time an automated agent crawls. A platform that already operates a licensing server can expose RSL terms and keep its existing authorization or payment infrastructure. [1] The RSL XML vocabulary and the Section 4 discovery methods are the required foundation of any conformant implementation. The Open License Protocol, Crawler Authorization Protocol, and Encrypted Media Standard are OPTIONAL extensions. Implementers MAY adopt RSL without those network protocols. [1]\n\n### RSL robots.txt discovery path and optional OLP / CAP\n\n```mermaid\nsequenceDiagram\n  participant C as Client\n  participant O as Origin / Resource Server\n  participant R as RSL Document Host\n  participant L as License Server\n  C->>O: GET /robots.txt (one of five equivalent discovery mechanisms)\n  O-->>C: License: absolute RSL URL\n  C->>R: GET absolute License URL\n  R-->>C: application/rsl+xml\n  Note over C: Required core stops here<br/>Client evaluates the license\n  opt OLP and CAP extensions are implemented\n    C->>L: OLP POST /token (and /key if encrypted)\n    L-->>C: access_token, token_type License\n    C->>O: CAP GET asset<br/>Authorization: License token\n    O->>L: Validate locally or OLP POST /introspect\n    L-->>O: active and permitted, or not\n    alt License authorizes the request\n      O-->>C: 200 content\n    else Missing, unpaid, or not permitted\n      O-->>C: 401 or 402<br/>Link rel=license\n    end\n  end\n```\n\n*Illustrated via the `robots.txt` `License:` path (one of five equivalent discovery mechanisms), the client fetches the `application/rsl+xml` document from the absolute `License:` URL. When optional OLP and CAP extensions are used, OLP exposes `/token`, `/introspect`, and `/key` on the License Server while CAP carries `Authorization: License` to the Resource Server. [1]*\n\n### Canonical RSL license (`ai-all` prohibited)\n\n```xml\n<rsl xmlns=\"https://rslstandard.org/rsl\">\n  <content url=\"/\">\n    <license>\n      <prohibits type=\"usage\">ai-all</prohibits>\n    </license>\n  </content>\n</rsl>\n```\n\n*Canonical license that prohibits `usage` `ai-all` for the site root: `<prohibits type=\"usage\">ai-all</prohibits>`. [1]*\n\n---\n\n## RSL 1.0 XML vocabulary, license terms, and payment types\n\nReally Simple Licensing, Document `RSL-SPEC-1.0`, defines an XML document format with media type `application/rsl+xml` and namespace `https://rslstandard.org/rsl`. An RSL document defines machine-readable usage, licensing, payment, and legal terms for one or more digital assets, each identified by a `<content>` url, that govern how those assets may be accessed or licensed by AI systems and automated agents. [1]\n\n- **Content URL scope:** Root `<rsl>` MUST declare the namespace. Each `<content>` MUST include `url` and at least one `<license>`. If `server` is present, clients MUST obtain a license from the OLP License Server before access. `encrypted` defaults to false; if true, the server MUST support Encrypted Media Standard. [1]\n- **Usage and user rules:** Usage tokens for `<permits type=\"usage\">` and `<prohibits type=\"usage\">` are `all`, `ai-all`, `ai-train`, `ai-input`, `ai-index`, and `search`. A `<license>` MAY contain at most one `<permits>` and one `<prohibits>` per type, and prohibitions take precedence if both appear. `user` tokens are `commercial`, `non-commercial`, `education`, `government`, and `personal`. A `<license>` MAY state geographic scope with `<permits type=\"geo\">`. If two licenses define conflicting terms, clients MUST honor the most restrictive combination of rights. RSL licenses MUST be interpreted conservatively to avoid the unintended expansion of rights. Implementations MUST retrieve RSL files and related license metadata only over HTTPS. [1]\n- **Payment type values:** The `<payment>` type MUST be `purchase`, `subscription`, `training`, `crawl`, `use`, `contribution`, `attribution`, or `free`. `use` covers an AI-generated output, including inference. If `<payment>` is omitted, the license is assumed to be free. `<amount>` states the cost with a required ISO 4217 `currency` code. [1]\n- **Legal and metadata links:** `<legal>` states warranty or disclaimer terms, and each type MAY appear no more than once. `<schema>` associates Schema.org metadata by URL or inline `application/ld+json`. `<copyright>` names the rights-holding person or organization. `<terms>` links to human-readable terms, and publishers MAY reference the RSL Default Access Terms. [1]\n\n---\n\n## Five discovery surfaces and external CDN enforcement boundary\n\nPublishers attach an RSL license through five equivalent Section 4 discovery mechanisms—a `robots.txt` `License:` directive, RSS `<rsl:content>`, an HTTP `Link` header, HTML `<link>` or `<script type=\"application/rsl+xml\">` elements, or Section 4.8 embedded media and data file metadata—and clients MUST honor whichever is provided. If `server` is set, the client requests `/token` unless a license is already held or a `<standard>` or `<custom>` license was accepted, and a web server or CDN MAY enforce license controls. [1]\n\n- **robots.txt and RSS:** The `License:` value MUST be an absolute URI. The directive does not modify Allow or Disallow. Group scope applies only to clients selecting that User-agent group; global scope applies to all clients. RSS `version=\"2.0\"` `<rss>` MUST declare `xmlns:rsl`, and each `<item>` SHOULD include `<rsl:content>`. [1]\n- **HTTP Link, HTML, and embedded media/data files:** Servers MAY send a `Link` header: rel MUST be `license`, type MUST be `application/rsl+xml`, and the target MUST be an absolute URL. HTML `<link>` MUST use `rel=\"license\"`, that type, and an absolute href, while `<script type=\"application/rsl+xml\">` MUST embed exactly one `<content>` for its parent and descendants. Under Section 4.8 (`Media and Data File Association`), an RSL license fragment in namespace `https://rslstandard.org/rsl` with one `<content>` element and a stable canonical `url` attribute MAY be embedded in container metadata (such as EPUB, XMP for image/PDF, ID3/atoms for audio/video, or PNG iTXt). [1]\n- **OLP token and key:** OLP extends OAuth 2.0. The License Server MUST expose `/token`, `/introspect`, and `/key` over HTTPS. The client POSTs `/token` unless a license is already held or a `<standard>` or `<custom>` license was accepted. If encrypted, `/key` returns a decryption key. OLP communications MUST use HTTPS. [1]\n- **Preferences and CDN gates:** RSL is a declarative machine-readable format, and CDNs can keep existing enforcement. The usage vocabulary MAY include IETF AI Preferences terms. RSL can't block bots by itself, unlike Cloudflare pay per crawl. Fastly is working to admit AI bots that have agreed to license content. [1][11]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **robots.txt (RFC 9309)** | `RFC 9309` | Analogous to classic standard | RFC 9309 selects allow or disallow by path. RSL adds a License URI whose license can prohibit ai-all. [1][12] |\n| **rel=\"license\" and rights metadata** | `rel=\"license\"` | Analogous to classic standard | RSL link rel, type, and href are mandatory. The license can prohibit ai-all or point at a Creative Commons URL. [1] |\n| **RSS 2.0** | `RSS 2.0 Specification` | Analogous to classic standard | RSL extends the RSS 2.0 `<item>` element as an RSS module: the `<rss>` root element must declare xmlns:rsl=\"https://rslstandard.org/rsl\" and each licensed `<item>` should include an `<rsl:content>` element. [1] |\n| **Atom Syndication Format (RFC 4287)** | `RFC 4287` | Analogous to classic standard | RSL cites RFC 4287 (The Atom Syndication Format) as an informative syndication reference alongside RSS 2.0, while defining its normative feed module (`<rsl:content>` inside `<item>`) on RSS 2.0. [1] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[AI crawler tokens in robots.txt](/protocols/ai-crawler-tokens-robots/)** | Builds on | Robots.txt tokens select allow or disallow groups. RSL adds a group-scoped License URI for an XML license. [1][12] |\n| **[AIPREF Vocabulary (A Vocabulary For Expressing AI Usage Preferences)](/protocols/aipref-vocabulary/)** | Complements | AIPREF tokens such as train-ai and search state usage; RSL 1.0 Section 3.4.1.1 includes the Cloudflare Content Signals vocabulary (ai-train, ai-input, search) and MAY include terms from IETF AI Preferences as they become available. [1][2] |\n| **[AIPREF Content-Usage Attachment](/protocols/aipref-content-usage-attachment/)** | Complements | AIPREF attaches `Content-Usage` preferences in `robots.txt` and an HTTP header, whereas RSL discovers XML licenses across five Section 4 surfaces: a `robots.txt` `License` directive, an HTTP `Link` header, HTML `<link>` or `<script>` elements, RSS `<rsl:content>` items, and Section 4.8 embedded media or data file metadata. [1][3] |\n| **[Content Signals Policy](/protocols/cloudflare-content-signals-policy/)** | Complements | Content Signals defines search, ai-input, and ai-train in robots.txt, while RSL 1.0 Section 3.4.1.1 incorporates the Cloudflare Content Signals vocabulary inside XML `<permits>` and `<prohibits>` elements and adds `<payment>` terms. [1][4] |\n| **[Cloudflare Pay Per Crawl](/protocols/cloudflare-pay-per-crawl/)** | Complements | Pay Per Crawl answers with HTTP 402 and crawler-price. RSL can state a crawl payment URL inside the license. [1][5] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (6 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).*\n\n### Who publishes or hosts it\n\n| Actor | Role | Status | Artifact | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Medium** | Publishing platform | Live (HTTP 200) · checked 2026-11-04 | Publishes `License: https://medium.com/license.xml` in `text/plain` robots.txt. | [medium.com/robots.txt](https://medium.com/robots.txt) [13] |\n| **RSL Standard (rslstandard.org)** | Specification site | Live (HTTP 200) · checked 2026-11-04 | Publishes `License: https://internetcollective.org/license.xml` above `User-agent: *`. | [rslstandard.org/robots.txt](https://rslstandard.org/robots.txt) [14] |\n| **RSL Collective** | Collective rights site | Listed · as of 2026-11-03 | Publishes Featured Supporters roster and endorsement quotes from Steve Huffman (Reddit) and Vivek Shah (Ziff Davis) on the collective site. | [rslcollective.org](https://rslcollective.org/) [15] |\n\n### Bot, client & tool support\n\n| Actor | Role | Status | Checked behavior | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Fastly** | CDN in the launch set | Listed · as of 2025-09-10 | Named CDN supporter in the September 10, 2025 launch. | [RSL launch release, 10 September 2025](https://rslstandard.org/press/rsl-standard) [8] |\n| **Cloudflare** | Infrastructure supporter of RSL 1.0 | Listed · as of 2025-12-10 | Infrastructure supporter of RSL 1.0 (December 10, 2025). | [RSL 1.0 release, 10 December 2025](https://rslstandard.org/press/rsl-1-specification-2025) [6] |\n| **Akamai** | Infrastructure supporter of RSL 1.0 | Listed · as of 2025-12-10 | Infrastructure supporter of RSL 1.0 (December 10, 2025). | [RSL 1.0 release, 10 December 2025](https://rslstandard.org/press/rsl-1-specification-2025) [6] |\n\n### Ecosystem censuses\n\n- **RSL 1.0 specification announcement & RSL Collective Featured Supporters** (*as of 2025-12-10*): On December 10, 2025, the RSL Collective stated that 1,500+ media organizations, brands, and technology companies worldwide endorse RSL, naming infrastructure and standards supporters Cloudflare, Akamai, Creative Commons, and the IAB Tech Lab alongside founding and supporting publishers including Reddit, Ziff Davis, People Inc., Yahoo, O'Reilly Media, Medium, Quora, Fastly, The Associated Press, Vox Media, USA Today, Boston Globe Media, BuzzFeed, and Stack Overflow. [6][15]\n- **First-party HTTP robots.txt probe (November 4, 2026)** (*as of 2026-11-04*): 2 of 11 sampled robots.txt responses published a live License: directive on 2026-11-04: medium.com (pointing to https://medium.com/license.xml) and rslstandard.org (pointing to https://internetcollective.org/license.xml), while the remaining 9 sampled publisher and CDN origins (including reddit.com, oreilly.com, quora.com, people.com, yahoo.com, fastly.com, and inspiredtaste.net) returned HTTP 200 without a License: line. [13][14][16][17][18][19][20][21][22][23][24]\n\n---\n\n## See also\n\n- **[TDMRep (TDM Reservation Protocol)](/protocols/tdmrep/)** *(Peer alternative)* — TDMRep records a mining reservation at /.well-known/tdmrep.json with tdm-reservation equal to 1, while RSL is an XML license document discovered via a robots.txt License directive, an HTTP Link header, an HTML link or script element, an RSS rsl:content element, or Section 4.8 embedded media and data file metadata.\n- **[ai.txt](/protocols/ai-txt/)** *(Peer alternative)* — ai.txt states training or use permissions in /ai.txt or /.well-known/ai.txt, while RSL is an XML license document discovered via a robots.txt License directive, an HTTP Link header, an HTML link or script element, an RSS rsl:content element, or Section 4.8 embedded media and data file metadata that can prohibit usage and state payment terms.\n- **[CoMP (Content Monetization Protocols)](/protocols/iab-comp/)** *(Peer alternative)* — CoMP puts supply discovery out of scope and returns licenseurl and reporturl on the Package, while RSL is a standardized XML vocabulary whose five discovery bindings cover robots.txt License directives, HTTP Link headers with rel=\"license\", HTML link or script associations, RSS rsl:content associations, and Section 4.8 embedded media and data file metadata.\n- **Category:** [Permit protocols](/category/permit/)\n\n---\n\n## References\n\n1. RSL Technical Steering Committee, *Really Simple Licensing (RSL) 1.0 Specification* (published 2025-12-10) — <https://rslstandard.org/rsl>\n2. P. Keller (Open Future) and M. Thomson (Mozilla), *A Vocabulary For Expressing AI Usage Preferences (draft-ietf-aipref-vocab-08)* (14 September 2026) — <https://www.ietf.org/archive/id/draft-ietf-aipref-vocab-08.txt>\n3. G. Illyes (Google) and M. Thomson (Mozilla), *Associating AI Usage Preferences with Content in HTTP (draft-ietf-aipref-attach-05)* (19 August 2026) — <https://www.ietf.org/archive/id/draft-ietf-aipref-attach-05.txt>\n4. Cloudflare, *Giving users choice with Cloudflare's new Content Signals Policy* (published 2025-09-24; modified 2026-07-15) — <https://blog.cloudflare.com/content-signals-policy/>\n5. Will Allen and Simon Newton, Cloudflare Blog, *Introducing pay per crawl: Enabling content owners to charge AI crawlers for access* (published 2025-07-01; modified 2026-07-15) — <https://blog.cloudflare.com/introducing-pay-per-crawl/>\n6. RSL Collective, *RSL AI Licensing 1.0 Now an Official Industry Standard* (10 December 2025; fetched 2026-11-06) — <https://rslstandard.org/press/rsl-1-specification-2025>\n7. rslstandard, *Really Simple Licensing (RSL) README* (fetched 2026-10-31) — <https://raw.githubusercontent.com/rslstandard/rsl/main/README.md>\n8. RSL Collective, *New RSL web standard and collective rights organization* (10 September 2025; fetched 2026-11-06) — <https://rslstandard.org/press/rsl-standard>\n9. RSL Technical Steering Committee, *Really Simple Licensing (RSL) 0.9 Specification* (last updated 2025-09-16) — <https://rslstandard.org/rsl/0.9/>\n10. Internet Licensing Collective, *RSL: Really Simple Licensing* (fetched 2026-11-03) — <https://rslstandard.org/>\n11. Emma Roth (The Verge), *The web has a new system for making AI companies pay up* (10 September 2025; fetched 2026-11-06) — <https://www.theverge.com/news/775072/rsl-standard-licensing-ai-publishing-reddit-yahoo-medium>\n12. M. Koster, G. Illyes, H. Zeller, and L. Sassman (IETF), *RFC 9309: Robots Exclusion Protocol* (published September 2022) — <https://www.rfc-editor.org/rfc/rfc9309.html>\n13. Medium, *robots.txt (medium.com/robots.txt)* (checked 2026-11-04) — <https://medium.com/robots.txt>\n14. RSL Standard, *robots.txt (rslstandard.org/robots.txt)* (checked 2026-11-04) — <https://rslstandard.org/robots.txt>\n15. RSL Collective, *RSL Collective: The Collective Rights Organization for the Internet* (fetched 2026-11-03) — <https://rslcollective.org/>\n16. Reddit, *robots.txt (reddit.com/robots.txt)* (checked 2026-11-04) — <https://www.reddit.com/robots.txt>\n17. O'Reilly Media, *robots.txt (oreilly.com/robots.txt)* (checked 2026-11-04) — <https://www.oreilly.com/robots.txt>\n18. Quora, *robots.txt (quora.com/robots.txt)* (checked 2026-11-04) — <https://www.quora.com/robots.txt>\n19. People, *robots.txt (people.com/robots.txt)* (checked 2026-11-04) — <https://www.people.com/robots.txt>\n20. Yahoo, *robots.txt (yahoo.com/robots.txt)* (checked 2026-11-04) — <https://www.yahoo.com/robots.txt>\n21. Fastly, *robots.txt (fastly.com/robots.txt)* (checked 2026-11-04) — <https://www.fastly.com/robots.txt>\n22. Inspired Taste, *robots.txt (inspiredtaste.net/robots.txt)* (checked 2026-11-04) — <https://www.inspiredtaste.net/robots.txt>\n23. Rankade, *robots.txt (rankade.com/robots.txt)* (checked 2026-11-04) — <https://rankade.com/robots.txt>\n24. eWiki, *robots.txt (ewiki.org/robots.txt)* (checked 2026-11-04) — <https://www.ewiki.org/robots.txt>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "agent-permissions-json",
   "hatnote_md": "This article is about the Lightweight Agent Standards Working Group (LAS-WG) advisory permission manifest for web agents at `/.well-known/agent-permissions.json`. For Wildcard AI's OpenAPI workflow bridge manifest at `/.well-known/agents.json`, see [agents.json](/protocols/agents-json/). For crawler-level allow and disallow directives in `/robots.txt`, see [AI crawler tokens in robots.txt](/protocols/ai-crawler-tokens-robots/). For content-usage and training-preference signaling, see [IETF AIPref Vocabulary](/protocols/aipref-vocabulary/) and [W3C TDM Reservation Protocol](/protocols/tdmrep/).",
   "acronym": "",
   "adoption": {
    "level": "observed",
    "by": "LAS-WG agent-permissions (Python)",
    "probe_run": null
   },
   "aliases": [
    "Agent Permissions File"
   ],
   "analog": "robots.txt, but for in-page actions rather than URL fetches",
   "collisions": [
    "The Permissioning Protocol v0.1 (permissioning.ai/spec/v0.1.html by Uljan Sinani, 2026-06-11) independently proposes an incompatible schema at /.well-known/agent-permissions.json"
   ],
   "discovery": {
    "mechanism": "HTML `<link rel=\"agent-permissions\" href=\"https://example.com/path/to/agent-permissions.json\">` with fallback to `/.well-known/agent-permissions.json`, served as `Content-Type: application/json`",
    "path": "/.well-known/agent-permissions.json"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://github.com/las-wg/agent-permissions.json",
     "claim": "Lightweight Agent Standards Working Group (LAS-WG), *las-wg/agent-permissions.json repository*, checked 2026-10-29",
     "date": null,
     "quote": "GitHub - las-wg/agent-permissions.json: robots.txt-style permission manifest for web agents robots.txt-style permission manifest for web / \"deployments_url\": \"https://api.github.com/repos/las-wg/agent-permissions.json/deployments\", \"created_at\": \"2025-08-05T23:47:17Z\", \"updated_at\": \"2026-06-22T15:31:01Z\", \"pushed_at\": \"2025-12-10T22:53:58Z\", / \"created_at\": \"2025-08-05T23:47:17Z\", \"updated_at\": \"2026-06-22T15:31:01Z\", \"pushed_at\": \"2025-12-10T22:53:58Z\" / A robots.txt-inspired standard for how agents may interact with webpages.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://raw.githubusercontent.com/las-wg/agent-permissions.json/main/README.md",
     "claim": "Lightweight Agent Standards Working Group (LAS-WG), *agent-permissions.json specification (README)*, checked 2026-10-29",
     "date": null,
     "quote": "This JSON-only Agent Permissions File lets sites express fine-grained resource-level rules and higher-level action guidelines in a single, versioned document. / Note: This standard is still WIP! / In case of no <link> tag, the default path is /.well-known/agent-permissions.json. / Servers SHOULD serve this file with Content-Type: application/json. / The top-level field strict prescribes the default behavior for an action that is not explicitly allowed or forbidden (true: defaults to forbidden, false: defaults to allowed). / Semantic version, e.g. '1.0.0' / \"$schema\": \"http://json-schema.org/draft-07/schema#\", \"title\": \"Agent Permissions File\", \"type\": \"object\", \"required\": [\"metadata\", \"strict\"] / Example json { \"metadata\": { \"schema_version\": \"1.0.0\", \"last_updated\": \"2025-06-01T12:00:00Z\", \"author\": \"Example Corp\" }, \"strict\": / In case of no <link> tag, the default path is /.well-known/agent-permissions.json. Servers SHOULD serve this file with Content-Type: application/json. / There are two forms of permissions: Resource permissions: how you can interact with HTML elements (clicking, following links, filling forms, controlling media, uploading files…) / Parse according to the schema; on validation failure, consumers SHOULD treat the file as absent and MUST NOT grant additional permissions based on it (i.e., disallow all interactions beyond their default safety policies). / Action permissions: what you can do on the web page (sending DMs, booking a flight, posting content…). / This file is advisory and non-binding: agents MAY choose stricter behaviors than those granted here, but MUST NOT exceed the permissions granted if they claim to honor this format. / This document does not cover agent-to-agent interactions or content usage policies (see IETF AIPref instead).",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://github.com/las-wg/agent-permissions.json/commits",
     "claim": "GitHub REST API, *las-wg/agent-permissions.json commit history*, checked 2026-10-29",
     "date": null,
     "quote": "Add 'strict' field to agent permissions schema / README.md\", \"verified_at\": \"2025-12-10T12:37:14Z\" } }, \"url\": \"https://api.github.com/repos/las-wg/agent-permissions.json/commits/0fe3eb89d5200c3e2b2387d047d6fbcca79574ec\", \"html_url\": / \"date\": \"2025-12-10T22:53:58Z\" }, \"message\": \"Add 'strict' field to agent permissions schema",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://github.com/las-wg/agent-permissions.json/graphs/contributors",
     "claim": "GitHub REST API, *Contributor statistics*, checked 2026-10-29",
     "date": null,
     "quote": "\"login\": \"samuelemarro\", \"id\": 13946873, \"node_id\": \"MDQ6VXNlcjEzOTQ2ODcz\", \"avatar_url\": \"https://avatars.githubusercontent.com/u/13946873?v=4\", \"gravatar_id\": \"\", \"url\": \"https://api.github.com/users/samuelemarro\", \"html_url\": \"https://github.com/samuelemarro\", \"followers_url\": \"https://api.github.com/users/samuelemarro/followers\", \"following_url\": \"https://api.github.com/users/samuelemarro/following{/other_user}\", \"gists_url\": \"https://api.github.com/users/samuelemarro/gists{/gist_id}\", \"starred_url\": \"https://api.github.com/users/samuelemarro/starred{/owner}{/repo}\", \"subscriptions_url\": \"https://api.github.com/users/samuelemarro/subscriptions\", \"organizations_url\": \"https://api.github.com/users/samuelemarro/orgs\", \"repos_url\": \"https://api.github.com/users/samuelemarro/repos\", \"events_url\": \"https://api.github.com/users/samuelemarro/events{/privacy}\", \"received_events_url\": \"https://api.github.com/users/samuelemarro/received_events\", \"type\": \"User\", \"user_view_type\": \"public\", \"site_admin\": false, \"contributions\": 9",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://arxiv.org/abs/2601.02371",
     "claim": "Samuele Marro et al. (LAS-WG), *Permission Manifests for Web Agents (arXiv abstract)*, 7 December 2025",
     "date": null,
     "quote": "search · Advanced search --> Computer Science > Computers and Society arXiv:2601.02371 (cs) [Submitted",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://arxiv.org/html/2601.02371v2",
     "claim": "Samuele Marro et al. (LAS-WG), *Permission Manifests for Web Agents (HTML)*, 12 January 2026",
     "date": null,
     "quote": "arXiv:2601.02371v2 [cs.CY] 12 Jan 2026 Permission Manifests for Web Agents Lightweight Agent Standards Working Group (LAS-WG) / facilitate adoption, we developed a Python library 7 7 7 https://github.com/las-wg/agent-permissions-python that parses agent-permissions.json / artifact discoverable in two ways: (i) at a well-known path /.well-known/agent-permissions.json, and (ii) via",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://las-wg.org/",
     "claim": "Lightweight Agent Standards Working Group (LAS-WG), *LAS-WG website*, checked 2026-10-29",
     "date": null,
     "quote": "group that develops standards for AI agents. website https://las-wg.org LAS-WG Lightweight Agent Standard Working",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://github.com/orgs/las-wg/repositories",
     "claim": "GitHub REST API, *LAS-WG organization repositories*, checked 2026-10-29",
     "date": null,
     "quote": "\"full_name\": \"las-wg/agent-permissions.json\", \"private\": false, \"owner\": { \"login\": \"las-wg\", \"id\": 202027760, \"node_id\": \"O_kgDODAqy8A\", \"avatar_url\": \"https://avatars.githubusercontent.com/u/202027760?v=4\", \"gravatar_id\": \"\", \"url\": \"https://api.github.com/users/las-wg\", \"html_url\": \"https://github.com/las-wg\", \"followers_url\": \"https://api.github.com/users/las-wg/followers\", \"following_url\": \"https://api.github.com/users/las-wg/following{/other_user}\", \"gists_url\": \"https://api.github.com/users/las-wg/gists{/gist_id}\", \"starred_url\": \"https://api.github.com/users/las-wg/starred{/owner}{/repo}\", \"subscriptions_url\": \"https://api.github.com/users/las-wg/subscriptions\", \"organizations_url\": \"https://api.github.com/users/las-wg/orgs\", \"repos_url\": \"https://api.github.com/users/las-wg/repos\", \"events_url\": \"https://api.github.com/users/las-wg/events{/privacy}\", \"received_events_url\": \"https://api.github.com/users/las-wg/received_events\", \"type\": \"Organization\", \"user_view_type\": \"public\", \"site_admin\": false }, \"html_url\": \"https://github.com/las-wg/agent-permissions.json\", \"description\": \"robots.txt-style permission manifest for web agents\" / \"full_name\": \"las-wg/agent-permissions.json\"",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://raw.githubusercontent.com/las-wg/info/master/README.md",
     "claim": "LAS-WG, *LAS-WG organization README*, checked 2026-10-29",
     "date": null,
     "quote": "organization for the Lightweight Agent Standard Working Group (LAS-WG). LAS-WG develops interoperable standards for / organization for the Lightweight Agent Standard Working Group (LAS-WG).",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://raw.githubusercontent.com/las-wg/agent-permissions-python/main/src/agent_permissions/models/manifest.py",
     "claim": "las-wg/agent-permissions-python (GitHub), *las-wg/agent-permissions-python — manifest.py*, checked 2026-10-30",
     "date": null,
     "quote": "schema_version: str = Field(pattern=r\"^\\d+\\.\\d+\\.\\d+$\")",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://raw.githubusercontent.com/las-wg/agent-permissions-python/main/src/agent_permissions/data/agent-permissions.schema.json",
     "claim": "LAS-WG, *Reference JSON Schema (Python package)*, checked 2026-10-29",
     "date": null,
     "quote": "\"$schema\": \"http://json-schema.org/draft-07/schema#\", \"title\": \"Agent Permissions File\", \"type\": \"object\", \"required\": [\"metadata\", \"resource_rules\"]",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://raw.githubusercontent.com/las-wg/agent-permissions-python/main/README.md",
     "claim": "LAS-WG, *Agent Permissions Python library README*, checked 2026-10-29",
     "date": null,
     "quote": "import httpx from lxml import html from agent_permissions import fetch_manifest, validate_interaction manifest = fetch_manifest(\"https://example.com/.well-known/agent-permissions.json\")",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://raw.githubusercontent.com/las-wg/agent-permissions-python/main/src/agent_permissions/__init__.py",
     "claim": "LAS-WG, *agent_permissions package*, checked 2026-10-29",
     "date": null,
     "quote": "\"\"\"Public API for the agent-permissions library.\"\"\" from __future__ import annotations import json from dataclasses",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://raw.githubusercontent.com/las-wg/agent-permissions.json/main/LICENSE",
     "claim": "LAS-WG, *MIT License*, checked 2026-10-29",
     "date": null,
     "quote": "MIT License Copyright (c) 2025 Lightweight Agent Standard Working Group (LAS-WG)",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://raw.githubusercontent.com/las-wg/info/master/charter.md",
     "claim": "LAS-WG, *LAS-WG Charter*, checked 2026-10-29",
     "date": null,
     "quote": "# Lightweight Agent Standard Working Group (LAS-WG) Charter ## 1\\. Motivation As agent-based systems",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://raw.githubusercontent.com/las-wg/agent-permissions-python/main/pyproject.toml",
     "claim": "LAS-WG, *agent-permissions-python pyproject.toml*, checked 2026-10-29",
     "date": null,
     "quote": "enforcing agent-permissions manifests on the web.\" readme = \"README.md\" requires-python = \">=3.9\" license =",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://www.rfc-editor.org/rfc/rfc8615.html",
     "claim": "M. Nottingham, *RFC 8615: Well-Known Uniform Resource Identifiers (URIs)*, May 2019",
     "date": null,
     "quote": "This memo defines a path prefix for \"well-known locations\",",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://www.rfc-editor.org/rfc/rfc9309.html",
     "claim": "M. Koster, G. Illyes, H. Zeller, and L. Sassman, *RFC 9309: Robots Exclusion Protocol*, September 2022",
     "date": null,
     "quote": "<meta content=\"Common,Latin\" name=\"scripts\"> / This is an Internet Standards Track document.",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://webmachinelearning.github.io/webmcp/",
     "claim": "Web Machine Learning Community Group (editors Brandon Walderman, Khushal Sagar, Dominic Farolino, and Samuel Dallstream), *WebMCP*, Draft Community Group Report, 11 November 2026",
     "date": null,
     "quote": "Draft Community Group Report, 11 November 2026",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://github.com/wild-card-ai/agents-json/blob/master/README.md",
     "claim": "Wildcard AI, *agents-json README*, checked 2026-10-29",
     "date": null,
     "quote": "GitHub. 1401488693436528 app-id=1477376905, app-argument=https://github.com/wild-card-ai/agents-json/blob/master/README.md",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-aipref-vocab/",
     "claim": "IETF Datatracker, *draft-ietf-aipref-vocab — A Vocabulary For Expressing AI Usage Preferences (IETF Datatracker)*, checked 2026-11-06",
     "date": null,
     "quote": "Active Internet-Draft (aipref WG)",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://www.w3.org/community/reports/tdmrep/CG-FINAL-tdmrep-20240510/",
     "claim": "Laurent Le Meur (EDRLab), *TDM Reservation Protocol (TDMRep)*, Final Community Group Report, 10 May 2024",
     "date": null,
     "quote": "TDM Reservation Protocol (TDMRep) Final Community Group Report 10 May 2024 This version: https://www.w3.org/community/reports/tdmrep/CG-FINAL-tdmrep-20240510/",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://raw.githubusercontent.com/las-wg/agent-permissions-python/main/src/agent_permissions/io/discovery.py",
     "claim": "LAS-WG, *Manifest discovery module*, checked 2026-10-29",
     "date": null,
     "quote": "from bs4 import BeautifulSoup from..models import Manifest LINK_REL = \"agent-permissions\" DEFAULT_WELL_KNOWN_PATH = \"/.well-known/agent-permissions.json\" @dataclass",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://raw.githubusercontent.com/las-wg/agent-permissions-python/main/src/agent_permissions/validation/interaction_validator.py",
     "claim": "LAS-WG, *interaction_validator module*, checked 2026-10-29",
     "date": null,
     "quote": "ValidationResult( allowed=False, matched_rule=None, reasons=[\"No matching resource rule\"], ) result = ValidationResult( allowed=matching_rule.allowed, matched_rule=matching_rule.model_dump(mode=\"json\"), )",
     "ref": 24
    }
   ],
   "form": "well-known-file",
   "governance": "Lightweight Agent Standards Working Group (LAS-WG), chaired by Samuele Marro (University of Oxford and Institute for Decentralized AI), governed by the LAS-WG Charter (11 voting member organizations, one-organization-one-vote backstop, CC BY 4.0 outputs)",
   "group": null,
   "history": [
    {
     "date": "2026-10-29",
     "note": "Primary-source verified record (42 sources): las-wg/agent-permissions.json specification, arXiv:2601.02371v1/v2, las-wg/info charter and voting members, las-wg/agent-permissions-python v0.1.0, las-wg/agent-permissions-generator, permissioning.ai v0.1, Ajar Protocol, and aibuddy Docs."
    },
    {
     "date": "2026-09-06",
     "note": "created and verified against github.com/las-wg/agent-permissions.json and arxiv.org/html/2601.02371v2"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "implementation": "prototype",
   "last_verified": "2026-11-12",
   "name": "agent-permissions.json",
   "native_status": "Work-in-progress draft (\"Note: This standard is still WIP!\"); metadata.schema_version uses semantic versioning (`^\\d+\\.\\d+\\.\\d+$`, illustrated as \"1.0.0\" in examples), with zero tagged GitHub releases",
   "origin": {
    "date": "2025-08-05",
    "org": "Lightweight Agent Standards Working Group (LAS-WG)"
   },
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "candidate",
   "probe": {
    "method": "GET",
    "on_absent": "No agent-permissions.json at the well-known path; also check the page's HTML for a <link rel=\"agent-permissions\"> override before concluding the site has not published page-action permissions",
    "parse": "Valid JSON with top-level 'metadata' (schema_version, last_updated) and 'strict' boolean fields present, per the LAS-WG JSON Schema",
    "path": "{origin}/.well-known/agent-permissions.json"
   },
   "question": "Which page-level interactions (clicking, form submission, file upload, media control, script execution) may an agent perform while driving a web page's UI, as opposed to just fetching it?",
   "scope": "general",
   "spec_url": "https://github.com/las-wg/agent-permissions.json",
   "step": "permit",
   "summary_md": "**agent-permissions.json** is a work-in-progress JSON permission manifest originated and governed by the Lightweight Agent Standards Working Group (LAS-WG). Websites use it as a machine-readable, non-binding declaration of how automated agents, bots, crawlers, and assistants may interact with pages. The format combines fine-grained resource-level rules and higher-level action guidelines in one versioned document rather than scattering policy across ad hoc prompts. Consumers MAY fetch the JSON policy from an HTML link whose rel is agent-permissions. When no link tag is present, the default path is `/.well-known/agent-permissions.json`. Servers SHOULD serve it as `Content-Type: application/json`. Discovery is therefore a single static lookup comparable to other well-known JSON policy files, not a multi-hop protocol exchange. The README marks the standard as WIP. Example metadata uses semantic versioning via `schema_version` such as 1.0.0. The December 2025 commit history adds a required top-level `strict` boolean that sets the default when a verb or guideline does not match an explicit rule.",
   "track": "community",
   "version": {
    "date": "2025-12-10",
    "label": "v0.3 draft (schema_version 1.0.0)"
   },
   "watch": [
    {
     "type": "github",
     "repo": "las-wg/agent-permissions.json",
     "mode": "release"
    }
   ],
   "use_cases": [
    "let-agents-act-on-my-site",
    "control-ai-crawling"
   ],
   "audience": [
    "site-owner",
    "agent-builder"
   ],
   "pairs_with": [
    "ai-crawler-tokens-robots",
    "webmcp",
    "agents-json",
    "aipref-vocabulary",
    "tdmrep"
   ],
   "prerequisites": [],
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "web_discovery",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "This article is about the Lightweight Agent Standards Working Group (LAS-WG) advisory permission manifest for web agents at `/.well-known/agent-permissions.json`. For Wildcard AI's OpenAPI workflow bridge manifest at `/.well-known/agents.json`, see [agents.json](/protocols/agents-json/). For crawler-level allow and disallow directives in `/robots.txt`, see [AI crawler tokens in robots.txt](/protocols/ai-crawler-tokens-robots/). For content-usage and training-preference signaling, see [IETF AIPref Vocabulary](/protocols/aipref-vocabulary/) and [W3C TDM Reservation Protocol](/protocols/tdmrep/). [1]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**agent-permissions.json** is a work-in-progress JSON permission manifest originated and governed by the Lightweight Agent Standards Working Group (LAS-WG). Websites use it as a machine-readable, non-binding declaration of how automated agents, bots, crawlers, and assistants may interact with pages. The format combines fine-grained resource-level rules and higher-level action guidelines in one versioned document rather than scattering policy across ad hoc prompts. [2] Consumers MAY fetch the JSON policy from an HTML link whose rel is agent-permissions. When no link tag is present, the default path is `/.well-known/agent-permissions.json`. Servers SHOULD serve it as `Content-Type: application/json`. Discovery is therefore a single static lookup comparable to other well-known JSON policy files, not a multi-hop protocol exchange. [2] The README marks the standard as WIP. Example metadata uses semantic versioning via `schema_version` such as 1.0.0. The December 2025 commit history adds a required top-level `strict` boolean that sets the default when a verb or guideline does not match an explicit rule. [2][3]",
   "v05_identity_sentence_md": "**agent-permissions.json** is a work-in-progress JSON permission manifest originated and governed by the Lightweight Agent Standards Working Group (LAS-WG). Websites use it as a machine-readable, non-binding declaration of how automated agents, bots, crawlers, and assistants may interact with pages. The format combines fine-grained resource-level rules and higher-level action guidelines in one versioned document rather than scattering policy across ad hoc prompts. [2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Permit](/category/permit/) (`permit`)"
    },
    {
     "label": "Form",
     "value_md": "Well-known file (`well-known-file`)"
    },
    {
     "label": "Originated by",
     "value_md": "Samuele Marro (University of Oxford, LAS-WG Chair) and 14 co-authors (`arXiv:2601.02371`) [4][5][6]"
    },
    {
     "label": "Governed by",
     "value_md": "Lightweight Agent Standards Working Group (`LAS-WG`, 11 voting members) [7][8][9]"
    },
    {
     "label": "Track",
     "value_md": "Community working-group draft specification (`las-wg/agent-permissions.json`, Lightweight Agent Standards Working Group) [8][9]"
    },
    {
     "label": "Status",
     "value_md": "Work-in-progress draft (\"Note: This standard is still WIP!\"); metadata.schema_version uses semantic versioning (`^\\d+\\.\\d+\\.\\d+$`, illustrated as \"1.0.0\" in examples), with zero tagged GitHub releases [1][2][3][10]"
    },
    {
     "label": "Version",
     "value_md": "`v0.3` draft (`schema_version` `1.0.0`, `2025-12-10`); paper `arXiv:2601.02371v2` (`2026-01-12`); Python SDK `v0.1.0` [1][2][3]"
    },
    {
     "label": "Wire format",
     "value_md": "UTF-8 JSON (`Content-Type: application/json`) validated against Draft-07 JSON Schema (`\"title\": \"Agent Permissions File\"`) [2][11]"
    },
    {
     "label": "Specification",
     "value_md": "[Specification (`README.md`)](https://raw.githubusercontent.com/las-wg/agent-permissions.json/main/README.md) · [Paper (`arXiv:2601.02371v2`)](https://arxiv.org/html/2601.02371v2) · [Python SDK (`README.md`)](https://raw.githubusercontent.com/las-wg/agent-permissions-python/main/README.md) [2][6][12]"
    },
    {
     "label": "Found at",
     "value_md": "Page `<link rel=\"agent-permissions\" href=\"...\">` override with fallback to `/.well-known/agent-permissions.json` [2][6][13]"
    },
    {
     "label": "Licence",
     "value_md": "MIT License (`las-wg/agent-permissions.json` `LICENSE` and `agent-permissions-python` `pyproject.toml`); CC BY 4.0 under LAS-WG Charter [14][15][16]"
    }
   ],
   "v05_problem_md": "robots.txt expresses path-level allow or disallow for crawlers. It does not state whether an agent may click a control, fill a field, submit a checkout form, or honor a human-in-the-loop modifier on a selector. Sites therefore lack a structured channel to describe permissible UI automation separate from crawl policy. [1][2] The manifest separates machine-enforceable resource rules (verb, selector, allowed, modifiers) from natural-language action guidelines with RFC 2119 directives. Implementation-wise, resource rules can be enforced at the browser interface while guidelines feed prompts or configuration. On validation failure, consumers SHOULD treat the file as absent and MUST NOT grant extra permissions beyond default safety policies. [2] The file is advisory and non-binding: agents MAY behave more strictly than granted here, but MUST NOT exceed granted permissions if they claim to honor the format. It does not cover agent-to-agent traffic or content-usage policy, which the README points to IETF AIPref instead. Agents that ignore the manifest entirely are outside the specification's enforcement model. [2]",
   "v05_mechanism_delta_md": "The manifest separates machine-enforceable resource rules (verb, selector, allowed, modifiers) from natural-language action guidelines with RFC 2119 directives. Implementation-wise, resource rules can be enforced at the browser interface while guidelines feed prompts or configuration. On validation failure, consumers SHOULD treat the file as absent and MUST NOT grant extra permissions beyond default safety policies. [2]",
   "v05_scope_boundary_md": "The file is advisory and non-binding: agents MAY behave more strictly than granted here, but MUST NOT exceed granted permissions if they claim to honor the format. It does not cover agent-to-agent traffic or content-usage policy, which the README points to IETF AIPref instead. Agents that ignore the manifest entirely are outside the specification's enforcement model. [2]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "Well-Known URIs (RFC 8615)",
      "spec_or_rfc": "RFC 8615",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "LAS-WG publishes a JSON permission document at /.well-known/agent-permissions.json (also selectable with link rel=\"agent-permissions\") with metadata.schema_version set to 1.0.0; neither that well-known suffix nor the link relation is registered in IANA under RFC 8615. [2][17]"
     },
     {
      "name": "robots.txt (RFC 9309)",
      "spec_or_rfc": "RFC 9309",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "The JSON file's resource_rules bind verbs such as click_element, set_input_value, and submit_form to CSS selectors, whereas RFC 9309 Allow and Disallow rules constrain URL paths a crawler may fetch and are not an authorization system. [2][18]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "ai-crawler-tokens-robots",
      "target_name": "AI crawler tokens in robots.txt",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "agent-permissions.json lists action permissions, including resource_rules verbs such as click_element and submit_form, at /.well-known/agent-permissions.json, while AI crawler tokens only match User-agent products to path rules in /robots.txt. [2][18]"
     },
     {
      "target_id": "webmcp",
      "target_name": "WebMCP",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "agent-permissions.json states which in-page actions are allowed, using resource_rules verbs and action_guidelines, while WebMCP is the browser API for agent actions and does not define that permissions file. [2][19]"
     },
     {
      "target_id": "agents-json",
      "target_name": "agents.json",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "agent-permissions.json is an allow-or-deny file for in-page actions, while agents.json is a separate well-known document. [2][20]"
     },
     {
      "target_id": "aipref-vocabulary",
      "target_name": "AIPREF Vocabulary (A Vocabulary For Expressing AI Usage Preferences)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "agent-permissions.json constrains actions on a page with resource_rules and action_guidelines, while the AIPREF vocabulary expresses preferences such as train-ai and search and defines no action list. [2][21]"
     },
     {
      "target_id": "tdmrep",
      "target_name": "TDMRep (TDM Reservation Protocol)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "agent-permissions.json is about in-page actions such as click_element and submit_form, while TDMRep's tdm-reservation, including value 1, is about text-and-data mining of the content. [2][22]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (1 probed or cited example; non-exhaustive).",
    "side_a": null,
    "side_b": {
     "visible": true,
     "heading": "Bot, client & tool support",
     "col4_header": "Behavior / Provisioning",
     "note_md": null,
     "rows": [
      {
       "actor": "LAS-WG agent-permissions (Python)",
       "role": "Validator / Parser",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Package `agent-permissions` 0.1.0 (in pyproject.toml) discovers a manifest via `<link rel=\"agent-permissions\">` or `/.well-known/agent-permissions.json`; predating the `strict` field, `validate_interaction` returns `allowed=False` with reason `No matching resource rule` when nothing matches.",
       "source_md": "[agent-permissions-python README](https://raw.githubusercontent.com/las-wg/agent-permissions-python/main/README.md) [12] · [discovery.py](https://raw.githubusercontent.com/las-wg/agent-permissions-python/main/src/agent_permissions/io/discovery.py) [23] · [interaction_validator.py](https://raw.githubusercontent.com/las-wg/agent-permissions-python/main/src/agent_permissions/validation/interaction_validator.py) [24]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Permit protocols](/category/permit/)** — Category index for `permit` standards."
    }
   ],
   "v05_compiled_md": "---\nid: agent-permissions-json\ntitle: \"agent-permissions.json\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: permit\nform: well-known-file\nwire_archetype: web_discovery\nspec_url: https://raw.githubusercontent.com/las-wg/agent-permissions.json/main/README.md\nlast_checked: 2026-11-12\n---\n\n# agent-permissions.json\n\n**Category:** [Permit](/category/permit/) (`permit`) · **Form:** Well-known file (`well-known-file`) · **Last checked:** 2026-11-12\n\n> *This article is about the Lightweight Agent Standards Working Group (LAS-WG) advisory permission manifest for web agents at `/.well-known/agent-permissions.json`. For Wildcard AI's OpenAPI workflow bridge manifest at `/.well-known/agents.json`, see [agents.json](/protocols/agents-json/). For crawler-level allow and disallow directives in `/robots.txt`, see [AI crawler tokens in robots.txt](/protocols/ai-crawler-tokens-robots/). For content-usage and training-preference signaling, see [IETF AIPref Vocabulary](/protocols/aipref-vocabulary/) and [W3C TDM Reservation Protocol](/protocols/tdmrep/). [1]*\n\n**agent-permissions.json** is a work-in-progress JSON permission manifest originated and governed by the Lightweight Agent Standards Working Group (LAS-WG). Websites use it as a machine-readable, non-binding declaration of how automated agents, bots, crawlers, and assistants may interact with pages. The format combines fine-grained resource-level rules and higher-level action guidelines in one versioned document rather than scattering policy across ad hoc prompts. [2] Consumers MAY fetch the JSON policy from an HTML link whose rel is agent-permissions. When no link tag is present, the default path is `/.well-known/agent-permissions.json`. Servers SHOULD serve it as `Content-Type: application/json`. Discovery is therefore a single static lookup comparable to other well-known JSON policy files, not a multi-hop protocol exchange. [2] The README marks the standard as WIP. Example metadata uses semantic versioning via `schema_version` such as 1.0.0. The December 2025 commit history adds a required top-level `strict` boolean that sets the default when a verb or guideline does not match an explicit rule. [2][3]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Permit](/category/permit/) (`permit`) |\n| **Form** | Well-known file (`well-known-file`) |\n| **Originated by** | Samuele Marro (University of Oxford, LAS-WG Chair) and 14 co-authors (`arXiv:2601.02371`) [4][5][6] |\n| **Governed by** | Lightweight Agent Standards Working Group (`LAS-WG`, 11 voting members) [7][8][9] |\n| **Track** | Community working-group draft specification (`las-wg/agent-permissions.json`, Lightweight Agent Standards Working Group) [8][9] |\n| **Status** | Work-in-progress draft (\"Note: This standard is still WIP!\"); metadata.schema_version uses semantic versioning (`^\\d+\\.\\d+\\.\\d+$`, illustrated as \"1.0.0\" in examples), with zero tagged GitHub releases [1][2][3][10] |\n| **Version** | `v0.3` draft (`schema_version` `1.0.0`, `2025-12-10`); paper `arXiv:2601.02371v2` (`2026-01-12`); Python SDK `v0.1.0` [1][2][3] |\n| **Wire format** | UTF-8 JSON (`Content-Type: application/json`) validated against Draft-07 JSON Schema (`\"title\": \"Agent Permissions File\"`) [2][11] |\n| **Specification** | [Specification (`README.md`)](https://raw.githubusercontent.com/las-wg/agent-permissions.json/main/README.md) · [Paper (`arXiv:2601.02371v2`)](https://arxiv.org/html/2601.02371v2) · [Python SDK (`README.md`)](https://raw.githubusercontent.com/las-wg/agent-permissions-python/main/README.md) [2][6][12] |\n| **Found at** | Page `<link rel=\"agent-permissions\" href=\"...\">` override with fallback to `/.well-known/agent-permissions.json` [2][6][13] |\n| **Licence** | MIT License (`las-wg/agent-permissions.json` `LICENSE` and `agent-permissions-python` `pyproject.toml`); CC BY 4.0 under LAS-WG Charter [14][15][16] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [Adoption and ecosystem](#adoption-and-ecosystem)\n4. [See also](#see-also)\n5. [References](#references)\n\n---\n\n## Problem and scope\n\nrobots.txt expresses path-level allow or disallow for crawlers. It does not state whether an agent may click a control, fill a field, submit a checkout form, or honor a human-in-the-loop modifier on a selector. Sites therefore lack a structured channel to describe permissible UI automation separate from crawl policy. [1][2] The manifest separates machine-enforceable resource rules (verb, selector, allowed, modifiers) from natural-language action guidelines with RFC 2119 directives. Implementation-wise, resource rules can be enforced at the browser interface while guidelines feed prompts or configuration. On validation failure, consumers SHOULD treat the file as absent and MUST NOT grant extra permissions beyond default safety policies. [2] The file is advisory and non-binding: agents MAY behave more strictly than granted here, but MUST NOT exceed granted permissions if they claim to honor the format. It does not cover agent-to-agent traffic or content-usage policy, which the README points to IETF AIPref instead. Agents that ignore the manifest entirely are outside the specification's enforcement model. [2]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **Well-Known URIs (RFC 8615)** | `RFC 8615` | Profiles classic standard | LAS-WG publishes a JSON permission document at /.well-known/agent-permissions.json (also selectable with link rel=\"agent-permissions\") with metadata.schema_version set to 1.0.0; neither that well-known suffix nor the link relation is registered in IANA under RFC 8615. [2][17] |\n| **robots.txt (RFC 9309)** | `RFC 9309` | Analogous to classic standard | The JSON file's resource_rules bind verbs such as click_element, set_input_value, and submit_form to CSS selectors, whereas RFC 9309 Allow and Disallow rules constrain URL paths a crawler may fetch and are not an authorization system. [2][18] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[AI crawler tokens in robots.txt](/protocols/ai-crawler-tokens-robots/)** | Peer alternative | agent-permissions.json lists action permissions, including resource_rules verbs such as click_element and submit_form, at /.well-known/agent-permissions.json, while AI crawler tokens only match User-agent products to path rules in /robots.txt. [2][18] |\n| **[WebMCP](/protocols/webmcp/)** | Complements | agent-permissions.json states which in-page actions are allowed, using resource_rules verbs and action_guidelines, while WebMCP is the browser API for agent actions and does not define that permissions file. [2][19] |\n| **[agents.json](/protocols/agents-json/)** | Complements | agent-permissions.json is an allow-or-deny file for in-page actions, while agents.json is a separate well-known document. [2][20] |\n| **[AIPREF Vocabulary (A Vocabulary For Expressing AI Usage Preferences)](/protocols/aipref-vocabulary/)** | Complements | agent-permissions.json constrains actions on a page with resource_rules and action_guidelines, while the AIPREF vocabulary expresses preferences such as train-ai and search and defines no action list. [2][21] |\n| **[TDMRep (TDM Reservation Protocol)](/protocols/tdmrep/)** | Complements | agent-permissions.json is about in-page actions such as click_element and submit_form, while TDMRep's tdm-reservation, including value 1, is about text-and-data mining of the content. [2][22] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (1 probed or cited example; non-exhaustive).*\n\n### Bot, client & tool support\n\n| Actor | Role | Status | Behavior / Provisioning | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **LAS-WG agent-permissions (Python)** | Validator / Parser | Supported · checked 2026-10-30 | Package `agent-permissions` 0.1.0 (in pyproject.toml) discovers a manifest via `<link rel=\"agent-permissions\">` or `/.well-known/agent-permissions.json`; predating the `strict` field, `validate_interaction` returns `allowed=False` with reason `No matching resource rule` when nothing matches. | [agent-permissions-python README](https://raw.githubusercontent.com/las-wg/agent-permissions-python/main/README.md) [12] · [discovery.py](https://raw.githubusercontent.com/las-wg/agent-permissions-python/main/src/agent_permissions/io/discovery.py) [23] · [interaction_validator.py](https://raw.githubusercontent.com/las-wg/agent-permissions-python/main/src/agent_permissions/validation/interaction_validator.py) [24] |\n\n---\n\n## See also\n\n- **Category:** [Permit protocols](/category/permit/)\n\n---\n\n## References\n\n1. Lightweight Agent Standards Working Group (LAS-WG), *las-wg/agent-permissions.json repository* (checked 2026-10-29) — <https://github.com/las-wg/agent-permissions.json>\n2. Lightweight Agent Standards Working Group (LAS-WG), *agent-permissions.json specification (README)* (checked 2026-10-29) — <https://raw.githubusercontent.com/las-wg/agent-permissions.json/main/README.md>\n3. GitHub REST API, *las-wg/agent-permissions.json commit history* (checked 2026-10-29) — <https://github.com/las-wg/agent-permissions.json/commits>\n4. GitHub REST API, *Contributor statistics* (checked 2026-10-29) — <https://github.com/las-wg/agent-permissions.json/graphs/contributors>\n5. Samuele Marro et al. (LAS-WG), *Permission Manifests for Web Agents (arXiv abstract)* (7 December 2025) — <https://arxiv.org/abs/2601.02371>\n6. Samuele Marro et al. (LAS-WG), *Permission Manifests for Web Agents (HTML)* (12 January 2026) — <https://arxiv.org/html/2601.02371v2>\n7. Lightweight Agent Standards Working Group (LAS-WG), *LAS-WG website* (checked 2026-10-29) — <https://las-wg.org/>\n8. GitHub REST API, *LAS-WG organization repositories* (checked 2026-10-29) — <https://github.com/orgs/las-wg/repositories>\n9. LAS-WG, *LAS-WG organization README* (checked 2026-10-29) — <https://raw.githubusercontent.com/las-wg/info/master/README.md>\n10. las-wg/agent-permissions-python (GitHub), *las-wg/agent-permissions-python — manifest.py* (checked 2026-10-30) — <https://raw.githubusercontent.com/las-wg/agent-permissions-python/main/src/agent_permissions/models/manifest.py>\n11. LAS-WG, *Reference JSON Schema (Python package)* (checked 2026-10-29) — <https://raw.githubusercontent.com/las-wg/agent-permissions-python/main/src/agent_permissions/data/agent-permissions.schema.json>\n12. LAS-WG, *Agent Permissions Python library README* (checked 2026-10-29) — <https://raw.githubusercontent.com/las-wg/agent-permissions-python/main/README.md>\n13. LAS-WG, *agent_permissions package* (checked 2026-10-29) — <https://raw.githubusercontent.com/las-wg/agent-permissions-python/main/src/agent_permissions/__init__.py>\n14. LAS-WG, *MIT License* (checked 2026-10-29) — <https://raw.githubusercontent.com/las-wg/agent-permissions.json/main/LICENSE>\n15. LAS-WG, *LAS-WG Charter* (checked 2026-10-29) — <https://raw.githubusercontent.com/las-wg/info/master/charter.md>\n16. LAS-WG, *agent-permissions-python pyproject.toml* (checked 2026-10-29) — <https://raw.githubusercontent.com/las-wg/agent-permissions-python/main/pyproject.toml>\n17. M. Nottingham, *RFC 8615: Well-Known Uniform Resource Identifiers (URIs)* (May 2019) — <https://www.rfc-editor.org/rfc/rfc8615.html>\n18. M. Koster, G. Illyes, H. Zeller, and L. Sassman, *RFC 9309: Robots Exclusion Protocol* (September 2022) — <https://www.rfc-editor.org/rfc/rfc9309.html>\n19. Web Machine Learning Community Group (editors Brandon Walderman, Khushal Sagar, Dominic Farolino, and Samuel Dallstream), *WebMCP* (Draft Community Group Report, 11 November 2026) — <https://webmachinelearning.github.io/webmcp/>\n20. Wildcard AI, *agents-json README* (checked 2026-10-29) — <https://github.com/wild-card-ai/agents-json/blob/master/README.md>\n21. IETF Datatracker, *draft-ietf-aipref-vocab — A Vocabulary For Expressing AI Usage Preferences (IETF Datatracker)* (checked 2026-11-06) — <https://datatracker.ietf.org/doc/draft-ietf-aipref-vocab/>\n22. Laurent Le Meur (EDRLab), *TDM Reservation Protocol (TDMRep)* (Final Community Group Report, 10 May 2024) — <https://www.w3.org/community/reports/tdmrep/CG-FINAL-tdmrep-20240510/>\n23. LAS-WG, *Manifest discovery module* (checked 2026-10-29) — <https://raw.githubusercontent.com/las-wg/agent-permissions-python/main/src/agent_permissions/io/discovery.py>\n24. LAS-WG, *interaction_validator module* (checked 2026-10-29) — <https://raw.githubusercontent.com/las-wg/agent-permissions-python/main/src/agent_permissions/validation/interaction_validator.py>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "",
   "adoption": {
    "level": "observed",
    "by": "Tuist, Firecrawl, Alpic, agents-txt.com, mailbox.bot, WorkOS AuthKit, Storewalk TRX-009, PAX AI (ax-platform-mcp), and 7 other verified implementations",
    "probe_run": null
   },
   "aliases": [],
   "analog": "Self-service sign-up form",
   "collisions": [
    "Not to be confused with the unrelated ACT-AUTH.md convention published in the actcore/act-spec repository, which addresses similar ground independently"
   ],
   "discovery": {
    "mechanism": "A markdown convention file at the site root, cross-referenced with RFC 9728 Protected Resource Metadata for the actual OAuth exchange",
    "path": "/auth.md"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://github.com/workos/auth.md",
     "claim": "WorkOS, *auth.md*, repository created 2026-05-20; pushed 2026-09-24",
     "date": null,
     "quote": "\"assertion_types_supported\": [ \"urn:ietf:params:oauth:token-type:id-jag\" ] }, \"events_supported\": [ \"https://schemas.workos.com/events/agent/auth/identity/assertion/revoked\" ] } } The top-level issuer / \"full_name\": \"workos/auth.md\" / \"workos/auth.md\", \"private\": false, \"owner\": { \"login\": \"workos\", \"id\": 47638084, \"node_id\": \"MDEyOk9yZ2FuaXphdGlvbjQ3NjM4MDg0\", \"avatar_url\": \"https://avatars.githubusercontent.com/u/47638084?v=4\",",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://raw.githubusercontent.com/workos/auth.md/main/README.md",
     "claim": "WorkOS, *auth.md*, README on main",
     "date": null,
     "quote": "A reference implementation of agentic registration - a protocol for agents to authenticate to services on behalf of users. / Three roles: an agent acting for a user, an agent provider that mints identity assertions (ID-JAGs), and a service that accepts those assertions, when available, and issues credentials. If the agent is not associated with a user identity, or the agent provider does not support ID-JAGs, the service uses an RFC 8628-style claim ceremony to authenticate the agent instead. / The agent_auth block is the profile extension carrying the registration and claim surface. / Registration and credential issuance are split across two endpoints. POST /agent/identity accepts the agent's chosen identity assertion (ID-JAG, verified email, or anonymous) and returns a service-signed identity_assertion. The agent then exchanges that assertion at POST /oauth2/token (RFC 7523 JWT-bearer grant) for an access_token. / 200 OK (JSON Web Key Set) Service-->>Agent: 200 OK (identity_assertion) Agent->>Service: POST /oauth2/token grant_type=jwt-bearer&assertion= / \"https://auth.service.example.com/oauth2/revoke\", \"grant_types_supported\": [ \"urn:ietf:params:oauth:grant-type:jwt-bearer\", \"urn:workos:agent-auth:grant-type:claim\" ], \"agent_auth\": { \"skill\": / for an access_token. ### Discovery Hosted at /.well-known/oauth-authorization-server: json { \"resource\": \"https://api.service.example.com/\", \"authorization_servers\": [\"https://auth.service.example.com/\"], / If the agent is not associated with a user identity, or the agent provider does not support ID-JAGs, the service uses an RFC 8628-style claim ceremony to authenticate the agent instead.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://workos.com/auth-md/docs/auth-md",
     "claim": "WorkOS, *The auth.md file — auth.md*, checked 2026-10-29",
     "date": null,
     "quote": "Serve the file at your service root: https://service.example.com/auth.md. / The structured Protected Resource Metadata (PRM) at /.well-known/oauth-protected-resource remains the authoritative source for endpoint URLs and supported flows; auth.md is the prose companion that points back at it.",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://raw.githubusercontent.com/workos/auth.md/main/AUTH.md",
     "claim": "WorkOS, *AUTH.md*, checked 2026-10-29",
     "date": null,
     "quote": "urn:ietf:params:oauth:grant-type:jwt-bearer (RFC 7523) is for exchanging your identity_assertion for an access_token (Step 5). / the profile-specific claim grant, passing your claim_token: http POST /oauth2/token Content-Type: application/x-www-form-urlencoded grant_type=urn:workos:agent-auth:grant-type:claim &claim_token= / }, \"events_supported\": [ \"https://schemas.workos.com/events/agent/auth/identity/assertion/revoked\" ] } } The outer fields restate the PRM. The / HTTP/1.1 401 Unauthorized WWW-Authenticate: Bearer resource_metadata=\"https://api.service.example.com/.well-known/oauth-protected-resource\" Pull the resource_metadata value from that header and / WWW-Authenticate: AgentAuth error=\"interaction_required\" … WWW-Authenticate: AgentAuth error=\"login_required\" / The ceremony fields (user_code, verification_uri, expires_in, interval) borrow their shape from RFC 8628 device authorization, and polling happens at the standard token_endpoint with a profile-specific grant. / grant_type is not one of the two supported values (urn:ietf:params:oauth:grant-type:jwt-bearer for token exchange, urn:workos:agent-auth:grant-type:claim for ceremony polling). / There is no OAuth refresh_token in this flow - the two-step pattern replaces it.",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://raw.githubusercontent.com/workos/auth.md/main/CHANGELOG.md",
     "claim": "WorkOS, *CHANGELOG.md*, checked 2026-10-29",
     "date": null,
     "quote": "v0.6.0 (2026-06-10) Splits the email-based registration path out from identity_assertion and into a top-level service_auth registration type, with a body modeled on OIDC CIBA's login_hint. / v0.1.0 (2026-05-21) Initial proposal. / service is prepared to ingest. Currently lists https://schemas.workos.com/events/agent/auth/identity/assertion/revoked. ### Changed - Endpoint: /agent/auth/revoke → / # auth.md Changelog ## v0.6.0 (2026-06-10) Splits the email-based registration path out from identity_assertion / both urn:ietf:params:oauth:grant-type:jwt-bearer and the new claim grant. - POST /agent/identity/claim/complete is now the form-action / - Discovery (/.well-known/oauth-authorization-server) surfaces the top-level RFC 8414 fields (issuer, token_endpoint, revocation_endpoint, grant_types_supported) alongside / Gates first-time linking of an ID-JAG to an existing account behind a user-confirmation ceremony, and requires fresh auth_time on every ID-JAG. Without this confirmation gate, any trusted provider could mint an ID-JAG with email_verified: true for a victim's email and silently take over their account. Without the freshness gate, an agent could use a stale upstream session.",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://workos.com/blog/agent-registration-with-auth-md",
     "claim": "Garrett Galow (WorkOS), *Agent Registration with Auth.md — WorkOS*, checked 2026-10-29",
     "date": null,
     "quote": "}, \"url\": \"https://workos.com/blog/agent-registration-with-auth-md\", \"datePublished\": \"May 21, 2026\" } @font-face { font-family: Untitled Fallback; src:",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://workos.com/blog/mcp-night-4-recap-auth-md-agentic-registration",
     "claim": "Zack Proser (WorkOS), *MCP Night 4 recap: agent auth, auth.md, and the rise of agentic registration — WorkOS*, checked 2026-10-29",
     "date": null,
     "quote": "2026 May 25, 2026 MCP Night 4 recap: agent auth, auth.md, and the rise / the new enterprise-ready.\", \"author\": { \"@type\": \"Organization\", \"name\": \"WorkOS\" }, \"url\": \"https://workos.com/blog/mcp-night-4-recap-auth-md-agentic-registration\", \"datePublished\": \"May",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://workos.com/blog/workos-aie-worlds-fair-2026-recap",
     "claim": "Zack Proser (WorkOS), *Lifestyles of the AI-Native: WorkOS at the AI Engineer World's Fair 2026 — WorkOS*, checked 2026-10-29",
     "date": null,
     "quote": "Engineer World's Fair 2026\"; const pageUrl = \"https://workos.com/blog/workos-aie-worlds-fair-2026-recap\"; const prompt = `Read this article:",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://workos.com/auth-md",
     "claim": "WorkOS, *auth.md — Open Protocol for Agent Registration*, checked 2026-10-29",
     "date": null,
     "quote": "transition-colors max-sm:hidden\\\",\\\"href\\\":\\\"https://github.com/workos/auth.md/blob/main/CHANGELOG.md\\\",\\\"data-shortcut\\\":\\\"c\\\",\\\"target\\\":\\\"_blank\\\",\\\"rel\\\":\\\"noopener",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://auth-md.com/",
     "claim": "Fabricio Telles, *AI Agent Registration Protocol for Web — auth-md*, checked 2026-10-29",
     "date": null,
     "quote": "Protocol authored by WorkOS under MIT License. / today Install the Skill Protocol authored by WorkOS under MIT License. This is an",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://raw.githubusercontent.com/workos/auth.md/main/package.json",
     "claim": "WorkOS, *package.json*, checked 2026-10-29",
     "date": null,
     "quote": "cross-origin x-fastly-request-id: bf800ffe097122f5b10109c90cfc06cbc4f7b027 expires: Fri, 30 Oct 2026 23:28:16 GMT source-age: 0 {\"name\":\"auth-md\",\"version\":\"0.6.0\",\"private\":true,\"scripts\":{\"dev\":\"pnpm --filter / x-xss-protection: 1; mode=block x-github-request-id: 76A6:25E82A:622EDE:66B500:6AE526E3 x-github-edge-region: fra accept-ranges: bytes date: Fri, 30 Oct 2026",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://workos.com/docs/authkit/agent-registration",
     "claim": "WorkOS, *Agent Registration – AuthKit – WorkOS Docs*, checked 2026-10-29",
     "date": null,
     "quote": "Agent Registration - AuthKit - WorkOS Docs {\"@context\":\"https://schema.org\",\"@type\":\"TechArticle\",\"headline\":\"Agent Registration - AuthKit - WorkOS Docs\",\"description\":\"How / Agent Registration is generally available. It enables AI agents and LLM-based clients to obtain identity credentials from your AuthKit-powered service. Unlike traditional OAuth flows designed for users in a browser, Agent Registration is purpose-built for programmatic clients that need machine-readable instructions, minimal interaction, and secure credential management. Agents discover the registration surface through your service's.well-known/oauth-authorization-server metadata, register with one of several identity types, optionally bind to a user via a claim ceremony, and exchange the resulting identity assertion for an access token or API key.",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://raw.githubusercontent.com/fabricioctelles/skills/main/skills/auth-md/SKILL.md",
     "claim": "Fabricio Telles (`fabricioctelles/skills`), *skills/auth-md/SKILL.md*, checked 2026-10-29",
     "date": null,
     "quote": "https://github.com/fabricioctelles/skills license: Apache 2.0 category: library-and-api-reference upstream_commit: \"b53c9edfbfeea679b617727ebca9ba436bade794\" --- # auth-md Generate, validate, and",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://www.rfc-editor.org/rfc/rfc6749.html",
     "claim": "D. Hardt, Ed., *RFC 6749: The OAuth 2.0 Authorization Framework*, October 2012",
     "date": null,
     "quote": "The OAuth 2.0 authorization framework enables a third-party",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://www.rfc-editor.org/rfc/rfc7591.html",
     "claim": "J. Richer, Ed., M. Jones, J. Bradley, M. Machulak, and P. Hunt, *RFC 7591: OAuth 2.0 Dynamic Client Registration Protocol*, July 2015",
     "date": null,
     "quote": "This specification defines mechanisms for dynamically registering",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-oauth-identity-assertion-authz-grant/",
     "claim": "Aaron Parecki, Karl McGuinness, and Brian Campbell (IETF Web Authorization Protocol Working Group), *draft-ietf-oauth-identity-assertion-authz-grant — Identity Assertion JWT Authorization Grant (IETF Datatracker)*, checked 2026-11-08",
     "date": null,
     "quote": "Active Internet-Draft (oauth WG) … Intended RFC status | | (None) … WG state | | WG Document … IESG state | | I-D Exists",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://www.ietf.org/archive/id/draft-ietf-oauth-identity-assertion-authz-grant-06.txt",
     "claim": "A. Parecki (Okta), K. McGuinness (Independent), and B. Campbell (Ping Identity), *Identity Assertion JWT Authorization Grant (draft-ietf-oauth-identity-assertion-authz-grant-06)*, 31 October 2026; expires 4 May 2027",
     "date": null,
     "quote": "Identity Assertion JWT Authorization Grant draft-ietf-oauth-identity-assertion-authz-grant-06 … requested_token_type=urn:ietf:params:oauth:token-type:id-jag",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://datatracker.ietf.org/doc/html/rfc9728",
     "claim": "IETF Datatracker, *RFC 9728: OAuth 2.0 Protected Resource Metadata*, RFC - Proposed Standard (April 2025)",
     "date": null,
     "quote": "RFC - Proposed Standard April 2025",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-oauth-client-id-metadata-document/",
     "claim": "Aaron Parecki and Emelia Smith (IETF Web Authorization Protocol Working Group), *draft-ietf-oauth-client-id-metadata-document — OAuth Client ID Metadata Document (IETF Datatracker)*, checked 2026-11-08",
     "date": null,
     "quote": "Active Internet-Draft … oauth WG",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Current : the current protocol version, which is ready for use and may continue to receive backwards compatible changes.",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://www.linuxfoundation.org/press/linux-foundation-announces-operational-launch-of-x402-foundation-to-standardize-internet-native-payments-for-ai-agents-and-applications",
     "claim": "Linux Foundation, *Linux Foundation Announces Operational Launch of x402 Foundation to Standardize Internet-Native Payments for AI Agents and Applications*, July 14, 2026",
     "date": null,
     "quote": "SAN FRANCISCO, July 14, 2026 – The Linux Foundation , the nonprofit organization enabling mass innovation through open source, today announced the operational launch of the x402 Foundation",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://tuist.dev/auth.md",
     "claim": "Tuist, *auth.md*, checked 2026-10-30",
     "date": null,
     "quote": "Tuist implements the current [WorkOS auth.md protocol](https://workos.com/auth-md) for the [Model Context Protocol](https://modelcontextprotocol.io) server at `https://tuist.dev/mcp`. Follow the discovered endpoints and the sequence below. Registration returns a signed identity assertion, not an access token. Exchange that assertion at the discovered token endpoint before calling the Model Context Protocol server.",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://tuist.dev/.well-known/oauth-authorization-server",
     "claim": "Tuist, *Tuist authorization server*, checked 2026-10-30",
     "date": null,
     "quote": "\"identity_endpoint\":\"https://tuist.dev/agent/identity\",\"identity_types_supported\":[\"anonymous\",\"identity_assertion\",\"service_auth\"]",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://tuist.dev/changelog/2026.05.27-auth-md",
     "claim": "Tuist, *Sign agents in with auth.md*, checked 2026-10-29",
     "date": null,
     "quote": "Tuist now supports auth.md, the open agent registration specification. Agents that implement the standard can connect to the Tuist MCP server directly: depending on the agent, Tuist either confirms the registration with the agent provider, or emails you a secure link with a six-digit code to read back to the agent. No browser-based OAuth round-trip required.",
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://www.firecrawl.dev/auth.md",
     "claim": "Firecrawl, *Firecrawl auth.md*, checked 2026-10-30",
     "date": null,
     "quote": "You are an agent. Firecrawl supports agentic registration for WorkOS ID-JAG identity assertions: discover -> register -> call API. Follow the steps in order; do not skip ahead. Firecrawl currently supports one registration method: - `identity_assertion` with `assertion_type: \"urn:ietf:params:oauth:token-type:id-jag\"` - `requested_credential_type: \"api_key\"` - Credentials are Firecrawl API keys used as bearer tokens.",
     "ref": 25
    },
    {
     "label": "[26]",
     "url": "https://www.firecrawl.dev/.well-known/oauth-authorization-server",
     "claim": "Firecrawl, *Firecrawl OAuth authorization server metadata*, HTTP Date Fri, 30 Oct 2026",
     "date": null,
     "quote": "\"agent_auth\":{\"skill\":\"https://www.firecrawl.dev/auth.md\",\"register_uri\":\"https://www.firecrawl.dev/agent/auth\",\"revocation_uri\":\"https://www.firecrawl.dev/agent/auth/revoke\",\"identity_types_supported\":[\"identity_assertion\"],\"identity_assertion\":{\"assertion_types_supported\":[\"urn:ietf:params:oauth:token-type:id-jag\"],\"credential_types_supported\":[\"api_key\"]}",
     "ref": 26
    },
    {
     "label": "[27]",
     "url": "https://alpic.ai/auth.md",
     "claim": "Alpic, *Alpic auth.md*, checked 2026-10-30",
     "date": null,
     "quote": "https://api.alpic.ai/.well-known/oauth-authorization-server The agent_auth block tells you: register_uri - where to POST registration requests identity_types_supported",
     "ref": 27
    },
    {
     "label": "[28]",
     "url": "https://api.alpic.ai/.well-known/oauth-authorization-server",
     "claim": "Alpic, *Alpic authorization server*, checked 2026-10-30",
     "date": null,
     "quote": "\"agent_auth\":{\"skill\":\"https://alpic.ai/auth.md\",\"register_uri\":\"https://api.alpic.ai/agent/auth\",\"identity_types_supported\":[\"identity_assertion\"],\"identity_assertion\":{\"assertion_types_supported\":[\"urn:ietf:params:oauth:token-type:id-jag\",\"urn:ietf:params:oauth:token-type:jwt\"],\"credential_types_supported\":[\"api_key\"]}}}",
     "ref": 28
    },
    {
     "label": "[29]",
     "url": "https://agents-txt.com/auth.md",
     "claim": "agents.txt Project, *agents-txt.com live /auth.md walkthrough*, checked 2026-10-30",
     "date": null,
     "quote": "This deployment hosts the [agents.txt](https://agents-txt.com) reference site. The agentic-registration walkthrough below is a working example of the [auth.md](https://github.com/workos/auth.md) shape advertised in `/agents.txt` under `Authorization: auth-md`. The OAuth metadata pair (`/.well-known/oauth-protected-resource` + `/.well-known/oauth-authorization-server`) is the same one used by the [`oauth2`](/spec#112-oauth2--oauth-20) protocol on this site; the additional `agent_auth` block on the AS metadata is what activates this flow.",
     "ref": 29
    },
    {
     "label": "[30]",
     "url": "https://agents-txt.com/.well-known/oauth-authorization-server",
     "claim": "agents.txt Project, *agents-txt.com authorization server*, checked 2026-10-30",
     "date": null,
     "quote": "\"agent_auth\":{\"skill\":\"https://agents-txt.com/auth.md\",\"register_uri\":\"https://agents-txt.com/agent/auth\",\"claim_uri\":\"https://agents-txt.com/agent/auth/claim\",\"revocation_uri\":\"https://agents-txt.com/agent/auth/revoke\",\"identity_types_supported\":[\"anonymous\",\"identity_assertion\"]",
     "ref": 30
    },
    {
     "label": "[31]",
     "url": "https://mailbox.bot/auth.md",
     "claim": "Mailbox Bot, *auth.md*, checked 2026-10-30",
     "date": null,
     "quote": "This document describes agent registration for mailbox.bot, a live physical postal mail API at https://mailbox.bot. Protected REST resources live under https://mailbox.bot/api and agent registration lives on the same authorization server. Registration is intentionally guarded: agents can discover the service and request a human-approved claim by email, but live order placement spends prepaid mailbox.bot credits owned by the human operator and requires human-owned onboarding and scoped credentials.",
     "ref": 31
    },
    {
     "label": "[32]",
     "url": "https://mailbox.bot/.well-known/oauth-authorization-server",
     "claim": "Mailbox Bot, *mailbox.bot authorization server*, checked 2026-10-30",
     "date": null,
     "quote": "\"current_flow\":\"user_claimed_email_required\",\"identity_types_supported\":[\"identity_assertion\"],\"anonymous\":{\"enabled\":false,\"reason\":\"Anonymous registration is not enabled because mailbox.bot can place physical mail orders and spend prepaid operator credits.\"}",
     "ref": 32
    },
    {
     "label": "[33]",
     "url": "https://workos.com/auth.md",
     "claim": "WorkOS, *auth.md*, checked 2026-10-30",
     "date": null,
     "quote": "This document tells you how to register a credential for **WorkOS one-shot environments** — temporary, anonymous WorkOS environments you can provision without an account and (optionally) have the user claim later to make permanent. Follow the steps in order; do not skip ahead. This is the **user claimed** flow: provision anonymously, work immediately, claim when the user is available. There is no agent-verified or email-verified registration today.",
     "ref": 33
    },
    {
     "label": "[34]",
     "url": "https://us.posthog.com/auth.md",
     "claim": "PostHog, *PostHog Agent Authentication Guide (us.posthog.com/auth.md)*, checked 2026-10-30",
     "date": null,
     "quote": "Available on the Enterprise plan with XAA enabled, and currently in beta, so most clients should use one of the options above. With it configured, an agent presents an [ID-JAG](https://xaa.dev) identity assertion (`identity_assertion`) to the token endpoint using the JWT-bearer grant",
     "ref": 34
    },
    {
     "label": "[35]",
     "url": "https://posthog.com/docs/settings/agent-discovery",
     "claim": "PostHog, *Agent discovery (auth.md) - Docs - PostHog*, checked 2026-10-29",
     "date": null,
     "quote": "\"identity_assertion\": { \"assertion_types_supported\": [\"urn:ietf:params:oauth:token-type:id-jag\"] } } } skill points at the auth.md manifest. identity_endpoint",
     "ref": 35
    },
    {
     "label": "[36]",
     "url": "https://here.now/auth.md",
     "claim": "HereNow, *here.now auth.md*, checked 2026-10-30",
     "date": null,
     "quote": "here.now supports agent-assisted API key creation with an email code. It does not currently support agent-verified ID-JAG registration, OAuth client registration, MCP auth, or third-party identity provider assertions.",
     "ref": 36
    },
    {
     "label": "[37]",
     "url": "https://headlessdomains.com/auth.md",
     "claim": "HeadlessDomains, *HeadlessDomains Authentication*, checked 2026-10-30",
     "date": null,
     "quote": "HeadlessDomains supports agent-native authentication for autonomous domain registration, renewal, profile updates, and DNS-linked identity operations.",
     "ref": 37
    },
    {
     "label": "[38]",
     "url": "https://nano-gpt.com/auth.md",
     "claim": "NanoGPT, *auth.md*, checked 2026-10-30",
     "date": null,
     "quote": "NanoGPT supports agent and app access through user-approved API keys. OAuth-aware clients should use authorization-code + PKCE. Agents can also use the browser-approved device login flow for CLI-style handoff.",
     "ref": 38
    },
    {
     "label": "[39]",
     "url": "https://webclaw.io/auth.md",
     "claim": "WebClaw, *webclaw auth*, checked 2026-10-30",
     "date": null,
     "quote": "webclaw supports OAuth 2.0 Device Authorization for agent onboarding. Agents can request a short-lived scoped bearer token, show the user a code, and wait while the user approves the request in the browser.",
     "ref": 39
    },
    {
     "label": "[40]",
     "url": "https://api.particle.pro/auth.md",
     "claim": "Particle Pro, *Particle Pro auth.md — Agent Authentication*, checked 2026-10-30",
     "date": null,
     "quote": "There is **no anonymous agent self-registration**: every credential is tied to a human-owned platform account (the API is paid). The fastest path for a fully headless agent is to ask your operator for an API key from https://platform.particle.pro/tokens. An agent with no operator at all can still call the API by paying per request with x402",
     "ref": 40
    },
    {
     "label": "[41]",
     "url": "https://storewalk.ai/checks/TRX-009",
     "claim": "Storewalk, *TRX-009 auth.md agent registration guide published — Storewalk*, checked 2026-10-29",
     "date": null,
     "quote": "We check that /auth.md exists, is a Markdown document rather than your storefront page, and opens with a heading that names auth.md.",
     "ref": 41
    },
    {
     "label": "[42]",
     "url": "https://raw.githubusercontent.com/ax-platform/ax-platform-mcp/main/README.md",
     "claim": "PAX AI (ax-platform/ax-platform-mcp), *aX Platform MCP Server (README.md)*, checked 2026-10-29",
     "date": null,
     "quote": "Give a Hermes agent, or the next serious shell-capable agent harness, https://paxai.app/auth.md; it can learn the device-code flow, show you the approval code, store refreshable credentials, and join the aX network on a named MCP route.",
     "ref": 42
    }
   ],
   "form": "document-format",
   "governance": "WorkOS (`workos/auth.md`, MIT License); an independent community hub (`auth-md.com`) and generator/validator skill (`fabricioctelles/skills`) are maintained separately by Fabricio Telles",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "created and verified against auth-md.com/specification and auth-md.com"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "auth-md",
   "implementation": "multi-implementation",
   "last_verified": "2026-11-12",
   "name": "auth.md",
   "native_status": "Reference specification at `v0.6.0` (10 June 2026); generally available in WorkOS AuthKit (`Agent Registration`) since 4 August 2026",
   "origin": {
    "org": "WorkOS (announced 21 May 2026 by Garrett Galow and demoed at MCP Night 4 in San Francisco; re-introduced by Michael Grinich at the AI Engineer World's Fair on 2 July 2026)",
    "date": "2026-05-21"
   },
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "draft",
   "probe": {
    "method": "GET",
    "on_absent": "No auth.md file at the site root; the service has not published an agent self-registration convention",
    "parse": "A markdown document describing one or more of the three named flows (identity_assertion, service_auth, anonymous) and referencing /.well-known/oauth-protected-resource and /.well-known/oauth-authorization-server per RFC 9728/8414",
    "path": "{origin}/auth.md"
   },
   "question": "How does an AI agent register a new account for its user on a service, without a human filling out a sign-up form or an OAuth redirect flow existing to authorize it?",
   "scope": "general",
   "spec_url": "https://github.com/workos/auth.md",
   "step": "permit",
   "summary_md": "**auth.md** is a single-vendor reference implementation and procedural Markdown convention originated by WorkOS (`workos/auth.md`, MIT License) for agentic registration, a protocol for agents to authenticate to services on behalf of users. The architecture defines three roles: an agent acting for a user, an agent provider that mints identity assertions (`ID-JAGs`), and a service that accepts those assertions when available and issues credentials, or uses an RFC 8628-style claim ceremony when the agent is not associated with a user identity or the provider does not support `ID-JAGs`. A service publishes a Markdown walkthrough at `/auth.md` (referenced via the `skill` field in `agent_auth`) alongside Protected Resource Metadata at `/.well-known/oauth-protected-resource` and Authorization Server Metadata at `/.well-known/oauth-authorization-server` carrying the `agent_auth` profile extension. Registration and credential issuance are split across two endpoints: `POST /agent/identity` accepts the agent's registration request (`identity_assertion`, `service_auth`, or `anonymous`) and returns a service-signed `identity_assertion` (or initiates a claim ceremony), which the agent exchanges at `POST /oauth2/token` (`urn:ietf:params:oauth:grant-type:jwt-bearer`) for a Bearer `access_token`. WorkOS released the initial `v0.1.0` proposal on `2026-05-21`, followed by `v0.2.0` and `v0.3.0` on `2026-06-03` (separating `/agent/identity` from `/oauth2/token` and switching revocation to RFC 8417 Security Event Tokens over RFC 8935), `v0.4.0` on `2026-06-04` (polling `/oauth2/token` with `urn:workos:agent-auth:grant-type:claim`), `v0.5.0` on `2026-06-05` (adding `interaction_required` and `login_required` gates), and `v0.6.0` on `2026-06-10` (splitting email hints into top-level `service_auth` with `login_hint`).",
   "track": "single-vendor",
   "version": {
    "date": "2026-06-10",
    "label": "v0.6.0"
   },
   "watch": [
    {
     "type": "page",
     "url": "https://auth-md.com/specification",
     "selector": "main",
     "cadence": "weekly"
    }
   ],
   "use_cases": [
    "delegate-user-authority",
    "prove-agent-identity",
    "discover-my-api"
   ],
   "audience": [
    "agent-builder",
    "platform",
    "site-owner"
   ],
   "pairs_with": [
    "identity-assertion-authz-grant",
    "oauth-metadata-for-agents",
    "oauth-cimd",
    "mcp",
    "x402"
   ],
   "prerequisites": [
    "oauth-metadata-for-agents",
    "identity-assertion-authz-grant"
   ],
   "hatnote_md": "*Not to be confused with `ACT-AUTH.md`, the component-and-host authentication specification in `actcore/act-spec`, or with OAuth Client ID Metadata Documents ([OAuth CIMD](/protocols/oauth-cimd/)). For the IETF cross-domain identity-assertion grant used by `auth.md`'s agent-verified flow, see [Identity Assertion Authorization Grant (ID-JAG)](/protocols/identity-assertion-authz-grant/). For the underlying OAuth discovery metadata pair, see [OAuth 2.0 Metadata for Agents (RFC 9728 / RFC 8414)](/protocols/oauth-metadata-for-agents/).*",
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "Not to be confused with `ACT-AUTH.md`, the component-and-host authentication specification in `actcore/act-spec`, or with OAuth Client ID Metadata Documents ([OAuth CIMD](/protocols/oauth-cimd/)). For the IETF cross-domain identity-assertion grant used by `auth.md`'s agent-verified flow, see [Identity Assertion Authorization Grant (ID-JAG)](/protocols/identity-assertion-authz-grant/). For the underlying OAuth discovery metadata pair, see [OAuth 2.0 Metadata for Agents (RFC 9728 / RFC 8414)](/protocols/oauth-metadata-for-agents/). [1]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**auth.md** is a single-vendor reference implementation and procedural Markdown convention originated by WorkOS (`workos/auth.md`, MIT License) for agentic registration, a protocol for agents to authenticate to services on behalf of users. [1][2] The architecture defines three roles: an agent acting for a user, an agent provider that mints identity assertions (`ID-JAGs`), and a service that accepts those assertions when available and issues credentials, or uses an RFC 8628-style claim ceremony when the agent is not associated with a user identity or the provider does not support `ID-JAGs`. [2] A service publishes a Markdown walkthrough at `/auth.md` (referenced via the `skill` field in `agent_auth`) alongside Protected Resource Metadata at `/.well-known/oauth-protected-resource` and Authorization Server Metadata at `/.well-known/oauth-authorization-server` carrying the `agent_auth` profile extension. [2][3] Registration and credential issuance are split across two endpoints: `POST /agent/identity` accepts the agent's registration request (`identity_assertion`, `service_auth`, or `anonymous`) and returns a service-signed `identity_assertion` (or initiates a claim ceremony), which the agent exchanges at `POST /oauth2/token` (`urn:ietf:params:oauth:grant-type:jwt-bearer`) for a Bearer `access_token`. [2][4] WorkOS released the initial `v0.1.0` proposal on `2026-05-21`, followed by `v0.2.0` and `v0.3.0` on `2026-06-03` (separating `/agent/identity` from `/oauth2/token` and switching revocation to RFC 8417 Security Event Tokens over RFC 8935), `v0.4.0` on `2026-06-04` (polling `/oauth2/token` with `urn:workos:agent-auth:grant-type:claim`), `v0.5.0` on `2026-06-05` (adding `interaction_required` and `login_required` gates), and `v0.6.0` on `2026-06-10` (splitting email hints into top-level `service_auth` with `login_hint`). [5]",
   "v05_identity_sentence_md": "**auth.md** is a single-vendor reference implementation and procedural Markdown convention originated by WorkOS (`workos/auth.md`, MIT License) for agentic registration, a protocol for agents to authenticate to services on behalf of users. [1][2] The architecture defines three roles: an agent acting for a user, an agent provider that mints identity assertions (`ID-JAGs`), and a service that accepts those assertions when available and issues credentials, or uses an RFC 8628-style claim ceremony when the agent is not associated with a user identity or the provider does not support `ID-JAGs`. [2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Permit](/category/permit/) (`permit`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "WorkOS (`2026-05-21` by Garrett Galow; demoed at MCP Night 4; re-introduced by Michael Grinich at AIE World's Fair in July 2026) [6][7][8]"
    },
    {
     "label": "Governed by",
     "value_md": "WorkOS (`workos/auth.md`); not submitted to IETF/W3C. Community hub (`auth-md.com`) and skill (`fabricioctelles/skills`) by Fabricio Telles [1][7][9]"
    },
    {
     "label": "Track",
     "value_md": "Vendor-led open specification (`workos/auth.md`, with community portal `auth-md.com`; no SDO submission) [1][10]"
    },
    {
     "label": "Status",
     "value_md": "Reference specification at `v0.6.0` (10 June 2026); generally available in WorkOS AuthKit (`Agent Registration`) since 4 August 2026 [5][11][12]"
    },
    {
     "label": "Version",
     "value_md": "`v0.6.0` (`2026-06-10`, after `v0.1.0` on `2026-05-21` and `v0.2.0`–`v0.5.0` on `2026-06-03`–`05`); GA in WorkOS AuthKit (`2026-08-04`) [5][11][12]"
    },
    {
     "label": "Wire format",
     "value_md": "Markdown (`text/markdown` / `text/plain`) at `/auth.md`, RFC 9728/8414 JSON (`agent_auth`), JSON `POST /agent/identity`, form-encoded `POST /oauth2/token` (`jwt-bearer` and `claim`), and RFC 8417/8935 SETs (`application/secevent+jwt`) [2][4][5]"
    },
    {
     "label": "Specification",
     "value_md": "[`AUTH.md`](https://raw.githubusercontent.com/workos/auth.md/main/AUTH.md) · [`README.md`](https://raw.githubusercontent.com/workos/auth.md/main/README.md) · [`CHANGELOG.md`](https://raw.githubusercontent.com/workos/auth.md/main/CHANGELOG.md) · [Official Docs](https://workos.com/auth-md/docs) · [Community Spec](https://auth-md.com/specification/) [2][4][5]"
    },
    {
     "label": "Found at",
     "value_md": "`HTTP 401` `WWW-Authenticate: Bearer resource_metadata=\"https://<api>/.well-known/oauth-protected-resource\"` (`RFC 9728`) → `/.well-known/oauth-authorization-server` (`RFC 8414` `agent_auth.skill`), plus `WWW-Authenticate: AgentAuth error=\"interaction_required\"` or `\"login_required\"` [2][4][5]"
    },
    {
     "label": "Licence",
     "value_md": "MIT (`workos/auth.md`); Apache-2.0 (`fabricioctelles/skills` `auth-md` skill) [1][10][13]"
    }
   ],
   "v05_problem_md": "When an agent registers with an external service on a user's behalf, the agent may lack a user identity or an `ID-JAG`-capable provider, while services that blindly trust provider email claims or old upstream sessions face account-takeover risks. [2] Without a user-confirmation gate on first-time account linking, any trusted provider could mint an `ID-JAG` with `email_verified: true` for a victim's email and silently take over their account, and without an `auth_time` freshness check an agent could use a stale upstream session. [5] auth.md pairs two-hop OAuth discovery (`/.well-known/oauth-protected-resource` and `/.well-known/oauth-authorization-server` with `agent_auth`) with three registration modes at `POST /agent/identity` (`identity_assertion` with `urn:ietf:params:oauth:token-type:id-jag`, `service_auth` with `login_hint`, and `anonymous`) and an RFC 8628-shaped claim ceremony (`user_code`, `verification_uri`, `expires_in`, `interval`) polled via `urn:workos:agent-auth:grant-type:claim`. [4] The structured Protected Resource Metadata at `/.well-known/oauth-protected-resource` remains the authoritative source for endpoint URLs and supported flows while `auth.md` serves as the prose companion, and the two-step `identity_assertion` exchange replaces OAuth `refresh_token` issuance. [3][4]",
   "v05_mechanism_delta_md": "auth.md pairs two-hop OAuth discovery (`/.well-known/oauth-protected-resource` and `/.well-known/oauth-authorization-server` with `agent_auth`) with three registration modes at `POST /agent/identity` (`identity_assertion` with `urn:ietf:params:oauth:token-type:id-jag`, `service_auth` with `login_hint`, and `anonymous`) and an RFC 8628-shaped claim ceremony (`user_code`, `verification_uri`, `expires_in`, `interval`) polled via `urn:workos:agent-auth:grant-type:claim`. [4]",
   "v05_scope_boundary_md": "The structured Protected Resource Metadata at `/.well-known/oauth-protected-resource` remains the authoritative source for endpoint URLs and supported flows while `auth.md` serves as the prose companion, and the two-step `identity_assertion` exchange replaces OAuth `refresh_token` issuance. [3][4]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "OAuth 2.0 Authorization Framework (RFC 6749)",
      "spec_or_rfc": "RFC 6749",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "From auth.md v0.6, POST /agent/identity against the service documented at /auth.md returns a service-signed identity_assertion that the agent exchanges at POST /oauth2/token (grant_type urn:ietf:params:oauth:grant-type:jwt-bearer) for an access_token, with an RFC 8628-style claim ceremony when no ID-JAG is available. [4][14]"
     },
     {
      "name": "OAuth 2.0 Dynamic Client Registration & Metadata (RFC 7591 / RFC 8414)",
      "spec_or_rfc": "RFC 7591 / RFC 8414",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "RFC 7591 registers a client with a POST that returns a client_id, while auth.md v0.6 is fetched at /auth.md, accepts an inbound ID-JAG (assertion_type urn:ietf:params:oauth:token-type:id-jag) at POST /agent/identity to mint a service-signed identity_assertion, and exchanges that assertion at POST /oauth2/token using grant_type urn:ietf:params:oauth:grant-type:jwt-bearer. [4][15]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "identity-assertion-authz-grant",
      "target_name": "Identity Assertion JWT Authorization Grant (ID-JAG)",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "auth.md v0.6 accepts an inbound ID-JAG JWT (draft-ietf-oauth-identity-assertion-authz-grant-06; typ oauth-id-jag+jwt, assertion_type urn:ietf:params:oauth:token-type:id-jag) at POST /agent/identity and returns a service-signed identity_assertion that the agent exchanges at POST /oauth2/token with grant_type urn:ietf:params:oauth:grant-type:jwt-bearer. [4][16][17]"
     },
     {
      "target_id": "oauth-metadata-for-agents",
      "target_name": "OAuth Protected Resource and Authorization Server Metadata (as used for agent authorization)",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "The agent finds the token endpoint through RFC 9728 protected-resource metadata and RFC 8414 authorization-server metadata, which auth.md does not redefine. [4][18]"
     },
     {
      "target_id": "oauth-cimd",
      "target_name": "OAuth Client ID Metadata Document",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "CIMD makes the client_id an HTTPS URL of client metadata, while auth.md v0.6 is a per-service /auth.md document whose POST /agent/identity flow yields a service-signed identity_assertion for the RFC 7523 jwt-bearer token exchange. [4][19]"
     },
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "MCP servers use /auth.md for headless registration, and the agent presents the Bearer access_token obtained by exchanging the service-signed identity_assertion at POST /oauth2/token rather than a credential returned from the pre-v0.2 /agent/auth endpoint. [4][20]"
     },
     {
      "target_id": "x402",
      "target_name": "x402",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "x402 is the HTTP 402 payment challenge on a route, and auth.md is the registration document that produces the OAuth access token for the same host. [4][21]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (15 probed or cited examples; non-exhaustive).",
    "side_a": {
     "visible": true,
     "heading": "Issuers, signers & metadata publishers",
     "col4_header": "Boundary & Format",
     "note_md": null,
     "rows": [
      {
       "actor": "Tuist",
       "role": "Auth policy publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "https://tuist.dev/auth.md implements auth.md v0.6.0 for the MCP server at https://tuist.dev/mcp. Registration returns a signed identity assertion, not an access token, and the agent exchanges that assertion at the discovered token endpoint. Authorization-server metadata advertises identity_endpoint https://tuist.dev/agent/identity and identity_types_supported anonymous, identity_assertion, and service_auth, plus /agent/identity/claim and /agent/event/notify.",
       "source_md": "[tuist.dev/auth.md](https://tuist.dev/auth.md) [22] · [Tuist authorization server](https://tuist.dev/.well-known/oauth-authorization-server) [23] · [Tuist changelog 2026-05-27](https://tuist.dev/changelog/2026.05.27-auth-md) [24]"
      },
      {
       "actor": "Firecrawl",
       "role": "Auth policy publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "https://www.firecrawl.dev/auth.md allows one registration method: identity_assertion with assertion_type urn:ietf:params:oauth:token-type:id-jag and requested_credential_type api_key. The credential is a Firecrawl API key used as a bearer token. Authorization-server metadata sets agent_auth.skill to that file, register_uri https://www.firecrawl.dev/agent/auth, and revocation_uri https://www.firecrawl.dev/agent/auth/revoke.",
       "source_md": "[firecrawl.dev/auth.md](https://www.firecrawl.dev/auth.md) [25] · [Firecrawl authorization server](https://www.firecrawl.dev/.well-known/oauth-authorization-server) [26]"
      },
      {
       "actor": "Alpic",
       "role": "Auth policy publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "https://alpic.ai/auth.md tells an agent how to obtain an Alpic API key and deploy MCP servers. https://api.alpic.ai/.well-known/oauth-authorization-server advertises agent_auth.skill https://alpic.ai/auth.md, register_uri https://api.alpic.ai/agent/auth, assertion types urn:ietf:params:oauth:token-type:id-jag and urn:ietf:params:oauth:token-type:jwt, and credential type api_key.",
       "source_md": "[alpic.ai/auth.md](https://alpic.ai/auth.md) [27] · [Alpic authorization server](https://api.alpic.ai/.well-known/oauth-authorization-server) [28]"
      },
      {
       "actor": "agents-txt.com",
       "role": "Auth policy publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "https://agents-txt.com/auth.md is the agents.txt reference site's registration walkthrough, advertised from /agents.txt under Authorization: auth-md. Authorization-server metadata agent_auth lists skill https://agents-txt.com/auth.md, register_uri https://agents-txt.com/agent/auth, claim_uri https://agents-txt.com/agent/auth/claim, revocation_uri https://agents-txt.com/agent/auth/revoke, and identity types anonymous and identity_assertion.",
       "source_md": "[agents-txt.com/auth.md](https://agents-txt.com/auth.md) [29] · [agents-txt.com authorization server](https://agents-txt.com/.well-known/oauth-authorization-server) [30]"
      },
      {
       "actor": "mailbox.bot",
       "role": "Auth policy publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "https://mailbox.bot/auth.md describes registration for the postal-mail API. Protected resources are under https://mailbox.bot/api. Authorization-server metadata sets current_flow user_claimed_email_required, identity_types_supported identity_assertion, and anonymous.enabled false, because an order spends prepaid credits. The agent can request a human-approved claim by email.",
       "source_md": "[mailbox.bot/auth.md](https://mailbox.bot/auth.md) [31] · [mailbox.bot authorization server](https://mailbox.bot/.well-known/oauth-authorization-server) [32]"
      },
      {
       "actor": "WorkOS",
       "role": "Auth policy publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "https://workos.com/auth.md is the user-claimed flow for one-shot environments: the agent provisions an anonymous temporary environment, works immediately, and the user claims it later. Claim handoff is https://dashboard.workos.com or npx workos@latest env claim. The file says there is no agent-verified or email-verified registration on this surface.",
       "source_md": "[workos.com/auth.md](https://workos.com/auth.md) [33]"
      },
      {
       "actor": "PostHog",
       "role": "Auth policy publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "https://us.posthog.com/auth.md documents npx @posthog/wizard@latest --signup, the Provisioning API, OAuth 2.0, and personal API keys. Enterprise ID-JAG registration is marked beta and XAA-only: the agent presents an identity_assertion to the token endpoint with the JWT-bearer grant. PostHog's docs say agents should use the published metadata and not a PostHog-specific SDK.",
       "source_md": "[us.posthog.com/auth.md](https://us.posthog.com/auth.md) [34] · [PostHog agent discovery](https://posthog.com/docs/settings/agent-discovery) [35]"
      },
      {
       "actor": "here.now",
       "role": "Auth policy publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "https://here.now/auth.md documents email-code API key creation: POST /api/auth/agent/request-code with header X-HereNow-Client. The same file says here.now does not support agent-verified ID-JAG registration, OAuth client registration, MCP auth, or a third-party identity-provider assertion.",
       "source_md": "[here.now/auth.md](https://here.now/auth.md) [36]"
      },
      {
       "actor": "HeadlessDomains",
       "role": "Auth policy publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · as of 2026-10-29",
       "col4_md": "https://headlessdomains.com/auth.md says HeadlessDomains supports agent-native authentication for autonomous domain registration, renewal, profile updates, and DNS-linked identity operations. Fetched status 200 on 2026-10-29.",
       "source_md": "[headlessdomains.com/auth.md](https://headlessdomains.com/auth.md) [37]"
      },
      {
       "actor": "NanoGPT",
       "role": "Auth policy publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · as of 2026-10-29",
       "col4_md": "https://nano-gpt.com/auth.md says access uses user-approved API keys. OAuth-aware clients use authorization-code with PKCE. Agents can use the browser-approved device login flow for a CLI handoff. Fetched HTTP 200 on 2026-10-29.",
       "source_md": "[nano-gpt.com/auth.md](https://nano-gpt.com/auth.md) [38]"
      },
      {
       "actor": "WebClaw",
       "role": "Auth policy publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · as of 2026-10-29",
       "col4_md": "https://webclaw.io/auth.md says onboarding is OAuth 2.0 Device Authorization. The agent requests a short-lived scoped bearer token, shows the user a code, and waits for browser approval. Fetched status 200 on 2026-10-29.",
       "source_md": "[webclaw.io/auth.md](https://webclaw.io/auth.md) [39]"
      },
      {
       "actor": "Particle Pro",
       "role": "Auth policy publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · as of 2026-10-29",
       "col4_md": "https://api.particle.pro/auth.md says there is no anonymous agent self-registration. Every credential is tied to a human-owned paid account. A headless agent uses an API key from https://platform.particle.pro/tokens. An agent with no operator can pay per request with x402. Fetched status 200 on 2026-10-29.",
       "source_md": "[api.particle.pro/auth.md](https://api.particle.pro/auth.md) [40]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Verifiers, WAFs & relying servers",
     "col4_header": "Boundary & Format",
     "note_md": null,
     "rows": [
      {
       "actor": "WorkOS AuthKit",
       "role": "Authorization server / IdP",
       "status": "Supported",
       "status_display": "Supported · as of 2026-08-04",
       "col4_md": "Agent Registration has been generally available since 2026-08-04. The agent discovers the surface from /.well-known/oauth-authorization-server, registers with an identity type, optionally binds a user in a claim ceremony, and exchanges the resulting identity assertion for an access token or API key. v0.6.0 mints that identity_assertion at registration and exchanges it at the OAuth token endpoint. A first-time ID-JAG link to an existing account requires a user-confirmation ceremony and a fresh auth_time.",
       "source_md": "[AuthKit Agent Registration](https://workos.com/docs/authkit/agent-registration) [12] · [auth.md changelog](https://raw.githubusercontent.com/workos/auth.md/main/CHANGELOG.md) [5]"
      },
      {
       "actor": "Storewalk TRX-009",
       "role": "Verifier / Audit parser",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Passive check TRX-009: /auth.md must exist, the body must be a Markdown document rather than the storefront HTML page, and the file must open with a heading that names auth.md.",
       "source_md": "[TRX-009 auth.md agent registration guide published](https://storewalk.ai/checks/TRX-009) [41]"
      },
      {
       "actor": "PAX AI (ax-platform-mcp)",
       "role": "Client SDK",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "A Hermes agent, or another shell-capable harness, is pointed at https://paxai.app/auth.md. It learns the device-code flow from that file, shows the approval code, stores refreshable credentials, and joins the aX network on a named MCP route.",
       "source_md": "[aX Platform MCP Server README](https://raw.githubusercontent.com/ax-platform/ax-platform-mcp/main/README.md) [42]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Permit protocols](/category/permit/)** — Category index for `permit` standards."
    }
   ],
   "v05_compiled_md": "---\nid: auth-md\ntitle: \"auth.md\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: permit\nform: document-format\nwire_archetype: identity_auth_crypto\nspec_url: https://raw.githubusercontent.com/workos/auth.md/main/AUTH.md\nlast_checked: 2026-11-12\n---\n\n# auth.md\n\n**Category:** [Permit](/category/permit/) (`permit`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-11-12\n\n> *Not to be confused with `ACT-AUTH.md`, the component-and-host authentication specification in `actcore/act-spec`, or with OAuth Client ID Metadata Documents ([OAuth CIMD](/protocols/oauth-cimd/)). For the IETF cross-domain identity-assertion grant used by `auth.md`'s agent-verified flow, see [Identity Assertion Authorization Grant (ID-JAG)](/protocols/identity-assertion-authz-grant/). For the underlying OAuth discovery metadata pair, see [OAuth 2.0 Metadata for Agents (RFC 9728 / RFC 8414)](/protocols/oauth-metadata-for-agents/). [1]*\n\n**auth.md** is a single-vendor reference implementation and procedural Markdown convention originated by WorkOS (`workos/auth.md`, MIT License) for agentic registration, a protocol for agents to authenticate to services on behalf of users. [1][2] The architecture defines three roles: an agent acting for a user, an agent provider that mints identity assertions (`ID-JAGs`), and a service that accepts those assertions when available and issues credentials, or uses an RFC 8628-style claim ceremony when the agent is not associated with a user identity or the provider does not support `ID-JAGs`. [2] A service publishes a Markdown walkthrough at `/auth.md` (referenced via the `skill` field in `agent_auth`) alongside Protected Resource Metadata at `/.well-known/oauth-protected-resource` and Authorization Server Metadata at `/.well-known/oauth-authorization-server` carrying the `agent_auth` profile extension. [2][3] Registration and credential issuance are split across two endpoints: `POST /agent/identity` accepts the agent's registration request (`identity_assertion`, `service_auth`, or `anonymous`) and returns a service-signed `identity_assertion` (or initiates a claim ceremony), which the agent exchanges at `POST /oauth2/token` (`urn:ietf:params:oauth:grant-type:jwt-bearer`) for a Bearer `access_token`. [2][4] WorkOS released the initial `v0.1.0` proposal on `2026-05-21`, followed by `v0.2.0` and `v0.3.0` on `2026-06-03` (separating `/agent/identity` from `/oauth2/token` and switching revocation to RFC 8417 Security Event Tokens over RFC 8935), `v0.4.0` on `2026-06-04` (polling `/oauth2/token` with `urn:workos:agent-auth:grant-type:claim`), `v0.5.0` on `2026-06-05` (adding `interaction_required` and `login_required` gates), and `v0.6.0` on `2026-06-10` (splitting email hints into top-level `service_auth` with `login_hint`). [5]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Permit](/category/permit/) (`permit`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | WorkOS (`2026-05-21` by Garrett Galow; demoed at MCP Night 4; re-introduced by Michael Grinich at AIE World's Fair in July 2026) [6][7][8] |\n| **Governed by** | WorkOS (`workos/auth.md`); not submitted to IETF/W3C. Community hub (`auth-md.com`) and skill (`fabricioctelles/skills`) by Fabricio Telles [1][7][9] |\n| **Track** | Vendor-led open specification (`workos/auth.md`, with community portal `auth-md.com`; no SDO submission) [1][10] |\n| **Status** | Reference specification at `v0.6.0` (10 June 2026); generally available in WorkOS AuthKit (`Agent Registration`) since 4 August 2026 [5][11][12] |\n| **Version** | `v0.6.0` (`2026-06-10`, after `v0.1.0` on `2026-05-21` and `v0.2.0`–`v0.5.0` on `2026-06-03`–`05`); GA in WorkOS AuthKit (`2026-08-04`) [5][11][12] |\n| **Wire format** | Markdown (`text/markdown` / `text/plain`) at `/auth.md`, RFC 9728/8414 JSON (`agent_auth`), JSON `POST /agent/identity`, form-encoded `POST /oauth2/token` (`jwt-bearer` and `claim`), and RFC 8417/8935 SETs (`application/secevent+jwt`) [2][4][5] |\n| **Specification** | [`AUTH.md`](https://raw.githubusercontent.com/workos/auth.md/main/AUTH.md) · [`README.md`](https://raw.githubusercontent.com/workos/auth.md/main/README.md) · [`CHANGELOG.md`](https://raw.githubusercontent.com/workos/auth.md/main/CHANGELOG.md) · [Official Docs](https://workos.com/auth-md/docs) · [Community Spec](https://auth-md.com/specification/) [2][4][5] |\n| **Found at** | `HTTP 401` `WWW-Authenticate: Bearer resource_metadata=\"https://<api>/.well-known/oauth-protected-resource\"` (`RFC 9728`) → `/.well-known/oauth-authorization-server` (`RFC 8414` `agent_auth.skill`), plus `WWW-Authenticate: AgentAuth error=\"interaction_required\"` or `\"login_required\"` [2][4][5] |\n| **Licence** | MIT (`workos/auth.md`); Apache-2.0 (`fabricioctelles/skills` `auth-md` skill) [1][10][13] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [Adoption and ecosystem](#adoption-and-ecosystem)\n4. [See also](#see-also)\n5. [References](#references)\n\n---\n\n## Problem and scope\n\nWhen an agent registers with an external service on a user's behalf, the agent may lack a user identity or an `ID-JAG`-capable provider, while services that blindly trust provider email claims or old upstream sessions face account-takeover risks. [2] Without a user-confirmation gate on first-time account linking, any trusted provider could mint an `ID-JAG` with `email_verified: true` for a victim's email and silently take over their account, and without an `auth_time` freshness check an agent could use a stale upstream session. [5] auth.md pairs two-hop OAuth discovery (`/.well-known/oauth-protected-resource` and `/.well-known/oauth-authorization-server` with `agent_auth`) with three registration modes at `POST /agent/identity` (`identity_assertion` with `urn:ietf:params:oauth:token-type:id-jag`, `service_auth` with `login_hint`, and `anonymous`) and an RFC 8628-shaped claim ceremony (`user_code`, `verification_uri`, `expires_in`, `interval`) polled via `urn:workos:agent-auth:grant-type:claim`. [4] The structured Protected Resource Metadata at `/.well-known/oauth-protected-resource` remains the authoritative source for endpoint URLs and supported flows while `auth.md` serves as the prose companion, and the two-step `identity_assertion` exchange replaces OAuth `refresh_token` issuance. [3][4]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **OAuth 2.0 Authorization Framework (RFC 6749)** | `RFC 6749` | Profiles classic standard | From auth.md v0.6, POST /agent/identity against the service documented at /auth.md returns a service-signed identity_assertion that the agent exchanges at POST /oauth2/token (grant_type urn:ietf:params:oauth:grant-type:jwt-bearer) for an access_token, with an RFC 8628-style claim ceremony when no ID-JAG is available. [4][14] |\n| **OAuth 2.0 Dynamic Client Registration & Metadata (RFC 7591 / RFC 8414)** | `RFC 7591 / RFC 8414` | Analogous to classic standard | RFC 7591 registers a client with a POST that returns a client_id, while auth.md v0.6 is fetched at /auth.md, accepts an inbound ID-JAG (assertion_type urn:ietf:params:oauth:token-type:id-jag) at POST /agent/identity to mint a service-signed identity_assertion, and exchanges that assertion at POST /oauth2/token using grant_type urn:ietf:params:oauth:grant-type:jwt-bearer. [4][15] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Identity Assertion JWT Authorization Grant (ID-JAG)](/protocols/identity-assertion-authz-grant/)** | Builds on | auth.md v0.6 accepts an inbound ID-JAG JWT (draft-ietf-oauth-identity-assertion-authz-grant-06; typ oauth-id-jag+jwt, assertion_type urn:ietf:params:oauth:token-type:id-jag) at POST /agent/identity and returns a service-signed identity_assertion that the agent exchanges at POST /oauth2/token with grant_type urn:ietf:params:oauth:grant-type:jwt-bearer. [4][16][17] |\n| **[OAuth Protected Resource and Authorization Server Metadata (as used for agent authorization)](/protocols/oauth-metadata-for-agents/)** | Builds on | The agent finds the token endpoint through RFC 9728 protected-resource metadata and RFC 8414 authorization-server metadata, which auth.md does not redefine. [4][18] |\n| **[OAuth Client ID Metadata Document](/protocols/oauth-cimd/)** | Peer alternative | CIMD makes the client_id an HTTPS URL of client metadata, while auth.md v0.6 is a per-service /auth.md document whose POST /agent/identity flow yields a service-signed identity_assertion for the RFC 7523 jwt-bearer token exchange. [4][19] |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | MCP servers use /auth.md for headless registration, and the agent presents the Bearer access_token obtained by exchanging the service-signed identity_assertion at POST /oauth2/token rather than a credential returned from the pre-v0.2 /agent/auth endpoint. [4][20] |\n| **[x402](/protocols/x402/)** | Complements | x402 is the HTTP 402 payment challenge on a route, and auth.md is the registration document that produces the OAuth access token for the same host. [4][21] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (15 probed or cited examples; non-exhaustive).*\n\n### Issuers, signers & metadata publishers\n\n| Actor | Role | Status | Boundary & Format | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Tuist** | Auth policy publisher | Live (HTTP 200) · checked 2026-10-30 | https://tuist.dev/auth.md implements auth.md v0.6.0 for the MCP server at https://tuist.dev/mcp. Registration returns a signed identity assertion, not an access token, and the agent exchanges that assertion at the discovered token endpoint. Authorization-server metadata advertises identity_endpoint https://tuist.dev/agent/identity and identity_types_supported anonymous, identity_assertion, and service_auth, plus /agent/identity/claim and /agent/event/notify. | [tuist.dev/auth.md](https://tuist.dev/auth.md) [22] · [Tuist authorization server](https://tuist.dev/.well-known/oauth-authorization-server) [23] · [Tuist changelog 2026-05-27](https://tuist.dev/changelog/2026.05.27-auth-md) [24] |\n| **Firecrawl** | Auth policy publisher | Live (HTTP 200) · checked 2026-10-30 | https://www.firecrawl.dev/auth.md allows one registration method: identity_assertion with assertion_type urn:ietf:params:oauth:token-type:id-jag and requested_credential_type api_key. The credential is a Firecrawl API key used as a bearer token. Authorization-server metadata sets agent_auth.skill to that file, register_uri https://www.firecrawl.dev/agent/auth, and revocation_uri https://www.firecrawl.dev/agent/auth/revoke. | [firecrawl.dev/auth.md](https://www.firecrawl.dev/auth.md) [25] · [Firecrawl authorization server](https://www.firecrawl.dev/.well-known/oauth-authorization-server) [26] |\n| **Alpic** | Auth policy publisher | Live (HTTP 200) · checked 2026-10-30 | https://alpic.ai/auth.md tells an agent how to obtain an Alpic API key and deploy MCP servers. https://api.alpic.ai/.well-known/oauth-authorization-server advertises agent_auth.skill https://alpic.ai/auth.md, register_uri https://api.alpic.ai/agent/auth, assertion types urn:ietf:params:oauth:token-type:id-jag and urn:ietf:params:oauth:token-type:jwt, and credential type api_key. | [alpic.ai/auth.md](https://alpic.ai/auth.md) [27] · [Alpic authorization server](https://api.alpic.ai/.well-known/oauth-authorization-server) [28] |\n| **agents-txt.com** | Auth policy publisher | Live (HTTP 200) · checked 2026-10-30 | https://agents-txt.com/auth.md is the agents.txt reference site's registration walkthrough, advertised from /agents.txt under Authorization: auth-md. Authorization-server metadata agent_auth lists skill https://agents-txt.com/auth.md, register_uri https://agents-txt.com/agent/auth, claim_uri https://agents-txt.com/agent/auth/claim, revocation_uri https://agents-txt.com/agent/auth/revoke, and identity types anonymous and identity_assertion. | [agents-txt.com/auth.md](https://agents-txt.com/auth.md) [29] · [agents-txt.com authorization server](https://agents-txt.com/.well-known/oauth-authorization-server) [30] |\n| **mailbox.bot** | Auth policy publisher | Live (HTTP 200) · checked 2026-10-30 | https://mailbox.bot/auth.md describes registration for the postal-mail API. Protected resources are under https://mailbox.bot/api. Authorization-server metadata sets current_flow user_claimed_email_required, identity_types_supported identity_assertion, and anonymous.enabled false, because an order spends prepaid credits. The agent can request a human-approved claim by email. | [mailbox.bot/auth.md](https://mailbox.bot/auth.md) [31] · [mailbox.bot authorization server](https://mailbox.bot/.well-known/oauth-authorization-server) [32] |\n| **WorkOS** | Auth policy publisher | Live (HTTP 200) · checked 2026-10-30 | https://workos.com/auth.md is the user-claimed flow for one-shot environments: the agent provisions an anonymous temporary environment, works immediately, and the user claims it later. Claim handoff is https://dashboard.workos.com or npx workos@latest env claim. The file says there is no agent-verified or email-verified registration on this surface. | [workos.com/auth.md](https://workos.com/auth.md) [33] |\n| **PostHog** | Auth policy publisher | Live (HTTP 200) · checked 2026-10-30 | https://us.posthog.com/auth.md documents npx @posthog/wizard@latest --signup, the Provisioning API, OAuth 2.0, and personal API keys. Enterprise ID-JAG registration is marked beta and XAA-only: the agent presents an identity_assertion to the token endpoint with the JWT-bearer grant. PostHog's docs say agents should use the published metadata and not a PostHog-specific SDK. | [us.posthog.com/auth.md](https://us.posthog.com/auth.md) [34] · [PostHog agent discovery](https://posthog.com/docs/settings/agent-discovery) [35] |\n| **here.now** | Auth policy publisher | Live (HTTP 200) · checked 2026-10-30 | https://here.now/auth.md documents email-code API key creation: POST /api/auth/agent/request-code with header X-HereNow-Client. The same file says here.now does not support agent-verified ID-JAG registration, OAuth client registration, MCP auth, or a third-party identity-provider assertion. | [here.now/auth.md](https://here.now/auth.md) [36] |\n| **HeadlessDomains** | Auth policy publisher | Live (HTTP 200) · as of 2026-10-29 | https://headlessdomains.com/auth.md says HeadlessDomains supports agent-native authentication for autonomous domain registration, renewal, profile updates, and DNS-linked identity operations. Fetched status 200 on 2026-10-29. | [headlessdomains.com/auth.md](https://headlessdomains.com/auth.md) [37] |\n| **NanoGPT** | Auth policy publisher | Live (HTTP 200) · as of 2026-10-29 | https://nano-gpt.com/auth.md says access uses user-approved API keys. OAuth-aware clients use authorization-code with PKCE. Agents can use the browser-approved device login flow for a CLI handoff. Fetched HTTP 200 on 2026-10-29. | [nano-gpt.com/auth.md](https://nano-gpt.com/auth.md) [38] |\n| **WebClaw** | Auth policy publisher | Live (HTTP 200) · as of 2026-10-29 | https://webclaw.io/auth.md says onboarding is OAuth 2.0 Device Authorization. The agent requests a short-lived scoped bearer token, shows the user a code, and waits for browser approval. Fetched status 200 on 2026-10-29. | [webclaw.io/auth.md](https://webclaw.io/auth.md) [39] |\n| **Particle Pro** | Auth policy publisher | Live (HTTP 200) · as of 2026-10-29 | https://api.particle.pro/auth.md says there is no anonymous agent self-registration. Every credential is tied to a human-owned paid account. A headless agent uses an API key from https://platform.particle.pro/tokens. An agent with no operator can pay per request with x402. Fetched status 200 on 2026-10-29. | [api.particle.pro/auth.md](https://api.particle.pro/auth.md) [40] |\n\n### Verifiers, WAFs & relying servers\n\n| Actor | Role | Status | Boundary & Format | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **WorkOS AuthKit** | Authorization server / IdP | Supported · as of 2026-08-04 | Agent Registration has been generally available since 2026-08-04. The agent discovers the surface from /.well-known/oauth-authorization-server, registers with an identity type, optionally binds a user in a claim ceremony, and exchanges the resulting identity assertion for an access token or API key. v0.6.0 mints that identity_assertion at registration and exchanges it at the OAuth token endpoint. A first-time ID-JAG link to an existing account requires a user-confirmation ceremony and a fresh auth_time. | [AuthKit Agent Registration](https://workos.com/docs/authkit/agent-registration) [12] · [auth.md changelog](https://raw.githubusercontent.com/workos/auth.md/main/CHANGELOG.md) [5] |\n| **Storewalk TRX-009** | Verifier / Audit parser | Supported · checked 2026-10-30 | Passive check TRX-009: /auth.md must exist, the body must be a Markdown document rather than the storefront HTML page, and the file must open with a heading that names auth.md. | [TRX-009 auth.md agent registration guide published](https://storewalk.ai/checks/TRX-009) [41] |\n| **PAX AI (ax-platform-mcp)** | Client SDK | Supported · checked 2026-10-30 | A Hermes agent, or another shell-capable harness, is pointed at https://paxai.app/auth.md. It learns the device-code flow from that file, shows the approval code, stores refreshable credentials, and joins the aX network on a named MCP route. | [aX Platform MCP Server README](https://raw.githubusercontent.com/ax-platform/ax-platform-mcp/main/README.md) [42] |\n\n---\n\n## See also\n\n- **Category:** [Permit protocols](/category/permit/)\n\n---\n\n## References\n\n1. WorkOS, *auth.md* (repository created 2026-05-20; pushed 2026-09-24) — <https://github.com/workos/auth.md>\n2. WorkOS, *auth.md* (README on main) — <https://raw.githubusercontent.com/workos/auth.md/main/README.md>\n3. WorkOS, *The auth.md file — auth.md* (checked 2026-10-29) — <https://workos.com/auth-md/docs/auth-md>\n4. WorkOS, *AUTH.md* (checked 2026-10-29) — <https://raw.githubusercontent.com/workos/auth.md/main/AUTH.md>\n5. WorkOS, *CHANGELOG.md* (checked 2026-10-29) — <https://raw.githubusercontent.com/workos/auth.md/main/CHANGELOG.md>\n6. Garrett Galow (WorkOS), *Agent Registration with Auth.md — WorkOS* (checked 2026-10-29) — <https://workos.com/blog/agent-registration-with-auth-md>\n7. Zack Proser (WorkOS), *MCP Night 4 recap: agent auth, auth.md, and the rise of agentic registration — WorkOS* (checked 2026-10-29) — <https://workos.com/blog/mcp-night-4-recap-auth-md-agentic-registration>\n8. Zack Proser (WorkOS), *Lifestyles of the AI-Native: WorkOS at the AI Engineer World's Fair 2026 — WorkOS* (checked 2026-10-29) — <https://workos.com/blog/workos-aie-worlds-fair-2026-recap>\n9. WorkOS, *auth.md — Open Protocol for Agent Registration* (checked 2026-10-29) — <https://workos.com/auth-md>\n10. Fabricio Telles, *AI Agent Registration Protocol for Web — auth-md* (checked 2026-10-29) — <https://auth-md.com/>\n11. WorkOS, *package.json* (checked 2026-10-29) — <https://raw.githubusercontent.com/workos/auth.md/main/package.json>\n12. WorkOS, *Agent Registration – AuthKit – WorkOS Docs* (checked 2026-10-29) — <https://workos.com/docs/authkit/agent-registration>\n13. Fabricio Telles (`fabricioctelles/skills`), *skills/auth-md/SKILL.md* (checked 2026-10-29) — <https://raw.githubusercontent.com/fabricioctelles/skills/main/skills/auth-md/SKILL.md>\n14. D. Hardt, Ed., *RFC 6749: The OAuth 2.0 Authorization Framework* (October 2012) — <https://www.rfc-editor.org/rfc/rfc6749.html>\n15. J. Richer, Ed., M. Jones, J. Bradley, M. Machulak, and P. Hunt, *RFC 7591: OAuth 2.0 Dynamic Client Registration Protocol* (July 2015) — <https://www.rfc-editor.org/rfc/rfc7591.html>\n16. Aaron Parecki, Karl McGuinness, and Brian Campbell (IETF Web Authorization Protocol Working Group), *draft-ietf-oauth-identity-assertion-authz-grant — Identity Assertion JWT Authorization Grant (IETF Datatracker)* (checked 2026-11-08) — <https://datatracker.ietf.org/doc/draft-ietf-oauth-identity-assertion-authz-grant/>\n17. A. Parecki (Okta), K. McGuinness (Independent), and B. Campbell (Ping Identity), *Identity Assertion JWT Authorization Grant (draft-ietf-oauth-identity-assertion-authz-grant-06)* (31 October 2026; expires 4 May 2027) — <https://www.ietf.org/archive/id/draft-ietf-oauth-identity-assertion-authz-grant-06.txt>\n18. IETF Datatracker, *RFC 9728: OAuth 2.0 Protected Resource Metadata* (RFC - Proposed Standard (April 2025)) — <https://datatracker.ietf.org/doc/html/rfc9728>\n19. Aaron Parecki and Emelia Smith (IETF Web Authorization Protocol Working Group), *draft-ietf-oauth-client-id-metadata-document — OAuth Client ID Metadata Document (IETF Datatracker)* (checked 2026-11-08) — <https://datatracker.ietf.org/doc/draft-ietf-oauth-client-id-metadata-document/>\n20. Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation* (2026-07-28) — <https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning>\n21. Linux Foundation, *Linux Foundation Announces Operational Launch of x402 Foundation to Standardize Internet-Native Payments for AI Agents and Applications* (July 14, 2026) — <https://www.linuxfoundation.org/press/linux-foundation-announces-operational-launch-of-x402-foundation-to-standardize-internet-native-payments-for-ai-agents-and-applications>\n22. Tuist, *auth.md* (checked 2026-10-30) — <https://tuist.dev/auth.md>\n23. Tuist, *Tuist authorization server* (checked 2026-10-30) — <https://tuist.dev/.well-known/oauth-authorization-server>\n24. Tuist, *Sign agents in with auth.md* (checked 2026-10-29) — <https://tuist.dev/changelog/2026.05.27-auth-md>\n25. Firecrawl, *Firecrawl auth.md* (checked 2026-10-30) — <https://www.firecrawl.dev/auth.md>\n26. Firecrawl, *Firecrawl OAuth authorization server metadata* (HTTP Date Fri, 30 Oct 2026) — <https://www.firecrawl.dev/.well-known/oauth-authorization-server>\n27. Alpic, *Alpic auth.md* (checked 2026-10-30) — <https://alpic.ai/auth.md>\n28. Alpic, *Alpic authorization server* (checked 2026-10-30) — <https://api.alpic.ai/.well-known/oauth-authorization-server>\n29. agents.txt Project, *agents-txt.com live /auth.md walkthrough* (checked 2026-10-30) — <https://agents-txt.com/auth.md>\n30. agents.txt Project, *agents-txt.com authorization server* (checked 2026-10-30) — <https://agents-txt.com/.well-known/oauth-authorization-server>\n31. Mailbox Bot, *auth.md* (checked 2026-10-30) — <https://mailbox.bot/auth.md>\n32. Mailbox Bot, *mailbox.bot authorization server* (checked 2026-10-30) — <https://mailbox.bot/.well-known/oauth-authorization-server>\n33. WorkOS, *auth.md* (checked 2026-10-30) — <https://workos.com/auth.md>\n34. PostHog, *PostHog Agent Authentication Guide (us.posthog.com/auth.md)* (checked 2026-10-30) — <https://us.posthog.com/auth.md>\n35. PostHog, *Agent discovery (auth.md) - Docs - PostHog* (checked 2026-10-29) — <https://posthog.com/docs/settings/agent-discovery>\n36. HereNow, *here.now auth.md* (checked 2026-10-30) — <https://here.now/auth.md>\n37. HeadlessDomains, *HeadlessDomains Authentication* (checked 2026-10-30) — <https://headlessdomains.com/auth.md>\n38. NanoGPT, *auth.md* (checked 2026-10-30) — <https://nano-gpt.com/auth.md>\n39. WebClaw, *webclaw auth* (checked 2026-10-30) — <https://webclaw.io/auth.md>\n40. Particle Pro, *Particle Pro auth.md — Agent Authentication* (checked 2026-10-30) — <https://api.particle.pro/auth.md>\n41. Storewalk, *TRX-009 auth.md agent registration guide published — Storewalk* (checked 2026-10-29) — <https://storewalk.ai/checks/TRX-009>\n42. PAX AI (ax-platform/ax-platform-mcp), *aX Platform MCP Server (README.md)* (checked 2026-10-29) — <https://raw.githubusercontent.com/ax-platform/ax-platform-mcp/main/README.md>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "",
   "adoption": {
    "level": "observed",
    "by": "Stripe, Box, Intercom, Vercel, auth-md skill, Cloudflare, Linear, Notion, and 4 other verified implementations",
    "probe_run": null
   },
   "aliases": [
    "RFC 9728",
    "RFC 8414",
    "PRM",
    "AS Metadata",
    "mcp.auth",
    "mcp-auth",
    "MCP Authorization"
   ],
   "analog": "A site's published API documentation entry point, made machine-readable",
   "collisions": [],
   "discovery": {
    "mechanism": "well-known files at the resource server and the authorization server, chained by a WWW-Authenticate challenge",
    "path": "/.well-known/oauth-protected-resource"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.rfc-editor.org/rfc/rfc9728.html",
     "claim": "M.B. Jones (Self-Issued Consulting), P. Hunt (Independent Identity, Inc.), and A. Parecki (Okta), *RFC 9728: OAuth 2.0 Protected Resource Metadata*, published April 2025; Internet Standards Track",
     "date": null,
     "quote": "RFC 9728 OAuth 2.0 Protected Resource Metadata / Published: April 2025 / Category: Standards Track / WWW-Authenticate: Bearer resource_metadata= \"https://resource.example.com/.well-known/oauth-protected-resource\" / This specification defines a metadata format that an OAuth 2.0 client or authorization server can use to obtain the information needed to interact with an OAuth 2.0 protected resource / This is an Internet Standards Track document / This document is a product of the Internet Engineering Task Force (IETF) / resource_metadata: The URL of the protected resource metadata / authorization_servers OPTIONAL. JSON array containing a list of OAuth authorization server issuer identifiers / protected_resources OPTIONAL. JSON array containing a list of resource identifiers for OAuth protected resources / Authors: M.B. Jones Self-Issued Consulting P. Hunt Independent Identity, Inc. A. Parecki Okta / It represents the consensus of the IETF community / approved for publication by the Internet Engineering Steering Group (IESG) / RFC: 9728 / This specification introduces a new parameter in the WWW-Authenticate HTTP response header field to indicate the protected resource metadata URL / return a JSON object using the application/json content type / URI suffix: oauth-protected-resource … Status: permanent … Change controller: IETF / OAuth 2.0 Protected Resource Metadata / GET /.well-known/oauth-protected-resource HTTP/1.1 / This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents / Code Components extracted from this document must include Revised BSD License text / This specification is intended to be deployed in scenarios where the client has no prior knowledge about the resource server and where the resource server might or might not have prior knowledge about the client / The means by which the client obtains the location of the protected resource is out of scope for this document / resource REQUIRED. The protected resource's resource identifier / The resource value returned MUST be identical to the protected resource's resource identifier value / The way in which the client identifier is established at the authorization server is out of scope for this specification / intentionally as parallel as possible to (1) \"OAuth 2.0 Dynamic Client Registration Protocol\" / (2) \"OAuth 2.0 Authorization Server Metadata\" [RFC8414] / A typical end-to-end flow doing so is as follows. Note that while this example uses the OAuth 2.0 authorization code flow, a similar sequence could also be implemented with any other OAuth flow. / Figure 1: Sequence Diagram / The following is a non-normative example response: / By default, the well-known URI string used is /.well-known/oauth-protected-resource / inserting a well-known URI string into the protected resource's resource identifier between the host component and the path / GET /.well-known/oauth-protected-resource/resource1 HTTP/1.1 / when the resource identifier is https://resource.example.com/resource1 / any terminating slash ( / ) following the host component MUST be removed before inserting /.well-known/ and the well-known URI path suffix / The resource value returned MUST be identical to the protected resource's resource identifier value into which the well-known URI path suffix was inserted to create the URL used to retrieve the metadata. / If the protected resource metadata was retrieved from a URL returned by the protected resource via the WWW-Authenticate resource_metadata parameter, then the resource value returned MUST be identical to the URL that the client used to make the request to the resource server. / Implementations MUST support TLS. They MUST follow the guidance in [BCP195] / TLS certificate checking MUST be performed by the client as described in [RFC9525] when making a protected resource metadata request. Checking that the server certificate is valid for the resource identifier URL prevents adversary-in-the-middle and DNS-based attacks. / the client MUST ensure that the resource identifier URL it is using as the prefix for the metadata request exactly matches the value of the resource metadata parameter in the protected resource metadata document received by the client / If a client expects to interact with multiple resource servers, the client SHOULD request audience-restricted access tokens using [RFC8707], and the authorization server SHOULD support audience-restricted access tokens. / Secure determination of appropriate authorization servers to use with a protected resource for all use cases is out of scope for this specification. / if an inappropriate authorization server is used by the client, an attacker may be able to act as an adversary-in-the-middle proxy to a valid authorization server without it being detected by the authorization server or the client. / If this resource is malicious or compromised, it could mislead the user into revealing their account credentials or authorizing unwanted access to OAuth-controlled capabilities. / An attacker may also attempt to impersonate a protected resource by publishing a metadata document that contains a resource metadata parameter using the resource identifier URL of the protected resource being impersonated but that contains information of the attacker's choosing. / Well-Known Uniform Resource Identifiers (URIs) / Protected resource metadata is published at a.well-known location [RFC8615] / inserting a well-known URI string into the protected resource's resource identifier / The syntax and semantics of.well-known are defined in [RFC8615] / intentionally as parallel as possible to (1) \"OAuth 2.0 Dynamic Client Registration Protocol\" [RFC7591], which enables a client to provide metadata about itself to an OAuth 2.0 authorization server",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://www.rfc-editor.org/rfc/rfc8414.html",
     "claim": "M. Jones (Microsoft), N. Sakimura (NRI), and J. Bradley (Yubico), *RFC 8414: OAuth 2.0 Authorization Server Metadata*, June 2018; Internet Standards Track",
     "date": null,
     "quote": "OAuth 2.0 Authorization Server Metadata / June 2018 / Category: Standards Track / GET /.well-known/oauth-authorization-server HTTP/1.1 / This specification defines a metadata format that an OAuth 2.0 client can use to obtain the information needed to interact with an OAuth 2.0 authorization server, including its endpoint locations and authorization server capabilities / M. Jones Request for Comments: 8414 Microsoft Category: Standards Track N. Sakimura ISSN: 2070-1721 NRI J. Bradley Yubico June 2018 / This is an Internet Standards Track document / The authorization server's issuer identifier, which is a URL that uses the \"https\" scheme and has no query or fragment components / Authorization server metadata is published at a location that is \".well-known\" according to RFC 5785 [RFC5785] derived from this issuer identifier / A successful response MUST use the 200 OK HTTP status code and return a JSON object using the \"application/json\" content type / This specification generalizes the metadata format defined by \"OpenID Connect Discovery 1.0\" / being applicable to a wider set of OAuth 2.0 use cases / This document is a product of the Internet Engineering Task Force (IETF) / It represents the consensus of the IETF community / approved for publication by the Internet Engineering Steering Group (IESG) / Request for Comments: 8414 / return a JSON object using the \"application/json\" content type / URI suffix: oauth-authorization-server … Change controller: IESG / This path MUST use the \"https\" scheme / Code Components extracted from this document must include Simplified BSD License text / The means by which the client chooses an authorization server is out of scope / issuer REQUIRED. The authorization server's issuer identifier / The \"issuer\" value returned MUST be identical to the authorization server's issuer identifier value / authorization_endpoint URL of the authorization server's authorization endpoint / token_endpoint URL of the authorization server's token endpoint / By default, the well-known URI string used is \"/.well-known/oauth-authorization-server\". / \"/.well-known/openid-configuration\" / only if the retrieval from that location fails should they fall back to attempting to retrieve it from the alternate location obtained using the transformation defined by OpenID Connect Discovery 1.0 / This backwards-compatible behavior should only be necessary when the well-known URI suffix employed by the application is \"openid-configuration\". / Some OAuth applications will choose to use the well-known URI suffix \"openid-configuration\" / despite the identifier \"/.well-known/openid-configuration\", appearing to be OpenID specific, its usage in this specification is actually referring to a general OAuth 2.0 feature that is not specific to OpenID Connect / intentionally parallel to the way that \"OAuth 2.0 Dynamic Client Registration Protocol\" [RFC7591] generalized the dynamic client registration mechanisms / RFC 8414 / If these values are not identical, the data contained in the response MUST NOT be used.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28/basic/authorization",
     "claim": "Model Context Protocol, *Authorization*, specification version 2026-07-28",
     "date": null,
     "quote": "Version 2026-07-28 (latest) / MCP servers MUST implement OAuth 2.0 Protected Resource Metadata ( RFC9728 ) / MCP authorization servers MUST provide at least one of the following discovery mechanisms: OAuth 2.0 Authorization Server Metadata ( RFC8414 ) OpenID Connect Discovery 1.0 / MCP clients MUST support both discovery mechanisms / MCP clients MUST obtain a client ID through one of three registration mechanisms: Client ID Metadata Documents, pre-registration, or Dynamic Client Registration / MCP servers MUST implement OAuth 2.0 Protected Resource Metadata (RFC9728) / MCP clients MUST support both discovery mechanisms to obtain the information required to interact with the authorization server. / MCP clients MUST implement Resource Indicators for OAuth 2.0 as defined in RFC 8707 to explicitly specify the target resource for which the token is being requested. / include the iss parameter in authorization responses, including error responses, as defined in RFC9207 Section 2. Authorization servers that include the iss parameter MUST advertise this by setting authorization_response_iss_parameter_supported to true / On receiving the authorization response, MCP clients MUST apply the validation in RFC9207 Section 2.4 before transmitting the authorization code to any token endpoint / MCP authorization servers SHOULD include the iss parameter in authorization responses, including error responses, as defined in RFC9207 Section 2. / Authorization servers MUST implement OAuth 2.1 with appropriate security measures for both confidential and public clients. / Authorization servers and MCP clients SHOULD support OAuth Client ID Metadata Documents / Note that Dynamic Client Registration is deprecated and retained for backwards compatibility with authorization servers that do not support Client ID Metadata Documents.",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28/basic/authorization/client-registration",
     "claim": "Model Context Protocol, *Client Registration*, specification version 2026-07-28",
     "date": null,
     "quote": "Client ID Metadata Documents : When client and server have no prior relationship (most common) / Use pre-registered client information for the server if the client has it available / Use Client ID Metadata Documents if the Authorization Server indicates that it supports them (via client_id_metadata_document_supported in OAuth Authorization Server Metadata) / Use Dynamic Client Registration as a fallback if the Authorization Server supports it (via registration_endpoint in OAuth Authorization Server Metadata) / The metadata document MUST include at least the following properties: client_id, client_name, redirect_uris / The client_id URL MUST use the \"https\" scheme and contain a path component, e.g. https://example.com/client.json / Clients MUST ensure the client_id value in the metadata matches the document URL exactly / Dynamic Client Registration is deprecated. New implementations should use Client ID Metadata Documents instead. / This option is included for backwards compatibility with earlier versions of the MCP authorization spec. / This option remains available for backwards compatibility with authorization servers that do not support Client ID Metadata Documents. / \"token_endpoint_auth_method\" : \"none\" / MCP clients SHOULD check for this capability and MAY fall back to Dynamic Client Registration or pre-registration if unavailable.",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://datatracker.ietf.org/doc/html/rfc9728",
     "claim": "IETF Datatracker, *RFC 9728: OAuth 2.0 Protected Resource Metadata*, RFC - Proposed Standard (April 2025)",
     "date": null,
     "quote": "RFC - Proposed Standard April 2025",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://datatracker.ietf.org/doc/html/rfc8414",
     "claim": "IETF Datatracker, *RFC 8414: OAuth 2.0 Authorization Server Metadata*, RFC - Proposed Standard (June 2018)",
     "date": null,
     "quote": "RFC - Proposed Standard June 2018",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://www.ietf.org/archive/id/draft-ietf-oauth-client-id-metadata-document-03.txt",
     "claim": "A. Parecki (Okta) and E. Smith (independent), *OAuth Client ID Metadata Document (draft-ietf-oauth-client-id-metadata-document-03)*, draft-ietf-oauth-client-id-metadata-document-03, 2 November 2026; expires 6 May 2027",
     "date": null,
     "quote": "This is through the usage of a URL as a client_id in an OAuth flow, where the URL refers to a document containing the necessary client metadata, enabling the authorization server to fetch the metadata about the client as needed. / without prior dynamic client registration or other existing registration / This is through the usage of a URL as a client_id in an OAuth flow / client_id_metadata_document_supported: OPTIONAL. Boolean value specifying whether the authorization server supports retrieving client metadata from a client_id URL / 10.7. Server Side Request Forgery (SSRF) Attacks / 6.2. Metadata Caching / The Client ID Metadata Document is a JSON ([RFC8259]) document containing the metadata of the client. / The Client ID Metadata Document MUST contain a client_id property whose value MUST match the Client Identifier URL, which MUST also match the URL that the authorization server used to fetch the document / comparisons MUST be made using simple string comparison as defined in Section 6.2.1 of [RFC3986] / The Client ID Metadata Document MUST be served with a 200 OK HTTP status code. / Authorization servers SHOULD automatically fetch the Client ID Metadata Document at the Client Identifier URL / the client_secret and client_secret_expires_at properties MUST NOT be used / the token_endpoint_auth_method and token_endpoint_auth_methods_supported properties MUST NOT include client_secret_post, client_secret_basic, client_secret_jwt / the authorization server MUST assume the token endpoint authentication method of none / the client will be a public client / Authorization servers MUST NOT fetch a Client ID Metadata Document URL or any URLs contained within a Client ID Metadata Document that resolve to special-use IP addresses / The authorization server MAY cache the client metadata it discovers at the Client ID Metadata Document URL, including data retrieved from referenced URLs such as the jwks_uri and logo_uri. / The authorization server SHOULD respect HTTP cache headers [RFC9111] when caching client metadata. / The authorization server SHOULD enforce a maximum effective cache duration regardless of the cache directives in the response. / The authorization server MUST NOT cache error responses. / draft-ietf-oauth-client-id-metadata-document-03 / 2 November 2026 / Internet-Draft / A. Parecki / E. Smith / the usage of a URL as a client_id / client_id_metadata_document_supported / specifying whether the authorization server supports retrieving client metadata from a client_id URL",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28/basic/authorization/authorization-server-discovery",
     "claim": "Model Context Protocol, *Authorization Server Discovery (MCP Specification 2026-07-28)*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "clients MUST try endpoints in the following priority order: / MCP clients MUST support both discovery mechanisms and use the resource metadata URL from the parsed WWW-Authenticate headers when present / Include the resource metadata URL in the `WWW-Authenticate` HTTP header under `resource_metadata` when returning `401 Unauthorized` responses / https://example.com/.well-known/oauth-protected-resource/public/mcp / https://example.com/.well-known/oauth-protected-resource / otherwise, they MUST fall back to constructing and requesting the well-known URIs in the order listed above. / the authorization_servers field containing at least one authorization server. / When multiple authorization servers are listed in authorization_servers, each is an independent OAuth 2.0 authorization server. / selecting which authorization server to use lies with the MCP client / Clients MUST maintain separate registration state (client credentials, tokens) per authorization server / OAuth 2.0 Authorization Server Metadata with path insertion: https://auth.example.com/.well-known/oauth-authorization-server/tenant1 / OpenID Connect Discovery 1.0 with path insertion: https://auth.example.com/.well-known/openid-configuration/tenant1 / https://auth.example.com/tenant1/.well-known/openid-configuration / https://auth.example.com/.well-known/oauth-authorization-server / https://auth.example.com/.well-known/openid-configuration / the issuer value in the document MUST be identical to the issuer identifier used to construct the well-known URL. / a document fetched from https://attacker.example/.well-known/oauth-authorization-server that contains \"issuer\": \"https://honest.example\" MUST be rejected.",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://auth-md.com/auth.md",
     "claim": "auth.md Project, *auth.md*, last-modified 2026-10-08",
     "date": null,
     "quote": "auth-md.com is an independent community resource about the auth.md protocol - the open standard that lets AI agents register for web services on behalf of users. / There are no APIs, no protected resources, and no registration endpoints. / Generate a complete auth.md file and Protected Resource Metadata from the developer's codebase / auth-md.com is an independent community resource about the auth.md protocol / install the auth-md skill / Validate an existing auth.md against the protocol specification",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://mcp.linear.app/.well-known/oauth-authorization-server",
     "claim": "Linear, *OAuth 2.0 Authorization Server Metadata*, fetched 2026-11-03",
     "date": null,
     "quote": "urn:ietf:params:oauth:grant-profile:id-jag / urn:ietf:params:oauth:grant-type:jwt-bearer / date: Tue, 03 Nov 2026 / \"client_id_metadata_document_supported\":true / \"issuer\":\"https://mcp.linear.app\" / HTTP/2 200 / \"code_challenge_methods_supported\":[\"S256\"] / \"grant_types_supported\":[\"authorization_code\",\"refresh_token\",\"urn:ietf:params:oauth:grant-type:jwt-bearer\"] / \"authorization_grant_profiles_supported\":[\"urn:ietf:params:oauth:grant-profile:id-jag\"] / \"resource\":\"https://mcp.linear.app/mcp\",\"resource_metadata\":\"https://mcp.linear.app/.well-known/oauth-protected-resource/mcp\" / content-type: application/json",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://mcp.stripe.com/.well-known/oauth-protected-resource",
     "claim": "Stripe, *OAuth 2.0 Protected Resource Metadata*, response dated Sat, 31 Oct 2026; fetched 2026-10-31",
     "date": null,
     "quote": "{\"resource\":\"https://mcp.stripe.com\",\"scopes_supported\":[\"mcp\"],\"authorization_servers\":[\"https://access.stripe.com/mcp\"]} / content-type: application/json / access-control-allow-origin: *",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://mcp.box.com/.well-known/oauth-protected-resource",
     "claim": "Box, *OAuth 2.0 Protected Resource Metadata*, fetched 2026-11-03",
     "date": null,
     "quote": "HTTP/2 200 / \"resource\": \"https://mcp.box.com/\" / \"resource_name\": \"Box Model Context Protocol Server\" / \"authorization_servers\": [\"https://api.box.com/\"] / \"bearer_methods_supported\": [\"header\"] / content-type: application/json",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://mcp.intercom.com/.well-known/oauth-protected-resource",
     "claim": "Intercom, *OAuth 2.0 Protected Resource Metadata*, fetched 2026-11-03",
     "date": null,
     "quote": "HTTP/2 200 / {\"resource\":\"https://mcp.intercom.com\",\"authorization_servers\":[\"https://mcp.intercom.com\"],\"scopes_supported\":[\"mcp\",\"operator\"],\"bearer_methods_supported\":[\"header\"]} / content-type: application/json / access-control-allow-origin: *",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://mcp.vercel.com/.well-known/oauth-protected-resource",
     "claim": "Vercel, *OAuth 2.0 Protected Resource Metadata*, fetched 2026-11-03",
     "date": null,
     "quote": "HTTP/2 200 / \"resource\":\"https://mcp.vercel.com/\" / \"authorization_servers\":[\"https://vercel.com\"] / \"scopes_supported\":[\"openid\"] / \"resource_name\":\"Vercel MCP\" / content-type: application/json / access-control-allow-origin: *",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://vercel.com/changelog/vercel-mcp-now-supports-client-id-metadata-documents",
     "claim": "Josh Souphanthong and Mark Roberts (Vercel), *Vercel MCP now supports Client ID Metadata Documents*, published 2 Nov 2026",
     "date": null,
     "quote": "Any MCP client can now ask to connect to Vercel MCP. You still log in and approve each connection, but the client no longer has to be reviewed by Vercel first. / Previously, Vercel reviewed and allowlisted each client and its redirect URIs by hand, and anything not on the list was rejected. / a client publishes a Client ID Metadata Document (CIMD), a JSON file on its own domain that describes it, and uses that file&#x27;s HTTPS URL as its OAuth <code>client_id</code>. / This follows the MCP authorization spec, which now recommends CIMD over Dynamic Client Registration. / Apps already registered with Vercel are unchanged.",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://mcp.cloudflare.com/.well-known/oauth-authorization-server",
     "claim": "Cloudflare, *OAuth 2.0 Authorization Server Metadata*, response dated Sat, 31 Oct 2026; fetched 2026-10-31",
     "date": null,
     "quote": "\"issuer\":\"https://mcp.cloudflare.com\" / \"authorization_endpoint\":\"https://mcp.cloudflare.com/authorize\" / \"token_endpoint\":\"https://mcp.cloudflare.com/token\" / \"registration_endpoint\":\"https://mcp.cloudflare.com/register\" / \"protected_resources\":[\"https://mcp.cloudflare.com/mcp\"] / \"grant_types_supported\":[\"authorization_code\",\"refresh_token\"] / \"code_challenge_methods_supported\":[\"S256\"] / \"client_id_metadata_document_supported\":true / \"scopes_supported\":[\"offline_access\",\"user:read\",\"account:read\" / content-type: application/json",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://mcp.notion.com/.well-known/oauth-authorization-server",
     "claim": "Notion, *OAuth 2.0 Authorization Server Metadata*, fetched 2026-11-03",
     "date": null,
     "quote": "HTTP/2 200 / \"issuer\":\"https://mcp.notion.com\" / \"protected_resources\":[\"https://mcp.notion.com\",\"https://mcp.notion.com/mcp\",\"https://mcp.notion.com/sse\"] / \"client_id_metadata_document_supported\":true / \"code_challenge_methods_supported\":[\"S256\"] / \"grant_types_supported\":[\"authorization_code\",\"refresh_token\",\"urn:ietf:params:oauth:grant-type:jwt-bearer\"] / \"authorization_grant_profiles_supported\":[\"urn:ietf:params:oauth:grant-profile:id-jag\"] / \"token_endpoint_auth_methods_supported\":[\"client_secret_basic\",\"client_secret_post\",\"none\",\"private_key_jwt\"] / content-type: application/json",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://mcp.paypal.com/.well-known/oauth-authorization-server",
     "claim": "PayPal, *OAuth 2.0 Authorization Server Metadata*, fetched 2026-11-03",
     "date": null,
     "quote": "HTTP/2 200 / \"issuer\":\"https://mcp.paypal.com\" / \"authorization_endpoint\":\"https://mcp.paypal.com/authorize\" / \"token_endpoint\":\"https://mcp.paypal.com/token\" / \"registration_endpoint\":\"https://mcp.paypal.com/register\" / \"grant_types_supported\":[\"authorization_code\",\"refresh_token\"] / \"code_challenge_methods_supported\":[\"S256\"] / \"client_id_metadata_document_supported\":false / content-type: application/json",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://mcp.asana.com/.well-known/oauth-authorization-server",
     "claim": "Asana, *OAuth 2.0 Authorization Server Metadata*, fetched 2026-11-03",
     "date": null,
     "quote": "HTTP/2 200 / \"issuer\":\"https://mcp.asana.com\" / \"authorization_endpoint\":\"https://mcp.asana.com/authorize\" / \"token_endpoint\":\"https://mcp.asana.com/token\" / \"registration_endpoint\":\"https://mcp.asana.com/register\" / \"grant_types_supported\":[\"authorization_code\",\"refresh_token\"] / \"code_challenge_methods_supported\":[\"plain\",\"S256\"] / \"token_endpoint_auth_methods_supported\":[\"client_secret_basic\",\"client_secret_post\",\"none\"] / content-type: application/json",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://mcp.wix.com/.well-known/oauth-authorization-server",
     "claim": "Wix, *OAuth 2.0 Authorization Server Metadata*, fetched 2026-11-03",
     "date": null,
     "quote": "HTTP/2 200 / \"issuer\":\"https://mcp.wix.com\" / \"authorization_endpoint\":\"https://mcp.wix.com/authorize\" / \"token_endpoint\":\"https://mcp.wix.com/token\" / \"registration_endpoint\":\"https://mcp.wix.com/register\" / \"grant_types_supported\":[\"authorization_code\",\"refresh_token\"] / \"code_challenge_methods_supported\":[\"plain\",\"S256\"] / \"token_endpoint_auth_methods_supported\":[\"client_secret_basic\",\"client_secret_post\",\"none\"] / content-type: application/json",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://mcp.apify.com/.well-known/oauth-authorization-server",
     "claim": "Apify, *OAuth 2.0 Authorization Server Metadata*, fetched 2026-11-03",
     "date": null,
     "quote": "HTTP/2 200 / \"issuer\":\"https://console-backend.apify.com\" / \"authorization_endpoint\":\"https://console.apify.com/authorize/oauth\" / \"registration_endpoint\":\"https://console-backend.apify.com/oauth/apps\" / \"client_id_metadata_document_supported\":true / \"code_challenge_methods_supported\":[\"S256\"] / \"grant_types_supported\":[\"authorization_code\",\"refresh_token\",\"urn:ietf:params:oauth:grant-type:device_code\"] / content-type: application/json",
     "ref": 21
    }
   ],
   "form": "well-known-file",
   "governance": "IETF; both documents are Internet Standards Track and were approved for publication by the IESG",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "created and verified against rfc-editor.org/rfc/rfc9728.html and rfc-editor.org/rfc/rfc8414.html"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "oauth-metadata-for-agents",
   "implementation": "multi-implementation",
   "last_verified": "2026-11-12",
   "name": "OAuth Protected Resource and Authorization Server Metadata (as used for agent authorization)",
   "native_status": "Internet Standards Track. RFC 8414 published June 2018. RFC 9728 published April 2025. Both represent the consensus of the IETF community and were approved for publication by the IESG.",
   "origin": {
    "date": "2018-06",
    "org": "IETF OAuth Working Group"
   },
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "stable",
   "probe": {
    "method": "GET",
    "on_absent": "Resource server does not publish RFC 9728 Protected Resource Metadata; an agent must fall back to a 401 response's WWW-Authenticate header (if present) or vendor-specific documentation to find the authorization server",
    "parse": "A JSON document per RFC 9728 with a 'resource' field and an 'authorization_servers' array; follow the first authorization_servers entry to {authorization_server}/.well-known/oauth-authorization-server per RFC 8414 to fetch endpoint and capability metadata",
    "path": "{resource_server}/.well-known/oauth-protected-resource"
   },
   "question": "How does an agent (or an MCP client acting for it) discover which authorization server protects a resource, and what that authorization server's endpoints and capabilities are, before requesting access?",
   "scope": "general",
   "spec_url": "https://www.rfc-editor.org/rfc/rfc9728.html",
   "step": "permit",
   "summary_md": "**OAuth Protected Resource and Authorization Server Metadata (as used for agent authorization)** pairs two IETF Standards Track specifications—RFC 9728 (*OAuth 2.0 Protected Resource Metadata*, April 2025) and RFC 8414 (*OAuth 2.0 Authorization Server Metadata*, June 2018)—so AI agents and OAuth clients can dynamically discover a protected resource's authorization servers and endpoint capabilities without pre-configured endpoints. When an unauthenticated request hits a protected resource, the server returns an HTTP `401` `WWW-Authenticate` header carrying `resource_metadata`, or the client probes `GET /.well-known/oauth-protected-resource`. The client reads `authorization_servers` from that JSON response and fetches `GET /.well-known/oauth-authorization-server` over HTTPS (`application/json`) to obtain the issuer's endpoints and supported capabilities. RFC 8414 generalized OpenID Connect Discovery 1.0 for wider OAuth 2.0 deployments, and RFC 9728 added resource-side discovery alongside the optional `protected_resources` authorization-server array. The Model Context Protocol (`2026-07-28`) authorization specification mandates RFC 9728 on MCP servers and requires MCP clients to support both RFC 8414 and OpenID Connect Discovery 1.0.",
   "track": "ietf",
   "version": {
    "date": "2025-04",
    "label": "RFC 8414 (2018-06) and RFC 9728 (2025-04)"
   },
   "watch": [
    {
     "type": "page",
     "url": "https://www.rfc-editor.org/rfc/rfc9728.html",
     "selector": "main",
     "cadence": "weekly"
    }
   ],
   "use_cases": [
    "discover-my-api",
    "delegate-user-authority",
    "expose-tools-to-agents"
   ],
   "audience": [
    "agent-builder",
    "platform"
   ],
   "pairs_with": [
    "mcp",
    "auth-md",
    "identity-assertion-authz-grant",
    "oauth-cimd"
   ],
   "prerequisites": [],
   "ietf_tracker": {
    "doc": "rfc9728",
    "rev": null,
    "state": "rfc",
    "stream": "IETF",
    "group_type": "WG",
    "wg": "oauth",
    "replaced_by": null,
    "posted_utc": "2025-04",
    "expires_utc": null,
    "as_of": "2026-11-06",
    "source": "https://datatracker.ietf.org/doc/rfc9728/",
    "source_label": "per IETF Datatracker"
   },
   "hatnote_md": "This article covers the agent-authorization profile of IETF RFC 9728 (OAuth 2.0 Protected Resource Metadata) and RFC 8414 (OAuth 2.0 Authorization Server Metadata), as mandated by the [Model Context Protocol](/protocols/mcp/) authorization specification (`2026-07-28`). For URL-based OAuth client identifiers used when an agent and server have no prior relationship, see [OAuth Client ID Metadata Documents (CIMD)](/protocols/oauth-cimd/).",
   "tier": "flagship",
   "lifecycle_status": "published_standard",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "This article covers the agent-authorization profile of IETF RFC 9728 (OAuth 2.0 Protected Resource Metadata) and RFC 8414 (OAuth 2.0 Authorization Server Metadata), as mandated by the [Model Context Protocol](/protocols/mcp/) authorization specification (`2026-07-28`). For URL-based OAuth client identifiers used when an agent and server have no prior relationship, see [OAuth Client ID Metadata Documents (CIMD)](/protocols/oauth-cimd/). [1][2][3][4]",
   "v05_elevator_pitch_md": "Paired OAuth Protected Resource Metadata and Authorization Server Metadata provide a two-step discovery flow that lets AI agents and MCP clients automatically locate the login and token endpoints for an unfamiliar API or tool server at runtime. Instead of hardcoding OAuth URLs for every integration, an agent follows the server's `WWW-Authenticate` challenge to `/.well-known/oauth-protected-resource` and then fetches `/.well-known/oauth-authorization-server` to verify the trusted issuer and obtain its `authorization_endpoint` and `token_endpoint`. [1][2][3]",
   "v05_lead_md": "**OAuth Protected Resource and Authorization Server Metadata (as used for agent authorization)** pairs two IETF Standards Track specifications—RFC 9728 (*OAuth 2.0 Protected Resource Metadata*, April 2025) and RFC 8414 (*OAuth 2.0 Authorization Server Metadata*, June 2018)—so AI agents and OAuth clients can dynamically discover a protected resource's authorization servers and endpoint capabilities without pre-configured endpoints. [1][2] When an unauthenticated request hits a protected resource, the server returns an HTTP `401` `WWW-Authenticate` header carrying `resource_metadata`, or the client probes `GET /.well-known/oauth-protected-resource`. [1] The client reads `authorization_servers` from that JSON response and fetches `GET /.well-known/oauth-authorization-server` over HTTPS (`application/json`) to obtain the issuer's endpoints and supported capabilities. [1][2] RFC 8414 generalized OpenID Connect Discovery 1.0 for wider OAuth 2.0 deployments, and RFC 9728 added resource-side discovery alongside the optional `protected_resources` authorization-server array. [1][2] The Model Context Protocol (`2026-07-28`) authorization specification mandates RFC 9728 on MCP servers and requires MCP clients to support both RFC 8414 and OpenID Connect Discovery 1.0. [3]",
   "v05_identity_sentence_md": "**OAuth Protected Resource and Authorization Server Metadata (as used for agent authorization)** pairs two IETF Standards Track specifications—RFC 9728 (*OAuth 2.0 Protected Resource Metadata*, April 2025) and RFC 8414 (*OAuth 2.0 Authorization Server Metadata*, June 2018)—so AI agents and OAuth clients can dynamically discover a protected resource's authorization servers and endpoint capabilities without pre-configured endpoints. [1][2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Permit](/category/permit/) (`permit`)"
    },
    {
     "label": "Form",
     "value_md": "JSON well-known metadata file (`well-known-file`)"
    },
    {
     "label": "Originated by",
     "value_md": "RFC 9728: M.B. Jones, P. Hunt, and A. Parecki (April 2025). RFC 8414: M. Jones, N. Sakimura, and J. Bradley (June 2018). [1][2]"
    },
    {
     "label": "Governed by",
     "value_md": "IETF. Both are Internet Standards Track documents, represent the consensus of the IETF community, and were approved for publication by the IESG. [1][2]"
    },
    {
     "label": "Track",
     "value_md": "IETF Standards Track (RFC 9728 and RFC 8414) [1][2]"
    },
    {
     "label": "IETF tracker",
     "value_md": "RFC 9728 (published April 2025, Standards Track) and RFC 8414 (June 2018, Standards Track) [1][2]"
    },
    {
     "label": "Status",
     "value_md": "Proposed Standard (RFC 9728, April 2025; RFC 8414, June 2018) [1][2][5][6]"
    },
    {
     "label": "Version",
     "value_md": "RFC 9728 (April 2025); RFC 8414 (June 2018) [1][2]"
    },
    {
     "label": "Headers",
     "value_md": "`WWW-Authenticate` parameter `resource_metadata` [1]"
    },
    {
     "label": "Message format",
     "value_md": "JSON object (`application/json`) [1][2]"
    },
    {
     "label": "IANA registration",
     "value_md": "`oauth-protected-resource` (permanent; change controller IETF); `oauth-authorization-server` (change controller IESG) [1][2]"
    },
    {
     "label": "Specification",
     "value_md": "[OAuth 2.0 Protected Resource Metadata](https://www.rfc-editor.org/rfc/rfc9728.html); [OAuth 2.0 Authorization Server Metadata](https://www.rfc-editor.org/rfc/rfc8414.html) [1][2]"
    },
    {
     "label": "Found at",
     "value_md": "`GET /.well-known/oauth-protected-resource`; `GET /.well-known/oauth-authorization-server` (that path must use `https`) [1][2]"
    },
    {
     "label": "Licence",
     "value_md": "BCP 78 and the IETF Trust Legal Provisions. Code components: Revised BSD (RFC 9728); Simplified BSD (RFC 8414). [1][2]"
    }
   ],
   "v05_problem_md": "RFC 9728 is intended to be deployed where the client has no prior knowledge about the resource server, and where the resource server might or might not have prior knowledge about the client. How the client obtains the protected resource's location is out of scope for RFC 9728. How the client chooses an authorization server is out of scope for RFC 8414. [1][2] Together, RFC 9728 and RFC 8414 establish a two-hop, cryptographically bound discovery chain: the protected resource's metadata document binds its canonical `resource` identifier to one or more trusted `authorization_servers` issuer URLs, and each authorization server's metadata document verifies its `issuer` identifier while publishing `authorization_endpoint` and `token_endpoint`. [1][2] How the client identifier is established at the authorization server is out of scope for RFC 9728. RFC 9728 is intentionally as parallel as possible to OAuth 2.0 Dynamic Client Registration and to OAuth 2.0 Authorization Server Metadata. A URL used as `client_id`, which the authorization server fetches, is specified separately. [1][7]",
   "v05_mechanism_delta_md": "Together, RFC 9728 and RFC 8414 establish a two-hop, cryptographically bound discovery chain: the protected resource's metadata document binds its canonical `resource` identifier to one or more trusted `authorization_servers` issuer URLs, and each authorization server's metadata document verifies its `issuer` identifier while publishing `authorization_endpoint` and `token_endpoint`. [1][2]",
   "v05_scope_boundary_md": "How the client identifier is established at the authorization server is out of scope for RFC 9728. RFC 9728 is intentionally as parallel as possible to OAuth 2.0 Dynamic Client Registration and to OAuth 2.0 Authorization Server Metadata. A URL used as `client_id`, which the authorization server fetches, is specified separately. [1][7]",
   "v05_fuzzy_additions": [
    {
     "id": "protected-resource-discovery-and-authorization-server-metadata-order",
     "heading": "Protected resource discovery and authorization server metadata order",
     "body_md": "When an HTTP 401 `WWW-Authenticate` response includes `resource_metadata`, the client fetches that URL directly; otherwise it probes `/.well-known/oauth-protected-resource` via path insertion (or at the host root when the resource URL has no path). After selecting an issuer from `authorization_servers`, the client probes path-aware `/.well-known/oauth-authorization-server` and `/.well-known/openid-configuration` endpoints and accepts the metadata document only if its `issuer` field matches the expected issuer URL. [1][2][8]",
     "bullets": [
      {
       "label": "HTTP 401 resource_metadata",
       "text_md": "RFC 9728 defines the `resource_metadata` parameter inside the `WWW-Authenticate` response header (for example, `WWW-Authenticate: Bearer resource_metadata=\"https://resource.example.com/.well-known/oauth-protected-resource\"`). Conforming MCP clients inspect `401 Unauthorized` responses and prioritize the `resource_metadata` URL whenever present. [1][8]"
      },
      {
       "label": "Path insertion and root probe",
       "text_md": "With no path, the request is `GET /.well-known/oauth-protected-resource`. For `https://resource.example.com/resource1`, RFC 9728 inserts the suffix as `GET /.well-known/oauth-protected-resource/resource1`. MCP then tries path insertion at `https://example.com/.well-known/oauth-protected-resource/public/mcp`, then the root `https://example.com/.well-known/oauth-protected-resource`. [1][8]"
      },
      {
       "label": "resource and authorization_servers",
       "text_md": "The returned `resource` property must equal the identifier into which the well-known suffix was inserted, or—after a `resource_metadata` header fetch—the URL the client requested from the resource server. While `authorization_servers` is optional in base RFC 9728, the MCP profile requires at least one entry; when multiple independent authorization servers are listed, the client selects which server to use and maintains separate registration state per server. [1][8]"
      },
      {
       "label": "Metadata order, issuer matching, and security considerations",
       "text_md": "For an issuer URL with a path component (such as `https://auth.example.com/tenant1`), MCP clients probe `https://auth.example.com/.well-known/oauth-authorization-server/tenant1`, then `https://auth.example.com/.well-known/openid-configuration/tenant1`, and finally `https://auth.example.com/tenant1/.well-known/openid-configuration` (whereas a pathless issuer probes `/.well-known/oauth-authorization-server` before `/.well-known/openid-configuration`, matching RFC 8414's fallback rule). `issuer` must match, so `https://attacker.example/.well-known/oauth-authorization-server` naming `https://honest.example` is rejected. Under RFC 9728 Section 7, implementations must support TLS (`BCP195`) and validate the server TLS certificate (`RFC9525`) against the resource-identifier URL to prevent adversary-in-the-middle and DNS-based attacks; separately, under Section 7.3, the client must ensure the request prefix exactly matches the returned `resource` value to block impersonation via a metadata document that copies a legitimate resource identifier and substitutes attacker-chosen endpoints. Under Section 7.4, if a client expects to interact with multiple resource servers, both client and authorization server should use `RFC8707` audience-restricted access tokens, whereas MCP `2026-07-28` independently requires (`MUST`) MCP clients to implement `RFC 8707` Resource Indicators. Determining whether an authorization server in `authorization_servers` is trustworthy is out of scope (an inappropriate server enables an adversary-in-the-middle proxy), and user-selected URLs carry phishing risks. In MCP `2026-07-28`, authorization servers `SHOULD` include the `RFC9207` `iss` parameter and `MUST` set `authorization_response_iss_parameter_supported` to `true` when they do, while clients `MUST` apply the `RFC9207` Section 2.4 check before transmitting an authorization code. [1][2][3][8]"
      }
     ]
    },
    {
     "id": "client-id-metadata-documents-dynamic-client-registration-and-mcp-profiles",
     "heading": "Client ID Metadata Documents, Dynamic Client Registration, and MCP profiles",
     "body_md": "RFC 9728 leaves the client identifier out of scope. `draft-ietf-oauth-client-id-metadata-document` uses a URL as `client_id`: JSON the authorization server fetches, with no prior dynamic client registration. MCP's `2026-07-28` profile prefers Client ID Metadata Documents over RFC 7591 Dynamic Client Registration for public clients with no prior relationship. Servers advertise `client_id_metadata_document_supported`, and document fetches are subject to server-side request forgery (SSRF) and HTTP caching limits. [1][3][4][7]",
     "bullets": [
      {
       "label": "URL client_id document",
       "text_md": "The JSON document must contain `client_id` matching the Client Identifier URL and the URL the authorization server retrieved. The response must be HTTP 200. A URL client identifier needs no prior dynamic client registration. [7]"
      },
      {
       "label": "Required JSON properties",
       "text_md": "MCP requires `client_id`, `client_name`, and `redirect_uris`. `client_id` must be https with a path, such as `https://example.com/client.json`, and must equal the document URL. Public documents omit `client_secret` and `client_secret_expires_at`. `token_endpoint_auth_method` omits `client_secret_basic`, `client_secret_post`, and `client_secret_jwt`. [4][7]"
      },
      {
       "label": "Why MCP profiles prefer it",
       "text_md": "MCP's `2026-07-28` client-registration specification designates Client ID Metadata Documents for when client and server have no prior relationship, the most common case. Clients supporting all options follow the priority order: pre-registered credentials when available, then Client ID Metadata Documents when `client_id_metadata_document_supported` is set, then Dynamic Client Registration via `registration_endpoint`. Dynamic Client Registration is deprecated and kept for backwards compatibility with earlier MCP versions and servers without Client ID Metadata Documents. Public clients set `token_endpoint_auth_method` to `none`; if unset, the server assumes `none`, and the client is public. [3][4][7]"
      },
      {
       "label": "Advertisement, SSRF, and cache",
       "text_md": "`client_id_metadata_document_supported` advertises that a `client_id` URL can be fetched. MCP clients should check the flag and may fall back to Dynamic Client Registration or pre-registration. Servers must not fetch the document URL, or a URL inside it, at a special-use IP address. They may cache `jwks_uri` and `logo_uri`, should honor HTTP cache headers, should cap duration, and must not cache error responses. [4][7]"
      }
     ]
    }
   ],
   "v05_diagram": {
    "title": "Protected resource metadata discovery",
    "heading": "Protected resource metadata discovery",
    "mermaid": "sequenceDiagram\n    participant Client\n    participant RS as Resource Server\n    participant AS as Authorization Server\n    Client->>RS: 1. Resource request without an access token\n    RS-->>Client: 2. WWW-Authenticate with resource metadata URL\n    Client->>RS: 3. Fetch protected resource metadata\n    RS-->>Client: 4. Protected resource metadata response\n    Note over Client: 5. Validate metadata and build the AS metadata URL\n    Client->>AS: 6. Fetch authorization server metadata\n    AS-->>Client: 7. Authorization server metadata response\n    Note over Client,AS: 8-9. Authorization code flow; client obtains an access token\n    Client->>RS: 10. Resource request with the access token\n    RS-->>Client: 11. Protected resource response",
    "caption_md": "The resource server returns `WWW-Authenticate` with the protected-resource metadata URL. The client fetches that document, then authorization-server metadata, then retries with an access token. [1]"
   },
   "v05_wire_artifact": {
    "title": "RFC 9728 protected resource metadata at /.well-known/oauth-protected-resource",
    "heading": "RFC 9728 protected resource metadata at /.well-known/oauth-protected-resource",
    "lang": "json",
    "code": "{\n \"resource\":\n   \"https://resource.example.com\",\n \"authorization_servers\":\n   [\"https://as1.example.com\",\n    \"https://as2.example.net\"],\n \"bearer_methods_supported\":\n   [\"header\", \"body\"],\n \"scopes_supported\":\n   [\"profile\", \"email\", \"phone\"],\n \"resource_documentation\":\n   \"https://resource.example.com/resource_documentation.html\"\n}",
    "caption_md": "Non-normative protected resource metadata for `/.well-known/oauth-protected-resource`, including `authorization_servers`, `bearer_methods_supported`, and `scopes_supported`. [1]"
   },
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "OpenID Connect Discovery 1.0",
      "spec_or_rfc": "OpenID Connect Discovery 1.0",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "RFC 8414 generalizes OpenID Connect Discovery 1.0 metadata for wider OAuth 2.0 use while staying compatible. The `openid-configuration` suffix names a general OAuth feature, not an OpenID-only one. [2]"
     },
     {
      "name": "Well-Known URIs",
      "spec_or_rfc": "RFC 8615",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "RFC 9728 publishes protected-resource metadata at an RFC 8615 `.well-known` URI, inserting `/.well-known/oauth-protected-resource` between the resource host and any path. [1]"
     },
     {
      "name": "Dynamic Client Registration",
      "spec_or_rfc": "RFC 7591",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "RFC 9728 parallels RFC 7591, which lets a client give its metadata to an authorization server. RFC 8414 likewise parallels how RFC 7591 generalized OpenID Connect dynamic registration metadata. [1][2]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "2026-07-28 MCP spec requires servers to implement RFC 9728. Authorization servers must offer RFC 8414 or OpenID Connect Discovery 1.0; clients must support both, then obtain a client ID. [3]"
     },
     {
      "target_id": "auth-md",
      "target_name": "auth.md",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "auth.md lets AI agents register for web services. Its skill generates auth.md and Protected Resource Metadata from a codebase, while auth-md.com has no APIs, protected resources, or registration endpoints. [9]"
     },
     {
      "target_id": "identity-assertion-authz-grant",
      "target_name": "Identity Assertion JWT Authorization Grant (ID-JAG)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "OAuth 2.0 Authorization Server Metadata (`RFC 8414`) can advertise support for the `urn:ietf:params:oauth:grant-profile:id-jag` enterprise identity assertion grant profile alongside `urn:ietf:params:oauth:grant-type:jwt-bearer`, as served in production by `mcp.linear.app`. [2][10]"
     },
     {
      "target_id": "oauth-cimd",
      "target_name": "OAuth Client ID Metadata Document",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Whereas RFC 9728 and RFC 8414 publish resource-server and authorization-server discovery documents, `draft-ietf-oauth-client-id-metadata-document-03` (2 November 2026) lets an OAuth client use an HTTPS URL as its `client_id` and adds `client_id_metadata_document_supported` to RFC 8414 metadata. [7]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (12 probed or cited examples; non-exhaustive).",
    "side_a": {
     "visible": true,
     "heading": "Protected resources publishing RFC 9728 metadata",
     "col4_header": "/.well-known/oauth-protected-resource fields",
     "note_md": null,
     "rows": [
      {
       "actor": "Stripe",
       "role": "Protected resource",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-31",
       "col4_md": "`resource` `https://mcp.stripe.com`, `scopes_supported` `mcp`, `authorization_servers` `https://access.stripe.com/mcp`.",
       "source_md": "[Stripe protected resource metadata](https://mcp.stripe.com/.well-known/oauth-protected-resource) [11]"
      },
      {
       "actor": "Box",
       "role": "Protected resource",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-11-03",
       "col4_md": "`resource` `https://mcp.box.com/`, `resource_name` `Box Model Context Protocol Server`, `authorization_servers` `https://api.box.com/`, `bearer_methods_supported` `header`.",
       "source_md": "[Box protected resource metadata](https://mcp.box.com/.well-known/oauth-protected-resource) [12]"
      },
      {
       "actor": "Intercom",
       "role": "Protected resource",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-11-03",
       "col4_md": "`resource` and `authorization_servers` `https://mcp.intercom.com`; `scopes_supported` `mcp`, `operator`; `bearer_methods_supported` `header`.",
       "source_md": "[Intercom protected resource metadata](https://mcp.intercom.com/.well-known/oauth-protected-resource) [13]"
      },
      {
       "actor": "Vercel",
       "role": "Protected resource",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-11-03",
       "col4_md": "`resource` `https://mcp.vercel.com/`, `resource_name` `Vercel MCP`, `authorization_servers` `https://vercel.com`, `scopes_supported` `openid`. Any MCP client can connect by publishing a Client ID Metadata Document and using that document's HTTPS URL as its OAuth `client_id`, without a prior Vercel review of the client.",
       "source_md": "[Vercel protected resource metadata](https://mcp.vercel.com/.well-known/oauth-protected-resource) [14] · [Vercel MCP CIMD changelog](https://vercel.com/changelog/vercel-mcp-now-supports-client-id-metadata-documents) [15]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Agent hosts, clients & skills discovering metadata",
     "col4_header": "Discovery sequence & fallback rules",
     "note_md": null,
     "rows": [
      {
       "actor": "auth-md skill",
       "role": "Agent skill",
       "status": "Partial",
       "status_display": "Partial · checked 2026-10-31",
       "col4_md": "Generates and validates `auth.md` plus Protected Resource Metadata from codebase; static site hosts no registration endpoints.",
       "source_md": "[auth.md](https://auth-md.com/auth.md) [9]"
      }
     ]
    },
    "additional_tables": [
     {
      "visible": true,
      "heading": "Authorization servers publishing RFC 8414 metadata",
      "col4_header": "/.well-known/oauth-authorization-server endpoints",
      "note_md": null,
      "rows": [
       {
        "actor": "Cloudflare",
        "role": "Authorization server",
        "status": "Live (HTTP 200)",
        "status_display": "Live (HTTP 200) · checked 2026-10-31",
        "col4_md": "`issuer` `https://mcp.cloudflare.com`; `S256`; `authorization_code`, `refresh_token`; `client_id_metadata_document_supported` `true`; `registration_endpoint`; 403 scopes.",
        "source_md": "[Cloudflare authorization server metadata](https://mcp.cloudflare.com/.well-known/oauth-authorization-server) [16]"
       },
       {
        "actor": "Linear",
        "role": "Authorization server",
        "status": "Live (HTTP 200)",
        "status_display": "Live (HTTP 200) · checked 2026-11-03",
        "col4_md": "`issuer` `https://mcp.linear.app`; `S256`; `authorization_code`, `refresh_token`, `jwt-bearer` (`id-jag`); `client_id_metadata_document_supported` `true`; `resource_metadata`.",
        "source_md": "[Linear authorization server metadata](https://mcp.linear.app/.well-known/oauth-authorization-server) [10]"
       },
       {
        "actor": "Notion",
        "role": "Authorization server",
        "status": "Live (HTTP 200)",
        "status_display": "Live (HTTP 200) · checked 2026-11-03",
        "col4_md": "`issuer` `https://mcp.notion.com`; `S256`; `jwt-bearer` (`id-jag`); `private_key_jwt`; `client_id_metadata_document_supported` `true`; `protected_resources`.",
        "source_md": "[Notion authorization server metadata](https://mcp.notion.com/.well-known/oauth-authorization-server) [17]"
       },
       {
        "actor": "PayPal",
        "role": "Authorization server",
        "status": "Live (HTTP 200)",
        "status_display": "Live (HTTP 200) · checked 2026-11-03",
        "col4_md": "`issuer` `https://mcp.paypal.com`; `S256`; `authorization_code`, `refresh_token`; `registration_endpoint`; `client_id_metadata_document_supported` `false`.",
        "source_md": "[PayPal authorization server metadata](https://mcp.paypal.com/.well-known/oauth-authorization-server) [18]"
       },
       {
        "actor": "Asana",
        "role": "Authorization server",
        "status": "Live (HTTP 200)",
        "status_display": "Live (HTTP 200) · checked 2026-11-03",
        "col4_md": "`issuer` `https://mcp.asana.com`; PKCE `plain` and `S256`; `authorization_code`, `refresh_token`; `registration_endpoint`.",
        "source_md": "[Asana authorization server metadata](https://mcp.asana.com/.well-known/oauth-authorization-server) [19]"
       },
       {
        "actor": "Wix",
        "role": "Authorization server",
        "status": "Live (HTTP 200)",
        "status_display": "Live (HTTP 200) · checked 2026-11-03",
        "col4_md": "`issuer` `https://mcp.wix.com`; PKCE `plain` and `S256`; `authorization_code`, `refresh_token`; `registration_endpoint`.",
        "source_md": "[Wix authorization server metadata](https://mcp.wix.com/.well-known/oauth-authorization-server) [20]"
       },
       {
        "actor": "Apify",
        "role": "Authorization server",
        "status": "Live (HTTP 200)",
        "status_display": "Live (HTTP 200) · checked 2026-11-03",
        "col4_md": "`issuer` `https://console-backend.apify.com` (mismatches `https://mcp.apify.com`, so RFC 8414 §3.3 requires a client probing `https://mcp.apify.com` to reject this document and instead resolve metadata for the issuer named in protected-resource metadata); `S256`; `device_code`; `client_id_metadata_document_supported` `true`.",
        "source_md": "[Apify authorization server metadata](https://mcp.apify.com/.well-known/oauth-authorization-server) [21] · [RFC 8414](https://www.rfc-editor.org/rfc/rfc8414.html) [2]"
       }
      ]
     }
    ],
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "mcp-server-cards",
     "target_name": "MCP Server Cards",
     "relation_label": "Complements",
     "delta": "OAuth protected-resource and authorization-server metadata tells the client how agent authorization is discovered, while the Server Card describes the MCP server before the client connects.",
     "item_md": "**[MCP Server Cards](/protocols/mcp-server-cards/)** (Complements) — OAuth protected-resource and authorization-server metadata tells the client how agent authorization is discovered, while the Server Card describes the MCP server before the client connects."
    },
    {
     "target_id": "wimse-aims",
     "target_name": "AI Identity Management System (AIMS)",
     "relation_label": "Depended on by",
     "delta": "OAuth 2.0 Protected Resource Metadata (RFC 9728, April 2025) is a published metadata format; AIMS states that when an Agent is invoking a Tool, the Agent may use OAuth 2.0 Protected Resource Metadata to discover how the resource is protected.",
     "item_md": "**[AI Identity Management System (AIMS)](/protocols/wimse-aims/)** (Depended on by) — OAuth 2.0 Protected Resource Metadata (RFC 9728, April 2025) is a published metadata format; AIMS states that when an Agent is invoking a Tool, the Agent may use OAuth 2.0 Protected Resource Metadata to discover how the resource is protected."
    },
    {
     "target_id": "personal-agent-protocol",
     "target_name": "Personal Agent Protocol",
     "relation_label": "Depended on by",
     "delta": "Poppy reads the company's OAuth authorization-server metadata for the token endpoint, and the company document itself is /.well-known/poppy.json with protocol_version and organization.name.",
     "item_md": "**[Personal Agent Protocol](/protocols/personal-agent-protocol/)** (Depended on by) — Poppy reads the company's OAuth authorization-server metadata for the token endpoint, and the company document itself is /.well-known/poppy.json with protocol_version and organization.name."
    },
    {
     "target_id": "aauth-hardt",
     "target_name": "AAuth (Hardt)",
     "relation_label": "Peer alternative",
     "delta": "RFC 9728 and RFC 8414 publish OAuth protected-resource and authorization-server metadata, while AAuth publishes its own aauth-resource, aauth-agent, aauth-person, and aauth-access well-known documents.",
     "item_md": "**[AAuth (Hardt)](/protocols/aauth-hardt/)** (Peer alternative) — RFC 9728 and RFC 8414 publish OAuth protected-resource and authorization-server metadata, while AAuth publishes its own aauth-resource, aauth-agent, aauth-person, and aauth-access well-known documents."
    },
    {
     "target_id": "workload-authz-grant",
     "target_name": "Workload Authorization Grant (WAG)",
     "relation_label": "Depended on by",
     "delta": "RFC 9728 defines protected-resource metadata, and RFC 8414 defines authorization-server metadata at `/.well-known/oauth-authorization-server`, including grant_types_supported. Published draft-carleton-workload-authz-grant-02 (Section 8) says an authorization server publishing RFC 8414 metadata SHOULD include urn:ietf:params:oauth:grant-profile:wag in authorization_grant_profiles_supported and MUST also include urn:ietf:params:oauth:grant-type:jwt-bearer in grant_types_supported; Section 11 requests IANA registration of oauth-wag+jwt, urn:ietf:params:oauth:token-type:wag, and urn:ietf:params:oauth:grant-profile:wag (requests, not completed IANA registrations).",
     "item_md": "**[Workload Authorization Grant (WAG)](/protocols/workload-authz-grant/)** (Depended on by) — RFC 9728 defines protected-resource metadata, and RFC 8414 defines authorization-server metadata at `/.well-known/oauth-authorization-server`, including grant_types_supported. Published draft-carleton-workload-authz-grant-02 (Section 8) says an authorization server publishing RFC 8414 metadata SHOULD include urn:ietf:params:oauth:grant-profile:wag in authorization_grant_profiles_supported and MUST also include urn:ietf:params:oauth:grant-type:jwt-bearer in grant_types_supported; Section 11 requests IANA registration of oauth-wag+jwt, urn:ietf:params:oauth:token-type:wag, and urn:ietf:params:oauth:grant-profile:wag (requests, not completed IANA registrations)."
    },
    {
     "target_id": "aauth",
     "target_name": "Agent Authorization Grant",
     "relation_label": "Complements",
     "delta": "The grant is an OAuth 2.1 agent_authorization_endpoint extension that defines no new well-known URI of its own and instead publishes its endpoint and jwks_uri/scope_descriptions_uri in RFC 8414 and RFC 9728 metadata.",
     "item_md": "**[Agent Authorization Grant](/protocols/aauth/)** (Complements) — The grant is an OAuth 2.1 agent_authorization_endpoint extension that defines no new well-known URI of its own and instead publishes its endpoint and jwks_uri/scope_descriptions_uri in RFC 8414 and RFC 9728 metadata."
    },
    {
     "target_id": "daap",
     "target_name": "OAuth Profile for Delegated AI Agent Authorization",
     "relation_label": "Depended on by",
     "delta": "DAAP requires RFC 8414 authorization server metadata (publishing jwks_uri) and adds no new well-known URI of its own.",
     "item_md": "**[OAuth Profile for Delegated AI Agent Authorization](/protocols/daap/)** (Depended on by) — DAAP requires RFC 8414 authorization server metadata (publishing jwks_uri) and adds no new well-known URI of its own."
    },
    {
     "target_id": "aap",
     "target_name": "Agent Authorization Profile",
     "relation_label": "Complements",
     "delta": "Clients locate the authorization server through RFC 8414 metadata, and the profile adds no well-known file of its own.",
     "item_md": "**[Agent Authorization Profile](/protocols/aap/)** (Complements) — Clients locate the authorization server through RFC 8414 metadata, and the profile adds no well-known file of its own."
    },
    {
     "target_id": "wimse-workload-identity-metadata",
     "target_name": "Workload Identity Metadata",
     "relation_label": "Peer alternative",
     "delta": "RFC 9728 and RFC 8414 describe an OAuth protected resource and its authorization server, while this draft points a workload credential at a separate metadata endpoint.",
     "item_md": "**[Workload Identity Metadata](/protocols/wimse-workload-identity-metadata/)** (Peer alternative) — RFC 9728 and RFC 8414 describe an OAuth protected resource and its authorization server, while this draft points a workload credential at a separate metadata endpoint."
    },
    {
     "target_id": "oauth-id-continuation",
     "target_name": "Identity Continuation Assertion for OAuth 2.0 Token Exchange",
     "relation_label": "Complements",
     "delta": "The continuation assertion is an RFC 8693 subject token, and authorization-server metadata remains the discovery document for the token endpoint.",
     "item_md": "**[Identity Continuation Assertion for OAuth 2.0 Token Exchange](/protocols/oauth-id-continuation/)** (Complements) — The continuation assertion is an RFC 8693 subject token, and authorization-server metadata remains the discovery document for the token endpoint."
    },
    {
     "item_md": "**[Permit protocols](/category/permit/)** — Category index for `permit` standards."
    }
   ],
   "v05_compiled_md": "---\nid: oauth-metadata-for-agents\ntitle: \"OAuth Protected Resource and Authorization Server Metadata (as used for agent authorization)\"\ntier: flagship\nlifecycle_status: published_standard\ncategory: permit\nform: well-known-file\nwire_archetype: identity_auth_crypto\nspec_url: https://www.rfc-editor.org/rfc/rfc9728.html\nlast_checked: 2026-11-12\n---\n\n# OAuth Protected Resource and Authorization Server Metadata (as used for agent authorization)\n\n**Category:** [Permit](/category/permit/) (`permit`) · **Form:** JSON well-known metadata file (`well-known-file`) · **Last checked:** 2026-11-12\n\n> *This article covers the agent-authorization profile of IETF RFC 9728 (OAuth 2.0 Protected Resource Metadata) and RFC 8414 (OAuth 2.0 Authorization Server Metadata), as mandated by the [Model Context Protocol](/protocols/mcp/) authorization specification (`2026-07-28`). For URL-based OAuth client identifiers used when an agent and server have no prior relationship, see [OAuth Client ID Metadata Documents (CIMD)](/protocols/oauth-cimd/). [1][2][3][4]*\n\n> **In brief:** Paired OAuth Protected Resource Metadata and Authorization Server Metadata provide a two-step discovery flow that lets AI agents and MCP clients automatically locate the login and token endpoints for an unfamiliar API or tool server at runtime. Instead of hardcoding OAuth URLs for every integration, an agent follows the server's `WWW-Authenticate` challenge to `/.well-known/oauth-protected-resource` and then fetches `/.well-known/oauth-authorization-server` to verify the trusted issuer and obtain its `authorization_endpoint` and `token_endpoint`. [1][2][3]\n\n**OAuth Protected Resource and Authorization Server Metadata (as used for agent authorization)** pairs two IETF Standards Track specifications—RFC 9728 (*OAuth 2.0 Protected Resource Metadata*, April 2025) and RFC 8414 (*OAuth 2.0 Authorization Server Metadata*, June 2018)—so AI agents and OAuth clients can dynamically discover a protected resource's authorization servers and endpoint capabilities without pre-configured endpoints. [1][2] When an unauthenticated request hits a protected resource, the server returns an HTTP `401` `WWW-Authenticate` header carrying `resource_metadata`, or the client probes `GET /.well-known/oauth-protected-resource`. [1] The client reads `authorization_servers` from that JSON response and fetches `GET /.well-known/oauth-authorization-server` over HTTPS (`application/json`) to obtain the issuer's endpoints and supported capabilities. [1][2] RFC 8414 generalized OpenID Connect Discovery 1.0 for wider OAuth 2.0 deployments, and RFC 9728 added resource-side discovery alongside the optional `protected_resources` authorization-server array. [1][2] The Model Context Protocol (`2026-07-28`) authorization specification mandates RFC 9728 on MCP servers and requires MCP clients to support both RFC 8414 and OpenID Connect Discovery 1.0. [3]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Permit](/category/permit/) (`permit`) |\n| **Form** | JSON well-known metadata file (`well-known-file`) |\n| **Originated by** | RFC 9728: M.B. Jones, P. Hunt, and A. Parecki (April 2025). RFC 8414: M. Jones, N. Sakimura, and J. Bradley (June 2018). [1][2] |\n| **Governed by** | IETF. Both are Internet Standards Track documents, represent the consensus of the IETF community, and were approved for publication by the IESG. [1][2] |\n| **Track** | IETF Standards Track (RFC 9728 and RFC 8414) [1][2] |\n| **IETF tracker** | RFC 9728 (published April 2025, Standards Track) and RFC 8414 (June 2018, Standards Track) [1][2] |\n| **Status** | Proposed Standard (RFC 9728, April 2025; RFC 8414, June 2018) [1][2][5][6] |\n| **Version** | RFC 9728 (April 2025); RFC 8414 (June 2018) [1][2] |\n| **Headers** | `WWW-Authenticate` parameter `resource_metadata` [1] |\n| **Message format** | JSON object (`application/json`) [1][2] |\n| **IANA registration** | `oauth-protected-resource` (permanent; change controller IETF); `oauth-authorization-server` (change controller IESG) [1][2] |\n| **Specification** | [OAuth 2.0 Protected Resource Metadata](https://www.rfc-editor.org/rfc/rfc9728.html); [OAuth 2.0 Authorization Server Metadata](https://www.rfc-editor.org/rfc/rfc8414.html) [1][2] |\n| **Found at** | `GET /.well-known/oauth-protected-resource`; `GET /.well-known/oauth-authorization-server` (that path must use `https`) [1][2] |\n| **Licence** | BCP 78 and the IETF Trust Legal Provisions. Code components: Revised BSD (RFC 9728); Simplified BSD (RFC 8414). [1][2] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Protected resource discovery and authorization server metadata order](#protected-resource-discovery-and-authorization-server-metadata-order)\n3. [Client ID Metadata Documents, Dynamic Client Registration, and MCP profiles](#client-id-metadata-documents-dynamic-client-registration-and-mcp-profiles)\n4. [Counterparts and related standards](#counterparts-and-related-standards)\n5. [Adoption and ecosystem](#adoption-and-ecosystem)\n6. [See also](#see-also)\n7. [References](#references)\n\n---\n\n## Problem and scope\n\nRFC 9728 is intended to be deployed where the client has no prior knowledge about the resource server, and where the resource server might or might not have prior knowledge about the client. How the client obtains the protected resource's location is out of scope for RFC 9728. How the client chooses an authorization server is out of scope for RFC 8414. [1][2] Together, RFC 9728 and RFC 8414 establish a two-hop, cryptographically bound discovery chain: the protected resource's metadata document binds its canonical `resource` identifier to one or more trusted `authorization_servers` issuer URLs, and each authorization server's metadata document verifies its `issuer` identifier while publishing `authorization_endpoint` and `token_endpoint`. [1][2] How the client identifier is established at the authorization server is out of scope for RFC 9728. RFC 9728 is intentionally as parallel as possible to OAuth 2.0 Dynamic Client Registration and to OAuth 2.0 Authorization Server Metadata. A URL used as `client_id`, which the authorization server fetches, is specified separately. [1][7]\n\n### Protected resource metadata discovery\n\n```mermaid\nsequenceDiagram\n    participant Client\n    participant RS as Resource Server\n    participant AS as Authorization Server\n    Client->>RS: 1. Resource request without an access token\n    RS-->>Client: 2. WWW-Authenticate with resource metadata URL\n    Client->>RS: 3. Fetch protected resource metadata\n    RS-->>Client: 4. Protected resource metadata response\n    Note over Client: 5. Validate metadata and build the AS metadata URL\n    Client->>AS: 6. Fetch authorization server metadata\n    AS-->>Client: 7. Authorization server metadata response\n    Note over Client,AS: 8-9. Authorization code flow; client obtains an access token\n    Client->>RS: 10. Resource request with the access token\n    RS-->>Client: 11. Protected resource response\n```\n\n*The resource server returns `WWW-Authenticate` with the protected-resource metadata URL. The client fetches that document, then authorization-server metadata, then retries with an access token. [1]*\n\n### RFC 9728 protected resource metadata at /.well-known/oauth-protected-resource\n\n```json\n{\n \"resource\":\n   \"https://resource.example.com\",\n \"authorization_servers\":\n   [\"https://as1.example.com\",\n    \"https://as2.example.net\"],\n \"bearer_methods_supported\":\n   [\"header\", \"body\"],\n \"scopes_supported\":\n   [\"profile\", \"email\", \"phone\"],\n \"resource_documentation\":\n   \"https://resource.example.com/resource_documentation.html\"\n}\n```\n\n*Non-normative protected resource metadata for `/.well-known/oauth-protected-resource`, including `authorization_servers`, `bearer_methods_supported`, and `scopes_supported`. [1]*\n\n---\n\n## Protected resource discovery and authorization server metadata order\n\nWhen an HTTP 401 `WWW-Authenticate` response includes `resource_metadata`, the client fetches that URL directly; otherwise it probes `/.well-known/oauth-protected-resource` via path insertion (or at the host root when the resource URL has no path). After selecting an issuer from `authorization_servers`, the client probes path-aware `/.well-known/oauth-authorization-server` and `/.well-known/openid-configuration` endpoints and accepts the metadata document only if its `issuer` field matches the expected issuer URL. [1][2][8]\n\n- **HTTP 401 resource_metadata:** RFC 9728 defines the `resource_metadata` parameter inside the `WWW-Authenticate` response header (for example, `WWW-Authenticate: Bearer resource_metadata=\"https://resource.example.com/.well-known/oauth-protected-resource\"`). Conforming MCP clients inspect `401 Unauthorized` responses and prioritize the `resource_metadata` URL whenever present. [1][8]\n- **Path insertion and root probe:** With no path, the request is `GET /.well-known/oauth-protected-resource`. For `https://resource.example.com/resource1`, RFC 9728 inserts the suffix as `GET /.well-known/oauth-protected-resource/resource1`. MCP then tries path insertion at `https://example.com/.well-known/oauth-protected-resource/public/mcp`, then the root `https://example.com/.well-known/oauth-protected-resource`. [1][8]\n- **resource and authorization_servers:** The returned `resource` property must equal the identifier into which the well-known suffix was inserted, or—after a `resource_metadata` header fetch—the URL the client requested from the resource server. While `authorization_servers` is optional in base RFC 9728, the MCP profile requires at least one entry; when multiple independent authorization servers are listed, the client selects which server to use and maintains separate registration state per server. [1][8]\n- **Metadata order, issuer matching, and security considerations:** For an issuer URL with a path component (such as `https://auth.example.com/tenant1`), MCP clients probe `https://auth.example.com/.well-known/oauth-authorization-server/tenant1`, then `https://auth.example.com/.well-known/openid-configuration/tenant1`, and finally `https://auth.example.com/tenant1/.well-known/openid-configuration` (whereas a pathless issuer probes `/.well-known/oauth-authorization-server` before `/.well-known/openid-configuration`, matching RFC 8414's fallback rule). `issuer` must match, so `https://attacker.example/.well-known/oauth-authorization-server` naming `https://honest.example` is rejected. Under RFC 9728 Section 7, implementations must support TLS (`BCP195`) and validate the server TLS certificate (`RFC9525`) against the resource-identifier URL to prevent adversary-in-the-middle and DNS-based attacks; separately, under Section 7.3, the client must ensure the request prefix exactly matches the returned `resource` value to block impersonation via a metadata document that copies a legitimate resource identifier and substitutes attacker-chosen endpoints. Under Section 7.4, if a client expects to interact with multiple resource servers, both client and authorization server should use `RFC8707` audience-restricted access tokens, whereas MCP `2026-07-28` independently requires (`MUST`) MCP clients to implement `RFC 8707` Resource Indicators. Determining whether an authorization server in `authorization_servers` is trustworthy is out of scope (an inappropriate server enables an adversary-in-the-middle proxy), and user-selected URLs carry phishing risks. In MCP `2026-07-28`, authorization servers `SHOULD` include the `RFC9207` `iss` parameter and `MUST` set `authorization_response_iss_parameter_supported` to `true` when they do, while clients `MUST` apply the `RFC9207` Section 2.4 check before transmitting an authorization code. [1][2][3][8]\n\n---\n\n## Client ID Metadata Documents, Dynamic Client Registration, and MCP profiles\n\nRFC 9728 leaves the client identifier out of scope. `draft-ietf-oauth-client-id-metadata-document` uses a URL as `client_id`: JSON the authorization server fetches, with no prior dynamic client registration. MCP's `2026-07-28` profile prefers Client ID Metadata Documents over RFC 7591 Dynamic Client Registration for public clients with no prior relationship. Servers advertise `client_id_metadata_document_supported`, and document fetches are subject to server-side request forgery (SSRF) and HTTP caching limits. [1][3][4][7]\n\n- **URL client_id document:** The JSON document must contain `client_id` matching the Client Identifier URL and the URL the authorization server retrieved. The response must be HTTP 200. A URL client identifier needs no prior dynamic client registration. [7]\n- **Required JSON properties:** MCP requires `client_id`, `client_name`, and `redirect_uris`. `client_id` must be https with a path, such as `https://example.com/client.json`, and must equal the document URL. Public documents omit `client_secret` and `client_secret_expires_at`. `token_endpoint_auth_method` omits `client_secret_basic`, `client_secret_post`, and `client_secret_jwt`. [4][7]\n- **Why MCP profiles prefer it:** MCP's `2026-07-28` client-registration specification designates Client ID Metadata Documents for when client and server have no prior relationship, the most common case. Clients supporting all options follow the priority order: pre-registered credentials when available, then Client ID Metadata Documents when `client_id_metadata_document_supported` is set, then Dynamic Client Registration via `registration_endpoint`. Dynamic Client Registration is deprecated and kept for backwards compatibility with earlier MCP versions and servers without Client ID Metadata Documents. Public clients set `token_endpoint_auth_method` to `none`; if unset, the server assumes `none`, and the client is public. [3][4][7]\n- **Advertisement, SSRF, and cache:** `client_id_metadata_document_supported` advertises that a `client_id` URL can be fetched. MCP clients should check the flag and may fall back to Dynamic Client Registration or pre-registration. Servers must not fetch the document URL, or a URL inside it, at a special-use IP address. They may cache `jwks_uri` and `logo_uri`, should honor HTTP cache headers, should cap duration, and must not cache error responses. [4][7]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **OpenID Connect Discovery 1.0** | `OpenID Connect Discovery 1.0` | Builds on | RFC 8414 generalizes OpenID Connect Discovery 1.0 metadata for wider OAuth 2.0 use while staying compatible. The `openid-configuration` suffix names a general OAuth feature, not an OpenID-only one. [2] |\n| **Well-Known URIs** | `RFC 8615` | Builds on | RFC 9728 publishes protected-resource metadata at an RFC 8615 `.well-known` URI, inserting `/.well-known/oauth-protected-resource` between the resource host and any path. [1] |\n| **Dynamic Client Registration** | `RFC 7591` | Builds on | RFC 9728 parallels RFC 7591, which lets a client give its metadata to an authorization server. RFC 8414 likewise parallels how RFC 7591 generalized OpenID Connect dynamic registration metadata. [1][2] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | 2026-07-28 MCP spec requires servers to implement RFC 9728. Authorization servers must offer RFC 8414 or OpenID Connect Discovery 1.0; clients must support both, then obtain a client ID. [3] |\n| **[auth.md](/protocols/auth-md/)** | Complements | auth.md lets AI agents register for web services. Its skill generates auth.md and Protected Resource Metadata from a codebase, while auth-md.com has no APIs, protected resources, or registration endpoints. [9] |\n| **[Identity Assertion JWT Authorization Grant (ID-JAG)](/protocols/identity-assertion-authz-grant/)** | Complements | OAuth 2.0 Authorization Server Metadata (`RFC 8414`) can advertise support for the `urn:ietf:params:oauth:grant-profile:id-jag` enterprise identity assertion grant profile alongside `urn:ietf:params:oauth:grant-type:jwt-bearer`, as served in production by `mcp.linear.app`. [2][10] |\n| **[OAuth Client ID Metadata Document](/protocols/oauth-cimd/)** | Complements | Whereas RFC 9728 and RFC 8414 publish resource-server and authorization-server discovery documents, `draft-ietf-oauth-client-id-metadata-document-03` (2 November 2026) lets an OAuth client use an HTTPS URL as its `client_id` and adds `client_id_metadata_document_supported` to RFC 8414 metadata. [7] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (12 probed or cited examples; non-exhaustive).*\n\n### Protected resources publishing RFC 9728 metadata\n\n| Actor | Role | Status | /.well-known/oauth-protected-resource fields | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Stripe** | Protected resource | Live (HTTP 200) · checked 2026-10-31 | `resource` `https://mcp.stripe.com`, `scopes_supported` `mcp`, `authorization_servers` `https://access.stripe.com/mcp`. | [Stripe protected resource metadata](https://mcp.stripe.com/.well-known/oauth-protected-resource) [11] |\n| **Box** | Protected resource | Live (HTTP 200) · checked 2026-11-03 | `resource` `https://mcp.box.com/`, `resource_name` `Box Model Context Protocol Server`, `authorization_servers` `https://api.box.com/`, `bearer_methods_supported` `header`. | [Box protected resource metadata](https://mcp.box.com/.well-known/oauth-protected-resource) [12] |\n| **Intercom** | Protected resource | Live (HTTP 200) · checked 2026-11-03 | `resource` and `authorization_servers` `https://mcp.intercom.com`; `scopes_supported` `mcp`, `operator`; `bearer_methods_supported` `header`. | [Intercom protected resource metadata](https://mcp.intercom.com/.well-known/oauth-protected-resource) [13] |\n| **Vercel** | Protected resource | Live (HTTP 200) · checked 2026-11-03 | `resource` `https://mcp.vercel.com/`, `resource_name` `Vercel MCP`, `authorization_servers` `https://vercel.com`, `scopes_supported` `openid`. Any MCP client can connect by publishing a Client ID Metadata Document and using that document's HTTPS URL as its OAuth `client_id`, without a prior Vercel review of the client. | [Vercel protected resource metadata](https://mcp.vercel.com/.well-known/oauth-protected-resource) [14] · [Vercel MCP CIMD changelog](https://vercel.com/changelog/vercel-mcp-now-supports-client-id-metadata-documents) [15] |\n\n### Agent hosts, clients & skills discovering metadata\n\n| Actor | Role | Status | Discovery sequence & fallback rules | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **auth-md skill** | Agent skill | Partial · checked 2026-10-31 | Generates and validates `auth.md` plus Protected Resource Metadata from codebase; static site hosts no registration endpoints. | [auth.md](https://auth-md.com/auth.md) [9] |\n\n### Authorization servers publishing RFC 8414 metadata\n\n| Actor | Role | Status | /.well-known/oauth-authorization-server endpoints | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Cloudflare** | Authorization server | Live (HTTP 200) · checked 2026-10-31 | `issuer` `https://mcp.cloudflare.com`; `S256`; `authorization_code`, `refresh_token`; `client_id_metadata_document_supported` `true`; `registration_endpoint`; 403 scopes. | [Cloudflare authorization server metadata](https://mcp.cloudflare.com/.well-known/oauth-authorization-server) [16] |\n| **Linear** | Authorization server | Live (HTTP 200) · checked 2026-11-03 | `issuer` `https://mcp.linear.app`; `S256`; `authorization_code`, `refresh_token`, `jwt-bearer` (`id-jag`); `client_id_metadata_document_supported` `true`; `resource_metadata`. | [Linear authorization server metadata](https://mcp.linear.app/.well-known/oauth-authorization-server) [10] |\n| **Notion** | Authorization server | Live (HTTP 200) · checked 2026-11-03 | `issuer` `https://mcp.notion.com`; `S256`; `jwt-bearer` (`id-jag`); `private_key_jwt`; `client_id_metadata_document_supported` `true`; `protected_resources`. | [Notion authorization server metadata](https://mcp.notion.com/.well-known/oauth-authorization-server) [17] |\n| **PayPal** | Authorization server | Live (HTTP 200) · checked 2026-11-03 | `issuer` `https://mcp.paypal.com`; `S256`; `authorization_code`, `refresh_token`; `registration_endpoint`; `client_id_metadata_document_supported` `false`. | [PayPal authorization server metadata](https://mcp.paypal.com/.well-known/oauth-authorization-server) [18] |\n| **Asana** | Authorization server | Live (HTTP 200) · checked 2026-11-03 | `issuer` `https://mcp.asana.com`; PKCE `plain` and `S256`; `authorization_code`, `refresh_token`; `registration_endpoint`. | [Asana authorization server metadata](https://mcp.asana.com/.well-known/oauth-authorization-server) [19] |\n| **Wix** | Authorization server | Live (HTTP 200) · checked 2026-11-03 | `issuer` `https://mcp.wix.com`; PKCE `plain` and `S256`; `authorization_code`, `refresh_token`; `registration_endpoint`. | [Wix authorization server metadata](https://mcp.wix.com/.well-known/oauth-authorization-server) [20] |\n| **Apify** | Authorization server | Live (HTTP 200) · checked 2026-11-03 | `issuer` `https://console-backend.apify.com` (mismatches `https://mcp.apify.com`, so RFC 8414 §3.3 requires a client probing `https://mcp.apify.com` to reject this document and instead resolve metadata for the issuer named in protected-resource metadata); `S256`; `device_code`; `client_id_metadata_document_supported` `true`. | [Apify authorization server metadata](https://mcp.apify.com/.well-known/oauth-authorization-server) [21] · [RFC 8414](https://www.rfc-editor.org/rfc/rfc8414.html) [2] |\n\n---\n\n## See also\n\n- **[MCP Server Cards](/protocols/mcp-server-cards/)** *(Complements)* — OAuth protected-resource and authorization-server metadata tells the client how agent authorization is discovered, while the Server Card describes the MCP server before the client connects.\n- **[AI Identity Management System (AIMS)](/protocols/wimse-aims/)** *(Depended on by)* — OAuth 2.0 Protected Resource Metadata (RFC 9728, April 2025) is a published metadata format; AIMS states that when an Agent is invoking a Tool, the Agent may use OAuth 2.0 Protected Resource Metadata to discover how the resource is protected.\n- **[Personal Agent Protocol](/protocols/personal-agent-protocol/)** *(Depended on by)* — Poppy reads the company's OAuth authorization-server metadata for the token endpoint, and the company document itself is /.well-known/poppy.json with protocol_version and organization.name.\n- **[AAuth (Hardt)](/protocols/aauth-hardt/)** *(Peer alternative)* — RFC 9728 and RFC 8414 publish OAuth protected-resource and authorization-server metadata, while AAuth publishes its own aauth-resource, aauth-agent, aauth-person, and aauth-access well-known documents.\n- **[Workload Authorization Grant (WAG)](/protocols/workload-authz-grant/)** *(Depended on by)* — RFC 9728 defines protected-resource metadata, and RFC 8414 defines authorization-server metadata at `/.well-known/oauth-authorization-server`, including grant_types_supported. Published draft-carleton-workload-authz-grant-02 (Section 8) says an authorization server publishing RFC 8414 metadata SHOULD include urn:ietf:params:oauth:grant-profile:wag in authorization_grant_profiles_supported and MUST also include urn:ietf:params:oauth:grant-type:jwt-bearer in grant_types_supported; Section 11 requests IANA registration of oauth-wag+jwt, urn:ietf:params:oauth:token-type:wag, and urn:ietf:params:oauth:grant-profile:wag (requests, not completed IANA registrations).\n- **[Agent Authorization Grant](/protocols/aauth/)** *(Complements)* — The grant is an OAuth 2.1 agent_authorization_endpoint extension that defines no new well-known URI of its own and instead publishes its endpoint and jwks_uri/scope_descriptions_uri in RFC 8414 and RFC 9728 metadata.\n- **[OAuth Profile for Delegated AI Agent Authorization](/protocols/daap/)** *(Depended on by)* — DAAP requires RFC 8414 authorization server metadata (publishing jwks_uri) and adds no new well-known URI of its own.\n- **[Agent Authorization Profile](/protocols/aap/)** *(Complements)* — Clients locate the authorization server through RFC 8414 metadata, and the profile adds no well-known file of its own.\n- **[Workload Identity Metadata](/protocols/wimse-workload-identity-metadata/)** *(Peer alternative)* — RFC 9728 and RFC 8414 describe an OAuth protected resource and its authorization server, while this draft points a workload credential at a separate metadata endpoint.\n- **[Identity Continuation Assertion for OAuth 2.0 Token Exchange](/protocols/oauth-id-continuation/)** *(Complements)* — The continuation assertion is an RFC 8693 subject token, and authorization-server metadata remains the discovery document for the token endpoint.\n- **Category:** [Permit protocols](/category/permit/)\n\n---\n\n## References\n\n1. M.B. Jones (Self-Issued Consulting), P. Hunt (Independent Identity, Inc.), and A. Parecki (Okta), *RFC 9728: OAuth 2.0 Protected Resource Metadata* (published April 2025; Internet Standards Track) — <https://www.rfc-editor.org/rfc/rfc9728.html>\n2. M. Jones (Microsoft), N. Sakimura (NRI), and J. Bradley (Yubico), *RFC 8414: OAuth 2.0 Authorization Server Metadata* (June 2018; Internet Standards Track) — <https://www.rfc-editor.org/rfc/rfc8414.html>\n3. Model Context Protocol, *Authorization* (specification version 2026-07-28) — <https://modelcontextprotocol.io/specification/2026-07-28/basic/authorization>\n4. Model Context Protocol, *Client Registration* (specification version 2026-07-28) — <https://modelcontextprotocol.io/specification/2026-07-28/basic/authorization/client-registration>\n5. IETF Datatracker, *RFC 9728: OAuth 2.0 Protected Resource Metadata* (RFC - Proposed Standard (April 2025)) — <https://datatracker.ietf.org/doc/html/rfc9728>\n6. IETF Datatracker, *RFC 8414: OAuth 2.0 Authorization Server Metadata* (RFC - Proposed Standard (June 2018)) — <https://datatracker.ietf.org/doc/html/rfc8414>\n7. A. Parecki (Okta) and E. Smith (independent), *OAuth Client ID Metadata Document (draft-ietf-oauth-client-id-metadata-document-03)* (draft-ietf-oauth-client-id-metadata-document-03, 2 November 2026; expires 6 May 2027) — <https://www.ietf.org/archive/id/draft-ietf-oauth-client-id-metadata-document-03.txt>\n8. Model Context Protocol, *Authorization Server Discovery (MCP Specification 2026-07-28)* (2026-07-28) — <https://modelcontextprotocol.io/specification/2026-07-28/basic/authorization/authorization-server-discovery>\n9. auth.md Project, *auth.md* (last-modified 2026-10-08) — <https://auth-md.com/auth.md>\n10. Linear, *OAuth 2.0 Authorization Server Metadata* (fetched 2026-11-03) — <https://mcp.linear.app/.well-known/oauth-authorization-server>\n11. Stripe, *OAuth 2.0 Protected Resource Metadata* (response dated Sat, 31 Oct 2026; fetched 2026-10-31) — <https://mcp.stripe.com/.well-known/oauth-protected-resource>\n12. Box, *OAuth 2.0 Protected Resource Metadata* (fetched 2026-11-03) — <https://mcp.box.com/.well-known/oauth-protected-resource>\n13. Intercom, *OAuth 2.0 Protected Resource Metadata* (fetched 2026-11-03) — <https://mcp.intercom.com/.well-known/oauth-protected-resource>\n14. Vercel, *OAuth 2.0 Protected Resource Metadata* (fetched 2026-11-03) — <https://mcp.vercel.com/.well-known/oauth-protected-resource>\n15. Josh Souphanthong and Mark Roberts (Vercel), *Vercel MCP now supports Client ID Metadata Documents* (published 2 Nov 2026) — <https://vercel.com/changelog/vercel-mcp-now-supports-client-id-metadata-documents>\n16. Cloudflare, *OAuth 2.0 Authorization Server Metadata* (response dated Sat, 31 Oct 2026; fetched 2026-10-31) — <https://mcp.cloudflare.com/.well-known/oauth-authorization-server>\n17. Notion, *OAuth 2.0 Authorization Server Metadata* (fetched 2026-11-03) — <https://mcp.notion.com/.well-known/oauth-authorization-server>\n18. PayPal, *OAuth 2.0 Authorization Server Metadata* (fetched 2026-11-03) — <https://mcp.paypal.com/.well-known/oauth-authorization-server>\n19. Asana, *OAuth 2.0 Authorization Server Metadata* (fetched 2026-11-03) — <https://mcp.asana.com/.well-known/oauth-authorization-server>\n20. Wix, *OAuth 2.0 Authorization Server Metadata* (fetched 2026-11-03) — <https://mcp.wix.com/.well-known/oauth-authorization-server>\n21. Apify, *OAuth 2.0 Authorization Server Metadata* (fetched 2026-11-03) — <https://mcp.apify.com/.well-known/oauth-authorization-server>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "",
   "adoption": {
    "level": "observed",
    "by": "The New York Times, BBC, The Atlantic, Vox Media (vox.com), GitHub, OpenAI, Anthropic, Google, and 10 other verified implementations",
    "probe_run": null
   },
   "aliases": [
    "AI Crawler User-Agent Tokens",
    "AI robots.txt product tokens"
   ],
   "analog": "The original robots.txt User-agent convention, extended per-vendor for AI",
   "collisions": [],
   "discovery": {
    "mechanism": "Fixed UTF-8 text/plain file at the root of each host",
    "path": "/robots.txt"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.rfc-editor.org/rfc/rfc9309.html",
     "claim": "M. Koster, G. Illyes, H. Zeller, and L. Sassman (IETF), *RFC 9309: Robots Exclusion Protocol*, published September 2022",
     "date": null,
     "quote": "Crawlers set their own name, which is called a product token, to find relevant groups. / Group: One or more user-agent lines that are followed by one or more rules. / The group is terminated by a user-agent line or end of file. / named \"/robots.txt\" / This document is a product of the Internet Engineering Task Force (IETF). / Category: Standards Track / originally defined by Martijn Koster in 1994 / Published: September 2022 / The file MUST be UTF-8 encoded / Internet Media Type \"text/plain\" / Crawlers MUST use case-insensitive matching to find the group that matches the product token and then obey the rules of the group. / The product token SHOULD be a substring of the identification string that the crawler sends to the service. / The matching SHOULD be case sensitive. The matching MUST start with the first octet of the path. The most specific match found MUST be used. The most specific match is the match that has the most octets. / Published: September 2022 ISSN: 2070-1721 Authors: M. Koster G. Illyes Google LLC H. Zeller Google LLC L. Sassman / This is an Internet Standards Track document. / RFC: 9309 Category: Standards Track Published: September 2022 / The product token MUST contain only uppercase and lowercase letters (\"a-z\" and \"A-Z\"), underscores (\"_\"), and hyphens (\"-\"). / The file MUST be UTF-8 encoded (as defined in [RFC3629]) and Internet Media Type \"text/plain\" (as defined in [RFC2046]). / rule = *WS (\"allow\" / \"disallow\") *WS \":\" *WS (path-pattern / empty-pattern) EOL / RFC 9309 Robots Exclusion Protocol / The rules MUST be accessible in a file named \"/robots.txt\" (all lowercase) in the top-level path of the service. / \"scheme:[//authority]/robots.txt\" / Copyright (c) 2022 IETF Trust and the persons identified as the document authors. / Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions / crawlers are requested to honor when accessing URIs. / These rules are not a form of access authorization. / The Robots Exclusion Protocol is not a substitute for valid content security measures. / If there is more than one group matching the user-agent, the matching groups' rules MUST be combined into one group / the longest one is used for matching / Allow: /example/page/ / Disallow: /example/page/disallowed.gif / The most specific match is the match that has the most octets. / If an \"allow\" rule and a \"disallow\" rule are equivalent, then the \"allow\" rule SHOULD be used. / If no match is found amongst the rules in a group for a matching user-agent or there are no rules in the group, the URI is allowed. / The /robots.txt URI is implicitly allowed. / If no matching group exists, crawlers MUST obey the group with a user-agent line with the \"*\" value, if present. / If no group matches the product token and there is no group with a user-agent line with the \"*\" value, or no groups are present at all, no rules apply. / MUST be percent-encoded / Listing paths in the robots.txt file exposes them publicly and thus makes the paths discoverable. / Crawlers SHOULD impose a parsing limit / The parsing limit MUST be at least 500 kibibytes / disallow / in the case of HTTP [RFC9110], the product token SHOULD be a substring in the User-Agent header.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://developers.openai.com/api/docs/bots",
     "claim": "OpenAI, *Overview of OpenAI Crawlers*, fetched 2026-10-30",
     "date": null,
     "quote": "OpenAI uses OAI-SearchBot and GPTBot robots.txt tags to enable webmasters to manage how their sites and content work with AI. / a webmaster can allow OAI-SearchBot in order to appear in search results while disallowing GPTBot to indicate that crawled content should not be used for training OpenAI's generative AI foundation models. / Disallowing GPTBot indicates a site's content should not be used in training generative AI foundation models. / Each setting is independent of the others / OpenAI also uses ChatGPT-User for certain user actions in ChatGPT and Custom GPTs. / user-agent / Because these actions are initiated by a user, robots.txt rules may not apply. / ChatGPT-User / Because these actions are initiated by a user / Sites that are opted out of OAI-SearchBot will not be shown in ChatGPT search answers, though can still appear as navigational links. / GPTBot is used to make our generative AI foundation models more useful and safe. It is used to crawl content that may be used in training our generative AI foundation models. / OAI-SearchBot is for search. OAI-SearchBot is used to surface websites in search results in ChatGPT's search features. / ChatGPT-User is not used for crawling the web in an automatic fashion. Because these actions are initiated by a user, robots.txt rules may not apply. / OAI-AdsBot is used to validate the safety of web pages submitted as ads on ChatGPT.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://www.searchenginejournal.com/google-illyes-robots-txt-crawling-ai-training/593957/",
     "claim": "Matt G. Southern (Search Engine Journal), *Google Explains The Limit Of Robots.txt For AI Content Use*, published 2026-10-22",
     "date": null,
     "quote": "Google-Extended's meaning as a usage control comes from Google's documentation for its own products, rather than RFC 9309. / robots.txt is an access preference protocol. / doesn't dictate what a system does with the data after it has already crawled it.",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://www.bbc.co.uk/robots.txt",
     "claim": "BBC, *robots.txt*, fetched 2026-10-30",
     "date": null,
     "quote": "User-agent: ClaudeBot\nDisallow: /\n\nUser-agent: Claude-Web\nDisallow: /\n\nUser-agent: anthropic-ai\nDisallow: /\n\nUser-agent: cohere-ai\nDisallow: /\n\nUser-agent: Bytespider\nDisallow: /\n\nUser-agent: PetalBot\nDisallow: /\n\nUser-agent: Scrapy\nDisallow: /\n\nUser-agent: Applebot-Extended\nDisallow: /\n\nUser-agent: GPTBot\nDisallow: /\n\nUser-agent: ChatGPT-User\nDisallow: /\n\nUser-agent: Google-CloudVertexBot\nDisallow: /\n\nUser-agent: Google-Extended\nDisallow: /\n\nUser-Agent: PerplexityBot\nDisallow: /\n\nUser-agent: Perplexity-User\nDisallow: /\n\nUser-agent: meta-externalagent\nDisallow: /\n\nUser-agent: OAI-SearchBot\nDisallow: / / User-agent: GPTBot / User-agent: ChatGPT-User / User-agent: OAI-SearchBot / User-agent: ClaudeBot / User-agent: anthropic-ai / User-agent: Google-Extended / User-agent: Google-CloudVertexBot / User-agent: Applebot-Extended / User-agent: CCBot / User-agent: Amazonbot / User-agent: cohere-ai / User-agent: Perplexity-User / User-Agent: PerplexityBot / User-agent: meta-externalagent / Disallow: / / User-agent: Scrapy / User-agent: PetalBot",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://www.ietf.org/archive/id/draft-ietf-aipref-attach-05.txt",
     "claim": "G. Illyes (Google) and M. Thomson (Mozilla), *Associating AI Usage Preferences with Content in HTTP (draft-ietf-aipref-attach-05)*, 19 August 2026",
     "date": null,
     "quote": "draft-ietf-aipref-attach-05 / 19 August 2026 / This document defines attachment methods using the Robots Exclusion Protocol and HTTP header fields. / This document updates RFC 9309 to allow for the inclusion of usage preferences. / Content-Usage / The format of a statement of preference is defined in the preference vocabulary / draft-ietf-aipref-vocab-07 / A Vocabulary For Expressing AI Usage Preferences / the longest matching path prefix / Content-Usage: train-ai=n / Allow / Disallow / User-Agent: * Allow: / Content-Usage: train-ai=n",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://developers.google.com/crawling/docs/crawlers-fetchers/google-common-crawlers",
     "claim": "Google, *Google's common crawlers*, updated 2026-10-30",
     "date": null,
     "quote": "Last updated 2026-10-30 UTC. / AIPREF / user-agent: __usage_ai-training / in early 2027 / Google-Extended is a standalone product token / Google-Extended doesn't have a separate HTTP request user agent string. / the robots.txt user-agent token is used in a control capacity. / Google-Extended does not impact a site's inclusion in Google Search nor is it used as a ranking signal in Google Search. / Google-Extended is a standalone product token that web publishers can use to manage whether content Google crawls from their sites may be used for training future generations of Gemini models / Crawling preferences addressed to the Google-CloudVertexBot user agent affect crawls requested by the site owners' for building Vertex AI Agents. It has no effect on Google Search or other products.",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://support.claude.com/en/articles/8896518-does-anthropic-crawl-data-from-the-web-and-how-can-site-owners-block-the-crawler",
     "claim": "Anthropic, *Does Anthropic crawl data from the web, and how can site owners block the crawler?*, published 2026-04-07",
     "date": null,
     "quote": "When a site restricts ClaudeBot access, it signals that the site's future materials should be excluded from our AI model training datasets. / Disabling Claude-SearchBot on your site prevents our system from indexing your content / Disabling Claude-User on your site prevents our system from retrieving your content in response to a user query / ClaudeBot helps enhance the utility and safety of our generative AI models by collecting web content that could potentially contribute to their training. / Claude-User supports Claude AI users. When individuals ask questions to Claude, it may access websites using a Claude-User agent. / Claude-SearchBot navigates the web to improve search result quality for users.",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://support.apple.com/en-us/119829",
     "claim": "Apple Support, *About Applebot*, published 2026-09-04",
     "date": null,
     "quote": "disallowing Applebot-Extended in the robots.txt file. / nosnippet meta tag / Applebot-Extended does not crawl webpages. / Webpages that disallow Applebot-Extended can still be included in search results. / applying the nosnippet meta tag to specific content / may still allow Applebot to crawl your webpages. / Applebot-Extended / Applebot also supports indexing directives delivered via the X-Robots-Tag HTTP response header. / X-Robots-Tag: applebot: nosnippet / Web publishers can opt-out from having their content used to train generative foundation models by disallowing Applebot-Extended in the robots.txt file. / Even if you disallow Applebot-Extended and tag website content with the nosnippet meta tag, your website instructions may still allow Applebot to crawl your webpages.",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://developers.google.com/crawling/docs/crawlers-fetchers/google-user-triggered-fetchers",
     "claim": "Google, *Google's user-triggered fetchers*, updated 2026-08-19",
     "date": null,
     "quote": "these fetchers generally ignore robots.txt rules.",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://docs.perplexity.ai/docs/resources/perplexity-crawlers",
     "claim": "Perplexity, *Perplexity Crawlers*, fetched 2026-10-30",
     "date": null,
     "quote": "this fetcher generally ignores robots.txt rules. / Perplexity-User / PerplexityBot is designed to surface and link websites in search results on Perplexity. It is not used to crawl content for AI foundation models. / When users ask Perplexity a question, it might visit a web page to help provide an accurate answer and include a link to the page in its response. / Perplexity-User controls which sites these user requests can access. / It is not used for web crawling or to collect content for training AI foundation models. / Perplexity-User supports user actions within Perplexity.",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://web.archive.org/web/20260616005830id_/https://developers.facebook.com/docs/sharing/webmasters/web-crawlers/",
     "claim": "Meta, *Meta Web Crawlers*, Wayback capture 2026-06-16",
     "date": null,
     "quote": "The Meta-ExternalFetcher crawler may bypass robots.txt because it performs fetches that were requested by the user. / The Meta-ExternalFetcher crawler fetches individual links at a user's request / The Meta-ExternalAgent crawler crawls the web for use cases such as training foundation AI models or improving products by indexing content directly. / meta-externalagent/1.1 / this crawler may bypass robots.txt rules. / The Meta-WebIndexer crawler navigates the web to improve Meta AI search result quality for users. / The primary purpose of FacebookExternalHit is to crawl the content of an app or website that was shared",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://developers.google.com/search/docs/crawling-indexing/robots/intro",
     "claim": "Google Search Central, *Introduction to robots.txt*, checked 2026-11-05",
     "date": null,
     "quote": "A page that's disallowed in robots.txt can still be indexed if linked to from other sites. / the search result won't have a description / noindex meta tag / use the noindex meta tag or response header",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://developer.amazon.com/docs/amazonbot/amazonbot.html",
     "claim": "Amazon, *Amazon Web Search crawlers*, updated 2026-10-26",
     "date": null,
     "quote": "may be used to train Amazon AI models. / Amazonbot is used to improve our products and services. This helps us provide more accurate information to customers and may be used to train Amazon AI models. / Amzn-SearchBot does not crawl content for generative AI model training. / Because actions taken by Amzn-User can be initiated by a user, it may not follow all robots.txt directives. / Amzn-User does not crawl content for generative AI model training.",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://commoncrawl.org/ccbot",
     "claim": "Common Crawl, *CCBot*, fetched 2026-10-30",
     "date": null,
     "quote": "User-agent: CCBot / Disallow: / / CCBot/2.0 (https://commoncrawl.org/faq/) / IP ranges (v4 and v6) are also provided as JSON at https://index.commoncrawl.org/ccbot.json.",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://crawlcensus.com/bots",
     "claim": "Crawl Census, *Every AI crawler we track*, fetched 2026-11-06",
     "date": null,
     "quote": "Bytespider / Downloads content to train ByteDance LLMs / widely reported to ignore robots.txt directives. / 29,963 sites on record / 48 agents tracked / 2,930 of 29,961 / 2,567 of 29,961 / 2,262 of 29,961 / 614 of 29,961 / Control token with no user agent of its own",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://www.ietf.org/archive/id/draft-ietf-aipref-vocab-08.txt",
     "claim": "P. Keller (Open Future) and M. Thomson, Ed. (Mozilla), *A Vocabulary For Expressing AI Usage Preferences (draft-ietf-aipref-vocab-08)*, 14 September 2026; expires 18 March 2027",
     "date": null,
     "quote": "draft-ietf-aipref-vocab-08 / 14 September 2026 / A Vocabulary For Expressing AI Usage Preferences / train-ai / train-ai=y, search=n",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://blog.cloudflare.com/content-signals-policy/",
     "claim": "Cloudflare, *Giving users choice with Cloudflare's new Content Signals Policy*, published 2025-09-24; modified 2026-07-15",
     "date": null,
     "quote": "Content-Signal: / ai-input / ai-train / This policy defines three content signals - search, ai-input, and ai-train - and their relevance to crawlers. / Content-Signal: search=yes, ai-train=no / managed robots.txt feature for over 3.8 million domains / We will not serve an \"ai-input\" signal for our managed robots.txt customers. / content signals express preferences; they are not technical countermeasures against scraping. / User-Agent: * Content-Signal: search=yes, ai-train=no Allow: /",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-webbotauth-httpsig-protocol/",
     "claim": "T. Meunier (Cloudflare) and S. Major (Google), *draft-ietf-webbotauth-httpsig-protocol — HTTP Message Signatures for automated traffic (IETF Datatracker)*, current tracker, checked 2026-10-30 (latest revision -01 dated 2026-10-29)",
     "date": null,
     "quote": "HTTP Message Signatures for automated traffic",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://www.w3.org/community/reports/tdmrep/CG-FINAL-tdmrep-20240510/",
     "claim": "Laurent Le Meur (EDRLab), *TDM Reservation Protocol (TDMRep)*, Final Community Group Report, 10 May 2024",
     "date": null,
     "quote": "This specification defines a JSON file named tdmrep.json, which MUST be hosted in the /.well-known repository of a Web server. / tdm-reservation is an boolean value. tdm-reservation meaning 1 TDM rights are reserved.",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://rslstandard.org/rsl",
     "claim": "RSL Collective, *Really Simple Licensing (RSL) 1.0 Specification*, fetched 2026-10-30",
     "date": null,
     "quote": "a standardized XML vocabulary and associated discovery and authorization mechanisms for expressing machine-readable usage, licensing, payment, and legal terms / Integrations with existing discovery mechanisms such as robots.txt, HTTP headers, RSS feeds, and HTML",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/what-is-pay-per-crawl/",
     "claim": "Cloudflare, *What is Pay Per Crawl?*, updated 2026-07-28",
     "date": null,
     "quote": "Pay per crawl is a feature of AI Crawl Control that enables site owners to control and monetize AI crawler access to content by setting a price per zone. Each time an AI crawler requests content, they either present payment intent via request headers for successful HTTP 200 access, or receive an HTTP 402 Payment Required response with pricing.",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://github.com/kaylacar/ai-txt/blob/master/ietf/draft-car-ai-txt-wellknown-00.md",
     "claim": "Kayla Cardillo, *draft-car-ai-txt-wellknown-00*, fetched 2026-10-30",
     "date": null,
     "quote": "https://example.com/.well-known/ai.txt / training, scraping, indexing, caching",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://www.nytimes.com/robots.txt",
     "claim": "The New York Times, *robots.txt*, fetched 2026-10-30",
     "date": null,
     "quote": "User-agent: GPTBot / User-agent: OAI-SearchBot / User-agent: ChatGPT-User / User-agent: ClaudeBot / User-agent: Claude-SearchBot / User-agent: Claude-User / User-agent: Google-Extended / User-agent: Google-CloudVertexBot / Allow: /wirecutter/ / Allow: /athletic/ / User-agent: Amazonbot / Disallow: /wirecutter/ / User-agent: PerplexityBot / User-agent: Perplexity-User / User-agent: Applebot-Extended / User-agent: FacebookBot / User-agent: meta-externalagent / User-agent: CCBot / User-agent: cohere-ai / User-agent: DuckAssistBot / Disallow: /",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://www.theatlantic.com/robots.txt",
     "claim": "The Atlantic, *robots.txt*, fetched 2026-10-30",
     "date": null,
     "quote": "ai-train: training or fine-tuning AI models. / Content-signal: search=yes, ai-input=no, ai-train=no / User-agent: Googlebot / User-agent: FacebookBot / User-agent: DuckAssistBot / User-agent: Google-Extended / User-agent: ClaudeBot / User-agent: CCBot / User-agent: Applebot-Extended / User-agent: cohere-ai / User-agent: MistralAI-User / User-agent: GPTBot / User-agent: OAI-SearchBot / Allow: / / User-agent: Claude-SearchBot / User-agent: PerplexityBot / Allow: /sponsored/ / Disallow: /",
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://www.vox.com/robots.txt",
     "claim": "Vox, *robots.txt*, fetched 2026-10-30",
     "date": null,
     "quote": "User-agent: GPTBot / User-agent: Amazonbot / Allow: / / Disallow: / / Allow: /sp/ / Allow: /strategist / User-agent: ClaudeBot / User-agent: Google-Extended / User-agent: Google-CloudVertexBot / User-agent: PerplexityBot / User-agent: Applebot-Extended / User-agent: CCBot / User-agent: FacebookBot / User-agent: MistralAI-User / User-agent: DuckAssistBot / User-agent: cohere-ai / User-agent: AI2Bot",
     "ref": 25
    },
    {
     "label": "[26]",
     "url": "https://github.com/robots.txt",
     "claim": "GitHub, Inc., *GitHub robots.txt*, fetched 2026-10-30",
     "date": null,
     "quote": "User-agent: GPTBot / User-agent: OAI-SearchBot / User-agent: ClaudeBot / User-agent: anthropic-ai / User-agent: PerplexityBot / Crawl-delay: 1 / Disallow: /copilot/ / Disallow: /gist/ / Disallow: /*/archive/",
     "ref": 26
    },
    {
     "label": "[27]",
     "url": "https://developers.cloudflare.com/bots/additional-configurations/managed-robots-txt/",
     "claim": "Cloudflare, *robots.txt setting*, Last updated Nov 2, 2026; fetched 2026-11-11",
     "date": null,
     "quote": "Bot Preference Sync generates managed robots.txt directives from your Search, Agent, and Training policies when at least one policy is set to Block, Block on pages with ads, or, for Training, Disallow. / robots.txt compliance is voluntary. / The file expresses your preferences, but it does not prevent crawlers from accessing your content at a technical level.",
     "ref": 27
    },
    {
     "label": "[28]",
     "url": "https://www.cloudflare.com/press/press-releases/2025/cloudflare-gives-creators-new-tool-to-control-use-of-their-content/",
     "claim": "Cloudflare, *Cloudflare Gives Creators New Tool to Control Use of Their Content*, published 2025-09-24",
     "date": null,
     "quote": "Today, more than 3.8 million domains use Cloudflare's managed robots.txt service to express they do not want their content used for training.",
     "ref": 28
    },
    {
     "label": "[29]",
     "url": "https://docs.mistral.ai/robots",
     "claim": "Mistral AI, *Mistral crawlers*, fetched 2026-10-30",
     "date": null,
     "quote": "MistralAI-User is for user actions in Vibe. / It is not used for crawling the web in any automatic fashion, nor to crawl content for generative AI training. / MistralAI-Index is for automated crawling of the web for indexing purposes only. / Content crawled by MistralAI-Index is not used for generative AI training of any kind. / MistralAI-Training crawls web content to help build datasets for training Mistral generative AI models.",
     "ref": 29
    },
    {
     "label": "[30]",
     "url": "https://duckduckgo.com/duckduckgo-help-pages/results/duckassistbot",
     "claim": "DuckDuckGo, *DuckAssistBot*, fetched 2026-10-30",
     "date": null,
     "quote": "DuckAssistBot is a web crawler for DuckDuckGo Search that crawls pages in real-time for our AI-assisted answers, which prominently cite their sources. / This data is not used in any way to train AI models. / DuckAssistBot/1.2; (+http://duckduckgo.com/duckassistbot.html) / modifying the robots.txt file for your domain(s). Once you've updated the file to disallow the DuckAssistBot user agent",
     "ref": 30
    },
    {
     "label": "[31]",
     "url": "https://allenai.org/crawler",
     "claim": "Ai2, *Crawling notice*, fetched 2026-10-30",
     "date": null,
     "quote": "This web content is used to train open language models. / Mozilla/5.0 (compatible) AI2Bot (+https://www.allenai.org/crawler) / This user agent string can be used to filter or reject traffic from our crawler if desired.",
     "ref": 31
    },
    {
     "label": "[32]",
     "url": "https://docs.cohere.com/docs/cohere-web-crawlers",
     "claim": "Cohere, *Cohere Web Crawlers*, fetched 2026-10-30",
     "date": null,
     "quote": "Were we to use a bot or user agent to crawl or scrape web content to train AI models in the future / User-agent: Coherebot / Disallow: /",
     "ref": 32
    },
    {
     "label": "[33]",
     "url": "https://searchdock.io/research/ai-crawler-access-2026/",
     "claim": "Umang Thakar (SearchDock), *State of AI Crawler Access 2026*, scanned 2026-10-20",
     "date": null,
     "quote": "In SearchDock's October 20, 2026 scan of the Tranco top 1,000 domains, 27.2% of the 555 reachable websites blocked at least one AI crawler: 20.5% in robots.txt and 10.3% at the server or CDN. / Block GPTBot (training) but allow OAI-SearchBot (ChatGPT search) 6.7% / Use a Content-Signal line (Cloudflare's AI preferences) 3.8% / Bytespider16.9% CCBot16.6% GPTBot14.4% ClaudeBot13.7% meta-externalagent13.2% Google-Extended12.8% PerplexityBot11.5% Applebot-Extended10.1% anthropic-ai9.9% ChatGPT-User9.7% Claude-SearchBot8.1% OAI-SearchBot7.7% Googlebot1.8% / GPTBot 542 49 (9%) 35 (6.5%) ClaudeBot 545 47 (8.6%) 35 (6.4%) PerplexityBot 545 33 (6.1%) 19 (3.5%) OAI-SearchBot 542 31 (5.7%) 24 (4.4%)",
     "ref": 33
    },
    {
     "label": "[34]",
     "url": "https://getkavel.com/ai-crawlers/",
     "claim": "Kavel (Lumen Labs Limited), *Which big websites block AI crawlers?*, October 2026 check, finished 2026-10-22",
     "date": null,
     "quote": "We checked the robots.txt rules of 945 well-known websites for 14 AI crawlers / 25.9% block at least one AI crawler in robots.txt (193 of 746 sites we could read) / 9.2% block AI training but leave every AI search crawler open (69 sites) / CCBot Common Crawl Training 19.6% (146) Bytespider ByteDance Training 18.4% (137) ClaudeBot Anthropic Training 18.1% (135) Applebot-Extended Apple AI-use control 17% (127) GPTBot OpenAI Training 16.9% (126) Meta-ExternalAgent Meta Training 16.8% (125) PerplexityBot Perplexity Search 15.3% (114) Google-Extended Google AI-use control 13.5% (101) Amazonbot Amazon General 13.3% (99) OAI-SearchBot OpenAI Search 9.4% (70) ChatGPT-User OpenAI User fetcher 9.2% (69) Claude-User Anthropic User fetcher 8.8% (66) Perplexity-User Perplexity User fetcher 8.7% (65) Claude-SearchBot Anthropic Search 8.3% (62)",
     "ref": 34
    },
    {
     "label": "[35]",
     "url": "https://www.stackscan.com/blog/ai-crawler-statistics",
     "claim": "Stackscan, *AI crawler statistics 2026*, updated 31 October 2026; fetched 2026-11-06",
     "date": null,
     "quote": "Updated 31 October 2026 / 6,250,586 websites block GPTBot / 90.8 million of the internet's 151.6 million / 6.88% of them block OpenAI's training crawler, GPTBot / Sites served through Cloudflare's network block GPTBot at 23.0%",
     "ref": 35
    },
    {
     "label": "[36]",
     "url": "https://crawlcheck.io/radar",
     "claim": "CrawlCheck, *What the top sites tell AI crawlers*, run finished 2026-11-05; fetched 2026-11-06",
     "date": null,
     "quote": "run that finished 2026-11-05 / the same 9,776 sites / robots.txt closed the door to GPTBot on 753 sites, but 1,087 refused / 4,597 sites that serve a robots.txt / 5,627 sites whose homepage answered a browser / serve /llms.txt / 22.7% / | GPTBot | 753 (16.4%) | 1,087 (19.3%) |",
     "ref": 36
    },
    {
     "label": "[37]",
     "url": "https://blog.cloudflare.com/crawlers-click-ai-bots-training",
     "claim": "Cloudflare, *From Googlebot to GPTBot: who's crawling your site and why*, July 2024 versus July 2025; fetched 2026-11-06",
     "date": null,
     "quote": "| 1 | GPTBot | 11.9 | 28.1 | 16.1 | / from 4.7% in July 2024 to 11.7% in July 2025 / training accounted for 72% of AI crawling. By July 2025, it had risen to 79%",
     "ref": 37
    },
    {
     "label": "[38]",
     "url": "https://seonix.ai/research/ai-bots-robots-txt",
     "claim": "Seonix, *AI crawlers in robots.txt: 14,318 sites measured*, crawled 3 November 2026; fetched 2026-11-06",
     "date": null,
     "quote": "Crawled 3 November 2026 / Block a training bot by name / 12.2% / 35.8% of named training blocks sit in a file with the Cloudflare managed block. / Block a search or answer bot by name / 2.3%",
     "ref": 38
    }
   ],
   "form": "well-known-file",
   "governance": "IETF (RFC 9309 syntax); individual AI crawler operators govern their own token semantics",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "created and verified against developers.openai.com/api/docs/bots, support.claude.com/en/articles/8896518, developers.google.com/search/docs/crawling-indexing/google-common-crawlers, docs.perplexity.ai/guides/bots"
    },
    {
     "date": "2026-10-16",
     "note": "Cloudflare 'Disallow AI Training' and Accountable crawler designation (2026-09-15); Bot Preference Sync replaces Managed robots.txt"
    },
    {
     "date": "2026-10-20",
     "note": "noted the expired crawler best-practices draft draft-illyes-aipref-cbcp-04 (2026-04-09, expired 2026-10-11); verified against the datatracker page and the -04 text (IETF rsync archive)"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "ai-crawler-tokens-robots",
   "implementation": "multi-implementation",
   "last_verified": "2026-11-11",
   "name": "AI crawler tokens in robots.txt",
   "native_status": "RFC 9309 is an IETF Internet Standards Track specification (September 2022); operator crawler tokens are live in vendor documentation.",
   "origin": {
    "org": "M. Koster, G. Illyes, H. Zeller, and L. Sassman (RFC 9309); individual AI operators",
    "date": "2022-09"
   },
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "living",
   "probe": {
    "method": "GET",
    "on_absent": "No group for a given token means that crawler applies its default (documented per-vendor, typically full access) rather than an explicit restriction",
    "parse": "Look for User-agent groups matching known tokens: GPTBot, OAI-SearchBot, OAI-AdsBot (OpenAI); ClaudeBot, Claude-User, Claude-SearchBot (Anthropic); Googlebot, Google-Extended (Google); PerplexityBot, Perplexity-User (Perplexity); then read the allow/disallow rules in that group",
    "path": "{origin}/robots.txt"
   },
   "question": "Which named AI crawler or agent user-agent tokens may a website allow or disallow in robots.txt, and what does each token actually control (search indexing, AI training, or live user-triggered fetches)?",
   "scope": "general",
   "spec_url": "https://www.rfc-editor.org/rfc/rfc9309.html",
   "step": "permit",
   "summary_md": "**AI crawler tokens in `robots.txt`** are operator-published `User-agent` product and control tokens—such as `GPTBot`, `OAI-SearchBot`, `ClaudeBot`, `Google-Extended`, and `Applebot-Extended`—evaluated within IETF RFC 9309 `/robots.txt` rule groups so web publishers can independently govern foundation-model training, AI search indexing, and user-initiated fetching. While RFC 9309 (published on the IETF Standards Track in September 2022, formalizing Martijn Koster's 1994 Robots Exclusion Protocol) standardizes group matching and path syntax, each AI operator defines the downstream training or search semantics of its own tokens in vendor documentation. Origins publish `/robots.txt` as UTF-8 `text/plain`, and crawlers perform a case-insensitive match on their product token to select the applicable group before evaluating case-sensitive `Allow` and `Disallow` rules by longest matching octet prefix. At the IETF, `draft-ietf-aipref-attach-05` (19 August 2026) proposes updating RFC 9309 so `/robots.txt` groups can attach AI usage preferences, while Google's crawler documentation (updated 2026-10-30) announces plans to support a shared `user-agent: __usage_ai-training` control token in early 2027.",
   "track": "vendor-consortium",
   "version": {
    "label": "RFC 9309",
    "date": "2022-09"
   },
   "watch": [
    {
     "type": "page",
     "url": "https://www.rfc-editor.org/rfc/rfc9309.html",
     "selector": "main",
     "cadence": "weekly"
    }
   ],
   "use_cases": [
    "control-ai-crawling",
    "attribute-agent-traffic"
   ],
   "audience": [
    "site-owner",
    "platform"
   ],
   "pairs_with": [
    "webbotauth",
    "rsl",
    "cloudflare-content-signals-policy",
    "cloudflare-pay-per-crawl",
    "aipref-vocabulary",
    "aipref-content-usage-attachment"
   ],
   "prerequisites": [],
   "hatnote_md": "This page covers vendor-published AI crawler `User-agent` product and control tokens declared inside `/robots.txt` groups. For the underlying exclusion syntax, see RFC 9309; for usage-preference vocabularies and headers, see [AIPREF Vocabulary](/protocols/aipref-vocabulary/), [AIPREF Content-Usage Attachment](/protocols/aipref-content-usage-attachment/), [Content Signals Policy](/protocols/cloudflare-content-signals-policy/), [TDMRep](/protocols/tdmrep/), and [ai.txt](/protocols/ai-txt/); for Markdown content indexes, see [llms.txt](/protocols/llms-txt/).",
   "ietf_tracker": {
    "doc": "rfc9309",
    "rev": null,
    "state": "rfc",
    "stream": "IETF",
    "group_type": "IETF",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2022-09",
    "expires_utc": null,
    "as_of": "2026-11-06",
    "source": "https://datatracker.ietf.org/doc/rfc9309/",
    "source_label": "per IETF Datatracker"
   },
   "tier": "flagship",
   "lifecycle_status": "published_standard",
   "wire_archetype": "crawler_policy",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-11",
   "v05_hatnote_html_md": "This page covers vendor-published AI crawler `User-agent` product and control tokens declared inside `/robots.txt` groups. For the underlying exclusion syntax, see RFC 9309; for usage-preference vocabularies and headers, see [AIPREF Vocabulary](/protocols/aipref-vocabulary/), [AIPREF Content-Usage Attachment](/protocols/aipref-content-usage-attachment/), [Content Signals Policy](/protocols/cloudflare-content-signals-policy/), [TDMRep](/protocols/tdmrep/), and [ai.txt](/protocols/ai-txt/); for Markdown content indexes, see [llms.txt](/protocols/llms-txt/). [1][2]",
   "v05_elevator_pitch_md": "AI crawler tokens in `/robots.txt` let website publishers set separate crawl and usage policies for AI model training, AI search surfacing, and live assistant fetching using vendor-specific `User-agent` identifiers. Instead of blocking an entire operator with a single blanket rule that also drops a site from search results, publishers match specific tokens—such as disallowing `GPTBot` or `Google-Extended` for training while allowing `OAI-SearchBot` for search—inside standard `/robots.txt` groups. [1][2][3]",
   "v05_lead_md": "**AI crawler tokens in `robots.txt`** are operator-published `User-agent` product and control tokens—such as `GPTBot`, `OAI-SearchBot`, `ClaudeBot`, `Google-Extended`, and `Applebot-Extended`—evaluated within IETF RFC 9309 `/robots.txt` rule groups so web publishers can independently govern foundation-model training, AI search indexing, and user-initiated fetching. [1][4] While RFC 9309 (published on the IETF Standards Track in September 2022, formalizing Martijn Koster's 1994 Robots Exclusion Protocol) standardizes group matching and path syntax, each AI operator defines the downstream training or search semantics of its own tokens in vendor documentation. [1][3] Origins publish `/robots.txt` as UTF-8 `text/plain`, and crawlers perform a case-insensitive match on their product token to select the applicable group before evaluating case-sensitive `Allow` and `Disallow` rules by longest matching octet prefix. [1] At the IETF, `draft-ietf-aipref-attach-05` (19 August 2026) proposes updating RFC 9309 so `/robots.txt` groups can attach AI usage preferences, while Google's crawler documentation (updated 2026-10-30) announces plans to support a shared `user-agent: __usage_ai-training` control token in early 2027. [1][5][6]",
   "v05_identity_sentence_md": "**AI crawler tokens in `robots.txt`** are operator-published `User-agent` product and control tokens—such as `GPTBot`, `OAI-SearchBot`, `ClaudeBot`, `Google-Extended`, and `Applebot-Extended`—evaluated within IETF RFC 9309 `/robots.txt` rule groups so web publishers can independently govern foundation-model training, AI search indexing, and user-initiated fetching. [1][4] While RFC 9309 (published on the IETF Standards Track in September 2022, formalizing Martijn Koster's 1994 Robots Exclusion Protocol) standardizes group matching and path syntax, each AI operator defines the downstream training or search semantics of its own tokens in vendor documentation. [1][3]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Permit](/category/permit/) (`permit`)"
    },
    {
     "label": "Form",
     "value_md": "Well-known file (`well-known-file`)"
    },
    {
     "label": "Originated by",
     "value_md": "M. Koster, G. Illyes, H. Zeller, L. Sassman (RFC 9309, 2022-09); AI operators define individual tokens [1][2]"
    },
    {
     "label": "Governed by",
     "value_md": "IETF (RFC 9309 syntax); individual AI crawler operators govern their own token semantics [1][3]"
    },
    {
     "label": "Track",
     "value_md": "IETF Standards Track for RFC 9309 syntax; vendor documentation for individual crawler tokens [1]"
    },
    {
     "label": "Status",
     "value_md": "Published Internet Standards Track RFC 9309 (September 2022); live operator crawler tokens [1]"
    },
    {
     "label": "Version",
     "value_md": "RFC 9309 (September 2022); vendor crawler docs updated continuously (e.g., Google 2026-10-30) [1][6]"
    },
    {
     "label": "Token format",
     "value_md": "ASCII product token (`a-z`, `A-Z`, `_`, `-`), e.g. `GPTBot`, `ClaudeBot`, `Google-Extended`, `Applebot-Extended` [1][2][6][7][8]"
    },
    {
     "label": "Record format",
     "value_md": "UTF-8 `text/plain` groups of `User-agent` lines followed by `Allow` and `Disallow` path rules [1]"
    },
    {
     "label": "Specification",
     "value_md": "[RFC 9309: Robots Exclusion Protocol](https://www.rfc-editor.org/rfc/rfc9309.html) [1]"
    },
    {
     "label": "Found at",
     "value_md": "`/robots.txt` at the top-level path of each service (`scheme:[//authority]/robots.txt`) [1]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust BCP 78 and Revised BSD License for RFC 9309 code components [1]"
    }
   ],
   "v05_problem_md": "RFC 9309 requests that crawlers honor rules about which URIs they access. Gary Illyes calls robots.txt an access preference protocol that does not dictate what a system does with the data after it has already crawled it, so a disallow does not itself state a training preference. [1][3] AI operators publish separate `User-agent` tokens for distinct downstream functions—allowing a webmaster, for example, to permit `OAI-SearchBot` for search visibility while disallowing `GPTBot` to opt out of generative AI foundation-model training, alongside separate tokens such as `ChatGPT-User` for user-initiated actions. [2] These rules are not a form of access authorization and are not a substitute for valid content security measures. `ChatGPT-User`, Google's user-triggered fetchers, `Perplexity-User`, and `Meta-ExternalFetcher` may ignore or bypass robots.txt when a person requested the fetch. A page that's disallowed in robots.txt can still be indexed if linked to from other sites, and the search result won't have a description. [1][2][9][10][11][12]",
   "v05_mechanism_delta_md": "AI operators publish separate `User-agent` tokens for distinct downstream functions—allowing a webmaster, for example, to permit `OAI-SearchBot` for search visibility while disallowing `GPTBot` to opt out of generative AI foundation-model training, alongside separate tokens such as `ChatGPT-User` for user-initiated actions. [2]",
   "v05_scope_boundary_md": "These rules are not a form of access authorization and are not a substitute for valid content security measures. `ChatGPT-User`, Google's user-triggered fetchers, `Perplexity-User`, and `Meta-ExternalFetcher` may ignore or bypass robots.txt when a person requested the fetch. A page that's disallowed in robots.txt can still be indexed if linked to from other sites, and the search result won't have a description. [1][2][9][10][11][12]",
   "v05_fuzzy_additions": [
    {
     "id": "how-a-crawler-matches-a-group-and-a-path",
     "heading": "How a crawler matches a group and a path",
     "body_md": "The product token may contain only letters, underscores, and hyphens. When more than one group matches the same user-agent, those rules must be combined into one group before any path is judged. [1]",
     "bullets": [
      {
       "label": "Longest path wins",
       "text_md": "When multiple rules in a group match a requested URI, RFC 9309 selects the most specific match—defined as the rule pattern with the most octets (for example, `Disallow: /example/page/disallowed.gif` overrides `Allow: /example/page/`). [1]"
      },
      {
       "label": "A tie allows, and silence allows",
       "text_md": "If an allow rule and a disallow rule are equivalent, the allow rule should be used. If no rule matches the URI, or the group has no rules, the URI is allowed. The `/robots.txt` URI is implicitly allowed. [1]"
      },
      {
       "label": "The asterisk group",
       "text_md": "If no group matches the product token, the crawler must obey the group whose user-agent line is `*`, when that group is present. If nothing matches and there is no `*` group, or the file has no groups at all, no rules apply. [1]"
      },
      {
       "label": "Encoding, disclosure, and the parse limit",
       "text_md": "Octets outside ASCII, and reserved characters, must be percent-encoded before paths are compared. Listing a path exposes it publicly and makes it discoverable. Crawlers should impose a parsing limit, and that limit must be at least 500 kibibytes. [1]"
      }
     ]
    },
    {
     "id": "operator-tokens-page-directives-and-usage-preferences",
     "heading": "Operator tokens, page directives, and usage preferences",
     "body_md": "Training crawlers, search crawlers, user-triggered fetchers, and control tokens with no HTTP client of their own are different product tokens. A `Disallow` governs fetching. The `noindex` meta tag, the `nosnippet` meta tag, and an IETF `Content-Usage` preference govern indexing and reuse. [1][2][5][6][8][12]",
     "bullets": [
      {
       "label": "Training and search crawlers",
       "text_md": "Sites opted out of `OAI-SearchBot` are absent from ChatGPT search answers, though they can still appear as navigational links. Restricting `ClaudeBot` excludes future materials from Anthropic's training datasets; disabling `Claude-SearchBot` prevents search indexing; disabling `Claude-User` prevents retrieval for a user query. `PerplexityBot` links sites in Perplexity search and does not crawl content for AI foundation models. [2][7][10]"
      },
      {
       "label": "Control tokens beside the search crawler",
       "text_md": "`Google-Extended` has no separate HTTP user-agent string and is used in a control capacity; it does not affect inclusion or ranking in Google Search. `Applebot-Extended` does not crawl webpages, so disallowed pages can remain in search results. `Perplexity-User` fetches pages cited in user-triggered queries rather than crawling the web or collecting AI foundation-model training data. `Meta-ExternalFetcher` fetches links a user requested. [6][8][10][11]"
      },
      {
       "label": "Corpus crawlers",
       "text_md": "`Meta-ExternalAgent` crawls to train foundation AI models or to index content directly. `Amazonbot` may be used to train Amazon AI models. Common Crawl's block is `User-agent: CCBot` and `Disallow: /`. Crawl Census says `Bytespider` downloads content to train ByteDance LLMs and is widely reported to ignore robots.txt. [11][13][14][15]"
      },
      {
       "label": "Page tags and Content-Usage",
       "text_md": "The control Google documents for keeping a URL out of Search is the `noindex` meta tag or response header. Apple's `nosnippet` meta tag applies to specific content, and `Applebot` may still crawl when `Applebot-Extended` is disallowed. `draft-ietf-aipref-attach-05` attaches preferences to robots.txt and references `draft-ietf-aipref-vocab-07` (\"A Vocabulary For Expressing AI Usage Preferences\"), which was superseded on 14 September 2026 by `draft-ietf-aipref-vocab-08` defining the preference vocabulary (`train-ai`). `Allow` and `Disallow` still use the longest matching path prefix, and `Content-Usage: train-ai=n` states the preference. Cloudflare's separate `Content-Signal` values include `ai-input` and `ai-train`. [5][8][12][16][17]"
      }
     ]
    }
   ],
   "v05_diagram": null,
   "v05_wire_artifact": {
    "title": "Multi-token AI crawler `robots.txt` groups (`bbc.co.uk`)",
    "heading": "Multi-token AI crawler `robots.txt` groups (`bbc.co.uk`)",
    "lang": "text",
    "code": "User-agent: ClaudeBot\nDisallow: /\n\nUser-agent: Claude-Web\nDisallow: /\n\nUser-agent: anthropic-ai\nDisallow: /\n\nUser-agent: cohere-ai\nDisallow: /\n\nUser-agent: Bytespider\nDisallow: /\n\nUser-agent: PetalBot\nDisallow: /\n\nUser-agent: Scrapy\nDisallow: /\n\nUser-agent: Applebot-Extended\nDisallow: /\n\nUser-agent: GPTBot\nDisallow: /\n\nUser-agent: ChatGPT-User\nDisallow: /\n\nUser-agent: Google-CloudVertexBot\nDisallow: /\n\nUser-agent: Google-Extended\nDisallow: /\n\nUser-Agent: PerplexityBot\nDisallow: /\n\nUser-agent: Perplexity-User\nDisallow: /\n\nUser-agent: meta-externalagent\nDisallow: /\n\nUser-agent: OAI-SearchBot\nDisallow: /",
    "caption_md": "Contiguous `/robots.txt` excerpt from `www.bbc.co.uk` assigning `Disallow: /` to named AI training, search, user-fetcher, and control tokens including `ClaudeBot`, `Applebot-Extended`, `GPTBot`, `ChatGPT-User`, `Google-Extended`, `PerplexityBot`, `Perplexity-User`, `meta-externalagent`, and `OAI-SearchBot`. [4]"
   },
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "robots.txt (RFC 9309)",
      "spec_or_rfc": "RFC 9309",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "RFC 9309 defines `User-agent`, `Allow`, and `Disallow` group syntax; AI operators assign training or search meanings to specific tokens. [1][3]"
     },
     {
      "name": "HTTP User-Agent (RFC 9110)",
      "spec_or_rfc": "RFC 9110",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "HTTP `User-Agent` identifies client requests, whereas control tokens like `Google-Extended` appear only in `robots.txt` without a separate header. [1][6]"
     },
     {
      "name": "X-Robots-Tag HTTP header",
      "spec_or_rfc": "HTTP response header",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Delivers per-response indexing directives like `X-Robots-Tag: applebot: nosnippet` in HTTP headers instead of path rules in `/robots.txt`. [8]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "aipref-vocabulary",
      "target_name": "AIPREF Vocabulary (A Vocabulary For Expressing AI Usage Preferences)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Defines standardized AI usage preference labels (`train-ai`) rather than per-operator `User-agent` product tokens in `/robots.txt`. [1][5][16]"
     },
     {
      "target_id": "aipref-content-usage-attachment",
      "target_name": "AIPREF Content-Usage Attachment",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Attaches `Content-Usage` preference rules (such as `train-ai=n`) inside `robots.txt` groups and HTTP headers alongside `User-agent` tokens. [1][5]"
     },
     {
      "target_id": "webbotauth",
      "target_name": "Web Bot Auth",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Authenticates automated HTTP traffic using cryptographic HTTP Message Signatures, whereas `robots.txt` product tokens are unauthenticated strings. [1][18]"
     },
     {
      "target_id": "tdmrep",
      "target_name": "TDMRep (TDM Reservation Protocol)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Reserves EU text-and-data-mining rights via `/.well-known/tdmrep.json` (`tdm-reservation: 1`) rather than per-crawler path rules in `/robots.txt`. [1][19]"
     },
     {
      "target_id": "rsl",
      "target_name": "Really Simple Licensing",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Complements robots.txt with XML licensing terms; AI crawler tokens are not a prerequisite as RSL supports HTTP Link, HTML, and RSS. [1][20]"
     },
     {
      "target_id": "cloudflare-content-signals-policy",
      "target_name": "Content Signals Policy",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Adds `Content-Signal: search=yes, ai-input=no, ai-train=no` directives inside the `/robots.txt` group selected by a `User-agent` token. [1][17]"
     },
     {
      "target_id": "cloudflare-pay-per-crawl",
      "target_name": "Cloudflare Pay Per Crawl",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Monetizes AI crawler access per zone by returning HTTP 402 Payment Required with pricing unless request headers declare payment intent, instead of relying on voluntary `/robots.txt` `Disallow` rules. [1][21]"
     },
     {
      "target_id": "ai-txt",
      "target_name": "ai.txt",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "Publishes training, scraping, indexing, and caching permissions at `/.well-known/ai.txt` instead of per-bot `User-agent` groups in `/robots.txt`. [1][22]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (18 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).",
    "side_a": {
     "visible": true,
     "heading": "Publishers & managed robots.txt providers",
     "col4_header": "Observed User-agent tokens & directives",
     "note_md": null,
     "rows": [
      {
       "actor": "The New York Times",
       "role": "Publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Sets `Disallow: /` across 15 AI crawlers (`GPTBot`, `ClaudeBot`, `Google-Extended`, `PerplexityBot`, `CCBot`); allows `Google-CloudVertexBot` on `/wirecutter/` and `/athletic/`.",
       "source_md": "[The New York Times robots.txt](https://www.nytimes.com/robots.txt) [23]"
      },
      {
       "actor": "BBC",
       "role": "Publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Sets `Disallow: /` across 14 named AI crawler groups (plus `Scrapy` and `PetalBot`), including `GPTBot`, `OAI-SearchBot`, `ClaudeBot`, `Google-Extended`, `Applebot-Extended`, and `PerplexityBot`.",
       "source_md": "[BBC robots.txt](https://www.bbc.co.uk/robots.txt) [4]"
      },
      {
       "actor": "The Atlantic",
       "role": "Publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Allows `GPTBot` and `OAI-SearchBot` (`Allow: /`), blocks `ClaudeBot` and `Google-Extended` (`Disallow: /`), and sets `Content-signal: search=yes, ai-input=no, ai-train=no`.",
       "source_md": "[The Atlantic robots.txt](https://www.theatlantic.com/robots.txt) [24]"
      },
      {
       "actor": "Vox Media (vox.com)",
       "role": "Publisher (vox.com)",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Allows `User-agent: GPTBot` and `User-agent: Amazonbot` (`Allow: /`); sets `Disallow: /` (with `Allow: /sp/` and `Allow: /strategist`) for `ClaudeBot`, `Google-Extended`, `PerplexityBot`, `Applebot-Extended`, and `CCBot`.",
       "source_md": "[Vox Media robots.txt](https://www.vox.com/robots.txt) [25]"
      },
      {
       "actor": "GitHub",
       "role": "Publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Groups `GPTBot`, `OAI-SearchBot`, `ClaudeBot`, `anthropic-ai`, and `PerplexityBot` under `Crawl-delay: 1` with `Disallow: /copilot/` and `Disallow: /gist/`.",
       "source_md": "[GitHub robots.txt](https://github.com/robots.txt) [26]"
      },
      {
       "actor": "Cloudflare Managed robots.txt",
       "role": "Managed policy publisher",
       "status": "Partial",
       "status_display": "Partial · as of 2026-11-02",
       "col4_md": "Bot Preference Sync generates managed `robots.txt` directives from Search, Agent, and Training policies (including `Content-Signal: search=yes, ai-train=no`); `robots.txt` compliance remains voluntary.",
       "source_md": "[Cloudflare robots.txt setting](https://developers.cloudflare.com/bots/additional-configurations/managed-robots-txt/) [27] · [Cloudflare Content Signals Policy blog](https://blog.cloudflare.com/content-signals-policy/) [17] · [Cloudflare press release](https://www.cloudflare.com/press/press-releases/2025/cloudflare-gives-creators-new-tool-to-control-use-of-their-content/) [28]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "AI crawler operators & documented tokens",
     "col4_header": "Training vs. search / user-triggered tokens",
     "note_md": null,
     "rows": [
      {
       "actor": "OpenAI",
       "role": "Crawler operator",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "`GPTBot` crawls for model training; `OAI-SearchBot` indexes ChatGPT search; `ChatGPT-User` handles user actions; `OAI-AdsBot` checks ads.",
       "source_md": "[OpenAI, Overview of OpenAI crawlers](https://developers.openai.com/api/docs/bots) [2]"
      },
      {
       "actor": "Anthropic",
       "role": "Crawler operator",
       "status": "Supported",
       "status_display": "Supported · as of 2026-04-07",
       "col4_md": "`ClaudeBot` collects model training data; `Claude-SearchBot` indexes search results; `Claude-User` fetches pages for user queries.",
       "source_md": "[Anthropic, Does Anthropic crawl data from the web?](https://support.claude.com/en/articles/8896518-does-anthropic-crawl-data-from-the-web-and-how-can-site-owners-block-the-crawler) [7]"
      },
      {
       "actor": "Google",
       "role": "Crawler operator",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-30",
       "col4_md": "`Google-Extended` (control-only token) governs Gemini training and grounding; `Google-CloudVertexBot` governs site-owner Vertex AI Agent crawls.",
       "source_md": "[Google, common crawlers](https://developers.google.com/crawling/docs/crawlers-fetchers/google-common-crawlers) [6]"
      },
      {
       "actor": "Perplexity",
       "role": "Crawler operator",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "`PerplexityBot` indexes search results (no foundation model training); `Perplexity-User` handles user fetches and generally ignores `robots.txt`.",
       "source_md": "[Perplexity, Perplexity crawlers](https://docs.perplexity.ai/docs/resources/perplexity-crawlers) [10]"
      },
      {
       "actor": "Apple",
       "role": "Crawler operator",
       "status": "Supported",
       "status_display": "Supported · as of 2026-09-04",
       "col4_md": "Disallowing `Applebot-Extended` opts out of generative model training while keeping `Applebot` active for Spotlight, Siri, and Safari search.",
       "source_md": "[Apple, About Applebot](https://support.apple.com/en-us/119829) [8]"
      },
      {
       "actor": "Meta",
       "role": "Crawler operator",
       "status": "Supported",
       "status_display": "Supported · as of 2026-06-16",
       "col4_md": "`Meta-ExternalAgent` crawls for AI model training; `Meta-WebIndexer` indexes search; `Meta-ExternalFetcher` handles user fetches and may bypass `robots.txt`.",
       "source_md": "[Meta web crawlers (archived 2026-06-16)](https://web.archive.org/web/20260616005830id_/https://developers.facebook.com/docs/sharing/webmasters/web-crawlers/) [11] · [The New York Times robots.txt](https://www.nytimes.com/robots.txt) [23]"
      },
      {
       "actor": "Common Crawl",
       "role": "Crawler operator",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "`CCBot` (`CCBot/2.0`) crawls open web archive datasets; honors `User-agent: CCBot` with `Disallow: /` and publishes `ccbot.json` IPs.",
       "source_md": "[Common Crawl, CCBot](https://commoncrawl.org/ccbot) [14]"
      },
      {
       "actor": "Amazon",
       "role": "Crawler operator",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-26",
       "col4_md": "`Amazonbot` crawls for service improvement and AI training; `Amzn-SearchBot` indexes Alexa search; `Amzn-User` serves live user requests.",
       "source_md": "[Amazon, Amazon Web Search crawlers](https://developer.amazon.com/docs/amazonbot/amazonbot.html) [13]"
      },
      {
       "actor": "Mistral",
       "role": "Crawler operator",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "`MistralAI-Training` crawls for generative model training; `MistralAI-Index` (search indexing) and `MistralAI-User` (Vibe user actions) do not train models.",
       "source_md": "[Mistral, Mistral crawlers](https://docs.mistral.ai/robots) [29]"
      },
      {
       "actor": "DuckDuckGo",
       "role": "Crawler operator",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "`DuckAssistBot` (`DuckAssistBot/1.2`) crawls in real time for source-cited AI answers, never trains models, and honors `robots.txt`.",
       "source_md": "[DuckDuckGo, DuckAssistBot](https://duckduckgo.com/duckduckgo-help-pages/results/duckassistbot) [30]"
      },
      {
       "actor": "Allen Institute for AI",
       "role": "Crawler operator",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "`AI2Bot` (`Mozilla/5.0 (compatible) AI2Bot (+https://www.allenai.org/crawler)`) crawls web content to train open language models.",
       "source_md": "[Allen Institute for AI, crawling notice](https://allenai.org/crawler) [31]"
      },
      {
       "actor": "Cohere",
       "role": "Crawler operator",
       "status": "Listed",
       "status_display": "Listed · checked 2026-10-30",
       "col4_md": "Documents `User-agent: Coherebot` with `Disallow: /` for potential future training crawls; publisher files also block `User-agent: cohere-ai`.",
       "source_md": "[Cohere, web crawlers and robots.txt](https://docs.cohere.com/docs/cohere-web-crawlers) [32] · [The New York Times robots.txt](https://www.nytimes.com/robots.txt) [23]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [
     {
      "label": "SearchDock, State of AI Crawler Access 2026 (Tranco top-1,000 block rate)",
      "as_of": "2026-10-20",
      "value_md": "Across 555 reachable websites in the Tranco top 1,000 domains, 27.2% blocked at least one AI crawler (20.5% in robots.txt and 10.3% at the server or CDN), 6.7% blocked GPTBot while allowing OAI-SearchBot, and 3.8% included a Cloudflare Content-Signal line. [33]"
     },
     {
      "label": "SearchDock, State of AI Crawler Access 2026 (homepage disallow shares)",
      "as_of": "2026-10-20",
      "value_md": "Among the 555 reachable Tranco top-1,000 sites, homepage robots.txt disallow shares were Bytespider 16.9%, CCBot 16.6%, GPTBot 14.4%, ClaudeBot 13.7%, meta-externalagent 13.2%, Google-Extended 12.8%, PerplexityBot 11.5%, Applebot-Extended 10.1%, anthropic-ai 9.9%, ChatGPT-User 9.7%, Claude-SearchBot 8.1%, and OAI-SearchBot 7.7% (compared with Googlebot at 1.8%). [33]"
     },
     {
      "label": "SearchDock, State of AI Crawler Access 2026 (server/CDN vs. robots.txt blocks)",
      "as_of": "2026-10-20",
      "value_md": "While serving Googlebot normally, servers or CDNs blocked GPTBot on 49 of 542 sites (9%, including 35 sites or 6.5% where robots.txt allowed GPTBot), ClaudeBot on 47 of 545 sites (8.6%, including 35 or 6.4% hidden blocks), PerplexityBot on 33 of 545 sites (6.1%, including 19 or 3.5% hidden blocks), and OAI-SearchBot on 31 of 542 sites (5.7%, including 24 or 4.4% hidden blocks). [33]"
     },
     {
      "label": "Kavel, AI Crawler Study (945-site scan across 14 crawlers)",
      "as_of": "2026-10-22",
      "value_md": "Across 746 readable robots.txt files from 945 websites tested for 14 AI crawlers, 25.9% (193 sites) blocked at least one AI crawler and 9.2% (69 sites) blocked AI training crawlers while leaving every AI search crawler open: CCBot 19.6% (146), Bytespider 18.4% (137), ClaudeBot 18.1% (135), Applebot-Extended 17% (127), GPTBot 16.9% (126), Meta-ExternalAgent 16.8% (125), PerplexityBot 15.3% (114), Google-Extended 13.5% (101), Amazonbot 13.3% (99), OAI-SearchBot 9.4% (70), ChatGPT-User 9.2% (69), Claude-User 8.8% (66), Perplexity-User 8.7% (65), and Claude-SearchBot 8.3% (62). [34]"
     },
     {
      "label": "Stackscan AI crawler statistics",
      "as_of": "2026-10-31",
      "value_md": "Stackscan's update of 31 October 2026 read robots.txt on 90.8 million of 151.6 million live sites. 6,250,586 sites block GPTBot, 6.88% of sites with a robots.txt. Sites on Cloudflare's network block GPTBot at 23.0%, other sites with a robots.txt at 1.5%, and 84.0% of GPTBot blocks sit behind Cloudflare. [35]"
     },
     {
      "label": "CrawlCheck radar",
      "as_of": "2026-11-05",
      "value_md": "CrawlCheck's run finished 2026-11-05 on 9,776 Tranco sites. Among 4,597 sites that serve a robots.txt, GPTBot was closed on 753 (16.4%). Among 5,627 homepages that answered a browser, 1,087 (19.3%) refused a client declaring GPTBot. 17% of those answering homepages serve /llms.txt, and 22.7% refuse at least one AI identity. [36]"
     },
     {
      "label": "Crawl Census bot directory",
      "as_of": null,
      "value_md": "Tracks 48 agents across 29,963 recorded sites: root disallow rules block `GPTBot` on 2,930 of 29,961 sites (10%), `ClaudeBot` on 2,567 of 29,961 (9%), control-only `Google-Extended` on 2,262 of 29,961 (8%), and answer-index `OAI-SearchBot` on 614 of 29,961 (2%). [15]"
     },
     {
      "label": "Cloudflare, crawlers and referral traffic",
      "as_of": "2025-07",
      "value_md": "Among AI-only bots, Cloudflare reports GPTBot's share moving from 11.9% in July 2024 to 28.1% in July 2025. Across all AI and search crawler traffic, GPTBot moved from 4.7% to 11.7% over the same months. Training rose from 72% of AI crawling in July 2024 to 79% in July 2025. [37]"
     },
     {
      "label": "Seonix robots.txt audit",
      "as_of": "2026-11-03",
      "value_md": "Seonix's crawl of 3 November 2026 found that 12.2% of 14,318 sites with a readable robots.txt block a training bot by name (1,744 sites). 35.8% of those named training blocks sit in a file that contains Cloudflare's managed block. 2.3% block a search or answer bot by name. [38]"
     }
    ],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "llms-txt",
     "target_name": "llms.txt",
     "relation_label": "Complements",
     "delta": "Governs AI crawler access using `robots.txt` product tokens like `GPTBot` and `OAI-SearchBot`, whereas `/llms.txt` curates links without access controls.",
     "item_md": "**[llms.txt](/protocols/llms-txt/)** (Complements) — Governs AI crawler access using `robots.txt` product tokens like `GPTBot` and `OAI-SearchBot`, whereas `/llms.txt` curates links without access controls."
    },
    {
     "target_id": "cloudflare-markdown-for-agents",
     "target_name": "Markdown for Agents",
     "relation_label": "Complements",
     "delta": "robots.txt rules for AI crawlers treat AI training, search, and user-triggered crawlers separately and include a token list, rather than selecting a representation of a page.",
     "item_md": "**[Markdown for Agents](/protocols/cloudflare-markdown-for-agents/)** (Complements) — robots.txt rules for AI crawlers treat AI training, search, and user-triggered crawlers separately and include a token list, rather than selecting a representation of a page."
    },
    {
     "target_id": "vercel-agent-readability",
     "target_name": "Agent Readability Spec",
     "relation_label": "Complements",
     "delta": "The guide looks for a robots.txt file, while AI crawler tokens are the User-agent product tokens publishers put in that file's groups.",
     "item_md": "**[Agent Readability Spec](/protocols/vercel-agent-readability/)** (Complements) — The guide looks for a robots.txt file, while AI crawler tokens are the User-agent product tokens publishers put in that file's groups."
    },
    {
     "target_id": "agent-permissions-json",
     "target_name": "agent-permissions.json",
     "relation_label": "Peer alternative",
     "delta": "agent-permissions.json lists action permissions, including resource_rules verbs such as click_element and submit_form, at /.well-known/agent-permissions.json, while AI crawler tokens only match User-agent products to path rules in /robots.txt.",
     "item_md": "**[agent-permissions.json](/protocols/agent-permissions-json/)** (Peer alternative) — agent-permissions.json lists action permissions, including resource_rules verbs such as click_element and submit_form, at /.well-known/agent-permissions.json, while AI crawler tokens only match User-agent products to path rules in /robots.txt."
    },
    {
     "target_id": "agents-txt",
     "target_name": "agents.txt",
     "relation_label": "Complements",
     "delta": "agents.txt announces capabilities, while AI crawler tokens in /robots.txt only match a product token to crawl Allow and Disallow rules.",
     "item_md": "**[agents.txt](/protocols/agents-txt/)** (Complements) — agents.txt announces capabilities, while AI crawler tokens in /robots.txt only match a product token to crawl Allow and Disallow rules."
    },
    {
     "target_id": "web-bot-auth-signature-agent-card",
     "target_name": "Signature Agent Card (Web Bot Auth registry)",
     "relation_label": "Complements",
     "delta": "The card's rfc9309-product-token and rfc9309-compliance fields name the robots.txt product tokens the bot uses, which robots.txt itself only matches as a user-agent string.",
     "item_md": "**[Signature Agent Card (Web Bot Auth registry)](/protocols/web-bot-auth-signature-agent-card/)** (Complements) — The card's rfc9309-product-token and rfc9309-compliance fields name the robots.txt product tokens the bot uses, which robots.txt itself only matches as a user-agent string."
    },
    {
     "target_id": "jafar",
     "target_name": "JAFAR: A JSON-Based Format for Publishing IP Ranges of Automated HTTP Clients",
     "relation_label": "Complements",
     "delta": "robots.txt matches a crawler by product token, and JAFAR publishes the prefixes that token's operator claims to send from.",
     "item_md": "**[JAFAR: A JSON-Based Format for Publishing IP Ranges of Automated HTTP Clients](/protocols/jafar/)** (Complements) — robots.txt matches a crawler by product token, and JAFAR publishes the prefixes that token's operator claims to send from."
    },
    {
     "item_md": "**[Permit protocols](/category/permit/)** — Category index for `permit` standards."
    }
   ],
   "v05_compiled_md": "---\nid: ai-crawler-tokens-robots\ntitle: \"AI crawler tokens in robots.txt\"\ntier: flagship\nlifecycle_status: published_standard\ncategory: permit\nform: well-known-file\nwire_archetype: crawler_policy\nspec_url: https://www.rfc-editor.org/rfc/rfc9309.html\nlast_checked: 2026-11-11\n---\n\n# AI crawler tokens in robots.txt\n\n**Category:** [Permit](/category/permit/) (`permit`) · **Form:** Well-known file (`well-known-file`) · **Last checked:** 2026-11-11\n\n> *This page covers vendor-published AI crawler `User-agent` product and control tokens declared inside `/robots.txt` groups. For the underlying exclusion syntax, see RFC 9309; for usage-preference vocabularies and headers, see [AIPREF Vocabulary](/protocols/aipref-vocabulary/), [AIPREF Content-Usage Attachment](/protocols/aipref-content-usage-attachment/), [Content Signals Policy](/protocols/cloudflare-content-signals-policy/), [TDMRep](/protocols/tdmrep/), and [ai.txt](/protocols/ai-txt/); for Markdown content indexes, see [llms.txt](/protocols/llms-txt/). [1][2]*\n\n> **In brief:** AI crawler tokens in `/robots.txt` let website publishers set separate crawl and usage policies for AI model training, AI search surfacing, and live assistant fetching using vendor-specific `User-agent` identifiers. Instead of blocking an entire operator with a single blanket rule that also drops a site from search results, publishers match specific tokens—such as disallowing `GPTBot` or `Google-Extended` for training while allowing `OAI-SearchBot` for search—inside standard `/robots.txt` groups. [1][2][3]\n\n**AI crawler tokens in `robots.txt`** are operator-published `User-agent` product and control tokens—such as `GPTBot`, `OAI-SearchBot`, `ClaudeBot`, `Google-Extended`, and `Applebot-Extended`—evaluated within IETF RFC 9309 `/robots.txt` rule groups so web publishers can independently govern foundation-model training, AI search indexing, and user-initiated fetching. [1][4] While RFC 9309 (published on the IETF Standards Track in September 2022, formalizing Martijn Koster's 1994 Robots Exclusion Protocol) standardizes group matching and path syntax, each AI operator defines the downstream training or search semantics of its own tokens in vendor documentation. [1][3] Origins publish `/robots.txt` as UTF-8 `text/plain`, and crawlers perform a case-insensitive match on their product token to select the applicable group before evaluating case-sensitive `Allow` and `Disallow` rules by longest matching octet prefix. [1] At the IETF, `draft-ietf-aipref-attach-05` (19 August 2026) proposes updating RFC 9309 so `/robots.txt` groups can attach AI usage preferences, while Google's crawler documentation (updated 2026-10-30) announces plans to support a shared `user-agent: __usage_ai-training` control token in early 2027. [1][5][6]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Permit](/category/permit/) (`permit`) |\n| **Form** | Well-known file (`well-known-file`) |\n| **Originated by** | M. Koster, G. Illyes, H. Zeller, L. Sassman (RFC 9309, 2022-09); AI operators define individual tokens [1][2] |\n| **Governed by** | IETF (RFC 9309 syntax); individual AI crawler operators govern their own token semantics [1][3] |\n| **Track** | IETF Standards Track for RFC 9309 syntax; vendor documentation for individual crawler tokens [1] |\n| **Status** | Published Internet Standards Track RFC 9309 (September 2022); live operator crawler tokens [1] |\n| **Version** | RFC 9309 (September 2022); vendor crawler docs updated continuously (e.g., Google 2026-10-30) [1][6] |\n| **Token format** | ASCII product token (`a-z`, `A-Z`, `_`, `-`), e.g. `GPTBot`, `ClaudeBot`, `Google-Extended`, `Applebot-Extended` [1][2][6][7][8] |\n| **Record format** | UTF-8 `text/plain` groups of `User-agent` lines followed by `Allow` and `Disallow` path rules [1] |\n| **Specification** | [RFC 9309: Robots Exclusion Protocol](https://www.rfc-editor.org/rfc/rfc9309.html) [1] |\n| **Found at** | `/robots.txt` at the top-level path of each service (`scheme:[//authority]/robots.txt`) [1] |\n| **Licence** | IETF Trust BCP 78 and Revised BSD License for RFC 9309 code components [1] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [How a crawler matches a group and a path](#how-a-crawler-matches-a-group-and-a-path)\n3. [Operator tokens, page directives, and usage preferences](#operator-tokens-page-directives-and-usage-preferences)\n4. [Counterparts and related standards](#counterparts-and-related-standards)\n5. [Adoption and ecosystem](#adoption-and-ecosystem)\n6. [See also](#see-also)\n7. [References](#references)\n\n---\n\n## Problem and scope\n\nRFC 9309 requests that crawlers honor rules about which URIs they access. Gary Illyes calls robots.txt an access preference protocol that does not dictate what a system does with the data after it has already crawled it, so a disallow does not itself state a training preference. [1][3] AI operators publish separate `User-agent` tokens for distinct downstream functions—allowing a webmaster, for example, to permit `OAI-SearchBot` for search visibility while disallowing `GPTBot` to opt out of generative AI foundation-model training, alongside separate tokens such as `ChatGPT-User` for user-initiated actions. [2] These rules are not a form of access authorization and are not a substitute for valid content security measures. `ChatGPT-User`, Google's user-triggered fetchers, `Perplexity-User`, and `Meta-ExternalFetcher` may ignore or bypass robots.txt when a person requested the fetch. A page that's disallowed in robots.txt can still be indexed if linked to from other sites, and the search result won't have a description. [1][2][9][10][11][12]\n\n### Multi-token AI crawler `robots.txt` groups (`bbc.co.uk`)\n\n```text\nUser-agent: ClaudeBot\nDisallow: /\n\nUser-agent: Claude-Web\nDisallow: /\n\nUser-agent: anthropic-ai\nDisallow: /\n\nUser-agent: cohere-ai\nDisallow: /\n\nUser-agent: Bytespider\nDisallow: /\n\nUser-agent: PetalBot\nDisallow: /\n\nUser-agent: Scrapy\nDisallow: /\n\nUser-agent: Applebot-Extended\nDisallow: /\n\nUser-agent: GPTBot\nDisallow: /\n\nUser-agent: ChatGPT-User\nDisallow: /\n\nUser-agent: Google-CloudVertexBot\nDisallow: /\n\nUser-agent: Google-Extended\nDisallow: /\n\nUser-Agent: PerplexityBot\nDisallow: /\n\nUser-agent: Perplexity-User\nDisallow: /\n\nUser-agent: meta-externalagent\nDisallow: /\n\nUser-agent: OAI-SearchBot\nDisallow: /\n```\n\n*Contiguous `/robots.txt` excerpt from `www.bbc.co.uk` assigning `Disallow: /` to named AI training, search, user-fetcher, and control tokens including `ClaudeBot`, `Applebot-Extended`, `GPTBot`, `ChatGPT-User`, `Google-Extended`, `PerplexityBot`, `Perplexity-User`, `meta-externalagent`, and `OAI-SearchBot`. [4]*\n\n---\n\n## How a crawler matches a group and a path\n\nThe product token may contain only letters, underscores, and hyphens. When more than one group matches the same user-agent, those rules must be combined into one group before any path is judged. [1]\n\n- **Longest path wins:** When multiple rules in a group match a requested URI, RFC 9309 selects the most specific match—defined as the rule pattern with the most octets (for example, `Disallow: /example/page/disallowed.gif` overrides `Allow: /example/page/`). [1]\n- **A tie allows, and silence allows:** If an allow rule and a disallow rule are equivalent, the allow rule should be used. If no rule matches the URI, or the group has no rules, the URI is allowed. The `/robots.txt` URI is implicitly allowed. [1]\n- **The asterisk group:** If no group matches the product token, the crawler must obey the group whose user-agent line is `*`, when that group is present. If nothing matches and there is no `*` group, or the file has no groups at all, no rules apply. [1]\n- **Encoding, disclosure, and the parse limit:** Octets outside ASCII, and reserved characters, must be percent-encoded before paths are compared. Listing a path exposes it publicly and makes it discoverable. Crawlers should impose a parsing limit, and that limit must be at least 500 kibibytes. [1]\n\n---\n\n## Operator tokens, page directives, and usage preferences\n\nTraining crawlers, search crawlers, user-triggered fetchers, and control tokens with no HTTP client of their own are different product tokens. A `Disallow` governs fetching. The `noindex` meta tag, the `nosnippet` meta tag, and an IETF `Content-Usage` preference govern indexing and reuse. [1][2][5][6][8][12]\n\n- **Training and search crawlers:** Sites opted out of `OAI-SearchBot` are absent from ChatGPT search answers, though they can still appear as navigational links. Restricting `ClaudeBot` excludes future materials from Anthropic's training datasets; disabling `Claude-SearchBot` prevents search indexing; disabling `Claude-User` prevents retrieval for a user query. `PerplexityBot` links sites in Perplexity search and does not crawl content for AI foundation models. [2][7][10]\n- **Control tokens beside the search crawler:** `Google-Extended` has no separate HTTP user-agent string and is used in a control capacity; it does not affect inclusion or ranking in Google Search. `Applebot-Extended` does not crawl webpages, so disallowed pages can remain in search results. `Perplexity-User` fetches pages cited in user-triggered queries rather than crawling the web or collecting AI foundation-model training data. `Meta-ExternalFetcher` fetches links a user requested. [6][8][10][11]\n- **Corpus crawlers:** `Meta-ExternalAgent` crawls to train foundation AI models or to index content directly. `Amazonbot` may be used to train Amazon AI models. Common Crawl's block is `User-agent: CCBot` and `Disallow: /`. Crawl Census says `Bytespider` downloads content to train ByteDance LLMs and is widely reported to ignore robots.txt. [11][13][14][15]\n- **Page tags and Content-Usage:** The control Google documents for keeping a URL out of Search is the `noindex` meta tag or response header. Apple's `nosnippet` meta tag applies to specific content, and `Applebot` may still crawl when `Applebot-Extended` is disallowed. `draft-ietf-aipref-attach-05` attaches preferences to robots.txt and references `draft-ietf-aipref-vocab-07` (\"A Vocabulary For Expressing AI Usage Preferences\"), which was superseded on 14 September 2026 by `draft-ietf-aipref-vocab-08` defining the preference vocabulary (`train-ai`). `Allow` and `Disallow` still use the longest matching path prefix, and `Content-Usage: train-ai=n` states the preference. Cloudflare's separate `Content-Signal` values include `ai-input` and `ai-train`. [5][8][12][16][17]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **robots.txt (RFC 9309)** | `RFC 9309` | Profiles classic standard | RFC 9309 defines `User-agent`, `Allow`, and `Disallow` group syntax; AI operators assign training or search meanings to specific tokens. [1][3] |\n| **HTTP User-Agent (RFC 9110)** | `RFC 9110` | Analogous to classic standard | HTTP `User-Agent` identifies client requests, whereas control tokens like `Google-Extended` appear only in `robots.txt` without a separate header. [1][6] |\n| **X-Robots-Tag HTTP header** | `HTTP response header` | Complements | Delivers per-response indexing directives like `X-Robots-Tag: applebot: nosnippet` in HTTP headers instead of path rules in `/robots.txt`. [8] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[AIPREF Vocabulary (A Vocabulary For Expressing AI Usage Preferences)](/protocols/aipref-vocabulary/)** | Complements | Defines standardized AI usage preference labels (`train-ai`) rather than per-operator `User-agent` product tokens in `/robots.txt`. [1][5][16] |\n| **[AIPREF Content-Usage Attachment](/protocols/aipref-content-usage-attachment/)** | Complements | Attaches `Content-Usage` preference rules (such as `train-ai=n`) inside `robots.txt` groups and HTTP headers alongside `User-agent` tokens. [1][5] |\n| **[Web Bot Auth](/protocols/webbotauth/)** | Complements | Authenticates automated HTTP traffic using cryptographic HTTP Message Signatures, whereas `robots.txt` product tokens are unauthenticated strings. [1][18] |\n| **[TDMRep (TDM Reservation Protocol)](/protocols/tdmrep/)** | Complements | Reserves EU text-and-data-mining rights via `/.well-known/tdmrep.json` (`tdm-reservation: 1`) rather than per-crawler path rules in `/robots.txt`. [1][19] |\n| **[Really Simple Licensing](/protocols/rsl/)** | Complements | Complements robots.txt with XML licensing terms; AI crawler tokens are not a prerequisite as RSL supports HTTP Link, HTML, and RSS. [1][20] |\n| **[Content Signals Policy](/protocols/cloudflare-content-signals-policy/)** | Complements | Adds `Content-Signal: search=yes, ai-input=no, ai-train=no` directives inside the `/robots.txt` group selected by a `User-agent` token. [1][17] |\n| **[Cloudflare Pay Per Crawl](/protocols/cloudflare-pay-per-crawl/)** | Complements | Monetizes AI crawler access per zone by returning HTTP 402 Payment Required with pricing unless request headers declare payment intent, instead of relying on voluntary `/robots.txt` `Disallow` rules. [1][21] |\n| **[ai.txt](/protocols/ai-txt/)** | Peer alternative | Publishes training, scraping, indexing, and caching permissions at `/.well-known/ai.txt` instead of per-bot `User-agent` groups in `/robots.txt`. [1][22] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (18 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).*\n\n### Publishers & managed robots.txt providers\n\n| Actor | Role | Status | Observed User-agent tokens & directives | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **The New York Times** | Publisher | Live (HTTP 200) · checked 2026-10-30 | Sets `Disallow: /` across 15 AI crawlers (`GPTBot`, `ClaudeBot`, `Google-Extended`, `PerplexityBot`, `CCBot`); allows `Google-CloudVertexBot` on `/wirecutter/` and `/athletic/`. | [The New York Times robots.txt](https://www.nytimes.com/robots.txt) [23] |\n| **BBC** | Publisher | Live (HTTP 200) · checked 2026-10-30 | Sets `Disallow: /` across 14 named AI crawler groups (plus `Scrapy` and `PetalBot`), including `GPTBot`, `OAI-SearchBot`, `ClaudeBot`, `Google-Extended`, `Applebot-Extended`, and `PerplexityBot`. | [BBC robots.txt](https://www.bbc.co.uk/robots.txt) [4] |\n| **The Atlantic** | Publisher | Live (HTTP 200) · checked 2026-10-30 | Allows `GPTBot` and `OAI-SearchBot` (`Allow: /`), blocks `ClaudeBot` and `Google-Extended` (`Disallow: /`), and sets `Content-signal: search=yes, ai-input=no, ai-train=no`. | [The Atlantic robots.txt](https://www.theatlantic.com/robots.txt) [24] |\n| **Vox Media (vox.com)** | Publisher (vox.com) | Live (HTTP 200) · checked 2026-10-30 | Allows `User-agent: GPTBot` and `User-agent: Amazonbot` (`Allow: /`); sets `Disallow: /` (with `Allow: /sp/` and `Allow: /strategist`) for `ClaudeBot`, `Google-Extended`, `PerplexityBot`, `Applebot-Extended`, and `CCBot`. | [Vox Media robots.txt](https://www.vox.com/robots.txt) [25] |\n| **GitHub** | Publisher | Live (HTTP 200) · checked 2026-10-30 | Groups `GPTBot`, `OAI-SearchBot`, `ClaudeBot`, `anthropic-ai`, and `PerplexityBot` under `Crawl-delay: 1` with `Disallow: /copilot/` and `Disallow: /gist/`. | [GitHub robots.txt](https://github.com/robots.txt) [26] |\n| **Cloudflare Managed robots.txt** | Managed policy publisher | Partial · as of 2026-11-02 | Bot Preference Sync generates managed `robots.txt` directives from Search, Agent, and Training policies (including `Content-Signal: search=yes, ai-train=no`); `robots.txt` compliance remains voluntary. | [Cloudflare robots.txt setting](https://developers.cloudflare.com/bots/additional-configurations/managed-robots-txt/) [27] · [Cloudflare Content Signals Policy blog](https://blog.cloudflare.com/content-signals-policy/) [17] · [Cloudflare press release](https://www.cloudflare.com/press/press-releases/2025/cloudflare-gives-creators-new-tool-to-control-use-of-their-content/) [28] |\n\n### AI crawler operators & documented tokens\n\n| Actor | Role | Status | Training vs. search / user-triggered tokens | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **OpenAI** | Crawler operator | Supported · checked 2026-10-30 | `GPTBot` crawls for model training; `OAI-SearchBot` indexes ChatGPT search; `ChatGPT-User` handles user actions; `OAI-AdsBot` checks ads. | [OpenAI, Overview of OpenAI crawlers](https://developers.openai.com/api/docs/bots) [2] |\n| **Anthropic** | Crawler operator | Supported · as of 2026-04-07 | `ClaudeBot` collects model training data; `Claude-SearchBot` indexes search results; `Claude-User` fetches pages for user queries. | [Anthropic, Does Anthropic crawl data from the web?](https://support.claude.com/en/articles/8896518-does-anthropic-crawl-data-from-the-web-and-how-can-site-owners-block-the-crawler) [7] |\n| **Google** | Crawler operator | Supported · as of 2026-10-30 | `Google-Extended` (control-only token) governs Gemini training and grounding; `Google-CloudVertexBot` governs site-owner Vertex AI Agent crawls. | [Google, common crawlers](https://developers.google.com/crawling/docs/crawlers-fetchers/google-common-crawlers) [6] |\n| **Perplexity** | Crawler operator | Supported · checked 2026-10-30 | `PerplexityBot` indexes search results (no foundation model training); `Perplexity-User` handles user fetches and generally ignores `robots.txt`. | [Perplexity, Perplexity crawlers](https://docs.perplexity.ai/docs/resources/perplexity-crawlers) [10] |\n| **Apple** | Crawler operator | Supported · as of 2026-09-04 | Disallowing `Applebot-Extended` opts out of generative model training while keeping `Applebot` active for Spotlight, Siri, and Safari search. | [Apple, About Applebot](https://support.apple.com/en-us/119829) [8] |\n| **Meta** | Crawler operator | Supported · as of 2026-06-16 | `Meta-ExternalAgent` crawls for AI model training; `Meta-WebIndexer` indexes search; `Meta-ExternalFetcher` handles user fetches and may bypass `robots.txt`. | [Meta web crawlers (archived 2026-06-16)](https://web.archive.org/web/20260616005830id_/https://developers.facebook.com/docs/sharing/webmasters/web-crawlers/) [11] · [The New York Times robots.txt](https://www.nytimes.com/robots.txt) [23] |\n| **Common Crawl** | Crawler operator | Supported · checked 2026-10-30 | `CCBot` (`CCBot/2.0`) crawls open web archive datasets; honors `User-agent: CCBot` with `Disallow: /` and publishes `ccbot.json` IPs. | [Common Crawl, CCBot](https://commoncrawl.org/ccbot) [14] |\n| **Amazon** | Crawler operator | Supported · as of 2026-10-26 | `Amazonbot` crawls for service improvement and AI training; `Amzn-SearchBot` indexes Alexa search; `Amzn-User` serves live user requests. | [Amazon, Amazon Web Search crawlers](https://developer.amazon.com/docs/amazonbot/amazonbot.html) [13] |\n| **Mistral** | Crawler operator | Supported · checked 2026-10-30 | `MistralAI-Training` crawls for generative model training; `MistralAI-Index` (search indexing) and `MistralAI-User` (Vibe user actions) do not train models. | [Mistral, Mistral crawlers](https://docs.mistral.ai/robots) [29] |\n| **DuckDuckGo** | Crawler operator | Supported · checked 2026-10-30 | `DuckAssistBot` (`DuckAssistBot/1.2`) crawls in real time for source-cited AI answers, never trains models, and honors `robots.txt`. | [DuckDuckGo, DuckAssistBot](https://duckduckgo.com/duckduckgo-help-pages/results/duckassistbot) [30] |\n| **Allen Institute for AI** | Crawler operator | Supported · checked 2026-10-30 | `AI2Bot` (`Mozilla/5.0 (compatible) AI2Bot (+https://www.allenai.org/crawler)`) crawls web content to train open language models. | [Allen Institute for AI, crawling notice](https://allenai.org/crawler) [31] |\n| **Cohere** | Crawler operator | Listed · checked 2026-10-30 | Documents `User-agent: Coherebot` with `Disallow: /` for potential future training crawls; publisher files also block `User-agent: cohere-ai`. | [Cohere, web crawlers and robots.txt](https://docs.cohere.com/docs/cohere-web-crawlers) [32] · [The New York Times robots.txt](https://www.nytimes.com/robots.txt) [23] |\n\n### Ecosystem censuses\n\n- **SearchDock, State of AI Crawler Access 2026 (Tranco top-1,000 block rate)** (*as of 2026-10-20*): Across 555 reachable websites in the Tranco top 1,000 domains, 27.2% blocked at least one AI crawler (20.5% in robots.txt and 10.3% at the server or CDN), 6.7% blocked GPTBot while allowing OAI-SearchBot, and 3.8% included a Cloudflare Content-Signal line. [33]\n- **SearchDock, State of AI Crawler Access 2026 (homepage disallow shares)** (*as of 2026-10-20*): Among the 555 reachable Tranco top-1,000 sites, homepage robots.txt disallow shares were Bytespider 16.9%, CCBot 16.6%, GPTBot 14.4%, ClaudeBot 13.7%, meta-externalagent 13.2%, Google-Extended 12.8%, PerplexityBot 11.5%, Applebot-Extended 10.1%, anthropic-ai 9.9%, ChatGPT-User 9.7%, Claude-SearchBot 8.1%, and OAI-SearchBot 7.7% (compared with Googlebot at 1.8%). [33]\n- **SearchDock, State of AI Crawler Access 2026 (server/CDN vs. robots.txt blocks)** (*as of 2026-10-20*): While serving Googlebot normally, servers or CDNs blocked GPTBot on 49 of 542 sites (9%, including 35 sites or 6.5% where robots.txt allowed GPTBot), ClaudeBot on 47 of 545 sites (8.6%, including 35 or 6.4% hidden blocks), PerplexityBot on 33 of 545 sites (6.1%, including 19 or 3.5% hidden blocks), and OAI-SearchBot on 31 of 542 sites (5.7%, including 24 or 4.4% hidden blocks). [33]\n- **Kavel, AI Crawler Study (945-site scan across 14 crawlers)** (*as of 2026-10-22*): Across 746 readable robots.txt files from 945 websites tested for 14 AI crawlers, 25.9% (193 sites) blocked at least one AI crawler and 9.2% (69 sites) blocked AI training crawlers while leaving every AI search crawler open: CCBot 19.6% (146), Bytespider 18.4% (137), ClaudeBot 18.1% (135), Applebot-Extended 17% (127), GPTBot 16.9% (126), Meta-ExternalAgent 16.8% (125), PerplexityBot 15.3% (114), Google-Extended 13.5% (101), Amazonbot 13.3% (99), OAI-SearchBot 9.4% (70), ChatGPT-User 9.2% (69), Claude-User 8.8% (66), Perplexity-User 8.7% (65), and Claude-SearchBot 8.3% (62). [34]\n- **Stackscan AI crawler statistics** (*as of 2026-10-31*): Stackscan's update of 31 October 2026 read robots.txt on 90.8 million of 151.6 million live sites. 6,250,586 sites block GPTBot, 6.88% of sites with a robots.txt. Sites on Cloudflare's network block GPTBot at 23.0%, other sites with a robots.txt at 1.5%, and 84.0% of GPTBot blocks sit behind Cloudflare. [35]\n- **CrawlCheck radar** (*as of 2026-11-05*): CrawlCheck's run finished 2026-11-05 on 9,776 Tranco sites. Among 4,597 sites that serve a robots.txt, GPTBot was closed on 753 (16.4%). Among 5,627 homepages that answered a browser, 1,087 (19.3%) refused a client declaring GPTBot. 17% of those answering homepages serve /llms.txt, and 22.7% refuse at least one AI identity. [36]\n- **Crawl Census bot directory**: Tracks 48 agents across 29,963 recorded sites: root disallow rules block `GPTBot` on 2,930 of 29,961 sites (10%), `ClaudeBot` on 2,567 of 29,961 (9%), control-only `Google-Extended` on 2,262 of 29,961 (8%), and answer-index `OAI-SearchBot` on 614 of 29,961 (2%). [15]\n- **Cloudflare, crawlers and referral traffic** (*as of 2025-07*): Among AI-only bots, Cloudflare reports GPTBot's share moving from 11.9% in July 2024 to 28.1% in July 2025. Across all AI and search crawler traffic, GPTBot moved from 4.7% to 11.7% over the same months. Training rose from 72% of AI crawling in July 2024 to 79% in July 2025. [37]\n- **Seonix robots.txt audit** (*as of 2026-11-03*): Seonix's crawl of 3 November 2026 found that 12.2% of 14,318 sites with a readable robots.txt block a training bot by name (1,744 sites). 35.8% of those named training blocks sit in a file that contains Cloudflare's managed block. 2.3% block a search or answer bot by name. [38]\n\n---\n\n## See also\n\n- **[llms.txt](/protocols/llms-txt/)** *(Complements)* — Governs AI crawler access using `robots.txt` product tokens like `GPTBot` and `OAI-SearchBot`, whereas `/llms.txt` curates links without access controls.\n- **[Markdown for Agents](/protocols/cloudflare-markdown-for-agents/)** *(Complements)* — robots.txt rules for AI crawlers treat AI training, search, and user-triggered crawlers separately and include a token list, rather than selecting a representation of a page.\n- **[Agent Readability Spec](/protocols/vercel-agent-readability/)** *(Complements)* — The guide looks for a robots.txt file, while AI crawler tokens are the User-agent product tokens publishers put in that file's groups.\n- **[agent-permissions.json](/protocols/agent-permissions-json/)** *(Peer alternative)* — agent-permissions.json lists action permissions, including resource_rules verbs such as click_element and submit_form, at /.well-known/agent-permissions.json, while AI crawler tokens only match User-agent products to path rules in /robots.txt.\n- **[agents.txt](/protocols/agents-txt/)** *(Complements)* — agents.txt announces capabilities, while AI crawler tokens in /robots.txt only match a product token to crawl Allow and Disallow rules.\n- **[Signature Agent Card (Web Bot Auth registry)](/protocols/web-bot-auth-signature-agent-card/)** *(Complements)* — The card's rfc9309-product-token and rfc9309-compliance fields name the robots.txt product tokens the bot uses, which robots.txt itself only matches as a user-agent string.\n- **[JAFAR: A JSON-Based Format for Publishing IP Ranges of Automated HTTP Clients](/protocols/jafar/)** *(Complements)* — robots.txt matches a crawler by product token, and JAFAR publishes the prefixes that token's operator claims to send from.\n- **Category:** [Permit protocols](/category/permit/)\n\n---\n\n## References\n\n1. M. Koster, G. Illyes, H. Zeller, and L. Sassman (IETF), *RFC 9309: Robots Exclusion Protocol* (published September 2022) — <https://www.rfc-editor.org/rfc/rfc9309.html>\n2. OpenAI, *Overview of OpenAI Crawlers* (fetched 2026-10-30) — <https://developers.openai.com/api/docs/bots>\n3. Matt G. Southern (Search Engine Journal), *Google Explains The Limit Of Robots.txt For AI Content Use* (published 2026-10-22) — <https://www.searchenginejournal.com/google-illyes-robots-txt-crawling-ai-training/593957/>\n4. BBC, *robots.txt* (fetched 2026-10-30) — <https://www.bbc.co.uk/robots.txt>\n5. G. Illyes (Google) and M. Thomson (Mozilla), *Associating AI Usage Preferences with Content in HTTP (draft-ietf-aipref-attach-05)* (19 August 2026) — <https://www.ietf.org/archive/id/draft-ietf-aipref-attach-05.txt>\n6. Google, *Google's common crawlers* (updated 2026-10-30) — <https://developers.google.com/crawling/docs/crawlers-fetchers/google-common-crawlers>\n7. Anthropic, *Does Anthropic crawl data from the web, and how can site owners block the crawler?* (published 2026-04-07) — <https://support.claude.com/en/articles/8896518-does-anthropic-crawl-data-from-the-web-and-how-can-site-owners-block-the-crawler>\n8. Apple Support, *About Applebot* (published 2026-09-04) — <https://support.apple.com/en-us/119829>\n9. Google, *Google's user-triggered fetchers* (updated 2026-08-19) — <https://developers.google.com/crawling/docs/crawlers-fetchers/google-user-triggered-fetchers>\n10. Perplexity, *Perplexity Crawlers* (fetched 2026-10-30) — <https://docs.perplexity.ai/docs/resources/perplexity-crawlers>\n11. Meta, *Meta Web Crawlers* (Wayback capture 2026-06-16) — <https://web.archive.org/web/20260616005830id_/https://developers.facebook.com/docs/sharing/webmasters/web-crawlers/>\n12. Google Search Central, *Introduction to robots.txt* (checked 2026-11-05) — <https://developers.google.com/search/docs/crawling-indexing/robots/intro>\n13. Amazon, *Amazon Web Search crawlers* (updated 2026-10-26) — <https://developer.amazon.com/docs/amazonbot/amazonbot.html>\n14. Common Crawl, *CCBot* (fetched 2026-10-30) — <https://commoncrawl.org/ccbot>\n15. Crawl Census, *Every AI crawler we track* (fetched 2026-11-06) — <https://crawlcensus.com/bots>\n16. P. Keller (Open Future) and M. Thomson, Ed. (Mozilla), *A Vocabulary For Expressing AI Usage Preferences (draft-ietf-aipref-vocab-08)* (14 September 2026; expires 18 March 2027) — <https://www.ietf.org/archive/id/draft-ietf-aipref-vocab-08.txt>\n17. Cloudflare, *Giving users choice with Cloudflare's new Content Signals Policy* (published 2025-09-24; modified 2026-07-15) — <https://blog.cloudflare.com/content-signals-policy/>\n18. T. Meunier (Cloudflare) and S. Major (Google), *draft-ietf-webbotauth-httpsig-protocol — HTTP Message Signatures for automated traffic (IETF Datatracker)* (current tracker, checked 2026-10-30 (latest revision -01 dated 2026-10-29)) — <https://datatracker.ietf.org/doc/draft-ietf-webbotauth-httpsig-protocol/>\n19. Laurent Le Meur (EDRLab), *TDM Reservation Protocol (TDMRep)* (Final Community Group Report, 10 May 2024) — <https://www.w3.org/community/reports/tdmrep/CG-FINAL-tdmrep-20240510/>\n20. RSL Collective, *Really Simple Licensing (RSL) 1.0 Specification* (fetched 2026-10-30) — <https://rslstandard.org/rsl>\n21. Cloudflare, *What is Pay Per Crawl?* (updated 2026-07-28) — <https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/what-is-pay-per-crawl/>\n22. Kayla Cardillo, *draft-car-ai-txt-wellknown-00* (fetched 2026-10-30) — <https://github.com/kaylacar/ai-txt/blob/master/ietf/draft-car-ai-txt-wellknown-00.md>\n23. The New York Times, *robots.txt* (fetched 2026-10-30) — <https://www.nytimes.com/robots.txt>\n24. The Atlantic, *robots.txt* (fetched 2026-10-30) — <https://www.theatlantic.com/robots.txt>\n25. Vox, *robots.txt* (fetched 2026-10-30) — <https://www.vox.com/robots.txt>\n26. GitHub, Inc., *GitHub robots.txt* (fetched 2026-10-30) — <https://github.com/robots.txt>\n27. Cloudflare, *robots.txt setting* (Last updated Nov 2, 2026; fetched 2026-11-11) — <https://developers.cloudflare.com/bots/additional-configurations/managed-robots-txt/>\n28. Cloudflare, *Cloudflare Gives Creators New Tool to Control Use of Their Content* (published 2025-09-24) — <https://www.cloudflare.com/press/press-releases/2025/cloudflare-gives-creators-new-tool-to-control-use-of-their-content/>\n29. Mistral AI, *Mistral crawlers* (fetched 2026-10-30) — <https://docs.mistral.ai/robots>\n30. DuckDuckGo, *DuckAssistBot* (fetched 2026-10-30) — <https://duckduckgo.com/duckduckgo-help-pages/results/duckassistbot>\n31. Ai2, *Crawling notice* (fetched 2026-10-30) — <https://allenai.org/crawler>\n32. Cohere, *Cohere Web Crawlers* (fetched 2026-10-30) — <https://docs.cohere.com/docs/cohere-web-crawlers>\n33. Umang Thakar (SearchDock), *State of AI Crawler Access 2026* (scanned 2026-10-20) — <https://searchdock.io/research/ai-crawler-access-2026/>\n34. Kavel (Lumen Labs Limited), *Which big websites block AI crawlers?* (October 2026 check, finished 2026-10-22) — <https://getkavel.com/ai-crawlers/>\n35. Stackscan, *AI crawler statistics 2026* (updated 31 October 2026; fetched 2026-11-06) — <https://www.stackscan.com/blog/ai-crawler-statistics>\n36. CrawlCheck, *What the top sites tell AI crawlers* (run finished 2026-11-05; fetched 2026-11-06) — <https://crawlcheck.io/radar>\n37. Cloudflare, *From Googlebot to GPTBot: who's crawling your site and why* (July 2024 versus July 2025; fetched 2026-11-06) — <https://blog.cloudflare.com/crawlers-click-ai-bots-training>\n38. Seonix, *AI crawlers in robots.txt: 14,318 sites measured* (crawled 3 November 2026; fetched 2026-11-06) — <https://seonix.ai/research/ai-bots-robots-txt>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "MCP Apps",
   "adoption": {
    "level": "observed",
    "by": "Excalidraw, Metabind, Coronet Arcade, ext-apps examples, Amazon Bedrock AgentCore Runtime, Claude, ChatGPT, Visual Studio Code, and 9 other verified implementations",
    "probe_run": null
   },
   "aliases": [
    "ext-apps",
    "Model Context Protocol UI Extension"
   ],
   "analog": "An iframe-embedded widget returned by a web API, rendered inline by the calling app",
   "collisions": [
    "MCP-UI (a separately-branded client SDK that implements this spec)"
   ],
   "discovery": {
    "mechanism": "MCP tool metadata (_meta.ui.resourceUri)",
    "path": "No well-known path. A UI is a ui:// resource on the MCP server, for example ui://excalidraw/mcp-app.html, and the host reads it with resources/read. Hosts find these resources mainly through _meta.ui.resourceUri in tools/list, and servers may leave UI-only resources out of resources/list"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://blog.modelcontextprotocol.io/posts/2026-01-26-mcp-apps/",
     "claim": "MCP Core Maintainers, *MCP Apps - Bringing UI Capabilities To MCP Clients*, published 2026-01-26",
     "date": null,
     "quote": "Today, we're announcing that MCP Apps are now live as an official MCP extension. / MCP Apps let tools return rich, interactive interfaces instead of plain text. / This is the first official MCP extension, and it's ready for production. / Goose - available today / goose, the reference implementation for MCP, supports MCP Apps.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://modelcontextprotocol.io/seps/1865-mcp-apps-interactive-user-interfaces-for-mcp",
     "claim": "Ido Salomon, Liad Yosef, Olivier Chafik, Jerome Swannack, Jonathan Hefner, Anton Pidkuiko, Nick Cooper, Bryan Ashley, and Alexi Christakis, *SEP-1865: MCP Apps - Interactive User Interfaces for MCP*, created 2025-11-21; status Final; checked 2026-10-30",
     "date": null,
     "quote": "This SEP proposes an extension to MCP (per SEP-1724) that enables servers to deliver interactive user interfaces to hosts. MCP Apps introduces a standardized pattern for declaring UI resources via the ui:// URI scheme / OpenAI's Apps SDK, launched in November 2025, further validated the demand / This SEP has reached Final status and is preserved as a historical record of the design as accepted. / This SEP proposes an extension to MCP (per SEP-1724) that enables servers to deliver interactive user interfaces to hosts. / Type Extensions Track / Created 2025-11-21 Author(s) Ido Salomon (@idosal), Liad Yosef (@liadyosef), Olivier Chafik (@olivierchafik), Jerome Swannack (@jeromeswannack), Jonathan Hefner (@jonathanhefner), Anton Pidkuiko (@antonpidkuiko), Nick Cooper (@nickcooper), Bryan Ashley (@bryanashley), Alexi Christakis (@alexichristakis) / Status Final Type Extensions Track Created 2025-11-21 / Sponsor None (seeking sponsor)",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/2026-01-26/apps.mdx",
     "claim": "Model Context Protocol (ext-apps), *MCP Apps specification, 2026-01-26*, stable 2026-01-26; created 2025-11-21; checked 2026-10-30",
     "date": null,
     "quote": "All View content MUST be rendered in sandboxed iframes with restricted permissions. / Use _meta.ui.resourceUri instead. / MCP Apps uses JSON-RPC 2.0 over postMessage for iframe-host communication. / Authors: Ido Salomon, Liad Yosef, Olivier Chafik, Jerome Swannack, Jonathan Hefner, Anton Pidkuiko, Nick Cooper, Bryan Ashley, Alexi Christakis / Status: Stable (2026-01-26) Created: 2025-11-21 / This extension is identified as: io.modelcontextprotocol/ui / Conceptually, UI iframes act as MCP clients, connecting to the host via a postMessage transport / ui/initialize request & ui/notifications/initialized notification both sent by the View. / The Host MUST NOT send any request or notification to the View before it receives an initialized notification. / This SEP addresses the current limitations through an optional, backwards-compatible extension that unifies the approaches pioneered by MCP-UI and the Apps SDK into a single, open standard. / OpenAI's Apps SDK, launched in November 2025, further validated the demand for rich UI experiences within conversational AI interfaces. / URI MUST start with ui:// scheme / mimeType MUST be text/html;profile=mcp-app (other types reserved for future extensions) / SHOULD be text/html;profile=mcp-app for HTML-based UIs in the initial MVP. / interface UIResource { / The resource content is returned via resources/read / The flat _meta[\"ui/resourceUri\"] format is deprecated. Use _meta.ui.resourceUri instead. The deprecated format will be removed before GA. / Status: Stable (2026-01-26) / CSP enforcement: Host MUST construct CSP headers based on declared domains / Host SHOULD log CSP configurations for security review / If the Host is a web page, it MUST wrap the View and communicate with it through an intermediate Sandbox proxy. / The Host and the Sandbox MUST have different origins. / Since UI resources are primarily discovered through tool metadata, Servers MAY omit UI-only resources from resources/list / MCP lacks a standardized way for servers to deliver rich, interactive user interfaces to hosts. / This gap blocks many use cases that require visual presentation and interactivity that goes beyond plain text or structured data. / ui/notifications/tool-input - Host MUST send this notification with the complete tool arguments after the View's initialize request completes. / This notification is sent at most once and is required before sending ui/notifications/tool-result. / MUST use the ui:// URI scheme to distinguish UI resources from other MCP resource types. / Decision: Use _meta.ui.visibility array to control tool accessibility between model and app. / As an extension, MCP Apps is optional and must be explicitly negotiated between clients and servers through the extension capabilities mechanism / Origins for network requests (fetch/XHR/WebSocket) / Origins for static resources (images, scripts, stylesheets, fonts, media) / Origins for nested iframes / Boolean controlling whether a visible border and background is provided by the host. / interface McpUiResourceCsp { ... baseUriDomains?: string[], } interface UIResourceMeta { / The typical lifecycle for rendering a UI resource: / UI Initialization (Desktop/Native Hosts) / Example (tool visible to both model and app): / The flat _meta[\"ui/resourceUri\"] format is deprecated. Use _meta.ui.resourceUri instead. / Content MUST be provided via either text (string) or blob (base64-encoded) / Content MUST be valid HTML5 document / Who can access this tool. Default: [\"model\", \"app\"] / \"model\": Tool visible to and callable by the agent / \"app\": Tool callable by the app from this server only / Host MUST reject tools/call requests from apps for tools that don't include \"app\" in visibility / Clients advertise MCP Apps support in the initialize request using the extension identifier io.modelcontextprotocol/ui / mimeTypes: Array of supported content types (REQUIRED, e.g., [\"text/html;profile=mcp-app\"]) / Servers SHOULD check client capabilities before registering UI-enabled tools. The SDK provides the getUiCapability helper for this: / Servers SHOULD provide text-only fallback behavior for all UI-enabled tools / Tools MUST return meaningful content array even when UI is available / Servers MAY register different tool variants based on host capabilities / Maps to CSP connect-src directive / Empty or omitted = no external connections (secure default) / Empty or omitted = no external resources (secure default) / Maps to CSP frame-src directive / Empty or omitted = no nested iframes allowed (frame-src 'none') / true: Request visible border + background / false: Request no visible border + background / omitted: host decides border / No Loosening: Host MAY further restrict but MUST NOT allow undeclared domains / Restrictive Default: If ui.csp is omitted, Host MUST use: / prefersBorder?: boolean, / connectDomains?: string[], / resourceDomains?: string[], / frameDomains?: string[], / Maps to CSP base-uri directive ... baseUriDomains?: string[], / ui/initialize → ui/notifications/initialized - MCP-like handshake (replaces custom iframe-ready pattern in MCP-UI) / When the View sends an ui/initialize request to the Host, the Host SHOULD include UI-specific context in the McpUiInitializeResult's hostContext field: / ui/notifications/tool-input-partial - Host MAY send this notification zero or more times while the agent is streaming tool arguments, before ui/notifications/tool-input is sent. / Host MUST send this notification when tool execution completes (if the View is displayed during tool execution). / ui/notifications/tool-result - Tool execution result / Host MUST send this notification if the tool execution was cancelled, for any reason (which can optionally be specified), including user action, sampling error, classifier intervention, etc. / ui/notifications/tool-cancelled - Tool execution was cancelled / ui/notifications/host-context-changed - Host context has changed / Host MAY send this notification when any context field changes (e.g., theme toggle, display mode change, device orientation change, window/panel resize). / This notification contains partial updates - the View SHOULD merge received fields with its current context state. / UI iframes can use the following subset of standard MCP protocol messages: / tools/call - Execute a tool on the MCP server / ui/open-link - Request host to open external URL / Host SHOULD open the URL in the user's default browser or a new tab. / ui/message - Send message content to the host's chat interface / Host SHOULD add the message to the conversation context, preserving the specified role. / Host MAY request user consent. / ui/update-model-context - Update the model context / The View MAY send this request to update the Host's model context. / This context will be used in future turns. Each request overwrites the previous context sent by the View. / io.modelcontextprotocol/ui / text/html;profile=mcp-app / ui://",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://mcpui.dev/about",
     "claim": "MCP-UI, *About*, checked 2026-10-30",
     "date": null,
     "quote": "Today, mcp-ui implements the MCP Apps standard / Today, mcp-ui implements the MCP Apps standard while continuing to push the boundaries of what's possible with UI over MCP. / @mcp-ui/client / Client SDK with React components / Server SDKs for TypeScript, Python, and Ruby / Apache 2.0 License",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://developers.googleblog.com/a2ui-and-mcp-apps/",
     "claim": "Google A2UI Team, Ido Salomon, and Liad Yosef, *A2UI + MCP Apps: Combining the best of declarative and custom agentic UIs*, published 2026-06-17",
     "date": null,
     "quote": "Instead of sending raw HTML, CSS, and JavaScript, A2UI employs a JSON payload to define what to render / Model Context Protocol (MCP) Apps offer creative freedom within an iframe using standard web technologies. / Instead of sending raw HTML, CSS, and JavaScript, A2UI employs a JSON payload to define what to render, allowing the host application to handle the presentation through its native components. / developers are restricted to a specific component library.",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://github.com/modelcontextprotocol/ext-apps/releases/tag/v1.0.0",
     "claim": "modelcontextprotocol/ext-apps, *Release 1.0.0*, published 2026-01-26",
     "date": null,
     "quote": "stable spec release 2026-01-26 and SDK v1.0.0 / \"published_at\": \"2026-01-26T17:32:40Z\"",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://github.com/modelcontextprotocol/modelcontextprotocol/pull/1865",
     "claim": "Ido Salomon (idosal), *SEP-1865: MCP Apps - Interactive User Interfaces for MCP, pull request #1865*, opened 2025-11-21; merged 2026-01-28",
     "date": null,
     "quote": "\"mergedTime\":\"2026-01-28T18:08:16Z\" / Jan 28, 2026 … Merged SEP-1865: MCP Apps - Interactive User Interfaces for MCP",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://blog.modelcontextprotocol.io/posts/2025-11-21-mcp-apps/",
     "claim": "Anton Pidkuiko, Olivier Chafik, Ido Salomon, Liad Yosef, Nick Cooper, Sean Strong, Jerome Swannack, Alexi Christakis, and Bryan Ashley, *MCP Apps: Extending servers with interactive user interfaces*, published 2025-11-21",
     "date": null,
     "quote": "The SEP was authored by MCP Core Maintainers at OpenAI and Anthropic, together with the MCP-UI creators and lead maintainers of the MCP UI Community Working Group. / UI templates are resources with the ui:// URI scheme, referenced in tool metadata. / Currently, MCP servers are limited to exchanging text and structured data with hosts.",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://github.com/modelcontextprotocol/ext-apps",
     "claim": "Model Context Protocol, *ext-apps: Official repo for spec and SDK of MCP Apps*, checked 2026-10-30",
     "date": null,
     "quote": "modelcontextprotocol/ext-apps: Official repo for spec & SDK of MCP Apps protocol / 2026-01-26 stable specification/2026-01-26/apps.mdx draft development specification/draft/apps.mdx / specification/2026-01-26/apps.mdx / License: Apache 2.0 / examples/map-server / The wire protocol is unchanged between ext-apps 1.x and 2.x / render inline in Claude, ChatGPT and any other compliant chat client. / This repo ships four Agent Skills / create-mcp-app / migrate-oai-app / add-app-to-server / convert-web-app",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://modelcontextprotocol.io/extensions/overview",
     "claim": "Model Context Protocol, *Extensions Overview*, checked 2026-10-30",
     "date": null,
     "quote": "Official extensions use the io.modelcontextprotocol vendor prefix.",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://registry.npmjs.org/@modelcontextprotocol/ext-apps",
     "claim": "Olivier Chafik (npm), *@modelcontextprotocol/ext-apps*, created 2025-12-08; latest 2.0.4 modified 2026-10-27",
     "date": null,
     "quote": "\"latest\":\"2.0.4\" / \"2.1.0\":\"2026-10-27T08:31:59.890Z\" / \"dist-tags\":{\"release-2.0\":\"2.0.3\",\"latest\":\"2.0.4\"} / \"version\":\"2.0.4\",\"author\":{\"name\":\"Olivier Chafik\"},\"license\":\"MIT\" / \"version\":\"2.1.0\",\"author\":{\"name\":\"Olivier Chafik\"},\"license\":\"MIT\" / \"name\":\"@modelcontextprotocol/ext-apps\"",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://github.com/modelcontextprotocol/ext-apps/releases/tag/v2.0.4",
     "claim": "modelcontextprotocol/ext-apps, *Release v2.0.4*, published 2026-10-27",
     "date": null,
     "quote": "\"published_at\": \"2026-10-27T07:12:30Z\" / pdf-server / v2.0.4 / No changes to the @modelcontextprotocol/ext-apps library API.",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://github.com/modelcontextprotocol/ext-apps/releases/tag/v2.0.0",
     "claim": "modelcontextprotocol/ext-apps, *Release v2.0.0*, published 2026-09-08",
     "date": null,
     "quote": "The MCP Apps wire protocol is unchanged: 2.x Views run in 1.x hosts and 2.x hosts render 1.x Views / \"published_at\": \"2026-09-08T18:18:38Z\"",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://raw.githubusercontent.com/modelcontextprotocol/ext-apps/main/package.json",
     "claim": "Olivier Chafik (Model Context Protocol), *@modelcontextprotocol/ext-apps package.json*, version 2.1.0; fetched 2026-11-11",
     "date": null,
     "quote": "\"version\": \"2.1.0\",\n  \"license\": \"MIT\",\n  \"description\": \"MCP Apps SDK — Enable MCP servers to display interactive user interfaces in conversational clients.\", / \"name\": \"@modelcontextprotocol/ext-apps\"",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28/changelog",
     "claim": "Model Context Protocol, *Key changes, revision 2026-07-28*, revision 2026-07-28; checked 2026-10-30",
     "date": null,
     "quote": "Make MCP stateless: remove the initialize / notifications/initialized handshake. Every request now carries its protocol version and client capabilities in _meta ( io.modelcontextprotocol/protocolVersion , io.modelcontextprotocol/clientCapabilities ).",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://github.com/modelcontextprotocol/csharp-sdk/issues/1431",
     "claim": "mikekistler (modelcontextprotocol/csharp-sdk), *SEP-1865: MCP Apps - Interactive User Interfaces for MCP (#1431)*, 2026-03-13",
     "date": "2026-03-13",
     "quote": "State: closed | Author: mikekistler | Created: 2026-03-13T21:59:20Z / The TypeScript SDK provides the foundation, and a dedicated package [`@modelcontextprotocol/ext-apps`](https://www.npmjs.com/package/@modelcontextprotocol/ext-apps) delivers full MCP Apps support: / `registerAppTool()` — registers tools with normalized UI metadata / `registerAppResource()` — registers resources with default MCP Apps MIME type / `getUiCapability()` — reads MCP Apps capabilities from client / No dedicated MCP Apps helpers — servers must manually populate `_meta.ui` and serve `ui://` resources / A C# MCP server **can** support MCP Apps today by manually constructing the `_meta` JSON and serving `ui://` resources. / The goal is to add a convenience layer to the C# SDK — analogous to `@modelcontextprotocol/ext-apps/server` in TypeScript — that makes it easy for C# server authors to build MCP Apps.",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://docs.ag-ui.com/spec/1.0/index",
     "claim": "CopilotKit, *AG-UI Specification 1.0*, checked 2026-10-30",
     "date": null,
     "quote": "transports - HTTP + SSE, HTTP + protobuf, and the contract custom bindings must meet.",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://developers.openai.com/plugins/build/chatgpt-ui",
     "claim": "OpenAI, *Add UI to your MCP server*, checked 2026-10-30",
     "date": null,
     "quote": "ChatGPT implements the open MCP Apps standard for UI returned by an MCP server. / JSON-RPC over postMessage",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://developers.openai.com/plugins/changelog",
     "claim": "OpenAI, *Plugin UI changelog*, checked 2026-11-03",
     "date": null,
     "quote": "2026-02-22 MCP Apps compatibility fixes & improvements ChatGPT is now fully compatible with the MCP Apps spec. / 2026-02-22 / ChatGPT is now fully compatible with the MCP Apps spec.",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://developers.openai.com/plugins/reference",
     "claim": "OpenAI, *Plugins reference*, checked 2026-10-30",
     "date": null,
     "quote": "OpenAI extensions are optional and live in window.openai when you want ChatGPT-specific capabilities.",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://github.com/webmachinelearning/webmcp",
     "claim": "Web Machine Learning Community Group, *WebMCP*, checked 2026-10-30",
     "date": null,
     "quote": "It allows web developers to define tools directly in the browser page's script.",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://github.com/excalidraw/excalidraw-mcp",
     "claim": "Excalidraw, *excalidraw-mcp*, checked 2026-10-30",
     "date": null,
     "quote": "Works with any client that supports MCP Apps - Claude, ChatGPT, VS Code, Goose, and others. / Remote (recommended) / https://mcp.excalidraw.com",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://mcp.excalidraw.com/mcp",
     "claim": "Excalidraw, *Excalidraw MCP endpoint*, checked 2026-10-30",
     "date": null,
     "quote": "{\"jsonrpc\":\"2.0\",\"error\":{\"code\":-32000,\"message\":\"Method not allowed.\"},\"id\":null}",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://docs.metabind.ai/guides/getting-started/try-metabind",
     "claim": "Metabind, *Try Metabind in Claude or ChatGPT*, modified 2026-10-20",
     "date": null,
     "quote": "The Metabind connector is a public MCP server with the Metabind Component Kit built in: ready-made components for metrics, charts, tables, comparisons, lists, timelines, steps, and forms. / https://mcp.metabind.ai/ui / The connector is public, so it needs no sign-in / To draw the views, your client must be an MCP Apps host.",
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://mcp.metabind.ai/ui",
     "claim": "Metabind, *Metabind MCP endpoint*, checked 2026-10-30",
     "date": null,
     "quote": "Use POST for JSON-RPC or Accept: text/event-stream for SSE",
     "ref": 25
    },
    {
     "label": "[26]",
     "url": "https://coronet.one/connect/",
     "claim": "Coronet, *Connect Coronet Arcade to ChatGPT, Claude and Cursor*, checked 2026-10-30",
     "date": null,
     "quote": "\"name\": \"Coronet Arcade\", \"url\": \"https://coronet.one/mcp\" / Playable boards require MCP Apps support. Adding the server does not confirm that your client can display a board.",
     "ref": 26
    },
    {
     "label": "[27]",
     "url": "https://coronet.one/mcp",
     "claim": "Coronet, *Coronet Arcade MCP endpoint*, checked 2026-10-30",
     "date": null,
     "quote": "{\"jsonrpc\":\"2.0\",\"error\":{\"code\":-32000,\"message\":\"Not Acceptable: Client must accept text/event-stream\"},\"id\":null}",
     "ref": 27
    },
    {
     "label": "[28]",
     "url": "https://builder.aws.com/content/3KumnpioszB60y33kJPJogaYsK1/what-are-mcp-apps-building-apps-that-run-on-claude-and-chatgpt",
     "claim": "Ashita (AWS), *What are MCP Apps? Building Apps that run on Claude & ChatGPT!*, published Oct 19, 2026; fetched 2026-11-11",
     "date": null,
     "quote": "MCP Apps let your MCP server deliver rich, bidirectional HTML UIs like interactive dashboards, data-collection forms, real-time visualizations so that it can be rendered securely and natively inside your AI host / Published Oct 19, 2026 / AWS Employee / deploy it on Amazon Bedrock AgentCore Runtime / like Claude Desktop or ChatGPT / deploy the TypeScript MCP server powering it to Amazon Bedrock AgentCore Runtime",
     "ref": 28
    },
    {
     "label": "[29]",
     "url": "https://claude.com/resources/articles/interactive-tools-in-claude",
     "claim": "Anthropic, *Interactive connectors and MCP Apps*, published 2026-01-26",
     "date": null,
     "quote": "January 26, 2026 / Starting today, we're bringing interactive connectors to Claude with MCP Apps. / Available in Claude on mobile, web and desktop for Free, Pro, Max, Team, Enterprise plans. / Also now available on Claude Cowork.",
     "ref": 29
    },
    {
     "label": "[30]",
     "url": "https://code.visualstudio.com/blogs/2026/01/26/mcp-apps-support",
     "claim": "Harald Kirschner and Connor Peet, *Giving Agents a Visual Voice: MCP Apps Support in VS Code*, published 2026-01-26",
     "date": null,
     "quote": "January 26, 2026 by Harald Kirschner and Connor Peet / VS Code is the first major AI code editor with full MCP Apps support. Available now in VS Code Insiders",
     "ref": 30
    },
    {
     "label": "[31]",
     "url": "https://code.visualstudio.com/updates/v1_109",
     "claim": "Microsoft, *January 2026 (version 1.109)*, released 2026-02-04",
     "date": null,
     "quote": "Release date: February 4, 2026 / In this release VS Code has added support for MCP Apps. MCP Apps allow servers to display rich, interactive UI in the client.",
     "ref": 31
    },
    {
     "label": "[32]",
     "url": "https://goose-docs.ai/docs/tutorials/building-mcp-apps/",
     "claim": "goose, *Building MCP Apps*, checked 2026-10-30",
     "date": null,
     "quote": "MCP Apps let MCP servers return interactive UIs that render directly inside the goose chat interface, rather than responding with text alone. / MCP Apps support in goose is experimental and based on a draft specification.",
     "ref": 32
    },
    {
     "label": "[33]",
     "url": "https://learn.microsoft.com/en-us/microsoft-365/copilot/extensibility/plugin-mcp-apps",
     "claim": "Microsoft, *MCP apps in Microsoft 365 Copilot*, updated 2026-09-30",
     "date": null,
     "quote": "Last updated on 2026-09-30 / MCP apps are interactive UI widgets that run inside Microsoft 365 Copilot, powered by Model Context Protocol (MCP) servers. / The OpenAI Apps SDK builds on the MCP Apps standard and adds extra functionality specific to ChatGPT. Microsoft 365 Copilot supports both, though not all capabilities are available.",
     "ref": 33
    },
    {
     "label": "[34]",
     "url": "https://cursor.com/changelog/2-6",
     "claim": "Cursor (Anysphere), *MCP Apps and Team Marketplaces for Plugins, changelog 2.6*, published 2026-03-03",
     "date": null,
     "quote": "2026-03-03 / MCP Apps support interactive user interfaces like charts from Amplitude, diagrams from Figma, and whiteboards from tldraw directly inside Cursor.",
     "ref": 34
    },
    {
     "label": "[35]",
     "url": "https://cloud.google.com/blog/topics/developers-practitioners/devs-guide-to-mcp-apps-in-gemini",
     "claim": "Dave Wang (Google Cloud), *Devs guide to MCP Apps in Gemini*, published 2026-10-20",
     "date": null,
     "quote": "October 20, 2026 / Dave Wang / This open Model Context Protocol (MCP) extension pairs a tool with a live UI. / that UI renders directly in the chat flow inside a sandboxed iframe / fullscreen or a side panel / SEP-1865",
     "ref": 35
    },
    {
     "label": "[36]",
     "url": "https://learning.postman.com/docs/use/send-requests/protocols/mcp-requests/interact/",
     "claim": "Postman, *Use your MCP request to interact with an MCP server*, checked 2026-10-30",
     "date": null,
     "quote": "Servers that support the MCP Apps Extension can also return interactive user interfaces. / If preview's not already open, in the response pane, click Preview.",
     "ref": 36
    },
    {
     "label": "[37]",
     "url": "https://modelcontextprotocol.io/extensions/apps/overview",
     "claim": "Model Context Protocol, *MCP Apps*, modified 2026-09-02; checked 2026-10-30",
     "date": null,
     "quote": "Host support varies by client. / MCP Apps are currently supported by Claude, Claude Desktop, VS Code GitHub Copilot, Microsoft 365 Copilot, Goose, Postman, MCPJam, and Archestra.AI.",
     "ref": 37
    }
   ],
   "form": "endpoint",
   "governance": "Model Context Protocol project, through the SEP process for official extensions (Extensions Track). The spec and SDK live in the modelcontextprotocol/ext-apps repository",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "new record: verified against github.com/modelcontextprotocol/ext-apps, its dated spec file, and github.com/MCP-UI-Org/mcp-ui; found via search for other agent-rendered-UI specs during A2UI/AG-UI verification"
    },
    {
     "date": "2026-10-16",
     "note": "MCP Apps SDK ext-apps v2.0.3 was released on 2026-09-25 (spec dated 2026-01-26)"
    },
    {
     "date": "2026-10-16",
     "note": "version v2.0.3"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "mcp-apps",
   "implementation": "multi-implementation",
   "last_verified": "2026-11-11",
   "name": "MCP Apps",
   "native_status": "SEP-1865 Final. History: proposed and pull request #1865 opened on 2025-11-21; the stable 2026-01-26 specification and SDK v1.0.0 were released on 2026-01-26, the day MCP Apps went live as \"the first official MCP extension\"; #1865 merged on 2026-01-28. The repository lists 2026-01-26 as Stable and a draft as Development. When checked, the SEP's Sponsor field still read \"None (seeking sponsor)\"",
   "origin": {
    "org": "Ido Salomon, Liad Yosef, Olivier Chafik, Jerome Swannack, Jonathan Hefner, Anton Pidkuiko, Nick Cooper, Bryan Ashley and Alexi Christakis (MCP-UI creators with MCP Core Maintainers at OpenAI and Anthropic)",
    "date": "2025-11-21"
   },
   "part_of": null,
   "parties": [
    "agent-human"
   ],
   "phase": "candidate",
   "probe": {
    "method": "POST",
    "on_absent": "Server exposes ordinary MCP tools with text/structured-data results only; no interactive UI capability",
    "parse": "Tool definition metadata includes a ui:// resource reference (or _meta.ui.resourceUri); a follow-up resources/read on that URI returns a resource with mimeType text/html (optionally ;profile=mcp-app)",
    "path": "{mcp-endpoint} — call tools/list then tools/call on a known MCP server, per JSON-RPC"
   },
   "question": "How does an MCP tool deliver an interactive UI (chart, form, dashboard) that renders inline in a chat client?",
   "scope": "general",
   "spec_url": "https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/2026-01-26/apps.mdx",
   "step": "present",
   "summary_md": "**MCP Apps** (`SEP-1865`, extension identifier `io.modelcontextprotocol/ui`) is the first official Model Context Protocol extension, enabling MCP servers to deliver interactive user interfaces that host applications render inline inside sandboxed iframes. Proposed on 2025-11-21 on the MCP Extensions Track, the specification unifies approaches pioneered by MCP-UI and OpenAI's Apps SDK into a single open standard. Tools link to a UI template through the `_meta.ui.resourceUri` field pointing to a `ui://` resource with MIME type `text/html;profile=mcp-app`, which the host retrieves via `resources/read`. Once mounted in a restricted sandboxed iframe, the guest View communicates bidirectionally with the host using JSON-RPC 2.0 over `postMessage`. The specification reached `Stable (2026-01-26)` alongside `@modelcontextprotocol/ext-apps` SDK `v1.0.0` (with pull request `#1865` merging on 2026-01-28), deprecating the pre-release flat `_meta[\"ui/resourceUri\"]` format in favor of `_meta.ui.resourceUri`.",
   "track": "linux-foundation",
   "version": {
    "label": "2026-01-26",
    "date": "2026-01-26"
   },
   "watch": [
    {
     "type": "github",
     "repo": "modelcontextprotocol/ext-apps",
     "mode": "release"
    }
   ],
   "use_cases": [
    "render-agent-ui",
    "expose-tools-to-agents"
   ],
   "audience": [
    "agent-builder",
    "platform"
   ],
   "pairs_with": [
    "mcp",
    "a2ui",
    "ag-ui",
    "openai-apps-sdk-manifests",
    "webmcp"
   ],
   "prerequisites": [
    "mcp"
   ],
   "hatnote_md": "This page is about MCP Apps (SEP-1865), the official Model Context Protocol UI extension. It is distinct from MCP-UI (the community project and SDK that implements the specification) and the OpenAI Apps SDK. For the core protocol, see [Model Context Protocol](/protocols/mcp/); for declarative JSON interfaces rendered with a host's native widget catalog, see [A2UI](/protocols/a2ui/).",
   "tier": "flagship",
   "lifecycle_status": "active",
   "wire_archetype": "harnesses_rpc_ui",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-11",
   "v05_hatnote_html_md": "This page is about MCP Apps (SEP-1865), the official Model Context Protocol UI extension. It is distinct from MCP-UI (the community project and SDK that implements the specification) and the OpenAI Apps SDK. For the core protocol, see [Model Context Protocol](/protocols/mcp/); for declarative JSON interfaces rendered with a host's native widget catalog, see [A2UI](/protocols/a2ui/). [1][2][3][4][5]",
   "v05_elevator_pitch_md": "MCP Apps is the official user-interface extension for the Model Context Protocol that lets tool servers return interactive HTML views—such as forms, dashboards, or visual editors—directly inside host applications rather than plain text. Instead of building custom frontend integrations for each AI host, developers link a tool via `_meta.ui.resourceUri` to a reusable `ui://` resource that any compatible host fetches and mounts in a sandboxed iframe communicating over `postMessage`. [1][3]",
   "v05_lead_md": "**MCP Apps** (`SEP-1865`, extension identifier `io.modelcontextprotocol/ui`) is the first official Model Context Protocol extension, enabling MCP servers to deliver interactive user interfaces that host applications render inline inside sandboxed iframes. Proposed on 2025-11-21 on the MCP Extensions Track, the specification unifies approaches pioneered by MCP-UI and OpenAI's Apps SDK into a single open standard. [1][2][3] Tools link to a UI template through the `_meta.ui.resourceUri` field pointing to a `ui://` resource with MIME type `text/html;profile=mcp-app`, which the host retrieves via `resources/read`. Once mounted in a restricted sandboxed iframe, the guest View communicates bidirectionally with the host using JSON-RPC 2.0 over `postMessage`. [3] The specification reached `Stable (2026-01-26)` alongside `@modelcontextprotocol/ext-apps` SDK `v1.0.0` (with pull request `#1865` merging on 2026-01-28), deprecating the pre-release flat `_meta[\"ui/resourceUri\"]` format in favor of `_meta.ui.resourceUri`. [3][6][7]",
   "v05_identity_sentence_md": "**MCP Apps** (`SEP-1865`, extension identifier `io.modelcontextprotocol/ui`) is the first official Model Context Protocol extension, enabling MCP servers to deliver interactive user interfaces that host applications render inline inside sandboxed iframes. Proposed on 2025-11-21 on the MCP Extensions Track, the specification unifies approaches pioneered by MCP-UI and OpenAI's Apps SDK into a single open standard. [1][2][3]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Present](/category/present/) (`present`)"
    },
    {
     "label": "Form",
     "value_md": "Endpoint (`endpoint`)"
    },
    {
     "label": "Originated by",
     "value_md": "Nine named SEP-1865 authors, created 2025-11-21, from MCP-UI and MCP Core. [2][8]"
    },
    {
     "label": "Governed by",
     "value_md": "MCP project, Extensions Track SEP-1865, repo modelcontextprotocol/ext-apps. Sponsor: None (seeking sponsor). [2][9][10]"
    },
    {
     "label": "Track",
     "value_md": "Extensions Track. On main, 2026-01-26 is Stable and draft is Development. [2][9]"
    },
    {
     "label": "Status",
     "value_md": "SEP-1865 Final; spec Stable (2026-01-26); PR #1865 merged 2026-01-28; launch called it production-ready. [1][2][3][7]"
    },
    {
     "label": "Version",
     "value_md": "Main spec 2026-01-26 is Stable, and draft is Development. `@modelcontextprotocol/ext-apps` package.json on main is version `2.1.0`. npm dist-tag `latest` is `2.0.4`; published `2.1.0` is not that tag. [3][6][9][11][12][13][14]"
    },
    {
     "label": "Message format",
     "value_md": "JSON-RPC 2.0 over `postMessage`; resource URIs use the `ui://` scheme with `mimeType` `text/html;profile=mcp-app` (required in specification prose rules; marked `SHOULD` in the TypeScript interface comment). [3]"
    },
    {
     "label": "Headers",
     "value_md": "Host-enforced Content Security Policy (CSP) headers constructed from declared resource domains (hosts should log CSP configurations for security review). [3]"
    },
    {
     "label": "Transports",
     "value_md": "MCP `resources/read` for UI resource retrieval and `postMessage` JSON-RPC between host and sandboxed UI iframe (web hosts wrap views inside a separate-origin sandbox proxy). [3]"
    },
    {
     "label": "Specification",
     "value_md": "[MCP Apps specification (2026-01-26)](https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/2026-01-26/apps.mdx) [3][9]"
    },
    {
     "label": "Found at",
     "value_md": "No well-known URI; tools reference `ui://` resources via `_meta.ui.resourceUri`, and servers may omit UI-only resources from `resources/list`. [3][8]"
    },
    {
     "label": "Licence",
     "value_md": "Apache 2.0 (`modelcontextprotocol/ext-apps` repository badge); MIT (`@modelcontextprotocol/ext-apps` npm `2.0.4` and `2.1.0` manifests). [9][11]"
    }
   ],
   "v05_problem_md": "Core MCP limits servers to exchanging plain text and structured data with hosts, blocking use cases that require rich visual presentation and interactive workflows directly inside a conversation. [1][3][8] MCP Apps decouples UI templates from tool execution by registering reusable `ui://` HTML resources (`text/html;profile=mcp-app`) and linking them to tools via `_meta.ui.resourceUri` and `_meta.ui.visibility`. When a tool is invoked, the host fetches the `UIResource` via `resources/read`, mounts it in a sandboxed iframe that acts as an MCP client over `postMessage` JSON-RPC 2.0, and delivers tool arguments and results through `ui/notifications/tool-input` and `ui/notifications/tool-result`. [3] Because hosts discover UI resources primarily through tool metadata, servers may omit UI-only templates from `resources/list`, and web-based hosts must isolate guest Views behind a separate-origin intermediate Sandbox proxy. [3]",
   "v05_mechanism_delta_md": "MCP Apps decouples UI templates from tool execution by registering reusable `ui://` HTML resources (`text/html;profile=mcp-app`) and linking them to tools via `_meta.ui.resourceUri` and `_meta.ui.visibility`. When a tool is invoked, the host fetches the `UIResource` via `resources/read`, mounts it in a sandboxed iframe that acts as an MCP client over `postMessage` JSON-RPC 2.0, and delivers tool arguments and results through `ui/notifications/tool-input` and `ui/notifications/tool-result`. [3]",
   "v05_scope_boundary_md": "Because hosts discover UI resources primarily through tool metadata, servers may omit UI-only templates from `resources/list`, and web-based hosts must isolate guest Views behind a separate-origin intermediate Sandbox proxy. [3]",
   "v05_fuzzy_additions": [
    {
     "id": "ui-resource-declarations-tool-linkage-and-capability-negotiation",
     "heading": "`ui://` resource declarations, tool linkage, and capability negotiation",
     "body_md": "Support for `io.modelcontextprotocol/ui` is optional and must be explicitly negotiated between client and server through the MCP extension capabilities mechanism. Each `UIResource` metadata block (`UIResourceMeta` in the 2026-01-26 specification) can declare a `McpUiResourceCsp` policy (`connectDomains`, `resourceDomains`, `frameDomains`, and `baseUriDomains`) alongside the sibling boolean `prefersBorder`. [3]",
     "bullets": [
      {
       "label": "`UIResource` registration",
       "text_md": "A `UIResource` URI must start with the `ui://` scheme, and its content is returned via `resources/read` as a valid HTML5 document provided in either `text` (string) or base64-encoded `blob` form. While the content requirements mandate `mimeType` `text/html;profile=mcp-app` (reserving other types for future extensions), the `UIResource` interface comment still phrases that MIME type as `SHOULD` for the initial MVP. [3]"
      },
      {
       "label": "`_meta.ui` linkage",
       "text_md": "Tools bind to a template via `_meta.ui.resourceUri` (replacing the deprecated flat `_meta[\"ui/resourceUri\"]` key) and control caller access through `_meta.ui.visibility`, which defaults to `[\"model\", \"app\"]`. Setting `\"model\"` makes a tool visible and callable by the agent, whereas `\"app\"` restricts calls to the server's own embedded app; the Host must reject `tools/call` requests from apps when `\"app\"` is absent from `visibility`. [3]"
      },
      {
       "label": "`io.modelcontextprotocol/ui` negotiation",
       "text_md": "Clients advertise `io.modelcontextprotocol/ui` during `initialize` (or per-request via `_meta` key `io.modelcontextprotocol/clientCapabilities` in stateless MCP `2026-07-28`) with a required `mimeTypes` array (such as `[\"text/html;profile=mcp-app\"]`). Servers should inspect client capabilities with the SDK's `getUiCapability` helper before registering UI-enabled tools, may register different tool variants based on host capabilities, and must still return a meaningful text-fallback content array when UI is available. [3][15]"
      },
      {
       "label": "CSP and `prefersBorder`",
       "text_md": "In `McpUiResourceCsp`, omitting or leaving `connectDomains` (`connect-src`), `resourceDomains`, or `frameDomains` (`frame-src 'none'`) empty enforces a zero-external-access default, while `baseUriDomains` maps to `base-uri`. The Host must construct Content Security Policy headers from those declared domains (and may further restrict them, but must not allow undeclared domains), while `prefersBorder` (`true`, `false`, or omitted) controls whether the host renders a visible border and background. [3]"
      }
     ]
    },
    {
     "id": "postmessage-json-rpc-lifecycle-host-notifications-and-cross-sdk-rollout",
     "heading": "PostMessage JSON-RPC lifecycle, host notifications, and cross-SDK rollout",
     "body_md": "Inside its restricted sandboxed iframe, a guest View acts conceptually as an MCP client communicating with the host over a `postMessage` JSON-RPC 2.0 transport. The View initiates the session by sending a `ui/initialize` request and `ui/notifications/initialized` notification, and the Host must not send any request or notification to the View before receiving that initialized notification. [3]",
     "bullets": [
      {
       "label": "Sandbox handshake",
       "text_md": "The `ui/initialize` → `ui/notifications/initialized` sequence replaces MCP-UI's earlier custom iframe-ready pattern, with the Host returning UI-specific context in the `McpUiInitializeResult` `hostContext` field. When the Host is a web page, it must wrap the View inside an intermediate Sandbox proxy served from a different origin than the Host, and apply the restrictive default CSP whenever `ui.csp` is omitted. [3]"
      },
      {
       "label": "Host notifications",
       "text_md": "After `ui/initialize` completes, the Host must send `ui/notifications/tool-input` (at most once, and required before `ui/notifications/tool-result`) carrying the complete tool arguments, optionally preceded by `ui/notifications/tool-input-partial` while arguments stream. The Host sends `ui/notifications/tool-result` when tool execution completes, `ui/notifications/tool-cancelled` if execution is aborted, and `ui/notifications/host-context-changed` for partial context updates that the View merges into its state. [3]"
      },
      {
       "label": "Guest requests",
       "text_md": "Guest UI iframes can invoke server tools via `tools/call` and send host requests including `ui/open-link` (asking the Host to open an external URL in the default browser or a new tab), `ui/message` (adding a message with a preserved role to the chat context, optionally gated by user consent), and `ui/update-model-context` (where each request overwrites the View's previous model context for future turns). [3]"
      },
      {
       "label": "SDK rollout",
       "text_md": "The 2026-01-26 specification unifies MCP-UI and OpenAI's Apps SDK into a shared standard implemented by `mcp-ui` and the TypeScript package `@modelcontextprotocol/ext-apps` (`registerAppTool()`, `registerAppResource()`, and `getUiCapability()`). As documented in `modelcontextprotocol/csharp-sdk` issue `#1431` (2026-03-13), Python and C# MCP servers without dedicated helper wrappers support MCP Apps by manually populating `_meta.ui` and serving `ui://` resources. [3][4][16]"
      }
     ]
    }
   ],
   "v05_diagram": {
    "title": "UI initialization",
    "heading": "UI initialization",
    "mermaid": "sequenceDiagram\n  participant H as Host\n  participant UI as View (iframe)\n  participant P as Sandbox Proxy\n  participant S as MCP Server\n\n  autonumber\n  par UI Tool call\n    H ->> S: tools/call to Tool with _meta.ui metadata\n  and UI initialization\n    alt Desktop/Native hosts\n      H ->> H: Render View in an iframe (HTML from the ui:// resource)\n    else Web hosts\n      H ->> H: Render Sandbox Proxy in an iframe (different origin)\n      P ->> H: ui/notifications/sandbox-proxy-ready\n      H -->> P: ui/notifications/sandbox-resource-ready (HTML content)\n      P -> P: Render inner iframe with HTML\n\n    end\n    UI ->> H: ui/initialize\n    H -->> UI: McpUiInitializeResult (e.g., host-context, capabilities, etc.)\n    UI ->> H: ui/notifications/initialized\n    opt Stream Tool input to UI\n      H -->> UI: ui/notifications/tool-input-partial (0..n)\n    end\n    H -->> UI: ui/notifications/tool-input (complete)\n  end\n  alt Tool complete\n    H -->> UI: ui/notifications/tool-result\n  else Tool cancelled\n    H -->> UI: ui/notifications/tool-cancelled\n  end",
    "caption_md": "The host calls a tool with `_meta.ui` and initializes the view. The view sends `ui/initialize` and the host returns `McpUiInitializeResult`, then `ui/notifications/tool-result` or `ui/notifications/tool-cancelled`. [3]"
   },
   "v05_wire_artifact": {
    "title": "Tool descriptor `_meta.ui.resourceUri` (`get_weather`)",
    "heading": "Tool descriptor `_meta.ui.resourceUri` (`get_weather`)",
    "lang": "json",
    "code": "{\n  \"name\": \"get_weather\",\n  \"description\": \"Get current weather for a location\",\n  \"inputSchema\": {\n    \"type\": \"object\",\n    \"properties\": {\n      \"location\": { \"type\": \"string\" }\n    }\n  },\n  \"_meta\": {\n    \"ui\": {\n      \"resourceUri\": \"ui://weather-server/dashboard-template\",\n      \"visibility\": [\"model\", \"app\"]\n    }\n  }\n}",
    "caption_md": "`get_weather` links `_meta.ui.resourceUri` to `ui://weather-server/dashboard-template` with `visibility` for model and app. [3]"
   },
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "HTML Sandboxed iframes & Custom Elements (WHATWG)",
      "spec_or_rfc": "HTML Living Standard",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "MCP Apps loads a ui:// HTML view in a sandboxed iframe that speaks JSON-RPC over postMessage. [3]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "part_of",
      "relation_label": "Part of",
      "delta_md": "SEP-1865 extends MCP so a server UI iframe acts as a client over postMessage JSON-RPC. [2][3]"
     },
     {
      "target_id": "a2ui",
      "target_name": "A2UI (Agent to UI) Protocol",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "MCP Apps sends HTML in an iframe; A2UI sends JSON drawn with the host's component library. [5]"
     },
     {
      "target_id": "ag-ui",
      "target_name": "Agent-User Interaction Protocol (AG-UI)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "AG-UI uses HTTP plus SSE or protobuf; MCP Apps renders a fetched HTML resource in a sandbox. [3][17]"
     },
     {
      "target_id": "openai-apps-sdk-manifests",
      "target_name": "OpenAI Apps SDK manifests",
      "relation_type": "depended_on_by",
      "relation_label": "Depended on by",
      "delta_md": "ChatGPT implements MCP Apps and, as of 2026-02-22, optional extensions live in window.openai. [18][19][20]"
     },
     {
      "target_id": "webmcp",
      "target_name": "WebMCP",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "WebMCP defines tools in the page script; MCP Apps is a server resource rendered in an iframe. [3][21]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (17 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).",
    "side_a": {
     "visible": true,
     "heading": "MCP App servers",
     "col4_header": "Transport, endpoint & capabilities",
     "note_md": null,
     "rows": [
      {
       "actor": "Excalidraw",
       "role": "MCP App server",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Remote `https://mcp.excalidraw.com`; GET returned HTTP 200 and JSON-RPC `-32000`.",
       "source_md": "[excalidraw-mcp](https://github.com/excalidraw/excalidraw-mcp) [22] · [Excalidraw MCP endpoint](https://mcp.excalidraw.com/mcp) [23]"
      },
      {
       "actor": "Metabind",
       "role": "MCP App server",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Public `https://mcp.metabind.ai/ui` returned HTTP 200; use POST or `text/event-stream`.",
       "source_md": "[Try Metabind](https://docs.metabind.ai/guides/getting-started/try-metabind) [24] · [Metabind MCP endpoint](https://mcp.metabind.ai/ui) [25]"
      },
      {
       "actor": "Coronet Arcade",
       "role": "MCP App server",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "`https://coronet.one/mcp` returned HTTP 200 and JSON-RPC `-32000` (`text/event-stream`).",
       "source_md": "[Connect Coronet Arcade](https://coronet.one/connect/) [26] · [Coronet Arcade MCP endpoint](https://coronet.one/mcp) [27]"
      },
      {
       "actor": "ext-apps examples",
       "role": "Example MCP App servers",
       "status": "Development",
       "status_display": "Development · as of 2026-10-27",
       "col4_md": "Main examples include `examples/map-server`; release `v2.0.4` notes `pdf-server`.",
       "source_md": "[ext-apps](https://github.com/modelcontextprotocol/ext-apps) [9] · [ext-apps v2.0.4](https://github.com/modelcontextprotocol/ext-apps/releases/tag/v2.0.4) [12]"
      },
      {
       "actor": "Amazon Bedrock AgentCore Runtime",
       "role": "MCP server runtime",
       "status": "Partial",
       "status_display": "Partial · as of 2026-10-19",
       "col4_md": "Oct 19, 2026 AWS employee article describes deploying an MCP Apps server to Amazon Bedrock AgentCore Runtime, with the UI rendered in Claude Desktop or ChatGPT.",
       "source_md": "[AWS Builder Center, Oct 19, 2026](https://builder.aws.com/content/3KumnpioszB60y33kJPJogaYsK1/what-are-mcp-apps-building-apps-that-run-on-claude-and-chatgpt) [28]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Clients, IDEs, AI hosts & SDKs",
     "col4_header": "Supported transports, host surface & scope",
     "note_md": null,
     "rows": [
      {
       "actor": "Claude",
       "role": "AI host",
       "status": "Supported",
       "status_display": "Supported · as of 2026-01-26",
       "col4_md": "January 26, 2026: MCP Apps on mobile, web, and desktop, plus Claude Cowork.",
       "source_md": "[Interactive connectors and MCP Apps](https://claude.com/resources/articles/interactive-tools-in-claude) [29]"
      },
      {
       "actor": "ChatGPT",
       "role": "AI host",
       "status": "Supported",
       "status_display": "Supported · as of 2026-02-22",
       "col4_md": "ChatGPT uses JSON-RPC over `postMessage`; changelog 2026-02-22 says it is fully compatible.",
       "source_md": "[Add UI to your MCP server](https://developers.openai.com/plugins/build/chatgpt-ui) [18] · [Plugin changelog](https://developers.openai.com/plugins/changelog) [19] · [Plugin reference](https://developers.openai.com/plugins/reference) [20]"
      },
      {
       "actor": "Visual Studio Code",
       "role": "IDE",
       "status": "Supported",
       "status_display": "Supported · as of 2026-02-04",
       "col4_md": "Release 1.109 (February 4, 2026) added MCP Apps; the January 26 post was Insiders.",
       "source_md": "[MCP Apps support in VS Code](https://code.visualstudio.com/blogs/2026/01/26/mcp-apps-support) [30] · [VS Code 1.109](https://code.visualstudio.com/updates/v1_109) [31]"
      },
      {
       "actor": "goose",
       "role": "AI host",
       "status": "Experimental",
       "status_display": "Experimental · as of 2026-01-26",
       "col4_md": "Tutorial calls MCP Apps experimental and draft-based, not a finished release.",
       "source_md": "[Building MCP Apps for goose](https://goose-docs.ai/docs/tutorials/building-mcp-apps/) [32] · [MCP Apps launch](https://blog.modelcontextprotocol.io/posts/2026-01-26-mcp-apps/) [1]"
      },
      {
       "actor": "Microsoft 365 Copilot",
       "role": "AI host",
       "status": "Partial",
       "status_display": "Partial · as of 2026-09-30",
       "col4_md": "Learn page updated 2026-09-30: widgets in Copilot, not every Apps SDK capability.",
       "source_md": "[MCP apps in Microsoft 365 Copilot](https://learn.microsoft.com/en-us/microsoft-365/copilot/extensibility/plugin-mcp-apps) [33]"
      },
      {
       "actor": "Cursor",
       "role": "IDE",
       "status": "Supported",
       "status_display": "Supported · as of 2026-03-03",
       "col4_md": "Changelog 2.6 (2026-03-03) shows MCP Apps charts, diagrams, and whiteboards in Cursor.",
       "source_md": "[Cursor changelog 2.6](https://cursor.com/changelog/2-6) [34]"
      },
      {
       "actor": "Gemini Enterprise",
       "role": "AI host",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-20",
       "col4_md": "October 20, 2026 post: Gemini Enterprise renders the UI in a sandboxed iframe.",
       "source_md": "[Developer's guide to MCP apps in Gemini](https://cloud.google.com/blog/topics/developers-practitioners/devs-guide-to-mcp-apps-in-gemini) [35]"
      },
      {
       "actor": "Postman",
       "role": "API client",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Response pane can preview interactive UI from MCP Apps Extension servers.",
       "source_md": "[Interact with an MCP server](https://learning.postman.com/docs/use/send-requests/protocols/mcp-requests/interact/) [36]"
      },
      {
       "actor": "@modelcontextprotocol/ext-apps",
       "role": "Official SDK",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-27",
       "col4_md": "npm `latest` is `2.0.4`; published `2.1.0` is not that tag. package.json on main is version 2.1.0.",
       "source_md": "[npm @modelcontextprotocol/ext-apps](https://registry.npmjs.org/@modelcontextprotocol/ext-apps) [11] · [ext-apps v2.0.4](https://github.com/modelcontextprotocol/ext-apps/releases/tag/v2.0.4) [12] · [ext-apps README](https://github.com/modelcontextprotocol/ext-apps) [9] · [@modelcontextprotocol/ext-apps package.json](https://raw.githubusercontent.com/modelcontextprotocol/ext-apps/main/package.json) [13][14]"
      },
      {
       "actor": "mcp-ui",
       "role": "Client and server SDK",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Implements MCP Apps: `@mcp-ui/client` plus TypeScript, Python, and Ruby server SDKs.",
       "source_md": "[About mcp-ui](https://mcpui.dev/about) [4]"
      },
      {
       "actor": "MCPJam",
       "role": "AI host",
       "status": "Listed",
       "status_display": "Listed · checked 2026-10-30",
       "col4_md": "Named among supported MCP Apps hosts on the official MCP Apps overview.",
       "source_md": "[MCP Apps overview](https://modelcontextprotocol.io/extensions/apps/overview) [37]"
      },
      {
       "actor": "Archestra.AI",
       "role": "AI host",
       "status": "Listed",
       "status_display": "Listed · checked 2026-10-30",
       "col4_md": "Named among supported MCP Apps hosts on the official MCP Apps overview.",
       "source_md": "[MCP Apps overview](https://modelcontextprotocol.io/extensions/apps/overview) [37]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [
     {
      "label": "MCP Apps overview",
      "as_of": null,
      "value_md": "Host support varies by client. The MCP Apps overview says MCP Apps are currently supported by Claude, Claude Desktop, VS Code GitHub Copilot, Microsoft 365 Copilot, Goose, Postman, MCPJam, and Archestra.AI. [37]"
     },
     {
      "label": "npm @modelcontextprotocol/ext-apps and release v2.0.4",
      "as_of": "2026-10-27",
      "value_md": "The npm package @modelcontextprotocol/ext-apps has dist-tag latest 2.0.4 and dist-tag release-2.0 at 2.0.3. Version 2.1.0 was published on 2026-10-27 after 2.0.4 and is not the latest tag. GitHub release v2.0.4, published 2026-10-27, says there are no library API changes. [11][12]"
     },
     {
      "label": "MCP Apps specification 2026-01-26",
      "as_of": "2026-01-26",
      "value_md": "The 2026-01-26 MCP Apps specification status is Stable, which is a specification label rather than an npm publish time or a registry schema date. The extension identifier is io.modelcontextprotocol/ui. HTML resources use mime type text/html;profile=mcp-app and the ui:// URI scheme. The main README also lists a draft specification as Development. [3][9]"
     }
    ],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Present protocols](/category/present/)** — Category index for `present` standards."
    }
   ],
   "v05_compiled_md": "---\nid: mcp-apps\ntitle: \"MCP Apps\"\ntier: flagship\nlifecycle_status: active\ncategory: present\nform: endpoint\nwire_archetype: harnesses_rpc_ui\nspec_url: https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/2026-01-26/apps.mdx\nlast_checked: 2026-11-11\n---\n\n# MCP Apps\n\n**Category:** [Present](/category/present/) (`present`) · **Form:** Endpoint (`endpoint`) · **Last checked:** 2026-11-11\n\n> *This page is about MCP Apps (SEP-1865), the official Model Context Protocol UI extension. It is distinct from MCP-UI (the community project and SDK that implements the specification) and the OpenAI Apps SDK. For the core protocol, see [Model Context Protocol](/protocols/mcp/); for declarative JSON interfaces rendered with a host's native widget catalog, see [A2UI](/protocols/a2ui/). [1][2][3][4][5]*\n\n> **In brief:** MCP Apps is the official user-interface extension for the Model Context Protocol that lets tool servers return interactive HTML views—such as forms, dashboards, or visual editors—directly inside host applications rather than plain text. Instead of building custom frontend integrations for each AI host, developers link a tool via `_meta.ui.resourceUri` to a reusable `ui://` resource that any compatible host fetches and mounts in a sandboxed iframe communicating over `postMessage`. [1][3]\n\n**MCP Apps** (`SEP-1865`, extension identifier `io.modelcontextprotocol/ui`) is the first official Model Context Protocol extension, enabling MCP servers to deliver interactive user interfaces that host applications render inline inside sandboxed iframes. Proposed on 2025-11-21 on the MCP Extensions Track, the specification unifies approaches pioneered by MCP-UI and OpenAI's Apps SDK into a single open standard. [1][2][3] Tools link to a UI template through the `_meta.ui.resourceUri` field pointing to a `ui://` resource with MIME type `text/html;profile=mcp-app`, which the host retrieves via `resources/read`. Once mounted in a restricted sandboxed iframe, the guest View communicates bidirectionally with the host using JSON-RPC 2.0 over `postMessage`. [3] The specification reached `Stable (2026-01-26)` alongside `@modelcontextprotocol/ext-apps` SDK `v1.0.0` (with pull request `#1865` merging on 2026-01-28), deprecating the pre-release flat `_meta[\"ui/resourceUri\"]` format in favor of `_meta.ui.resourceUri`. [3][6][7]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Present](/category/present/) (`present`) |\n| **Form** | Endpoint (`endpoint`) |\n| **Originated by** | Nine named SEP-1865 authors, created 2025-11-21, from MCP-UI and MCP Core. [2][8] |\n| **Governed by** | MCP project, Extensions Track SEP-1865, repo modelcontextprotocol/ext-apps. Sponsor: None (seeking sponsor). [2][9][10] |\n| **Track** | Extensions Track. On main, 2026-01-26 is Stable and draft is Development. [2][9] |\n| **Status** | SEP-1865 Final; spec Stable (2026-01-26); PR #1865 merged 2026-01-28; launch called it production-ready. [1][2][3][7] |\n| **Version** | Main spec 2026-01-26 is Stable, and draft is Development. `@modelcontextprotocol/ext-apps` package.json on main is version `2.1.0`. npm dist-tag `latest` is `2.0.4`; published `2.1.0` is not that tag. [3][6][9][11][12][13][14] |\n| **Message format** | JSON-RPC 2.0 over `postMessage`; resource URIs use the `ui://` scheme with `mimeType` `text/html;profile=mcp-app` (required in specification prose rules; marked `SHOULD` in the TypeScript interface comment). [3] |\n| **Headers** | Host-enforced Content Security Policy (CSP) headers constructed from declared resource domains (hosts should log CSP configurations for security review). [3] |\n| **Transports** | MCP `resources/read` for UI resource retrieval and `postMessage` JSON-RPC between host and sandboxed UI iframe (web hosts wrap views inside a separate-origin sandbox proxy). [3] |\n| **Specification** | [MCP Apps specification (2026-01-26)](https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/2026-01-26/apps.mdx) [3][9] |\n| **Found at** | No well-known URI; tools reference `ui://` resources via `_meta.ui.resourceUri`, and servers may omit UI-only resources from `resources/list`. [3][8] |\n| **Licence** | Apache 2.0 (`modelcontextprotocol/ext-apps` repository badge); MIT (`@modelcontextprotocol/ext-apps` npm `2.0.4` and `2.1.0` manifests). [9][11] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [`ui://` resource declarations, tool linkage, and capability negotiation](#ui-resource-declarations-tool-linkage-and-capability-negotiation)\n3. [PostMessage JSON-RPC lifecycle, host notifications, and cross-SDK rollout](#postmessage-json-rpc-lifecycle-host-notifications-and-cross-sdk-rollout)\n4. [Counterparts and related standards](#counterparts-and-related-standards)\n5. [Adoption and ecosystem](#adoption-and-ecosystem)\n6. [See also](#see-also)\n7. [References](#references)\n\n---\n\n## Problem and scope\n\nCore MCP limits servers to exchanging plain text and structured data with hosts, blocking use cases that require rich visual presentation and interactive workflows directly inside a conversation. [1][3][8] MCP Apps decouples UI templates from tool execution by registering reusable `ui://` HTML resources (`text/html;profile=mcp-app`) and linking them to tools via `_meta.ui.resourceUri` and `_meta.ui.visibility`. When a tool is invoked, the host fetches the `UIResource` via `resources/read`, mounts it in a sandboxed iframe that acts as an MCP client over `postMessage` JSON-RPC 2.0, and delivers tool arguments and results through `ui/notifications/tool-input` and `ui/notifications/tool-result`. [3] Because hosts discover UI resources primarily through tool metadata, servers may omit UI-only templates from `resources/list`, and web-based hosts must isolate guest Views behind a separate-origin intermediate Sandbox proxy. [3]\n\n### UI initialization\n\n```mermaid\nsequenceDiagram\n  participant H as Host\n  participant UI as View (iframe)\n  participant P as Sandbox Proxy\n  participant S as MCP Server\n\n  autonumber\n  par UI Tool call\n    H ->> S: tools/call to Tool with _meta.ui metadata\n  and UI initialization\n    alt Desktop/Native hosts\n      H ->> H: Render View in an iframe (HTML from the ui:// resource)\n    else Web hosts\n      H ->> H: Render Sandbox Proxy in an iframe (different origin)\n      P ->> H: ui/notifications/sandbox-proxy-ready\n      H -->> P: ui/notifications/sandbox-resource-ready (HTML content)\n      P -> P: Render inner iframe with HTML\n\n    end\n    UI ->> H: ui/initialize\n    H -->> UI: McpUiInitializeResult (e.g., host-context, capabilities, etc.)\n    UI ->> H: ui/notifications/initialized\n    opt Stream Tool input to UI\n      H -->> UI: ui/notifications/tool-input-partial (0..n)\n    end\n    H -->> UI: ui/notifications/tool-input (complete)\n  end\n  alt Tool complete\n    H -->> UI: ui/notifications/tool-result\n  else Tool cancelled\n    H -->> UI: ui/notifications/tool-cancelled\n  end\n```\n\n*The host calls a tool with `_meta.ui` and initializes the view. The view sends `ui/initialize` and the host returns `McpUiInitializeResult`, then `ui/notifications/tool-result` or `ui/notifications/tool-cancelled`. [3]*\n\n### Tool descriptor `_meta.ui.resourceUri` (`get_weather`)\n\n```json\n{\n  \"name\": \"get_weather\",\n  \"description\": \"Get current weather for a location\",\n  \"inputSchema\": {\n    \"type\": \"object\",\n    \"properties\": {\n      \"location\": { \"type\": \"string\" }\n    }\n  },\n  \"_meta\": {\n    \"ui\": {\n      \"resourceUri\": \"ui://weather-server/dashboard-template\",\n      \"visibility\": [\"model\", \"app\"]\n    }\n  }\n}\n```\n\n*`get_weather` links `_meta.ui.resourceUri` to `ui://weather-server/dashboard-template` with `visibility` for model and app. [3]*\n\n---\n\n## `ui://` resource declarations, tool linkage, and capability negotiation\n\nSupport for `io.modelcontextprotocol/ui` is optional and must be explicitly negotiated between client and server through the MCP extension capabilities mechanism. Each `UIResource` metadata block (`UIResourceMeta` in the 2026-01-26 specification) can declare a `McpUiResourceCsp` policy (`connectDomains`, `resourceDomains`, `frameDomains`, and `baseUriDomains`) alongside the sibling boolean `prefersBorder`. [3]\n\n- **`UIResource` registration:** A `UIResource` URI must start with the `ui://` scheme, and its content is returned via `resources/read` as a valid HTML5 document provided in either `text` (string) or base64-encoded `blob` form. While the content requirements mandate `mimeType` `text/html;profile=mcp-app` (reserving other types for future extensions), the `UIResource` interface comment still phrases that MIME type as `SHOULD` for the initial MVP. [3]\n- **`_meta.ui` linkage:** Tools bind to a template via `_meta.ui.resourceUri` (replacing the deprecated flat `_meta[\"ui/resourceUri\"]` key) and control caller access through `_meta.ui.visibility`, which defaults to `[\"model\", \"app\"]`. Setting `\"model\"` makes a tool visible and callable by the agent, whereas `\"app\"` restricts calls to the server's own embedded app; the Host must reject `tools/call` requests from apps when `\"app\"` is absent from `visibility`. [3]\n- **`io.modelcontextprotocol/ui` negotiation:** Clients advertise `io.modelcontextprotocol/ui` during `initialize` (or per-request via `_meta` key `io.modelcontextprotocol/clientCapabilities` in stateless MCP `2026-07-28`) with a required `mimeTypes` array (such as `[\"text/html;profile=mcp-app\"]`). Servers should inspect client capabilities with the SDK's `getUiCapability` helper before registering UI-enabled tools, may register different tool variants based on host capabilities, and must still return a meaningful text-fallback content array when UI is available. [3][15]\n- **CSP and `prefersBorder`:** In `McpUiResourceCsp`, omitting or leaving `connectDomains` (`connect-src`), `resourceDomains`, or `frameDomains` (`frame-src 'none'`) empty enforces a zero-external-access default, while `baseUriDomains` maps to `base-uri`. The Host must construct Content Security Policy headers from those declared domains (and may further restrict them, but must not allow undeclared domains), while `prefersBorder` (`true`, `false`, or omitted) controls whether the host renders a visible border and background. [3]\n\n---\n\n## PostMessage JSON-RPC lifecycle, host notifications, and cross-SDK rollout\n\nInside its restricted sandboxed iframe, a guest View acts conceptually as an MCP client communicating with the host over a `postMessage` JSON-RPC 2.0 transport. The View initiates the session by sending a `ui/initialize` request and `ui/notifications/initialized` notification, and the Host must not send any request or notification to the View before receiving that initialized notification. [3]\n\n- **Sandbox handshake:** The `ui/initialize` → `ui/notifications/initialized` sequence replaces MCP-UI's earlier custom iframe-ready pattern, with the Host returning UI-specific context in the `McpUiInitializeResult` `hostContext` field. When the Host is a web page, it must wrap the View inside an intermediate Sandbox proxy served from a different origin than the Host, and apply the restrictive default CSP whenever `ui.csp` is omitted. [3]\n- **Host notifications:** After `ui/initialize` completes, the Host must send `ui/notifications/tool-input` (at most once, and required before `ui/notifications/tool-result`) carrying the complete tool arguments, optionally preceded by `ui/notifications/tool-input-partial` while arguments stream. The Host sends `ui/notifications/tool-result` when tool execution completes, `ui/notifications/tool-cancelled` if execution is aborted, and `ui/notifications/host-context-changed` for partial context updates that the View merges into its state. [3]\n- **Guest requests:** Guest UI iframes can invoke server tools via `tools/call` and send host requests including `ui/open-link` (asking the Host to open an external URL in the default browser or a new tab), `ui/message` (adding a message with a preserved role to the chat context, optionally gated by user consent), and `ui/update-model-context` (where each request overwrites the View's previous model context for future turns). [3]\n- **SDK rollout:** The 2026-01-26 specification unifies MCP-UI and OpenAI's Apps SDK into a shared standard implemented by `mcp-ui` and the TypeScript package `@modelcontextprotocol/ext-apps` (`registerAppTool()`, `registerAppResource()`, and `getUiCapability()`). As documented in `modelcontextprotocol/csharp-sdk` issue `#1431` (2026-03-13), Python and C# MCP servers without dedicated helper wrappers support MCP Apps by manually populating `_meta.ui` and serving `ui://` resources. [3][4][16]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **HTML Sandboxed iframes & Custom Elements (WHATWG)** | `HTML Living Standard` | Analogous to classic standard | MCP Apps loads a ui:// HTML view in a sandboxed iframe that speaks JSON-RPC over postMessage. [3] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Model Context Protocol](/protocols/mcp/)** | Part of | SEP-1865 extends MCP so a server UI iframe acts as a client over postMessage JSON-RPC. [2][3] |\n| **[A2UI (Agent to UI) Protocol](/protocols/a2ui/)** | Peer alternative | MCP Apps sends HTML in an iframe; A2UI sends JSON drawn with the host's component library. [5] |\n| **[Agent-User Interaction Protocol (AG-UI)](/protocols/ag-ui/)** | Peer alternative | AG-UI uses HTTP plus SSE or protobuf; MCP Apps renders a fetched HTML resource in a sandbox. [3][17] |\n| **[OpenAI Apps SDK manifests](/protocols/openai-apps-sdk-manifests/)** | Depended on by | ChatGPT implements MCP Apps and, as of 2026-02-22, optional extensions live in window.openai. [18][19][20] |\n| **[WebMCP](/protocols/webmcp/)** | Peer alternative | WebMCP defines tools in the page script; MCP Apps is a server resource rendered in an iframe. [3][21] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (17 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).*\n\n### MCP App servers\n\n| Actor | Role | Status | Transport, endpoint & capabilities | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Excalidraw** | MCP App server | Live (HTTP 200) · checked 2026-10-30 | Remote `https://mcp.excalidraw.com`; GET returned HTTP 200 and JSON-RPC `-32000`. | [excalidraw-mcp](https://github.com/excalidraw/excalidraw-mcp) [22] · [Excalidraw MCP endpoint](https://mcp.excalidraw.com/mcp) [23] |\n| **Metabind** | MCP App server | Live (HTTP 200) · checked 2026-10-30 | Public `https://mcp.metabind.ai/ui` returned HTTP 200; use POST or `text/event-stream`. | [Try Metabind](https://docs.metabind.ai/guides/getting-started/try-metabind) [24] · [Metabind MCP endpoint](https://mcp.metabind.ai/ui) [25] |\n| **Coronet Arcade** | MCP App server | Live (HTTP 200) · checked 2026-10-30 | `https://coronet.one/mcp` returned HTTP 200 and JSON-RPC `-32000` (`text/event-stream`). | [Connect Coronet Arcade](https://coronet.one/connect/) [26] · [Coronet Arcade MCP endpoint](https://coronet.one/mcp) [27] |\n| **ext-apps examples** | Example MCP App servers | Development · as of 2026-10-27 | Main examples include `examples/map-server`; release `v2.0.4` notes `pdf-server`. | [ext-apps](https://github.com/modelcontextprotocol/ext-apps) [9] · [ext-apps v2.0.4](https://github.com/modelcontextprotocol/ext-apps/releases/tag/v2.0.4) [12] |\n| **Amazon Bedrock AgentCore Runtime** | MCP server runtime | Partial · as of 2026-10-19 | Oct 19, 2026 AWS employee article describes deploying an MCP Apps server to Amazon Bedrock AgentCore Runtime, with the UI rendered in Claude Desktop or ChatGPT. | [AWS Builder Center, Oct 19, 2026](https://builder.aws.com/content/3KumnpioszB60y33kJPJogaYsK1/what-are-mcp-apps-building-apps-that-run-on-claude-and-chatgpt) [28] |\n\n### Clients, IDEs, AI hosts & SDKs\n\n| Actor | Role | Status | Supported transports, host surface & scope | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Claude** | AI host | Supported · as of 2026-01-26 | January 26, 2026: MCP Apps on mobile, web, and desktop, plus Claude Cowork. | [Interactive connectors and MCP Apps](https://claude.com/resources/articles/interactive-tools-in-claude) [29] |\n| **ChatGPT** | AI host | Supported · as of 2026-02-22 | ChatGPT uses JSON-RPC over `postMessage`; changelog 2026-02-22 says it is fully compatible. | [Add UI to your MCP server](https://developers.openai.com/plugins/build/chatgpt-ui) [18] · [Plugin changelog](https://developers.openai.com/plugins/changelog) [19] · [Plugin reference](https://developers.openai.com/plugins/reference) [20] |\n| **Visual Studio Code** | IDE | Supported · as of 2026-02-04 | Release 1.109 (February 4, 2026) added MCP Apps; the January 26 post was Insiders. | [MCP Apps support in VS Code](https://code.visualstudio.com/blogs/2026/01/26/mcp-apps-support) [30] · [VS Code 1.109](https://code.visualstudio.com/updates/v1_109) [31] |\n| **goose** | AI host | Experimental · as of 2026-01-26 | Tutorial calls MCP Apps experimental and draft-based, not a finished release. | [Building MCP Apps for goose](https://goose-docs.ai/docs/tutorials/building-mcp-apps/) [32] · [MCP Apps launch](https://blog.modelcontextprotocol.io/posts/2026-01-26-mcp-apps/) [1] |\n| **Microsoft 365 Copilot** | AI host | Partial · as of 2026-09-30 | Learn page updated 2026-09-30: widgets in Copilot, not every Apps SDK capability. | [MCP apps in Microsoft 365 Copilot](https://learn.microsoft.com/en-us/microsoft-365/copilot/extensibility/plugin-mcp-apps) [33] |\n| **Cursor** | IDE | Supported · as of 2026-03-03 | Changelog 2.6 (2026-03-03) shows MCP Apps charts, diagrams, and whiteboards in Cursor. | [Cursor changelog 2.6](https://cursor.com/changelog/2-6) [34] |\n| **Gemini Enterprise** | AI host | Supported · as of 2026-10-20 | October 20, 2026 post: Gemini Enterprise renders the UI in a sandboxed iframe. | [Developer's guide to MCP apps in Gemini](https://cloud.google.com/blog/topics/developers-practitioners/devs-guide-to-mcp-apps-in-gemini) [35] |\n| **Postman** | API client | Supported · checked 2026-10-30 | Response pane can preview interactive UI from MCP Apps Extension servers. | [Interact with an MCP server](https://learning.postman.com/docs/use/send-requests/protocols/mcp-requests/interact/) [36] |\n| **@modelcontextprotocol/ext-apps** | Official SDK | Supported · as of 2026-10-27 | npm `latest` is `2.0.4`; published `2.1.0` is not that tag. package.json on main is version 2.1.0. | [npm @modelcontextprotocol/ext-apps](https://registry.npmjs.org/@modelcontextprotocol/ext-apps) [11] · [ext-apps v2.0.4](https://github.com/modelcontextprotocol/ext-apps/releases/tag/v2.0.4) [12] · [ext-apps README](https://github.com/modelcontextprotocol/ext-apps) [9] · [@modelcontextprotocol/ext-apps package.json](https://raw.githubusercontent.com/modelcontextprotocol/ext-apps/main/package.json) [13][14] |\n| **mcp-ui** | Client and server SDK | Supported · checked 2026-10-30 | Implements MCP Apps: `@mcp-ui/client` plus TypeScript, Python, and Ruby server SDKs. | [About mcp-ui](https://mcpui.dev/about) [4] |\n| **MCPJam** | AI host | Listed · checked 2026-10-30 | Named among supported MCP Apps hosts on the official MCP Apps overview. | [MCP Apps overview](https://modelcontextprotocol.io/extensions/apps/overview) [37] |\n| **Archestra.AI** | AI host | Listed · checked 2026-10-30 | Named among supported MCP Apps hosts on the official MCP Apps overview. | [MCP Apps overview](https://modelcontextprotocol.io/extensions/apps/overview) [37] |\n\n### Ecosystem censuses\n\n- **MCP Apps overview**: Host support varies by client. The MCP Apps overview says MCP Apps are currently supported by Claude, Claude Desktop, VS Code GitHub Copilot, Microsoft 365 Copilot, Goose, Postman, MCPJam, and Archestra.AI. [37]\n- **npm @modelcontextprotocol/ext-apps and release v2.0.4** (*as of 2026-10-27*): The npm package @modelcontextprotocol/ext-apps has dist-tag latest 2.0.4 and dist-tag release-2.0 at 2.0.3. Version 2.1.0 was published on 2026-10-27 after 2.0.4 and is not the latest tag. GitHub release v2.0.4, published 2026-10-27, says there are no library API changes. [11][12]\n- **MCP Apps specification 2026-01-26** (*as of 2026-01-26*): The 2026-01-26 MCP Apps specification status is Stable, which is a specification label rather than an npm publish time or a registry schema date. The extension identifier is io.modelcontextprotocol/ui. HTML resources use mime type text/html;profile=mcp-app and the ui:// URI scheme. The main README also lists a draft specification as Development. [3][9]\n\n---\n\n## See also\n\n- **Category:** [Present protocols](/category/present/)\n\n---\n\n## References\n\n1. MCP Core Maintainers, *MCP Apps - Bringing UI Capabilities To MCP Clients* (published 2026-01-26) — <https://blog.modelcontextprotocol.io/posts/2026-01-26-mcp-apps/>\n2. Ido Salomon, Liad Yosef, Olivier Chafik, Jerome Swannack, Jonathan Hefner, Anton Pidkuiko, Nick Cooper, Bryan Ashley, and Alexi Christakis, *SEP-1865: MCP Apps - Interactive User Interfaces for MCP* (created 2025-11-21; status Final; checked 2026-10-30) — <https://modelcontextprotocol.io/seps/1865-mcp-apps-interactive-user-interfaces-for-mcp>\n3. Model Context Protocol (ext-apps), *MCP Apps specification, 2026-01-26* (stable 2026-01-26; created 2025-11-21; checked 2026-10-30) — <https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/2026-01-26/apps.mdx>\n4. MCP-UI, *About* (checked 2026-10-30) — <https://mcpui.dev/about>\n5. Google A2UI Team, Ido Salomon, and Liad Yosef, *A2UI + MCP Apps: Combining the best of declarative and custom agentic UIs* (published 2026-06-17) — <https://developers.googleblog.com/a2ui-and-mcp-apps/>\n6. modelcontextprotocol/ext-apps, *Release 1.0.0* (published 2026-01-26) — <https://github.com/modelcontextprotocol/ext-apps/releases/tag/v1.0.0>\n7. Ido Salomon (idosal), *SEP-1865: MCP Apps - Interactive User Interfaces for MCP, pull request #1865* (opened 2025-11-21; merged 2026-01-28) — <https://github.com/modelcontextprotocol/modelcontextprotocol/pull/1865>\n8. Anton Pidkuiko, Olivier Chafik, Ido Salomon, Liad Yosef, Nick Cooper, Sean Strong, Jerome Swannack, Alexi Christakis, and Bryan Ashley, *MCP Apps: Extending servers with interactive user interfaces* (published 2025-11-21) — <https://blog.modelcontextprotocol.io/posts/2025-11-21-mcp-apps/>\n9. Model Context Protocol, *ext-apps: Official repo for spec and SDK of MCP Apps* (checked 2026-10-30) — <https://github.com/modelcontextprotocol/ext-apps>\n10. Model Context Protocol, *Extensions Overview* (checked 2026-10-30) — <https://modelcontextprotocol.io/extensions/overview>\n11. Olivier Chafik (npm), *@modelcontextprotocol/ext-apps* (created 2025-12-08; latest 2.0.4 modified 2026-10-27) — <https://registry.npmjs.org/@modelcontextprotocol/ext-apps>\n12. modelcontextprotocol/ext-apps, *Release v2.0.4* (published 2026-10-27) — <https://github.com/modelcontextprotocol/ext-apps/releases/tag/v2.0.4>\n13. modelcontextprotocol/ext-apps, *Release v2.0.0* (published 2026-09-08) — <https://github.com/modelcontextprotocol/ext-apps/releases/tag/v2.0.0>\n14. Olivier Chafik (Model Context Protocol), *@modelcontextprotocol/ext-apps package.json* (version 2.1.0; fetched 2026-11-11) — <https://raw.githubusercontent.com/modelcontextprotocol/ext-apps/main/package.json>\n15. Model Context Protocol, *Key changes, revision 2026-07-28* (revision 2026-07-28; checked 2026-10-30) — <https://modelcontextprotocol.io/specification/2026-07-28/changelog>\n16. mikekistler (modelcontextprotocol/csharp-sdk), *SEP-1865: MCP Apps - Interactive User Interfaces for MCP (#1431)* (2026-03-13) — <https://github.com/modelcontextprotocol/csharp-sdk/issues/1431>\n17. CopilotKit, *AG-UI Specification 1.0* (checked 2026-10-30) — <https://docs.ag-ui.com/spec/1.0/index>\n18. OpenAI, *Add UI to your MCP server* (checked 2026-10-30) — <https://developers.openai.com/plugins/build/chatgpt-ui>\n19. OpenAI, *Plugin UI changelog* (checked 2026-11-03) — <https://developers.openai.com/plugins/changelog>\n20. OpenAI, *Plugins reference* (checked 2026-10-30) — <https://developers.openai.com/plugins/reference>\n21. Web Machine Learning Community Group, *WebMCP* (checked 2026-10-30) — <https://github.com/webmachinelearning/webmcp>\n22. Excalidraw, *excalidraw-mcp* (checked 2026-10-30) — <https://github.com/excalidraw/excalidraw-mcp>\n23. Excalidraw, *Excalidraw MCP endpoint* (checked 2026-10-30) — <https://mcp.excalidraw.com/mcp>\n24. Metabind, *Try Metabind in Claude or ChatGPT* (modified 2026-10-20) — <https://docs.metabind.ai/guides/getting-started/try-metabind>\n25. Metabind, *Metabind MCP endpoint* (checked 2026-10-30) — <https://mcp.metabind.ai/ui>\n26. Coronet, *Connect Coronet Arcade to ChatGPT, Claude and Cursor* (checked 2026-10-30) — <https://coronet.one/connect/>\n27. Coronet, *Coronet Arcade MCP endpoint* (checked 2026-10-30) — <https://coronet.one/mcp>\n28. Ashita (AWS), *What are MCP Apps? Building Apps that run on Claude & ChatGPT!* (published Oct 19, 2026; fetched 2026-11-11) — <https://builder.aws.com/content/3KumnpioszB60y33kJPJogaYsK1/what-are-mcp-apps-building-apps-that-run-on-claude-and-chatgpt>\n29. Anthropic, *Interactive connectors and MCP Apps* (published 2026-01-26) — <https://claude.com/resources/articles/interactive-tools-in-claude>\n30. Harald Kirschner and Connor Peet, *Giving Agents a Visual Voice: MCP Apps Support in VS Code* (published 2026-01-26) — <https://code.visualstudio.com/blogs/2026/01/26/mcp-apps-support>\n31. Microsoft, *January 2026 (version 1.109)* (released 2026-02-04) — <https://code.visualstudio.com/updates/v1_109>\n32. goose, *Building MCP Apps* (checked 2026-10-30) — <https://goose-docs.ai/docs/tutorials/building-mcp-apps/>\n33. Microsoft, *MCP apps in Microsoft 365 Copilot* (updated 2026-09-30) — <https://learn.microsoft.com/en-us/microsoft-365/copilot/extensibility/plugin-mcp-apps>\n34. Cursor (Anysphere), *MCP Apps and Team Marketplaces for Plugins, changelog 2.6* (published 2026-03-03) — <https://cursor.com/changelog/2-6>\n35. Dave Wang (Google Cloud), *Devs guide to MCP Apps in Gemini* (published 2026-10-20) — <https://cloud.google.com/blog/topics/developers-practitioners/devs-guide-to-mcp-apps-in-gemini>\n36. Postman, *Use your MCP request to interact with an MCP server* (checked 2026-10-30) — <https://learning.postman.com/docs/use/send-requests/protocols/mcp-requests/interact/>\n37. Model Context Protocol, *MCP Apps* (modified 2026-09-02; checked 2026-10-30) — <https://modelcontextprotocol.io/extensions/apps/overview>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "ARS",
   "hatnote_md": "This page covers Vercel's Agent Readability Spec, first published in March 2026 by Timothy Jordan as a website checklist and pass-fraction scorecard, and its August 2026 empirical replacement guide Make your site readable by AI agents (co-authored with the Ora research lab and standardized at AgentReady), together with the `@vercel/agent-readability` package and Jordan's `a14y` scorecard. For Dachary Carey's separate documentation benchmark, see Agent-Friendly Documentation Spec (`agentdocsspec.com`). For the individual discovery and content-negotiation conventions composed by these specifications, see [llms.txt](/protocols/llms-txt/), [AGENTS.md](/protocols/agents-md/), [Cloudflare Markdown for Agents](/protocols/cloudflare-markdown-for-agents/), [AI crawler tokens in robots.txt](/protocols/ai-crawler-tokens-robots/), [api-catalog (RFC 9727)](/protocols/api-catalog-rfc9727/), [AI Catalog well-known file](/protocols/ai-catalog-well-known-file/), and [Agentic Resource Discovery (ARD)](/protocols/ard/).",
   "adoption": {
    "level": "observed",
    "by": "Vercel documentation, @vercel/agent-readability, Next.js, @vercel/agent-readability audit, Ora is-agentic.com, and a14y",
    "probe_run": null
   },
   "aliases": [
    "Vercel Agent Readability Spec",
    "Make your site readable by AI agents",
    "AgentReady",
    "a14y"
   ],
   "analog": "a Lighthouse/PageSpeed-style audit checklist, but scored against agent readability rather than performance",
   "collisions": [],
   "discovery": {
    "mechanism": "Site-level and page-level conventions (/llms.txt, /robots.txt, /sitemap.xml, /sitemap.md, /AGENTS.md, Accept: text/markdown content negotiation, /.well-known/ai-catalog.json, /.well-known/api-catalog) audited by @vercel/agent-readability, a14y, and is-agentic.com",
    "path": "{origin}/llms.txt, /robots.txt, /sitemap.xml, /sitemap.md, /AGENTS.md, Accept: text/markdown"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://vercel.com/kb/guide/make-your-site-readable-by-ai-agents",
     "claim": "Vercel and Ora, *Make your site readable by AI agents | Vercel Knowledge Base*, published 2026-08-28; updated 2026-09-03; fetched 2026-10-30",
     "date": null,
     "quote": "agent runs and a controlled experiment with the ora.ai research lab. https://vercel.com/kb/guide/make-your-site-readable-by-ai-agents / and \\\"}]\\n16a:[\\\"$\\\",\\\"$L15b\\\",\\\"2\\\",{\\\"href\\\":\\\"https://github.com/agentready-org/standard/blob/main/data/fetchability.csv\\\",\\\"variant\\\":\\\"highlight\\\",\\\"className\\\":\\\"[\\u0026_u]:no-underline underline / agent runs and a controlled experiment with the ora.ai research lab. / This guide reflects data collected from June through August 2026. Ora continues to expand the datasets with more sites, models, harnesses, and probes. Future guide versions may update the figures and recommendations as the sample grows. Every recommendation depends on the agent reaching the page and finding the answer in the returned HTML.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://www.agentready.org/",
     "claim": "Ora and Vercel (AgentReady), *AgentReady // The open standard for agent readiness*, published 2026-04-24; modified 2026-10-20; fetched 2026-10-30",
     "date": null,
     "quote": "AgentReady is an open specification of what a product should implement to be usable by AI agents, from discovery to completion.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://timothyjordan.com/blog/2026/03/23/agent-readability-spec.html",
     "claim": "Timothy Jordan, *Agent Readability: A Specification for AI-Optimized Websites*, published 2026-03-23; fetched 2026-10-30",
     "date": null,
     "quote": "Agent Readability: A Specification for AI-Optimized Websites Mar 23, 2026 Cross-posted from Vercel KB / Agent Readability: A Specification for AI-Optimized Websites | Timothy Jordan",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://raw.githubusercontent.com/agentready-org/standard/main/spec/spec.md",
     "claim": "Ora and Vercel (agentready-org), *AgentReady — Make your site readable by AI agents (v2.0)*, v2.0 October 2026; fetched 2026-10-30",
     "date": null,
     "quote": "Compose existing, real standards (robots.txt, sitemaps, llms.txt, OpenAPI, OAuth, MCP, …) rather than re-specify them. / Each requirement carries a stable identifier of the form: AR-<CATEGORY>-NN where <CATEGORY> is one of FIND, READ, ACT / AR-READ-01 | The answer MUST be present in the initial HTML - server-rendered or prerendered, not injected by a single-page app after load. / AR-READ-02 | The site MUST return accurate HTTP status codes: 404 (or a valid redirect) for missing paths, and 429 with Retry-After when throttling / Status: v2.0 - October 2026 Canonical site: https://agentready.org / by AI agents Status: v2.0 - October 2026 Canonical site: https://agentready.org Written by: ora.ai / /.well-known/ai-catalog.json listing every agent-facing resource it ships (MCP server card, OpenAPI, GraphQL, A2A agent / When an agent cannot read a site, it answers anyway, from web search and other people's pages. Across 1,056 business sites, those answers were 3.7× as likely to contain none of the facts the user asked for / In the studies, only two changes caused agents to fail outright: hiding answers behind JavaScript and blocking access. Those, the prohibitions that make failures indistinguishable from successes (dishonest status codes), and, for products agents are expected to act on, an interface to act through (AR-ACT-10) are MUST. / This document is about sites and products, not agents. It does not constrain LLM behavior, planning, or reasoning. / The AR-ACT-* category applies only to products agents are expected to act on, not only read about; a purely informational site conforms on AR-FIND-* and AR-READ-* alone.",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://vercel.com/kb/guide/make-your-site-readable-by-ai-agents.md",
     "claim": "Vercel and Ora, *Make your site readable by AI agents (Markdown twin)*, published 2026-08-28; updated 2026-09-03; fetched 2026-10-30",
     "date": null,
     "quote": "A request with `Accept: text/markdown` should receive Markdown with `Content-Type: text/markdown; charset=utf-8`. Include `Vary: Accept` so caches keep the HTML and Markdown responses separate. / url: \"https://vercel.com/kb/guide/make-your-site-readable-by-ai-agents\" published: 2026-08-28 last_updated: 2026-09-03 authors: Vercel, Ora / url: \"https://vercel.com/kb/guide/make-your-site-readable-by-ai-agents\" published: 2026-08-28 last_updated: 2026-09-03 authors: Vercel, Ora related_resources: - title: \"is-agentic\" url: / Use [is-agentic.com](http://is-agentic.com) to check domains against a wider set of tests. The Ora research lab runs and scores every scan. Expect the checks and their weights to shift as new agent behavior gets measured. / If you offer Markdown through content negotiation, keep the response metadata accurate. A request with `Accept: text/markdown` should receive Markdown with `Content-Type: text/markdown; charset=utf-8`. Include `Vary: Accept` so caches keep the HTML and Markdown responses separate. If Markdown is unavailable, return HTML with its correct content type. / Together with the ora.ai research lab, we observed 1,033 agent runs across 25 sites and ran 190 controlled fetch probes. / In that controlled experiment, two kinds of change prevented answer retrieval. One hid the answer behind JavaScript from a fetch-only client. The other returned `403` to both clients.",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://raw.githubusercontent.com/agentready-org/standard/main/CHANGELOG.md",
     "claim": "Ora and Vercel (agentready-org), *AgentReady Standard CHANGELOG*, v2.0 October 2026; fetched 2026-10-30",
     "date": null,
     "quote": "The spec was restructured from five topic sections (Discoverability, Content, Capabilities, Identity & Access, Commerce) into the order in which agents encounter a site — find, read, act / v2.0 - October 2026 A major version: AR-ACT-10 adds a MUST, so a product that conformed to v1.0 may not conform to v2.0, and AR-ACT-07 WebMCP is raised from MAY to SHOULD.",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://a14y.dev/scorecards/",
     "claim": "Timothy Jordan (a14y), *Scorecards · a14y*, modified 2026-10-06; fetched 2026-10-30",
     "date": null,
     "quote": "v0.2.0 (latest) Initial public scorecard for the Agent Readability Spec. Covers site discoverability (llms.txt, robots.txt, sitemaps, AGENTS.md) and per-page HTML/markdown/code/API checks. released 2026-04-06 · 38 checks pinned / Each scorecard pins exactly one algorithm. v0.2.0 ships flat-pool-v1; the v0.3.0 draft introduces per-check-mean-v1 to fix a page-count weighting issue in flat-pool.",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://raw.githubusercontent.com/ThatGuySam/agentready/main/examples/vercel/agent-readability-spec.sample.html.txt",
     "claim": "Sam (ThatGuySam/agentready), *Vercel Agent Readability Spec HTML Sample Snapshot*, fetched 2026-10-30",
     "date": null,
     "quote": "and reach a wider audience. Timothy Jordan Knowledge Base/AI Copy URL Copy page Ask",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://registry.npmjs.org/@vercel/agent-readability",
     "claim": "Vercel (npm registry), *@vercel/agent-readability npm Package Metadata (v0.7.0)*, v0.7.0 published 2026-09-04; fetched 2026-10-30",
     "date": null,
     "quote": "\"name\":\"@vercel/agent-readability\" / Audit your site against the Agent Readability Spec.\",\"maintainers\":[],\"readme\":\"# @vercel/agent-readability\\n\\nDetect AI agents. Serve them markdown. / exist |\\n\\n## Audit CLI\\n\\nbash\\nnpx @vercel/agent-readability audit https://sdk.vercel.ai\\n\\n\\n25 weighted checks across 4 categories. Score 0-100. / {\\n baseUrl: 'https://example.com',\\n})\\n\\n\\nThe response includes Content-Type: text/markdown; charset=utf-8, Vary: Accept,\\nand X-Robots-Tag: noindex. Pass markdown / agents (ClaudeBot, GPTBot, Cursor, Perplexity, etc.)\\n2. **Signature-Agent header.** ChatGPT agent via RFC 9421.\\n3. **sec-fetch-mode",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://raw.githubusercontent.com/timothyjordan/a14y/main/README.md",
     "claim": "Timothy Jordan (a14y), *timothyjordan/a14y Repository README*, fetched 2026-10-30",
     "date": null,
     "quote": "# a14y Agent readability for the web. Agents (ChatGPT, Claude, Copilot, Cursor) now read",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://a14y.dev/scorecards/0.2.0.md",
     "claim": "Timothy Jordan (a14y), *Scorecard v0.2.0 · a14y agent readability*, released 2026-04-06; updated 2026-10-06; fetched 2026-10-30",
     "date": null,
     "quote": "Initial public scorecard for the Agent Readability Spec. Covers site discoverability (llms.txt, robots.txt, sitemaps, AGENTS.md) and per-page HTML/markdown/code/API checks.",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://www.rfc-editor.org/rfc/rfc9309.html",
     "claim": "M. Koster, G. Illyes, H. Zeller, and L. Sassman, *RFC 9309: Robots Exclusion Protocol*, September 2022",
     "date": null,
     "quote": "<meta content=\"Common,Latin\" name=\"scripts\"> / This is an Internet Standards Track document.",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://www.sitemaps.org/protocol.html",
     "claim": "Sitemaps Protocol Consortium, *Sitemaps XML format 0.9*, 2008-02-27",
     "date": "2008-02-27",
     "quote": "This document describes the XML schema for the Sitemap protocol.",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://www.rfc-editor.org/rfc/rfc9110.html",
     "claim": "R. Fielding, Ed., M. Nottingham, Ed., and J. Reschke, Ed., *RFC 9110: HTTP Semantics*, June 2022",
     "date": null,
     "quote": "<meta content=\"Common,Latin\" name=\"scripts\">",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://llmstxt.org",
     "claim": "Jeremy Howard, *The /llms.txt file, v2*, published 2024-09-03; modified 2026-08-10; HTTP last-modified 2026-09-24",
     "date": null,
     "quote": "This is v2 of the proposal … The llms.txt specification is open for community input. A GitHub repository hosts this informal overview",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://agents.md/",
     "claim": "AGENTS.md (Agentic AI Foundation), *AGENTS.md*, checked 2026-10-30",
     "date": null,
     "quote": "A simple, open format for guiding coding agents",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://blog.cloudflare.com/markdown-for-agents/",
     "claim": "Celso Martinho and Will Allen (Cloudflare), *Introducing Markdown for Agents*, published 2026-02-12; modified 2026-07-15; fetched 2026-11-04",
     "date": null,
     "quote": "Celso Martinho and Will Allen … \"datePublished\":\"2026-02-12T14:03:00.000Z\" … This feature is available today in Beta at no cost for Pro, Business and Enterprise plans, as well as SSL for SaaS customers.",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://datatracker.ietf.org/doc/rfc9727/",
     "claim": "IETF Datatracker, *RFC 9727: api-catalog: A Well-Known URI and Link Relation to Help Discovery of APIs*, Proposed Standard (June 2025); last updated 2026-05-20",
     "date": null,
     "quote": "RFC - Proposed Standard (June 2025)",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://vercel.com/docs/agent-resources.md",
     "claim": "Vercel, *Agent Resources — Vercel Documentation*, fetched 2026-10-30",
     "date": null,
     "quote": "\"https://vercel.com/docs/agent-resources\" last_updated: 2026-09-15 type: conceptual prerequisites: related: /docs/agent-resources/integrations-for-agents /docs/agent-resources/markdown-access /docs/graph.json",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://vercel.com/docs/agent-resources/markdown-access.md",
     "claim": "Vercel, *Markdown and Agent Discovery — Vercel Documentation*, fetched 2026-10-30",
     "date": null,
     "quote": "A canonical docs URL such as `https://vercel.com/docs/functions` returns HTML to an ordinary browser request. The same URL returns `text/markdown` when the request prefers Markdown, or when Vercel detects an AI agent without a format preference.",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://nextjs.org/docs/app/guides/ai-agents.md",
     "claim": "Vercel (Next.js), *How Next.js supports AI coding agents*, fetched 2026-10-30",
     "date": null,
     "quote": "agents use current framework guidance, inspect applications, verify changes, and report issues. url: \"https://nextjs.org/docs/app/guides/ai-agents\"",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://is-agentic.com/",
     "claim": "Ora (is-agentic.com), *Is Agentic: AI Agent Readiness Score for your Site and App*, fetched 2026-10-30",
     "date": null,
     "quote": "Is Agentic scores the public parts of a website that AI agents can discover, retrieve, understand, and use. Essential checks carry most of the score and cover fundamentals such as server-rendered content, correct HTTP behavior, clear document structure, recoverable errors, usable controls, and the identity metadata agents rely on for citations and previews",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://is-agentic.com/api/v1/report?url=vercel.com",
     "claim": "Ora (is-agentic.com), *Is Agentic API v1 Scan Report for vercel.com*, fetched 2026-10-30",
     "date": null,
     "quote": "\"report_url\":\"https://is-agentic.com/scan/vercel.com\"",
     "ref": 23
    }
   ],
   "form": "document-format",
   "governance": "Original checklist (March 2026): Timothy Jordan at Vercel (subsequently maintained as `a14y` at `https://a14y.dev/spec/`); empirical guide & open standard (August–October 2026): Vercel and the Ora research lab (`ora.ai`) at `agentready-org/standard` (`https://www.agentready.org/`)",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "new record added during read-step verification; verified against vercel.com/kb/guide/agent-readability-spec and independent commentary"
    },
    {
     "date": "2026-10-29",
     "note": "Primary-source verification against Vercel/Ora Make your site readable by AI agents (v1.0), AgentReady v2.0 (agentready-org/standard), @vercel/agent-readability (v0.7.0), and Timothy Jordan's a14y (v0.2.0)"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "vercel-agent-readability",
   "implementation": "shipping",
   "last_verified": "2026-11-12",
   "name": "Agent Readability Spec",
   "native_status": "Original KB URL (`https://vercel.com/kb/guide/agent-readability-spec` and `.md`) returns `HTTP 301 / 308 Permanent Redirect` to *Make your site readable by AI agents | Vercel Knowledge Base* (`v1.0`, published 28 August 2026, last updated 3 September 2026); open standard `AgentReady v2.0` published October 2026 (`spec/spec.md` in `agentready-org/standard`); `a14y` scorecard `v0.2.0` released 6 April 2026 (`38` pinned checks)",
   "origin": {
    "date": "2026-03-23",
    "org": "Vercel (Timothy Jordan) & Ora research lab (AgentReady)"
   },
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "draft",
   "probe": {
    "method": "GET",
    "on_absent": "A site failing most checks is not in violation of anything; the spec is a voluntary readiness checklist",
    "parse": "Evaluated per surface across site-level and page-level checks by @vercel/agent-readability audit, a14y, or is-agentic.com",
    "path": "{origin}/llms.txt, /robots.txt, /sitemap.xml, /sitemap.md, /AGENTS.md, Accept: text/markdown"
   },
   "question": "How readable and actionable is this site for AI agents from discovery to completion?",
   "scope": "general",
   "spec_url": "https://vercel.com/kb/guide/make-your-site-readable-by-ai-agents",
   "step": "read",
   "summary_md": "**Agent Readability Spec** (`AgentReady`, also published as `a14y` and the Vercel Knowledge Base guide *Make your site readable by AI agents*) is an open readiness specification written by `ora.ai` and Vercel, originated by Timothy Jordan at Vercel, that defines what a product or website should implement so AI agents can find, read, and act on it. Rather than introducing a bespoke manifest or capability schema, the specification composes existing standards including `robots.txt`, `sitemap.xml`, `llms.txt`, `OpenAPI`, `OAuth 2.0`, and `MCP` under stable `AR-<CATEGORY>-NN` requirement identifiers. Requirements follow the three-stage order in which agents encounter a site — `FIND`, `READ`, and `ACT` — where answers MUST be present in initial server-rendered or prerendered HTML and missing or throttled paths MUST return accurate `404` or `429` (`Retry-After`) HTTP status codes. Where Markdown content negotiation is offered, a request with `Accept: text/markdown` should receive Markdown with `Content-Type: text/markdown; charset=utf-8` and `Vary: Accept` so caches keep HTML and Markdown responses separate. Announced on March 20, 2026 and published as `AgentReady` `v1.0.0` on `2026-04-24` across five topic sections (`AR-DISC-*`, `AR-CONT-*`, `AR-CAPA-*`, `AR-IDEN-*`, `AR-COMM-*`), the specification was restructured in August 2026 (`v1.0`, guide published `2026-08-28` and updated `2026-09-03`) into the `AR-FIND-*`, `AR-READ-*`, and `AR-ACT-*` journey. In October 2026, `AgentReady` `v2.0` introduced `AR-ACT-10` (**MUST** expose an MCP server or CLI for operable products) and raised `AR-ACT-07` (`WebMCP`) to **SHOULD**, alongside the `a14y` `v0.2.0` scorecard (`2026-04-06`, 38 pinned checks) and the `v0.3.0` draft.",
   "track": "single-vendor",
   "version": {
    "date": "2026-10",
    "label": "Vercel KB guide v1.0 (2026-08-28, updated 2026-09-03); AgentReady v2.0 (2026-10); @vercel/agent-readability v0.7.0 (2026-09-04); a14y v0.2.0 (2026-04-06)"
   },
   "watch": [
    {
     "type": "page",
     "url": "https://vercel.com/kb/guide/make-your-site-readable-by-ai-agents",
     "selector": "main",
     "cadence": "weekly"
    },
    {
     "type": "github",
     "repo": "agentready-org/standard"
    },
    {
     "type": "npm",
     "pkg": "@vercel/agent-readability"
    }
   ],
   "use_cases": [
    "serve-content-to-agents",
    "discover-my-api",
    "control-ai-crawling"
   ],
   "audience": [
    "site-owner",
    "platform"
   ],
   "pairs_with": [
    "llms-txt",
    "agents-md",
    "cloudflare-markdown-for-agents",
    "ai-crawler-tokens-robots",
    "api-catalog-rfc9727"
   ],
   "prerequisites": [],
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "web_discovery",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "This page covers Vercel's Agent Readability Spec, first published in March 2026 by Timothy Jordan as a website checklist and pass-fraction scorecard, and its August 2026 empirical replacement guide Make your site readable by AI agents (co-authored with the Ora research lab and standardized at AgentReady), together with the `@vercel/agent-readability` package and Jordan's `a14y` scorecard. For Dachary Carey's separate documentation benchmark, see Agent-Friendly Documentation Spec (`agentdocsspec.com`). For the individual discovery and content-negotiation conventions composed by these specifications, see [llms.txt](/protocols/llms-txt/), [AGENTS.md](/protocols/agents-md/), [Cloudflare Markdown for Agents](/protocols/cloudflare-markdown-for-agents/), [AI crawler tokens in robots.txt](/protocols/ai-crawler-tokens-robots/), [api-catalog (RFC 9727)](/protocols/api-catalog-rfc9727/), [AI Catalog well-known file](/protocols/ai-catalog-well-known-file/), and [Agentic Resource Discovery (ARD)](/protocols/ard/). [1]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Agent Readability Spec** (`AgentReady`, also published as `a14y` and the Vercel Knowledge Base guide *Make your site readable by AI agents*) is an open readiness specification written by `ora.ai` and Vercel, originated by Timothy Jordan at Vercel, that defines what a product or website should implement so AI agents can find, read, and act on it. [2][3] Rather than introducing a bespoke manifest or capability schema, the specification composes existing standards including `robots.txt`, `sitemap.xml`, `llms.txt`, `OpenAPI`, `OAuth 2.0`, and `MCP` under stable `AR-<CATEGORY>-NN` requirement identifiers. [4] Requirements follow the three-stage order in which agents encounter a site — `FIND`, `READ`, and `ACT` — where answers MUST be present in initial server-rendered or prerendered HTML and missing or throttled paths MUST return accurate `404` or `429` (`Retry-After`) HTTP status codes. [4] Where Markdown content negotiation is offered, a request with `Accept: text/markdown` should receive Markdown with `Content-Type: text/markdown; charset=utf-8` and `Vary: Accept` so caches keep HTML and Markdown responses separate. [5] Announced on March 20, 2026 and published as `AgentReady` `v1.0.0` on `2026-04-24` across five topic sections (`AR-DISC-*`, `AR-CONT-*`, `AR-CAPA-*`, `AR-IDEN-*`, `AR-COMM-*`), the specification was restructured in August 2026 (`v1.0`, guide published `2026-08-28` and updated `2026-09-03`) into the `AR-FIND-*`, `AR-READ-*`, and `AR-ACT-*` journey. [5][6] In October 2026, `AgentReady` `v2.0` introduced `AR-ACT-10` (**MUST** expose an MCP server or CLI for operable products) and raised `AR-ACT-07` (`WebMCP`) to **SHOULD**, alongside the `a14y` `v0.2.0` scorecard (`2026-04-06`, 38 pinned checks) and the `v0.3.0` draft. [6][7]",
   "v05_identity_sentence_md": "**Agent Readability Spec** (`AgentReady`, also published as `a14y` and the Vercel Knowledge Base guide *Make your site readable by AI agents*) is an open readiness specification written by `ora.ai` and Vercel, originated by Timothy Jordan at Vercel, that defines what a product or website should implement so AI agents can find, read, and act on it. [2][3] Rather than introducing a bespoke manifest or capability schema, the specification composes existing standards including `robots.txt`, `sitemap.xml`, `llms.txt`, `OpenAPI`, `OAuth 2.0`, and `MCP` under stable `AR-<CATEGORY>-NN` requirement identifiers. [4]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Read](/category/read/) (`read`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "Timothy Jordan at Vercel (`a14y`); Vercel and Ora (`ora.ai`) with Stripe, Auth0, Mintlify, Tavily, Google, Elementor, Netlify (`AgentReady`) [1][3][8]"
    },
    {
     "label": "Governed by",
     "value_md": "Vercel and Ora (`agentready-org/standard`, `agentready.org`); Vercel (`@vercel/agent-readability`); Timothy Jordan (`a14y.dev`) [1][9][10]"
    },
    {
     "label": "Track",
     "value_md": "Vendor specification (`vercel.com/kb/guide`) and multi-vendor open standard (`agentready-org/standard`, `AgentReady v2.0`) [1][4]"
    },
    {
     "label": "Status",
     "value_md": "Original KB URL (`https://vercel.com/kb/guide/agent-readability-spec` and `.md`) returns `HTTP 301 / 308 Permanent Redirect` to *Make your site readable by AI agents | Vercel Knowledge Base* (`v1.0`, published 28 August 2026, last updated 3 September 2026); open standard `AgentReady v2.0` published October 2026 (`spec/spec.md` in `agentready-org/standard`); `a14y` scorecard `v0.2.0` released 6 April 2026 (`38` pinned checks) [1][5][9]"
    },
    {
     "label": "Version",
     "value_md": "Vercel KB `v1.0` (`2026-09-03`); `AgentReady v2.0` (`2026-10`); `@vercel/agent-readability` `v0.7.0` (`2026-09-04`); `a14y` `v0.2.0` (`2026-04-06`, `38` checks) [1][5][9]"
    },
    {
     "label": "Wire format",
     "value_md": "SSR HTML (`text/html; charset=utf-8`), YAML-frontmatter Markdown (`text/markdown; charset=utf-8`, `Vary: Accept`, RFC 8288 canonical `Link`), JSON-LD, `/llms.txt`, `/docs/sitemap.md`, `/docs/graph.json`, `<page>.graph.md`, `/.well-known/ai-catalog.json`, `/.well-known/api-catalog` [5][9][11]"
    },
    {
     "label": "Specification",
     "value_md": "[Make your site readable by AI agents](https://vercel.com/kb/guide/make-your-site-readable-by-ai-agents) ([`.md` twin](https://vercel.com/kb/guide/make-your-site-readable-by-ai-agents.md)) · [AgentReady v2.0](https://raw.githubusercontent.com/agentready-org/standard/main/spec/spec.md) · [March 2026 Spec](https://timothyjordan.com/blog/2026/03/23/agent-readability-spec.html) · [`a14y` Spec](https://a14y.dev/spec/) [1][4][5]"
    },
    {
     "label": "Found at",
     "value_md": "`Accept: text/markdown`, `Vary: Accept`, `Link: <url>; rel=\"canonical\"`, `<link rel=\"alternate\" type=\"text/markdown\">`, `<link rel=\"ai-catalog\">`, RFC 9421 `Signature-Agent`, `/robots.txt`, `/sitemap.xml`, `/llms.txt`, `/.well-known/ai-catalog.json` [4][5][9]"
    },
    {
     "label": "Licence",
     "value_md": "MIT (`agentready-org/standard`, `@vercel/agent-readability`, `timothyjordan/a14y`) [4][9][10]"
    }
   ],
   "v05_problem_md": "In a vendor-conducted controlled experiment by Vercel and the `ora.ai` lab across 190 fetch probes and 1,033 agent runs on 25 sites (published by Vercel and `agentready-org/standard`), two site behaviors prevented answer retrieval outright: hiding answers behind client-side JavaScript and returning `403` to agent requests. [5] Across 1,056 business sites measured in `agentready-org/standard`, when an agent cannot read a site it answers anyway from third-party pages, and those fallback answers were 3.7x as likely to contain none of the requested facts. [4] AgentReady assigns RFC 2119 normative weight directly from those empirical measurements: prohibiting `robots.txt` or WAF blocks on public content (`AR-FIND-01`), requiring answers in initial HTML (`AR-READ-01`), requiring honest `404` and `429` status codes (`AR-READ-02`), and requiring an operable MCP server or CLI (`AR-ACT-10`) are **MUST** requirements. [4] The specification defines site and product readiness requirements rather than scoring weights, does not introduce a bespoke manifest format, and does not constrain LLM behavior, planning, or reasoning; purely informational sites conform on `AR-FIND-*` and `AR-READ-*` alone. [4]",
   "v05_mechanism_delta_md": "AgentReady assigns RFC 2119 normative weight directly from those empirical measurements: prohibiting `robots.txt` or WAF blocks on public content (`AR-FIND-01`), requiring answers in initial HTML (`AR-READ-01`), requiring honest `404` and `429` status codes (`AR-READ-02`), and requiring an operable MCP server or CLI (`AR-ACT-10`) are **MUST** requirements. [4]",
   "v05_scope_boundary_md": "The specification defines site and product readiness requirements rather than scoring weights, does not introduce a bespoke manifest format, and does not constrain LLM behavior, planning, or reasoning; purely informational sites conform on `AR-FIND-*` and `AR-READ-*` alone. [4]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "robots.txt (RFC 9309)",
      "spec_or_rfc": "RFC 9309",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "The Agent Readability guide treats /robots.txt as one artifact and does not add fields to RFC 9309's User-agent, Allow, or Disallow grammar, while its August 2026 revision makes unblocked access and honest HTTP status codes mandatory. [1][12]"
     },
     {
      "name": "Sitemaps XML (sitemaps.org)",
      "spec_or_rfc": "Sitemaps 0.9",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "The guide names /sitemap.xml and /sitemap.md, while the sitemaps.org protocol defines an XML urlset and does not define a Markdown sitemap, and the August 2026 revision found a sitemap did not change retrieval when the answer was already in server-rendered HTML. [1][13]"
     },
     {
      "name": "HTTP Content Negotiation (RFC 9110)",
      "spec_or_rfc": "RFC 9110",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "The guide checks that an origin answers Accept: text/markdown, which applies RFC 9110 negotiation, and the companion middleware separates that response with Vary: Accept, which the guide does not define as a new media type. [1][14]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "llms-txt",
      "target_name": "llms.txt",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "The guide treats /llms.txt as a readability artifact, while llms.txt is the Markdown file at /llms.txt or a subpath with a required H1, an optional blockquote, and H2 link sections. [1][15]"
     },
     {
      "target_id": "agents-md",
      "target_name": "AGENTS.md",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "The guide treats /AGENTS.md as a readability artifact, while AGENTS.md is the instruction file for coding agents. [1][16]"
     },
     {
      "target_id": "cloudflare-markdown-for-agents",
      "target_name": "Markdown for Agents",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "The guide checks the Accept: text/markdown response, while Markdown for Agents converts an HTML page on an enabled zone when Accept includes text/markdown and, until 9 October 2026, returned x-markdown-tokens. [1][17]"
     },
     {
      "target_id": "ai-crawler-tokens-robots",
      "target_name": "AI crawler tokens in robots.txt",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "The guide looks for a robots.txt file, while AI crawler tokens are the User-agent product tokens publishers put in that file's groups. [1][12]"
     },
     {
      "target_id": "api-catalog-rfc9727",
      "target_name": "api-catalog (RFC 9727)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "The guide scores human-site readability files, while RFC 9727 serves a linkset of API descriptions at /.well-known/api-catalog. [1][18]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (6 probed or cited examples; non-exhaustive).",
    "side_a": {
     "visible": true,
     "heading": "Who publishes or hosts it",
     "col4_header": "Behavior / Provisioning",
     "note_md": null,
     "rows": [
      {
       "actor": "Vercel documentation",
       "role": "Docs platform",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · as of 2026-10-29",
       "col4_md": "`https://vercel.com/docs/agent-resources.md` returned status 200 on 2026-10-29. A docs URL returns HTML to a browser and `text/markdown` when the client prefers Markdown or when Vercel detects an AI agent; responses set `Vary: Accept`. The same site serves `.md` twins, `.graph.md` cross-link maps, `/docs/sitemap.md`, `/.well-known/ai-catalog.json`, and `/.well-known/api-catalog`.",
       "source_md": "[agent-resources.md](https://vercel.com/docs/agent-resources.md) [19] · [Markdown access](https://vercel.com/docs/agent-resources/markdown-access.md) [20]"
      },
      {
       "actor": "@vercel/agent-readability",
       "role": "CDN / Edge",
       "status": "Supported",
       "status_display": "Supported · as of 2026-09-04",
       "col4_md": "npm package v0.7.0 (published 2026-09-04; v0.1.0 on 2026-03-30) installs Next.js, SvelteKit, Nuxt, and Vercel Edge routing middleware. Agent detection uses known user-agent patterns (30+ agents, including ClaudeBot, GPTBot, Cursor, and Perplexity), a `Signature-Agent` header for the ChatGPT agent (RFC 9421), and a `sec-fetch-mode` heuristic.",
       "source_md": "[npm @vercel/agent-readability](https://registry.npmjs.org/@vercel/agent-readability) [9]"
      },
      {
       "actor": "Next.js",
       "role": "Docs platform",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-29",
       "col4_md": "Next.js 16.2+ bundles version-matched documentation at `node_modules/next/dist/docs/`. The agent guide is `https://nextjs.org/docs/app/guides/ai-agents.md` (status 200 on 2026-10-29). The vercel agent CLI writes project guidance markers, and vercel/vercel-plugin ships the is-agentic skill.",
       "source_md": "[Next.js AI agents guide](https://nextjs.org/docs/app/guides/ai-agents.md) [21]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Bot, client & tool support",
     "col4_header": "Behavior / Provisioning",
     "note_md": null,
     "rows": [
      {
       "actor": "@vercel/agent-readability audit",
       "role": "Validator / CLI",
       "status": "Supported",
       "status_display": "Supported · as of 2026-09-04",
       "col4_md": "npx @vercel/agent-readability audit `<url>` runs 25 weighted checks in 4 categories and returns a score from 0 to 100 (package v0.7.0, 2026-09-04).",
       "source_md": "[npm @vercel/agent-readability](https://registry.npmjs.org/@vercel/agent-readability) [9]"
      },
      {
       "actor": "Ora is-agentic.com",
       "role": "Validator / CLI",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-28",
       "col4_md": "Scores the public parts of a site that agents can discover, retrieve, understand, and use. Essential checks cover server-rendered content, HTTP behavior, document structure, recoverable errors, usable controls, and citation metadata. A live probe of `https://is-agentic.com/api/v1/report?url=vercel.com` on 2026-10-28 scored vercel.com 96/100 (33 eligible checks).",
       "source_md": "[is-agentic.com](https://is-agentic.com/) [22] · [vercel.com report](https://is-agentic.com/api/v1/report?url=vercel.com) [23]"
      },
      {
       "actor": "a14y",
       "role": "Validator / CLI",
       "status": "Supported",
       "status_display": "Supported · as of 2026-04-06",
       "col4_md": "npx a14y and the Chrome extension score a site against the pinned checklist. v0.2.0 (2026-04-06) uses algorithm `flat-pool-v1` with 38 checks. The v0.3.0 draft switches to `per-check-mean-v1`.",
       "source_md": "[a14y scorecards](https://a14y.dev/scorecards/) [7]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Read protocols](/category/read/)** — Category index for `read` standards."
    }
   ],
   "v05_compiled_md": "---\nid: vercel-agent-readability\ntitle: \"Agent Readability Spec\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: read\nform: document-format\nwire_archetype: web_discovery\nspec_url: https://vercel.com/kb/guide/make-your-site-readable-by-ai-agents\nlast_checked: 2026-11-12\n---\n\n# Agent Readability Spec\n\n**Category:** [Read](/category/read/) (`read`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-11-12\n\n> *This page covers Vercel's Agent Readability Spec, first published in March 2026 by Timothy Jordan as a website checklist and pass-fraction scorecard, and its August 2026 empirical replacement guide Make your site readable by AI agents (co-authored with the Ora research lab and standardized at AgentReady), together with the `@vercel/agent-readability` package and Jordan's `a14y` scorecard. For Dachary Carey's separate documentation benchmark, see Agent-Friendly Documentation Spec (`agentdocsspec.com`). For the individual discovery and content-negotiation conventions composed by these specifications, see [llms.txt](/protocols/llms-txt/), [AGENTS.md](/protocols/agents-md/), [Cloudflare Markdown for Agents](/protocols/cloudflare-markdown-for-agents/), [AI crawler tokens in robots.txt](/protocols/ai-crawler-tokens-robots/), [api-catalog (RFC 9727)](/protocols/api-catalog-rfc9727/), [AI Catalog well-known file](/protocols/ai-catalog-well-known-file/), and [Agentic Resource Discovery (ARD)](/protocols/ard/). [1]*\n\n**Agent Readability Spec** (`AgentReady`, also published as `a14y` and the Vercel Knowledge Base guide *Make your site readable by AI agents*) is an open readiness specification written by `ora.ai` and Vercel, originated by Timothy Jordan at Vercel, that defines what a product or website should implement so AI agents can find, read, and act on it. [2][3] Rather than introducing a bespoke manifest or capability schema, the specification composes existing standards including `robots.txt`, `sitemap.xml`, `llms.txt`, `OpenAPI`, `OAuth 2.0`, and `MCP` under stable `AR-<CATEGORY>-NN` requirement identifiers. [4] Requirements follow the three-stage order in which agents encounter a site — `FIND`, `READ`, and `ACT` — where answers MUST be present in initial server-rendered or prerendered HTML and missing or throttled paths MUST return accurate `404` or `429` (`Retry-After`) HTTP status codes. [4] Where Markdown content negotiation is offered, a request with `Accept: text/markdown` should receive Markdown with `Content-Type: text/markdown; charset=utf-8` and `Vary: Accept` so caches keep HTML and Markdown responses separate. [5] Announced on March 20, 2026 and published as `AgentReady` `v1.0.0` on `2026-04-24` across five topic sections (`AR-DISC-*`, `AR-CONT-*`, `AR-CAPA-*`, `AR-IDEN-*`, `AR-COMM-*`), the specification was restructured in August 2026 (`v1.0`, guide published `2026-08-28` and updated `2026-09-03`) into the `AR-FIND-*`, `AR-READ-*`, and `AR-ACT-*` journey. [5][6] In October 2026, `AgentReady` `v2.0` introduced `AR-ACT-10` (**MUST** expose an MCP server or CLI for operable products) and raised `AR-ACT-07` (`WebMCP`) to **SHOULD**, alongside the `a14y` `v0.2.0` scorecard (`2026-04-06`, 38 pinned checks) and the `v0.3.0` draft. [6][7]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Read](/category/read/) (`read`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | Timothy Jordan at Vercel (`a14y`); Vercel and Ora (`ora.ai`) with Stripe, Auth0, Mintlify, Tavily, Google, Elementor, Netlify (`AgentReady`) [1][3][8] |\n| **Governed by** | Vercel and Ora (`agentready-org/standard`, `agentready.org`); Vercel (`@vercel/agent-readability`); Timothy Jordan (`a14y.dev`) [1][9][10] |\n| **Track** | Vendor specification (`vercel.com/kb/guide`) and multi-vendor open standard (`agentready-org/standard`, `AgentReady v2.0`) [1][4] |\n| **Status** | Original KB URL (`https://vercel.com/kb/guide/agent-readability-spec` and `.md`) returns `HTTP 301 / 308 Permanent Redirect` to *Make your site readable by AI agents \\| Vercel Knowledge Base* (`v1.0`, published 28 August 2026, last updated 3 September 2026); open standard `AgentReady v2.0` published October 2026 (`spec/spec.md` in `agentready-org/standard`); `a14y` scorecard `v0.2.0` released 6 April 2026 (`38` pinned checks) [1][5][9] |\n| **Version** | Vercel KB `v1.0` (`2026-09-03`); `AgentReady v2.0` (`2026-10`); `@vercel/agent-readability` `v0.7.0` (`2026-09-04`); `a14y` `v0.2.0` (`2026-04-06`, `38` checks) [1][5][9] |\n| **Wire format** | SSR HTML (`text/html; charset=utf-8`), YAML-frontmatter Markdown (`text/markdown; charset=utf-8`, `Vary: Accept`, RFC 8288 canonical `Link`), JSON-LD, `/llms.txt`, `/docs/sitemap.md`, `/docs/graph.json`, `<page>.graph.md`, `/.well-known/ai-catalog.json`, `/.well-known/api-catalog` [5][9][11] |\n| **Specification** | [Make your site readable by AI agents](https://vercel.com/kb/guide/make-your-site-readable-by-ai-agents) ([`.md` twin](https://vercel.com/kb/guide/make-your-site-readable-by-ai-agents.md)) · [AgentReady v2.0](https://raw.githubusercontent.com/agentready-org/standard/main/spec/spec.md) · [March 2026 Spec](https://timothyjordan.com/blog/2026/03/23/agent-readability-spec.html) · [`a14y` Spec](https://a14y.dev/spec/) [1][4][5] |\n| **Found at** | `Accept: text/markdown`, `Vary: Accept`, `Link: <url>; rel=\"canonical\"`, `<link rel=\"alternate\" type=\"text/markdown\">`, `<link rel=\"ai-catalog\">`, RFC 9421 `Signature-Agent`, `/robots.txt`, `/sitemap.xml`, `/llms.txt`, `/.well-known/ai-catalog.json` [4][5][9] |\n| **Licence** | MIT (`agentready-org/standard`, `@vercel/agent-readability`, `timothyjordan/a14y`) [4][9][10] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [Adoption and ecosystem](#adoption-and-ecosystem)\n4. [See also](#see-also)\n5. [References](#references)\n\n---\n\n## Problem and scope\n\nIn a vendor-conducted controlled experiment by Vercel and the `ora.ai` lab across 190 fetch probes and 1,033 agent runs on 25 sites (published by Vercel and `agentready-org/standard`), two site behaviors prevented answer retrieval outright: hiding answers behind client-side JavaScript and returning `403` to agent requests. [5] Across 1,056 business sites measured in `agentready-org/standard`, when an agent cannot read a site it answers anyway from third-party pages, and those fallback answers were 3.7x as likely to contain none of the requested facts. [4] AgentReady assigns RFC 2119 normative weight directly from those empirical measurements: prohibiting `robots.txt` or WAF blocks on public content (`AR-FIND-01`), requiring answers in initial HTML (`AR-READ-01`), requiring honest `404` and `429` status codes (`AR-READ-02`), and requiring an operable MCP server or CLI (`AR-ACT-10`) are **MUST** requirements. [4] The specification defines site and product readiness requirements rather than scoring weights, does not introduce a bespoke manifest format, and does not constrain LLM behavior, planning, or reasoning; purely informational sites conform on `AR-FIND-*` and `AR-READ-*` alone. [4]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **robots.txt (RFC 9309)** | `RFC 9309` | Analogous to classic standard | The Agent Readability guide treats /robots.txt as one artifact and does not add fields to RFC 9309's User-agent, Allow, or Disallow grammar, while its August 2026 revision makes unblocked access and honest HTTP status codes mandatory. [1][12] |\n| **Sitemaps XML (sitemaps.org)** | `Sitemaps 0.9` | Analogous to classic standard | The guide names /sitemap.xml and /sitemap.md, while the sitemaps.org protocol defines an XML urlset and does not define a Markdown sitemap, and the August 2026 revision found a sitemap did not change retrieval when the answer was already in server-rendered HTML. [1][13] |\n| **HTTP Content Negotiation (RFC 9110)** | `RFC 9110` | Analogous to classic standard | The guide checks that an origin answers Accept: text/markdown, which applies RFC 9110 negotiation, and the companion middleware separates that response with Vary: Accept, which the guide does not define as a new media type. [1][14] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[llms.txt](/protocols/llms-txt/)** | Complements | The guide treats /llms.txt as a readability artifact, while llms.txt is the Markdown file at /llms.txt or a subpath with a required H1, an optional blockquote, and H2 link sections. [1][15] |\n| **[AGENTS.md](/protocols/agents-md/)** | Complements | The guide treats /AGENTS.md as a readability artifact, while AGENTS.md is the instruction file for coding agents. [1][16] |\n| **[Markdown for Agents](/protocols/cloudflare-markdown-for-agents/)** | Complements | The guide checks the Accept: text/markdown response, while Markdown for Agents converts an HTML page on an enabled zone when Accept includes text/markdown and, until 9 October 2026, returned x-markdown-tokens. [1][17] |\n| **[AI crawler tokens in robots.txt](/protocols/ai-crawler-tokens-robots/)** | Complements | The guide looks for a robots.txt file, while AI crawler tokens are the User-agent product tokens publishers put in that file's groups. [1][12] |\n| **[api-catalog (RFC 9727)](/protocols/api-catalog-rfc9727/)** | Complements | The guide scores human-site readability files, while RFC 9727 serves a linkset of API descriptions at /.well-known/api-catalog. [1][18] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (6 probed or cited examples; non-exhaustive).*\n\n### Who publishes or hosts it\n\n| Actor | Role | Status | Behavior / Provisioning | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Vercel documentation** | Docs platform | Live (HTTP 200) · as of 2026-10-29 | `https://vercel.com/docs/agent-resources.md` returned status 200 on 2026-10-29. A docs URL returns HTML to a browser and `text/markdown` when the client prefers Markdown or when Vercel detects an AI agent; responses set `Vary: Accept`. The same site serves `.md` twins, `.graph.md` cross-link maps, `/docs/sitemap.md`, `/.well-known/ai-catalog.json`, and `/.well-known/api-catalog`. | [agent-resources.md](https://vercel.com/docs/agent-resources.md) [19] · [Markdown access](https://vercel.com/docs/agent-resources/markdown-access.md) [20] |\n| **@vercel/agent-readability** | CDN / Edge | Supported · as of 2026-09-04 | npm package v0.7.0 (published 2026-09-04; v0.1.0 on 2026-03-30) installs Next.js, SvelteKit, Nuxt, and Vercel Edge routing middleware. Agent detection uses known user-agent patterns (30+ agents, including ClaudeBot, GPTBot, Cursor, and Perplexity), a `Signature-Agent` header for the ChatGPT agent (RFC 9421), and a `sec-fetch-mode` heuristic. | [npm @vercel/agent-readability](https://registry.npmjs.org/@vercel/agent-readability) [9] |\n| **Next.js** | Docs platform | Supported · as of 2026-10-29 | Next.js 16.2+ bundles version-matched documentation at `node_modules/next/dist/docs/`. The agent guide is `https://nextjs.org/docs/app/guides/ai-agents.md` (status 200 on 2026-10-29). The vercel agent CLI writes project guidance markers, and vercel/vercel-plugin ships the is-agentic skill. | [Next.js AI agents guide](https://nextjs.org/docs/app/guides/ai-agents.md) [21] |\n\n### Bot, client & tool support\n\n| Actor | Role | Status | Behavior / Provisioning | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **@vercel/agent-readability audit** | Validator / CLI | Supported · as of 2026-09-04 | npx @vercel/agent-readability audit `<url>` runs 25 weighted checks in 4 categories and returns a score from 0 to 100 (package v0.7.0, 2026-09-04). | [npm @vercel/agent-readability](https://registry.npmjs.org/@vercel/agent-readability) [9] |\n| **Ora is-agentic.com** | Validator / CLI | Supported · as of 2026-10-28 | Scores the public parts of a site that agents can discover, retrieve, understand, and use. Essential checks cover server-rendered content, HTTP behavior, document structure, recoverable errors, usable controls, and citation metadata. A live probe of `https://is-agentic.com/api/v1/report?url=vercel.com` on 2026-10-28 scored vercel.com 96/100 (33 eligible checks). | [is-agentic.com](https://is-agentic.com/) [22] · [vercel.com report](https://is-agentic.com/api/v1/report?url=vercel.com) [23] |\n| **a14y** | Validator / CLI | Supported · as of 2026-04-06 | npx a14y and the Chrome extension score a site against the pinned checklist. v0.2.0 (2026-04-06) uses algorithm `flat-pool-v1` with 38 checks. The v0.3.0 draft switches to `per-check-mean-v1`. | [a14y scorecards](https://a14y.dev/scorecards/) [7] |\n\n---\n\n## See also\n\n- **Category:** [Read protocols](/category/read/)\n\n---\n\n## References\n\n1. Vercel and Ora, *Make your site readable by AI agents | Vercel Knowledge Base* (published 2026-08-28; updated 2026-09-03; fetched 2026-10-30) — <https://vercel.com/kb/guide/make-your-site-readable-by-ai-agents>\n2. Ora and Vercel (AgentReady), *AgentReady // The open standard for agent readiness* (published 2026-04-24; modified 2026-10-20; fetched 2026-10-30) — <https://www.agentready.org/>\n3. Timothy Jordan, *Agent Readability: A Specification for AI-Optimized Websites* (published 2026-03-23; fetched 2026-10-30) — <https://timothyjordan.com/blog/2026/03/23/agent-readability-spec.html>\n4. Ora and Vercel (agentready-org), *AgentReady — Make your site readable by AI agents (v2.0)* (v2.0 October 2026; fetched 2026-10-30) — <https://raw.githubusercontent.com/agentready-org/standard/main/spec/spec.md>\n5. Vercel and Ora, *Make your site readable by AI agents (Markdown twin)* (published 2026-08-28; updated 2026-09-03; fetched 2026-10-30) — <https://vercel.com/kb/guide/make-your-site-readable-by-ai-agents.md>\n6. Ora and Vercel (agentready-org), *AgentReady Standard CHANGELOG* (v2.0 October 2026; fetched 2026-10-30) — <https://raw.githubusercontent.com/agentready-org/standard/main/CHANGELOG.md>\n7. Timothy Jordan (a14y), *Scorecards · a14y* (modified 2026-10-06; fetched 2026-10-30) — <https://a14y.dev/scorecards/>\n8. Sam (ThatGuySam/agentready), *Vercel Agent Readability Spec HTML Sample Snapshot* (fetched 2026-10-30) — <https://raw.githubusercontent.com/ThatGuySam/agentready/main/examples/vercel/agent-readability-spec.sample.html.txt>\n9. Vercel (npm registry), *@vercel/agent-readability npm Package Metadata (v0.7.0)* (v0.7.0 published 2026-09-04; fetched 2026-10-30) — <https://registry.npmjs.org/@vercel/agent-readability>\n10. Timothy Jordan (a14y), *timothyjordan/a14y Repository README* (fetched 2026-10-30) — <https://raw.githubusercontent.com/timothyjordan/a14y/main/README.md>\n11. Timothy Jordan (a14y), *Scorecard v0.2.0 · a14y agent readability* (released 2026-04-06; updated 2026-10-06; fetched 2026-10-30) — <https://a14y.dev/scorecards/0.2.0.md>\n12. M. Koster, G. Illyes, H. Zeller, and L. Sassman, *RFC 9309: Robots Exclusion Protocol* (September 2022) — <https://www.rfc-editor.org/rfc/rfc9309.html>\n13. Sitemaps Protocol Consortium, *Sitemaps XML format 0.9* (2008-02-27) — <https://www.sitemaps.org/protocol.html>\n14. R. Fielding, Ed., M. Nottingham, Ed., and J. Reschke, Ed., *RFC 9110: HTTP Semantics* (June 2022) — <https://www.rfc-editor.org/rfc/rfc9110.html>\n15. Jeremy Howard, *The /llms.txt file, v2* (published 2024-09-03; modified 2026-08-10; HTTP last-modified 2026-09-24) — <https://llmstxt.org>\n16. AGENTS.md (Agentic AI Foundation), *AGENTS.md* (checked 2026-10-30) — <https://agents.md/>\n17. Celso Martinho and Will Allen (Cloudflare), *Introducing Markdown for Agents* (published 2026-02-12; modified 2026-07-15; fetched 2026-11-04) — <https://blog.cloudflare.com/markdown-for-agents/>\n18. IETF Datatracker, *RFC 9727: api-catalog: A Well-Known URI and Link Relation to Help Discovery of APIs* (Proposed Standard (June 2025); last updated 2026-05-20) — <https://datatracker.ietf.org/doc/rfc9727/>\n19. Vercel, *Agent Resources — Vercel Documentation* (fetched 2026-10-30) — <https://vercel.com/docs/agent-resources.md>\n20. Vercel, *Markdown and Agent Discovery — Vercel Documentation* (fetched 2026-10-30) — <https://vercel.com/docs/agent-resources/markdown-access.md>\n21. Vercel (Next.js), *How Next.js supports AI coding agents* (fetched 2026-10-30) — <https://nextjs.org/docs/app/guides/ai-agents.md>\n22. Ora (is-agentic.com), *Is Agentic: AI Agent Readiness Score for your Site and App* (fetched 2026-10-30) — <https://is-agentic.com/>\n23. Ora (is-agentic.com), *Is Agentic API v1 Scan Report for vercel.com* (fetched 2026-10-30) — <https://is-agentic.com/api/v1/report?url=vercel.com>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "",
   "adoption": {
    "level": "observed",
    "by": "2s and Wildcard Bridge (agentsjson)",
    "probe_run": null
   },
   "aliases": [],
   "analog": "an OpenAPI/Swagger spec, extended with the multi-call recipes a human developer would otherwise write by hand",
   "collisions": [
    "agents.md (unrelated coding-agent instructions file)",
    "agent.json / agentfile.json (various unrelated agent-config conventions used by other frameworks)",
    "an unrelated /.well-known/agents.json format with an agents[] list (seen at zapier.com and cloudflare.com, 2026-10-20), not Wildcard's OpenAPI + flows file"
   ],
   "discovery": {
    "mechanism": "Well-known URI or standalone manifest alongside OpenAPI specs",
    "path": "Proposed at /.well-known/agents.json (\"We propose the file placed in /.well-known/agents.json so it is easily discoverable by agents accessing web services. For now, we maintain a registry for available agents.json files.\"), or loaded directly as standalone JSON files alongside OpenAPI specs from a repository or registry (\"We can begin building agents.json files immediately before official adoption by providers. No extra infrastructure changes, servers, or new endpoints. By putting responsibility of execution on the client - the paradigm abides by the same security and orchestration protocol of existing API based applications today. API providers can still choose to maintain official agents.json files.\")"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://github.com/wild-card-ai/agents-json/blob/master/agents_json/agentsJson.schema.json",
     "claim": "Wildcard AI, *agentsJson.schema.json*, checked 2026-10-29",
     "date": null,
     "quote": "MUST include an array of flows that define sequences of API operations to be executed. Each flow represents a cohesive workflow involving multiple actions, data links, and user interactions. / \"required\": [\"agentsJson\", \"info\", \"sources\", \"flows\"] / app-id=1477376905, app-argument=https://github.com/wild-card-ai/agents-json/blob/master/agents_json/agentsJson.schema.json / https://opengraph.githubassets.com/7f9709cbb2474ad13223051074c05b6bd89c640d9879ca85c21243278749f7b1/wild-card-ai/agents-json @github summary_large_image agents-json/agents_json/agentsJson.schema.json at master / OPTIONAL. An array of overrides that allow customization of specific API operations.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://github.com/wild-card-ai/agents-json/blob/master/README.md",
     "claim": "Wildcard AI, *agents-json README*, checked 2026-10-29",
     "date": null,
     "quote": "The agents.json Specification is an open specification that formally describes contracts for API and agent interactions, built on top of the OpenAPI standard. The current version is 0.1.0. / We propose the file placed in /.well-known/agents.json / The current version is 0.1.0. / OAuth 1.0, API Key / !Discord(https://discord.gg/7VU6HKq7cZ) !Documentation(https://docs.wild-card.ai/agents-json) !Twitter Follow(https://x.com/wildcard_ai) The agents.json Specification is an open specification that formally / GitHub. 1401488693436528 app-id=1477376905, app-argument=https://github.com/wild-card-ai/agents-json/blob/master/README.md / notebooks to get started:\"},{\"level\":2,\"text\":\"Demos\",\"anchor\":\"demos\",\"htmlText\":\"Demos\"},{\"level\":2,\"text\":\"agents.json Specification\",\"anchor\":\"agentsjson-specification\",\"htmlText\":\"agents.json / We propose the file placed in /.well-known/agents.json so it is easily discoverable by agents accessing web services. For now, we maintain a registry for available agents.json files. / Describing endpoints/data models without describing how they interact together is why AI agents struggle to take the right sequence of actions. / Flows are contracts with a series of 1 or more API calls that describe an outcome. / Links describe how two actions are stitched together. / While MCP is designed to be stateful—relying on persistent connections between clients and servers for exchanging context and requests—Agents.json is stateless. Here, the agent independently manages all context. / agents.json enables them to execute multi-step workflows reliably.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://github.com/wild-card-ai/agents-json/blob/master/python/agentsjson/core/executor.py",
     "claim": "Wildcard AI, *Wildcard Bridge executor.py (agentsjson/core/executor.py)*, checked 2026-10-30",
     "date": null,
     "quote": "package=\\\"agentsjson.integrations\\\" / from.models.auth import AuthConfig, AuthType, OAuth1AuthConfig, UserPassCredentials, OAuth2AuthConfig",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://wildcard.mintlify.app/agentsjson/bridge-about",
     "claim": "Wildcard AI, *Wildcard Bridge documentation*, checked 2026-10-29",
     "date": null,
     "quote": "Bridge supports adding Basic, ApiKey, and Bearer authentication to requests. / A developer connects their agent with an agents.json file. The relevant chain(s) are chosen by the agent and arguments populated for a given task. Bridge runs the chain(s). The goal experience is a developer adds an agents.json file in their workflow and the correct set of actions for an integration is executed. Bridge supports adding Basic, ApiKey, and Bearer authentication to requests.",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://wildcard.mintlify.app/about/company",
     "claim": "Wildcard AI, *Company page*, checked 2026-10-29",
     "date": null,
     "quote": "This project is started by Wildcard. We're a team of 2 founders, Kaushik and Yagnya, wanting to make agents act predictably and safely.",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://github.com/wild-card-ai/agents-json/blob/master/MAINTAINERS.md",
     "claim": "Wildcard AI, *MAINTAINERS.md*, checked 2026-10-29",
     "date": null,
     "quote": "agents-json/MAINTAINERS.md at master · wild-card-ai/agents-json · GitHub Skip to content {\"props\":{\"docsUrl\":\"https://docs.github.com/get-started/accessibility/keyboard-shortcuts\"}} {\"props\":{}}",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://github.com/wild-card-ai/agents-json",
     "claim": "Wildcard AI, *wild-card-ai/agents-json repository*, checked 2026-10-29",
     "date": null,
     "quote": "\"https://api.github.com/repos/wild-card-ai/agents-json/notifications{?since,all,participating}\", \"labels_url\": \"https://api.github.com/repos/wild-card-ai/agents-json/labels{/name}\", \"releases_url\":",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://github.com/wild-card-ai/agents-json/commits",
     "claim": "wild-card-ai/agents-json (GitHub), *wild-card-ai/agents-json — GitHub API (commits)*, checked 2026-10-30",
     "date": null,
     "quote": "\"sha\": \"5f5e60a4074eb0fb2aed5a3b03c8149dc3fd7120\"",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://github.com/wild-card-ai/agents-json/blob/master/python/pyproject.toml",
     "claim": "Wildcard AI, *Bridge Python pyproject.toml*, checked 2026-10-29",
     "date": null,
     "quote": "by creating an account on GitHub. 1401488693436528 app-id=1477376905, app-argument=https://github.com/wild-card-ai/agents-json/blob/master/python/pyproject.toml / agents-json/python/pyproject.toml at master · wild-card-ai/agents-json · GitHub Skip to content {\"props\":{\"docsUrl\":\"https://docs.github.com/get-started/accessibility/keyboard-shortcuts\"}} {\"props\":{}}",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://wildcard.mintlify.app/agentsjson/schema",
     "claim": "Wildcard AI, *Schema reference*, checked 2026-10-29",
     "date": null,
     "quote": "properties: agentsJson info sources flows Additionally, it may include optional overrides and other properties / Reference - Wildcard\\\"}],[\\\"$\\\",\\\"meta\\\",\\\"20\\\",{\\\"name\\\":\\\"twitter:description\\\",\\\"content\\\":\\\"The complete agents.json schema",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://github.com/wild-card-ai/agents-json/blob/master/python/agentsjson/core/loader.py",
     "claim": "Wildcard AI, *Wildcard Bridge loader.py*, checked 2026-10-29",
     "date": null,
     "quote": "convert_dot_digits_to_brackets\",\"from.models.schema import Flow, AgentsJson, Override, Source\",\"from.models.bundle import Bundle\",\"\",\"def apply_overrides(openapi_source: Dict[str, Any], overrides: / http_methods if path_item.get(method) and path_item.get(method).get('operationId') } def load_agents_json(url: str) -> Bundle: \"\"\" Loads an",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://wildcard.mintlify.app/agentsjson/file-about",
     "claim": "Wildcard AI, *agents.json file documentation*, checked 2026-10-29",
     "date": null,
     "quote": "We propose the file placed in /.well-known/agents.json so it is easily discoverable by agents accessing web services. For now, we compose a GitHub repository as a registry for available agents.json files.",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://wildcard.mintlify.app/about/licenses",
     "claim": "Wildcard AI, *Licenses page*, checked 2026-10-29",
     "date": null,
     "quote": "The agents.json specification is open source, licensed under the Apache 2.0 License.",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://github.com/wild-card-ai/agents-json/blob/master/LICENSE",
     "claim": "Wildcard AI, *MIT License*, checked 2026-10-29",
     "date": null,
     "quote": "MIT License Copyright (c) 2025 Wildcard AI",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://github.com/wild-card-ai/agents-json/blob/master/agents_json/LICENSE",
     "claim": "Wildcard AI, *agents_json Apache-2.0 license*, checked 2026-10-29",
     "date": null,
     "quote": "requests\",\"href\":\"/wild-card-ai/agents-json/pulls\",\"selectedLinks\":[\"repo_pulls\",\"checks\"],\"count\":9,\"popoverTarget\":false,\"commandId\":\"repositories:go-to-pull-requests\",\"reactNav\":{\"appTarget\":null,\"anchor\":nu",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://spec.openapis.org/oas/v3.1.0.html",
     "claim": "OpenAPI Initiative, *OpenAPI Specification v3.1.0*, 2021-02-15",
     "date": "2021-02-15",
     "quote": "OpenAPI Specification v3.1.0 Version 3.1.0",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://www.rfc-editor.org/rfc/rfc8615.html",
     "claim": "IETF, *RFC 8615: Well-Known Uniform Resource Identifiers (URIs)*, IETF RFC",
     "date": null,
     "quote": "This memo defines a path prefix for \"well-known locations\",",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Current : the current protocol version, which is ready for use and may continue to receive backwards compatible changes.",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://webmachinelearning.github.io/webmcp/",
     "claim": "Web Machine Learning Community Group (editors Brandon Walderman, Khushal Sagar, Dominic Farolino, and Samuel Dallstream), *WebMCP*, Draft Community Group Report, 11 November 2026",
     "date": null,
     "quote": "Draft Community Group Report, 11 November 2026",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://datatracker.ietf.org/doc/rfc9727/",
     "claim": "IETF Datatracker, *RFC 9727: api-catalog: A Well-Known URI and Link Relation to Help Discovery of APIs*, Proposed Standard (June 2025); last updated 2026-05-20",
     "date": null,
     "quote": "RFC - Proposed Standard (June 2025)",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://agenticresourcediscovery.org/spec/",
     "claim": "Agentic Resource Discovery Project (ards-project), *Agentic Resource Discovery Specification v0.91*, 2026-08-26; fetched 2026-10-30",
     "date": null,
     "quote": "Version: v0.91 Status: Proposal Date: August 26, 2026",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://2s.io/.well-known/agents.json",
     "claim": "2s, *2s.io agents.json live manifest*, checked 2026-10-30",
     "date": null,
     "quote": "fra1::iad1::5dtl7-1793402823839-c1a20814a3c6 connection: close transfer-encoding: chunked {\"agentsJson\":\"0.1.0\",\"info\":{\"title\":\"2s API - Agent Flows\",\"version\":\"1.0.0\",\"description\":\"agents.json flows for 2s",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://pypi.org/pypi/agentsjson/json",
     "claim": "Wildcard AI, *agentsjson PyPI metadata*, checked 2026-03-01",
     "date": null,
     "quote": "\"summary\":\"Agents.json Python Implementation with Core and Integrations\",\"version\":\"0.1.14\"",
     "ref": 23
    }
   ],
   "form": "well-known-file",
   "governance": "Wildcard AI (wild-card-ai/agents-json); MAINTAINERS.md lists Yagnya Patel (yagnyaPatel) as current maintainer (\"Maintainer GitHub ID Affiliation Yagnya Patel yagnyaPatel Indpendent\"), and the README notes: \"This GitHub repository will host informal reviews, allowing for version control and public discussion.\"",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "new record added during read-step verification; reclassified to the act step and verified against the wild-card-ai/agents-json README and repository metadata"
    },
    {
     "date": "2026-10-16",
     "note": "agents.json is dormant: last push 2025-08-21, version 0.1.0"
    },
    {
     "date": "2026-10-16",
     "note": "No push since 2025-08-21 (over 180 days)"
    },
    {
     "date": "2026-10-20",
     "note": "collision with the unrelated agents.json format served by Zapier and Cloudflare recorded"
    },
    {
     "date": "2026-10-25",
     "note": "version updated to 0.1.3 (latest specification release prior to repository dormancy on 2025-08-21)"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "agents-json",
   "implementation": "prototype",
   "last_verified": "2026-11-12",
   "name": "agents.json",
   "native_status": "Dormant in public repository development (unarchived; last commit 5f5e60a on 2025-08-21); Wildcard's primary domain (wild-card.ai) now markets AI search optimization for e-commerce storefronts",
   "origin": {
    "org": "Wildcard AI",
    "date": "2025-01-30"
   },
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "deprecated",
   "probe": {
    "method": "GET",
    "on_absent": "No agents.json at the well-known path; the provider may still have one published in Wildcard's registry or elsewhere, since the path is a proposal, not a requirement",
    "parse": "200 response with a JSON body extending an OpenAPI document with `flows` and `links` fields",
    "path": "{origin}/.well-known/agents.json"
   },
   "question": "How does an agent learn which multi-step API call sequences (\"flows\") a service supports, on top of its raw OpenAPI surface?",
   "scope": "general",
   "spec_url": "https://github.com/wild-card-ai/agents-json/blob/master/agents_json/agentsJson.schema.json",
   "step": "act",
   "summary_md": "**agents.json** is an open JSON specification originated by Wildcard AI and maintained in the wild-card-ai/agents-json repository. Built on OpenAPI 3+, it formally describes contracts for API and agent interactions. The current published specification version is 0.1.0, and manifests chain multi-step flows across one or more OpenAPI sources. A manifest MUST include `agentsJson`, `info`, `sources`, and `flows`. Each source points at an OpenAPI 3+ document and each flow lists ordered actions and links that pass field values between operations, while the `Wildcard Bridge` Python runtime (`agentsjson`) routes flows through bundled integration modules (`agentsjson.integrations`). The README records specification version `0.1.0`, while Wildcard Bridge is distributed on PyPI as `agentsjson` and supports `Basic`, `ApiKey`, `Bearer`, `OAuth 1.0`, and `OAuth2AuthConfig` authentication schemes.",
   "track": "single-vendor",
   "version": {
    "label": "0.1.0",
    "date": "2025-03"
   },
   "watch": [
    {
     "type": "github",
     "repo": "wild-card-ai/agents-json",
     "mode": "release",
     "version": false
    }
   ],
   "use_cases": [
    "discover-my-api",
    "expose-tools-to-agents",
    "describe-agent-capabilities"
   ],
   "audience": [
    "agent-builder",
    "platform"
   ],
   "pairs_with": [
    "mcp",
    "webmcp",
    "api-catalog-rfc9727",
    "ard"
   ],
   "prerequisites": [],
   "hatnote_md": "This page is about `agents.json`, the OpenAPI-based workflow specification introduced by Wildcard AI that chains API operations into multi-step `flows` and `links` for AI agents. It is not [AGENTS.md](/protocols/agents-md/), the repository instruction file for coding agents; not [agents.txt](/protocols/agents-txt/), whose companion IETF Internet-Draft `draft-car-agents-txt-wellknown-00` proposes a different JSON capability file at `/.well-known/agents.json`; and not other unrelated manifests served at `/.well-known/agents.json`, including Zapier's `agents[]` MCP endpoint wrapper, Cloudflare's `www.cloudflare.com/.well-known/agents.json` site capability file (`$schema: \"https://agentprotocol.ai/schemas/agents.json\"`), or the A2A Registry multi-agent array format.",
   "tier": "spec_brief",
   "lifecycle_status": "retired",
   "wire_archetype": "harnesses_rpc_ui",
   "status_notice_md": "**Status notice (Dormant Specification):** The Wildcard `agents.json` repository has had no public specification commits since `2025-08-21`.",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "**Status notice (Dormant Specification):** The Wildcard `agents.json` repository has had no public specification commits since `2025-08-21`. This page is about `agents.json`, the OpenAPI-based workflow specification introduced by Wildcard AI that chains API operations into multi-step `flows` and `links` for AI agents. It is not [AGENTS.md](/protocols/agents-md/), the repository instruction file for coding agents; not [agents.txt](/protocols/agents-txt/), whose companion IETF Internet-Draft `draft-car-agents-txt-wellknown-00` proposes a different JSON capability file at `/.well-known/agents.json`; and not other unrelated manifests served at `/.well-known/agents.json`, including Zapier's `agents[]` MCP endpoint wrapper, Cloudflare's `www.cloudflare.com/.well-known/agents.json` site capability file (`$schema: \"https://agentprotocol.ai/schemas/agents.json\"`), or the A2A Registry multi-agent array format. [1]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**agents.json** is an open JSON specification originated by Wildcard AI and maintained in the wild-card-ai/agents-json repository. Built on OpenAPI 3+, it formally describes contracts for API and agent interactions. The current published specification version is 0.1.0, and manifests chain multi-step flows across one or more OpenAPI sources. [2] A manifest MUST include `agentsJson`, `info`, `sources`, and `flows`. Each source points at an OpenAPI 3+ document and each flow lists ordered actions and links that pass field values between operations, while the `Wildcard Bridge` Python runtime (`agentsjson`) routes flows through bundled integration modules (`agentsjson.integrations`). [1][2][3] The README records specification version `0.1.0`, while Wildcard Bridge is distributed on PyPI as `agentsjson` and supports `Basic`, `ApiKey`, `Bearer`, `OAuth 1.0`, and `OAuth2AuthConfig` authentication schemes. [2][3][4]",
   "v05_identity_sentence_md": "**agents.json** is an open JSON specification originated by Wildcard AI and maintained in the wild-card-ai/agents-json repository. Built on OpenAPI 3+, it formally describes contracts for API and agent interactions. The current published specification version is 0.1.0, and manifests chain multi-step flows across one or more OpenAPI sources. [2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Act](/category/act/) (`act`)"
    },
    {
     "label": "Form",
     "value_md": "Well-known file (`well-known-file`)"
    },
    {
     "label": "Originated by",
     "value_md": "Wildcard AI, co-founded by Kaushik Mahorker and Yagnya Patel (`yagnyaPatel` / `yompal`), backed by Y Combinator (`wild-card-ai/agents-json`, created `2025-01-30`, launched `2025-02-21` / `2025-03-03`) [2][5][6]"
    },
    {
     "label": "Governed by",
     "value_md": "Single-vendor open specification in `wild-card-ai/agents-json` (`MAINTAINERS.md` lists Yagnya Patel); repository inactive since `2025-08-21` while `wild-card.ai` markets AI storefront optimization [2][6][7]"
    },
    {
     "label": "Track",
     "value_md": "Single-vendor open specification (Wildcard AI; dormant) [2][6]"
    },
    {
     "label": "Status",
     "value_md": "Dormant in public repository development (`archived: false`, last commit `5f5e60a` on `2025-08-21` updating `README.md`); Wildcard's primary domain (`wild-card.ai`) now markets AI search optimization for e-commerce storefronts [1][2][8][9]"
    },
    {
     "label": "Version",
     "value_md": "Specification `0.1.0` (`agentsJson.schema.json`, JSON Schema Draft-07); PyPI `agentsjson` `0.1.14` (`2025-03-01`) and `0.1.11` in `python/pyproject.toml` [1][2][9]"
    },
    {
     "label": "Wire format",
     "value_md": "UTF-8 JSON (`application/json`) validated against JSON Schema Draft-07 (`agentsJson`, `info`, `sources`, optional `overrides`, `flows`) over OpenAPI 3+ YAML/JSON specs [1][10][11]"
    },
    {
     "label": "Specification",
     "value_md": "[agentsJson.schema.json (GitHub)](https://github.com/wild-card-ai/agents-json/blob/master/agents_json/agentsJson.schema.json) · [Wildcard Schema Reference](https://wildcard.mintlify.app/agentsjson/schema) · [wild-card-ai/agents-json README](https://github.com/wild-card-ai/agents-json/blob/master/README.md) [1][2][10]"
    },
    {
     "label": "Found at",
     "value_md": "Proposed at `https://<origin>/.well-known/agents.json` (`GET`, `200 OK`, `application/json`) or loaded by URL/path from a repository bundle [2][11][12]"
    },
    {
     "label": "Licence",
     "value_md": "Specification under Apache-2.0 (`agents_json/LICENSE`); repository root `LICENSE` is MIT while `wildcard.mintlify.app/about/licenses` states Wildcard Bridge (`agentsjson`) is AGPLv3 [13][14][15]"
    }
   ],
   "v05_problem_md": "OpenAPI describes individual endpoints and schemas, but not how operations must be ordered to reach an outcome. AI agents therefore struggle to take the right sequence of actions when only isolated operation descriptions are available. Without an explicit workflow contract, argument wiring between dependent calls is left to improvisation. [2] The spec adds flows as contracts of one or more API calls that describe an outcome, and links that stitch field paths from one action to the next. Providers can publish manifests before official adoption because execution remains on the client and reuses existing API security boundaries. Overrides let publishers tailor OpenAPI operation fields through fieldPath without editing the upstream specification file. [1][2] While MCP keeps stateful sessions between clients and servers, agents.json is stateless and the calling agent independently manages context. llms.txt helps models read site prose but does not define structured action sequences. Wildcard positions agents.json as complementary documentation for taking structured actions rather than replacing OpenAPI or MCP entirely. [2]",
   "v05_mechanism_delta_md": "The spec adds flows as contracts of one or more API calls that describe an outcome, and links that stitch field paths from one action to the next. Providers can publish manifests before official adoption because execution remains on the client and reuses existing API security boundaries. Overrides let publishers tailor OpenAPI operation fields through fieldPath without editing the upstream specification file. [1][2]",
   "v05_scope_boundary_md": "While MCP keeps stateful sessions between clients and servers, agents.json is stateless and the calling agent independently manages context. llms.txt helps models read site prose but does not define structured action sequences. Wildcard positions agents.json as complementary documentation for taking structured actions rather than replacing OpenAPI or MCP entirely. [2]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "OpenAPI Specification 3.1",
      "spec_or_rfc": "OpenAPI 3.1.0",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "agents.json specification 0.1.0 requires top-level keys agentsJson, info, sources, and flows, and the flows chain OpenAPI 3+ operations into multi-step recipes that the client executes without a new server runtime. [1][16]"
     },
     {
      "name": "Well-Known URIs (RFC 8615)",
      "spec_or_rfc": "RFC 8615",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "The specification proposes publishing that document at /.well-known/agents.json so an agent can fetch it, and the same JSON may also be loaded from a repository beside an OpenAPI file. [1][17]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "agents.json is a static client-side flow document over OpenAPI operations, while MCP is a live JSON-RPC session for tools and resources. [1][18]"
     },
     {
      "target_id": "webmcp",
      "target_name": "WebMCP",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "agents.json is fetched as a file and executed by the client, while WebMCP tools are registered by script only while the page is open. [1][19]"
     },
     {
      "target_id": "api-catalog-rfc9727",
      "target_name": "api-catalog (RFC 9727)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "RFC 9727 is the /.well-known/api-catalog document, while agents.json is the file that adds multi-step flows on top of OpenAPI sources. [1][20]"
     },
     {
      "target_id": "ard",
      "target_name": "Agentic Resource Discovery (ARD)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ARD is the Agentic Resource Discovery well-known file, while agents.json itself contains the OpenAPI sources and the flow recipes the client runs. [1][21]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (2 probed or cited examples; non-exhaustive).",
    "side_a": {
     "visible": true,
     "heading": "Servers, repos & skill indexes",
     "col4_header": "Transport & Scope",
     "note_md": null,
     "rows": [
      {
       "actor": "2s",
       "role": "API publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "https://2s.io/.well-known/agents.json returns status 200 application/json. agentsJson is 0.1.0; info.title is \"2s API - Agent Flows\", version 1.0.0. It references five OpenAPI 3.1 group specs (search, patents, law, business, agent) and defines six flows: discover_endpoints_flow, web_grounded_answer_flow, screen_entity_sanctions_flow, lookup_company_flow, patent_prior_art_flow, and search_us_caselaw_flow.",
       "source_md": "[2s.io/.well-known/agents.json](https://2s.io/.well-known/agents.json) [22]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "IDEs, hosts & coding agents",
     "col4_header": "Transport & Scope",
     "note_md": null,
     "rows": [
      {
       "actor": "Wildcard Bridge (agentsjson)",
       "role": "Client SDK / Runtime",
       "status": "Supported",
       "status_display": "Supported · as of 2025-03-01",
       "col4_md": "Python package `agentsjson` 0.1.14 on PyPI (uploaded 2025-03-01; python/pyproject.toml in the repo says 0.1.11) loads an `agents.json` file and dispatches chains via bundled integrations with `Basic`, `ApiKey`, `Bearer`, or OAuth auth; docs state Bridge is AGPL v3 while the repo root LICENSE is MIT and agents_json/LICENSE is Apache-2.0.",
       "source_md": "[Wildcard Bridge](https://wildcard.mintlify.app/agentsjson/bridge-about) [4] · [PyPI agentsjson](https://pypi.org/pypi/agentsjson/json) [23]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "agent-permissions-json",
     "target_name": "agent-permissions.json",
     "relation_label": "Complements",
     "delta": "agent-permissions.json is an allow-or-deny file for in-page actions, while agents.json is a separate well-known document. [1]",
     "item_md": "**[agent-permissions.json](/protocols/agent-permissions-json/)** (Complements) — agent-permissions.json is an allow-or-deny file for in-page actions, while agents.json is a separate well-known document. [1]"
    },
    {
     "item_md": "**[Act protocols](/category/act/)** — Category index for `act` standards."
    }
   ],
   "v05_compiled_md": "---\nid: agents-json\ntitle: \"agents.json\"\ntier: spec_brief\nlifecycle_status: retired\ncategory: act\nform: well-known-file\nwire_archetype: harnesses_rpc_ui\nspec_url: https://github.com/wild-card-ai/agents-json/blob/master/agents_json/agentsJson.schema.json\nlast_checked: 2026-11-12\n---\n\n# agents.json\n\n**Category:** [Act](/category/act/) (`act`) · **Form:** Well-known file (`well-known-file`) · **Last checked:** 2026-11-12\n\n> ***Status notice (Dormant Specification):** The Wildcard `agents.json` repository has had no public specification commits since `2025-08-21`. This page is about `agents.json`, the OpenAPI-based workflow specification introduced by Wildcard AI that chains API operations into multi-step `flows` and `links` for AI agents. It is not [AGENTS.md](/protocols/agents-md/), the repository instruction file for coding agents; not [agents.txt](/protocols/agents-txt/), whose companion IETF Internet-Draft `draft-car-agents-txt-wellknown-00` proposes a different JSON capability file at `/.well-known/agents.json`; and not other unrelated manifests served at `/.well-known/agents.json`, including Zapier's `agents[]` MCP endpoint wrapper, Cloudflare's `www.cloudflare.com/.well-known/agents.json` site capability file (`$schema: \"https://agentprotocol.ai/schemas/agents.json\"`), or the A2A Registry multi-agent array format. [1]*\n\n**agents.json** is an open JSON specification originated by Wildcard AI and maintained in the wild-card-ai/agents-json repository. Built on OpenAPI 3+, it formally describes contracts for API and agent interactions. The current published specification version is 0.1.0, and manifests chain multi-step flows across one or more OpenAPI sources. [2] A manifest MUST include `agentsJson`, `info`, `sources`, and `flows`. Each source points at an OpenAPI 3+ document and each flow lists ordered actions and links that pass field values between operations, while the `Wildcard Bridge` Python runtime (`agentsjson`) routes flows through bundled integration modules (`agentsjson.integrations`). [1][2][3] The README records specification version `0.1.0`, while Wildcard Bridge is distributed on PyPI as `agentsjson` and supports `Basic`, `ApiKey`, `Bearer`, `OAuth 1.0`, and `OAuth2AuthConfig` authentication schemes. [2][3][4]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Act](/category/act/) (`act`) |\n| **Form** | Well-known file (`well-known-file`) |\n| **Originated by** | Wildcard AI, co-founded by Kaushik Mahorker and Yagnya Patel (`yagnyaPatel` / `yompal`), backed by Y Combinator (`wild-card-ai/agents-json`, created `2025-01-30`, launched `2025-02-21` / `2025-03-03`) [2][5][6] |\n| **Governed by** | Single-vendor open specification in `wild-card-ai/agents-json` (`MAINTAINERS.md` lists Yagnya Patel); repository inactive since `2025-08-21` while `wild-card.ai` markets AI storefront optimization [2][6][7] |\n| **Track** | Single-vendor open specification (Wildcard AI; dormant) [2][6] |\n| **Status** | Dormant in public repository development (`archived: false`, last commit `5f5e60a` on `2025-08-21` updating `README.md`); Wildcard's primary domain (`wild-card.ai`) now markets AI search optimization for e-commerce storefronts [1][2][8][9] |\n| **Version** | Specification `0.1.0` (`agentsJson.schema.json`, JSON Schema Draft-07); PyPI `agentsjson` `0.1.14` (`2025-03-01`) and `0.1.11` in `python/pyproject.toml` [1][2][9] |\n| **Wire format** | UTF-8 JSON (`application/json`) validated against JSON Schema Draft-07 (`agentsJson`, `info`, `sources`, optional `overrides`, `flows`) over OpenAPI 3+ YAML/JSON specs [1][10][11] |\n| **Specification** | [agentsJson.schema.json (GitHub)](https://github.com/wild-card-ai/agents-json/blob/master/agents_json/agentsJson.schema.json) · [Wildcard Schema Reference](https://wildcard.mintlify.app/agentsjson/schema) · [wild-card-ai/agents-json README](https://github.com/wild-card-ai/agents-json/blob/master/README.md) [1][2][10] |\n| **Found at** | Proposed at `https://<origin>/.well-known/agents.json` (`GET`, `200 OK`, `application/json`) or loaded by URL/path from a repository bundle [2][11][12] |\n| **Licence** | Specification under Apache-2.0 (`agents_json/LICENSE`); repository root `LICENSE` is MIT while `wildcard.mintlify.app/about/licenses` states Wildcard Bridge (`agentsjson`) is AGPLv3 [13][14][15] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [Adoption and ecosystem](#adoption-and-ecosystem)\n4. [See also](#see-also)\n5. [References](#references)\n\n---\n\n## Problem and scope\n\nOpenAPI describes individual endpoints and schemas, but not how operations must be ordered to reach an outcome. AI agents therefore struggle to take the right sequence of actions when only isolated operation descriptions are available. Without an explicit workflow contract, argument wiring between dependent calls is left to improvisation. [2] The spec adds flows as contracts of one or more API calls that describe an outcome, and links that stitch field paths from one action to the next. Providers can publish manifests before official adoption because execution remains on the client and reuses existing API security boundaries. Overrides let publishers tailor OpenAPI operation fields through fieldPath without editing the upstream specification file. [1][2] While MCP keeps stateful sessions between clients and servers, agents.json is stateless and the calling agent independently manages context. llms.txt helps models read site prose but does not define structured action sequences. Wildcard positions agents.json as complementary documentation for taking structured actions rather than replacing OpenAPI or MCP entirely. [2]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **OpenAPI Specification 3.1** | `OpenAPI 3.1.0` | Profiles classic standard | agents.json specification 0.1.0 requires top-level keys agentsJson, info, sources, and flows, and the flows chain OpenAPI 3+ operations into multi-step recipes that the client executes without a new server runtime. [1][16] |\n| **Well-Known URIs (RFC 8615)** | `RFC 8615` | Profiles classic standard | The specification proposes publishing that document at /.well-known/agents.json so an agent can fetch it, and the same JSON may also be loaded from a repository beside an OpenAPI file. [1][17] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Model Context Protocol](/protocols/mcp/)** | Peer alternative | agents.json is a static client-side flow document over OpenAPI operations, while MCP is a live JSON-RPC session for tools and resources. [1][18] |\n| **[WebMCP](/protocols/webmcp/)** | Peer alternative | agents.json is fetched as a file and executed by the client, while WebMCP tools are registered by script only while the page is open. [1][19] |\n| **[api-catalog (RFC 9727)](/protocols/api-catalog-rfc9727/)** | Complements | RFC 9727 is the /.well-known/api-catalog document, while agents.json is the file that adds multi-step flows on top of OpenAPI sources. [1][20] |\n| **[Agentic Resource Discovery (ARD)](/protocols/ard/)** | Peer alternative | ARD is the Agentic Resource Discovery well-known file, while agents.json itself contains the OpenAPI sources and the flow recipes the client runs. [1][21] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (2 probed or cited examples; non-exhaustive).*\n\n### Servers, repos & skill indexes\n\n| Actor | Role | Status | Transport & Scope | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **2s** | API publisher | Live (HTTP 200) · checked 2026-10-30 | https://2s.io/.well-known/agents.json returns status 200 application/json. agentsJson is 0.1.0; info.title is \"2s API - Agent Flows\", version 1.0.0. It references five OpenAPI 3.1 group specs (search, patents, law, business, agent) and defines six flows: discover_endpoints_flow, web_grounded_answer_flow, screen_entity_sanctions_flow, lookup_company_flow, patent_prior_art_flow, and search_us_caselaw_flow. | [2s.io/.well-known/agents.json](https://2s.io/.well-known/agents.json) [22] |\n\n### IDEs, hosts & coding agents\n\n| Actor | Role | Status | Transport & Scope | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Wildcard Bridge (agentsjson)** | Client SDK / Runtime | Supported · as of 2025-03-01 | Python package `agentsjson` 0.1.14 on PyPI (uploaded 2025-03-01; python/pyproject.toml in the repo says 0.1.11) loads an `agents.json` file and dispatches chains via bundled integrations with `Basic`, `ApiKey`, `Bearer`, or OAuth auth; docs state Bridge is AGPL v3 while the repo root LICENSE is MIT and agents_json/LICENSE is Apache-2.0. | [Wildcard Bridge](https://wildcard.mintlify.app/agentsjson/bridge-about) [4] · [PyPI agentsjson](https://pypi.org/pypi/agentsjson/json) [23] |\n\n---\n\n## See also\n\n- **[agent-permissions.json](/protocols/agent-permissions-json/)** *(Complements)* — agent-permissions.json is an allow-or-deny file for in-page actions, while agents.json is a separate well-known document. [1]\n- **Category:** [Act protocols](/category/act/)\n\n---\n\n## References\n\n1. Wildcard AI, *agentsJson.schema.json* (checked 2026-10-29) — <https://github.com/wild-card-ai/agents-json/blob/master/agents_json/agentsJson.schema.json>\n2. Wildcard AI, *agents-json README* (checked 2026-10-29) — <https://github.com/wild-card-ai/agents-json/blob/master/README.md>\n3. Wildcard AI, *Wildcard Bridge executor.py (agentsjson/core/executor.py)* (checked 2026-10-30) — <https://github.com/wild-card-ai/agents-json/blob/master/python/agentsjson/core/executor.py>\n4. Wildcard AI, *Wildcard Bridge documentation* (checked 2026-10-29) — <https://wildcard.mintlify.app/agentsjson/bridge-about>\n5. Wildcard AI, *Company page* (checked 2026-10-29) — <https://wildcard.mintlify.app/about/company>\n6. Wildcard AI, *MAINTAINERS.md* (checked 2026-10-29) — <https://github.com/wild-card-ai/agents-json/blob/master/MAINTAINERS.md>\n7. Wildcard AI, *wild-card-ai/agents-json repository* (checked 2026-10-29) — <https://github.com/wild-card-ai/agents-json>\n8. wild-card-ai/agents-json (GitHub), *wild-card-ai/agents-json — GitHub API (commits)* (checked 2026-10-30) — <https://github.com/wild-card-ai/agents-json/commits>\n9. Wildcard AI, *Bridge Python pyproject.toml* (checked 2026-10-29) — <https://github.com/wild-card-ai/agents-json/blob/master/python/pyproject.toml>\n10. Wildcard AI, *Schema reference* (checked 2026-10-29) — <https://wildcard.mintlify.app/agentsjson/schema>\n11. Wildcard AI, *Wildcard Bridge loader.py* (checked 2026-10-29) — <https://github.com/wild-card-ai/agents-json/blob/master/python/agentsjson/core/loader.py>\n12. Wildcard AI, *agents.json file documentation* (checked 2026-10-29) — <https://wildcard.mintlify.app/agentsjson/file-about>\n13. Wildcard AI, *Licenses page* (checked 2026-10-29) — <https://wildcard.mintlify.app/about/licenses>\n14. Wildcard AI, *MIT License* (checked 2026-10-29) — <https://github.com/wild-card-ai/agents-json/blob/master/LICENSE>\n15. Wildcard AI, *agents_json Apache-2.0 license* (checked 2026-10-29) — <https://github.com/wild-card-ai/agents-json/blob/master/agents_json/LICENSE>\n16. OpenAPI Initiative, *OpenAPI Specification v3.1.0* (2021-02-15) — <https://spec.openapis.org/oas/v3.1.0.html>\n17. IETF, *RFC 8615: Well-Known Uniform Resource Identifiers (URIs)* (IETF RFC) — <https://www.rfc-editor.org/rfc/rfc8615.html>\n18. Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation* (2026-07-28) — <https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning>\n19. Web Machine Learning Community Group (editors Brandon Walderman, Khushal Sagar, Dominic Farolino, and Samuel Dallstream), *WebMCP* (Draft Community Group Report, 11 November 2026) — <https://webmachinelearning.github.io/webmcp/>\n20. IETF Datatracker, *RFC 9727: api-catalog: A Well-Known URI and Link Relation to Help Discovery of APIs* (Proposed Standard (June 2025); last updated 2026-05-20) — <https://datatracker.ietf.org/doc/rfc9727/>\n21. Agentic Resource Discovery Project (ards-project), *Agentic Resource Discovery Specification v0.91* (2026-08-26; fetched 2026-10-30) — <https://agenticresourcediscovery.org/spec/>\n22. 2s, *2s.io agents.json live manifest* (checked 2026-10-30) — <https://2s.io/.well-known/agents.json>\n23. Wildcard AI, *agentsjson PyPI metadata* (checked 2026-03-01) — <https://pypi.org/pypi/agentsjson/json>\n",
   "superseded_by": null
  },
  {
   "acronym": "",
   "adoption": {
    "level": "observed",
    "by": "Lago (getlago.com), pg.ddx.io, General Informatics (www.general-informatics.com), DFX Intel (dfxintel.com), and agents.txt audit tool (mcp.agents-txt.com)",
    "probe_run": null
   },
   "aliases": [],
   "analog": "robots.txt, but declaring which agent protocols a site supports rather than which crawlers may visit",
   "collisions": [
    "Multiple unrelated, mutually incompatible specifications share the \"agents.txt\" name (see dispute): agents-txt.com's v1.0 protocol-declaration format, kaylacar/agents-txt's IETF-draft capability-declaration proposal, agentstxt.dev (a separate proposal whose IETF draft expired 2026-04-10), and the ad hoc allow/rate-limit format described in the arXiv paper 'Towards an Agent-First Web'"
   ],
   "discovery": {
    "mechanism": "Fixed filename at the site root",
    "path": "\"agents.txt MUST be served at <origin>/agents.txt. agents.json SHOULD be served at <origin>/agents.json.\""
   },
   "dispute": {
    "claims": [
     "agents-txt.com presents its v1.0 spec as authoritative and interoperable with A2A and RFC 9727",
     "kaylacar/agents-txt claims IANA filing and an active IETF Internet-Draft",
     "A Mastercard reference page independently reports the agentstxt.dev IETF draft as expired (2026-04-10) and describes 11+ competing proposals with no ratified standard",
     "An arXiv paper proposes yet another agents.txt grammar without referencing the others"
    ],
    "summary": "\"agents.txt\" names at least four non-converging, mutually incompatible proposals (agents-txt.com's v1.0, kaylacar/agents-txt's IETF-draft capability format, agentstxt.dev's expired-draft format, and an academic paper's own INI-style grammar), none of which has become a ratified or dominant standard."
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://agents-txt.com/spec/",
     "claim": "agents.txt Standard, *agents.txt Standard v1.0*, checked 2026-10-29",
     "date": null,
     "quote": "agents.txt MUST be served at /agents.txt. ... agents.json SHOULD be served at /agents.json. / agents.txt (with companion agents.json) is a lightweight, protocol-agnostic capability declaration format that publicly announces what agent-interaction protocols and features a website supports. ... A live reference deployment of this specification is available at https://agents-txt.com. / agents.txt MUST be served at /agents.txt. agents.json SHOULD be served at /agents.json. / Standard - v1.0 Status: Draft Version: 1.0 Authors: hsolosoftworks Maintainer: hsolosoftworks.com Contact: contact@agents-txt.com Published: 2025-10-13 / interaction capabilities 4. Discovery 4.1 Well-Known Paths agents.txt MUST be served at /agents.txt. agents.json / per RFC 8615 for no practical benefit, since agents.txt is an intentionally public artifact / Specification · agents.txt Standard / hsolosoftworks.com Contact: contact@agents-txt.com Published: 2025-10-13 Repository: agents-txt/agents-txt License: CC0 (spec), Apache 2.0 (reference implementation) / Standard - v1.0 Status: Draft Version: 1.0 Authors: hsolosoftworks Maintainer: hsolosoftworks.com Contact: contact@agents-txt.com Published: / A2A with multiple agents (non-canonical paths): # agents.txt # Standard: https://agents-txt.com A2A: https://example.com/.well-known/agent-card.json A2A: / serving them: agents.txt MUST be served with Content-Type: text/plain; charset=utf-8. agents.json MUST be served / for the spec’s GitHub-hosted editorial process. The live registry surface is maintained at https://agents-txt.com/registry / public, max-age=3600 /agents.json Static file _headers entry Content-Type: application/json Access-Control-Allow-Origin: * Cache-Control: public, max-age=3600 / A live reference deployment of this specification is available at https://agents-txt.com. ... agents.txt MUST be served at /agents.txt. ... agents.json SHOULD be served at /agents.json.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://www.ietf.org/archive/id/draft-car-agents-txt-wellknown-00.txt",
     "claim": "K. Cardillo, *AGENTS.TXT: Capability Declarations for Web Agents (draft-car-agents-txt-wellknown-00)*, 12 June 2026",
     "date": null,
     "quote": "The \"agents.txt\" file MUST be served at: https://example.com/.well-known/agents.txt / This document requests registration of two Well-Known URIs under the \"/.well-known/\" path: \"agents.txt\" and \"agents.json\". These URIs define a machine-readable capability declaration format: a positive statement of what web agents CAN do on a site / The \"agents.txt\" file MUST be served at: https://example.com/.well-known/agents.txt Agents SHOULD also check the root path as a fallback: https://example.com/agents.txt / Independent Submission K. Cardillo Internet-Draft Independent Intended status: Informational 12 June 2026 Expires: 14 December 2026 AGENTS.TXT: Capability Declarations for Web Agents draft-car-agents-txt-wellknown-00 / Spec-Version (REQUIRED): The specification version. MUST be \"1.0\" for documents conforming to this specification. / Intended status: Informational / These agents are routinely blocked by bot detection systems, CAPTCHAs, and rate limiters because no sanctioned channel for agent interaction exists. Simultaneously, website operators have no standard mechanism to declare which agent behaviors they support, which endpoints are designed for machine access, or how agents should authenticate. / It is an opt-in capability declaration file, served at a well-known location / which endpoints are sanctioned for agent use, which protocols (REST, MCP, A2A, GraphQL, WebSocket) are supported, what authentication mechanisms are expected, and what rate limits the site advertises. / Where \"robots.txt\" expresses prohibition, \"agents.txt\" expresses capability -- a sanctioned channel for agent interaction that is otherwise routinely blocked by bot detection, CAPTCHAs, and rate limiters because no positive declaration surface exists. / \"agents.txt\" is complementary to, and does not replace, existing standards: ... robots.txt: Declares crawling restrictions. ... llms.txt [LLMSTXT]: Provides human-readable content for LLMs to read. ... security.txt [RFC9116]: Declares security vulnerability disclosure contacts. ... OpenAPI: Documents individual API endpoints in detail. / draft-srijal-agents-policy-00 (expired) ... It expired April 2026 with no -01 revision. The present document differs in scope (capability declaration, not policy restriction) / Servers MUST enforce all declared restrictions (rate limits, access control, agent policies) independently of the declarations in \"agents.txt\". The file is advisory to agents; it is not a trust boundary.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://github.com/agents-txt/agents-txt",
     "claim": "GitHub REST API, *agents-txt/agents-txt repository record*, checked 2026-10-29",
     "date": null,
     "quote": "2026-05-13T02:40:24Z / agents.txt is a lightweight, machine-readable capability declaration layer for websites in the agentic web: a protocol-agnostic discovery file that publicly announces what agent-interaction capabilities a site supports, without embedding the implementation details of any specific protocol. / \"merges_url\": \"https://api.github.com/repos/agents-txt/agents-txt/merges\", \"archive_url\": \"https://api.github.com/repos/agents-txt/agents-txt/{archive_format}{/ref}\", \"downloads_url\":",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://github.com/agents-txt/agents-txt/commits",
     "claim": "GitHub REST API, *agents-txt/agents-txt commits*, checked 2026-10-29",
     "date": null,
     "quote": "\"date\": \"2026-05-10T23:10:28Z\" / \"comments_url\": \"https://api.github.com/repos/agents-txt/agents-txt/commits/644ed1542192b9c644d6b2317231f7a7119ebc08/comments\", \"author\": { \"login\": \"hsolosoftworks\", \"id\": 136315693, \"node_id\": / \"https://api.github.com/repos/agents-txt/agents-txt/commits/7892adb7c99fb29211913eb1f353c7686576eaa9\", \"html_url\": \"https://github.com/agents-txt/agents-txt/commit/7892adb7c99fb29211913eb1f353c7686576eaa9\" } ] / \"commit\": { \"author\": { \"name\": \"hsologarcia\", \"email\": \"[email redacted]\", \"date\": \"2026-05-23T04:24:56Z\" }, \"committer\": { \"name\":",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://agents-txt.com/about/",
     "claim": "agents.txt Standard, *About*, checked 2026-10-29",
     "date": null,
     "quote": "code license Apache 2.0 Governance RFC-style PR review on GitHub Source github.com/agents-txt/agents-txt What is / Open standard, CC0 spec, Apache 2.0 reference code. website https://agents-txt.com/about About · agents.txt Standard / spec · Apache 2.0 code Standard agents.txt v1.0 Specification license CC0 1.0 Universal (public / Validate the output with the live audit tool or the audit_site MCP tool at mcp.agents-txt.com.",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://www.ietf.org/archive/id/draft-srijal-agents-policy-00.txt",
     "claim": "S. Dutta, *AGENTS.TXT: Strict Policy File for Automated Clients (draft-srijal-agents-policy-00)*, checked 2026-10-29",
     "date": null,
     "quote": "the AGENTS.TXT protocol, a strict plaintext policy file Network Working Group S. Dutta Internet-Draft",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://agents-txt.com/agents.txt",
     "claim": "agents.txt Standard, *reference file /agents.txt on agents-txt.com*, checked 2026-10-29",
     "date": null,
     "quote": "UCP: https://agents-txt.com/.well-known/ucp WebMCP: https://agents-txt.com/demo/webmcp date: Fri, 30 Oct 2026 23:27:14 GMT content-type: text/plain; charset=utf-8 / # Standard: https://agents-txt.com / text/plain; charset=utf-8 content-length: 406 connection: close cf-cache-status: HIT access-control-allow-origin: * cache-control: public, max-age=3600 etag:",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://www.rfc-editor.org/rfc/rfc9309.html",
     "claim": "IETF, *RFC 9309: Robots Exclusion Protocol*, IETF RFC",
     "date": null,
     "quote": "<meta content=\"Common,Latin\" name=\"scripts\"> / This is an Internet Standards Track document.",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://www.sitemaps.org/protocol.html",
     "claim": "Sitemaps Protocol Consortium, *Sitemaps XML format 0.9*, 2008-02-27",
     "date": "2008-02-27",
     "quote": "This document describes the XML schema for the Sitemap protocol.",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://llmstxt.org",
     "claim": "Jeremy Howard, *The /llms.txt file, v2*, published 2024-09-03; modified 2026-08-10; HTTP last-modified 2026-09-24",
     "date": null,
     "quote": "This is v2 of the proposal … The llms.txt specification is open for community input. A GitHub repository hosts this informal overview",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Current : the current protocol version, which is ready for use and may continue to receive backwards compatible changes.",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://aaif.io/blog/a2a-joins-aaif",
     "claim": "Agentic AI Foundation, *A2A joins AAIF's open agentic stack*, published 2026-08-17; modified 2026-09-24",
     "date": null,
     "quote": "A2A v1.0, the first stable specification, shipped in March 2026.",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://www.linuxfoundation.org/press/linux-foundation-announces-operational-launch-of-x402-foundation-to-standardize-internet-native-payments-for-ai-agents-and-applications",
     "claim": "Linux Foundation, *Linux Foundation Announces Operational Launch of x402 Foundation to Standardize Internet-Native Payments for AI Agents and Applications*, July 14, 2026",
     "date": null,
     "quote": "SAN FRANCISCO, July 14, 2026 – The Linux Foundation , the nonprofit organization enabling mass innovation through open source, today announced the operational launch of the x402 Foundation",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://getlago.com/agents.txt",
     "claim": "Lago, */agents.txt on getlago.com*, checked 2026-10-29",
     "date": null,
     "quote": "# agents.txt # Standard: https://agents-txt.com # JSON: https://getlago.com/agents.json MCP: https://getlago.com/mcp MCP: https://getlago.com/docs/mcp # Both",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://pg.ddx.io/agents.txt",
     "claim": "DDX, */agents.txt on pg.ddx.io*, checked 2026-10-29",
     "date": null,
     "quote": "# agents.txt # Standard: https://agents-txt.com # JSON: https://pg.ddx.io/agents.json MCP: https://pg.ddx.io/mcp # --- Role skills",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://www.general-informatics.com/agents.txt",
     "claim": "General Informatics, */agents.txt on www.general-informatics.com*, checked 2026-10-29",
     "date": null,
     "quote": "# Standard: https://agents-txt.com # JSON: https://www.general-informatics.com/agents.json Skills: https://www.general-informatics.com/.well-known/agent-skills/general-informatics-portfolio/SKILL.md WebMCP:",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://dfxintel.com/agents.txt",
     "claim": "DFX Intel, */agents.txt on dfxintel.com*, checked 2026-10-29",
     "date": null,
     "quote": "# Standard: https://agents-txt.com # Evidence-backed private capital intelligence platform for AI agents, 135 MCP",
     "ref": 17
    }
   ],
   "form": "well-known-file",
   "governance": "Its maintainers on GitHub: \"The agents.txt working group on GitHub.\" \"Structural changes (new directives, schema fields, conformance shifts) require an RFC-style description in the pull request and two reviewer approvals.\". Not a standards body",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "new record added during read-step verification; reclassified to the discover step after finding the name covers multiple non-converging, competing specifications"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "agents-txt",
   "implementation": "prototype",
   "last_verified": "2026-11-12",
   "name": "agents.txt",
   "native_status": "`agents-txt.com`: `Status: Draft` (work in progress); Cardillo I-D: `draft-car-agents-txt-wellknown-00` (Informational Internet-Draft, 12 June 2026, expires 14 December 2026)",
   "origin": {
    "org": "hsolosoftworks",
    "date": "2026-05-10"
   },
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "idea",
   "probe": {
    "method": "GET",
    "on_absent": "No agents.txt at the site root under any of the competing conventions; given the fragmentation, absence is a weak signal either way",
    "parse": "200 response with a text/plain body listing supported protocols (e.g. `Protocols: x402, mpp`) or per-agent directives, per whichever competing grammar the site chose to implement",
    "path": "{origin}/agents.txt"
   },
   "question": "Which agent-facing protocols (payments, auth, MCP, skills, A2A) does this site speak, and where?",
   "scope": "general",
   "spec_url": "https://agents-txt.com/spec/",
   "step": "discover",
   "summary_md": "**agents.txt** (with companion `agents.json`) is a lightweight, protocol-agnostic capability declaration format at `https://agents-txt.com` that publicly announces what agent-interaction protocols and features a website supports; a separate IETF draft (`draft-car-agents-txt-wellknown-00`) requests registration of `agents.txt` and `agents.json` under `/.well-known/`. In the `agents.txt` Standard v1.0, `agents.txt` MUST be served at `/agents.txt` and `agents.json` SHOULD be served at `/agents.json`, whereas `draft-car-agents-txt-wellknown-00` serves `https://example.com/.well-known/agents.txt` with root fallback `https://example.com/agents.txt`. In the `https://agents-txt.com` Standard `v1.0` (`Status: Draft`), the specification header prints a backdated `Published: 2025-10-13` date that predates the `agents-txt/agents-txt` GitHub repository (`2026-05-13`, first commit `2026-05-10`); separately, Kayla Cardillo's `draft-car-agents-txt-wellknown-00` (Independent Submission) is an Informational Internet-Draft dated 12 June 2026 and expiring 14 December 2026. In `draft-car-agents-txt-wellknown-00`, `Spec-Version` is REQUIRED and MUST be `1.0` for conforming documents.",
   "track": "community",
   "version": {
    "label": "1.0",
    "date": "2026-05-10"
   },
   "watch": [
    {
     "type": "page",
     "url": "https://agents-txt.com/spec",
     "selector": "main",
     "cadence": "weekly"
    }
   ],
   "use_cases": [
    "discover-my-api",
    "describe-agent-capabilities"
   ],
   "audience": [
    "site-owner",
    "agent-builder",
    "standards-body"
   ],
   "pairs_with": [
    "llms-txt",
    "ai-crawler-tokens-robots",
    "mcp",
    "a2a",
    "x402"
   ],
   "prerequisites": [],
   "hatnote_md": "This page covers two capability-declaration specifications named `agents.txt`: (1) the `agents.txt` Standard at `agents-txt.com` (`/agents.txt` with companion `/agents.json`) and (2) Kayla Cardillo's IETF Internet-Draft `draft-car-agents-txt-wellknown-00` (`/.well-known/agents.txt`). It is distinct from [AGENTS.md](/protocols/agents-md/) repository coding instructions, [llms.txt](/protocols/llms-txt/) Markdown briefings, [AI crawler tokens in robots.txt](/protocols/ai-crawler-tokens-robots/), [ai.txt](/protocols/ai-txt/) usage policies, and five unrelated historical `agents.txt` proposals noted under Version.",
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "web_discovery",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "This page covers two capability-declaration specifications named `agents.txt`: (1) the `agents.txt` Standard at `agents-txt.com` (`/agents.txt` with companion `/agents.json`) and (2) Kayla Cardillo's IETF Internet-Draft `draft-car-agents-txt-wellknown-00` (`/.well-known/agents.txt`). It is distinct from [AGENTS.md](/protocols/agents-md/) repository coding instructions, [llms.txt](/protocols/llms-txt/) Markdown briefings, [AI crawler tokens in robots.txt](/protocols/ai-crawler-tokens-robots/), [ai.txt](/protocols/ai-txt/) usage policies, and five unrelated historical `agents.txt` proposals noted under Version. [1][2]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**agents.txt** (with companion `agents.json`) is a lightweight, protocol-agnostic capability declaration format at `https://agents-txt.com` that publicly announces what agent-interaction protocols and features a website supports; a separate IETF draft (`draft-car-agents-txt-wellknown-00`) requests registration of `agents.txt` and `agents.json` under `/.well-known/`. [1][2] In the `agents.txt` Standard v1.0, `agents.txt` MUST be served at `/agents.txt` and `agents.json` SHOULD be served at `/agents.json`, whereas `draft-car-agents-txt-wellknown-00` serves `https://example.com/.well-known/agents.txt` with root fallback `https://example.com/agents.txt`. [1][2] In the `https://agents-txt.com` Standard `v1.0` (`Status: Draft`), the specification header prints a backdated `Published: 2025-10-13` date that predates the `agents-txt/agents-txt` GitHub repository (`2026-05-13`, first commit `2026-05-10`); separately, Kayla Cardillo's `draft-car-agents-txt-wellknown-00` (Independent Submission) is an Informational Internet-Draft dated 12 June 2026 and expiring 14 December 2026. [1][2][3][4] In `draft-car-agents-txt-wellknown-00`, `Spec-Version` is REQUIRED and MUST be `1.0` for conforming documents. [2]",
   "v05_identity_sentence_md": "**agents.txt** (with companion `agents.json`) is a lightweight, protocol-agnostic capability declaration format at `https://agents-txt.com` that publicly announces what agent-interaction protocols and features a website supports; a separate IETF draft (`draft-car-agents-txt-wellknown-00`) requests registration of `agents.txt` and `agents.json` under `/.well-known/`. [1][2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Discover](/category/discover/) (`discover`)"
    },
    {
     "label": "Form",
     "value_md": "Well-known file (`well-known-file`)"
    },
    {
     "label": "Originated by",
     "value_md": "`hsolosoftworks` (`agents-txt/agents-txt`); separate `/.well-known/agents.txt` I-D by Kayla Cardillo (`draft-car-agents-txt-wellknown-00`) [1][3][4]"
    },
    {
     "label": "Governed by",
     "value_md": "`agents.txt` working group on GitHub via RFC-style PR review; separate individual IETF I-Ds in Datatracker [1][5][6]"
    },
    {
     "label": "Track",
     "value_md": "Community draft standard (`agents-txt.com` v1.0 Draft) and individual IETF Internet-Drafts (Informational) [1][2][6]"
    },
    {
     "label": "Status",
     "value_md": "`agents-txt.com`: `Status: Draft` (work in progress and subject to change); Cardillo I-D: `draft-car-agents-txt-wellknown-00` (Informational Internet-Draft, expires 14 December 2026) [1][3][4]"
    },
    {
     "label": "Version",
     "value_md": "`agents-txt.com` `v1.0` (`Status: Draft`; spec header prints backdated `Published: 2025-10-13`, whereas `agents-txt/agents-txt` repo was created `2026-05-13`); Cardillo I-D `draft-car-agents-txt-wellknown-00` (`Spec-Version: 1.0`, `2026-06-12`). Unrelated collisions sharing the filename: (a) Dennj Osele's `agentstxt.dev` `v0.0.2 alpha` (`2025-02-15`), (b) Srijal Dutta's expired `draft-srijal-agents-policy-00` (`2025-10-07`), (c) Jasper van Veen's `agents.txt` (`2026-03`, renamed `agent-manifest.txt`), (d) AsturWebs `agents.txt` `v2.0`, and (e) Bandara et al. (`2026-06-17`, `/.well-known/agents.txt` access policy). [1][3][4]"
    },
    {
     "label": "Wire format",
     "value_md": "UTF-8 plain text (`text/plain; charset=utf-8`) paired with JSON Schema 2020-12 `/agents.json` (`application/json`) [1][7]"
    },
    {
     "label": "Specification",
     "value_md": "[Spec v1.0](https://agents-txt.com/spec/) · [About](https://agents-txt.com/about/) · [Reference File](https://agents-txt.com/agents.txt) · [GitHub Repo](https://github.com/agents-txt/agents-txt) · [Cardillo I-D](https://www.ietf.org/archive/id/draft-car-agents-txt-wellknown-00.txt) [1][5][7]"
    },
    {
     "label": "Found at",
     "value_md": "`agents-txt.com` Standard: `GET <origin>/agents.json` first (`SHOULD`), fallback `GET <origin>/agents.txt` (`MUST`), `# JSON:` comment, `Allow: /agents.txt` in `robots.txt` (`Access-Control-Allow-Origin: *` `MUST`, `Cache-Control: public, max-age=3600` `SHOULD`); Cardillo I-D: `GET https://example.com/.well-known/agents.txt` (with `/agents.txt` fallback) and `GET https://example.com/.well-known/agents.json` [1][7]"
    },
    {
     "label": "Licence",
     "value_md": "CC0 1.0 Universal (spec) and Apache-2.0 (code and `@agentstxtdev/herald` CLI) [1][5]"
    }
   ],
   "v05_problem_md": "Automated AI agents are routinely blocked by bot detection systems, CAPTCHAs, and rate limiters because no sanctioned channel for agent interaction exists, leaving operators without a standard way to declare supported agent endpoints or authentication. [2] The `agents.txt` Standard (`https://agents-txt.com`) publishes `/agents.txt` and `/agents.json` at the origin root, while `draft-car-agents-txt-wellknown-00` defines an opt-in capability declaration file at `/.well-known/agents.txt`. [1][2] In `draft-car-agents-txt-wellknown-00`, the declaration states which endpoints are sanctioned for agent use, which protocols (`REST`, `MCP`, `A2A`, `GraphQL`, `WebSocket`) are supported, what authentication mechanisms are expected, and what rate limits the site advertises. [2] Where `robots.txt` expresses prohibition, `agents.txt` expresses capability: a sanctioned channel for agent interaction that is otherwise routinely blocked because no positive declaration surface exists. [2] `agents.txt` is complementary to, and does not replace, existing standards, including `robots.txt`, `llms.txt`, `security.txt`, and OpenAPI. [2] An earlier policy proposal, `draft-srijal-agents-policy-00`, expired April 2026 with no `-01` revision; `draft-car-agents-txt-wellknown-00` differs in scope by declaring capabilities rather than policy restrictions. [2] Servers MUST enforce all declared restrictions (rate limits, access control, agent policies) independently of the declarations in `agents.txt`. The file is advisory to agents; it is not a trust boundary. [2]",
   "v05_mechanism_delta_md": "The `agents.txt` Standard (`https://agents-txt.com`) publishes `/agents.txt` and `/agents.json` at the origin root, while `draft-car-agents-txt-wellknown-00` defines an opt-in capability declaration file at `/.well-known/agents.txt`. [1][2] In `draft-car-agents-txt-wellknown-00`, the declaration states which endpoints are sanctioned for agent use, which protocols (`REST`, `MCP`, `A2A`, `GraphQL`, `WebSocket`) are supported, what authentication mechanisms are expected, and what rate limits the site advertises. [2] Where `robots.txt` expresses prohibition, `agents.txt` expresses capability: a sanctioned channel for agent interaction that is otherwise routinely blocked because no positive declaration surface exists. [2]",
   "v05_scope_boundary_md": "`agents.txt` is complementary to, and does not replace, existing standards, including `robots.txt`, `llms.txt`, `security.txt`, and OpenAPI. [2] An earlier policy proposal, `draft-srijal-agents-policy-00`, expired April 2026 with no `-01` revision; `draft-car-agents-txt-wellknown-00` differs in scope by declaring capabilities rather than policy restrictions. [2] Servers MUST enforce all declared restrictions (rate limits, access control, agent policies) independently of the declarations in `agents.txt`. The file is advisory to agents; it is not a trust boundary. [2]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "robots.txt (RFC 9309)",
      "spec_or_rfc": "RFC 9309",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "agents.txt must be served at /agents.txt and announces protocol locations such as MCP servers, A2A Agent Cards, and x402, with agents.json recommended at /agents.json, whereas RFC 9309's /robots.txt uses User-agent, Allow, and Disallow. [1][8]"
     },
     {
      "name": "Sitemaps XML (sitemaps.org)",
      "spec_or_rfc": "Sitemaps 0.9",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "agents.txt declares which agent protocols an origin supports, including MCP, A2A, and x402, whereas a sitemaps.org sitemap is an XML urlset of page URLs and has no protocol-support declaration. [1][9]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "llms-txt",
      "target_name": "llms.txt",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "agents.txt names protocol support at /agents.txt, including MCP, A2A, and x402, while llms.txt is the Markdown file at /llms.txt or a subpath with a required H1 and H2 link sections. [1][10]"
     },
     {
      "target_id": "ai-crawler-tokens-robots",
      "target_name": "AI crawler tokens in robots.txt",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "agents.txt announces capabilities, while AI crawler tokens in /robots.txt only match a product token to crawl Allow and Disallow rules. [1][8]"
     },
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "agents.txt can point at an MCP server among the protocols an origin supports, while MCP is the endpoint protocol and is not defined by agents.txt. [1][11]"
     },
     {
      "target_id": "a2a",
      "target_name": "Agent2Agent Protocol (A2A)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "agents.txt can point at an A2A Agent Card among the protocols an origin supports, while A2A is the agent-to-agent protocol and is not defined by agents.txt. [1][12]"
     },
     {
      "target_id": "x402",
      "target_name": "x402",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "agents.txt can name x402 among the payment protocols an origin supports, while x402 is an HTTP-header payment protocol and is not defined by agents.txt. [1][13]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (5 probed or cited examples; non-exhaustive).",
    "side_a": {
     "visible": true,
     "heading": "Who publishes or hosts it",
     "col4_header": "Behavior / Provisioning",
     "note_md": null,
     "rows": [
      {
       "actor": "Lago (getlago.com)",
       "role": "Publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-29",
       "col4_md": "Serves `/agents.txt` (fetched 2026-10-29) opening with `# Standard: https://agents-txt.com`, declaring an agents.json companion, MCP servers, a Skills file, and WebMCP",
       "source_md": "[getlago.com/agents.txt (checked 2026-10-29)](https://getlago.com/agents.txt) [14]"
      },
      {
       "actor": "pg.ddx.io",
       "role": "Publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-29",
       "col4_md": "Serves `/agents.txt` (fetched 2026-10-29) opening with `# Standard: https://agents-txt.com`, declaring an MCP server and a list of Skills files",
       "source_md": "[pg.ddx.io/agents.txt (checked 2026-10-29)](https://pg.ddx.io/agents.txt) [15]"
      },
      {
       "actor": "General Informatics (www.general-informatics.com)",
       "role": "Publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-29",
       "col4_md": "Serves `/agents.txt` (fetched 2026-10-29) opening with `# Standard: https://agents-txt.com`, declaring a Skills file, WebMCP, and an MCP page",
       "source_md": "[www.general-informatics.com/agents.txt (checked 2026-10-29)](https://www.general-informatics.com/agents.txt) [16]"
      },
      {
       "actor": "DFX Intel (dfxintel.com)",
       "role": "Publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-29",
       "col4_md": "Serves `/agents.txt` (fetched 2026-10-29) opening with `# Standard: https://agents-txt.com`, declaring MCP servers and an A2A AgentCard",
       "source_md": "[dfxintel.com/agents.txt (checked 2026-10-29)](https://dfxintel.com/agents.txt) [17]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Bot, client & tool support",
     "col4_header": "Behavior / Provisioning",
     "note_md": null,
     "rows": [
      {
       "actor": "agents.txt audit tool (mcp.agents-txt.com)",
       "role": "CLI / Validator",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Live audit tool and the `audit_site` MCP tool at mcp.agents-txt.com validate an agents.txt file against the draft",
       "source_md": "[agents.txt About (checked 2026-10-29)](https://agents-txt.com/about/) [5]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Discover protocols](/category/discover/)** — Category index for `discover` standards."
    }
   ],
   "v05_compiled_md": "---\nid: agents-txt\ntitle: \"agents.txt\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: discover\nform: well-known-file\nwire_archetype: web_discovery\nspec_url: https://agents-txt.com/spec/\nlast_checked: 2026-11-12\n---\n\n# agents.txt\n\n**Category:** [Discover](/category/discover/) (`discover`) · **Form:** Well-known file (`well-known-file`) · **Last checked:** 2026-11-12\n\n> *This page covers two capability-declaration specifications named `agents.txt`: (1) the `agents.txt` Standard at `agents-txt.com` (`/agents.txt` with companion `/agents.json`) and (2) Kayla Cardillo's IETF Internet-Draft `draft-car-agents-txt-wellknown-00` (`/.well-known/agents.txt`). It is distinct from [AGENTS.md](/protocols/agents-md/) repository coding instructions, [llms.txt](/protocols/llms-txt/) Markdown briefings, [AI crawler tokens in robots.txt](/protocols/ai-crawler-tokens-robots/), [ai.txt](/protocols/ai-txt/) usage policies, and five unrelated historical `agents.txt` proposals noted under Version. [1][2]*\n\n**agents.txt** (with companion `agents.json`) is a lightweight, protocol-agnostic capability declaration format at `https://agents-txt.com` that publicly announces what agent-interaction protocols and features a website supports; a separate IETF draft (`draft-car-agents-txt-wellknown-00`) requests registration of `agents.txt` and `agents.json` under `/.well-known/`. [1][2] In the `agents.txt` Standard v1.0, `agents.txt` MUST be served at `/agents.txt` and `agents.json` SHOULD be served at `/agents.json`, whereas `draft-car-agents-txt-wellknown-00` serves `https://example.com/.well-known/agents.txt` with root fallback `https://example.com/agents.txt`. [1][2] In the `https://agents-txt.com` Standard `v1.0` (`Status: Draft`), the specification header prints a backdated `Published: 2025-10-13` date that predates the `agents-txt/agents-txt` GitHub repository (`2026-05-13`, first commit `2026-05-10`); separately, Kayla Cardillo's `draft-car-agents-txt-wellknown-00` (Independent Submission) is an Informational Internet-Draft dated 12 June 2026 and expiring 14 December 2026. [1][2][3][4] In `draft-car-agents-txt-wellknown-00`, `Spec-Version` is REQUIRED and MUST be `1.0` for conforming documents. [2]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Discover](/category/discover/) (`discover`) |\n| **Form** | Well-known file (`well-known-file`) |\n| **Originated by** | `hsolosoftworks` (`agents-txt/agents-txt`); separate `/.well-known/agents.txt` I-D by Kayla Cardillo (`draft-car-agents-txt-wellknown-00`) [1][3][4] |\n| **Governed by** | `agents.txt` working group on GitHub via RFC-style PR review; separate individual IETF I-Ds in Datatracker [1][5][6] |\n| **Track** | Community draft standard (`agents-txt.com` v1.0 Draft) and individual IETF Internet-Drafts (Informational) [1][2][6] |\n| **Status** | `agents-txt.com`: `Status: Draft` (work in progress and subject to change); Cardillo I-D: `draft-car-agents-txt-wellknown-00` (Informational Internet-Draft, expires 14 December 2026) [1][3][4] |\n| **Version** | `agents-txt.com` `v1.0` (`Status: Draft`; spec header prints backdated `Published: 2025-10-13`, whereas `agents-txt/agents-txt` repo was created `2026-05-13`); Cardillo I-D `draft-car-agents-txt-wellknown-00` (`Spec-Version: 1.0`, `2026-06-12`). Unrelated collisions sharing the filename: (a) Dennj Osele's `agentstxt.dev` `v0.0.2 alpha` (`2025-02-15`), (b) Srijal Dutta's expired `draft-srijal-agents-policy-00` (`2025-10-07`), (c) Jasper van Veen's `agents.txt` (`2026-03`, renamed `agent-manifest.txt`), (d) AsturWebs `agents.txt` `v2.0`, and (e) Bandara et al. (`2026-06-17`, `/.well-known/agents.txt` access policy). [1][3][4] |\n| **Wire format** | UTF-8 plain text (`text/plain; charset=utf-8`) paired with JSON Schema 2020-12 `/agents.json` (`application/json`) [1][7] |\n| **Specification** | [Spec v1.0](https://agents-txt.com/spec/) · [About](https://agents-txt.com/about/) · [Reference File](https://agents-txt.com/agents.txt) · [GitHub Repo](https://github.com/agents-txt/agents-txt) · [Cardillo I-D](https://www.ietf.org/archive/id/draft-car-agents-txt-wellknown-00.txt) [1][5][7] |\n| **Found at** | `agents-txt.com` Standard: `GET <origin>/agents.json` first (`SHOULD`), fallback `GET <origin>/agents.txt` (`MUST`), `# JSON:` comment, `Allow: /agents.txt` in `robots.txt` (`Access-Control-Allow-Origin: *` `MUST`, `Cache-Control: public, max-age=3600` `SHOULD`); Cardillo I-D: `GET https://example.com/.well-known/agents.txt` (with `/agents.txt` fallback) and `GET https://example.com/.well-known/agents.json` [1][7] |\n| **Licence** | CC0 1.0 Universal (spec) and Apache-2.0 (code and `@agentstxtdev/herald` CLI) [1][5] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [Adoption and ecosystem](#adoption-and-ecosystem)\n4. [See also](#see-also)\n5. [References](#references)\n\n---\n\n## Problem and scope\n\nAutomated AI agents are routinely blocked by bot detection systems, CAPTCHAs, and rate limiters because no sanctioned channel for agent interaction exists, leaving operators without a standard way to declare supported agent endpoints or authentication. [2] The `agents.txt` Standard (`https://agents-txt.com`) publishes `/agents.txt` and `/agents.json` at the origin root, while `draft-car-agents-txt-wellknown-00` defines an opt-in capability declaration file at `/.well-known/agents.txt`. [1][2] In `draft-car-agents-txt-wellknown-00`, the declaration states which endpoints are sanctioned for agent use, which protocols (`REST`, `MCP`, `A2A`, `GraphQL`, `WebSocket`) are supported, what authentication mechanisms are expected, and what rate limits the site advertises. [2] Where `robots.txt` expresses prohibition, `agents.txt` expresses capability: a sanctioned channel for agent interaction that is otherwise routinely blocked because no positive declaration surface exists. [2] `agents.txt` is complementary to, and does not replace, existing standards, including `robots.txt`, `llms.txt`, `security.txt`, and OpenAPI. [2] An earlier policy proposal, `draft-srijal-agents-policy-00`, expired April 2026 with no `-01` revision; `draft-car-agents-txt-wellknown-00` differs in scope by declaring capabilities rather than policy restrictions. [2] Servers MUST enforce all declared restrictions (rate limits, access control, agent policies) independently of the declarations in `agents.txt`. The file is advisory to agents; it is not a trust boundary. [2]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **robots.txt (RFC 9309)** | `RFC 9309` | Analogous to classic standard | agents.txt must be served at /agents.txt and announces protocol locations such as MCP servers, A2A Agent Cards, and x402, with agents.json recommended at /agents.json, whereas RFC 9309's /robots.txt uses User-agent, Allow, and Disallow. [1][8] |\n| **Sitemaps XML (sitemaps.org)** | `Sitemaps 0.9` | Analogous to classic standard | agents.txt declares which agent protocols an origin supports, including MCP, A2A, and x402, whereas a sitemaps.org sitemap is an XML urlset of page URLs and has no protocol-support declaration. [1][9] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[llms.txt](/protocols/llms-txt/)** | Complements | agents.txt names protocol support at /agents.txt, including MCP, A2A, and x402, while llms.txt is the Markdown file at /llms.txt or a subpath with a required H1 and H2 link sections. [1][10] |\n| **[AI crawler tokens in robots.txt](/protocols/ai-crawler-tokens-robots/)** | Complements | agents.txt announces capabilities, while AI crawler tokens in /robots.txt only match a product token to crawl Allow and Disallow rules. [1][8] |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | agents.txt can point at an MCP server among the protocols an origin supports, while MCP is the endpoint protocol and is not defined by agents.txt. [1][11] |\n| **[Agent2Agent Protocol (A2A)](/protocols/a2a/)** | Complements | agents.txt can point at an A2A Agent Card among the protocols an origin supports, while A2A is the agent-to-agent protocol and is not defined by agents.txt. [1][12] |\n| **[x402](/protocols/x402/)** | Complements | agents.txt can name x402 among the payment protocols an origin supports, while x402 is an HTTP-header payment protocol and is not defined by agents.txt. [1][13] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (5 probed or cited examples; non-exhaustive).*\n\n### Who publishes or hosts it\n\n| Actor | Role | Status | Behavior / Provisioning | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Lago (getlago.com)** | Publisher | Live (HTTP 200) · checked 2026-10-29 | Serves `/agents.txt` (fetched 2026-10-29) opening with `# Standard: https://agents-txt.com`, declaring an agents.json companion, MCP servers, a Skills file, and WebMCP | [getlago.com/agents.txt (checked 2026-10-29)](https://getlago.com/agents.txt) [14] |\n| **pg.ddx.io** | Publisher | Live (HTTP 200) · checked 2026-10-29 | Serves `/agents.txt` (fetched 2026-10-29) opening with `# Standard: https://agents-txt.com`, declaring an MCP server and a list of Skills files | [pg.ddx.io/agents.txt (checked 2026-10-29)](https://pg.ddx.io/agents.txt) [15] |\n| **General Informatics (www.general-informatics.com)** | Publisher | Live (HTTP 200) · checked 2026-10-29 | Serves `/agents.txt` (fetched 2026-10-29) opening with `# Standard: https://agents-txt.com`, declaring a Skills file, WebMCP, and an MCP page | [www.general-informatics.com/agents.txt (checked 2026-10-29)](https://www.general-informatics.com/agents.txt) [16] |\n| **DFX Intel (dfxintel.com)** | Publisher | Live (HTTP 200) · checked 2026-10-29 | Serves `/agents.txt` (fetched 2026-10-29) opening with `# Standard: https://agents-txt.com`, declaring MCP servers and an A2A AgentCard | [dfxintel.com/agents.txt (checked 2026-10-29)](https://dfxintel.com/agents.txt) [17] |\n\n### Bot, client & tool support\n\n| Actor | Role | Status | Behavior / Provisioning | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **agents.txt audit tool (mcp.agents-txt.com)** | CLI / Validator | Supported · checked 2026-10-30 | Live audit tool and the `audit_site` MCP tool at mcp.agents-txt.com validate an agents.txt file against the draft | [agents.txt About (checked 2026-10-29)](https://agents-txt.com/about/) [5] |\n\n---\n\n## See also\n\n- **Category:** [Discover protocols](/category/discover/)\n\n---\n\n## References\n\n1. agents.txt Standard, *agents.txt Standard v1.0* (checked 2026-10-29) — <https://agents-txt.com/spec/>\n2. K. Cardillo, *AGENTS.TXT: Capability Declarations for Web Agents (draft-car-agents-txt-wellknown-00)* (12 June 2026) — <https://www.ietf.org/archive/id/draft-car-agents-txt-wellknown-00.txt>\n3. GitHub REST API, *agents-txt/agents-txt repository record* (checked 2026-10-29) — <https://github.com/agents-txt/agents-txt>\n4. GitHub REST API, *agents-txt/agents-txt commits* (checked 2026-10-29) — <https://github.com/agents-txt/agents-txt/commits>\n5. agents.txt Standard, *About* (checked 2026-10-29) — <https://agents-txt.com/about/>\n6. S. Dutta, *AGENTS.TXT: Strict Policy File for Automated Clients (draft-srijal-agents-policy-00)* (checked 2026-10-29) — <https://www.ietf.org/archive/id/draft-srijal-agents-policy-00.txt>\n7. agents.txt Standard, *reference file /agents.txt on agents-txt.com* (checked 2026-10-29) — <https://agents-txt.com/agents.txt>\n8. IETF, *RFC 9309: Robots Exclusion Protocol* (IETF RFC) — <https://www.rfc-editor.org/rfc/rfc9309.html>\n9. Sitemaps Protocol Consortium, *Sitemaps XML format 0.9* (2008-02-27) — <https://www.sitemaps.org/protocol.html>\n10. Jeremy Howard, *The /llms.txt file, v2* (published 2024-09-03; modified 2026-08-10; HTTP last-modified 2026-09-24) — <https://llmstxt.org>\n11. Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation* (2026-07-28) — <https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning>\n12. Agentic AI Foundation, *A2A joins AAIF's open agentic stack* (published 2026-08-17; modified 2026-09-24) — <https://aaif.io/blog/a2a-joins-aaif>\n13. Linux Foundation, *Linux Foundation Announces Operational Launch of x402 Foundation to Standardize Internet-Native Payments for AI Agents and Applications* (July 14, 2026) — <https://www.linuxfoundation.org/press/linux-foundation-announces-operational-launch-of-x402-foundation-to-standardize-internet-native-payments-for-ai-agents-and-applications>\n14. Lago, */agents.txt on getlago.com* (checked 2026-10-29) — <https://getlago.com/agents.txt>\n15. DDX, */agents.txt on pg.ddx.io* (checked 2026-10-29) — <https://pg.ddx.io/agents.txt>\n16. General Informatics, */agents.txt on www.general-informatics.com* (checked 2026-10-29) — <https://www.general-informatics.com/agents.txt>\n17. DFX Intel, */agents.txt on dfxintel.com* (checked 2026-10-29) — <https://dfxintel.com/agents.txt>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "",
   "hatnote_md": "This page is about `ai.txt` as an AI usage-permission and training opt-out file: first Spawning Inc.'s root-level `/ai.txt` file (30 May 2023), which borrows `robots.txt` syntax (`User-agent: *` with `Allow:` and `Disallow:` rules over file extensions) to express commercial text-and-data-mining permissions, and second Kayla Cardillo's individual IETF Internet-Draft `draft-car-ai-txt-wellknown-00` (12 June 2026; GitHub repository `kaylacar/ai-txt` created 22 February 2026), which proposes `/.well-known/ai.txt` and `/.well-known/ai.json` for `Training`, `Scraping`, `Indexing`, `Caching`, licensing, attribution and per-agent rules and explicitly \"positions itself as a successor declaration surface rather than a competing one\" to Spawning's 2023 file. Three other unrelated proposals share the `ai.txt` filename: (a) `menro/ai.txt` (18 May 2023), an unmaintained GitHub sketch for an LLM content feed (`\"In essence, AI.txt is more akin to RSS feeds than robots.txt.\"`); (b) the May 2025 academic paper *ai.txt: A Domain-Specific Language for Guiding AI Interactions with the Internet* (Li et al., `arXiv:2505.07834`, 2 May 2025), which defines an element-level DSL at `/ai.txt` (`Disallow: Return`, `Disallow: Train`) with natural-language instructions and XML compilation; and (c) `aitxt.ing` (January 2026), a cascading Markdown context file for describing resources so AI assistants `\"stop hallucinating\"`, which states: `\"That specification is about context and boundaries in prose. It makes no claim on the permission-signalling space.\"`. It is not [AI crawler tokens in robots.txt](/protocols/ai-crawler-tokens-robots/), the vendor user-agent tokens (`GPTBot`, `ClaudeBot`, `Google-Extended`) used inside `robots.txt`; it is not W3C [TDMRep](/protocols/tdmrep/) (`/.well-known/tdmrep.json`), the IETF AIPREF specifications ([AIPREF Vocabulary](/protocols/aipref-vocabulary/), [AIPREF Content-Usage Attachment](/protocols/aipref-content-usage-attachment/)), Cloudflare's [Content Signals Policy](/protocols/cloudflare-content-signals-policy/), or [Really Simple Licensing (RSL)](/protocols/rsl/); and it is not [llms.txt](/protocols/llms-txt/) or [agents.txt](/protocols/agents-txt/).",
   "adoption": {
    "level": "observed",
    "by": "WordPress Openverse API, Republik, MLTSHP, makigas, thayn.me, Spawning API, @ai-txt/core, and Spawning WordPress plugin",
    "probe_run": null
   },
   "aliases": [
    "ai.json"
   ],
   "analog": "robots.txt, extended from crawl permission to media-type or policy-level AI training permissions",
   "collisions": [],
   "discovery": {
    "mechanism": "Root /ai.txt (Spawning 2023) or /.well-known/ai.txt and /.well-known/ai.json (Cardillo 2026)",
    "path": "/ai.txt or /.well-known/ai.txt"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://github.com/kaylacar/ai-txt/blob/master/ietf/draft-car-ai-txt-wellknown-00.md",
     "claim": "Kayla Cardillo, *draft-car-ai-txt-wellknown-00*, fetched 2026-10-30",
     "date": null,
     "quote": "Spawning ai.txt (2023) {{SPAWNING-AITXT}}: : An earlier file at \"/ai.txt\" published by Spawning Inc. for text-and-data-mining opt-out, scoped narrowly to TDM permission per file pattern. The format defined in this document is a strict superset, covering training, scraping, indexing, caching, per-agent rules, licensing, and attribution. The present document acknowledges Spawning's prior use of the name and positions itself as a successor declaration surface rather than a competing one. / summary_large_image ai-txt/ietf/draft-car-ai-txt-wellknown-00.md at master · kaylacar/ai-txt ai.txt - open standard proposal for declaring a / Usage Preferences, Licensing, and Policy\\\"\\nabbrev: ai-txt\\ndocname: draft-car-ai-txt-wellknown-00\\ndate: 2026-06-12\\ncategory: info\\nipr: trust200902\\narea: Applications and Real-Time\\nworkgroup: Independent / ai-txt/ietf/draft-car-ai-txt-wellknown-00.md at master / at master · kaylacar/ai-txt https://github.com/kaylacar/ai-txt/blob/master/ietf/draft-car-ai-txt-wellknown-00.md ai.txt - open standard proposal for declaring a website's / \\\"ai.txt\\\" file MAY reference the JSON file via:\",\"\",\"~~~\",\"AI-JSON: https://example.com/.well-known/ai.json\",\"~~~\",\"\",\"A minimal \\\"ai.json\\\" document:\",\"\",\"~~~ json\",\"{\",\" \\\"specVersion\\\":",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://www.ietf.org/archive/id/draft-car-ai-txt-wellknown-00.txt",
     "claim": "Kayla Cardillo, *(draft-car-ai-txt-wellknown-00)*, checked 2026-11-07",
     "date": null,
     "quote": "An earlier file at\n      \"/ai.txt\" published by Spawning Inc. for text-and-data-mining opt-\n      out, scoped narrowly to TDM permission per file pattern. / This document requests registration of two Well-Known URIs under the\n   \"/.well-known/\" path: \"ai.txt\" and \"ai.json\".  These URIs define a\n   structured, machine-readable file in which a site operator can\n   declare AI usage preferences (training, scraping, indexing, caching),\n   licensing terms, required attribution, and per-agent rules. / The \"ai.txt\" file MUST be served at:\n\n   https://example.com/.well-known/ai.txt / The file MUST be served with Content-Type \"text/plain; charset=utf-\n   8\". / 12 June 2026\nExpires: 14 December 2026 / This Internet-Draft will expire on 14 December 2026. / format defined in this document is a strict superset, covering\n      training, scraping, indexing, caching, per-agent rules, licensing,\n      and attribution. / The present document acknowledges Spawning's\n      prior use of the name and positions itself as a successor\n      declaration surface rather than a competing one. / Intended status: Informational / Where\n   \"robots.txt\" can block crawling entirely, \"ai.txt\" expresses nuanced\n   policies such as \"you may crawl but not train on this content\" -- a\n   distinction that \"robots.txt\" alone cannot express. / Training (OPTIONAL, default \"deny\"):  Whether AI systems may use\n      content for model training.\n\n   Scraping (OPTIONAL, default \"allow\"):  Whether AI agents may scrape\n      or read content. / Indexing (OPTIONAL, default \"allow\"):  Whether AI systems may index\n      content for retrieval.\n\n   Caching (OPTIONAL, default \"allow\"):  Whether AI systems may cache / \"ai.txt\" is advisory.  It declares the site owner's policy.\n   Compliance is expected in good faith but is not enforced by the file / Servers MUST enforce rate limits and access control independently of\n   the declarations in \"ai.txt\". / This document requests registration of two Well-Known URIs under the\n   \"/.well-known/\" path: \"ai.txt\" and \"ai.json\".",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://spawning.substack.com/p/aitxt-a-new-way-for-websites-to-set",
     "claim": "Spawning, *ai.txt: A new way for websites to set permissions for AI*, published 2023-05-30",
     "date": null,
     "quote": "Ai.txt is a file placed at the root of a website, which selectively restricts or permits access to the site's content and media-mirroring the widely adopted robots.txt standard. Unlike robots.txt, which is commonly read when a website is crawled, ai.txt is read when a site's media is downloaded. / user-scalable=0, viewport-fit=cover Cullen Miller https://spawning.substack.com/p/aitxt-a-new-way-for-websites-to-set ai.txt: A new way for websites to set permissions / Subscribe © 2026 Spawning Inc · Privacy ∙ Terms ∙ Collection notice Start your / Cullen Miller https://spawning.substack.com/p/aitxt-a- / set permissions for AI\",\"item\":\"https://spawning.substack.com/p/aitxt-a-new-way-for-websites-to-set\"}]} ai.txt: A new way for websites to set permissions for / cost of control and protection of your creations. \\u003ca href=\\\"https://site.spawning.ai/spawning-ai-txt\\\">Configure your website's ai.txt\\u003c/a> today. / With ai.txt, website owners can control whether or not their work is used to train new AI models and can continue to use robots.txt to manage permissions for popular search engines. / Starting today, Spawning's API will communicate the permissions set by ai.txt files to our growing network of AI researchers and partners, including Hugging Face and Stability AI.",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://github.com/protocol-registries/well-known-uris/issues/76",
     "claim": "protocol-registries/well-known-uris (GitHub), *Registration request: ai.txt · Issue #76 · protocol-registries/well-known-uris · GitHub*, checked 2026-10-30",
     "date": null,
     "quote": "The name you have chosen is very generic, but the specification you refer to does not have broad community discussion or implementation. Furthermore, the specification is in a private GitHub repository, which is not suitable for registration due to its lack of stability.\\n\\nAccordingly, it's not suitable for registration at this time. / 2026-03-16T04:27:22Z / Accordingly, it's not suitable for registration at this time.",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://github.com/protocol-registries/well-known-uris/issues/77",
     "claim": "protocol-registries/well-known-uris (GitHub), *Registration request: ai.json · Issue #77 · protocol-registries/well-known-uris · GitHub*, checked 2026-10-30",
     "date": null,
     "quote": "Accordingly, it's not suitable for registration at this time.",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://github.com/Spawning-Inc/spawning-wp-plugin",
     "claim": "Spawning Inc., *spawning-wp-plugin*, fetched 2026-10-30",
     "date": null,
     "quote": "GitHub - Spawning-Inc/spawning-wp-plugin: Building the consent layer for AI · GitHub Skip to content / true false 647415096 Spawning-Inc/spawning-wp-plugin logged-out env-production page-responsive false https://api.github.com/_private/browser/stats https://api.github.com/_private/browser/errors / href=\\\"https://site.spawning.ai/spawning-ai-txt\\\" rel=\\\"nofollow\\\"\\u003ehere\\u003c/a\\u003e. The plugin also allows for users to modify their robot.txt files to / Contribute to Spawning-Inc/spawning-wp-plugin development by creating an account on GitHub. 1401488693436528 app-id=1477376905, app-argument=https://github.com/Spawning-Inc/spawning-wp-plugin / spawning-wp is a WordPress plugin which allows users to decide which types of content on their site is permitted for use with AI training. The plugin provides users with simple toggle switches to opt-out specific content types which may be used to train AI, and also generates a file at the appropriate location which follows the selected rules.",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://github.com/Spawning-Inc/spawning-wp-plugin/blob/main/spawning_ai/readme.txt",
     "claim": "Spawning Inc., *spawning-wp-plugin/spawning_ai/readme.txt at main · Spawning-Inc/spawning-wp-plugin*, checked 2026-10-30",
     "date": null,
     "quote": "· Spawning-Inc/spawning-wp-plugin https://github.com/Spawning-Inc/spawning-wp-plugin/blob/main/spawning_ai/readme.txt Building the consent layer for AI. Contribute to Spawning-Inc/spawning-wp-plugin / least: 5.0\",\"Tested up to: 6.2\",\"Requires PHP: 7.0\",\"Stable tag: 1.0\",\"License: Apache 2.0\",\"License URI: https://www.apache.org/licenses/LICENSE-2.0.txt\",\"\",\"This plugin / This plugin creates a file named ai.txt with dynamic text based on user-selected checkboxes. The ai.txt file is deleted when the plugin is uninstalled. / etag: W/\"1a8b511b95b29c44dea73072f437d5f1\" cache-control: max-age=0, private, must-revalidate strict-transport-security: max-age=31536000; includeSubdomains; preload x-frame-options: deny / spawning-wp-plugin/spawning_ai/readme.txt at main · Spawning-Inc/spawning-wp-plugin · GitHub Skip to content {\"props\":{\"docsUrl\":\"https://docs.github.com/get-started/accessibility/keyboard-shortcuts\"}}",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://github.com/Spawning-Inc/spawning-wp-plugin/blob/main/spawning_ai/config/ai_txt_options.json",
     "claim": "Spawning Inc., *spawning-wp-plugin/spawning_ai/config/ai_txt_options.json at main · Spawning-Inc/spawning-wp-plugin*, checked 2026-10-30",
     "date": null,
     "quote": ", \"userAgent\": \" User-agent: \", \"allow\": \" Allow: \", \"disallow\": \" Disallow: \", \"globalDisallow\": / \"Copyright 2023 Spawning Inc.\" } spawning-wp-plugin/spawning_ai/config/ai_txt_options.json at main · Spawning-Inc/spawning-wp-plugin · GitHub Skip to / User-agent: *\\\\n\\\",\",\" \\\"allow\\\": \\\"Allow: \\\",\",\" \\\"disallow\\\": \\\"Disallow: \\\",\",\" \\\"globalDisallow\\\": \\\"Disallow: *\\\\nDisallow: /\\\\n\\\",\",\" \\\"global\\\": \\\"/\\\\n\\\",\",\" \\\"pre\\\": \\\"# Spawning AI / Breadcrumbs spawning-wp-plugin /spawning_ai /config / ai_txt_options.json Copy path Top File metadata and controls Code",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://api.openverse.org/ai.txt",
     "claim": "WordPress Openverse API, */ai.txt on api.openverse.org*, checked 2026-10-30",
     "date": null,
     "quote": "# Spawning AI # Prevent datasets from using the following file types User-Agent: * Disallow: *.txt",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://www.rfc-editor.org/rfc/rfc9309.html",
     "claim": "M. Koster, G. Illyes, H. Zeller, and L. Sassman, *RFC 9309: Robots Exclusion Protocol*, September 2022",
     "date": null,
     "quote": "<meta content=\"Common,Latin\" name=\"scripts\"> / This is an Internet Standards Track document.",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://www.rfc-editor.org/rfc/rfc8615.html",
     "claim": "M. Nottingham, *RFC 8615: Well-Known Uniform Resource Identifiers (URIs)*, May 2019",
     "date": null,
     "quote": "This memo defines a path prefix for \"well-known locations\",",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-aipref-attach/",
     "claim": "IETF Datatracker, *draft-ietf-aipref-attach — Associating AI Usage Preferences with Content in HTTP (IETF Datatracker)*, checked 2026-10-30",
     "date": null,
     "quote": "Active Internet-Draft (aipref WG)",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://www.w3.org/community/reports/tdmrep/CG-FINAL-tdmrep-20240510/",
     "claim": "Laurent Le Meur (EDRLab), *TDM Reservation Protocol (TDMRep)*, Final Community Group Report, 10 May 2024",
     "date": null,
     "quote": "TDM Reservation Protocol (TDMRep) Final Community Group Report 10 May 2024 This version: https://www.w3.org/community/reports/tdmrep/CG-FINAL-tdmrep-20240510/",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://blog.cloudflare.com/content-signals-policy/",
     "claim": "Cloudflare, *Giving users choice with Cloudflare's new Content Signals Policy*, published 2025-09-24; modified 2026-07-15",
     "date": null,
     "quote": "server: cloudflare cf-ray: a52db34f6977d9de-FRA alt-svc: h3=\":443\"; ma=86400 width=device-width, initial-scale=1.0 en-us @cloudflare https://blog.cloudflare.com/content-signals-policy/ 1200 628",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://rslstandard.org/rsl",
     "claim": "RSL Technical Steering Committee, *Really Simple Licensing (RSL) 1.0 Specification*, published 2025-12-10",
     "date": null,
     "quote": "Document RSL-SPEC-1.0 Category Industry Specification Status Recommendation Published 2025-12-10 / robots.txt License: directives HTTP Link headers with rel=\"license\" HTML license associations established using <link> or <script> elements RSS <rsl:content> associations / embedded within a media or data file as described in Section 4.8",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://www.republik.ch/ai.txt",
     "claim": "Republik, */ai.txt on www.republik.ch*, checked 2026-10-30",
     "date": null,
     "quote": "# Spawning AI # Prevent datasets from using the following file types User-Agent: * Disallow: / Disallow: *",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://mltshp.com/ai.txt",
     "claim": "MLTSHP, */ai.txt on mltshp.com*, checked 2026-10-30",
     "date": null,
     "quote": "# Spawning AI # Prevent datasets from using the following file types User-Agent: * Disallow: *.txt",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://www.makigas.es/ai.txt",
     "claim": "makigas, */ai.txt on www.makigas.es*, checked 2026-10-30",
     "date": null,
     "quote": "# Spawning AI # Prevent datasets from using the following file types User-Agent: * Disallow: *.txt",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://thayn.me/.well-known/ai.txt",
     "claim": "Thayn, */.well-known/ai.txt on thayn.me*, checked 2026-10-30",
     "date": null,
     "quote": "[email redacted] Policy-URL: https://thayn.me/.well-known/humans.txt Training: deny Scraping: allow Indexing: allow Caching: allow Attribution: required accept-ranges:",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://datadiligence.readthedocs.io/en/latest/api/datadiligence.rules.html",
     "claim": "Spawning, *datadiligence.rules module*, checked 2026-10-29",
     "date": null,
     "quote": "10000¶ MAX_CONCURRENT_REQUESTS = 10¶ SPAWNING_AI_API_URL = 'https://opts-api.spawningaiapi.com/api/v2/query/urls/'¶ filter_allowed(urls=None, url=None, kwargs)[source]¶ Submit a list of",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://github.com/kaylacar/ai-txt",
     "claim": "Kayla Cardillo, *GitHub - kaylacar/ai-txt: ai.txt — open standard proposal for declaring a website's AI policy*, checked 2026-10-30",
     "date": null,
     "quote": "npx @ai-txt/core check https://example.com --agent ClaudeBot",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://contextbolt.com/blog/ai-txt/",
     "claim": "David (ContextBolt), *ai.txt: The Permissions File That Is Not llms.txt*, checked 2026-10-30",
     "date": null,
     "quote": "it. OpenAI, Google, Anthropic and Perplexity all point site owners at robots.txt to control / Google, Anthropic and Perplexity all point site owners at robots.txt to control GPTBot, Google-Extended,",
     "ref": 22
    }
   ],
   "form": "well-known-file",
   "governance": "None across the filename. Spawning Inc. maintains the 2023 `/ai.txt` generator and WordPress plugin; Kayla Cardillo maintains `draft-car-ai-txt-wellknown-00` and `kaylacar/ai-txt` as an independent submission",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "new record added during read-step verification; reclassified to the permit step"
    },
    {
     "date": "2026-10-30",
     "note": "Expanded primary-source verified record: added Spawning's 2023 /ai.txt primary sources and live deployments, unified Kayla Cardillo's draft-car-ai-txt-wellknown-00 (2026-06-12) with kaylacar/ai-txt, and documented IANA's 2026-03-16 rejection of well-known URI filings #76 and #77"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "ai-txt",
   "implementation": "prototype",
   "last_verified": "2026-11-12",
   "name": "ai.txt",
   "native_status": "Spawning `/ai.txt`: shipping generator and WordPress plugin v1.0 (30 May 2023); Cardillo `/.well-known/ai.txt`: individual IETF Internet-Draft `draft-car-ai-txt-wellknown-00` (12 June 2026, expires 14 December 2026) with IANA filings `#76`/`#77` rejected and closed on 16 March 2026",
   "origin": {
    "date": "2023-05-30",
    "org": "Spawning Inc. (/ai.txt); Kayla Cardillo (/.well-known/ai.txt)"
   },
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "draft",
   "probe": {
    "method": "GET",
    "on_absent": "No /ai.txt or /.well-known/ai.txt file present; major AI crawlers consult /robots.txt instead",
    "parse": "200 response with text/plain body starting with `# Spawning AI` / `User-Agent: *` and per-extension `Allow:` / `Disallow:` rules at `/ai.txt`, or `Spec-Version: 1.0` with `Training:` / `Scraping:` / `Indexing:` / `Caching:` fields at `/.well-known/ai.txt`",
    "path": "{origin}/ai.txt"
   },
   "question": "May AI systems train on, scrape, index, or cache this site's content, and under what media-type, per-path, or per-agent rules?",
   "scope": "general",
   "spec_url": "https://github.com/kaylacar/ai-txt/blob/master/ietf/draft-car-ai-txt-wellknown-00.md",
   "step": "permit",
   "summary_md": "**ai.txt** is an earlier file at `/ai.txt` published by Spawning Inc. for text-and-data-mining opt-out, scoped narrowly to TDM permission per file pattern. `draft-car-ai-txt-wellknown-00` requests registration of two Well-Known URIs under the `/.well-known/` path: `ai.txt` and `ai.json`. These URIs define a structured, machine-readable file in which a site operator can declare AI usage preferences (training, scraping, indexing, caching), licensing terms, required attribution, and per-agent rules. The Spawning file is placed at the root of a website and is read when a site's media is downloaded. In Cardillo's draft, the `ai.txt` file MUST be served at `https://example.com/.well-known/ai.txt`. In that draft, the file MUST be served with Content-Type `text/plain; charset=utf-8`. `draft-car-ai-txt-wellknown-00` is dated 12 June 2026 and expires on 14 December 2026. Cardillo's `draft-car-ai-txt-wellknown-00` defines its `/.well-known/ai.txt` format as a strict superset of Spawning's earlier root `/ai.txt` TDM opt-out file, covering training, scraping, indexing, caching, per-agent rules, licensing, and attribution. Cardillo's draft acknowledges Spawning's prior use of the `ai.txt` name and positions `/.well-known/ai.txt` as a successor declaration surface rather than a competing one. On `2026-03-16`, the `ai.txt` registration was found not suitable for registration at this time: the name is very generic, and the specification does not have broad community discussion or implementation. The `ai.json` registration is not suitable for registration at this time.",
   "track": "community",
   "version": {
    "date": "2026-06-12",
    "label": "1.0 / draft-car-ai-txt-wellknown-00"
   },
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-car-ai-txt-wellknown"
    }
   ],
   "use_cases": [
    "control-ai-crawling"
   ],
   "audience": [
    "site-owner",
    "standards-body"
   ],
   "pairs_with": [
    "ai-crawler-tokens-robots",
    "aipref-content-usage-attachment",
    "tdmrep",
    "cloudflare-content-signals-policy",
    "rsl"
   ],
   "prerequisites": [],
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "web_discovery",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "This page is about `ai.txt` as an AI usage-permission and training opt-out file: first Spawning Inc.'s root-level `/ai.txt` file (30 May 2023), which borrows `robots.txt` syntax (`User-agent: *` with `Allow:` and `Disallow:` rules over file extensions) to express commercial text-and-data-mining permissions, and second Kayla Cardillo's individual IETF Internet-Draft `draft-car-ai-txt-wellknown-00` (12 June 2026; GitHub repository `kaylacar/ai-txt` created 22 February 2026), which proposes `/.well-known/ai.txt` and `/.well-known/ai.json` for `Training`, `Scraping`, `Indexing`, `Caching`, licensing, attribution and per-agent rules and explicitly \"positions itself as a successor declaration surface rather than a competing one\" to Spawning's 2023 file. Three other unrelated proposals share the `ai.txt` filename: (a) `menro/ai.txt` (18 May 2023), an unmaintained GitHub sketch for an LLM content feed (`\"In essence, AI.txt is more akin to RSS feeds than robots.txt.\"`); (b) the May 2025 academic paper *ai.txt: A Domain-Specific Language for Guiding AI Interactions with the Internet* (Li et al., `arXiv:2505.07834`, 2 May 2025), which defines an element-level DSL at `/ai.txt` (`Disallow: Return`, `Disallow: Train`) with natural-language instructions and XML compilation; and (c) `aitxt.ing` (January 2026), a cascading Markdown context file for describing resources so AI assistants `\"stop hallucinating\"`, which states: `\"That specification is about context and boundaries in prose. It makes no claim on the permission-signalling space.\"`. It is not [AI crawler tokens in robots.txt](/protocols/ai-crawler-tokens-robots/), the vendor user-agent tokens (`GPTBot`, `ClaudeBot`, `Google-Extended`) used inside `robots.txt`; it is not W3C [TDMRep](/protocols/tdmrep/) (`/.well-known/tdmrep.json`), the IETF AIPREF specifications ([AIPREF Vocabulary](/protocols/aipref-vocabulary/), [AIPREF Content-Usage Attachment](/protocols/aipref-content-usage-attachment/)), Cloudflare's [Content Signals Policy](/protocols/cloudflare-content-signals-policy/), or [Really Simple Licensing (RSL)](/protocols/rsl/); and it is not [llms.txt](/protocols/llms-txt/) or [agents.txt](/protocols/agents-txt/). [1]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**ai.txt** is an earlier file at `/ai.txt` published by Spawning Inc. for text-and-data-mining opt-out, scoped narrowly to TDM permission per file pattern. [2] `draft-car-ai-txt-wellknown-00` requests registration of two Well-Known URIs under the `/.well-known/` path: `ai.txt` and `ai.json`. These URIs define a structured, machine-readable file in which a site operator can declare AI usage preferences (training, scraping, indexing, caching), licensing terms, required attribution, and per-agent rules. [2] The Spawning file is placed at the root of a website and is read when a site's media is downloaded. [3] In Cardillo's draft, the `ai.txt` file MUST be served at `https://example.com/.well-known/ai.txt`. [2] In that draft, the file MUST be served with Content-Type `text/plain; charset=utf-8`. [2] `draft-car-ai-txt-wellknown-00` is dated 12 June 2026 and expires on 14 December 2026. [2] Cardillo's `draft-car-ai-txt-wellknown-00` defines its `/.well-known/ai.txt` format as a strict superset of Spawning's earlier root `/ai.txt` TDM opt-out file, covering training, scraping, indexing, caching, per-agent rules, licensing, and attribution. [2] Cardillo's draft acknowledges Spawning's prior use of the `ai.txt` name and positions `/.well-known/ai.txt` as a successor declaration surface rather than a competing one. [2] On `2026-03-16`, the `ai.txt` registration was found not suitable for registration at this time: the name is very generic, and the specification does not have broad community discussion or implementation. [4] The `ai.json` registration is not suitable for registration at this time. [5]",
   "v05_identity_sentence_md": "**ai.txt** is an earlier file at `/ai.txt` published by Spawning Inc. for text-and-data-mining opt-out, scoped narrowly to TDM permission per file pattern. [2] `draft-car-ai-txt-wellknown-00` requests registration of two Well-Known URIs under the `/.well-known/` path: `ai.txt` and `ai.json`. These URIs define a structured, machine-readable file in which a site operator can declare AI usage preferences (training, scraping, indexing, caching), licensing terms, required attribution, and per-agent rules. [2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Permit](/category/permit/) (`permit`)"
    },
    {
     "label": "Form",
     "value_md": "Well-known file (`well-known-file`)"
    },
    {
     "label": "Originated by",
     "value_md": "Spawning Inc. (Cullen Miller, `2023-05-30`) for `/ai.txt`; Kayla Cardillo (`kaylacar/ai-txt` `2026-02-22`; `draft-car-ai-txt-wellknown-00` `2026-06-12`) [1][3][6]"
    },
    {
     "label": "Governed by",
     "value_md": "No standards body: Spawning Inc. maintains `/ai.txt`; Kayla Cardillo maintains `draft-car-ai-txt-wellknown-00` (`Independent Submission`; IANA `#76` & `#77` rejected `2026-03-16`) [1][3][4][5][6]"
    },
    {
     "label": "Track",
     "value_md": "Vendor / community convention (`/ai.txt` by Spawning Inc.) and individual IETF Internet-Draft (`draft-car-ai-txt-wellknown-00`, Independent Submission, Intended status: Informational) [1][2][3]"
    },
    {
     "label": "Status",
     "value_md": "Spawning `/ai.txt`: shipping generator and WordPress plugin v1.0 (30 May 2023); Cardillo `/.well-known/ai.txt`: individual IETF Internet-Draft `draft-car-ai-txt-wellknown-00` (12 June 2026, expires 14 December 2026) with IANA filings `#76`/`#77` rejected and closed on 16 March 2026 [1][4][5][6][7]"
    },
    {
     "label": "Version",
     "value_md": "Spawning plugin `Stable tag: 1.0` (`2023-05-30`); Cardillo `Spec-Version: 1.0` / `draft-car-ai-txt-wellknown-00` (`2026-06-12`, expires `2026-12-14`) [1][6][7]"
    },
    {
     "label": "Wire format",
     "value_md": "Spawning: plain-text `/ai.txt` (`# Spawning AI`, `User-agent: *`, `Allow:` / `Disallow:` over media extensions plus `/` and `*`). Cardillo: `text/plain; charset=utf-8` (`/.well-known/ai.txt`) & `application/json; charset=utf-8` (`/.well-known/ai.json`) [7][8][9]"
    },
    {
     "label": "Specification",
     "value_md": "[Spawning Launch Post](https://spawning.substack.com/p/aitxt-a-new-way-for-websites-to-set) · [Spawning Plugin](https://github.com/Spawning-Inc/spawning-wp-plugin) · [Cardillo Draft](https://github.com/kaylacar/ai-txt/blob/master/ietf/draft-car-ai-txt-wellknown-00.md) · [Cardillo `SPEC.md`](https://github.com/kaylacar/ai-txt/blob/master/SPEC.md) [3][6][7]"
    },
    {
     "label": "Found at",
     "value_md": "`GET https://{origin}/ai.txt` (Spawning); `GET https://{origin}/.well-known/ai.txt` and `/.well-known/ai.json` with `Cache-Control: max-age=300` (min TTL `60s`), `ETag`, and `Access-Control-Allow-Origin: *` (Cardillo) [1][3][7]"
    },
    {
     "label": "Licence",
     "value_md": "Apache-2.0 (`Spawning-Inc/spawning-wp-plugin`, `Copyright 2023 Spawning Inc.`); IETF Trust (`trust200902`) for `draft-car-ai-txt-wellknown-00` [6][7][8]"
    }
   ],
   "v05_problem_md": "With ai.txt, website owners can control whether or not their work is used to train new AI models and can continue to use robots.txt to manage permissions for popular search engines. [3] `robots.txt` can block crawling entirely. `ai.txt` expresses nuanced policies such as \"you may crawl but not train on this content\", a distinction that `robots.txt` alone cannot express. [2] The Spawning generator writes `User-agent: *`, an `Allow:` prefix, and a `Disallow:` prefix, plus a global block of `Disallow: *` and `Disallow: /`, under the comment `# Spawning AI`. [8] `Training` is OPTIONAL and defaults to `deny`. `Scraping`, `Indexing`, and `Caching` are OPTIONAL and default to `allow`. [2] `ai.txt` is advisory. It declares the site owner's policy. Compliance is expected in good faith but is not enforced by the file itself. [2] Servers MUST enforce rate limits and access control independently of the declarations in `ai.txt`. [2]",
   "v05_mechanism_delta_md": "The Spawning generator writes `User-agent: *`, an `Allow:` prefix, and a `Disallow:` prefix, plus a global block of `Disallow: *` and `Disallow: /`, under the comment `# Spawning AI`. [8] `Training` is OPTIONAL and defaults to `deny`. `Scraping`, `Indexing`, and `Caching` are OPTIONAL and default to `allow`. [2]",
   "v05_scope_boundary_md": "`ai.txt` is advisory. It declares the site owner's policy. Compliance is expected in good faith but is not enforced by the file itself. [2] Servers MUST enforce rate limits and access control independently of the declarations in `ai.txt`. [2]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "robots.txt (RFC 9309)",
      "spec_or_rfc": "RFC 9309",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "Spawning's /ai.txt uses User-agent with Allow and Disallow over media extensions such as *.jpg, and Cardillo's draft uses /.well-known/ai.txt with Training, Scraping, Indexing, and Caching, whereas RFC 9309 only pairs a User-agent token in /robots.txt with URL path rules. [3][10]"
     },
     {
      "name": "Well-Known URIs (RFC 8615)",
      "spec_or_rfc": "RFC 8615",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "The Cardillo draft places ai.txt as text/plain and an optional ai.json under /.well-known/, and IANA well-known filings 76 and 77 were rejected and closed on 16 March 2026, so those names are not registered RFC 8615 well-known URIs. [2][3][4][5][11]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "ai-crawler-tokens-robots",
      "target_name": "AI crawler tokens in robots.txt",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ai.txt is its own file, with media-extension Allow and Disallow at /ai.txt or Training, Scraping, Indexing, and Caching at /.well-known/ai.txt, while AI crawler tokens are User-agent product tokens such as GPTBot inside /robots.txt. [3][10]"
     },
     {
      "target_id": "aipref-content-usage-attachment",
      "target_name": "AIPREF Content-Usage Attachment",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ai.txt uses /ai.txt or /.well-known/ai.txt, including Training allow, deny, or conditional, while AIPREF attaches preferences with a Content-Usage robots.txt rule such as train-ai=n and a Content-Usage HTTP header. [3][12]"
     },
     {
      "target_id": "tdmrep",
      "target_name": "TDMRep (TDM Reservation Protocol)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ai.txt is a root or well-known permission file with Training and media-extension rules, while TDMRep's normative JSON is /.well-known/tdmrep.json with tdm-reservation set to 1 and an optional tdm-policy. [3][13]"
     },
     {
      "target_id": "cloudflare-content-signals-policy",
      "target_name": "Content Signals Policy",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ai.txt is a separate document with Training, Scraping, Indexing, and Caching, or with Allow and Disallow over media extensions, while Content-Signal is a directive for search, ai-input, and ai-train inside a robots.txt User-agent group. [3][14]"
     },
     {
      "target_id": "rsl",
      "target_name": "Really Simple Licensing",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ai.txt states training or use permissions in /ai.txt or /.well-known/ai.txt, whereas RSL defines no fixed /rsl.xml path and associates XML license documents that can prohibit usage or specify payment terms via five Section 4 discovery surfaces: robots.txt License: directives, HTTP Link headers (rel=\"license\"), HTML `<link>` or `<script>` elements, RSS `<rsl:content>` elements, and embedded media or data file metadata. [3][15]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (12 probed or cited examples; non-exhaustive).",
    "side_a": {
     "visible": true,
     "heading": "Who publishes or hosts it",
     "col4_header": "Behavior / Provisioning",
     "note_md": null,
     "rows": [
      {
       "actor": "WordPress Openverse API",
       "role": "Publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Serves `/ai.txt` in Spawning format (`# Spawning AI`, `User-Agent: *`, per-extension `Disallow:` from `*.txt` through `*.sql`, then `Disallow: /` and `Disallow: *`).",
       "source_md": "[api.openverse.org/ai.txt (checked 2026-10-30)](https://api.openverse.org/ai.txt) [9]"
      },
      {
       "actor": "Republik",
       "role": "Publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Serves `/ai.txt` in Spawning format (`# Spawning AI`, `User-Agent: *`, `Disallow: /`, `Disallow: *`).",
       "source_md": "[www.republik.ch/ai.txt (checked 2026-10-30)](https://www.republik.ch/ai.txt) [16]"
      },
      {
       "actor": "MLTSHP",
       "role": "Publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Serves `/ai.txt` in Spawning format (`# Spawning AI`, `User-Agent: *`, per-extension `Disallow:` list).",
       "source_md": "[mltshp.com/ai.txt (checked 2026-10-30)](https://mltshp.com/ai.txt) [17]"
      },
      {
       "actor": "makigas",
       "role": "Publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Serves `/ai.txt` in Spawning format (`# Spawning AI`, `User-Agent: *`, per-extension `Disallow:` list).",
       "source_md": "[www.makigas.es/ai.txt (checked 2026-10-30)](https://www.makigas.es/ai.txt) [18]"
      },
      {
       "actor": "thayn.me",
       "role": "Publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "Serves Cardillo draft-car-ai-txt-wellknown-00 at `/.well-known/ai.txt` (`Spec-Version: 1.0`, `Site-Name: thayn.me`, `Training: deny`, `Scraping: allow`, `Indexing: allow`, `Caching: allow`, `Attribution: required`).",
       "source_md": "[thayn.me/.well-known/ai.txt (checked 2026-10-30)](https://thayn.me/.well-known/ai.txt) [19]"
      },
      {
       "actor": "Spawning WordPress plugin",
       "role": "CMS / Generator",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Plugin v1.0 writes `/ai.txt` at the site root from Images, Audio, Video, Text, and Code toggles (`# Spawning AI`, `User-agent: *`, per-extension `Disallow:`). Uninstall deletes the file.",
       "source_md": "[spawning-wp-plugin](https://github.com/Spawning-Inc/spawning-wp-plugin) [6] · [readme.txt](https://github.com/Spawning-Inc/spawning-wp-plugin/blob/main/spawning_ai/readme.txt) [7] · [ai_txt_options.json](https://github.com/Spawning-Inc/spawning-wp-plugin/blob/main/spawning_ai/config/ai_txt_options.json) [8]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Bot, client & tool support",
     "col4_header": "Behavior / Provisioning",
     "note_md": null,
     "rows": [
      {
       "actor": "Spawning API",
       "role": "Opt-out relay API & rules library",
       "status": "Partial",
       "status_display": "Partial · as of 2023-05-30",
       "col4_md": "Launch post (2023-05-30) announces that Spawning's backend API relays permissions set by `ai.txt` files to partner networks (naming Hugging Face and Stability AI), whereas the open-source `datadiligence.rules` Python package queries `https://opts-api.spawningaiapi.com/api/v2/query/urls/` and implements `TDMRepHeader` and `XRobotsTagHeader` rather than parsing /ai.txt directly.",
       "source_md": "[Spawning Blog (2023-05-30)](https://spawning.substack.com/p/aitxt-a-new-way-for-websites-to-set) [3] · [datadiligence.rules](https://datadiligence.readthedocs.io/en/latest/api/datadiligence.rules.html) [20]"
      },
      {
       "actor": "@ai-txt/core",
       "role": "Validator / Parser",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "CLI check npx @ai-txt/core check `<url>` --agent ClaudeBot fetches a site's ai.txt and evaluates it for a named agent.",
       "source_md": "[kaylacar/ai-txt (pushed 2026-07-18)](https://github.com/kaylacar/ai-txt) [21]"
      },
      {
       "actor": "OpenAI",
       "role": "AI crawler",
       "status": "Position: neutral (no implementation)",
       "status_display": "Position: neutral (no implementation) · checked 2026-10-30",
       "col4_md": "No OpenAI crawler document states that GPTBot or ChatGPT-User fetches `/ai.txt` or `/.well-known/ai.txt`; published crawler guidance points site owners to `robots.txt`.",
       "source_md": "[ContextBolt (updated 2026-10-22)](https://contextbolt.com/blog/ai-txt/) [22]"
      },
      {
       "actor": "Google",
       "role": "AI crawler",
       "status": "Position: neutral (no implementation)",
       "status_display": "Position: neutral (no implementation) · checked 2026-10-30",
       "col4_md": "No Google crawler document states that Google-Extended or Googlebot fetches `/ai.txt` or `/.well-known/ai.txt`; published crawler guidance points site owners to `robots.txt`.",
       "source_md": "[ContextBolt (updated 2026-10-22)](https://contextbolt.com/blog/ai-txt/) [22]"
      },
      {
       "actor": "Anthropic",
       "role": "AI crawler",
       "status": "Position: neutral (no implementation)",
       "status_display": "Position: neutral (no implementation) · checked 2026-10-30",
       "col4_md": "No Anthropic crawler document states that ClaudeBot fetches `/ai.txt` or `/.well-known/ai.txt`; published crawler guidance points site owners to `robots.txt`.",
       "source_md": "[ContextBolt (updated 2026-10-22)](https://contextbolt.com/blog/ai-txt/) [22]"
      },
      {
       "actor": "Perplexity",
       "role": "AI crawler",
       "status": "Position: neutral (no implementation)",
       "status_display": "Position: neutral (no implementation) · checked 2026-10-30",
       "col4_md": "No Perplexity crawler document states that PerplexityBot fetches `/ai.txt` or `/.well-known/ai.txt`; published crawler guidance points site owners to `robots.txt`.",
       "source_md": "[ContextBolt (updated 2026-10-22)](https://contextbolt.com/blog/ai-txt/) [22]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Permit protocols](/category/permit/)** — Category index for `permit` standards."
    }
   ],
   "v05_compiled_md": "---\nid: ai-txt\ntitle: \"ai.txt\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: permit\nform: well-known-file\nwire_archetype: web_discovery\nspec_url: https://spawning.substack.com/p/aitxt-a-new-way-for-websites-to-set\nlast_checked: 2026-11-12\n---\n\n# ai.txt\n\n**Category:** [Permit](/category/permit/) (`permit`) · **Form:** Well-known file (`well-known-file`) · **Last checked:** 2026-11-12\n\n> *This page is about `ai.txt` as an AI usage-permission and training opt-out file: first Spawning Inc.'s root-level `/ai.txt` file (30 May 2023), which borrows `robots.txt` syntax (`User-agent: *` with `Allow:` and `Disallow:` rules over file extensions) to express commercial text-and-data-mining permissions, and second Kayla Cardillo's individual IETF Internet-Draft `draft-car-ai-txt-wellknown-00` (12 June 2026; GitHub repository `kaylacar/ai-txt` created 22 February 2026), which proposes `/.well-known/ai.txt` and `/.well-known/ai.json` for `Training`, `Scraping`, `Indexing`, `Caching`, licensing, attribution and per-agent rules and explicitly \"positions itself as a successor declaration surface rather than a competing one\" to Spawning's 2023 file. Three other unrelated proposals share the `ai.txt` filename: (a) `menro/ai.txt` (18 May 2023), an unmaintained GitHub sketch for an LLM content feed (`\"In essence, AI.txt is more akin to RSS feeds than robots.txt.\"`); (b) the May 2025 academic paper *ai.txt: A Domain-Specific Language for Guiding AI Interactions with the Internet* (Li et al., `arXiv:2505.07834`, 2 May 2025), which defines an element-level DSL at `/ai.txt` (`Disallow: Return`, `Disallow: Train`) with natural-language instructions and XML compilation; and (c) `aitxt.ing` (January 2026), a cascading Markdown context file for describing resources so AI assistants `\"stop hallucinating\"`, which states: `\"That specification is about context and boundaries in prose. It makes no claim on the permission-signalling space.\"`. It is not [AI crawler tokens in robots.txt](/protocols/ai-crawler-tokens-robots/), the vendor user-agent tokens (`GPTBot`, `ClaudeBot`, `Google-Extended`) used inside `robots.txt`; it is not W3C [TDMRep](/protocols/tdmrep/) (`/.well-known/tdmrep.json`), the IETF AIPREF specifications ([AIPREF Vocabulary](/protocols/aipref-vocabulary/), [AIPREF Content-Usage Attachment](/protocols/aipref-content-usage-attachment/)), Cloudflare's [Content Signals Policy](/protocols/cloudflare-content-signals-policy/), or [Really Simple Licensing (RSL)](/protocols/rsl/); and it is not [llms.txt](/protocols/llms-txt/) or [agents.txt](/protocols/agents-txt/). [1]*\n\n**ai.txt** is an earlier file at `/ai.txt` published by Spawning Inc. for text-and-data-mining opt-out, scoped narrowly to TDM permission per file pattern. [2] `draft-car-ai-txt-wellknown-00` requests registration of two Well-Known URIs under the `/.well-known/` path: `ai.txt` and `ai.json`. These URIs define a structured, machine-readable file in which a site operator can declare AI usage preferences (training, scraping, indexing, caching), licensing terms, required attribution, and per-agent rules. [2] The Spawning file is placed at the root of a website and is read when a site's media is downloaded. [3] In Cardillo's draft, the `ai.txt` file MUST be served at `https://example.com/.well-known/ai.txt`. [2] In that draft, the file MUST be served with Content-Type `text/plain; charset=utf-8`. [2] `draft-car-ai-txt-wellknown-00` is dated 12 June 2026 and expires on 14 December 2026. [2] Cardillo's `draft-car-ai-txt-wellknown-00` defines its `/.well-known/ai.txt` format as a strict superset of Spawning's earlier root `/ai.txt` TDM opt-out file, covering training, scraping, indexing, caching, per-agent rules, licensing, and attribution. [2] Cardillo's draft acknowledges Spawning's prior use of the `ai.txt` name and positions `/.well-known/ai.txt` as a successor declaration surface rather than a competing one. [2] On `2026-03-16`, the `ai.txt` registration was found not suitable for registration at this time: the name is very generic, and the specification does not have broad community discussion or implementation. [4] The `ai.json` registration is not suitable for registration at this time. [5]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Permit](/category/permit/) (`permit`) |\n| **Form** | Well-known file (`well-known-file`) |\n| **Originated by** | Spawning Inc. (Cullen Miller, `2023-05-30`) for `/ai.txt`; Kayla Cardillo (`kaylacar/ai-txt` `2026-02-22`; `draft-car-ai-txt-wellknown-00` `2026-06-12`) [1][3][6] |\n| **Governed by** | No standards body: Spawning Inc. maintains `/ai.txt`; Kayla Cardillo maintains `draft-car-ai-txt-wellknown-00` (`Independent Submission`; IANA `#76` & `#77` rejected `2026-03-16`) [1][3][4][5][6] |\n| **Track** | Vendor / community convention (`/ai.txt` by Spawning Inc.) and individual IETF Internet-Draft (`draft-car-ai-txt-wellknown-00`, Independent Submission, Intended status: Informational) [1][2][3] |\n| **Status** | Spawning `/ai.txt`: shipping generator and WordPress plugin v1.0 (30 May 2023); Cardillo `/.well-known/ai.txt`: individual IETF Internet-Draft `draft-car-ai-txt-wellknown-00` (12 June 2026, expires 14 December 2026) with IANA filings `#76`/`#77` rejected and closed on 16 March 2026 [1][4][5][6][7] |\n| **Version** | Spawning plugin `Stable tag: 1.0` (`2023-05-30`); Cardillo `Spec-Version: 1.0` / `draft-car-ai-txt-wellknown-00` (`2026-06-12`, expires `2026-12-14`) [1][6][7] |\n| **Wire format** | Spawning: plain-text `/ai.txt` (`# Spawning AI`, `User-agent: *`, `Allow:` / `Disallow:` over media extensions plus `/` and `*`). Cardillo: `text/plain; charset=utf-8` (`/.well-known/ai.txt`) & `application/json; charset=utf-8` (`/.well-known/ai.json`) [7][8][9] |\n| **Specification** | [Spawning Launch Post](https://spawning.substack.com/p/aitxt-a-new-way-for-websites-to-set) · [Spawning Plugin](https://github.com/Spawning-Inc/spawning-wp-plugin) · [Cardillo Draft](https://github.com/kaylacar/ai-txt/blob/master/ietf/draft-car-ai-txt-wellknown-00.md) · [Cardillo `SPEC.md`](https://github.com/kaylacar/ai-txt/blob/master/SPEC.md) [3][6][7] |\n| **Found at** | `GET https://{origin}/ai.txt` (Spawning); `GET https://{origin}/.well-known/ai.txt` and `/.well-known/ai.json` with `Cache-Control: max-age=300` (min TTL `60s`), `ETag`, and `Access-Control-Allow-Origin: *` (Cardillo) [1][3][7] |\n| **Licence** | Apache-2.0 (`Spawning-Inc/spawning-wp-plugin`, `Copyright 2023 Spawning Inc.`); IETF Trust (`trust200902`) for `draft-car-ai-txt-wellknown-00` [6][7][8] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [Adoption and ecosystem](#adoption-and-ecosystem)\n4. [See also](#see-also)\n5. [References](#references)\n\n---\n\n## Problem and scope\n\nWith ai.txt, website owners can control whether or not their work is used to train new AI models and can continue to use robots.txt to manage permissions for popular search engines. [3] `robots.txt` can block crawling entirely. `ai.txt` expresses nuanced policies such as \"you may crawl but not train on this content\", a distinction that `robots.txt` alone cannot express. [2] The Spawning generator writes `User-agent: *`, an `Allow:` prefix, and a `Disallow:` prefix, plus a global block of `Disallow: *` and `Disallow: /`, under the comment `# Spawning AI`. [8] `Training` is OPTIONAL and defaults to `deny`. `Scraping`, `Indexing`, and `Caching` are OPTIONAL and default to `allow`. [2] `ai.txt` is advisory. It declares the site owner's policy. Compliance is expected in good faith but is not enforced by the file itself. [2] Servers MUST enforce rate limits and access control independently of the declarations in `ai.txt`. [2]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **robots.txt (RFC 9309)** | `RFC 9309` | Analogous to classic standard | Spawning's /ai.txt uses User-agent with Allow and Disallow over media extensions such as *.jpg, and Cardillo's draft uses /.well-known/ai.txt with Training, Scraping, Indexing, and Caching, whereas RFC 9309 only pairs a User-agent token in /robots.txt with URL path rules. [3][10] |\n| **Well-Known URIs (RFC 8615)** | `RFC 8615` | Analogous to classic standard | The Cardillo draft places ai.txt as text/plain and an optional ai.json under /.well-known/, and IANA well-known filings 76 and 77 were rejected and closed on 16 March 2026, so those names are not registered RFC 8615 well-known URIs. [2][3][4][5][11] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[AI crawler tokens in robots.txt](/protocols/ai-crawler-tokens-robots/)** | Peer alternative | ai.txt is its own file, with media-extension Allow and Disallow at /ai.txt or Training, Scraping, Indexing, and Caching at /.well-known/ai.txt, while AI crawler tokens are User-agent product tokens such as GPTBot inside /robots.txt. [3][10] |\n| **[AIPREF Content-Usage Attachment](/protocols/aipref-content-usage-attachment/)** | Peer alternative | ai.txt uses /ai.txt or /.well-known/ai.txt, including Training allow, deny, or conditional, while AIPREF attaches preferences with a Content-Usage robots.txt rule such as train-ai=n and a Content-Usage HTTP header. [3][12] |\n| **[TDMRep (TDM Reservation Protocol)](/protocols/tdmrep/)** | Peer alternative | ai.txt is a root or well-known permission file with Training and media-extension rules, while TDMRep's normative JSON is /.well-known/tdmrep.json with tdm-reservation set to 1 and an optional tdm-policy. [3][13] |\n| **[Content Signals Policy](/protocols/cloudflare-content-signals-policy/)** | Peer alternative | ai.txt is a separate document with Training, Scraping, Indexing, and Caching, or with Allow and Disallow over media extensions, while Content-Signal is a directive for search, ai-input, and ai-train inside a robots.txt User-agent group. [3][14] |\n| **[Really Simple Licensing](/protocols/rsl/)** | Peer alternative | ai.txt states training or use permissions in /ai.txt or /.well-known/ai.txt, whereas RSL defines no fixed /rsl.xml path and associates XML license documents that can prohibit usage or specify payment terms via five Section 4 discovery surfaces: robots.txt License: directives, HTTP Link headers (rel=\"license\"), HTML `<link>` or `<script>` elements, RSS `<rsl:content>` elements, and embedded media or data file metadata. [3][15] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (12 probed or cited examples; non-exhaustive).*\n\n### Who publishes or hosts it\n\n| Actor | Role | Status | Behavior / Provisioning | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **WordPress Openverse API** | Publisher | Live (HTTP 200) · checked 2026-10-30 | Serves `/ai.txt` in Spawning format (`# Spawning AI`, `User-Agent: *`, per-extension `Disallow:` from `*.txt` through `*.sql`, then `Disallow: /` and `Disallow: *`). | [api.openverse.org/ai.txt (checked 2026-10-30)](https://api.openverse.org/ai.txt) [9] |\n| **Republik** | Publisher | Live (HTTP 200) · checked 2026-10-30 | Serves `/ai.txt` in Spawning format (`# Spawning AI`, `User-Agent: *`, `Disallow: /`, `Disallow: *`). | [www.republik.ch/ai.txt (checked 2026-10-30)](https://www.republik.ch/ai.txt) [16] |\n| **MLTSHP** | Publisher | Live (HTTP 200) · checked 2026-10-30 | Serves `/ai.txt` in Spawning format (`# Spawning AI`, `User-Agent: *`, per-extension `Disallow:` list). | [mltshp.com/ai.txt (checked 2026-10-30)](https://mltshp.com/ai.txt) [17] |\n| **makigas** | Publisher | Live (HTTP 200) · checked 2026-10-30 | Serves `/ai.txt` in Spawning format (`# Spawning AI`, `User-Agent: *`, per-extension `Disallow:` list). | [www.makigas.es/ai.txt (checked 2026-10-30)](https://www.makigas.es/ai.txt) [18] |\n| **thayn.me** | Publisher | Live (HTTP 200) · checked 2026-10-30 | Serves Cardillo draft-car-ai-txt-wellknown-00 at `/.well-known/ai.txt` (`Spec-Version: 1.0`, `Site-Name: thayn.me`, `Training: deny`, `Scraping: allow`, `Indexing: allow`, `Caching: allow`, `Attribution: required`). | [thayn.me/.well-known/ai.txt (checked 2026-10-30)](https://thayn.me/.well-known/ai.txt) [19] |\n| **Spawning WordPress plugin** | CMS / Generator | Supported · checked 2026-10-30 | Plugin v1.0 writes `/ai.txt` at the site root from Images, Audio, Video, Text, and Code toggles (`# Spawning AI`, `User-agent: *`, per-extension `Disallow:`). Uninstall deletes the file. | [spawning-wp-plugin](https://github.com/Spawning-Inc/spawning-wp-plugin) [6] · [readme.txt](https://github.com/Spawning-Inc/spawning-wp-plugin/blob/main/spawning_ai/readme.txt) [7] · [ai_txt_options.json](https://github.com/Spawning-Inc/spawning-wp-plugin/blob/main/spawning_ai/config/ai_txt_options.json) [8] |\n\n### Bot, client & tool support\n\n| Actor | Role | Status | Behavior / Provisioning | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Spawning API** | Opt-out relay API & rules library | Partial · as of 2023-05-30 | Launch post (2023-05-30) announces that Spawning's backend API relays permissions set by `ai.txt` files to partner networks (naming Hugging Face and Stability AI), whereas the open-source `datadiligence.rules` Python package queries `https://opts-api.spawningaiapi.com/api/v2/query/urls/` and implements `TDMRepHeader` and `XRobotsTagHeader` rather than parsing /ai.txt directly. | [Spawning Blog (2023-05-30)](https://spawning.substack.com/p/aitxt-a-new-way-for-websites-to-set) [3] · [datadiligence.rules](https://datadiligence.readthedocs.io/en/latest/api/datadiligence.rules.html) [20] |\n| **@ai-txt/core** | Validator / Parser | Supported · checked 2026-10-30 | CLI check npx @ai-txt/core check `<url>` --agent ClaudeBot fetches a site's ai.txt and evaluates it for a named agent. | [kaylacar/ai-txt (pushed 2026-07-18)](https://github.com/kaylacar/ai-txt) [21] |\n| **OpenAI** | AI crawler | Position: neutral (no implementation) · checked 2026-10-30 | No OpenAI crawler document states that GPTBot or ChatGPT-User fetches `/ai.txt` or `/.well-known/ai.txt`; published crawler guidance points site owners to `robots.txt`. | [ContextBolt (updated 2026-10-22)](https://contextbolt.com/blog/ai-txt/) [22] |\n| **Google** | AI crawler | Position: neutral (no implementation) · checked 2026-10-30 | No Google crawler document states that Google-Extended or Googlebot fetches `/ai.txt` or `/.well-known/ai.txt`; published crawler guidance points site owners to `robots.txt`. | [ContextBolt (updated 2026-10-22)](https://contextbolt.com/blog/ai-txt/) [22] |\n| **Anthropic** | AI crawler | Position: neutral (no implementation) · checked 2026-10-30 | No Anthropic crawler document states that ClaudeBot fetches `/ai.txt` or `/.well-known/ai.txt`; published crawler guidance points site owners to `robots.txt`. | [ContextBolt (updated 2026-10-22)](https://contextbolt.com/blog/ai-txt/) [22] |\n| **Perplexity** | AI crawler | Position: neutral (no implementation) · checked 2026-10-30 | No Perplexity crawler document states that PerplexityBot fetches `/ai.txt` or `/.well-known/ai.txt`; published crawler guidance points site owners to `robots.txt`. | [ContextBolt (updated 2026-10-22)](https://contextbolt.com/blog/ai-txt/) [22] |\n\n---\n\n## See also\n\n- **Category:** [Permit protocols](/category/permit/)\n\n---\n\n## References\n\n1. Kayla Cardillo, *draft-car-ai-txt-wellknown-00* (fetched 2026-10-30) — <https://github.com/kaylacar/ai-txt/blob/master/ietf/draft-car-ai-txt-wellknown-00.md>\n2. Kayla Cardillo, *(draft-car-ai-txt-wellknown-00)* (checked 2026-11-07) — <https://www.ietf.org/archive/id/draft-car-ai-txt-wellknown-00.txt>\n3. Spawning, *ai.txt: A new way for websites to set permissions for AI* (published 2023-05-30) — <https://spawning.substack.com/p/aitxt-a-new-way-for-websites-to-set>\n4. protocol-registries/well-known-uris (GitHub), *Registration request: ai.txt · Issue #76 · protocol-registries/well-known-uris · GitHub* (checked 2026-10-30) — <https://github.com/protocol-registries/well-known-uris/issues/76>\n5. protocol-registries/well-known-uris (GitHub), *Registration request: ai.json · Issue #77 · protocol-registries/well-known-uris · GitHub* (checked 2026-10-30) — <https://github.com/protocol-registries/well-known-uris/issues/77>\n6. Spawning Inc., *spawning-wp-plugin* (fetched 2026-10-30) — <https://github.com/Spawning-Inc/spawning-wp-plugin>\n7. Spawning Inc., *spawning-wp-plugin/spawning_ai/readme.txt at main · Spawning-Inc/spawning-wp-plugin* (checked 2026-10-30) — <https://github.com/Spawning-Inc/spawning-wp-plugin/blob/main/spawning_ai/readme.txt>\n8. Spawning Inc., *spawning-wp-plugin/spawning_ai/config/ai_txt_options.json at main · Spawning-Inc/spawning-wp-plugin* (checked 2026-10-30) — <https://github.com/Spawning-Inc/spawning-wp-plugin/blob/main/spawning_ai/config/ai_txt_options.json>\n9. WordPress Openverse API, */ai.txt on api.openverse.org* (checked 2026-10-30) — <https://api.openverse.org/ai.txt>\n10. M. Koster, G. Illyes, H. Zeller, and L. Sassman, *RFC 9309: Robots Exclusion Protocol* (September 2022) — <https://www.rfc-editor.org/rfc/rfc9309.html>\n11. M. Nottingham, *RFC 8615: Well-Known Uniform Resource Identifiers (URIs)* (May 2019) — <https://www.rfc-editor.org/rfc/rfc8615.html>\n12. IETF Datatracker, *draft-ietf-aipref-attach — Associating AI Usage Preferences with Content in HTTP (IETF Datatracker)* (checked 2026-10-30) — <https://datatracker.ietf.org/doc/draft-ietf-aipref-attach/>\n13. Laurent Le Meur (EDRLab), *TDM Reservation Protocol (TDMRep)* (Final Community Group Report, 10 May 2024) — <https://www.w3.org/community/reports/tdmrep/CG-FINAL-tdmrep-20240510/>\n14. Cloudflare, *Giving users choice with Cloudflare's new Content Signals Policy* (published 2025-09-24; modified 2026-07-15) — <https://blog.cloudflare.com/content-signals-policy/>\n15. RSL Technical Steering Committee, *Really Simple Licensing (RSL) 1.0 Specification* (published 2025-12-10) — <https://rslstandard.org/rsl>\n16. Republik, */ai.txt on www.republik.ch* (checked 2026-10-30) — <https://www.republik.ch/ai.txt>\n17. MLTSHP, */ai.txt on mltshp.com* (checked 2026-10-30) — <https://mltshp.com/ai.txt>\n18. makigas, */ai.txt on www.makigas.es* (checked 2026-10-30) — <https://www.makigas.es/ai.txt>\n19. Thayn, */.well-known/ai.txt on thayn.me* (checked 2026-10-30) — <https://thayn.me/.well-known/ai.txt>\n20. Spawning, *datadiligence.rules module* (checked 2026-10-29) — <https://datadiligence.readthedocs.io/en/latest/api/datadiligence.rules.html>\n21. Kayla Cardillo, *GitHub - kaylacar/ai-txt: ai.txt — open standard proposal for declaring a website's AI policy* (checked 2026-10-30) — <https://github.com/kaylacar/ai-txt>\n22. David (ContextBolt), *ai.txt: The Permissions File That Is Not llms.txt* (checked 2026-10-30) — <https://contextbolt.com/blog/ai-txt/>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "LMOS",
   "hatnote_md": "This page is about Eclipse LMOS, the Eclipse Foundation open-source project that started at Deutsche Telekom, and its LMOS Protocol for describing, discovering and connecting agents on top of the W3C Web of Things. The project's Agent Definition Language (ADL) is covered here as one of its components. It is not the [Agent2Agent Protocol (A2A)](/protocols/a2a/), whose agent cards the LMOS Arc framework can publish, and not the [Model Context Protocol (MCP)](/protocols/mcp/), whose tools Arc can use. The W3C Web of Things Thing Description and Discovery Recommendations it builds on are separate W3C specifications.",
   "adoption": {
    "level": "observed",
    "by": "Deutsche Telekom, Frag Magenta and Eclipse LMOS Kotlin SDK",
    "probe_run": null
   },
   "aliases": [
    "Eclipse LMOS",
    "LMOS Protocol",
    "Language Model Operating System",
    "Language Models Operating System",
    "Large Model Operating System"
   ],
   "analog": "UPnP / W3C Web of Things device discovery, adapted to AI agents",
   "collisions": [],
   "discovery": {
    "mechanism": "No LMOS-defined path. The Discovery page says \"This can be done through various introduction mechanisms like mDNS, DNS-SD, or well-known URLs.\", without naming a path. W3C WoT Discovery, which LMOS builds on, says \"it MUST register its own Thing Description into the following path: /.well-known/wot\". On local networks: \"WoT things use a specific service type for DNS-SD: \"_wot._tcp\".\" The Kotlin SDK: \"The LMOS Kotlin SDK allows you to connect to a Web of Things-enabled agents by pointing to its well-known Thing Description (TD).\"",
    "path": "/.well-known/wot"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://eclipse.dev/lmos/docs/lmos_protocol/introduction/",
     "claim": "Eclipse LMOS project, *Introduction | Eclipse LMOS*, fetched 2026-10-30",
     "date": null,
     "quote": "LMOS Protocol simplifies the discovery, description, and interaction of agents and tools, while remaining / The primary goal of the LMOS Protocol is to pave the way for an Internet of Agents (IoA) - an internet-scale multi-agent system where AI agents and tools from different organizations can be easily published, discovered, and interconnected, regardless of the technologies they are built on. / By defining standardized metadata, metadata propagation, metadata discovery, data models, interaction patterns and a communication protocol, the LMOS Protocol provides: / The LMOS Protocol is published by the Eclipse LMOS project. It is not a W3C Standard nor is it on the W3C Standards Track. / However, we plan to initiate the formal W3C process once the protocol reaches a mature state. Please note that this protocol is work in progress and contains empty sections. / Namespace URI: https://eclipse.dev/lmos/protocol/v1 / https://eclipse.dev/lmos/img/lmos.png https://eclipse.dev/lmos/img/lmos.png https://eclipse.dev/lmos/docs/lmos_protocol/introduction/ en en en current docs-default-current current docs-default-current / HTTP to MQTT or WebSocket) or media types (e.g., from JSON to CBOR) without / By leveraging the Thing Description (TD) abstraction from the WoT, the LMOS Protocol simplifies / To guarantee authenticity and integrity, the description document must be signed using a W3C Decentralized Identifier (DID). / This enables developers to switch communication standards (e.g., from HTTP to MQTT or WebSocket) or media types (e.g., from JSON to CBOR) without requiring changes to application logic. / structured three-layer protocol architecture, as illustrated below: Application Protocol Layer This layer defines discovery mechanisms, an agent and tool description format, a semantic data model and a websocket subprotocol. It standardizes agent and tool metadata for interoperability and supports dynamic discovery across local and global networks. Transport Protocol Layer This layer defines how agents negotiate and establish communication protocols for exchanging data and messages. By supporting multiple transport protocols agents can dynamically select and adapt the best protocol for each interaction, ensuring flexibility and reliability across networks. Identity and Security Layer This layer establishes standards for secure identity authentication and encrypted communication between agents, especially in cross-platform environments. It includes a decentralized identity authentication scheme based on W3C DID, but also supports OAuth2, Bearer, and other security schemes.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://eclipse.dev/lmos/about_us/",
     "claim": "Arun Joseph (Eclipse LMOS), *About us | Eclipse LMOS*, fetched 2026-10-30",
     "date": null,
     "quote": "I joined Deutsche Telekom's AI task force … marking the beginning of the Large Model Operating System (LMOS) in October 2023 / It was around the time that I joined Deutsche Telekom's AI task force to explore how LLMs could be applied to customer sales and service",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://eclipse.dev/lmos/docs/lmos_protocol/agent_description/",
     "claim": "Eclipse LMOS project, *Agent Description Format | Eclipse LMOS*, fetched 2026-10-30",
     "date": null,
     "quote": "The LMOS Agent Description Format builds on top of the Thing Description (TD) format from the Web of Things (WoT) specification and extends it by specifying an additional schema tailored to the needs of intelligent agents. This allows agents to express their capabilities and services in a consistent, machine-readable way. TDs are usually encoded in JSON format that supports JSON-LD. / These additional properties are defined within the \"lmos\" namespace, ensuring they are clearly differentiated from standard WoT terms. / Full example: { \"@context\": [ \"https://www.w3.org/2022/wot/td/v1.1\", { \"lmos\": \"https://eclipse.dev/lmos/protocol/v1\", } ], \"id\": \"urn:uuid:6f1d3a7a-1f97-4e6b-b45f-f3c2e1c84c77\", \"title\": \"WeatherAgent\", \"@type\": \"lmos:Agent\" / @type Agent Mandatory string Example: { \"@context\": [ \"https://www.w3.org/2022/wot/td/v1.1\", { \"lmos\": \"https://eclipse.dev/lmos/protocol/v1\", } ], / A standardized format is essential for describing the capabilities and metadata of intelligent agents. This specification should offer an appropriate level of abstraction to ensure interoperability across a wide range of agent platforms and domains. Agent metadata is essential for several reasons: Discovery: It allows agents to find each other based on capabilities, making it easier to assemble multi-agent systems for complex tasks. Interoperability: By specifying input/output formats and API endpoints, metadata ensures that agents can communicate effectively. Version information: Version information aids in managing updates and ensuring compatibility between different agent versions. Security: Metadata about authentication and encryption capabilities helps maintain a secure multi-agent environment. Autonomy: With comprehensive metadata, agents can make informed decisions about which other agents to interact with, enhancing the system's autonomy.",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://projects.eclipse.org/projects/technology.lmos/governance",
     "claim": "Eclipse Foundation, *Eclipse LMOS governance*, Creation Review 2024-12-04; 2026.09 Progress Review 2026-09-23",
     "date": null,
     "quote": "2026.09 Progress Review 2026-09-23 2025.09 Progress Review 2025-09-17 Creation Review 2024-12-04 / 2026.09 Progress Review 2026-09-23 2025.09 Progress Review 2025-09-17 Creation Review 2024-12-04 Project Links Website",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://projects.eclipse.org/projects/technology.lmos",
     "claim": "Eclipse Foundation, *Eclipse LMOS project*, fetched 2026-10-30",
     "date": null,
     "quote": "State Incubating Industry Collaborations Eclipse Software Defined Vehicle Licenses Apache Software License 2.0 / foundation, projects, eclipse foundation projects Maria Teresa Delgado projects.eclipse.org Project https://projects.eclipse.org/projects/technology.lmos Eclipse LMOS The / Licenses Apache Software License 2.0",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://projects.eclipse.org/projects/technology.lmos/who",
     "claim": "Eclipse Foundation, *Eclipse LMOS who's involved*, fetched 2026-10-30",
     "date": null,
     "quote": "Project Leads Arun joseph Jasbir Singh amant kumar Patrick Whelan Kai Kreuzer",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://projects.eclipse.org/proposals/eclipse-lmos",
     "claim": "Kai Kreuzer (Eclipse project proposal), *Eclipse LMOS project proposal*, 31 October 2024",
     "date": null,
     "quote": "Leads Kai Kreuzer Arun Joseph Robert Winkler Jasbir Singh Patrick Whelan amant kumar Committers / Deutsche Telekom. All code is licensed under the Apache 2.0 license. Only some non-code",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://newsroom.eclipse.org/news/announcements/eclipse-foundation-launches-sovereign-ai-foundation",
     "claim": "Eclipse Foundation, *Eclipse Foundation Launches the Sovereign AI Foundation*, 30 September 2026",
     "date": null,
     "quote": "Eclipse Foundation Launches the Sovereign AI Foundation | Eclipse News, Eclipse in the News,",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://github.com/eclipse-lmos/lmos-kotlin-sdk",
     "claim": "eclipse-lmos, *eclipse-lmos/lmos-kotlin-sdk*, fetched 2026-10-30",
     "date": null,
     "quote": "implementation(\\u0026quot;org.eclipse.lmos:lmos-kotlin-sdk-client:0.1.0-SNAPSHOT\\u0026quot;)\\n}\\\"\\u003e\\u003cpre\\u003edependencies {\\n implementation(\\u003cspan class=\\\"pl-s\\\"\\u003e\\u003cspan / The LMOS Kotlin SDK allows you to connect to a Web of Things-enabled agents by pointing to its well-known Thing Description (TD).",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://github.com/eclipse-lmos/arc/releases",
     "claim": "eclipse-lmos (GitHub), *eclipse-lmos/arc releases*, fetched 2026-10-30",
     "date": null,
     "quote": "\"2026-09-02T06:36:22Z\", \"updated_at\": \"2026-09-02T06:37:53Z\", \"published_at\": \"2026-09-02T06:37:53Z\", \"assets\": [ ], \"tarball_url\": \"https://api.github.com/repos/eclipse-lmos/arc/tarball/0.234.0\",",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://www.w3.org/TR/wot-thing-description11/",
     "claim": "W3C, *Web of Things (WoT) Thing Description 1.1*, fetched 2026-10-30",
     "date": null,
     "quote": "{\"href\": \"coaps://mylamp.example.com/oh\", \"cov:methodName\": \"GET\", \"subprotocol\": \"cov:observe\" } } } } {\"@context\": \"https://www.w3.org/2022/wot/td/v1.1\", {\"cov\": \"http://www.example.org/coap-binding#\"",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://eclipse.dev/lmos/docs/lmos_protocol/discovery/",
     "claim": "Eclipse LMOS project, *Discovery | Eclipse LMOS*, fetched 2026-10-30",
     "date": null,
     "quote": "https://eclipse.dev/lmos/docs/lmos_protocol/discovery/ en en en current docs-default-current current docs-default-current Discovery Eclipse LMOS Mechanisms for agent / W3C Web of Things (WoT) Discovery describes how things can register themselves in a central directory, known as a Thing Description Directory (TDD), through a process that involves several steps: / Centralized Registry: Agents can publish their metadata to a registry, which serves as a repository for agent information. Local Network Discovery: For local networks, protocols like mDNS (Multicast DNS) can be used to propagate agent metadata and enable discovery, Decentralized Networks: In a decentralized networks, agents can propagate metadata without relying on centralized authorities.",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://eclipse.dev/lmos/docs/lmos_protocol/registry/",
     "claim": "Eclipse LMOS project, *Registry | Eclipse LMOS*, fetched 2026-10-30",
     "date": null,
     "quote": "Can perform validation of submitted TDs against the W3C WoT Thing Description specification. / However, it must not be a centralized registry. Instead, it can utilize decentralized protocols such as peer-to-peer (P2P) networks or distributed hash tables (DHT)",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://www.w3.org/TR/wot-discovery/",
     "claim": "W3C, *Web of Things (WoT) Discovery*, fetched 2026-10-30",
     "date": null,
     "quote": "<meta name=\"generator\" content=\"ReSpec 34.2.2\">",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://aaif.io/blog/a2a-joins-aaif",
     "claim": "Agentic AI Foundation, *A2A joins AAIF's open agentic stack*, published 2026-08-17; modified 2026-09-24",
     "date": null,
     "quote": "A2A v1.0, the first stable specification, shipped in March 2026.",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Current : the current protocol version, which is ready for use and may continue to receive backwards compatible changes.",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://github.com/agntcy/oasf/releases",
     "claim": "AGNTCY, *agntcy/oasf releases*, checked 2026-10-31",
     "date": null,
     "quote": "\"html_url\": \"https://github.com/agntcy/oasf/releases/tag/v1.1.0\", \"id\": 352159727, \"author\": { \"login\": \"github-actions[bot]\", \"id\": 41898282, \"node_id\": \"MDM6Qm90NDE4OTgyODI=\", \"avatar_url\":",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/README.md",
     "claim": "Agent Network Protocol community, *Agent Network Protocol (ANP) README*, checked 2026-10-30",
     "date": null,
     "quote": "the AgentConnect repository: - https://github.com/agent-network-protocol/AgentConnect AgentConnect focuses on practical SDK support for did:wba, authentication,",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://datatracker.ietf.org/doc/draft-narajala-courtney-ansv2/",
     "claim": "Scott Courtney, Vineeth Sai Narajala, Ken Huang, Idan Habler, and Akram Sheriff, *draft-narajala-courtney-ansv2 — Agent Name Service v2 (ANS): A Domain-Anchored Identity Layer for Autonomous AI Agents (IETF Datatracker; HTML overview snapshot at -01 'Trust Layer')*, draft-narajala-courtney-ansv2-02 posted 2026-10-26 (HTML overview snapshot 2026-10-15)",
     "date": null,
     "quote": "Document Type Active Internet-Draft (individual) Authors Scott Courtney, Vineeth Sai Narajala, Ken Huang, Idan Habler, Akram Sheriff Last updated 2026-10-26 Replaces draft-narajala-ans RFC stream (None) Intended RFC status (None)",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://newsroom.eclipse.org/news/announcements/eclipse-lmos-redefines-agentic-ai-industry%E2%80%99s-first-open-agent-definition",
     "claim": "Eclipse Foundation, *Eclipse LMOS Redefines Agentic AI with the Agent Definition Language (ADL)*, 28 October 2025",
     "date": null,
     "quote": "At Deutsche Telekom, Eclipse LMOS powers the award-winning Frag Magenta OneBOT assistant and other customer-facing AI systems. This deployment, one of Europe's largest multi-agent enterprise deployments, has processed millions of service and sales interactions across several countries, showcasing LMOS's enterprise-grade scalability and reliability in production environments.",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://eclipse.dev/lmos/blog/LMOS-Accelerated-Agent-Dev/",
     "claim": "Eclipse LMOS, *LMOS - Accelerated Agent Development*, fetched 2026-10-30",
     "date": null,
     "quote": "LMOS platform has been operational since 2023, helping the chatbot provide round-the-clock assistance on various topics, including contract inquiries, billing issues, and technical support through the deployed ARC agents.",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://lists.w3.org/Archives/Public/public-webagents/2025Mar/0006.html",
     "claim": "Robert Winkler (Deutsche Telekom), *AW: WG - Agent-to-Agent LLM Communication Standardization*, 2025-03-06",
     "date": "2025-03-06",
     "quote": "We formulate a Agent/Tool Description Format and Capability Model based on Web of Things and it's already running in scale at DT.",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://www.telekom.com/en/newsroom/latest-updates/media-information/2026/10/deutsche-telekom-boosts-growth-efficiency-and-quality-through-t",
     "claim": "Deutsche Telekom, *Deutsche Telekom boosts growth, efficiency and quality through the use of AI*, fetched 2026-10-30",
     "date": null,
     "quote": "The chatbot \"Frag Magenta\" handled approximately 2.6 million customer service calls in the first half of 2026 alone.",
     "ref": 23
    }
   ],
   "form": "document-format",
   "governance": "Eclipse Foundation, as an Eclipse Technology project. \"State Incubating\". Reviews: \"Creation Review 2024-12-04\"; \"2026.09 Progress Review 2026-09-23\". \"Project Leads Arun joseph Jasbir Singh amant kumar Patrick Whelan Kai Kreuzer\". Robert Winkler, who presented LMOS to W3C groups, is listed under \"Historical Committers Robert Winkler\"",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "added from arXiv 2504.16736 survey comparison, verified against eclipse.dev/lmos/, eclipse.dev/lmos/docs/lmos_protocol/introduction/, github.com/eclipse-lmos"
    },
    {
     "date": "2026-10-29",
     "note": "Primary-source verification across 32 primary Eclipse, W3C, Deutsche Telekom, GitHub, and press sources"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "lmos",
   "implementation": "shipping",
   "last_verified": "2026-10-31",
   "name": "Eclipse LMOS (Language Model Operating System)",
   "native_status": "Protocol: \"Please note that this protocol is work in progress and contains empty sections.\" Platform: \"Eclipse LMOS Platform: An open, vendor-neutral orchestration layer for agent lifecycle management, discovery, semantic routing, and observability, built on the CNCF stack and currently in Alpha.\" Project: \"State Incubating\"",
   "origin": {
    "date": "2023-10",
    "org": "Deutsche Telekom & Eclipse Foundation"
   },
   "part_of": null,
   "parties": [
    "agent-agent",
    "agent-site"
   ],
   "phase": "draft",
   "probe": {
    "method": "GET",
    "on_absent": "No response, or a WoT Thing Description without the LMOS namespace: this origin either doesn't participate in LMOS or (more likely for most origins) simply predates/ignores the still-draft protocol; the LMOS spec itself does not yet fix a single discovery path, so absence here is weak evidence.",
    "parse": "A JSON-LD document whose @context or @type references the LMOS namespace (https://eclipse.dev/lmos/protocol/v1) confirms an LMOS-described Thing; this well-known path is the W3C WoT discovery convention LMOS explicitly builds on, not yet a path LMOS itself mandates.",
    "path": "{origin}/.well-known/wot-thing-description"
   },
   "question": "How does an agent or tool from one organization describe itself and get discovered by agents from another organization, across network boundaries?",
   "scope": "general",
   "spec_url": "https://eclipse.dev/lmos/docs/lmos_protocol/introduction/",
   "step": "discover",
   "summary_md": "The primary goal of the LMOS Protocol (Language Model Operating System Protocol) is to pave the way for an Internet of Agents (IoA), an internet-scale multi-agent system where AI agents and tools from different organizations can be published, discovered, and interconnected, regardless of the technologies they are built on. The protocol defines standardized metadata, metadata propagation, metadata discovery, data models, interaction patterns, and a communication protocol. Arun Joseph's open letter dates the project's origin to October 2023 after he joined Deutsche Telekom's AI task force (where the open letter expands the acronym as \"Large Model Operating System,\" while the specification and Eclipse project page title it Language Model Operating System). The LMOS Protocol is published by the Eclipse LMOS project. It is not a W3C Standard nor is it on the W3C Standards Track. The LMOS Agent Description Format builds on top of the Thing Description (TD) format from the Web of Things (WoT) specification and extends it with an additional schema for intelligent agents. Thing Descriptions are usually encoded in JSON that supports JSON-LD. LMOS-specific properties are defined in the `lmos` namespace so they stay distinct from standard WoT terms. The full example is an `lmos:Agent` titled `WeatherAgent`, and its `@context` includes `https://www.w3.org/2022/wot/td/v1.1` together with `https://eclipse.dev/lmos/protocol/v1`. The introduction says the formal W3C process is planned once the protocol reaches a mature state, and that this protocol is work in progress and contains empty sections. The vocabulary namespace URI is `https://eclipse.dev/lmos/protocol/v1`. The governance page records a Creation Review on `2024-12-04` and a 2026.09 Progress Review on `2026-09-23`. The project page lists the state as Incubating and names the Apache Software License 2.0.",
   "track": "community",
   "version": {
    "date": "2026-09-02",
    "label": "Namespace v1 (Arc 0.234.0; LMOS Runtime 0.32.0)"
   },
   "watch": [
    {
     "type": "page",
     "url": "https://eclipse.dev/lmos/docs/lmos_protocol/introduction/",
     "selector": "main",
     "cadence": "weekly"
    },
    {
     "type": "github",
     "repo": "eclipse-lmos/arc",
     "mode": "release"
    }
   ],
   "use_cases": [
    "describe-agent-capabilities",
    "discover-my-api",
    "agent-to-agent-messaging",
    "prove-agent-identity"
   ],
   "audience": [
    "agent-builder",
    "platform",
    "standards-body"
   ],
   "pairs_with": [
    "a2a",
    "mcp",
    "oasf",
    "anp",
    "ans"
   ],
   "prerequisites": [],
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "harnesses_rpc_ui",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-10-31",
   "v05_hatnote_html_md": "This page is about Eclipse LMOS, the Eclipse Foundation open-source project that started at Deutsche Telekom, and its LMOS Protocol for describing, discovering and connecting agents on top of the W3C Web of Things. The project's Agent Definition Language (ADL) is covered here as one of its components. It is not the [Agent2Agent Protocol (A2A)](/protocols/a2a/), whose agent cards the LMOS Arc framework can publish, and not the [Model Context Protocol (MCP)](/protocols/mcp/), whose tools Arc can use. The W3C Web of Things Thing Description and Discovery Recommendations it builds on are separate W3C specifications. [1]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "The primary goal of the LMOS Protocol (Language Model Operating System Protocol) is to pave the way for an Internet of Agents (IoA), an internet-scale multi-agent system where AI agents and tools from different organizations can be published, discovered, and interconnected, regardless of the technologies they are built on. The protocol defines standardized metadata, metadata propagation, metadata discovery, data models, interaction patterns, and a communication protocol. [1] Arun Joseph's open letter dates the project's origin to October 2023 after he joined Deutsche Telekom's AI task force (where the open letter expands the acronym as \"Large Model Operating System,\" while the specification and Eclipse project page title it Language Model Operating System). The LMOS Protocol is published by the Eclipse LMOS project. It is not a W3C Standard nor is it on the W3C Standards Track. [1][2] The LMOS Agent Description Format builds on top of the Thing Description (TD) format from the Web of Things (WoT) specification and extends it with an additional schema for intelligent agents. Thing Descriptions are usually encoded in JSON that supports JSON-LD. [3] LMOS-specific properties are defined in the `lmos` namespace so they stay distinct from standard WoT terms. The full example is an `lmos:Agent` titled `WeatherAgent`, and its `@context` includes `https://www.w3.org/2022/wot/td/v1.1` together with `https://eclipse.dev/lmos/protocol/v1`. [3] The introduction says the formal W3C process is planned once the protocol reaches a mature state, and that this protocol is work in progress and contains empty sections. The vocabulary namespace URI is `https://eclipse.dev/lmos/protocol/v1`. [1] The governance page records a Creation Review on `2024-12-04` and a 2026.09 Progress Review on `2026-09-23`. The project page lists the state as Incubating and names the Apache Software License 2.0. [4][5]",
   "v05_identity_sentence_md": "The primary goal of the LMOS Protocol (Language Model Operating System Protocol) is to pave the way for an Internet of Agents (IoA), an internet-scale multi-agent system where AI agents and tools from different organizations can be published, discovered, and interconnected, regardless of the technologies they are built on. The protocol defines standardized metadata, metadata propagation, metadata discovery, data models, interaction patterns, and a communication protocol. [1] Arun Joseph's open letter dates the project's origin to October 2023 after he joined Deutsche Telekom's AI task force (where the open letter expands the acronym as \"Large Model Operating System,\" while the specification and Eclipse project page title it Language Model Operating System). The LMOS Protocol is published by the Eclipse LMOS project. It is not a W3C Standard nor is it on the W3C Standards Track. [1][2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Discover](/category/discover/) (`discover`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "Deutsche Telekom AG (October 2023: Arun Joseph, Kai Kreuzer, Robert Winkler, Jasbir Singh, Patrick Whelan, Amant Kumar) [2][6][7]"
    },
    {
     "label": "Governed by",
     "value_md": "Eclipse Foundation (`technology.lmos`, Incubating; Creation `2024-12-04`, Progress `2026-09-23`); listed among \"Relevant projects\" in the Eclipse Sovereign AI Foundation launch (`2026-09-30`) [4][5][8]"
    },
    {
     "label": "Track",
     "value_md": "Open-source foundation incubating specification (Eclipse Foundation `technology.lmos`) [4][5]"
    },
    {
     "label": "Status",
     "value_md": "Protocol: \"Please note that this protocol is work in progress and contains empty sections.\" Platform: \"Eclipse LMOS Platform: An open, vendor-neutral orchestration layer for agent lifecycle management, discovery, semantic routing, and observability, built on the CNCF stack and currently in Alpha.\" Project: \"State Incubating\" [1][9][10]"
    },
    {
     "label": "Version",
     "value_md": "`https://eclipse.dev/lmos/protocol/v1` (draft); `arc` `0.234.0` (`2026-09-02`), `lmos-runtime` `0.32.0` (`2026-08-10`), `lmos-router` `0.29.0` (`2026-06-26`), `lmos-operator` `0.11.0` (`2026-06-26`), `lmos-kotlin-sdk-client` `0.1.0-SNAPSHOT` [1][9][10]"
    },
    {
     "label": "Wire format",
     "value_md": "JSON-LD W3C WoT TD (`https://www.w3.org/2022/wot/td/v1.1` + `lmos` namespace) over HTTP, WebSocket, MQTT, AMQP, or CoAP (JSON / CBOR) [1][3][11]"
    },
    {
     "label": "Specification",
     "value_md": "[Introduction](https://eclipse.dev/lmos/docs/lmos_protocol/introduction/) · [Agent Description](https://eclipse.dev/lmos/docs/lmos_protocol/agent_description/) · [Discovery](https://eclipse.dev/lmos/docs/lmos_protocol/discovery/) · [Registry](https://eclipse.dev/lmos/docs/lmos_protocol/registry/) · [W3C WoT TD 1.1](https://www.w3.org/TR/wot-thing-description11/) · [W3C WoT Discovery](https://www.w3.org/TR/wot-discovery/) [1][3][12]"
    },
    {
     "label": "Found at",
     "value_md": "mDNS, DNS-SD, or well-known URLs for W3C WoT Thing Description Directory (`TDD`) discovery, plus AT Protocol `PDR` / DHT registries [1][12][13]"
    },
    {
     "label": "Licence",
     "value_md": "Apache-2.0 (`CC-BY` / `CC0` for non-code docs) [5][7]"
    }
   ],
   "v05_problem_md": "A standardized format is essential for agent capabilities and metadata, at an abstraction that supports interoperability across platforms and domains. The page says that metadata is essential for discovery by capability, for input and output formats and API endpoints, for version information, for authentication and encryption, and for choosing other agents. [3] The description document must be signed using a W3C Decentralized Identifier (DID) to guarantee authenticity and integrity. Developers can switch communication standards, for example from HTTP to MQTT or WebSocket, or media types from JSON to CBOR, without requiring changes to application logic. [1] The Application Protocol Layer defines discovery, the description format, a semantic data model, and a websocket subprotocol. The Transport Protocol Layer defines how agents negotiate communication protocols. The Identity and Security Layer includes W3C DID and also supports OAuth2, Bearer, and other security schemes. [1] A registry must not be a centralized registry. Instead, it can utilize peer-to-peer (P2P) networks or distributed hash tables (DHT). [13] Agents can publish metadata to a registry, can use mDNS on a local network, or can propagate metadata without a centralized authority. [12]",
   "v05_mechanism_delta_md": "The description document must be signed using a W3C Decentralized Identifier (DID) to guarantee authenticity and integrity. Developers can switch communication standards, for example from HTTP to MQTT or WebSocket, or media types from JSON to CBOR, without requiring changes to application logic. [1] The Application Protocol Layer defines discovery, the description format, a semantic data model, and a websocket subprotocol. The Transport Protocol Layer defines how agents negotiate communication protocols. The Identity and Security Layer includes W3C DID and also supports OAuth2, Bearer, and other security schemes. [1]",
   "v05_scope_boundary_md": "A registry must not be a centralized registry. Instead, it can utilize peer-to-peer (P2P) networks or distributed hash tables (DHT). [13] Agents can publish metadata to a registry, can use mDNS on a local network, or can propagate metadata without a centralized authority. [12]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "Web of Things (WoT) Discovery",
      "spec_or_rfc": "W3C WoT Discovery",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "LMOS publishes a DID-signed agent description based on the W3C Web of Things Thing Description, using mDNS, DNS-SD, or well-known URLs for W3C WoT Thing Description Directory (TDD) discovery alongside agent registries. [1][14]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "a2a",
      "target_name": "Agent2Agent Protocol (A2A)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "LMOS publishes a DID-signed Web of Things agent description discovered via mDNS, DNS-SD, or well-known URLs and W3C WoT Thing Description Directories, while A2A publishes an Agent Card at /.well-known/agent-card.json and delegates tasks over JSON-RPC 2.0, gRPC, or HTTP+JSON. [1][15]"
     },
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "LMOS is a W3C WoT agent description and directory discovery layer (via mDNS, DNS-SD, or well-known URLs), while MCP is the JSON-RPC tool session a client opens after it already has a server endpoint. [1][16]"
     },
     {
      "target_id": "oasf",
      "target_name": "Open Agentic Schema Framework",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "LMOS records are W3C WoT Thing Descriptions under the LMOS v1 namespace discovered via mDNS, DNS-SD, or well-known URLs and TDDs, while OASF is a versioned skill, domain, and module schema with no discovery path. [1][17]"
     },
     {
      "target_id": "anp",
      "target_name": "Agent Network Protocol",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "LMOS uses a DID-signed Thing Description discovered via mDNS, DNS-SD, or well-known URLs and W3C WoT TDDs, while ANP uses /.well-known/agent-descriptions, RFC 9421 Signature-Input and Signature in ANP-02, and did:wba agents. [1][18]"
     },
     {
      "target_id": "ans",
      "target_name": "Agent Name Service v2 (ANS)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "ANS names agents with DNS records, while LMOS retrieves W3C WoT Thing Descriptions over HTTP via TDDs, mDNS, DNS-SD, or well-known URLs. [1][19]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (2 probed or cited examples; non-exhaustive).",
    "side_a": {
     "visible": true,
     "heading": "Servers, repos & skill indexes",
     "col4_header": "Transport & Scope",
     "note_md": null,
     "rows": [
      {
       "actor": "Deutsche Telekom, Frag Magenta",
       "role": "Agent runtime / Server",
       "status": "Supported",
       "status_display": "Supported · as of 2025-10-28",
       "col4_md": "Eclipse (2025-10-28 and 2025-11) says Frag Magenta OneBOT runs on the LMOS platform and has handled millions of customer service and sales interactions across countries. The project blog (2025-03-06) says the platform has been operational since 2023 through deployed ARC agents for contract, billing, and technical support. On the W3C WebAgents list the same day, Robert Winkler wrote that Deutsche Telekom's Agent/Tool Description Format and capability model, based on Web of Things, is already running at scale. Deutsche Telekom's own 2026-10-05 release counts about 2.6 million Frag Magenta calls in the first half of 2026 and does not name LMOS.",
       "source_md": "[Eclipse announcement, 2025-10-28](https://newsroom.eclipse.org/news/announcements/eclipse-lmos-redefines-agentic-ai-industry%E2%80%99s-first-open-agent-definition) [20] · [LMOS project blog, 2025-03-06](https://eclipse.dev/lmos/blog/LMOS-Accelerated-Agent-Dev/) [21] · [W3C WebAgents list, 2025-03-06](https://lists.w3.org/Archives/Public/public-webagents/2025Mar/0006.html) [22] · [Deutsche Telekom, 2026-10-05](https://www.telekom.com/en/newsroom/latest-updates/media-information/2026/10/deutsche-telekom-boosts-growth-efficiency-and-quality-through-t) [23]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "IDEs, hosts & coding agents",
     "col4_header": "Transport & Scope",
     "note_md": null,
     "rows": [
      {
       "actor": "Eclipse LMOS Kotlin SDK",
       "role": "Client SDK / CLI",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-29",
       "col4_md": "The lmos-kotlin-sdk README says the SDK connects to a Web of Things-enabled agent by pointing at its well-known Thing Description. The published client coordinate on that page is lmos-kotlin-sdk-client:0.1.0-SNAPSHOT. Repository eclipse-lmos/lmos-kotlin-sdk, checked 2026-10-29.",
       "source_md": "[lmos-kotlin-sdk README](https://github.com/eclipse-lmos/lmos-kotlin-sdk) [9]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Discover protocols](/category/discover/)** — Category index for `discover` standards."
    }
   ],
   "v05_compiled_md": "---\nid: lmos\ntitle: \"Eclipse LMOS (Language Model Operating System)\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: discover\nform: document-format\nwire_archetype: harnesses_rpc_ui\nspec_url: https://eclipse.dev/lmos/docs/lmos_protocol/introduction/\nlast_checked: 2026-10-31\n---\n\n# Eclipse LMOS (Language Model Operating System)\n\n**Category:** [Discover](/category/discover/) (`discover`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-10-31\n\n> *This page is about Eclipse LMOS, the Eclipse Foundation open-source project that started at Deutsche Telekom, and its LMOS Protocol for describing, discovering and connecting agents on top of the W3C Web of Things. The project's Agent Definition Language (ADL) is covered here as one of its components. It is not the [Agent2Agent Protocol (A2A)](/protocols/a2a/), whose agent cards the LMOS Arc framework can publish, and not the [Model Context Protocol (MCP)](/protocols/mcp/), whose tools Arc can use. The W3C Web of Things Thing Description and Discovery Recommendations it builds on are separate W3C specifications. [1]*\n\nThe primary goal of the LMOS Protocol (Language Model Operating System Protocol) is to pave the way for an Internet of Agents (IoA), an internet-scale multi-agent system where AI agents and tools from different organizations can be published, discovered, and interconnected, regardless of the technologies they are built on. The protocol defines standardized metadata, metadata propagation, metadata discovery, data models, interaction patterns, and a communication protocol. [1] Arun Joseph's open letter dates the project's origin to October 2023 after he joined Deutsche Telekom's AI task force (where the open letter expands the acronym as \"Large Model Operating System,\" while the specification and Eclipse project page title it Language Model Operating System). The LMOS Protocol is published by the Eclipse LMOS project. It is not a W3C Standard nor is it on the W3C Standards Track. [1][2] The LMOS Agent Description Format builds on top of the Thing Description (TD) format from the Web of Things (WoT) specification and extends it with an additional schema for intelligent agents. Thing Descriptions are usually encoded in JSON that supports JSON-LD. [3] LMOS-specific properties are defined in the `lmos` namespace so they stay distinct from standard WoT terms. The full example is an `lmos:Agent` titled `WeatherAgent`, and its `@context` includes `https://www.w3.org/2022/wot/td/v1.1` together with `https://eclipse.dev/lmos/protocol/v1`. [3] The introduction says the formal W3C process is planned once the protocol reaches a mature state, and that this protocol is work in progress and contains empty sections. The vocabulary namespace URI is `https://eclipse.dev/lmos/protocol/v1`. [1] The governance page records a Creation Review on `2024-12-04` and a 2026.09 Progress Review on `2026-09-23`. The project page lists the state as Incubating and names the Apache Software License 2.0. [4][5]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Discover](/category/discover/) (`discover`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | Deutsche Telekom AG (October 2023: Arun Joseph, Kai Kreuzer, Robert Winkler, Jasbir Singh, Patrick Whelan, Amant Kumar) [2][6][7] |\n| **Governed by** | Eclipse Foundation (`technology.lmos`, Incubating; Creation `2024-12-04`, Progress `2026-09-23`); listed among \"Relevant projects\" in the Eclipse Sovereign AI Foundation launch (`2026-09-30`) [4][5][8] |\n| **Track** | Open-source foundation incubating specification (Eclipse Foundation `technology.lmos`) [4][5] |\n| **Status** | Protocol: \"Please note that this protocol is work in progress and contains empty sections.\" Platform: \"Eclipse LMOS Platform: An open, vendor-neutral orchestration layer for agent lifecycle management, discovery, semantic routing, and observability, built on the CNCF stack and currently in Alpha.\" Project: \"State Incubating\" [1][9][10] |\n| **Version** | `https://eclipse.dev/lmos/protocol/v1` (draft); `arc` `0.234.0` (`2026-09-02`), `lmos-runtime` `0.32.0` (`2026-08-10`), `lmos-router` `0.29.0` (`2026-06-26`), `lmos-operator` `0.11.0` (`2026-06-26`), `lmos-kotlin-sdk-client` `0.1.0-SNAPSHOT` [1][9][10] |\n| **Wire format** | JSON-LD W3C WoT TD (`https://www.w3.org/2022/wot/td/v1.1` + `lmos` namespace) over HTTP, WebSocket, MQTT, AMQP, or CoAP (JSON / CBOR) [1][3][11] |\n| **Specification** | [Introduction](https://eclipse.dev/lmos/docs/lmos_protocol/introduction/) · [Agent Description](https://eclipse.dev/lmos/docs/lmos_protocol/agent_description/) · [Discovery](https://eclipse.dev/lmos/docs/lmos_protocol/discovery/) · [Registry](https://eclipse.dev/lmos/docs/lmos_protocol/registry/) · [W3C WoT TD 1.1](https://www.w3.org/TR/wot-thing-description11/) · [W3C WoT Discovery](https://www.w3.org/TR/wot-discovery/) [1][3][12] |\n| **Found at** | mDNS, DNS-SD, or well-known URLs for W3C WoT Thing Description Directory (`TDD`) discovery, plus AT Protocol `PDR` / DHT registries [1][12][13] |\n| **Licence** | Apache-2.0 (`CC-BY` / `CC0` for non-code docs) [5][7] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [Adoption and ecosystem](#adoption-and-ecosystem)\n4. [See also](#see-also)\n5. [References](#references)\n\n---\n\n## Problem and scope\n\nA standardized format is essential for agent capabilities and metadata, at an abstraction that supports interoperability across platforms and domains. The page says that metadata is essential for discovery by capability, for input and output formats and API endpoints, for version information, for authentication and encryption, and for choosing other agents. [3] The description document must be signed using a W3C Decentralized Identifier (DID) to guarantee authenticity and integrity. Developers can switch communication standards, for example from HTTP to MQTT or WebSocket, or media types from JSON to CBOR, without requiring changes to application logic. [1] The Application Protocol Layer defines discovery, the description format, a semantic data model, and a websocket subprotocol. The Transport Protocol Layer defines how agents negotiate communication protocols. The Identity and Security Layer includes W3C DID and also supports OAuth2, Bearer, and other security schemes. [1] A registry must not be a centralized registry. Instead, it can utilize peer-to-peer (P2P) networks or distributed hash tables (DHT). [13] Agents can publish metadata to a registry, can use mDNS on a local network, or can propagate metadata without a centralized authority. [12]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **Web of Things (WoT) Discovery** | `W3C WoT Discovery` | Profiles classic standard | LMOS publishes a DID-signed agent description based on the W3C Web of Things Thing Description, using mDNS, DNS-SD, or well-known URLs for W3C WoT Thing Description Directory (TDD) discovery alongside agent registries. [1][14] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Agent2Agent Protocol (A2A)](/protocols/a2a/)** | Peer alternative | LMOS publishes a DID-signed Web of Things agent description discovered via mDNS, DNS-SD, or well-known URLs and W3C WoT Thing Description Directories, while A2A publishes an Agent Card at /.well-known/agent-card.json and delegates tasks over JSON-RPC 2.0, gRPC, or HTTP+JSON. [1][15] |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | LMOS is a W3C WoT agent description and directory discovery layer (via mDNS, DNS-SD, or well-known URLs), while MCP is the JSON-RPC tool session a client opens after it already has a server endpoint. [1][16] |\n| **[Open Agentic Schema Framework](/protocols/oasf/)** | Peer alternative | LMOS records are W3C WoT Thing Descriptions under the LMOS v1 namespace discovered via mDNS, DNS-SD, or well-known URLs and TDDs, while OASF is a versioned skill, domain, and module schema with no discovery path. [1][17] |\n| **[Agent Network Protocol](/protocols/anp/)** | Peer alternative | LMOS uses a DID-signed Thing Description discovered via mDNS, DNS-SD, or well-known URLs and W3C WoT TDDs, while ANP uses /.well-known/agent-descriptions, RFC 9421 Signature-Input and Signature in ANP-02, and did:wba agents. [1][18] |\n| **[Agent Name Service v2 (ANS)](/protocols/ans/)** | Complements | ANS names agents with DNS records, while LMOS retrieves W3C WoT Thing Descriptions over HTTP via TDDs, mDNS, DNS-SD, or well-known URLs. [1][19] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (2 probed or cited examples; non-exhaustive).*\n\n### Servers, repos & skill indexes\n\n| Actor | Role | Status | Transport & Scope | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Deutsche Telekom, Frag Magenta** | Agent runtime / Server | Supported · as of 2025-10-28 | Eclipse (2025-10-28 and 2025-11) says Frag Magenta OneBOT runs on the LMOS platform and has handled millions of customer service and sales interactions across countries. The project blog (2025-03-06) says the platform has been operational since 2023 through deployed ARC agents for contract, billing, and technical support. On the W3C WebAgents list the same day, Robert Winkler wrote that Deutsche Telekom's Agent/Tool Description Format and capability model, based on Web of Things, is already running at scale. Deutsche Telekom's own 2026-10-05 release counts about 2.6 million Frag Magenta calls in the first half of 2026 and does not name LMOS. | [Eclipse announcement, 2025-10-28](https://newsroom.eclipse.org/news/announcements/eclipse-lmos-redefines-agentic-ai-industry%E2%80%99s-first-open-agent-definition) [20] · [LMOS project blog, 2025-03-06](https://eclipse.dev/lmos/blog/LMOS-Accelerated-Agent-Dev/) [21] · [W3C WebAgents list, 2025-03-06](https://lists.w3.org/Archives/Public/public-webagents/2025Mar/0006.html) [22] · [Deutsche Telekom, 2026-10-05](https://www.telekom.com/en/newsroom/latest-updates/media-information/2026/10/deutsche-telekom-boosts-growth-efficiency-and-quality-through-t) [23] |\n\n### IDEs, hosts & coding agents\n\n| Actor | Role | Status | Transport & Scope | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Eclipse LMOS Kotlin SDK** | Client SDK / CLI | Supported · as of 2026-10-29 | The lmos-kotlin-sdk README says the SDK connects to a Web of Things-enabled agent by pointing at its well-known Thing Description. The published client coordinate on that page is lmos-kotlin-sdk-client:0.1.0-SNAPSHOT. Repository eclipse-lmos/lmos-kotlin-sdk, checked 2026-10-29. | [lmos-kotlin-sdk README](https://github.com/eclipse-lmos/lmos-kotlin-sdk) [9] |\n\n---\n\n## See also\n\n- **Category:** [Discover protocols](/category/discover/)\n\n---\n\n## References\n\n1. Eclipse LMOS project, *Introduction | Eclipse LMOS* (fetched 2026-10-30) — <https://eclipse.dev/lmos/docs/lmos_protocol/introduction/>\n2. Arun Joseph (Eclipse LMOS), *About us | Eclipse LMOS* (fetched 2026-10-30) — <https://eclipse.dev/lmos/about_us/>\n3. Eclipse LMOS project, *Agent Description Format | Eclipse LMOS* (fetched 2026-10-30) — <https://eclipse.dev/lmos/docs/lmos_protocol/agent_description/>\n4. Eclipse Foundation, *Eclipse LMOS governance* (Creation Review 2024-12-04; 2026.09 Progress Review 2026-09-23) — <https://projects.eclipse.org/projects/technology.lmos/governance>\n5. Eclipse Foundation, *Eclipse LMOS project* (fetched 2026-10-30) — <https://projects.eclipse.org/projects/technology.lmos>\n6. Eclipse Foundation, *Eclipse LMOS who's involved* (fetched 2026-10-30) — <https://projects.eclipse.org/projects/technology.lmos/who>\n7. Kai Kreuzer (Eclipse project proposal), *Eclipse LMOS project proposal* (31 October 2024) — <https://projects.eclipse.org/proposals/eclipse-lmos>\n8. Eclipse Foundation, *Eclipse Foundation Launches the Sovereign AI Foundation* (30 September 2026) — <https://newsroom.eclipse.org/news/announcements/eclipse-foundation-launches-sovereign-ai-foundation>\n9. eclipse-lmos, *eclipse-lmos/lmos-kotlin-sdk* (fetched 2026-10-30) — <https://github.com/eclipse-lmos/lmos-kotlin-sdk>\n10. eclipse-lmos (GitHub), *eclipse-lmos/arc releases* (fetched 2026-10-30) — <https://github.com/eclipse-lmos/arc/releases>\n11. W3C, *Web of Things (WoT) Thing Description 1.1* (fetched 2026-10-30) — <https://www.w3.org/TR/wot-thing-description11/>\n12. Eclipse LMOS project, *Discovery | Eclipse LMOS* (fetched 2026-10-30) — <https://eclipse.dev/lmos/docs/lmos_protocol/discovery/>\n13. Eclipse LMOS project, *Registry | Eclipse LMOS* (fetched 2026-10-30) — <https://eclipse.dev/lmos/docs/lmos_protocol/registry/>\n14. W3C, *Web of Things (WoT) Discovery* (fetched 2026-10-30) — <https://www.w3.org/TR/wot-discovery/>\n15. Agentic AI Foundation, *A2A joins AAIF's open agentic stack* (published 2026-08-17; modified 2026-09-24) — <https://aaif.io/blog/a2a-joins-aaif>\n16. Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation* (2026-07-28) — <https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning>\n17. AGNTCY, *agntcy/oasf releases* (checked 2026-10-31) — <https://github.com/agntcy/oasf/releases>\n18. Agent Network Protocol community, *Agent Network Protocol (ANP) README* (checked 2026-10-30) — <https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/README.md>\n19. Scott Courtney, Vineeth Sai Narajala, Ken Huang, Idan Habler, and Akram Sheriff, *draft-narajala-courtney-ansv2 — Agent Name Service v2 (ANS): A Domain-Anchored Identity Layer for Autonomous AI Agents (IETF Datatracker; HTML overview snapshot at -01 'Trust Layer')* (draft-narajala-courtney-ansv2-02 posted 2026-10-26 (HTML overview snapshot 2026-10-15)) — <https://datatracker.ietf.org/doc/draft-narajala-courtney-ansv2/>\n20. Eclipse Foundation, *Eclipse LMOS Redefines Agentic AI with the Agent Definition Language (ADL)* (28 October 2025) — <https://newsroom.eclipse.org/news/announcements/eclipse-lmos-redefines-agentic-ai-industry%E2%80%99s-first-open-agent-definition>\n21. Eclipse LMOS, *LMOS - Accelerated Agent Development* (fetched 2026-10-30) — <https://eclipse.dev/lmos/blog/LMOS-Accelerated-Agent-Dev/>\n22. Robert Winkler (Deutsche Telekom), *AW: WG - Agent-to-Agent LLM Communication Standardization* (2025-03-06) — <https://lists.w3.org/Archives/Public/public-webagents/2025Mar/0006.html>\n23. Deutsche Telekom, *Deutsche Telekom boosts growth, efficiency and quality through the use of AI* (fetched 2026-10-30) — <https://www.telekom.com/en/newsroom/latest-updates/media-information/2026/10/deutsche-telekom-boosts-growth-efficiency-and-quality-through-t>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "agent-connect-protocol",
   "hatnote_md": "This page is about the Agent Connect Protocol (ACP), the REST interface for invoking remote agents that the AGNTCY project (created by Outshift by Cisco) published in 2025 and has since deprecated in favour of the [Agent2Agent Protocol (A2A)](https://agenticweb.wiki/protocols/a2a/). IBM Research's [Agent Communication Protocol](https://agenticweb.wiki/protocols/agent-communication-protocol/) (ACP) is a separate protocol for the BeeAI platform that, as of 29 August 2025, is officially merging with A2A. Zed's [Agent Client Protocol](https://agenticweb.wiki/protocols/agent-client-protocol/) (ACP) is the protocol Zed created for third-party agents inside the editor. Stripe and OpenAI's [Agentic Commerce Protocol](https://agenticweb.wiki/protocols/agentic-commerce-protocol/) (ACP) is their open standard for programmatic commerce flows. All four are listed under [ACP](https://agenticweb.wiki/terms/acp/).",
   "name": "Agent Connect Protocol",
   "acronym": "ACP",
   "adoption": {
    "level": "observed",
    "by": "AGNTCY Agent Workflow Server, agntcy-acp Python client, agntcyacp.langgraph.ACPNode, agntcy-acp CLI, and agntcy-acp package index",
    "probe_run": null
   },
   "aliases": [
    "AConP",
    "ACP (AGNTCY)"
   ],
   "analog": "a REST API gateway for invoking a remote service",
   "collisions": [
    "Agent Communication Protocol (IBM Research / BeeAI, merged into A2A in August 2025)",
    "Agent Client Protocol (Zed, editor-to-coding-agent JSON-RPC protocol)",
    "Agentic Commerce Protocol (OpenAI and Stripe)"
   ],
   "discovery": {
    "mechanism": "Not at a fixed web location, because the specification names no server URL. Agents are listed with `POST /agents/search` under whatever base URL an ACP server uses, and each agent's descriptor is at `GET /agents/{agent_id}/descriptor` or in the `acp` extension of an OASF Agent Directory record",
    "path": "/agents/search"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://raw.githubusercontent.com/agntcy/acp-spec/main/README.md",
     "claim": "AGNTCY, *Agent Connect Protocol Specification*, fetched 2026-10-30",
     "date": null,
     "quote": "The Agent Connect Protocol defines a standard interface to invoke and configure remote agents over an API. / Agent Connect Protocol (ACP) proposed by the Agntcy Collective. ... standard interface to invoke and configure remote agents over an API. The protocol is specified in OpenAPI a REST-based schema specification. / This repo contains the specification of Agent Connect Protocol (ACP) proposed by the Agntcy Collective. / The protocol is specified in OpenAPI a REST-based schema specification. / See current ACP specification in JSON Format or browse its OpenAPI visualization / Distributed under Apache 2.0 License. See LICENSE for more information. Copyright AGNTCY Contributors",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://outshift.cisco.com/the-internet-of-agents/agntcy",
     "claim": "Outshift by Cisco, *AGNTCY | Internet of Agents*, launch date 2025-03-06; fetched 2026-10-30",
     "date": null,
     "quote": "AGNTCY was created by Outshift and is now a Linux Foundation project. / March 6, 2025",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://github.com/agntcy/acp-spec",
     "claim": "AGNTCY, *agntcy/acp-spec*, archived 2026-04-11",
     "date": null,
     "quote": "\"created_at\":\"2025-02-05T02:13:00Z\" / This repository was archived by the owner on Apr 11, 2026. It is now read-only. / \"full_name\":\"agntcy/acp-spec\" / \"spdx_id\":\"Apache-2.0\" / \"pushed_at\": \"2025-05-23T13:54:01Z\" / \"archived\": true / \"description\": \"Agent Connect Protocol Specification\"",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://schema.oasf.outshift.com/1.1.0/modules",
     "claim": "AGNTCY (Open Agentic Schema Framework), *OASF schema 1.1.0 modules*, fetched 2026-10-30",
     "date": null,
     "quote": "ACP is deprecated, please use A2A instead. / DEPRECATED since v0.8.0 ACP is deprecated, please use A2A instead. / Agent Connect Protocol manifest DEPRECATED since v0.8.0 ACP is deprecated, please use A2A instead. / DEPRECATED since v0.8.0 / Open Agentic Schema Framework / ACP Manifest … DEPRECATED since v0.8.0 ACP is deprecated, please use A2A instead.",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://lfaidata.foundation/communityblog/2025/08/29/acp-joins-forces-with-a2a-under-the-linux-foundations-lf-ai-data/",
     "claim": "Kate Blair (IBM Research) and Todd Segal (Google), *ACP Joins Forces with A2A*, published 2025-08-29",
     "date": null,
     "quote": "IBM Research launched the Agent Communication Protocol (ACP) in March 2025 to power its BeeAI Platform / August 29, 2025 / ACP is officially merging with the A2A under the Linux Foundation / The BeeAI platform, previously powered by ACP, now uses A2A",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://zed.dev/blog/bring-your-own-agent-to-zed",
     "claim": "Nathan Sobo (Zed), *Bring Your Own Agent to Zed — Featuring Gemini CLI*, published 2025-08-27",
     "date": null,
     "quote": "we created the Agent Client Protocol (ACP), and we've partnered with Google to integrate Gemini CLI as the initial reference implementation.",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://stripe.com/blog/developing-an-open-standard-for-agentic-commerce",
     "claim": "Jeff Weinstein and Steve Kaliski (Stripe), *Developing an open standard for agentic commerce*, published 2025-09-29",
     "date": null,
     "quote": "Agentic Commerce Protocol (ACP), a new open standard codeveloped by Stripe and OpenAI that enables programmatic commerce flows between buyers, AI agents, and businesses.",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://raw.githubusercontent.com/agntcy/acp-spec/main/openapi.json",
     "claim": "AGNTCY, *Agent Connect Protocol (OpenAPI 3.1.1, version 0.2.3)*, version 0.2.3; last commit 2025-05-23",
     "date": null,
     "quote": "\"openapi\": \"3.1.1\" ... \"version\": \"0.2.3\" ... \"/agents/search\" ... \"/agents/{agent_id}/descriptor\" ... text/event-stream / \"openapi\": \"3.1.1\", \"info\": { \"title\": \"Agent Connect Protocol\", \"version\": \"0.2.3\" } / \"application/json\" / text/event-stream / See Agent and AgentACPDescriptor models below for more info. / \"/agents/search\" / \"/agents/{agent_id}/descriptor\" / This object can be retrieved through this ACP interface or is found in the ACP extension of the agent record in the agent directory. / \"title\": \"Agent Connect Protocol\", \"version\": \"0.2.3\" / This means that a client of this server can start a Run on any of the Agents supported by this server. ... If supported by the involved agents, Run can be grouped in Threads. ... At the end of a Thread Run, the server keeps a thread state associated to the thread. ... The output of a Run can be a final result or an interrupt. / is found in the ACP extension of the agent record in the agent directory. / \"openapi\": \"3.1.1\" / \"title\": \"Agent Connect Protocol\" / \"version\": \"0.2.3\"",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://www.linuxfoundation.org/press/linux-foundation-welcomes-the-agntcy-project-to-standardize-open-multi-agent-system-infrastructure-and-break-down-ai-agent-silos",
     "claim": "The Linux Foundation, *Linux Foundation Welcomes the AGNTCY Project to Standardize Open Multi-Agent System Infrastructure and Break Down AI Agent Silos*, published 2025-07-29",
     "date": null,
     "quote": "Initially open sourced by Cisco in March 2025, with collaboration from LangChain and Galileo / SAN FRANCISCO, July 29, 2025 - The Linux Foundation, the nonprofit organization enabling mass innovation through open source, today welcomed the AGNTCY project / Cisco, Dell Technologies, Google Cloud, Oracle, and Red Hat have joined as formative members of the AGNTCY project under Linux Foundation governance. / today welcomed the AGNTCY project, an open source infrastructure that enables discovery, identity, messaging, and observability among AI agents from different vendors and frameworks.",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://galileo.ai/blog/agntcy-open-collective-multi-agent-standardization",
     "claim": "Yash Sheth and Conor Bronsdon (Galileo), *AGNTCY: Building the Future of Multi-Agentic Systems*, published 2025-03-05",
     "date": null,
     "quote": "Galileo, Langchain, and Cisco have come together to begin building towards a truly Multi-Agentic future, with Glean and LlamaIndex joining as supporting members.",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://raw.githubusercontent.com/agntcy/governance/main/working-groups/core/CHARTER.md",
     "claim": "AGNTCY, *AGNTCY Core Working Group Charter*, last commit 2026-05-28",
     "date": null,
     "quote": "The mission of the AGNTCY Core Working Group is to contribute and to maintain the core components and protocols developed within the AGNTCY organization. / Agent Connect Protocol (ACP)",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://github.com/agntcy/governance/commits/HEAD/working-groups/core/CHARTER.md",
     "claim": "AGNTCY, *agntcy/governance commits for working-groups/core/CHARTER.md*, latest commit 2026-05-28; fetched 2026-10-30",
     "date": null,
     "quote": "\"date\":\"2026-05-28T02:31:40Z\"",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://raw.githubusercontent.com/agntcy/docs/a23e3c757391e13b9834a59b26a0a33d8d70a328/docs/syntactic/connect.md",
     "claim": "AGNTCY, *Agent Connect Protocol (docs/syntactic/connect.md at a23e3c7)*, snapshot before removal; fetched 2026-10-30",
     "date": null,
     "quote": "This component is not currently under active development. / The current specification of the ACP can be found at https://spec.acp.agntcy.org/. / Such communication occurs within the MAS using internal mechanisms and APIs. ... While interaction between co-located agents implemented through the same MAS is trivial, it is harder in case the agents are not natively compatible or in case they run in different locations.",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://github.com/agntcy/governance/issues/30",
     "claim": "AGNTCY (Luca Muscariello), *Update AGP reference in the Core WG charter to SLIM (issue #30)*, commented 2025-08-21",
     "date": null,
     "quote": "muscariello commented on Aug 21, 2025 … Core WG needs to be updated also because we are deprecating ACP in favor of A2A. / muscariello commented on Aug 21, 2025 … we are deprecating ACP in favor of A2A. / we are deprecating ACP in favor of A2A / 2025-08-21T18:00:39Z",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://github.com/agntcy/acp-spec/commits",
     "claim": "AGNTCY, *agntcy/acp-spec commits*, latest commit 2025-05-23; fetched 2026-10-30",
     "date": null,
     "quote": "\"date\":\"2025-05-23T13:53:59Z\" / feat: Adding basic type support for input, output and config (#46)",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://github.com/agntcy/acp-spec/releases",
     "claim": "AGNTCY, *agntcy/acp-spec releases*, empty list; fetched 2026-10-30",
     "date": null,
     "quote": "[ ] date: Fri, 30 Oct 2026",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://github.com/agntcy/acp-spec/tags",
     "claim": "AGNTCY, *agntcy/acp-spec tags*, empty list; fetched 2026-10-30",
     "date": null,
     "quote": "[ ] date: Fri, 30 Oct 2026",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://pypi.org/pypi/agntcy-acp/json",
     "claim": "AGNTCY Internet of Agents Collective, *agntcy-acp (Agent Connect Protocol SDK)*, version 1.5.2 uploaded 2025-06-16",
     "date": null,
     "quote": "\"summary\":\"Agent Connect Protocol SDK\",\"version\":\"1.5.2\" / \"upload_time\":\"2025-06-16T13:21:17\" / \"summary\":\"Agent Connect Protocol SDK\" / \"version\":\"1.5.2\" / 2025-06-16T13:21:17",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://spec.acp.agntcy.org/",
     "claim": "AGNTCY, *Agent Connect Protocol (hosted OpenAPI viewer)*, last-modified 2025-05-23; fetched 2026-10-30",
     "date": null,
     "quote": "Agent Connect Protocol",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://raw.githubusercontent.com/agntcy/docs/a23e3c757391e13b9834a59b26a0a33d8d70a328/docs/agws/workflow-server.md",
     "claim": "AGNTCY, *Agent Workflow Server (docs/agws/workflow-server.md at a23e3c7)*, snapshot before removal; fetched 2026-10-30",
     "date": null,
     "quote": "could be optionally authenticated via a pre-defined API Key: - Set API_KEY environment variable with a pre-defined value to enable authentication - Include the same value in requests from clients via x-api-key header / LangGraph | >=0.2.60,<0.4.0 / LlamaIndex | >=0.12.0,<0.13.0 / x-api-key / This component is not currently under active development.",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://docs.agntcy.org/",
     "claim": "AGNTCY, *AGNTCY documentation*, fetched 2026-10-30",
     "date": null,
     "quote": "Open Agent Schema Framework (OASF) Extensible data model for describing agent attributes, skills, and capabilities",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://www.ietf.org/archive/id/draft-mp-agntcy-ads-03.txt",
     "claim": "L. Muscariello and R. Polic (Cisco), *Agent Directory Service (draft-mp-agntcy-ads-03)*, 2 November 2026",
     "date": null,
     "quote": "The Agent Directory Service (ADS) is a distributed directory service designed to store metadata for AI agent applications. / GET /v1/agents: list catalog entries",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://blogs.agntcy.org/technical/2026/06/17/ai-catalog-over-directory.html",
     "claim": "Ramiz Polic (AGNTCY), *ARD over Agent Directory: Interoperability by Design*, published 2026-06-17",
     "date": null,
     "quote": "Start local ADS node in the background.",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://raw.githubusercontent.com/agntcy/workflow-srv/main/README.md",
     "claim": "AGNTCY, *Agent Workflow Server*, fetched 2026-10-30",
     "date": null,
     "quote": "exposes them through Agent Connect Protocol (ACP), regardless of their underlying implementation.",
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://github.com/agntcy/workflow-srv",
     "claim": "AGNTCY, *agntcy/workflow-srv*, archived 2026-04-11",
     "date": null,
     "quote": "\"pushed_at\": \"2025-09-15T00:18:23Z\" / \"archived\": true / This repository was archived by the owner on Apr 11, 2026. It is now read-only.",
     "ref": 25
    },
    {
     "label": "[26]",
     "url": "https://raw.githubusercontent.com/agntcy/docs/a23e3c757391e13b9834a59b26a0a33d8d70a328/docs/syntactic/agntcy_acp_sdk.md",
     "claim": "AGNTCY, *Agntcy ACP Client*, snapshot at a23e3c7; fetched 2026-10-30",
     "date": null,
     "quote": "from agntcy_acp import AsyncACPClient, AsyncApiClient, ApiException / The SDK is current available in Python / agntcy_acp.langgraph.ACPNode / from langgraph.graph import END, START, StateGraph / generate-agent-models / generate-agent-oapi / validate-acp-descriptor / validate-acp-manifest / The Client SDK includes a CLI tool",
     "ref": 26
    },
    {
     "label": "[27]",
     "url": "https://github.com/agntcy/acp-sdk/releases",
     "claim": "AGNTCY, *agntcy/acp-sdk releases*, v1.5.2 published 2025-06-16",
     "date": null,
     "quote": "\"tag_name\": \"v1.5.2\" / \"published_at\": \"2025-06-16T13:20:38Z\"",
     "ref": 27
    },
    {
     "label": "[28]",
     "url": "https://github.com/agntcy/acp-sdk",
     "claim": "AGNTCY, *agntcy/acp-sdk*, archived 2026-04-11",
     "date": null,
     "quote": "\"archived\": true / \"pushed_at\": \"2025-06-16T13:20:38Z\" / This repository was archived by the owner on Apr 11, 2026. It is now read-only.",
     "ref": 28
    },
    {
     "label": "[29]",
     "url": "https://agntcy.github.io/acp-sdk/html/index.html",
     "claim": "AGNTCY, *agntcy-acp package API reference*, fetched 2026-11-06",
     "date": null,
     "quote": "The “Agent Connect Protocol SDK” is an open-source library designed to facilitate the adoption of the Agent Connect Protocol. / It offers tools for both client and server implementations / agntcy_acp.langgraph.acp_node module / agntcy_acp.langgraph.api_bridge module / agntcy_acp.langgraph.io_mapper module / agntcy_acp.manifest package",
     "ref": 29
    }
   ],
   "form": "endpoint",
   "governance": "AGNTCY, a Linux Foundation project since 2025-07-29 (formative members: Cisco, Dell Technologies, Google Cloud, Oracle, Red Hat; Apache-2.0, Copyright AGNTCY Contributors). The AGNTCY Core Working Group charter (last changed 2026-05-28) still lists ACP alongside OASF",
   "group": "Protocols called ACP",
   "history": [
    {
     "date": "2026-09-06",
     "note": "added from arXiv 2504.16736 survey comparison, verified against github.com/agntcy/acp-spec, spec.acp.agntcy.org, github.com/orgs/agntcy/repositories"
    },
    {
     "date": "2026-09-06",
     "note": "governance corrected to reflect Cisco donating AGNTCY to the Linux Foundation, per sibling records ads/oasf/slim; verified against existing agenticweb.wiki records"
    },
    {
     "date": "2026-10-16",
     "note": "The agntcy/acp-spec repository was archived on 2026-04-11"
    },
    {
     "date": "2026-10-29",
     "note": "Expanded primary-source verified record across 45 primary sources including AGNTCY launch posts, acp-spec v0.2.3 OpenAPI 3.1.1, governance issue #30 deprecation in favour of A2A, OASF v0.8.0/v1.1.0 deprecation, docs removal PRs #191/#270/#335, and April 11 2026 archival"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "implementation": "deprecated",
   "last_verified": "2026-11-07",
   "native_status": "Deprecated by AGNTCY in favour of A2A (since OASF v0.8.0, 2025-10-22), and archived read-only on 2026-04-11",
   "origin": {
    "date": "2025-02-05",
    "org": "AGNTCY collective (created by Outshift by Cisco with LangChain and Galileo; Glean and LlamaIndex as supporting members)"
   },
   "part_of": null,
   "parties": [
    "agent-agent"
   ],
   "phase": "deprecated",
   "probe": {
    "method": "POST",
    "on_absent": "A 404 or non-JSON response means no ACP server at this origin. Because the specification's own source repository was archived by its owner in April 2026, absence is expected.",
    "parse": "A 200 response returning a JSON array of agent objects (each with agent_id and metadata.ref) confirms an ACP-speaking server per the v0.2.3 OpenAPI schema.",
    "path": "{origin}/agents/search"
   },
   "question": "How does one agent (or an orchestrator) invoke and configure a remote agent it did not build, over a plain HTTP API?",
   "scope": "general",
   "spec_url": "https://github.com/agntcy/acp-spec",
   "step": "act",
   "summary_md": "**Agent Connect Protocol** (ACP), proposed by the Agntcy Collective, is the OpenAPI REST-based interface for invoking and configuring remote agents over an API. The OpenAPI `3.1.1` document is version `0.2.3`. Agent search is `POST` `/agents/search`, the descriptor is `GET` `/agents/{agent_id}/descriptor`, and run streams use `text/event-stream`. OASF marks the ACP manifest deprecated since `v0.8.0` and says to use A2A instead. The owner archived the acp-spec repository on Apr 11, 2026, and it is now read-only.",
   "track": "linux-foundation",
   "version": {
    "date": "2025-05-23",
    "label": "0.2.3 (OpenAPI 3.1.1; 0 releases, 0 tags, last commit 2025-05-23; Python SDK agntcy-acp v1.5.2 of 2025-06-16)"
   },
   "watch": [
    {
     "type": "github",
     "repo": "agntcy/acp-spec",
     "mode": "release"
    }
   ],
   "use_cases": [
    "agent-to-agent-messaging",
    "describe-agent-capabilities",
    "expose-tools-to-agents"
   ],
   "audience": [
    "agent-builder",
    "platform"
   ],
   "pairs_with": [
    "a2a",
    "oasf",
    "ads"
   ],
   "prerequisites": [],
   "tier": "spec_brief",
   "lifecycle_status": "deprecated",
   "wire_archetype": "harnesses_rpc_ui",
   "status_notice_md": "**Status notice (Deprecated & Archived):** The AGNTCY Agent Connect Protocol (`acp-spec`) was deprecated in favor of [Agent2Agent (A2A)](/protocols/a2a/) (since OASF `v0.8.0`) and archived read-only on `2026-04-11`.",
   "superseded_by": [
    {
     "doc": "Agent2Agent (A2A)",
     "protocol_id": "a2a",
     "url": "https://agenticweb.wiki/protocols/a2a/"
    },
    {
     "doc": "Open Agentic Schema Framework (OASF)",
     "protocol_id": "oasf",
     "url": "https://agenticweb.wiki/protocols/oasf/"
    }
   ],
   "replaced_by": {
    "doc": "Agent2Agent (A2A)",
    "page": "/protocols/a2a/"
   },
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-07",
   "v05_hatnote_html_md": "**Status notice (Deprecated & Archived):** The AGNTCY Agent Connect Protocol (`acp-spec`) was deprecated in favor of [Agent2Agent (A2A)](/protocols/a2a/) (since OASF `v0.8.0`) and archived read-only on `2026-04-11`. This page is about the Agent Connect Protocol (ACP), the REST interface for invoking remote agents that the AGNTCY project (created by Outshift by Cisco) published in 2025 and has since deprecated in favour of the [Agent2Agent Protocol (A2A)](/protocols/a2a/). IBM Research's [Agent Communication Protocol](/protocols/agent-communication-protocol/) (ACP) is a separate protocol for the BeeAI platform that, as of 29 August 2025, is officially merging with A2A. Zed's [Agent Client Protocol](/protocols/agent-client-protocol/) (ACP) is the protocol Zed created for third-party agents inside the editor. Stripe and OpenAI's [Agentic Commerce Protocol](/protocols/agentic-commerce-protocol/) (ACP) is their open standard for programmatic commerce flows. All four are listed under [ACP](/terms/acp/). [1][2][3][4][5][6][7]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Agent Connect Protocol** (ACP), proposed by the Agntcy Collective, is the OpenAPI REST-based interface for invoking and configuring remote agents over an API. [1] The OpenAPI `3.1.1` document is version `0.2.3`. Agent search is `POST` `/agents/search`, the descriptor is `GET` `/agents/{agent_id}/descriptor`, and run streams use `text/event-stream`. [8] OASF marks the ACP manifest deprecated since `v0.8.0` and says to use A2A instead. The owner archived the acp-spec repository on Apr 11, 2026, and it is now read-only. [3][4]",
   "v05_identity_sentence_md": "**Agent Connect Protocol** (ACP), proposed by the Agntcy Collective, is the OpenAPI REST-based interface for invoking and configuring remote agents over an API. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Act](/category/act/) (`act`)"
    },
    {
     "label": "Form",
     "value_md": "Endpoint (`endpoint`)"
    },
    {
     "label": "Originated by",
     "value_md": "AGNTCY collective, created by Outshift by Cisco (launch date March 6, 2025), with LangChain and Galileo, and with Glean and LlamaIndex as supporting members. Repository agntcy/acp-spec created 2025-02-05. [1][2][3][9][10]"
    },
    {
     "label": "Governed by",
     "value_md": "AGNTCY under the Linux Foundation since 2025-07-29 (formative members: Cisco, Dell Technologies, Google Cloud, Oracle, and Red Hat). The Core Working Group charter still lists Agent Connect Protocol (ACP); last charter commit 2026-05-28. [9][11][12]"
    },
    {
     "label": "Track",
     "value_md": "Linux Foundation project (AGNTCY, welcomed 2025-07-29) [2][9]"
    },
    {
     "label": "Status",
     "value_md": "Deprecated in favor of A2A (OASF: ACP manifest deprecated since v0.8.0). acp-spec archived read-only on Apr 11, 2026. Docs: not currently under active development. [3][4][13][14]"
    },
    {
     "label": "Version",
     "value_md": "0.2.3 (OpenAPI 3.1.1); last commit 2025-05-23; GitHub releases and tags responses are empty arrays. Python package agntcy-acp 1.5.2 uploaded 2025-06-16. [8][15][16][17][18]"
    },
    {
     "label": "Transports",
     "value_md": "HTTP REST, specified as an OpenAPI document [1]"
    },
    {
     "label": "Message format",
     "value_md": "JSON (`application/json`) and server-sent events (`text/event-stream`) [8]"
    },
    {
     "label": "Record format",
     "value_md": "AgentACPDescriptor (per-agent ACP descriptor) [8]"
    },
    {
     "label": "Found at",
     "value_md": "`POST /agents/search` and `GET /agents/{agent_id}/descriptor`, or the ACP extension of the agent record in the agent directory [8]"
    },
    {
     "label": "Specification",
     "value_md": "[Agent Connect Protocol openapi.json](https://raw.githubusercontent.com/agntcy/acp-spec/main/openapi.json) · [spec.acp.agntcy.org](https://spec.acp.agntcy.org/) [1][8][13][19]"
    },
    {
     "label": "Licence",
     "value_md": "Apache-2.0 (Copyright AGNTCY Contributors) [1][3]"
    }
   ],
   "v05_problem_md": "Existing multi-agent systems communicate through internal mechanisms and APIs. Interaction between co-located agents in the same system is trivial, and it is harder when the agents are not natively compatible or run in different locations. [13] A client can start a run on any agent the server supports. If the agents support threads, runs can be grouped in a thread, and the server keeps thread state at the end of a thread run. Output can be a final result or an interrupt. [8] The ACP descriptor can be retrieved through this ACP interface or is found in the ACP extension of the agent record in the agent directory. This component is not currently under active development. The ACP OpenAPI document defines no authentication scheme. The Agent Workflow Server documents optional authentication with a pre-defined API key sent in the `x-api-key` header, which is that deployment's choice. [8][13][20]",
   "v05_mechanism_delta_md": "A client can start a run on any agent the server supports. If the agents support threads, runs can be grouped in a thread, and the server keeps thread state at the end of a thread run. Output can be a final result or an interrupt. [8]",
   "v05_scope_boundary_md": "The ACP descriptor can be retrieved through this ACP interface or is found in the ACP extension of the agent record in the agent directory. This component is not currently under active development. The ACP OpenAPI document defines no authentication scheme. The Agent Workflow Server documents optional authentication with a pre-defined API key sent in the `x-api-key` header, which is that deployment's choice. [8][13][20]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "OpenAPI Specification 3.1",
      "spec_or_rfc": "OAS 3.1",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "OpenAPI Specification 3.1 is the schema language this protocol uses: the Agent Connect Protocol document declares openapi 3.1.1 and info version 0.2.3, and it is specified as an OpenAPI REST schema. [1][8]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "a2a",
      "target_name": "Agent2Agent Protocol (A2A)",
      "relation_type": "superseded_by",
      "relation_label": "Superseded by",
      "delta_md": "A2A is the protocol AGNTCY named when it deprecated ACP: on Aug 21, 2025 Luca Muscariello wrote that the Core Working Group is deprecating ACP in favor of A2A, OASF marks the ACP manifest deprecated since v0.8.0, and the acp-spec repository was archived read-only on Apr 11, 2026. [3][4][14]"
     },
     {
      "target_id": "oasf",
      "target_name": "Open Agentic Schema Framework",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "OASF, the Open Agentic Schema Framework, is the extensible data model for agent attributes, skills, and capabilities, and its module list marks the ACP manifest deprecated since v0.8.0 in favor of A2A. ACP was the REST interface whose descriptor is also stored as the ACP extension of the agent-directory record. [4][8][21]"
     },
     {
      "target_id": "ads",
      "target_name": "Agent Directory Service",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "ADS, the Agent Directory Service, is a distributed directory of metadata for AI agent applications, and its REST surface lists catalog entries with GET /v1/agents; an AGNTCY blog also shows a local ADS node started in the background. ACP was the separate OpenAPI interface that searched agents at POST /agents/search and kept each descriptor on the ACP server or in the directory record. [8][22][23]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (5 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).",
    "side_a": {
     "visible": true,
     "heading": "Server runtimes & agent platforms",
     "col4_header": "Transport & Scope",
     "note_md": null,
     "rows": [
      {
       "actor": "AGNTCY Agent Workflow Server",
       "role": "Server runtime",
       "status": "Partial",
       "status_display": "Partial · as of 2026-04-11",
       "col4_md": "Agent Workflow Server exposes agents from diverse frameworks through Agent Connect Protocol (ACP). The support table lists `LangGraph` `>=0.2.60,<0.4.0` and `LlamaIndex` `>=0.12.0,<0.13.0`, with client auth via `x-api-key`. That `x-api-key` header is the Workflow Server's optional API key, not an authentication scheme defined by the ACP OpenAPI document. The docs state this component is not currently under active development; the repository was last pushed on 2025-09-15 and archived read-only by the owner on Apr 11, 2026. `agntcy/acp-spec` is the Agent Connect Protocol specification proposed by the Agntcy Collective (OpenAPI `3.1.1`, title Agent Connect Protocol, version `0.2.3`), last pushed on 2025-05-23 and archived read-only. On `2025-08-21` Luca Muscariello wrote that the Core WG is deprecating ACP in favor of A2A, and AGNTCY archived the repositories on Apr 11, 2026.",
       "source_md": "[AGNTCY, workflow-srv README](https://raw.githubusercontent.com/agntcy/workflow-srv/main/README.md) [24] · [AGNTCY, workflow server support table](https://raw.githubusercontent.com/agntcy/docs/a23e3c757391e13b9834a59b26a0a33d8d70a328/docs/agws/workflow-server.md) [20] · [GitHub, agntcy/workflow-srv](https://github.com/agntcy/workflow-srv) [25] · [AGNTCY, acp-spec README](https://raw.githubusercontent.com/agntcy/acp-spec/main/README.md) [1] · [AGNTCY, acp-spec OpenAPI](https://raw.githubusercontent.com/agntcy/acp-spec/main/openapi.json) [8] · [AGNTCY governance issue 30](https://github.com/agntcy/governance/issues/30) [14] · [GitHub, agntcy/acp-spec](https://github.com/agntcy/acp-spec) [3]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Client SDKs, orchestrators & CLI tools",
     "col4_header": "Transport & Scope",
     "note_md": null,
     "rows": [
      {
       "actor": "agntcy-acp Python client",
       "role": "Client SDK",
       "status": "Partial",
       "status_display": "Partial · as of 2026-04-11",
       "col4_md": "PyPI package `agntcy-acp` version `1.5.2` summarizes itself as Agent Connect Protocol SDK. The `1.5.2` wheel was uploaded on 2025-06-16, matching GitHub release `v1.5.2` published the same day, and the client docs import `AsyncACPClient`. The repository was last pushed on 2025-06-16 and archived read-only by the owner on Apr 11, 2026, following AGNTCY's `2025-08-21` deprecation of Agent Connect Protocol in favor of A2A.",
       "source_md": "[PyPI, agntcy-acp](https://pypi.org/pypi/agntcy-acp/json) [18] · [AGNTCY, ACP client docs](https://raw.githubusercontent.com/agntcy/docs/a23e3c757391e13b9834a59b26a0a33d8d70a328/docs/syntactic/agntcy_acp_sdk.md) [26] · [GitHub API, acp-sdk releases](https://github.com/agntcy/acp-sdk/releases) [27] · [GitHub, agntcy/acp-sdk](https://github.com/agntcy/acp-sdk) [28] · [AGNTCY governance issue 30](https://github.com/agntcy/governance/issues/30) [14]"
      },
      {
       "actor": "agntcy_acp.langgraph.ACPNode",
       "role": "Orchestrator node",
       "status": "Partial",
       "status_display": "Partial · as of 2026-04-11",
       "col4_md": "The agntcy-acp docs show `agntcy_acp.langgraph.ACPNode` used as a LangGraph graph node so a remote ACP agent can sit inside a `StateGraph`. The package version on PyPI is `1.5.2`. The `agntcy/acp-sdk` repository was archived by the owner on Apr 11, 2026. AGNTCY deprecated Agent Connect Protocol on `2025-08-21` in favor of A2A and archived the repositories on Apr 11, 2026.",
       "source_md": "[AGNTCY, ACP client docs](https://raw.githubusercontent.com/agntcy/docs/a23e3c757391e13b9834a59b26a0a33d8d70a328/docs/syntactic/agntcy_acp_sdk.md) [26] · [PyPI, agntcy-acp](https://pypi.org/pypi/agntcy-acp/json) [18] · [GitHub, agntcy/acp-sdk](https://github.com/agntcy/acp-sdk) [28] · [AGNTCY governance issue 30](https://github.com/agntcy/governance/issues/30) [14]"
      },
      {
       "actor": "agntcy-acp CLI",
       "role": "CLI",
       "status": "Partial",
       "status_display": "Partial · as of 2026-04-11",
       "col4_md": "The agntcy-acp client SDK includes a CLI. Commands are `generate-agent-models`, `generate-agent-oapi`, `validate-acp-descriptor`, and `validate-acp-manifest`. PyPI version is `1.5.2`. The `agntcy/acp-sdk` repository was archived by the owner on Apr 11, 2026. AGNTCY deprecated Agent Connect Protocol on `2025-08-21` in favor of A2A and archived the repositories on Apr 11, 2026.",
       "source_md": "[AGNTCY, ACP client docs](https://raw.githubusercontent.com/agntcy/docs/a23e3c757391e13b9834a59b26a0a33d8d70a328/docs/syntactic/agntcy_acp_sdk.md) [26] · [PyPI, agntcy-acp](https://pypi.org/pypi/agntcy-acp/json) [18] · [GitHub, agntcy/acp-sdk](https://github.com/agntcy/acp-sdk) [28] · [AGNTCY governance issue 30](https://github.com/agntcy/governance/issues/30) [14]"
      },
      {
       "actor": "agntcy-acp package index",
       "role": "Client and server SDK modules",
       "status": "Listed",
       "status_display": "Listed · checked 2026-11-06",
       "col4_md": "The package API reference describes the Agent Connect Protocol SDK as an open-source library with tools for both client and server implementations. The module index lists `agntcy_acp.langgraph.acp_node`, `agntcy_acp.langgraph.api_bridge`, `agntcy_acp.langgraph.io_mapper`, and `agntcy_acp.manifest`.",
       "source_md": "[agntcy-acp package API reference](https://agntcy.github.io/acp-sdk/html/index.html) [29]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [
     {
      "label": "AGNTCY governance issue 30 (2025-08-21)",
      "as_of": "2025-08-21",
      "value_md": "On 2025-08-21 Luca Muscariello wrote in agntcy/governance issue 30 that the Core WG is deprecating ACP in favor of A2A. [14]"
     },
     {
      "label": "LF AI & Data, ACP joins forces with A2A (August 29, 2025)",
      "as_of": "2025-08-29",
      "value_md": "Separately from AGNTCY's Agent Connect Protocol, the 29 August 2025 LF AI & Data post reports that IBM Research's homonymous Agent Communication Protocol (ACP, launched in March 2025 to power the BeeAI Platform) officially merged with A2A under the Linux Foundation, and the BeeAI platform migrated from IBM's ACP to A2A. [5]"
     }
    ],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "agora-protocol",
     "target_name": "Agora Protocol",
     "relation_label": "Peer alternative",
     "delta": "Agora discovers peers at {baseURL}/wellknown and speaks HTTPS POST, while AGNTCY ACP searched agents at /agents/search under an OpenAPI 3.1.1 document (last specification commit 2025-05-23; repository archived Apr 11, 2026).",
     "item_md": "**[Agora Protocol](/protocols/agora-protocol/)** (Peer alternative) — Agora discovers peers at {baseURL}/wellknown and speaks HTTPS POST, while AGNTCY ACP searched agents at /agents/search under an OpenAPI 3.1.1 document (last specification commit 2025-05-23; repository archived Apr 11, 2026)."
    },
    {
     "target_id": "slim",
     "target_name": "Secure Low-Latency Interactive Messaging (SLIM)",
     "relation_label": "Complements",
     "delta": "Both come from the AGNTCY project, and ACP is the archived OpenAPI REST API at /agents/search while SLIM (Secure Low-Latency Interactive Messaging) is the gRPC and MLS messaging layer.",
     "item_md": "**[Secure Low-Latency Interactive Messaging (SLIM)](/protocols/slim/)** (Complements) — Both come from the AGNTCY project, and ACP is the archived OpenAPI REST API at /agents/search while SLIM (Secure Low-Latency Interactive Messaging) is the gRPC and MLS messaging layer."
    },
    {
     "item_md": "**[Act protocols](/category/act/)** — Category index for `act` standards."
    }
   ],
   "v05_compiled_md": "---\nid: agent-connect-protocol\ntitle: \"Agent Connect Protocol\"\ntier: spec_brief\nlifecycle_status: deprecated\ncategory: act\nform: endpoint\nwire_archetype: harnesses_rpc_ui\nspec_url: https://raw.githubusercontent.com/agntcy/acp-spec/main/openapi.json\nlast_checked: 2026-11-07\n---\n\n# Agent Connect Protocol\n\n**Category:** [Act](/category/act/) (`act`) · **Form:** Endpoint (`endpoint`) · **Last checked:** 2026-11-07\n\n> ***Status notice (Deprecated & Archived):** The AGNTCY Agent Connect Protocol (`acp-spec`) was deprecated in favor of [Agent2Agent (A2A)](/protocols/a2a/) (since OASF `v0.8.0`) and archived read-only on `2026-04-11`. This page is about the Agent Connect Protocol (ACP), the REST interface for invoking remote agents that the AGNTCY project (created by Outshift by Cisco) published in 2025 and has since deprecated in favour of the [Agent2Agent Protocol (A2A)](/protocols/a2a/). IBM Research's [Agent Communication Protocol](/protocols/agent-communication-protocol/) (ACP) is a separate protocol for the BeeAI platform that, as of 29 August 2025, is officially merging with A2A. Zed's [Agent Client Protocol](/protocols/agent-client-protocol/) (ACP) is the protocol Zed created for third-party agents inside the editor. Stripe and OpenAI's [Agentic Commerce Protocol](/protocols/agentic-commerce-protocol/) (ACP) is their open standard for programmatic commerce flows. All four are listed under [ACP](/terms/acp/). [1][2][3][4][5][6][7]*\n\n**Agent Connect Protocol** (ACP), proposed by the Agntcy Collective, is the OpenAPI REST-based interface for invoking and configuring remote agents over an API. [1] The OpenAPI `3.1.1` document is version `0.2.3`. Agent search is `POST` `/agents/search`, the descriptor is `GET` `/agents/{agent_id}/descriptor`, and run streams use `text/event-stream`. [8] OASF marks the ACP manifest deprecated since `v0.8.0` and says to use A2A instead. The owner archived the acp-spec repository on Apr 11, 2026, and it is now read-only. [3][4]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Act](/category/act/) (`act`) |\n| **Form** | Endpoint (`endpoint`) |\n| **Originated by** | AGNTCY collective, created by Outshift by Cisco (launch date March 6, 2025), with LangChain and Galileo, and with Glean and LlamaIndex as supporting members. Repository agntcy/acp-spec created 2025-02-05. [1][2][3][9][10] |\n| **Governed by** | AGNTCY under the Linux Foundation since 2025-07-29 (formative members: Cisco, Dell Technologies, Google Cloud, Oracle, and Red Hat). The Core Working Group charter still lists Agent Connect Protocol (ACP); last charter commit 2026-05-28. [9][11][12] |\n| **Track** | Linux Foundation project (AGNTCY, welcomed 2025-07-29) [2][9] |\n| **Status** | Deprecated in favor of A2A (OASF: ACP manifest deprecated since v0.8.0). acp-spec archived read-only on Apr 11, 2026. Docs: not currently under active development. [3][4][13][14] |\n| **Version** | 0.2.3 (OpenAPI 3.1.1); last commit 2025-05-23; GitHub releases and tags responses are empty arrays. Python package agntcy-acp 1.5.2 uploaded 2025-06-16. [8][15][16][17][18] |\n| **Transports** | HTTP REST, specified as an OpenAPI document [1] |\n| **Message format** | JSON (`application/json`) and server-sent events (`text/event-stream`) [8] |\n| **Record format** | AgentACPDescriptor (per-agent ACP descriptor) [8] |\n| **Found at** | `POST /agents/search` and `GET /agents/{agent_id}/descriptor`, or the ACP extension of the agent record in the agent directory [8] |\n| **Specification** | [Agent Connect Protocol openapi.json](https://raw.githubusercontent.com/agntcy/acp-spec/main/openapi.json) · [spec.acp.agntcy.org](https://spec.acp.agntcy.org/) [1][8][13][19] |\n| **Licence** | Apache-2.0 (Copyright AGNTCY Contributors) [1][3] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [Adoption and ecosystem](#adoption-and-ecosystem)\n4. [See also](#see-also)\n5. [References](#references)\n\n---\n\n## Problem and scope\n\nExisting multi-agent systems communicate through internal mechanisms and APIs. Interaction between co-located agents in the same system is trivial, and it is harder when the agents are not natively compatible or run in different locations. [13] A client can start a run on any agent the server supports. If the agents support threads, runs can be grouped in a thread, and the server keeps thread state at the end of a thread run. Output can be a final result or an interrupt. [8] The ACP descriptor can be retrieved through this ACP interface or is found in the ACP extension of the agent record in the agent directory. This component is not currently under active development. The ACP OpenAPI document defines no authentication scheme. The Agent Workflow Server documents optional authentication with a pre-defined API key sent in the `x-api-key` header, which is that deployment's choice. [8][13][20]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **OpenAPI Specification 3.1** | `OAS 3.1` | Profiles classic standard | OpenAPI Specification 3.1 is the schema language this protocol uses: the Agent Connect Protocol document declares openapi 3.1.1 and info version 0.2.3, and it is specified as an OpenAPI REST schema. [1][8] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Agent2Agent Protocol (A2A)](/protocols/a2a/)** | Superseded by | A2A is the protocol AGNTCY named when it deprecated ACP: on Aug 21, 2025 Luca Muscariello wrote that the Core Working Group is deprecating ACP in favor of A2A, OASF marks the ACP manifest deprecated since v0.8.0, and the acp-spec repository was archived read-only on Apr 11, 2026. [3][4][14] |\n| **[Open Agentic Schema Framework](/protocols/oasf/)** | Complements | OASF, the Open Agentic Schema Framework, is the extensible data model for agent attributes, skills, and capabilities, and its module list marks the ACP manifest deprecated since v0.8.0 in favor of A2A. ACP was the REST interface whose descriptor is also stored as the ACP extension of the agent-directory record. [4][8][21] |\n| **[Agent Directory Service](/protocols/ads/)** | Complements | ADS, the Agent Directory Service, is a distributed directory of metadata for AI agent applications, and its REST surface lists catalog entries with GET /v1/agents; an AGNTCY blog also shows a local ADS node started in the background. ACP was the separate OpenAPI interface that searched agents at POST /agents/search and kept each descriptor on the ACP server or in the directory record. [8][22][23] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (5 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).*\n\n### Server runtimes & agent platforms\n\n| Actor | Role | Status | Transport & Scope | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **AGNTCY Agent Workflow Server** | Server runtime | Partial · as of 2026-04-11 | Agent Workflow Server exposes agents from diverse frameworks through Agent Connect Protocol (ACP). The support table lists `LangGraph` `>=0.2.60,<0.4.0` and `LlamaIndex` `>=0.12.0,<0.13.0`, with client auth via `x-api-key`. That `x-api-key` header is the Workflow Server's optional API key, not an authentication scheme defined by the ACP OpenAPI document. The docs state this component is not currently under active development; the repository was last pushed on 2025-09-15 and archived read-only by the owner on Apr 11, 2026. `agntcy/acp-spec` is the Agent Connect Protocol specification proposed by the Agntcy Collective (OpenAPI `3.1.1`, title Agent Connect Protocol, version `0.2.3`), last pushed on 2025-05-23 and archived read-only. On `2025-08-21` Luca Muscariello wrote that the Core WG is deprecating ACP in favor of A2A, and AGNTCY archived the repositories on Apr 11, 2026. | [AGNTCY, workflow-srv README](https://raw.githubusercontent.com/agntcy/workflow-srv/main/README.md) [24] · [AGNTCY, workflow server support table](https://raw.githubusercontent.com/agntcy/docs/a23e3c757391e13b9834a59b26a0a33d8d70a328/docs/agws/workflow-server.md) [20] · [GitHub, agntcy/workflow-srv](https://github.com/agntcy/workflow-srv) [25] · [AGNTCY, acp-spec README](https://raw.githubusercontent.com/agntcy/acp-spec/main/README.md) [1] · [AGNTCY, acp-spec OpenAPI](https://raw.githubusercontent.com/agntcy/acp-spec/main/openapi.json) [8] · [AGNTCY governance issue 30](https://github.com/agntcy/governance/issues/30) [14] · [GitHub, agntcy/acp-spec](https://github.com/agntcy/acp-spec) [3] |\n\n### Client SDKs, orchestrators & CLI tools\n\n| Actor | Role | Status | Transport & Scope | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **agntcy-acp Python client** | Client SDK | Partial · as of 2026-04-11 | PyPI package `agntcy-acp` version `1.5.2` summarizes itself as Agent Connect Protocol SDK. The `1.5.2` wheel was uploaded on 2025-06-16, matching GitHub release `v1.5.2` published the same day, and the client docs import `AsyncACPClient`. The repository was last pushed on 2025-06-16 and archived read-only by the owner on Apr 11, 2026, following AGNTCY's `2025-08-21` deprecation of Agent Connect Protocol in favor of A2A. | [PyPI, agntcy-acp](https://pypi.org/pypi/agntcy-acp/json) [18] · [AGNTCY, ACP client docs](https://raw.githubusercontent.com/agntcy/docs/a23e3c757391e13b9834a59b26a0a33d8d70a328/docs/syntactic/agntcy_acp_sdk.md) [26] · [GitHub API, acp-sdk releases](https://github.com/agntcy/acp-sdk/releases) [27] · [GitHub, agntcy/acp-sdk](https://github.com/agntcy/acp-sdk) [28] · [AGNTCY governance issue 30](https://github.com/agntcy/governance/issues/30) [14] |\n| **agntcy_acp.langgraph.ACPNode** | Orchestrator node | Partial · as of 2026-04-11 | The agntcy-acp docs show `agntcy_acp.langgraph.ACPNode` used as a LangGraph graph node so a remote ACP agent can sit inside a `StateGraph`. The package version on PyPI is `1.5.2`. The `agntcy/acp-sdk` repository was archived by the owner on Apr 11, 2026. AGNTCY deprecated Agent Connect Protocol on `2025-08-21` in favor of A2A and archived the repositories on Apr 11, 2026. | [AGNTCY, ACP client docs](https://raw.githubusercontent.com/agntcy/docs/a23e3c757391e13b9834a59b26a0a33d8d70a328/docs/syntactic/agntcy_acp_sdk.md) [26] · [PyPI, agntcy-acp](https://pypi.org/pypi/agntcy-acp/json) [18] · [GitHub, agntcy/acp-sdk](https://github.com/agntcy/acp-sdk) [28] · [AGNTCY governance issue 30](https://github.com/agntcy/governance/issues/30) [14] |\n| **agntcy-acp CLI** | CLI | Partial · as of 2026-04-11 | The agntcy-acp client SDK includes a CLI. Commands are `generate-agent-models`, `generate-agent-oapi`, `validate-acp-descriptor`, and `validate-acp-manifest`. PyPI version is `1.5.2`. The `agntcy/acp-sdk` repository was archived by the owner on Apr 11, 2026. AGNTCY deprecated Agent Connect Protocol on `2025-08-21` in favor of A2A and archived the repositories on Apr 11, 2026. | [AGNTCY, ACP client docs](https://raw.githubusercontent.com/agntcy/docs/a23e3c757391e13b9834a59b26a0a33d8d70a328/docs/syntactic/agntcy_acp_sdk.md) [26] · [PyPI, agntcy-acp](https://pypi.org/pypi/agntcy-acp/json) [18] · [GitHub, agntcy/acp-sdk](https://github.com/agntcy/acp-sdk) [28] · [AGNTCY governance issue 30](https://github.com/agntcy/governance/issues/30) [14] |\n| **agntcy-acp package index** | Client and server SDK modules | Listed · checked 2026-11-06 | The package API reference describes the Agent Connect Protocol SDK as an open-source library with tools for both client and server implementations. The module index lists `agntcy_acp.langgraph.acp_node`, `agntcy_acp.langgraph.api_bridge`, `agntcy_acp.langgraph.io_mapper`, and `agntcy_acp.manifest`. | [agntcy-acp package API reference](https://agntcy.github.io/acp-sdk/html/index.html) [29] |\n\n### Ecosystem censuses\n\n- **AGNTCY governance issue 30 (2025-08-21)** (*as of 2025-08-21*): On 2025-08-21 Luca Muscariello wrote in agntcy/governance issue 30 that the Core WG is deprecating ACP in favor of A2A. [14]\n- **LF AI & Data, ACP joins forces with A2A (August 29, 2025)** (*as of 2025-08-29*): Separately from AGNTCY's Agent Connect Protocol, the 29 August 2025 LF AI & Data post reports that IBM Research's homonymous Agent Communication Protocol (ACP, launched in March 2025 to power the BeeAI Platform) officially merged with A2A under the Linux Foundation, and the BeeAI platform migrated from IBM's ACP to A2A. [5]\n\n---\n\n## See also\n\n- **[Agora Protocol](/protocols/agora-protocol/)** *(Peer alternative)* — Agora discovers peers at {baseURL}/wellknown and speaks HTTPS POST, while AGNTCY ACP searched agents at /agents/search under an OpenAPI 3.1.1 document (last specification commit 2025-05-23; repository archived Apr 11, 2026).\n- **[Secure Low-Latency Interactive Messaging (SLIM)](/protocols/slim/)** *(Complements)* — Both come from the AGNTCY project, and ACP is the archived OpenAPI REST API at /agents/search while SLIM (Secure Low-Latency Interactive Messaging) is the gRPC and MLS messaging layer.\n- **Category:** [Act protocols](/category/act/)\n\n---\n\n## References\n\n1. AGNTCY, *Agent Connect Protocol Specification* (fetched 2026-10-30) — <https://raw.githubusercontent.com/agntcy/acp-spec/main/README.md>\n2. Outshift by Cisco, *AGNTCY | Internet of Agents* (launch date 2025-03-06; fetched 2026-10-30) — <https://outshift.cisco.com/the-internet-of-agents/agntcy>\n3. AGNTCY, *agntcy/acp-spec* (archived 2026-04-11) — <https://github.com/agntcy/acp-spec>\n4. AGNTCY (Open Agentic Schema Framework), *OASF schema 1.1.0 modules* (fetched 2026-10-30) — <https://schema.oasf.outshift.com/1.1.0/modules>\n5. Kate Blair (IBM Research) and Todd Segal (Google), *ACP Joins Forces with A2A* (published 2025-08-29) — <https://lfaidata.foundation/communityblog/2025/08/29/acp-joins-forces-with-a2a-under-the-linux-foundations-lf-ai-data/>\n6. Nathan Sobo (Zed), *Bring Your Own Agent to Zed — Featuring Gemini CLI* (published 2025-08-27) — <https://zed.dev/blog/bring-your-own-agent-to-zed>\n7. Jeff Weinstein and Steve Kaliski (Stripe), *Developing an open standard for agentic commerce* (published 2025-09-29) — <https://stripe.com/blog/developing-an-open-standard-for-agentic-commerce>\n8. AGNTCY, *Agent Connect Protocol (OpenAPI 3.1.1, version 0.2.3)* (version 0.2.3; last commit 2025-05-23) — <https://raw.githubusercontent.com/agntcy/acp-spec/main/openapi.json>\n9. The Linux Foundation, *Linux Foundation Welcomes the AGNTCY Project to Standardize Open Multi-Agent System Infrastructure and Break Down AI Agent Silos* (published 2025-07-29) — <https://www.linuxfoundation.org/press/linux-foundation-welcomes-the-agntcy-project-to-standardize-open-multi-agent-system-infrastructure-and-break-down-ai-agent-silos>\n10. Yash Sheth and Conor Bronsdon (Galileo), *AGNTCY: Building the Future of Multi-Agentic Systems* (published 2025-03-05) — <https://galileo.ai/blog/agntcy-open-collective-multi-agent-standardization>\n11. AGNTCY, *AGNTCY Core Working Group Charter* (last commit 2026-05-28) — <https://raw.githubusercontent.com/agntcy/governance/main/working-groups/core/CHARTER.md>\n12. AGNTCY, *agntcy/governance commits for working-groups/core/CHARTER.md* (latest commit 2026-05-28; fetched 2026-10-30) — <https://github.com/agntcy/governance/commits/HEAD/working-groups/core/CHARTER.md>\n13. AGNTCY, *Agent Connect Protocol (docs/syntactic/connect.md at a23e3c7)* (snapshot before removal; fetched 2026-10-30) — <https://raw.githubusercontent.com/agntcy/docs/a23e3c757391e13b9834a59b26a0a33d8d70a328/docs/syntactic/connect.md>\n14. AGNTCY (Luca Muscariello), *Update AGP reference in the Core WG charter to SLIM (issue #30)* (commented 2025-08-21) — <https://github.com/agntcy/governance/issues/30>\n15. AGNTCY, *agntcy/acp-spec commits* (latest commit 2025-05-23; fetched 2026-10-30) — <https://github.com/agntcy/acp-spec/commits>\n16. AGNTCY, *agntcy/acp-spec releases* (empty list; fetched 2026-10-30) — <https://github.com/agntcy/acp-spec/releases>\n17. AGNTCY, *agntcy/acp-spec tags* (empty list; fetched 2026-10-30) — <https://github.com/agntcy/acp-spec/tags>\n18. AGNTCY Internet of Agents Collective, *agntcy-acp (Agent Connect Protocol SDK)* (version 1.5.2 uploaded 2025-06-16) — <https://pypi.org/pypi/agntcy-acp/json>\n19. AGNTCY, *Agent Connect Protocol (hosted OpenAPI viewer)* (last-modified 2025-05-23; fetched 2026-10-30) — <https://spec.acp.agntcy.org/>\n20. AGNTCY, *Agent Workflow Server (docs/agws/workflow-server.md at a23e3c7)* (snapshot before removal; fetched 2026-10-30) — <https://raw.githubusercontent.com/agntcy/docs/a23e3c757391e13b9834a59b26a0a33d8d70a328/docs/agws/workflow-server.md>\n21. AGNTCY, *AGNTCY documentation* (fetched 2026-10-30) — <https://docs.agntcy.org/>\n22. L. Muscariello and R. Polic (Cisco), *Agent Directory Service (draft-mp-agntcy-ads-03)* (2 November 2026) — <https://www.ietf.org/archive/id/draft-mp-agntcy-ads-03.txt>\n23. Ramiz Polic (AGNTCY), *ARD over Agent Directory: Interoperability by Design* (published 2026-06-17) — <https://blogs.agntcy.org/technical/2026/06/17/ai-catalog-over-directory.html>\n24. AGNTCY, *Agent Workflow Server* (fetched 2026-10-30) — <https://raw.githubusercontent.com/agntcy/workflow-srv/main/README.md>\n25. AGNTCY, *agntcy/workflow-srv* (archived 2026-04-11) — <https://github.com/agntcy/workflow-srv>\n26. AGNTCY, *Agntcy ACP Client* (snapshot at a23e3c7; fetched 2026-10-30) — <https://raw.githubusercontent.com/agntcy/docs/a23e3c757391e13b9834a59b26a0a33d8d70a328/docs/syntactic/agntcy_acp_sdk.md>\n27. AGNTCY, *agntcy/acp-sdk releases* (v1.5.2 published 2025-06-16) — <https://github.com/agntcy/acp-sdk/releases>\n28. AGNTCY, *agntcy/acp-sdk* (archived 2026-04-11) — <https://github.com/agntcy/acp-sdk>\n29. AGNTCY, *agntcy-acp package API reference* (fetched 2026-11-06) — <https://agntcy.github.io/acp-sdk/html/index.html>\n"
  },
  {
   "acronym": "AP",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "aliases": [
    "AI Engineer Foundation Agent Protocol"
   ],
   "analog": "a REST job-queue API for arbitrary autonomous-agent backends",
   "collisions": [
    "Agent Connect Protocol (AGNTCY)",
    "Agent Communication Protocol (IBM)",
    "Agent Client Protocol (Zed)"
   ],
   "discovery": {
    "mechanism": "None published; a client is expected to know an agent's base URL out of band (no well-known path or registry defined by the spec itself)",
    "path": null
   },
   "dispute": {
    "claims": [
     "agi-inc/agent-protocol README and repository 'About' field designate https://agentprotocol.ai/ as 'the docs'",
     "As fetched 2026-09-06, agentprotocol.ai serves a third-party comparison guide with no evident connection to AI Engineer Foundation, AGI Inc., or the agent-protocol repository"
    ],
    "summary": "The repository's own README and GitHub 'About' field link https://agentprotocol.ai/ as the project's documentation home, but as fetched the domain serves unrelated third-party content — a vendor-neutral protocol-comparison guide covering MCP, A2A, and Agent Protocol — with no visible affiliation to AI Engineer Foundation, AGI Inc., or the GitHub repository that links it. The canonical specification currently survives only as the openapi.yml file inside the GitHub repository itself."
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://raw.githubusercontent.com/agi-inc/agent-protocol/main/README.md",
     "claim": "AGI, Inc., *Agent Protocol README*, checked 2026-10-31",
     "date": null,
     "quote": "We present the Agent Protocol - a single common interface for communicating with agents. / The Agent Protocol is an API specification - list of endpoints, which the agent should expose with predefined response models. The protocol is tech stack agnostic. Any agent can adopt this protocol no matter what framework they're using (or not using). / Maintained by AGI, Inc. / Join AIEF Discord and their dedicated agent-protocol channel / Right now the protocol is defined as a REST API (via the OpenAPI spec) with two essential routes for interaction with your agent: / POST /ap/v1/agent/tasks for creating a new task for the agent (for example giving the agent an objective that you want to accomplish) / POST /ap/v1/agent/tasks/{task_id}/steps for executing one step of the defined task / It has also a few additional routes for listing the tasks, steps and downloading / uploading artifacts. / We're starting with a minimal core. We want to build upon that iteratively by learning from agent developers about what they actually need. / If you'd like to propose a change or an improvement to the protocol. Please follow the RFC template. / Engaged projects in development of agent protocol - e2b - Auto-GPT ### Open-source agents / --> Maintained by AGI, Inc. ## 📚 Docs You can find more info in / Discord and their dedicated agent-protocol channel Star History !Star History Chart(https://star-history.com/#Div99/agent-protocol&Date) connection: close content-length: / with two essential routes for interaction with your agent: - POST /ap/v1/agent/tasks for creating / the protocol is defined as a REST API (via the OpenAPI spec) with two / agent an objective that you want to accomplish) - POST /ap/v1/agent/tasks/{task_id}/steps for executing one / The AI agent space is young. Most developers are building agents in their own way. This creates a challenge: It's hard to communicate with different agents since the interface is often different every time. Because we struggle with communicating with different agents, it's also hard to compare them easily. / if we had a single communication interface with agents, it'd also make it easier developing devtools that works with agents out of the box. / Any agent developer can implement this protocol. The Agent Protocol is an API specification - list of endpoints, which the agent should expose with predefined response models. / Any agent can adopt this protocol no matter what framework they're using (or not using). / You can use it, or you can implement it on your own. / Basically it wraps your agent in a web server that allows for communication with your agent (and in between agents in the future). / Set a general simple standard that would allow for easy to use benchmarking of agents. One of the primary goals of the protocol is great developer experience, and simple implementation on the end of agent developers. You just start your agent and that's all you have to do. / Agent-to-agent communication - Connection to the outside world: - 3rd party services (= \"Agent I/O\") - Authentication on behalf of users - Protocol Plugins - Is there anything missing? Please submit an RFC with a proposed feature!",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://github.com/agi-inc/agent-protocol/releases/tag/js-sdk-v1.0.5",
     "claim": "AGI, Inc., *Release js-sdk-v1.0.5*, published 2024-04-02",
     "date": null,
     "quote": "\"published_at\": \"2024-04-02T18:06:10Z\" / github-actions released this 02 Apr 18:06 · 6 commits to main since this release / \"published_at\": \"2024-04-02T18:06:10Z\", \"assets\": [ ], \"tarball_url\": \"https://api.github.com/repos/agi-inc/agent-protocol/tarball/js-sdk-v1.0.5\", \"zipball_url\":",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://github.com/agi-inc/agent-protocol",
     "claim": "AGI, Inc., *agi-inc/agent-protocol repository*, checked 2026-10-31",
     "date": null,
     "quote": "\"pushed_at\": \"2025-04-08T06:10:21Z\" … \"created_at\": \"2023-07-06T14:39:13Z\" … \"archived\": false / tabindex=\\\"-1\\\" class=\\\"heading-element\\\" dir=\\\"auto\\\"\\u003e\\u003ca href=\\\"https://github.com/AI-Engineer-Foundation/agent-protocol/tree/main/packages/client\\\"\\u003eClient\\u003c/a\\u003e\\u003c/h3\\u003e\\u003ca / href=\\\"https://github.com/AI-Engineer-Foundation/agent-protocol/issues/9\\\" data-hovercard-type=\\\"issue\\\" data-hovercard-url=\\\"/agi-inc/agent-protocol/issues/9/hovercard\\\"\\u003eissue / \"full_name\": \"agi-inc/agent-protocol\", / hosting, code review, and collaboration CopilotAI coding agent for tasks, projects and automated work / work? Right now the protocol is defined as a REST API (via the OpenAPI / /ap/v1/agent/tasks/{task_id}/steps for executing one step of the defined task It has also a few / \"license\": { \"key\": \"mit\", \"name\": \"MIT License\"",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://spec.openapis.org/oas/v3.0.1.html",
     "claim": "OpenAPI Initiative, *OpenAPI Specification v3.0.1*, 2017-12-06",
     "date": "2017-12-06",
     "quote": "OpenAPI Specification v3.0.1 Version 3.0.1",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://aaif.io/blog/a2a-joins-aaif",
     "claim": "Agentic AI Foundation, *A2A joins AAIF's open agentic stack*, published 2026-08-17; modified 2026-09-24",
     "date": null,
     "quote": "A2A v1.0, the first stable specification, shipped in March 2026.",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Current : the current protocol version, which is ready for use and may continue to receive backwards compatible changes.",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://www.openresponses.org/changelog",
     "claim": "Open Responses, *Changelog*, releases 2026-04-24 and 2026-01-15; fetched 2026-10-30",
     "date": null,
     "quote": "2026-04-24 Specification · Reference · OpenAPI JSON … 2026-01-15 Specification · Reference · OpenAPI JSON Launched Open Responses as an open, multi-provider specification",
     "ref": 7
    }
   ],
   "form": "endpoint",
   "governance": "Originated as an AI Engineer Foundation (AIEF) community project (GitHub org formerly AI-Engineer-Foundation); the repository now lives under 'agi-inc' and states it is 'Maintained by AGI, Inc.', a commercial entity; the docs domain linked from the repository, agentprotocol.ai, currently serves unrelated third-party content rather than AIEF/AGI Inc. project documentation",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "added from arXiv 2504.16736 survey comparison, verified against github.com/AI-Engineer-Foundation/agent-protocol (redirects to agi-inc/agent-protocol), agentprotocol.ai"
    },
    {
     "date": "2026-10-16",
     "note": "No push since 2025-04-08 (over 180 days)"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "agent-protocol-aief",
   "implementation": "prototype",
   "last_verified": "2026-11-12",
   "name": "Agent Protocol",
   "native_status": "Dormant: no push since 2025-04-08 (repository not archived). \"Common interface for interacting with AI agents. The protocol is tech stack agnostic\" (repository description); defined as an OpenAPI REST spec with two core routes, POST /ap/v1/agent/tasks and POST /ap/v1/agent/tasks/{task_id}/steps",
   "origin": {
    "date": "2023-07-06",
    "org": "AI Engineer Foundation (AIEF), originally alongside the Auto-GPT/e2b community"
   },
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "deprecated",
   "probe": {
    "method": "POST",
    "on_absent": "A 404 or schema mismatch means this origin does not implement Agent Protocol. Given the project's docs domain has since been repurposed to unrelated content and no commit activity was found in the past year, absence should now be treated as the default expectation rather than a surprise.",
    "parse": "A 200/201 response returning a Task object containing a task_id field confirms an Agent-Protocol-compliant server per the OpenAPI schema.",
    "path": "{origin}/ap/v1/agent/tasks"
   },
   "question": "How does a client or dev-tool start a task on an autonomous agent, step it, and fetch results, regardless of which framework built the agent?",
   "scope": "general",
   "spec_url": "https://github.com/agi-inc/agent-protocol",
   "step": "act",
   "summary_md": "**Agent Protocol** (`AP`) is a single common interface for communicating with agents. It is an API specification, a list of endpoints which the agent should expose with predefined response models, and the protocol is tech stack agnostic: any agent can adopt it no matter what framework that agent is using, or not using. The README says the project is maintained by AGI, Inc., and it directs discussion to the AIEF Discord and that community's dedicated `agent-protocol` channel. Right now the protocol is defined as a REST API, via the OpenAPI spec, with two essential routes for interaction with the agent. `POST /ap/v1/agent/tasks` is the route for creating a new task for the agent, for example giving the agent an objective to accomplish. `POST /ap/v1/agent/tasks/{task_id}/steps` is the route for executing one step of the defined task. The same description names a few additional routes for listing the tasks, listing the steps, and downloading or uploading artifacts. The README says the work is starting with a minimal core, to be built on iteratively by learning from agent developers about what they actually need. A proposed change or improvement is made by following the RFC template. Release `js-sdk-v1.0.5` was published on `2024-04-02`, with 6 subsequent commits on `main`. The `agi-inc/agent-protocol` repository was created on `2023-07-06`, received its latest push on `2025-04-08`, and remains unarchived.",
   "track": "single-vendor",
   "version": {
    "date": null,
    "label": "unversioned OpenAPI spec (schemas/openapi.yml)"
   },
   "watch": [
    {
     "type": "github",
     "repo": "AI-Engineer-Foundation/agent-protocol",
     "mode": "release",
     "version": false
    }
   ],
   "use_cases": [
    "expose-tools-to-agents",
    "describe-agent-capabilities"
   ],
   "audience": [
    "agent-builder",
    "platform"
   ],
   "pairs_with": [
    "a2a",
    "mcp",
    "open-responses"
   ],
   "prerequisites": [],
   "hatnote_md": "",
   "tier": "spec_brief",
   "lifecycle_status": "retired",
   "wire_archetype": "harnesses_rpc_ui",
   "status_notice_md": "**Status notice (Dormant Specification):** The AI Engineer Foundation Agent Protocol repository has had no commits since `2025-04-08`.",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "**Status notice (Dormant Specification):** The AI Engineer Foundation Agent Protocol repository has had no commits since `2025-04-08`.",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Agent Protocol** (`AP`) is a single common interface for communicating with agents. It is an API specification, a list of endpoints which the agent should expose with predefined response models, and the protocol is tech stack agnostic: any agent can adopt it no matter what framework that agent is using, or not using. [1] The README says the project is maintained by AGI, Inc., and it directs discussion to the AIEF Discord and that community's dedicated `agent-protocol` channel. [1] Right now the protocol is defined as a REST API, via the OpenAPI spec, with two essential routes for interaction with the agent. [1] `POST /ap/v1/agent/tasks` is the route for creating a new task for the agent, for example giving the agent an objective to accomplish. `POST /ap/v1/agent/tasks/{task_id}/steps` is the route for executing one step of the defined task. [1] The same description names a few additional routes for listing the tasks, listing the steps, and downloading or uploading artifacts. [1] The README says the work is starting with a minimal core, to be built on iteratively by learning from agent developers about what they actually need. A proposed change or improvement is made by following the RFC template. [1] Release `js-sdk-v1.0.5` was published on `2024-04-02`, with 6 subsequent commits on `main`. [2] The `agi-inc/agent-protocol` repository was created on `2023-07-06`, received its latest push on `2025-04-08`, and remains unarchived. [3]",
   "v05_identity_sentence_md": "**Agent Protocol** (`AP`) is a single common interface for communicating with agents. It is an API specification, a list of endpoints which the agent should expose with predefined response models, and the protocol is tech stack agnostic: any agent can adopt it no matter what framework that agent is using, or not using. [1] The README says the project is maintained by AGI, Inc., and it directs discussion to the AIEF Discord and that community's dedicated `agent-protocol` channel. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Act](/category/act/) (`act`)"
    },
    {
     "label": "Form",
     "value_md": "Endpoint (`endpoint`)"
    },
    {
     "label": "Originated by",
     "value_md": "AI Engineer Foundation (AIEF) community, alongside e2b and Auto-GPT [1][3]"
    },
    {
     "label": "Governed by",
     "value_md": "AGI, Inc. (`agi-inc/agent-protocol`, redirected from `AI-Engineer-Foundation/agent-protocol`) [1][3]"
    },
    {
     "label": "Track",
     "value_md": "Community / vendor OpenAPI specification (`agi-inc/agent-protocol`; no SDO submission) [1][3]"
    },
    {
     "label": "Status",
     "value_md": "Dormant: no push since 2025-04-08 (repository not archived). \"Common interface for interacting with AI agents. The protocol is tech stack agnostic\" (repository description); defined as an OpenAPI REST spec with two core routes, POST /ap/v1/agent/tasks and POST /ap/v1/agent/tasks/{task_id}/steps [1][2][3]"
    },
    {
     "label": "Version",
     "value_md": "v1 (`/ap/v1/agent/tasks`, `js-sdk-v1.0.5` released 2024-04-02) [1][2][3]"
    },
    {
     "label": "Wire format",
     "value_md": "HTTP REST API over JSON (`OpenAPI specification`) [1][3]"
    },
    {
     "label": "Specification",
     "value_md": "https://github.com/agi-inc/agent-protocol [3]"
    },
    {
     "label": "Found at",
     "value_md": "Out-of-band base URL; endpoints under `/ap/v1/agent/tasks` and `/ap/v1/agent/tasks/{task_id}/steps` [1][3]"
    },
    {
     "label": "Licence",
     "value_md": "MIT License (`agi-inc/agent-protocol`) [3]"
    }
   ],
   "v05_problem_md": "The README calls the AI agent space young and says most developers are building agents in their own way. The interface is often different every time, which makes communication hard and makes agents hard to compare. A single communication interface would also make devtools that work with agents out of the box easier to develop. [1] The common interface is an API specification any agent developer can implement. Endpoints come with predefined response models, and any agent can adopt the protocol with a framework or without one. [1] A developer can use the SDK or implement the protocol independently. The SDK wraps the agent in a web server for communication with that agent and, in the future, between agents. [1] The present work is a minimal core, to be extended iteratively from what agent developers need. The immediate goal is a simple benchmarking standard and a simple implementation: start the agent, and that is all. [1] The high-level future roadmap lists agent-to-agent communication, third-party services named Agent I/O, authentication on behalf of users, and protocol plugins. A missing feature is invited as an RFC. [1]",
   "v05_mechanism_delta_md": "The common interface is an API specification any agent developer can implement. Endpoints come with predefined response models, and any agent can adopt the protocol with a framework or without one. [1] A developer can use the SDK or implement the protocol independently. The SDK wraps the agent in a web server for communication with that agent and, in the future, between agents. [1]",
   "v05_scope_boundary_md": "The present work is a minimal core, to be extended iteratively from what agent developers need. The immediate goal is a simple benchmarking standard and a simple implementation: start the agent, and that is all. [1] The high-level future roadmap lists agent-to-agent communication, third-party services named Agent I/O, authentication on behalf of users, and protocol plugins. A missing feature is invited as an RFC. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "OpenAPI Specification 3.0",
      "spec_or_rfc": "OpenAPI 3.0.1",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "The Agent Protocol OpenAPI 3.0 document defines POST /ap/v1/agent/tasks to create a task and POST /ap/v1/agent/tasks/{task_id}/steps to execute a step, and it defines no well-known discovery path. [3][4]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "a2a",
      "target_name": "Agent2Agent Protocol (A2A)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "The AIEF protocol creates tasks and steps with POST /ap/v1/agent/tasks and POST /ap/v1/agent/tasks/{task_id}/steps on a base URL the client already knows, while A2A discovers /.well-known/agent-card.json and delegates tasks over JSON-RPC 2.0, gRPC, or HTTP+JSON. [3][5]"
     },
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "The AIEF protocol is a REST task and step queue at /ap/v1/agent/tasks, while MCP is a JSON-RPC session for tools and resources. [3][6]"
     },
     {
      "target_id": "open-responses",
      "target_name": "Open Responses",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "The AIEF API executes steps on a task resource via POST /ap/v1/agent/tasks/{task_id}/steps, while Open Responses creates a model response at /v1/responses and can continue a turn over WebSocket with response.create. [3][7]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Act protocols](/category/act/)** — Category index for `act` standards."
    }
   ],
   "v05_compiled_md": "---\nid: agent-protocol-aief\ntitle: \"Agent Protocol\"\ntier: spec_brief\nlifecycle_status: retired\ncategory: act\nform: endpoint\nwire_archetype: harnesses_rpc_ui\nspec_url: https://github.com/agi-inc/agent-protocol\nlast_checked: 2026-11-12\n---\n\n# Agent Protocol\n\n**Category:** [Act](/category/act/) (`act`) · **Form:** Endpoint (`endpoint`) · **Last checked:** 2026-11-12\n\n> ***Status notice (Dormant Specification):** The AI Engineer Foundation Agent Protocol repository has had no commits since `2025-04-08`.*\n\n**Agent Protocol** (`AP`) is a single common interface for communicating with agents. It is an API specification, a list of endpoints which the agent should expose with predefined response models, and the protocol is tech stack agnostic: any agent can adopt it no matter what framework that agent is using, or not using. [1] The README says the project is maintained by AGI, Inc., and it directs discussion to the AIEF Discord and that community's dedicated `agent-protocol` channel. [1] Right now the protocol is defined as a REST API, via the OpenAPI spec, with two essential routes for interaction with the agent. [1] `POST /ap/v1/agent/tasks` is the route for creating a new task for the agent, for example giving the agent an objective to accomplish. `POST /ap/v1/agent/tasks/{task_id}/steps` is the route for executing one step of the defined task. [1] The same description names a few additional routes for listing the tasks, listing the steps, and downloading or uploading artifacts. [1] The README says the work is starting with a minimal core, to be built on iteratively by learning from agent developers about what they actually need. A proposed change or improvement is made by following the RFC template. [1] Release `js-sdk-v1.0.5` was published on `2024-04-02`, with 6 subsequent commits on `main`. [2] The `agi-inc/agent-protocol` repository was created on `2023-07-06`, received its latest push on `2025-04-08`, and remains unarchived. [3]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Act](/category/act/) (`act`) |\n| **Form** | Endpoint (`endpoint`) |\n| **Originated by** | AI Engineer Foundation (AIEF) community, alongside e2b and Auto-GPT [1][3] |\n| **Governed by** | AGI, Inc. (`agi-inc/agent-protocol`, redirected from `AI-Engineer-Foundation/agent-protocol`) [1][3] |\n| **Track** | Community / vendor OpenAPI specification (`agi-inc/agent-protocol`; no SDO submission) [1][3] |\n| **Status** | Dormant: no push since 2025-04-08 (repository not archived). \"Common interface for interacting with AI agents. The protocol is tech stack agnostic\" (repository description); defined as an OpenAPI REST spec with two core routes, POST /ap/v1/agent/tasks and POST /ap/v1/agent/tasks/{task_id}/steps [1][2][3] |\n| **Version** | v1 (`/ap/v1/agent/tasks`, `js-sdk-v1.0.5` released 2024-04-02) [1][2][3] |\n| **Wire format** | HTTP REST API over JSON (`OpenAPI specification`) [1][3] |\n| **Specification** | https://github.com/agi-inc/agent-protocol [3] |\n| **Found at** | Out-of-band base URL; endpoints under `/ap/v1/agent/tasks` and `/ap/v1/agent/tasks/{task_id}/steps` [1][3] |\n| **Licence** | MIT License (`agi-inc/agent-protocol`) [3] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nThe README calls the AI agent space young and says most developers are building agents in their own way. The interface is often different every time, which makes communication hard and makes agents hard to compare. A single communication interface would also make devtools that work with agents out of the box easier to develop. [1] The common interface is an API specification any agent developer can implement. Endpoints come with predefined response models, and any agent can adopt the protocol with a framework or without one. [1] A developer can use the SDK or implement the protocol independently. The SDK wraps the agent in a web server for communication with that agent and, in the future, between agents. [1] The present work is a minimal core, to be extended iteratively from what agent developers need. The immediate goal is a simple benchmarking standard and a simple implementation: start the agent, and that is all. [1] The high-level future roadmap lists agent-to-agent communication, third-party services named Agent I/O, authentication on behalf of users, and protocol plugins. A missing feature is invited as an RFC. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **OpenAPI Specification 3.0** | `OpenAPI 3.0.1` | Profiles classic standard | The Agent Protocol OpenAPI 3.0 document defines POST /ap/v1/agent/tasks to create a task and POST /ap/v1/agent/tasks/{task_id}/steps to execute a step, and it defines no well-known discovery path. [3][4] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Agent2Agent Protocol (A2A)](/protocols/a2a/)** | Peer alternative | The AIEF protocol creates tasks and steps with POST /ap/v1/agent/tasks and POST /ap/v1/agent/tasks/{task_id}/steps on a base URL the client already knows, while A2A discovers /.well-known/agent-card.json and delegates tasks over JSON-RPC 2.0, gRPC, or HTTP+JSON. [3][5] |\n| **[Model Context Protocol](/protocols/mcp/)** | Peer alternative | The AIEF protocol is a REST task and step queue at /ap/v1/agent/tasks, while MCP is a JSON-RPC session for tools and resources. [3][6] |\n| **[Open Responses](/protocols/open-responses/)** | Peer alternative | The AIEF API executes steps on a task resource via POST /ap/v1/agent/tasks/{task_id}/steps, while Open Responses creates a model response at /v1/responses and can continue a turn over WebSocket with response.create. [3][7] |\n\n---\n\n## See also\n\n- **Category:** [Act protocols](/category/act/)\n\n---\n\n## References\n\n1. AGI, Inc., *Agent Protocol README* (checked 2026-10-31) — <https://raw.githubusercontent.com/agi-inc/agent-protocol/main/README.md>\n2. AGI, Inc., *Release js-sdk-v1.0.5* (published 2024-04-02) — <https://github.com/agi-inc/agent-protocol/releases/tag/js-sdk-v1.0.5>\n3. AGI, Inc., *agi-inc/agent-protocol repository* (checked 2026-10-31) — <https://github.com/agi-inc/agent-protocol>\n4. OpenAPI Initiative, *OpenAPI Specification v3.0.1* (2017-12-06) — <https://spec.openapis.org/oas/v3.0.1.html>\n5. Agentic AI Foundation, *A2A joins AAIF's open agentic stack* (published 2026-08-17; modified 2026-09-24) — <https://aaif.io/blog/a2a-joins-aaif>\n6. Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation* (2026-07-28) — <https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning>\n7. Open Responses, *Changelog* (releases 2026-04-24 and 2026-01-15; fetched 2026-10-30) — <https://www.openresponses.org/changelog>\n",
   "superseded_by": null
  },
  {
   "acronym": "AITP",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "aliases": [
    "Agent Interaction & Transaction Protocol"
   ],
   "analog": "HTTP+HTML for agent-to-agent interaction, per the project's own framing",
   "collisions": [],
   "discovery": {
    "mechanism": "None defined by AITP itself; agents are addressed directly once discovered out of band (e.g. via the NEAR AI Hub's own agent registry, which is outside the AITP spec)",
    "path": null
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://aitp.dev/",
     "claim": "NEAR AI, *AITP: Agent Interaction & Transaction Protocol (v0.1.0 Draft)*, fetched 2026-10-30",
     "date": null,
     "quote": "On this page AITP: Agent Interaction & Transaction Protocol Version: 0.1.0 Status: Draft note / AITP: Agent Interaction & Transaction Protocol Version: 0.1.0 Status: Draft / AITP enables AI agents to communicate securely across trust boundaries while providing extensible mechanisms for structured interactions. / A core protocol for communicating with agents in Chat Threads, inspired by and largely compatible with the OpenAI Assistant/Threads API. / AITP is a spec in progress and we are open to comments, feedback, and contributions! / GitHub Overview Vision Threads Thread Transports AITP-T01: Threads API Capabilities AITP-01: Payments AITP-02: Decisions / Agent Interaction & Transaction Protocol Version: 0.1.0 Status: Draft note AITP is a spec / While these frameworks and AITP all involve agent communication, AITP specifically addresses interactions across trust boundaries, like a user's agent talking to a business's agent.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://www.near.org/blog/ethdenver-2025",
     "claim": "NEAR Foundation, *ETHDenver 2025 Recap*, 2025-03-07 (fetched 2026-10-30)",
     "date": null,
     "quote": "Illia also introduced AITP: Agent Interaction and Transaction Protocol, a groundbreaking initiative designed to create a common standard for AI agents to communicate and transact securely across networks.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://aitp.dev/transports/aitp-t01-threads-api",
     "claim": "NEAR AI, *AITP-T01: Threads API — AITP Specification*, fetched 2026-10-30",
     "date": null,
     "quote": "AITP-T01 is an AITP transport using a JSON API over HTTPS. / capabilities: an array of strings, each a URL to the JSON schema file for a capability / Capability exchange Part of POST /v1/thread Since the Threads API is stateful, in AITP-T01 / summary_large_image https://aitp.dev/img/docusaurus-social-card.jpg https://aitp.dev/img/docusaurus-social-card.jpg https://aitp.dev/transports/aitp-t01-threads-api en en en current docs-default-current / Agent Interaction & Transaction Protocol GitHub Overview Vision Threads Thread Transports AITP-T01: Threads API / The client is never trusted to provide an accurate thread history; this makes the thread 'tamper-proof' by a malicious client.",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://aitp.dev/threads",
     "claim": "NEAR AI, *Threads — AITP Specification*, fetched 2026-10-30",
     "date": null,
     "quote": "AITP messages may be passed in JSON format, encoded as strings. content: list[str] / AITP messages may be passed in JSON format, encoded as strings. content: list[str] # / & Transaction Protocol GitHub Overview Vision Threads Thread Transports AITP-T01: Threads API Capabilities AITP-01: / AITP doesn't define a central or decentralized directory of agents; each Transport defines how to find or connect to agents. / In AITP, agents have IDs that are only unique to the current thread.",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://aitp.dev/capabilities",
     "claim": "NEAR AI, *Capabilities — AITP Specification*, fetched 2026-10-30",
     "date": null,
     "quote": "A capability consists of a set of JSON schemas (also called message types), which define how to create structured JSON chat messages. / AITP-02: Decisions v1.0.0 Requesting decisions or actions from an agent or to be displayed in a user interface Draft Live on NEAR AI / & Transaction Protocol GitHub Overview Vision Threads Thread Transports AITP-T01: Threads API Capabilities AITP-01: / agent. Capability List Capability ID Schema Description Spec Status Implementation Status AITP-01: Payments v1.0.0 / capability. For example: { \"messages\": [ { \"role\": \"assistant\", \"content\": [ \"{\\\"$schema\\\": \\\"https://crates.io/crates/aitp_schema/capabilities/aitp-04-transactions/v1.0.0/schema.json\\\", \\\"type\\\": / This structured approach reduces ambiguity, enables validation, and allows UIs to present information optimally. / Capability exchange is the responsibility of the Transport; it is not contained in the messages. / A powerful feature of AITP is the message passthrough pattern, where agents can forward capability messages they don't necessarily handle themselves. / AITP-01: Payments v1.0.0 Agent-native payment protocol for user-to-agent and agent-to-agent payments Ideation In Development",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://github.com/nearai/aitp",
     "claim": "GitHub API, *nearai/aitp repository metadata*, created 2024-12-30; pushed 2025-04-01; fetched 2026-10-30",
     "date": null,
     "quote": "\"created_at\": \"2024-12-30T13:53:23Z\", \"updated_at\": \"2026-09-13T09:08:58Z\", \"pushed_at\": \"2025-04-01T15:10:47Z\" / \"deployments_url\": \"https://api.github.com/repos/nearai/aitp/deployments\", \"created_at\": \"2024-12-30T13:53:23Z\", \"updated_at\": \"2026-09-13T09:08:58Z\", \"pushed_at\": \"2025-04-01T15:10:47Z\", \"git_url\": / \"https://api.github.com/users/nearai/received_events\", \"type\": \"Organization\", \"user_view_type\": \"public\", \"site_admin\": false }, \"html_url\": \"https://github.com/nearai/aitp\", \"description\": \"AITP: Agent / \"mirror_url\": null, \"archived\": false, \"disabled\": false, \"open_issues_count\": 8, \"license\": { \"key\": \"mit\", \"name\": \"MIT",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://github.com/nearai/aitp/tags",
     "claim": "GitHub API, *nearai/aitp tags*, fetched 2026-10-30",
     "date": null,
     "quote": "\"name\": \"aitp-py-v0.0.10\"",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://github.com/nearai/nearai",
     "claim": "NEAR AI, *nearai/nearai GitHub Repository (Deprecated)*, archived 2025-12-18; fetched 2026-10-30",
     "date": null,
     "quote": "The NEAR AI Developer Hub at https://app.near.ai/ will shut down on October 31, 2025 and replaced with this notice.",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://www.near.org/blog/near-foundation-joins-x402-foundation",
     "claim": "NEAR Foundation, *NEAR Foundation Joins the x402 Foundation*, 2026-07-14 (fetched 2026-10-30)",
     "date": null,
     "quote": "The NEAR Foundation has officially joined the x402 Foundation, the Linux Foundation body dedicated to advancing open, accessible, and transparent infrastructure for the agent economy.",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://github.com/nearai/aitp/commits",
     "claim": "GitHub API, *nearai/aitp commits*, fetched 2026-10-30",
     "date": null,
     "quote": "ae973629e7bbc6c49b56d2e24112289c570e429e author Illia Polosukhin 1735567167 +0900 committer Illia Polosukhin 1735567167 +0900 Initial commit \",\"verified_at\":\"2025-02-12T15:45:33Z\"",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://raw.githubusercontent.com/nearai/aitp/main/LICENSE",
     "claim": "NEAR AI, *nearai/aitp LICENSE (MIT)*, 2025 (fetched 2026-10-30)",
     "date": null,
     "quote": "Copyright (c) 2025 NEAR AI / MIT License Copyright (c) 2025 NEAR AI Permission is hereby granted, free of charge,",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://aitp.dev/capabilities/aitp-01-payments",
     "claim": "NEAR AI, *AITP-01: Payments — AITP Specification*, fetched 2026-10-30",
     "date": null,
     "quote": "GitHub Overview Vision Threads Thread Transports AITP-T01: Threads API Capabilities AITP-01: Payments AITP-01 Schema / Examples Capabilities AITP-01: Payments On this page AITP-01: Payments Version: 1.0.0 Spec Status: Ideation",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://json-schema.org/draft/2020-12/json-schema-core.html",
     "claim": "Austin Wright, Henry Andrews, Ben Hutton, and Greg Dennis, *JSON Schema: A Media Type for Describing JSON Documents (Draft 2020-12)*, 2022-06-16",
     "date": "2022-06-16",
     "quote": "JSON Schema defines the media type \"application/schema+json\", a JSON-based format",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://aaif.io/blog/a2a-joins-aaif",
     "claim": "Agentic AI Foundation, *A2A joins AAIF's open agentic stack*, published 2026-08-17; modified 2026-09-24",
     "date": null,
     "quote": "A2A v1.0, the first stable specification, shipped in March 2026.",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Current : the current protocol version, which is ready for use and may continue to receive backwards compatible changes.",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://a2ui.org/specification/v1.0-a2ui/",
     "claim": "A2UI project, *A2UI Protocol v1.0*, version 1.0; status Current; created 2025-11-20; last updated 2026-06-08",
     "date": null,
     "quote": "Version: 1.0 Status: Current Created: Nov 20, 2025 Last Updated: Jun 8, 2026",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://a2ui.org/specification/v0.9.1-a2ui-extension-specification/",
     "claim": "A2UI project, *A2UI A2A Extension Specification v0.9.1*, v0.9.1 (current); fetched 2026-10-30",
     "date": null,
     "quote": "The URI of this extension is https://a2ui.org/a2a-extension/a2ui/v0.9.1",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/specification.md",
     "claim": "Google (google-agentic-commerce), *Agentic Payment Protocol (v0.2)*, fetched 2026-10-30",
     "date": null,
     "quote": "Agentic Payment Protocol (v0.2)",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/README.md",
     "claim": "Agent Network Protocol community, *Agent Network Protocol (ANP) README*, checked 2026-10-30",
     "date": null,
     "quote": "the AgentConnect repository: - https://github.com/agent-network-protocol/AgentConnect AgentConnect focuses on practical SDK support for did:wba, authentication,",
     "ref": 19
    }
   ],
   "form": "endpoint",
   "governance": "NEAR AI, through its nearai/aitp GitHub repository under the MIT licence (`MIT`). \"AITP is a spec in progress and we are open to comments, feedback, and contributions!\". No standards-body process was found",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "added from arXiv 2504.16736 survey comparison, verified against aitp.dev, github.com/nearai/aitp"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "aitp",
   "implementation": "prototype",
   "last_verified": "2026-11-12",
   "name": "Agent Interaction & Transaction Protocol (AITP)",
   "native_status": "Draft, and inactive (\"Version: 0.1.0 Status: Draft\"). Latest commit on 2025-04-01; open issue \"Activity question\" (opened 2026-06-12) has 0 replies. The repository remains unarchived, while the NEAR AI Developer Hub shut down on October 31, 2025.",
   "origin": {
    "date": "2025",
    "org": "NEAR AI (NEAR Foundation)"
   },
   "part_of": null,
   "parties": [
    "agent-agent",
    "agent-human"
   ],
   "phase": "deprecated",
   "probe": {
    "method": "POST",
    "on_absent": "A 404 or a Threads-API-shaped response with no Capability exchange means this origin either doesn't speak AITP or only speaks the underlying OpenAI-compatible Threads transport without AITP's capability layer.",
    "parse": "A response containing a Thread object 'largely compatible with the OpenAI Assistant/Threads API' is necessary but not sufficient; confirming AITP specifically requires observing a Capability-exchange message (per the capabilities schema) rather than plain-text-only thread content.",
    "path": "{origin}/threads"
   },
   "question": "How do two agents representing different, mutually untrusted people or businesses (e.g. a personal assistant and an airline's booking agent) talk to each other, exchange forms and payment requests, and not just plain text?",
   "scope": "general",
   "spec_url": "https://aitp.dev/",
   "step": "coordinate",
   "summary_md": "**Agent Interaction & Transaction Protocol** (`AITP`) is a draft specification (`Version: 0.1.0`, `Status: Draft`) originated and governed by NEAR AI that enables AI agents to communicate across trust boundaries while providing extensible mechanisms for structured interactions. Introduced by Illia Polosukhin at ETHDenver on February 27, 2025, AITP combines a core protocol for communicating with agents in Chat Threads—inspired by and largely compatible with the OpenAI Assistant/Threads API—with an extensible set of JSON Schema capabilities for decisions, data requests, wallet signing, and payments. Its first defined transport, `AITP-T01`, is a stateful JSON API over HTTPS in which the HTTP server tracks active threads, capability exchange is part of `POST /v1/thread` via `capabilities` (an array of URLs to capability JSON schema files), and subsequent requests call `POST /v1/threads/{thread_id}`, `POST /v1/threads/{thread_id}/messages`, and `GET /v1/threads/{thread_id}/messages`. Inside a `Thread`, messages carry `content: list[str]`, where structured capability payloads are passed in JSON format encoded as strings referencing a versioned `$schema` URL alongside plain-text messages. The `nearai/aitp` repository was created on `2024-12-30` and last pushed on `2025-04-01`, the same day the `aitp` Python package (`0.0.10`, tagged `aitp-py-v0.0.10`) was uploaded to PyPI. Although the specification remains at draft version 0.1.0, the NEAR AI Developer Hub (`https://app.near.ai/`) that hosted AITP agents shut down on October 31, 2025 (`nearai/nearai` was archived on Dec 18, 2025), and the NEAR Foundation joined the x402 Foundation in July 2026.",
   "track": "single-vendor",
   "version": {
    "date": null,
    "label": "0.1.0 (Draft)"
   },
   "watch": [
    {
     "type": "page",
     "url": "https://aitp.dev/",
     "selector": "main",
     "cadence": "weekly"
    }
   ],
   "use_cases": [
    "agent-to-agent-messaging",
    "render-agent-ui",
    "agent-checkout",
    "describe-agent-capabilities"
   ],
   "audience": [
    "agent-builder",
    "standards-body"
   ],
   "pairs_with": [
    "a2a",
    "mcp",
    "a2ui",
    "ap2",
    "anp"
   ],
   "prerequisites": [],
   "hatnote_md": "This page is about the Agent Interaction & Transaction Protocol (AITP), the draft agent-to-agent protocol published by NEAR AI at aitp.dev. It is not the Agent Identity & Trust Protocol, a separate project with the same initials (\"Agent Identity & Trust Protocol (AITP) — Core\"), and not the \"AI Tool Provider\" API used by a NEAR MCP server package (\"…interfaces with the AITP (AI Tool Provider) API to dynamically build and manage available AI tools and prompts.\"). For the Google-originated agent protocol see [Agent2Agent Protocol (A2A)](/protocols/a2a/); AITP's own documentation calls the [Model Context Protocol (MCP)](/protocols/mcp/) complementary.",
   "tier": "spec_brief",
   "lifecycle_status": "retired",
   "wire_archetype": "harnesses_rpc_ui",
   "status_notice_md": "**Status notice (Inactive Draft):** The NEAR Agent Interaction & Transaction Protocol (`AITP v0.1.0`) repository has had no commits since `2025-04-01`.",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "**Status notice (Inactive Draft):** The NEAR Agent Interaction & Transaction Protocol (`AITP v0.1.0`) repository has had no commits since `2025-04-01`. This page is about the Agent Interaction & Transaction Protocol (AITP), the draft agent-to-agent protocol published by NEAR AI at aitp.dev. It is not the Agent Identity & Trust Protocol, a separate project with the same initials (\"Agent Identity & Trust Protocol (AITP) — Core\"), and not the \"AI Tool Provider\" API used by a NEAR MCP server package (\"…interfaces with the AITP (AI Tool Provider) API to dynamically build and manage available AI tools and prompts.\"). For the Google-originated agent protocol see [Agent2Agent Protocol (A2A)](/protocols/a2a/); AITP's own documentation calls the [Model Context Protocol (MCP)](/protocols/mcp/) complementary. [1]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Agent Interaction & Transaction Protocol** (`AITP`) is a draft specification (`Version: 0.1.0`, `Status: Draft`) originated and governed by NEAR AI that enables AI agents to communicate across trust boundaries while providing extensible mechanisms for structured interactions. [1] Introduced by Illia Polosukhin at ETHDenver on February 27, 2025, AITP combines a core protocol for communicating with agents in Chat Threads—inspired by and largely compatible with the OpenAI Assistant/Threads API—with an extensible set of JSON Schema capabilities for decisions, data requests, wallet signing, and payments. [1][2] Its first defined transport, `AITP-T01`, is a stateful JSON API over HTTPS in which the HTTP server tracks active threads, capability exchange is part of `POST /v1/thread` via `capabilities` (an array of URLs to capability JSON schema files), and subsequent requests call `POST /v1/threads/{thread_id}`, `POST /v1/threads/{thread_id}/messages`, and `GET /v1/threads/{thread_id}/messages`. [3] Inside a `Thread`, messages carry `content: list[str]`, where structured capability payloads are passed in JSON format encoded as strings referencing a versioned `$schema` URL alongside plain-text messages. [4][5] The `nearai/aitp` repository was created on `2024-12-30` and last pushed on `2025-04-01`, the same day the `aitp` Python package (`0.0.10`, tagged `aitp-py-v0.0.10`) was uploaded to PyPI. [6][7] Although the specification remains at draft version 0.1.0, the NEAR AI Developer Hub (`https://app.near.ai/`) that hosted AITP agents shut down on October 31, 2025 (`nearai/nearai` was archived on Dec 18, 2025), and the NEAR Foundation joined the x402 Foundation in July 2026. [8][9]",
   "v05_identity_sentence_md": "**Agent Interaction & Transaction Protocol** (`AITP`) is a draft specification (`Version: 0.1.0`, `Status: Draft`) originated and governed by NEAR AI that enables AI agents to communicate across trust boundaries while providing extensible mechanisms for structured interactions. [1] Introduced by Illia Polosukhin at ETHDenver on February 27, 2025, AITP combines a core protocol for communicating with agents in Chat Threads—inspired by and largely compatible with the OpenAI Assistant/Threads API—with an extensible set of JSON Schema capabilities for decisions, data requests, wallet signing, and payments. [1][2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Coordinate](/category/coordinate/) (`coordinate`)"
    },
    {
     "label": "Form",
     "value_md": "Endpoint (`endpoint`)"
    },
    {
     "label": "Originated by",
     "value_md": "NEAR AI / NEAR Foundation (initial commit by Illia Polosukhin; introduced at ETHDenver `2025-02-27`) [6][10][11]"
    },
    {
     "label": "Governed by",
     "value_md": "NEAR AI via `nearai/aitp` on GitHub (single-vendor open specification; no standards-body stream) [1][5][6]"
    },
    {
     "label": "Track",
     "value_md": "Single-vendor open specification (NEAR AI; inactive draft) [1][6]"
    },
    {
     "label": "Status",
     "value_md": "Draft, and inactive (\"Version: 0.1.0 Status: Draft\"). Latest commit on 2025-04-01; open issue \"Activity question\" (opened 2026-06-12) has 0 replies. The repository remains unarchived, while the NEAR AI Developer Hub shut down on October 31, 2025. [1][5][12]"
    },
    {
     "label": "Version",
     "value_md": "Core spec `0.1.0` (`Draft`); capability schemas `v1.0.0` (`AITP-01`–`AITP-05`, with `v0.1.0` in `AITP-01` examples); PyPI `aitp` `0.0.10` (`aitp-py-v0.0.10`, `2025-04-01`) [1][5][12]"
    },
    {
     "label": "Wire format",
     "value_md": "Stateful JSON-over-HTTPS (`AITP-T01`) modeled on OpenAI Assistants v2 `/v1/threads`, with capability payloads serialized as JSON strings carrying `\"$schema\"` in `content: list[str]` [3][4][5]"
    },
    {
     "label": "Specification",
     "value_md": "[aitp.dev](https://aitp.dev/) · [Threads](https://aitp.dev/threads) · [AITP-T01: Threads API](https://aitp.dev/transports/aitp-t01-threads-api) · [Capabilities](https://aitp.dev/capabilities) · [nearai/aitp Repo](https://raw.githubusercontent.com/nearai/aitp/main/README.md) [1][3][4]"
    },
    {
     "label": "Found at",
     "value_md": "No directory or `/.well-known/` file; transports define addressing (`HTTPS` URLs in `AITP-T01`), and capabilities are exchanged in `POST <agent id>/v1/thread` [3][4][5]"
    },
    {
     "label": "Licence",
     "value_md": "MIT License (`Copyright (c) 2025 NEAR AI`) [6][11]"
    }
   ],
   "v05_problem_md": "Browser-use agents that navigate websites are transitional bridges to the current web, while internal orchestration frameworks (`CrewAI`, `Autogen`, `LangGraph`) coordinate only agents with the same owner rather than crossing trust boundaries. [1] Exchanging flight options, payment quotes, or addresses solely in unstructured chat introduces ambiguity and requires LLM interpretation instead of programmatic validation. [5] In `AITP-T01`, the HTTP server tracks active threads so the client is never trusted to provide thread history, and capability exchange happens in `POST /v1/thread` rather than inside chat messages. [3][5] Actors sharing a capability exchange JSON-serialized messages validated against versioned schemas in `Thread.messages[].content[]`, and agents can forward capability messages they do not handle themselves using the passthrough pattern. [5] Universal agent identifiers, authentication mechanisms, and a central or decentralized agent directory are intentionally absent from AITP: agent `id` values are unique only within a thread, and each transport defines how to locate agents. [4] Only `AITP-02: Decisions` and `AITP-03: Data Request` reached `Draft` / `Live on NEAR AI` status; `AITP-01: Payments` (`Ideation`, `In Development`), `AITP-04: NEAR Wallet` (`In Development`), and `AITP-05` through `AITP-09` (`Planned`) were not finished. [5]",
   "v05_mechanism_delta_md": "In `AITP-T01`, the HTTP server tracks active threads so the client is never trusted to provide thread history, and capability exchange happens in `POST /v1/thread` rather than inside chat messages. [3][5] Actors sharing a capability exchange JSON-serialized messages validated against versioned schemas in `Thread.messages[].content[]`, and agents can forward capability messages they do not handle themselves using the passthrough pattern. [5]",
   "v05_scope_boundary_md": "Universal agent identifiers, authentication mechanisms, and a central or decentralized agent directory are intentionally absent from AITP: agent `id` values are unique only within a thread, and each transport defines how to locate agents. [4] Only `AITP-02: Decisions` and `AITP-03: Data Request` reached `Draft` / `Live on NEAR AI` status; `AITP-01: Payments` (`Ideation`, `In Development`), `AITP-04: NEAR Wallet` (`In Development`), and `AITP-05` through `AITP-09` (`Planned`) were not finished. [5]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "JSON Schema 2020-12",
      "spec_or_rfc": "JSON Schema 2020-12",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "AITP-T01 carries chat threads as a JSON API over HTTPS, with optional capability messages for decisions, forms, wallet signing, and payments, and AITP defines no discovery URL because agents are addressed out of band. [1][13]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "a2a",
      "target_name": "Agent2Agent Protocol (A2A)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "AITP-T01 carries chat threads as a JSON API over HTTPS and defines no discovery URL, while A2A discovers an Agent Card at /.well-known/agent-card.json and delegates tasks over JSON-RPC 2.0, gRPC, or HTTP+JSON. [1][14]"
     },
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "AITP is an agent-to-agent thread protocol whose transport is AITP-T01, a JSON API over HTTPS, with no discovery URL of its own, while MCP is the JSON-RPC 2.0 session a host uses to reach tools, resources, and prompt templates. [1][15]"
     },
     {
      "target_id": "a2ui",
      "target_name": "A2UI (Agent to UI) Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "AITP defines no discovery document and addresses agents out of band, while A2UI is a pre-approved component catalog that can be advertised on an A2A Agent Card via the v0.9.1 A2A Extension URI https://a2ui.org/a2a-extension/a2ui/v0.9.1. [1][16][17]"
     },
     {
      "target_id": "ap2",
      "target_name": "Agent Payments Protocol (AP2)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "AITP defines its own quote and payment JSON capability messages in AITP-01: Payments (Spec Status: Ideation, Implementation Status: In Development) and does not reference AP2, whereas AP2 is Google's verifiable-credential mandate protocol. [1][18]"
     },
     {
      "target_id": "anp",
      "target_name": "Agent Network Protocol",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "AITP has no discovery document and addresses agents out of band, while ANP publishes /.well-known/agent-descriptions and uses RFC 9421 HTTP signatures in ANP-02. [1][19]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Coordinate protocols](/category/coordinate/)** — Category index for `coordinate` standards."
    }
   ],
   "v05_compiled_md": "---\nid: aitp\ntitle: \"Agent Interaction & Transaction Protocol (AITP)\"\ntier: spec_brief\nlifecycle_status: retired\ncategory: coordinate\nform: endpoint\nwire_archetype: harnesses_rpc_ui\nspec_url: https://aitp.dev/\nlast_checked: 2026-11-12\n---\n\n# Agent Interaction & Transaction Protocol (AITP)\n\n**Category:** [Coordinate](/category/coordinate/) (`coordinate`) · **Form:** Endpoint (`endpoint`) · **Last checked:** 2026-11-12\n\n> ***Status notice (Inactive Draft):** The NEAR Agent Interaction & Transaction Protocol (`AITP v0.1.0`) repository has had no commits since `2025-04-01`. This page is about the Agent Interaction & Transaction Protocol (AITP), the draft agent-to-agent protocol published by NEAR AI at aitp.dev. It is not the Agent Identity & Trust Protocol, a separate project with the same initials (\"Agent Identity & Trust Protocol (AITP) — Core\"), and not the \"AI Tool Provider\" API used by a NEAR MCP server package (\"…interfaces with the AITP (AI Tool Provider) API to dynamically build and manage available AI tools and prompts.\"). For the Google-originated agent protocol see [Agent2Agent Protocol (A2A)](/protocols/a2a/); AITP's own documentation calls the [Model Context Protocol (MCP)](/protocols/mcp/) complementary. [1]*\n\n**Agent Interaction & Transaction Protocol** (`AITP`) is a draft specification (`Version: 0.1.0`, `Status: Draft`) originated and governed by NEAR AI that enables AI agents to communicate across trust boundaries while providing extensible mechanisms for structured interactions. [1] Introduced by Illia Polosukhin at ETHDenver on February 27, 2025, AITP combines a core protocol for communicating with agents in Chat Threads—inspired by and largely compatible with the OpenAI Assistant/Threads API—with an extensible set of JSON Schema capabilities for decisions, data requests, wallet signing, and payments. [1][2] Its first defined transport, `AITP-T01`, is a stateful JSON API over HTTPS in which the HTTP server tracks active threads, capability exchange is part of `POST /v1/thread` via `capabilities` (an array of URLs to capability JSON schema files), and subsequent requests call `POST /v1/threads/{thread_id}`, `POST /v1/threads/{thread_id}/messages`, and `GET /v1/threads/{thread_id}/messages`. [3] Inside a `Thread`, messages carry `content: list[str]`, where structured capability payloads are passed in JSON format encoded as strings referencing a versioned `$schema` URL alongside plain-text messages. [4][5] The `nearai/aitp` repository was created on `2024-12-30` and last pushed on `2025-04-01`, the same day the `aitp` Python package (`0.0.10`, tagged `aitp-py-v0.0.10`) was uploaded to PyPI. [6][7] Although the specification remains at draft version 0.1.0, the NEAR AI Developer Hub (`https://app.near.ai/`) that hosted AITP agents shut down on October 31, 2025 (`nearai/nearai` was archived on Dec 18, 2025), and the NEAR Foundation joined the x402 Foundation in July 2026. [8][9]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Coordinate](/category/coordinate/) (`coordinate`) |\n| **Form** | Endpoint (`endpoint`) |\n| **Originated by** | NEAR AI / NEAR Foundation (initial commit by Illia Polosukhin; introduced at ETHDenver `2025-02-27`) [6][10][11] |\n| **Governed by** | NEAR AI via `nearai/aitp` on GitHub (single-vendor open specification; no standards-body stream) [1][5][6] |\n| **Track** | Single-vendor open specification (NEAR AI; inactive draft) [1][6] |\n| **Status** | Draft, and inactive (\"Version: 0.1.0 Status: Draft\"). Latest commit on 2025-04-01; open issue \"Activity question\" (opened 2026-06-12) has 0 replies. The repository remains unarchived, while the NEAR AI Developer Hub shut down on October 31, 2025. [1][5][12] |\n| **Version** | Core spec `0.1.0` (`Draft`); capability schemas `v1.0.0` (`AITP-01`–`AITP-05`, with `v0.1.0` in `AITP-01` examples); PyPI `aitp` `0.0.10` (`aitp-py-v0.0.10`, `2025-04-01`) [1][5][12] |\n| **Wire format** | Stateful JSON-over-HTTPS (`AITP-T01`) modeled on OpenAI Assistants v2 `/v1/threads`, with capability payloads serialized as JSON strings carrying `\"$schema\"` in `content: list[str]` [3][4][5] |\n| **Specification** | [aitp.dev](https://aitp.dev/) · [Threads](https://aitp.dev/threads) · [AITP-T01: Threads API](https://aitp.dev/transports/aitp-t01-threads-api) · [Capabilities](https://aitp.dev/capabilities) · [nearai/aitp Repo](https://raw.githubusercontent.com/nearai/aitp/main/README.md) [1][3][4] |\n| **Found at** | No directory or `/.well-known/` file; transports define addressing (`HTTPS` URLs in `AITP-T01`), and capabilities are exchanged in `POST <agent id>/v1/thread` [3][4][5] |\n| **Licence** | MIT License (`Copyright (c) 2025 NEAR AI`) [6][11] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nBrowser-use agents that navigate websites are transitional bridges to the current web, while internal orchestration frameworks (`CrewAI`, `Autogen`, `LangGraph`) coordinate only agents with the same owner rather than crossing trust boundaries. [1] Exchanging flight options, payment quotes, or addresses solely in unstructured chat introduces ambiguity and requires LLM interpretation instead of programmatic validation. [5] In `AITP-T01`, the HTTP server tracks active threads so the client is never trusted to provide thread history, and capability exchange happens in `POST /v1/thread` rather than inside chat messages. [3][5] Actors sharing a capability exchange JSON-serialized messages validated against versioned schemas in `Thread.messages[].content[]`, and agents can forward capability messages they do not handle themselves using the passthrough pattern. [5] Universal agent identifiers, authentication mechanisms, and a central or decentralized agent directory are intentionally absent from AITP: agent `id` values are unique only within a thread, and each transport defines how to locate agents. [4] Only `AITP-02: Decisions` and `AITP-03: Data Request` reached `Draft` / `Live on NEAR AI` status; `AITP-01: Payments` (`Ideation`, `In Development`), `AITP-04: NEAR Wallet` (`In Development`), and `AITP-05` through `AITP-09` (`Planned`) were not finished. [5]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **JSON Schema 2020-12** | `JSON Schema 2020-12` | Analogous to classic standard | AITP-T01 carries chat threads as a JSON API over HTTPS, with optional capability messages for decisions, forms, wallet signing, and payments, and AITP defines no discovery URL because agents are addressed out of band. [1][13] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Agent2Agent Protocol (A2A)](/protocols/a2a/)** | Peer alternative | AITP-T01 carries chat threads as a JSON API over HTTPS and defines no discovery URL, while A2A discovers an Agent Card at /.well-known/agent-card.json and delegates tasks over JSON-RPC 2.0, gRPC, or HTTP+JSON. [1][14] |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | AITP is an agent-to-agent thread protocol whose transport is AITP-T01, a JSON API over HTTPS, with no discovery URL of its own, while MCP is the JSON-RPC 2.0 session a host uses to reach tools, resources, and prompt templates. [1][15] |\n| **[A2UI (Agent to UI) Protocol](/protocols/a2ui/)** | Complements | AITP defines no discovery document and addresses agents out of band, while A2UI is a pre-approved component catalog that can be advertised on an A2A Agent Card via the v0.9.1 A2A Extension URI https://a2ui.org/a2a-extension/a2ui/v0.9.1. [1][16][17] |\n| **[Agent Payments Protocol (AP2)](/protocols/ap2/)** | Peer alternative | AITP defines its own quote and payment JSON capability messages in AITP-01: Payments (Spec Status: Ideation, Implementation Status: In Development) and does not reference AP2, whereas AP2 is Google's verifiable-credential mandate protocol. [1][18] |\n| **[Agent Network Protocol](/protocols/anp/)** | Peer alternative | AITP has no discovery document and addresses agents out of band, while ANP publishes /.well-known/agent-descriptions and uses RFC 9421 HTTP signatures in ANP-02. [1][19] |\n\n---\n\n## See also\n\n- **Category:** [Coordinate protocols](/category/coordinate/)\n\n---\n\n## References\n\n1. NEAR AI, *AITP: Agent Interaction & Transaction Protocol (v0.1.0 Draft)* (fetched 2026-10-30) — <https://aitp.dev/>\n2. NEAR Foundation, *ETHDenver 2025 Recap* (2025-03-07 (fetched 2026-10-30)) — <https://www.near.org/blog/ethdenver-2025>\n3. NEAR AI, *AITP-T01: Threads API — AITP Specification* (fetched 2026-10-30) — <https://aitp.dev/transports/aitp-t01-threads-api>\n4. NEAR AI, *Threads — AITP Specification* (fetched 2026-10-30) — <https://aitp.dev/threads>\n5. NEAR AI, *Capabilities — AITP Specification* (fetched 2026-10-30) — <https://aitp.dev/capabilities>\n6. GitHub API, *nearai/aitp repository metadata* (created 2024-12-30; pushed 2025-04-01; fetched 2026-10-30) — <https://github.com/nearai/aitp>\n7. GitHub API, *nearai/aitp tags* (fetched 2026-10-30) — <https://github.com/nearai/aitp/tags>\n8. NEAR AI, *nearai/nearai GitHub Repository (Deprecated)* (archived 2025-12-18; fetched 2026-10-30) — <https://github.com/nearai/nearai>\n9. NEAR Foundation, *NEAR Foundation Joins the x402 Foundation* (2026-07-14 (fetched 2026-10-30)) — <https://www.near.org/blog/near-foundation-joins-x402-foundation>\n10. GitHub API, *nearai/aitp commits* (fetched 2026-10-30) — <https://github.com/nearai/aitp/commits>\n11. NEAR AI, *nearai/aitp LICENSE (MIT)* (2025 (fetched 2026-10-30)) — <https://raw.githubusercontent.com/nearai/aitp/main/LICENSE>\n12. NEAR AI, *AITP-01: Payments — AITP Specification* (fetched 2026-10-30) — <https://aitp.dev/capabilities/aitp-01-payments>\n13. Austin Wright, Henry Andrews, Ben Hutton, and Greg Dennis, *JSON Schema: A Media Type for Describing JSON Documents (Draft 2020-12)* (2022-06-16) — <https://json-schema.org/draft/2020-12/json-schema-core.html>\n14. Agentic AI Foundation, *A2A joins AAIF's open agentic stack* (published 2026-08-17; modified 2026-09-24) — <https://aaif.io/blog/a2a-joins-aaif>\n15. Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation* (2026-07-28) — <https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning>\n16. A2UI project, *A2UI Protocol v1.0* (version 1.0; status Current; created 2025-11-20; last updated 2026-06-08) — <https://a2ui.org/specification/v1.0-a2ui/>\n17. A2UI project, *A2UI A2A Extension Specification v0.9.1* (v0.9.1 (current); fetched 2026-10-30) — <https://a2ui.org/specification/v0.9.1-a2ui-extension-specification/>\n18. Google (google-agentic-commerce), *Agentic Payment Protocol (v0.2)* (fetched 2026-10-30) — <https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/specification.md>\n19. Agent Network Protocol community, *Agent Network Protocol (ANP) README* (checked 2026-10-30) — <https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/README.md>\n",
   "superseded_by": null
  },
  {
   "acronym": "Coral",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "aliases": [
    "CoralOS",
    "Coral"
   ],
   "analog": "Kubernetes, but for AI agents, plus an app-store marketplace layer",
   "collisions": [],
   "discovery": {
    "mechanism": "Agents are discovered via the centralized Coral Marketplace (publish/discover/monetize with built-in attestation); a local Coral Server also exposes a session-creation API for orchestrating a given agent graph; MCP is used as the underlying inter-agent transport for 'coralized' agents",
    "path": null
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://docs.coralos.ai/about",
     "claim": "Coral Protocol, *About - CoralOS Docs*, checked 2026-10-31",
     "date": null,
     "quote": "Kubernetes for AI agents: CoralOS is a platform for everything between your agents and production: registry, runtimes, security, and orchestration. / Key Components Coralized Agents Add any agent from any framework to our marketplace in minutes. Coral Marketplace Discover, publish, monetize & verify agents with built-in attestation. Coral Server Orchestrate many agents together easily. Coral Console Monitor, test & debug agents during development. Coralizer Turn any MCP server into a coralized agent. / For MCP-to-agent conversion, we now recommend a coding agent such as Codex or Claude Code, using the Koog agent template as a reference. Coralizer's link command is still useful for making local agents available to your server. / match from Coral's growing,_jsx(_components.a,{href:https://github.com/Coral-Protocol/awesome-composable-agents,children:library}), of agents to assemble advanced systems faster and without vendor / https://github.com/Coral-Protocol/awesome / Application developers can mix and match from Coral’s growing library of agents to assemble advanced systems faster and without vendor lock-in. / Most multi-agent systems are built hierarchically, where a central \"planner\" delegates tasks to worker agents or runs workflows sequentially. This structure quickly becomes a bottleneck, where one agent has too much responsibility. / Reduces reliance on a single planner, supports adaptive plan updates, and minimizes redundant context passing, resulting in more scalable and cost-efficient execution. / On the GAIA benchmark, Anemoi achieved 52.73 % accuracy with a small LLM (GPT-4.1-mini) as the planner, surpassing the strongest open-source baseline OWL (43.63 %) by +9.09 % under identical LLM settings. / Higher throughput - Multiple agents run concurrently without blocking, using the server's coroutine-based connection handling. Blocking agents made in e.g. Python do not impact the whole system, as they would be isolated processes. / Agent communication is scoped to sessions. Applications remain responsible for authenticating users, controlling access to the server API, and mapping callbacks and stored results to the correct tenant.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://docs.coralos.ai/welcome",
     "claim": "Coral Protocol, *Welcome to the CoralOS documentation - CoralOS Docs*, checked 2026-10-31",
     "date": null,
     "quote": "The decentralized protocol powering AI agent collaboration, trust, and payments. / the CoralOS documentation\",\"name\":\"Welcome to the CoralOS documentation\",\"description\":\"The decentralized protocol powering AI agent collaboration, trust, / ${!!isOpaque}); } / https://github.com/pacocoursey/next-themes/blob/a7eeabc39cfb37d74ea3d82eac674d0e1851b1cb/next-themes/src/index.tsx#L234-L253 */ function disableAnimation() { const css = / canonical\\\" href=\\\"https://docs.coralos.ai/welcome\\\" / data-mint-head rel=\\\"canonical\\\" href=\\\"https://docs.coralos.ai/welcome\\\">\\u003clink data-mint-head rel=\\\"alternate\\\" type=\\\"application/xml\\\" href=\\\"/sitemap.xml\\\">\\u003clink data-mint-head rel=\\\"alternate\\\"",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://docs.coralos.ai/api-reference/local/create-session",
     "claim": "Coral Protocol, *Create session - CoralOS Docs*, checked 2026-10-31",
     "date": null,
     "quote": "Creates a new session in a given namespace POST / api / v1 / local / session / The session request body, containing the agents to use in the session and other settings / \"required\":[\"agentGraphRequest\",\"namespaceProvider\"],\"title\":\"SessionRequest\" / \"required\":[\"namespace\",\"sessionId\"],\"title\":\"SessionIdentifier\" / \"lastModified\":\"2026-10-12T21:26:06.820Z\",\"originalFileLocation\":\"api-reference/local/create-session.mdx\" / Docs\\\">\\u003cmeta data-mint-head name=\\\"msapplication-TileColor\\\" content=\\\"#FF5C00\\\">\\u003clink data-mint-head rel=\\\"canonical\\\" href=\\\"https://docs.coralos.ai/api-reference/local/create-session\\\">\\u003clink / \"openapi\":\"/api_v1.json post /api/v1/local/session\" / --url https://api.example.com/api/v1/local/session / payload) req.Header.Add(\"Authorization\", \"Bearer \") req.Header.Add(\"Content-Type\", \"application/json\") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ / HttpResponse response = Unirest.post(\"https://api.example.com/api/v1/local/session\") .header(\"Authorization\", \"Bearer \") .header(\"Content-Type\", \"application/json\") .body(\"{\\n \\\"agentGraphRequest\\\": {\\n / A set, containing sets that define the agent groups by name",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://www.jsonrpc.org/specification",
     "claim": "JSON-RPC Working Group, *JSON-RPC 2.0 Specification*, 2013-01-04",
     "date": "2013-01-04",
     "quote": "Origin Date: 2010-03-26 (based on the 2009-05-24 version)",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Current : the current protocol version, which is ready for use and may continue to receive backwards compatible changes.",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://aaif.io/blog/a2a-joins-aaif",
     "claim": "Agentic AI Foundation, *A2A joins AAIF's open agentic stack*, published 2026-08-17; modified 2026-09-24",
     "date": null,
     "quote": "A2A v1.0, the first stable specification, shipped in March 2026.",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://github.com/agntcy/oasf/releases",
     "claim": "AGNTCY, *agntcy/oasf releases*, checked 2026-10-31",
     "date": null,
     "quote": "\"html_url\": \"https://github.com/agntcy/oasf/releases/tag/v1.1.0\", \"id\": 352159727, \"author\": { \"login\": \"github-actions[bot]\", \"id\": 41898282, \"node_id\": \"MDM6Qm90NDE4OTgyODI=\", \"avatar_url\":",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://www.linuxfoundation.org/press/linux-foundation-announces-operational-launch-of-x402-foundation-to-standardize-internet-native-payments-for-ai-agents-and-applications",
     "claim": "Linux Foundation, *Linux Foundation Announces Operational Launch of x402 Foundation to Standardize Internet-Native Payments for AI Agents and Applications*, July 14, 2026",
     "date": null,
     "quote": "SAN FRANCISCO, July 14, 2026 – The Linux Foundation , the nonprofit organization enabling mass innovation through open source, today announced the operational launch of the x402 Foundation",
     "ref": 8
    }
   ],
   "form": "endpoint",
   "governance": "Single company/startup-led open-source project (GitHub org Coral-Protocol); rebranded 'CoralOS' (docs moved from docs.coralprotocol.org to docs.coralos.ai); not a multi-stakeholder standards body",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "added from arXiv 2504.16736 survey comparison, verified against docs.coralos.ai/about, docs.coralos.ai/api-reference/local/create-session"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "coral-protocol",
   "implementation": "shipping",
   "last_verified": "2026-11-12",
   "name": "Coral Protocol (CoralOS)",
   "native_status": "\"Kubernetes for AI agents: a platform for everything between your agents and production — registry, runtimes, security, and orchestration\" (current docs homepage); described elsewhere as a 'decentralized protocol powering AI agent collaboration, trust, and payments'",
   "origin": {
    "date": "2025",
    "org": "Coral Protocol (GitHub org Coral-Protocol)"
   },
   "part_of": null,
   "parties": [
    "agent-agent"
   ],
   "phase": "living",
   "probe": {
    "method": "POST",
    "on_absent": "A 404, connection refusal, or 401/403 (this endpoint requires bearer auth) most commonly just means no local Coral Server is running at this address — Coral Server is typically run locally by the developer rather than exposed as a public origin, so a failed probe against an arbitrary public site proves little either way.",
    "parse": "A 200 response containing a JSON object with namespace and sessionId fields confirms a running Coral (local) server per its documented API reference; the request body's x402Budgets field on agent entries also confirms native x402 micropayment-budget support.",
    "path": "{origin}/api/v1/local/session"
   },
   "question": "How do independently-built agents from a public marketplace get orchestrated together into one multi-agent system, with privacy isolation and built-in payment budgets, on top of MCP?",
   "scope": "general",
   "spec_url": "https://docs.coralos.ai/welcome",
   "step": "coordinate",
   "summary_md": "**Coral Protocol (CoralOS)** is a multi-agent orchestration platform described in its documentation as \"Kubernetes for AI agents,\" spanning agent registry, runtimes, security, and orchestration for AI agent collaboration, trust, and payments. The platform defines five core components—`Coralized Agents`, `Coral Marketplace`, `Coral Server`, `Coral Console`, and `Coralizer`—allowing application developers to combine agents across frameworks into session-scoped communication graphs. To create a multi-agent session on a local server, an application sends an HTTP `POST /api/v1/local/session` request carrying a required `Authorization: Bearer <token>` header and a `Content-Type: application/json` `SessionRequest` payload. The `SessionRequest` body requires `agentGraphRequest` (`agents`, `groups`, and `customTools`) and `namespaceProvider` (`create_if_not_exists` or `use_existing`), plus optional `execution` (`defer` or `immediate`) and `budgetSettings`, returning HTTP `200` `SessionIdentifier` (`namespace` and `sessionId`). Published under `CoralOS Docs` at `docs.coralos.ai` (with the `api-reference/local/create-session.mdx` OpenAPI specification derived from `api_v1.json` and modified on `2026-10-12`), the documentation recommends coding agents such as Codex or Claude Code with the Koog agent template for MCP-to-agent conversion while keeping Coralizer's `link` command for local agents.",
   "track": "single-vendor",
   "version": {
    "date": null,
    "label": "unversioned, continuously updated platform (Coral Server, Coralizer, Marketplace)"
   },
   "watch": [
    {
     "type": "page",
     "url": "https://docs.coralos.ai/welcome",
     "selector": "main",
     "cadence": "weekly"
    }
   ],
   "use_cases": [
    "agent-to-agent-messaging",
    "describe-agent-capabilities",
    "accept-agent-payments",
    "expose-tools-to-agents"
   ],
   "audience": [
    "agent-builder",
    "platform"
   ],
   "pairs_with": [
    "mcp",
    "a2a",
    "oasf",
    "x402"
   ],
   "prerequisites": [
    "mcp"
   ],
   "hatnote_md": "",
   "tier": "spec_brief",
   "lifecycle_status": "active",
   "wire_archetype": "harnesses_rpc_ui",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": null,
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Coral Protocol (CoralOS)** is a multi-agent orchestration platform described in its documentation as \"Kubernetes for AI agents,\" spanning agent registry, runtimes, security, and orchestration for AI agent collaboration, trust, and payments. [1][2] The platform defines five core components—`Coralized Agents`, `Coral Marketplace`, `Coral Server`, `Coral Console`, and `Coralizer`—allowing application developers to combine agents across frameworks into session-scoped communication graphs. [1] To create a multi-agent session on a local server, an application sends an HTTP `POST /api/v1/local/session` request carrying a required `Authorization: Bearer <token>` header and a `Content-Type: application/json` `SessionRequest` payload. [3] The `SessionRequest` body requires `agentGraphRequest` (`agents`, `groups`, and `customTools`) and `namespaceProvider` (`create_if_not_exists` or `use_existing`), plus optional `execution` (`defer` or `immediate`) and `budgetSettings`, returning HTTP `200` `SessionIdentifier` (`namespace` and `sessionId`). [3] Published under `CoralOS Docs` at `docs.coralos.ai` (with the `api-reference/local/create-session.mdx` OpenAPI specification derived from `api_v1.json` and modified on `2026-10-12`), the documentation recommends coding agents such as Codex or Claude Code with the Koog agent template for MCP-to-agent conversion while keeping Coralizer's `link` command for local agents. [1][3]",
   "v05_identity_sentence_md": "**Coral Protocol (CoralOS)** is a multi-agent orchestration platform described in its documentation as \"Kubernetes for AI agents,\" spanning agent registry, runtimes, security, and orchestration for AI agent collaboration, trust, and payments. [1][2] The platform defines five core components—`Coralized Agents`, `Coral Marketplace`, `Coral Server`, `Coral Console`, and `Coralizer`—allowing application developers to combine agents across frameworks into session-scoped communication graphs. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Coordinate](/category/coordinate/) (`coordinate`)"
    },
    {
     "label": "Form",
     "value_md": "Endpoint (`endpoint`)"
    },
    {
     "label": "Originated by",
     "value_md": "Coral Protocol (`github.com/Coral-Protocol` / `coralos.ai`) [1][2]"
    },
    {
     "label": "Governed by",
     "value_md": "Single-vendor open-source project (`github.com/Coral-Protocol`) [1][2]"
    },
    {
     "label": "Track",
     "value_md": "Single-vendor open-source platform and protocol documentation (`docs.coralos.ai`, `Coral-Protocol`) [1][2]"
    },
    {
     "label": "Status",
     "value_md": "\"Kubernetes for AI agents: a platform for everything between your agents and production — registry, runtimes, security, and orchestration\" (current docs homepage); described elsewhere as a 'decentralized protocol powering AI agent collaboration, trust, and payments' [2][3]"
    },
    {
     "label": "Version",
     "value_md": "`/api/v1/` REST control plane (`/api_v1.json` OpenAPI specification) [3]"
    },
    {
     "label": "Wire format",
     "value_md": "HTTP/1.1 REST (`application/json`) over coroutine-managed sessions [1][3]"
    },
    {
     "label": "Specification",
     "value_md": "[Coral Protocol Documentation](https://docs.coralos.ai/welcome) · [Create Session API](https://docs.coralos.ai/api-reference/local/create-session) [2][3]"
    },
    {
     "label": "Found at",
     "value_md": "`POST /api/v1/local/session`, `Authorization: Bearer <token>`, `Content-Type: application/json` [3]"
    }
   ],
   "v05_problem_md": "Most multi-agent systems are built hierarchically around a central `planner` that delegates tasks to `worker agents` or runs workflows sequentially, creating a bottleneck where one controller holds excessive responsibility and passes redundant context. [1] Coral introduces a graph-based architecture for direct agent-to-agent communication so agents can monitor progress, assess results, identify bottlenecks, and propose refinements in real time—citing the Anemoi system's `52.73 %` accuracy on the GAIA benchmark with `GPT-4.1-mini` versus `43.63 %` for OWL—while running agents concurrently as isolated processes using coroutine-based connection handling. [1] Through `POST /api/v1/local/session`, the server wires `GraphAgentRequest` entries into named communication `groups` with per-agent and shared session budgets (`budgetSettings` and `x402Budgets`). [3] Although agent communication is scoped to sessions, host applications remain responsible for authenticating users, controlling access to the server API, and mapping callbacks and stored results to the correct tenant. [1] For MCP-to-agent conversion, the documentation recommends coding agents with the Koog agent template rather than standalone protocol translation, while `Coralizer` retains its `link` command for local server agents. [1]",
   "v05_mechanism_delta_md": "Coral introduces a graph-based architecture for direct agent-to-agent communication so agents can monitor progress, assess results, identify bottlenecks, and propose refinements in real time—citing the Anemoi system's `52.73 %` accuracy on the GAIA benchmark with `GPT-4.1-mini` versus `43.63 %` for OWL—while running agents concurrently as isolated processes using coroutine-based connection handling. [1] Through `POST /api/v1/local/session`, the server wires `GraphAgentRequest` entries into named communication `groups` with per-agent and shared session budgets (`budgetSettings` and `x402Budgets`). [3]",
   "v05_scope_boundary_md": "Although agent communication is scoped to sessions, host applications remain responsible for authenticating users, controlling access to the server API, and mapping callbacks and stored results to the correct tenant. [1] For MCP-to-agent conversion, the documentation recommends coding agents with the Koog agent template rather than standalone protocol translation, while `Coralizer` retains its `link` command for local server agents. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "JSON-RPC 2.0 Specification",
      "spec_or_rfc": "JSON-RPC 2.0",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "Coral uses MCP, a JSON-RPC client-server protocol, as the inter-agent transport for coralized agents, and the local Coral Server exposes POST /api/v1/local/session to orchestrate an agent graph beside the centralized marketplace. [2][4]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "Coral's inter-agent messages for coralized agents are MCP JSON-RPC, and the Coral Server adds POST /api/v1/local/session, with bearer authentication, to group those agents into one session graph. [2][5]"
     },
     {
      "target_id": "a2a",
      "target_name": "Agent2Agent Protocol (A2A)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "Coral orchestrates a graph of agents inside a local Coral Server session over MCP at POST /api/v1/local/session, while A2A delegates a task to one remote agent over JSON-RPC 2.0, gRPC, or HTTP+JSON using an Agent Card. [2][6]"
     },
     {
      "target_id": "oasf",
      "target_name": "Open Agentic Schema Framework",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "OASF is a versioned skill, domain, and module taxonomy, while Coral discovery is the Coral marketplace and the local session-creation API rather than an OASF directory. [2][7]"
     },
     {
      "target_id": "x402",
      "target_name": "x402",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Coral's session API includes native x402 micropayment budgets per agent around publish, discover, and monetize, while x402 is the separate payment protocol those session budgets draw on. [2][8]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Coordinate protocols](/category/coordinate/)** — Category index for `coordinate` standards."
    }
   ],
   "v05_compiled_md": "---\nid: coral-protocol\ntitle: \"Coral Protocol (CoralOS)\"\ntier: spec_brief\nlifecycle_status: active\ncategory: coordinate\nform: endpoint\nwire_archetype: harnesses_rpc_ui\nspec_url: https://docs.coralos.ai/welcome\nlast_checked: 2026-11-12\n---\n\n# Coral Protocol (CoralOS)\n\n**Category:** [Coordinate](/category/coordinate/) (`coordinate`) · **Form:** Endpoint (`endpoint`) · **Last checked:** 2026-11-12\n\n**Coral Protocol (CoralOS)** is a multi-agent orchestration platform described in its documentation as \"Kubernetes for AI agents,\" spanning agent registry, runtimes, security, and orchestration for AI agent collaboration, trust, and payments. [1][2] The platform defines five core components—`Coralized Agents`, `Coral Marketplace`, `Coral Server`, `Coral Console`, and `Coralizer`—allowing application developers to combine agents across frameworks into session-scoped communication graphs. [1] To create a multi-agent session on a local server, an application sends an HTTP `POST /api/v1/local/session` request carrying a required `Authorization: Bearer <token>` header and a `Content-Type: application/json` `SessionRequest` payload. [3] The `SessionRequest` body requires `agentGraphRequest` (`agents`, `groups`, and `customTools`) and `namespaceProvider` (`create_if_not_exists` or `use_existing`), plus optional `execution` (`defer` or `immediate`) and `budgetSettings`, returning HTTP `200` `SessionIdentifier` (`namespace` and `sessionId`). [3] Published under `CoralOS Docs` at `docs.coralos.ai` (with the `api-reference/local/create-session.mdx` OpenAPI specification derived from `api_v1.json` and modified on `2026-10-12`), the documentation recommends coding agents such as Codex or Claude Code with the Koog agent template for MCP-to-agent conversion while keeping Coralizer's `link` command for local agents. [1][3]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Coordinate](/category/coordinate/) (`coordinate`) |\n| **Form** | Endpoint (`endpoint`) |\n| **Originated by** | Coral Protocol (`github.com/Coral-Protocol` / `coralos.ai`) [1][2] |\n| **Governed by** | Single-vendor open-source project (`github.com/Coral-Protocol`) [1][2] |\n| **Track** | Single-vendor open-source platform and protocol documentation (`docs.coralos.ai`, `Coral-Protocol`) [1][2] |\n| **Status** | \"Kubernetes for AI agents: a platform for everything between your agents and production — registry, runtimes, security, and orchestration\" (current docs homepage); described elsewhere as a 'decentralized protocol powering AI agent collaboration, trust, and payments' [2][3] |\n| **Version** | `/api/v1/` REST control plane (`/api_v1.json` OpenAPI specification) [3] |\n| **Wire format** | HTTP/1.1 REST (`application/json`) over coroutine-managed sessions [1][3] |\n| **Specification** | [Coral Protocol Documentation](https://docs.coralos.ai/welcome) · [Create Session API](https://docs.coralos.ai/api-reference/local/create-session) [2][3] |\n| **Found at** | `POST /api/v1/local/session`, `Authorization: Bearer <token>`, `Content-Type: application/json` [3] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nMost multi-agent systems are built hierarchically around a central `planner` that delegates tasks to `worker agents` or runs workflows sequentially, creating a bottleneck where one controller holds excessive responsibility and passes redundant context. [1] Coral introduces a graph-based architecture for direct agent-to-agent communication so agents can monitor progress, assess results, identify bottlenecks, and propose refinements in real time—citing the Anemoi system's `52.73 %` accuracy on the GAIA benchmark with `GPT-4.1-mini` versus `43.63 %` for OWL—while running agents concurrently as isolated processes using coroutine-based connection handling. [1] Through `POST /api/v1/local/session`, the server wires `GraphAgentRequest` entries into named communication `groups` with per-agent and shared session budgets (`budgetSettings` and `x402Budgets`). [3] Although agent communication is scoped to sessions, host applications remain responsible for authenticating users, controlling access to the server API, and mapping callbacks and stored results to the correct tenant. [1] For MCP-to-agent conversion, the documentation recommends coding agents with the Koog agent template rather than standalone protocol translation, while `Coralizer` retains its `link` command for local server agents. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **JSON-RPC 2.0 Specification** | `JSON-RPC 2.0` | Profiles classic standard | Coral uses MCP, a JSON-RPC client-server protocol, as the inter-agent transport for coralized agents, and the local Coral Server exposes POST /api/v1/local/session to orchestrate an agent graph beside the centralized marketplace. [2][4] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Model Context Protocol](/protocols/mcp/)** | Builds on | Coral's inter-agent messages for coralized agents are MCP JSON-RPC, and the Coral Server adds POST /api/v1/local/session, with bearer authentication, to group those agents into one session graph. [2][5] |\n| **[Agent2Agent Protocol (A2A)](/protocols/a2a/)** | Peer alternative | Coral orchestrates a graph of agents inside a local Coral Server session over MCP at POST /api/v1/local/session, while A2A delegates a task to one remote agent over JSON-RPC 2.0, gRPC, or HTTP+JSON using an Agent Card. [2][6] |\n| **[Open Agentic Schema Framework](/protocols/oasf/)** | Complements | OASF is a versioned skill, domain, and module taxonomy, while Coral discovery is the Coral marketplace and the local session-creation API rather than an OASF directory. [2][7] |\n| **[x402](/protocols/x402/)** | Complements | Coral's session API includes native x402 micropayment budgets per agent around publish, discover, and monetize, while x402 is the separate payment protocol those session budgets draw on. [2][8] |\n\n---\n\n## See also\n\n- **Category:** [Coordinate protocols](/category/coordinate/)\n\n---\n\n## References\n\n1. Coral Protocol, *About - CoralOS Docs* (checked 2026-10-31) — <https://docs.coralos.ai/about>\n2. Coral Protocol, *Welcome to the CoralOS documentation - CoralOS Docs* (checked 2026-10-31) — <https://docs.coralos.ai/welcome>\n3. Coral Protocol, *Create session - CoralOS Docs* (checked 2026-10-31) — <https://docs.coralos.ai/api-reference/local/create-session>\n4. JSON-RPC Working Group, *JSON-RPC 2.0 Specification* (2013-01-04) — <https://www.jsonrpc.org/specification>\n5. Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation* (2026-07-28) — <https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning>\n6. Agentic AI Foundation, *A2A joins AAIF's open agentic stack* (published 2026-08-17; modified 2026-09-24) — <https://aaif.io/blog/a2a-joins-aaif>\n7. AGNTCY, *agntcy/oasf releases* (checked 2026-10-31) — <https://github.com/agntcy/oasf/releases>\n8. Linux Foundation, *Linux Foundation Announces Operational Launch of x402 Foundation to Standardize Internet-Native Payments for AI Agents and Applications* (July 14, 2026) — <https://www.linuxfoundation.org/press/linux-foundation-announces-operational-launch-of-x402-foundation-to-standardize-internet-native-payments-for-ai-agents-and-applications>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "WAP",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "aliases": [
    "WAP"
   ],
   "analog": "macro record-and-replay, packaged as an MCP tool",
   "collisions": [
    "Wireless Application Protocol (unrelated, legacy mobile-web WAP)"
   ],
   "discovery": {
    "mechanism": "None — WAP is not a network-discoverable, site-facing protocol. It is a local pipeline: a Chrome extension records a user's browser session, a Python SDK converts the recording into an 'exact-replay' or 'smart-replay' action list, and that action list can be converted into a local MCP server for reuse by any MCP-speaking agent.",
    "path": null
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://raw.githubusercontent.com/OTA-Tech-AI/web-agent-protocol/main/README.md",
     "claim": "OTA Technologies Inc. (OTA-Tech-AI), *Web Agent Protocol (WAP) README*, fetched 2026-10-31",
     "date": null,
     "quote": "The Web Agent Protocol (WAP) is a standardized framework designed to enable seamless interaction between users, web agents, and browsers by recording and replaying browser actions. / It separates the concerns of action recording and execution, allowing for efficient automation and reusability. The Python SDK for WAP implements the full specification, making it easy to: / Convert recorded actions into _MCP_ servers for reuse by any agent or user 4. Replay those lists using the _WAP-Replay_ protocol to ensure accurate browser operations. / Run the following command to start the server to collect data from the extension: bash python action_collect_server.py Once the server is up, you can start to record from the page using WAP Chrome extension. The server listens on http://localhost:4934/action-data by default, please make sure the Host and Port in the extension settings match this server config. Each session will be saved to: bash data/YYYYMMDD/taskid/summary_event_<timestamp>.json / python wap_replay/generate_exact_replay_list.py --data_dir_path data/<date>/<task_id> --output_dir_path data_processed/exact_replay / converted MCP servers will be located under mcp_servers folder / need any extra steps for setup and deployments. Visit WAP Replay Tool releases for / extension. 2. Convert the raw event stream into either _exact‑replay_ or _smart‑replay_ action lists. / from the page using WAP Chrome extension. The server listens on http://localhost:4934/action-data by default, / It separates the concerns of action recording and execution, allowing for efficient automation and reusability. / 1. Collect user‑interaction data with the OTA‑WAP Chrome extension. 2. Convert the raw event stream into either _exact‑replay_ or _smart‑replay_ action lists. / Exact replay – exactly reproduce every action | python wap_replay/generate_exact_replay_list.py --data_dir_path data/<date>/<task_id> --output_dir_path data_processed/exact_replay | | Smart replay – condensed goal‑oriented steps | python wap_replay/generate_smart_replay_list.py --data_dir_path data/<date>/<task_id> --output_dir_path data_processed/smart_replay / Acknowledgement Browser-Use: https://github.com/browser-use/browser-use MCP: https://github.com/modelcontextprotocol/python-sdk DOM Extension: https://github.com/kdzwinel/DOMListenerExtension",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://web.archive.org/web/20260607080002/https://www.otatech.ai/",
     "claim": "OTA Technologies Inc., *OTA — The Power of Browser Agent AI (archived homepage)*, archived 2026-06-07; fetched 2026-10-31",
     "date": null,
     "quote": "Follow us LinkedIn Youtube © 2025 OTA Technologies Inc. / OTA-v1 BAM OTA-AI/OTA-v1 Web-Agent-Protocol (WAP) Our Browser Agent Model (BAM) OTA-v1 is a specialized Browser Agent Model (BAM) fine-tuned from the Qwen2.5-14B base model. Designed to excel in controlling browser environments, OTA-v1 leverages frameworks like browser-use to perform automated browser tasks with high precision. / artificial Intelligence. Follow us LinkedIn Youtube © 2025 OTA Technologies Inc. !Wayback Machine 38",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://github.com/OTA-Tech-AI/web-agent-protocol",
     "claim": "OTA Technologies Inc. (OTA-Tech-AI), *OTA-Tech-AI/web-agent-protocol GitHub repository*, last push 2025-06-19; fetched 2026-10-31",
     "date": null,
     "quote": "\"created_at\": \"2025-05-17T17:47:15Z\", \"updated_at\": \"2026-10-17T01:12:59Z\", \"pushed_at\": \"2025-06-19T04:03:18Z\" / menu Latest commit History 34 Commits 34 Commits Folders and files Name Name Last / align=\\\"center\\\" dir=\\\"auto\\\"\\u003e\\n \\u003ca target=\\\"_blank\\\" rel=\\\"noopener noreferrer\\\" href=\\\"/OTA-Tech-AI/web-agent-protocol/blob/main/chrome-extension/assets/beholder-tool-kit-long.png\\\"\\u003e\\u003cimg / \"svn_url\": \"https://github.com/OTA-Tech-AI/web-agent-protocol\", \"homepage\": \"https://otatech.ai\", \"size\": 5612, \"stargazers_count\": 507, \"watchers_count\": 507, \"language\": \"Python\", \"has_issues\": true, / https://repository-images.githubusercontent.com/985409238/cd142b6f-912a-4d3e-a94f-610e1744af54 @github summary_large_image GitHub - OTA-Tech-AI/web-agent-protocol: 🌐Web Agent Protocol (WAP) - Record and replay / \"full_name\": \"OTA-Tech-AI/web-agent-protocol\", / target=\\\"_blank\\\" rel=\\\"noopener noreferrer\\\" href=\\\"/OTA-Tech-AI/web-agent-protocol/blob/main/assets/wap_replay_tool_demo.gif\\\"\\u003e\\u003cimg / Convert the raw event stream into either exact‑replay or smart‑replay action lists. / and deployments. Visit \\u003ca href=\\\"https://github.com/OTA-Tech-AI/web-agent-protocol/releases\\\"\\u003eWAP Replay Tool releases\\u003c/a\\u003e for more details.\\u003c/p\\u003e\\n\\u003cp dir=\\\"auto\\\"\\u003e\\u003ca / listens on \\u003ca href=\\\"http://localhost:4934/action-data\\\" rel=\\\"nofollow\\\"\\u003ehttp://localhost:4934/action-data\\u003c/a\\u003e by default, please make sure the Host and Port / \"license\": { \"key\": \"mit\", \"name\": \"MIT License\" / \"spdx_id\": \"MIT\"",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://github.com/OTA-Tech-AI/web-agent-protocol/releases/tag/wap-replay-tool-1.0.0",
     "claim": "OTA Technologies Inc. (OTA-Tech-AI), *WAP Replay Tool Desktop 1.0.0 release (wap-replay-tool-1.0.0)*, 2025-06-01; fetched 2026-10-31",
     "date": null,
     "quote": "\"tag_name\": \"wap-replay-tool-1.0.0\", \"target_commitish\": \"main\", \"name\": \"WAP Replay Tool Desktop 1.0.0\", \"draft\": false, \"immutable\": false, \"prerelease\": false, \"created_at\": \"2025-05-24T15:10:23Z\", \"updated_at\": \"2025-06-01T19:16:12Z\", \"published_at\": \"2025-06-01T19:16:12Z\" / Download wap-replay-tool-1.0.0-setup.exe from Assets below / Release WAP Replay Tool Desktop 1.0.0 · OTA-Tech-AI/web-agent-protocol / 19:16 · 2 commits to main since this release wap-replay-tool-1.0.0 a86a662 Your all-in-one desktop / Roadmap We will add the action collecting service and replay list generation in the future release. Currently we only provide the installer of Windows, and we will soon support the desktop app for MacOS.",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://www.w3.org/TR/webdriver2/",
     "claim": "W3C, *WebDriver*, fetched 2026-11-12",
     "date": null,
     "quote": "WebDriver is a remote control interface",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Current : the current protocol version, which is ready for use and may continue to receive backwards compatible changes.",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://webmachinelearning.github.io/webmcp/",
     "claim": "Web Machine Learning Community Group (editors Brandon Walderman, Khushal Sagar, Dominic Farolino, and Samuel Dallstream), *WebMCP*, Draft Community Group Report, 11 November 2026",
     "date": null,
     "quote": "Draft Community Group Report, 11 November 2026",
     "ref": 7
    }
   ],
   "form": "document-format",
   "governance": "Single company (OTA Tech AI); MIT-licensed public GitHub repository; no independent standards process or multi-party governance found",
   "group": null,
   "history": [
    {
     "date": "2026-09-06",
     "note": "added from arXiv 2504.16736 survey comparison, verified against github.com/OTA-Tech-AI/web-agent-protocol"
    },
    {
     "date": "2026-09-06",
     "note": "added second evidence entry (otatech.ai) to satisfy the two-source verification requirement"
    },
    {
     "date": "2026-10-16",
     "note": "Web Agent Protocol is dormant: last commit 2025-06-03"
    },
    {
     "date": "2026-10-16",
     "note": "otatech.ai offline; homepage evidence now points at the 2026-06-07 Wayback snapshot"
    },
    {
     "date": "2026-10-16",
     "note": "No push since 2025-06-19 (over 180 days)"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "web-agent-protocol",
   "implementation": "prototype",
   "last_verified": "2026-11-12",
   "name": "Web Agent Protocol (WAP)",
   "native_status": "Dormant: repository last pushed 2025-06-19",
   "origin": {
    "date": "2025-05",
    "org": "OTA Tech AI"
   },
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "deprecated",
   "probe": {
    "method": "n/a",
    "on_absent": "n/a — presence is determined by whether the operator has locally installed the OTA-WAP Chrome extension and Python SDK and generated a recording, not by any network-visible signal at a target site.",
    "parse": "n/a",
    "path": "n/a — there is no remote origin to probe. WAP has no server-side or site-side presence to detect; every website it 'supports' is simply whatever page the operator's own Chrome extension happened to record, and replay runs entirely on the operator's own machine."
   },
   "question": "How does a recorded human browsing session get replayed reliably by an agent later, or turned into a reusable tool another agent can call?",
   "scope": "general",
   "spec_url": "https://github.com/OTA-Tech-AI/web-agent-protocol",
   "step": "act",
   "summary_md": "**Web Agent Protocol** (`WAP`) is a framework originated by OTA Technologies Inc. (`OTA-Tech-AI`) designed to enable interaction between users, web agents, and browsers by recording and replaying browser actions. It separates the concerns of action recording and execution, and the Python SDK for WAP implements the specification for collecting user-interaction data, converting raw event streams into replay action lists, converting recorded actions into `MCP` servers, and replaying those lists with `WAP-Replay`. On its corporate homepage, OTA Technologies Inc. lists `Web-Agent-Protocol (WAP)` alongside `OTA-v1` (`OTA-AI/OTA-v1`), a Browser Agent Model (`BAM`) fine-tuned from `Qwen2.5-14B` to control browser environments with frameworks such as `browser-use`. The OTA-WAP Chrome extension captures user-interaction events in the browser and sends them to a local data-collection server (`action_collect_server.py`) listening on `http://localhost:4934/action-data` by default, which saves each session to `data/YYYYMMDD/taskid/summary_event_<timestamp>.json`. Generator scripts convert a recorded session directory into an exact-replay or smart-replay JSON action list under `data_processed/exact_replay` or `data_processed/smart_replay`, which is executed by `run_replay.py` or converted into an MCP server under `mcp_servers`. The MIT-licensed `OTA-Tech-AI/web-agent-protocol` repository was created on `2025-05-17` and last pushed on `2025-06-19`, with 34 commits on the `main` branch and no numbered specification document. Its single GitHub release is `wap-replay-tool-1.0.0` (`WAP Replay Tool Desktop 1.0.0`), published on `2025-06-01`, shipping the Windows installer asset `wap_replay_tool_setup.exe` (referred to as `wap-replay-tool-1.0.0-setup.exe` in the release install notes).",
   "track": "single-vendor",
   "version": {
    "date": "2025-06-19",
    "label": "unversioned (main branch, 1 tag, last pushed 2025-06-19)"
   },
   "watch": [
    {
     "type": "github",
     "repo": "OTA-Tech-AI/web-agent-protocol",
     "mode": "release"
    }
   ],
   "use_cases": [
    "let-agents-act-on-my-site",
    "expose-tools-to-agents"
   ],
   "audience": [
    "agent-builder"
   ],
   "pairs_with": [
    "mcp",
    "webmcp"
   ],
   "prerequisites": [],
   "hatnote_md": "",
   "tier": "spec_brief",
   "lifecycle_status": "retired",
   "wire_archetype": "harnesses_rpc_ui",
   "status_notice_md": "**Status notice (Dormant Draft):** The Web Agent Protocol (`WAP`) repository has had no commits since `2025-06-19`.",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "**Status notice (Dormant Draft):** The Web Agent Protocol (`WAP`) repository has had no commits since `2025-06-19`.",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Web Agent Protocol** (`WAP`) is a framework originated by OTA Technologies Inc. (`OTA-Tech-AI`) designed to enable interaction between users, web agents, and browsers by recording and replaying browser actions. [1][2] It separates the concerns of action recording and execution, and the Python SDK for WAP implements the specification for collecting user-interaction data, converting raw event streams into replay action lists, converting recorded actions into `MCP` servers, and replaying those lists with `WAP-Replay`. [1] On its corporate homepage, OTA Technologies Inc. lists `Web-Agent-Protocol (WAP)` alongside `OTA-v1` (`OTA-AI/OTA-v1`), a Browser Agent Model (`BAM`) fine-tuned from `Qwen2.5-14B` to control browser environments with frameworks such as `browser-use`. [2] The OTA-WAP Chrome extension captures user-interaction events in the browser and sends them to a local data-collection server (`action_collect_server.py`) listening on `http://localhost:4934/action-data` by default, which saves each session to `data/YYYYMMDD/taskid/summary_event_<timestamp>.json`. [1] Generator scripts convert a recorded session directory into an exact-replay or smart-replay JSON action list under `data_processed/exact_replay` or `data_processed/smart_replay`, which is executed by `run_replay.py` or converted into an MCP server under `mcp_servers`. [1] The MIT-licensed `OTA-Tech-AI/web-agent-protocol` repository was created on `2025-05-17` and last pushed on `2025-06-19`, with 34 commits on the `main` branch and no numbered specification document. [3] Its single GitHub release is `wap-replay-tool-1.0.0` (`WAP Replay Tool Desktop 1.0.0`), published on `2025-06-01`, shipping the Windows installer asset `wap_replay_tool_setup.exe` (referred to as `wap-replay-tool-1.0.0-setup.exe` in the release install notes). [4]",
   "v05_identity_sentence_md": "**Web Agent Protocol** (`WAP`) is a framework originated by OTA Technologies Inc. (`OTA-Tech-AI`) designed to enable interaction between users, web agents, and browsers by recording and replaying browser actions. [1][2] It separates the concerns of action recording and execution, and the Python SDK for WAP implements the specification for collecting user-interaction data, converting raw event streams into replay action lists, converting recorded actions into `MCP` servers, and replaying those lists with `WAP-Replay`. [1] On its corporate homepage, OTA Technologies Inc. lists `Web-Agent-Protocol (WAP)` alongside `OTA-v1` (`OTA-AI/OTA-v1`), a Browser Agent Model (`BAM`) fine-tuned from `Qwen2.5-14B` to control browser environments with frameworks such as `browser-use`. [2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Act](/category/act/) (`act`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "OTA Technologies Inc. (`OTA-Tech-AI` / `otatech.ai`) [2][3]"
    },
    {
     "label": "Governed by",
     "value_md": "OTA Technologies Inc. (`OTA-Tech-AI`, single-vendor MIT repository) [2][3]"
    },
    {
     "label": "Track",
     "value_md": "Single-vendor open-source specification (`OTA-Tech-AI/web-agent-protocol`; no SDO submission) [3]"
    },
    {
     "label": "Status",
     "value_md": "Dormant: repository last pushed 2025-06-19 [3][4]"
    },
    {
     "label": "Version",
     "value_md": "Unversioned (`main` branch; `wap-replay-tool-1.0.0` desktop release) [1][3][4]"
    },
    {
     "label": "Wire format",
     "value_md": "Local HTTP POST JSON event stream (`summary_event_<timestamp>.json`) and `exact_replay` / `smart_replay` JSON lists [1][3]"
    },
    {
     "label": "Specification",
     "value_md": "https://github.com/OTA-Tech-AI/web-agent-protocol [3]"
    },
    {
     "label": "Found at",
     "value_md": "None on web origins; local collector binds to `http://localhost:4934/action-data` [1][3]"
    },
    {
     "label": "Licence",
     "value_md": "MIT License (`OTA-Tech-AI/web-agent-protocol`) [3]"
    }
   ],
   "v05_problem_md": "Standard browser-agent automation couples live model reasoning with browser step execution on every run instead of separating action recording from replay execution for reuse. [1] Without a structured recording and conversion pipeline, user-interaction streams captured in a browser cannot be directly replayed as exact step lists or condensed goal-oriented subgoal lists. [1] WAP separates action recording from execution by capturing raw DOM interaction events with the OTA-WAP Chrome extension and converting each recorded session into either an exact-replay action list that reproduces every action or a smart-replay action list of condensed goal-oriented steps. [1] Recorded tasks can be replayed with `run_replay.py` using the `WAP-Replay` protocol or converted via `generate_mcp_server.py` into MCP servers for reuse by any agent or user. [1] Although `README.md` describes WAP as a standardized framework, it is a single-vendor `MIT`-licensed toolkit (`OTA-Tech-AI/web-agent-protocol`) built on `browser-use`, the MCP `python-sdk`, and `DOMListenerExtension`, without a site-published well-known path, HTTP wire headers, or a formal security/privacy specification. [1][3] The `WAP Replay Tool Desktop 1.0.0` release provides a Windows 10/11 desktop runner for existing replay JSON lists, while deferring the action-collecting service, replay-list generation, and macOS desktop support to a future release. [4]",
   "v05_mechanism_delta_md": "WAP separates action recording from execution by capturing raw DOM interaction events with the OTA-WAP Chrome extension and converting each recorded session into either an exact-replay action list that reproduces every action or a smart-replay action list of condensed goal-oriented steps. [1] Recorded tasks can be replayed with `run_replay.py` using the `WAP-Replay` protocol or converted via `generate_mcp_server.py` into MCP servers for reuse by any agent or user. [1]",
   "v05_scope_boundary_md": "Although `README.md` describes WAP as a standardized framework, it is a single-vendor `MIT`-licensed toolkit (`OTA-Tech-AI/web-agent-protocol`) built on `browser-use`, the MCP `python-sdk`, and `DOMListenerExtension`, without a site-published well-known path, HTTP wire headers, or a formal security/privacy specification. [1][3] The `WAP Replay Tool Desktop 1.0.0` release provides a Windows 10/11 desktop runner for existing replay JSON lists, while deferring the action-collecting service, replay-list generation, and macOS desktop support to a future release. [4]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "WebDriver (W3C)",
      "spec_or_rfc": "W3C WebDriver 2",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "WAP is a local pipeline in which a Chrome extension records a browser session and a Python SDK turns it into an exact-replay or smart-replay action list that can become a local MCP server, which is record-and-replay rather than a live browser-driver protocol. [3][5]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "WAP's output can be converted into a local MCP server so other MCP clients can reuse the recorded action list, and WAP itself defines no remote discovery path. [3][6]"
     },
     {
      "target_id": "webmcp",
      "target_name": "WebMCP",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "WAP replays a recorded exact-replay or smart-replay action list captured by a Chrome extension, while WebMCP calls tools the current page's script has registered on document.modelContext while the document is open. [3][7]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Act protocols](/category/act/)** — Category index for `act` standards."
    }
   ],
   "v05_compiled_md": "---\nid: web-agent-protocol\ntitle: \"Web Agent Protocol (WAP)\"\ntier: spec_brief\nlifecycle_status: retired\ncategory: act\nform: document-format\nwire_archetype: harnesses_rpc_ui\nspec_url: https://github.com/OTA-Tech-AI/web-agent-protocol\nlast_checked: 2026-11-12\n---\n\n# Web Agent Protocol (WAP)\n\n**Category:** [Act](/category/act/) (`act`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-11-12\n\n> ***Status notice (Dormant Draft):** The Web Agent Protocol (`WAP`) repository has had no commits since `2025-06-19`.*\n\n**Web Agent Protocol** (`WAP`) is a framework originated by OTA Technologies Inc. (`OTA-Tech-AI`) designed to enable interaction between users, web agents, and browsers by recording and replaying browser actions. [1][2] It separates the concerns of action recording and execution, and the Python SDK for WAP implements the specification for collecting user-interaction data, converting raw event streams into replay action lists, converting recorded actions into `MCP` servers, and replaying those lists with `WAP-Replay`. [1] On its corporate homepage, OTA Technologies Inc. lists `Web-Agent-Protocol (WAP)` alongside `OTA-v1` (`OTA-AI/OTA-v1`), a Browser Agent Model (`BAM`) fine-tuned from `Qwen2.5-14B` to control browser environments with frameworks such as `browser-use`. [2] The OTA-WAP Chrome extension captures user-interaction events in the browser and sends them to a local data-collection server (`action_collect_server.py`) listening on `http://localhost:4934/action-data` by default, which saves each session to `data/YYYYMMDD/taskid/summary_event_<timestamp>.json`. [1] Generator scripts convert a recorded session directory into an exact-replay or smart-replay JSON action list under `data_processed/exact_replay` or `data_processed/smart_replay`, which is executed by `run_replay.py` or converted into an MCP server under `mcp_servers`. [1] The MIT-licensed `OTA-Tech-AI/web-agent-protocol` repository was created on `2025-05-17` and last pushed on `2025-06-19`, with 34 commits on the `main` branch and no numbered specification document. [3] Its single GitHub release is `wap-replay-tool-1.0.0` (`WAP Replay Tool Desktop 1.0.0`), published on `2025-06-01`, shipping the Windows installer asset `wap_replay_tool_setup.exe` (referred to as `wap-replay-tool-1.0.0-setup.exe` in the release install notes). [4]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Act](/category/act/) (`act`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | OTA Technologies Inc. (`OTA-Tech-AI` / `otatech.ai`) [2][3] |\n| **Governed by** | OTA Technologies Inc. (`OTA-Tech-AI`, single-vendor MIT repository) [2][3] |\n| **Track** | Single-vendor open-source specification (`OTA-Tech-AI/web-agent-protocol`; no SDO submission) [3] |\n| **Status** | Dormant: repository last pushed 2025-06-19 [3][4] |\n| **Version** | Unversioned (`main` branch; `wap-replay-tool-1.0.0` desktop release) [1][3][4] |\n| **Wire format** | Local HTTP POST JSON event stream (`summary_event_<timestamp>.json`) and `exact_replay` / `smart_replay` JSON lists [1][3] |\n| **Specification** | https://github.com/OTA-Tech-AI/web-agent-protocol [3] |\n| **Found at** | None on web origins; local collector binds to `http://localhost:4934/action-data` [1][3] |\n| **Licence** | MIT License (`OTA-Tech-AI/web-agent-protocol`) [3] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nStandard browser-agent automation couples live model reasoning with browser step execution on every run instead of separating action recording from replay execution for reuse. [1] Without a structured recording and conversion pipeline, user-interaction streams captured in a browser cannot be directly replayed as exact step lists or condensed goal-oriented subgoal lists. [1] WAP separates action recording from execution by capturing raw DOM interaction events with the OTA-WAP Chrome extension and converting each recorded session into either an exact-replay action list that reproduces every action or a smart-replay action list of condensed goal-oriented steps. [1] Recorded tasks can be replayed with `run_replay.py` using the `WAP-Replay` protocol or converted via `generate_mcp_server.py` into MCP servers for reuse by any agent or user. [1] Although `README.md` describes WAP as a standardized framework, it is a single-vendor `MIT`-licensed toolkit (`OTA-Tech-AI/web-agent-protocol`) built on `browser-use`, the MCP `python-sdk`, and `DOMListenerExtension`, without a site-published well-known path, HTTP wire headers, or a formal security/privacy specification. [1][3] The `WAP Replay Tool Desktop 1.0.0` release provides a Windows 10/11 desktop runner for existing replay JSON lists, while deferring the action-collecting service, replay-list generation, and macOS desktop support to a future release. [4]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **WebDriver (W3C)** | `W3C WebDriver 2` | Analogous to classic standard | WAP is a local pipeline in which a Chrome extension records a browser session and a Python SDK turns it into an exact-replay or smart-replay action list that can become a local MCP server, which is record-and-replay rather than a live browser-driver protocol. [3][5] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | WAP's output can be converted into a local MCP server so other MCP clients can reuse the recorded action list, and WAP itself defines no remote discovery path. [3][6] |\n| **[WebMCP](/protocols/webmcp/)** | Peer alternative | WAP replays a recorded exact-replay or smart-replay action list captured by a Chrome extension, while WebMCP calls tools the current page's script has registered on document.modelContext while the document is open. [3][7] |\n\n---\n\n## See also\n\n- **Category:** [Act protocols](/category/act/)\n\n---\n\n## References\n\n1. OTA Technologies Inc. (OTA-Tech-AI), *Web Agent Protocol (WAP) README* (fetched 2026-10-31) — <https://raw.githubusercontent.com/OTA-Tech-AI/web-agent-protocol/main/README.md>\n2. OTA Technologies Inc., *OTA — The Power of Browser Agent AI (archived homepage)* (archived 2026-06-07; fetched 2026-10-31) — <https://web.archive.org/web/20260607080002/https://www.otatech.ai/>\n3. OTA Technologies Inc. (OTA-Tech-AI), *OTA-Tech-AI/web-agent-protocol GitHub repository* (last push 2025-06-19; fetched 2026-10-31) — <https://github.com/OTA-Tech-AI/web-agent-protocol>\n4. OTA Technologies Inc. (OTA-Tech-AI), *WAP Replay Tool Desktop 1.0.0 release (wap-replay-tool-1.0.0)* (2025-06-01; fetched 2026-10-31) — <https://github.com/OTA-Tech-AI/web-agent-protocol/releases/tag/wap-replay-tool-1.0.0>\n5. W3C, *WebDriver* (fetched 2026-11-12) — <https://www.w3.org/TR/webdriver2/>\n6. Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation* (2026-07-28) — <https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning>\n7. Web Machine Learning Community Group (editors Brandon Walderman, Khushal Sagar, Dominic Farolino, and Samuel Dallstream), *WebMCP* (Draft Community Group Report, 11 November 2026) — <https://webmachinelearning.github.io/webmcp/>\n",
   "superseded_by": null
  },
  {
   "acronym": "NLIP",
   "hatnote_md": "This page is about the Natural Language Interaction Protocol (NLIP), the suite of five Ecma standards (ECMA-430 to ECMA-434) and one technical report (ECMA TR/113) from Ecma Technical Committee 56. It is not [NLWeb](/protocols/nlweb/), a separate natural-language web project; not IBM's [Agent Communication Protocol](/protocols/agent-communication-protocol/) or AGNTCY's [Agent Connect Protocol](/protocols/agent-connect-protocol/); and not a transport such as [SLIM](/protocols/slim/). A participants' paper describes NLIP as complementing, rather than replacing, protocols such as MCP, A2A, and ACP.",
   "adoption": {
    "level": "observed",
    "by": "nlipserver, nlipsoln, nlipweb, nlip-iam, nlipsdk, NLIP Reference & Demo Clients (nlipclient, textclient, kivyclient, kivy-chat-mach2), AG2, and nlipagents",
    "probe_run": null
   },
   "aliases": [
    "Natural Language Interaction Protocol",
    "ECMA-430"
   ],
   "analog": "A generic RPC message envelope (e.g. SOAP) for multimodal natural-language agent messages",
   "collisions": [],
   "discovery": {
    "mechanism": "An endpoint the operator chooses; the HTTP binding fixes the path, not a discovery file. ECMA-431: \"…port/nlip. The end-point shall support accepting an NLIP message using the POST command of HTTP.\"",
    "path": "{origin}/nlip"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://ecma-international.org/news/ecma-international-approves-new-standards-12/",
     "claim": "Ecma International, *Ecma International approves new standards*, published 2025-12-11; fetched 2026-10-30",
     "date": null,
     "quote": "ECMA-430 1st edition - Natural Language Interaction Protocol (NLIP) ECMA-431 1st edition - Binding of the Natural Language Interaction Protocol (NLIP) over HTTP/HTTPS ECMA-432 1st edition - Binding of the Natural Language Interaction Protocol (NLIP) over WebSocket ECMA-433 1st edition - Binding of the Natural Language Interaction Protocol (NLIP) over AMQP ECMA-434 1st edition - Security Profiles for Natural Language Interaction Protocol (NLIP) ECMA TR/113 1st edition - Explanatory guide to the Natural Language Interaction Protocol (NLIP) / The 130th General Assembly held in Geneva on 10 December 2025 approved the following documents: ... ECMA-430 1st edition - Natural Language Interaction Protocol (NLIP) / The 130th General Assembly held in Geneva on 10 December 2025 approved the following documents:",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://ecma-international.org/news/ecma-international-approves-nlip-standards-suite-for-universal-ai-agent-communication/",
     "claim": "Ecma International, *Ecma International approves NLIP standards suite for universal AI agent communication*, published 2025-12-17; fetched 2026-10-30",
     "date": null,
     "quote": "developed by Ecma Technical Committee 56 / Ecma International published on 10 December 2025 five new standards and one technical report defining the Natural Language Interaction Protocol (NLIP). / are available free of charge from the Ecma International website. / Ecma International published on 10 December 2025 five new standards and one technical report defining the Natural Language Interaction Protocol (NLIP). ... These specifications establish an open, secure foundation for AI agents to communicate across organizational boundaries and technology platforms, replacing hard-coded application programming interfaces with a universal envelope protocol. / Open-source reference implementations can be found on GitHub. / Ecma International published on 10 December 2025 five new standards and one technical report",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://arxiv.org/pdf/2609.04135",
     "claim": "Luyi Xing, Rasit Onur Topaloglu, Ranjan Sinha, Abhay Ratnaparkhi, and co-authors, *The Natural Language Interaction Protocol and Standard for AI Agents*, submitted 2026-09-03; fetched 2026-10-30",
     "date": null,
     "quote": "that complements, rather than replaces, existing agent, tool, and enterprise protocols. / while using protocols such as MCP, A2A, ACP, enterprise APIs, or industrial protocols internally / NLIP started in June 2024 as a technical working group within the Enterprise NeuroSystem Group (ENG). / In October 2024, the initial version of the protocol was defined, and a decision to convert the specification to a formal standard was made. / The members who officially joined Ecma TC56 to define the official standards included IBM, Hitachi, Red Hat, ServiceNow, Purdue University, Indiana University Bloomington, University at Buffalo, Fordham University, Chicago State University, Marist University, and City University of New York.",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://ecma-international.org/wp-content/uploads/ECMA-430_1st_edition_december_2025.pdf",
     "claim": "Ecma International Technical Committee 56, *ECMA-430: Natural Language Interaction Protocol (NLIP), 1st edition*, December 2025; fetched 2026-10-30",
     "date": null,
     "quote": "This Standard defines the specifications of Natural Language Interaction Protocol (NLIP), which is an application-level communication protocol defined between AI Agents or between a human and an AI agent. / primarily represented as a JSON message. Each message consists of a first submessage and an optional list of other submessages. / The format field is required. ... The subformat field is required. ... The content field is required. / This Ecma Standard was developed by Technical Committee 56 and was adopted by the General Assembly of December 2025. / The format field is required. / The subformat field is required. / The content field is required. / The value of 'control' is reserved and indicates a message that is used to negotiate control parameters. / This document may be copied, published and distributed to others / primarily represented as a JSON message. ... The format field is required. ... The subformat field is required. ... The content field is required. ... the order of the submessages in the submessages field is significant.",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://ecma-international.org/wp-content/uploads/ECMA-431_1st_edition_december_2025.pdf",
     "claim": "Ecma International Technical Committee 56, *ECMA-431: Binding of NLIP over HTTP/HTTPS, 1st edition*, December 2025; fetched 2026-10-30",
     "date": null,
     "quote": "URL defined as https://:port/nlip. The end - point shall support accepting an NLIP message using the POST command of HTTP. The end - point should use either HTTP/1.1 or HTTP/2 as the base transfer protocol, Implementations may use HTTP/3 in validated use cases. / shall support accepting an NLIP message using the POST command of HTTP. The end - point should use either HTTP/1.1 or HTTP/2 / accepting an NLIP message using the POST command of HTTP",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://ecma-international.org/publications-and-standards/standards/ecma-434/",
     "claim": "Ecma International, *ECMA-434 Security Profiles for NLIP*, 1st edition, December 2025; published 2025-12-10; modified 2026-10-07; fetched 2026-10-30",
     "date": null,
     "quote": "Conformance to this Standard is mandatory for any implementation claiming NLIP conformance. / DIS 26641 / 1st edition, December 2025",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://ecma-international.org/news/call-for-participation-on-natural-language-interaction-protocol-for-communication-with-ai-agents-standardization/",
     "claim": "Ecma International, *Call for participation on NLIP for communication with AI agents standardization*, published 2025-05-15; modified 2025-06-05; fetched 2026-10-30",
     "date": null,
     "quote": "The development of this protocol began in March 2024 through a collaborative initiative within the Enterprise Neurosystems Group (ENG), an open-source consortium. This effort led to the formation of TC56 within Ecma International in December 2024.",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://www.enterpriseneurosystem.org/nlip",
     "claim": "Enterprise Neurosystem, *NLIP: Natural Language Interaction Protocol*, fetched 2026-10-30",
     "date": null,
     "quote": "Dr. Dinesh Verma (IBM Research and Enterprise Neurosystem CTO) / he initiated an Enterprise Neurosystem community project: NLIP.",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://ecma-international.org/technical-committees/tc56/",
     "claim": "Ecma International, *TC56*, published 2024-12-12; modified 2026-07-02; fetched 2026-10-30",
     "date": null,
     "quote": "TC56 operates under the Royalty-Free Patent Policy / Chair: Dinesh Verma (IBM) Vice-Chair: Elisa Bertino (Purdue University) Secretaries: Patrick Luthi (Ecma International) and Luyi Xing (University of Illinois) / The TC specifies a common protocol, framework and interfaces for interactions between AI agents using natural language while supporting multiple modalities.",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://siebelschool.illinois.edu/news/luyi-xing-nsf-grant-ecma",
     "claim": "Rudy San Miguel, Siebel School of Computing and Data Science, University of Illinois, *Luyi Xing receives NSF grant and sets AI Agent Ecosystems ISO standard*, 25 September 2026; fetched 2026-10-30",
     "date": null,
     "quote": "In June 2026, University of Illinois Urbana-Champaign was approved as a not-for-profit member",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://ecma-international.org/publications-and-standards/standards/ecma-430/",
     "claim": "Ecma International, *ECMA-430 Natural Language Interaction Protocol (NLIP)*, 1st edition, December 2025; published 2025-12-10; modified 2026-10-07; fetched 2026-10-30",
     "date": null,
     "quote": "DIS 26637 / ECMA-430 Natural Language Interaction Protocol (NLIP) 1st edition, December 2025 / The motivation, the design philosophy, exemplar use-cases, and examples of sample exchanges using the NLIP protocol are out of scope of this standard. / ISO/IEC number DIS 26637 / 2025-12-10",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://ecma-international.org/publications-and-standards/standards/ecma-431/",
     "claim": "Ecma International, *ECMA-431 Binding of NLIP over HTTP/HTTPS*, 1st edition, December 2025; published 2025-12-10; modified 2026-10-07; fetched 2026-10-30",
     "date": null,
     "quote": "DIS 26638 / Binding of the Natural Language Interaction Protocol (NLIP) over HTTP/HTTPS / ECMA-431 Binding of the Natural Language Interaction Protocol (NLIP) over HTTP/HTTPS 1st edition, December 2025",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://ecma-international.org/publications-and-standards/standards/ecma-432/",
     "claim": "Ecma International, *ECMA-432 Binding of NLIP over WebSocket*, 1st edition, December 2025; published 2025-12-10; modified 2026-10-07; fetched 2026-10-30",
     "date": null,
     "quote": "DIS 26639 / This specification defines how the Natural Language Interaction Protocol (NLIP) shall be implemented over the WebSocket protocol using CBOR (Concise Binary Object Representation, RFC 8949) for compact and efficient multimodal communication. It also describes a fallback to UTF-8 encoded JSON text frames for compatibility. / over the WebSocket protocol using CBOR / 1st edition, December 2025",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://ecma-international.org/publications-and-standards/standards/ecma-433/",
     "claim": "Ecma International, *ECMA-433 Binding of NLIP over AMQP*, 1st edition, December 2025; published 2025-12-10; modified 2026-10-07; fetched 2026-10-30",
     "date": null,
     "quote": "DIS 26640 / This Standard defines how the Natural Language Interaction Protocol (NLIP) should be implemented over the base transfer protocol of AMQP. / over the base transfer protocol of AMQP / 1st edition, December 2025",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://pypi.org/pypi/nlip-sdk/json",
     "claim": "PyPI, *nlip_sdk*, version 0.1.3 uploaded 2026-06-24; 0.1.0 uploaded 2024-11-13; fetched 2026-10-30",
     "date": null,
     "quote": "\"name\":\"nlip_sdk\" … \"version\":\"0.1.3\" … \"upload_time\":\"2026-06-24T12:58:52\" / \"upload_time\":\"2024-11-13T12:20:47\" … nlip_sdk-0.1.0-py3-none-any.whl / \"name\":\"nlip_sdk\" / pydantic<3.0.0,>=2.9.2 / 2026-06-24T12:58:52 / 2024-11-13T12:20:47",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://pypi.org/pypi/nlip-server/json",
     "claim": "PyPI, *nlip-server*, version 0.1.3 uploaded 2026-06-24; fetched 2026-10-30",
     "date": null,
     "quote": "\"name\":\"nlip-server\" … \"version\":\"0.1.3\" … \"upload_time\":\"2026-06-24T12:57:32\" / \"version\":\"0.1.3\" / 2026-06-24T12:57:31 / fastapi[standard]<1,>=0.115.0 / nlip-sdk<0.2.0,>=0.1.2",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://ecma-international.org/publications-and-standards/technical-reports/ecma-tr-113/",
     "claim": "Ecma International, *ECMA TR/113 Explanatory guide to NLIP*, 1st edition, December 2025; published 2025-12-10; modified 2026-02-26; fetched 2026-10-30",
     "date": null,
     "quote": "ECMA TR/113 Explanatory guide to the Natural Language Interaction Protocol (NLIP) 1st edition, December 2025 / This is an informative document and does not define a standard. / In the case of a conflict between this document and the NLIP standards, the standards documents take precedence.",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://raw.githubusercontent.com/nlip-project/nlip_spec/main/README.md",
     "claim": "nlip-project, *nlip_spec README*, fetched 2026-10-30",
     "date": null,
     "quote": "All documents may be downloaded free of charge, with no registration required.",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://github.com/orgs/nlip-project/repositories",
     "claim": "NLIP Project, *nlip-project repositories*, fetched 2026-10-30",
     "date": null,
     "quote": "\"full_name\": \"nlip-project/nlip_sdk\" … \"spdx_id\": \"Apache-2.0\" / \"full_name\": \"nlip-project/nlip_spec\" … \"spdx_id\": \"Apache-2.0\" / \"full_name\": \"nlip-project/ecma_draft\" … \"spdx_id\": \"CC0-1.0\" / An initial Implementation of a python NLIP Server built using fastapi / Solutions for NLIP based on the nlip_server repository / A NLIP web server with a javascript client / A standard front-end authentication server for business applications / A client-side SDK for nlip client development. / A python based client wrapper for nlip / An terminal based text-bot which talks using NLIP to a chat-bot / A Simple Client for NLIP Written using Kivy / Kivy chat client for NLIP with media upload support and rich text rendering / Package for creating AI agents using NLIP as transport.",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://a2a-protocol.org/latest/specification/",
     "claim": "The Linux Foundation, *A2A Protocol specification*, copyright 2026; fetched 2026-10-30",
     "date": null,
     "quote": "JSON-RPC Protocol Binding … gRPC Protocol Binding … HTTP+JSON/REST Protocol Binding / fetches the public Agent Card: GET /.well-known/agent-card.json / Enable agents to delegate tasks",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28",
     "claim": "Model Context Protocol, *Specification*, version 2026-07-28; fetched 2026-10-30",
     "date": null,
     "quote": "The protocol uses JSON-RPC 2.0 messages to establish communication between / Servers offer any of the following features to clients: Resources: Context and data, for the user or the AI model to use Prompts: Templated messages and workflows for users Tools: Functions for the AI model to execute",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://github.com/i-am-bee/acp",
     "claim": "BeeAI (i-am-bee), *Agent Communication Protocol (ACP)*, repository archived 2025-08-27; fetched 2026-10-30",
     "date": null,
     "quote": "This repository was archived by the owner on Aug 27, 2025. It is now read-only. / ACP is now part of A2A under the Linux Foundation!",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://raw.githubusercontent.com/i-am-bee/acp/main/docs/spec/openapi.yaml",
     "claim": "BeeAI (i-am-bee), *ACP OpenAPI*, version 0.2.0; fetched 2026-10-30",
     "date": null,
     "quote": "/agents: get: / /runs: post:",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://slim.agntcy.org/latest/slim/slim-overview/",
     "claim": "AGNTCY, *SLIM introduction*, fetched 2026-10-30",
     "date": null,
     "quote": "SLIM (Secure Low-latency Interactive Messaging) is the transport layer for the agentic AI era - a secure, peer-to-peer messaging framework / MLS (RFC 9420) encrypts data at the session layer",
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://www.ietf.org/archive/id/draft-mpsb-agntcy-slim-03.txt",
     "claim": "L. Muscariello, M. Papalini, M. Sardara, and S. Betts (Cisco), *Secure Low-Latency Interactive Messaging (SLIM) (draft-mpsb-agntcy-slim-03)*, 2 November 2026; expires 6 May 2027",
     "date": null,
     "quote": "This document specifies the Secure Low-Latency Interactive Messaging",
     "ref": 25
    },
    {
     "label": "[26]",
     "url": "https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/README.md",
     "claim": "Agent Network Protocol community project, *Agent Network Protocol README*, fetched 2026-10-30",
     "date": null,
     "quote": "ANP aims to become the HTTP of the Agentic Web era: a protocol suite for agent identity, naming, discovery, negotiation, secure messaging, and application-level collaboration.",
     "ref": 26
    },
    {
     "label": "[27]",
     "url": "https://raw.githubusercontent.com/nlip-project/nlip_server/main/README.md",
     "claim": "nlip-project, *nlip_server README*, fetched 2026-10-30",
     "date": null,
     "quote": "This repository contains one component of the various python repositories for NLIP Proof of Concept implementation. / abstractions of a NLIPApplication and a NLIP Session / poetry run fastapi dev nlip_server/echo.py / nlip_soln: this provides a few simple prototype server side solutions / nlip_client: this provides a package that simplifies the task of sending NLIP messages / The current implementation uses httpx as the base transfer package. / To write a client, you need to use nlip_sdk and nlip_client. / text_client: this provides a simple text based chatbot / kivy_client: this provides a python kivy based visual client to interact with an NLIP server",
     "ref": 27
    },
    {
     "label": "[28]",
     "url": "https://raw.githubusercontent.com/nlip-project/.github/main/profile/README.md",
     "claim": "nlip-project, *Organization profile README*, fetched 2026-10-30",
     "date": null,
     "quote": "The organization also contains reference implementations of the protocol and end-points. / nlip_project is the official organization working space for Ecma TC56 NLIP",
     "ref": 28
    },
    {
     "label": "[29]",
     "url": "https://pypi.org/pypi/nlip/json",
     "claim": "PyPI, *nlip*, version 0.1.0 yanked; fetched 2026-10-30",
     "date": null,
     "quote": "\"yanked\":true / Published other packages as nlip-sdk and nlip-server / \"version\":\"0.1.0\"",
     "ref": 29
    },
    {
     "label": "[30]",
     "url": "https://github.com/ag2ai/ag2/pull/2468",
     "claim": "ag2ai, *ag2 pull request 2468: feat: add nlip integration*, merged 2026-04-08; fetched 2026-10-30",
     "date": null,
     "quote": "feat: add NLIP integration / \"merged_at\": \"2026-04-08T16:00:26Z\" / NlipRemoteAgent which turns a remote NLIP server into a ConversableAgent / NlipAgentServer which exposes existing AG2 agents as NLIP servers",
     "ref": 30
    },
    {
     "label": "[31]",
     "url": "https://github.com/ag2ai/ag2/pull/3024",
     "claim": "ag2ai, *ag2 pull request 3024: feat: add nlip integration for beta*, merged 2026-06-30; fetched 2026-10-30",
     "date": null,
     "quote": "feat: add NLIP integration for beta / \"merged_at\": \"2026-06-30T19:19:45Z\" / NlipConfig, a ModelConfig that turns a remote NLIP server into the LLM provider / NlipServer, which exposes an existing AG2 Agent as a standards-compliant NLIP endpoint / The feature is implemented entirely under autogen.beta.extensions.nlip as an opt-in extension",
     "ref": 31
    },
    {
     "label": "[32]",
     "url": "https://github.com/nlip-project",
     "claim": "NLIP Project, *nlip-project organization*, created 2024-09-20; fetched 2026-10-30",
     "date": null,
     "quote": "\"created_at\": \"2024-09-20T14:09:13Z\" / \"public_repos\": 21",
     "ref": 32
    }
   ],
   "form": "document-format",
   "governance": "Ecma International Technical Committee 56 (TC56). \"TC56 operates under the Royalty-Free Patent Policy\"; \"Chair: Dinesh Verma (IBM) Vice-Chair: Elisa Bertino (Purdue University) Secretaries: Patrick Luthi (Ecma International) and Luyi Xing (University of Illinois)\". Formal TC56 members, per the participants' paper (2026-09-03): \"The members who officially joined Ecma TC56 to define the official standards included IBM,\" Hitachi, Red Hat, ServiceNow, Purdue University, Indiana University Bloomington, \"University at Buffalo, Fordham University, Chicago State University, Marist University, and City University of New York.\" The University of Illinois joined Ecma later: \"In June 2026, University of Illinois Urbana-Champaign was approved as a not-for-profit member\". Ecma's own TC56 page does not list members",
   "group": null,
   "history": [
    {
     "date": "2026-09-07",
     "note": "created and verified against Ecma International ECMA-430 standard page, the NLIP arXiv paper (2609.04135, Sept 2026), nlip-project.org, an Enterprise Neurosystem blog post on Ecma recognition, and the nlip-project GitHub org's reference implementation repos"
    },
    {
     "date": "2026-10-29",
     "note": "Primary-source verification across 32 primary Ecma standards, PDFs, arXiv, PyPI, and GitHub sources"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "nlip",
   "implementation": "multi-implementation",
   "last_verified": "2026-11-07",
   "name": "Natural Language Interaction Protocol (NLIP)",
   "native_status": "Approved and published by Ecma in December 2025. \"The 130th General Assembly held in Geneva on 10 December 2025 approved the following documents:\" `ECMA-430 1st edition – Natural Language Interaction Protocol (NLIP)` … `ECMA TR/113 1st edition – Explanatory guide to the Natural Language Interaction Protocol (NLIP)`. The PDF: \"This Ecma Standard was developed by Technical Committee 56 and was adopted by the General Assembly of December 2025.\". \"Ecma International published on 10 December 2025 five new standards and one technical report defining the Natural Language Interaction Protocol (NLIP).\"",
   "origin": {
    "date": "2024-03",
    "org": "Enterprise Neurosystem community & Ecma International TC56"
   },
   "part_of": null,
   "parties": [
    "agent-agent",
    "agent-human"
   ],
   "phase": "stable",
   "probe": {
    "method": "POST",
    "on_absent": "A non-2xx response, a connection refusal, or a body that does not parse as an NLIP envelope means the origin does not run an NLIP endpoint at that address; NLIP has no well-known discovery path, so absence at a guessed path is not conclusive proof the origin lacks NLIP support",
    "parse": "A 200 response whose JSON body is (or contains) an NLIP message: an object with a first sub-message carrying format/subformat/content fields (e.g. {\"format\":\"text\",\"subformat\":\"english\",\"content\":\"...\"}), per the ECMA-430 envelope and the ECMA-431 HTTP/HTTPS binding",
    "path": "https://{endpoint}/nlip/"
   },
   "question": "Can this agent or service exchange natural-language, multi-modal messages using a shared, vendor-neutral envelope instead of a bespoke API?",
   "scope": "general",
   "spec_url": "https://ecma-international.org/publications-and-standards/standards/ecma-430/",
   "step": "coordinate",
   "summary_md": "**Natural Language Interaction Protocol** (`NLIP`), `ECMA-430`, is an application-level communication protocol between AI agents or a human and an AI agent, primarily a JSON message of a first submessage and optional other submessages. The `format`, `subformat`, and `content` fields are required. On the HTTP binding the path is `/nlip`: the endpoint shall accept an NLIP message using `POST`, should use HTTP/1.1 or HTTP/2, and may use HTTP/3 in validated use cases. The 130th General Assembly held in Geneva on 10 December 2025 approved `ECMA-430` 1st edition. Ecma published five new standards and one technical report defining NLIP on 10 December 2025. Conformance to `ECMA-434` is mandatory for any implementation claiming NLIP conformance.",
   "track": "industry-body",
   "version": {
    "date": "2025-12-10",
    "label": "ECMA-430, 1st edition (nlip_sdk 0.1.3)"
   },
   "watch": [
    {
     "type": "page",
     "url": "https://ecma-international.org/publications-and-standards/standards/ecma-430/",
     "selector": "main",
     "cadence": "weekly"
    },
    {
     "type": "pypi",
     "pkg": "nlip-sdk"
    }
   ],
   "use_cases": [
    "agent-to-agent-messaging",
    "describe-agent-capabilities"
   ],
   "audience": [
    "agent-builder",
    "standards-body",
    "platform"
   ],
   "pairs_with": [
    "a2a",
    "mcp",
    "agent-communication-protocol",
    "slim",
    "anp"
   ],
   "prerequisites": [],
   "tier": "spec_brief",
   "lifecycle_status": "published_standard",
   "wire_archetype": "harnesses_rpc_ui",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-07",
   "v05_hatnote_html_md": "This page is about the Natural Language Interaction Protocol (NLIP), the suite of five Ecma standards (ECMA-430 to ECMA-434) and one technical report (ECMA TR/113) from Ecma Technical Committee 56. It is not [NLWeb](/protocols/nlweb/), a separate natural-language web project; not IBM's [Agent Communication Protocol](/protocols/agent-communication-protocol/) or AGNTCY's [Agent Connect Protocol](/protocols/agent-connect-protocol/); and not a transport such as [SLIM](/protocols/slim/). A participants' paper describes NLIP as complementing, rather than replacing, protocols such as MCP, A2A, and ACP. [1][2][3]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Natural Language Interaction Protocol** (`NLIP`), `ECMA-430`, is an application-level communication protocol between AI agents or a human and an AI agent, primarily a JSON message of a first submessage and optional other submessages. [4] The `format`, `subformat`, and `content` fields are required. On the HTTP binding the path is `/nlip`: the endpoint shall accept an NLIP message using `POST`, should use HTTP/1.1 or HTTP/2, and may use HTTP/3 in validated use cases. [4][5] The 130th General Assembly held in Geneva on 10 December 2025 approved `ECMA-430` 1st edition. [1] Ecma published five new standards and one technical report defining NLIP on 10 December 2025. Conformance to `ECMA-434` is mandatory for any implementation claiming NLIP conformance. [2][6]",
   "v05_identity_sentence_md": "**Natural Language Interaction Protocol** (`NLIP`), `ECMA-430`, is an application-level communication protocol between AI agents or a human and an AI agent, primarily a JSON message of a first submessage and optional other submessages. [4]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Coordinate](/category/coordinate/) (`coordinate`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "Enterprise Neurosystems Group, beginning March 2024; Ecma TC56 formed December 2024 (Ecma call for participation, 2025-05-15). A participants' paper dates the working group to June 2024 and a first protocol text to October 2024. Dinesh Verma (IBM Research and Enterprise Neurosystem CTO) initiated the Enterprise Neurosystem community project. [3][7][8]"
    },
    {
     "label": "Governed by",
     "value_md": "Ecma International Technical Committee 56 (TC56), under the Royalty-Free Patent Policy. Chair: Dinesh Verma (IBM). Vice-Chair: Elisa Bertino (Purdue University). Secretaries: Patrick Luthi (Ecma International) and Luyi Xing (University of Illinois). The participants' paper lists the members who officially joined TC56 as IBM, Hitachi, Red Hat, ServiceNow, Purdue University, Indiana University Bloomington, University at Buffalo, Fordham University, Chicago State University, Marist University, and City University of New York. In June 2026 the University of Illinois Urbana-Champaign was approved as an Ecma not-for-profit member. [3][4][9][10]"
    },
    {
     "label": "Track",
     "value_md": "Industry body (Ecma International TC56) [2][9]"
    },
    {
     "label": "Status",
     "value_md": "The 130th General Assembly, held in Geneva on 10 December 2025, approved ECMA-430 through ECMA-434 and ECMA TR/113, each a 1st edition. Standard pages list ISO/IEC DIS 26637 (ECMA-430), DIS 26638 (ECMA-431), DIS 26639 (ECMA-432), DIS 26640 (ECMA-433), and DIS 26641 (ECMA-434). Conformance to ECMA-434 is mandatory for any implementation claiming NLIP conformance. [1][6][11][12][13][14]"
    },
    {
     "label": "Version",
     "value_md": "ECMA-430 1st edition, December 2025, adopted by the General Assembly of December 2025. PyPI `nlip_sdk` 0.1.3 was uploaded 2026-06-24 (a 0.1.0 wheel was uploaded 2024-11-13). PyPI `nlip-server` 0.1.3 was uploaded 2026-06-24. Those package versions are not the Ecma edition number. [4][11][15][16]"
    },
    {
     "label": "Message format",
     "value_md": "JSON message: a first submessage and an optional list of other submessages. The format, subformat, and content fields are required. The value `control` is reserved for negotiating control parameters. [4]"
    },
    {
     "label": "Transports",
     "value_md": "HTTP/HTTPS (ECMA-431): POST to the path `/nlip`; HTTP/1.1 or HTTP/2, and HTTP/3 in validated cases. WebSocket (ECMA-432): CBOR (RFC 8949), with a fallback to UTF-8 encoded JSON text frames. AMQP (ECMA-433). [5][13][14]"
    },
    {
     "label": "Schemes",
     "value_md": "HTTP or HTTPS; WebSocket; AMQP [12][13][14]"
    },
    {
     "label": "Specification",
     "value_md": "[ECMA-430](https://ecma-international.org/publications-and-standards/standards/ecma-430/) (1st edition, December 2025); bindings [ECMA-431](https://ecma-international.org/publications-and-standards/standards/ecma-431/), [ECMA-432](https://ecma-international.org/publications-and-standards/standards/ecma-432/), [ECMA-433](https://ecma-international.org/publications-and-standards/standards/ecma-433/); security profiles [ECMA-434](https://ecma-international.org/publications-and-standards/standards/ecma-434/); guide [ECMA TR/113](https://ecma-international.org/publications-and-standards/technical-reports/ecma-tr-113/) [6][11][12][13][14][17]"
    },
    {
     "label": "Found at",
     "value_md": "HTTP endpoint path `/nlip`, which shall accept an NLIP message with POST. [5]"
    },
    {
     "label": "Licence",
     "value_md": "ECMA-430 may be copied, published, and distributed under its Ecma copyright notice. TC56 operates under the Royalty-Free Patent Policy. The NLIP standards and ECMA TR/113 are free of charge, and the project copies require no registration to download. `nlip-project/nlip_sdk` and `nlip-project/nlip_spec` are Apache-2.0; `nlip-project/ecma_draft` is CC0-1.0. [2][4][9][18][19]"
    }
   ],
   "v05_problem_md": "The NLIP specifications published on 10 December 2025 establish a foundation for AI agents to communicate across organizational boundaries and technology platforms, replacing hard-coded application programming interfaces with a universal envelope protocol. [2] Each NLIP exchange is primarily a JSON message. The `format`, `subformat`, and `content` fields are required, optional `submessages` are an array whose order is significant, and the value `control` is reserved to negotiate control parameters. [4] `ECMA TR/113` is an informative document and does not define a standard. On conflict with the NLIP standards, the standards documents take precedence. [17] `ECMA-430` leaves motivation, the design philosophy, exemplar use-cases, and examples of sample exchanges out of scope. [11]",
   "v05_mechanism_delta_md": "Each NLIP exchange is primarily a JSON message. The `format`, `subformat`, and `content` fields are required, optional `submessages` are an array whose order is significant, and the value `control` is reserved to negotiate control parameters. [4]",
   "v05_scope_boundary_md": "`ECMA TR/113` is an informative document and does not define a standard. On conflict with the NLIP standards, the standards documents take precedence. [17] `ECMA-430` leaves motivation, the design philosophy, exemplar use-cases, and examples of sample exchanges out of scope. [11]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "SOAP Version 1.2 Messaging Framework",
      "spec_or_rfc": "W3C SOAP Version 1.2 Part 1",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "SOAP Version 1.2 is the classic messaging-framework analogue in this row. NLIP's ECMA-430 message is primarily JSON, with a first submessage and an optional list of other submessages, and ECMA-431 binds that message to HTTP POST at the path /nlip. [4][5]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "a2a",
      "target_name": "Agent2Agent Protocol (A2A)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "A2A defines JSON-RPC, gRPC, and HTTP+JSON/REST protocol bindings, and a client fetches the public Agent Card with GET /.well-known/agent-card.json so agents can delegate tasks. NLIP instead posts an ECMA-430 JSON message, whose format, subformat, and content fields are required, to the HTTP path /nlip. [4][5][20]"
     },
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "MCP uses JSON-RPC 2.0 messages, and MCP servers may offer resources, prompts, and tools. NLIP is a JSON message envelope whose HTTP binding accepts POST and should use HTTP/1.1 or HTTP/2. [4][5][21]"
     },
     {
      "target_id": "agent-communication-protocol",
      "target_name": "Agent Communication Protocol",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ACP's repository was archived by the owner on 27 August 2025 and states that ACP is now part of A2A under the Linux Foundation. Its OpenAPI document exposes GET /agents and POST /runs. NLIP's HTTP binding accepts an ECMA-430 JSON message with POST at the path /nlip. [5][22][23]"
     },
     {
      "target_id": "slim",
      "target_name": "Secure Low-Latency Interactive Messaging (SLIM)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "SLIM (Secure Low-latency Interactive Messaging) is a secure peer-to-peer messaging framework. The `draft-mpsb-agntcy-slim-03` specification combines gRPC over HTTP/2 and HTTP/3 with secure messaging, and the SLIM overview uses MLS (RFC 9420) to encrypt data at the session layer. NLIP specifies the JSON message envelope and an HTTP POST binding, which is a different layer from that transport. [4][5][24][25]"
     },
     {
      "target_id": "anp",
      "target_name": "Agent Network Protocol",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ANP aims to be a protocol suite for agent identity, naming, discovery, negotiation, secure messaging, and application-level collaboration. NLIP standardizes a JSON message envelope and an HTTP POST binding at the path /nlip. [4][5][26]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (8 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).",
    "side_a": {
     "visible": true,
     "heading": "Server implementations & reference prototypes",
     "col4_header": "Transport & Scope",
     "note_md": null,
     "rows": [
      {
       "actor": "nlip_server",
       "role": "Server library",
       "status": "Development",
       "status_display": "Development · as of 2026-06-24",
       "col4_md": "GitHub describes `nlip_server` as an initial implementation of a Python NLIP server built using fastapi. The README calls that repository one component of the Python repositories for an NLIP Proof of Concept implementation. It provides `NLIPApplication` and an echo server started with `poetry run fastapi dev nlip_server/echo.py`. PyPI `nlip-server` `0.1.3` was uploaded on 2026-06-24 and depends on `fastapi[standard]<1,>=0.115.0` and `nlip-sdk<0.2.0,>=0.1.2`.",
       "source_md": "[nlip_server README](https://raw.githubusercontent.com/nlip-project/nlip_server/main/README.md) [27] · [PyPI nlip-server 0.1.3](https://pypi.org/pypi/nlip-server/json) [16] · [nlip-project repositories](https://github.com/orgs/nlip-project/repositories) [19]"
      },
      {
       "actor": "nlip_soln",
       "role": "Reference prototype",
       "status": "Experimental",
       "status_display": "Experimental · checked 2026-10-30",
       "col4_md": "GitHub describes `nlip_soln` as solutions for NLIP based on the nlip_server repository. The nlip_server README says nlip_soln provides a few simple prototype server side solutions using the nlip_server package.",
       "source_md": "[nlip-project repositories](https://github.com/orgs/nlip-project/repositories) [19] · [nlip_server README](https://raw.githubusercontent.com/nlip-project/nlip_server/main/README.md) [27]"
      },
      {
       "actor": "nlip_web",
       "role": "Reference prototype",
       "status": "Experimental",
       "status_display": "Experimental · as of 2025-12-10",
       "col4_md": "GitHub describes `nlip_web` as a NLIP web server with a javascript client. Ecma's 10 December 2025 announcement says open-source reference implementations can be found on GitHub.",
       "source_md": "[nlip-project repositories](https://github.com/orgs/nlip-project/repositories) [19] · [Ecma NLIP approval, 10 December 2025](https://ecma-international.org/news/ecma-international-approves-nlip-standards-suite-for-universal-ai-agent-communication/) [2]"
      },
      {
       "actor": "nlip-iam",
       "role": "Authentication server",
       "status": "Experimental",
       "status_display": "Experimental · checked 2026-10-30",
       "col4_md": "GitHub describes `nlip-iam` as a standard front-end authentication server for business applications. It sits in the nlip-project organization, whose profile says the organization contains reference implementations of the protocol and end-points.",
       "source_md": "[nlip-project repositories](https://github.com/orgs/nlip-project/repositories) [19] · [nlip-project organization profile](https://raw.githubusercontent.com/nlip-project/.github/main/profile/README.md) [28]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Client libraries, agent frameworks & demo harnesses",
     "col4_header": "Transport & Scope",
     "note_md": null,
     "rows": [
      {
       "actor": "nlip_sdk",
       "role": "Client SDK",
       "status": "Development",
       "status_display": "Development · as of 2026-06-24",
       "col4_md": "GitHub describes `nlip_sdk` as a client-side SDK for nlip client development. PyPI `nlip_sdk` `0.1.3` requires `pydantic<3.0.0,>=2.9.2` and was uploaded on 2026-06-24. An earlier `0.1.0` wheel was uploaded on 2024-11-13. The package named nlip at `0.1.0` was yanked because other packages were published as nlip-sdk and nlip-server.",
       "source_md": "[PyPI nlip_sdk 0.1.3](https://pypi.org/pypi/nlip-sdk/json) [15] · [PyPI nlip 0.1.0 (yanked)](https://pypi.org/pypi/nlip/json) [29] · [nlip-project repositories](https://github.com/orgs/nlip-project/repositories) [19]"
      },
      {
       "actor": "NLIP Reference & Demo Clients (nlip_client, text_client, kivy_client, kivy-chat-mach2)",
       "role": "Reference client & demo harnesses",
       "status": "Development",
       "status_display": "Development · checked 2026-10-30",
       "col4_md": "GitHub describes `nlip_client` as a python based client wrapper for nlip, `text_client` as a terminal based text-bot which talks using NLIP to a chat-bot, `kivy_client` as a simple client for NLIP written using Kivy, and `kivy-chat-mach2` as a Kivy chat client for NLIP with media upload support and rich text rendering. The nlip_server README says nlip_client simplifies sending NLIP messages, the current implementation uses `httpx` as the base transfer package, text_client provides a simple text based chatbot, and kivy_client provides a python kivy based visual client. Writing a client uses nlip_sdk and nlip_client.",
       "source_md": "[nlip-project repositories](https://github.com/orgs/nlip-project/repositories) [19] · [nlip_server README](https://raw.githubusercontent.com/nlip-project/nlip_server/main/README.md) [27]"
      },
      {
       "actor": "AG2",
       "role": "Agent framework",
       "status": "Experimental",
       "status_display": "Experimental · as of 2026-06-30",
       "col4_md": "Pull request 2468, `feat: add NLIP integration`, merged on 2026-04-08. It defines `NlipRemoteAgent`, which turns a remote NLIP server into a `ConversableAgent`, and `NlipAgentServer`, which exposes existing AG2 agents as NLIP servers. Pull request 3024, `feat: add NLIP integration for beta`, merged on 2026-06-30. It defines `NlipConfig`, a `ModelConfig` for a remote NLIP server, and `NlipServer`, a standards-compliant NLIP endpoint, under `autogen.beta.extensions.nlip` as an opt-in extension.",
       "source_md": "[ag2 pull request 2468](https://github.com/ag2ai/ag2/pull/2468) [30] · [ag2 pull request 3024](https://github.com/ag2ai/ag2/pull/3024) [31]"
      },
      {
       "actor": "nlip_agents",
       "role": "Agent library",
       "status": "Development",
       "status_display": "Development · checked 2026-10-30",
       "col4_md": "GitHub describes `nlip_agents` as a package for creating AI agents using NLIP as transport.",
       "source_md": "[nlip-project repositories](https://github.com/orgs/nlip-project/repositories) [19]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [
     {
      "label": "ECMA-430 standard page",
      "as_of": "2025-12-10",
      "value_md": "ECMA-430 is the 1st edition, December 2025, published 2025-12-10, with ISO/IEC number DIS 26637. Ecma published five standards and one technical report on 10 December 2025. [2][11]"
     },
     {
      "label": "PyPI nlip-server and nlip_sdk",
      "as_of": "2026-06-24",
      "value_md": "PyPI nlip-server 0.1.3 and nlip_sdk 0.1.3 were uploaded on 2026-06-24. nlip_sdk 0.1.0 was uploaded on 2024-11-13. The package name nlip 0.1.0 is yanked. [15][16][29]"
     },
     {
      "label": "nlip-project organization",
      "as_of": "2026-10-30",
      "value_md": "The nlip-project organization (created on 2024-09-20) lists 21 public repositories as of 2026-10-30. Its profile says it is the official working space for Ecma TC56 NLIP and that it contains reference implementations of the protocol and end-points. [28][32]"
     }
    ],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Coordinate protocols](/category/coordinate/)** — Category index for `coordinate` standards."
    }
   ],
   "v05_compiled_md": "---\nid: nlip\ntitle: \"Natural Language Interaction Protocol (NLIP)\"\ntier: spec_brief\nlifecycle_status: published_standard\ncategory: coordinate\nform: document-format\nwire_archetype: harnesses_rpc_ui\nspec_url: https://ecma-international.org/publications-and-standards/standards/ecma-430/\nlast_checked: 2026-11-07\n---\n\n# Natural Language Interaction Protocol (NLIP)\n\n**Category:** [Coordinate](/category/coordinate/) (`coordinate`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-11-07\n\n> *This page is about the Natural Language Interaction Protocol (NLIP), the suite of five Ecma standards (ECMA-430 to ECMA-434) and one technical report (ECMA TR/113) from Ecma Technical Committee 56. It is not [NLWeb](/protocols/nlweb/), a separate natural-language web project; not IBM's [Agent Communication Protocol](/protocols/agent-communication-protocol/) or AGNTCY's [Agent Connect Protocol](/protocols/agent-connect-protocol/); and not a transport such as [SLIM](/protocols/slim/). A participants' paper describes NLIP as complementing, rather than replacing, protocols such as MCP, A2A, and ACP. [1][2][3]*\n\n**Natural Language Interaction Protocol** (`NLIP`), `ECMA-430`, is an application-level communication protocol between AI agents or a human and an AI agent, primarily a JSON message of a first submessage and optional other submessages. [4] The `format`, `subformat`, and `content` fields are required. On the HTTP binding the path is `/nlip`: the endpoint shall accept an NLIP message using `POST`, should use HTTP/1.1 or HTTP/2, and may use HTTP/3 in validated use cases. [4][5] The 130th General Assembly held in Geneva on 10 December 2025 approved `ECMA-430` 1st edition. [1] Ecma published five new standards and one technical report defining NLIP on 10 December 2025. Conformance to `ECMA-434` is mandatory for any implementation claiming NLIP conformance. [2][6]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Coordinate](/category/coordinate/) (`coordinate`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | Enterprise Neurosystems Group, beginning March 2024; Ecma TC56 formed December 2024 (Ecma call for participation, 2025-05-15). A participants' paper dates the working group to June 2024 and a first protocol text to October 2024. Dinesh Verma (IBM Research and Enterprise Neurosystem CTO) initiated the Enterprise Neurosystem community project. [3][7][8] |\n| **Governed by** | Ecma International Technical Committee 56 (TC56), under the Royalty-Free Patent Policy. Chair: Dinesh Verma (IBM). Vice-Chair: Elisa Bertino (Purdue University). Secretaries: Patrick Luthi (Ecma International) and Luyi Xing (University of Illinois). The participants' paper lists the members who officially joined TC56 as IBM, Hitachi, Red Hat, ServiceNow, Purdue University, Indiana University Bloomington, University at Buffalo, Fordham University, Chicago State University, Marist University, and City University of New York. In June 2026 the University of Illinois Urbana-Champaign was approved as an Ecma not-for-profit member. [3][4][9][10] |\n| **Track** | Industry body (Ecma International TC56) [2][9] |\n| **Status** | The 130th General Assembly, held in Geneva on 10 December 2025, approved ECMA-430 through ECMA-434 and ECMA TR/113, each a 1st edition. Standard pages list ISO/IEC DIS 26637 (ECMA-430), DIS 26638 (ECMA-431), DIS 26639 (ECMA-432), DIS 26640 (ECMA-433), and DIS 26641 (ECMA-434). Conformance to ECMA-434 is mandatory for any implementation claiming NLIP conformance. [1][6][11][12][13][14] |\n| **Version** | ECMA-430 1st edition, December 2025, adopted by the General Assembly of December 2025. PyPI `nlip_sdk` 0.1.3 was uploaded 2026-06-24 (a 0.1.0 wheel was uploaded 2024-11-13). PyPI `nlip-server` 0.1.3 was uploaded 2026-06-24. Those package versions are not the Ecma edition number. [4][11][15][16] |\n| **Message format** | JSON message: a first submessage and an optional list of other submessages. The format, subformat, and content fields are required. The value `control` is reserved for negotiating control parameters. [4] |\n| **Transports** | HTTP/HTTPS (ECMA-431): POST to the path `/nlip`; HTTP/1.1 or HTTP/2, and HTTP/3 in validated cases. WebSocket (ECMA-432): CBOR (RFC 8949), with a fallback to UTF-8 encoded JSON text frames. AMQP (ECMA-433). [5][13][14] |\n| **Schemes** | HTTP or HTTPS; WebSocket; AMQP [12][13][14] |\n| **Specification** | [ECMA-430](https://ecma-international.org/publications-and-standards/standards/ecma-430/) (1st edition, December 2025); bindings [ECMA-431](https://ecma-international.org/publications-and-standards/standards/ecma-431/), [ECMA-432](https://ecma-international.org/publications-and-standards/standards/ecma-432/), [ECMA-433](https://ecma-international.org/publications-and-standards/standards/ecma-433/); security profiles [ECMA-434](https://ecma-international.org/publications-and-standards/standards/ecma-434/); guide [ECMA TR/113](https://ecma-international.org/publications-and-standards/technical-reports/ecma-tr-113/) [6][11][12][13][14][17] |\n| **Found at** | HTTP endpoint path `/nlip`, which shall accept an NLIP message with POST. [5] |\n| **Licence** | ECMA-430 may be copied, published, and distributed under its Ecma copyright notice. TC56 operates under the Royalty-Free Patent Policy. The NLIP standards and ECMA TR/113 are free of charge, and the project copies require no registration to download. `nlip-project/nlip_sdk` and `nlip-project/nlip_spec` are Apache-2.0; `nlip-project/ecma_draft` is CC0-1.0. [2][4][9][18][19] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [Adoption and ecosystem](#adoption-and-ecosystem)\n4. [See also](#see-also)\n5. [References](#references)\n\n---\n\n## Problem and scope\n\nThe NLIP specifications published on 10 December 2025 establish a foundation for AI agents to communicate across organizational boundaries and technology platforms, replacing hard-coded application programming interfaces with a universal envelope protocol. [2] Each NLIP exchange is primarily a JSON message. The `format`, `subformat`, and `content` fields are required, optional `submessages` are an array whose order is significant, and the value `control` is reserved to negotiate control parameters. [4] `ECMA TR/113` is an informative document and does not define a standard. On conflict with the NLIP standards, the standards documents take precedence. [17] `ECMA-430` leaves motivation, the design philosophy, exemplar use-cases, and examples of sample exchanges out of scope. [11]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **SOAP Version 1.2 Messaging Framework** | `W3C SOAP Version 1.2 Part 1` | Analogous to classic standard | SOAP Version 1.2 is the classic messaging-framework analogue in this row. NLIP's ECMA-430 message is primarily JSON, with a first submessage and an optional list of other submessages, and ECMA-431 binds that message to HTTP POST at the path /nlip. [4][5] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Agent2Agent Protocol (A2A)](/protocols/a2a/)** | Peer alternative | A2A defines JSON-RPC, gRPC, and HTTP+JSON/REST protocol bindings, and a client fetches the public Agent Card with GET /.well-known/agent-card.json so agents can delegate tasks. NLIP instead posts an ECMA-430 JSON message, whose format, subformat, and content fields are required, to the HTTP path /nlip. [4][5][20] |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | MCP uses JSON-RPC 2.0 messages, and MCP servers may offer resources, prompts, and tools. NLIP is a JSON message envelope whose HTTP binding accepts POST and should use HTTP/1.1 or HTTP/2. [4][5][21] |\n| **[Agent Communication Protocol](/protocols/agent-communication-protocol/)** | Peer alternative | ACP's repository was archived by the owner on 27 August 2025 and states that ACP is now part of A2A under the Linux Foundation. Its OpenAPI document exposes GET /agents and POST /runs. NLIP's HTTP binding accepts an ECMA-430 JSON message with POST at the path /nlip. [5][22][23] |\n| **[Secure Low-Latency Interactive Messaging (SLIM)](/protocols/slim/)** | Complements | SLIM (Secure Low-latency Interactive Messaging) is a secure peer-to-peer messaging framework. The `draft-mpsb-agntcy-slim-03` specification combines gRPC over HTTP/2 and HTTP/3 with secure messaging, and the SLIM overview uses MLS (RFC 9420) to encrypt data at the session layer. NLIP specifies the JSON message envelope and an HTTP POST binding, which is a different layer from that transport. [4][5][24][25] |\n| **[Agent Network Protocol](/protocols/anp/)** | Peer alternative | ANP aims to be a protocol suite for agent identity, naming, discovery, negotiation, secure messaging, and application-level collaboration. NLIP standardizes a JSON message envelope and an HTTP POST binding at the path /nlip. [4][5][26] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (8 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).*\n\n### Server implementations & reference prototypes\n\n| Actor | Role | Status | Transport & Scope | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **nlip_server** | Server library | Development · as of 2026-06-24 | GitHub describes `nlip_server` as an initial implementation of a Python NLIP server built using fastapi. The README calls that repository one component of the Python repositories for an NLIP Proof of Concept implementation. It provides `NLIPApplication` and an echo server started with `poetry run fastapi dev nlip_server/echo.py`. PyPI `nlip-server` `0.1.3` was uploaded on 2026-06-24 and depends on `fastapi[standard]<1,>=0.115.0` and `nlip-sdk<0.2.0,>=0.1.2`. | [nlip_server README](https://raw.githubusercontent.com/nlip-project/nlip_server/main/README.md) [27] · [PyPI nlip-server 0.1.3](https://pypi.org/pypi/nlip-server/json) [16] · [nlip-project repositories](https://github.com/orgs/nlip-project/repositories) [19] |\n| **nlip_soln** | Reference prototype | Experimental · checked 2026-10-30 | GitHub describes `nlip_soln` as solutions for NLIP based on the nlip_server repository. The nlip_server README says nlip_soln provides a few simple prototype server side solutions using the nlip_server package. | [nlip-project repositories](https://github.com/orgs/nlip-project/repositories) [19] · [nlip_server README](https://raw.githubusercontent.com/nlip-project/nlip_server/main/README.md) [27] |\n| **nlip_web** | Reference prototype | Experimental · as of 2025-12-10 | GitHub describes `nlip_web` as a NLIP web server with a javascript client. Ecma's 10 December 2025 announcement says open-source reference implementations can be found on GitHub. | [nlip-project repositories](https://github.com/orgs/nlip-project/repositories) [19] · [Ecma NLIP approval, 10 December 2025](https://ecma-international.org/news/ecma-international-approves-nlip-standards-suite-for-universal-ai-agent-communication/) [2] |\n| **nlip-iam** | Authentication server | Experimental · checked 2026-10-30 | GitHub describes `nlip-iam` as a standard front-end authentication server for business applications. It sits in the nlip-project organization, whose profile says the organization contains reference implementations of the protocol and end-points. | [nlip-project repositories](https://github.com/orgs/nlip-project/repositories) [19] · [nlip-project organization profile](https://raw.githubusercontent.com/nlip-project/.github/main/profile/README.md) [28] |\n\n### Client libraries, agent frameworks & demo harnesses\n\n| Actor | Role | Status | Transport & Scope | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **nlip_sdk** | Client SDK | Development · as of 2026-06-24 | GitHub describes `nlip_sdk` as a client-side SDK for nlip client development. PyPI `nlip_sdk` `0.1.3` requires `pydantic<3.0.0,>=2.9.2` and was uploaded on 2026-06-24. An earlier `0.1.0` wheel was uploaded on 2024-11-13. The package named nlip at `0.1.0` was yanked because other packages were published as nlip-sdk and nlip-server. | [PyPI nlip_sdk 0.1.3](https://pypi.org/pypi/nlip-sdk/json) [15] · [PyPI nlip 0.1.0 (yanked)](https://pypi.org/pypi/nlip/json) [29] · [nlip-project repositories](https://github.com/orgs/nlip-project/repositories) [19] |\n| **NLIP Reference & Demo Clients (nlip_client, text_client, kivy_client, kivy-chat-mach2)** | Reference client & demo harnesses | Development · checked 2026-10-30 | GitHub describes `nlip_client` as a python based client wrapper for nlip, `text_client` as a terminal based text-bot which talks using NLIP to a chat-bot, `kivy_client` as a simple client for NLIP written using Kivy, and `kivy-chat-mach2` as a Kivy chat client for NLIP with media upload support and rich text rendering. The nlip_server README says nlip_client simplifies sending NLIP messages, the current implementation uses `httpx` as the base transfer package, text_client provides a simple text based chatbot, and kivy_client provides a python kivy based visual client. Writing a client uses nlip_sdk and nlip_client. | [nlip-project repositories](https://github.com/orgs/nlip-project/repositories) [19] · [nlip_server README](https://raw.githubusercontent.com/nlip-project/nlip_server/main/README.md) [27] |\n| **AG2** | Agent framework | Experimental · as of 2026-06-30 | Pull request 2468, `feat: add NLIP integration`, merged on 2026-04-08. It defines `NlipRemoteAgent`, which turns a remote NLIP server into a `ConversableAgent`, and `NlipAgentServer`, which exposes existing AG2 agents as NLIP servers. Pull request 3024, `feat: add NLIP integration for beta`, merged on 2026-06-30. It defines `NlipConfig`, a `ModelConfig` for a remote NLIP server, and `NlipServer`, a standards-compliant NLIP endpoint, under `autogen.beta.extensions.nlip` as an opt-in extension. | [ag2 pull request 2468](https://github.com/ag2ai/ag2/pull/2468) [30] · [ag2 pull request 3024](https://github.com/ag2ai/ag2/pull/3024) [31] |\n| **nlip_agents** | Agent library | Development · checked 2026-10-30 | GitHub describes `nlip_agents` as a package for creating AI agents using NLIP as transport. | [nlip-project repositories](https://github.com/orgs/nlip-project/repositories) [19] |\n\n### Ecosystem censuses\n\n- **ECMA-430 standard page** (*as of 2025-12-10*): ECMA-430 is the 1st edition, December 2025, published 2025-12-10, with ISO/IEC number DIS 26637. Ecma published five standards and one technical report on 10 December 2025. [2][11]\n- **PyPI nlip-server and nlip_sdk** (*as of 2026-06-24*): PyPI nlip-server 0.1.3 and nlip_sdk 0.1.3 were uploaded on 2026-06-24. nlip_sdk 0.1.0 was uploaded on 2024-11-13. The package name nlip 0.1.0 is yanked. [15][16][29]\n- **nlip-project organization** (*as of 2026-10-30*): The nlip-project organization (created on 2024-09-20) lists 21 public repositories as of 2026-10-30. Its profile says it is the official working space for Ecma TC56 NLIP and that it contains reference implementations of the protocol and end-points. [28][32]\n\n---\n\n## See also\n\n- **Category:** [Coordinate protocols](/category/coordinate/)\n\n---\n\n## References\n\n1. Ecma International, *Ecma International approves new standards* (published 2025-12-11; fetched 2026-10-30) — <https://ecma-international.org/news/ecma-international-approves-new-standards-12/>\n2. Ecma International, *Ecma International approves NLIP standards suite for universal AI agent communication* (published 2025-12-17; fetched 2026-10-30) — <https://ecma-international.org/news/ecma-international-approves-nlip-standards-suite-for-universal-ai-agent-communication/>\n3. Luyi Xing, Rasit Onur Topaloglu, Ranjan Sinha, Abhay Ratnaparkhi, and co-authors, *The Natural Language Interaction Protocol and Standard for AI Agents* (submitted 2026-09-03; fetched 2026-10-30) — <https://arxiv.org/pdf/2609.04135>\n4. Ecma International Technical Committee 56, *ECMA-430: Natural Language Interaction Protocol (NLIP), 1st edition* (December 2025; fetched 2026-10-30) — <https://ecma-international.org/wp-content/uploads/ECMA-430_1st_edition_december_2025.pdf>\n5. Ecma International Technical Committee 56, *ECMA-431: Binding of NLIP over HTTP/HTTPS, 1st edition* (December 2025; fetched 2026-10-30) — <https://ecma-international.org/wp-content/uploads/ECMA-431_1st_edition_december_2025.pdf>\n6. Ecma International, *ECMA-434 Security Profiles for NLIP* (1st edition, December 2025; published 2025-12-10; modified 2026-10-07; fetched 2026-10-30) — <https://ecma-international.org/publications-and-standards/standards/ecma-434/>\n7. Ecma International, *Call for participation on NLIP for communication with AI agents standardization* (published 2025-05-15; modified 2025-06-05; fetched 2026-10-30) — <https://ecma-international.org/news/call-for-participation-on-natural-language-interaction-protocol-for-communication-with-ai-agents-standardization/>\n8. Enterprise Neurosystem, *NLIP: Natural Language Interaction Protocol* (fetched 2026-10-30) — <https://www.enterpriseneurosystem.org/nlip>\n9. Ecma International, *TC56* (published 2024-12-12; modified 2026-07-02; fetched 2026-10-30) — <https://ecma-international.org/technical-committees/tc56/>\n10. Rudy San Miguel, Siebel School of Computing and Data Science, University of Illinois, *Luyi Xing receives NSF grant and sets AI Agent Ecosystems ISO standard* (25 September 2026; fetched 2026-10-30) — <https://siebelschool.illinois.edu/news/luyi-xing-nsf-grant-ecma>\n11. Ecma International, *ECMA-430 Natural Language Interaction Protocol (NLIP)* (1st edition, December 2025; published 2025-12-10; modified 2026-10-07; fetched 2026-10-30) — <https://ecma-international.org/publications-and-standards/standards/ecma-430/>\n12. Ecma International, *ECMA-431 Binding of NLIP over HTTP/HTTPS* (1st edition, December 2025; published 2025-12-10; modified 2026-10-07; fetched 2026-10-30) — <https://ecma-international.org/publications-and-standards/standards/ecma-431/>\n13. Ecma International, *ECMA-432 Binding of NLIP over WebSocket* (1st edition, December 2025; published 2025-12-10; modified 2026-10-07; fetched 2026-10-30) — <https://ecma-international.org/publications-and-standards/standards/ecma-432/>\n14. Ecma International, *ECMA-433 Binding of NLIP over AMQP* (1st edition, December 2025; published 2025-12-10; modified 2026-10-07; fetched 2026-10-30) — <https://ecma-international.org/publications-and-standards/standards/ecma-433/>\n15. PyPI, *nlip_sdk* (version 0.1.3 uploaded 2026-06-24; 0.1.0 uploaded 2024-11-13; fetched 2026-10-30) — <https://pypi.org/pypi/nlip-sdk/json>\n16. PyPI, *nlip-server* (version 0.1.3 uploaded 2026-06-24; fetched 2026-10-30) — <https://pypi.org/pypi/nlip-server/json>\n17. Ecma International, *ECMA TR/113 Explanatory guide to NLIP* (1st edition, December 2025; published 2025-12-10; modified 2026-02-26; fetched 2026-10-30) — <https://ecma-international.org/publications-and-standards/technical-reports/ecma-tr-113/>\n18. nlip-project, *nlip_spec README* (fetched 2026-10-30) — <https://raw.githubusercontent.com/nlip-project/nlip_spec/main/README.md>\n19. NLIP Project, *nlip-project repositories* (fetched 2026-10-30) — <https://github.com/orgs/nlip-project/repositories>\n20. The Linux Foundation, *A2A Protocol specification* (copyright 2026; fetched 2026-10-30) — <https://a2a-protocol.org/latest/specification/>\n21. Model Context Protocol, *Specification* (version 2026-07-28; fetched 2026-10-30) — <https://modelcontextprotocol.io/specification/2026-07-28>\n22. BeeAI (i-am-bee), *Agent Communication Protocol (ACP)* (repository archived 2025-08-27; fetched 2026-10-30) — <https://github.com/i-am-bee/acp>\n23. BeeAI (i-am-bee), *ACP OpenAPI* (version 0.2.0; fetched 2026-10-30) — <https://raw.githubusercontent.com/i-am-bee/acp/main/docs/spec/openapi.yaml>\n24. AGNTCY, *SLIM introduction* (fetched 2026-10-30) — <https://slim.agntcy.org/latest/slim/slim-overview/>\n25. L. Muscariello, M. Papalini, M. Sardara, and S. Betts (Cisco), *Secure Low-Latency Interactive Messaging (SLIM) (draft-mpsb-agntcy-slim-03)* (2 November 2026; expires 6 May 2027) — <https://www.ietf.org/archive/id/draft-mpsb-agntcy-slim-03.txt>\n26. Agent Network Protocol community project, *Agent Network Protocol README* (fetched 2026-10-30) — <https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/README.md>\n27. nlip-project, *nlip_server README* (fetched 2026-10-30) — <https://raw.githubusercontent.com/nlip-project/nlip_server/main/README.md>\n28. nlip-project, *Organization profile README* (fetched 2026-10-30) — <https://raw.githubusercontent.com/nlip-project/.github/main/profile/README.md>\n29. PyPI, *nlip* (version 0.1.0 yanked; fetched 2026-10-30) — <https://pypi.org/pypi/nlip/json>\n30. ag2ai, *ag2 pull request 2468: feat: add nlip integration* (merged 2026-04-08; fetched 2026-10-30) — <https://github.com/ag2ai/ag2/pull/2468>\n31. ag2ai, *ag2 pull request 3024: feat: add nlip integration for beta* (merged 2026-06-30; fetched 2026-10-30) — <https://github.com/ag2ai/ag2/pull/3024>\n32. NLIP Project, *nlip-project organization* (created 2024-09-20; fetched 2026-10-30) — <https://github.com/nlip-project>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "EMV Agentic Payments",
   "hatnote_md": "This page is about EMVCo's draft EMV® Agentic Payments – Framework for Specifications for card-based agentic payments, which introduces Intent Services so participants can register, reference, retrieve, and manage consumer-authorized intent. It is not Visa's [Trusted Agent Protocol (TAP)](/protocols/tap/), whose specifications put Signature-Input and a message signature on the HTTP message, or Visa Intelligent Commerce Connect, which Visa calls an on-ramp to agentic commerce. It is not Mastercard Agent Pay, and not [Verifiable Intent (VI)](/protocols/vi/), which Mastercard introduced with Google and which EMVCo says the framework complements. It is not the [Agent Payments Protocol (AP2)](/protocols/ap2/), which secures agent-performed payment transactions and uses SD-JWTs for the Payment and Checkout Mandates. EMVCo may consider Know Your Agent (KYA) capabilities in future publications.",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "aliases": [],
   "analog": "A shared authorisation-hold / standing-order ledger that every party in a card transaction can consult, rather than 3-D Secure's single point-in-time challenge",
   "collisions": [],
   "discovery": {
    "mechanism": "Nothing to probe. It is a framework document, with no endpoint, file or header of its own",
    "path": "Nothing to probe. It is a framework document, with no endpoint, file or header of its own"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.emvco.com/news-publications/emvco-newsletter-q3-2026/",
     "claim": "EMVCo, *EMVCo Newsletter: Q3 2026*, published 2026-10-09; modified 2026-10-19",
     "date": null,
     "quote": "EMV® Agentic Payments – Framework for Specifications / \"datePublished\":\"2026-10-09T13:25:24+00:00\" / Available to Public: … EMV Agentic Payments - Framework for Specifications Version 1.0 (Draft) / EMV Agentic Payments - Framework for Specifications Version 1.0 (Draft)",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://www.emvco.com/news-publications/emvco-requests-feedback-on-framework-for-secure-interoperable-and-scalable-card-based-agentic-payments/",
     "claim": "EMVCo, *EMVCo Requests Feedback on Framework for Secure, Interoperable and Scalable Card-Based Agentic Payments*, published 2026-09-01; modified 2026-10-19",
     "date": null,
     "quote": "Intent Services provide a shared, interoperable layer that enables payment participants to register, reference, retrieve and manage consumer-authorised intent before, during and after a transaction. / complement cryptographic assurance provided by existing industry solutions, such as Verifiable Intent / EMVCo may consider capabilities related to Know Your Agent (KYA) and Agentic Transaction Indicators to be included in future publications. / The draft EMV Agentic Payments - Framework for Specifications therefore introduces the concept of 'Intent Services'. / The framework provides an overview of ecosystem roles and data fields for registering intent, maintaining lifecycle and state information, and enabling the authorised retrieval of intent-related data. / Following initial review from EMVCo Associates, EMV Agentic Payments - Framework for Specifications is now available for public review until Wednesday 30 September. / EMVCo has established a dedicated Agentic Payments Task Force / has released a draft framework to help promote secure, interoperable and scalable card-based agentic payments. / the framework will help identify potential future enhancements to other EMV technologies - including EMV 3-D Secure (3DS), EMV Payment Tokenisation, EMV Secure Remote Commerce (SRC) and the EMV Digital Payment Credential (DPC). / EMVCo has focused on card-based agentic payment scenarios where intent needs to be managed over time, such as recurring purchases, cumulative budgets and post-transaction activities. These scenarios may require access to a shared intent 'state' that persists across multiple participants and their interactions. EMVCo has identified an opportunity to complement cryptographic assurance provided by existing industry solutions, such as Verifiable Intent, with a common coordination point that can help participants consistently interpret consumer-authorised intent. / EMVCo may consider capabilities related to Know Your Agent (KYA) and Agentic Transaction Indicators to be included in future publications. Together, these could help provide interoperable mechanisms for identifying the agent involved in a payment interaction, communicating relevant agent attributes, and signalling that a transaction involved an agent acting on behalf of a consumer. / therefore introduces the concept of 'Intent Services'. / The framework provides a foundation for further industry engagement and potential specification development / potential future enhancements to other EMV technologies - including EMV 3-D Secure (3DS) / complement cryptographic assurance provided by existing industry solutions, such as Verifiable Intent, with a common coordination point",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://developer.visa.com/docs/trusted-agent-protocol/trusted-agent-protocol-specifications",
     "claim": "Visa, *Specifications - Trusted Agent Protocol*, fetched 2026-10-30",
     "date": null,
     "quote": "HTTP Message Signatures comprise the following 2 fields being present in the HTTP header or message header: / Signature-Input A Dictionary Structured Field containing the metadata of the message signature / HTTP message signatures are specifically intended to provide cryptographic assurance of origin.",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://corporate.visa.com/en/sites/visa-perspectives/newsroom/visa-intelligent-commerce-connect-ai-shopping-for-businesses.html",
     "claim": "Visa, *Visa to enable AI-driven shopping for businesses*, 2026-04-08",
     "date": "2026-04-08",
     "quote": "Intelligent Commerce Connect acts as a network, protocol, and token vault-agnostic 'on ramp' to agentic commerce",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://www.mastercard.com/us/en/news-and-trends/press/2025/april/mastercard-unveils-agent-pay-pioneering-agentic-payments-technology-to-power-commerce-in-the-age-of-ai.html",
     "claim": "Mastercard, *Mastercard unveils Agent Pay, pioneering agentic payments technology to power commerce in the age of AI*, April 29, 2025",
     "date": null,
     "quote": "The program introduces Mastercard Agentic Tokens",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://www.mastercard.com/global/en/news-and-trends/stories/2026/verifiable-intent.html",
     "claim": "Mastercard, *How Verifiable Intent builds trust in agentic AI commerce*, published 2026-03-05; modified 2026-03-05",
     "date": null,
     "quote": "we're collaborating with Google to introduce Verifiable Intent / \"datePublished\":\"2026-03-05T00:00:00.000-05:00\"",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://ap2-protocol.org/ap2/specification/",
     "claim": "Agent Payments Protocol, *Agentic Payment Protocol (v0.2)*, fetched 2026-10-30",
     "date": null,
     "quote": "The Agentic Payment Protocol (AP2) provides a protocol to secure Agent-performed payment transactions. / AP2 specifies the use of SD-JWTs for securing the Payment and Checkout Mandates. / Merchant verifies the Checkout with what it created",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://insights.bostonidentity.com/research/emvco-2026-08-27-agentic-payments-framework-v1-draft",
     "claim": "Boston Identity, *EMVCo's agent-payment framework is not a spec; its consent proof is FIDO's Verifiable Intent, in AP2's shape*, published 2026-10-09; modified 2026-10-16",
     "date": null,
     "quote": "It prescribes no protocol / Nothing in it is a binding requirement",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://www.emvco.com/resources/emv-agentic-payments-framework-for-specifications-v1-0-draft-comment-period-ends-30-sept-2026/",
     "claim": "EMVCo, *EMV Agentic Payments - Framework for Specifications v1.0 DRAFT: Comment period ends 30-Sept 2026*, published 2026-08-30; modified 2026-08-31",
     "date": null,
     "quote": "v1.0 DRAFT: Comment period ends 30-Sept 2026 ... \"datePublished\":\"2026-08-30T23:00:50+00:00\" / Comment period ends 30-Sept 2026 / \"datePublished\":\"2026-08-30T23:00:50+00:00\" / v1.0 DRAFT / EMV Agentic Payments - Framework for Specifications v1.0 DRAFT: Comment period ends 30-Sept 2026 / TERMS OF USE Last Updated: April 17, 2020",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://www.emvco.com/news-publications/emvco-working-on-how-global-specifications-can-support-agentic-payments/",
     "claim": "EMVCo, *EMVCo Working on How Global Specifications Can Support Agentic Payments*, published 2025-11-20; modified 2026-10-19",
     "date": null,
     "quote": "\"datePublished\":\"2025-11-20T14:00:31+00:00\" / has announced that it is working on how global specifications can support innovation in agentic payment solutions",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://www.emvco.com/news-publications/agentic-payments-and-digital-payment-credentials-highlights-from-the-emvco-board-of-advisors-meeting/",
     "claim": "Oliver Manahan, EMVCo, *Agentic Payments and Digital Payment Credentials: Highlights from the EMVCo Board of Advisors Meeting*, published 2026-04-10",
     "date": null,
     "quote": "\"datePublished\":\"2026-04-10T12:08:58+00:00\" / Oliver Manahan, EMVCo Director of Engagement and Operations / An Agentic Payments Task Force has now been established to define and develop EMVCo's approach",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://www.emvco.com/news-publications/how-emvco-is-working-to-enable-secure-interoperable-and-scalable-card-based-agentic-payments/",
     "claim": "Clinton Allen, EMVCo, *How EMVCo is Working to Enable Secure, Interoperable and Scalable Card-Based Agentic Payments*, published 2026-09-01",
     "date": null,
     "quote": "1 Sep 2026 | By Clinton Allen / Clinton Allen, Chair of the EMVCo Agentic Payments Task Force / in certain agentic use-cases, the consumer may instruct an agent to make a purchase within set limits and may not be present when the payment is actually executed. / The agentic payments ecosystem is complex, comprising various existing and emerging industry standards and protocols. This poses the risk of fragmentation.",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://www.emvco.com/about-us/overview-of-emvco/",
     "claim": "EMVCo, *Overview of EMVCo*, published 2022-07-14; modified 2026-10-19",
     "date": null,
     "quote": "EMVCo is collectively owned by American Express, Discover, JCB, Mastercard, UnionPay and Visa.",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://www.emvco.com/about-us/organization-structure/",
     "claim": "EMVCo, *Organisation Structure*, published 2022-07-14; modified 2026-10-19",
     "date": null,
     "quote": "EMVCo is managed by the Board of Managers, which is comprised of two representatives from each of the member organisations. / Matt Crothers currently serves as Chair of the EMVCo Board of Managers, representing American Express.",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://www.emvco.com/wp-content/uploads/2026/03/EAP-Policy-and-Procedures-Version-5.2.pdf",
     "claim": "EMVCo, *EMVCo Associates Programme and Subscriber Programme Policy and Procedures (EAP-Policy-and-Procedures-Version-5.2.pdf; document text Version 6.1)*, 1 August 2024",
     "date": null,
     "quote": "EMVCo Associates Programme and Subscriber Programme Policy and Procedures Version 6.1 1 August 2024 / A simple majority of the non-abstaining voting Advisors must vote in the affirmative for a final draft Work Item to be released.",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://www.pymnts.com/news/artificial-intelligence/2026/emvco-framework-targets-consumer-intent-agentic-payments/",
     "claim": "PYMNTS, *EMVCo Takes On Proof of Permission for AI Payments*, October 2, 2026",
     "date": null,
     "quote": "By PYMNTS | October 2, 2026 / The standards body closed public comments Sept. 30 on its Agentic Payments - Framework for Specifications / It does not define the business rules, in other words, how a product is used,\" Oliver Manahan, director of engagement and operations for EMVCo, told PYMNTS.",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://verifiableintent.dev/spec/",
     "claim": "Verifiable Intent Working Group, *Overview - Verifiable Intent*, 2026",
     "date": null,
     "quote": "Verifiable Intent (VI) defines a layered SD-JWT credential format that creates a cryptographically verifiable chain binding an AI agent's commercial actions to an end-user's explicitly stated purchase intent.",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://ucp.dev/latest/specification/overview/",
     "claim": "Universal Commerce Protocol, *Overview - Universal Commerce Protocol (UCP)*, fetched 2026-10-30",
     "date": null,
     "quote": "Discovery: Fetch business profile from /.well-known/ucp / services and payment handlers declare one where their transport or handler defines it.",
     "ref": 18
    }
   ],
   "form": "document-format",
   "governance": "EMVCo. \"EMVCo is collectively owned by American Express, Discover, JCB, Mastercard, UnionPay and Visa.\" \"EMVCo is managed by the Board of Managers, which is comprised of two representatives from each of the member organisations.\" \"Matt Crothers currently serves as Chair of the EMVCo Board of Managers, representing American Express.\" Neither page names Capital One. Associates review drafts first: \"Following initial review from EMVCo Associates, EMV ® Agentic Payments – Framework for Specifications is now available for public review until Wednesday 30 September.\" Release of a final draft work item goes to an Advisor vote: \"A simple majority of the non-abstaining voting Advisors must vote in the affirmative for a final draft Work Item to be released.\"",
   "group": null,
   "history": [
    {
     "date": "2026-09-07",
     "note": "created and verified against EMVCo's 2026-09-01 news release, the companion EMV Insights article by Clinton Allen, independent trade press (fintech.global, 2026-09-04), and the EMVCo overview page"
    },
    {
     "date": "2026-10-29",
     "note": "Primary-source verification against EMVCo v1.0 DRAFT resource page, press releases, Q3 2026 newsletter, and OpenID Foundation comments"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "emv-agentic-payments",
   "implementation": "none-found",
   "last_verified": "2026-10-31",
   "name": "EMV® Agentic Payments – Framework for Specifications",
   "native_status": "Draft. Public comments were due on 30 September 2026; PYMNTS reported on 2026-10-02: \"The standards body closed public comments Sept. 30 on its Agentic Payments — Framework for Specifications\". The 2026-10-09 newsletter still lists \"EMV® Agentic Payments – Framework for Specifications Version 1.0 (Draft) Framework to help promote secure, interoperable and scalable card-based agentic payments, which introduces the concept of 'Intent Services'.\". No later version appears on the EMVCo pages fetched on 2026-10-29",
   "origin": {
    "date": "2025-11-20",
    "org": "EMVCo (Agentic Payments Task Force)"
   },
   "part_of": null,
   "parties": [
    "agent-payment"
   ],
   "phase": "draft",
   "probe": {
    "method": "none",
    "on_absent": "No probe exists; EMVCo has not yet published a technical specification",
    "parse": "not applicable — this is a draft framework document, not a deployed protocol",
    "path": "none"
   },
   "question": "When a card network, issuer, merchant, or wallet sees an AI-agent-initiated card payment, how do they consistently find out what the consumer actually authorised?",
   "scope": "payments",
   "spec_url": "https://www.emvco.com/resources/emv-agentic-payments-framework-for-specifications-v1-0-draft-comment-period-ends-30-sept-2026/",
   "step": "pay",
   "summary_md": "The draft EMV Agentic Payments - Framework for Specifications introduces Intent Services, a shared interoperable layer where payment participants register, reference, retrieve, and manage consumer-authorized intent before, during, and after a transaction. The framework provides an overview of ecosystem roles and data fields for registering intent, maintaining lifecycle and state information, and enabling the authorized retrieval of intent-related data. Boston Identity's review says it prescribes no protocol. The resource page titles the document `v1.0 DRAFT`, records datePublished 2026-08-30, and says the comment period ends 30-Sept 2026. After Associate review, the draft is available for public review until Wednesday 30 September.",
   "track": "industry-body",
   "version": {
    "date": "2026-08-30",
    "label": "v1.0 DRAFT"
   },
   "watch": [
    {
     "type": "page",
     "url": "https://www.emvco.com/resources/emv-agentic-payments-framework-for-specifications-v1-0-draft-comment-period-ends-30-sept-2026/",
     "selector": "main",
     "cadence": "weekly"
    },
    {
     "type": "page",
     "url": "https://www.emvco.com/specifications/",
     "selector": "main",
     "cadence": "weekly"
    }
   ],
   "use_cases": [
    "agent-checkout",
    "delegate-user-authority",
    "audit-agent-actions"
   ],
   "audience": [
    "platform",
    "standards-body"
   ],
   "pairs_with": [
    "ap2",
    "vi",
    "tap",
    "ucp"
   ],
   "prerequisites": [],
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "payments_onchain",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-10-31",
   "v05_hatnote_html_md": "This page is about EMVCo's draft EMV® Agentic Payments – Framework for Specifications for card-based agentic payments, which introduces Intent Services so participants can register, reference, retrieve, and manage consumer-authorized intent. It is not Visa's [Trusted Agent Protocol (TAP)](/protocols/tap/), whose specifications put Signature-Input and a message signature on the HTTP message, or Visa Intelligent Commerce Connect, which Visa calls an on-ramp to agentic commerce. It is not Mastercard Agent Pay, and not [Verifiable Intent (VI)](/protocols/vi/), which Mastercard introduced with Google and which EMVCo says the framework complements. It is not the [Agent Payments Protocol (AP2)](/protocols/ap2/), which secures agent-performed payment transactions and uses SD-JWTs for the Payment and Checkout Mandates. EMVCo may consider Know Your Agent (KYA) capabilities in future publications. [1][2][3][4][5][6][7]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "The draft EMV Agentic Payments - Framework for Specifications introduces Intent Services, a shared interoperable layer where payment participants register, reference, retrieve, and manage consumer-authorized intent before, during, and after a transaction. [2] The framework provides an overview of ecosystem roles and data fields for registering intent, maintaining lifecycle and state information, and enabling the authorized retrieval of intent-related data. Boston Identity's review says it prescribes no protocol. [2][8] The resource page titles the document `v1.0 DRAFT`, records datePublished 2026-08-30, and says the comment period ends 30-Sept 2026. After Associate review, the draft is available for public review until Wednesday 30 September. [2][9]",
   "v05_identity_sentence_md": "The draft EMV Agentic Payments - Framework for Specifications introduces Intent Services, a shared interoperable layer where payment participants register, reference, retrieve, and manage consumer-authorized intent before, during, and after a transaction. [2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Pay](/category/pay/) (`pay`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "EMVCo. A 2025-11-20 announcement says EMVCo is working on how global specifications can support agentic payments. A 2026-04-10 note by Oliver Manahan says an Agentic Payments Task Force has been established. Clinton Allen, in a 1 Sep 2026 EMV Insights article, is Chair of that task force. [10][11][12]"
    },
    {
     "label": "Governed by",
     "value_md": "EMVCo, collectively owned by American Express, Discover, JCB, Mastercard, UnionPay and Visa, and managed by the Board of Managers. Matt Crothers (American Express) chairs that board. Under Associates Programme and Subscriber Programme Policy and Procedures Version 6.1 (1 August 2024), a simple majority of the non-abstaining voting Advisors must approve release of a final draft Work Item. The citation URL filename is EAP-Policy-and-Procedures-Version-5.2.pdf, while the document text says Version 6.1. [13][14][15]"
    },
    {
     "label": "Track",
     "value_md": "Industry body (`industry-body`). EMVCo publishes the draft and has established a dedicated Agentic Payments Task Force. [2][13]"
    },
    {
     "label": "Status",
     "value_md": "v1.0 DRAFT. The resource page says the comment period ends 30-Sept 2026 and records datePublished 2026-08-30. After Associate review, EMVCo opened public review until Wednesday 30 September. PYMNTS reported on October 2, 2026 that public comments closed Sept. 30. The Q3 2026 newsletter, published 2026-10-09, still lists Version 1.0 (Draft) under Available to Public. Boston Identity's review says the draft prescribes no protocol and that nothing in it is a binding requirement. [1][2][8][9][16]"
    },
    {
     "label": "Version",
     "value_md": "Version 1.0 (Draft), titled v1.0 DRAFT on the resource page (datePublished 2026-08-30). The Q3 2026 newsletter, published 2026-10-09, still lists Version 1.0 (Draft). [1][9]"
    },
    {
     "label": "Schemes",
     "value_md": "Card-based agentic payments. EMVCo says the framework may help identify later enhancements to EMV 3-D Secure (3DS), EMV Payment Tokenisation, EMV Secure Remote Commerce (SRC), and the EMV Digital Payment Credential (DPC). [2]"
    },
    {
     "label": "Message format",
     "value_md": "Framework document describing ecosystem roles and data fields for Intent Services. Boston Identity's review of the draft says it prescribes no protocol. [2][8]"
    },
    {
     "label": "Specification",
     "value_md": "[EMV Agentic Payments - Framework for Specifications v1.0 DRAFT: Comment period ends 30-Sept 2026](https://www.emvco.com/resources/emv-agentic-payments-framework-for-specifications-v1-0-draft-comment-period-ends-30-sept-2026/) [9]"
    },
    {
     "label": "Found at",
     "value_md": "[emvco.com resource page](https://www.emvco.com/resources/emv-agentic-payments-framework-for-specifications-v1-0-draft-comment-period-ends-30-sept-2026/) for the v1.0 DRAFT, posted 2026-08-30. [9]"
    },
    {
     "label": "Licence",
     "value_md": "EMVCo website Terms of Use, last updated April 17, 2020, presented on the draft resource page. [9]"
    }
   ],
   "v05_problem_md": "In certain agentic use-cases, the consumer may instruct an agent to make a purchase within set limits and may not be present when the payment is actually executed. That mix of existing and emerging industry standards and protocols poses a risk of fragmentation. [12] EMVCo has focused on card-based agentic payment scenarios where intent needs to be managed over time, such as recurring purchases, cumulative budgets, and post-transaction activities, and it has identified an opportunity to complement cryptographic assurance such as Verifiable Intent with a common coordination point. The draft therefore introduces Intent Services. [2] Oliver Manahan told PYMNTS it does not define the business rules for how a product is used. EMVCo may consider Know Your Agent (KYA) and Agentic Transaction Indicators for future publications. [2][16]",
   "v05_mechanism_delta_md": "EMVCo has focused on card-based agentic payment scenarios where intent needs to be managed over time, such as recurring purchases, cumulative budgets, and post-transaction activities, and it has identified an opportunity to complement cryptographic assurance such as Verifiable Intent with a common coordination point. The draft therefore introduces Intent Services. [2]",
   "v05_scope_boundary_md": "Oliver Manahan told PYMNTS it does not define the business rules for how a product is used. EMVCo may consider Know Your Agent (KYA) and Agentic Transaction Indicators for future publications. [2][16]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "EMV 3-D Secure",
      "spec_or_rfc": "EMV 3-D Secure (3DS)",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "EMV 3-D Secure is an existing EMV technology that EMVCo says this framework may help enhance later, while the draft itself introduces Intent Services as the coordination point for consumer-authorized intent. [2]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "ap2",
      "target_name": "Agent Payments Protocol (AP2)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "AP2 specifies SD-JWTs for securing the Payment and Checkout Mandates, and its checkout flow says the merchant verifies the Checkout with what it created. EMVCo's draft introduces Intent Services as a foundation for potential specification development, and says the framework may help identify later enhancements to EMV 3-D Secure. [2][7]"
     },
     {
      "target_id": "vi",
      "target_name": "Verifiable Intent",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Verifiable Intent defines a layered SD-JWT credential format that binds an agent's commercial actions to a user's stated purchase intent, and Mastercard's March 2026 story introduces that format with Google. EMVCo says its draft complements cryptographic assurance from solutions such as Verifiable Intent with a common coordination point, and the draft's own concept is Intent Services. [2][6][17]"
     },
     {
      "target_id": "tap",
      "target_name": "Trusted Agent Protocol (TAP)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "TAP's specifications require Signature-Input and a message signature on the HTTP message, which Visa describes as HTTP Message Signatures that provide cryptographic assurance of origin. EMVCo's draft introduces Intent Services and describes ecosystem roles and data fields, and Boston Identity's review says the draft prescribes no protocol. [2][3][8]"
     },
     {
      "target_id": "ucp",
      "target_name": "Universal Commerce Protocol (UCP)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "UCP's overview says platforms fetch the business profile from /.well-known/ucp, and that services and payment handlers declare a schema where their transport or handler defines it. EMVCo's draft is a card-based framework that introduces Intent Services for consumer-authorized intent before, during, and after a transaction. [2][18]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "ap2-checkout-mandate",
     "target_name": "AP2 Checkout Mandate",
     "relation_label": "Complements",
     "delta": "The EMV Agentic Payments draft proposes Intent Services and defines no message syntax, while the checkout mandate is the concrete Checkout Mandate object and Checkout Receipt inside AP2.",
     "item_md": "**[AP2 Checkout Mandate](/protocols/ap2-checkout-mandate/)** (Complements) — The EMV Agentic Payments draft proposes Intent Services and defines no message syntax, while the checkout mandate is the concrete Checkout Mandate object and Checkout Receipt inside AP2."
    },
    {
     "item_md": "**[Pay protocols](/category/pay/)** — Category index for `pay` standards."
    }
   ],
   "v05_compiled_md": "---\nid: emv-agentic-payments\ntitle: \"EMV® Agentic Payments – Framework for Specifications\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: pay\nform: document-format\nwire_archetype: payments_onchain\nspec_url: https://www.emvco.com/resources/emv-agentic-payments-framework-for-specifications-v1-0-draft-comment-period-ends-30-sept-2026/\nlast_checked: 2026-10-31\n---\n\n# EMV® Agentic Payments – Framework for Specifications\n\n**Category:** [Pay](/category/pay/) (`pay`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-10-31\n\n> *This page is about EMVCo's draft EMV® Agentic Payments – Framework for Specifications for card-based agentic payments, which introduces Intent Services so participants can register, reference, retrieve, and manage consumer-authorized intent. It is not Visa's [Trusted Agent Protocol (TAP)](/protocols/tap/), whose specifications put Signature-Input and a message signature on the HTTP message, or Visa Intelligent Commerce Connect, which Visa calls an on-ramp to agentic commerce. It is not Mastercard Agent Pay, and not [Verifiable Intent (VI)](/protocols/vi/), which Mastercard introduced with Google and which EMVCo says the framework complements. It is not the [Agent Payments Protocol (AP2)](/protocols/ap2/), which secures agent-performed payment transactions and uses SD-JWTs for the Payment and Checkout Mandates. EMVCo may consider Know Your Agent (KYA) capabilities in future publications. [1][2][3][4][5][6][7]*\n\nThe draft EMV Agentic Payments - Framework for Specifications introduces Intent Services, a shared interoperable layer where payment participants register, reference, retrieve, and manage consumer-authorized intent before, during, and after a transaction. [2] The framework provides an overview of ecosystem roles and data fields for registering intent, maintaining lifecycle and state information, and enabling the authorized retrieval of intent-related data. Boston Identity's review says it prescribes no protocol. [2][8] The resource page titles the document `v1.0 DRAFT`, records datePublished 2026-08-30, and says the comment period ends 30-Sept 2026. After Associate review, the draft is available for public review until Wednesday 30 September. [2][9]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Pay](/category/pay/) (`pay`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | EMVCo. A 2025-11-20 announcement says EMVCo is working on how global specifications can support agentic payments. A 2026-04-10 note by Oliver Manahan says an Agentic Payments Task Force has been established. Clinton Allen, in a 1 Sep 2026 EMV Insights article, is Chair of that task force. [10][11][12] |\n| **Governed by** | EMVCo, collectively owned by American Express, Discover, JCB, Mastercard, UnionPay and Visa, and managed by the Board of Managers. Matt Crothers (American Express) chairs that board. Under Associates Programme and Subscriber Programme Policy and Procedures Version 6.1 (1 August 2024), a simple majority of the non-abstaining voting Advisors must approve release of a final draft Work Item. The citation URL filename is EAP-Policy-and-Procedures-Version-5.2.pdf, while the document text says Version 6.1. [13][14][15] |\n| **Track** | Industry body (`industry-body`). EMVCo publishes the draft and has established a dedicated Agentic Payments Task Force. [2][13] |\n| **Status** | v1.0 DRAFT. The resource page says the comment period ends 30-Sept 2026 and records datePublished 2026-08-30. After Associate review, EMVCo opened public review until Wednesday 30 September. PYMNTS reported on October 2, 2026 that public comments closed Sept. 30. The Q3 2026 newsletter, published 2026-10-09, still lists Version 1.0 (Draft) under Available to Public. Boston Identity's review says the draft prescribes no protocol and that nothing in it is a binding requirement. [1][2][8][9][16] |\n| **Version** | Version 1.0 (Draft), titled v1.0 DRAFT on the resource page (datePublished 2026-08-30). The Q3 2026 newsletter, published 2026-10-09, still lists Version 1.0 (Draft). [1][9] |\n| **Schemes** | Card-based agentic payments. EMVCo says the framework may help identify later enhancements to EMV 3-D Secure (3DS), EMV Payment Tokenisation, EMV Secure Remote Commerce (SRC), and the EMV Digital Payment Credential (DPC). [2] |\n| **Message format** | Framework document describing ecosystem roles and data fields for Intent Services. Boston Identity's review of the draft says it prescribes no protocol. [2][8] |\n| **Specification** | [EMV Agentic Payments - Framework for Specifications v1.0 DRAFT: Comment period ends 30-Sept 2026](https://www.emvco.com/resources/emv-agentic-payments-framework-for-specifications-v1-0-draft-comment-period-ends-30-sept-2026/) [9] |\n| **Found at** | [emvco.com resource page](https://www.emvco.com/resources/emv-agentic-payments-framework-for-specifications-v1-0-draft-comment-period-ends-30-sept-2026/) for the v1.0 DRAFT, posted 2026-08-30. [9] |\n| **Licence** | EMVCo website Terms of Use, last updated April 17, 2020, presented on the draft resource page. [9] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nIn certain agentic use-cases, the consumer may instruct an agent to make a purchase within set limits and may not be present when the payment is actually executed. That mix of existing and emerging industry standards and protocols poses a risk of fragmentation. [12] EMVCo has focused on card-based agentic payment scenarios where intent needs to be managed over time, such as recurring purchases, cumulative budgets, and post-transaction activities, and it has identified an opportunity to complement cryptographic assurance such as Verifiable Intent with a common coordination point. The draft therefore introduces Intent Services. [2] Oliver Manahan told PYMNTS it does not define the business rules for how a product is used. EMVCo may consider Know Your Agent (KYA) and Agentic Transaction Indicators for future publications. [2][16]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **EMV 3-D Secure** | `EMV 3-D Secure (3DS)` | Analogous to classic standard | EMV 3-D Secure is an existing EMV technology that EMVCo says this framework may help enhance later, while the draft itself introduces Intent Services as the coordination point for consumer-authorized intent. [2] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Agent Payments Protocol (AP2)](/protocols/ap2/)** | Complements | AP2 specifies SD-JWTs for securing the Payment and Checkout Mandates, and its checkout flow says the merchant verifies the Checkout with what it created. EMVCo's draft introduces Intent Services as a foundation for potential specification development, and says the framework may help identify later enhancements to EMV 3-D Secure. [2][7] |\n| **[Verifiable Intent](/protocols/vi/)** | Complements | Verifiable Intent defines a layered SD-JWT credential format that binds an agent's commercial actions to a user's stated purchase intent, and Mastercard's March 2026 story introduces that format with Google. EMVCo says its draft complements cryptographic assurance from solutions such as Verifiable Intent with a common coordination point, and the draft's own concept is Intent Services. [2][6][17] |\n| **[Trusted Agent Protocol (TAP)](/protocols/tap/)** | Complements | TAP's specifications require Signature-Input and a message signature on the HTTP message, which Visa describes as HTTP Message Signatures that provide cryptographic assurance of origin. EMVCo's draft introduces Intent Services and describes ecosystem roles and data fields, and Boston Identity's review says the draft prescribes no protocol. [2][3][8] |\n| **[Universal Commerce Protocol (UCP)](/protocols/ucp/)** | Complements | UCP's overview says platforms fetch the business profile from /.well-known/ucp, and that services and payment handlers declare a schema where their transport or handler defines it. EMVCo's draft is a card-based framework that introduces Intent Services for consumer-authorized intent before, during, and after a transaction. [2][18] |\n\n---\n\n## See also\n\n- **[AP2 Checkout Mandate](/protocols/ap2-checkout-mandate/)** *(Complements)* — The EMV Agentic Payments draft proposes Intent Services and defines no message syntax, while the checkout mandate is the concrete Checkout Mandate object and Checkout Receipt inside AP2.\n- **Category:** [Pay protocols](/category/pay/)\n\n---\n\n## References\n\n1. EMVCo, *EMVCo Newsletter: Q3 2026* (published 2026-10-09; modified 2026-10-19) — <https://www.emvco.com/news-publications/emvco-newsletter-q3-2026/>\n2. EMVCo, *EMVCo Requests Feedback on Framework for Secure, Interoperable and Scalable Card-Based Agentic Payments* (published 2026-09-01; modified 2026-10-19) — <https://www.emvco.com/news-publications/emvco-requests-feedback-on-framework-for-secure-interoperable-and-scalable-card-based-agentic-payments/>\n3. Visa, *Specifications - Trusted Agent Protocol* (fetched 2026-10-30) — <https://developer.visa.com/docs/trusted-agent-protocol/trusted-agent-protocol-specifications>\n4. Visa, *Visa to enable AI-driven shopping for businesses* (2026-04-08) — <https://corporate.visa.com/en/sites/visa-perspectives/newsroom/visa-intelligent-commerce-connect-ai-shopping-for-businesses.html>\n5. Mastercard, *Mastercard unveils Agent Pay, pioneering agentic payments technology to power commerce in the age of AI* (April 29, 2025) — <https://www.mastercard.com/us/en/news-and-trends/press/2025/april/mastercard-unveils-agent-pay-pioneering-agentic-payments-technology-to-power-commerce-in-the-age-of-ai.html>\n6. Mastercard, *How Verifiable Intent builds trust in agentic AI commerce* (published 2026-03-05; modified 2026-03-05) — <https://www.mastercard.com/global/en/news-and-trends/stories/2026/verifiable-intent.html>\n7. Agent Payments Protocol, *Agentic Payment Protocol (v0.2)* (fetched 2026-10-30) — <https://ap2-protocol.org/ap2/specification/>\n8. Boston Identity, *EMVCo's agent-payment framework is not a spec; its consent proof is FIDO's Verifiable Intent, in AP2's shape* (published 2026-10-09; modified 2026-10-16) — <https://insights.bostonidentity.com/research/emvco-2026-08-27-agentic-payments-framework-v1-draft>\n9. EMVCo, *EMV Agentic Payments - Framework for Specifications v1.0 DRAFT: Comment period ends 30-Sept 2026* (published 2026-08-30; modified 2026-08-31) — <https://www.emvco.com/resources/emv-agentic-payments-framework-for-specifications-v1-0-draft-comment-period-ends-30-sept-2026/>\n10. EMVCo, *EMVCo Working on How Global Specifications Can Support Agentic Payments* (published 2025-11-20; modified 2026-10-19) — <https://www.emvco.com/news-publications/emvco-working-on-how-global-specifications-can-support-agentic-payments/>\n11. Oliver Manahan, EMVCo, *Agentic Payments and Digital Payment Credentials: Highlights from the EMVCo Board of Advisors Meeting* (published 2026-04-10) — <https://www.emvco.com/news-publications/agentic-payments-and-digital-payment-credentials-highlights-from-the-emvco-board-of-advisors-meeting/>\n12. Clinton Allen, EMVCo, *How EMVCo is Working to Enable Secure, Interoperable and Scalable Card-Based Agentic Payments* (published 2026-09-01) — <https://www.emvco.com/news-publications/how-emvco-is-working-to-enable-secure-interoperable-and-scalable-card-based-agentic-payments/>\n13. EMVCo, *Overview of EMVCo* (published 2022-07-14; modified 2026-10-19) — <https://www.emvco.com/about-us/overview-of-emvco/>\n14. EMVCo, *Organisation Structure* (published 2022-07-14; modified 2026-10-19) — <https://www.emvco.com/about-us/organization-structure/>\n15. EMVCo, *EMVCo Associates Programme and Subscriber Programme Policy and Procedures (EAP-Policy-and-Procedures-Version-5.2.pdf; document text Version 6.1)* (1 August 2024) — <https://www.emvco.com/wp-content/uploads/2026/03/EAP-Policy-and-Procedures-Version-5.2.pdf>\n16. PYMNTS, *EMVCo Takes On Proof of Permission for AI Payments* (October 2, 2026) — <https://www.pymnts.com/news/artificial-intelligence/2026/emvco-framework-targets-consumer-intent-agentic-payments/>\n17. Verifiable Intent Working Group, *Overview - Verifiable Intent* (2026) — <https://verifiableintent.dev/spec/>\n18. Universal Commerce Protocol, *Overview - Universal Commerce Protocol (UCP)* (fetched 2026-10-30) — <https://ucp.dev/latest/specification/overview/>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "ID-JAG",
   "adoption": {
    "level": "observed",
    "by": "Okta (Cross App Access / Workforce Identity), Auth0, Ping Identity, Keycloak, WorkOS, Notion, Linear, Figma, and 7 other verified implementations",
    "probe_run": null
   },
   "aliases": [
    "Cross-App Access",
    "Cross App Access",
    "XAA",
    "Identity Assertion Authorization Grant"
   ],
   "analog": "Kerberos constrained delegation, extended to OAuth-federated SaaS: reuse the IdP's existing SSO trust instead of a new per-app consent prompt",
   "collisions": [],
   "discovery": {
    "mechanism": "No dedicated well-known file; advertised via OAuth 2.0 Authorization Server Metadata (RFC 8414) / OpenID Connect Discovery. The IdP Authorization Server lists grant_types_supported including urn:ietf:params:oauth:grant-type:token-exchange and identity_chaining_requested_token_types_supported including urn:ietf:params:oauth:token-type:id-jag; the Resource Authorization Server lists authorization_grant_profiles_supported including urn:ietf:params:oauth:grant-profile:id-jag and grant_types_supported including urn:ietf:params:oauth:grant-type:jwt-bearer",
    "path": "/.well-known/oauth-authorization-server or /.well-known/openid-configuration"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-oauth-identity-assertion-authz-grant/",
     "claim": "Aaron Parecki, Karl McGuinness, and Brian Campbell (IETF Web Authorization Protocol Working Group), *draft-ietf-oauth-identity-assertion-authz-grant — Identity Assertion JWT Authorization Grant (IETF Datatracker)*, fetched 2026-10-30",
     "date": null,
     "quote": "Identity Assertion JWT Authorization Grant draft-ietf-oauth-identity-assertion-authz-grant-04 … Active Internet-Draft (oauth WG) / Authors | | Aaron Parecki, Karl McGuinness, Brian Campbell / Active Internet-Draft (oauth WG) … Replaces | | draft-parecki-oauth-identity-assertion-authz-grant … Internet Engineering Task Force (IETF) … WG state | | WG Document / Intended RFC status | | (None) / Identity Assertion JWT Authorization Grant draft-ietf-oauth-identity-assertion-authz-grant-04 / Active Internet-Draft (oauth WG) … Intended RFC status | | (None) … WG state | | WG Document … IESG state | | I-D Exists",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://www.ietf.org/archive/id/draft-ietf-oauth-identity-assertion-authz-grant-06.txt",
     "claim": "A. Parecki (Okta), K. McGuinness (Independent), and B. Campbell (Ping Identity), *Identity Assertion JWT Authorization Grant (draft-ietf-oauth-identity-assertion-authz-grant-06)*, draft-06, 31 October 2026; expires 4 May 2027",
     "date": null,
     "quote": "This pattern is informally referred to as Cross-App Access (XAA). / draft-ietf-oauth-identity-assertion-authz-grant-06 ... This specification provides a mechanism for an application to use an identity assertion to obtain an access token for a third-party API by coordinating through an identity provider that the downstream Resource Authorization Server already trusts for single sign-on (SSO) ... The Identity Assertion JWT Authorization Grant (ID-JAG) / Client uses the Identity Assertion or a previously issued Refresh Token from the IdP to request an Identity Assertion JWT Authorization Grant for the Resource Authorization Server from the IdP Authorization Server ... Client exchanges the Identity Assertion JWT Authorization Grant for an Access Token at the Resource Authorization Server's token endpoint ... The value urn:ietf:params:oauth:token-type:id-jag indicates that an Identity Assertion JWT Authorization Grant is being requested. ... grant_type: REQUIRED - urn:ietf:params:oauth:grant-type:jwt-bearer, or urn:ietf:params:oauth:grant-type:jwt-dpop ([I-D.parecki-oauth-jwt-dpop-grant]) when the ID-JAG is bound to a DPoP key ... Validate the JWT typ is oauth-id-jag+jwt / Expires: 4 May 2027 ... 31 October 2026 ... draft-ietf-oauth-identity-assertion-authz-grant-06 ... This Internet-Draft will expire on 4 May 2027. / Aaron Parecki Okta Email: [email redacted] Karl McGuinness Independent Email: [email redacted] Brian Campbell Ping Identity / Web Authorization Protocol / Intended status: Standards Track ... draft-ietf-oauth-identity-assertion-authz-grant-06 / Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). / Validate the JWT typ is oauth-id-jag+jwt / The value urn:ietf:params:oauth:token-type:id-jag indicates that an Identity Assertion JWT Authorization Grant is being requested. / grant_type=urn:ietf:params:oauth:grant-type:token-exchange &requested_token_type=urn:ietf:params:oauth:token-type:id-jag / For an OpenID Connect ID Token: urn:ietf:params:oauth:token-type:id_token, for a SAML 2.0 Assertion: urn:ietf:params:oauth:token-type:saml2, and for a Refresh Token (when supported): / &subject_token_type=urn:ietf:params:oauth:token-type:refresh_token / grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer / the IdP Authorization Server SHOULD include the following value in identity_chaining_requested_token_types_supported: … urn:ietf:params:oauth:token-type:id-jag / urn:ietf:params:oauth:grant-profile:id-jag … MUST also include urn:ietf:params:oauth:grant-type:jwt-bearer in grant_types_supported. / GET /.well-known/openid-configuration … GET /.well-known/oauth-authorization-server / OAuth 2.0 Protected Resource Metadata per [RFC9728] … GET /.well-known/oauth-protected-resource / 11. IANA Considerations 11.1. Media Types This section registers oauth-id-jag+jwt, a new media type [RFC2046] in the \"Media Types\" registry / 11.2. OAuth URI Registration This section registers urn:ietf:params:oauth:token-type:id-jag in the \"OAuth URI\" subregistry … This section registers urn:ietf:params:oauth:grant-profile:id-jag in the \"OAuth URI\" subregistry / 11.3. OAuth Authorization Server Metadata Registration … Metadata Name: authorization_grant_profiles_supported … Metadata Name: id_jag_signing_alg_values_supported … 11.4. OAuth Dynamic Client Registration Metadata Registration … 11.5. JSON Web Token Claims Registration … Claim Name: resource … Claim Name: aud_tenant … 11.6. Security Event Identifier Format Registration This section registers the saml-nameid Subject Identifier Format / Identity Assertion JWT Authorization Grant draft-ietf-oauth-identity-assertion-authz-grant-06 / Source for this draft and an issue tracker can be found at https://github.com/oauth-wg/oauth-identity-assertion-authz-grant. / Status information for this document may be found at https://datatracker.ietf.org/doc/ draft-ietf-oauth-identity-assertion-authz-grant/. / Copyright (c) 2026 IETF Trust and the persons identified as the document authors. / This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents / Code Components extracted from this document must include Revised BSD License text / When one application wants to access a user's data at another application, it will start an interactive OAuth flow [RFC6749] to obtain an access token for the application on behalf of the user. This OAuth flow enables a direct app-to-app connection between the two apps, and is not visible to the IdP used to log in to each app. / The Identity Assertion JWT Authorization Grant (ID-JAG) is a profile of the JWT Authorization Grant [RFC7523] that grants a client delegated access to a resource, typically in another trust domain, on behalf of a user without a direct user-approval step at the authorization server. ... It replaces the need for the client to obtain an authorization code from the Resource Authorization Server to delegate access to the client, and instead uses the IdP Authorization Server that is trusted by the Resource Authorization Server for SSO and subject resolution to delegate access to the client. / The Resource Authorization Server still applies local policy to decide whether to honor the grant, whether to narrow or reject the requested access, and what access token to issue. ... Inclusion of a profile identifier in authorization_grant_profiles_supported indicates only that the Resource Authorization Server implements the processing rules for that profile. / using OAuth 2.0 Token Exchange (RFC 8693) / JWT Profile for OAuth 2.0 Authorization Grants (RFC 7523) / A Resource Authorization Server that includes urn:ietf:params:oauth:grant-profile:id-jag in authorization_grant_profiles_supported for this specification MUST also include urn:ietf:params:oauth:grant-type:jwt-bearer in grant_types_supported. / Protected Resource Metadata per [RFC9728] … GET /.well-known/oauth-protected-resource … authorization_grant_profiles_supported / \"typ\": \"oauth-id-jag+jwt\" … grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer / draft-ietf-oauth-identity-assertion-authz-grant-06 / obtain an access token for a third-party API by coordinating through an identity provider that the downstream Resource Authorization Server already trusts for single sign-on (SSO) / Expires: 4 May 2027 ... 31 October 2026 ... draft-ietf-oauth-identity-assertion-authz-grant-06 / 31 October 2026 ... draft-ietf-oauth-identity-assertion-authz-grant-06 / 11. IANA Considerations 11.1. Media Types This section registers oauth-id-jag+jwt, a new media type / 11.2. OAuth URI Registration This section registers urn:ietf:params:oauth:token-type:id-jag ... This section registers urn:ietf:params:oauth:grant-profile:id-jag / 11.3. OAuth Authorization Server Metadata Registration ... Metadata Name: authorization_grant_profiles_supported ... Metadata Name: id_jag_signing_alg_values_supported",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://modelcontextprotocol.io/extensions/auth/enterprise-managed-authorization",
     "claim": "Model Context Protocol, *Enterprise-Managed Authorization*, extension overview",
     "date": null,
     "quote": "The Enterprise-Managed Authorization extension (io.modelcontextprotocol/enterprise-managed-authorization) enables organizations to control MCP server access centrally / io.modelcontextprotocol/enterprise-managed-authorization / The MCP Client requests a special type of token from the enterprise IdP called an Identity Assertion JWT Authorization Grant, or ID-JAG. / Extensions are opt-in and never active by default.",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://raw.githubusercontent.com/modelcontextprotocol/ext-auth/main/specification/stable/enterprise-managed-authorization/2026-07-28/enterprise-managed-authorization.mdx",
     "claim": "Model Context Protocol, *Enterprise-Managed Authorization*, protocol revision 2026-07-28",
     "date": null,
     "quote": "This document defines an application of the \"Identity Assertion JWT Authorization Grant\" for use within enterprise deployments of the Model Context Protocol (MCP). / Protocol Revision: 2026-07-28",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-oauth-identity-chaining/",
     "claim": "Arndt Schwenkschuster, Pieter Kasselman, Kelley Burgin, Michael J. Jenkins, Brian Campbell, and Aaron Parecki, *draft-ietf-oauth-identity-chaining — OAuth Identity and Authorization Chaining Across Domains (IETF Datatracker)*, draft-17; last updated 2026-08-21 (latest revision 2026-07-19)",
     "date": null,
     "quote": "OAuth Identity and Authorization Chaining Across Domains draft-ietf-oauth-identity-chaining-17 … Intended RFC status | | Proposed Standard … IESG state | | RFC Ed Queue",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-oauth-identity-assertion-authz-grant/doc.json",
     "claim": "IETF Datatracker, *IETF Datatracker document JSON metadata for draft-ietf-oauth-identity-assertion-authz-grant*, rev 06; published 2026-10-31; expires 2027-05-04",
     "date": null,
     "quote": "\"name\": \"draft-ietf-oauth-identity-assertion-authz-grant\", \"rev\": \"06\", \"pages\": 80, \"time\": \"2026-10-31 00:32:39\" ... \"acronym\": \"oauth\" ... \"expires\": \"2027-05-04 00:32:39\" ... \"state\": \"Active\" ... \"rev\": \"04\", \"published\": \"2026-05-21T22:18:28.960118+00:00\" ... \"rev\": \"05\", \"published\": \"2026-10-30T21:24:06.002911+00:00\" ... \"rev\": \"06\", \"published\": \"2026-10-31T00:32:39.878473+00:00\" ... \"iesg_state\": \"I-D Exists\" / \"intended_std_level\": null / \"rev\": \"06\" ... \"state\": \"Active\" ... \"iesg_state\": \"I-D Exists\" / \"rev\": \"06\", \"pages\": 80, \"time\": \"2026-10-31 00:32:39\" ... \"expires\": \"2027-05-04 00:32:39\" ... \"rev\": \"00\", \"published\": \"2025-09-08T21:11:46.753195+00:00\" ... \"rev\": \"04\", \"published\": \"2026-05-21T22:18:28.960118+00:00\" ... \"rev\": \"05\", \"published\": \"2026-10-30T21:24:06.002911+00:00\" ... \"rev\": \"06\", \"published\": \"2026-10-31T00:32:39.878473+00:00\" / \"rev\": \"06\", \"pages\": 80, \"time\": \"2026-10-31 00:32:39\" ... \"expires\": \"2027-05-04 00:32:39\"",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://datatracker.ietf.org/api/v1/doc/newrevisiondocevent/?doc__name=draft-ietf-oauth-identity-assertion-authz-grant&limit=20",
     "claim": "IETF Datatracker, *New-revision events for draft-ietf-oauth-identity-assertion-authz-grant*, rev 00 on 2025-09-08 through rev 05 on 2026-10-30",
     "date": null,
     "quote": "draft-ietf-oauth-identity-assertion-authz-grant-04.txt ... 2026-05-21T22:18:28Z ... draft-ietf-oauth-identity-assertion-authz-grant-05.txt ... 2026-10-30T21:24:06Z / 00 2025-09-08T21:11:46Z",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://datatracker.ietf.org/api/v1/doc/newrevisiondocevent/?doc__name=draft-parecki-oauth-identity-assertion-authz-grant&limit=20",
     "claim": "IETF Datatracker, *New-revision events for draft-parecki-oauth-identity-assertion-authz-grant*, rev 00 on 2024-03-02 through rev 05 on 2025-07-02",
     "date": null,
     "quote": "00 2024-03-02T01:23:02Z",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://datatracker.ietf.org/api/v1/doc/document/draft-ietf-oauth-identity-assertion-authz-grant/?format=json",
     "claim": "IETF Datatracker, *IETF Datatracker document record for draft-ietf-oauth-identity-assertion-authz-grant*, rev 06; expires 2027-05-04",
     "date": null,
     "quote": "\"rev\": \"06\", \"rfc\": null, \"rfc_number\": null",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://www.iana.org/assignments/oauth-parameters",
     "claim": "IANA, *OAuth Parameters*, created 2012-07-27; last updated 2026-08-24",
     "date": null,
     "quote": "OAuth Parameters Created 2012-07-27 Last Updated 2026-08-24 … identity_chaining_requested_token_types_supported JSON array containing a list of Token Type Identifiers supported as a requested_token_type in an Identity and Authorization Chaining Token Exchange / Last Updated 2026-08-24 / identity_chaining_requested_token_types_supported",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://www.rfc-editor.org/rfc/rfc8414.html",
     "claim": "M. Jones (Microsoft), N. Sakimura (NRI), and J. Bradley (Yubico), *OAuth 2.0 Authorization Server Metadata*, RFC 8414, June 2018",
     "date": null,
     "quote": "OAuth 2.0 Authorization Server Metadata … grant_types_supported OPTIONAL. JSON array containing a list of the OAuth 2.0 grant type values that this authorization server supports. … \"/.well-known/oauth-authorization-server\"",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://www.rfc-editor.org/rfc/rfc9728.html",
     "claim": "M.B. Jones (Self-Issued Consulting), P. Hunt (Independent Identity, Inc.), and A. Parecki (Okta), *OAuth 2.0 Protected Resource Metadata*, RFC 9728, April 2025",
     "date": null,
     "quote": "OAuth 2.0 Protected Resource Metadata … /.well-known/oauth-protected-resource",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://www.ietf.org/archive/id/draft-ietf-oauth-client-id-metadata-document-03.txt",
     "claim": "Aaron Parecki (Okta) and Emelia Smith, *OAuth Client ID Metadata Document (draft-ietf-oauth-client-id-metadata-document-03)*, 2 November 2026; expires 6 May 2027",
     "date": null,
     "quote": "identify itself to authorization servers, without prior dynamic client registration … MUST use the https URL scheme",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://raw.githubusercontent.com/workos/auth.md/main/README.md",
     "claim": "WorkOS, *auth.md*, README on main",
     "date": null,
     "quote": "an agent provider that mints identity assertions (ID-JAGs) … returns a service-signed identity_assertion. The agent then exchanges that assertion at POST /oauth2/token (RFC 7523 JWT-bearer grant) / \"assertion_types_supported\": [ \"urn:ietf:params:oauth:token-type:id-jag\" ] / an agent provider that mints identity assertions (ID-JAGs) / sample agent IdP that mints ID-JAGs",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://datatracker.ietf.org/doc/draft-carleton-workload-authz-grant/",
     "claim": "Paul Carleton, Nick Steele, Aaron Parecki, Arndt Schwenkschuster, and Brian Campbell, *draft-carleton-workload-authz-grant — Workload Authorization Grant (IETF Datatracker)*, fetched 2026-10-30",
     "date": null,
     "quote": "a workload hosted on a platform … This document covers workloads acting on their own behalf. Access on behalf of a user or other principal is out of scope, though the grant is intended to compose with delegation mechanisms … grant_type=jwt-bearer",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://www.ietf.org/archive/id/draft-mcguinness-oauth-id-continuation-assertion-02.txt",
     "claim": "K. McGuinness (Independent) and A. Parecki (Okta), *Identity Continuation Assertion for OAuth 2.0 Token Exchange (draft-mcguinness-oauth-id-continuation-assertion-02)*, draft-02, 9 September 2026; expires 13 March 2027",
     "date": null,
     "quote": "Identity Assertion JWT Authorization Grant (ID-JAG) for another service when it lacks a suitable credential, including when the user is no longer present. / presents the assertion to the IdP as the subject_token of a continuation exchange … issues an ID-JAG",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://www.okta.com/en-gb/newsroom/press-releases/okta-brings-first-class-identity-to-ai-agents-with-agent-sso/",
     "claim": "Okta, *Okta brings first-class identity to AI agents with Agent SSO*, 2026-08-24",
     "date": "2026-08-24",
     "quote": "SAN FRANCISCO, August 24, 2026 / today announced the general availability of Agent SSO, bringing the open Cross App Access standard into the identity product used by more than 20,000 customers. / Cross App Access extends OAuth and is formally incorporated as the official Enterprise-Managed Authorization extension for the Model Context Protocol.",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://blog.modelcontextprotocol.io/posts/enterprise-managed-auth/",
     "claim": "Paul Carleton (Model Context Protocol Blog), *Enterprise-Managed Authorization: Zero-touch OAuth for MCP*, published 2026-06-18; modified 2026-10-30",
     "date": null,
     "quote": "Okta is the first supported identity provider. / using Okta's Cross App Access (XAA). / Asana, Atlassian, Canva, Figma, Granola, Linear and Supabase now support EMA, with Slack and more actively adding support.",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://www.okta.com/newsroom/press-releases/okta-announces-cross-app-access-partners/",
     "claim": "Okta, *Okta advances the industry standard for secure AI agent connections with expanding Cross App Access ecosystem*, 2026-06-23",
     "date": "2026-06-23",
     "quote": "live customer beta with Anthropic / 25+ early adopters include Anthropic, Aquera, Archestra.AI, Asana, Atlassian, Canva, Cloudflare, Cursor, Datadog, Docker, Figma, Glean, Granola, Keycard, Keycloak, Linear, MintMCP, Scalekit, Serval, Slack, Stytch by Twilio, Supabase, VS Code, WorkOS, Zoom, and Zuplo.",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://auth0.com/changelog",
     "claim": "Auth0 by Okta, *Auth0 Changelog*, Cross-App Access requesting app entry 2026-08-31",
     "date": null,
     "quote": "August 31, 2026 added Cross-App Access Requesting App now in Early Access / Auth0 now supports acting as a requesting application in Cross-App Access flows in Early Access.",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://auth0.com/blog/xaa-protocol-auth0-ai-agents/",
     "claim": "David Lozano (Auth0), *Adopting the Cross App Access Protocol in Auth0*, published 2026-08-06",
     "date": null,
     "quote": "\"datePublished\":\"2026-08-06\" / This allows you to expose your APIs and MCP servers to trusted external agents safely, seamlessly and with zero code changes to your application layer. / native support is anticipated to be available by August 31, 2026 through Token Vault.",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://docs.pingidentity.com/pingfederate/13.1/administrators_reference_guide/pf_configuring_refresh_token_to_idjag_exchange.html",
     "claim": "Ping Identity, *Configuring a refresh token-to-ID-JAG token exchange*, PingFederate Server 13.1.4; page datePublished 2026-10-30",
     "date": null,
     "quote": "Configuring a refresh token-to-ID-JAG token exchange / Version 13.1.4 (Latest) / Issued ID-JAG tokens use the typ header value oauth-id-jag+jwt.",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://www.keycloak.org/securing-apps/identity-assertion-jwt-authorization-grant",
     "claim": "Keycloak, *Identity Assertion JWT Authorization Grant*, guide based on draft-01",
     "date": null,
     "quote": "This feature is experimental and may introduce breaking changes in future versions of Keycloak. / Do not use this feature in production environments. / This guide is based on draft-ietf-oauth-identity-assertion-authz-grant-01. / Implemented (Receiver Side): Keycloak can currently act as the Receiver (Domain B), successfully accepting an ID-JAG Identity Assertion from an external Issuer and granting a local access token. / Not Yet Implemented (Issuer Side): Native, out-of-the-box support for Keycloak to act as the Issuer (generating the specific ID-JAG Identity Assertion on demand) is not yet fully implemented.",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://github.com/workos/auth.md",
     "claim": "WorkOS, *auth.md*, repository created 2026-05-20; pushed 2026-09-24",
     "date": null,
     "quote": null,
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://zuplo.com/.well-known/oauth-authorization-server",
     "claim": "Zuplo, *OAuth authorization server metadata*, issuer https://auth.zuplo.com/",
     "date": null,
     "quote": "\"issuer\":\"https://auth.zuplo.com/\" / \"authorization_grant_profiles_supported\":[\"urn:ietf:params:oauth:grant-profile:id-jag\"] / urn:ietf:params:oauth:grant-type:jwt-bearer / urn:ietf:params:oauth:grant-type:token-exchange / \"client_id_metadata_document_supported\":true",
     "ref": 25
    },
    {
     "label": "[26]",
     "url": "https://xaa.dev/",
     "claim": "Okta Developer, *Open Sandbox to Learn and Debug Cross App Access*, xaa.dev sandbox",
     "date": null,
     "quote": "Open Sandbox to Learn and Debug Cross App Access / Cross App Access (XAA) implements OAuth Identity Assertion Authorization Grant (ID-JAG). / Watch a real IDP issue an ID-JAG, exchange it for an access token, and call a protected API.",
     "ref": 26
    },
    {
     "label": "[27]",
     "url": "https://github.com/oktadev/okta-cross-app-access-mcp/",
     "claim": "Okta, *oktadev/okta-cross-app-access-mcp*, 2026-11-06",
     "date": "2026-11-06",
     "quote": "oktadev/okta-cross-app-access-mcp / A proof-of-concept demonstrating how a Model Context Protocol (MCP) can leverage the Identity Assertion Authorization Grant specification / enable secure and interoperable authorization of MCP clients within enterprise environments, using existing",
     "ref": 27
    },
    {
     "label": "[28]",
     "url": "https://mcp.notion.com/.well-known/oauth-authorization-server",
     "claim": "Notion, *OAuth authorization server metadata*, issuer https://mcp.notion.com",
     "date": null,
     "quote": "\"issuer\":\"https://mcp.notion.com\" / \"authorization_grant_profiles_supported\":[\"urn:ietf:params:oauth:grant-profile:id-jag\"] / urn:ietf:params:oauth:grant-type:jwt-bearer / ema_issuer:manage / \"client_id_metadata_document_supported\":true",
     "ref": 28
    },
    {
     "label": "[29]",
     "url": "https://mcp.linear.app/.well-known/oauth-authorization-server",
     "claim": "Linear, *OAuth authorization server metadata*, issuer https://mcp.linear.app",
     "date": null,
     "quote": "\"issuer\":\"https://mcp.linear.app\" / \"authorization_grant_profiles_supported\":[\"urn:ietf:params:oauth:grant-profile:id-jag\"] / urn:ietf:params:oauth:grant-type:jwt-bearer / \"client_id_metadata_document_supported\":true",
     "ref": 29
    },
    {
     "label": "[30]",
     "url": "https://mcp.figma.com/.well-known/oauth-authorization-server",
     "claim": "Figma, *OAuth authorization server metadata*, issuer https://api.figma.com",
     "date": null,
     "quote": "\"issuer\":\"https://api.figma.com\" / \"authorization_grant_profiles_supported\":[\"urn:ietf:params:oauth:grant-profile:id-jag\"] / urn:ietf:params:oauth:grant-type:jwt-bearer / \"registration_endpoint\":\"https://api.figma.com/v1/oauth/mcp/register\"",
     "ref": 30
    },
    {
     "label": "[31]",
     "url": "https://lovable.dev/.well-known/oauth-authorization-server",
     "claim": "Lovable, *OAuth authorization server metadata*, issuer https://lovable.dev/oauth",
     "date": null,
     "quote": "\"issuer\":\"https://lovable.dev/oauth\" / \"authorization_grant_profiles_supported\":[\"urn:ietf:params:oauth:grant-profile:id-jag\"] / urn:ietf:params:oauth:grant-type:jwt-bearer / \"client_id_metadata_document_supported\":true",
     "ref": 31
    },
    {
     "label": "[32]",
     "url": "https://www.atlassian.com/blog/development/enterprise-managed-authorization-rovo-mcp-xaa-id-jag",
     "claim": "Atlassian, *How We Brought Enterprise-Managed Authorization to Rovo MCP with XAA and ID-JAG*, 2026-06-29",
     "date": "2026-06-29",
     "quote": "We recently added support for Enterprise-Managed Authorization in Atlassian Rovo MCP server using Cross-App Access (XAA) and the Identity Assertion JWT Authorization Grant (ID-JAG). / This feature is currently in private beta. / an admin can centrally authorize MCP access for approved clients like Claude",
     "ref": 32
    },
    {
     "label": "[33]",
     "url": "https://claude.com/resources/articles/enterprise-managed-auth",
     "claim": "Anthropic, *Centrally manage authorization for MCP connectors*, updated 2026-08-24",
     "date": null,
     "quote": "Enterprise-managed authorization is now generally available and supports Datadog, Notion, and Slack with Exa, Miro, and Zoom coming soon in addition to the existing support for Asana, Atlassian, Canva, Figma, Granola, Linear, and Supabase. (August 24, 2026) / Enterprise-managed auth is the first implementation of the Enterprise-Managed Authorization extension to the Model Context Protocol. / starting with Okta",
     "ref": 33
    },
    {
     "label": "[34]",
     "url": "https://modelcontextprotocol.io/seps/990-enable-enterprise-idp-policy-controls-during-mcp-o",
     "claim": "Aaron Parecki (Model Context Protocol), *SEP-990: Enable enterprise IdP policy controls during MCP OAuth flows*, created 2025-06-04; status Final",
     "date": null,
     "quote": "Status Final Type Standards Track Created 2025-06-04",
     "ref": 34
    }
   ],
   "form": "endpoint",
   "governance": "IETF OAuth Working Group (Web Authorization Protocol). WG adoption: the WG -00 was posted \"rev\": \"00\", \"time\": \"2025-09-08T21:11:46Z\" (UTC; 2025-09-09 00:11 EEST); \"Replaces draft-parecki-oauth-identity-assertion-authz-grant\"",
   "group": null,
   "history": [
    {
     "date": "2026-09-07",
     "note": "created and verified against datatracker.ietf.org/doc/draft-ietf-oauth-identity-assertion-authz-grant/ (rev -04, 2026-05-21), xaa.dev, and vendor implementation announcements from Okta, Auth0 and Descope"
    },
    {
     "date": "2026-10-23",
     "note": "draft-ietf-oauth-identity-assertion-authz-grant-04 expires on 2026-11-22"
    },
    {
     "date": "2026-10-29",
     "note": "Primary-source verification across 34 primary sources"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "identity-assertion-authz-grant",
   "implementation": "multi-implementation",
   "last_verified": "2026-11-08",
   "name": "Identity Assertion JWT Authorization Grant (ID-JAG)",
   "native_status": "Active Internet-Draft. \"WG state WG Document\"; \"IESG state I-D Exists\". Not an RFC; the draft's IANA requests are not yet in the OAuth Parameters registry (scanned live)",
   "origin": {
    "date": "2024-03",
    "org": "Aaron Parecki (Okta); individual submission draft-parecki-oauth-identity-assertion-authz-grant, later co-authored with Karl McGuinness (Independent) and Brian Campbell (Ping Identity) and adopted by the IETF OAuth Working Group"
   },
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "working-group",
   "probe": {
    "method": "GET",
    "on_absent": "The Resource Authorization Server does not advertise support for ID-JAG/XAA; an app cannot obtain access to this API via identity-assertion cross-app access without out-of-band, vendor-specific configuration. Absence is not conclusive proof of non-support, since the spec allows a server to omit the discovery signal and instead disclose acceptance only via a protected, per-client mechanism",
    "parse": "RFC 8414 JSON metadata document; presence of \"urn:ietf:params:oauth:grant-profile:id-jag\" in authorization_grant_profiles_supported (and \"urn:ietf:params:oauth:grant-type:jwt-bearer\" in grant_types_supported, which this profile requires alongside it) indicates the Resource Authorization Server implements the Identity Assertion JWT Authorization Grant / Cross-App Access profile",
    "path": "https://{resource_authorization_server}/.well-known/oauth-authorization-server"
   },
   "question": "How can an app or AI agent, already SSO-federated to a user's enterprise identity provider, obtain scoped access to a third-party API or MCP server without a fresh consent screen at that third party?",
   "scope": "general",
   "spec_url": "https://datatracker.ietf.org/doc/draft-ietf-oauth-identity-assertion-authz-grant/",
   "step": "permit",
   "summary_md": "**Identity Assertion JWT Authorization Grant** (`ID-JAG`), `draft-ietf-oauth-identity-assertion-authz-grant-06`, lets an application use an identity assertion to obtain a third-party API access token by coordinating through an identity provider the resource authorization server already trusts for SSO. The client requests an ID-JAG from the IdP by Token Exchange, with `requested_token_type` `urn:ietf:params:oauth:token-type:id-jag`. The JWT `typ` header MUST be `oauth-id-jag+jwt`. The client then presents that grant at the Resource Authorization Server, where `grant_type` is `urn:ietf:params:oauth:grant-type:jwt-bearer` (or `urn:ietf:params:oauth:grant-type:jwt-dpop` when bound to a DPoP key). Current specification text is `draft-ietf-oauth-identity-assertion-authz-grant-06` (`31 October 2026`, `2026-10-31`), expiring `4 May 2027` (`2027-05-04`). Datatracker records it as an Active Internet-Draft (`oauth` WG) with IESG state `I-D Exists`, following `draft-ietf-oauth-identity-assertion-authz-grant-04` (`2026-05-21`) and `draft-ietf-oauth-identity-assertion-authz-grant-05` (`2026-10-30`).",
   "track": "ietf",
   "version": {
    "date": "2026-10-31",
    "label": "draft-ietf-oauth-identity-assertion-authz-grant-06 (replaces the individual draft-parecki-oauth-identity-assertion-authz-grant)"
   },
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-ietf-oauth-identity-assertion-authz-grant"
    }
   ],
   "use_cases": [
    "delegate-user-authority",
    "prove-agent-identity",
    "expose-tools-to-agents"
   ],
   "audience": [
    "platform",
    "agent-builder"
   ],
   "pairs_with": [
    "oauth-metadata-for-agents",
    "oauth-cimd",
    "auth-md",
    "workload-authz-grant",
    "oauth-id-continuation"
   ],
   "prerequisites": [
    "oauth-metadata-for-agents"
   ],
   "hatnote_md": "This page is about the IETF Web Authorization Protocol Working Group Internet-Draft draft-ietf-oauth-identity-assertion-authz-grant. The draft abstract says this pattern is informally referred to as Cross-App Access (XAA). The Model Context Protocol Enterprise-Managed Authorization extension (io.modelcontextprotocol/enterprise-managed-authorization) is a separate document that applies the Identity Assertion JWT Authorization Grant inside MCP. OAuth Identity and Authorization Chaining Across Domains (draft-ietf-oauth-identity-chaining-17) is a separate IETF draft, with intended RFC status Proposed Standard and IESG state RFC Ed Queue.",
   "ietf_tracker": {
    "doc": "draft-ietf-oauth-identity-assertion-authz-grant",
    "rev": "06",
    "state": "active",
    "stream": "IETF",
    "group_type": "WG",
    "wg": "oauth",
    "replaced_by": null,
    "posted_utc": "2026-10-31",
    "expires_utc": "2027-05-04",
    "as_of": "2026-11-08",
    "source": "https://datatracker.ietf.org/doc/draft-ietf-oauth-identity-assertion-authz-grant/",
    "source_label": "per IETF Datatracker"
   },
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-08",
   "v05_hatnote_html_md": "This page is about the IETF Web Authorization Protocol Working Group Internet-Draft draft-ietf-oauth-identity-assertion-authz-grant. The draft abstract says this pattern is informally referred to as Cross-App Access (XAA). The Model Context Protocol Enterprise-Managed Authorization extension (io.modelcontextprotocol/enterprise-managed-authorization) is a separate document that applies the Identity Assertion JWT Authorization Grant inside MCP. OAuth Identity and Authorization Chaining Across Domains (draft-ietf-oauth-identity-chaining-17) is a separate IETF draft, with intended RFC status Proposed Standard and IESG state RFC Ed Queue. [1][2][3][4][5]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Identity Assertion JWT Authorization Grant** (`ID-JAG`), `draft-ietf-oauth-identity-assertion-authz-grant-06`, lets an application use an identity assertion to obtain a third-party API access token by coordinating through an identity provider the resource authorization server already trusts for SSO. [2] The client requests an ID-JAG from the IdP by Token Exchange, with `requested_token_type` `urn:ietf:params:oauth:token-type:id-jag`. The JWT `typ` header MUST be `oauth-id-jag+jwt`. The client then presents that grant at the Resource Authorization Server, where `grant_type` is `urn:ietf:params:oauth:grant-type:jwt-bearer` (or `urn:ietf:params:oauth:grant-type:jwt-dpop` when bound to a DPoP key). [2] Current specification text is `draft-ietf-oauth-identity-assertion-authz-grant-06` (`31 October 2026`, `2026-10-31`), expiring `4 May 2027` (`2027-05-04`). Datatracker records it as an Active Internet-Draft (`oauth` WG) with IESG state `I-D Exists`, following `draft-ietf-oauth-identity-assertion-authz-grant-04` (`2026-05-21`) and `draft-ietf-oauth-identity-assertion-authz-grant-05` (`2026-10-30`). [2][6][7]",
   "v05_identity_sentence_md": "**Identity Assertion JWT Authorization Grant** (`ID-JAG`), `draft-ietf-oauth-identity-assertion-authz-grant-06`, lets an application use an identity assertion to obtain a third-party API access token by coordinating through an identity provider the resource authorization server already trusts for SSO. [2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Permit](/category/permit/) (`permit`)"
    },
    {
     "label": "Form",
     "value_md": "Endpoint (`endpoint`)"
    },
    {
     "label": "Originated by",
     "value_md": "Aaron Parecki (Okta), Karl McGuinness (Independent), and Brian Campbell (Ping Identity). Individual draft `draft-parecki-oauth-identity-assertion-authz-grant` revision 00 was posted 2024-03-02. [1][2][8]"
    },
    {
     "label": "Governed by",
     "value_md": "IETF Web Authorization Protocol (`oauth`) Working Group. The RFC stream is the Internet Engineering Task Force (IETF). The working-group draft replaces `draft-parecki-oauth-identity-assertion-authz-grant`. Working-group revision 00 was posted 2025-09-08. [1][2][7]"
    },
    {
     "label": "Track",
     "value_md": "IETF Standards Track Internet-Draft (`oauth` WG; `-06` header specifies `Intended status: Standards Track`) [1][2][6]"
    },
    {
     "label": "IETF tracker",
     "value_md": "[draft-ietf-oauth-identity-assertion-authz-grant](https://datatracker.ietf.org/doc/draft-ietf-oauth-identity-assertion-authz-grant/) [1]"
    },
    {
     "label": "Status",
     "value_md": "Active Internet-Draft (`oauth` WG Document, revision `06`; no RFC published yet). [1][6][9]"
    },
    {
     "label": "Version",
     "value_md": "The current specification text is `draft-ietf-oauth-identity-assertion-authz-grant-06` (`31 October 2026`, `2026-10-31`), which expires on `4 May 2027` (`2027-05-04`). Datatracker revision history records WG `rev` `00` on `2025-09-08`, `rev` `04` on `2026-05-21`, `rev` `05` on `2026-10-30`, and `rev` `06` on `2026-10-31`. [2][6]"
    },
    {
     "label": "Token format",
     "value_md": "A JWT. The `typ` header MUST be `oauth-id-jag+jwt`. The token-exchange request asks for `urn:ietf:params:oauth:token-type:id-jag`. [2]"
    },
    {
     "label": "Message format",
     "value_md": "At the identity provider, the client uses token exchange (`urn:ietf:params:oauth:grant-type:token-exchange`). `subject_token_type` is `urn:ietf:params:oauth:token-type:id_token` for an OpenID Connect ID token, `urn:ietf:params:oauth:token-type:saml2` for a SAML 2.0 assertion, or `urn:ietf:params:oauth:token-type:refresh_token` when a refresh token is accepted. At the resource authorization server, the client presents the JWT with `grant_type` `urn:ietf:params:oauth:grant-type:jwt-bearer`. [2]"
    },
    {
     "label": "Discovery",
     "value_md": "An identity provider that issues this grant via token exchange SHOULD list `urn:ietf:params:oauth:token-type:id-jag` in `identity_chaining_requested_token_types_supported`. A resource authorization server SHOULD list `urn:ietf:params:oauth:grant-profile:id-jag` in `authorization_grant_profiles_supported`, and if it does it MUST also list `urn:ietf:params:oauth:grant-type:jwt-bearer` in `grant_types_supported`. The draft's examples use `/.well-known/openid-configuration` and `/.well-known/oauth-authorization-server`. An agent discovers an authorization server from protected-resource metadata at `/.well-known/oauth-protected-resource`. [2]"
    },
    {
     "label": "IANA registration",
     "value_md": "Section 11 of `draft-ietf-oauth-identity-assertion-authz-grant-06` requests registration of media type `oauth-id-jag+jwt` (Section 11.1), OAuth URIs `urn:ietf:params:oauth:token-type:id-jag` and `urn:ietf:params:oauth:grant-profile:id-jag` (Section 11.2), OAuth Authorization Server Metadata parameters `authorization_grant_profiles_supported` and `id_jag_signing_alg_values_supported` (Section 11.3), OAuth Dynamic Client Registration Metadata parameter `authorization_grant_profiles_supported` (Section 11.4), JWT claims `resource` and `aud_tenant` (Section 11.5), and Security Event Identifier Format `saml-nameid` (Section 11.6). The IANA OAuth Parameters page (last updated 2026-08-24) registers `identity_chaining_requested_token_types_supported` for an Identity and Authorization Chaining token exchange. [2][10]"
    },
    {
     "label": "Specification",
     "value_md": "[Identity Assertion JWT Authorization Grant](https://www.ietf.org/archive/id/draft-ietf-oauth-identity-assertion-authz-grant-06.txt) (`draft-ietf-oauth-identity-assertion-authz-grant-06`) [2]"
    },
    {
     "label": "Found at",
     "value_md": "[oauth-wg/oauth-identity-assertion-authz-grant](https://github.com/oauth-wg/oauth-identity-assertion-authz-grant) (source and issue tracker). The draft also points at the editor's HTML on drafts.oauth.net and the Datatracker status page. [2]"
    },
    {
     "label": "Licence",
     "value_md": "Copyright (c) 2026 IETF Trust and the persons identified as the document authors. The document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents. Code components extracted from the document must include Revised BSD License text. [2]"
    }
   ],
   "v05_problem_md": "When one application wants access to a user's data at another application, it starts an interactive OAuth flow to obtain an access token. That flow is a direct app-to-app connection and is not visible to the IdP used to log in to each app. [2] The ID-JAG grants a client delegated access to a resource, typically in another trust domain, on behalf of a user without a direct user-approval step at the authorization server. It replaces the need for the client to obtain an authorization code from the Resource Authorization Server and instead uses the IdP Authorization Server trusted for SSO and subject resolution. [2] The Resource Authorization Server still applies local policy to decide whether to honor the grant, whether to narrow or reject the requested access, and what access token to issue. `authorization_grant_profiles_supported` indicates only that the server implements that profile's processing rules. [2]",
   "v05_mechanism_delta_md": "The ID-JAG grants a client delegated access to a resource, typically in another trust domain, on behalf of a user without a direct user-approval step at the authorization server. It replaces the need for the client to obtain an authorization code from the Resource Authorization Server and instead uses the IdP Authorization Server trusted for SSO and subject resolution. [2]",
   "v05_scope_boundary_md": "The Resource Authorization Server still applies local policy to decide whether to honor the grant, whether to narrow or reject the requested access, and what access token to issue. `authorization_grant_profiles_supported` indicates only that the server implements that profile's processing rules. [2]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "OAuth 2.0 Token Exchange",
      "spec_or_rfc": "RFC 8693",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "RFC 8693 is the token-exchange grant the client uses at the identity provider to obtain an ID-JAG. The ID-JAG JWT header typ MUST be oauth-id-jag+jwt. [2]"
     },
     {
      "name": "JWT Profile for OAuth 2.0 Authorization Grants",
      "spec_or_rfc": "RFC 7523",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "RFC 7523 is the JWT bearer grant the client uses to present the ID-JAG to the resource authorization server. A resource authorization server that advertises the ID-JAG profile MUST also advertise urn:ietf:params:oauth:grant-type:jwt-bearer. [2]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "oauth-metadata-for-agents",
      "target_name": "OAuth Protected Resource and Authorization Server Metadata (as used for agent authorization)",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "RFC 8414 publishes authorization-server metadata, including grant_types_supported, at /.well-known/oauth-authorization-server. RFC 9728 publishes protected-resource metadata at /.well-known/oauth-protected-resource, and the ID-JAG draft uses that metadata so a client can discover an authorization server. The ID-JAG profile itself is advertised in authorization_grant_profiles_supported. [2][11][12]"
     },
     {
      "target_id": "oauth-cimd",
      "target_name": "OAuth Client ID Metadata Document",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "CIMD identifies an OAuth client by an HTTPS Client Identifier URL that points at a client metadata document, without prior dynamic client registration. An ID-JAG is a separate oauth-id-jag+jwt assertion the client presents with grant type urn:ietf:params:oauth:grant-type:jwt-bearer. [2][13]"
     },
     {
      "target_id": "auth-md",
      "target_name": "auth.md",
      "relation_type": "depended_on_by",
      "relation_label": "Depended on by",
      "delta_md": "auth.md is a reference implementation in which an agent provider mints identity assertions (ID-JAGs) and registration returns a service-signed identity_assertion. The agent exchanges that assertion at POST /oauth2/token under the RFC 7523 JWT-bearer grant. Its discovery document lists assertion_types_supported including urn:ietf:params:oauth:token-type:id-jag. [2][14]"
     },
     {
      "target_id": "workload-authz-grant",
      "target_name": "Workload Authorization Grant (WAG)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "The Workload Authorization Grant covers a workload hosted on a platform and acting on its own behalf, presented with grant_type=jwt-bearer, and that draft says access on behalf of a user is out of scope. An ID-JAG is an identity-provider assertion for a third-party API on a user's single sign-on trust. [2][15]"
     },
     {
      "target_id": "oauth-id-continuation",
      "target_name": "Identity Continuation Assertion for OAuth 2.0 Token Exchange",
      "relation_type": "depended_on_by",
      "relation_label": "Depended on by",
      "delta_md": "The Identity Continuation Assertion is presented to the identity provider as the subject_token of a continuation exchange, including when the user is no longer present, and the identity provider issues an ID-JAG. [2][16]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (15 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).",
    "side_a": {
     "visible": true,
     "heading": "Identity providers & assertion issuers",
     "col4_header": "Boundary & format",
     "note_md": null,
     "rows": [
      {
       "actor": "Okta (Cross App Access / Workforce Identity)",
       "role": "Identity provider / ID-JAG issuer",
       "status": "Supported",
       "status_display": "Supported · as of 2026-08-24",
       "col4_md": "On August 24, 2026, Okta announced the general availability of Agent SSO, bringing the open Cross App Access (XAA / ID-JAG) standard into production as the first named identity provider for Anthropic's generally available Enterprise-Managed Authorization.",
       "source_md": "[Agent SSO general availability](https://www.okta.com/en-gb/newsroom/press-releases/okta-brings-first-class-identity-to-ai-agents-with-agent-sso/) [17] · [Cross App Access partners](https://www.okta.com/newsroom/press-releases/okta-announces-cross-app-access-partners/) [19] · [Enterprise-Managed Authorization announcement](https://blog.modelcontextprotocol.io/posts/enterprise-managed-auth/) [18]"
      },
      {
       "actor": "Auth0",
       "role": "Cross App Access identity platform",
       "status": "Partial",
       "status_display": "Partial · as of 2026-10-30",
       "col4_md": "The changelog entry dated August 31, 2026 says Cross-App Access Requesting App is now in Early Access, and that Auth0 supports acting as a requesting application in Cross-App Access flows in Early Access. The blog dated 2026-08-06 says resource apps can expose APIs and MCP servers to trusted external agents with zero code changes, and that native requesting-app support was anticipated by August 31, 2026 through Token Vault.",
       "source_md": "[Auth0 changelog](https://auth0.com/changelog) [20] · [Adopting Cross App Access in Auth0](https://auth0.com/blog/xaa-protocol-auth0-ai-agents/) [21]"
      },
      {
       "actor": "Ping Identity",
       "role": "ID-JAG issuer (PingFederate)",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-30",
       "col4_md": "PingFederate Server Version 13.1.4 (Latest) documents a refresh token-to-ID-JAG token exchange. Issued ID-JAG tokens use the typ header value `oauth-id-jag+jwt`.",
       "source_md": "[Refresh token-to-ID-JAG exchange](https://docs.pingidentity.com/pingfederate/13.1/administrators_reference_guide/pf_configuring_refresh_token_to_idjag_exchange.html) [22]"
      },
      {
       "actor": "Keycloak",
       "role": "Experimental ID-JAG receiver; issuer not yet",
       "status": "Experimental",
       "status_display": "Experimental · as of 2026-10-30",
       "col4_md": "The guide is based on `draft-ietf-oauth-identity-assertion-authz-grant-01` and says this feature is experimental and may introduce breaking changes. Do not use this feature in production environments. Implemented (Receiver Side): Keycloak can accept an ID-JAG Identity Assertion from an external issuer and grant a local access token. Not Yet Implemented (Issuer Side): native generation of the ID-JAG on demand is not yet fully implemented.",
       "source_md": "[Identity Assertion JWT Authorization Grant](https://www.keycloak.org/securing-apps/identity-assertion-jwt-authorization-grant) [23]"
      },
      {
       "actor": "WorkOS",
       "role": "Sample ID-JAG issuer (auth.md)",
       "status": "Experimental",
       "status_display": "Experimental · as of 2026-10-30",
       "col4_md": "The `workos/auth.md` README describes a reference implementation with an agent provider that mints identity assertions (ID-JAGs) and a sample agent IdP that mints ID-JAGs. Okta's partner announcement lists WorkOS among 25+ early adopters of Cross App Access.",
       "source_md": "[auth.md README](https://raw.githubusercontent.com/workos/auth.md/main/README.md) [14] · [workos/auth.md](https://github.com/workos/auth.md) [24] · [Cross App Access partners](https://www.okta.com/newsroom/press-releases/okta-announces-cross-app-access-partners/) [19]"
      },
      {
       "actor": "Zuplo",
       "role": "Authorization server (auth.zuplo.com)",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "`https://zuplo.com/.well-known/oauth-authorization-server` returned HTTP 200. The issuer is `https://auth.zuplo.com/`. `authorization_grant_profiles_supported` lists `urn:ietf:params:oauth:grant-profile:id-jag`. `grant_types_supported` includes `urn:ietf:params:oauth:grant-type:jwt-bearer` and `urn:ietf:params:oauth:grant-type:token-exchange`. `client_id_metadata_document_supported` is true.",
       "source_md": "[Zuplo authorization server metadata](https://zuplo.com/.well-known/oauth-authorization-server) [25]"
      },
      {
       "actor": "xaa.dev",
       "role": "Cross App Access sandbox",
       "status": "Experimental",
       "status_display": "Experimental · as of 2026-10-30",
       "col4_md": "Open sandbox to learn and debug Cross App Access. The page says Cross App Access (XAA) implements OAuth Identity Assertion Authorization Grant (ID-JAG), and that a real identity provider can issue an ID-JAG, exchange it for an access token, and call a protected API.",
       "source_md": "[xaa.dev sandbox](https://xaa.dev/) [26]"
      },
      {
       "actor": "Okta Cross-App Access MCP",
       "role": "MCP client proof of concept",
       "status": "Development",
       "status_display": "Development · checked 2026-11-06",
       "col4_md": "Proof of concept showing how a Model Context Protocol (MCP) client can leverage the Identity Assertion Authorization Grant specification for secure and interoperable authorization of MCP clients within enterprise environments.",
       "source_md": "[oktadev/okta-cross-app-access-mcp](https://github.com/oktadev/okta-cross-app-access-mcp/) [27]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Relying resource servers, MCP servers & enterprise apps",
     "col4_header": "Boundary & format",
     "note_md": null,
     "rows": [
      {
       "actor": "Notion",
       "role": "MCP authorization server",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "`https://mcp.notion.com/.well-known/oauth-authorization-server` returned HTTP 200. Issuer `https://mcp.notion.com`. `authorization_grant_profiles_supported` lists `urn:ietf:params:oauth:grant-profile:id-jag`. `grant_types_supported` includes `urn:ietf:params:oauth:grant-type:jwt-bearer`. Scopes include `ema_issuer:manage`. `client_id_metadata_document_supported` is true.",
       "source_md": "[Notion MCP authorization server metadata](https://mcp.notion.com/.well-known/oauth-authorization-server) [28]"
      },
      {
       "actor": "Linear",
       "role": "MCP authorization server",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "`https://mcp.linear.app/.well-known/oauth-authorization-server` returned HTTP 200. Issuer `https://mcp.linear.app`. `authorization_grant_profiles_supported` lists `urn:ietf:params:oauth:grant-profile:id-jag`. `grant_types_supported` includes `urn:ietf:params:oauth:grant-type:jwt-bearer`. `client_id_metadata_document_supported` is true.",
       "source_md": "[Linear MCP authorization server metadata](https://mcp.linear.app/.well-known/oauth-authorization-server) [29]"
      },
      {
       "actor": "Figma",
       "role": "MCP authorization server",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "`https://mcp.figma.com/.well-known/oauth-authorization-server` returned HTTP 200. Issuer `https://api.figma.com`. `authorization_grant_profiles_supported` lists `urn:ietf:params:oauth:grant-profile:id-jag`. `grant_types_supported` includes `urn:ietf:params:oauth:grant-type:jwt-bearer`. The document also publishes a `registration_endpoint`.",
       "source_md": "[Figma MCP authorization server metadata](https://mcp.figma.com/.well-known/oauth-authorization-server) [30]"
      },
      {
       "actor": "Lovable",
       "role": "OAuth authorization server",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "`https://lovable.dev/.well-known/oauth-authorization-server` returned HTTP 200. Issuer `https://lovable.dev/oauth`. `authorization_grant_profiles_supported` lists `urn:ietf:params:oauth:grant-profile:id-jag`. `grant_types_supported` includes `urn:ietf:params:oauth:grant-type:jwt-bearer`. `client_id_metadata_document_supported` is true.",
       "source_md": "[Lovable authorization server metadata](https://lovable.dev/.well-known/oauth-authorization-server) [31]"
      },
      {
       "actor": "Atlassian",
       "role": "Rovo MCP resource server",
       "status": "Partial",
       "status_display": "Partial · as of 2026-10-30",
       "col4_md": "Atlassian says it added Enterprise-Managed Authorization in the Atlassian Rovo MCP server using Cross-App Access (XAA) and the Identity Assertion JWT Authorization Grant (ID-JAG). This feature is currently in private beta. An admin can centrally authorize MCP access for approved clients like Claude.",
       "source_md": "[Rovo MCP, XAA, and ID-JAG](https://www.atlassian.com/blog/development/enterprise-managed-authorization-rovo-mcp-xaa-id-jag) [32]"
      },
      {
       "actor": "Claude / Model Context Protocol SEP-990",
       "role": "MCP client and Enterprise-Managed Authorization profile",
       "status": "Partial",
       "status_display": "Partial · as of 2026-08-24",
       "col4_md": "Anthropic says enterprise-managed authorization is now generally available (August 24, 2026) and that enterprise-managed auth is the first implementation of the Enterprise-Managed Authorization extension to the Model Context Protocol. Admins provision MCP connectors through their identity provider, starting with Okta. SEP-990 is Status Final, Type Standards Track, Created 2025-06-04. The extension identifier is `io.modelcontextprotocol/enterprise-managed-authorization`. Protocol revision `2026-07-28`. The MCP client requests an Identity Assertion JWT Authorization Grant, or ID-JAG. Extensions are opt-in and never active by default.",
       "source_md": "[Claude enterprise-managed authorization](https://claude.com/resources/articles/enterprise-managed-auth) [33] · [SEP-990](https://modelcontextprotocol.io/seps/990-enable-enterprise-idp-policy-controls-during-mcp-o) [34] · [Enterprise-Managed Authorization](https://modelcontextprotocol.io/extensions/auth/enterprise-managed-authorization) [3] · [EMA specification 2026-07-28](https://raw.githubusercontent.com/modelcontextprotocol/ext-auth/main/specification/stable/enterprise-managed-authorization/2026-07-28/enterprise-managed-authorization.mdx) [4]"
      },
      {
       "actor": "Asana, Canva, Datadog, Granola, Slack & Supabase (Anthropic EMA partner cohort)",
       "role": "Enterprise MCP connectors",
       "status": "Listed",
       "status_display": "Listed · as of 2026-08-24",
       "col4_md": "Anthropic's August 24, 2026 Enterprise-Managed Authorization announcement states that enterprise-managed authorization supports Datadog, Notion, and Slack alongside existing support for Asana, Atlassian, Box, Canva, Figma, Granola, Linear, Lovable, and Supabase (with Notion, Linear, Figma, Lovable, and Atlassian documented separately in rows above, while Box is named only on the protocol landing page).",
       "source_md": "[Claude enterprise-managed authorization](https://claude.com/resources/articles/enterprise-managed-auth) [33] · [Enterprise-Managed Authorization announcement](https://blog.modelcontextprotocol.io/posts/enterprise-managed-auth/) [18]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [
     {
      "label": "ID-JAG draft revision",
      "as_of": "2026-10-31",
      "value_md": "draft-ietf-oauth-identity-assertion-authz-grant-06 (published 31 October 2026 / 2026-10-31; expires 4 May 2027 / 2027-05-04). [2][6]"
     },
     {
      "label": "IANA OAuth Parameters coverage of ID-JAG",
      "as_of": "2026-10-31",
      "value_md": "The IANA OAuth Parameters registry (Last Updated 2026-08-24) registers `identity_chaining_requested_token_types_supported` for identity chaining, and contains neither `id-jag` nor `grant-profile`. Current revision `draft-ietf-oauth-identity-assertion-authz-grant-06` (31 October 2026) Section 11.1 requests registration of media type `oauth-id-jag+jwt`, Section 11.2 requests registration of `urn:ietf:params:oauth:token-type:id-jag` and `urn:ietf:params:oauth:grant-profile:id-jag`, and Section 11.3 requests registration of `authorization_grant_profiles_supported` and `id_jag_signing_alg_values_supported`. [2][10]"
     },
     {
      "label": "Named Cross App Access early adopters",
      "as_of": "2026-10-30",
      "value_md": "25+ early adopters (self-reported in Okta's Cross App Access partner press release): Anthropic, Aquera, Archestra.AI, Asana, Atlassian, Canva, Cloudflare, Cursor, Datadog, Docker, Figma, Glean, Granola, Keycard, Keycloak, Linear, MintMCP, Scalekit, Serval, Slack, Stytch by Twilio, Supabase, VS Code, WorkOS, Zoom, and Zuplo. [19]"
     },
     {
      "label": "SEP-990 status",
      "as_of": "2026-07-28",
      "value_md": "SEP-990 is Status Final, Type Standards Track, Created 2025-06-04. The Enterprise-Managed Authorization specification protocol revision is 2026-07-28. The extension identifier is io.modelcontextprotocol/enterprise-managed-authorization, and extensions are opt-in and never active by default. [3][4][34]"
     }
    ],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "personal-agent-protocol",
     "target_name": "Personal Agent Protocol",
     "relation_label": "Peer alternative",
     "delta": "An ID-JAG is an oauth-id-jag+jwt assertion presented with the jwt-bearer grant, while Draft 0.3 signs a poppy-session+jwt in the Poppy-Session header after discovery at /.well-known/poppy.json.",
     "item_md": "**[Personal Agent Protocol](/protocols/personal-agent-protocol/)** (Peer alternative) — An ID-JAG is an oauth-id-jag+jwt assertion presented with the jwt-bearer grant, while Draft 0.3 signs a poppy-session+jwt in the Poppy-Session header after discovery at /.well-known/poppy.json."
    },
    {
     "target_id": "aauth-hardt",
     "target_name": "AAuth (Hardt)",
     "relation_label": "Peer alternative",
     "delta": "ID-JAG exchanges an oauth-id-jag+jwt assertion for an access token, while AAuth presents no bearer token and signs the resource request with RFC 9421.",
     "item_md": "**[AAuth (Hardt)](/protocols/aauth-hardt/)** (Peer alternative) — ID-JAG exchanges an oauth-id-jag+jwt assertion for an access token, while AAuth presents no bearer token and signs the resource request with RFC 9421."
    },
    {
     "target_id": "aauth",
     "target_name": "Agent Authorization Grant",
     "relation_label": "Peer alternative",
     "delta": "ID-JAG exchanges an oauth-id-jag+jwt assertion minted by an identity provider, while Rosenberg's grant posts a resource-signed scope_challenge JWT to agent_authorization_endpoint.",
     "item_md": "**[Agent Authorization Grant](/protocols/aauth/)** (Peer alternative) — ID-JAG exchanges an oauth-id-jag+jwt assertion minted by an identity provider, while Rosenberg's grant posts a resource-signed scope_challenge JWT to agent_authorization_endpoint."
    },
    {
     "target_id": "daap",
     "target_name": "OAuth Profile for Delegated AI Agent Authorization",
     "relation_label": "Peer alternative",
     "delta": "An ID-JAG is an oauth-id-jag+jwt from RFC 8693 token exchange presented with the jwt-bearer grant, while DAAP uses that same token-exchange hop to narrow a sender-constrained agent token and defines no new claims.",
     "item_md": "**[OAuth Profile for Delegated AI Agent Authorization](/protocols/daap/)** (Peer alternative) — An ID-JAG is an oauth-id-jag+jwt from RFC 8693 token exchange presented with the jwt-bearer grant, while DAAP uses that same token-exchange hop to narrow a sender-constrained agent token and defines no new claims."
    },
    {
     "target_id": "aap",
     "target_name": "Agent Authorization Profile",
     "relation_label": "Peer alternative",
     "delta": "An ID-JAG is a single oauth-id-jag+jwt assertion, while this profile adds structured JWT claims for the delegation chain and whether human oversight is required on the call.",
     "item_md": "**[Agent Authorization Profile](/protocols/aap/)** (Peer alternative) — An ID-JAG is a single oauth-id-jag+jwt assertion, while this profile adds structured JWT claims for the delegation chain and whether human oversight is required on the call."
    },
    {
     "target_id": "aiagent-auth",
     "target_name": "AI Agent Authentication and Authorization",
     "relation_label": "Complements",
     "delta": "The Identity Assertion JWT Authorization Grant requires the JWT header typ to be oauth-id-jag+jwt, and its token-exchange example sets grant_type to urn:ietf:params:oauth:grant-type:token-exchange and requested_token_type to urn:ietf:params:oauth:token-type:id-jag. draft-klrc-aiagent-auth names the Identity Assertion JWT Authorization Grant as a derived specification for obtaining authorization, and draft-ietf-wimse-aims replaces draft-klrc-aiagent-auth.",
     "item_md": "**[AI Agent Authentication and Authorization](/protocols/aiagent-auth/)** (Complements) — The Identity Assertion JWT Authorization Grant requires the JWT header typ to be oauth-id-jag+jwt, and its token-exchange example sets grant_type to urn:ietf:params:oauth:grant-type:token-exchange and requested_token_type to urn:ietf:params:oauth:token-type:id-jag. draft-klrc-aiagent-auth names the Identity Assertion JWT Authorization Grant as a derived specification for obtaining authorization, and draft-ietf-wimse-aims replaces draft-klrc-aiagent-auth."
    },
    {
     "target_id": "oauth-agent-delegation",
     "target_name": "An Attenuated Delegation Profile for Automated Agents",
     "relation_label": "Complements",
     "delta": "An ID-JAG is the oauth-id-jag+jwt a client exchanges at a token endpoint with the jwt-bearer grant, and Agent-Delegation is the r, w, or x header chain on the later RFC 9421 request.",
     "item_md": "**[An Attenuated Delegation Profile for Automated Agents](/protocols/oauth-agent-delegation/)** (Complements) — An ID-JAG is the oauth-id-jag+jwt a client exchanges at a token endpoint with the jwt-bearer grant, and Agent-Delegation is the r, w, or x header chain on the later RFC 9421 request."
    },
    {
     "item_md": "**[Permit protocols](/category/permit/)** — Category index for `permit` standards."
    }
   ],
   "v05_compiled_md": "---\nid: identity-assertion-authz-grant\ntitle: \"Identity Assertion JWT Authorization Grant (ID-JAG)\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: permit\nform: endpoint\nwire_archetype: identity_auth_crypto\nspec_url: https://www.ietf.org/archive/id/draft-ietf-oauth-identity-assertion-authz-grant-06.txt\nlast_checked: 2026-11-08\n---\n\n# Identity Assertion JWT Authorization Grant (ID-JAG)\n\n**Category:** [Permit](/category/permit/) (`permit`) · **Form:** Endpoint (`endpoint`) · **Last checked:** 2026-11-08\n\n> *This page is about the IETF Web Authorization Protocol Working Group Internet-Draft draft-ietf-oauth-identity-assertion-authz-grant. The draft abstract says this pattern is informally referred to as Cross-App Access (XAA). The Model Context Protocol Enterprise-Managed Authorization extension (io.modelcontextprotocol/enterprise-managed-authorization) is a separate document that applies the Identity Assertion JWT Authorization Grant inside MCP. OAuth Identity and Authorization Chaining Across Domains (draft-ietf-oauth-identity-chaining-17) is a separate IETF draft, with intended RFC status Proposed Standard and IESG state RFC Ed Queue. [1][2][3][4][5]*\n\n**Identity Assertion JWT Authorization Grant** (`ID-JAG`), `draft-ietf-oauth-identity-assertion-authz-grant-06`, lets an application use an identity assertion to obtain a third-party API access token by coordinating through an identity provider the resource authorization server already trusts for SSO. [2] The client requests an ID-JAG from the IdP by Token Exchange, with `requested_token_type` `urn:ietf:params:oauth:token-type:id-jag`. The JWT `typ` header MUST be `oauth-id-jag+jwt`. The client then presents that grant at the Resource Authorization Server, where `grant_type` is `urn:ietf:params:oauth:grant-type:jwt-bearer` (or `urn:ietf:params:oauth:grant-type:jwt-dpop` when bound to a DPoP key). [2] Current specification text is `draft-ietf-oauth-identity-assertion-authz-grant-06` (`31 October 2026`, `2026-10-31`), expiring `4 May 2027` (`2027-05-04`). Datatracker records it as an Active Internet-Draft (`oauth` WG) with IESG state `I-D Exists`, following `draft-ietf-oauth-identity-assertion-authz-grant-04` (`2026-05-21`) and `draft-ietf-oauth-identity-assertion-authz-grant-05` (`2026-10-30`). [2][6][7]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Permit](/category/permit/) (`permit`) |\n| **Form** | Endpoint (`endpoint`) |\n| **Originated by** | Aaron Parecki (Okta), Karl McGuinness (Independent), and Brian Campbell (Ping Identity). Individual draft `draft-parecki-oauth-identity-assertion-authz-grant` revision 00 was posted 2024-03-02. [1][2][8] |\n| **Governed by** | IETF Web Authorization Protocol (`oauth`) Working Group. The RFC stream is the Internet Engineering Task Force (IETF). The working-group draft replaces `draft-parecki-oauth-identity-assertion-authz-grant`. Working-group revision 00 was posted 2025-09-08. [1][2][7] |\n| **Track** | IETF Standards Track Internet-Draft (`oauth` WG; `-06` header specifies `Intended status: Standards Track`) [1][2][6] |\n| **IETF tracker** | [draft-ietf-oauth-identity-assertion-authz-grant](https://datatracker.ietf.org/doc/draft-ietf-oauth-identity-assertion-authz-grant/) [1] |\n| **Status** | Active Internet-Draft (`oauth` WG Document, revision `06`; no RFC published yet). [1][6][9] |\n| **Version** | The current specification text is `draft-ietf-oauth-identity-assertion-authz-grant-06` (`31 October 2026`, `2026-10-31`), which expires on `4 May 2027` (`2027-05-04`). Datatracker revision history records WG `rev` `00` on `2025-09-08`, `rev` `04` on `2026-05-21`, `rev` `05` on `2026-10-30`, and `rev` `06` on `2026-10-31`. [2][6] |\n| **Token format** | A JWT. The `typ` header MUST be `oauth-id-jag+jwt`. The token-exchange request asks for `urn:ietf:params:oauth:token-type:id-jag`. [2] |\n| **Message format** | At the identity provider, the client uses token exchange (`urn:ietf:params:oauth:grant-type:token-exchange`). `subject_token_type` is `urn:ietf:params:oauth:token-type:id_token` for an OpenID Connect ID token, `urn:ietf:params:oauth:token-type:saml2` for a SAML 2.0 assertion, or `urn:ietf:params:oauth:token-type:refresh_token` when a refresh token is accepted. At the resource authorization server, the client presents the JWT with `grant_type` `urn:ietf:params:oauth:grant-type:jwt-bearer`. [2] |\n| **Discovery** | An identity provider that issues this grant via token exchange SHOULD list `urn:ietf:params:oauth:token-type:id-jag` in `identity_chaining_requested_token_types_supported`. A resource authorization server SHOULD list `urn:ietf:params:oauth:grant-profile:id-jag` in `authorization_grant_profiles_supported`, and if it does it MUST also list `urn:ietf:params:oauth:grant-type:jwt-bearer` in `grant_types_supported`. The draft's examples use `/.well-known/openid-configuration` and `/.well-known/oauth-authorization-server`. An agent discovers an authorization server from protected-resource metadata at `/.well-known/oauth-protected-resource`. [2] |\n| **IANA registration** | Section 11 of `draft-ietf-oauth-identity-assertion-authz-grant-06` requests registration of media type `oauth-id-jag+jwt` (Section 11.1), OAuth URIs `urn:ietf:params:oauth:token-type:id-jag` and `urn:ietf:params:oauth:grant-profile:id-jag` (Section 11.2), OAuth Authorization Server Metadata parameters `authorization_grant_profiles_supported` and `id_jag_signing_alg_values_supported` (Section 11.3), OAuth Dynamic Client Registration Metadata parameter `authorization_grant_profiles_supported` (Section 11.4), JWT claims `resource` and `aud_tenant` (Section 11.5), and Security Event Identifier Format `saml-nameid` (Section 11.6). The IANA OAuth Parameters page (last updated 2026-08-24) registers `identity_chaining_requested_token_types_supported` for an Identity and Authorization Chaining token exchange. [2][10] |\n| **Specification** | [Identity Assertion JWT Authorization Grant](https://www.ietf.org/archive/id/draft-ietf-oauth-identity-assertion-authz-grant-06.txt) (`draft-ietf-oauth-identity-assertion-authz-grant-06`) [2] |\n| **Found at** | [oauth-wg/oauth-identity-assertion-authz-grant](https://github.com/oauth-wg/oauth-identity-assertion-authz-grant) (source and issue tracker). The draft also points at the editor's HTML on drafts.oauth.net and the Datatracker status page. [2] |\n| **Licence** | Copyright (c) 2026 IETF Trust and the persons identified as the document authors. The document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents. Code components extracted from the document must include Revised BSD License text. [2] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [Adoption and ecosystem](#adoption-and-ecosystem)\n4. [See also](#see-also)\n5. [References](#references)\n\n---\n\n## Problem and scope\n\nWhen one application wants access to a user's data at another application, it starts an interactive OAuth flow to obtain an access token. That flow is a direct app-to-app connection and is not visible to the IdP used to log in to each app. [2] The ID-JAG grants a client delegated access to a resource, typically in another trust domain, on behalf of a user without a direct user-approval step at the authorization server. It replaces the need for the client to obtain an authorization code from the Resource Authorization Server and instead uses the IdP Authorization Server trusted for SSO and subject resolution. [2] The Resource Authorization Server still applies local policy to decide whether to honor the grant, whether to narrow or reject the requested access, and what access token to issue. `authorization_grant_profiles_supported` indicates only that the server implements that profile's processing rules. [2]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **OAuth 2.0 Token Exchange** | `RFC 8693` | Profiles classic standard | RFC 8693 is the token-exchange grant the client uses at the identity provider to obtain an ID-JAG. The ID-JAG JWT header typ MUST be oauth-id-jag+jwt. [2] |\n| **JWT Profile for OAuth 2.0 Authorization Grants** | `RFC 7523` | Profiles classic standard | RFC 7523 is the JWT bearer grant the client uses to present the ID-JAG to the resource authorization server. A resource authorization server that advertises the ID-JAG profile MUST also advertise urn:ietf:params:oauth:grant-type:jwt-bearer. [2] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[OAuth Protected Resource and Authorization Server Metadata (as used for agent authorization)](/protocols/oauth-metadata-for-agents/)** | Builds on | RFC 8414 publishes authorization-server metadata, including grant_types_supported, at /.well-known/oauth-authorization-server. RFC 9728 publishes protected-resource metadata at /.well-known/oauth-protected-resource, and the ID-JAG draft uses that metadata so a client can discover an authorization server. The ID-JAG profile itself is advertised in authorization_grant_profiles_supported. [2][11][12] |\n| **[OAuth Client ID Metadata Document](/protocols/oauth-cimd/)** | Complements | CIMD identifies an OAuth client by an HTTPS Client Identifier URL that points at a client metadata document, without prior dynamic client registration. An ID-JAG is a separate oauth-id-jag+jwt assertion the client presents with grant type urn:ietf:params:oauth:grant-type:jwt-bearer. [2][13] |\n| **[auth.md](/protocols/auth-md/)** | Depended on by | auth.md is a reference implementation in which an agent provider mints identity assertions (ID-JAGs) and registration returns a service-signed identity_assertion. The agent exchanges that assertion at POST /oauth2/token under the RFC 7523 JWT-bearer grant. Its discovery document lists assertion_types_supported including urn:ietf:params:oauth:token-type:id-jag. [2][14] |\n| **[Workload Authorization Grant (WAG)](/protocols/workload-authz-grant/)** | Peer alternative | The Workload Authorization Grant covers a workload hosted on a platform and acting on its own behalf, presented with grant_type=jwt-bearer, and that draft says access on behalf of a user is out of scope. An ID-JAG is an identity-provider assertion for a third-party API on a user's single sign-on trust. [2][15] |\n| **[Identity Continuation Assertion for OAuth 2.0 Token Exchange](/protocols/oauth-id-continuation/)** | Depended on by | The Identity Continuation Assertion is presented to the identity provider as the subject_token of a continuation exchange, including when the user is no longer present, and the identity provider issues an ID-JAG. [2][16] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (15 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).*\n\n### Identity providers & assertion issuers\n\n| Actor | Role | Status | Boundary & format | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Okta (Cross App Access / Workforce Identity)** | Identity provider / ID-JAG issuer | Supported · as of 2026-08-24 | On August 24, 2026, Okta announced the general availability of Agent SSO, bringing the open Cross App Access (XAA / ID-JAG) standard into production as the first named identity provider for Anthropic's generally available Enterprise-Managed Authorization. | [Agent SSO general availability](https://www.okta.com/en-gb/newsroom/press-releases/okta-brings-first-class-identity-to-ai-agents-with-agent-sso/) [17] · [Cross App Access partners](https://www.okta.com/newsroom/press-releases/okta-announces-cross-app-access-partners/) [19] · [Enterprise-Managed Authorization announcement](https://blog.modelcontextprotocol.io/posts/enterprise-managed-auth/) [18] |\n| **Auth0** | Cross App Access identity platform | Partial · as of 2026-10-30 | The changelog entry dated August 31, 2026 says Cross-App Access Requesting App is now in Early Access, and that Auth0 supports acting as a requesting application in Cross-App Access flows in Early Access. The blog dated 2026-08-06 says resource apps can expose APIs and MCP servers to trusted external agents with zero code changes, and that native requesting-app support was anticipated by August 31, 2026 through Token Vault. | [Auth0 changelog](https://auth0.com/changelog) [20] · [Adopting Cross App Access in Auth0](https://auth0.com/blog/xaa-protocol-auth0-ai-agents/) [21] |\n| **Ping Identity** | ID-JAG issuer (PingFederate) | Supported · as of 2026-10-30 | PingFederate Server Version 13.1.4 (Latest) documents a refresh token-to-ID-JAG token exchange. Issued ID-JAG tokens use the typ header value `oauth-id-jag+jwt`. | [Refresh token-to-ID-JAG exchange](https://docs.pingidentity.com/pingfederate/13.1/administrators_reference_guide/pf_configuring_refresh_token_to_idjag_exchange.html) [22] |\n| **Keycloak** | Experimental ID-JAG receiver; issuer not yet | Experimental · as of 2026-10-30 | The guide is based on `draft-ietf-oauth-identity-assertion-authz-grant-01` and says this feature is experimental and may introduce breaking changes. Do not use this feature in production environments. Implemented (Receiver Side): Keycloak can accept an ID-JAG Identity Assertion from an external issuer and grant a local access token. Not Yet Implemented (Issuer Side): native generation of the ID-JAG on demand is not yet fully implemented. | [Identity Assertion JWT Authorization Grant](https://www.keycloak.org/securing-apps/identity-assertion-jwt-authorization-grant) [23] |\n| **WorkOS** | Sample ID-JAG issuer (auth.md) | Experimental · as of 2026-10-30 | The `workos/auth.md` README describes a reference implementation with an agent provider that mints identity assertions (ID-JAGs) and a sample agent IdP that mints ID-JAGs. Okta's partner announcement lists WorkOS among 25+ early adopters of Cross App Access. | [auth.md README](https://raw.githubusercontent.com/workos/auth.md/main/README.md) [14] · [workos/auth.md](https://github.com/workos/auth.md) [24] · [Cross App Access partners](https://www.okta.com/newsroom/press-releases/okta-announces-cross-app-access-partners/) [19] |\n| **Zuplo** | Authorization server (auth.zuplo.com) | Live (HTTP 200) · checked 2026-10-30 | `https://zuplo.com/.well-known/oauth-authorization-server` returned HTTP 200. The issuer is `https://auth.zuplo.com/`. `authorization_grant_profiles_supported` lists `urn:ietf:params:oauth:grant-profile:id-jag`. `grant_types_supported` includes `urn:ietf:params:oauth:grant-type:jwt-bearer` and `urn:ietf:params:oauth:grant-type:token-exchange`. `client_id_metadata_document_supported` is true. | [Zuplo authorization server metadata](https://zuplo.com/.well-known/oauth-authorization-server) [25] |\n| **xaa.dev** | Cross App Access sandbox | Experimental · as of 2026-10-30 | Open sandbox to learn and debug Cross App Access. The page says Cross App Access (XAA) implements OAuth Identity Assertion Authorization Grant (ID-JAG), and that a real identity provider can issue an ID-JAG, exchange it for an access token, and call a protected API. | [xaa.dev sandbox](https://xaa.dev/) [26] |\n| **Okta Cross-App Access MCP** | MCP client proof of concept | Development · checked 2026-11-06 | Proof of concept showing how a Model Context Protocol (MCP) client can leverage the Identity Assertion Authorization Grant specification for secure and interoperable authorization of MCP clients within enterprise environments. | [oktadev/okta-cross-app-access-mcp](https://github.com/oktadev/okta-cross-app-access-mcp/) [27] |\n\n### Relying resource servers, MCP servers & enterprise apps\n\n| Actor | Role | Status | Boundary & format | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Notion** | MCP authorization server | Live (HTTP 200) · checked 2026-10-30 | `https://mcp.notion.com/.well-known/oauth-authorization-server` returned HTTP 200. Issuer `https://mcp.notion.com`. `authorization_grant_profiles_supported` lists `urn:ietf:params:oauth:grant-profile:id-jag`. `grant_types_supported` includes `urn:ietf:params:oauth:grant-type:jwt-bearer`. Scopes include `ema_issuer:manage`. `client_id_metadata_document_supported` is true. | [Notion MCP authorization server metadata](https://mcp.notion.com/.well-known/oauth-authorization-server) [28] |\n| **Linear** | MCP authorization server | Live (HTTP 200) · checked 2026-10-30 | `https://mcp.linear.app/.well-known/oauth-authorization-server` returned HTTP 200. Issuer `https://mcp.linear.app`. `authorization_grant_profiles_supported` lists `urn:ietf:params:oauth:grant-profile:id-jag`. `grant_types_supported` includes `urn:ietf:params:oauth:grant-type:jwt-bearer`. `client_id_metadata_document_supported` is true. | [Linear MCP authorization server metadata](https://mcp.linear.app/.well-known/oauth-authorization-server) [29] |\n| **Figma** | MCP authorization server | Live (HTTP 200) · checked 2026-10-30 | `https://mcp.figma.com/.well-known/oauth-authorization-server` returned HTTP 200. Issuer `https://api.figma.com`. `authorization_grant_profiles_supported` lists `urn:ietf:params:oauth:grant-profile:id-jag`. `grant_types_supported` includes `urn:ietf:params:oauth:grant-type:jwt-bearer`. The document also publishes a `registration_endpoint`. | [Figma MCP authorization server metadata](https://mcp.figma.com/.well-known/oauth-authorization-server) [30] |\n| **Lovable** | OAuth authorization server | Live (HTTP 200) · checked 2026-10-30 | `https://lovable.dev/.well-known/oauth-authorization-server` returned HTTP 200. Issuer `https://lovable.dev/oauth`. `authorization_grant_profiles_supported` lists `urn:ietf:params:oauth:grant-profile:id-jag`. `grant_types_supported` includes `urn:ietf:params:oauth:grant-type:jwt-bearer`. `client_id_metadata_document_supported` is true. | [Lovable authorization server metadata](https://lovable.dev/.well-known/oauth-authorization-server) [31] |\n| **Atlassian** | Rovo MCP resource server | Partial · as of 2026-10-30 | Atlassian says it added Enterprise-Managed Authorization in the Atlassian Rovo MCP server using Cross-App Access (XAA) and the Identity Assertion JWT Authorization Grant (ID-JAG). This feature is currently in private beta. An admin can centrally authorize MCP access for approved clients like Claude. | [Rovo MCP, XAA, and ID-JAG](https://www.atlassian.com/blog/development/enterprise-managed-authorization-rovo-mcp-xaa-id-jag) [32] |\n| **Claude / Model Context Protocol SEP-990** | MCP client and Enterprise-Managed Authorization profile | Partial · as of 2026-08-24 | Anthropic says enterprise-managed authorization is now generally available (August 24, 2026) and that enterprise-managed auth is the first implementation of the Enterprise-Managed Authorization extension to the Model Context Protocol. Admins provision MCP connectors through their identity provider, starting with Okta. SEP-990 is Status Final, Type Standards Track, Created 2025-06-04. The extension identifier is `io.modelcontextprotocol/enterprise-managed-authorization`. Protocol revision `2026-07-28`. The MCP client requests an Identity Assertion JWT Authorization Grant, or ID-JAG. Extensions are opt-in and never active by default. | [Claude enterprise-managed authorization](https://claude.com/resources/articles/enterprise-managed-auth) [33] · [SEP-990](https://modelcontextprotocol.io/seps/990-enable-enterprise-idp-policy-controls-during-mcp-o) [34] · [Enterprise-Managed Authorization](https://modelcontextprotocol.io/extensions/auth/enterprise-managed-authorization) [3] · [EMA specification 2026-07-28](https://raw.githubusercontent.com/modelcontextprotocol/ext-auth/main/specification/stable/enterprise-managed-authorization/2026-07-28/enterprise-managed-authorization.mdx) [4] |\n| **Asana, Canva, Datadog, Granola, Slack & Supabase (Anthropic EMA partner cohort)** | Enterprise MCP connectors | Listed · as of 2026-08-24 | Anthropic's August 24, 2026 Enterprise-Managed Authorization announcement states that enterprise-managed authorization supports Datadog, Notion, and Slack alongside existing support for Asana, Atlassian, Box, Canva, Figma, Granola, Linear, Lovable, and Supabase (with Notion, Linear, Figma, Lovable, and Atlassian documented separately in rows above, while Box is named only on the protocol landing page). | [Claude enterprise-managed authorization](https://claude.com/resources/articles/enterprise-managed-auth) [33] · [Enterprise-Managed Authorization announcement](https://blog.modelcontextprotocol.io/posts/enterprise-managed-auth/) [18] |\n\n### Ecosystem censuses\n\n- **ID-JAG draft revision** (*as of 2026-10-31*): draft-ietf-oauth-identity-assertion-authz-grant-06 (published 31 October 2026 / 2026-10-31; expires 4 May 2027 / 2027-05-04). [2][6]\n- **IANA OAuth Parameters coverage of ID-JAG** (*as of 2026-10-31*): The IANA OAuth Parameters registry (Last Updated 2026-08-24) registers `identity_chaining_requested_token_types_supported` for identity chaining, and contains neither `id-jag` nor `grant-profile`. Current revision `draft-ietf-oauth-identity-assertion-authz-grant-06` (31 October 2026) Section 11.1 requests registration of media type `oauth-id-jag+jwt`, Section 11.2 requests registration of `urn:ietf:params:oauth:token-type:id-jag` and `urn:ietf:params:oauth:grant-profile:id-jag`, and Section 11.3 requests registration of `authorization_grant_profiles_supported` and `id_jag_signing_alg_values_supported`. [2][10]\n- **Named Cross App Access early adopters** (*as of 2026-10-30*): 25+ early adopters (self-reported in Okta's Cross App Access partner press release): Anthropic, Aquera, Archestra.AI, Asana, Atlassian, Canva, Cloudflare, Cursor, Datadog, Docker, Figma, Glean, Granola, Keycard, Keycloak, Linear, MintMCP, Scalekit, Serval, Slack, Stytch by Twilio, Supabase, VS Code, WorkOS, Zoom, and Zuplo. [19]\n- **SEP-990 status** (*as of 2026-07-28*): SEP-990 is Status Final, Type Standards Track, Created 2025-06-04. The Enterprise-Managed Authorization specification protocol revision is 2026-07-28. The extension identifier is io.modelcontextprotocol/enterprise-managed-authorization, and extensions are opt-in and never active by default. [3][4][34]\n\n---\n\n## See also\n\n- **[Personal Agent Protocol](/protocols/personal-agent-protocol/)** *(Peer alternative)* — An ID-JAG is an oauth-id-jag+jwt assertion presented with the jwt-bearer grant, while Draft 0.3 signs a poppy-session+jwt in the Poppy-Session header after discovery at /.well-known/poppy.json.\n- **[AAuth (Hardt)](/protocols/aauth-hardt/)** *(Peer alternative)* — ID-JAG exchanges an oauth-id-jag+jwt assertion for an access token, while AAuth presents no bearer token and signs the resource request with RFC 9421.\n- **[Agent Authorization Grant](/protocols/aauth/)** *(Peer alternative)* — ID-JAG exchanges an oauth-id-jag+jwt assertion minted by an identity provider, while Rosenberg's grant posts a resource-signed scope_challenge JWT to agent_authorization_endpoint.\n- **[OAuth Profile for Delegated AI Agent Authorization](/protocols/daap/)** *(Peer alternative)* — An ID-JAG is an oauth-id-jag+jwt from RFC 8693 token exchange presented with the jwt-bearer grant, while DAAP uses that same token-exchange hop to narrow a sender-constrained agent token and defines no new claims.\n- **[Agent Authorization Profile](/protocols/aap/)** *(Peer alternative)* — An ID-JAG is a single oauth-id-jag+jwt assertion, while this profile adds structured JWT claims for the delegation chain and whether human oversight is required on the call.\n- **[AI Agent Authentication and Authorization](/protocols/aiagent-auth/)** *(Complements)* — The Identity Assertion JWT Authorization Grant requires the JWT header typ to be oauth-id-jag+jwt, and its token-exchange example sets grant_type to urn:ietf:params:oauth:grant-type:token-exchange and requested_token_type to urn:ietf:params:oauth:token-type:id-jag. draft-klrc-aiagent-auth names the Identity Assertion JWT Authorization Grant as a derived specification for obtaining authorization, and draft-ietf-wimse-aims replaces draft-klrc-aiagent-auth.\n- **[An Attenuated Delegation Profile for Automated Agents](/protocols/oauth-agent-delegation/)** *(Complements)* — An ID-JAG is the oauth-id-jag+jwt a client exchanges at a token endpoint with the jwt-bearer grant, and Agent-Delegation is the r, w, or x header chain on the later RFC 9421 request.\n- **Category:** [Permit protocols](/category/permit/)\n\n---\n\n## References\n\n1. Aaron Parecki, Karl McGuinness, and Brian Campbell (IETF Web Authorization Protocol Working Group), *draft-ietf-oauth-identity-assertion-authz-grant — Identity Assertion JWT Authorization Grant (IETF Datatracker)* (fetched 2026-10-30) — <https://datatracker.ietf.org/doc/draft-ietf-oauth-identity-assertion-authz-grant/>\n2. A. Parecki (Okta), K. McGuinness (Independent), and B. Campbell (Ping Identity), *Identity Assertion JWT Authorization Grant (draft-ietf-oauth-identity-assertion-authz-grant-06)* (draft-06, 31 October 2026; expires 4 May 2027) — <https://www.ietf.org/archive/id/draft-ietf-oauth-identity-assertion-authz-grant-06.txt>\n3. Model Context Protocol, *Enterprise-Managed Authorization* (extension overview) — <https://modelcontextprotocol.io/extensions/auth/enterprise-managed-authorization>\n4. Model Context Protocol, *Enterprise-Managed Authorization* (protocol revision 2026-07-28) — <https://raw.githubusercontent.com/modelcontextprotocol/ext-auth/main/specification/stable/enterprise-managed-authorization/2026-07-28/enterprise-managed-authorization.mdx>\n5. Arndt Schwenkschuster, Pieter Kasselman, Kelley Burgin, Michael J. Jenkins, Brian Campbell, and Aaron Parecki, *draft-ietf-oauth-identity-chaining — OAuth Identity and Authorization Chaining Across Domains (IETF Datatracker)* (draft-17; last updated 2026-08-21 (latest revision 2026-07-19)) — <https://datatracker.ietf.org/doc/draft-ietf-oauth-identity-chaining/>\n6. IETF Datatracker, *IETF Datatracker document JSON metadata for draft-ietf-oauth-identity-assertion-authz-grant* (rev 06; published 2026-10-31; expires 2027-05-04) — <https://datatracker.ietf.org/doc/draft-ietf-oauth-identity-assertion-authz-grant/doc.json>\n7. IETF Datatracker, *New-revision events for draft-ietf-oauth-identity-assertion-authz-grant* (rev 00 on 2025-09-08 through rev 05 on 2026-10-30) — <https://datatracker.ietf.org/api/v1/doc/newrevisiondocevent/?doc__name=draft-ietf-oauth-identity-assertion-authz-grant&limit=20>\n8. IETF Datatracker, *New-revision events for draft-parecki-oauth-identity-assertion-authz-grant* (rev 00 on 2024-03-02 through rev 05 on 2025-07-02) — <https://datatracker.ietf.org/api/v1/doc/newrevisiondocevent/?doc__name=draft-parecki-oauth-identity-assertion-authz-grant&limit=20>\n9. IETF Datatracker, *IETF Datatracker document record for draft-ietf-oauth-identity-assertion-authz-grant* (rev 06; expires 2027-05-04) — <https://datatracker.ietf.org/api/v1/doc/document/draft-ietf-oauth-identity-assertion-authz-grant/?format=json>\n10. IANA, *OAuth Parameters* (created 2012-07-27; last updated 2026-08-24) — <https://www.iana.org/assignments/oauth-parameters>\n11. M. Jones (Microsoft), N. Sakimura (NRI), and J. Bradley (Yubico), *OAuth 2.0 Authorization Server Metadata* (RFC 8414, June 2018) — <https://www.rfc-editor.org/rfc/rfc8414.html>\n12. M.B. Jones (Self-Issued Consulting), P. Hunt (Independent Identity, Inc.), and A. Parecki (Okta), *OAuth 2.0 Protected Resource Metadata* (RFC 9728, April 2025) — <https://www.rfc-editor.org/rfc/rfc9728.html>\n13. Aaron Parecki (Okta) and Emelia Smith, *OAuth Client ID Metadata Document (draft-ietf-oauth-client-id-metadata-document-03)* (2 November 2026; expires 6 May 2027) — <https://www.ietf.org/archive/id/draft-ietf-oauth-client-id-metadata-document-03.txt>\n14. WorkOS, *auth.md* (README on main) — <https://raw.githubusercontent.com/workos/auth.md/main/README.md>\n15. Paul Carleton, Nick Steele, Aaron Parecki, Arndt Schwenkschuster, and Brian Campbell, *draft-carleton-workload-authz-grant — Workload Authorization Grant (IETF Datatracker)* (fetched 2026-10-30) — <https://datatracker.ietf.org/doc/draft-carleton-workload-authz-grant/>\n16. K. McGuinness (Independent) and A. Parecki (Okta), *Identity Continuation Assertion for OAuth 2.0 Token Exchange (draft-mcguinness-oauth-id-continuation-assertion-02)* (draft-02, 9 September 2026; expires 13 March 2027) — <https://www.ietf.org/archive/id/draft-mcguinness-oauth-id-continuation-assertion-02.txt>\n17. Okta, *Okta brings first-class identity to AI agents with Agent SSO* (2026-08-24) — <https://www.okta.com/en-gb/newsroom/press-releases/okta-brings-first-class-identity-to-ai-agents-with-agent-sso/>\n18. Paul Carleton (Model Context Protocol Blog), *Enterprise-Managed Authorization: Zero-touch OAuth for MCP* (published 2026-06-18; modified 2026-10-30) — <https://blog.modelcontextprotocol.io/posts/enterprise-managed-auth/>\n19. Okta, *Okta advances the industry standard for secure AI agent connections with expanding Cross App Access ecosystem* (2026-06-23) — <https://www.okta.com/newsroom/press-releases/okta-announces-cross-app-access-partners/>\n20. Auth0 by Okta, *Auth0 Changelog* (Cross-App Access requesting app entry 2026-08-31) — <https://auth0.com/changelog>\n21. David Lozano (Auth0), *Adopting the Cross App Access Protocol in Auth0* (published 2026-08-06) — <https://auth0.com/blog/xaa-protocol-auth0-ai-agents/>\n22. Ping Identity, *Configuring a refresh token-to-ID-JAG token exchange* (PingFederate Server 13.1.4; page datePublished 2026-10-30) — <https://docs.pingidentity.com/pingfederate/13.1/administrators_reference_guide/pf_configuring_refresh_token_to_idjag_exchange.html>\n23. Keycloak, *Identity Assertion JWT Authorization Grant* (guide based on draft-01) — <https://www.keycloak.org/securing-apps/identity-assertion-jwt-authorization-grant>\n24. WorkOS, *auth.md* (repository created 2026-05-20; pushed 2026-09-24) — <https://github.com/workos/auth.md>\n25. Zuplo, *OAuth authorization server metadata* (issuer https://auth.zuplo.com/) — <https://zuplo.com/.well-known/oauth-authorization-server>\n26. Okta Developer, *Open Sandbox to Learn and Debug Cross App Access* (xaa.dev sandbox) — <https://xaa.dev/>\n27. Okta, *oktadev/okta-cross-app-access-mcp* (2026-11-06) — <https://github.com/oktadev/okta-cross-app-access-mcp/>\n28. Notion, *OAuth authorization server metadata* (issuer https://mcp.notion.com) — <https://mcp.notion.com/.well-known/oauth-authorization-server>\n29. Linear, *OAuth authorization server metadata* (issuer https://mcp.linear.app) — <https://mcp.linear.app/.well-known/oauth-authorization-server>\n30. Figma, *OAuth authorization server metadata* (issuer https://api.figma.com) — <https://mcp.figma.com/.well-known/oauth-authorization-server>\n31. Lovable, *OAuth authorization server metadata* (issuer https://lovable.dev/oauth) — <https://lovable.dev/.well-known/oauth-authorization-server>\n32. Atlassian, *How We Brought Enterprise-Managed Authorization to Rovo MCP with XAA and ID-JAG* (2026-06-29) — <https://www.atlassian.com/blog/development/enterprise-managed-authorization-rovo-mcp-xaa-id-jag>\n33. Anthropic, *Centrally manage authorization for MCP connectors* (updated 2026-08-24) — <https://claude.com/resources/articles/enterprise-managed-auth>\n34. Aaron Parecki (Model Context Protocol), *SEP-990: Enable enterprise IdP policy controls during MCP OAuth flows* (created 2025-06-04; status Final) — <https://modelcontextprotocol.io/seps/990-enable-enterprise-idp-policy-controls-during-mcp-o>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "aliases": [
    "AI Agent Authentication and Authorization",
    "draft-klrc-aiagent-auth"
   ],
   "analog": "none; closest classic-web analog is a service-account/workload-identity framework (e.g. cloud IAM roles) applied to a new class of caller",
   "collisions": [
    "AIP (Agent Identity Protocol, a different, unrelated DID-based individual draft already tracked as its own record)"
   ],
   "discovery": {
    "mechanism": "none; this is a best-practices/architecture framework document, not a discoverable wire protocol with its own well-known path",
    "path": "Nothing to discover: the draft defines no endpoint or registry entry. \"This document has no IANA actions.\""
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://datatracker.ietf.org/doc/draft-klrc-aiagent-auth/",
     "claim": "IETF Datatracker, *draft-klrc-aiagent-auth — AI Agent Authentication and Authorization (IETF Datatracker)*, last updated 2026-09-09; latest revision 2026-07-06",
     "date": null,
     "quote": "Replaced Internet-Draft (wimse WG) Expired & archived / Replaced by … draft-ietf-wimse-aims / 2026-09-09 (Latest revision 2026-07-06) … Replaced by … draft-ietf-wimse-aims / Pieter Kasselman, Jeff Lombardo, Yaroslav Rosomakho, Brian Campbell, Nick Steele, Aaron Parecki / Internet Engineering Task Force (IETF) / Intended RFC status … (None) / AI Agent Authentication and Authorization draft-klrc-aiagent-auth-03 / 2026-09-09 (Latest revision 2026-07-06)",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://datatracker.ietf.org/doc/draft-klrc-aiagent-auth/history/",
     "claim": "IETF Datatracker, *draft-klrc-aiagent-auth — AI Agent Authentication and Authorization, document history (IETF Datatracker)*, history through 2026-09-09",
     "date": null,
     "quote": "2026-09-09 | 03 | Justin Richer | IETF WG state changed to Adopted by a WG / 2026-03-02 | 00 | Pieter Kasselman | New version available: draft-klrc-aiagent-auth-00.txt / 2026-03-30 | 01 | Pieter Kasselman | New version available: draft-klrc-aiagent-auth-01.txt / 2026-06-01 | 02 | Pieter Kasselman | New version available: draft-klrc-aiagent-auth-02.txt / 2026-07-06 | 03 | Pieter Kasselman | New version available: draft-klrc-aiagent-auth-03.txt",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-wimse-aims/history/",
     "claim": "IETF Datatracker, *draft-ietf-wimse-aims — AI Identity Management System, document history (IETF Datatracker)*, 2026-09-15",
     "date": "2026-09-15",
     "quote": "This document now replaces draft-klrc-aiagent-auth instead of None / 2026-09-15 | 00 | Pieter Kasselman | New version available: draft-ietf-wimse-aims-00.txt / 2026-09-15 | 00 | Justin Richer | WG -00 approved / 2026-09-15 | 00 | Justin Richer | This document now replaces draft-klrc-aiagent-auth instead of None",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://www.ietf.org/archive/id/draft-klrc-aiagent-auth-03.txt",
     "claim": "P. Kasselman (Defakto Security), J. Lombardo (AWS), Y. Rosomakho (Zscaler), B. Campbell (Ping Identity), N. Steele (OpenAI), and A. Parecki (Okta), *AI Agent Authentication and Authorization (draft-klrc-aiagent-auth-03)*, 6 July 2026",
     "date": null,
     "quote": "This document proposes best practices for authentication and authorization of AI agent interactions. / It leverages existing standards such as the Workload Identity in Multi-System Environments (WIMSE) architecture and OAuth 2.0 family of specifications. Rather than defining new protocols, this document describes how existing and widely deployed standards can be applied or extended / The User or System (e.g. a batch job or another Agent) provides an initial request or instruction to the AI Agent. / The AI Agent provides the available context to the LLM. … The AI Agent invokes one or more external endpoints of selected Tools, Services or Resources. … Once the exit condition is reached in step 5, the AI Agent may return a response to the User or System. / N. Steele OpenAI A. Parecki Okta 6 July 2026 / Intended status: Informational / draft-klrc-aiagent-auth-03 / 6 July 2026 / This document has no IANA actions. / AI Agent Authentication and Authorization draft-klrc-aiagent-auth-03 / Status information for this document may be found at https://datatracker.ietf.org/doc/draft-klrc-aiagent-auth/. / Copyright (c) 2026 IETF Trust and the persons identified as the document authors. / IETF Trust's Legal Provisions Relating to IETF Documents / Code Components extracted from this document must include Revised BSD License text / However, many of these efforts develop solutions in isolation, often reinventing existing mechanisms unaware of applicable prior art. / This fragmentation risks creating incompatible implementations, duplicated development effort, and missed opportunities to leverage decades of established identity and authorization standards. / 6 July 2026 AI Agent Authentication and Authorization draft-klrc-aiagent-auth-03 / This document proposes best practices for authentication and authorization of AI agent interactions. It leverages existing standards such as the Workload Identity in Multi-System Environments (WIMSE) architecture and OAuth 2.0 family of specifications. Rather than defining new protocols, this document describes how existing and widely deployed standards can be applied or extended to establish agent authentication and authorization. / Communication within or between Tools, Services, and Resources is out of scope. / An agent participating in this framework MUST be assigned exactly one WIMSE identifier, which MAY be a SPIFFE ID. / uniquely identifies a workload within a trust domain / HTTP Message Signatures\", RFC 9421 / The WIMSE Workload-to-Workload Authentication with HTTP Signatures specification [WIMSE-HTTPSIG] defines an application-layer authentication profile built on the HTTP Message Signatures standard [HTTP-SIG]. / or a derived specification such as the Identity Assertion JWT Authorization Grant",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://www.ietf.org/archive/id/draft-ietf-wimse-aims-01.txt",
     "claim": "P. Kasselman (Defakto Security), J. Lombardo (AWS), Y. Rosomakho (Zscaler), B. Campbell (Ping Identity), N. Steele (OpenAI), and A. Parecki (Okta), *AI Identity Management System (draft-ietf-wimse-aims-01)*, 2 November 2026; expires 6 May 2027",
     "date": null,
     "quote": "The User or System (e.g. a batch job or another Agent) provides an initial request or instruction to the AI Agent. ... The AI Agent provides the available context to the LLM. ... The AI Agent invokes one or more external endpoints of selected Tools, Services or Resources. ... Once the exit condition is reached in step 5, the AI Agent may return a response to the User or System. / Expires: 6 May 2027 ... 2 November 2026 AI Identity Management System draft-ietf-wimse-aims-01 / AI Identity Management System draft-ietf-wimse-aims-01 / However, many of these efforts develop solutions in isolation, often reinventing existing mechanisms unaware of applicable prior art. This fragmentation risks creating incompatible implementations, duplicated development effort, and missed opportunities to leverage decades of established identity and authorization standards. / Expires: 6 May 2027 ... 2 November 2026 AI Identity Management System draft-ietf-wimse-aims-01 ... This document proposes best practices for authentication and authorization of AI agent interactions. / AI Identity Management System draft-ietf-wimse-aims-01 ... Communication within or between Tools, Services, and Resources is out of scope. / 2 November 2026 AI Identity Management System draft-ietf-wimse-aims-01",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://datatracker.ietf.org/api/v1/doc/document/draft-ietf-wimse-aims/",
     "claim": "IETF Datatracker, *IETF Datatracker document record for draft-ietf-wimse-aims*, updated 2026-11-02; expires 2027-05-06",
     "date": null,
     "quote": "\"expires\": \"2027-05-06T18:20:54Z\" ... \"rev\": \"01\" ... \"time\": \"2026-11-02T18:20:54Z\" / \"rev\": \"01\" ... \"time\": \"2026-11-02T18:20:54Z\"",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://www.ietf.org/archive/id/draft-klrc-aiagent-auth-00.txt",
     "claim": "P. Kasselman (Defakto Security), J. Lombardo (AWS), Y. Rosomakho (Zscaler), and B. Campbell (Ping Identity), *AI Agent Authentication and Authorization (draft-klrc-aiagent-auth-00)*, 2 March 2026",
     "date": null,
     "quote": "P. Kasselman Internet-Draft Defakto Security Intended status: Informational J. Lombardo Expires: 3 September 2026 AWS Y. Rosomakho Zscaler B. Campbell Ping Identity 2 March 2026",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://datatracker.ietf.org/wg/wimse/about/",
     "claim": "IETF, *Workload Identity in Multi System Environments (wimse)*, charter milestone dated 2024-11-30",
     "date": null,
     "quote": "Workload Identity in Multi System Environments (wimse) / Justin Richer, Pieter Kasselman",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://mailarchive.ietf.org/arch/msg/wimse/I0RFmUD4Ry7ZrZ4QkFywer1SkGA/",
     "claim": "Justin Richer (WIMSE chair), *[WIMSE] Call for Adoption: AI Agent Authentication and Authorization*, 10 August 2026",
     "date": null,
     "quote": "Mon, 10 August 2026 19:01 UTC / As Pieter is co-author of this document, he has recused himself as chair of any process regarding this work should it continue in the working group, starting with this call for adoption.",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://mailarchive.ietf.org/arch/msg/wimse/ipoTMCLvV79Q3gJ1vP3lFtStDiI/",
     "claim": "Justin Richer (WIMSE chair), *[WIMSE] Adoption of AI Agent Authentication and Authorization (AIMS)*, 9 September 2026",
     "date": null,
     "quote": "Wed, 09 September 2026 16:56 UTC / has been adopted as a working group item for WIMSE.",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-wimse-aims/",
     "claim": "Pieter Kasselman, Jeff Lombardo, Yaroslav Rosomakho, Brian Campbell, Nick Steele, and Aaron Parecki (IETF WIMSE), *draft-ietf-wimse-aims — AI Identity Management System (IETF Datatracker)*, last updated 2026-11-02; expires 2027-05-06",
     "date": null,
     "quote": "Active Internet-Draft (wimse WG) / WG Document / Replaces … draft-klrc-aiagent-auth / This document proposes best practices for authentication and authorization of AI agent interactions. / Rather than defining new protocols, this document describes how existing and widely deployed standards can be applied or extended to establish agent authentication and authorization.",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://spiffe.io/docs/latest/spiffe-about/overview/",
     "claim": "SPIFFE, *SPIFFE Overview*, undated overview page",
     "date": null,
     "quote": "SPIFFE, the Secure Production Identity Framework for Everyone, is a set of open-source standards for securely identifying software systems in dynamic and heterogeneous environments. / SPIFFE Workload API",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://www.rfc-editor.org/rfc/rfc9421.html",
     "claim": "A. Backman (Amazon), J. Richer (Bespoke Engineering), and M. Sporny (Digital Bazaar), *HTTP Message Signatures (RFC 9421)*, published February 2024",
     "date": null,
     "quote": "RFC 9421 HTTP Message Signatures February 2024 / Published: February 2024 / 4.1. The Signature-Input HTTP Field / 4.2. The Signature HTTP Field",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://www.ietf.org/archive/id/draft-ietf-oauth-identity-assertion-authz-grant-06.txt",
     "claim": "A. Parecki (Okta), K. McGuinness (Independent), and B. Campbell (Ping Identity), *Identity Assertion JWT Authorization Grant (draft-ietf-oauth-identity-assertion-authz-grant-06)*, draft-06, 31 October 2026; expires 4 May 2027",
     "date": null,
     "quote": "This specification provides a mechanism for an application to use an / grant_type=urn:ietf:params:oauth:grant-type:token-exchange / requested_token_type=urn:ietf:params:oauth:token-type:id-jag",
     "ref": 14
    }
   ],
   "form": "document-format",
   "governance": "IETF Workload Identity in Multi System Environments (wimse). The working group lists chairs Justin Richer and Pieter Kasselman. Justin Richer recorded that the IETF WG state changed to Adopted by a WG on 2026-09-09. Kasselman recused himself as chair of any process regarding this work, starting with the 10 August 2026 call for adoption.",
   "group": null,
   "history": [
    {
     "date": "2026-09-07",
     "note": "created from IETF datatracker (draft-klrc-aiagent-auth-03), WIMSE WG document list, and reporting on the 2026-08-24 WIMSE adoption call"
    },
    {
     "date": "2026-10-16",
     "note": "draft-ietf-wimse-aims-00 was published as a WIMSE working group document on 2026-09-15 and replaces draft-klrc-aiagent-auth"
    },
    {
     "date": "2026-10-20",
     "note": "version, spec_url and dispute moved to draft-ietf-wimse-aims-00"
    },
    {
     "date": "2026-10-30",
     "note": "Archived historical record after repository withdrawal and replacement."
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "aiagent-auth",
   "implementation": "none-found",
   "last_verified": "2026-11-08",
   "name": "AI Agent Authentication and Authorization",
   "native_status": "Replaced Internet-Draft (wimse WG), expired and archived. Datatracker shows last updated 2026-09-09 (latest revision 2026-07-06) and replaced by draft-ietf-wimse-aims. This is a history page: the working-group draft's current revision and dates are on [AI Identity Management System (AIMS)](/protocols/wimse-aims/).",
   "origin": {
    "date": "2026-03-02",
    "org": "Pieter Kasselman (Defakto Security), Jeff Lombardo (AWS), Yaroslav Rosomakho (Zscaler), Brian Campbell (Ping Identity)"
   },
   "part_of": null,
   "parties": [
    "agent-site",
    "agent-agent"
   ],
   "phase": "replaced",
   "probe": {
    "method": "n/a",
    "path": "n/a",
    "parse": "n/a",
    "on_absent": "The draft defines no endpoint or registry entry, so there is nothing to probe."
   },
   "question": "What was draft-klrc-aiagent-auth, and what replaced it?",
   "scope": "general",
   "spec_url": "https://datatracker.ietf.org/doc/draft-klrc-aiagent-auth/",
   "step": "identify",
   "summary_md": "**AI Agent Authentication and Authorization** (`draft-klrc-aiagent-auth-03`) proposes best practices for authentication and authorization of AI agent interactions, leveraging the WIMSE architecture and OAuth 2.0 rather than defining new protocols. The User or System may provide an initial request to the AI Agent, which supplies available context to the Large Language Model, invokes external endpoints of Tools, Services, or Resources, and may return a response once the exit condition is reached. Datatracker lists `draft-klrc-aiagent-auth` as a Replaced Internet-Draft (`wimse` WG), expired and archived, last updated `2026-09-09` (latest revision `2026-07-06`), replaced by `draft-ietf-wimse-aims`, which is at `draft-ietf-wimse-aims-01` (`2026-11-02`, expires `2027-05-06`).",
   "track": "ietf",
   "version": {
    "label": "draft-klrc-aiagent-auth-03",
    "date": "2026-07-06"
   },
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-klrc-aiagent-auth"
    }
   ],
   "use_cases": [
    "prove-agent-identity",
    "delegate-user-authority",
    "audit-agent-actions"
   ],
   "audience": [
    "agent-builder",
    "platform",
    "standards-body"
   ],
   "pairs_with": [
    "wimse-aims",
    "wimse",
    "spiffe",
    "http-message-signatures",
    "identity-assertion-authz-grant"
   ],
   "prerequisites": [
    "wimse",
    "spiffe"
   ],
   "freshness": "current",
   "hatnote_md": "This page records the history of draft-klrc-aiagent-auth. Datatracker lists it as a Replaced Internet-Draft (wimse WG), expired and archived, replaced by draft-ietf-wimse-aims, after Justin Richer recorded that the IETF WG state changed to Adopted by a WG on 2026-09-09 and the successor history recorded that the new draft replaces draft-klrc-aiagent-auth. For what the working-group document says, who reads it and recent coverage, see [AI Identity Management System (AIMS)](/protocols/wimse-aims/). For the working group's wider work, see [Workload Identity in Multi System Environments (WIMSE)](/protocols/wimse/).",
   "ietf_tracker": {
    "doc": "draft-klrc-aiagent-auth",
    "rev": "03",
    "state": "replaced",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": "draft-ietf-wimse-aims",
    "posted_utc": "2026-07-06",
    "expires_utc": "2027-01-07",
    "as_of": "2026-11-08",
    "source": "https://datatracker.ietf.org/doc/draft-klrc-aiagent-auth/",
    "source_label": "per IETF Datatracker"
   },
   "replaced_by": {
    "doc": "draft-ietf-wimse-aims",
    "page": "/protocols/wimse-aims/"
   },
   "tier": "spec_brief",
   "lifecycle_status": "superseded",
   "wire_archetype": "identity_auth_crypto",
   "status_notice_md": "**Status notice (Replaced Internet-Draft):** `draft-klrc-aiagent-auth-03` has been formally replaced in the IETF `wimse` Working Group by [`draft-ietf-wimse-aims`](/protocols/wimse-aims/).",
   "superseded_by": [
    {
     "doc": "draft-ietf-wimse-aims",
     "protocol_id": "wimse-aims",
     "url": "https://agenticweb.wiki/protocols/wimse-aims/"
    }
   ],
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-08",
   "v05_hatnote_html_md": "**Status notice (Replaced Internet-Draft):** `draft-klrc-aiagent-auth-03` has been formally replaced in the IETF `wimse` Working Group by [`draft-ietf-wimse-aims`](/protocols/wimse-aims/). This page records the history of draft-klrc-aiagent-auth. Datatracker lists it as a Replaced Internet-Draft (wimse WG), expired and archived, replaced by draft-ietf-wimse-aims, after Justin Richer recorded that the IETF WG state changed to Adopted by a WG on 2026-09-09 and the successor history recorded that the new draft replaces draft-klrc-aiagent-auth. For what the working-group document says, who reads it and recent coverage, see [AI Identity Management System (AIMS)](/protocols/wimse-aims/). For the working group's wider work, see [Workload Identity in Multi System Environments (WIMSE)](/protocols/wimse/). [1][2][3]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**AI Agent Authentication and Authorization** (`draft-klrc-aiagent-auth-03`) proposes best practices for authentication and authorization of AI agent interactions, leveraging the WIMSE architecture and OAuth 2.0 rather than defining new protocols. [4] The User or System may provide an initial request to the AI Agent, which supplies available context to the Large Language Model, invokes external endpoints of Tools, Services, or Resources, and may return a response once the exit condition is reached. [4][5] Datatracker lists `draft-klrc-aiagent-auth` as a Replaced Internet-Draft (`wimse` WG), expired and archived, last updated `2026-09-09` (latest revision `2026-07-06`), replaced by `draft-ietf-wimse-aims`, which is at `draft-ietf-wimse-aims-01` (`2026-11-02`, expires `2027-05-06`). [1][5][6]",
   "v05_identity_sentence_md": "**AI Agent Authentication and Authorization** (`draft-klrc-aiagent-auth-03`) proposes best practices for authentication and authorization of AI agent interactions, leveraging the WIMSE architecture and OAuth 2.0 rather than defining new protocols. [4]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Identify](/category/identify/) (`identify`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "Pieter Kasselman (Defakto Security), Jeff Lombardo (AWS), Yaroslav Rosomakho (Zscaler), and Brian Campbell (Ping Identity), 2 March 2026 (`draft-klrc-aiagent-auth-00`). Nick Steele (OpenAI) and Aaron Parecki (Okta) are named on `draft-klrc-aiagent-auth-03`, 6 July 2026. [1][4][7]"
    },
    {
     "label": "Governed by",
     "value_md": "IETF Workload Identity in Multi System Environments (`wimse`). Chairs: Justin Richer and Pieter Kasselman. Pieter Kasselman recused himself as chair for the draft, starting with the 10 August 2026 call for adoption. Justin Richer recorded that the IETF WG state changed to Adopted by a WG on 2026-09-09, and on 9 September 2026 wrote that the draft has been adopted as a working group item for WIMSE. [2][8][9][10]"
    },
    {
     "label": "Track",
     "value_md": "IETF Internet-Draft. The -03 header says Intended status: Informational. Datatracker lists the RFC stream as the Internet Engineering Task Force (IETF) and Intended RFC status as (None). [1][4]"
    },
    {
     "label": "IETF tracker",
     "value_md": "[draft-klrc-aiagent-auth](https://datatracker.ietf.org/doc/draft-klrc-aiagent-auth/) [1]"
    },
    {
     "label": "Status",
     "value_md": "Replaced Internet-Draft (`wimse` WG), expired and archived. Last updated 2026-09-09 (latest revision 2026-07-06). Replaced by `draft-ietf-wimse-aims`, an Active Internet-Draft (`wimse` WG) in stream state WG Document, at revision `draft-ietf-wimse-aims-01` (last updated 2026-11-02, expires 2027-05-06). [1][5][6][11]"
    },
    {
     "label": "Version",
     "value_md": "`draft-klrc-aiagent-auth-03`, 6 July 2026. Datatracker history records -00 on 2026-03-02, -01 on 2026-03-30, -02 on 2026-06-01, and -03 on 2026-07-06. `draft-ietf-wimse-aims-00` was posted on 2026-09-15 (WG -00 approved the same day), and `draft-ietf-wimse-aims-01` was posted on 2026-11-02 (expires 2027-05-06). [2][3][4][5][6]"
    },
    {
     "label": "IANA registration",
     "value_md": "None. Revision -03 states that the document has no IANA actions. [4]"
    },
    {
     "label": "Specification",
     "value_md": "[AI Agent Authentication and Authorization, draft-klrc-aiagent-auth-03](https://www.ietf.org/archive/id/draft-klrc-aiagent-auth-03.txt); WG successor [AI Identity Management System, draft-ietf-wimse-aims-01](https://www.ietf.org/archive/id/draft-ietf-wimse-aims-01.txt) [4][5]"
    },
    {
     "label": "Found at",
     "value_md": "The -03 text says status information for the draft may be found at the IETF Datatracker page for `draft-klrc-aiagent-auth`. [4]"
    },
    {
     "label": "Licence",
     "value_md": "Copyright (c) 2026 IETF Trust and the persons identified as the document authors. The draft is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents. Code components taken from the document must include Revised BSD License text. [4]"
    }
   ],
   "v05_problem_md": "Many of these efforts develop solutions in isolation, often reinventing existing mechanisms unaware of applicable prior art. This fragmentation risks creating incompatible implementations, duplicated development effort, and missed opportunities to leverage established identity and authorization standards. [4][5] Dated 6 July 2026, `draft-klrc-aiagent-auth-03` (succeeded by `draft-ietf-wimse-aims-01` on `2026-11-02`, expires `2027-05-06`) proposes best practices for authentication and authorization of AI agent interactions. Rather than defining new protocols, it describes how existing and widely deployed standards can be applied or extended to establish agent authentication and authorization. [4][5][6] Communication within or between Tools, Services, and Resources is out of scope, and the document has no IANA actions. The individual draft leaves multi-hop delegation verification, revocation, and authorization policy languages out of scope while treating WIMSE and OAuth composition at a high level, which motivated the working-group successor `draft-ietf-wimse-aims-01`; the draft does not link a public source or issue repository. [4][5]",
   "v05_mechanism_delta_md": "Dated 6 July 2026, `draft-klrc-aiagent-auth-03` (succeeded by `draft-ietf-wimse-aims-01` on `2026-11-02`, expires `2027-05-06`) proposes best practices for authentication and authorization of AI agent interactions. Rather than defining new protocols, it describes how existing and widely deployed standards can be applied or extended to establish agent authentication and authorization. [4][5][6]",
   "v05_scope_boundary_md": "Communication within or between Tools, Services, and Resources is out of scope, and the document has no IANA actions. The individual draft leaves multi-hop delegation verification, revocation, and authorization policy languages out of scope while treating WIMSE and OAuth composition at a high level, which motivated the working-group successor `draft-ietf-wimse-aims-01`; the draft does not link a public source or issue repository. [4][5]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "SPIFFE Workload Identity & X.509/JWT-SVID",
      "spec_or_rfc": "SPIFFE",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "SPIFFE, the Secure Production Identity Framework for Everyone, is a set of open-source standards for securely identifying software systems. Datatracker marks `draft-klrc-aiagent-auth` replaced by `draft-ietf-wimse-aims`, and the draft specifies that an agent MUST be assigned exactly one WIMSE identifier, which MAY be a SPIFFE ID. [1][4][12]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "wimse-aims",
      "target_name": "AI Identity Management System (AIMS)",
      "relation_type": "superseded_by",
      "relation_label": "Superseded by",
      "delta_md": "AIMS (draft-ietf-wimse-aims, at revision draft-ietf-wimse-aims-01 dated 2026-11-02, expiring 2027-05-06) replaces draft-klrc-aiagent-auth. AIMS proposes best practices for authentication and authorization of AI agent interactions and, rather than defining new protocols, describes how existing and widely deployed standards can be applied or extended. [5][6][11]"
     },
     {
      "target_id": "wimse",
      "target_name": "Workload Identity in Multi System Environments (WIMSE)",
      "relation_type": "adopted_by",
      "relation_label": "Adopted by WG",
      "delta_md": "Adopted by the WIMSE working group (now AIMS). WIMSE chair Justin Richer recorded on 2026-09-09 that the IETF WG state changed to Adopted by a WG, and on 2026-09-15 that draft-ietf-wimse-aims now replaces draft-klrc-aiagent-auth (updated to draft-ietf-wimse-aims-01 on 2026-11-02). The adopted draft states that the specification has no IANA actions. [2][3][4][5][6][8]"
     },
     {
      "target_id": "spiffe",
      "target_name": "SPIFFE (Secure Production Identity Framework for Everyone)",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "SPIFFE, the Secure Production Identity Framework for Everyone, is a set of open-source standards for securely identifying software systems, and its specifications include a SPIFFE Workload API. draft-klrc-aiagent-auth says a SPIFFE identifier is a URI that uniquely identifies a workload within a trust domain and that an agent MUST be assigned exactly one WIMSE identifier, which MAY be a SPIFFE ID. [4][12]"
     },
     {
      "target_id": "http-message-signatures",
      "target_name": "HTTP Message Signatures",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "RFC 9421, HTTP Message Signatures, published February 2024, defines the Signature-Input HTTP field and the Signature HTTP field. draft-klrc-aiagent-auth cites HTTP Message Signatures, RFC 9421, and notes that the WIMSE Workload-to-Workload Authentication with HTTP Signatures specification defines an application-layer authentication profile built on the HTTP Message Signatures standard. AIMS says that, rather than defining new protocols, the document describes how existing and widely deployed standards can be applied or extended. [4][11][13]"
     },
     {
      "target_id": "identity-assertion-authz-grant",
      "target_name": "Identity Assertion JWT Authorization Grant (ID-JAG)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "The Identity Assertion JWT Authorization Grant requires the JWT header typ to be oauth-id-jag+jwt, and its token-exchange example sets grant_type to urn:ietf:params:oauth:grant-type:token-exchange and requested_token_type to urn:ietf:params:oauth:token-type:id-jag. draft-klrc-aiagent-auth names the Identity Assertion JWT Authorization Grant as a derived specification for obtaining authorization, and draft-ietf-wimse-aims replaces draft-klrc-aiagent-auth. [3][4][14]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Identify protocols](/category/identify/)** — Category index for `identify` standards."
    }
   ],
   "v05_compiled_md": "---\nid: aiagent-auth\ntitle: \"AI Agent Authentication and Authorization\"\ntier: spec_brief\nlifecycle_status: superseded\ncategory: identify\nform: document-format\nwire_archetype: identity_auth_crypto\nspec_url: https://www.ietf.org/archive/id/draft-klrc-aiagent-auth-03.txt\nlast_checked: 2026-11-08\n---\n\n# AI Agent Authentication and Authorization\n\n**Category:** [Identify](/category/identify/) (`identify`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-11-08\n\n> ***Status notice (Replaced Internet-Draft):** `draft-klrc-aiagent-auth-03` has been formally replaced in the IETF `wimse` Working Group by [`draft-ietf-wimse-aims`](/protocols/wimse-aims/). This page records the history of draft-klrc-aiagent-auth. Datatracker lists it as a Replaced Internet-Draft (wimse WG), expired and archived, replaced by draft-ietf-wimse-aims, after Justin Richer recorded that the IETF WG state changed to Adopted by a WG on 2026-09-09 and the successor history recorded that the new draft replaces draft-klrc-aiagent-auth. For what the working-group document says, who reads it and recent coverage, see [AI Identity Management System (AIMS)](/protocols/wimse-aims/). For the working group's wider work, see [Workload Identity in Multi System Environments (WIMSE)](/protocols/wimse/). [1][2][3]*\n\n**AI Agent Authentication and Authorization** (`draft-klrc-aiagent-auth-03`) proposes best practices for authentication and authorization of AI agent interactions, leveraging the WIMSE architecture and OAuth 2.0 rather than defining new protocols. [4] The User or System may provide an initial request to the AI Agent, which supplies available context to the Large Language Model, invokes external endpoints of Tools, Services, or Resources, and may return a response once the exit condition is reached. [4][5] Datatracker lists `draft-klrc-aiagent-auth` as a Replaced Internet-Draft (`wimse` WG), expired and archived, last updated `2026-09-09` (latest revision `2026-07-06`), replaced by `draft-ietf-wimse-aims`, which is at `draft-ietf-wimse-aims-01` (`2026-11-02`, expires `2027-05-06`). [1][5][6]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Identify](/category/identify/) (`identify`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | Pieter Kasselman (Defakto Security), Jeff Lombardo (AWS), Yaroslav Rosomakho (Zscaler), and Brian Campbell (Ping Identity), 2 March 2026 (`draft-klrc-aiagent-auth-00`). Nick Steele (OpenAI) and Aaron Parecki (Okta) are named on `draft-klrc-aiagent-auth-03`, 6 July 2026. [1][4][7] |\n| **Governed by** | IETF Workload Identity in Multi System Environments (`wimse`). Chairs: Justin Richer and Pieter Kasselman. Pieter Kasselman recused himself as chair for the draft, starting with the 10 August 2026 call for adoption. Justin Richer recorded that the IETF WG state changed to Adopted by a WG on 2026-09-09, and on 9 September 2026 wrote that the draft has been adopted as a working group item for WIMSE. [2][8][9][10] |\n| **Track** | IETF Internet-Draft. The -03 header says Intended status: Informational. Datatracker lists the RFC stream as the Internet Engineering Task Force (IETF) and Intended RFC status as (None). [1][4] |\n| **IETF tracker** | [draft-klrc-aiagent-auth](https://datatracker.ietf.org/doc/draft-klrc-aiagent-auth/) [1] |\n| **Status** | Replaced Internet-Draft (`wimse` WG), expired and archived. Last updated 2026-09-09 (latest revision 2026-07-06). Replaced by `draft-ietf-wimse-aims`, an Active Internet-Draft (`wimse` WG) in stream state WG Document, at revision `draft-ietf-wimse-aims-01` (last updated 2026-11-02, expires 2027-05-06). [1][5][6][11] |\n| **Version** | `draft-klrc-aiagent-auth-03`, 6 July 2026. Datatracker history records -00 on 2026-03-02, -01 on 2026-03-30, -02 on 2026-06-01, and -03 on 2026-07-06. `draft-ietf-wimse-aims-00` was posted on 2026-09-15 (WG -00 approved the same day), and `draft-ietf-wimse-aims-01` was posted on 2026-11-02 (expires 2027-05-06). [2][3][4][5][6] |\n| **IANA registration** | None. Revision -03 states that the document has no IANA actions. [4] |\n| **Specification** | [AI Agent Authentication and Authorization, draft-klrc-aiagent-auth-03](https://www.ietf.org/archive/id/draft-klrc-aiagent-auth-03.txt); WG successor [AI Identity Management System, draft-ietf-wimse-aims-01](https://www.ietf.org/archive/id/draft-ietf-wimse-aims-01.txt) [4][5] |\n| **Found at** | The -03 text says status information for the draft may be found at the IETF Datatracker page for `draft-klrc-aiagent-auth`. [4] |\n| **Licence** | Copyright (c) 2026 IETF Trust and the persons identified as the document authors. The draft is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents. Code components taken from the document must include Revised BSD License text. [4] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nMany of these efforts develop solutions in isolation, often reinventing existing mechanisms unaware of applicable prior art. This fragmentation risks creating incompatible implementations, duplicated development effort, and missed opportunities to leverage established identity and authorization standards. [4][5] Dated 6 July 2026, `draft-klrc-aiagent-auth-03` (succeeded by `draft-ietf-wimse-aims-01` on `2026-11-02`, expires `2027-05-06`) proposes best practices for authentication and authorization of AI agent interactions. Rather than defining new protocols, it describes how existing and widely deployed standards can be applied or extended to establish agent authentication and authorization. [4][5][6] Communication within or between Tools, Services, and Resources is out of scope, and the document has no IANA actions. The individual draft leaves multi-hop delegation verification, revocation, and authorization policy languages out of scope while treating WIMSE and OAuth composition at a high level, which motivated the working-group successor `draft-ietf-wimse-aims-01`; the draft does not link a public source or issue repository. [4][5]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **SPIFFE Workload Identity & X.509/JWT-SVID** | `SPIFFE` | Analogous to classic standard | SPIFFE, the Secure Production Identity Framework for Everyone, is a set of open-source standards for securely identifying software systems. Datatracker marks `draft-klrc-aiagent-auth` replaced by `draft-ietf-wimse-aims`, and the draft specifies that an agent MUST be assigned exactly one WIMSE identifier, which MAY be a SPIFFE ID. [1][4][12] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[AI Identity Management System (AIMS)](/protocols/wimse-aims/)** | Superseded by | AIMS (draft-ietf-wimse-aims, at revision draft-ietf-wimse-aims-01 dated 2026-11-02, expiring 2027-05-06) replaces draft-klrc-aiagent-auth. AIMS proposes best practices for authentication and authorization of AI agent interactions and, rather than defining new protocols, describes how existing and widely deployed standards can be applied or extended. [5][6][11] |\n| **[Workload Identity in Multi System Environments (WIMSE)](/protocols/wimse/)** | Adopted by WG | Adopted by the WIMSE working group (now AIMS). WIMSE chair Justin Richer recorded on 2026-09-09 that the IETF WG state changed to Adopted by a WG, and on 2026-09-15 that draft-ietf-wimse-aims now replaces draft-klrc-aiagent-auth (updated to draft-ietf-wimse-aims-01 on 2026-11-02). The adopted draft states that the specification has no IANA actions. [2][3][4][5][6][8] |\n| **[SPIFFE (Secure Production Identity Framework for Everyone)](/protocols/spiffe/)** | Builds on | SPIFFE, the Secure Production Identity Framework for Everyone, is a set of open-source standards for securely identifying software systems, and its specifications include a SPIFFE Workload API. draft-klrc-aiagent-auth says a SPIFFE identifier is a URI that uniquely identifies a workload within a trust domain and that an agent MUST be assigned exactly one WIMSE identifier, which MAY be a SPIFFE ID. [4][12] |\n| **[HTTP Message Signatures](/protocols/http-message-signatures/)** | Complements | RFC 9421, HTTP Message Signatures, published February 2024, defines the Signature-Input HTTP field and the Signature HTTP field. draft-klrc-aiagent-auth cites HTTP Message Signatures, RFC 9421, and notes that the WIMSE Workload-to-Workload Authentication with HTTP Signatures specification defines an application-layer authentication profile built on the HTTP Message Signatures standard. AIMS says that, rather than defining new protocols, the document describes how existing and widely deployed standards can be applied or extended. [4][11][13] |\n| **[Identity Assertion JWT Authorization Grant (ID-JAG)](/protocols/identity-assertion-authz-grant/)** | Complements | The Identity Assertion JWT Authorization Grant requires the JWT header typ to be oauth-id-jag+jwt, and its token-exchange example sets grant_type to urn:ietf:params:oauth:grant-type:token-exchange and requested_token_type to urn:ietf:params:oauth:token-type:id-jag. draft-klrc-aiagent-auth names the Identity Assertion JWT Authorization Grant as a derived specification for obtaining authorization, and draft-ietf-wimse-aims replaces draft-klrc-aiagent-auth. [3][4][14] |\n\n---\n\n## See also\n\n- **Category:** [Identify protocols](/category/identify/)\n\n---\n\n## References\n\n1. IETF Datatracker, *draft-klrc-aiagent-auth — AI Agent Authentication and Authorization (IETF Datatracker)* (last updated 2026-09-09; latest revision 2026-07-06) — <https://datatracker.ietf.org/doc/draft-klrc-aiagent-auth/>\n2. IETF Datatracker, *draft-klrc-aiagent-auth — AI Agent Authentication and Authorization, document history (IETF Datatracker)* (history through 2026-09-09) — <https://datatracker.ietf.org/doc/draft-klrc-aiagent-auth/history/>\n3. IETF Datatracker, *draft-ietf-wimse-aims — AI Identity Management System, document history (IETF Datatracker)* (2026-09-15) — <https://datatracker.ietf.org/doc/draft-ietf-wimse-aims/history/>\n4. P. Kasselman (Defakto Security), J. Lombardo (AWS), Y. Rosomakho (Zscaler), B. Campbell (Ping Identity), N. Steele (OpenAI), and A. Parecki (Okta), *AI Agent Authentication and Authorization (draft-klrc-aiagent-auth-03)* (6 July 2026) — <https://www.ietf.org/archive/id/draft-klrc-aiagent-auth-03.txt>\n5. P. Kasselman (Defakto Security), J. Lombardo (AWS), Y. Rosomakho (Zscaler), B. Campbell (Ping Identity), N. Steele (OpenAI), and A. Parecki (Okta), *AI Identity Management System (draft-ietf-wimse-aims-01)* (2 November 2026; expires 6 May 2027) — <https://www.ietf.org/archive/id/draft-ietf-wimse-aims-01.txt>\n6. IETF Datatracker, *IETF Datatracker document record for draft-ietf-wimse-aims* (updated 2026-11-02; expires 2027-05-06) — <https://datatracker.ietf.org/api/v1/doc/document/draft-ietf-wimse-aims/>\n7. P. Kasselman (Defakto Security), J. Lombardo (AWS), Y. Rosomakho (Zscaler), and B. Campbell (Ping Identity), *AI Agent Authentication and Authorization (draft-klrc-aiagent-auth-00)* (2 March 2026) — <https://www.ietf.org/archive/id/draft-klrc-aiagent-auth-00.txt>\n8. IETF, *Workload Identity in Multi System Environments (wimse)* (charter milestone dated 2024-11-30) — <https://datatracker.ietf.org/wg/wimse/about/>\n9. Justin Richer (WIMSE chair), *[WIMSE] Call for Adoption: AI Agent Authentication and Authorization* (10 August 2026) — <https://mailarchive.ietf.org/arch/msg/wimse/I0RFmUD4Ry7ZrZ4QkFywer1SkGA/>\n10. Justin Richer (WIMSE chair), *[WIMSE] Adoption of AI Agent Authentication and Authorization (AIMS)* (9 September 2026) — <https://mailarchive.ietf.org/arch/msg/wimse/ipoTMCLvV79Q3gJ1vP3lFtStDiI/>\n11. Pieter Kasselman, Jeff Lombardo, Yaroslav Rosomakho, Brian Campbell, Nick Steele, and Aaron Parecki (IETF WIMSE), *draft-ietf-wimse-aims — AI Identity Management System (IETF Datatracker)* (last updated 2026-11-02; expires 2027-05-06) — <https://datatracker.ietf.org/doc/draft-ietf-wimse-aims/>\n12. SPIFFE, *SPIFFE Overview* (undated overview page) — <https://spiffe.io/docs/latest/spiffe-about/overview/>\n13. A. Backman (Amazon), J. Richer (Bespoke Engineering), and M. Sporny (Digital Bazaar), *HTTP Message Signatures (RFC 9421)* (published February 2024) — <https://www.rfc-editor.org/rfc/rfc9421.html>\n14. A. Parecki (Okta), K. McGuinness (Independent), and B. Campbell (Ping Identity), *Identity Assertion JWT Authorization Grant (draft-ietf-oauth-identity-assertion-authz-grant-06)* (draft-06, 31 October 2026; expires 4 May 2027) — <https://www.ietf.org/archive/id/draft-ietf-oauth-identity-assertion-authz-grant-06.txt>\n"
  },
  {
   "acronym": "DAN",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "aliases": [
    "AIDISCA/AIINDEX",
    "draft-seethiraju-dawn-dan"
   ],
   "analog": "DNS-based Authentication of Named Entities (DANE) for TLS certificates, applied to agent discovery instead of TLS",
   "collisions": [
    "DNS-AID (unrelated IETF dnsop draft, SVCB-based, Infoblox/Deutsche Telekom/Amazon/GoDaddy)",
    "AID (agentcommunity.org, TXT-based, unrelated authorship)",
    "ANS/Agent Name Service v2 (dual-certificate + SCITT transparency log, unrelated authorship)",
    "DAN also collides with the unrelated 'Do Anything Now' AI jailbreak prompt meme"
   ],
   "discovery": {
    "mechanism": "Two new DNS Resource Record types resolved directly (no well-known HTTP path). AIINDEX, published at a zone's _agents label, enumerates the AI agent publication names available in that zone. AIDISCA, published at each agent's own name, atomically carries protocol identifier, coarse-grained capabilities, service endpoint, and a DANE-style embedded certificate association — no separate TLSA lookup is needed.",
    "path": "_agents.<domain> (AIINDEX, TYPE65502); <agent-name>._agents.<domain> (AIDISCA, TYPE65501)"
   },
   "dispute": {
    "claims": [
     "DAN: two new RR types AIDISCA/AIINDEX, DANE-style cert embedded in-record, Verisign individual submission",
     "DNS-AID: SVCB records at agent + _index._agents labels, IETF dnsop draft, Infoblox/Deutsche Telekom/Amazon/GoDaddy",
     "AID: single TXT record at _agent.<domain>, agentcommunity.org, community-governed"
    ],
    "summary": "DAN is the third independent IETF-adjacent proposal to bind AI-agent discovery metadata to DNS, alongside DNS-AID (draft-mozleywilliams-dnsop-dnsaid, SVCB records, Infoblox/Deutsche Telekom/Amazon/GoDaddy) and AID (agentcommunity.org, TXT records). Unlike both, DAN does not reuse an existing RR type (SVCB or TXT): it defines two brand-new RR types (AIDISCA, AIINDEX) that must be published in RFC3597 generic form until IANA assigns mnemonics, and it embeds the certificate association directly inside AIDISCA rather than pointing to a separate DANE TLSA record. No evidence was found that Verisign's draft references, cites, or coordinates with the DNS-AID or AID authors, or vice versa; all three compete to answer the same 'discover' question with incompatible DNS shapes."
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.ietf.org/archive/id/draft-seethiraju-dawn-dan-01.txt",
     "claim": "R. Seethiraju, S. Thakar, K. Shyamsunder, and E. Osterweil (Verisign), *DNS-Based Agent Naming (DAN): AIDISCA and AIINDEX Resource Records for AI Agent Discovery (draft-seethiraju-dawn-dan-01)*, 30 October 2026",
     "date": null,
     "quote": "draft-seethiraju-dawn-dan-01 ... This document defines an approach for AI agent discovery referred to as DNS-Based Agent Naming (DAN). ... DAN allows AI agents to be given DNS domain names as inter-domain names, and to advertise the necessary and sufficient set of metadata needed to locate services and connect securely. ... AI agent association record called AIDISCA ... The second RR is the AIINDEX RR, which enables advertisement of a DNS zone's available AI agents. / This approach defines a new AIDISCA record that uses DANE semantics directly, so that any existing trust or recognition that is already associated with the DNS zone containing an AIDISCA record can be transitively associated with a named AI agent. ... This record atomically associates capabilities, AI agent protocol, and an X.509 certificate to an AI agent, based on name resolution. / Implementations SHOULD publish AIDISCA records beneath a dedicated \"_agents\" label to support predictable discovery and operational consistency. ... Other naming conventions MAY be used where deployment requirements differ. / AIINDEX records SHOULD be published at the dedicated \"_agents\" label, for example, \"_agents.example.com\". ... Zone administrators MAY publish AIINDEX records at other locations where deployment requirements differ. / Intended status: Standards Track ... Verisign 30 October 2026 ... draft-seethiraju-dawn-dan-01 ... This Internet-Draft will expire on 3 May 2027. / Intended status: Standards Track / Expires: 3 May 2027                                         E. Osterweil\n                                                                Verisign\n                                                         30 October 2026\n\n\n DNS-Based Agent Naming (DAN): AIDISCA and AIINDEX Resource Records for\n                           AI Agent Discovery\n                       draft-seethiraju-dawn-dan-01 / IANA is requested to assign two new DNS Resource Record (RR) TYPE codes from the \"Resource Record (RR) TYPEs\" registry: * AIDISCA * AIINDEX / Copyright (c) 2026 IETF Trust and the persons identified as the document authors. / Agentic AI began in single-platform (intra-domain) environments, and must now be extended to the Internet's inter-domain space. ... In single platform environments, AI agents discover each other by using functionality built into their platform. / In these cases, clients will require multiple network transactions to perform lookups/resolution of the entire set of necessary metadata. ... This will incur additional transaction time, and if some network transactions are unsuccessful, clients may only gain a partial set of necessary metadata. / AIDISCA records provide an atomic representation of all AI agent metadata necessary to establish connectivity. / The AIINDEX resource record provides a mechanism for enumerating domain names at which AIDISCA records are published. ... This enables domain-scoped enumeration of AI agent publication points. / This document does not define semantic search, ranking, policy evaluation, or how to select AI agents; those functions are expected to be defined and performed separately. / Functions such as indexing, aggregation, ranking, filtering, and selection of AI agents are outside the scope of this document and may be performed by systems external to DNS.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://datatracker.ietf.org/doc/draft-seethiraju-dawn-dan/",
     "claim": "R. Seethiraju, S. Thakar, K. Shyamsunder, and E. Osterweil (Verisign), *draft-seethiraju-dawn-dan — DNS-Based Agent Naming (DAN): AIDISCA and AIINDEX Resource Records for AI Agent Discovery (IETF Datatracker)*, checked 2026-10-31",
     "date": null,
     "quote": "This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. ... Active Internet-Draft (individual) ... Ramachandra Rao Seethiraju, Sameer Thakar, Karthik Shyamsunder, Eric Osterweil / RFC stream | | (None) ... Intended RFC status | | (None) ... IESG state | | I-D Exists ... 2026-10-30 | 01 | Ramachandra Seethiraju | New version available: draft-seethiraju-dawn-dan-01.txt / Ramachandra Rao Seethiraju Verisign Email: [email redacted] Sameer Thakar Verisign Email: [email redacted] Karthik Shyamsunder Verisign / and AIINDEX Resource Records for AI Agent Discovery draft-seethiraju-dawn-dan-01 - Status - Email expansions / al. Expires 3 May 2027 [Page 6] Internet-Draft AIDISCA/AIINDEX DNS Records October 2026 1 / DNS-Based Agent Naming (DAN): AIDISCA and AIINDEX Resource Records for AI Agent Discovery",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://blog.verisign.com/security/proposed-dns-record-types-ai-agent-discovery/",
     "claim": "Verisign, *AI Agent Discovery Facilitated by Proposed DNS Resource Record Types | Verisign Blog*, checked 2026-10-31",
     "date": null,
     "quote": "authored by Ramachandra Rao Seethiraju, Sameer Thakar, Karthik Shyamsunder, and Eric Osterweil. This blog",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://github.com/verisign/dan",
     "claim": "verisign/dan (GitHub), *GitHub - verisign/dan: Open-source reference implementation of DNS-Based Agent Naming (DAN) - a DNS-based AI agent discovery · GitHub*, checked 2026-10-31",
     "date": null,
     "quote": "(TYPE65417) Generate AIINDEX records (TYPE65418) DAN records are generated using RFC3597 presentation format, allowing / dan is a proof-of-concept (PoC) reference implementation of the IETF Internet-Draft DNS-Based Agent Naming (DAN): AIDISCA and AIINDEX Resource Records for AI Agent Discovery .",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://raw.githubusercontent.com/verisign/dan/main/README.md",
     "claim": "verisign/dan (GitHub), *dan — DNS-Based Agent Naming*, checked 2026-10-31",
     "date": null,
     "quote": "implementation of the IETF Internet-Draft DNS-Based Agent Naming (DAN): AIDISCA and AIINDEX Resource Records / The repository provides tools to: - Generate AIDISCA records (TYPE65417) - Generate AIINDEX records (TYPE65418) DAN records are generated using RFC3597 presentation format",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://www.rfc-editor.org/rfc/rfc6698.html",
     "claim": "P. Hoffman and J. Schlyter, *RFC 6698: The DNS-Based Authentication of Named Entities (DANE) Transport Layer Security (TLS) Protocol: TLSA*, August 2012",
     "date": null,
     "quote": "Encrypted communication on the Internet often uses Transport Layer",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://www.rfc-editor.org/rfc/rfc9460.html",
     "claim": "B. Schwartz, M. Bishop, and E. Nygren, *RFC 9460: Service Binding and Parameter Specification via the DNS (SVCB and HTTPS Resource Records)*, November 2023",
     "date": null,
     "quote": "This document specifies the \"SVCB\" (\"Service Binding\") and \"HTTPS\" DNS resource record (RR)",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://datatracker.ietf.org/doc/draft-mozleywilliams-dnsop-dnsaid/",
     "claim": "J. Mozley and N. Williams (Infoblox), B. Sarikaya, R. Schott (Deutsche Telekom), and J. Damick (Amazon), *draft-mozleywilliams-dnsop-dnsaid — DNS for AI Discovery (IETF Datatracker; succeeded by draft-nemethi-dawn-dnsaid)*, checked 2026-10-29",
     "date": null,
     "quote": "draft-mozleywilliams-dnsop-dnsaid-02 Published: Intended Status:: Standards Track Expires: Authors:: J. Mozley Infoblox, Inc. N. Williams",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://aid.agentcommunity.org/docs/specification",
     "claim": "Agent Community (Open Agent Registry, Inc.), *Agent Identity & Discovery (AID) - v2.1.1 Specification*, 2026-10-02 (fetched 2026-10-30)",
     "date": null,
     "quote": "Specification | Agent Identity & Discovery {\"@context\":\"https://schema.org\",\"@type\":\"Organization\",\"name\":\"Open Agent Registry,",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://datatracker.ietf.org/doc/draft-narajala-courtney-ansv2/",
     "claim": "Scott Courtney, Vineeth Sai Narajala, Ken Huang, Idan Habler, and Akram Sheriff, *draft-narajala-courtney-ansv2 — Agent Name Service v2 (ANS): A Domain-Anchored Identity Layer for Autonomous AI Agents (IETF Datatracker)*, checked 2026-10-30",
     "date": null,
     "quote": "Document Type Active Internet-Draft (individual) Authors Scott Courtney, Vineeth Sai Narajala, Ken Huang, Idan Habler, Akram Sheriff Last updated 2026-10-26 Replaces draft-narajala-ans RFC stream (None) Intended RFC status (None)",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://www.ietf.org/archive/id/draft-narajala-courtney-ansv2-02.txt",
     "claim": "S. Courtney (GoDaddy), V. S. Narajala (OWASP), K. Huang (DistributedApps.ai), I. Habler (OWASP), and A. Sheriff (Cisco Systems), *Agent Name Service v2 (ANS): A Domain-Anchored Identity Layer for Autonomous AI Agents (draft-narajala-courtney-ansv2-02)*, 26 October 2026; expires 29 April 2027",
     "date": null,
     "quote": "C2SP tlog-checkpoint signed-note format [C2SP]",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://agenticresourcediscovery.org/spec/",
     "claim": "Agentic Resource Discovery Project (ards-project), *Agentic Resource Discovery Specification v0.91*, 2026-08-26; fetched 2026-10-30",
     "date": null,
     "quote": "Version: v0.91 Status: Proposal Date: August 26, 2026",
     "ref": 12
    }
   ],
   "form": "dns-record",
   "governance": "IETF individual Internet-Draft (not adopted by a working group; Datatracker lists no RFC stream). 'dawn' in the draft filename matches the acronym of the IETF DAWN (Discovery of Agents With Names) working group, but this is not a DAWN working-group document",
   "group": null,
   "history": [
    {
     "date": "2026-09-07",
     "note": "created as a new discover-step record; verified against draft-seethiraju-dawn-dan-00 (datatracker.ietf.org), the verisign/dan proof-of-concept repository, and Verisign's 2026-09-01 blog announcement"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "dan",
   "implementation": "prototype",
   "last_verified": "2026-11-12",
   "name": "DNS-Based Agent Naming",
   "native_status": "Active Internet-Draft (individual, draft-seethiraju-dawn-dan-01), Intended status: Standards Track; IESG state 'I-D Exists'; expires 3 May 2027",
   "origin": {
    "date": "2026-06-05",
    "org": "Ramachandra Rao Seethiraju, Sameer Thakar, Karthik Shyamsunder, Eric Osterweil (Verisign) — IETF individual Internet-Draft"
   },
   "part_of": null,
   "parties": [
    "agent-agent",
    "agent-registry"
   ],
   "phase": "draft",
   "probe": {
    "method": "DNS query",
    "on_absent": "No AIINDEX/AIDISCA records resolve at this zone; the domain does not publish DAN-discoverable agents. Because the two RR types are not yet IANA-assigned to stable mnemonics, records are typically published and queried in RFC3597 generic form (TYPE65501/TYPE65502); most public DNS resolvers, zone editors, and tooling do not recognize AIDISCA/AIINDEX by name yet.",
    "parse": "AIINDEX RDATA contains an AI Agent Domain Name List (each entry a domain name under the zone); AIDISCA RDATA contains AI Agent Proto (1=MCP, 2=A2A), Capabilities (comma-separated string), Service Endpoint (URL), and Certificate Association Data (DANE-style usage/selector/matching-type + hash), plus an optional Extensions field (e.g. an A2A Agent Card URL)",
    "path": "QNAME=_agents.{origin} QTYPE=TYPE65502 (AIINDEX) to enumerate published agents; then QNAME=<name>._agents.{origin} QTYPE=TYPE65501 (AIDISCA) for each listed name"
   },
   "question": "Given a domain, which AI agents does it publish, and how can I locate and cryptographically bind to their service endpoint using DNS alone?",
   "scope": "general",
   "spec_url": "https://datatracker.ietf.org/doc/draft-seethiraju-dawn-dan/",
   "step": "discover",
   "summary_md": "**DNS-Based Agent Naming** (`DAN`), `draft-seethiraju-dawn-dan-01`, defines an approach for AI agent discovery. DAN allows AI agents to be given DNS domain names as inter-domain names, and to advertise the necessary and sufficient set of metadata needed to locate services and connect securely. `AIDISCA` is the AI agent association record. The `AIINDEX` RR enables advertisement of a DNS zone's available AI agents. This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. Document type is Active Internet-Draft (individual). Authors are Ramachandra Rao Seethiraju, Sameer Thakar, Karthik Shyamsunder, and Eric Osterweil. This approach defines a new `AIDISCA` record that uses DANE semantics directly, so that any existing trust or recognition that is already associated with the DNS zone containing an AIDISCA record can be transitively associated with a named AI agent. This record atomically associates capabilities, AI agent protocol, and an X.509 certificate to an AI agent, based on name resolution. Implementations SHOULD publish `AIDISCA` records beneath a dedicated `_agents` label to support predictable discovery and operational consistency. Other naming conventions MAY be used where deployment requirements differ. `AIINDEX` records SHOULD be published at the dedicated `_agents` label, for example, `_agents.example.com`. Zone administrators MAY publish AIINDEX records at other locations where deployment requirements differ. `draft-seethiraju-dawn-dan-01` states Intended status: Standards Track. It is dated 30 October 2026 and names Verisign. This Internet-Draft will expire on 3 May 2027. RFC stream is (None), Intended RFC status is (None), and IESG state is I-D Exists. The history table records `2026-10-30` as revision `01`, New version available: `draft-seethiraju-dawn-dan-01.txt`.",
   "track": "ietf",
   "version": {
    "label": "draft-seethiraju-dawn-dan-01",
    "date": "2026-10-30"
   },
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-seethiraju-dawn-dan"
    }
   ],
   "use_cases": [
    "agent-naming",
    "discover-my-api",
    "describe-agent-capabilities"
   ],
   "audience": [
    "standards-body",
    "platform",
    "agent-builder"
   ],
   "pairs_with": [
    "dns-aid",
    "aid",
    "ans",
    "ard"
   ],
   "prerequisites": [],
   "ietf_tracker": {
    "doc": "draft-seethiraju-dawn-dan",
    "rev": "01",
    "state": "active",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-10-30",
    "expires_utc": "2027-05-03",
    "as_of": "2026-11-07",
    "source": "https://datatracker.ietf.org/doc/draft-seethiraju-dawn-dan/",
    "source_label": "per IETF Datatracker"
   },
   "hatnote_md": "",
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "web_discovery",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": null,
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**DNS-Based Agent Naming** (`DAN`), `draft-seethiraju-dawn-dan-01`, defines an approach for AI agent discovery. DAN allows AI agents to be given DNS domain names as inter-domain names, and to advertise the necessary and sufficient set of metadata needed to locate services and connect securely. `AIDISCA` is the AI agent association record. The `AIINDEX` RR enables advertisement of a DNS zone's available AI agents. [1] This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. Document type is Active Internet-Draft (individual). Authors are Ramachandra Rao Seethiraju, Sameer Thakar, Karthik Shyamsunder, and Eric Osterweil. [2] This approach defines a new `AIDISCA` record that uses DANE semantics directly, so that any existing trust or recognition that is already associated with the DNS zone containing an AIDISCA record can be transitively associated with a named AI agent. This record atomically associates capabilities, AI agent protocol, and an X.509 certificate to an AI agent, based on name resolution. [1] Implementations SHOULD publish `AIDISCA` records beneath a dedicated `_agents` label to support predictable discovery and operational consistency. Other naming conventions MAY be used where deployment requirements differ. [1] `AIINDEX` records SHOULD be published at the dedicated `_agents` label, for example, `_agents.example.com`. Zone administrators MAY publish AIINDEX records at other locations where deployment requirements differ. [1] `draft-seethiraju-dawn-dan-01` states Intended status: Standards Track. It is dated 30 October 2026 and names Verisign. This Internet-Draft will expire on 3 May 2027. [1] RFC stream is (None), Intended RFC status is (None), and IESG state is I-D Exists. The history table records `2026-10-30` as revision `01`, New version available: `draft-seethiraju-dawn-dan-01.txt`. [2]",
   "v05_identity_sentence_md": "**DNS-Based Agent Naming** (`DAN`), `draft-seethiraju-dawn-dan-01`, defines an approach for AI agent discovery. DAN allows AI agents to be given DNS domain names as inter-domain names, and to advertise the necessary and sufficient set of metadata needed to locate services and connect securely. `AIDISCA` is the AI agent association record. The `AIINDEX` RR enables advertisement of a DNS zone's available AI agents. [1] This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. Document type is Active Internet-Draft (individual). Authors are Ramachandra Rao Seethiraju, Sameer Thakar, Karthik Shyamsunder, and Eric Osterweil. [2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Discover](/category/discover/) (`discover`)"
    },
    {
     "label": "Form",
     "value_md": "DNS record (`dns-record`)"
    },
    {
     "label": "Originated by",
     "value_md": "Verisign (Ramachandra Rao Seethiraju, Sameer Thakar, Karthik Shyamsunder, and Eric Osterweil) [2][3]"
    },
    {
     "label": "Governed by",
     "value_md": "Individual IETF Internet-Draft submission (`draft-seethiraju-dawn-dan`; no working group sponsorship) [2]"
    },
    {
     "label": "Track",
     "value_md": "IETF Internet-Draft (Standards Track) [1]"
    },
    {
     "label": "Status",
     "value_md": "Active Internet-Draft (individual, `draft-seethiraju-dawn-dan-01`, dated 30 October 2026; Intended status: Standards Track; IESG state 'I-D Exists'; expires 3 May 2027) [1]"
    },
    {
     "label": "Version",
     "value_md": "`draft-seethiraju-dawn-dan-00` (5 June 2026) / `draft-seethiraju-dawn-dan-01` (October 2026, expires 3 May 2027) [2]"
    },
    {
     "label": "Wire format",
     "value_md": "Binary DNS RDATA for `AIDISCA` and `AIINDEX` (IANA RR type codes TBD in the draft; RFC 3597 private-use `TYPE65417` for `AIDISCA` and `TYPE65418` for `AIINDEX` in the `verisign/dan` proof of concept) [1][2][4]"
    },
    {
     "label": "Specification",
     "value_md": "https://datatracker.ietf.org/doc/draft-seethiraju-dawn-dan/ [2]"
    },
    {
     "label": "Found at",
     "value_md": "DNS queries at `<agent>._agents.<zone>` (`AIDISCA`) and `_agents.<zone>` (`AIINDEX`) [4][5]"
    },
    {
     "label": "IETF state",
     "value_md": "`draft-seethiraju-dawn-dan-01` · **Active Internet-Draft** (published 30 October 2026; expires 3 May 2027) · Individual submission [1]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust Legal Provisions (BCP 78) [1]"
    }
   ],
   "v05_problem_md": "Agentic AI began in single-platform (intra-domain) environments, and must now be extended to the Internet's inter-domain space. In single platform environments, AI agents discover each other by using functionality built into their platform. [1] In these cases, clients will require multiple network transactions to perform lookups/resolution of the entire set of necessary metadata. This will incur additional transaction time, and if some network transactions are unsuccessful, clients may only gain a partial set of necessary metadata. [1] AIDISCA records provide an atomic representation of all AI agent metadata necessary to establish connectivity. [1] The AIINDEX resource record provides a mechanism for enumerating domain names at which AIDISCA records are published. This enables domain-scoped enumeration of AI agent publication points. [1] This document does not define semantic search, ranking, policy evaluation, or how to select AI agents; those functions are expected to be defined and performed separately. [1] Functions such as indexing, aggregation, ranking, filtering, and selection of AI agents are outside the scope of this document and may be performed by systems external to DNS. [1]",
   "v05_mechanism_delta_md": "AIDISCA records provide an atomic representation of all AI agent metadata necessary to establish connectivity. [1] The AIINDEX resource record provides a mechanism for enumerating domain names at which AIDISCA records are published. This enables domain-scoped enumeration of AI agent publication points. [1]",
   "v05_scope_boundary_md": "This document does not define semantic search, ranking, policy evaluation, or how to select AI agents; those functions are expected to be defined and performed separately. [1] Functions such as indexing, aggregation, ranking, filtering, and selection of AI agents are outside the scope of this document and may be performed by systems external to DNS. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "DNS-Based Authentication of Named Entities (DANE, RFC 6698)",
      "spec_or_rfc": "RFC 6698",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "DAN publishes AIINDEX (IANA RR type TBD; private-use TYPE65418 in the Verisign PoC) at `_agents.<domain>` and AIDISCA (TYPE65417 in the PoC) at `<agent-name>._agents.<domain>`, folding a DANE-style certificate association into AIDISCA, whereas DANE publishes TLSA (type 52) under `_port._tcp.<name>`. [2][5][6]"
     },
     {
      "name": "DNS SRV & SVCB Records (RFC 2782 / RFC 9460)",
      "spec_or_rfc": "RFC 2782 / RFC 9460",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "DAN defines two new dedicated DNS RR types, AIDISCA and AIINDEX (using RFC 3597 private-use TYPE65417 and TYPE65418 in the Verisign PoC), rather than profiling RFC 9460 SVCB. [2][5][7]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "dns-aid",
      "target_name": "DNS-AID (DNS for AI Discovery, draft-nemethi-dawn-dnsaid)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "DAN stores the organization index as an AIINDEX record (TYPE65418 in the Verisign PoC) at `_agents.<domain>`, while DNS-AID (draft-nemethi-dawn-dnsaid, succeeding draft-mozleywilliams-dnsop-dnsaid) stores it as an SVCB record at `_index._agents.<domain>`. [2][5][8]"
     },
     {
      "target_id": "aid",
      "target_name": "Agent Identity & Discovery (AID)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "DAN uses a dedicated AIDISCA record (TYPE65417 in the Verisign PoC), carrying a protocol identifier, capabilities string, endpoint URL, and certificate association, while AID uses a single TXT record at `_agent.<domain>`. [2][5][9]"
     },
     {
      "target_id": "ans",
      "target_name": "Agent Name Service v2 (ANS)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "DAN names agents with dedicated DNS RR types AIINDEX and AIDISCA validated with DNSSEC and DANE certificate associations, while ANS v2 uses DNS-AID SVCB records (or an opt-in _ans TXT profile) alongside X.509 certificates and a C2SP transparency log. [2][10][11]"
     },
     {
      "target_id": "ard",
      "target_name": "Agentic Resource Discovery (ARD)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "DAN's records are DNS RDATA of types AIINDEX and AIDISCA, while ARD's required document is JSON fetched at /.well-known/ard.json. [2][12]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Discover protocols](/category/discover/)** — Category index for `discover` standards."
    }
   ],
   "v05_compiled_md": "---\nid: dan\ntitle: \"DNS-Based Agent Naming\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: discover\nform: dns-record\nwire_archetype: web_discovery\nspec_url: https://datatracker.ietf.org/doc/draft-seethiraju-dawn-dan/\nlast_checked: 2026-11-12\n---\n\n# DNS-Based Agent Naming\n\n**Category:** [Discover](/category/discover/) (`discover`) · **Form:** DNS record (`dns-record`) · **Last checked:** 2026-11-12\n\n**DNS-Based Agent Naming** (`DAN`), `draft-seethiraju-dawn-dan-01`, defines an approach for AI agent discovery. DAN allows AI agents to be given DNS domain names as inter-domain names, and to advertise the necessary and sufficient set of metadata needed to locate services and connect securely. `AIDISCA` is the AI agent association record. The `AIINDEX` RR enables advertisement of a DNS zone's available AI agents. [1] This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. Document type is Active Internet-Draft (individual). Authors are Ramachandra Rao Seethiraju, Sameer Thakar, Karthik Shyamsunder, and Eric Osterweil. [2] This approach defines a new `AIDISCA` record that uses DANE semantics directly, so that any existing trust or recognition that is already associated with the DNS zone containing an AIDISCA record can be transitively associated with a named AI agent. This record atomically associates capabilities, AI agent protocol, and an X.509 certificate to an AI agent, based on name resolution. [1] Implementations SHOULD publish `AIDISCA` records beneath a dedicated `_agents` label to support predictable discovery and operational consistency. Other naming conventions MAY be used where deployment requirements differ. [1] `AIINDEX` records SHOULD be published at the dedicated `_agents` label, for example, `_agents.example.com`. Zone administrators MAY publish AIINDEX records at other locations where deployment requirements differ. [1] `draft-seethiraju-dawn-dan-01` states Intended status: Standards Track. It is dated 30 October 2026 and names Verisign. This Internet-Draft will expire on 3 May 2027. [1] RFC stream is (None), Intended RFC status is (None), and IESG state is I-D Exists. The history table records `2026-10-30` as revision `01`, New version available: `draft-seethiraju-dawn-dan-01.txt`. [2]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Discover](/category/discover/) (`discover`) |\n| **Form** | DNS record (`dns-record`) |\n| **Originated by** | Verisign (Ramachandra Rao Seethiraju, Sameer Thakar, Karthik Shyamsunder, and Eric Osterweil) [2][3] |\n| **Governed by** | Individual IETF Internet-Draft submission (`draft-seethiraju-dawn-dan`; no working group sponsorship) [2] |\n| **Track** | IETF Internet-Draft (Standards Track) [1] |\n| **Status** | Active Internet-Draft (individual, `draft-seethiraju-dawn-dan-01`, dated 30 October 2026; Intended status: Standards Track; IESG state 'I-D Exists'; expires 3 May 2027) [1] |\n| **Version** | `draft-seethiraju-dawn-dan-00` (5 June 2026) / `draft-seethiraju-dawn-dan-01` (October 2026, expires 3 May 2027) [2] |\n| **Wire format** | Binary DNS RDATA for `AIDISCA` and `AIINDEX` (IANA RR type codes TBD in the draft; RFC 3597 private-use `TYPE65417` for `AIDISCA` and `TYPE65418` for `AIINDEX` in the `verisign/dan` proof of concept) [1][2][4] |\n| **Specification** | https://datatracker.ietf.org/doc/draft-seethiraju-dawn-dan/ [2] |\n| **Found at** | DNS queries at `<agent>._agents.<zone>` (`AIDISCA`) and `_agents.<zone>` (`AIINDEX`) [4][5] |\n| **IETF state** | `draft-seethiraju-dawn-dan-01` · **Active Internet-Draft** (published 30 October 2026; expires 3 May 2027) · Individual submission [1] |\n| **Licence** | IETF Trust Legal Provisions (BCP 78) [1] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nAgentic AI began in single-platform (intra-domain) environments, and must now be extended to the Internet's inter-domain space. In single platform environments, AI agents discover each other by using functionality built into their platform. [1] In these cases, clients will require multiple network transactions to perform lookups/resolution of the entire set of necessary metadata. This will incur additional transaction time, and if some network transactions are unsuccessful, clients may only gain a partial set of necessary metadata. [1] AIDISCA records provide an atomic representation of all AI agent metadata necessary to establish connectivity. [1] The AIINDEX resource record provides a mechanism for enumerating domain names at which AIDISCA records are published. This enables domain-scoped enumeration of AI agent publication points. [1] This document does not define semantic search, ranking, policy evaluation, or how to select AI agents; those functions are expected to be defined and performed separately. [1] Functions such as indexing, aggregation, ranking, filtering, and selection of AI agents are outside the scope of this document and may be performed by systems external to DNS. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **DNS-Based Authentication of Named Entities (DANE, RFC 6698)** | `RFC 6698` | Analogous to classic standard | DAN publishes AIINDEX (IANA RR type TBD; private-use TYPE65418 in the Verisign PoC) at `_agents.<domain>` and AIDISCA (TYPE65417 in the PoC) at `<agent-name>._agents.<domain>`, folding a DANE-style certificate association into AIDISCA, whereas DANE publishes TLSA (type 52) under `_port._tcp.<name>`. [2][5][6] |\n| **DNS SRV & SVCB Records (RFC 2782 / RFC 9460)** | `RFC 2782 / RFC 9460` | Analogous to classic standard | DAN defines two new dedicated DNS RR types, AIDISCA and AIINDEX (using RFC 3597 private-use TYPE65417 and TYPE65418 in the Verisign PoC), rather than profiling RFC 9460 SVCB. [2][5][7] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[DNS-AID (DNS for AI Discovery, draft-nemethi-dawn-dnsaid)](/protocols/dns-aid/)** | Peer alternative | DAN stores the organization index as an AIINDEX record (TYPE65418 in the Verisign PoC) at `_agents.<domain>`, while DNS-AID (draft-nemethi-dawn-dnsaid, succeeding draft-mozleywilliams-dnsop-dnsaid) stores it as an SVCB record at `_index._agents.<domain>`. [2][5][8] |\n| **[Agent Identity & Discovery (AID)](/protocols/aid/)** | Peer alternative | DAN uses a dedicated AIDISCA record (TYPE65417 in the Verisign PoC), carrying a protocol identifier, capabilities string, endpoint URL, and certificate association, while AID uses a single TXT record at `_agent.<domain>`. [2][5][9] |\n| **[Agent Name Service v2 (ANS)](/protocols/ans/)** | Peer alternative | DAN names agents with dedicated DNS RR types AIINDEX and AIDISCA validated with DNSSEC and DANE certificate associations, while ANS v2 uses DNS-AID SVCB records (or an opt-in _ans TXT profile) alongside X.509 certificates and a C2SP transparency log. [2][10][11] |\n| **[Agentic Resource Discovery (ARD)](/protocols/ard/)** | Peer alternative | DAN's records are DNS RDATA of types AIINDEX and AIDISCA, while ARD's required document is JSON fetched at /.well-known/ard.json. [2][12] |\n\n---\n\n## See also\n\n- **Category:** [Discover protocols](/category/discover/)\n\n---\n\n## References\n\n1. R. Seethiraju, S. Thakar, K. Shyamsunder, and E. Osterweil (Verisign), *DNS-Based Agent Naming (DAN): AIDISCA and AIINDEX Resource Records for AI Agent Discovery (draft-seethiraju-dawn-dan-01)* (30 October 2026) — <https://www.ietf.org/archive/id/draft-seethiraju-dawn-dan-01.txt>\n2. R. Seethiraju, S. Thakar, K. Shyamsunder, and E. Osterweil (Verisign), *draft-seethiraju-dawn-dan — DNS-Based Agent Naming (DAN): AIDISCA and AIINDEX Resource Records for AI Agent Discovery (IETF Datatracker)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/draft-seethiraju-dawn-dan/>\n3. Verisign, *AI Agent Discovery Facilitated by Proposed DNS Resource Record Types | Verisign Blog* (checked 2026-10-31) — <https://blog.verisign.com/security/proposed-dns-record-types-ai-agent-discovery/>\n4. verisign/dan (GitHub), *GitHub - verisign/dan: Open-source reference implementation of DNS-Based Agent Naming (DAN) - a DNS-based AI agent discovery · GitHub* (checked 2026-10-31) — <https://github.com/verisign/dan>\n5. verisign/dan (GitHub), *dan — DNS-Based Agent Naming* (checked 2026-10-31) — <https://raw.githubusercontent.com/verisign/dan/main/README.md>\n6. P. Hoffman and J. Schlyter, *RFC 6698: The DNS-Based Authentication of Named Entities (DANE) Transport Layer Security (TLS) Protocol: TLSA* (August 2012) — <https://www.rfc-editor.org/rfc/rfc6698.html>\n7. B. Schwartz, M. Bishop, and E. Nygren, *RFC 9460: Service Binding and Parameter Specification via the DNS (SVCB and HTTPS Resource Records)* (November 2023) — <https://www.rfc-editor.org/rfc/rfc9460.html>\n8. J. Mozley and N. Williams (Infoblox), B. Sarikaya, R. Schott (Deutsche Telekom), and J. Damick (Amazon), *draft-mozleywilliams-dnsop-dnsaid — DNS for AI Discovery (IETF Datatracker; succeeded by draft-nemethi-dawn-dnsaid)* (checked 2026-10-29) — <https://datatracker.ietf.org/doc/draft-mozleywilliams-dnsop-dnsaid/>\n9. Agent Community (Open Agent Registry, Inc.), *Agent Identity & Discovery (AID) - v2.1.1 Specification* (2026-10-02 (fetched 2026-10-30)) — <https://aid.agentcommunity.org/docs/specification>\n10. Scott Courtney, Vineeth Sai Narajala, Ken Huang, Idan Habler, and Akram Sheriff, *draft-narajala-courtney-ansv2 — Agent Name Service v2 (ANS): A Domain-Anchored Identity Layer for Autonomous AI Agents (IETF Datatracker)* (checked 2026-10-30) — <https://datatracker.ietf.org/doc/draft-narajala-courtney-ansv2/>\n11. S. Courtney (GoDaddy), V. S. Narajala (OWASP), K. Huang (DistributedApps.ai), I. Habler (OWASP), and A. Sheriff (Cisco Systems), *Agent Name Service v2 (ANS): A Domain-Anchored Identity Layer for Autonomous AI Agents (draft-narajala-courtney-ansv2-02)* (26 October 2026; expires 29 April 2027) — <https://www.ietf.org/archive/id/draft-narajala-courtney-ansv2-02.txt>\n12. Agentic Resource Discovery Project (ards-project), *Agentic Resource Discovery Specification v0.91* (2026-08-26; fetched 2026-10-30) — <https://agenticresourcediscovery.org/spec/>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "MCP Registry",
   "adoption": {
    "level": "observed",
    "by": "Official MCP Registry, GitHub MCP Registry, PulseMCP, Glama, Kong Konnect MCP Registry, mcp-publisher, VS Code, GitHub Copilot, and 6 other verified implementations",
    "probe_run": null
   },
   "aliases": [],
   "analog": "a package registry (npm) for tool servers",
   "audience": [
    "agent-builder",
    "platform"
   ],
   "collisions": [],
   "discovery": {
    "mechanism": "Registry API listing endpoint",
    "path": "https://registry.modelcontextprotocol.io · GET /v0.1/servers (cursor pagination, updated_since filter), GET /v0.1/servers/{serverName}/versions, GET /v0.1/servers/{serverName}/versions/{version} (or latest)"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://modelcontextprotocol.io/registry/about",
     "claim": "Model Context Protocol, *The MCP Registry*, checked 2026-10-30",
     "date": null,
     "quote": "The MCP Registry is the official centralized metadata repository for publicly accessible MCP servers / Server metadata is stored in a standardized server.json format / The MCP Registry is intended to be consumed primarily by downstream aggregators, such as MCP server marketplaces. / The MCP Registry is not intended to be directly consumed by host applications. / Server metadata is stored in a standardized server.json format, which contains: The server's unique name (e.g., io.github.user/server-name) Where to locate the server (e.g., npm package name, remote server URL) Execution instructions (e.g., command-line args, env vars) / The MCP Registry is currently in preview. / Breaking changes or data resets may occur before general availability. / The MCP Registry / The MCP Registry does not support private servers. / the official MCP Registry codebase is not designed for self-hosting / The MCP Registry is the official centralized metadata repository for publicly accessible MCP servers, backed by major trusted contributors to the MCP ecosystem such as Anthropic, GitHub, PulseMCP, and Microsoft. / Package registries — such as npm, PyPI, and Docker Hub — host packages with code and binaries. The MCP Registry hosts metadata that points to those packages. / The MCP Registry is not intended to be directly consumed by host applications. Instead, host applications should consume other MCP registries, such as downstream marketplaces, via a REST API conforming to the official MCP Registry’s OpenAPI spec. / The MCP Registry focuses on namespace authentication and metadata hosting, while relying on the broader ecosystem for security scanning of actual server code. / Manual takedown - The registry maintainers can manually remove spam or malicious servers. / rel=\"mcp-server-card\"",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://modelcontextprotocol.io/registry/faq",
     "claim": "Model Context Protocol, *Frequently Asked Questions*, checked 2026-10-30",
     "date": null,
     "quote": "\"MCP registry\" - A third-party service that provides an MCP Registry API.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://modelcontextprotocol.io/registry/registry-aggregators",
     "claim": "Model Context Protocol, *MCP Registry Aggregators*, checked 2026-10-30",
     "date": null,
     "quote": "The GET /v0.1/servers endpoint supports cursor-based pagination. / The MCP Registry provides an unauthenticated read-only REST API / The base URL for the MCP Registry REST API is https://registry.modelcontextprotocol.io. / updated_since query parameter / GET /v0.1/servers/{serverName}/versions/{version} - Get a specific version of a server. Use the special version latest / GET /v0.1/servers - List all servers. GET /v0.1/servers/{serverName}/versions - List all versions of a server. GET /v0.1/servers/{serverName}/versions/{version} - Get a specific version of a server. Use the special version latest / The MCP Registry does not provide uptime or data durability guarantees. / Aggregators are expected to scrape data on a regular but infrequent basis / The subregistry OpenAPI spec allows subregistries to inject custom metadata via the _meta field. / com.example.subregistry/custom / GET /v0.1/servers - List all servers. GET /v0.1/servers/{serverName}/versions - List all versions of a server.",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://blog.modelcontextprotocol.io/posts/2025-09-08-mcp-registry-preview/",
     "claim": "David Soria Parra, Adam Jones, Tadas Antanavicius, Toby Padilla, and Theodora Chu, *Introducing the MCP Registry*, published 2025-09-08",
     "date": null,
     "quote": "In February 2025, it began as a grassroots project when MCP creators David Soria Parra and Justin Spahr-Summers asked the PulseMCP and Goose teams to help build a centralized community registry. / The MCP Registry is now available in preview. / September 8, 2025 / In building a central registry, it was important to us not to take away from existing registries that the community and companies have built. / The MCP Registry serves as a primary source of truth for publicly available MCP servers / organizations can choose to create sub-registries based on custom criteria / Public subregistries like opinionated \"MCP marketplaces\" associated with each MCP client are free to augment and enhance data they ingest from the upstream MCP Registry. / Private subregistries will exist within enterprises that have strict privacy and security requirements / but the MCP Registry gives these enterprises a single upstream data source they can build upon. / it's the centralized location where MCP server maintainers publish and maintain their self-reported information / for these downstream consumers to massage and deliver to their end-users.",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://modelcontextprotocol.io/community/working-groups/registry",
     "claim": "Model Context Protocol, *Registry Charter*, initial charter 2026-04-08; lead change 2026-07-30; checked 2026-10-30",
     "date": null,
     "quote": "The WG owns the registry service, the server.json schema, the registry API specification, and the sub-registry ecosystem that further distributes server metadata. / Registry API v1 GA Ideating TBD / 2026-04-08 Initial charter / Lead Radoslav Dimitrov Stacklok / 2026-07-30 @tadasant stepped down as Lead; @rdimitrov is now sole Lead / Spec changes (additive) WG consensus → Core Maintainer approval / Hosting, distributing, or executing MCP server code or binaries - the registry is a metadata catalog, not a package registry. / The codebase supports this instance only and is not intended for external deployments. / Operation, reliability, and evolution of the hosted registry at registry.modelcontextprotocol.io",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://www.anthropic.com/news/donating-the-model-context-protocol-and-establishing-of-the-agentic-ai-foundation",
     "claim": "Anthropic, *Donating the Model Context Protocol and establishing the Agentic AI Foundation*, published 2025-12-09",
     "date": null,
     "quote": "Today, we're donating the Model Context Protocol (MCP) to the Agentic AI Foundation (AAIF), a directed fund under the Linux Foundation / Published Dec 9, 2025 / a directed fund under the Linux Foundation",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://raw.githubusercontent.com/modelcontextprotocol/registry/main/docs/reference/api/CHANGELOG.md",
     "claim": "Model Context Protocol, *Registry API Changelog*, v0.1 introduction 2025-10-17; fetched 2026-10-30",
     "date": null,
     "quote": "Introduced /v0.1/ as a stable API version while /v0/ continues as the development version. / Introduced `/v0.1/` as a stable API version while `/v0/` continues as the development version.",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://github.com/modelcontextprotocol/registry",
     "claim": "modelcontextprotocol/registry, *A community driven registry service for Model Context Protocol (MCP) servers*, API freeze note 2025-10-24; checked 2026-10-30",
     "date": null,
     "quote": "2025-10-24 update : The Registry API has entered an API freeze (v0.1) / This freeze applies to v0.1 while development continues on v0. / 2025-10-24 update … The Registry API has entered an … API freeze (v0.1) … This freeze applies to v0.1 while development continues on v0. / modelcontextprotocol/registry: A community driven registry service for Model Context Protocol (MCP) servers. / Use the mcp-publisher CLI from your server's own project instead. / Publishing an MCP server does not happen through a pull request to this repository. / Adding a server.json, a server directory, or an entry in data/seed.json will not publish or list your server, even if the PR is merged.",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://registry.modelcontextprotocol.io/v0.1/version",
     "claim": "Official MCP Registry, *GET /v0.1/version*, build_time 2026-11-10T11:14:06Z; checked 2026-11-11",
     "date": null,
     "quote": "{\"version\":\"1.8.9\",\"git_commit\":\"ba94f657e1ecd4ddff11baa25ad84cda26c2b854\",\"build_time\":\"2026-11-10T11:14:06Z\"}",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://www.linuxfoundation.org/press/linux-foundation-announces-the-formation-of-the-agentic-ai-foundation",
     "claim": "The Linux Foundation, *Linux Foundation Announces the Formation of the Agentic AI Foundation (AAIF), Anchored by New Project Contributions Including Model Context Protocol (MCP), goose and AGENTS.md*, published 2025-12-09",
     "date": null,
     "quote": "SAN FRANCISCO, Dec. 9, 2025 / founding contributions of three leading projects driving innovation in open source AI; Anthropic's Model Context Protocol (MCP)",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://raw.githubusercontent.com/modelcontextprotocol/registry/main/docs/reference/server-json/CHANGELOG.md",
     "claim": "Model Context Protocol, *Server JSON Schema Changelog*, release 2025-12-11; fetched 2026-10-30",
     "date": null,
     "quote": "## 2025-12-11 / # Server JSON Schema Changelog",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
     "claim": "Model Context Protocol, *server.json JSON Schema*, schema 2025-12-11; fetched 2026-10-30",
     "date": null,
     "quote": "\"$id\": \"https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json\" / Schema for a static representation of an MCP server. Used in various contexts related to discovery, installation, and configuration. / Server name in reverse-DNS format. Must contain exactly one forward slash separating namespace from server name. / Registry type indicating how to download packages (e.g., 'npm', 'pypi', 'oci', 'nuget', 'mcpb') / Package identifier - either a package name (for registries) or URL (for direct downloads) / Package version. Must be a specific version. Version ranges are rejected / Transport protocol configuration for the package",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://registry.modelcontextprotocol.io/openapi.yaml",
     "claim": "Official MCP Registry, *Official MCP Registry OpenAPI*, OpenAPI 3.1.0; fetched 2026-10-30",
     "date": null,
     "quote": "openapi: 3.1.0 / title: Official MCP Registry / /v0.1/servers: / Get a paginated list with one record per server version. / /v0.1/version:",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://raw.githubusercontent.com/modelcontextprotocol/registry/main/LICENSE",
     "claim": "Model Context Protocol, *modelcontextprotocol/registry Repository LICENSE*, fetched 2026-11-12",
     "date": null,
     "quote": "The MCP project is undergoing a licensing transition from the MIT License to the Apache License, Version 2.0 (\"Apache-2.0\").",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://modelcontextprotocol.io/registry/package-types",
     "claim": "Model Context Protocol, *MCP Registry Supported Package Types*, checked 2026-10-30",
     "date": null,
     "quote": "npm packages use \"registryType\": \"npm\" in server.json. For example:",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://github.com/modelcontextprotocol/registry/blob/main/docs/reference/api/official-registry-api.md",
     "claim": "Model Context Protocol Registry, *Official Registry API*, checked 2026-11-06",
     "date": null,
     "quote": "The official registry implements the Generic Registry API with the following specific configurations and extensions: / - **Production**: `https://registry.modelcontextprotocol.io` / - **Staging**: `https://staging.registry.modelcontextprotocol.io` / The official registry extends the `GET /v0.1/servers` endpoint with additional query parameters for improved discovery and synchronization: / - `updated_since` - Filter servers updated after RFC3339 timestamp / - `search` - Case-insensitive substring search on server names / - `version` - Filter by version (`latest` for latest versions only, or an exact version such as `1.2.3`) / - `include_deleted` - Include deleted servers in results / A nonempty search must contain at least three Unicode characters after trimming surrounding whitespace. / Shorter or whitespace-only searches return HTTP `422` before database work. / To retrieve only the latest version of each matching server, pass `version=latest`. / Returned records have `_meta[\"io.modelcontextprotocol.registry/official\"].isLatest` set to `true`. / use `GET /v0.1/servers/{url-encoded-server-name}/versions/latest` / The `GET /v0.1/servers/{serverName}/versions` endpoint returns all versions of a server. / Keep the same filters when following `metadata.nextCursor` to subsequent pages. / **GitHub OAuth** - For `io.github.*` namespaces / **GitHub OIDC** - For publishing from GitHub Actions / POST `/v0.1/validate` - Validate a `server.json` without publishing it. Used by `mcp-publisher validate`.",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://github.com/modelcontextprotocol/registry/blob/main/docs/reference/server-json/generic-server-json.md",
     "claim": "Model Context Protocol Registry, *server.json format specification*, checked 2026-11-06",
     "date": null,
     "quote": "A `server.json` file is a standardized way to describe MCP servers for registry publishing, client discovery, and package management. / \"type\": \"streamable-http\" / \"type\": \"sse\", \"url\": \"https://mcp.anonymous.modelcontextprotocol.io/sse\" / https://anonymous.modelcontextprotocol.io/mcp/{tenant_id} / ### Server with Remote and Package Options / \"registryType\": \"cargo\" / \"registryBaseUrl\": \"https://crates.io\"",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://github.com/modelcontextprotocol/registry/blob/main/docs/reference/server-json/official-registry-requirements.md",
     "claim": "Model Context Protocol Registry, *Official Registry Requirements for server.json*, checked 2026-11-06",
     "date": null,
     "quote": "- **Namespace authentication** - Servers are published under appropriate namespaces / - **Package ownership verification** - Publishers actually control referenced packages / - **Restricted registry base urls** - Packages are from trusted public registries / - **`_meta` namespace restrictions** - Restricted to `publisher` key only / This document describes the additional requirements and validation rules that apply when publishing to the official MCP Registry at `registry.modelcontextprotocol.io`. / Publishers must prove ownership of their namespace. / All packages must include metadata proving the publisher owns them. / This prevents impersonation and ensures authenticity / Private registries and alternative mirrors are not allowed. / **NPM**: `https://registry.npmjs.org` only / **PyPI**: `https://pypi.org` only / **NuGet**: `https://api.nuget.org/v3/index.json` only / **Cargo**: `https://crates.io` only / **MCPB**: `https://github.com` releases and `https://gitlab.com` releases only / only data under the specific key `io.modelcontextprotocol.registry/publisher-provided` will be preserved / Any other keys in the `_meta` object are silently dropped during publishing / The publisher-provided extension is limited to 4KB (4096 bytes) of JSON.",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://modelcontextprotocol.io/registry/authentication",
     "claim": "Model Context Protocol, *How to Authenticate When Publishing to the Official MCP Registry*, checked 2026-10-30",
     "date": null,
     "quote": "your server's name in server.json MUST be of the form io.github.username/* (or io.github.orgname/*) / MUST be of the form com.example.*/* / where com.example is the reverse-DNS form of your domain name / DNS authentication is a domain-based authentication method that relies on a DNS TXT record. / HTTP authentication is a domain-based authentication method that relies on a /.well-known/mcp-registry-auth file hosted on your domain. / GitHub authentication uses an OAuth flow initiated by the mcp-publisher CLI tool. / mcp-publisher login github / Ed25519",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://modelcontextprotocol.io/seps/2127-mcp-server-cards",
     "claim": "David Soria Parra, Sam Morrow, and Tadas Antanavicius, *SEP-2127: MCP Server Cards - HTTP Server Discovery*, Final; created 2026-01-21; checked 2026-10-30",
     "date": null,
     "quote": "As an Extensions Track SEP / Status Final Type Extensions Track Created 2026-01-21 / This SEP proposes adding a standardized, self-contained format to describe MCP servers for pre-connection discovery. This enables clients to automatically discover available transports, protocol versions, and connection guidance before establishing a connection. / can be hosted at any unreserved URI, with <streamable-http-url>/server-card reserved as the recommended location. / The canonical discovery path and the relationship to the broader AI Catalog are specified in the extension repository's docs/discovery.md. / For automated domain-level discovery, an AI Catalog can be published at /.well-known/ai-catalog.json. / We considered using HTTP headers (similar to Link headers) to advertise server card locations. While this could work, it requires an HTTP request to the main endpoint first, eliminating many of the benefits of pre-connection discovery. / The full threat model and the normative CORS/caching/transport requirements are maintained in the extension repository's docs/discovery.md. / Server Card document: A static metadata document / Cards themselves can be hosted at any unreserved URI, with /server-card reserved as the recommended location. / The Registry owns that schema",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://github.com/modelcontextprotocol/ext-server-card",
     "claim": "Model Context Protocol, *MCP Server Cards (experimental extension)*, checked 2026-11-06",
     "date": null,
     "quote": "It tracks SEP-2127 and is intended to be lifted directly into the main spec / hosted at any unreserved URI, with `GET <streamable-http-url>/server-card` reserved as the recommended location (see [discovery.md](docs/discovery.md)) / Status: Experimental. This work is for prototyping and feedback only, and is not an accepted or official MCP extension. / schema.ts # TypeScript source of truth / A Server Card describes remote connectivity only / lives in the MCP Registry's server.json schema, which is owned by the registry, not by this extension.",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://modelcontextprotocol.io/community/working-groups/server-card",
     "claim": "Model Context Protocol Server Card Working Group, *Server Card working group charter*, 2026-03-26",
     "date": "2026-03-26",
     "quote": "2026-03-26 | Initial charter / SEP 2127: MCP Server Cards | Draft / Specification of how an MCP Server Card document is discovered / A general-purpose MCP server registry or catalog (owned by the Registry WG). / Server Card format should stay as close as possible to a subset of `server.json`",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://modelcontextprotocol.io/registry/github-actions",
     "claim": "Model Context Protocol, *How to Automate Publishing with GitHub Actions*, checked 2026-10-30",
     "date": null,
     "quote": "Publish server to MCP Registry / ./mcp-publisher publish / ./mcp-publisher login github-oidc / GitHub OIDC Authentication: No dedicated secret necessary.",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2127",
     "claim": "dsp-ant, *SEP-2127: MCP Server Cards - HTTP Server Discovery*, merged; fetched 2026-10-30",
     "date": null,
     "quote": "/.well-known/mcp/server-card.json ← identity, remotes, capabilities",
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28",
     "claim": "Model Context Protocol, *Specification*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Model Context Protocol (MCP) is an open protocol / The protocol uses JSON-RPC 2.0 messages to establish communication between:",
     "ref": 25
    },
    {
     "label": "[26]",
     "url": "https://ai-catalog.io/spec/",
     "claim": "AI Catalog, *AI Catalog*, checked 2026-10-30",
     "date": null,
     "quote": "/.well-known/ai-catalog.json",
     "ref": 26
    },
    {
     "label": "[27]",
     "url": "https://www.ietf.org/archive/id/draft-mp-agntcy-ads-03.txt",
     "claim": "L. Muscariello and R. Polic (Cisco), *Agent Directory Service (draft-mp-agntcy-ads-03)*, 2 November 2026",
     "date": null,
     "quote": "The system leverages the Open Agentic Schema Framework (OASF) to model agent information in a structured, extensible format. / Skill Taxonomy … Domain Taxonomy … Module Taxonomy",
     "ref": 27
    },
    {
     "label": "[28]",
     "url": "https://agenticresourcediscovery.org/spec/",
     "claim": "Junjie Bu (Google), R.V. Guha, and Shaun Smith (Hugging Face), *Agentic Resource Discovery Specification*, 2026-08-26; proposal v0.91",
     "date": null,
     "quote": "Hosting a manifest of entries at https://{domain}/.well-known/ard.json.",
     "ref": 28
    },
    {
     "label": "[29]",
     "url": "https://github.blog/ai-and-ml/github-copilot/meet-the-github-mcp-registry-the-fastest-way-to-discover-mcp-servers/",
     "claim": "Toby Padilla, *Meet the GitHub MCP Registry: The fastest way to discover MCP Servers*, published 2025-09-16",
     "date": null,
     "quote": "\"datePublished\":\"2025-09-16T09:27:54-07:00\" / self-publish MCP servers directly to the OSS MCP Community Registry / those servers will automatically appear in the GitHub MCP Registry",
     "ref": 29
    },
    {
     "label": "[30]",
     "url": "https://github.com/github/github-mcp-server/discussions/1257",
     "claim": "trent-j, *MCP Server Published But Not Visible on github.com/mcp Registry*, answered 2026-05-19",
     "date": null,
     "quote": "the GitHub MCP Registry now has the ability to sync versions from the open source registry, but onboarding a new server is still a manual curation process today. / github.com/mcp / is a manual curation step / new versions sync automatically / from the open-source registry / May 19, 2026",
     "ref": 30
    },
    {
     "label": "[31]",
     "url": "https://www.pulsemcp.com/work-with-us",
     "claim": "PulseMCP, *Work With Us*, checked 2026-10-30",
     "date": null,
     "quote": "We ingest from the official registry and supplement with our own indexing across the web",
     "ref": 31
    },
    {
     "label": "[32]",
     "url": "https://www.pulsemcp.com/posts/newsletter-claude-code-competition-ai-fundraising-abounds-mcp-registry-launch",
     "claim": "PulseMCP, *Claude Code has competition, AI fundraising abounds, Official MCP Registry launched*, 2025-09-09",
     "date": "2025-09-09",
     "quote": "we're setting PulseMCP up as a sub-registry of the official registry / use our data (like estimated downloads, standardized names and descriptions) to curate your MCP marketplaces",
     "ref": 32
    },
    {
     "label": "[33]",
     "url": "https://glama.ai/mcp/methodology",
     "claim": "Glama, *How Glama indexes the MCP ecosystem*, checked 2026-10-30",
     "date": null,
     "quote": "Glama ingests and re-publishes everything in the official registry, and layers its own sandbox-derived data on top / the behavioural analysis, the schema captures from actual server runs, the TDQS scores",
     "ref": 33
    },
    {
     "label": "[34]",
     "url": "https://konghq.com/blog/engineering/mcp-registry-dynamic-tool-discovery",
     "claim": "Hugo Guerrero, Kong, *Leveraging the MCP Registry in Kong Konnect for Dynamic Tool Discovery*, published 2026-03-12",
     "date": null,
     "quote": "\"datePublished\":\"2026-03-12T13:00:00.000Z\" / The registry implements a REST API built in accordance with the specification from the Agentic AI Foundation's (AAIF) official MCP registry",
     "ref": 34
    },
    {
     "label": "[35]",
     "url": "https://konghq.com/blog/learning-center/what-is-an-mcp-registry",
     "claim": "Kong, *What is an MCP Registry? The Centralized Directory for AI Agents*, published 2026-05-13",
     "date": null,
     "quote": "registry.modelcontextprotocol.io / community-maintained, fully open, and implements the MCP Registry Specification",
     "ref": 35
    },
    {
     "label": "[36]",
     "url": "https://github.com/modelcontextprotocol/registry/blob/main/docs/community-projects.md",
     "claim": "Model Context Protocol (modelcontextprotocol/registry), *Community Projects*, fetched 2026-11-11",
     "date": null,
     "quote": "Vendor-neutral registry hosted at the Eclipse Foundation, where organizations publish which MCP servers, Agent Skills, plugins and A2A agents they approve. / A downstream aggregator of the official MCP Registry: checks MCP servers against it and retrieves their metadata from it / This is not an exhaustive list, and inclusion does not imply endorsement.",
     "ref": 36
    },
    {
     "label": "[37]",
     "url": "https://nordicapis.com/getting-started-with-the-official-mcp-registry-api/",
     "claim": "J Simpson, Nordic APIs, *Getting Started With the Official MCP Registry API*, published 2025-11-19",
     "date": null,
     "quote": "brew install mcp-publisher",
     "ref": 37
    },
    {
     "label": "[38]",
     "url": "https://github.blog/changelog/2025-11-18-internal-mcp-registry-and-allowlist-controls-for-vs-code-stable-in-public-preview/",
     "claim": "Allison, GitHub Changelog, *MCP registry and allowlist controls for VS Code Stable in public preview*, published 2025-11-18",
     "date": null,
     "quote": "\"datePublished\":\"2025-11-18T08:39:20-08:00\" / Registry servers appear in the MCP servers sidebar panel. / Registry-only policy actively blocks servers that aren't on the registry at runtime. / Self-hosted registries must follow the v0.1 MCP registry specification.",
     "ref": 38
    },
    {
     "label": "[39]",
     "url": "https://code.visualstudio.com/docs/agent-customization/mcp-servers",
     "claim": "Microsoft, *Add MCP servers in VS Code*, fetched 2026-10-30",
     "date": null,
     "quote": "MCP server gallery (Preview) / search for @mcp",
     "ref": 39
    },
    {
     "label": "[40]",
     "url": "https://docs.github.com/en/copilot/how-tos/administer-copilot/manage-mcp-usage/configure-mcp-registry",
     "claim": "GitHub, *Configure an MCP registry for your organization or enterprise*, checked 2026-10-30",
     "date": null,
     "quote": "A valid registry must support URL routing and follow the v0.1 MCP registry specification / GET /v0.1/servers / GET /v0.1/servers/{serverName}/versions/latest / While the MCP registry launched using the v0 specification, that version is now considered unstable and should not be implemented.",
     "ref": 40
    },
    {
     "label": "[41]",
     "url": "https://registry.modelcontextprotocol.io/v0.1/servers/io.github.github%2Fgithub-mcp-server/versions/2.0.3",
     "claim": "Official MCP Registry, *io.github.github/github-mcp-server version 2.0.3*, publishedAt 2026-10-21; retained snapshot fetched 2026-10-30",
     "date": null,
     "quote": "\"name\":\"io.github.github/github-mcp-server\" / \"$schema\":\"https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json\" / \"version\":\"2.0.3\" / \"status\":\"active\" / \"isLatest\":true / \"publishedAt\":\"2026-10-21T09:53:50.501608Z\" / \"identifier\":\"ghcr.io/github/github-mcp-server:2.0.3\" / \"type\":\"stdio\" / \"type\":\"streamable-http\",\"url\":\"https://api.githubcopilot.com/mcp/\" / content-type: application/json",
     "ref": 41
    },
    {
     "label": "[42]",
     "url": "https://registry.modelcontextprotocol.io/v0.1/servers/io.github.github%2Fgithub-mcp-server/versions/latest",
     "claim": "Official MCP Registry, *io.github.github/github-mcp-server latest server.json*, publishedAt 2026-10-21; checked 2026-10-30",
     "date": null,
     "quote": "\"version\":\"2.0.3\" / \"isLatest\":true / \"name\":\"io.github.github/github-mcp-server\"",
     "ref": 42
    },
    {
     "label": "[43]",
     "url": "https://registry.modelcontextprotocol.io/v0.1/servers/com.notion%2Fmcp/versions/1.0.1",
     "claim": "Official MCP Registry, *com.notion/mcp version 1.0.1*, publishedAt 2025-09-11; retained snapshot fetched 2026-10-30",
     "date": null,
     "quote": "\"name\":\"com.notion/mcp\" / \"$schema\":\"https://static.modelcontextprotocol.io/schemas/2025-09-29/server.schema.json\" / \"description\":\"Official Notion MCP server\" / \"version\":\"1.0.1\" / \"status\":\"active\" / \"isLatest\":true / \"publishedAt\":\"2025-09-11T22:25:50.737872Z\" / \"type\":\"streamable-http\",\"url\":\"https://mcp.notion.com/mcp\" / \"type\":\"sse\",\"url\":\"https://mcp.notion.com/sse\" / content-type: application/json",
     "ref": 43
    },
    {
     "label": "[44]",
     "url": "https://registry.modelcontextprotocol.io/v0.1/servers/com.notion%2Fmcp/versions/latest",
     "claim": "Official MCP Registry, *com.notion/mcp latest server.json*, publishedAt 2025-09-11; checked 2026-10-30",
     "date": null,
     "quote": "\"version\":\"1.0.1\" / \"isLatest\":true / \"name\":\"com.notion/mcp\"",
     "ref": 44
    },
    {
     "label": "[45]",
     "url": "https://registry.modelcontextprotocol.io/v0.1/servers/com.stripe%2Fmcp/versions/0.2.4",
     "claim": "Official MCP Registry, *com.stripe/mcp version 0.2.4*, publishedAt 2025-10-28; retained snapshot fetched 2026-10-30",
     "date": null,
     "quote": "\"name\":\"com.stripe/mcp\" / \"$schema\":\"https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json\" / \"version\":\"0.2.4\" / \"status\":\"active\" / \"isLatest\":true / \"publishedAt\":\"2025-10-28T22:06:18.495159Z\" / \"url\":\"https://github.com/stripe/agent-toolkit\" / \"type\":\"streamable-http\",\"url\":\"https://mcp.stripe.com\" / content-type: application/json",
     "ref": 45
    },
    {
     "label": "[46]",
     "url": "https://registry.modelcontextprotocol.io/v0.1/servers/com.stripe%2Fmcp/versions/latest",
     "claim": "Official MCP Registry, *com.stripe/mcp latest server.json*, publishedAt 2025-10-28; checked 2026-10-30",
     "date": null,
     "quote": "\"version\":\"0.2.4\" / \"isLatest\":true / \"name\":\"com.stripe/mcp\"",
     "ref": 46
    },
    {
     "label": "[47]",
     "url": "https://registry.modelcontextprotocol.io/v0.1/servers/com.atlassian%2Fatlassian-mcp-server/versions/2.0.0",
     "claim": "Official MCP Registry, *com.atlassian/atlassian-mcp-server version 2.0.0*, publishedAt 2026-09-09; retained snapshot fetched 2026-10-30",
     "date": null,
     "quote": "\"name\":\"com.atlassian/atlassian-mcp-server\" / \"title\":\"Atlassian Rovo MCP Server\" / \"$schema\":\"https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json\" / \"version\":\"2.0.0\" / \"status\":\"active\" / \"isLatest\":true / \"publishedAt\":\"2026-09-09T17:53:32.01107Z\" / \"type\":\"streamable-http\",\"url\":\"https://mcp.atlassian.com/v2/mcp\" / \"type\":\"streamable-http\",\"url\":\"https://mcp.atlassian.com/v1/mcp/authv2\" / content-type: application/json",
     "ref": 47
    },
    {
     "label": "[48]",
     "url": "https://registry.modelcontextprotocol.io/v0.1/servers/com.atlassian%2Fatlassian-mcp-server/versions/latest",
     "claim": "Official MCP Registry, *com.atlassian/atlassian-mcp-server latest server.json*, publishedAt 2026-09-09; checked 2026-10-30",
     "date": null,
     "quote": "\"version\":\"2.0.0\" / \"isLatest\":true / \"name\":\"com.atlassian/atlassian-mcp-server\"",
     "ref": 48
    },
    {
     "label": "[49]",
     "url": "https://registry.modelcontextprotocol.io/v0.1/servers/io.github.microsoft%2Fplaywright-mcp/versions/0.0.82",
     "claim": "Official MCP Registry, *io.github.microsoft/playwright-mcp version 0.0.82*, publishedAt 2026-09-18; retained snapshot fetched 2026-10-30",
     "date": null,
     "quote": "\"name\":\"io.github.microsoft/playwright-mcp\" / \"$schema\":\"https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json\" / \"version\":\"0.0.82\" / \"status\":\"active\" / \"isLatest\":true / \"publishedAt\":\"2026-09-18T23:41:20.46032Z\" / \"identifier\":\"@playwright/mcp\" / \"type\":\"stdio\" / content-type: application/json",
     "ref": 49
    },
    {
     "label": "[50]",
     "url": "https://registry.modelcontextprotocol.io/v0.1/servers/io.github.microsoft%2Fplaywright-mcp/versions/latest",
     "claim": "Official MCP Registry, *io.github.microsoft/playwright-mcp latest server.json*, publishedAt 2026-09-18; checked 2026-10-30",
     "date": null,
     "quote": "\"version\":\"0.0.82\" / \"isLatest\":true / \"name\":\"io.github.microsoft/playwright-mcp\"",
     "ref": 50
    },
    {
     "label": "[51]",
     "url": "https://blog.modelcontextprotocol.io/posts/2025-11-25-first-mcp-anniversary/",
     "claim": "MCP Core Maintainers, *One Year of MCP: November 2025 Spec Release*, published 2025-11-25",
     "date": null,
     "quote": "It's the central index for all available MCP servers that now has close to two thousand entries since its announcement in September. / That's a 407% growth from the initial batch of servers we onboarded that same month.",
     "ref": 51
    },
    {
     "label": "[52]",
     "url": "https://www.localcan.com/blog/state-of-mcp-server-development",
     "claim": "Jarek Ceborski, LocalCan, *State of MCP Server Development: October 2026*, 2026-10-15",
     "date": "2026-10-15",
     "quote": "Every number below was measured or checked on 14 October 2026 / The official MCP Registry lists 43,012 active servers / 59.6% are remote-only, 34.6% ship only as a package you run yourself, 4.7% offer both, and 1.1% list neither",
     "ref": 52
    },
    {
     "label": "[53]",
     "url": "https://www.apideck.com/blog/mcp-server-directories",
     "claim": "Apideck, *MCP server directories*, 2026-10-31",
     "date": "2026-10-31",
     "quote": "Every count below is from 31 October 2026. / The registry held 53,541 servers on 31 October 2026 / 113,204 open-source servers and 40,151 remote connectors on 31 October / PulseMCP listed 21,614 servers / MCP Market showed 50,999 servers / The Cursor Marketplace linked about 490 plugins on 31 October",
     "ref": 53
    },
    {
     "label": "[54]",
     "url": "https://arxiv.org/abs/2609.14119",
     "claim": "Obada Kraishan, *Same Name, Different Server: A Security Census of Silent Drift in the Model Context Protocol Ecosystem*, submitted 12 Sep 2026; fetched 2026-11-11",
     "date": null,
     "quote": "51.1% of multi-version servers changed what they advertise between versions, 40.6% did so silently, and 4.2% redirected their remote endpoint to a different host while keeping their registry identity / We harvested the full public MCP registry (21,643 servers, 72,606 version records, August 2026 snapshot) / Submitted on 12 Sep 2026 / Obada Kraishan / Same Name, Different Server: A Security Census of Silent Drift in the Model Context Protocol Ecosystem",
     "ref": 54
    }
   ],
   "form": "endpoint",
   "governance": "MCP Registry Working Group, which owns the service, the server.json schema, the Registry API specification, and the sub-registry ecosystem. Chartered 2026-04-08; Radoslav Dimitrov (Stacklok) has been sole Lead since 2026-07-30; additive spec changes need Core Maintainer approval. The Model Context Protocol was donated on 2025-12-09 to the Agentic AI Foundation (AAIF), a directed fund under the Linux Foundation.",
   "group": null,
   "history": [
    {
     "date": "2026-10-15",
     "note": "verified against github.com/modelcontextprotocol/registry (API v0.1 frozen specification and OpenAPI schema)"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "mcp-registry",
   "implementation": "shipping",
   "last_verified": "2026-11-12",
   "name": "Official MCP Registry",
   "native_status": "Preview. The documentation says breaking changes or data resets may occur before general availability (checked against sources fetched 2026-10-30). Launched in preview 2025-09-08. API /v0.1/ introduced 2025-10-17; v0.1 frozen from 2025-10-24 while /v0 remains the development path. Registry API v1 GA is listed as Ideating, with the target marked TBD.",
   "origin": {
    "org": "Model Context Protocol project",
    "date": "2025-09-08"
   },
   "pairs_with": [
    "mcp",
    "mcp-server-cards",
    "ai-catalog-well-known-file",
    "oasf",
    "ard"
   ],
   "part_of": null,
   "parties": [
    "agent-registry",
    "agent-agent"
   ],
   "phase": "candidate",
   "probe": {
    "method": "GET",
    "path": "{registry_origin}/v0.1/servers",
    "parse": "A JSON response listing MCP servers (server.json entries) indicates a registry implementing the v0.1 API",
    "on_absent": "404 or a non-JSON response means the origin does not host a v0.1 MCP Registry API"
   },
   "question": "Where can an agent or client find a catalogue of public MCP servers, and how do sub-registries mirror it?",
   "scope": "general",
   "spec_url": "https://modelcontextprotocol.io/registry/about",
   "step": "discover",
   "summary_md": "The **Official MCP Registry** is the centralized metadata repository for publicly accessible Model Context Protocol (MCP) servers, initiated in February 2025 by David Soria Parra and Justin Spahr-Summers with the PulseMCP and Goose teams and stewarded by the MCP Registry Working Group under the Linux Foundation's Agentic AI Foundation (AAIF). It stores standardized `server.json` records and serves them over an unauthenticated, read-only REST API at `https://registry.modelcontextprotocol.io` as the upstream catalog for downstream marketplaces and aggregators rather than direct host-application queries. Publishers declare package locations, remote endpoints, and execution instructions in `server.json`, while aggregators synchronize the catalog via cursor-paginated `GET /v0.1/servers` queries (supporting `updated_since`) and versioned `GET /v0.1/servers/{serverName}/versions/{version}` lookups (including `latest`). Launched in public preview on 2025-09-08, the registry introduced the `/v0.1/` API path on 2025-10-17 and froze `/v0.1/` on 2025-10-24 while `/v0/` continues in development. Breaking changes or data resets may still occur before Registry API v1 general availability (`Ideating`, target `TBD`). The live `/v0.1/version` endpoint reports service release 1.8.9, built 2026-11-10T11:14:06Z from commit ba94f65.",
   "track": "linux-foundation",
   "use_cases": [
    "discover-my-api",
    "expose-tools-to-agents",
    "describe-agent-capabilities"
   ],
   "version": {
    "label": "API /v0.1/ stable path, introduced 2025-10-17; /v0 remains the development path. server.json schema 2025-12-11. The running service reports release 1.8.7, built 2026-10-30T11:31:18Z.",
    "date": "2026-10-30"
   },
   "watch": [
    {
     "type": "github",
     "repo": "modelcontextprotocol/registry",
     "mode": "release",
     "version": false
    },
    {
     "type": "page",
     "url": "https://modelcontextprotocol.io/community/working-groups/registry",
     "selector": "main",
     "cadence": "weekly"
    }
   ],
   "prerequisites": [
    "mcp"
   ],
   "hatnote_md": "This article covers the Official MCP Registry at `registry.modelcontextprotocol.io`, its `server.json` metadata format, and its Registry REST API. For per-server static HTTP discovery metadata, see [MCP Server Cards](/protocols/mcp-server-cards/); for domain-level well-known manifests, see [Agentic Resource Discovery (ARD)](/protocols/ard/); and for the host-to-server wire protocol itself, see [Model Context Protocol](/protocols/mcp/). Third-party services exposing an MCP Registry API (which the FAQ refers to lowercase as \"MCP registries\") are covered under [Adoption and ecosystem](#adoption-and-ecosystem).",
   "tier": "flagship",
   "lifecycle_status": "active",
   "wire_archetype": "harnesses_rpc_ui",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "This article covers the Official MCP Registry at `registry.modelcontextprotocol.io`, its `server.json` metadata format, and its Registry REST API. For per-server static HTTP discovery metadata, see [MCP Server Cards](/protocols/mcp-server-cards/); for domain-level well-known manifests, see [Agentic Resource Discovery (ARD)](/protocols/ard/); and for the host-to-server wire protocol itself, see [Model Context Protocol](/protocols/mcp/). Third-party services exposing an MCP Registry API (which the FAQ refers to lowercase as \"MCP registries\") are covered under [Adoption and ecosystem](#adoption-and-ecosystem). [1][2]",
   "v05_elevator_pitch_md": "The Official MCP Registry is a centralized upstream catalog where tool maintainers publish machine-readable metadata for public Model Context Protocol servers so client marketplaces and enterprise directories can discover them from a single feed. Instead of scraping fragmented community lists or maintaining manual directory submissions for every AI client, developers publish one standardized `server.json` manifest that downstream aggregators synchronize from `https://registry.modelcontextprotocol.io` via `GET /v0.1/servers`. [1][3]",
   "v05_lead_md": "The **Official MCP Registry** is the centralized metadata repository for publicly accessible Model Context Protocol (MCP) servers, initiated in February 2025 by David Soria Parra and Justin Spahr-Summers with the PulseMCP and Goose teams and stewarded by the MCP Registry Working Group under the Linux Foundation's Agentic AI Foundation (AAIF). [1][4][5][6] It stores standardized `server.json` records and serves them over an unauthenticated, read-only REST API at `https://registry.modelcontextprotocol.io` as the upstream catalog for downstream marketplaces and aggregators rather than direct host-application queries. [1][3] Publishers declare package locations, remote endpoints, and execution instructions in `server.json`, while aggregators synchronize the catalog via cursor-paginated `GET /v0.1/servers` queries (supporting `updated_since`) and versioned `GET /v0.1/servers/{serverName}/versions/{version}` lookups (including `latest`). [1][3] Launched in public preview on 2025-09-08, the registry introduced the `/v0.1/` API path on 2025-10-17 and froze `/v0.1/` on 2025-10-24 while `/v0/` continues in development. Breaking changes or data resets may still occur before Registry API v1 general availability (`Ideating`, target `TBD`). [1][4][5][7][8] The live `/v0.1/version` endpoint reports service release 1.8.9, built 2026-11-10T11:14:06Z from commit ba94f65. [9]",
   "v05_identity_sentence_md": "The **Official MCP Registry** is the centralized metadata repository for publicly accessible Model Context Protocol (MCP) servers, initiated in February 2025 by David Soria Parra and Justin Spahr-Summers with the PulseMCP and Goose teams and stewarded by the MCP Registry Working Group under the Linux Foundation's Agentic AI Foundation (AAIF). [1][4][5][6] It stores standardized `server.json` records and serves them over an unauthenticated, read-only REST API at `https://registry.modelcontextprotocol.io` as the upstream catalog for downstream marketplaces and aggregators rather than direct host-application queries. [1][3]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Discover](/category/discover/) (`discover`)"
    },
    {
     "label": "Form",
     "value_md": "Endpoint (`endpoint`)"
    },
    {
     "label": "Originated by",
     "value_md": "David Soria Parra and Justin Spahr-Summers, with the PulseMCP and Goose teams, February 2025; preview launch 2025-09-08 [4]"
    },
    {
     "label": "Governed by",
     "value_md": "MCP Registry Working Group, chartered 2026-04-08; Radoslav Dimitrov (Stacklok) sole Lead since 2026-07-30. MCP donated 2025-12-09 to the Linux Foundation AAIF. [5][6]"
    },
    {
     "label": "Track",
     "value_md": "Linux Foundation (`linux-foundation`); MCP is a founding project contribution to the Agentic AI Foundation [6][10]"
    },
    {
     "label": "Status",
     "value_md": "Preview. Breaking changes or data resets may occur before general availability. API v0.1 frozen 2025-10-24. API v1 GA is Ideating, target TBD. [1][5][8]"
    },
    {
     "label": "Version",
     "value_md": "API `/v0.1/` introduced 2025-10-17 as the stable path; `/v0/` remains the development path. server.json schema 2025-12-11. Running service release 1.8.9, built 2026-11-10 from commit ba94f65. [7][9][11][12]"
    },
    {
     "label": "Message format",
     "value_md": "JSON (`server.json` records and REST JSON) [1][13]"
    },
    {
     "label": "Transports",
     "value_md": "HTTPS unauthenticated read-only REST [3]"
    },
    {
     "label": "Record format",
     "value_md": "`server.json`, JSON Schema dated 2025-12-11 [11][12]"
    },
    {
     "label": "Specification",
     "value_md": "[The MCP Registry](https://modelcontextprotocol.io/registry/about) · [Official MCP Registry OpenAPI 3.1.0](https://registry.modelcontextprotocol.io/openapi.yaml) [1][13]"
    },
    {
     "label": "Found at",
     "value_md": "`https://registry.modelcontextprotocol.io` — `GET /v0.1/servers`, `GET /v0.1/servers/{serverName}/versions`, `GET /v0.1/servers/{serverName}/versions/{version}` (including `latest`) [3]"
    },
    {
     "label": "Licence",
     "value_md": "MIT License (`modelcontextprotocol/registry`), transitioning to Apache-2.0 (code/specifications) and CC-BY-4.0 (documentation) [8][14]"
    }
   ],
   "v05_problem_md": "Before the official catalog launched, MCP servers were scattered across separate community and company directories. Rather than displacing those existing directories, the Official MCP Registry provides a single primary source of truth for publicly available MCP servers that organizations can filter or extend into custom sub-registries. [4] Server maintainers self-publish `server.json` metadata from their own repositories using the `mcp-publisher` CLI, while the registry operates strictly as a metadata catalog rather than hosting, distributing, or executing server binaries. Public client marketplaces can ingest and enrich this upstream feed, and enterprises with strict privacy or security requirements can build private internal sub-registries on the same single upstream source. [4][5][8] The Official MCP Registry does not list private servers, provides no uptime or data durability guarantees, and is not designed for self-hosting because its codebase supports only the hosted `registry.modelcontextprotocol.io` instance. [1][3][5]",
   "v05_mechanism_delta_md": "Server maintainers self-publish `server.json` metadata from their own repositories using the `mcp-publisher` CLI, while the registry operates strictly as a metadata catalog rather than hosting, distributing, or executing server binaries. Public client marketplaces can ingest and enrich this upstream feed, and enterprises with strict privacy or security requirements can build private internal sub-registries on the same single upstream source. [4][5][8]",
   "v05_scope_boundary_md": "The Official MCP Registry does not list private servers, provides no uptime or data durability guarantees, and is not designed for self-hosting because its codebase supports only the hosted `registry.modelcontextprotocol.io` instance. [1][3][5]",
   "v05_fuzzy_additions": [
    {
     "id": "official-registry-api-server-json-schema-and-publishing-rules",
     "heading": "Official registry API, server.json schema, and publishing rules",
     "body_md": "The official registry API extends the generic registry API with authentication, package validation, and list filters. Production is `https://registry.modelcontextprotocol.io` and staging is `https://staging.registry.modelcontextprotocol.io`. A `server.json` file describes servers for registry publishing, client discovery, and package management. The `2025-12-11` schema is a static representation for discovery, installation, and configuration, with `packages` and `remotes`. [12][16][17][18]",
     "bullets": [
      {
       "label": "`/v0.1/servers` list and detail routes",
       "text_md": "`GET /v0.1/servers` is cursor-paginated and accepts `updated_since`, `search`, `version`, and `include_deleted`. A non-empty `search` query must contain at least three Unicode characters after trimming whitespace; shorter or whitespace-only queries return HTTP `422`. Passing `version=latest` filters to records where `isLatest` is `true`. Clients fetch named entries via `GET /v0.1/servers/{url-encoded-server-name}/versions/latest` or `GET /v0.1/servers/{serverName}/versions`, preserving active filters when following `metadata.nextCursor`. [16]"
      },
      {
       "label": "Generic `packages` and `remotes`",
       "text_md": "In `server.json`, `name` uses reverse-DNS syntax with a single forward slash separating namespace from server name. Each `packages` entry specifies a `registryType` (`npm`, `pypi`, `oci`, `nuget`, `cargo` at `https://crates.io`, or `mcpb`), an `identifier`, an exact range-free `version`, and a `transport` object, while `remotes` declares hosted endpoints (`streamable-http` or `sse`) and URL template variables such as `{tenant_id}`. [12][17]"
      },
      {
       "label": "GitHub, DNS, and HTTP namespace proof",
       "text_md": "A publish to `registry.modelcontextprotocol.io` must prove the `server.json` namespace. GitHub OAuth and GitHub OIDC use `io.github.*`, so the name MUST be `io.github.username/*` or `io.github.orgname/*`. Domains use reverse-DNS `com.example.*/*`, proved by a DNS TXT record or a `/.well-known/mcp-registry-auth` file. `mcp-publisher` runs those logins. [16][18][19]"
      },
      {
       "label": "Package ownership, _meta limits, and delegated security scanning",
       "text_md": "Ownership metadata must show the publisher controls every package, which stops impersonation. Allowed bases are `https://registry.npmjs.org`, `https://pypi.org`, `https://api.nuget.org/v3/index.json`, `https://crates.io`, plus MCPB files on `https://github.com` or `https://gitlab.com`. `_meta` keeps only `io.modelcontextprotocol.registry/publisher-provided` and drops other keys, with a 4KB (4096 bytes) cap. Under its Trust and Security model, the MCP Registry focuses on namespace authentication and metadata hosting, while relying on the broader ecosystem (package registries such as npm, PyPI, and Docker Hub, plus downstream registry aggregators and marketplaces) for security scanning of actual server code, and relies on manual takedown by registry maintainers to remove spam or malicious servers. [1][18]"
      }
     ]
    },
    {
     "id": "upstream-aggregator-model-and-the-sep-2127-server-card-track",
     "heading": "Upstream aggregator model and the SEP-2127 Server Card track",
     "body_md": "Downstream aggregators and sub-registries synchronize periodically with `registry.modelcontextprotocol.io` and expose OpenAPI-compatible read endpoints to MCP host applications. In parallel, `SEP-2127` (created 2026-01-21 and marked `Final` on the Extensions Track, though still listed as `Draft` in the 2026-03-26 working-group charter) defines self-hosted Server Cards in the experimental `ext-server-card` repository. [4][8][20][21][22]",
     "bullets": [
      {
       "label": "Upstream store versus sub-registries",
       "text_md": "Because the upstream registry is designed for infrequent batch scraping by aggregators rather than direct runtime queries from MCP host applications, downstream sub-registries implement the MCP Registry OpenAPI specification and cache records locally. Sub-registries can also inject custom curation or evaluation metadata under reverse-DNS keys in `_meta` (such as `com.example.subregistry/custom`). [1][3][4]"
      },
      {
       "label": "Why `mcp-publisher` targets only the official registry",
       "text_md": "Opening a pull request against the `modelcontextprotocol/registry` repository—such as adding a `server.json` file, a server directory, or a `data/seed.json` entry—does not publish or list a server even if merged. Maintainers instead run `./mcp-publisher publish` from their own project repository (including via GitHub Actions) or validate dry-run payloads with `mcp-publisher validate` against POST `/v0.1/validate` on `registry.modelcontextprotocol.io`. [4][5][8][16][23]"
      },
      {
       "label": "SEP-2127 Server Card discovery",
       "text_md": "`SEP-2127` lets a client read available transports, protocol versions, and connection guidance before establishing an MCP connection. In the Final `SEP-2127` specification and the `modelcontextprotocol/ext-server-card` (`experimental-ext-server-card`) repository, Server Cards can be hosted at any unreserved URI, with `<streamable-http-url>/server-card` (`GET <streamable-http-url>/server-card`) reserved as the recommended location. Automated domain-level discovery uses an AI Catalog at `/.well-known/ai-catalog.json` (or `mcp-server-card` link relations; header-based discovery via HTTP headers on the main endpoint was considered and rejected in `SEP-2127` Rationale because probing the main endpoint first defeats pre-connection discovery), while discovery mechanics, CORS/caching requirements, and the threat model live in the extension repository's `docs/discovery.md` document (superseding earlier PR 2127 proposal text that had used `/.well-known/mcp/server-card.json`). [1][20][21][24]"
      },
      {
       "label": "`ext-server-card` and the working-group charter",
       "text_md": "`ext-server-card` is an experimental prototyping repository rather than an accepted official extension; it tracks `SEP-2127`, treats `schema.ts` as the schema source of truth, and covers remote connectivity only while leaving package distribution in registry `server.json`. The 2026-03-26 Server Card Working Group charter scopes card format and discovery rather than a general-purpose server catalog, specifying that the Server Card format should stay as close as possible to a subset of `server.json`. [21][22]"
      }
     ]
    }
   ],
   "v05_diagram": {
    "title": "MCP Registry ecosystem",
    "heading": "MCP Registry ecosystem",
    "mermaid": "flowchart LR\n  Dev[\"Server developers\"] -->|\"Publish packages and binaries\"| Pkgs[\"Package registries (npm, PyPI, Docker Hub)\"]\n  Dev -->|\"Publish server.json metadata\"| Official[\"Official MCP Registry (metadata only)\"]\n  Official -.->|\"server.json references packages\"| Pkgs\n  Official -->|\"Read-only REST API pull\"| Agg[\"Downstream aggregators and sub-registries\"]\n  Agg -->|\"OpenAPI REST API\"| Hosts[\"Host applications\"]",
    "caption_md": "Server developers publish packages and binaries to package registries (`npm`, PyPI, Docker Hub) and publish `server.json` metadata to the Official MCP Registry, whose records point to those packages. Downstream aggregators pull that metadata infrequently, and host applications query aggregators through an `OpenAPI`-compatible REST API rather than calling the official registry directly. [1]"
   },
   "v05_wire_artifact": {
    "title": "server.json",
    "heading": "server.json",
    "lang": "json",
    "code": "{\n  \"$schema\": \"https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json\",\n  \"name\": \"io.github.username/email-integration-mcp\",\n  \"title\": \"Email Integration\",\n  \"description\": \"Send emails and manage email accounts\",\n  \"version\": \"1.0.0\",\n  \"packages\": [\n    {\n      \"registryType\": \"npm\",\n      \"identifier\": \"@username/email-integration-mcp\",\n      \"version\": \"1.0.0\",\n      \"transport\": {\n        \"type\": \"stdio\"\n      }\n    }\n  ]\n}",
    "caption_md": "Publisher `server.json` example for an `npm` package, with `registryType` set to `npm` and `transport` type `stdio`. [15]"
   },
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "npm Registry API",
      "spec_or_rfc": "npm REGISTRY-API.md",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "The npm Registry API is the classic package-metadata counterpart. The Official MCP Registry returns server metadata from GET /v0.1/servers, with cursor pagination and an updated_since filter, plus versioned server.json documents. [1][3]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "part_of",
      "relation_label": "Part of",
      "delta_md": "MCP uses JSON-RPC 2.0 among hosts, clients, and servers. The Official MCP Registry is the centralized metadata repository serving server.json over its REST API. [1][3][25]"
     },
     {
      "target_id": "mcp-server-cards",
      "target_name": "MCP Server Cards",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "SEP-2127 Server Cards are static metadata at any unreserved URI, with /server-card recommended. The MCP Registry is a separate repository that owns the server.json schema. [1][20]"
     },
     {
      "target_id": "ai-catalog-well-known-file",
      "target_name": "AI Catalog well-known file",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "An AI Catalog may be served at /.well-known/ai-catalog.json so a client can discover artifacts for that host. The MCP Registry is the cross-host metadata repository for MCP servers. [1][26]"
     },
     {
      "target_id": "oasf",
      "target_name": "Open Agentic Schema Framework",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "OASF models agent information in a structured, extensible format, and the Agent Directory Service draft organizes skill, domain, and module taxonomies. The MCP Registry indexes servers as server.json records. [1][27]"
     },
     {
      "target_id": "ard",
      "target_name": "Agentic Resource Discovery (ARD)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ARD hosts a manifest of entries at https://{domain}/.well-known/ard.json on a domain. The Official MCP Registry is a separate HTTP API that lists servers and reads one named server's versions. [3][28]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (14 probed or cited examples across 3 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).",
    "side_a": {
     "visible": true,
     "heading": "Official & federated registries and marketplaces",
     "col4_header": "Registry role, API surface & ingestion",
     "note_md": null,
     "rows": [
      {
       "actor": "Official MCP Registry",
       "role": "Upstream public registry",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-11-11",
       "col4_md": "Live `/v0.1/version` endpoint reports `\"version\": \"1.8.9\"` built at `2026-11-10T11:14:06Z` from commit `ba94f65`; serves `/v0.1/servers` with `2025-12-11` schema entries.",
       "source_md": "[GET /v0.1/version](https://registry.modelcontextprotocol.io/v0.1/version) [9] · [The MCP Registry](https://modelcontextprotocol.io/registry/about) [1] · [OpenAPI document](https://registry.modelcontextprotocol.io/openapi.yaml) [13]"
      },
      {
       "actor": "GitHub MCP Registry",
       "role": "Downstream marketplace",
       "status": "Partial",
       "status_display": "Partial · as of 2026-05-19",
       "col4_md": "On 2025-09-16 OSS registry servers auto-appear; 2026-05-19 adds version sync, while `github.com/mcp` onboarding stays manual.",
       "source_md": "[Meet the GitHub MCP Registry](https://github.blog/ai-and-ml/github-copilot/meet-the-github-mcp-registry-the-fastest-way-to-discover-mcp-servers/) [29] · [github.com/mcp onboarding discussion](https://github.com/github/github-mcp-server/discussions/1257) [30]"
      },
      {
       "actor": "PulseMCP",
       "role": "Directory and sub-registry",
       "status": "Partial",
       "status_display": "Partial · checked 2026-10-30",
       "col4_md": "Ingests the official registry and is setting itself up as a downstream sub-registry for marketplace curation.",
       "source_md": "[PulseMCP, Work With Us](https://www.pulsemcp.com/work-with-us) [31] · [PulseMCP registry launch newsletter](https://www.pulsemcp.com/posts/newsletter-claude-code-competition-ai-fundraising-abounds-mcp-registry-launch) [32]"
      },
      {
       "actor": "Glama",
       "role": "Downstream directory",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Glama re-publishes the official registry and adds sandbox data, including schema captures and `TDQS` scores.",
       "source_md": "[How Glama indexes the MCP ecosystem](https://glama.ai/mcp/methodology) [33]"
      },
      {
       "actor": "Kong Konnect MCP Registry",
       "role": "Enterprise registry",
       "status": "Supported",
       "status_display": "Supported · as of 2026-03-12",
       "col4_md": "March 2026 enterprise registry implementing a REST API aligned with `registry.modelcontextprotocol.io`.",
       "source_md": "[Kong Konnect MCP Registry](https://konghq.com/blog/engineering/mcp-registry-dynamic-tool-discovery) [34] · [What is an MCP Registry?](https://konghq.com/blog/learning-center/what-is-an-mcp-registry) [35]"
      },
      {
       "actor": "Eclipse AI Registry",
       "role": "Downstream aggregator",
       "status": "Partial",
       "status_display": "Partial · checked 2026-11-11",
       "col4_md": "Vendor-neutral registry hosted at the Eclipse Foundation, where organizations publish which MCP servers, Agent Skills, plugins and A2A agents they approve. A downstream aggregator of the official MCP Registry: it checks MCP servers against the official registry and retrieves their metadata from it.",
       "source_md": "[MCP Registry community projects](https://github.com/modelcontextprotocol/registry/blob/main/docs/community-projects.md) [36]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Consuming IDEs, clients & publisher CLI",
     "col4_header": "Discovery or publishing workflow",
     "note_md": null,
     "rows": [
      {
       "actor": "mcp-publisher",
       "role": "Publisher CLI",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Official CLI (`brew install mcp-publisher`) authenticating via `mcp-publisher login github`, `github-oidc`, DNS, or `Ed25519`.",
       "source_md": "[Getting Started With the Official MCP Registry API](https://nordicapis.com/getting-started-with-the-official-mcp-registry-api/) [37] · [How to authenticate when publishing](https://modelcontextprotocol.io/registry/authentication) [19] · [Publish with GitHub Actions](https://modelcontextprotocol.io/registry/github-actions) [23]"
      },
      {
       "actor": "VS Code",
       "role": "IDE client",
       "status": "Supported",
       "status_display": "Supported · as of 2025-11-18",
       "col4_md": "Supports `v0.1` MCP registries and allowlist controls in VS Code Stable (since 2025-11-18) with `@mcp` gallery search.",
       "source_md": "[MCP registry controls for VS Code Stable](https://github.blog/changelog/2025-11-18-internal-mcp-registry-and-allowlist-controls-for-vs-code-stable-in-public-preview/) [38] · [VS Code MCP servers](https://code.visualstudio.com/docs/agent-customization/mcp-servers) [39]"
      },
      {
       "actor": "GitHub Copilot",
       "role": "Coding agent client",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Admins configure a registry on `v0.1`, requiring `GET /v0.1/servers` and `GET /v0.1/servers/{serverName}/versions/latest`.",
       "source_md": "[Configure an MCP registry](https://docs.github.com/en/copilot/how-tos/administer-copilot/manage-mcp-usage/configure-mcp-registry) [40]"
      }
     ]
    },
    "additional_tables": [
     {
      "visible": true,
      "heading": "Namespace-authenticated server publishers in the Official Registry (listing ≠ security vetting)",
      "col4_header": "Published server.json entry & transport",
      "note_md": "Listing in the Official MCP Registry reflects namespace ownership authentication (GitHub OAuth/OIDC, DNS TXT, or HTTP well-known challenge) and schema validation; the registry focuses on namespace authentication and metadata hosting while relying on package registries and downstream aggregators for security scanning of actual server code.",
      "rows": [
       {
        "actor": "GitHub",
        "role": "Server publisher",
        "status": "Listed in Official Registry (HTTP 200 server.json)",
        "status_display": "Listed in Official Registry (HTTP 200 server.json) · checked 2026-10-30",
        "col4_md": "`io.github.github/github-mcp-server` `2.0.3` (published 2026-10-21): `stdio` OCI and `streamable-http` (`https://api.githubcopilot.com/mcp/`).",
        "source_md": "[io.github.github/github-mcp-server 2.0.3](https://registry.modelcontextprotocol.io/v0.1/servers/io.github.github%2Fgithub-mcp-server/versions/2.0.3) [41] · [io.github.github/github-mcp-server latest](https://registry.modelcontextprotocol.io/v0.1/servers/io.github.github%2Fgithub-mcp-server/versions/latest) [42]"
       },
       {
        "actor": "Notion",
        "role": "Server publisher",
        "status": "Listed in Official Registry (HTTP 200 server.json)",
        "status_display": "Listed in Official Registry (HTTP 200 server.json) · checked 2026-10-30",
        "col4_md": "`com.notion/mcp` `1.0.1` (published 2025-09-11): remote `streamable-http` and `sse` endpoints.",
        "source_md": "[com.notion/mcp 1.0.1](https://registry.modelcontextprotocol.io/v0.1/servers/com.notion%2Fmcp/versions/1.0.1) [43] · [com.notion/mcp latest](https://registry.modelcontextprotocol.io/v0.1/servers/com.notion%2Fmcp/versions/latest) [44]"
       },
       {
        "actor": "Stripe",
        "role": "Server publisher",
        "status": "Listed in Official Registry (HTTP 200 server.json)",
        "status_display": "Listed in Official Registry (HTTP 200 server.json) · checked 2026-10-30",
        "col4_md": "`com.stripe/mcp` `0.2.4` (published 2025-10-28): remote `streamable-http` at `https://mcp.stripe.com`.",
        "source_md": "[com.stripe/mcp 0.2.4](https://registry.modelcontextprotocol.io/v0.1/servers/com.stripe%2Fmcp/versions/0.2.4) [45] · [com.stripe/mcp latest](https://registry.modelcontextprotocol.io/v0.1/servers/com.stripe%2Fmcp/versions/latest) [46]"
       },
       {
        "actor": "Atlassian",
        "role": "Server publisher",
        "status": "Listed in Official Registry (HTTP 200 server.json)",
        "status_display": "Listed in Official Registry (HTTP 200 server.json) · checked 2026-10-30",
        "col4_md": "`com.atlassian/atlassian-mcp-server` `2.0.0` (published 2026-09-09): remote `streamable-http` endpoint.",
        "source_md": "[com.atlassian/atlassian-mcp-server 2.0.0](https://registry.modelcontextprotocol.io/v0.1/servers/com.atlassian%2Fatlassian-mcp-server/versions/2.0.0) [47] · [com.atlassian/atlassian-mcp-server latest](https://registry.modelcontextprotocol.io/v0.1/servers/com.atlassian%2Fatlassian-mcp-server/versions/latest) [48]"
       },
       {
        "actor": "Microsoft",
        "role": "Server publisher",
        "status": "Listed in Official Registry (HTTP 200 server.json)",
        "status_display": "Listed in Official Registry (HTTP 200 server.json) · checked 2026-10-30",
        "col4_md": "`io.github.microsoft/playwright-mcp` `0.0.82` (published 2026-09-18): npm `@playwright/mcp` over `stdio`.",
        "source_md": "[io.github.microsoft/playwright-mcp 0.0.82](https://registry.modelcontextprotocol.io/v0.1/servers/io.github.microsoft%2Fplaywright-mcp/versions/0.0.82) [49] · [io.github.microsoft/playwright-mcp latest](https://registry.modelcontextprotocol.io/v0.1/servers/io.github.microsoft%2Fplaywright-mcp/versions/latest) [50]"
       }
      ]
     }
    ],
    "censuses": [
     {
      "label": "One Year of MCP, 2025-11-25",
      "as_of": "2025-11-25",
      "value_md": "The MCP anniversary post says the MCP Registry is the central index for all available MCP servers and that it has close to two thousand entries since its announcement in September, a 407% growth from the initial batch onboarded that month. [51]"
     },
     {
      "label": "State of MCP Server Development (LocalCan, checked 14 October 2026)",
      "as_of": "2026-10-14",
      "value_md": "LocalCan's census, measured on 14 October 2026, counts 43,012 active servers in the official MCP Registry. Across that set, 59.6% are remote-only, 34.6% ship only as a package, 4.7% offer both, and 1.1% list neither. [52]"
     },
     {
      "label": "MCP server directories (Apideck)",
      "as_of": "2026-10-31",
      "value_md": "Apideck's 31 October 2026 survey counts the official registry API at 53,541 servers, Glama at 113,204 open-source servers and 40,151 remote connectors, PulseMCP at 21,614 servers, MCP Market at 50,999 servers, and the Cursor Marketplace at about 490 plugins. [53]"
     },
     {
      "label": "Same Name, Different Server (arXiv:2609.14119)",
      "as_of": "2026-09-12",
      "value_md": "Obada Kraishan's census, submitted on 12 Sep 2026, harvested the public MCP registry (21,643 servers, 72,606 version records, August 2026 snapshot). Of multi-version servers, 51.1% changed what they advertise between versions, 40.6% did so silently, and 4.2% redirected their remote endpoint to a different host while keeping their registry identity. [54]"
     }
    ],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "openai-apps-sdk-manifests",
     "target_name": "OpenAI Apps SDK manifests",
     "relation_label": "Peer alternative",
     "delta": "MCP Registry (preview) stores `server.json` locations. Apps SDK public plugins use the shared ChatGPT and Codex directory.",
     "item_md": "**[OpenAI Apps SDK manifests](/protocols/openai-apps-sdk-manifests/)** (Peer alternative) — MCP Registry (preview) stores `server.json` locations. Apps SDK public plugins use the shared ChatGPT and Codex directory."
    },
    {
     "item_md": "**[Discover protocols](/category/discover/)** — Category index for `discover` standards."
    }
   ],
   "v05_compiled_md": "---\nid: mcp-registry\ntitle: \"Official MCP Registry\"\ntier: flagship\nlifecycle_status: active\ncategory: discover\nform: endpoint\nwire_archetype: harnesses_rpc_ui\nspec_url: https://modelcontextprotocol.io/registry/about\nlast_checked: 2026-11-12\n---\n\n# Official MCP Registry\n\n**Category:** [Discover](/category/discover/) (`discover`) · **Form:** Endpoint (`endpoint`) · **Last checked:** 2026-11-12\n\n> *This article covers the Official MCP Registry at `registry.modelcontextprotocol.io`, its `server.json` metadata format, and its Registry REST API. For per-server static HTTP discovery metadata, see [MCP Server Cards](/protocols/mcp-server-cards/); for domain-level well-known manifests, see [Agentic Resource Discovery (ARD)](/protocols/ard/); and for the host-to-server wire protocol itself, see [Model Context Protocol](/protocols/mcp/). Third-party services exposing an MCP Registry API (which the FAQ refers to lowercase as \"MCP registries\") are covered under [Adoption and ecosystem](#adoption-and-ecosystem). [1][2]*\n\n> **In brief:** The Official MCP Registry is a centralized upstream catalog where tool maintainers publish machine-readable metadata for public Model Context Protocol servers so client marketplaces and enterprise directories can discover them from a single feed. Instead of scraping fragmented community lists or maintaining manual directory submissions for every AI client, developers publish one standardized `server.json` manifest that downstream aggregators synchronize from `https://registry.modelcontextprotocol.io` via `GET /v0.1/servers`. [1][3]\n\nThe **Official MCP Registry** is the centralized metadata repository for publicly accessible Model Context Protocol (MCP) servers, initiated in February 2025 by David Soria Parra and Justin Spahr-Summers with the PulseMCP and Goose teams and stewarded by the MCP Registry Working Group under the Linux Foundation's Agentic AI Foundation (AAIF). [1][4][5][6] It stores standardized `server.json` records and serves them over an unauthenticated, read-only REST API at `https://registry.modelcontextprotocol.io` as the upstream catalog for downstream marketplaces and aggregators rather than direct host-application queries. [1][3] Publishers declare package locations, remote endpoints, and execution instructions in `server.json`, while aggregators synchronize the catalog via cursor-paginated `GET /v0.1/servers` queries (supporting `updated_since`) and versioned `GET /v0.1/servers/{serverName}/versions/{version}` lookups (including `latest`). [1][3] Launched in public preview on 2025-09-08, the registry introduced the `/v0.1/` API path on 2025-10-17 and froze `/v0.1/` on 2025-10-24 while `/v0/` continues in development. Breaking changes or data resets may still occur before Registry API v1 general availability (`Ideating`, target `TBD`). [1][4][5][7][8] The live `/v0.1/version` endpoint reports service release 1.8.9, built 2026-11-10T11:14:06Z from commit ba94f65. [9]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Discover](/category/discover/) (`discover`) |\n| **Form** | Endpoint (`endpoint`) |\n| **Originated by** | David Soria Parra and Justin Spahr-Summers, with the PulseMCP and Goose teams, February 2025; preview launch 2025-09-08 [4] |\n| **Governed by** | MCP Registry Working Group, chartered 2026-04-08; Radoslav Dimitrov (Stacklok) sole Lead since 2026-07-30. MCP donated 2025-12-09 to the Linux Foundation AAIF. [5][6] |\n| **Track** | Linux Foundation (`linux-foundation`); MCP is a founding project contribution to the Agentic AI Foundation [6][10] |\n| **Status** | Preview. Breaking changes or data resets may occur before general availability. API v0.1 frozen 2025-10-24. API v1 GA is Ideating, target TBD. [1][5][8] |\n| **Version** | API `/v0.1/` introduced 2025-10-17 as the stable path; `/v0/` remains the development path. server.json schema 2025-12-11. Running service release 1.8.9, built 2026-11-10 from commit ba94f65. [7][9][11][12] |\n| **Message format** | JSON (`server.json` records and REST JSON) [1][13] |\n| **Transports** | HTTPS unauthenticated read-only REST [3] |\n| **Record format** | `server.json`, JSON Schema dated 2025-12-11 [11][12] |\n| **Specification** | [The MCP Registry](https://modelcontextprotocol.io/registry/about) · [Official MCP Registry OpenAPI 3.1.0](https://registry.modelcontextprotocol.io/openapi.yaml) [1][13] |\n| **Found at** | `https://registry.modelcontextprotocol.io` — `GET /v0.1/servers`, `GET /v0.1/servers/{serverName}/versions`, `GET /v0.1/servers/{serverName}/versions/{version}` (including `latest`) [3] |\n| **Licence** | MIT License (`modelcontextprotocol/registry`), transitioning to Apache-2.0 (code/specifications) and CC-BY-4.0 (documentation) [8][14] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Official registry API, server.json schema, and publishing rules](#official-registry-api-server-json-schema-and-publishing-rules)\n3. [Upstream aggregator model and the SEP-2127 Server Card track](#upstream-aggregator-model-and-the-sep-2127-server-card-track)\n4. [Counterparts and related standards](#counterparts-and-related-standards)\n5. [Adoption and ecosystem](#adoption-and-ecosystem)\n6. [See also](#see-also)\n7. [References](#references)\n\n---\n\n## Problem and scope\n\nBefore the official catalog launched, MCP servers were scattered across separate community and company directories. Rather than displacing those existing directories, the Official MCP Registry provides a single primary source of truth for publicly available MCP servers that organizations can filter or extend into custom sub-registries. [4] Server maintainers self-publish `server.json` metadata from their own repositories using the `mcp-publisher` CLI, while the registry operates strictly as a metadata catalog rather than hosting, distributing, or executing server binaries. Public client marketplaces can ingest and enrich this upstream feed, and enterprises with strict privacy or security requirements can build private internal sub-registries on the same single upstream source. [4][5][8] The Official MCP Registry does not list private servers, provides no uptime or data durability guarantees, and is not designed for self-hosting because its codebase supports only the hosted `registry.modelcontextprotocol.io` instance. [1][3][5]\n\n### MCP Registry ecosystem\n\n```mermaid\nflowchart LR\n  Dev[\"Server developers\"] -->|\"Publish packages and binaries\"| Pkgs[\"Package registries (npm, PyPI, Docker Hub)\"]\n  Dev -->|\"Publish server.json metadata\"| Official[\"Official MCP Registry (metadata only)\"]\n  Official -.->|\"server.json references packages\"| Pkgs\n  Official -->|\"Read-only REST API pull\"| Agg[\"Downstream aggregators and sub-registries\"]\n  Agg -->|\"OpenAPI REST API\"| Hosts[\"Host applications\"]\n```\n\n*Server developers publish packages and binaries to package registries (`npm`, PyPI, Docker Hub) and publish `server.json` metadata to the Official MCP Registry, whose records point to those packages. Downstream aggregators pull that metadata infrequently, and host applications query aggregators through an `OpenAPI`-compatible REST API rather than calling the official registry directly. [1]*\n\n### server.json\n\n```json\n{\n  \"$schema\": \"https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json\",\n  \"name\": \"io.github.username/email-integration-mcp\",\n  \"title\": \"Email Integration\",\n  \"description\": \"Send emails and manage email accounts\",\n  \"version\": \"1.0.0\",\n  \"packages\": [\n    {\n      \"registryType\": \"npm\",\n      \"identifier\": \"@username/email-integration-mcp\",\n      \"version\": \"1.0.0\",\n      \"transport\": {\n        \"type\": \"stdio\"\n      }\n    }\n  ]\n}\n```\n\n*Publisher `server.json` example for an `npm` package, with `registryType` set to `npm` and `transport` type `stdio`. [15]*\n\n---\n\n## Official registry API, server.json schema, and publishing rules\n\nThe official registry API extends the generic registry API with authentication, package validation, and list filters. Production is `https://registry.modelcontextprotocol.io` and staging is `https://staging.registry.modelcontextprotocol.io`. A `server.json` file describes servers for registry publishing, client discovery, and package management. The `2025-12-11` schema is a static representation for discovery, installation, and configuration, with `packages` and `remotes`. [12][16][17][18]\n\n- **`/v0.1/servers` list and detail routes:** `GET /v0.1/servers` is cursor-paginated and accepts `updated_since`, `search`, `version`, and `include_deleted`. A non-empty `search` query must contain at least three Unicode characters after trimming whitespace; shorter or whitespace-only queries return HTTP `422`. Passing `version=latest` filters to records where `isLatest` is `true`. Clients fetch named entries via `GET /v0.1/servers/{url-encoded-server-name}/versions/latest` or `GET /v0.1/servers/{serverName}/versions`, preserving active filters when following `metadata.nextCursor`. [16]\n- **Generic `packages` and `remotes`:** In `server.json`, `name` uses reverse-DNS syntax with a single forward slash separating namespace from server name. Each `packages` entry specifies a `registryType` (`npm`, `pypi`, `oci`, `nuget`, `cargo` at `https://crates.io`, or `mcpb`), an `identifier`, an exact range-free `version`, and a `transport` object, while `remotes` declares hosted endpoints (`streamable-http` or `sse`) and URL template variables such as `{tenant_id}`. [12][17]\n- **GitHub, DNS, and HTTP namespace proof:** A publish to `registry.modelcontextprotocol.io` must prove the `server.json` namespace. GitHub OAuth and GitHub OIDC use `io.github.*`, so the name MUST be `io.github.username/*` or `io.github.orgname/*`. Domains use reverse-DNS `com.example.*/*`, proved by a DNS TXT record or a `/.well-known/mcp-registry-auth` file. `mcp-publisher` runs those logins. [16][18][19]\n- **Package ownership, _meta limits, and delegated security scanning:** Ownership metadata must show the publisher controls every package, which stops impersonation. Allowed bases are `https://registry.npmjs.org`, `https://pypi.org`, `https://api.nuget.org/v3/index.json`, `https://crates.io`, plus MCPB files on `https://github.com` or `https://gitlab.com`. `_meta` keeps only `io.modelcontextprotocol.registry/publisher-provided` and drops other keys, with a 4KB (4096 bytes) cap. Under its Trust and Security model, the MCP Registry focuses on namespace authentication and metadata hosting, while relying on the broader ecosystem (package registries such as npm, PyPI, and Docker Hub, plus downstream registry aggregators and marketplaces) for security scanning of actual server code, and relies on manual takedown by registry maintainers to remove spam or malicious servers. [1][18]\n\n---\n\n## Upstream aggregator model and the SEP-2127 Server Card track\n\nDownstream aggregators and sub-registries synchronize periodically with `registry.modelcontextprotocol.io` and expose OpenAPI-compatible read endpoints to MCP host applications. In parallel, `SEP-2127` (created 2026-01-21 and marked `Final` on the Extensions Track, though still listed as `Draft` in the 2026-03-26 working-group charter) defines self-hosted Server Cards in the experimental `ext-server-card` repository. [4][8][20][21][22]\n\n- **Upstream store versus sub-registries:** Because the upstream registry is designed for infrequent batch scraping by aggregators rather than direct runtime queries from MCP host applications, downstream sub-registries implement the MCP Registry OpenAPI specification and cache records locally. Sub-registries can also inject custom curation or evaluation metadata under reverse-DNS keys in `_meta` (such as `com.example.subregistry/custom`). [1][3][4]\n- **Why `mcp-publisher` targets only the official registry:** Opening a pull request against the `modelcontextprotocol/registry` repository—such as adding a `server.json` file, a server directory, or a `data/seed.json` entry—does not publish or list a server even if merged. Maintainers instead run `./mcp-publisher publish` from their own project repository (including via GitHub Actions) or validate dry-run payloads with `mcp-publisher validate` against POST `/v0.1/validate` on `registry.modelcontextprotocol.io`. [4][5][8][16][23]\n- **SEP-2127 Server Card discovery:** `SEP-2127` lets a client read available transports, protocol versions, and connection guidance before establishing an MCP connection. In the Final `SEP-2127` specification and the `modelcontextprotocol/ext-server-card` (`experimental-ext-server-card`) repository, Server Cards can be hosted at any unreserved URI, with `<streamable-http-url>/server-card` (`GET <streamable-http-url>/server-card`) reserved as the recommended location. Automated domain-level discovery uses an AI Catalog at `/.well-known/ai-catalog.json` (or `mcp-server-card` link relations; header-based discovery via HTTP headers on the main endpoint was considered and rejected in `SEP-2127` Rationale because probing the main endpoint first defeats pre-connection discovery), while discovery mechanics, CORS/caching requirements, and the threat model live in the extension repository's `docs/discovery.md` document (superseding earlier PR 2127 proposal text that had used `/.well-known/mcp/server-card.json`). [1][20][21][24]\n- **`ext-server-card` and the working-group charter:** `ext-server-card` is an experimental prototyping repository rather than an accepted official extension; it tracks `SEP-2127`, treats `schema.ts` as the schema source of truth, and covers remote connectivity only while leaving package distribution in registry `server.json`. The 2026-03-26 Server Card Working Group charter scopes card format and discovery rather than a general-purpose server catalog, specifying that the Server Card format should stay as close as possible to a subset of `server.json`. [21][22]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **npm Registry API** | `npm REGISTRY-API.md` | Analogous to classic standard | The npm Registry API is the classic package-metadata counterpart. The Official MCP Registry returns server metadata from GET /v0.1/servers, with cursor pagination and an updated_since filter, plus versioned server.json documents. [1][3] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Model Context Protocol](/protocols/mcp/)** | Part of | MCP uses JSON-RPC 2.0 among hosts, clients, and servers. The Official MCP Registry is the centralized metadata repository serving server.json over its REST API. [1][3][25] |\n| **[MCP Server Cards](/protocols/mcp-server-cards/)** | Complements | SEP-2127 Server Cards are static metadata at any unreserved URI, with /server-card recommended. The MCP Registry is a separate repository that owns the server.json schema. [1][20] |\n| **[AI Catalog well-known file](/protocols/ai-catalog-well-known-file/)** | Complements | An AI Catalog may be served at /.well-known/ai-catalog.json so a client can discover artifacts for that host. The MCP Registry is the cross-host metadata repository for MCP servers. [1][26] |\n| **[Open Agentic Schema Framework](/protocols/oasf/)** | Peer alternative | OASF models agent information in a structured, extensible format, and the Agent Directory Service draft organizes skill, domain, and module taxonomies. The MCP Registry indexes servers as server.json records. [1][27] |\n| **[Agentic Resource Discovery (ARD)](/protocols/ard/)** | Peer alternative | ARD hosts a manifest of entries at https://{domain}/.well-known/ard.json on a domain. The Official MCP Registry is a separate HTTP API that lists servers and reads one named server's versions. [3][28] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (14 probed or cited examples across 3 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).*\n\n### Official & federated registries and marketplaces\n\n| Actor | Role | Status | Registry role, API surface & ingestion | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Official MCP Registry** | Upstream public registry | Live (HTTP 200) · checked 2026-11-11 | Live `/v0.1/version` endpoint reports `\"version\": \"1.8.9\"` built at `2026-11-10T11:14:06Z` from commit `ba94f65`; serves `/v0.1/servers` with `2025-12-11` schema entries. | [GET /v0.1/version](https://registry.modelcontextprotocol.io/v0.1/version) [9] · [The MCP Registry](https://modelcontextprotocol.io/registry/about) [1] · [OpenAPI document](https://registry.modelcontextprotocol.io/openapi.yaml) [13] |\n| **GitHub MCP Registry** | Downstream marketplace | Partial · as of 2026-05-19 | On 2025-09-16 OSS registry servers auto-appear; 2026-05-19 adds version sync, while `github.com/mcp` onboarding stays manual. | [Meet the GitHub MCP Registry](https://github.blog/ai-and-ml/github-copilot/meet-the-github-mcp-registry-the-fastest-way-to-discover-mcp-servers/) [29] · [github.com/mcp onboarding discussion](https://github.com/github/github-mcp-server/discussions/1257) [30] |\n| **PulseMCP** | Directory and sub-registry | Partial · checked 2026-10-30 | Ingests the official registry and is setting itself up as a downstream sub-registry for marketplace curation. | [PulseMCP, Work With Us](https://www.pulsemcp.com/work-with-us) [31] · [PulseMCP registry launch newsletter](https://www.pulsemcp.com/posts/newsletter-claude-code-competition-ai-fundraising-abounds-mcp-registry-launch) [32] |\n| **Glama** | Downstream directory | Supported · checked 2026-10-30 | Glama re-publishes the official registry and adds sandbox data, including schema captures and `TDQS` scores. | [How Glama indexes the MCP ecosystem](https://glama.ai/mcp/methodology) [33] |\n| **Kong Konnect MCP Registry** | Enterprise registry | Supported · as of 2026-03-12 | March 2026 enterprise registry implementing a REST API aligned with `registry.modelcontextprotocol.io`. | [Kong Konnect MCP Registry](https://konghq.com/blog/engineering/mcp-registry-dynamic-tool-discovery) [34] · [What is an MCP Registry?](https://konghq.com/blog/learning-center/what-is-an-mcp-registry) [35] |\n| **Eclipse AI Registry** | Downstream aggregator | Partial · checked 2026-11-11 | Vendor-neutral registry hosted at the Eclipse Foundation, where organizations publish which MCP servers, Agent Skills, plugins and A2A agents they approve. A downstream aggregator of the official MCP Registry: it checks MCP servers against the official registry and retrieves their metadata from it. | [MCP Registry community projects](https://github.com/modelcontextprotocol/registry/blob/main/docs/community-projects.md) [36] |\n\n### Consuming IDEs, clients & publisher CLI\n\n| Actor | Role | Status | Discovery or publishing workflow | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **mcp-publisher** | Publisher CLI | Supported · checked 2026-10-30 | Official CLI (`brew install mcp-publisher`) authenticating via `mcp-publisher login github`, `github-oidc`, DNS, or `Ed25519`. | [Getting Started With the Official MCP Registry API](https://nordicapis.com/getting-started-with-the-official-mcp-registry-api/) [37] · [How to authenticate when publishing](https://modelcontextprotocol.io/registry/authentication) [19] · [Publish with GitHub Actions](https://modelcontextprotocol.io/registry/github-actions) [23] |\n| **VS Code** | IDE client | Supported · as of 2025-11-18 | Supports `v0.1` MCP registries and allowlist controls in VS Code Stable (since 2025-11-18) with `@mcp` gallery search. | [MCP registry controls for VS Code Stable](https://github.blog/changelog/2025-11-18-internal-mcp-registry-and-allowlist-controls-for-vs-code-stable-in-public-preview/) [38] · [VS Code MCP servers](https://code.visualstudio.com/docs/agent-customization/mcp-servers) [39] |\n| **GitHub Copilot** | Coding agent client | Supported · checked 2026-10-30 | Admins configure a registry on `v0.1`, requiring `GET /v0.1/servers` and `GET /v0.1/servers/{serverName}/versions/latest`. | [Configure an MCP registry](https://docs.github.com/en/copilot/how-tos/administer-copilot/manage-mcp-usage/configure-mcp-registry) [40] |\n\n### Namespace-authenticated server publishers in the Official Registry (listing ≠ security vetting)\n\nListing in the Official MCP Registry reflects namespace ownership authentication (GitHub OAuth/OIDC, DNS TXT, or HTTP well-known challenge) and schema validation; the registry focuses on namespace authentication and metadata hosting while relying on package registries and downstream aggregators for security scanning of actual server code.\n\n| Actor | Role | Status | Published server.json entry & transport | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **GitHub** | Server publisher | Listed in Official Registry (HTTP 200 server.json) · checked 2026-10-30 | `io.github.github/github-mcp-server` `2.0.3` (published 2026-10-21): `stdio` OCI and `streamable-http` (`https://api.githubcopilot.com/mcp/`). | [io.github.github/github-mcp-server 2.0.3](https://registry.modelcontextprotocol.io/v0.1/servers/io.github.github%2Fgithub-mcp-server/versions/2.0.3) [41] · [io.github.github/github-mcp-server latest](https://registry.modelcontextprotocol.io/v0.1/servers/io.github.github%2Fgithub-mcp-server/versions/latest) [42] |\n| **Notion** | Server publisher | Listed in Official Registry (HTTP 200 server.json) · checked 2026-10-30 | `com.notion/mcp` `1.0.1` (published 2025-09-11): remote `streamable-http` and `sse` endpoints. | [com.notion/mcp 1.0.1](https://registry.modelcontextprotocol.io/v0.1/servers/com.notion%2Fmcp/versions/1.0.1) [43] · [com.notion/mcp latest](https://registry.modelcontextprotocol.io/v0.1/servers/com.notion%2Fmcp/versions/latest) [44] |\n| **Stripe** | Server publisher | Listed in Official Registry (HTTP 200 server.json) · checked 2026-10-30 | `com.stripe/mcp` `0.2.4` (published 2025-10-28): remote `streamable-http` at `https://mcp.stripe.com`. | [com.stripe/mcp 0.2.4](https://registry.modelcontextprotocol.io/v0.1/servers/com.stripe%2Fmcp/versions/0.2.4) [45] · [com.stripe/mcp latest](https://registry.modelcontextprotocol.io/v0.1/servers/com.stripe%2Fmcp/versions/latest) [46] |\n| **Atlassian** | Server publisher | Listed in Official Registry (HTTP 200 server.json) · checked 2026-10-30 | `com.atlassian/atlassian-mcp-server` `2.0.0` (published 2026-09-09): remote `streamable-http` endpoint. | [com.atlassian/atlassian-mcp-server 2.0.0](https://registry.modelcontextprotocol.io/v0.1/servers/com.atlassian%2Fatlassian-mcp-server/versions/2.0.0) [47] · [com.atlassian/atlassian-mcp-server latest](https://registry.modelcontextprotocol.io/v0.1/servers/com.atlassian%2Fatlassian-mcp-server/versions/latest) [48] |\n| **Microsoft** | Server publisher | Listed in Official Registry (HTTP 200 server.json) · checked 2026-10-30 | `io.github.microsoft/playwright-mcp` `0.0.82` (published 2026-09-18): npm `@playwright/mcp` over `stdio`. | [io.github.microsoft/playwright-mcp 0.0.82](https://registry.modelcontextprotocol.io/v0.1/servers/io.github.microsoft%2Fplaywright-mcp/versions/0.0.82) [49] · [io.github.microsoft/playwright-mcp latest](https://registry.modelcontextprotocol.io/v0.1/servers/io.github.microsoft%2Fplaywright-mcp/versions/latest) [50] |\n\n### Ecosystem censuses\n\n- **One Year of MCP, 2025-11-25** (*as of 2025-11-25*): The MCP anniversary post says the MCP Registry is the central index for all available MCP servers and that it has close to two thousand entries since its announcement in September, a 407% growth from the initial batch onboarded that month. [51]\n- **State of MCP Server Development (LocalCan, checked 14 October 2026)** (*as of 2026-10-14*): LocalCan's census, measured on 14 October 2026, counts 43,012 active servers in the official MCP Registry. Across that set, 59.6% are remote-only, 34.6% ship only as a package, 4.7% offer both, and 1.1% list neither. [52]\n- **MCP server directories (Apideck)** (*as of 2026-10-31*): Apideck's 31 October 2026 survey counts the official registry API at 53,541 servers, Glama at 113,204 open-source servers and 40,151 remote connectors, PulseMCP at 21,614 servers, MCP Market at 50,999 servers, and the Cursor Marketplace at about 490 plugins. [53]\n- **Same Name, Different Server (arXiv:2609.14119)** (*as of 2026-09-12*): Obada Kraishan's census, submitted on 12 Sep 2026, harvested the public MCP registry (21,643 servers, 72,606 version records, August 2026 snapshot). Of multi-version servers, 51.1% changed what they advertise between versions, 40.6% did so silently, and 4.2% redirected their remote endpoint to a different host while keeping their registry identity. [54]\n\n---\n\n## See also\n\n- **[OpenAI Apps SDK manifests](/protocols/openai-apps-sdk-manifests/)** *(Peer alternative)* — MCP Registry (preview) stores `server.json` locations. Apps SDK public plugins use the shared ChatGPT and Codex directory.\n- **Category:** [Discover protocols](/category/discover/)\n\n---\n\n## References\n\n1. Model Context Protocol, *The MCP Registry* (checked 2026-10-30) — <https://modelcontextprotocol.io/registry/about>\n2. Model Context Protocol, *Frequently Asked Questions* (checked 2026-10-30) — <https://modelcontextprotocol.io/registry/faq>\n3. Model Context Protocol, *MCP Registry Aggregators* (checked 2026-10-30) — <https://modelcontextprotocol.io/registry/registry-aggregators>\n4. David Soria Parra, Adam Jones, Tadas Antanavicius, Toby Padilla, and Theodora Chu, *Introducing the MCP Registry* (published 2025-09-08) — <https://blog.modelcontextprotocol.io/posts/2025-09-08-mcp-registry-preview/>\n5. Model Context Protocol, *Registry Charter* (initial charter 2026-04-08; lead change 2026-07-30; checked 2026-10-30) — <https://modelcontextprotocol.io/community/working-groups/registry>\n6. Anthropic, *Donating the Model Context Protocol and establishing the Agentic AI Foundation* (published 2025-12-09) — <https://www.anthropic.com/news/donating-the-model-context-protocol-and-establishing-of-the-agentic-ai-foundation>\n7. Model Context Protocol, *Registry API Changelog* (v0.1 introduction 2025-10-17; fetched 2026-10-30) — <https://raw.githubusercontent.com/modelcontextprotocol/registry/main/docs/reference/api/CHANGELOG.md>\n8. modelcontextprotocol/registry, *A community driven registry service for Model Context Protocol (MCP) servers* (API freeze note 2025-10-24; checked 2026-10-30) — <https://github.com/modelcontextprotocol/registry>\n9. Official MCP Registry, *GET /v0.1/version* (build_time 2026-11-10T11:14:06Z; checked 2026-11-11) — <https://registry.modelcontextprotocol.io/v0.1/version>\n10. The Linux Foundation, *Linux Foundation Announces the Formation of the Agentic AI Foundation (AAIF), Anchored by New Project Contributions Including Model Context Protocol (MCP), goose and AGENTS.md* (published 2025-12-09) — <https://www.linuxfoundation.org/press/linux-foundation-announces-the-formation-of-the-agentic-ai-foundation>\n11. Model Context Protocol, *Server JSON Schema Changelog* (release 2025-12-11; fetched 2026-10-30) — <https://raw.githubusercontent.com/modelcontextprotocol/registry/main/docs/reference/server-json/CHANGELOG.md>\n12. Model Context Protocol, *server.json JSON Schema* (schema 2025-12-11; fetched 2026-10-30) — <https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json>\n13. Official MCP Registry, *Official MCP Registry OpenAPI* (OpenAPI 3.1.0; fetched 2026-10-30) — <https://registry.modelcontextprotocol.io/openapi.yaml>\n14. Model Context Protocol, *modelcontextprotocol/registry Repository LICENSE* (fetched 2026-11-12) — <https://raw.githubusercontent.com/modelcontextprotocol/registry/main/LICENSE>\n15. Model Context Protocol, *MCP Registry Supported Package Types* (checked 2026-10-30) — <https://modelcontextprotocol.io/registry/package-types>\n16. Model Context Protocol Registry, *Official Registry API* (checked 2026-11-06) — <https://github.com/modelcontextprotocol/registry/blob/main/docs/reference/api/official-registry-api.md>\n17. Model Context Protocol Registry, *server.json format specification* (checked 2026-11-06) — <https://github.com/modelcontextprotocol/registry/blob/main/docs/reference/server-json/generic-server-json.md>\n18. Model Context Protocol Registry, *Official Registry Requirements for server.json* (checked 2026-11-06) — <https://github.com/modelcontextprotocol/registry/blob/main/docs/reference/server-json/official-registry-requirements.md>\n19. Model Context Protocol, *How to Authenticate When Publishing to the Official MCP Registry* (checked 2026-10-30) — <https://modelcontextprotocol.io/registry/authentication>\n20. David Soria Parra, Sam Morrow, and Tadas Antanavicius, *SEP-2127: MCP Server Cards - HTTP Server Discovery* (Final; created 2026-01-21; checked 2026-10-30) — <https://modelcontextprotocol.io/seps/2127-mcp-server-cards>\n21. Model Context Protocol, *MCP Server Cards (experimental extension)* (checked 2026-11-06) — <https://github.com/modelcontextprotocol/ext-server-card>\n22. Model Context Protocol Server Card Working Group, *Server Card working group charter* (2026-03-26) — <https://modelcontextprotocol.io/community/working-groups/server-card>\n23. Model Context Protocol, *How to Automate Publishing with GitHub Actions* (checked 2026-10-30) — <https://modelcontextprotocol.io/registry/github-actions>\n24. dsp-ant, *SEP-2127: MCP Server Cards - HTTP Server Discovery* (merged; fetched 2026-10-30) — <https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2127>\n25. Model Context Protocol, *Specification* (2026-07-28) — <https://modelcontextprotocol.io/specification/2026-07-28>\n26. AI Catalog, *AI Catalog* (checked 2026-10-30) — <https://ai-catalog.io/spec/>\n27. L. Muscariello and R. Polic (Cisco), *Agent Directory Service (draft-mp-agntcy-ads-03)* (2 November 2026) — <https://www.ietf.org/archive/id/draft-mp-agntcy-ads-03.txt>\n28. Junjie Bu (Google), R.V. Guha, and Shaun Smith (Hugging Face), *Agentic Resource Discovery Specification* (2026-08-26; proposal v0.91) — <https://agenticresourcediscovery.org/spec/>\n29. Toby Padilla, *Meet the GitHub MCP Registry: The fastest way to discover MCP Servers* (published 2025-09-16) — <https://github.blog/ai-and-ml/github-copilot/meet-the-github-mcp-registry-the-fastest-way-to-discover-mcp-servers/>\n30. trent-j, *MCP Server Published But Not Visible on github.com/mcp Registry* (answered 2026-05-19) — <https://github.com/github/github-mcp-server/discussions/1257>\n31. PulseMCP, *Work With Us* (checked 2026-10-30) — <https://www.pulsemcp.com/work-with-us>\n32. PulseMCP, *Claude Code has competition, AI fundraising abounds, Official MCP Registry launched* (2025-09-09) — <https://www.pulsemcp.com/posts/newsletter-claude-code-competition-ai-fundraising-abounds-mcp-registry-launch>\n33. Glama, *How Glama indexes the MCP ecosystem* (checked 2026-10-30) — <https://glama.ai/mcp/methodology>\n34. Hugo Guerrero, Kong, *Leveraging the MCP Registry in Kong Konnect for Dynamic Tool Discovery* (published 2026-03-12) — <https://konghq.com/blog/engineering/mcp-registry-dynamic-tool-discovery>\n35. Kong, *What is an MCP Registry? The Centralized Directory for AI Agents* (published 2026-05-13) — <https://konghq.com/blog/learning-center/what-is-an-mcp-registry>\n36. Model Context Protocol (modelcontextprotocol/registry), *Community Projects* (fetched 2026-11-11) — <https://github.com/modelcontextprotocol/registry/blob/main/docs/community-projects.md>\n37. J Simpson, Nordic APIs, *Getting Started With the Official MCP Registry API* (published 2025-11-19) — <https://nordicapis.com/getting-started-with-the-official-mcp-registry-api/>\n38. Allison, GitHub Changelog, *MCP registry and allowlist controls for VS Code Stable in public preview* (published 2025-11-18) — <https://github.blog/changelog/2025-11-18-internal-mcp-registry-and-allowlist-controls-for-vs-code-stable-in-public-preview/>\n39. Microsoft, *Add MCP servers in VS Code* (fetched 2026-10-30) — <https://code.visualstudio.com/docs/agent-customization/mcp-servers>\n40. GitHub, *Configure an MCP registry for your organization or enterprise* (checked 2026-10-30) — <https://docs.github.com/en/copilot/how-tos/administer-copilot/manage-mcp-usage/configure-mcp-registry>\n41. Official MCP Registry, *io.github.github/github-mcp-server version 2.0.3* (publishedAt 2026-10-21; retained snapshot fetched 2026-10-30) — <https://registry.modelcontextprotocol.io/v0.1/servers/io.github.github%2Fgithub-mcp-server/versions/2.0.3>\n42. Official MCP Registry, *io.github.github/github-mcp-server latest server.json* (publishedAt 2026-10-21; checked 2026-10-30) — <https://registry.modelcontextprotocol.io/v0.1/servers/io.github.github%2Fgithub-mcp-server/versions/latest>\n43. Official MCP Registry, *com.notion/mcp version 1.0.1* (publishedAt 2025-09-11; retained snapshot fetched 2026-10-30) — <https://registry.modelcontextprotocol.io/v0.1/servers/com.notion%2Fmcp/versions/1.0.1>\n44. Official MCP Registry, *com.notion/mcp latest server.json* (publishedAt 2025-09-11; checked 2026-10-30) — <https://registry.modelcontextprotocol.io/v0.1/servers/com.notion%2Fmcp/versions/latest>\n45. Official MCP Registry, *com.stripe/mcp version 0.2.4* (publishedAt 2025-10-28; retained snapshot fetched 2026-10-30) — <https://registry.modelcontextprotocol.io/v0.1/servers/com.stripe%2Fmcp/versions/0.2.4>\n46. Official MCP Registry, *com.stripe/mcp latest server.json* (publishedAt 2025-10-28; checked 2026-10-30) — <https://registry.modelcontextprotocol.io/v0.1/servers/com.stripe%2Fmcp/versions/latest>\n47. Official MCP Registry, *com.atlassian/atlassian-mcp-server version 2.0.0* (publishedAt 2026-09-09; retained snapshot fetched 2026-10-30) — <https://registry.modelcontextprotocol.io/v0.1/servers/com.atlassian%2Fatlassian-mcp-server/versions/2.0.0>\n48. Official MCP Registry, *com.atlassian/atlassian-mcp-server latest server.json* (publishedAt 2026-09-09; checked 2026-10-30) — <https://registry.modelcontextprotocol.io/v0.1/servers/com.atlassian%2Fatlassian-mcp-server/versions/latest>\n49. Official MCP Registry, *io.github.microsoft/playwright-mcp version 0.0.82* (publishedAt 2026-09-18; retained snapshot fetched 2026-10-30) — <https://registry.modelcontextprotocol.io/v0.1/servers/io.github.microsoft%2Fplaywright-mcp/versions/0.0.82>\n50. Official MCP Registry, *io.github.microsoft/playwright-mcp latest server.json* (publishedAt 2026-09-18; checked 2026-10-30) — <https://registry.modelcontextprotocol.io/v0.1/servers/io.github.microsoft%2Fplaywright-mcp/versions/latest>\n51. MCP Core Maintainers, *One Year of MCP: November 2025 Spec Release* (published 2025-11-25) — <https://blog.modelcontextprotocol.io/posts/2025-11-25-first-mcp-anniversary/>\n52. Jarek Ceborski, LocalCan, *State of MCP Server Development: October 2026* (2026-10-15) — <https://www.localcan.com/blog/state-of-mcp-server-development>\n53. Apideck, *MCP server directories* (2026-10-31) — <https://www.apideck.com/blog/mcp-server-directories>\n54. Obada Kraishan, *Same Name, Different Server: A Security Census of Silent Drift in the Model Context Protocol Ecosystem* (submitted 12 Sep 2026; fetched 2026-11-11) — <https://arxiv.org/abs/2609.14119>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "AIMS",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "aliases": [
    "draft-ietf-wimse-aims",
    "Agent Identity Management System"
   ],
   "analog": "a workload-identity framework (cloud IAM roles) applied to agent callers",
   "audience": [
    "standards-body",
    "platform",
    "agent-builder"
   ],
   "collisions": [
    "ISO/IEC 42001 (the artificial intelligence management system standard, also abbreviated AIMS)"
   ],
   "discovery": {
    "mechanism": "No discovery file or fixed path; the draft defines nothing to publish at a site. It points agents at existing OAuth metadata instead: \"When an Agent is invoking a Tool, the Agent MAY use OAuth 2.0 Protected Resource Metadata [OAUTH-RESOURCE-METADATA] to discover how the resource is protected\"",
    "path": null
   },
   "dispute": null,
   "hatnote_md": "This page covers the IETF WIMSE working-group draft AI Identity Management System (`draft-ietf-wimse-aims`), which defines Agent Identity Management System (`AIMS`) as a conceptual model composing existing workload-identity and OAuth standards. Datatracker records that it formally replaced individual draft [`draft-klrc-aiagent-auth`](/protocols/aiagent-auth/) upon WG adoption (`2026-09-15`).",
   "evidence": [
    {
     "label": "[1]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-wimse-aims/",
     "claim": "IETF Datatracker, *draft-ietf-wimse-aims — AI Identity Management System (IETF Datatracker)*, rev 01 published 2026-11-02 (initial WG -00 snapshot 2026-09-15)",
     "date": null,
     "quote": "Active Internet-Draft (wimse WG) / Replaces | | draft-klrc-aiagent-auth / RFC stream | | Internet Engineering Task Force (IETF) / Intended RFC status | | (None) / Last updated | 2026-09-15 / WG state | | WG Document / IESG state | | I-D Exists / Document shepherd | | (None)",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://www.ietf.org/archive/id/draft-ietf-wimse-aims-01.txt",
     "claim": "P. Kasselman (Defakto Security), J. Lombardo (AWS), Y. Rosomakho (Zscaler), B. Campbell (Ping Identity), N. Steele (OpenAI), and A. Parecki (Okta), *AI Identity Management System (draft-ietf-wimse-aims-01)*, 2 November 2026; expires 6 May 2027",
     "date": null,
     "quote": "AI Identity Management System draft-ietf-wimse-aims-01 / This document defines the term Agent Identity Management System (AIMS) as a conceptual model describing the set of functions required to establish, maintain, and evaluate the identity and permissions of an agent workload. / Rather than defining new protocols, this document describes how existing and widely deployed standards can be applied or extended to establish agent authentication and authorization. / Intended status: Informational … Rather than defining new protocols, this document describes how existing and widely deployed standards can be applied or extended to establish agent authentication and authorization. / An Agent is a workload that iteratively interacts with a Large Language Model (LLM) and a set of Tools, Services and Resources. / Expires: 6 May 2027 … 2 November 2026 AI Identity Management System draft-ietf-wimse-aims-01 / This document proposes best practices for authentication and / P. Kasselman Internet-Draft Defakto Security Intended status: Informational J. Lombardo Expires: 6 May 2027 AWS Y. Rosomakho Zscaler B. Campbell Ping Identity N. Steele OpenAI A. Parecki Okta 2 November 2026 AI Identity Management System draft-ietf-wimse-aims-01 / Intended status: Informational … It defines best current practices for combining these and identifies new requirements specific to agent authentication and authorization. / This document has no IANA actions. / Copyright (c) 2026 IETF Trust and the persons identified as the document authors. / Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions / Static API keys are an antipattern for agent identity. They are bearer artifacts that are not cryptographically bound, do not convey identity, are typically long-lived and are operationally difficult to rotate, making them unsuitable for secure agent authentication or authorization. / An agent participating in this framework MUST be assigned exactly one WIMSE identifier, which MAY be a SPIFFE ID. / Agents MUST possess credentials that provide a cryptographic binding to the agent identifier. … The most common mechanism used by agents is mutually-authenticated TLS (mTLS), in which both endpoints present X.509-based credentials and perform a bidirectional certificate exchange as part of the TLS negotiation. / Communication within or between Tools, Services, and Resources is out of scope. … AIMS does not refer to a single product, protocol, or deployment architecture. / A SPIFFE identifier ([SPIFFE-ID]) is a URI in the form of spiffe://<trust-domain>/<path> that uniquely identifies a workload within a trust domain. / SPIFFE defines three credential formats: the X.509-SVID [SPIFFE-X509-SVID], WIT-SVID [SPIFFE-WIT-SVID], and JWT-SVID [SPIFFE-JWT-SVID]. / \"The OAuth 2.0 Authorization Framework\", RFC 6749 / The widely deployed OAuth 2.0 Authorization Framework [OAUTH-FRAMEWORK] is a mechanism for delegated authorization that enables an Agent to obtain limited access to a protected resource / The WIMSE working group defines WIMSE Proof Tokens and HTTP Message Signatures as authentication mechanisms that may be used by agents. / The most common mechanism used by agents is mutually-authenticated TLS (mTLS) / SPIFFE defines three credential formats: the X.509-SVID / WIT-SVID [SPIFFE-WIT-SVID], and JWT-SVID / This document proposes best practices for authentication and authorization of AI agent interactions. / When an Agent is invoking a Tool, the Agent MAY use OAuth 2.0 Protected Resource Metadata [OAUTH-RESOURCE-METADATA] to discover how the resource is protected / Rather than defining new protocols, this document describes how existing and widely deployed standards can be applied or extended",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://datatracker.ietf.org/api/v1/doc/document/draft-ietf-wimse-aims/?format=json",
     "claim": "IETF Datatracker, *IETF Datatracker document record for draft-ietf-wimse-aims*, rev 01, 2026-11-02",
     "date": null,
     "quote": "\"expires\": \"2027-05-06T18:20:54Z\" … \"rev\": \"01\" … \"time\": \"2026-11-02T18:20:54Z\" / \"expires\": \"2027-05-06T18:20:54Z\" … \"rev\": \"01\" … \"shepherd\": null … \"time\": \"2026-11-02T18:20:54Z\"",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-wimse-aims/history/",
     "claim": "IETF Datatracker, *draft-ietf-wimse-aims — AI Identity Management System, document history (IETF Datatracker)*, 2026-09-15",
     "date": "2026-09-15",
     "quote": "2026-09-15 | 00 | Justin Richer | This document now replaces draft-klrc-aiagent-auth instead of None … New version available: draft-ietf-wimse-aims-00.txt / 2026-09-15 | 00 | Justin Richer | This document now replaces draft-klrc-aiagent-auth instead of None",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://www.ietf.org/archive/id/draft-klrc-aiagent-auth-00.txt",
     "claim": "P. Kasselman (Defakto Security), J. Lombardo (AWS), Y. Rosomakho (Zscaler), and B. Campbell (Ping Identity), *AI Agent Authentication and Authorization (draft-klrc-aiagent-auth-00)*, 2 March 2026",
     "date": null,
     "quote": "P. Kasselman Internet-Draft Defakto Security Intended status: Informational J. Lombardo Expires: 3 September 2026 AWS Y. Rosomakho Zscaler B. Campbell Ping Identity 2 March 2026 / draft-klrc-aiagent-auth-00",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-wimse-aims/doc.json",
     "claim": "Pieter Kasselman (Defakto Security), Jeff Lombardo (AWS), Yaroslav Rosomakho (Zscaler), Brian Campbell (Ping Identity), Nick Steele (OpenAI), and Aaron Parecki (Okta), *IETF Datatracker document JSON metadata for draft-ietf-wimse-aims (-00 snapshot)*, rev 00 snapshot, 2026-09-15 (superseded by rev 01 on 2026-11-02)",
     "date": null,
     "quote": "\"affiliation\": \"Defakto Security\" / \"affiliation\": \"AWS\" / \"affiliation\": \"Zscaler\" / \"affiliation\": \"Ping Identity\" / \"affiliation\": \"OpenAI\" / \"affiliation\": \"Okta\"",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://datatracker.ietf.org/wg/wimse/about/",
     "claim": "IETF, *Workload Identity in Multi System Environments (wimse)*, charter charter-ietf-wimse-01 Approved",
     "date": null,
     "quote": "Name | | Workload Identity in Multi System Environments / Acronym | | wimse / State | | Active / Chairs | | Justin Richer, Pieter Kasselman / Workload Identity in Multi System Environments",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://mailarchive.ietf.org/arch/msg/wimse/ipoTMCLvV79Q3gJ1vP3lFtStDiI/",
     "claim": "Justin Richer (WIMSE chair), *[WIMSE] Adoption of AI Agent Authentication and Authorization (AIMS)*, 9 September 2026",
     "date": null,
     "quote": "has been adopted as a working group item for WIMSE. / I am the sole responsible chair, and Pieter has recused himself from all chairing responsibilities for this document.",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://datatracker.ietf.org/wg/wimse/documents/",
     "claim": "IETF WIMSE working group, *Workload Identity in Multi System Environments (wimse) documents*, fetched 2026-10-30",
     "date": null,
     "quote": "draft-ietf-wimse-aims-00 AI Identity Management System | 2026-09-15 / draft-ietf-wimse-aims-00 AI Identity Management System | 2026-09-15 | I-D Exists WG Document",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://datatracker.ietf.org/doc/draft-klrc-aiagent-auth/",
     "claim": "IETF Datatracker, *draft-klrc-aiagent-auth — AI Agent Authentication and Authorization (IETF Datatracker)*, last updated 2026-09-09; latest revision 2026-07-06",
     "date": null,
     "quote": "Replaced Internet-Draft (wimse WG) / AI Agent Authentication and Authorization / Replaced by | | draft-ietf-wimse-aims",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://datatracker.ietf.org/doc/draft-klrc-aiagent-auth/history/",
     "claim": "IETF Datatracker, *draft-klrc-aiagent-auth — AI Agent Authentication and Authorization, document history (IETF Datatracker)*, history through 2026-09-09",
     "date": null,
     "quote": "2026-09-09 | 03 | Justin Richer | IETF WG state changed to Adopted by a WG",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://github.com/ietf-wg-wimse/draft-ietf-wimse-aims/tags",
     "claim": "ietf-wg-wimse, *draft-ietf-wimse-aims tags*, includes tag draft-ietf-wimse-aims-00",
     "date": null,
     "quote": "\"name\": \"draft-ietf-wimse-aims-00\"",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://github.com/ietf-wg-wimse/draft-ietf-wimse-aims",
     "claim": "ietf-wg-wimse, *ietf-wg-wimse/draft-ietf-wimse-aims repository record*, created 2025-11-05",
     "date": null,
     "quote": "\"html_url\": \"https://github.com/ietf-wg-wimse/draft-ietf-wimse-aims\" / \"full_name\": \"ietf-wg-wimse/draft-ietf-wimse-aims\" / \"created_at\": \"2025-11-05T15:19:25Z\" / \"description\": \"A framework for agent to agent authentication using existing standards like WIMSE, OAuth and SPIFFE\"",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://spiffe.io/docs/latest/spiffe-about/overview/",
     "claim": "SPIFFE, *SPIFFE Overview*, undated overview page",
     "date": null,
     "quote": "SPIFFE, the Secure Production Identity Framework for Everyone, is a set of open-source standards for securely identifying software systems in dynamic and heterogeneous environments.",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://www.rfc-editor.org/rfc/rfc9728.html",
     "claim": "M.B. Jones (Self-Issued Consulting), P. Hunt (Independent Identity, Inc.), and A. Parecki (Okta), *OAuth 2.0 Protected Resource Metadata (RFC 9728)*, April 2025",
     "date": null,
     "quote": "RFC 9728 OAuth 2.0 Protected Resource Metadata April 2025",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://www.rfc-editor.org/rfc/rfc9421.html",
     "claim": "A. Backman (Amazon), J. Richer (Bespoke Engineering), and M. Sporny (Digital Bazaar), *HTTP Message Signatures (RFC 9421)*, February 2024",
     "date": null,
     "quote": "RFC 9421 HTTP Message Signatures February 2024 / 4.1. The Signature-Input HTTP Field / 4.2. The Signature HTTP Field",
     "ref": 16
    }
   ],
   "form": "document-format",
   "governance": "IETF WIMSE working group. \"Chairs Justin Richer, Pieter Kasselman\". Because Kasselman is a co-author, Richer chairs this document alone: \"As Pieter is co-author of this document, he has recused himself as chair of any process regarding this work should it continue in the working group, starting with this call for adoption.\"",
   "group": null,
   "history": [
    {
     "date": "2026-10-20",
     "note": "noted draft-thaha-wimse-agent-evidence-binding-00 (individual input to AIMS on audit evidence, 2026-10-19); verified against the datatracker page and the -00 text (IETF rsync mirror)"
    },
    {
     "date": "2026-10-29",
     "note": "Primary-source verification across 22 primary sources"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "wimse-aims",
   "implementation": "none-found",
   "last_verified": "2026-11-08",
   "name": "AI Identity Management System (AIMS)",
   "native_status": "Adopted working-group draft, early stage (WG Document; adopted 2026-09-09, replacing draft-klrc-aiagent-auth)",
   "origin": {
    "org": "Pieter Kasselman, Jeff Lombardo, Yaroslav Rosomakho and Brian Campbell",
    "date": "2026-03-02"
   },
   "pairs_with": [
    "wimse",
    "spiffe",
    "aiagent-auth",
    "oauth-metadata-for-agents",
    "http-message-signatures"
   ],
   "part_of": "wimse",
   "parties": [
    "agent-site",
    "agent-agent"
   ],
   "phase": "working-group",
   "probe": {
    "method": "GET",
    "path": "none",
    "parse": "not applicable: this is a best-practices draft with no origin artefact",
    "on_absent": "No presence signal exists for this record; absence of a probe result says nothing about adoption."
   },
   "question": "What are the best practices for authenticating and authorising interactions between AI agents and the services they call?",
   "scope": "general",
   "spec_url": "https://datatracker.ietf.org/doc/draft-ietf-wimse-aims/",
   "step": "identify",
   "summary_md": "The Informational draft `draft-ietf-wimse-aims` defines `AIMS` as a conceptual model for establishing, maintaining, and evaluating an agent workload's identity and permissions, rather than defining new protocols. An Agent is modeled as a workload that iteratively interacts with a Large Language Model and a set of Tools, Services, and Resources, composing deployed standards such as SPIFFE identifiers, WIMSE tokens, HTTP Message Signatures, and OAuth 2.0 to establish agent identity, authentication, and authorization. `draft-ietf-wimse-aims-01` is dated `2026-11-02` (2 November 2026) and expires `2027-05-06` (6 May 2027), updating initial working-group revision `draft-ietf-wimse-aims-00` (`2026-09-15`, expires 19 March 2027), which on `2026-09-15` replaced `draft-klrc-aiagent-auth`.",
   "track": "ietf",
   "use_cases": [
    "prove-agent-identity",
    "delegate-user-authority"
   ],
   "version": {
    "label": "draft-ietf-wimse-aims-01",
    "date": "2026-11-02"
   },
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-ietf-wimse-aims"
    }
   ],
   "prerequisites": [
    "wimse",
    "http-message-signatures",
    "oauth-metadata-for-agents"
   ],
   "ietf_tracker": {
    "doc": "draft-ietf-wimse-aims",
    "rev": "01",
    "state": "active",
    "stream": "IETF",
    "group_type": "WG",
    "wg": "wimse",
    "replaced_by": null,
    "posted_utc": "2026-11-02",
    "expires_utc": "2027-05-06",
    "as_of": "2026-11-08",
    "source": "https://datatracker.ietf.org/doc/draft-ietf-wimse-aims/",
    "source_label": "per IETF Datatracker"
   },
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-08",
   "v05_hatnote_html_md": "This page covers the IETF WIMSE working-group draft AI Identity Management System (`draft-ietf-wimse-aims`), which defines Agent Identity Management System (`AIMS`) as a conceptual model composing existing workload-identity and OAuth standards. Datatracker records that it formally replaced individual draft [`draft-klrc-aiagent-auth`](/protocols/aiagent-auth/) upon WG adoption (`2026-09-15`). [1][2]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "The Informational draft `draft-ietf-wimse-aims` defines `AIMS` as a conceptual model for establishing, maintaining, and evaluating an agent workload's identity and permissions, rather than defining new protocols. [2] An Agent is modeled as a workload that iteratively interacts with a Large Language Model and a set of Tools, Services, and Resources, composing deployed standards such as SPIFFE identifiers, WIMSE tokens, HTTP Message Signatures, and OAuth 2.0 to establish agent identity, authentication, and authorization. [2] `draft-ietf-wimse-aims-01` is dated `2026-11-02` (2 November 2026) and expires `2027-05-06` (6 May 2027), updating initial working-group revision `draft-ietf-wimse-aims-00` (`2026-09-15`, expires 19 March 2027), which on `2026-09-15` replaced `draft-klrc-aiagent-auth`. [2][3][4]",
   "v05_identity_sentence_md": "The Informational draft `draft-ietf-wimse-aims` defines `AIMS` as a conceptual model for establishing, maintaining, and evaluating an agent workload's identity and permissions, rather than defining new protocols. [2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Identify](/category/identify/) (`identify`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "P. Kasselman (Defakto Security), J. Lombardo (AWS), Y. Rosomakho (Zscaler), and B. Campbell (Ping Identity) published draft-klrc-aiagent-auth-00 on 2 March 2026. draft-ietf-wimse-aims-00 (15 September 2026) and draft-ietf-wimse-aims-01 (2 November 2026) list those authors plus N. Steele (OpenAI) and A. Parecki (Okta). [2][5][6]"
    },
    {
     "label": "Governed by",
     "value_md": "IETF WIMSE working group (Workload Identity in Multi System Environments, acronym wimse, state Active). Chairs: Justin Richer and Pieter Kasselman. Justin Richer wrote that the draft has been adopted as a working group item for WIMSE, and that he is the sole responsible chair because Pieter has recused himself from all chairing responsibilities for this document. [7][8]"
    },
    {
     "label": "Track",
     "value_md": "IETF. RFC stream: Internet Engineering Task Force (IETF). The draft header states Intended status: Informational, while Section 2 (Document Status) states it defines best current practices for combining existing standards and identifies new requirements. Datatracker Intended RFC status is (None). [1][2]"
    },
    {
     "label": "IETF tracker",
     "value_md": "[draft-ietf-wimse-aims](https://datatracker.ietf.org/doc/draft-ietf-wimse-aims/) in the [wimse working group](https://datatracker.ietf.org/wg/wimse/about/) [1][7][9]"
    },
    {
     "label": "Status",
     "value_md": "Active Internet-Draft (wimse WG Document; no document shepherd assigned). Revision 01 published 2 November 2026, expires 6 May 2027. Predecessor draft-klrc-aiagent-auth was adopted by the WG on 2026-09-09 and replaced by -00 on 2026-09-15. [1][2][3][10][11]"
    },
    {
     "label": "Version",
     "value_md": "draft-ietf-wimse-aims-01, dated 2 November 2026 (expires 6 May 2027; initial WG revision draft-ietf-wimse-aims-00 dated 15 September 2026). [2][3][12]"
    },
    {
     "label": "IANA registration",
     "value_md": "The draft has no IANA actions. [2]"
    },
    {
     "label": "Specification",
     "value_md": "[AI Identity Management System, draft-ietf-wimse-aims-01](https://www.ietf.org/archive/id/draft-ietf-wimse-aims-01.txt) [2]"
    },
    {
     "label": "Found at",
     "value_md": "[draft-ietf-wimse-aims on the IETF Datatracker](https://datatracker.ietf.org/doc/draft-ietf-wimse-aims/) and the working-group repository [ietf-wg-wimse/draft-ietf-wimse-aims](https://github.com/ietf-wg-wimse/draft-ietf-wimse-aims), created 2025-11-05, described as a framework for agent to agent authentication using existing standards like WIMSE, OAuth and SPIFFE. [9][13]"
    },
    {
     "label": "Licence",
     "value_md": "Copyright (c) 2026 IETF Trust and the persons identified as the document authors. Code components extracted from this document must include Revised BSD License text. [2]"
    }
   ],
   "v05_problem_md": "Static API keys are an antipattern for agent identity. They are bearer artifacts that are not cryptographically bound, do not convey identity, are typically long-lived, and are operationally difficult to rotate, making them unsuitable for secure agent authentication or authorization. [2] An agent participating in this framework MUST be assigned exactly one WIMSE identifier, which MAY be a SPIFFE ID. Agents MUST possess credentials that provide a cryptographic binding to the agent identifier. The most common mechanism used by agents is mutually-authenticated TLS (`mTLS`), in which both endpoints present X.509-based credentials. [2] Communication within or between Tools, Services, and Resources is out of scope. `AIMS` does not refer to a single product, protocol, or deployment architecture. The draft has no IANA actions. [2]",
   "v05_mechanism_delta_md": "An agent participating in this framework MUST be assigned exactly one WIMSE identifier, which MAY be a SPIFFE ID. Agents MUST possess credentials that provide a cryptographic binding to the agent identifier. The most common mechanism used by agents is mutually-authenticated TLS (`mTLS`), in which both endpoints present X.509-based credentials. [2]",
   "v05_scope_boundary_md": "Communication within or between Tools, Services, and Resources is out of scope. `AIMS` does not refer to a single product, protocol, or deployment architecture. The draft has no IANA actions. [2]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "SPIFFE Workload Identity & X.509/JWT-SVID",
      "spec_or_rfc": "SPIFFE",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "SPIFFE, the Secure Production Identity Framework for Everyone, is a set of open-source standards for securely identifying software systems. AIMS states that a SPIFFE identifier is a URI in the form of `spiffe://<trust-domain>/<path>` (`spiffe://`), that an agent must be assigned exactly one WIMSE identifier, which may be a SPIFFE ID, and that SPIFFE defines the X.509-SVID, WIT-SVID, and JWT-SVID credential formats. [2][14]"
     },
     {
      "name": "OAuth 2.0 Authorization Framework (RFC 6749)",
      "spec_or_rfc": "RFC 6749",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "AIMS cites the OAuth 2.0 Authorization Framework (RFC 6749, [OAUTH-FRAMEWORK]) as a mechanism for delegated authorization that enables an Agent to obtain limited access to a protected resource (such as a service or API) intermediated by an Authorization Server. [2]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "wimse",
      "target_name": "Workload Identity in Multi System Environments (WIMSE)",
      "relation_type": "part_of",
      "relation_label": "Part of",
      "delta_md": "WIMSE is the IETF working group Workload Identity in Multi System Environments, chaired by Justin Richer and Pieter Kasselman, and its documents list includes draft-ietf-wimse-aims as a WG Document. AIMS names WIMSE Proof Tokens and the existing RFC 9421 HTTP Message Signatures mechanism as application-layer authenticators that agents may use alongside mutually-authenticated TLS (mTLS). [2][7][9]"
     },
     {
      "target_id": "spiffe",
      "target_name": "SPIFFE (Secure Production Identity Framework for Everyone)",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "SPIFFE, the Secure Production Identity Framework for Everyone, is a set of open-source standards for securely identifying software systems. AIMS says the single required WIMSE identifier may be a SPIFFE ID, and that SPIFFE defines the X.509-SVID, WIT-SVID, and JWT-SVID credential formats. [2][14]"
     },
     {
      "target_id": "aiagent-auth",
      "target_name": "AI Agent Authentication and Authorization",
      "relation_type": "supersedes",
      "relation_label": "Supersedes",
      "delta_md": "AI Agent Authentication and Authorization (draft-klrc-aiagent-auth) is a Replaced Internet-Draft that Datatracker records as replaced by draft-ietf-wimse-aims. On 15 September 2026 Justin Richer recorded that draft-ietf-wimse-aims now replaces draft-klrc-aiagent-auth instead of None. [2][4][10]"
     },
     {
      "target_id": "oauth-metadata-for-agents",
      "target_name": "OAuth Protected Resource and Authorization Server Metadata (as used for agent authorization)",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "OAuth 2.0 Protected Resource Metadata (RFC 9728, April 2025) is a published metadata format. AIMS says that when an Agent is invoking a Tool, the Agent may use OAuth 2.0 Protected Resource Metadata to discover how the resource is protected, and AIMS states that this document has no IANA actions. [2][15]"
     },
     {
      "target_id": "http-message-signatures",
      "target_name": "HTTP Message Signatures",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "HTTP Message Signatures (RFC 9421, February 2024) defines the `Signature-Input` and `Signature` HTTP fields; AIMS composes WIMSE Proof Tokens and RFC 9421 signatures as existing mechanisms for agent request authentication. [2][16]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "wimse-agent-audit-record",
     "target_name": "An Audit Record Format for AI Agent Authorization Decisions",
     "relation_label": "Complements",
     "delta": "AIMS requires tamper-evident audit records and defines no new wire protocol, and this format is the separate in-toto Statement in a DSSE envelope, which does not extend AIMS.",
     "item_md": "**[An Audit Record Format for AI Agent Authorization Decisions](/protocols/wimse-agent-audit-record/)** (Complements) — AIMS requires tamper-evident audit records and defines no new wire protocol, and this format is the separate in-toto Statement in a DSSE envelope, which does not extend AIMS."
    },
    {
     "target_id": "aip-delegation-chain",
     "target_name": "Agent Identity Protocol (AIP): Verifiable Delegation for AI Agent Systems",
     "relation_label": "Complements",
     "delta": "AIMS covers hops that have an authorization server and a WIMSE identifier, while this chain encodes agent-to-agent subdelegation as a JWT chain or a Biscuit where no authorization server sits on the hop.",
     "item_md": "**[Agent Identity Protocol (AIP): Verifiable Delegation for AI Agent Systems](/protocols/aip-delegation-chain/)** (Complements) — AIMS covers hops that have an authorization server and a WIMSE identifier, while this chain encodes agent-to-agent subdelegation as a JWT chain or a Biscuit where no authorization server sits on the hop."
    },
    {
     "target_id": "credential-delegation-protocol-wimse",
     "target_name": "Credential Delegation Protocol for AI Agents in Multi-System Environments",
     "relation_label": "Complements",
     "delta": "AIMS assigns the agent one WIMSE identifier and defines no new grant, while this companion profiles RFC 8693, DPoP, RAR, and CIBA for capability-shaped delegation tokens inside a trust domain.",
     "item_md": "**[Credential Delegation Protocol for AI Agents in Multi-System Environments](/protocols/credential-delegation-protocol-wimse/)** (Complements) — AIMS assigns the agent one WIMSE identifier and defines no new grant, while this companion profiles RFC 8693, DPoP, RAR, and CIBA for capability-shaped delegation tokens inside a trust domain."
    },
    {
     "target_id": "local-tool-call-proof",
     "target_name": "Per-Call Proof for Local Tool Invocation by AI Agents",
     "relation_label": "Complements",
     "delta": "AIMS assigns the agent a workload identity for networked tool calls, and this proof is the additional per-call check on the local socket before a local MCP tool runs.",
     "item_md": "**[Per-Call Proof for Local Tool Invocation by AI Agents](/protocols/local-tool-call-proof/)** (Complements) — AIMS assigns the agent a workload identity for networked tool calls, and this proof is the additional per-call check on the local socket before a local MCP tool runs."
    },
    {
     "item_md": "**[Identify protocols](/category/identify/)** — Category index for `identify` standards."
    }
   ],
   "v05_compiled_md": "---\nid: wimse-aims\ntitle: \"AI Identity Management System (AIMS)\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: identify\nform: document-format\nwire_archetype: identity_auth_crypto\nspec_url: https://www.ietf.org/archive/id/draft-ietf-wimse-aims-01.txt\nlast_checked: 2026-11-08\n---\n\n# AI Identity Management System (AIMS)\n\n**Category:** [Identify](/category/identify/) (`identify`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-11-08\n\n> *This page covers the IETF WIMSE working-group draft AI Identity Management System (`draft-ietf-wimse-aims`), which defines Agent Identity Management System (`AIMS`) as a conceptual model composing existing workload-identity and OAuth standards. Datatracker records that it formally replaced individual draft [`draft-klrc-aiagent-auth`](/protocols/aiagent-auth/) upon WG adoption (`2026-09-15`). [1][2]*\n\nThe Informational draft `draft-ietf-wimse-aims` defines `AIMS` as a conceptual model for establishing, maintaining, and evaluating an agent workload's identity and permissions, rather than defining new protocols. [2] An Agent is modeled as a workload that iteratively interacts with a Large Language Model and a set of Tools, Services, and Resources, composing deployed standards such as SPIFFE identifiers, WIMSE tokens, HTTP Message Signatures, and OAuth 2.0 to establish agent identity, authentication, and authorization. [2] `draft-ietf-wimse-aims-01` is dated `2026-11-02` (2 November 2026) and expires `2027-05-06` (6 May 2027), updating initial working-group revision `draft-ietf-wimse-aims-00` (`2026-09-15`, expires 19 March 2027), which on `2026-09-15` replaced `draft-klrc-aiagent-auth`. [2][3][4]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Identify](/category/identify/) (`identify`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | P. Kasselman (Defakto Security), J. Lombardo (AWS), Y. Rosomakho (Zscaler), and B. Campbell (Ping Identity) published draft-klrc-aiagent-auth-00 on 2 March 2026. draft-ietf-wimse-aims-00 (15 September 2026) and draft-ietf-wimse-aims-01 (2 November 2026) list those authors plus N. Steele (OpenAI) and A. Parecki (Okta). [2][5][6] |\n| **Governed by** | IETF WIMSE working group (Workload Identity in Multi System Environments, acronym wimse, state Active). Chairs: Justin Richer and Pieter Kasselman. Justin Richer wrote that the draft has been adopted as a working group item for WIMSE, and that he is the sole responsible chair because Pieter has recused himself from all chairing responsibilities for this document. [7][8] |\n| **Track** | IETF. RFC stream: Internet Engineering Task Force (IETF). The draft header states Intended status: Informational, while Section 2 (Document Status) states it defines best current practices for combining existing standards and identifies new requirements. Datatracker Intended RFC status is (None). [1][2] |\n| **IETF tracker** | [draft-ietf-wimse-aims](https://datatracker.ietf.org/doc/draft-ietf-wimse-aims/) in the [wimse working group](https://datatracker.ietf.org/wg/wimse/about/) [1][7][9] |\n| **Status** | Active Internet-Draft (wimse WG Document; no document shepherd assigned). Revision 01 published 2 November 2026, expires 6 May 2027. Predecessor draft-klrc-aiagent-auth was adopted by the WG on 2026-09-09 and replaced by -00 on 2026-09-15. [1][2][3][10][11] |\n| **Version** | draft-ietf-wimse-aims-01, dated 2 November 2026 (expires 6 May 2027; initial WG revision draft-ietf-wimse-aims-00 dated 15 September 2026). [2][3][12] |\n| **IANA registration** | The draft has no IANA actions. [2] |\n| **Specification** | [AI Identity Management System, draft-ietf-wimse-aims-01](https://www.ietf.org/archive/id/draft-ietf-wimse-aims-01.txt) [2] |\n| **Found at** | [draft-ietf-wimse-aims on the IETF Datatracker](https://datatracker.ietf.org/doc/draft-ietf-wimse-aims/) and the working-group repository [ietf-wg-wimse/draft-ietf-wimse-aims](https://github.com/ietf-wg-wimse/draft-ietf-wimse-aims), created 2025-11-05, described as a framework for agent to agent authentication using existing standards like WIMSE, OAuth and SPIFFE. [9][13] |\n| **Licence** | Copyright (c) 2026 IETF Trust and the persons identified as the document authors. Code components extracted from this document must include Revised BSD License text. [2] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nStatic API keys are an antipattern for agent identity. They are bearer artifacts that are not cryptographically bound, do not convey identity, are typically long-lived, and are operationally difficult to rotate, making them unsuitable for secure agent authentication or authorization. [2] An agent participating in this framework MUST be assigned exactly one WIMSE identifier, which MAY be a SPIFFE ID. Agents MUST possess credentials that provide a cryptographic binding to the agent identifier. The most common mechanism used by agents is mutually-authenticated TLS (`mTLS`), in which both endpoints present X.509-based credentials. [2] Communication within or between Tools, Services, and Resources is out of scope. `AIMS` does not refer to a single product, protocol, or deployment architecture. The draft has no IANA actions. [2]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **SPIFFE Workload Identity & X.509/JWT-SVID** | `SPIFFE` | Analogous to classic standard | SPIFFE, the Secure Production Identity Framework for Everyone, is a set of open-source standards for securely identifying software systems. AIMS states that a SPIFFE identifier is a URI in the form of `spiffe://<trust-domain>/<path>` (`spiffe://`), that an agent must be assigned exactly one WIMSE identifier, which may be a SPIFFE ID, and that SPIFFE defines the X.509-SVID, WIT-SVID, and JWT-SVID credential formats. [2][14] |\n| **OAuth 2.0 Authorization Framework (RFC 6749)** | `RFC 6749` | Analogous to classic standard | AIMS cites the OAuth 2.0 Authorization Framework (RFC 6749, [OAUTH-FRAMEWORK]) as a mechanism for delegated authorization that enables an Agent to obtain limited access to a protected resource (such as a service or API) intermediated by an Authorization Server. [2] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Workload Identity in Multi System Environments (WIMSE)](/protocols/wimse/)** | Part of | WIMSE is the IETF working group Workload Identity in Multi System Environments, chaired by Justin Richer and Pieter Kasselman, and its documents list includes draft-ietf-wimse-aims as a WG Document. AIMS names WIMSE Proof Tokens and the existing RFC 9421 HTTP Message Signatures mechanism as application-layer authenticators that agents may use alongside mutually-authenticated TLS (mTLS). [2][7][9] |\n| **[SPIFFE (Secure Production Identity Framework for Everyone)](/protocols/spiffe/)** | Builds on | SPIFFE, the Secure Production Identity Framework for Everyone, is a set of open-source standards for securely identifying software systems. AIMS says the single required WIMSE identifier may be a SPIFFE ID, and that SPIFFE defines the X.509-SVID, WIT-SVID, and JWT-SVID credential formats. [2][14] |\n| **[AI Agent Authentication and Authorization](/protocols/aiagent-auth/)** | Supersedes | AI Agent Authentication and Authorization (draft-klrc-aiagent-auth) is a Replaced Internet-Draft that Datatracker records as replaced by draft-ietf-wimse-aims. On 15 September 2026 Justin Richer recorded that draft-ietf-wimse-aims now replaces draft-klrc-aiagent-auth instead of None. [2][4][10] |\n| **[OAuth Protected Resource and Authorization Server Metadata (as used for agent authorization)](/protocols/oauth-metadata-for-agents/)** | Builds on | OAuth 2.0 Protected Resource Metadata (RFC 9728, April 2025) is a published metadata format. AIMS says that when an Agent is invoking a Tool, the Agent may use OAuth 2.0 Protected Resource Metadata to discover how the resource is protected, and AIMS states that this document has no IANA actions. [2][15] |\n| **[HTTP Message Signatures](/protocols/http-message-signatures/)** | Builds on | HTTP Message Signatures (RFC 9421, February 2024) defines the `Signature-Input` and `Signature` HTTP fields; AIMS composes WIMSE Proof Tokens and RFC 9421 signatures as existing mechanisms for agent request authentication. [2][16] |\n\n---\n\n## See also\n\n- **[An Audit Record Format for AI Agent Authorization Decisions](/protocols/wimse-agent-audit-record/)** *(Complements)* — AIMS requires tamper-evident audit records and defines no new wire protocol, and this format is the separate in-toto Statement in a DSSE envelope, which does not extend AIMS.\n- **[Agent Identity Protocol (AIP): Verifiable Delegation for AI Agent Systems](/protocols/aip-delegation-chain/)** *(Complements)* — AIMS covers hops that have an authorization server and a WIMSE identifier, while this chain encodes agent-to-agent subdelegation as a JWT chain or a Biscuit where no authorization server sits on the hop.\n- **[Credential Delegation Protocol for AI Agents in Multi-System Environments](/protocols/credential-delegation-protocol-wimse/)** *(Complements)* — AIMS assigns the agent one WIMSE identifier and defines no new grant, while this companion profiles RFC 8693, DPoP, RAR, and CIBA for capability-shaped delegation tokens inside a trust domain.\n- **[Per-Call Proof for Local Tool Invocation by AI Agents](/protocols/local-tool-call-proof/)** *(Complements)* — AIMS assigns the agent a workload identity for networked tool calls, and this proof is the additional per-call check on the local socket before a local MCP tool runs.\n- **Category:** [Identify protocols](/category/identify/)\n\n---\n\n## References\n\n1. IETF Datatracker, *draft-ietf-wimse-aims — AI Identity Management System (IETF Datatracker)* (rev 01 published 2026-11-02 (initial WG -00 snapshot 2026-09-15)) — <https://datatracker.ietf.org/doc/draft-ietf-wimse-aims/>\n2. P. Kasselman (Defakto Security), J. Lombardo (AWS), Y. Rosomakho (Zscaler), B. Campbell (Ping Identity), N. Steele (OpenAI), and A. Parecki (Okta), *AI Identity Management System (draft-ietf-wimse-aims-01)* (2 November 2026; expires 6 May 2027) — <https://www.ietf.org/archive/id/draft-ietf-wimse-aims-01.txt>\n3. IETF Datatracker, *IETF Datatracker document record for draft-ietf-wimse-aims* (rev 01, 2026-11-02) — <https://datatracker.ietf.org/api/v1/doc/document/draft-ietf-wimse-aims/?format=json>\n4. IETF Datatracker, *draft-ietf-wimse-aims — AI Identity Management System, document history (IETF Datatracker)* (2026-09-15) — <https://datatracker.ietf.org/doc/draft-ietf-wimse-aims/history/>\n5. P. Kasselman (Defakto Security), J. Lombardo (AWS), Y. Rosomakho (Zscaler), and B. Campbell (Ping Identity), *AI Agent Authentication and Authorization (draft-klrc-aiagent-auth-00)* (2 March 2026) — <https://www.ietf.org/archive/id/draft-klrc-aiagent-auth-00.txt>\n6. Pieter Kasselman (Defakto Security), Jeff Lombardo (AWS), Yaroslav Rosomakho (Zscaler), Brian Campbell (Ping Identity), Nick Steele (OpenAI), and Aaron Parecki (Okta), *IETF Datatracker document JSON metadata for draft-ietf-wimse-aims (-00 snapshot)* (rev 00 snapshot, 2026-09-15 (superseded by rev 01 on 2026-11-02)) — <https://datatracker.ietf.org/doc/draft-ietf-wimse-aims/doc.json>\n7. IETF, *Workload Identity in Multi System Environments (wimse)* (charter charter-ietf-wimse-01 Approved) — <https://datatracker.ietf.org/wg/wimse/about/>\n8. Justin Richer (WIMSE chair), *[WIMSE] Adoption of AI Agent Authentication and Authorization (AIMS)* (9 September 2026) — <https://mailarchive.ietf.org/arch/msg/wimse/ipoTMCLvV79Q3gJ1vP3lFtStDiI/>\n9. IETF WIMSE working group, *Workload Identity in Multi System Environments (wimse) documents* (fetched 2026-10-30) — <https://datatracker.ietf.org/wg/wimse/documents/>\n10. IETF Datatracker, *draft-klrc-aiagent-auth — AI Agent Authentication and Authorization (IETF Datatracker)* (last updated 2026-09-09; latest revision 2026-07-06) — <https://datatracker.ietf.org/doc/draft-klrc-aiagent-auth/>\n11. IETF Datatracker, *draft-klrc-aiagent-auth — AI Agent Authentication and Authorization, document history (IETF Datatracker)* (history through 2026-09-09) — <https://datatracker.ietf.org/doc/draft-klrc-aiagent-auth/history/>\n12. ietf-wg-wimse, *draft-ietf-wimse-aims tags* (includes tag draft-ietf-wimse-aims-00) — <https://github.com/ietf-wg-wimse/draft-ietf-wimse-aims/tags>\n13. ietf-wg-wimse, *ietf-wg-wimse/draft-ietf-wimse-aims repository record* (created 2025-11-05) — <https://github.com/ietf-wg-wimse/draft-ietf-wimse-aims>\n14. SPIFFE, *SPIFFE Overview* (undated overview page) — <https://spiffe.io/docs/latest/spiffe-about/overview/>\n15. M.B. Jones (Self-Issued Consulting), P. Hunt (Independent Identity, Inc.), and A. Parecki (Okta), *OAuth 2.0 Protected Resource Metadata (RFC 9728)* (April 2025) — <https://www.rfc-editor.org/rfc/rfc9728.html>\n16. A. Backman (Amazon), J. Richer (Bespoke Engineering), and M. Sporny (Digital Bazaar), *HTTP Message Signatures (RFC 9421)* (February 2024) — <https://www.rfc-editor.org/rfc/rfc9421.html>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "Poppy",
   "adoption": {
    "level": "observed",
    "by": "Print with Poppy, Ample Computer, crosswalk, Datalayer personal-agent-protocol SDK, and Everruns",
    "probe_run": null
   },
   "aliases": [
    "Poppy"
   ],
   "analog": "OAuth sign-in, applied to the agent acting for a customer",
   "audience": [
    "agent-builder",
    "site-owner",
    "platform"
   ],
   "collisions": [],
   "discovery": {
    "mechanism": "A fixed path on the company's domain. \"A Company MUST publish its poppy.json document at https://{domain}/.well-known/poppy.json over HTTPS, where {domain} is the Company's domain or a subdomain it controls.\"",
    "path": "/.well-known/poppy.json"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://personalagentprotocol.org/docs/0.2/spec",
     "claim": "Personal Agent Protocol, *Personal Agent Protocol Specification (Version 0.2)*, 2026-10-24; fetched 2026-10-30",
     "date": null,
     "quote": "https://personalagentprotocol.org/og.png 1200 630 Personal Agent Protocol: an open protocol for every company and every / \\\",[\\\"$\\\",\\\"a\\\",null,{\\\"href\\\":\\\"/docs/0.2/extensions\\\",\\\"children\\\":\\\"Extensions page\\\"}],\\\".\\\"]}]]}],[\\\"$\\\",\\\"p\\\",null,{\\\"children\\\":[\\\"This is draft version 0.2. Any part of it can change before a",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://personalagentprotocol.org/docs/0.3/spec",
     "claim": "Personal Agent Protocol, *Personal Agent Protocol Specification (Draft 0.3)*, fetched 2026-10-30",
     "date": null,
     "quote": "Personal Agent Protocol (Poppy for short) defines how a Personal Agent, acting for one User, works with a Company on that User's behalf. It covers discovery, identity, account access, and interactions across APIs, web browsing, and conversations with the Company Agent. / A Company MUST publish its poppy.json document at https://{domain}/.well-known/poppy.json over HTTPS, where {domain} is the Company's domain or a subdomain it controls. / The JSON document a Company publishes at /.well-known/poppy.json to tell Personal Agents how to start Sessions and sign in, and which APIs and Company Agent it offers (section 3). / The Personal Agent MUST send a Poppy-Session header on every request to a Company's APIs, conversations, and other endpoints this protocol or an extension defines. / typ MUST be poppy-session+jwt, so the JWT can't be mistaken for a client assertion, delegation, or any other JWT (RFC 8725 §3.11). alg MUST be ES256, so every Personal Agent and Company can work together. The JWT is signed with a delegated key, kid is that key's JWK thumbprint, and pap_dlg carries its delegation / On APIs and protocol endpoints, a signed-out request carries the Session header, and a signed-in request also carries an access token. / A signed-in request carries an access token in the Authorization header, with the scheme the token response's token_type names, as RFC 6750 or, for DPoP-bound tokens, RFC 9449 describes. Whether a Company binds its access tokens with DPoP is its choice, as in OAuth. Personal Agents SHOULD support DPoP, because a Personal Agent that doesn't can't sign in at a Company that requires it. A Personal Agent that supports it sends a DPoP proof with its token requests when the issuer's metadata lists dpop_signing_alg_values_supported (RFC 9449 §5.1), so the Company can bind the tokens. A signed-in request also carries the Session header (5.2), whose ath covers the access token. / The protocol version the document follows, as major.minor. This draft is 0.3. Before 1.0, each version can change the protocol in ways that aren't backward compatible, so a Personal Agent MUST NOT use a document whose major.minor version it doesn't support. / Personal Agent Protocol specification (draft 0.3) Skip to content Personal Agent Protocol Docs version: / The Personal Agent finds the issuer from the protected resource metadata (RFC 9728) of https://{organization.domain}, which the Company publishes at https://{organization.domain}/.well-known/oauth-protected-resource when it has an issuer. / Poppy separates request identity, Session continuity, and account access. / grant_types_supported lists the grant types the token endpoint accepts. Required, and it MUST include refresh_token (4.4). It also says which of Direct and Device Sign-In the Company offers (4): authorization_code for Direct Sign-In and urn:ietf:params:oauth:grant-type:device_code for Device Sign-In. / Companies decide which actions require each scope and enforce them across web browsing, APIs, and actions performed by the Company Agent. / A Company MAY refuse a request it handles only with an extension the Personal Agent doesn't list, unless the request itself uses the extension. It returns extension_required (HTTP 403) with the extension's name in extension. / Personal Agents SHOULD skip API types they don't recognize, so later versions can add types. The protocol leaves each API's schema to that API. / A Company decides which Personal Agents it accepts, and how it approves them is outside this specification. / How a Personal Agent issues delegations within its own systems is outside this specification.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://sierra.ai/blog/introducing-personal-agent-protocol",
     "claim": "Sierra, *Introducing Personal Agent Protocol*, 2026-10-06",
     "date": "2026-10-06",
     "quote": "So today we're excited to announce Personal Agent Protocol — an open standard Meta and Sierra are developing along with industry partners at Genesys, Instinct, Rocket, Shopify, Stripe, and Walmart that defines how personal agents interact with businesses.",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://personalagentprotocol.org/docs/changelog",
     "claim": "Personal Agent Protocol, *Personal Agent Protocol Changelog*, fetched 2026-10-30",
     "date": null,
     "quote": "Version 0.2 Published October 24, 2026. It's frozen at /docs/0.2/spec. / Version 0.1 Published October 9, 2026, the first published draft. It's frozen at /docs/0.1/spec. / Personal Agent Protocol: Changelog Skip to content Personal Agent Protocol Docs version: Draft 0.3 / They sign delegations: JWTs, typed pap-delegation+jwt, that vouch for a delegated key in an RFC 7800 cnf claim and last at most 24 hours. / Company's issuer the standard way, from the protected resource metadata (RFC 9728) of https://{organization.domain},",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://github.com/personal-agent-protocol/personal-agent-protocol",
     "claim": "Personal Agent Protocol, *GitHub API repository record for personal-agent-protocol/personal-agent-protocol*, created 2026-10-14; pushed 2026-10-26; fetched 2026-10-30",
     "date": null,
     "quote": "2026-10-14T12:55:45Z / https://github.com/personal-agent-protocol/personal-agent-protocol",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://github.com/personal-agent-protocol/personal-agent-protocol/commits",
     "claim": "Personal Agent Protocol, *GitHub API commit history for personal-agent-protocol/personal-agent-protocol*, initial commit 2026-10-02; fetched 2026-10-31",
     "date": null,
     "quote": "2026-10-02T16:00:32Z",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://personalagentprotocol.org/docs/path-to-1",
     "claim": "Personal Agent Protocol, *Personal Agent Protocol: Path to 1.0*, fetched 2026-10-30",
     "date": null,
     "quote": "agreed to be listed, in alphabetical order. Personal agents Instinct Meta OpenAI Companies Bank / These are larger areas the draft doesn't cover yet, listed so it's clear they are left out on purpose and not overlooked.",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://personalagentprotocol.org/",
     "claim": "Personal Agent Protocol, *Personal Agent Protocol home page*, fetched 2026-10-30",
     "date": null,
     "quote": "both parties\\\"},{\\\"id\\\":\\\"agents\\\",\\\"label\\\":\\\"For personal agents\\\"},{\\\"id\\\":\\\"companies\\\",\\\"label\\\":\\\"For companies\\\"},{\\\"id\\\":\\\"operations\\\",\\\"label\\\":\\\"For the Operations / Read the docs An open protocol for every company and every personal agent. Personal",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://personalagentprotocol.org/docs/introduction",
     "claim": "Personal Agent Protocol, *Personal Agent Protocol: Introduction*, fetched 2026-10-30",
     "date": null,
     "quote": "Personal Agent Protocol uses OAuth, JWTs, HTTPS, OpenAPI, and MCP wherever they fit, so teams can implement it with libraries and tools that already exist. / Today it is all or nothing. Either the agent passes as the user, signing in with their password and clicking through pages built for people, or the company blocks it and it can't do anything. Neither works well. The user can't limit what the agent does once it's in, and the company can't tell an agent from a person or offer it a better path. / A personal agent always identifies itself, but until the person signs in, the company knows them only by an ID that contains no personal information.",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://personalagentprotocol.org/docs/0.1/spec",
     "claim": "Personal Agent Protocol, *Personal Agent Protocol Specification (Version 0.1)*, 2026-10-09; fetched 2026-10-30",
     "date": null,
     "quote": "and conversations with company agents. https://personalagentprotocol.org/docs/0.1/spec Personal Agent Protocol https://personalagentprotocol.org/og.png 1200 630 Personal Agent",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://www.rfc-editor.org/rfc/rfc6749.html",
     "claim": "D. Hardt, Ed. (Microsoft / IETF), *RFC 6749: The OAuth 2.0 Authorization Framework*, published October 2012",
     "date": null,
     "quote": "The OAuth 2.0 authorization framework enables a third-party",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://www.rfc-editor.org/rfc/rfc8628.html",
     "claim": "W. Denniss, J. Bradley, M. Jones, and H. Tschofenig (IETF), *RFC 8628: OAuth 2.0 Device Authorization Grant*, published August 2019",
     "date": null,
     "quote": "The OAuth 2.0 device authorization grant is designed for Internet-",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://www.rfc-editor.org/rfc/rfc9449.html",
     "claim": "D. Fett, B. Campbell, J. Bradley, T. Lodderstedt, M. Jones, and D. Waite (IETF), *RFC 9449: OAuth 2.0 Demonstrating Proof of Possession (DPoP)*, published September 2023",
     "date": null,
     "quote": "This document describes a mechanism for sender-constraining OAuth 2.0",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-oauth-client-id-metadata-document/",
     "claim": "Aaron Parecki and Emelia Smith (IETF Web Authorization Protocol Working Group), *draft-ietf-oauth-client-id-metadata-document — OAuth Client ID Metadata Document (IETF Datatracker)*, revision -03; last updated 2026-11-02 (expires 2027-05-06)",
     "date": null,
     "quote": "Active Internet-Draft … oauth WG",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://datatracker.ietf.org/doc/html/rfc9728",
     "claim": "IETF Datatracker, *RFC 9728: OAuth 2.0 Protected Resource Metadata*, RFC - Proposed Standard (April 2025)",
     "date": null,
     "quote": "RFC - Proposed Standard April 2025",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://www.rfc-editor.org/rfc/rfc8414.html",
     "claim": "M. Jones, N. Sakimura, and J. Bradley (IETF), *RFC 8414: OAuth 2.0 Authorization Server Metadata*, published June 2018",
     "date": null,
     "quote": "OAuth 2.0 Authorization Server Metadata Abstract This specification defines a metadata format that an OAuth 2.0 client can use",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-oauth-identity-assertion-authz-grant/",
     "claim": "Aaron Parecki, Karl McGuinness, and Brian Campbell (IETF Web Authorization Protocol Working Group), *draft-ietf-oauth-identity-assertion-authz-grant — Identity Assertion JWT Authorization Grant (IETF Datatracker)*, fetched 2026-10-30",
     "date": null,
     "quote": "Active Internet-Draft (oauth WG) … Intended RFC status | | (None) … WG state | | WG Document … IESG state | | I-D Exists",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://www.ietf.org/archive/id/draft-ietf-oauth-identity-assertion-authz-grant-06.txt",
     "claim": "A. Parecki, K. McGuinness, and B. Campbell (IETF OAuth Working Group), *Identity Assertion JWT Authorization Grant (draft-ietf-oauth-identity-assertion-authz-grant-06)*, published 31 October 2026",
     "date": null,
     "quote": "draft-ietf-oauth-identity-assertion-authz-grant-06",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Current : the current protocol version, which is ready for use and may continue to receive backwards compatible changes.",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://aaif.io/blog/a2a-joins-aaif",
     "claim": "Agentic AI Foundation, *A2A joins AAIF's open agentic stack*, published 2026-08-17; modified 2026-09-24",
     "date": null,
     "quote": "A2A v1.0, the first stable specification, shipped in March 2026.",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://printwithpoppy.com/.well-known/poppy.json",
     "claim": "Print with Poppy, *Print with Poppy /.well-known/poppy.json discovery document*, checked 2026-10-29",
     "date": null,
     "quote": "{\"protocol_version\":\"0.3\",\"organization\":{\"name\":\"Print with Poppy\",\"domain\":\"printwithpoppy.com\"},\"auth\":{\"issuer\":\"https://printwithpoppy.com\",\"scopes\":{\"orders:read\":\"See your Print with Poppy account",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://personalagentprotocol.org/docs/demos",
     "claim": "Personal Agent Protocol, *Personal Agent Protocol Demos*, fetched 2026-10-30",
     "date": null,
     "quote": "A real photo-printing store with no cart or checkout button: your personal agent places the order.",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://api.ample.computer/.well-known/poppy.json",
     "claim": "Ample Computer, *Ample Computer /.well-known/poppy.json discovery document*, checked 2026-10-29",
     "date": null,
     "quote": "{\"apis\":[{\"description\":\"Deploy and manage apps, servers, databases and object storage on Ample.\",\"type\":\"mcp\",\"url\":\"https://api.ample.computer/mcp\"}],\"auth\":{\"custom_scopes\":{\"buckets:*\":\"Read, create,",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://github.com/personal-agent-protocol/personal-agent-protocol/issues/15",
     "claim": "Personal Agent Protocol GitHub, *Implementation report: Ample Computer, a company, live on Draft 0.1 since 17 October (Issue #15)*, 2026-10-17; fetched 2026-10-30",
     "date": null,
     "quote": "0.1 has been in production since 17 October 2026:\\n\\n- Discovery at https://ample.computer/.well-known/poppy.json, which redirects",
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://crosswalk.to/.well-known/poppy.json",
     "claim": "crosswalk, *crosswalk /.well-known/poppy.json discovery document*, checked 2026-10-29",
     "date": null,
     "quote": "cf-ray: a52e3fafeda71ad5-FRA {\"protocol_version\":\"0.2\",\"organization\":{\"name\":\"crosswalk\",\"domain\":\"crosswalk.to\" }, \"auth\":{\"issuer\":\"https://crosswalk.to/poppy\",\"direct\":{\"scopes\": \"poppy:read\",\"poppy:write\"",
     "ref": 25
    },
    {
     "label": "[26]",
     "url": "https://pypi.org/pypi/personal-agent-protocol/json",
     "claim": "PyPI / Datalayer, *personal-agent-protocol PyPI package metadata*, 2026-10-27; fetched 2026-10-30",
     "date": null,
     "quote": "Python SDK for Personal Agent Protocol draft 0.3 (2026-10-30) and its Operations extension v2",
     "ref": 26
    },
    {
     "label": "[27]",
     "url": "https://everruns.com/docs/changelog/2026-10-11-poppy-framework-personal-agents/",
     "claim": "Everruns, *Framework apps act as Poppy personal agents (Changelog)*, 2026-10-11; fetched 2026-10-30",
     "date": null,
     "quote": "agents article https://everruns.com/docs/changelog/2026-10-11-poppy-framework-personal-agents/ en PoppyPersonalAgent makes a Framework app a person's own agent over",
     "ref": 27
    }
   ],
   "form": "endpoint",
   "governance": "Sierra and Meta with listed design partners; no standards body was found. \"These companies will participate in the design process for the draft Personal Agent Protocol, contributing valuable feedback from their unique business perspectives.\". \"Partners that have agreed to be listed, in alphabetical order.\" The list names three personal agents (Instinct, Meta, OpenAI), twenty-one companies and nineteen technology providers including Sierra. \"Give feedback by opening an issue on GitHub.\"",
   "group": null,
   "history": [
    {
     "date": "2026-10-15",
     "note": "verified against personalagentprotocol.org; categorized at the identify step (adjacent to permit)"
    },
    {
     "date": "2026-10-16",
     "note": "discovery path /.well-known/poppy.json and the protocol site added from the Sierra announcement"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "personal-agent-protocol",
   "implementation": "prototype",
   "last_verified": "2026-11-12",
   "name": "Personal Agent Protocol",
   "native_status": "Draft specification (\"The specification is a draft\"; working with design partners toward 1.0). Repository last pushed 2026-10-26 with no tagged releases when checked.",
   "origin": {
    "org": "Sierra and Meta, announced 2026-10-06: \"So today we're excited to announce Personal Agent Protocol — an open standard Meta and Sierra are developing along with industry partners at Genesys, Instinct, Rocket, Shopify, Stripe, and Walmart that defines how personal agents interact with businesses.\" Repository first commit `\"message\": \"Initial commit.\"` `\"date\": \"2026-10-02T16:00:32Z\"`; repository record `\"created_at\": \"2026-10-14T12:55:45Z\"`",
    "date": "2026-10-06"
   },
   "part_of": null,
   "parties": [
    "agent-site",
    "agent-human"
   ],
   "phase": "draft",
   "probe": {
    "method": "GET",
    "path": "{origin}/.well-known/poppy.json",
    "parse": "A JSON document means the company publishes a Personal Agent Protocol discovery file; the draft's schema for its contents was not reviewed for this record.",
    "on_absent": "404 or non-JSON means no Poppy discovery file is published at that origin."
   },
   "question": "How does a customer's personal agent identify itself to a business and show it has the customer's permission to act?",
   "scope": "general",
   "spec_url": "https://personalagentprotocol.org/docs/0.2/spec",
   "step": "identify",
   "summary_md": "**Personal Agent Protocol** (`Poppy`) is an open protocol originated by Sierra and Meta with listed design partners that defines how a Personal Agent, acting for one User, works with a Company on that User's behalf across discovery, identity, account access, APIs, web browsing, and conversations with the Company Agent. A Company MUST publish its `poppy.json` document at `https://{domain}/.well-known/poppy.json` over HTTPS to tell Personal Agents how to start Sessions and sign in, and which APIs and Company Agent it offers. The Personal Agent MUST send a `Poppy-Session` header on every request to a Company's APIs, conversations, and other protocol and extension endpoints: a JWT with `typ` `poppy-session+jwt` and `alg` `ES256`, signed for that one request with a delegated key vouched for by a `pap-delegation+jwt` delegation carried in `pap_dlg`. Sessions and account access are independent: a signed-out request carries only the `Poppy-Session` header, while a signed-in request also carries an OAuth access token in the `Authorization` header bound by the Session JWT's `ath` hash. Version `0.1` was published on October 9, 2026 (`/docs/0.1/spec`), Version `0.2` was published on October 24, 2026 (`/docs/0.2/spec`), and Draft `0.3` is in progress at `/docs/0.3/spec`. Before `1.0`, each version can change the protocol in ways that are not backward compatible, so a Personal Agent MUST NOT use a document whose `major.minor` `protocol_version` it does not support.",
   "track": "vendor-consortium",
   "use_cases": [
    "prove-agent-identity",
    "delegate-user-authority",
    "discover-my-api"
   ],
   "version": {
    "label": "0.2 is the latest published version: \"Version 0.2 Published October 24, 2026. It's frozen at /docs/0.2/spec.\" Draft 0.3 is in progress: \"Draft 0.3 In progress, at /docs/spec. This list grows until 0.3 is published.\"; \"This draft is 0.3.\" First version: \"Version 0.1 Published October 9, 2026, the first published draft. It's frozen at /docs/0.1/spec.\"",
    "date": "2026-10-24"
   },
   "watch": [
    {
     "type": "page",
     "url": "https://personalagentprotocol.org/docs/changelog",
     "selector": "main",
     "cadence": "weekly"
    }
   ],
   "pairs_with": [
    "oauth-cimd",
    "oauth-metadata-for-agents",
    "identity-assertion-authz-grant",
    "mcp",
    "a2a"
   ],
   "prerequisites": [
    "oauth-metadata-for-agents",
    "oauth-cimd"
   ],
   "hatnote_md": "This page is about Personal Agent Protocol (\"Poppy\"), the open protocol Sierra and Meta announced on 2026-10-06 for how a person's AI agent signs in to, identifies itself to and works with a company. It is not an agent-to-agent messaging protocol such as [Agent2Agent Protocol (A2A)](/protocols/a2a/): \"It's meant to cover the whole interaction, beyond agent-to-agent conversations\". For the shopping-checkout protocols see [Universal Commerce Protocol (UCP)](/protocols/ucp/), which Sierra calls complementary.",
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "This page is about Personal Agent Protocol (\"Poppy\"), the open protocol Sierra and Meta announced on 2026-10-06 for how a person's AI agent signs in to, identifies itself to and works with a company. It is not an agent-to-agent messaging protocol such as [Agent2Agent Protocol (A2A)](/protocols/a2a/): \"It's meant to cover the whole interaction, beyond agent-to-agent conversations\". For the shopping-checkout protocols see [Universal Commerce Protocol (UCP)](/protocols/ucp/), which Sierra calls complementary. [1]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Personal Agent Protocol** (`Poppy`) is an open protocol originated by Sierra and Meta with listed design partners that defines how a Personal Agent, acting for one User, works with a Company on that User's behalf across discovery, identity, account access, APIs, web browsing, and conversations with the Company Agent. [2][3] A Company MUST publish its `poppy.json` document at `https://{domain}/.well-known/poppy.json` over HTTPS to tell Personal Agents how to start Sessions and sign in, and which APIs and Company Agent it offers. [2] The Personal Agent MUST send a `Poppy-Session` header on every request to a Company's APIs, conversations, and other protocol and extension endpoints: a JWT with `typ` `poppy-session+jwt` and `alg` `ES256`, signed for that one request with a delegated key vouched for by a `pap-delegation+jwt` delegation carried in `pap_dlg`. [2] Sessions and account access are independent: a signed-out request carries only the `Poppy-Session` header, while a signed-in request also carries an OAuth access token in the `Authorization` header bound by the Session JWT's `ath` hash. [2] Version `0.1` was published on October 9, 2026 (`/docs/0.1/spec`), Version `0.2` was published on October 24, 2026 (`/docs/0.2/spec`), and Draft `0.3` is in progress at `/docs/0.3/spec`. [4] Before `1.0`, each version can change the protocol in ways that are not backward compatible, so a Personal Agent MUST NOT use a document whose `major.minor` `protocol_version` it does not support. [2]",
   "v05_identity_sentence_md": "**Personal Agent Protocol** (`Poppy`) is an open protocol originated by Sierra and Meta with listed design partners that defines how a Personal Agent, acting for one User, works with a Company on that User's behalf across discovery, identity, account access, APIs, web browsing, and conversations with the Company Agent. [2][3]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Identify](/category/identify/) (`identify`)"
    },
    {
     "label": "Form",
     "value_md": "Endpoint (`endpoint`)"
    },
    {
     "label": "Originated by",
     "value_md": "Sierra and Meta (`2026-10-06`, with Genesys, Instinct, NiCE, Decagon, Rocket, Shopify, Stripe, and Walmart; initial commit `2026-10-02`, repository published `2026-10-14`) [3][5][6]"
    },
    {
     "label": "Governed by",
     "value_md": "Consortium led by Sierra and Meta with 43 design partners (3 personal agents, 21 companies, 19 tech providers) via GitHub issues [3][7][8]"
    },
    {
     "label": "Track",
     "value_md": "Vendor consortium draft specification (Sierra, Meta, and design partners) [2][3]"
    },
    {
     "label": "Status",
     "value_md": "Draft specification (\"The specification is a draft\"; working with design partners toward 1.0). Repository last pushed 2026-10-26 with no tagged releases when checked. [1][2][4]"
    },
    {
     "label": "Version",
     "value_md": "`Version 0.2` (`2026-10-24`, `/docs/0.2/spec`); `Draft 0.3` in progress (`2026-10-30`, `/docs/0.3/spec`); `Version 0.1` (`2026-10-09`, `/docs/0.1/spec`) [1][2][4]"
    },
    {
     "label": "Wire format",
     "value_md": "Compact JWTs (`poppy-session+jwt`, `pap-delegation+jwt`, RFC 7523 `private_key_jwt`), JSON (`/.well-known/poppy.json`), HTTPS REST / SSE (`text/event-stream`), OpenAPI 3.1, Streamable HTTP MCP [2][4][9]"
    },
    {
     "label": "Specification",
     "value_md": "[Draft 0.3 Spec](https://personalagentprotocol.org/docs/0.3/spec) · [Version 0.2 Spec](https://personalagentprotocol.org/docs/0.2/spec) · [Version 0.1 Spec](https://personalagentprotocol.org/docs/0.1/spec) · [Changelog](https://personalagentprotocol.org/docs/changelog) · [GitHub Repo](https://raw.githubusercontent.com/personal-agent-protocol/personal-agent-protocol/main/README.md) [1][2][10]"
    },
    {
     "label": "Found at",
     "value_md": "`GET https://{domain}/.well-known/poppy.json`, `/.well-known/oauth-protected-resource` (RFC 9728), `/.well-known/oauth-authorization-server` (RFC 8414); headers `Poppy-Session`, `Authorization`, `DPoP`, `Poppy-Approval` (RFC 9651), RFC 9421 `Signature` [2][4]"
    },
    {
     "label": "Licence",
     "value_md": "Apache-2.0 (`personal-agent-protocol/personal-agent-protocol` spec and `/kit/company`) [2][5][8]"
    }
   ],
   "v05_problem_md": "Without a shared protocol, agent interactions with businesses are all or nothing: either the agent passes as the user by signing in with their password and clicking through pages built for people, or the company blocks the agent and it cannot act. [9] Poppy separates request identity, Session continuity, and account access so a Personal Agent identifies itself with a `client_id` metadata URL and pairwise `sub` User ID while the User approves scoped OAuth access via Direct Sign-In (`authorization_code` with PKCE) or Device Sign-In (`urn:ietf:params:oauth:grant-type:device_code`). [2] Across OpenAPI, Streamable HTTP MCP, conversations, and web browsing joined via `web.browser_session_endpoint`, the Company enforces granted scopes and can refuse unsupported extensions with `extension_required`. [2] The protocol leaves each listed `openapi` or `mcp` API's schema to that API and leaves payments, push notifications, multi-version negotiation, device-signed approvals, attachments, and self-hosted personal agents as open topics in Path to 1.0. [2][7] How a Company decides which Personal Agents it accepts, and how a Personal Agent issues delegations within its own systems, are outside the specification. [2]",
   "v05_mechanism_delta_md": "Poppy separates request identity, Session continuity, and account access so a Personal Agent identifies itself with a `client_id` metadata URL and pairwise `sub` User ID while the User approves scoped OAuth access via Direct Sign-In (`authorization_code` with PKCE) or Device Sign-In (`urn:ietf:params:oauth:grant-type:device_code`). [2] Across OpenAPI, Streamable HTTP MCP, conversations, and web browsing joined via `web.browser_session_endpoint`, the Company enforces granted scopes and can refuse unsupported extensions with `extension_required`. [2]",
   "v05_scope_boundary_md": "The protocol leaves each listed `openapi` or `mcp` API's schema to that API and leaves payments, push notifications, multi-version negotiation, device-signed approvals, attachments, and self-hosted personal agents as open topics in Path to 1.0. [2][7] How a Company decides which Personal Agents it accepts, and how a Personal Agent issues delegations within its own systems, are outside the specification. [2]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "OAuth 2.0 Authorization Framework (RFC 6749)",
      "spec_or_rfc": "RFC 6749",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "Authorization-code sign-in uses PKCE (RFC 6749 and RFC 7636), and Draft 0.3 then sends a Poppy-Session header JWT typed poppy-session+jwt on each company API request. [2][11]"
     },
     {
      "name": "OAuth 2.0 Device Authorization Grant (RFC 8628)",
      "spec_or_rfc": "RFC 8628",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "Device Sign-In is the OAuth 2.0 device authorization grant (RFC 8628), used when the personal agent cannot run a browser redirect. [2][12]"
     },
     {
      "name": "OAuth 2.0 Demonstrating Proof of Possession (DPoP, RFC 9449)",
      "spec_or_rfc": "RFC 9449",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "Personal Agents SHOULD support DPoP, because a company may bind its access tokens with DPoP and an agent that cannot do so cannot sign in there. [2][13]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "oauth-cimd",
      "target_name": "OAuth Client ID Metadata Document",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "A Personal Agent's client_id MUST be an HTTPS URL that returns its Client ID Metadata Document, and company discovery stays at /.well-known/poppy.json. [2][14]"
     },
     {
      "target_id": "oauth-metadata-for-agents",
      "target_name": "OAuth Protected Resource and Authorization Server Metadata (as used for agent authorization)",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "Poppy reads the company's OAuth authorization-server metadata for the token endpoint, and the company document itself is /.well-known/poppy.json with protocol_version and organization.name. [2][15][16]"
     },
     {
      "target_id": "identity-assertion-authz-grant",
      "target_name": "Identity Assertion JWT Authorization Grant (ID-JAG)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "An ID-JAG is an oauth-id-jag+jwt assertion presented with the jwt-bearer grant, while Draft 0.3 signs a poppy-session+jwt in the Poppy-Session header after discovery at /.well-known/poppy.json. [2][17][18]"
     },
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Draft 0.3 still sends the poppy-session+jwt Poppy-Session header on company API calls, and MCP remains a reused tool protocol rather than the /.well-known/poppy.json discovery file. [2][19]"
     },
     {
      "target_id": "a2a",
      "target_name": "Agent2Agent Protocol (A2A)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Poppy's company session is a poppy-session+jwt in the Poppy-Session header after /.well-known/poppy.json discovery, and A2A is a separate agent-to-agent message protocol. [2][20]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (5 probed or cited examples; non-exhaustive).",
    "side_a": {
     "visible": true,
     "heading": "Issuers, signers & metadata publishers",
     "col4_header": "Boundary & Format",
     "note_md": null,
     "rows": [
      {
       "actor": "Print with Poppy",
       "role": "Auth policy publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-29",
       "col4_md": "https://printwithpoppy.com/.well-known/poppy.json, seen 2026-10-29, is protocol_version 0.3 with organization.name Print with Poppy and organization.domain printwithpoppy.com. The project demo page describes it as a photo-printing store where the personal agent places the order, and says live orders are charged, printed, and shipped.",
       "source_md": "[printwithpoppy.com poppy.json](https://printwithpoppy.com/.well-known/poppy.json) [21] · [Poppy demos](https://personalagentprotocol.org/docs/demos) [22]"
      },
      {
       "actor": "Ample Computer",
       "role": "Auth policy publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-29",
       "col4_md": "https://api.ample.computer/.well-known/poppy.json, seen 2026-10-29, is protocol_version 0.1 with organization.name Ample Computer. Implementation report filed 2026-10-17 says the company has been live on Draft 0.1 since 2026-10-17. Ample Computer is a cloud for apps that AI agents deploy.",
       "source_md": "[api.ample.computer poppy.json](https://api.ample.computer/.well-known/poppy.json) [23] · [Implementation report issue 15](https://github.com/personal-agent-protocol/personal-agent-protocol/issues/15) [24]"
      },
      {
       "actor": "crosswalk",
       "role": "Auth policy publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-29",
       "col4_md": "https://crosswalk.to/.well-known/poppy.json, seen 2026-10-29, is protocol_version 0.2 with organization.name crosswalk and organization.domain crosswalk.to. The 0.2 file lists scopes poppy:read and poppy:write.",
       "source_md": "[crosswalk.to poppy.json](https://crosswalk.to/.well-known/poppy.json) [25]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Verifiers, WAFs & relying servers",
     "col4_header": "Boundary & Format",
     "note_md": null,
     "rows": [
      {
       "actor": "Datalayer personal-agent-protocol SDK",
       "role": "Client SDK",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-27",
       "col4_md": "PyPI personal-agent-protocol 0.27.0, uploaded 2026-10-27, owned by Datalayer. The summary says it is a Python SDK for Personal Agent Protocol draft 0.3 (2026-10) and Operations extension v1. The discovery file that draft uses is /.well-known/poppy.json with protocol_version and organization.name.",
       "source_md": "[PyPI personal-agent-protocol](https://pypi.org/pypi/personal-agent-protocol/json) [26] · [Draft 0.3 spec](https://personalagentprotocol.org/docs/0.3/spec) [2]"
      },
      {
       "actor": "Everruns",
       "role": "Client SDK",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-11",
       "col4_md": "Everruns changelog 2026-10-11: a Framework app can be a person's own agent over Poppy. The agent identifies itself to the company. The company reads /.well-known/poppy.json (protocol_version, organization.name, organization.domain). Until the person signs in, the company receives an ID that contains no personal information.",
       "source_md": "[Everruns Poppy changelog](https://everruns.com/docs/changelog/2026-10-11-poppy-framework-personal-agents/) [27] · [Poppy introduction](https://personalagentprotocol.org/docs/introduction) [9]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Identify protocols](/category/identify/)** — Category index for `identify` standards."
    }
   ],
   "v05_compiled_md": "---\nid: personal-agent-protocol\ntitle: \"Personal Agent Protocol\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: identify\nform: endpoint\nwire_archetype: identity_auth_crypto\nspec_url: https://personalagentprotocol.org/docs/0.3/spec\nlast_checked: 2026-11-12\n---\n\n# Personal Agent Protocol\n\n**Category:** [Identify](/category/identify/) (`identify`) · **Form:** Endpoint (`endpoint`) · **Last checked:** 2026-11-12\n\n> *This page is about Personal Agent Protocol (\"Poppy\"), the open protocol Sierra and Meta announced on 2026-10-06 for how a person's AI agent signs in to, identifies itself to and works with a company. It is not an agent-to-agent messaging protocol such as [Agent2Agent Protocol (A2A)](/protocols/a2a/): \"It's meant to cover the whole interaction, beyond agent-to-agent conversations\". For the shopping-checkout protocols see [Universal Commerce Protocol (UCP)](/protocols/ucp/), which Sierra calls complementary. [1]*\n\n**Personal Agent Protocol** (`Poppy`) is an open protocol originated by Sierra and Meta with listed design partners that defines how a Personal Agent, acting for one User, works with a Company on that User's behalf across discovery, identity, account access, APIs, web browsing, and conversations with the Company Agent. [2][3] A Company MUST publish its `poppy.json` document at `https://{domain}/.well-known/poppy.json` over HTTPS to tell Personal Agents how to start Sessions and sign in, and which APIs and Company Agent it offers. [2] The Personal Agent MUST send a `Poppy-Session` header on every request to a Company's APIs, conversations, and other protocol and extension endpoints: a JWT with `typ` `poppy-session+jwt` and `alg` `ES256`, signed for that one request with a delegated key vouched for by a `pap-delegation+jwt` delegation carried in `pap_dlg`. [2] Sessions and account access are independent: a signed-out request carries only the `Poppy-Session` header, while a signed-in request also carries an OAuth access token in the `Authorization` header bound by the Session JWT's `ath` hash. [2] Version `0.1` was published on October 9, 2026 (`/docs/0.1/spec`), Version `0.2` was published on October 24, 2026 (`/docs/0.2/spec`), and Draft `0.3` is in progress at `/docs/0.3/spec`. [4] Before `1.0`, each version can change the protocol in ways that are not backward compatible, so a Personal Agent MUST NOT use a document whose `major.minor` `protocol_version` it does not support. [2]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Identify](/category/identify/) (`identify`) |\n| **Form** | Endpoint (`endpoint`) |\n| **Originated by** | Sierra and Meta (`2026-10-06`, with Genesys, Instinct, NiCE, Decagon, Rocket, Shopify, Stripe, and Walmart; initial commit `2026-10-02`, repository published `2026-10-14`) [3][5][6] |\n| **Governed by** | Consortium led by Sierra and Meta with 43 design partners (3 personal agents, 21 companies, 19 tech providers) via GitHub issues [3][7][8] |\n| **Track** | Vendor consortium draft specification (Sierra, Meta, and design partners) [2][3] |\n| **Status** | Draft specification (\"The specification is a draft\"; working with design partners toward 1.0). Repository last pushed 2026-10-26 with no tagged releases when checked. [1][2][4] |\n| **Version** | `Version 0.2` (`2026-10-24`, `/docs/0.2/spec`); `Draft 0.3` in progress (`2026-10-30`, `/docs/0.3/spec`); `Version 0.1` (`2026-10-09`, `/docs/0.1/spec`) [1][2][4] |\n| **Wire format** | Compact JWTs (`poppy-session+jwt`, `pap-delegation+jwt`, RFC 7523 `private_key_jwt`), JSON (`/.well-known/poppy.json`), HTTPS REST / SSE (`text/event-stream`), OpenAPI 3.1, Streamable HTTP MCP [2][4][9] |\n| **Specification** | [Draft 0.3 Spec](https://personalagentprotocol.org/docs/0.3/spec) · [Version 0.2 Spec](https://personalagentprotocol.org/docs/0.2/spec) · [Version 0.1 Spec](https://personalagentprotocol.org/docs/0.1/spec) · [Changelog](https://personalagentprotocol.org/docs/changelog) · [GitHub Repo](https://raw.githubusercontent.com/personal-agent-protocol/personal-agent-protocol/main/README.md) [1][2][10] |\n| **Found at** | `GET https://{domain}/.well-known/poppy.json`, `/.well-known/oauth-protected-resource` (RFC 9728), `/.well-known/oauth-authorization-server` (RFC 8414); headers `Poppy-Session`, `Authorization`, `DPoP`, `Poppy-Approval` (RFC 9651), RFC 9421 `Signature` [2][4] |\n| **Licence** | Apache-2.0 (`personal-agent-protocol/personal-agent-protocol` spec and `/kit/company`) [2][5][8] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [Adoption and ecosystem](#adoption-and-ecosystem)\n4. [See also](#see-also)\n5. [References](#references)\n\n---\n\n## Problem and scope\n\nWithout a shared protocol, agent interactions with businesses are all or nothing: either the agent passes as the user by signing in with their password and clicking through pages built for people, or the company blocks the agent and it cannot act. [9] Poppy separates request identity, Session continuity, and account access so a Personal Agent identifies itself with a `client_id` metadata URL and pairwise `sub` User ID while the User approves scoped OAuth access via Direct Sign-In (`authorization_code` with PKCE) or Device Sign-In (`urn:ietf:params:oauth:grant-type:device_code`). [2] Across OpenAPI, Streamable HTTP MCP, conversations, and web browsing joined via `web.browser_session_endpoint`, the Company enforces granted scopes and can refuse unsupported extensions with `extension_required`. [2] The protocol leaves each listed `openapi` or `mcp` API's schema to that API and leaves payments, push notifications, multi-version negotiation, device-signed approvals, attachments, and self-hosted personal agents as open topics in Path to 1.0. [2][7] How a Company decides which Personal Agents it accepts, and how a Personal Agent issues delegations within its own systems, are outside the specification. [2]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **OAuth 2.0 Authorization Framework (RFC 6749)** | `RFC 6749` | Profiles classic standard | Authorization-code sign-in uses PKCE (RFC 6749 and RFC 7636), and Draft 0.3 then sends a Poppy-Session header JWT typed poppy-session+jwt on each company API request. [2][11] |\n| **OAuth 2.0 Device Authorization Grant (RFC 8628)** | `RFC 8628` | Profiles classic standard | Device Sign-In is the OAuth 2.0 device authorization grant (RFC 8628), used when the personal agent cannot run a browser redirect. [2][12] |\n| **OAuth 2.0 Demonstrating Proof of Possession (DPoP, RFC 9449)** | `RFC 9449` | Profiles classic standard | Personal Agents SHOULD support DPoP, because a company may bind its access tokens with DPoP and an agent that cannot do so cannot sign in there. [2][13] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[OAuth Client ID Metadata Document](/protocols/oauth-cimd/)** | Builds on | A Personal Agent's client_id MUST be an HTTPS URL that returns its Client ID Metadata Document, and company discovery stays at /.well-known/poppy.json. [2][14] |\n| **[OAuth Protected Resource and Authorization Server Metadata (as used for agent authorization)](/protocols/oauth-metadata-for-agents/)** | Builds on | Poppy reads the company's OAuth authorization-server metadata for the token endpoint, and the company document itself is /.well-known/poppy.json with protocol_version and organization.name. [2][15][16] |\n| **[Identity Assertion JWT Authorization Grant (ID-JAG)](/protocols/identity-assertion-authz-grant/)** | Peer alternative | An ID-JAG is an oauth-id-jag+jwt assertion presented with the jwt-bearer grant, while Draft 0.3 signs a poppy-session+jwt in the Poppy-Session header after discovery at /.well-known/poppy.json. [2][17][18] |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | Draft 0.3 still sends the poppy-session+jwt Poppy-Session header on company API calls, and MCP remains a reused tool protocol rather than the /.well-known/poppy.json discovery file. [2][19] |\n| **[Agent2Agent Protocol (A2A)](/protocols/a2a/)** | Complements | Poppy's company session is a poppy-session+jwt in the Poppy-Session header after /.well-known/poppy.json discovery, and A2A is a separate agent-to-agent message protocol. [2][20] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (5 probed or cited examples; non-exhaustive).*\n\n### Issuers, signers & metadata publishers\n\n| Actor | Role | Status | Boundary & Format | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Print with Poppy** | Auth policy publisher | Live (HTTP 200) · checked 2026-10-29 | https://printwithpoppy.com/.well-known/poppy.json, seen 2026-10-29, is protocol_version 0.3 with organization.name Print with Poppy and organization.domain printwithpoppy.com. The project demo page describes it as a photo-printing store where the personal agent places the order, and says live orders are charged, printed, and shipped. | [printwithpoppy.com poppy.json](https://printwithpoppy.com/.well-known/poppy.json) [21] · [Poppy demos](https://personalagentprotocol.org/docs/demos) [22] |\n| **Ample Computer** | Auth policy publisher | Live (HTTP 200) · checked 2026-10-29 | https://api.ample.computer/.well-known/poppy.json, seen 2026-10-29, is protocol_version 0.1 with organization.name Ample Computer. Implementation report filed 2026-10-17 says the company has been live on Draft 0.1 since 2026-10-17. Ample Computer is a cloud for apps that AI agents deploy. | [api.ample.computer poppy.json](https://api.ample.computer/.well-known/poppy.json) [23] · [Implementation report issue 15](https://github.com/personal-agent-protocol/personal-agent-protocol/issues/15) [24] |\n| **crosswalk** | Auth policy publisher | Live (HTTP 200) · checked 2026-10-29 | https://crosswalk.to/.well-known/poppy.json, seen 2026-10-29, is protocol_version 0.2 with organization.name crosswalk and organization.domain crosswalk.to. The 0.2 file lists scopes poppy:read and poppy:write. | [crosswalk.to poppy.json](https://crosswalk.to/.well-known/poppy.json) [25] |\n\n### Verifiers, WAFs & relying servers\n\n| Actor | Role | Status | Boundary & Format | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Datalayer personal-agent-protocol SDK** | Client SDK | Supported · as of 2026-10-27 | PyPI personal-agent-protocol 0.27.0, uploaded 2026-10-27, owned by Datalayer. The summary says it is a Python SDK for Personal Agent Protocol draft 0.3 (2026-10) and Operations extension v1. The discovery file that draft uses is /.well-known/poppy.json with protocol_version and organization.name. | [PyPI personal-agent-protocol](https://pypi.org/pypi/personal-agent-protocol/json) [26] · [Draft 0.3 spec](https://personalagentprotocol.org/docs/0.3/spec) [2] |\n| **Everruns** | Client SDK | Supported · as of 2026-10-11 | Everruns changelog 2026-10-11: a Framework app can be a person's own agent over Poppy. The agent identifies itself to the company. The company reads /.well-known/poppy.json (protocol_version, organization.name, organization.domain). Until the person signs in, the company receives an ID that contains no personal information. | [Everruns Poppy changelog](https://everruns.com/docs/changelog/2026-10-11-poppy-framework-personal-agents/) [27] · [Poppy introduction](https://personalagentprotocol.org/docs/introduction) [9] |\n\n---\n\n## See also\n\n- **Category:** [Identify protocols](/category/identify/)\n\n---\n\n## References\n\n1. Personal Agent Protocol, *Personal Agent Protocol Specification (Version 0.2)* (2026-10-24; fetched 2026-10-30) — <https://personalagentprotocol.org/docs/0.2/spec>\n2. Personal Agent Protocol, *Personal Agent Protocol Specification (Draft 0.3)* (fetched 2026-10-30) — <https://personalagentprotocol.org/docs/0.3/spec>\n3. Sierra, *Introducing Personal Agent Protocol* (2026-10-06) — <https://sierra.ai/blog/introducing-personal-agent-protocol>\n4. Personal Agent Protocol, *Personal Agent Protocol Changelog* (fetched 2026-10-30) — <https://personalagentprotocol.org/docs/changelog>\n5. Personal Agent Protocol, *GitHub API repository record for personal-agent-protocol/personal-agent-protocol* (created 2026-10-14; pushed 2026-10-26; fetched 2026-10-30) — <https://github.com/personal-agent-protocol/personal-agent-protocol>\n6. Personal Agent Protocol, *GitHub API commit history for personal-agent-protocol/personal-agent-protocol* (initial commit 2026-10-02; fetched 2026-10-31) — <https://github.com/personal-agent-protocol/personal-agent-protocol/commits>\n7. Personal Agent Protocol, *Personal Agent Protocol: Path to 1.0* (fetched 2026-10-30) — <https://personalagentprotocol.org/docs/path-to-1>\n8. Personal Agent Protocol, *Personal Agent Protocol home page* (fetched 2026-10-30) — <https://personalagentprotocol.org/>\n9. Personal Agent Protocol, *Personal Agent Protocol: Introduction* (fetched 2026-10-30) — <https://personalagentprotocol.org/docs/introduction>\n10. Personal Agent Protocol, *Personal Agent Protocol Specification (Version 0.1)* (2026-10-09; fetched 2026-10-30) — <https://personalagentprotocol.org/docs/0.1/spec>\n11. D. Hardt, Ed. (Microsoft / IETF), *RFC 6749: The OAuth 2.0 Authorization Framework* (published October 2012) — <https://www.rfc-editor.org/rfc/rfc6749.html>\n12. W. Denniss, J. Bradley, M. Jones, and H. Tschofenig (IETF), *RFC 8628: OAuth 2.0 Device Authorization Grant* (published August 2019) — <https://www.rfc-editor.org/rfc/rfc8628.html>\n13. D. Fett, B. Campbell, J. Bradley, T. Lodderstedt, M. Jones, and D. Waite (IETF), *RFC 9449: OAuth 2.0 Demonstrating Proof of Possession (DPoP)* (published September 2023) — <https://www.rfc-editor.org/rfc/rfc9449.html>\n14. Aaron Parecki and Emelia Smith (IETF Web Authorization Protocol Working Group), *draft-ietf-oauth-client-id-metadata-document — OAuth Client ID Metadata Document (IETF Datatracker)* (revision -03; last updated 2026-11-02 (expires 2027-05-06)) — <https://datatracker.ietf.org/doc/draft-ietf-oauth-client-id-metadata-document/>\n15. IETF Datatracker, *RFC 9728: OAuth 2.0 Protected Resource Metadata* (RFC - Proposed Standard (April 2025)) — <https://datatracker.ietf.org/doc/html/rfc9728>\n16. M. Jones, N. Sakimura, and J. Bradley (IETF), *RFC 8414: OAuth 2.0 Authorization Server Metadata* (published June 2018) — <https://www.rfc-editor.org/rfc/rfc8414.html>\n17. Aaron Parecki, Karl McGuinness, and Brian Campbell (IETF Web Authorization Protocol Working Group), *draft-ietf-oauth-identity-assertion-authz-grant — Identity Assertion JWT Authorization Grant (IETF Datatracker)* (fetched 2026-10-30) — <https://datatracker.ietf.org/doc/draft-ietf-oauth-identity-assertion-authz-grant/>\n18. A. Parecki, K. McGuinness, and B. Campbell (IETF OAuth Working Group), *Identity Assertion JWT Authorization Grant (draft-ietf-oauth-identity-assertion-authz-grant-06)* (published 31 October 2026) — <https://www.ietf.org/archive/id/draft-ietf-oauth-identity-assertion-authz-grant-06.txt>\n19. Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation* (2026-07-28) — <https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning>\n20. Agentic AI Foundation, *A2A joins AAIF's open agentic stack* (published 2026-08-17; modified 2026-09-24) — <https://aaif.io/blog/a2a-joins-aaif>\n21. Print with Poppy, *Print with Poppy /.well-known/poppy.json discovery document* (checked 2026-10-29) — <https://printwithpoppy.com/.well-known/poppy.json>\n22. Personal Agent Protocol, *Personal Agent Protocol Demos* (fetched 2026-10-30) — <https://personalagentprotocol.org/docs/demos>\n23. Ample Computer, *Ample Computer /.well-known/poppy.json discovery document* (checked 2026-10-29) — <https://api.ample.computer/.well-known/poppy.json>\n24. Personal Agent Protocol GitHub, *Implementation report: Ample Computer, a company, live on Draft 0.1 since 17 October (Issue #15)* (2026-10-17; fetched 2026-10-30) — <https://github.com/personal-agent-protocol/personal-agent-protocol/issues/15>\n25. crosswalk, *crosswalk /.well-known/poppy.json discovery document* (checked 2026-10-29) — <https://crosswalk.to/.well-known/poppy.json>\n26. PyPI / Datalayer, *personal-agent-protocol PyPI package metadata* (2026-10-27; fetched 2026-10-30) — <https://pypi.org/pypi/personal-agent-protocol/json>\n27. Everruns, *Framework apps act as Poppy personal agents (Changelog)* (2026-10-11; fetched 2026-10-30) — <https://everruns.com/docs/changelog/2026-10-11-poppy-framework-personal-agents/>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "AAuth",
   "adoption": {
    "level": "observed",
    "by": "Christian Posta (Keycloak extension), Introspection, and Interposed",
    "probe_run": null
   },
   "aliases": [
    "draft-hardt-oauth-aauth-protocol",
    "AAuth Protocol"
   ],
   "analog": "OAuth, with the agent signing its own requests",
   "audience": [
    "agent-builder",
    "platform",
    "standards-body"
   ],
   "collisions": [
    "Agent Authorization Grant (Rosenberg), draft-rosenberg-oauth-aauth"
   ],
   "discovery": {
    "mechanism": "/.well-known/aauth-resource.json (resource), /.well-known/aauth-agent.json (agent), /.well-known/aauth-person.json (person server) and /.well-known/aauth-access.json (access server). \"This specification registers the following well-known URIs per [RFC8615]:\" \"Published at /.well-known/aauth-resource.json. A resource MAY publish this document\"",
    "path": "/.well-known/aauth-resource.json (resource), /.well-known/aauth-agent.json (agent), /.well-known/aauth-person.json (person server) and /.well-known/aauth-access.json (access server). \"This specification registers the following well-known URIs per [RFC8615]:\" \"Published at /.well-known/aauth-resource.json. A resource MAY publish this document\""
   },
   "dispute": null,
   "hatnote_md": "This page is about AAuth, the agent authorization protocol by Dick Hardt of Hellō, published as the individual Internet-Draft `draft-hardt-oauth-aauth-protocol`. Not to be confused with \"AAuth - Agentic Authorization OAuth 2.1 Extension\" (`draft-rosenberg-oauth-aauth`), a separate individual Internet-Draft by Jonathan Rosenberg and Pat White.",
   "evidence": [
    {
     "label": "[1]",
     "url": "https://datatracker.ietf.org/doc/draft-hardt-oauth-aauth-protocol/",
     "claim": "Dick Hardt, *draft-hardt-oauth-aauth-protocol — AAuth Protocol (IETF Datatracker)*, checked 2026-10-30",
     "date": null,
     "quote": "Document Type Active Internet-Draft (individual) Author Dick Hardt Last updated 2026-09-25 Replaces draft-hardt-aauth-protocol / This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process ... Active Internet-Draft (individual) ... Last updated 2026-09-25 ... Replaces draft-hardt-aauth-protocol / This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process / Intended status: Standards Track / is at https://raw.githubusercontent.com/dickhardt/AAuth/refs/heads/main/ draft-hardt-oauth-aauth-protocol.md (https://raw.githubusercontent.com/dickhardt/AAuth/refs/heads/main/ / Hardt Expires 29 March 2027 [Page 46] Internet-Draft AAuth-Protocol September 2026 POST /pending/abc123 HTTP/1.1",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://www.ietf.org/archive/id/draft-hardt-oauth-aauth-protocol-11.txt",
     "claim": "Dick Hardt (Hellō), *AAuth Protocol (draft-hardt-oauth-aauth-protocol-11)*, checked 2026-10-29",
     "date": null,
     "quote": "authorization and identity claim retrieval. ... AAuth starts from this premise: every agent has its own cryptographic identity. / HTTP/1.1 401 Unauthorized AAuth-Requirement: requirement=agent-token The header carries no parameters. The agent retries, presenting its agent token via the Signature-Key header under the jwt scheme / a 401 from a resource endpoint still carries its requirement in AAuth-Requirement / D. Hardt Internet-Draft Hellō Intended status: Standards Track 25 September 2026 Expires: 29 March 2027 AAuth Protocol draft-hardt-oauth-aauth-protocol-11 ... draft-hardt-oauth-aauth-protocol-00 - Initial draft. Replaces draft-hardt-aauth-protocol-02 ... no technical changes. / Hardt Expires 29 March 2027 [Page 114] Internet-Draft AAuth-Protocol September 2026 * *Agent provider / D. Hardt Internet-Draft Hellō Intended status: Standards Track 25 September 2026 Expires: 29 March 2027 / draft-hardt-oauth-aauth-protocol-00 Initial draft. / Organization: Hellō. Coverage: agent token issuance, HTTP Message Signatures, resource token exchange, PS token endpoint. Level of maturity: exploratory. / is informative. draft-hardt-oauth-aauth-protocol-00 Initial draft. Replaces draft-hardt-aauth-protocol-02 (https://datatracker.ietf.org/doc/draft-hardt-aauth-protocol/02/); no technical changes. Hardt Expires / be a server identifier Section 11.1.1 followed by /.well-known/aauth-resource.json. An agent MUST NOT fetch / https://resource.example/pending/abc123 Retry-After: 0 Cache-Control: no-store AAuth-Requirement: requirement=interaction; url=\"https://resource.example/interaction\"; code=\"A1B2-C3D4\" Content-Type: / In OAuth 2.0 [RFC6749] and OpenID Connect [OpenID.Core], the client has no independent identity. Client identifiers are issued by each authorization server or OpenID provider - a client_id at Google is meaningless at GitHub. ... API keys are the same model pushed further: a shared secret issued by a service, copied to the client, and used as a bearer credential. / AAuth starts from this premise: every agent has its own cryptographic identity. ... Every agent instance has its own identifier and signing key, and every request it makes is bound to that key by an HTTP Message Signature ([RFC9421]): no credential is a bearer credential, and none needs pre-registration, so the first API call to a resource is the registration. / Asynchronous event delivery to agents is defined in AAuth Events ([I-D.hardt-aauth-events]). ... This specification defines the AAuth-Requirement, AAuth-Access, and AAuth-Capabilities headers, and the authorization protocol across five resource access modes. ... How the agent obtains the resource token from the agent provider is out of scope. / Contact: Christian Posta. Coverage: AAuth access server extension for Keycloak 26.2.5. Level of maturity: exploratory.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://datatracker.ietf.org/api/v1/doc/newrevisiondocevent/?doc__name=draft-hardt-aauth-protocol&format=json&limit=50",
     "claim": "IETF Datatracker API, *new-revision events for draft-hardt-aauth-protocol (JSON, UTC)*, checked 2026-10-29",
     "date": null,
     "quote": "\"rev\": \"02\", \"time\": \"2026-04-29T06:27:19Z\", \"type\": \"new_revision\"}, {\"by\": \"/api/v1/person/person/110961/\", \"desc\": \"New version available: draft-hardt-aauth-protocol-01.txt\", \"doc\":",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://github.com/dickhardt/AAuth",
     "claim": "GitHub REST API, *dickhardt/AAuth repository record (UTC)*, checked 2026-10-29",
     "date": null,
     "quote": "\"https://api.github.com/repos/dickhardt/AAuth/deployments\", \"created_at\": \"2025-10-25T21:05:02Z\", \"updated_at\": \"2026-10-29T16:23:51Z\", \"pushed_at\": \"2026-10-27T02:51:26Z\", \"git_url\": / \"https://api.github.com/repos/dickhardt/AAuth/deployments\"",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://datatracker.ietf.org/meeting/interim-2026-oauth-03/materials/minutes-interim-2026-oauth-03-202606011700-00",
     "claim": "IETF OAuth Working Group, *Minutes of interim meeting interim-2026-oauth-03*, checked 2026-10-29",
     "date": null,
     "quote": "# IETF OAuth Interim 3 June 1, 2026 # Agentic AI and OAuth discussion",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://datatracker.ietf.org/api/v1/doc/document/draft-hardt-oauth-aauth-protocol/?format=json",
     "claim": "IETF Datatracker API, *IETF Datatracker document record for draft-hardt-oauth-aauth-protocol*, checked 2026-10-29",
     "date": null,
     "quote": "\",\"ad\":null,\"expires\":\"2027-03-29T16:59:56Z\",\"external_url\":\"\",\"group\":\"/api/v1/group/group/1027/\",\"id\":156449,\"intended_std_level\":null,\"keywords\":\"\",\"name\":\"draft-hardt-oauth-aauth-protocol\",\"note\":\"\",\"notify",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://datatracker.ietf.org/api/v1/doc/newrevisiondocevent/?doc__name=draft-hardt-oauth-aauth-protocol&format=json&limit=50",
     "claim": "IETF Datatracker API, *new-revision events for draft-hardt-oauth-aauth-protocol (JSON, UTC)*, checked 2026-10-29",
     "date": null,
     "quote": "\"2026-09-25T16:59:56Z\", \"type\": \"new_revision\"}, {\"by\": \"/api/v1/person/person/110961/\", \"desc\": \"New version available: draft-hardt-oauth-aauth-protocol-10.txt\", \"doc\":",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://datatracker.ietf.org/doc/draft-hardt-httpbis-signature-key/",
     "claim": "D. Hardt (Hellō), *draft-hardt-httpbis-signature-key (IETF Datatracker)*, checked 2026-10-29",
     "date": null,
     "quote": "Signatures as defined in RFC 9421. The Signature-Key request header distributes public keys used",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://interposed.ai/blog/migrating-aauth-draft-9-to-11.html",
     "claim": "Interposed, *Migrating from AAuth draft 9 to draft 11*, checked 2026-10-29",
     "date": null,
     "quote": "verifies the agent's proof-of-possession key (RFC 9421) and issues a short-lived auth token - / is the interesting part. aauth-go is open source and MIT-licensed. If you are building / interposed maintains aauth-go, the first open-source Go implementation of AAuth - Dick Hardt's OAuth extension for AI agents.",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://raw.githubusercontent.com/dickhardt/AAuth/main/README.md",
     "claim": "Dick Hardt, *dickhardt/AAuth README.md*, checked 2026-10-29",
     "date": null,
     "quote": "each draft-*.md into HTML and text. --- Author: Dick Hardt ([email redacted]). Founding sponsor: Geffen",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://senzing.aauth.dev/.well-known/aauth-resource.json",
     "claim": "Senzing AAuth Gateway (`senzing.aauth.dev`), */.well-known/aauth-resource.json*, checked 2026-10-29",
     "date": null,
     "quote": "{\"issuer\":\"https://senzing.aauth.dev\",\"jwks_uri\":\"https://senzing.aauth.dev/.well-known/jwks.json\",\"name\":\"Senzing\",\"description\":\"AAuth gateway to a Senzing deployment - entity search, resolution evidence,",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://secret.agent.coop/.well-known/aauth-resource.json",
     "claim": "`secret.agent.coop`, */.well-known/aauth-resource.json*, checked 2026-10-29",
     "date": null,
     "quote": "JWE it cannot read.\",\"access_mode\":\"person-token\",\"r3_vocabularies\":{\"urn:aauth:vocabulary:openapi\":\"https://secret.agent.coop/openapi.json\"},\"scope_descriptions\":{\"email\":\"Verify an email address and link it",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://registry.npmjs.org/@introspection-sdk/aauth-resource",
     "claim": "npm registry, *@introspection-sdk/aauth-resource package record (UTC)*, checked 2026-10-29",
     "date": null,
     "quote": "{\"_id\":\"@introspection-sdk/aauth-resource\",\"_rev\":\"13-4eeb646b5dc46388f80efacc90ce6849\",\"name\":\"@introspection-sdk/aauth-resource\",\"dist-tags\":{\"placeholder\":\"0.0.0\",\"latest\":\"0.43.0\"},\"versions\":{\"0.0.0-stage\" / \"description\":\"Make an HTTP API an AAuth resource (draft-hardt-oauth-aauth-protocol -11)",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://www.aauth.dev/",
     "claim": "AAuth Project, *aauth.dev home page*, checked 2026-10-29",
     "date": null,
     "quote": "It coexists with OAuth 2.0 and OpenID Connect rather than replacing them.",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://www.rfc-editor.org/rfc/rfc9421.html",
     "claim": "A. Backman, Ed., J. Richer, Ed., and M. Sporny, *RFC 9421: HTTP Message Signatures*, February 2024",
     "date": null,
     "quote": "<meta content=\"Common,Latin\" name=\"scripts\">",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://www.rfc-editor.org/rfc/rfc6749.html",
     "claim": "D. Hardt, Ed., *RFC 6749: The OAuth 2.0 Authorization Framework*, October 2012",
     "date": null,
     "quote": "The OAuth 2.0 authorization framework enables a third-party",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://datatracker.ietf.org/doc/rfc9421/",
     "claim": "IETF Datatracker, *HTTP Message Signatures (RFC 9421)*, Proposed Standard (February 2024); checked 2026-10-30",
     "date": null,
     "quote": "RFC - Proposed Standard (February 2024)",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://insights.bostonidentity.com/research/ietf-datatracker-2026-09-28-aauth-rich-resource-requests",
     "claim": "Boston Identity (IAM Insights), *AAuth's R3 lets an agent ask for an API's named operations, and a person approve one exact call · IAM Insights*, checked 2026-10-31",
     "date": null,
     "quote": "(R3)\",\"@id\":\"https://insights.bostonidentity.com/glossary/hardt-aauth-r3\",\"url\":\"https://insights.bostonidentity.com/glossary/hardt-aauth-r3\",\"sameAs\":\"https://datatracker.ietf.org/doc/draft-hardt-aauth-r3/\",\"d",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://www.ietf.org/archive/id/draft-hardt-aauth-r3-00.txt",
     "claim": "D. Hardt (Hellō), *AAuth Rich Resource Requests (R3) (draft-hardt-aauth-r3-00)*, September 2026; expires 1 April 2027",
     "date": null,
     "quote": "This document defines AAuth Rich Resource Requests (R3), an extension to the AAuth Protocol ([I-D.hardt-oauth-aauth-protocol]) that enables structured, vocabulary-based authorization for resource access.",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-oauth-identity-assertion-authz-grant/",
     "claim": "Aaron Parecki, Karl McGuinness, and Brian Campbell (IETF Web Authorization Protocol Working Group), *draft-ietf-oauth-identity-assertion-authz-grant — Identity Assertion JWT Authorization Grant (IETF Datatracker)*, checked 2026-11-08",
     "date": null,
     "quote": "Active Internet-Draft (oauth WG) … Intended RFC status | | (None) … WG state | | WG Document … IESG state | | I-D Exists",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://datatracker.ietf.org/doc/html/rfc9728",
     "claim": "IETF Datatracker, *RFC 9728: OAuth 2.0 Protected Resource Metadata*, RFC - Proposed Standard (April 2025)",
     "date": null,
     "quote": "RFC - Proposed Standard April 2025",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://www.rfc-editor.org/rfc/rfc8414.html",
     "claim": "M. Jones (Microsoft), N. Sakimura (NRI), and J. Bradley (Yubico), *RFC 8414: OAuth 2.0 Authorization Server Metadata*, June 2018",
     "date": null,
     "quote": "OAuth 2.0 Authorization Server Metadata … /.well-known/oauth-authorization-server",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://github.com/christian-posta/keycloak-aauth-extension",
     "claim": "GitHub REST API, *christian-posta/keycloak-aauth-extension repository record*, checked 2026-10-29",
     "date": null,
     "quote": "\"html_url\": \"https://github.com/christian-posta/keycloak-aauth-extension\", \"description\": \"An implementation of AAuth for Keycloak. Load it as an SPI",
     "ref": 23
    }
   ],
   "form": "http-header",
   "governance": "The author, as an individual Internet-Draft; no IETF working group has adopted it. \"Document Type Active Internet-Draft (individual) Author Dick Hardt Last updated 2026-09-25 Replaces draft-hardt-aauth-protocol\" \"This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process\". The OAuth WG heard it at an interim on 2026-10-05, where the open question was \"Where should this work happen?\": \"Option A In the OAuth WG\" or \"Option B In a new WG\"",
   "group": null,
   "history": [
    {
     "date": "2026-10-16",
     "note": "Expired Internet-Draft (expired 2026-10-04)"
    },
    {
     "date": "2026-10-16",
     "note": "correction: the 2026-10-04 expiry belongs to the companion headers draft; the protocol draft -11 is active until 2027-03-29, so native_status and phase restored"
    },
    {
     "date": "2026-10-16",
     "note": "Companion draft draft-hardt-aauth-headers-00 expired on 2026-10-04; the record follows draft-hardt-oauth-aauth-protocol"
    },
    {
     "date": "2026-10-29",
     "note": "Primary-source verification across 36 primary sources"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "aauth-hardt",
   "implementation": "prototype",
   "last_verified": "2026-11-12",
   "name": "AAuth (Hardt)",
   "native_status": "Active Internet-Draft (individual), expires 2027-03-29 UTC",
   "origin": {
    "org": "Dick Hardt (Hellō)",
    "date": "2025-10-25"
   },
   "pairs_with": [
    "http-message-signatures",
    "aauth-r3",
    "identity-assertion-authz-grant",
    "oauth-metadata-for-agents"
   ],
   "part_of": null,
   "parties": [
    "agent-site",
    "agent-agent"
   ],
   "phase": "draft",
   "probe": {
    "method": "GET",
    "path": "/.well-known/aauth-resource.json",
    "parse": "JSON metadata document with issuer and AAuth resource/agent/access server fields",
    "on_absent": "Resource does not publish AAuth well-known metadata."
   },
   "question": "How does an agent obtain and present authorisation to act at a resource, using signed HTTP requests?",
   "scope": "general",
   "spec_url": "https://datatracker.ietf.org/doc/draft-hardt-oauth-aauth-protocol/",
   "step": "permit",
   "summary_md": "**AAuth (Hardt)** (`draft-hardt-oauth-aauth-protocol`) defines agent-to-resource authorization and identity claim retrieval. AAuth starts from this premise: every agent has its own cryptographic identity. When a request to a protected resource does not present an AAuth agent token, the resource answers with `HTTP/1.1 401 Unauthorized` and `AAuth-Requirement: requirement=agent-token`. The header carries no parameters. `draft-hardt-oauth-aauth-protocol-11`, by D. Hardt (Hellō), has intended status Standards Track, is dated 25 September 2026, and expires 29 March 2027. `draft-hardt-oauth-aauth-protocol-00` is the initial draft and replaces `draft-hardt-aauth-protocol-02`, with no technical changes. It is an Active Internet-Draft (individual) by Dick Hardt, last updated `2026-09-25`, and it replaces `draft-hardt-aauth-protocol`. This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process.",
   "track": "ietf",
   "use_cases": [
    "prove-agent-identity",
    "delegate-user-authority"
   ],
   "version": {
    "label": "draft-hardt-oauth-aauth-protocol-11",
    "date": "2026-09-25"
   },
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-hardt-oauth-aauth-protocol"
    },
    {
     "type": "ietf",
     "doc": "draft-hardt-aauth-headers"
    }
   ],
   "prerequisites": [
    "http-message-signatures"
   ],
   "ietf_tracker": {
    "doc": "draft-hardt-oauth-aauth-protocol",
    "rev": "11",
    "state": "active",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-09-25",
    "expires_utc": "2027-03-29",
    "as_of": "2026-10-30",
    "source": "https://datatracker.ietf.org/doc/draft-hardt-oauth-aauth-protocol/",
    "source_label": "per IETF Datatracker"
   },
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "This page is about AAuth, the agent authorization protocol by Dick Hardt of Hellō, published as the individual Internet-Draft `draft-hardt-oauth-aauth-protocol`. Not to be confused with \"AAuth - Agentic Authorization OAuth 2.1 Extension\" (`draft-rosenberg-oauth-aauth`), a separate individual Internet-Draft by Jonathan Rosenberg and Pat White. [1]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**AAuth (Hardt)** (`draft-hardt-oauth-aauth-protocol`) defines agent-to-resource authorization and identity claim retrieval. AAuth starts from this premise: every agent has its own cryptographic identity. [2] When a request to a protected resource does not present an AAuth agent token, the resource answers with `HTTP/1.1 401 Unauthorized` and `AAuth-Requirement: requirement=agent-token`. The header carries no parameters. [2] `draft-hardt-oauth-aauth-protocol-11`, by D. Hardt (Hellō), has intended status Standards Track, is dated 25 September 2026, and expires 29 March 2027. `draft-hardt-oauth-aauth-protocol-00` is the initial draft and replaces `draft-hardt-aauth-protocol-02`, with no technical changes. [2] It is an Active Internet-Draft (individual) by Dick Hardt, last updated `2026-09-25`, and it replaces `draft-hardt-aauth-protocol`. This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. [1]",
   "v05_identity_sentence_md": "**AAuth (Hardt)** (`draft-hardt-oauth-aauth-protocol`) defines agent-to-resource authorization and identity claim retrieval. AAuth starts from this premise: every agent has its own cryptographic identity. [2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Permit](/category/permit/) (`permit`)"
    },
    {
     "label": "Form",
     "value_md": "HTTP header (`http-header`)"
    },
    {
     "label": "Originated by",
     "value_md": "Dick Hardt (Hellō; `dickhardt/AAuth` created `2025-10-25` UTC; `draft-hardt-aauth-protocol-00` posted `2026-04-02` UTC) [2][3][4]"
    },
    {
     "label": "Governed by",
     "value_md": "IETF Individual Submission (`Intended status: Standards Track`, discussed in IETF OAuth WG; not WG-adopted) [1][2][5]"
    },
    {
     "label": "Track",
     "value_md": "Individual IETF Internet-Draft (`draft-hardt-oauth-aauth-protocol-11`, Intended status: Standards Track) and open specification repository (`dickhardt/AAuth`) [1][2][4]"
    },
    {
     "label": "Status",
     "value_md": "Active Internet-Draft (individual), expires 2027-03-29 UTC [1][6][7]"
    },
    {
     "label": "Version",
     "value_md": "`draft-hardt-oauth-aauth-protocol-11` (`2026-09-25` UTC, expires `2027-03-29` UTC; `-00` posted `2026-04-29` UTC) [1][6][7]"
    },
    {
     "label": "Wire format",
     "value_md": "RFC 7519 JWTs (`application/aa-{agent,person,resource,auth}+jwt`), RFC 9421 HTTP Message Signatures, `Signature-Key`, RFC 9457 `application/problem+json` [2][8][9]"
    },
    {
     "label": "Specification",
     "value_md": "[Datatracker (`draft-hardt-oauth-aauth-protocol`)](https://datatracker.ietf.org/doc/draft-hardt-oauth-aauth-protocol/) · [Draft `-11` Text](https://www.ietf.org/archive/id/draft-hardt-oauth-aauth-protocol-11.txt) · [`dickhardt/AAuth`](https://raw.githubusercontent.com/dickhardt/AAuth/main/README.md) · [aauth.dev](https://www.aauth.dev/) [1][2][10]"
    },
    {
     "label": "Found at",
     "value_md": "`/.well-known/aauth-{agent,person,access,resource}.json`; `Link: rel=\"aauth-resource\"`; `Signature-Key`, `AAuth-Requirement`, `AAuth-Access`, `AAuth-Capabilities` [2][11][12]"
    },
    {
     "label": "Licence",
     "value_md": "Revised BSD for spec code; MIT (`aauth-go`, PyPI `aauth`) and Apache-2.0 (`@introspection-sdk/aauth-resource`) [2][9][13]"
    },
    {
     "label": "IETF state",
     "value_md": "`draft-hardt-oauth-aauth-protocol-11` · **Active Internet-Draft** (expires 2027-03-29) · Individual · as of 2026-10-30 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-hardt-oauth-aauth-protocol/))"
    }
   ],
   "v05_problem_md": "In OAuth 2.0 and OpenID Connect, the client has no independent identity. Client identifiers are issued by each authorization server or OpenID provider, so a `client_id` at one provider is meaningless at another. API keys are the same model pushed further: a shared secret issued by a service, copied to the client, and used as a bearer credential. [2] AAuth starts from this premise: every agent has its own cryptographic identity. Every agent instance has its own identifier and signing key, and every request it makes is bound to that key by an HTTP Message Signature: no credential is a bearer credential, and none needs pre-registration, so the first API call to a resource is the registration. [2] The specification defines the `AAuth-Requirement`, `AAuth-Access`, and `AAuth-Capabilities` headers and the authorization protocol across five resource access modes, while asynchronous event delivery is defined in `AAuth Events` and how the agent obtains its token from the agent provider is out of scope. [2] It coexists with OAuth 2.0 and OpenID Connect rather than replacing them. [14]",
   "v05_mechanism_delta_md": "AAuth starts from this premise: every agent has its own cryptographic identity. Every agent instance has its own identifier and signing key, and every request it makes is bound to that key by an HTTP Message Signature: no credential is a bearer credential, and none needs pre-registration, so the first API call to a resource is the registration. [2]",
   "v05_scope_boundary_md": "The specification defines the `AAuth-Requirement`, `AAuth-Access`, and `AAuth-Capabilities` headers and the authorization protocol across five resource access modes, while asynchronous event delivery is defined in `AAuth Events` and how the agent obtains its token from the agent provider is out of scope. [2] It coexists with OAuth 2.0 and OpenID Connect rather than replacing them. [14]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "HTTP Message Signatures (RFC 9421)",
      "spec_or_rfc": "RFC 9421",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "AAuth (Hardt) requires HTTP Message Signatures so the agent signs its own requests, and it publishes documents at /.well-known/aauth-resource.json, aauth-agent.json, aauth-person.json, and aauth-access.json. [1][15]"
     },
     {
      "name": "OAuth 2.0 Authorization Framework (RFC 6749)",
      "spec_or_rfc": "RFC 6749",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "OAuth 2.0 issues a bearer access token from a token endpoint, while AAuth publishes those four well-known documents and authenticates the agent by signing the request. [1][16]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "http-message-signatures",
      "target_name": "HTTP Message Signatures",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "AAuth's request authentication is an RFC 9421 profile, and the well-known AAuth JSON documents tell the signer which keys and servers to use. [1][17]"
     },
     {
      "target_id": "aauth-r3",
      "target_name": "AAuth Rich Resource Requests",
      "relation_type": "has_component",
      "relation_label": "Has component",
      "delta_md": "R3 is Hardt's extension of this AAuth: the resource advertises operation vocabularies as r3_vocabularies, and the resource token carries r3_uri and r3_s256 for the SHA-256-identified R3 document. [1][18][19]"
     },
     {
      "target_id": "identity-assertion-authz-grant",
      "target_name": "Identity Assertion JWT Authorization Grant (ID-JAG)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ID-JAG exchanges an oauth-id-jag+jwt assertion for an access token, while AAuth presents no bearer token and signs the resource request with RFC 9421. [1][20]"
     },
     {
      "target_id": "oauth-metadata-for-agents",
      "target_name": "OAuth Protected Resource and Authorization Server Metadata (as used for agent authorization)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "RFC 9728 and RFC 8414 publish OAuth protected-resource and authorization-server metadata, while AAuth publishes its own aauth-resource, aauth-agent, aauth-person, and aauth-access well-known documents. [1][21][22]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (3 probed or cited examples; non-exhaustive).",
    "side_a": null,
    "side_b": {
     "visible": true,
     "heading": "Verifiers, WAFs & relying servers",
     "col4_header": "Boundary & Format",
     "note_md": null,
     "rows": [
      {
       "actor": "Christian Posta (Keycloak extension)",
       "role": "Authorization server / IdP",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "SPI extension for Keycloak 26.2.5. draft-hardt-oauth-aauth-protocol-11 lists it as an exploratory AAuth access server extension, and the repository description says to load it as a Keycloak SPI.",
       "source_md": "[draft-hardt-oauth-aauth-protocol-11](https://www.ietf.org/archive/id/draft-hardt-oauth-aauth-protocol-11.txt) [2][23]"
      },
      {
       "actor": "Introspection",
       "role": "Relying server / Verifier",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-29",
       "col4_md": "npm package `@introspection-sdk/aauth-resource` (registry record checked 2026-10-29) makes an HTTP API an AAuth resource for draft-hardt-oauth-aauth-protocol-11. That draft publishes resource metadata at `/.well-known/aauth-resource.json`.",
       "source_md": "[@introspection-sdk/aauth-resource](https://registry.npmjs.org/@introspection-sdk/aauth-resource) [2][13]"
      },
      {
       "actor": "Interposed",
       "role": "Client SDK",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-10",
       "col4_md": "Go library `aauth-go`, described by Interposed on 2026-10-10 as its open-source implementation of AAuth, with a published migration from draft 9 to draft 11 of draft-hardt-oauth-aauth-protocol.",
       "source_md": "[Migrating from AAuth draft 9 to draft 11](https://interposed.ai/blog/migrating-aauth-draft-9-to-11.html) [9]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "aauth",
     "target_name": "Agent Authorization Grant",
     "relation_label": "Peer alternative",
     "delta": "Rosenberg's grant is an OAuth 2.1 extension that adds a signed scope_challenge on 403 and an agent_authorization_endpoint, whereas the Hardt draft defines a standalone HTTP-signature and agent-identity authorization protocol alongside OAuth 2.0, defining its own token types, roles, and an agent-written justification document instead of a resource-signed scope_challenge.",
     "item_md": "**[Agent Authorization Grant](/protocols/aauth/)** (Peer alternative) — Rosenberg's grant is an OAuth 2.1 extension that adds a signed scope_challenge on 403 and an agent_authorization_endpoint, whereas the Hardt draft defines a standalone HTTP-signature and agent-identity authorization protocol alongside OAuth 2.0, defining its own token types, roles, and an agent-written justification document instead of a resource-signed scope_challenge."
    },
    {
     "item_md": "**[Permit protocols](/category/permit/)** — Category index for `permit` standards."
    }
   ],
   "v05_compiled_md": "---\nid: aauth-hardt\ntitle: \"AAuth (Hardt)\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: permit\nform: http-header\nwire_archetype: identity_auth_crypto\nspec_url: https://datatracker.ietf.org/doc/draft-hardt-oauth-aauth-protocol/\nlast_checked: 2026-11-12\n---\n\n# AAuth (Hardt)\n\n**Category:** [Permit](/category/permit/) (`permit`) · **Form:** HTTP header (`http-header`) · **Last checked:** 2026-11-12\n\n> *This page is about AAuth, the agent authorization protocol by Dick Hardt of Hellō, published as the individual Internet-Draft `draft-hardt-oauth-aauth-protocol`. Not to be confused with \"AAuth - Agentic Authorization OAuth 2.1 Extension\" (`draft-rosenberg-oauth-aauth`), a separate individual Internet-Draft by Jonathan Rosenberg and Pat White. [1]*\n\n**AAuth (Hardt)** (`draft-hardt-oauth-aauth-protocol`) defines agent-to-resource authorization and identity claim retrieval. AAuth starts from this premise: every agent has its own cryptographic identity. [2] When a request to a protected resource does not present an AAuth agent token, the resource answers with `HTTP/1.1 401 Unauthorized` and `AAuth-Requirement: requirement=agent-token`. The header carries no parameters. [2] `draft-hardt-oauth-aauth-protocol-11`, by D. Hardt (Hellō), has intended status Standards Track, is dated 25 September 2026, and expires 29 March 2027. `draft-hardt-oauth-aauth-protocol-00` is the initial draft and replaces `draft-hardt-aauth-protocol-02`, with no technical changes. [2] It is an Active Internet-Draft (individual) by Dick Hardt, last updated `2026-09-25`, and it replaces `draft-hardt-aauth-protocol`. This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. [1]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Permit](/category/permit/) (`permit`) |\n| **Form** | HTTP header (`http-header`) |\n| **Originated by** | Dick Hardt (Hellō; `dickhardt/AAuth` created `2025-10-25` UTC; `draft-hardt-aauth-protocol-00` posted `2026-04-02` UTC) [2][3][4] |\n| **Governed by** | IETF Individual Submission (`Intended status: Standards Track`, discussed in IETF OAuth WG; not WG-adopted) [1][2][5] |\n| **Track** | Individual IETF Internet-Draft (`draft-hardt-oauth-aauth-protocol-11`, Intended status: Standards Track) and open specification repository (`dickhardt/AAuth`) [1][2][4] |\n| **Status** | Active Internet-Draft (individual), expires 2027-03-29 UTC [1][6][7] |\n| **Version** | `draft-hardt-oauth-aauth-protocol-11` (`2026-09-25` UTC, expires `2027-03-29` UTC; `-00` posted `2026-04-29` UTC) [1][6][7] |\n| **Wire format** | RFC 7519 JWTs (`application/aa-{agent,person,resource,auth}+jwt`), RFC 9421 HTTP Message Signatures, `Signature-Key`, RFC 9457 `application/problem+json` [2][8][9] |\n| **Specification** | [Datatracker (`draft-hardt-oauth-aauth-protocol`)](https://datatracker.ietf.org/doc/draft-hardt-oauth-aauth-protocol/) · [Draft `-11` Text](https://www.ietf.org/archive/id/draft-hardt-oauth-aauth-protocol-11.txt) · [`dickhardt/AAuth`](https://raw.githubusercontent.com/dickhardt/AAuth/main/README.md) · [aauth.dev](https://www.aauth.dev/) [1][2][10] |\n| **Found at** | `/.well-known/aauth-{agent,person,access,resource}.json`; `Link: rel=\"aauth-resource\"`; `Signature-Key`, `AAuth-Requirement`, `AAuth-Access`, `AAuth-Capabilities` [2][11][12] |\n| **Licence** | Revised BSD for spec code; MIT (`aauth-go`, PyPI `aauth`) and Apache-2.0 (`@introspection-sdk/aauth-resource`) [2][9][13] |\n| **IETF state** | `draft-hardt-oauth-aauth-protocol-11` · **Active Internet-Draft** (expires 2027-03-29) · Individual · as of 2026-10-30 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-hardt-oauth-aauth-protocol/)) |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [Adoption and ecosystem](#adoption-and-ecosystem)\n4. [See also](#see-also)\n5. [References](#references)\n\n---\n\n## Problem and scope\n\nIn OAuth 2.0 and OpenID Connect, the client has no independent identity. Client identifiers are issued by each authorization server or OpenID provider, so a `client_id` at one provider is meaningless at another. API keys are the same model pushed further: a shared secret issued by a service, copied to the client, and used as a bearer credential. [2] AAuth starts from this premise: every agent has its own cryptographic identity. Every agent instance has its own identifier and signing key, and every request it makes is bound to that key by an HTTP Message Signature: no credential is a bearer credential, and none needs pre-registration, so the first API call to a resource is the registration. [2] The specification defines the `AAuth-Requirement`, `AAuth-Access`, and `AAuth-Capabilities` headers and the authorization protocol across five resource access modes, while asynchronous event delivery is defined in `AAuth Events` and how the agent obtains its token from the agent provider is out of scope. [2] It coexists with OAuth 2.0 and OpenID Connect rather than replacing them. [14]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **HTTP Message Signatures (RFC 9421)** | `RFC 9421` | Profiles classic standard | AAuth (Hardt) requires HTTP Message Signatures so the agent signs its own requests, and it publishes documents at /.well-known/aauth-resource.json, aauth-agent.json, aauth-person.json, and aauth-access.json. [1][15] |\n| **OAuth 2.0 Authorization Framework (RFC 6749)** | `RFC 6749` | Analogous to classic standard | OAuth 2.0 issues a bearer access token from a token endpoint, while AAuth publishes those four well-known documents and authenticates the agent by signing the request. [1][16] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[HTTP Message Signatures](/protocols/http-message-signatures/)** | Builds on | AAuth's request authentication is an RFC 9421 profile, and the well-known AAuth JSON documents tell the signer which keys and servers to use. [1][17] |\n| **[AAuth Rich Resource Requests](/protocols/aauth-r3/)** | Has component | R3 is Hardt's extension of this AAuth: the resource advertises operation vocabularies as r3_vocabularies, and the resource token carries r3_uri and r3_s256 for the SHA-256-identified R3 document. [1][18][19] |\n| **[Identity Assertion JWT Authorization Grant (ID-JAG)](/protocols/identity-assertion-authz-grant/)** | Peer alternative | ID-JAG exchanges an oauth-id-jag+jwt assertion for an access token, while AAuth presents no bearer token and signs the resource request with RFC 9421. [1][20] |\n| **[OAuth Protected Resource and Authorization Server Metadata (as used for agent authorization)](/protocols/oauth-metadata-for-agents/)** | Peer alternative | RFC 9728 and RFC 8414 publish OAuth protected-resource and authorization-server metadata, while AAuth publishes its own aauth-resource, aauth-agent, aauth-person, and aauth-access well-known documents. [1][21][22] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (3 probed or cited examples; non-exhaustive).*\n\n### Verifiers, WAFs & relying servers\n\n| Actor | Role | Status | Boundary & Format | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Christian Posta (Keycloak extension)** | Authorization server / IdP | Supported · checked 2026-10-30 | SPI extension for Keycloak 26.2.5. draft-hardt-oauth-aauth-protocol-11 lists it as an exploratory AAuth access server extension, and the repository description says to load it as a Keycloak SPI. | [draft-hardt-oauth-aauth-protocol-11](https://www.ietf.org/archive/id/draft-hardt-oauth-aauth-protocol-11.txt) [2][23] |\n| **Introspection** | Relying server / Verifier | Supported · as of 2026-10-29 | npm package `@introspection-sdk/aauth-resource` (registry record checked 2026-10-29) makes an HTTP API an AAuth resource for draft-hardt-oauth-aauth-protocol-11. That draft publishes resource metadata at `/.well-known/aauth-resource.json`. | [@introspection-sdk/aauth-resource](https://registry.npmjs.org/@introspection-sdk/aauth-resource) [2][13] |\n| **Interposed** | Client SDK | Supported · as of 2026-10-10 | Go library `aauth-go`, described by Interposed on 2026-10-10 as its open-source implementation of AAuth, with a published migration from draft 9 to draft 11 of draft-hardt-oauth-aauth-protocol. | [Migrating from AAuth draft 9 to draft 11](https://interposed.ai/blog/migrating-aauth-draft-9-to-11.html) [9] |\n\n---\n\n## See also\n\n- **[Agent Authorization Grant](/protocols/aauth/)** *(Peer alternative)* — Rosenberg's grant is an OAuth 2.1 extension that adds a signed scope_challenge on 403 and an agent_authorization_endpoint, whereas the Hardt draft defines a standalone HTTP-signature and agent-identity authorization protocol alongside OAuth 2.0, defining its own token types, roles, and an agent-written justification document instead of a resource-signed scope_challenge.\n- **Category:** [Permit protocols](/category/permit/)\n\n---\n\n## References\n\n1. Dick Hardt, *draft-hardt-oauth-aauth-protocol — AAuth Protocol (IETF Datatracker)* (checked 2026-10-30) — <https://datatracker.ietf.org/doc/draft-hardt-oauth-aauth-protocol/>\n2. Dick Hardt (Hellō), *AAuth Protocol (draft-hardt-oauth-aauth-protocol-11)* (checked 2026-10-29) — <https://www.ietf.org/archive/id/draft-hardt-oauth-aauth-protocol-11.txt>\n3. IETF Datatracker API, *new-revision events for draft-hardt-aauth-protocol (JSON, UTC)* (checked 2026-10-29) — <https://datatracker.ietf.org/api/v1/doc/newrevisiondocevent/?doc__name=draft-hardt-aauth-protocol&format=json&limit=50>\n4. GitHub REST API, *dickhardt/AAuth repository record (UTC)* (checked 2026-10-29) — <https://github.com/dickhardt/AAuth>\n5. IETF OAuth Working Group, *Minutes of interim meeting interim-2026-oauth-03* (checked 2026-10-29) — <https://datatracker.ietf.org/meeting/interim-2026-oauth-03/materials/minutes-interim-2026-oauth-03-202606011700-00>\n6. IETF Datatracker API, *IETF Datatracker document record for draft-hardt-oauth-aauth-protocol* (checked 2026-10-29) — <https://datatracker.ietf.org/api/v1/doc/document/draft-hardt-oauth-aauth-protocol/?format=json>\n7. IETF Datatracker API, *new-revision events for draft-hardt-oauth-aauth-protocol (JSON, UTC)* (checked 2026-10-29) — <https://datatracker.ietf.org/api/v1/doc/newrevisiondocevent/?doc__name=draft-hardt-oauth-aauth-protocol&format=json&limit=50>\n8. D. Hardt (Hellō), *draft-hardt-httpbis-signature-key (IETF Datatracker)* (checked 2026-10-29) — <https://datatracker.ietf.org/doc/draft-hardt-httpbis-signature-key/>\n9. Interposed, *Migrating from AAuth draft 9 to draft 11* (checked 2026-10-29) — <https://interposed.ai/blog/migrating-aauth-draft-9-to-11.html>\n10. Dick Hardt, *dickhardt/AAuth README.md* (checked 2026-10-29) — <https://raw.githubusercontent.com/dickhardt/AAuth/main/README.md>\n11. Senzing AAuth Gateway (`senzing.aauth.dev`), */.well-known/aauth-resource.json* (checked 2026-10-29) — <https://senzing.aauth.dev/.well-known/aauth-resource.json>\n12. `secret.agent.coop`, */.well-known/aauth-resource.json* (checked 2026-10-29) — <https://secret.agent.coop/.well-known/aauth-resource.json>\n13. npm registry, *@introspection-sdk/aauth-resource package record (UTC)* (checked 2026-10-29) — <https://registry.npmjs.org/@introspection-sdk/aauth-resource>\n14. AAuth Project, *aauth.dev home page* (checked 2026-10-29) — <https://www.aauth.dev/>\n15. A. Backman, Ed., J. Richer, Ed., and M. Sporny, *RFC 9421: HTTP Message Signatures* (February 2024) — <https://www.rfc-editor.org/rfc/rfc9421.html>\n16. D. Hardt, Ed., *RFC 6749: The OAuth 2.0 Authorization Framework* (October 2012) — <https://www.rfc-editor.org/rfc/rfc6749.html>\n17. IETF Datatracker, *HTTP Message Signatures (RFC 9421)* (Proposed Standard (February 2024); checked 2026-10-30) — <https://datatracker.ietf.org/doc/rfc9421/>\n18. Boston Identity (IAM Insights), *AAuth's R3 lets an agent ask for an API's named operations, and a person approve one exact call · IAM Insights* (checked 2026-10-31) — <https://insights.bostonidentity.com/research/ietf-datatracker-2026-09-28-aauth-rich-resource-requests>\n19. D. Hardt (Hellō), *AAuth Rich Resource Requests (R3) (draft-hardt-aauth-r3-00)* (September 2026; expires 1 April 2027) — <https://www.ietf.org/archive/id/draft-hardt-aauth-r3-00.txt>\n20. Aaron Parecki, Karl McGuinness, and Brian Campbell (IETF Web Authorization Protocol Working Group), *draft-ietf-oauth-identity-assertion-authz-grant — Identity Assertion JWT Authorization Grant (IETF Datatracker)* (checked 2026-11-08) — <https://datatracker.ietf.org/doc/draft-ietf-oauth-identity-assertion-authz-grant/>\n21. IETF Datatracker, *RFC 9728: OAuth 2.0 Protected Resource Metadata* (RFC - Proposed Standard (April 2025)) — <https://datatracker.ietf.org/doc/html/rfc9728>\n22. M. Jones (Microsoft), N. Sakimura (NRI), and J. Bradley (Yubico), *RFC 8414: OAuth 2.0 Authorization Server Metadata* (June 2018) — <https://www.rfc-editor.org/rfc/rfc8414.html>\n23. GitHub REST API, *christian-posta/keycloak-aauth-extension repository record* (checked 2026-10-29) — <https://github.com/christian-posta/keycloak-aauth-extension>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "",
   "adoption": {
    "level": "observed",
    "by": "Cloudflare, Stack Overflow, Stripe, and Cloudflare Web Bot Auth",
    "probe_run": null
   },
   "aliases": [
    "Pay per crawl"
   ],
   "analog": "HTTP 402 Payment Required, used for crawl access",
   "audience": [
    "site-owner",
    "platform"
   ],
   "collisions": [],
   "discovery": {
    "mechanism": "HTTP 402 response carrying a crawler-price header",
    "path": null
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/what-is-pay-per-crawl/",
     "claim": "Cloudflare, *What is Pay Per Crawl?*, updated 2026-07-28",
     "date": null,
     "quote": "Pay per crawl is a feature of AI Crawl Control that enables site owners to control and monetize AI crawler access to content by setting a price per zone. / Pay per crawl is currently in closed beta. / \"dateModified\":\"2026-07-28\" / For pay per crawl, Cloudflare is the merchant of record. / they either present payment intent via request headers for successful HTTP 200 access, or receive an HTTP 402 Payment Required response with pricing. / \"headline\":\"What is Pay Per Crawl?\" / If you block an AI crawler from a zone via either of Cloudflare's WAF or Bot Management products, those products' rulesets will override pay per crawl's \"charge\" feature, and the blocked crawler will not have access to the zone.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://blog.cloudflare.com/introducing-pay-per-crawl/",
     "claim": "Will Allen and Simon Newton, Cloudflare Blog, *Introducing pay per crawl: Enabling content owners to charge AI crawlers for access*, published 2025-07-01; modified 2026-07-15",
     "date": null,
     "quote": "Many publishers, content creators and website owners currently feel like they have a binary choice - either leave the front door wide open for AI to consume everything they create, or create their own walled garden. / Should a crawler request a paid URL, Cloudflare returns an HTTP 402 Payment Required response, accompanied by a crawler-price header. / Will Allen and Simon Newton / Each time an AI crawler requests content, they either present payment intent via request headers for successful access (HTTP response code 200), or receive a 402 Payment Required response with pricing. / Cloudflare acts as the Merchant of Record for pay per crawl and also provides the underlying technical infrastructure. / Generating an Ed25519 key pair, and making the JWK-formatted public key available in a hosted directory / crawler requests should always include signature-agent, signature-input, and signature headers / including a crawler-exact-price header to indicate agreement to pay the configured price. / a crawler can preemptively include a crawler-max-price header in its initial request. / the content is served with a successful HTTP 200 OK response, confirming the charge / \"datePublished\":\"2025-07-01T10:00:00.000Z\" / \"name\":\"Cloudflare Blog\" / accompanied by a crawler-price header. / Only a single price declaration header, crawler-exact-price or crawler-max-price, may be used per request. / crawler-charged: USD XX.XX / Currently, that requires knowing the right individual and striking a one-off deal, which is an insurmountable challenge if you don't have scale and leverage. / Allow: Grant the crawler free access to content. / Charge: Require payment at the configured, domain-wide price. / Block: Deny access entirely, with no option to pay. / This is the functional equivalent of a network level block (an HTTP 403 Forbidden response where no content is returned) / Cloudflare enforces Allow or Charge decisions via a rules engine that operates only after existing WAF policies and bot management or bot blocking features have been applied. / Should a crawler request a paid URL, Cloudflare returns an HTTP 402 Payment Required response, accompanied by a crawler-price header. This signals that payment is required for the requested resource. / If the price configured for a resource is equal to or below this specified limit, the request proceeds, and the content is served with a successful HTTP 200 OK response, confirming the charge / If the amount in a crawler-max-price request is greater than the content owner's configured price, only the configured price is charged. / Billing events are recorded each time a crawler makes an authenticated request with payment intent and receives an HTTP 200-level response with a crawler-charged header. / Cloudflare then aggregates all the events, charges the crawler, and distributes the earnings to the publisher. / even if a crawler doesn't have a billing relationship with Cloudflare, and thus couldn't be charged for access, a publisher can still choose to 'charge' them. / We're excited to help dust off a mostly forgotten piece of the web: HTTP response code 402. / Pay per crawl, in private beta, is our first experiment in this area. / an HTTP 402 Payment Required response, accompanied by a crawler-price header. This signals that payment is required for the requested resource. HTTP 402 Payment Required crawler-price: USD XX.XX",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://developers.cloudflare.com/ai-crawl-control/changelog/",
     "claim": "Cloudflare, *AI Crawl Control changelog*, checked 2026-11-03; latest Pay Per Crawl entry 2026-06-16",
     "date": null,
     "quote": "2025-07-01 Introducing Pay Per Crawl (private beta) / 2025-12-10 Pay Per Crawl (Private beta) - Discovery API, custom pricing, and advanced configuration / The API endpoint is GET https://crawlers-api.ai-audit.cfdata.org/charged_zones and requires Web Bot Auth authentication. / Pay Per Crawl error responses now include a new crawler-error header with 11 specific error codes for programmatic handling. / 2026-06-16 Pay Per Crawl advanced configuration / When dynamic pricing is enabled, Pay Per Crawl adds a cf-pay-per-crawl request header to origin requests / Create a Configuration Rule in Rules > Configuration Rules, set your URI pattern using wildcard, exact, or prefix matching on the URI Full field, and enable the Disable Pay Per Crawl setting. / Disable Pay Per Crawl by URI pattern using Configuration Rules to offer free access to specific pages while charging for others. / Dynamic pricing by having your origin return a crawler-price response header, or by using a Cloudflare Worker to set prices based on request properties. / This eliminates the need to discover payable content through trial requests. / This security enhancement prevents payment header tampering, ensures authenticated payment intent, validates crawler identity with payment commitment, and protects against replay attacks with modified pricing. / Payment headers (crawler-exact-price or crawler-max-price) must now be included in the Web Bot Auth signature-input header components.",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://developers.cloudflare.com/bots/reference/bot-verification/web-bot-auth/",
     "claim": "Cloudflare, *Web Bot Auth*, updated 2026-10-08",
     "date": null,
     "quote": "Host a key directory at /.well-known/http-message-signatures-directory / Cloudflare supports Ed25519 key algorithm. / Cloudflare's implementation of Web Bot Auth does not support every component and parameter defined in IETF RFC 9421. / Construct the three required headers for Web Bot Auth. / Cloudflare accepts all valid Ed25519 keys found in your key directory. / If you include any of the following in your request's Signature-Input header, verification will fail. / Content-Type: This header must have the value application/http-message-signatures-directory+json.",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/use-pay-per-crawl-as-ai-owner/crawl-pages/",
     "claim": "Cloudflare, *Crawl pages*, updated 2026-04-23",
     "date": null,
     "quote": "Payment headers (crawler-exact-price or crawler-max-price) must be included in the signature-input header components. / The value of the crawler-charged header indicates the exact amount that will be billed to your Cloudflare account for the request. / crawler-error: InvalidCrawlerExactPrice / HTTP/2 402 date: Fri, 06 Jun 2025 08:42:38 GMT crawler-price: USD 0.01 / HTTP 200 date: Fri, 06 Jun 2025 08:42:38 GMT crawler-charged: USD 0.01 / When an AI crawler makes a request to a page protected by pay per crawl, the server will respond with HTTP/2 402 Payment Required. / Include this header in your second request if your AI crawler first received a HTTP status code 402, and you wish to access the content by paying the crawler-price. / If a page's crawler-price is higher than your crawler-max-price, your AI crawler will receive a HTTP 402 response. / If the request is unsuccessful, you will receive an error response with a crawler-error header indicating the specific issue. / HTTP/2 402 date: Fri, 06 Jun 2025 08:42:38 GMT content-type: text/plain; charset=utf-8 crawler-price: USD 0.01 crawler-error: InvalidCrawlerExactPrice / When an AI crawler makes a request to a page protected by pay per crawl, the server will respond with HTTP/2 402 Payment Required. This response will also include the crawler-price header which specifies the cost to access the content. / This response will also include the crawler-price header which specifies the cost to access the content. / crawler-exact-price: This is the exact price the AI crawler is configured to pay / This value should exactly match the price set in the response header crawler-price. / you will receive an error response with a crawler-error header indicating the specific issue. / Once your AI crawler complies with Web Bot Auth, you can begin to crawl webpages.",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://blog.cloudflare.com/making-ai-search-smarter/",
     "claim": "Matthew Conroy, Cloudflare Blog, *Making AI search smarter*, published 2026-07-01",
     "date": null,
     "quote": "2026-07-01 / So we're starting to shape Pay Per Crawl into Pay Per Use. / We're running experiments with top AI companies, like Ceramic.ai and You.com / Ceramic has built what it calls a \"pay-per-query\" model",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://blog.cloudflare.com/x402/",
     "claim": "Cloudflare Blog, *Launching the x402 Foundation with Coinbase, and support for x402 transactions*, published 2025-09-23; modified 2026-07-15",
     "date": null,
     "quote": "We will be bringing this new deferred payment scheme to pay per crawl as we expand and evolve the private beta. / crawlers participating in our private beta of pay per crawl are able to crawl a vast number of pages easily, generate audit logs, and then be charged a single fee via a connected credit card or bank account at the end of each day. / \"datePublished\":\"2025-09-23T13:00:00.000Z\" / we're proposing a new deferred payment scheme for the x402 protocol.",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/use-pay-per-crawl-as-ai-owner/discover-payable-content/",
     "claim": "Cloudflare, *Discover payable content*, updated 2026-04-23",
     "date": null,
     "quote": "Signature: The cryptographic signature of the request Signature-Input: The signature metadata and parameters Signature-Agent: Information about the signing agent / This enables your crawler to proactively identify sites participating in Pay Per Crawl before making crawl requests. / GET https://crawlers-api.ai-audit.cfdata.org/charged_zones / Signature: The cryptographic signature of the request / Signature-Input: The signature metadata and parameters / Signature-Agent: Information about the signing agent / The Discovery API returns domains where site owners have specifically configured your crawler to be charged for content access. / Site owners may also block or allow your crawler through WAF rules or set directives in their robots.txt file, which you should check and respect. / API endpoint GET https://crawlers-api.ai-audit.cfdata.org/charged_zones",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/use-pay-per-crawl-as-ai-owner/connect-to-stripe/",
     "claim": "Cloudflare, *Connect Stripe*, updated 2026-04-23",
     "date": null,
     "quote": "Invoices are created and managed via Stripe. / Pay per crawl uses Stripe to process payments between AI crawler owners and site owners. / Connect your Cloudflare account to Stripe to process payments. / Charges are recorded upon successful delivery of content that is requested with valid crawler price headers. / Crawlers are responsible for setting and enforcing their own spending limits. / From Connect to Stripe, select Connect. / Connect your Cloudflare account to Stripe to process payments. Pay per crawl uses Stripe to process payments between AI crawler owners and site owners. / Charges are recorded upon successful delivery of content that is requested with valid crawler price headers. Invoices are created and managed via Stripe.",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/use-pay-per-crawl-as-site-owner/manage-payouts/",
     "claim": "Cloudflare, *Manage payouts*, updated 2026-04-23",
     "date": null,
     "quote": "Payout: Monthly payments to publishers in good standing / You must create a dedicated Cloudflare Stripe Connect account through the dashboard. / Pre-existing Stripe accounts are not compatible with this feature. / Bank account details for payouts / A charge event is recorded upon successful content delivery (HTTP 200 response) / Cloudflare aggregates and reconciles all recorded charges / You must create a dedicated Cloudflare Stripe Connect account through the dashboard. Pre-existing Stripe accounts are not compatible with this feature. / Aggregation: Cloudflare aggregates and reconciles all recorded charges Payout: Monthly payments to publishers in good standing",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://digiday.com/media/media-briefing-ai-payouts-may-be-entering-a-new-era/",
     "claim": "Jessica Davies and Sara Guaglione (Digiday), *Media Briefing: AI payouts may be entering a new era*, 10 July 2025; fetched 2026-11-06",
     "date": null,
     "quote": "Tollbit has deals with publishers like Penske Media Corporation, Time and Trusted Media Brands. / July 10, 2025 / charge AI bot crawlers per query",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://raw.githubusercontent.com/cloudflare/web-bot-auth/main/README.md",
     "claim": "Cloudflare, *Web Bot Auth*, fetched 2026-10-31",
     "date": null,
     "quote": "http-message-sig | TypeScript | HTTP Message Signatures as defined in RFC 9421 / Host a registry, Signature Agent Card, and signed key directory on Cloudflare Workers / web-bot-auth | TypeScript | HTTP Message Signatures for Bots as defined in draft-meunier-webbotauth-httpsig-protocol-00 / web-bot-auth | Rust | HTTP Message Signatures for Bots as defined in draft-meunier-webbotauth-httpsig-protocol-00 / This software has not been audited.",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://developers.cloudflare.com/monetization-gateway/",
     "claim": "Cloudflare, *Cloudflare Monetization Gateway*, updated 2026-11-01",
     "date": null,
     "quote": "Monetization Gateway applies x402 payment requirements to matching traffic.",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://stackoverflow.blog/2026/02/19/stack-overflow-cloudflare-pay-per-crawl/",
     "claim": "Stack Overflow, *Why Stack Overflow and Cloudflare launched a pay-per-crawl model*, February 19, 2026",
     "date": null,
     "quote": "Stack Overflow's Janice Manningham and Josh Zhang sit down with Cloudflare VP Will Allen to discuss the innovative pay-per-crawl model co-launched by their organizations. / when we were enrolled in Cloudflare's Pay Per Crawl Program, it was actually pretty simple. It was just a UI that basically wrapped some existing rules into their WAF / you can choose what to do, either allow the traffic through or basically charge them and you set a charge rate. / when we turned on Pay Per Crawl and we started serving, I think as a 402, some of the traffic from those bots that used to just get a block of 403 / turn on essentially a switch in our CloudFlare instance for this 402 message to be sent to bots / you can send this HTTP 402 message, which just says payment required.",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://www.cloudflare.com/press/press-releases/2025/cloudflare-just-changed-how-ai-crawlers-scrape-the-internet-at-large/",
     "claim": "Cloudflare, *Cloudflare Just Changed How AI Crawlers Scrape the Internet-at-Large; Permission-Based Approach Makes Way for A New Business Model | Cloudflare*, checked 2026-10-31",
     "date": null,
     "quote": "July 1, 2025 / Leading content, media, and technology companies are in support of creating a more sustainable future that values original content, including: ADWEEK, The Arena Group, The Associated Press, The Atlantic, Atlas Obscura, BuzzFeed, Inc., Condé Nast, Digital Content Next, DOC, Dotdash Meredith, Drupal & Acquia, EngineEars, Evolve Media, Fortune, Gannett | USA TODAY Network, Groundviews.org, Half Baked Newsletter, Hyperscience, IAB Tech Lab, Independent Media, International Center for Journalists, Internet Brands, Linkup, News/Media Alliance, O'Reilly Media, PMC, Pinterest, ProRata AI, Quora, Raptive, Reddit, SimpleFeed, Sky News Group, Snopes.com, SourceForge, Sovrn, Inc., Stack Overflow, StockTwits, SustainableMedia.Center, Third Door Media, TIME, Universal Music Group, Webflow, and Ziff Davis. / Apply for Early Access: Cloudflare's Pay Per Crawl beta / we're committed to supporting initiatives like Pay Per Crawl that create mutual value and sustainable growth for the long term. / In September 2024, Cloudflare introduced the option to block AI crawlers in a single click. More than one million customers have since chosen this option, meant to be an aggressive but easy solution that halts scraping while they determine their AI strategy.",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://www.akamai.com/blog/security/from-scraping-paying-monetizing-ai-bots-edge",
     "claim": "Akamai, *From scraping to paying: monetizing AI bots at the edge*, 17 September 2025; fetched 2026-11-06",
     "date": null,
     "quote": "TollBit is used by more than 3,000 websites / Sep 17, 2025",
     "ref": 16
    }
   ],
   "form": "http-header",
   "governance": "Cloudflare (single vendor)",
   "group": "HTTP 402 family",
   "history": [
    {
     "date": "2026-10-15",
     "note": "initial record verified against developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/what-is-pay-per-crawl/"
    },
    {
     "date": "2026-10-29",
     "note": "Added verified ecosystem adoption and client implementation sections; updated title case to Cloudflare Pay Per Crawl and status to closed beta (as of 2026-07-28), launched as a private beta on 2025-07-01"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "cloudflare-pay-per-crawl",
   "implementation": "prototype",
   "last_verified": "2026-11-12",
   "name": "Cloudflare Pay Per Crawl",
   "native_status": "Closed beta (documentation dateModified 2026-07-28); introduced as a private beta on 2025-07-01",
   "origin": {
    "org": "Cloudflare",
    "date": "2025-07-01"
   },
   "pairs_with": [
    "webbotauth",
    "http-message-signatures",
    "web-bot-auth-signature-agent-card",
    "x402"
   ],
   "part_of": null,
   "parties": [
    "agent-site",
    "agent-payment"
   ],
   "phase": "candidate",
   "probe": {
    "method": "GET",
    "path": "{origin}/{priced-path}",
    "parse": "HTTP 402 with a crawler-price response header; a crawler pays by sending crawler-exact-price or crawler-max-price, and the charged response carries crawler-charged. The crawler must sign requests with Web Bot Auth.",
    "on_absent": "A 200 or a 402 without a crawler-price header means this path is not priced by pay per crawl; the probe cannot see an unsigned-agent decision."
   },
   "question": "How can a site charge an AI crawler per request, and how does the crawler agree to pay?",
   "scope": "payments",
   "spec_url": "https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/what-is-pay-per-crawl/",
   "step": "pay",
   "summary_md": "**Cloudflare Pay Per Crawl** is a feature of Cloudflare AI Crawl Control, introduced by Will Allen and Simon Newton on 2025-07-01, that lets site owners control and monetize AI crawler access by setting a price per zone. Acting as Merchant of Record, Cloudflare serves an `HTTP 402 Payment Required` price challenge or returns `HTTP 200 OK` when a verified crawler presents payment intent. Crawlers authenticate via Web Bot Auth (`Ed25519` keys at `/.well-known/http-message-signatures-directory` with `signature-agent`, `signature-input`, and `signature`) and sign either a reactive `crawler-exact-price` or proactive `crawler-max-price` header inside `signature-input`. Covered requests receive `HTTP 200 OK` with `crawler-charged`, whereas unpaid or invalid requests receive `HTTP 402` with `crawler-price` (and `crawler-error` on mismatch). The closed beta (`dateModified` 2026-07-28) added the `charged_zones` Discovery API and `crawler-error` codes (2025-12-10), dynamic pricing via `cf-pay-per-crawl` (2026-06-16), `Pay Per Use` search experiments with Ceramic.ai and You.com (2026-07-01), and a planned `x402` deferred-payment integration.",
   "track": "single-vendor",
   "use_cases": [
    "accept-agent-payments",
    "control-ai-crawling",
    "prove-agent-identity"
   ],
   "version": {
    "label": "unnumbered; closed beta",
    "date": "2026-07-28"
   },
   "watch": [
    {
     "type": "page",
     "url": "https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/what-is-pay-per-crawl/",
     "selector": "main",
     "cadence": "weekly"
    }
   ],
   "prerequisites": [
    "http-message-signatures",
    "webbotauth"
   ],
   "hatnote_md": "This page is about Cloudflare Pay Per Crawl, a Cloudflare AI Crawl Control feature in closed/private beta. It is not the open x402 payment protocol or general HTTP 402 Payment Required uses.",
   "tier": "flagship",
   "lifecycle_status": "active",
   "wire_archetype": "crawler_policy",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "This page is about Cloudflare Pay Per Crawl, a Cloudflare AI Crawl Control feature in closed/private beta. It is not the open x402 payment protocol or general HTTP 402 Payment Required uses. [1]",
   "v05_elevator_pitch_md": "Cloudflare Pay Per Crawl is an edge monetization system that lets websites charge AI crawlers per fetch at the CDN layer while Cloudflare handles billing as Merchant of Record. Instead of choosing between free scraping and bespoke licensing deals, publishers challenge unbilled bots with `HTTP 402 Payment Required` and `crawler-price` and serve `HTTP 200 OK` with `crawler-charged` once a verified crawler signs `crawler-exact-price` or `crawler-max-price`. [1][2]",
   "v05_lead_md": "**Cloudflare Pay Per Crawl** is a feature of Cloudflare AI Crawl Control, introduced by Will Allen and Simon Newton on 2025-07-01, that lets site owners control and monetize AI crawler access by setting a price per zone. [1][2][3] Acting as Merchant of Record, Cloudflare serves an `HTTP 402 Payment Required` price challenge or returns `HTTP 200 OK` when a verified crawler presents payment intent. [2] Crawlers authenticate via Web Bot Auth (`Ed25519` keys at `/.well-known/http-message-signatures-directory` with `signature-agent`, `signature-input`, and `signature`) and sign either a reactive `crawler-exact-price` or proactive `crawler-max-price` header inside `signature-input`. Covered requests receive `HTTP 200 OK` with `crawler-charged`, whereas unpaid or invalid requests receive `HTTP 402` with `crawler-price` (and `crawler-error` on mismatch). [2][4][5] The closed beta (`dateModified` 2026-07-28) added the `charged_zones` Discovery API and `crawler-error` codes (2025-12-10), dynamic pricing via `cf-pay-per-crawl` (2026-06-16), `Pay Per Use` search experiments with Ceramic.ai and You.com (2026-07-01), and a planned `x402` deferred-payment integration. [1][3][6][7]",
   "v05_identity_sentence_md": "**Cloudflare Pay Per Crawl** is a feature of Cloudflare AI Crawl Control, introduced by Will Allen and Simon Newton on 2025-07-01, that lets site owners control and monetize AI crawler access by setting a price per zone. [1][2][3] Acting as Merchant of Record, Cloudflare serves an `HTTP 402 Payment Required` price challenge or returns `HTTP 200 OK` when a verified crawler presents payment intent. [2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Pay](/category/pay/) (`pay`)"
    },
    {
     "label": "Form",
     "value_md": "HTTP header (`http-header`)"
    },
    {
     "label": "Originated by",
     "value_md": "Will Allen and Simon Newton, Cloudflare Blog (2025-07-01) [2]"
    },
    {
     "label": "Governed by",
     "value_md": "Cloudflare (Merchant of Record and technical infrastructure) [1][2]"
    },
    {
     "label": "Track",
     "value_md": "Vendor / Spec-Site Standard — Cloudflare AI Crawl Control product feature [1]"
    },
    {
     "label": "Status",
     "value_md": "Closed beta (documentation updated 2026-07-28); introduced in private beta on 2025-07-01; `Pay Per Use` search experiments with Ceramic.ai (`pay-per-query`) and You.com announced on 2026-07-01 [1][3][6]"
    },
    {
     "label": "Version",
     "value_md": "Unnumbered. Private beta (2025-07-01); Discovery API, custom pricing & per-URI `Disable Pay Per Crawl` Configuration Rules (2025-12-10); restated per-URI exemptions & dynamic pricing (2026-06-16); `Pay Per Use` search evolution announced (2026-07-01) [3][6]"
    },
    {
     "label": "Headers",
     "value_md": "`crawler-price`, `crawler-exact-price`, `crawler-max-price`, `crawler-charged`, `crawler-error`, `cf-pay-per-crawl`, `Signature`, `Signature-Input`, `Signature-Agent` [2][3][5][8]"
    },
    {
     "label": "Message format",
     "value_md": "HTTP status codes (`402 Payment Required`, `200 OK`) with currency-and-amount headers (`crawler-price: USD 0.01`, `crawler-charged: USD 0.01`) and Ed25519 `RFC 9421` signatures [4][5]"
    },
    {
     "label": "Transports",
     "value_md": "HTTP / HTTP/2 over TLS (`HTTP/2 402 Payment Required` challenge; `HTTP 200` on accepted price commitment) [1][5]"
    },
    {
     "label": "Specification",
     "value_md": "[What is Pay Per Crawl?](https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/what-is-pay-per-crawl/) [1]"
    },
    {
     "label": "Found at",
     "value_md": "HTTP 402 with `crawler-price`; Discovery API `GET https://crawlers-api.ai-audit.cfdata.org/charged_zones` (authenticated via Web Bot Auth) [2][3]"
    }
   ],
   "v05_problem_md": "Without an edge payment mechanism, publishers and website owners face a binary choice between leaving content open to AI scraping and locking their sites behind a walled garden, because negotiating bilateral licensing deals requires scale and leverage. [2] Pay Per Crawl introduces per-crawler `Allow`, `Charge`, and `Block` controls at the CDN edge—backed by Web Bot Auth cryptographic verification, pre-crawl domain discovery (`GET https://crawlers-api.ai-audit.cfdata.org/charged_zones`), and static or dynamic `crawler-price` quotes—so publishers can charge verified crawlers per request while withholding content (functionally equivalent to HTTP 403) from crawlers that lack a billing relationship. [2][3] Pay Per Crawl operates in closed beta with Cloudflare as Merchant of Record, aggregating billable `crawler-charged` events into a single daily card or bank charge processed through Stripe (with monthly publisher payouts) rather than settling per-request on the wire, and evaluating `Allow` or `Charge` only after existing WAF and Bot Management rulesets. [1][2][7][9][10]",
   "v05_mechanism_delta_md": "Pay Per Crawl introduces per-crawler `Allow`, `Charge`, and `Block` controls at the CDN edge—backed by Web Bot Auth cryptographic verification, pre-crawl domain discovery (`GET https://crawlers-api.ai-audit.cfdata.org/charged_zones`), and static or dynamic `crawler-price` quotes—so publishers can charge verified crawlers per request while withholding content (functionally equivalent to HTTP 403) from crawlers that lack a billing relationship. [2][3]",
   "v05_scope_boundary_md": "Pay Per Crawl operates in closed beta with Cloudflare as Merchant of Record, aggregating billable `crawler-charged` events into a single daily card or bank charge processed through Stripe (with monthly publisher payouts) rather than settling per-request on the wire, and evaluating `Allow` or `Charge` only after existing WAF and Bot Management rulesets. [1][2][7][9][10]",
   "v05_fuzzy_additions": [
    {
     "id": "http-402-price-challenge-and-payment-headers",
     "heading": "HTTP 402 price challenge and payment headers",
     "body_md": "A paid URL without an accepted price draws HTTP 402 Payment Required and a `crawler-price` header. The crawler retries with `crawler-exact-price` or opens with `crawler-max-price`. Success is HTTP 200 OK plus `crawler-charged`. Failure carries `crawler-error`, such as `InvalidCrawlerExactPrice`. Verified crawlers can list payable domains first. [2][5][8]",
     "bullets": [
      {
       "label": "402 price challenge",
       "text_md": "When an AI crawler requests a page protected by Pay Per Crawl without an accepted payment header, the Cloudflare edge responds with `HTTP/2 402` Payment Required and a `crawler-price` header stating the cost to access the resource (documented as `crawler-price: USD 0.01`). [2][5]"
      },
      {
       "label": "Exact price and max price",
       "text_md": "`crawler-exact-price` is the reactive retry after status 402 and must match `crawler-price`. `crawler-max-price` is a proactive ceiling: the request proceeds when the configured price is at or below it, and returns HTTP 402 when `crawler-price` is higher. Only one price header may be sent, and it must sit inside `signature-input`. [2][5]"
      },
      {
       "label": "Charged receipt and error codes",
       "text_md": "A successful fetch is HTTP 200 OK with `crawler-charged` (example `crawler-charged: USD 0.01`), the amount billed to the Cloudflare account. If `crawler-max-price` exceeds the publisher's price, only the configured price is charged. Failures use `crawler-error`, including `InvalidCrawlerExactPrice`. On 2025-12-10 this header gained 11 specific error codes for programmatic handling. [2][3][5]"
      },
      {
       "label": "Discovery before crawling",
       "text_md": "Before crawling, a verified crawler can query `GET https://crawlers-api.ai-audit.cfdata.org/charged_zones` authenticated with Web Bot Auth (`Signature`, `Signature-Input`, and `Signature-Agent`) to retrieve the list of domains configured to charge that crawler—eliminating discovery by trial request—though site owners may still block or allow the crawler via WAF rules or `robots.txt`. [3][8]"
      }
     ]
    },
    {
     "id": "web-bot-auth-verification-stripe-settlement-and-rule-precedence",
     "heading": "Web Bot Auth verification, Stripe settlement, and rule precedence",
     "body_md": "Pay Per Crawl identifies the crawler with Web Bot Auth, settles through Stripe with Cloudflare as Merchant of Record, and applies per-crawler `Allow`, `Charge`, or `Block` only after WAF and Bot Management. Requests authenticate with `Signature-Agent`, `Signature-Input`, and an `Ed25519` `Signature` header. [2][4][9]",
     "bullets": [
      {
       "label": "Ed25519 Web Bot Auth",
       "text_md": "The crawler generates an `Ed25519` key pair and publishes the JWK public key at `/.well-known/http-message-signatures-directory`. Cloudflare accepts valid `Ed25519` keys from that directory. Requests must include `signature-agent`, `signature-input`, and `signature`. Unsupported IETF `RFC 9421` parameters in `Signature-Input` fail verification. From 2025-12-10, `crawler-exact-price` or `crawler-max-price` must be covered by `signature-input`, preventing payment header tampering, ensuring authenticated payment intent, validating crawler identity with payment commitment, and protecting against replay attacks with modified pricing; off-wire billing aggregation and monthly publisher payouts rely on Cloudflare as Merchant of Record. [1][2][3][4]"
      },
      {
       "label": "Crawler Stripe onboarding",
       "text_md": "AI crawler owners connect Cloudflare to Stripe, which processes payments and creates invoices. Charges post when content is delivered with valid crawler price headers. Crawlers set their own spending limits. Billable events are HTTP 200 responses carrying `crawler-charged`, which Cloudflare aggregates before charging the crawler. [2][9]"
      },
      {
       "label": "Publisher Stripe Connect payouts",
       "text_md": "Publishers create a dedicated Cloudflare `Stripe Connect` account in the dashboard; pre-existing Stripe accounts are not compatible. Onboarding collects bank details for payouts. Charges record on HTTP 200, Cloudflare reconciles them, and payout is monthly to publishers in good standing. Cloudflare is the merchant of record. [1][10]"
      },
      {
       "label": "Allow, Charge, Block, and precedence",
       "text_md": "`Allow` grants free access, `Charge` requires the configured domain-wide price, and `Block` denies access with no option to pay. Charging a crawler with no billing relationship withholds the body like HTTP 403. Allow or Charge runs only after WAF and bot management, and a block in those products overrides the charge feature. [1][2]"
      }
     ]
    }
   ],
   "v05_diagram": {
    "title": "Pay Per Crawl reactive and proactive challenge flows",
    "heading": "Pay Per Crawl reactive and proactive challenge flows",
    "mermaid": "sequenceDiagram\n  participant C as AI crawler\n  participant E as Cloudflare edge\n  alt Reactive (exact-price retry)\n    C->>E: GET /page (Web Bot Auth signed)\n    E-->>C: HTTP/2 402<br/>crawler-price: USD 0.01\n    C->>E: Retry GET /page<br/>crawler-exact-price in signature-input\n    alt Exact price matches and request is valid\n      E-->>C: HTTP 200<br/>crawler-charged: USD 0.01\n    else Mismatched price or invalid header\n      E-->>C: HTTP/2 402<br/>crawler-price: USD 0.01, crawler-error: InvalidCrawlerExactPrice\n    end\n  else Proactive (ceiling on first request)\n    C->>E: GET /page<br/>crawler-max-price in signature-input\n    alt Page crawler-price at or below crawler-max-price\n      E-->>C: HTTP 200<br/>crawler-charged: USD 0.01\n    else Page crawler-price exceeds crawler-max-price\n      E-->>C: HTTP 402<br/>crawler-price: USD 0.01\n    end\n  end",
    "caption_md": "Reactive crawlers receive `HTTP/2 402` with `crawler-price` and retry with `crawler-exact-price` signed in `signature-input`, receiving `HTTP 200` with `crawler-charged` on success or `HTTP/2 402` with `crawler-error` (such as `InvalidCrawlerExactPrice`) on mismatch; proactive crawlers send `crawler-max-price` up front and receive `HTTP 402` when the page's `crawler-price` exceeds that ceiling. [5]"
   },
   "v05_wire_artifact": {
    "title": "Pay Per Crawl `402` quote, `200` charge, and `crawler-error`",
    "heading": "Pay Per Crawl `402` quote, `200` charge, and `crawler-error`",
    "lang": "http",
    "code": "HTTP/2 402\ndate: Fri, 06 Jun 2025 08:42:38 GMT\ncrawler-price: USD 0.01\n\nHTTP 200\ndate: Fri, 06 Jun 2025 08:42:38 GMT\ncrawler-charged: USD 0.01\n\nHTTP/2 402\ndate: Fri, 06 Jun 2025 08:42:38 GMT\ncontent-type: text/plain; charset=utf-8\ncrawler-price: USD 0.01\ncrawler-error: InvalidCrawlerExactPrice",
    "caption_md": "Documented responses: `HTTP/2 402` with `crawler-price: USD 0.01`, `HTTP 200` with `crawler-charged: USD 0.01`, and `crawler-error: InvalidCrawlerExactPrice`. [5]"
   },
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "HTTP 402 Payment Required",
      "spec_or_rfc": "HTTP 402",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "Uses HTTP response code 402 with `crawler-price` (and `crawler-error` on mismatch) as the edge price challenge, then confirms recorded charges on HTTP 200 via `crawler-charged`. [2][5]"
     },
     {
      "name": "HTTP Message Signatures (RFC 9421)",
      "spec_or_rfc": "RFC 9421",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "Requires Ed25519 HTTP Message Signatures (`Signature`, `Signature-Input`, `Signature-Agent`) covering `crawler-exact-price` or `crawler-max-price`, while supporting an `RFC 9421` subset. [4][5]"
     },
     {
      "name": "Commercial Bot Paywalls (TollBit / Fastly / Akamai)",
      "spec_or_rfc": "Proprietary edge paywalls",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "TollBit operates an off-origin bot paywall token broker (integrated with Fastly AI Bot Management redirects and Akamai edge detection), whereas Cloudflare Pay Per Crawl enforces HTTP 402 challenges and `crawler-price` headers natively at the Cloudflare edge. [11]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "webbotauth",
      "target_name": "Web Bot Auth",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "Requires crawlers to authenticate via Web Bot Auth (`Signature-Agent`, `Signature-Input`, `Signature`) and include `crawler-exact-price` or `crawler-max-price` in `signature-input`. [5]"
     },
     {
      "target_id": "http-message-signatures",
      "target_name": "HTTP Message Signatures",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "Relies on the `RFC 9421` signature format (`http-message-sig` in `cloudflare/web-bot-auth`) to bind crawler identity and price headers to each request. [2][12]"
     },
     {
      "target_id": "web-bot-auth-signature-agent-card",
      "target_name": "Signature Agent Card (Web Bot Auth registry)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Pay Per Crawl uses HTTP 402 with `crawler-price`, `crawler-exact-price` or `crawler-max-price`, and `crawler-charged` headers over Web Bot Auth request signatures, whereas a Signature Agent Card is the JSON metadata document published alongside the agent's key directory (`/.well-known/http-message-signatures-directory`). [4][12]"
     },
     {
      "target_id": "x402",
      "target_name": "x402",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Whereas `x402` carries per-request payment payloads on the wire, Pay Per Crawl's private beta bills crawlers a single end-of-day fee via credit card or bank account under Cloudflare as Merchant of Record; on 2025-09-23 Cloudflare proposed an `x402` `deferred` payment scheme for Pay Per Crawl (not yet listed in Pay Per Crawl changelog entries through the November 3, 2026 check, latest entry 2026-06-16). Cloudflare's Monetization Gateway (closed beta; updated 2026-11-01) extends that HTTP 402 / x402 charging beyond crawled HTML pages to APIs, Model Context Protocol (MCP) tools, sites, and datasets, applying x402 payment requirements in the HTTP request flow for United States buyers and sellers and settling through the Coinbase x402 Facilitator. [3][7][13]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (5 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).",
    "side_a": {
     "visible": true,
     "heading": "Edge platforms & participating publishers",
     "col4_header": "HTTP 402 enforcement & rollout scope",
     "note_md": null,
     "rows": [
      {
       "actor": "Cloudflare",
       "role": "Edge platform & Merchant of Record",
       "status": "Experimental",
       "status_display": "Experimental · as of 2026-07-28",
       "col4_md": "Closed/private beta edge gateway returning HTTP 402 (`crawler-price`) or HTTP 200 (`crawler-charged`) as Merchant of Record.",
       "source_md": "[Cloudflare, Introducing pay per crawl](https://blog.cloudflare.com/introducing-pay-per-crawl/) [2] · [Cloudflare docs, What is Pay Per Crawl](https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/what-is-pay-per-crawl/) [1] · [Cloudflare docs, Crawl pages](https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/use-pay-per-crawl-as-ai-owner/crawl-pages/) [5] · [Cloudflare AI Crawl Control changelog](https://developers.cloudflare.com/ai-crawl-control/changelog/) [3]"
      },
      {
       "actor": "Stack Overflow",
       "role": "Publisher (announced beta co-launch partner)",
       "status": "Supported (release announcement)",
       "status_display": "Supported (release announcement) · as of 2026-02-19",
       "col4_md": "Announced private-beta co-launch partner reporting WAF-wrapped HTTP 402 responses to targeted bots; live endpoint not independently verified.",
       "source_md": "[Stack Overflow blog, Why Stack Overflow and Cloudflare launched a pay-per-crawl model (February 19, 2026)](https://stackoverflow.blog/2026/02/19/stack-overflow-cloudflare-pay-per-crawl/) [14]"
      },
      {
       "actor": "Press-release supporters",
       "role": "Publisher cohort (press-release supporters)",
       "status": "Listed",
       "status_display": "Listed · as of 2025-07-01",
       "col4_md": "Press-release supporters of permission-based AI crawling (including ADWEEK, AP, The Atlantic, Condé Nast, Fortune, Quora, Reddit, and TIME, with Quora naming Pay Per Crawl); live endpoints not independently verified.",
       "source_md": "[Cloudflare press release, July 1, 2025](https://www.cloudflare.com/press/press-releases/2025/cloudflare-just-changed-how-ai-crawlers-scrape-the-internet-at-large/) [15]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Crawler authentication & payment settlement rails",
     "col4_header": "Settlement / signing mechanism",
     "note_md": null,
     "rows": [
      {
       "actor": "Stripe",
       "role": "Payment processor & payout rail",
       "status": "Supported",
       "status_display": "Supported · as of 2026-04-23",
       "col4_md": "Invoices AI crawler owners via Stripe and pays publishers monthly via dedicated Cloudflare Stripe Connect accounts; Cloudflare's 2025-09-23 `x402` post separately describes a single end-of-day card or bank fee.",
       "source_md": "[Cloudflare docs, Connect Stripe](https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/use-pay-per-crawl-as-ai-owner/connect-to-stripe/) [9] · [Cloudflare docs, Manage payouts](https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/use-pay-per-crawl-as-site-owner/manage-payouts/) [10] · [Cloudflare docs, What is Pay Per Crawl](https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/what-is-pay-per-crawl/) [1] · [Cloudflare docs, Crawl pages](https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/use-pay-per-crawl-as-ai-owner/crawl-pages/) [5][7]"
      },
      {
       "actor": "Cloudflare Web Bot Auth",
       "role": "Crawler authentication & signing SDKs",
       "status": "Partial",
       "status_display": "Partial · as of 2026-10-08",
       "col4_md": "Ed25519 `RFC 9421` request signing (`Signature-Agent`, `Signature-Input`, `Signature`) covering `crawler-exact-price` or `crawler-max-price`; subset of `RFC 9421` supported.",
       "source_md": "[Cloudflare docs, Web Bot Auth](https://developers.cloudflare.com/bots/reference/bot-verification/web-bot-auth/) [4] · [Cloudflare docs, Crawl pages](https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/use-pay-per-crawl-as-ai-owner/crawl-pages/) [5] · [cloudflare/web-bot-auth README](https://raw.githubusercontent.com/cloudflare/web-bot-auth/main/README.md) [12] · [Cloudflare docs, Discover payable content](https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/use-pay-per-crawl-as-ai-owner/discover-payable-content/) [8]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [
     {
      "label": "Cloudflare press release (July 1, 2025)",
      "as_of": "2025-07-01",
      "value_md": "Cloudflare reported that more than one million customers had chosen its earlier one-click option (introduced in September 2024) to block AI crawlers prior to the July 1, 2025 Pay Per Crawl private-beta launch. [15]"
     },
     {
      "label": "Akamai, quoting TollBit's website count",
      "as_of": "2025-09-17",
      "value_md": "In a September 17, 2025 edge-monetization post, Akamai reported that TollBit is used by more than 3,000 websites to place a paywall in front of AI bots (an external peer benchmark for AI bot paywalls, distinct from Cloudflare Pay Per Crawl zone enrollment). [16]"
     }
    ],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "l402",
     "target_name": "L402",
     "relation_label": "Peer alternative",
     "delta": "Pay Per Crawl returns HTTP 402 pricing with Cloudflare as merchant. L402 returns a macaroon and BOLT 11 invoice.",
     "item_md": "**[L402](/protocols/l402/)** (Peer alternative) — Pay Per Crawl returns HTTP 402 pricing with Cloudflare as merchant. L402 returns a macaroon and BOLT 11 invoice."
    },
    {
     "target_id": "cloudflare-content-signals-policy",
     "target_name": "Content Signals Policy",
     "relation_label": "Complements",
     "delta": "Content Signals records a preference for already-fetched content and is not a payment mechanism, while Pay Per Crawl is a paid crawl carried in HTTP headers.",
     "item_md": "**[Content Signals Policy](/protocols/cloudflare-content-signals-policy/)** (Complements) — Content Signals records a preference for already-fetched content and is not a payment mechanism, while Pay Per Crawl is a paid crawl carried in HTTP headers."
    },
    {
     "target_id": "rsl",
     "target_name": "Really Simple Licensing",
     "relation_label": "Complements",
     "delta": "Pay Per Crawl answers with HTTP 402 and crawler-price. RSL can state a crawl payment URL inside the license.",
     "item_md": "**[Really Simple Licensing](/protocols/rsl/)** (Complements) — Pay Per Crawl answers with HTTP 402 and crawler-price. RSL can state a crawl payment URL inside the license."
    },
    {
     "target_id": "ai-crawler-tokens-robots",
     "target_name": "AI crawler tokens in robots.txt",
     "relation_label": "Complements",
     "delta": "Names AI crawlers via RFC 9309 `User-agent` product tokens so hosts can apply voluntary `Allow` or `Disallow` path rules in `/robots.txt`, without HTTP 402 `crawler-price` headers or payment settlement.",
     "item_md": "**[AI crawler tokens in robots.txt](/protocols/ai-crawler-tokens-robots/)** (Complements) — Names AI crawlers via RFC 9309 `User-agent` product tokens so hosts can apply voluntary `Allow` or `Disallow` path rules in `/robots.txt`, without HTTP 402 `crawler-price` headers or payment settlement."
    },
    {
     "target_id": "mpp",
     "target_name": "Machine Payments Protocol (MPP)",
     "relation_label": "Peer alternative",
     "delta": "Pay Per Crawl returns HTTP 402 with a crawler-price header; MPP's challenge is WWW-Authenticate with scheme Payment.",
     "item_md": "**[Machine Payments Protocol (MPP)](/protocols/mpp/)** (Peer alternative) — Pay Per Crawl returns HTTP 402 with a crawler-price header; MPP's challenge is WWW-Authenticate with scheme Payment."
    },
    {
     "item_md": "**[Pay protocols](/category/pay/)** — Category index for `pay` standards."
    }
   ],
   "v05_compiled_md": "---\nid: cloudflare-pay-per-crawl\ntitle: \"Cloudflare Pay Per Crawl\"\ntier: flagship\nlifecycle_status: active\ncategory: pay\nform: http-header\nwire_archetype: crawler_policy\nspec_url: https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/what-is-pay-per-crawl/\nlast_checked: 2026-11-12\n---\n\n# Cloudflare Pay Per Crawl\n\n**Category:** [Pay](/category/pay/) (`pay`) · **Form:** HTTP header (`http-header`) · **Last checked:** 2026-11-12\n\n> *This page is about Cloudflare Pay Per Crawl, a Cloudflare AI Crawl Control feature in closed/private beta. It is not the open x402 payment protocol or general HTTP 402 Payment Required uses. [1]*\n\n> **In brief:** Cloudflare Pay Per Crawl is an edge monetization system that lets websites charge AI crawlers per fetch at the CDN layer while Cloudflare handles billing as Merchant of Record. Instead of choosing between free scraping and bespoke licensing deals, publishers challenge unbilled bots with `HTTP 402 Payment Required` and `crawler-price` and serve `HTTP 200 OK` with `crawler-charged` once a verified crawler signs `crawler-exact-price` or `crawler-max-price`. [1][2]\n\n**Cloudflare Pay Per Crawl** is a feature of Cloudflare AI Crawl Control, introduced by Will Allen and Simon Newton on 2025-07-01, that lets site owners control and monetize AI crawler access by setting a price per zone. [1][2][3] Acting as Merchant of Record, Cloudflare serves an `HTTP 402 Payment Required` price challenge or returns `HTTP 200 OK` when a verified crawler presents payment intent. [2] Crawlers authenticate via Web Bot Auth (`Ed25519` keys at `/.well-known/http-message-signatures-directory` with `signature-agent`, `signature-input`, and `signature`) and sign either a reactive `crawler-exact-price` or proactive `crawler-max-price` header inside `signature-input`. Covered requests receive `HTTP 200 OK` with `crawler-charged`, whereas unpaid or invalid requests receive `HTTP 402` with `crawler-price` (and `crawler-error` on mismatch). [2][4][5] The closed beta (`dateModified` 2026-07-28) added the `charged_zones` Discovery API and `crawler-error` codes (2025-12-10), dynamic pricing via `cf-pay-per-crawl` (2026-06-16), `Pay Per Use` search experiments with Ceramic.ai and You.com (2026-07-01), and a planned `x402` deferred-payment integration. [1][3][6][7]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Pay](/category/pay/) (`pay`) |\n| **Form** | HTTP header (`http-header`) |\n| **Originated by** | Will Allen and Simon Newton, Cloudflare Blog (2025-07-01) [2] |\n| **Governed by** | Cloudflare (Merchant of Record and technical infrastructure) [1][2] |\n| **Track** | Vendor / Spec-Site Standard — Cloudflare AI Crawl Control product feature [1] |\n| **Status** | Closed beta (documentation updated 2026-07-28); introduced in private beta on 2025-07-01; `Pay Per Use` search experiments with Ceramic.ai (`pay-per-query`) and You.com announced on 2026-07-01 [1][3][6] |\n| **Version** | Unnumbered. Private beta (2025-07-01); Discovery API, custom pricing & per-URI `Disable Pay Per Crawl` Configuration Rules (2025-12-10); restated per-URI exemptions & dynamic pricing (2026-06-16); `Pay Per Use` search evolution announced (2026-07-01) [3][6] |\n| **Headers** | `crawler-price`, `crawler-exact-price`, `crawler-max-price`, `crawler-charged`, `crawler-error`, `cf-pay-per-crawl`, `Signature`, `Signature-Input`, `Signature-Agent` [2][3][5][8] |\n| **Message format** | HTTP status codes (`402 Payment Required`, `200 OK`) with currency-and-amount headers (`crawler-price: USD 0.01`, `crawler-charged: USD 0.01`) and Ed25519 `RFC 9421` signatures [4][5] |\n| **Transports** | HTTP / HTTP/2 over TLS (`HTTP/2 402 Payment Required` challenge; `HTTP 200` on accepted price commitment) [1][5] |\n| **Specification** | [What is Pay Per Crawl?](https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/what-is-pay-per-crawl/) [1] |\n| **Found at** | HTTP 402 with `crawler-price`; Discovery API `GET https://crawlers-api.ai-audit.cfdata.org/charged_zones` (authenticated via Web Bot Auth) [2][3] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [HTTP 402 price challenge and payment headers](#http-402-price-challenge-and-payment-headers)\n3. [Web Bot Auth verification, Stripe settlement, and rule precedence](#web-bot-auth-verification-stripe-settlement-and-rule-precedence)\n4. [Counterparts and related standards](#counterparts-and-related-standards)\n5. [Adoption and ecosystem](#adoption-and-ecosystem)\n6. [See also](#see-also)\n7. [References](#references)\n\n---\n\n## Problem and scope\n\nWithout an edge payment mechanism, publishers and website owners face a binary choice between leaving content open to AI scraping and locking their sites behind a walled garden, because negotiating bilateral licensing deals requires scale and leverage. [2] Pay Per Crawl introduces per-crawler `Allow`, `Charge`, and `Block` controls at the CDN edge—backed by Web Bot Auth cryptographic verification, pre-crawl domain discovery (`GET https://crawlers-api.ai-audit.cfdata.org/charged_zones`), and static or dynamic `crawler-price` quotes—so publishers can charge verified crawlers per request while withholding content (functionally equivalent to HTTP 403) from crawlers that lack a billing relationship. [2][3] Pay Per Crawl operates in closed beta with Cloudflare as Merchant of Record, aggregating billable `crawler-charged` events into a single daily card or bank charge processed through Stripe (with monthly publisher payouts) rather than settling per-request on the wire, and evaluating `Allow` or `Charge` only after existing WAF and Bot Management rulesets. [1][2][7][9][10]\n\n### Pay Per Crawl reactive and proactive challenge flows\n\n```mermaid\nsequenceDiagram\n  participant C as AI crawler\n  participant E as Cloudflare edge\n  alt Reactive (exact-price retry)\n    C->>E: GET /page (Web Bot Auth signed)\n    E-->>C: HTTP/2 402<br/>crawler-price: USD 0.01\n    C->>E: Retry GET /page<br/>crawler-exact-price in signature-input\n    alt Exact price matches and request is valid\n      E-->>C: HTTP 200<br/>crawler-charged: USD 0.01\n    else Mismatched price or invalid header\n      E-->>C: HTTP/2 402<br/>crawler-price: USD 0.01, crawler-error: InvalidCrawlerExactPrice\n    end\n  else Proactive (ceiling on first request)\n    C->>E: GET /page<br/>crawler-max-price in signature-input\n    alt Page crawler-price at or below crawler-max-price\n      E-->>C: HTTP 200<br/>crawler-charged: USD 0.01\n    else Page crawler-price exceeds crawler-max-price\n      E-->>C: HTTP 402<br/>crawler-price: USD 0.01\n    end\n  end\n```\n\n*Reactive crawlers receive `HTTP/2 402` with `crawler-price` and retry with `crawler-exact-price` signed in `signature-input`, receiving `HTTP 200` with `crawler-charged` on success or `HTTP/2 402` with `crawler-error` (such as `InvalidCrawlerExactPrice`) on mismatch; proactive crawlers send `crawler-max-price` up front and receive `HTTP 402` when the page's `crawler-price` exceeds that ceiling. [5]*\n\n### Pay Per Crawl `402` quote, `200` charge, and `crawler-error`\n\n```http\nHTTP/2 402\ndate: Fri, 06 Jun 2025 08:42:38 GMT\ncrawler-price: USD 0.01\n\nHTTP 200\ndate: Fri, 06 Jun 2025 08:42:38 GMT\ncrawler-charged: USD 0.01\n\nHTTP/2 402\ndate: Fri, 06 Jun 2025 08:42:38 GMT\ncontent-type: text/plain; charset=utf-8\ncrawler-price: USD 0.01\ncrawler-error: InvalidCrawlerExactPrice\n```\n\n*Documented responses: `HTTP/2 402` with `crawler-price: USD 0.01`, `HTTP 200` with `crawler-charged: USD 0.01`, and `crawler-error: InvalidCrawlerExactPrice`. [5]*\n\n---\n\n## HTTP 402 price challenge and payment headers\n\nA paid URL without an accepted price draws HTTP 402 Payment Required and a `crawler-price` header. The crawler retries with `crawler-exact-price` or opens with `crawler-max-price`. Success is HTTP 200 OK plus `crawler-charged`. Failure carries `crawler-error`, such as `InvalidCrawlerExactPrice`. Verified crawlers can list payable domains first. [2][5][8]\n\n- **402 price challenge:** When an AI crawler requests a page protected by Pay Per Crawl without an accepted payment header, the Cloudflare edge responds with `HTTP/2 402` Payment Required and a `crawler-price` header stating the cost to access the resource (documented as `crawler-price: USD 0.01`). [2][5]\n- **Exact price and max price:** `crawler-exact-price` is the reactive retry after status 402 and must match `crawler-price`. `crawler-max-price` is a proactive ceiling: the request proceeds when the configured price is at or below it, and returns HTTP 402 when `crawler-price` is higher. Only one price header may be sent, and it must sit inside `signature-input`. [2][5]\n- **Charged receipt and error codes:** A successful fetch is HTTP 200 OK with `crawler-charged` (example `crawler-charged: USD 0.01`), the amount billed to the Cloudflare account. If `crawler-max-price` exceeds the publisher's price, only the configured price is charged. Failures use `crawler-error`, including `InvalidCrawlerExactPrice`. On 2025-12-10 this header gained 11 specific error codes for programmatic handling. [2][3][5]\n- **Discovery before crawling:** Before crawling, a verified crawler can query `GET https://crawlers-api.ai-audit.cfdata.org/charged_zones` authenticated with Web Bot Auth (`Signature`, `Signature-Input`, and `Signature-Agent`) to retrieve the list of domains configured to charge that crawler—eliminating discovery by trial request—though site owners may still block or allow the crawler via WAF rules or `robots.txt`. [3][8]\n\n---\n\n## Web Bot Auth verification, Stripe settlement, and rule precedence\n\nPay Per Crawl identifies the crawler with Web Bot Auth, settles through Stripe with Cloudflare as Merchant of Record, and applies per-crawler `Allow`, `Charge`, or `Block` only after WAF and Bot Management. Requests authenticate with `Signature-Agent`, `Signature-Input`, and an `Ed25519` `Signature` header. [2][4][9]\n\n- **Ed25519 Web Bot Auth:** The crawler generates an `Ed25519` key pair and publishes the JWK public key at `/.well-known/http-message-signatures-directory`. Cloudflare accepts valid `Ed25519` keys from that directory. Requests must include `signature-agent`, `signature-input`, and `signature`. Unsupported IETF `RFC 9421` parameters in `Signature-Input` fail verification. From 2025-12-10, `crawler-exact-price` or `crawler-max-price` must be covered by `signature-input`, preventing payment header tampering, ensuring authenticated payment intent, validating crawler identity with payment commitment, and protecting against replay attacks with modified pricing; off-wire billing aggregation and monthly publisher payouts rely on Cloudflare as Merchant of Record. [1][2][3][4]\n- **Crawler Stripe onboarding:** AI crawler owners connect Cloudflare to Stripe, which processes payments and creates invoices. Charges post when content is delivered with valid crawler price headers. Crawlers set their own spending limits. Billable events are HTTP 200 responses carrying `crawler-charged`, which Cloudflare aggregates before charging the crawler. [2][9]\n- **Publisher Stripe Connect payouts:** Publishers create a dedicated Cloudflare `Stripe Connect` account in the dashboard; pre-existing Stripe accounts are not compatible. Onboarding collects bank details for payouts. Charges record on HTTP 200, Cloudflare reconciles them, and payout is monthly to publishers in good standing. Cloudflare is the merchant of record. [1][10]\n- **Allow, Charge, Block, and precedence:** `Allow` grants free access, `Charge` requires the configured domain-wide price, and `Block` denies access with no option to pay. Charging a crawler with no billing relationship withholds the body like HTTP 403. Allow or Charge runs only after WAF and bot management, and a block in those products overrides the charge feature. [1][2]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **HTTP 402 Payment Required** | `HTTP 402` | Profiles classic standard | Uses HTTP response code 402 with `crawler-price` (and `crawler-error` on mismatch) as the edge price challenge, then confirms recorded charges on HTTP 200 via `crawler-charged`. [2][5] |\n| **HTTP Message Signatures (RFC 9421)** | `RFC 9421` | Profiles classic standard | Requires Ed25519 HTTP Message Signatures (`Signature`, `Signature-Input`, `Signature-Agent`) covering `crawler-exact-price` or `crawler-max-price`, while supporting an `RFC 9421` subset. [4][5] |\n| **Commercial Bot Paywalls (TollBit / Fastly / Akamai)** | `Proprietary edge paywalls` | Analogous to classic standard | TollBit operates an off-origin bot paywall token broker (integrated with Fastly AI Bot Management redirects and Akamai edge detection), whereas Cloudflare Pay Per Crawl enforces HTTP 402 challenges and `crawler-price` headers natively at the Cloudflare edge. [11] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Web Bot Auth](/protocols/webbotauth/)** | Builds on | Requires crawlers to authenticate via Web Bot Auth (`Signature-Agent`, `Signature-Input`, `Signature`) and include `crawler-exact-price` or `crawler-max-price` in `signature-input`. [5] |\n| **[HTTP Message Signatures](/protocols/http-message-signatures/)** | Builds on | Relies on the `RFC 9421` signature format (`http-message-sig` in `cloudflare/web-bot-auth`) to bind crawler identity and price headers to each request. [2][12] |\n| **[Signature Agent Card (Web Bot Auth registry)](/protocols/web-bot-auth-signature-agent-card/)** | Complements | Pay Per Crawl uses HTTP 402 with `crawler-price`, `crawler-exact-price` or `crawler-max-price`, and `crawler-charged` headers over Web Bot Auth request signatures, whereas a Signature Agent Card is the JSON metadata document published alongside the agent's key directory (`/.well-known/http-message-signatures-directory`). [4][12] |\n| **[x402](/protocols/x402/)** | Complements | Whereas `x402` carries per-request payment payloads on the wire, Pay Per Crawl's private beta bills crawlers a single end-of-day fee via credit card or bank account under Cloudflare as Merchant of Record; on 2025-09-23 Cloudflare proposed an `x402` `deferred` payment scheme for Pay Per Crawl (not yet listed in Pay Per Crawl changelog entries through the November 3, 2026 check, latest entry 2026-06-16). Cloudflare's Monetization Gateway (closed beta; updated 2026-11-01) extends that HTTP 402 / x402 charging beyond crawled HTML pages to APIs, Model Context Protocol (MCP) tools, sites, and datasets, applying x402 payment requirements in the HTTP request flow for United States buyers and sellers and settling through the Coinbase x402 Facilitator. [3][7][13] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (5 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).*\n\n### Edge platforms & participating publishers\n\n| Actor | Role | Status | HTTP 402 enforcement & rollout scope | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Cloudflare** | Edge platform & Merchant of Record | Experimental · as of 2026-07-28 | Closed/private beta edge gateway returning HTTP 402 (`crawler-price`) or HTTP 200 (`crawler-charged`) as Merchant of Record. | [Cloudflare, Introducing pay per crawl](https://blog.cloudflare.com/introducing-pay-per-crawl/) [2] · [Cloudflare docs, What is Pay Per Crawl](https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/what-is-pay-per-crawl/) [1] · [Cloudflare docs, Crawl pages](https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/use-pay-per-crawl-as-ai-owner/crawl-pages/) [5] · [Cloudflare AI Crawl Control changelog](https://developers.cloudflare.com/ai-crawl-control/changelog/) [3] |\n| **Stack Overflow** | Publisher (announced beta co-launch partner) | Supported (release announcement) · as of 2026-02-19 | Announced private-beta co-launch partner reporting WAF-wrapped HTTP 402 responses to targeted bots; live endpoint not independently verified. | [Stack Overflow blog, Why Stack Overflow and Cloudflare launched a pay-per-crawl model (February 19, 2026)](https://stackoverflow.blog/2026/02/19/stack-overflow-cloudflare-pay-per-crawl/) [14] |\n| **Press-release supporters** | Publisher cohort (press-release supporters) | Listed · as of 2025-07-01 | Press-release supporters of permission-based AI crawling (including ADWEEK, AP, The Atlantic, Condé Nast, Fortune, Quora, Reddit, and TIME, with Quora naming Pay Per Crawl); live endpoints not independently verified. | [Cloudflare press release, July 1, 2025](https://www.cloudflare.com/press/press-releases/2025/cloudflare-just-changed-how-ai-crawlers-scrape-the-internet-at-large/) [15] |\n\n### Crawler authentication & payment settlement rails\n\n| Actor | Role | Status | Settlement / signing mechanism | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Stripe** | Payment processor & payout rail | Supported · as of 2026-04-23 | Invoices AI crawler owners via Stripe and pays publishers monthly via dedicated Cloudflare Stripe Connect accounts; Cloudflare's 2025-09-23 `x402` post separately describes a single end-of-day card or bank fee. | [Cloudflare docs, Connect Stripe](https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/use-pay-per-crawl-as-ai-owner/connect-to-stripe/) [9] · [Cloudflare docs, Manage payouts](https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/use-pay-per-crawl-as-site-owner/manage-payouts/) [10] · [Cloudflare docs, What is Pay Per Crawl](https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/what-is-pay-per-crawl/) [1] · [Cloudflare docs, Crawl pages](https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/use-pay-per-crawl-as-ai-owner/crawl-pages/) [5][7] |\n| **Cloudflare Web Bot Auth** | Crawler authentication & signing SDKs | Partial · as of 2026-10-08 | Ed25519 `RFC 9421` request signing (`Signature-Agent`, `Signature-Input`, `Signature`) covering `crawler-exact-price` or `crawler-max-price`; subset of `RFC 9421` supported. | [Cloudflare docs, Web Bot Auth](https://developers.cloudflare.com/bots/reference/bot-verification/web-bot-auth/) [4] · [Cloudflare docs, Crawl pages](https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/use-pay-per-crawl-as-ai-owner/crawl-pages/) [5] · [cloudflare/web-bot-auth README](https://raw.githubusercontent.com/cloudflare/web-bot-auth/main/README.md) [12] · [Cloudflare docs, Discover payable content](https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/use-pay-per-crawl-as-ai-owner/discover-payable-content/) [8] |\n\n### Ecosystem censuses\n\n- **Cloudflare press release (July 1, 2025)** (*as of 2025-07-01*): Cloudflare reported that more than one million customers had chosen its earlier one-click option (introduced in September 2024) to block AI crawlers prior to the July 1, 2025 Pay Per Crawl private-beta launch. [15]\n- **Akamai, quoting TollBit's website count** (*as of 2025-09-17*): In a September 17, 2025 edge-monetization post, Akamai reported that TollBit is used by more than 3,000 websites to place a paywall in front of AI bots (an external peer benchmark for AI bot paywalls, distinct from Cloudflare Pay Per Crawl zone enrollment). [16]\n\n---\n\n## See also\n\n- **[L402](/protocols/l402/)** *(Peer alternative)* — Pay Per Crawl returns HTTP 402 pricing with Cloudflare as merchant. L402 returns a macaroon and BOLT 11 invoice.\n- **[Content Signals Policy](/protocols/cloudflare-content-signals-policy/)** *(Complements)* — Content Signals records a preference for already-fetched content and is not a payment mechanism, while Pay Per Crawl is a paid crawl carried in HTTP headers.\n- **[Really Simple Licensing](/protocols/rsl/)** *(Complements)* — Pay Per Crawl answers with HTTP 402 and crawler-price. RSL can state a crawl payment URL inside the license.\n- **[AI crawler tokens in robots.txt](/protocols/ai-crawler-tokens-robots/)** *(Complements)* — Names AI crawlers via RFC 9309 `User-agent` product tokens so hosts can apply voluntary `Allow` or `Disallow` path rules in `/robots.txt`, without HTTP 402 `crawler-price` headers or payment settlement.\n- **[Machine Payments Protocol (MPP)](/protocols/mpp/)** *(Peer alternative)* — Pay Per Crawl returns HTTP 402 with a crawler-price header; MPP's challenge is WWW-Authenticate with scheme Payment.\n- **Category:** [Pay protocols](/category/pay/)\n\n---\n\n## References\n\n1. Cloudflare, *What is Pay Per Crawl?* (updated 2026-07-28) — <https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/what-is-pay-per-crawl/>\n2. Will Allen and Simon Newton, Cloudflare Blog, *Introducing pay per crawl: Enabling content owners to charge AI crawlers for access* (published 2025-07-01; modified 2026-07-15) — <https://blog.cloudflare.com/introducing-pay-per-crawl/>\n3. Cloudflare, *AI Crawl Control changelog* (checked 2026-11-03; latest Pay Per Crawl entry 2026-06-16) — <https://developers.cloudflare.com/ai-crawl-control/changelog/>\n4. Cloudflare, *Web Bot Auth* (updated 2026-10-08) — <https://developers.cloudflare.com/bots/reference/bot-verification/web-bot-auth/>\n5. Cloudflare, *Crawl pages* (updated 2026-04-23) — <https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/use-pay-per-crawl-as-ai-owner/crawl-pages/>\n6. Matthew Conroy, Cloudflare Blog, *Making AI search smarter* (published 2026-07-01) — <https://blog.cloudflare.com/making-ai-search-smarter/>\n7. Cloudflare Blog, *Launching the x402 Foundation with Coinbase, and support for x402 transactions* (published 2025-09-23; modified 2026-07-15) — <https://blog.cloudflare.com/x402/>\n8. Cloudflare, *Discover payable content* (updated 2026-04-23) — <https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/use-pay-per-crawl-as-ai-owner/discover-payable-content/>\n9. Cloudflare, *Connect Stripe* (updated 2026-04-23) — <https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/use-pay-per-crawl-as-ai-owner/connect-to-stripe/>\n10. Cloudflare, *Manage payouts* (updated 2026-04-23) — <https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/use-pay-per-crawl-as-site-owner/manage-payouts/>\n11. Jessica Davies and Sara Guaglione (Digiday), *Media Briefing: AI payouts may be entering a new era* (10 July 2025; fetched 2026-11-06) — <https://digiday.com/media/media-briefing-ai-payouts-may-be-entering-a-new-era/>\n12. Cloudflare, *Web Bot Auth* (fetched 2026-10-31) — <https://raw.githubusercontent.com/cloudflare/web-bot-auth/main/README.md>\n13. Cloudflare, *Cloudflare Monetization Gateway* (updated 2026-11-01) — <https://developers.cloudflare.com/monetization-gateway/>\n14. Stack Overflow, *Why Stack Overflow and Cloudflare launched a pay-per-crawl model* (February 19, 2026) — <https://stackoverflow.blog/2026/02/19/stack-overflow-cloudflare-pay-per-crawl/>\n15. Cloudflare, *Cloudflare Just Changed How AI Crawlers Scrape the Internet-at-Large; Permission-Based Approach Makes Way for A New Business Model | Cloudflare* (checked 2026-10-31) — <https://www.cloudflare.com/press/press-releases/2025/cloudflare-just-changed-how-ai-crawlers-scrape-the-internet-at-large/>\n16. Akamai, *From scraping to paying: monetizing AI bots at the edge* (17 September 2025; fetched 2026-11-06) — <https://www.akamai.com/blog/security/from-scraping-paying-monetizing-ai-bots-edge>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "wimse-agent-audit-record",
   "name": "An Audit Record Format for AI Agent Authorization Decisions",
   "acronym": "Agent Audit Record",
   "hatnote_md": "This page retains the slug `/protocols/wimse-agent-audit-record/` from earlier revision `draft-gilda-wimse-agent-audit-record-02` (`2026-10-16`), which was renamed and replaced on `2026-10-29` by `draft-gilda-audit-agent-audit-record-03` targeting the proposed `AUDIT` BoF rather than the [WIMSE](/protocols/wimse/) Working Group.",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "aliases": [
    "draft-gilda-wimse-agent-audit-record",
    "draft-gilda-audit-agent-audit-record",
    "agent-audit-record",
    "Agent Audit Record"
   ],
   "analog": "a standardised audit-log entry",
   "audience": [
    "platform",
    "standards-body",
    "agent-builder"
   ],
   "collisions": [],
   "discovery": {
    "mechanism": "none; a record format, not a discoverable service",
    "path": null
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.ietf.org/archive/id/draft-gilda-audit-agent-audit-record-03.txt",
     "claim": "S. Gilda, *An Audit Record Format for AI Agent Authorization Decisions (draft-gilda-audit-agent-audit-record-03)*, 29 October 2026",
     "date": null,
     "quote": "This document replaces draft-gilda-wimse-agent-audit-record-02. / S. Gilda Internet-Draft 29 October 2026 Intended status: Standards Track / An Audit Record Format for AI Agent Authorization Decisions draft-gilda-audit-agent-audit-record-03 / This document defines one record format for an agent's authorization decisions and their effects, and it defines nothing else. / S. Gilda Internet-Draft 29 October 2026 Intended status: Standards Track Expires: 2 May 2027 / Its target is the AUDIT BoF and the working group it proposes. / Discussion of this document takes place on the AUDIT Birds of a Feather mailing list / A record is an in-toto Statement [IN-TOTO] carried in a DSSE envelope [DSSE]. / Seventeen required predicate members and two optional members are defined in Section 5. Each of the seventeen MUST be present unless a rule in that section makes it conditional, no member has a default, and a verifier MUST NOT supply one for an absent member (vectors F1 and EV3). / Producers and verifiers MUST canonicalize the Statement with [RFC8785], and the signature covers those bytes and no other serialization (vector T2). / This Internet-Draft will expire on 2 May 2027. / This document replaces draft-gilda-wimse-agent-audit-record-02. Sections 1 to 8 and Appendices A and B keep the numbers they had there, so a reference to one of those sections of that revision resolves to the same section here. / Section 5.4 adds the input principal-standing-source, and Section 8 publishes the extended set under a second predicate type URI that ends in v2, as the freeze requires. The v1 URI and the records valid under it are unchanged. / Intended status: Standards Track / A party that keeps a record as evidence therefore keeps a retention entry beside the envelope: a JSON object under the profile of Section 4.1, which the producer did not sign and which this section defines. / URI, https://w3id.org/ agent-evidence/vocab/v1/ followed by the term key, and a registered value by its / in column names the release of the agent-evidence-vectors corpus that first published a member / Network Working Group S. Gilda Internet-Draft 29 October 2026 Intended status: Standards Track Expires: 2 May 2027 An Audit Record Format for AI Agent Authorization Decisions draft-gilda-audit-agent-audit-record-03 / Section 11 of [AIMS] requires audit records for agent authorization decisions and leaves their form open. / Two implementations that each satisfy Section 11 in their own format produce audit trails that cannot be compared, correlated across a service boundary, or checked by a party that trusts neither producer. / A record carries the decision and the observed effect with a derived agreement between them, whether the decision point could evaluate the request and how fresh each input it relied on was, and a canonicalization contract under which a party that trusts neither the agent nor its operator recomputes the record's consistency from its bytes. / It specifies no policy model, no compliance criteria and no retention period, and it does not extend or amend [AIMS]. / It defines no policy. / The dating check produces its own result beside the record's verdict: an envelope that is well formed stays well formed when none of its anchors validates, and it is then simply not dated. / agent.authentication is the mechanism, over the closed set wimse-wpt, http-message-signature, mtls, oauth-access-token, api- key, none. All but api-key are drawn from Section 9 of [AIMS].",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://datatracker.ietf.org/doc/draft-gilda-audit-agent-audit-record/",
     "claim": "IETF Datatracker, *draft-gilda-audit-agent-audit-record — An Audit Record Format for AI Agent Authorization Decisions (IETF Datatracker)*, Last updated 2026-10-29",
     "date": null,
     "quote": "Replaces draft-gilda-wimse-agent-audit-record / of Delegation and Interaction Traceability (AUDIT) Working Group Charter (proposed)\", 2026, . [DELEGATION-CHAIN] Asor, / Last updated 2026-10-29 / draft-gilda-audit-agent-audit-record-03 - An Audit Record Format for AI Agent Authorization Decisions",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://datatracker.ietf.org/api/v1/doc/newrevisiondocevent/?doc__name=draft-gilda-audit-agent-audit-record&format=json",
     "claim": "IETF Datatracker, *draft-gilda-audit-agent-audit-record revision events*, checked 2026-10-30",
     "date": null,
     "quote": "\"02\", \"time\": \"2026-10-27T15:00:33Z\", \"type\": \"new_revision\"}, {\"by\": \"/api/v1/person/person/166500/\", \"desc\": \"New version available: draft-gilda-audit-agent-audit-record-01.txt\", \"doc\":",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://datatracker.ietf.org/api/v1/doc/document/draft-gilda-audit-agent-audit-record/",
     "claim": "IETF Datatracker, *IETF Datatracker document record for draft-gilda-audit-agent-audit-record*, checked 2026-10-30",
     "date": null,
     "quote": "2027-04-30T15:00:33Z /api/v1/group/group/1027/ 161671 [] draft-gilda-audit-agent-audit-record 68 /api/v1/doc/document/draft-gilda-audit-agent-audit-record/ 02",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://raw.githubusercontent.com/in-toto/attestation/main/spec/v1/statement.md",
     "claim": "in-toto Project, *in-toto Attestation Framework: Statement Layer Specification (v1)*, fetched 2026-11-12",
     "date": null,
     "quote": "The Statement is the middle layer of the attestation, binding it to a",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://raw.githubusercontent.com/secure-systems-lab/dsse/master/protocol.md",
     "claim": "NYU Secure Systems Lab, *DSSE: Dead Simple Signing Envelope Protocol*, fetched 2026-11-12",
     "date": null,
     "quote": "This document describes the protocol/algorithm for creating and verifying DSSE",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-wimse-aims/",
     "claim": "IETF Datatracker, *draft-ietf-wimse-aims — AI Identity Management System (IETF Datatracker)*, rev 01 published 2026-11-02 (initial WG -00 snapshot 2026-09-15)",
     "date": null,
     "quote": "Active Internet-Draft (wimse WG)",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://www.ietf.org/archive/id/draft-sharif-agent-audit-trail-09.txt",
     "claim": "R. Sharif (CyberSecAI Ltd), *Agent Audit Trail: A Standard Logging Format for Autonomous AI Systems (draft-sharif-agent-audit-trail-09)*, draft-sharif-agent-audit-trail-09; 26 October 2026",
     "date": null,
     "quote": "draft-sharif-agent-audit-trail-09 Abstract This document specifies a standard logging format for autonomous AI agent systems.",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://www.ietf.org/archive/id/draft-emirdag-scitt-ai-agent-execution-01.txt",
     "claim": "Pinar Emirdag and Daniel Feichtinger (Veridic Inc.), *AI Agent Execution Profile of SCITT (draft-emirdag-scitt-ai-agent-execution-01)*, 2026-10-12",
     "date": "2026-10-12",
     "quote": "Expires 15 April 2027 [Page 5] Internet-Draft SCITT AI Agent Execution October 2026 AgentInteractionRecord",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://datatracker.ietf.org/wg/wimse/about/",
     "claim": "IETF, *Workload Identity in Multi System Environments (wimse) — About*, checked 2026-10-30",
     "date": null,
     "quote": "Workload Identity in Multi System Environments",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://github.com/spiffe/spiffe/blob/main/standards/SPIFFE-ID.md",
     "claim": "SPIFFE, *SPIFFE ID*, checked 2026-10-30",
     "date": null,
     "quote": "Stability: Stable",
     "ref": 11
    }
   ],
   "form": "document-format",
   "governance": "IETF individual Internet-Draft targeting the proposed AUDIT BoF / working group (replaces draft-gilda-wimse-agent-audit-record)",
   "group": null,
   "history": [
    {
     "date": "2026-10-29",
     "note": "Primary-source verification against draft-gilda-audit-agent-audit-record-02 text and IETF Datatracker document/API records (5 primary sources)"
    },
    {
     "date": "2026-10-20",
     "note": "renamed draft: label, spec_url, summary and status moved to draft-gilda-audit-agent-audit-record-00"
    },
    {
     "date": "2026-10-20",
     "note": "noted draft-thaha-wimse-agent-evidence-binding-00, which defines an in-toto predicate designed to compose with this audit record format; verified against the -00 text (IETF rsync mirror)"
    },
    {
     "date": "2026-10-17",
     "note": "Datatracker marks draft-gilda-wimse-agent-audit-record as replaced by draft-gilda-audit-agent-audit-record"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "implementation": "none-found",
   "last_verified": "2026-11-12",
   "native_status": "Active Internet-Draft (individual; IESG state `I-D Exists`, intended status Standards Track, targeting the `AUDIT` BoF and proposed working group; not endorsed by the IETF)",
   "origin": {
    "org": "Sankalp Gilda (individual submission)",
    "date": "2026-09-21"
   },
   "pairs_with": [
    "wimse-aims",
    "agent-audit-trail",
    "scitt-ai-agent-execution",
    "wimse",
    "spiffe"
   ],
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "draft",
   "probe": {
    "method": "GET",
    "path": "none",
    "parse": "not applicable: audit records are exported from an operator-defined endpoint, not found at a fixed path",
    "on_absent": "No presence signal exists for this record; absence of a probe result says nothing about adoption."
   },
   "question": "What should a tamper-evident record of an agent's authorization decision contain?",
   "scope": "general",
   "spec_url": "https://www.ietf.org/archive/id/draft-gilda-audit-agent-audit-record-03.txt",
   "step": "account",
   "summary_md": "**An Audit Record Format for AI Agent Authorization Decisions** (`draft-gilda-audit-agent-audit-record-03`) defines one record format for an agent's authorization decisions and their effects, and it defines nothing else. S. Gilda is the author, and the intended status is Standards Track. Its target is the AUDIT BoF and the working group it proposes. Discussion of this document takes place on the AUDIT Birds of a Feather mailing list. A record is an in-toto Statement carried in a DSSE envelope. Seventeen required predicate members and two optional members are defined in Section 5. Each of the seventeen MUST be present unless a rule in that section makes it conditional, no member has a default, and a verifier MUST NOT supply one for an absent member. Producers and verifiers MUST canonicalize the Statement with `RFC8785`, and the signature covers those bytes and no other serialization. The header date is 29 October 2026. This Internet-Draft will expire on 2 May 2027. This document replaces draft-gilda-wimse-agent-audit-record-02. Sections 1 to 8 and Appendices A and B keep the numbers they had there, so a reference to one of those sections of that revision resolves to the same section here. Section 5.4 adds the input `principal-standing-source`, and Section 8 publishes the extended set under a second predicate type URI that ends in v2, as the freeze requires. The v1 URI and the records valid under it are unchanged.",
   "track": "ietf",
   "use_cases": [
    "audit-agent-actions",
    "prove-agent-identity"
   ],
   "version": {
    "label": "draft-gilda-audit-agent-audit-record-03",
    "date": "2026-10-29"
   },
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-gilda-wimse-agent-audit-record"
    },
    {
     "type": "ietf",
     "doc": "draft-gilda-audit-agent-audit-record"
    }
   ],
   "prerequisites": [
    "wimse"
   ],
   "ietf_tracker": {
    "doc": "draft-gilda-audit-agent-audit-record",
    "rev": "03",
    "state": "active",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-10-29",
    "expires_utc": "2027-05-02",
    "as_of": "2026-11-07",
    "source": "https://datatracker.ietf.org/doc/draft-gilda-audit-agent-audit-record/",
    "source_label": "per IETF Datatracker"
   },
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "This page retains the slug `/protocols/wimse-agent-audit-record/` from earlier revision `draft-gilda-wimse-agent-audit-record-02` (`2026-10-16`), which was renamed and replaced on `2026-10-29` by `draft-gilda-audit-agent-audit-record-03` targeting the proposed `AUDIT` BoF rather than the [WIMSE](/protocols/wimse/) Working Group. [1]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**An Audit Record Format for AI Agent Authorization Decisions** (`draft-gilda-audit-agent-audit-record-03`) defines one record format for an agent's authorization decisions and their effects, and it defines nothing else. [1] S. Gilda is the author, and the intended status is Standards Track. [1] Its target is the AUDIT BoF and the working group it proposes. [1] Discussion of this document takes place on the AUDIT Birds of a Feather mailing list. [1] A record is an in-toto Statement carried in a DSSE envelope. [1] Seventeen required predicate members and two optional members are defined in Section 5. Each of the seventeen MUST be present unless a rule in that section makes it conditional, no member has a default, and a verifier MUST NOT supply one for an absent member. [1] Producers and verifiers MUST canonicalize the Statement with `RFC8785`, and the signature covers those bytes and no other serialization. [1] The header date is 29 October 2026. This Internet-Draft will expire on 2 May 2027. [1] This document replaces draft-gilda-wimse-agent-audit-record-02. Sections 1 to 8 and Appendices A and B keep the numbers they had there, so a reference to one of those sections of that revision resolves to the same section here. [1] Section 5.4 adds the input `principal-standing-source`, and Section 8 publishes the extended set under a second predicate type URI that ends in v2, as the freeze requires. The v1 URI and the records valid under it are unchanged. [1]",
   "v05_identity_sentence_md": "**An Audit Record Format for AI Agent Authorization Decisions** (`draft-gilda-audit-agent-audit-record-03`) defines one record format for an agent's authorization decisions and their effects, and it defines nothing else. [1] S. Gilda is the author, and the intended status is Standards Track. [1] Its target is the AUDIT BoF and the working group it proposes. [1] Discussion of this document takes place on the AUDIT Birds of a Feather mailing list. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Account](/category/account/) (`account`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "Sankalp Gilda (`S. Gilda`; `draft-gilda-wimse-agent-audit-record-00` posted `2026-09-21`, renamed `2026-10-16`) [1][2][3]"
    },
    {
     "label": "Governed by",
     "value_md": "Individual IETF Internet-Draft targeting the proposed `AUDIT` BoF and working group (`Intended status: Standards Track`, `IESG state: I-D Exists`, `RFC stream: (None)`) [1][2]"
    },
    {
     "label": "Track",
     "value_md": "IETF Internet-Draft (Standards Track) [1]"
    },
    {
     "label": "Status",
     "value_md": "Active Internet-Draft (individual; IESG state `I-D Exists`, intended status Standards Track, targeting the `AUDIT` BoF and proposed working group; not endorsed by the IETF) [1][2]"
    },
    {
     "label": "Version",
     "value_md": "`draft-gilda-audit-agent-audit-record-03` (29 October 2026; expires 2 May 2027; Datatracker last updated 2026-10-29) [1][2]"
    },
    {
     "label": "Wire format",
     "value_md": "JSON in-toto Statement (`application/vnd.in-toto+json`) under RFC 8785 JCS and RFC 7493 I-JSON in a `DSSEv1` envelope, paired at rest with an unsigned JSON retention entry [1]"
    },
    {
     "label": "Specification",
     "value_md": "[draft-gilda-audit-agent-audit-record-03.txt](https://www.ietf.org/archive/id/draft-gilda-audit-agent-audit-record-03.txt) · [IETF Datatracker](https://datatracker.ietf.org/doc/draft-gilda-audit-agent-audit-record/) [1][2][4]"
    },
    {
     "label": "Found at",
     "value_md": "None on the wire (transport-agnostic record format); identified by `predicateType` URI and `https://w3id.org/agent-evidence/vocab/v1/` URIs [1]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust provisions (`BCP 78` / `BCP 79`, Revised BSD License); `agent-evidence-vectors` under `Apache-2.0` [1]"
    },
    {
     "label": "IETF state",
     "value_md": "`draft-gilda-audit-agent-audit-record-03` · **Active Internet-Draft** (published 29 October 2026; expires 2 May 2027) · Individual submission [1]"
    }
   ],
   "v05_problem_md": "Section 11 of AIMS requires audit records for agent authorization decisions and leaves their form open. [1] Two implementations that each satisfy Section 11 in their own format produce audit trails that cannot be compared, correlated across a service boundary, or checked by a party that trusts neither producer. [1] A record carries the decision and the observed effect with a derived agreement between them, whether the decision point could evaluate the request and how fresh each input it relied on was, and a canonicalization contract under which a party that trusts neither the agent nor its operator recomputes the record's consistency from its bytes. [1] It specifies no policy model, no compliance criteria and no retention period, and it does not extend or amend AIMS. [1] It defines no policy. [1] The dating check produces its own result beside the record's verdict: an envelope that is well formed stays well formed when none of its anchors validates, and it is then simply not dated. [1]",
   "v05_mechanism_delta_md": "A record carries the decision and the observed effect with a derived agreement between them, whether the decision point could evaluate the request and how fresh each input it relied on was, and a canonicalization contract under which a party that trusts neither the agent nor its operator recomputes the record's consistency from its bytes. [1]",
   "v05_scope_boundary_md": "It specifies no policy model, no compliance criteria and no retention period, and it does not extend or amend AIMS. [1] It defines no policy. [1] The dating check produces its own result beside the record's verdict: an envelope that is well formed stays well formed when none of its anchors validates, and it is then simply not dated. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "in-toto Attestation Statement v1",
      "spec_or_rfc": "in-toto Statement v1",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "A record is an in-toto Statement whose predicate type URI is frozen by the latest revision, and the format defines nothing besides the authorization decision and its effect. [1][5]"
     },
     {
      "name": "DSSE: Dead Simple Signing Envelope",
      "spec_or_rfc": "DSSE v1.0",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "That in-toto Statement is carried in a DSSE envelope, and the draft defines no discovery file. [1][6]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "wimse-aims",
      "target_name": "AI Identity Management System (AIMS)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "AIMS requires tamper-evident audit records and defines no new wire protocol, and this format is the separate in-toto Statement in a DSSE envelope, which does not extend AIMS. [1][7]"
     },
     {
      "target_id": "agent-audit-trail",
      "target_name": "Agent Audit Trail",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "The Agent Audit Trail hash-chains RFC 8785 JSON with optional ECDSA, while this record is an in-toto/DSSE authorization-decision document. [1][8]"
     },
     {
      "target_id": "scitt-ai-agent-execution",
      "target_name": "AI Agent Execution Profile of SCITT",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "The SCITT profile registers a COSE-signed AgentInteractionRecord with an evidence custodian, while this record is an in-toto/DSSE authorization-decision document. [1][9]"
     },
     {
      "target_id": "wimse",
      "target_name": "Workload Identity in Multi System Environments (WIMSE)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "In Section 5.2, agent.authentication is drawn from the closed set wimse-wpt, http-message-signature, mtls, oauth-access-token, api-key, or none, so WIMSE Workload Proof Tokens are one supported authentication option rather than a mandatory dependency. [1][10]"
     },
     {
      "target_id": "spiffe",
      "target_name": "SPIFFE (Secure Production Identity Framework for Everyone)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "The audited workload identity can be a SPIFFE ID, and the signed object is the DSSE in-toto audit record rather than the X.509-SVID. [1][11]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "haace",
     "target_name": "High-Assurance Agent Control Envelope",
     "relation_label": "Complements",
     "delta": "Gilda's AI agent authorization audit record (`draft-gilda-audit-agent-audit-record-03`, renamed from `draft-gilda-wimse-agent-audit-record-02`) is an in-toto Statement in a DSSE envelope, whereas HAACE's Action Decision Receipt and Action Execution Receipt are the non-bearer artifacts of the action-time check. [1]",
     "item_md": "**[High-Assurance Agent Control Envelope](/protocols/haace/)** (Complements) — Gilda's AI agent authorization audit record (`draft-gilda-audit-agent-audit-record-03`, renamed from `draft-gilda-wimse-agent-audit-record-02`) is an in-toto Statement in a DSSE envelope, whereas HAACE's Action Decision Receipt and Action Execution Receipt are the non-bearer artifacts of the action-time check. [1]"
    },
    {
     "target_id": "otel-genai-semconv",
     "target_name": "OpenTelemetry GenAI Semantic Conventions (agents and MCP)",
     "relation_label": "Peer alternative",
     "delta": "Gilda's AI agent authorization audit record (`draft-gilda-audit-agent-audit-record-03`, renamed from `draft-gilda-wimse-agent-audit-record-02`) defines a DSSE-signed record format for AI agent authorization decisions, whereas these conventions define OpenTelemetry spans for GenAI agent calls and MCP clients and servers. [1]",
     "item_md": "**[OpenTelemetry GenAI Semantic Conventions (agents and MCP)](/protocols/otel-genai-semconv/)** (Peer alternative) — Gilda's AI agent authorization audit record (`draft-gilda-audit-agent-audit-record-03`, renamed from `draft-gilda-wimse-agent-audit-record-02`) defines a DSSE-signed record format for AI agent authorization decisions, whereas these conventions define OpenTelemetry spans for GenAI agent calls and MCP clients and servers. [1]"
    },
    {
     "item_md": "**[Account protocols](/category/account/)** — Category index for `account` standards."
    }
   ],
   "v05_compiled_md": "---\nid: wimse-agent-audit-record\ntitle: \"An Audit Record Format for AI Agent Authorization Decisions\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: account\nform: document-format\nwire_archetype: identity_auth_crypto\nspec_url: https://www.ietf.org/archive/id/draft-gilda-audit-agent-audit-record-03.txt\nlast_checked: 2026-11-12\n---\n\n# An Audit Record Format for AI Agent Authorization Decisions\n\n**Category:** [Account](/category/account/) (`account`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-11-12\n\n> *This page retains the slug `/protocols/wimse-agent-audit-record/` from earlier revision `draft-gilda-wimse-agent-audit-record-02` (`2026-10-16`), which was renamed and replaced on `2026-10-29` by `draft-gilda-audit-agent-audit-record-03` targeting the proposed `AUDIT` BoF rather than the [WIMSE](/protocols/wimse/) Working Group. [1]*\n\n**An Audit Record Format for AI Agent Authorization Decisions** (`draft-gilda-audit-agent-audit-record-03`) defines one record format for an agent's authorization decisions and their effects, and it defines nothing else. [1] S. Gilda is the author, and the intended status is Standards Track. [1] Its target is the AUDIT BoF and the working group it proposes. [1] Discussion of this document takes place on the AUDIT Birds of a Feather mailing list. [1] A record is an in-toto Statement carried in a DSSE envelope. [1] Seventeen required predicate members and two optional members are defined in Section 5. Each of the seventeen MUST be present unless a rule in that section makes it conditional, no member has a default, and a verifier MUST NOT supply one for an absent member. [1] Producers and verifiers MUST canonicalize the Statement with `RFC8785`, and the signature covers those bytes and no other serialization. [1] The header date is 29 October 2026. This Internet-Draft will expire on 2 May 2027. [1] This document replaces draft-gilda-wimse-agent-audit-record-02. Sections 1 to 8 and Appendices A and B keep the numbers they had there, so a reference to one of those sections of that revision resolves to the same section here. [1] Section 5.4 adds the input `principal-standing-source`, and Section 8 publishes the extended set under a second predicate type URI that ends in v2, as the freeze requires. The v1 URI and the records valid under it are unchanged. [1]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Account](/category/account/) (`account`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | Sankalp Gilda (`S. Gilda`; `draft-gilda-wimse-agent-audit-record-00` posted `2026-09-21`, renamed `2026-10-16`) [1][2][3] |\n| **Governed by** | Individual IETF Internet-Draft targeting the proposed `AUDIT` BoF and working group (`Intended status: Standards Track`, `IESG state: I-D Exists`, `RFC stream: (None)`) [1][2] |\n| **Track** | IETF Internet-Draft (Standards Track) [1] |\n| **Status** | Active Internet-Draft (individual; IESG state `I-D Exists`, intended status Standards Track, targeting the `AUDIT` BoF and proposed working group; not endorsed by the IETF) [1][2] |\n| **Version** | `draft-gilda-audit-agent-audit-record-03` (29 October 2026; expires 2 May 2027; Datatracker last updated 2026-10-29) [1][2] |\n| **Wire format** | JSON in-toto Statement (`application/vnd.in-toto+json`) under RFC 8785 JCS and RFC 7493 I-JSON in a `DSSEv1` envelope, paired at rest with an unsigned JSON retention entry [1] |\n| **Specification** | [draft-gilda-audit-agent-audit-record-03.txt](https://www.ietf.org/archive/id/draft-gilda-audit-agent-audit-record-03.txt) · [IETF Datatracker](https://datatracker.ietf.org/doc/draft-gilda-audit-agent-audit-record/) [1][2][4] |\n| **Found at** | None on the wire (transport-agnostic record format); identified by `predicateType` URI and `https://w3id.org/agent-evidence/vocab/v1/` URIs [1] |\n| **Licence** | IETF Trust provisions (`BCP 78` / `BCP 79`, Revised BSD License); `agent-evidence-vectors` under `Apache-2.0` [1] |\n| **IETF state** | `draft-gilda-audit-agent-audit-record-03` · **Active Internet-Draft** (published 29 October 2026; expires 2 May 2027) · Individual submission [1] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nSection 11 of AIMS requires audit records for agent authorization decisions and leaves their form open. [1] Two implementations that each satisfy Section 11 in their own format produce audit trails that cannot be compared, correlated across a service boundary, or checked by a party that trusts neither producer. [1] A record carries the decision and the observed effect with a derived agreement between them, whether the decision point could evaluate the request and how fresh each input it relied on was, and a canonicalization contract under which a party that trusts neither the agent nor its operator recomputes the record's consistency from its bytes. [1] It specifies no policy model, no compliance criteria and no retention period, and it does not extend or amend AIMS. [1] It defines no policy. [1] The dating check produces its own result beside the record's verdict: an envelope that is well formed stays well formed when none of its anchors validates, and it is then simply not dated. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **in-toto Attestation Statement v1** | `in-toto Statement v1` | Profiles classic standard | A record is an in-toto Statement whose predicate type URI is frozen by the latest revision, and the format defines nothing besides the authorization decision and its effect. [1][5] |\n| **DSSE: Dead Simple Signing Envelope** | `DSSE v1.0` | Profiles classic standard | That in-toto Statement is carried in a DSSE envelope, and the draft defines no discovery file. [1][6] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[AI Identity Management System (AIMS)](/protocols/wimse-aims/)** | Complements | AIMS requires tamper-evident audit records and defines no new wire protocol, and this format is the separate in-toto Statement in a DSSE envelope, which does not extend AIMS. [1][7] |\n| **[Agent Audit Trail](/protocols/agent-audit-trail/)** | Peer alternative | The Agent Audit Trail hash-chains RFC 8785 JSON with optional ECDSA, while this record is an in-toto/DSSE authorization-decision document. [1][8] |\n| **[AI Agent Execution Profile of SCITT](/protocols/scitt-ai-agent-execution/)** | Peer alternative | The SCITT profile registers a COSE-signed AgentInteractionRecord with an evidence custodian, while this record is an in-toto/DSSE authorization-decision document. [1][9] |\n| **[Workload Identity in Multi System Environments (WIMSE)](/protocols/wimse/)** | Complements | In Section 5.2, agent.authentication is drawn from the closed set wimse-wpt, http-message-signature, mtls, oauth-access-token, api-key, or none, so WIMSE Workload Proof Tokens are one supported authentication option rather than a mandatory dependency. [1][10] |\n| **[SPIFFE (Secure Production Identity Framework for Everyone)](/protocols/spiffe/)** | Complements | The audited workload identity can be a SPIFFE ID, and the signed object is the DSSE in-toto audit record rather than the X.509-SVID. [1][11] |\n\n---\n\n## See also\n\n- **[High-Assurance Agent Control Envelope](/protocols/haace/)** *(Complements)* — Gilda's AI agent authorization audit record (`draft-gilda-audit-agent-audit-record-03`, renamed from `draft-gilda-wimse-agent-audit-record-02`) is an in-toto Statement in a DSSE envelope, whereas HAACE's Action Decision Receipt and Action Execution Receipt are the non-bearer artifacts of the action-time check. [1]\n- **[OpenTelemetry GenAI Semantic Conventions (agents and MCP)](/protocols/otel-genai-semconv/)** *(Peer alternative)* — Gilda's AI agent authorization audit record (`draft-gilda-audit-agent-audit-record-03`, renamed from `draft-gilda-wimse-agent-audit-record-02`) defines a DSSE-signed record format for AI agent authorization decisions, whereas these conventions define OpenTelemetry spans for GenAI agent calls and MCP clients and servers. [1]\n- **Category:** [Account protocols](/category/account/)\n\n---\n\n## References\n\n1. S. Gilda, *An Audit Record Format for AI Agent Authorization Decisions (draft-gilda-audit-agent-audit-record-03)* (29 October 2026) — <https://www.ietf.org/archive/id/draft-gilda-audit-agent-audit-record-03.txt>\n2. IETF Datatracker, *draft-gilda-audit-agent-audit-record — An Audit Record Format for AI Agent Authorization Decisions (IETF Datatracker)* (Last updated 2026-10-29) — <https://datatracker.ietf.org/doc/draft-gilda-audit-agent-audit-record/>\n3. IETF Datatracker, *draft-gilda-audit-agent-audit-record revision events* (checked 2026-10-30) — <https://datatracker.ietf.org/api/v1/doc/newrevisiondocevent/?doc__name=draft-gilda-audit-agent-audit-record&format=json>\n4. IETF Datatracker, *IETF Datatracker document record for draft-gilda-audit-agent-audit-record* (checked 2026-10-30) — <https://datatracker.ietf.org/api/v1/doc/document/draft-gilda-audit-agent-audit-record/>\n5. in-toto Project, *in-toto Attestation Framework: Statement Layer Specification (v1)* (fetched 2026-11-12) — <https://raw.githubusercontent.com/in-toto/attestation/main/spec/v1/statement.md>\n6. NYU Secure Systems Lab, *DSSE: Dead Simple Signing Envelope Protocol* (fetched 2026-11-12) — <https://raw.githubusercontent.com/secure-systems-lab/dsse/master/protocol.md>\n7. IETF Datatracker, *draft-ietf-wimse-aims — AI Identity Management System (IETF Datatracker)* (rev 01 published 2026-11-02 (initial WG -00 snapshot 2026-09-15)) — <https://datatracker.ietf.org/doc/draft-ietf-wimse-aims/>\n8. R. Sharif (CyberSecAI Ltd), *Agent Audit Trail: A Standard Logging Format for Autonomous AI Systems (draft-sharif-agent-audit-trail-09)* (draft-sharif-agent-audit-trail-09; 26 October 2026) — <https://www.ietf.org/archive/id/draft-sharif-agent-audit-trail-09.txt>\n9. Pinar Emirdag and Daniel Feichtinger (Veridic Inc.), *AI Agent Execution Profile of SCITT (draft-emirdag-scitt-ai-agent-execution-01)* (2026-10-12) — <https://www.ietf.org/archive/id/draft-emirdag-scitt-ai-agent-execution-01.txt>\n10. IETF, *Workload Identity in Multi System Environments (wimse) — About* (checked 2026-10-30) — <https://datatracker.ietf.org/wg/wimse/about/>\n11. SPIFFE, *SPIFFE ID* (checked 2026-10-30) — <https://github.com/spiffe/spiffe/blob/main/standards/SPIFFE-ID.md>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "SEP-2127",
   "adoption": {
    "level": "observed",
    "by": "GitHub (GitHub MCP Server), Hugging Face (Hugging Face MCP Server), Exa (Exa MCP), Upstash (Context7), Buildkite (remote MCP server), and Hugging Face, hf-discover",
    "probe_run": null
   },
   "aliases": [],
   "analog": "Agent Card (A2A) or OpenAPI document, scoped to remote MCP server pre-connection discovery",
   "audience": [
    "agent-builder",
    "platform"
   ],
   "collisions": [],
   "discovery": {
    "mechanism": "GET <endpoint>/server-card, i.e. the Streamable HTTP URL plus /server-card (for https://host/mcp, https://host/mcp/server-card); this path is reserved and recommended, but any unreserved URI is valid. Domain-level discovery: an AI Catalog at /.well-known/ai-catalog.json whose entries link to or embed cards. There is no standard .well-known path for the card itself: the discovery document considered /.well-known/mcp/server-card and did not recommend it, and SEP-1649’s /.well-known/mcp.json proposal was folded into SEP-2127. Some providers, such as Zapier, Cloudflare and Sentry, serve a different JSON file without the v1 $schema at /.well-known/mcp/server-card.json (checked 2026-10-28)",
    "path": "GET <endpoint>/server-card, i.e. the Streamable HTTP URL plus /server-card (for https://host/mcp, https://host/mcp/server-card); this path is reserved and recommended, but any unreserved URI is valid. Domain-level discovery: an AI Catalog at /.well-known/ai-catalog.json whose entries link to or embed cards. There is no standard .well-known path for the card itself: the discovery document considered /.well-known/mcp/server-card and did not recommend it, and SEP-1649’s /.well-known/mcp.json proposal was folded into SEP-2127. Some providers, such as Zapier, Cloudflare and Sentry, serve a different JSON file without the v1 $schema at /.well-known/mcp/server-card.json (checked 2026-10-28)"
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://modelcontextprotocol.io/seps/2127-mcp-server-cards",
     "claim": "Model Context Protocol, *SEP-2127: MCP Server Cards*, checked 2026-10-30",
     "date": null,
     "quote": "SEP-2127: MCP Server Cards - HTTP Server Discovery - Model Context Protocol (function(c){var P=c.primary,F=c.fallbacks,found,probes={},checks={},down,reported;window.__mintAssets=P;function / This SEP proposes adding a standardized, self-contained format to describe MCP servers for pre-connection discovery. / This enables clients to automatically discover available transports, protocol versions, and connection guidance before establishing a connection. / David Soria Parra (@dsp-ant), Sam Morrow (@SamMorrowDrums), Tadas Antanavicius (@tadasant); on behalf of the Server Card Working Group / As an Extensions Track SEP (per SEP-2133), this document charters the Server Card extension and names its Working Group and maintainers. / This SEP has reached Final status and is preserved as a historical record of the design as accepted. / Extensions Track Created 2026-01-21 / David Soria Parra (@dsp-ant), Sam Morrow (@SamMorrowDrums), Tadas Antanavicius (@tadasant).]}),\\n,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:Extension / an Extensions Track SEP (per,_jsx(_components.a,{href:/seps/2133-extensions,children:SEP-2133}),), this document charters the,_jsx(_components.strong,{children:Server Card}), extension and names its / The TypeScript file,_jsx(_components.a,{href:https://github.com/modelcontextprotocol/experimental-ext-server-card/blob/main/schema.ts,children:_jsx(_components.code,{children:schema.ts})}), is the single / rel=\"api-catalog\", </.well-known/mcp/server-card.json>; rel=\"mcp-server-card\", </.well-known/agent-card.json>; rel=\"agent-card\", </.well-known/agent-skills/index.json>; rel=\"agent-skills\" pragma: no-cache / MCP clients need an out-of-band way to discover remote servers before choosing or opening a transport. / Runtime mechanisms such as server/discover become available only after a client already knows where to connect. / This SEP introduces MCP Server Cards - structured metadata documents that servers expose through standardized mechanisms. / For domain-level discovery, an AI Catalog can link to or embed the relevant Server Cards. / MCP Server Cards describe remote MCP connectivity only. / The MCP Registry's server.json separately describes registry entries, including locally installable packages and their runtime configuration. / servers that do not publish a card continue to work normally",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://github.com/modelcontextprotocol/ext-server-card/blob/main/docs/discovery.md",
     "claim": "Model Context Protocol, *ext-server-card Discovery Documentation*, checked 2026-10-30",
     "date": null,
     "quote": "Clients performing domain-level discovery SHOULD follow this procedure / If a valid AI Catalog is returned, select entries whose type is / For an entry with url, retrieve the Server Card from that URL, expressing the Server / use the inline Server Card / A domain advertising a single MCP server: / urn:air:example.com:mcp:weather / Protocol Revision: draft / An MCP Server Card is a JSON document that describes a single MCP server - its identity and connection details. Server Cards use the media type application/mcp-server-card+json. / menu\\\",\\\"repository_id\\\":null,\\\"auth_type\\\":\\\"SIGN_UP\\\",\\\"originating_url\\\":\\\"https://github.com/modelcontextprotocol/ext-server-card/blob/main/docs/discovery.md\\\",\\\"user_id\\\":null}}\",\"auth_hydro_click_hmac\":\"2 / Caching\",\"\",\"Server Card hosts SHOULD include caching headers to reduce unnecessary requests:\",\"\",\"\",\"Cache-Control: public, max-age=3600\",\"\",\"\",\"Hosts SHOULD / Server Cards do not enumerate primitives (tools, resources, prompts); those remain / Clients MUST NOT treat Server Card contents as authoritative for security or / Clients SHOULD verify a Server Card's claims against the live connection, preferring the / Hosted Server Cards MUST be served over HTTPS (TLS 1.2 or later) in production. HTTP MAY",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://github.com/modelcontextprotocol/ext-server-card",
     "claim": "Model Context Protocol, *modelcontextprotocol/ext-server-card Repository*, checked 2026-10-30",
     "date": null,
     "quote": "Experimental. This work is for prototyping and feedback only, and is not an accepted or official MCP extension. / to point at the main spec's hosted schema URL (e.g., https://static.modelcontextprotocol.io/schemas/v1/server-card.schema.json served from modelcontextprotocol/static). / the form: https://static.modelcontextprotocol.io/schemas/v1/.schema.json Schema URLs are versioned by their vN segment. Server Card objects / MCP Registry server.json schema { \"id\": 1222854600, \"node_id\": \"R_kgDOSONHyA\", \"name\": \"ext-server-card\", \"full_name\": \"modelcontextprotocol/ext-server-card\", \"private\": / as the recommended location (see \\u003ca href=\\\"/modelcontextprotocol/ext-server-card/blob/main/docs/discovery.md\\\"\\u003ediscovery.md\\u003c/a\\u003e) — describing:\\u003c/p\\u003e\\n\\u003cul / quality\",\"href\":\"/modelcontextprotocol/ext-server-card/security\",\"selectedLinks\":[\"security\",\"overview\",\"alerts\",\"policy\",\"token_scanning\",\"code_scanning\"],\"count\":0,\"popoverTarget\":false,\"commandId\":\"repositor",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://modelcontextprotocol.io/community/working-groups/server-card",
     "claim": "Model Context Protocol, *MCP Server Card Working Group*, checked 2026-10-30",
     "date": null,
     "quote": "2026-03-26 Initial charter / SEP-2127: MCP Server Card Draft / Item Status Target Date Champion SEP-2127: MCP Server Card Draft Apr 3, 2026 @dsp-ant",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2127",
     "claim": "Model Context Protocol, *MCP SEP-2127 (PR #2127): MCP Server Cards Specification*, checked 2026-10-30",
     "date": null,
     "quote": "closedTime\":\"2026-10-06T14:43:46Z / This was voted Accept on by the CMs 8/13/2026 / https://opengraph.githubassets.com/29d8a2d8fff0fb7a8be88c8502d98104fc8d3f1a52b028093e8aae3debabb09e/modelcontextprotocol/modelcontextprotocol/pull/2127 @github summary_large_image SEP-2127: MCP Server Cards - / This was voted Accept on by the CMs 8/13/2026: https://voting.modelcontextprotocol.io/p/utpghaspva",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://github.com/modelcontextprotocol/modelcontextprotocol/issues/1649",
     "claim": "Model Context Protocol, *MCP Issue #1649: Server Card Discovery Proposal*, checked 2026-10-30",
     "date": null,
     "quote": "Activity Next dsp-ant self-assigned this on Oct 14, 2025 dsp-ant added SEP draft SEP",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2893",
     "claim": "Model Context Protocol, *MCP PR #2893: Server Cards Specification Update*, checked 2026-10-30",
     "date": null,
     "quote": "is now: David Soria Parra (@dsp-ant), Sam Morrow (@SamMorrowDrums), Tadas Antanavicius (@tadasant); on behalf / Refactors SEP-2127 (MCP Server Cards) from Standards Track to Extensions Track, slimming the body to a charter (SEP-1865 shape) that delegates the detailed wire format to modelcontextprotocol/experimental-ext-server-card.",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://github.com/modelcontextprotocol/ext-server-card/blob/main/schema.json",
     "claim": "Model Context Protocol, *ext-server-card JSON Schema*, checked 2026-10-30",
     "date": null,
     "quote": "at main · modelcontextprotocol/ext-server-card\"}} Files Expand file tree main Breadcrumbs ext-server-card / schema.json Copy",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://github.com/github/github-mcp-server/pull/2768",
     "claim": "GitHub, *github-mcp-server PR #2768: Server Card Endpoint*, checked 2026-10-30",
     "date": null,
     "quote": "* Access-Control-Allow-Methods: GET Access-Control-Allow-Headers: Content-Type, If-None-Match Access-Control-Expose-Headers: ETag Cache-Control: public, max-age=3600. Vary: Accept, X-Forwarded-Host / \"streamable-http\", \"url\": \"https://api.githubcopilot.com/mcp/\" } ] }\"> { \"$schema\" : \" https://static.modelcontextprotocol.io/schemas/v1/server-card.schema.json \" , \"name\"",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://spec.openapis.org/oas/v3.1.0.html",
     "claim": "OpenAPI Initiative, *OpenAPI Specification v3.1.0*, 2021-02-15",
     "date": "2021-02-15",
     "quote": "OpenAPI Specification v3.1.0 Version 3.1.0",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Current : the current protocol version, which is ready for use and may continue to receive backwards compatible changes.",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://modelcontextprotocol.io/registry/about",
     "claim": "Model Context Protocol, *About the MCP Registry*, checked 2026-10-30",
     "date": null,
     "quote": "The MCP Registry is currently in preview.",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://aaif.io/blog/a2a-joins-aaif",
     "claim": "Agentic AI Foundation, *A2A joins AAIF's open agentic stack*, published 2026-08-17; modified 2026-09-24",
     "date": null,
     "quote": "A2A v1.0, the first stable specification, shipped in March 2026.",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://raw.githubusercontent.com/Agent-Card/ai-catalog/main/specification/ai-catalog.md",
     "claim": "Agent Card Working Group, *Agent Card Working Group — ai-catalog.md*, checked 2026-10-29",
     "date": null,
     "quote": "This section registers the ai-catalog.json well-known URI in the IANA \"Well-Known URIs\" registry [[RFC8615]]. URI Suffix:: ai-catalog.json Change Controller:: Agent Card Working Group",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://datatracker.ietf.org/doc/html/rfc9728",
     "claim": "IETF Datatracker, *RFC 9728: OAuth 2.0 Protected Resource Metadata*, RFC - Proposed Standard (April 2025)",
     "date": null,
     "quote": "RFC - Proposed Standard April 2025",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://api.githubcopilot.com/mcp/server-card",
     "claim": "GitHub, *GitHub Copilot MCP Server Card Endpoint*, checked 2026-10-30",
     "date": null,
     "quote": "{\"$schema\":\"https://static.modelcontextprotocol.io/schemas/v1/server-card.schema.json\",\"name\":\"io.github.github/github-mcp-server\",\"version\":\"github-mcp-server/remote-50563057c28ad0b768bbabf87702258ec13db968\",\"",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://huggingface.co/mcp/server-card",
     "claim": "Hugging Face, *Hugging Face MCP Server Card Endpoint*, checked 2026-10-30",
     "date": null,
     "quote": "Face Hub.\",\"title\":\"Hugging Face\",\"websiteUrl\":\"https://huggingface.co/mcp\",\"remotes\":[{\"type\":\"streamable-http\",\"url\":\"https://huggingface.co/mcp\"}]} content-type: application/mcp-server-card+json;",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://github.com/huggingface/hf-mcp-server",
     "claim": "Hugging Face, *huggingface/hf-mcp-server Repository*, checked 2026-10-30",
     "date": null,
     "quote": "The public Streamable HTTP deployment serves its MCP Server Card at /mcp/server-card.",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://mcp.exa.ai/mcp/server-card",
     "claim": "Exa, *Exa AI MCP Server Card Endpoint*, checked 2026-10-30",
     "date": null,
     "quote": ", \"transport\":{\"type\":\"streamable-http\",\"endpoint\":\"https://mcp.exa.ai/mcp\" } } date: Fri, 30 Oct 2026 23:39:52 GMT content-type: application/mcp-server-card+json transfer-encoding:",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://exa.ai/docs/get-started/exa-mcp",
     "claim": "Exa, *Exa MCP Server Documentation*, checked 2026-10-30",
     "date": null,
     "quote": "property=\\\"og:url\\\" content=\\\"https://exa.ai/docs/get-started/exa-mcp\\\">\\u003cmeta data-mint-head property=\\\"og:type\\\" content=\\\"website\\\">\\u003cmeta data-mint-head property=\\\"og:image\\\"",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://mcp.context7.com/mcp/server-card",
     "claim": "Context7 (Upstash), *Context7 MCP Server Card Endpoint*, checked 2026-10-30",
     "date": null,
     "quote": "{\"$schema\":\"https://static.modelcontextprotocol.io/schemas/v1/server-card.schema.json\",\"name\":\"io.github.upstash/context7\",\"title\":\"Context7\",\"description\":\"Up-to-date, version-specific documentation and code",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://github.com/upstash/context7",
     "claim": "Upstash, *upstash/context7 Repository*, checked 2026-10-30",
     "date": null,
     "quote": "To configure manually, use the Context7 server URL https://mcp.context7.com/mcp with your MCP client and pass your API key via the Authorization: Bearer YOUR_API_KEY header.",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://mcp.buildkite.com/mcp/server-card",
     "claim": "Buildkite, *Buildkite MCP Server Card Endpoint*, checked 2026-10-30",
     "date": null,
     "quote": "{\"$schema\":\"https://static.modelcontextprotocol.io/schemas/v1/server-card.schema.json\",\"name\":\"com.buildkite/remote-mcp-server\",\"title\":\"Buildkite\",\"description\":\"Connect AI clients to Buildkite workflows and",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://buildkite.com/docs/apis/mcp-server/remote/configuring-ai-tools",
     "claim": "Buildkite, *Buildkite Remote MCP Server Documentation*, checked 2026-10-30",
     "date": null,
     "quote": "use the OAuth-based remote MCP server at https://mcp.buildkite.com/mcp. Using token exchange with an MCP gateway",
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://github.com/huggingface/hf-discover",
     "claim": "Hugging Face, *huggingface/hf-discover Repository*, checked 2026-10-30",
     "date": null,
     "quote": "Requests for application/mcp-server-card+json add filter=mcp-server to the downstream Hub search and return MCP server card catalog entries that point at this adapter's generated server.json descriptor route.",
     "ref": 25
    }
   ],
   "form": "document-format",
   "governance": "Model Context Protocol project, through its Server Card Working Group (chartered 2026-03-26) and the SEP process",
   "group": null,
   "hatnote_md": "This page is about MCP Server Cards (SEP-2127), the JSON document that describes a remote MCP server before a client connects to it. For the protocol itself, see [Model Context Protocol](/protocols/mcp/). For the central directory of MCP servers, see [Official MCP Registry](/protocols/mcp-registry/). For the domain-level index that lists cards, see [AI Catalog well-known file](/protocols/ai-catalog-well-known-file/).",
   "history": [
    {
     "date": "2026-10-20",
     "note": "location per Final SEP-2127, conformant publishers, and the unofficial /.well-known/mcp/server-card.json convention recorded"
    },
    {
     "date": "2026-10-20",
     "note": "SEP-2127 recorded as an Extensions Track charter: AI Catalog discovery, server-card media type, extension-repo wire format, and the SEP-1649 /.well-known/mcp.json path"
    },
    {
     "date": "2026-10-28",
     "note": "Re-verified record against 20 sources on 2026-10-28: 5 live SEP-2127 Server Card endpoints (GitHub, Hugging Face, Exa, Context7/Upstash, Buildkite), 2 tooling/SDK sources, and 3 coverage sources."
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "mcp-server-cards",
   "implementation": "multi-implementation",
   "last_verified": "2026-11-12",
   "name": "MCP Server Cards",
   "native_status": "SEP-2127 Final. History: SEP-1649 opened 2025-10-14 and moved to pull request #2127 on 2026-01-21; refactored into an Extensions Track charter, with the wire format moved to the ext-server-card repository, merged 2026-06-26; Core Maintainers voted to accept on 2026-08-13 and #2127 merged on 2026-10-06. When checked, the extension README still said \"Experimental\" and the Server Card WG page still listed SEP-2127 as Draft",
   "origin": {
    "date": "2025-10-14",
    "org": "MCP Server Card Working Group"
   },
   "pairs_with": [
    "mcp",
    "mcp-registry",
    "a2a",
    "ai-catalog-well-known-file",
    "oauth-metadata-for-agents"
   ],
   "part_of": "mcp",
   "parties": [
    "agent-site"
   ],
   "phase": "stable",
   "prerequisites": [],
   "probe": {
    "method": "GET",
    "path": "{endpoint}/server-card",
    "parse": "A JSON document served as application/mcp-server-card+json at GET <streamable-http-url>/server-card, the location SEP-2127 (Final, Extensions Track) reserves. The card carries identity, transports, and protocol versions, and does not carry tools. The normative wire format lives in the server-card extension repository. When this static card and a live server/discover response disagree, the live call wins.",
    "on_absent": "404 or non-JSON means no Server Card is published at the SEP-2127 location; the server may still be a working MCP server. Discovery is via /.well-known/ai-catalog.json. /.well-known/mcp.json is the earlier SEP-1649 shape."
   },
   "question": "How can a client learn what an MCP server offers before connecting to it?",
   "scope": "general",
   "spec_url": "https://modelcontextprotocol.io/seps/2127-mcp-server-cards",
   "step": "discover",
   "summary_md": "**MCP Server Cards** (`SEP-2127`) is a standardized, self-contained format to describe MCP servers for pre-connection discovery. It enables clients to automatically discover available transports, protocol versions, and connection guidance before establishing a connection. David Soria Parra, Sam Morrow, and Tadas Antanavicius are the authors, on behalf of the Server Card Working Group. As an Extensions Track SEP, the specification charters the Server Card extension and names its Working Group and maintainers. Clients performing domain-level discovery SHOULD follow this procedure. The procedure fetches `https://{domain}/.well-known/ai-catalog.json` and, if a valid AI Catalog is returned, selects entries whose `type` is `application/mcp-server-card+json`. For an entry with `url`, the client retrieves the Server Card from that URL, expressing the Server Card media type via the `Accept` header. For an entry with `data`, the client uses the inline Server Card. A domain advertising a single MCP server is the catalog specimen. Its example identifier is `urn:air:example.com:mcp:weather` and its `type` is `application/mcp-server-card+json`. This SEP has reached Final status and is preserved as a historical record of the design as accepted. The SEP field list includes Created 2026-01-21. The discovery document is labeled `Protocol Revision: draft`. The `ext-server-card` README says the status is Experimental, that the work is for prototyping and feedback only, and that it is not an accepted or official MCP extension. The Server Card Working Group changelog records 2026-03-26 Initial charter. The same page lists SEP-2127: MCP Server Card Draft. Pull request `#2127` was closed on 2026-10-06, and it states that this was voted Accept on by the CMs 8/13/2026.",
   "track": "linux-foundation",
   "use_cases": [
    "discover-my-api",
    "describe-agent-capabilities",
    "expose-tools-to-agents"
   ],
   "version": {
    "date": "2026-10-06",
    "label": "Schema v1 (SEP-2127 Final)"
   },
   "watch": [
    {
     "type": "github",
     "repo": "modelcontextprotocol/modelcontextprotocol",
     "mode": "tag",
     "version": false
    }
   ],
   "tier": "spec_brief",
   "lifecycle_status": "published_standard",
   "wire_archetype": "harnesses_rpc_ui",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "This page is about MCP Server Cards (SEP-2127), the JSON document that describes a remote MCP server before a client connects to it. For the protocol itself, see [Model Context Protocol](/protocols/mcp/). For the central directory of MCP servers, see [Official MCP Registry](/protocols/mcp-registry/). For the domain-level index that lists cards, see [AI Catalog well-known file](/protocols/ai-catalog-well-known-file/). [1]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**MCP Server Cards** (`SEP-2127`) is a standardized, self-contained format to describe MCP servers for pre-connection discovery. It enables clients to automatically discover available transports, protocol versions, and connection guidance before establishing a connection. [1] David Soria Parra, Sam Morrow, and Tadas Antanavicius are the authors, on behalf of the Server Card Working Group. As an Extensions Track SEP, the specification charters the Server Card extension and names its Working Group and maintainers. [1] Clients performing domain-level discovery SHOULD follow this procedure. The procedure fetches `https://{domain}/.well-known/ai-catalog.json` and, if a valid AI Catalog is returned, selects entries whose `type` is `application/mcp-server-card+json`. [2] For an entry with `url`, the client retrieves the Server Card from that URL, expressing the Server Card media type via the `Accept` header. For an entry with `data`, the client uses the inline Server Card. [2] A domain advertising a single MCP server is the catalog specimen. Its example identifier is `urn:air:example.com:mcp:weather` and its `type` is `application/mcp-server-card+json`. [2] This SEP has reached Final status and is preserved as a historical record of the design as accepted. The SEP field list includes Created 2026-01-21. [1] The discovery document is labeled `Protocol Revision: draft`. The `ext-server-card` README says the status is Experimental, that the work is for prototyping and feedback only, and that it is not an accepted or official MCP extension. [2][3] The Server Card Working Group changelog records 2026-03-26 Initial charter. The same page lists SEP-2127: MCP Server Card Draft. [4] Pull request `#2127` was closed on 2026-10-06, and it states that this was voted Accept on by the CMs 8/13/2026. [5]",
   "v05_identity_sentence_md": "**MCP Server Cards** (`SEP-2127`) is a standardized, self-contained format to describe MCP servers for pre-connection discovery. It enables clients to automatically discover available transports, protocol versions, and connection guidance before establishing a connection. [1] David Soria Parra, Sam Morrow, and Tadas Antanavicius are the authors, on behalf of the Server Card Working Group. As an Extensions Track SEP, the specification charters the Server Card extension and names its Working Group and maintainers. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Discover](/category/discover/) (`discover`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "David Soria Parra (`@dsp-ant`, Anthropic), Sam Morrow (`@SamMorrowDrums`, GitHub), and Tadas Antanavicius (`@tadasant`), continuing `SEP-1649` (`@dsp-ant`, `@nickcoai`, `2025-10-14`) [1][6][7]"
    },
    {
     "label": "Governed by",
     "value_md": "MCP Server Card WG (`2026-03-26`) under the Linux Foundation (AAIF) MCP Extensions Track (`SEP-2133`) [1][4][7]"
    },
    {
     "label": "Track",
     "value_md": "MCP Extensions Track (`SEP-2127`, Linux Foundation AAIF) [1][7]"
    },
    {
     "label": "Status",
     "value_md": "SEP-2127 Final. History: SEP-1649 opened 2025-10-14 and moved to pull request #2127 on 2026-01-21; refactored into an Extensions Track charter, with the wire format moved to the ext-server-card repository, merged 2026-06-26; Core Maintainers voted to accept on 2026-08-13 and #2127 merged on 2026-10-06. When checked, the extension README still said \"Experimental\" and the Server Card WG page still listed SEP-2127 as Draft [1][3][5]"
    },
    {
     "label": "Version",
     "value_md": "Schema `v1` (`https://static.modelcontextprotocol.io/schemas/v1/server-card.schema.json`; voted `Accept` `2026-08-13`, merged `2026-10-06`) [1][3][5]"
    },
    {
     "label": "Wire format",
     "value_md": "UTF-8 JSON (`application/mcp-server-card+json`), JSON Schema Draft 2020-12 (`ext-server-card/schema.json`) [2][3][8]"
    },
    {
     "label": "Specification",
     "value_md": "[SEP-2127](https://modelcontextprotocol.io/seps/2127-mcp-server-cards) · [ext-server-card](https://github.com/modelcontextprotocol/ext-server-card) · [discovery.md](https://github.com/modelcontextprotocol/ext-server-card/blob/main/docs/discovery.md) · [schema.json](https://github.com/modelcontextprotocol/ext-server-card/blob/main/schema.json) [1][2][3]"
    },
    {
     "label": "Found at",
     "value_md": "`GET <streamable-http-url>/server-card` (`Accept: application/mcp-server-card+json`); domain catalog `/.well-known/ai-catalog.json`; `Access-Control-Allow-Origin: *` (`MUST`), `Cache-Control: public, max-age=3600` (`SHOULD`), `ETag` (`SHOULD`) [1][2][9]"
    },
    {
     "label": "Licence",
     "value_md": "Apache License 2.0 (`modelcontextprotocol/ext-server-card`) [3]"
    }
   ],
   "v05_problem_md": "MCP clients need an out-of-band way to discover remote servers before choosing or opening a transport. Runtime mechanisms such as server/discover become available only after a client already knows where to connect. [1] This SEP introduces MCP Server Cards, structured metadata documents that servers expose through standardized mechanisms. For domain-level discovery, an AI Catalog can link to or embed the relevant Server Cards. [1] Server Cards do not enumerate primitives (tools, resources, prompts); those remain subject to runtime listing via the protocol's standard list operations. Clients MUST NOT treat Server Card contents as authoritative for security or access-control decisions. [2] Clients SHOULD verify a Server Card's claims against the live connection, preferring the runtime values where the two disagree. [2] MCP Server Cards describe remote MCP connectivity only. The MCP Registry's server.json separately describes registry entries, including locally installable packages and their runtime configuration. [1] As an extension, MCP Server Cards are optional and additive: servers that do not publish a card continue to work normally. Hosted Server Cards MUST be served over HTTPS (TLS 1.2 or later) in production. HTTP MAY be used for local development only. [1][2]",
   "v05_mechanism_delta_md": "This SEP introduces MCP Server Cards, structured metadata documents that servers expose through standardized mechanisms. For domain-level discovery, an AI Catalog can link to or embed the relevant Server Cards. [1] Server Cards do not enumerate primitives (tools, resources, prompts); those remain subject to runtime listing via the protocol's standard list operations. Clients MUST NOT treat Server Card contents as authoritative for security or access-control decisions. [2] Clients SHOULD verify a Server Card's claims against the live connection, preferring the runtime values where the two disagree. [2]",
   "v05_scope_boundary_md": "MCP Server Cards describe remote MCP connectivity only. The MCP Registry's server.json separately describes registry entries, including locally installable packages and their runtime configuration. [1] As an extension, MCP Server Cards are optional and additive: servers that do not publish a card continue to work normally. Hosted Server Cards MUST be served over HTTPS (TLS 1.2 or later) in production. HTTP MAY be used for local development only. [1][2]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "OpenAPI Specification 3.1",
      "spec_or_rfc": "OpenAPI 3.1.0",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "A client fetches a SEP-2127 v1 Server Card with GET at the MCP Streamable HTTP URL plus /server-card, and that JSON lists name, version, endpoints, and supported protocol versions while omitting tools, resources, and prompts, rather than an OpenAPI paths object. [1][10]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "part_of",
      "relation_label": "Part of",
      "delta_md": "SEP-2127 is the MCP extension whose Server Card is read with GET `<endpoint>/server-card` before the client connects, and the card omits the tools, resources, and prompts the live server still provides. [1][11]"
     },
     {
      "target_id": "mcp-registry",
      "target_name": "Official MCP Registry",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "The card is served by the MCP endpoint itself, while the registry answers GET /v0.1/servers for a central name-and-version index of many servers. [1][12]"
     },
     {
      "target_id": "a2a",
      "target_name": "Agent2Agent Protocol (A2A)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "An MCP Server Card is GET `<endpoint>/server-card` and lists name, version, endpoints, and supported protocol versions before the client connects, while an A2A Agent Card is GET /.well-known/agent-card.json and the task binding after that is JSON-RPC 2.0, gRPC, or HTTP+JSON. [1][13]"
     },
     {
      "target_id": "ai-catalog-well-known-file",
      "target_name": "AI Catalog well-known file",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "An AI Catalog at /.well-known/ai-catalog.json indexes the server card URL under application/mcp-server-card+json, while SEP-2127 reserves GET `<streamable-http-url>/server-card` as the recommended (MAY) convention and allows hosting the card at any unreserved URI referenced by the catalog entry. [1][14]"
     },
     {
      "target_id": "oauth-metadata-for-agents",
      "target_name": "OAuth Protected Resource and Authorization Server Metadata (as used for agent authorization)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "OAuth protected-resource and authorization-server metadata tells the client how agent authorization is discovered, while the Server Card describes the MCP server before the client connects. [1][15]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (6 probed or cited examples; non-exhaustive).",
    "side_a": {
     "visible": true,
     "heading": "Servers, repos & skill indexes",
     "col4_header": "Transport & Scope",
     "note_md": null,
     "rows": [
      {
       "actor": "GitHub (GitHub MCP Server)",
       "role": "Server Card publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · as of 2026-09-02",
       "col4_md": "GET https://api.githubcopilot.com/mcp/server-card returned status 200, Content-Type application/mcp-server-card+json, $schema set to the v1 schema URL, remotes entry https://api.githubcopilot.com/mcp/, card name io.github.github/github-mcp-server. https://github.com/.well-known/ai-catalog.json (status 200, application/ai-catalog+json) links to this card. github/github-mcp-server pull request #2768, merged 2026-09-02, adds the card handler.",
       "source_md": "[GitHub server card](https://api.githubcopilot.com/mcp/server-card) [16] · [GitHub pull request #2768](https://github.com/github/github-mcp-server/pull/2768) [9]"
      },
      {
       "actor": "Hugging Face (Hugging Face MCP Server)",
       "role": "Server Card publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "GET https://huggingface.co/mcp/server-card returned status 200, Content-Type application/mcp-server-card+json, $schema set to the v1 schema URL, remotes entry https://huggingface.co/mcp, card name huggingface.co/mcp. https://huggingface.co/.well-known/ai-catalog.json (status 200, application/ai-catalog+json) links to this card. The hf-mcp-server README says the public Streamable HTTP deployment serves the card at /mcp/server-card.",
       "source_md": "[Hugging Face server card](https://huggingface.co/mcp/server-card) [17] · [hf-mcp-server README](https://github.com/huggingface/hf-mcp-server) [18]"
      },
      {
       "actor": "Exa (Exa MCP)",
       "role": "Server Card publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "GET https://mcp.exa.ai/mcp/server-card returned status 200, Content-Type application/mcp-server-card+json, $schema set to the v1 schema URL, remotes entry https://mcp.exa.ai/mcp, card name ai.exa/exa. Exa's docs give the hosted server as https://mcp.exa.ai/mcp.",
       "source_md": "[Exa server card](https://mcp.exa.ai/mcp/server-card) [19] · [Exa MCP docs](https://exa.ai/docs/get-started/exa-mcp) [20]"
      },
      {
       "actor": "Upstash (Context7)",
       "role": "Server Card publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "GET https://mcp.context7.com/mcp/server-card returned status 200, Content-Type application/mcp-server-card+json, $schema set to the v1 schema URL, remotes entry https://mcp.context7.com/mcp, card name io.github.upstash/context7. https://context7.com/.well-known/ai-catalog.json (status 200, application/ai-catalog+json) links to this card. The Context7 README tells clients to use https://mcp.context7.com/mcp.",
       "source_md": "[Context7 server card](https://mcp.context7.com/mcp/server-card) [21] · [Context7 README](https://github.com/upstash/context7) [22]"
      },
      {
       "actor": "Buildkite (remote MCP server)",
       "role": "Server Card publisher",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "GET https://mcp.buildkite.com/mcp/server-card returned status 200, Content-Type application/mcp-server-card+json, $schema set to the v1 schema URL, remotes entry https://mcp.buildkite.com/mcp, card name com.buildkite/remote-mcp-server. Buildkite's docs tell tools to use the OAuth remote server at https://mcp.buildkite.com/mcp.",
       "source_md": "[Buildkite server card](https://mcp.buildkite.com/mcp/server-card) [23] · [Buildkite remote MCP docs](https://buildkite.com/docs/apis/mcp-server/remote/configuring-ai-tools) [24]"
      },
      {
       "actor": "Hugging Face, hf-discover",
       "role": "Server Card publisher",
       "status": "Supported",
       "status_display": "Supported · as of 2026-06-30",
       "col4_md": "The hf-discover README, last changed 2026-06-30, says a request for application/mcp-server-card+json adds filter=mcp-server to the downstream Hub search and returns MCP server card catalog entries that point at this adapter's generated server.json route.",
       "source_md": "[hf-discover README](https://github.com/huggingface/hf-discover) [25]"
      }
     ]
    },
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "api-catalog-rfc9727",
     "target_name": "api-catalog (RFC 9727)",
     "relation_label": "Complements",
     "delta": "RFC 9727 links API descriptions. SEP-2127 cards describe MCP servers and may publish `/.well-known/ai-catalog.json`. [1]",
     "item_md": "**[api-catalog (RFC 9727)](/protocols/api-catalog-rfc9727/)** (Complements) — RFC 9727 links API descriptions. SEP-2127 cards describe MCP servers and may publish `/.well-known/ai-catalog.json`. [1]"
    },
    {
     "target_id": "ard",
     "target_name": "Agentic Resource Discovery (ARD)",
     "relation_label": "Complements",
     "delta": "ARD is a domain manifest of agentic resources, while MCP Server Cards describe individual MCP servers and SEP-2127 discovers them through /.well-known/ai-catalog.json. [1]",
     "item_md": "**[Agentic Resource Discovery (ARD)](/protocols/ard/)** (Complements) — ARD is a domain manifest of agentic resources, while MCP Server Cards describe individual MCP servers and SEP-2127 discovers them through /.well-known/ai-catalog.json. [1]"
    },
    {
     "target_id": "mcp-dns-discovery",
     "target_name": "Discovery of Model Context Protocol Servers via DNS TXT Records",
     "relation_label": "Peer alternative",
     "delta": "This draft answers discovery with DNS TXT at `_mcp.<domain>`, `_org-alter.<domain>`, and `_alter.<domain>`, while a Server Card is HTTP GET `<endpoint>/server-card` after the client already has the MCP URL. [1]",
     "item_md": "**[Discovery of Model Context Protocol Servers via DNS TXT Records](/protocols/mcp-dns-discovery/)** (Peer alternative) — This draft answers discovery with DNS TXT at `_mcp.<domain>`, `_org-alter.<domain>`, and `_alter.<domain>`, while a Server Card is HTTP GET `<endpoint>/server-card` after the client already has the MCP URL. [1]"
    },
    {
     "item_md": "**[Discover protocols](/category/discover/)** — Category index for `discover` standards."
    }
   ],
   "v05_compiled_md": "---\nid: mcp-server-cards\ntitle: \"MCP Server Cards\"\ntier: spec_brief\nlifecycle_status: published_standard\ncategory: discover\nform: document-format\nwire_archetype: harnesses_rpc_ui\nspec_url: https://modelcontextprotocol.io/seps/2127-mcp-server-cards\nlast_checked: 2026-11-12\n---\n\n# MCP Server Cards\n\n**Category:** [Discover](/category/discover/) (`discover`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-11-12\n\n> *This page is about MCP Server Cards (SEP-2127), the JSON document that describes a remote MCP server before a client connects to it. For the protocol itself, see [Model Context Protocol](/protocols/mcp/). For the central directory of MCP servers, see [Official MCP Registry](/protocols/mcp-registry/). For the domain-level index that lists cards, see [AI Catalog well-known file](/protocols/ai-catalog-well-known-file/). [1]*\n\n**MCP Server Cards** (`SEP-2127`) is a standardized, self-contained format to describe MCP servers for pre-connection discovery. It enables clients to automatically discover available transports, protocol versions, and connection guidance before establishing a connection. [1] David Soria Parra, Sam Morrow, and Tadas Antanavicius are the authors, on behalf of the Server Card Working Group. As an Extensions Track SEP, the specification charters the Server Card extension and names its Working Group and maintainers. [1] Clients performing domain-level discovery SHOULD follow this procedure. The procedure fetches `https://{domain}/.well-known/ai-catalog.json` and, if a valid AI Catalog is returned, selects entries whose `type` is `application/mcp-server-card+json`. [2] For an entry with `url`, the client retrieves the Server Card from that URL, expressing the Server Card media type via the `Accept` header. For an entry with `data`, the client uses the inline Server Card. [2] A domain advertising a single MCP server is the catalog specimen. Its example identifier is `urn:air:example.com:mcp:weather` and its `type` is `application/mcp-server-card+json`. [2] This SEP has reached Final status and is preserved as a historical record of the design as accepted. The SEP field list includes Created 2026-01-21. [1] The discovery document is labeled `Protocol Revision: draft`. The `ext-server-card` README says the status is Experimental, that the work is for prototyping and feedback only, and that it is not an accepted or official MCP extension. [2][3] The Server Card Working Group changelog records 2026-03-26 Initial charter. The same page lists SEP-2127: MCP Server Card Draft. [4] Pull request `#2127` was closed on 2026-10-06, and it states that this was voted Accept on by the CMs 8/13/2026. [5]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Discover](/category/discover/) (`discover`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | David Soria Parra (`@dsp-ant`, Anthropic), Sam Morrow (`@SamMorrowDrums`, GitHub), and Tadas Antanavicius (`@tadasant`), continuing `SEP-1649` (`@dsp-ant`, `@nickcoai`, `2025-10-14`) [1][6][7] |\n| **Governed by** | MCP Server Card WG (`2026-03-26`) under the Linux Foundation (AAIF) MCP Extensions Track (`SEP-2133`) [1][4][7] |\n| **Track** | MCP Extensions Track (`SEP-2127`, Linux Foundation AAIF) [1][7] |\n| **Status** | SEP-2127 Final. History: SEP-1649 opened 2025-10-14 and moved to pull request #2127 on 2026-01-21; refactored into an Extensions Track charter, with the wire format moved to the ext-server-card repository, merged 2026-06-26; Core Maintainers voted to accept on 2026-08-13 and #2127 merged on 2026-10-06. When checked, the extension README still said \"Experimental\" and the Server Card WG page still listed SEP-2127 as Draft [1][3][5] |\n| **Version** | Schema `v1` (`https://static.modelcontextprotocol.io/schemas/v1/server-card.schema.json`; voted `Accept` `2026-08-13`, merged `2026-10-06`) [1][3][5] |\n| **Wire format** | UTF-8 JSON (`application/mcp-server-card+json`), JSON Schema Draft 2020-12 (`ext-server-card/schema.json`) [2][3][8] |\n| **Specification** | [SEP-2127](https://modelcontextprotocol.io/seps/2127-mcp-server-cards) · [ext-server-card](https://github.com/modelcontextprotocol/ext-server-card) · [discovery.md](https://github.com/modelcontextprotocol/ext-server-card/blob/main/docs/discovery.md) · [schema.json](https://github.com/modelcontextprotocol/ext-server-card/blob/main/schema.json) [1][2][3] |\n| **Found at** | `GET <streamable-http-url>/server-card` (`Accept: application/mcp-server-card+json`); domain catalog `/.well-known/ai-catalog.json`; `Access-Control-Allow-Origin: *` (`MUST`), `Cache-Control: public, max-age=3600` (`SHOULD`), `ETag` (`SHOULD`) [1][2][9] |\n| **Licence** | Apache License 2.0 (`modelcontextprotocol/ext-server-card`) [3] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [Adoption and ecosystem](#adoption-and-ecosystem)\n4. [See also](#see-also)\n5. [References](#references)\n\n---\n\n## Problem and scope\n\nMCP clients need an out-of-band way to discover remote servers before choosing or opening a transport. Runtime mechanisms such as server/discover become available only after a client already knows where to connect. [1] This SEP introduces MCP Server Cards, structured metadata documents that servers expose through standardized mechanisms. For domain-level discovery, an AI Catalog can link to or embed the relevant Server Cards. [1] Server Cards do not enumerate primitives (tools, resources, prompts); those remain subject to runtime listing via the protocol's standard list operations. Clients MUST NOT treat Server Card contents as authoritative for security or access-control decisions. [2] Clients SHOULD verify a Server Card's claims against the live connection, preferring the runtime values where the two disagree. [2] MCP Server Cards describe remote MCP connectivity only. The MCP Registry's server.json separately describes registry entries, including locally installable packages and their runtime configuration. [1] As an extension, MCP Server Cards are optional and additive: servers that do not publish a card continue to work normally. Hosted Server Cards MUST be served over HTTPS (TLS 1.2 or later) in production. HTTP MAY be used for local development only. [1][2]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **OpenAPI Specification 3.1** | `OpenAPI 3.1.0` | Analogous to classic standard | A client fetches a SEP-2127 v1 Server Card with GET at the MCP Streamable HTTP URL plus /server-card, and that JSON lists name, version, endpoints, and supported protocol versions while omitting tools, resources, and prompts, rather than an OpenAPI paths object. [1][10] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Model Context Protocol](/protocols/mcp/)** | Part of | SEP-2127 is the MCP extension whose Server Card is read with GET `<endpoint>/server-card` before the client connects, and the card omits the tools, resources, and prompts the live server still provides. [1][11] |\n| **[Official MCP Registry](/protocols/mcp-registry/)** | Complements | The card is served by the MCP endpoint itself, while the registry answers GET /v0.1/servers for a central name-and-version index of many servers. [1][12] |\n| **[Agent2Agent Protocol (A2A)](/protocols/a2a/)** | Peer alternative | An MCP Server Card is GET `<endpoint>/server-card` and lists name, version, endpoints, and supported protocol versions before the client connects, while an A2A Agent Card is GET /.well-known/agent-card.json and the task binding after that is JSON-RPC 2.0, gRPC, or HTTP+JSON. [1][13] |\n| **[AI Catalog well-known file](/protocols/ai-catalog-well-known-file/)** | Complements | An AI Catalog at /.well-known/ai-catalog.json indexes the server card URL under application/mcp-server-card+json, while SEP-2127 reserves GET `<streamable-http-url>/server-card` as the recommended (MAY) convention and allows hosting the card at any unreserved URI referenced by the catalog entry. [1][14] |\n| **[OAuth Protected Resource and Authorization Server Metadata (as used for agent authorization)](/protocols/oauth-metadata-for-agents/)** | Complements | OAuth protected-resource and authorization-server metadata tells the client how agent authorization is discovered, while the Server Card describes the MCP server before the client connects. [1][15] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (6 probed or cited examples; non-exhaustive).*\n\n### Servers, repos & skill indexes\n\n| Actor | Role | Status | Transport & Scope | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **GitHub (GitHub MCP Server)** | Server Card publisher | Live (HTTP 200) · as of 2026-09-02 | GET https://api.githubcopilot.com/mcp/server-card returned status 200, Content-Type application/mcp-server-card+json, $schema set to the v1 schema URL, remotes entry https://api.githubcopilot.com/mcp/, card name io.github.github/github-mcp-server. https://github.com/.well-known/ai-catalog.json (status 200, application/ai-catalog+json) links to this card. github/github-mcp-server pull request #2768, merged 2026-09-02, adds the card handler. | [GitHub server card](https://api.githubcopilot.com/mcp/server-card) [16] · [GitHub pull request #2768](https://github.com/github/github-mcp-server/pull/2768) [9] |\n| **Hugging Face (Hugging Face MCP Server)** | Server Card publisher | Live (HTTP 200) · checked 2026-10-30 | GET https://huggingface.co/mcp/server-card returned status 200, Content-Type application/mcp-server-card+json, $schema set to the v1 schema URL, remotes entry https://huggingface.co/mcp, card name huggingface.co/mcp. https://huggingface.co/.well-known/ai-catalog.json (status 200, application/ai-catalog+json) links to this card. The hf-mcp-server README says the public Streamable HTTP deployment serves the card at /mcp/server-card. | [Hugging Face server card](https://huggingface.co/mcp/server-card) [17] · [hf-mcp-server README](https://github.com/huggingface/hf-mcp-server) [18] |\n| **Exa (Exa MCP)** | Server Card publisher | Live (HTTP 200) · checked 2026-10-30 | GET https://mcp.exa.ai/mcp/server-card returned status 200, Content-Type application/mcp-server-card+json, $schema set to the v1 schema URL, remotes entry https://mcp.exa.ai/mcp, card name ai.exa/exa. Exa's docs give the hosted server as https://mcp.exa.ai/mcp. | [Exa server card](https://mcp.exa.ai/mcp/server-card) [19] · [Exa MCP docs](https://exa.ai/docs/get-started/exa-mcp) [20] |\n| **Upstash (Context7)** | Server Card publisher | Live (HTTP 200) · checked 2026-10-30 | GET https://mcp.context7.com/mcp/server-card returned status 200, Content-Type application/mcp-server-card+json, $schema set to the v1 schema URL, remotes entry https://mcp.context7.com/mcp, card name io.github.upstash/context7. https://context7.com/.well-known/ai-catalog.json (status 200, application/ai-catalog+json) links to this card. The Context7 README tells clients to use https://mcp.context7.com/mcp. | [Context7 server card](https://mcp.context7.com/mcp/server-card) [21] · [Context7 README](https://github.com/upstash/context7) [22] |\n| **Buildkite (remote MCP server)** | Server Card publisher | Live (HTTP 200) · checked 2026-10-30 | GET https://mcp.buildkite.com/mcp/server-card returned status 200, Content-Type application/mcp-server-card+json, $schema set to the v1 schema URL, remotes entry https://mcp.buildkite.com/mcp, card name com.buildkite/remote-mcp-server. Buildkite's docs tell tools to use the OAuth remote server at https://mcp.buildkite.com/mcp. | [Buildkite server card](https://mcp.buildkite.com/mcp/server-card) [23] · [Buildkite remote MCP docs](https://buildkite.com/docs/apis/mcp-server/remote/configuring-ai-tools) [24] |\n| **Hugging Face, hf-discover** | Server Card publisher | Supported · as of 2026-06-30 | The hf-discover README, last changed 2026-06-30, says a request for application/mcp-server-card+json adds filter=mcp-server to the downstream Hub search and returns MCP server card catalog entries that point at this adapter's generated server.json route. | [hf-discover README](https://github.com/huggingface/hf-discover) [25] |\n\n---\n\n## See also\n\n- **[api-catalog (RFC 9727)](/protocols/api-catalog-rfc9727/)** *(Complements)* — RFC 9727 links API descriptions. SEP-2127 cards describe MCP servers and may publish `/.well-known/ai-catalog.json`. [1]\n- **[Agentic Resource Discovery (ARD)](/protocols/ard/)** *(Complements)* — ARD is a domain manifest of agentic resources, while MCP Server Cards describe individual MCP servers and SEP-2127 discovers them through /.well-known/ai-catalog.json. [1]\n- **[Discovery of Model Context Protocol Servers via DNS TXT Records](/protocols/mcp-dns-discovery/)** *(Peer alternative)* — This draft answers discovery with DNS TXT at `_mcp.<domain>`, `_org-alter.<domain>`, and `_alter.<domain>`, while a Server Card is HTTP GET `<endpoint>/server-card` after the client already has the MCP URL. [1]\n- **Category:** [Discover protocols](/category/discover/)\n\n---\n\n## References\n\n1. Model Context Protocol, *SEP-2127: MCP Server Cards* (checked 2026-10-30) — <https://modelcontextprotocol.io/seps/2127-mcp-server-cards>\n2. Model Context Protocol, *ext-server-card Discovery Documentation* (checked 2026-10-30) — <https://github.com/modelcontextprotocol/ext-server-card/blob/main/docs/discovery.md>\n3. Model Context Protocol, *modelcontextprotocol/ext-server-card Repository* (checked 2026-10-30) — <https://github.com/modelcontextprotocol/ext-server-card>\n4. Model Context Protocol, *MCP Server Card Working Group* (checked 2026-10-30) — <https://modelcontextprotocol.io/community/working-groups/server-card>\n5. Model Context Protocol, *MCP SEP-2127 (PR #2127): MCP Server Cards Specification* (checked 2026-10-30) — <https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2127>\n6. Model Context Protocol, *MCP Issue #1649: Server Card Discovery Proposal* (checked 2026-10-30) — <https://github.com/modelcontextprotocol/modelcontextprotocol/issues/1649>\n7. Model Context Protocol, *MCP PR #2893: Server Cards Specification Update* (checked 2026-10-30) — <https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2893>\n8. Model Context Protocol, *ext-server-card JSON Schema* (checked 2026-10-30) — <https://github.com/modelcontextprotocol/ext-server-card/blob/main/schema.json>\n9. GitHub, *github-mcp-server PR #2768: Server Card Endpoint* (checked 2026-10-30) — <https://github.com/github/github-mcp-server/pull/2768>\n10. OpenAPI Initiative, *OpenAPI Specification v3.1.0* (2021-02-15) — <https://spec.openapis.org/oas/v3.1.0.html>\n11. Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation* (2026-07-28) — <https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning>\n12. Model Context Protocol, *About the MCP Registry* (checked 2026-10-30) — <https://modelcontextprotocol.io/registry/about>\n13. Agentic AI Foundation, *A2A joins AAIF's open agentic stack* (published 2026-08-17; modified 2026-09-24) — <https://aaif.io/blog/a2a-joins-aaif>\n14. Agent Card Working Group, *Agent Card Working Group — ai-catalog.md* (checked 2026-10-29) — <https://raw.githubusercontent.com/Agent-Card/ai-catalog/main/specification/ai-catalog.md>\n15. IETF Datatracker, *RFC 9728: OAuth 2.0 Protected Resource Metadata* (RFC - Proposed Standard (April 2025)) — <https://datatracker.ietf.org/doc/html/rfc9728>\n16. GitHub, *GitHub Copilot MCP Server Card Endpoint* (checked 2026-10-30) — <https://api.githubcopilot.com/mcp/server-card>\n17. Hugging Face, *Hugging Face MCP Server Card Endpoint* (checked 2026-10-30) — <https://huggingface.co/mcp/server-card>\n18. Hugging Face, *huggingface/hf-mcp-server Repository* (checked 2026-10-30) — <https://github.com/huggingface/hf-mcp-server>\n19. Exa, *Exa AI MCP Server Card Endpoint* (checked 2026-10-30) — <https://mcp.exa.ai/mcp/server-card>\n20. Exa, *Exa MCP Server Documentation* (checked 2026-10-30) — <https://exa.ai/docs/get-started/exa-mcp>\n21. Context7 (Upstash), *Context7 MCP Server Card Endpoint* (checked 2026-10-30) — <https://mcp.context7.com/mcp/server-card>\n22. Upstash, *upstash/context7 Repository* (checked 2026-10-30) — <https://github.com/upstash/context7>\n23. Buildkite, *Buildkite MCP Server Card Endpoint* (checked 2026-10-30) — <https://mcp.buildkite.com/mcp/server-card>\n24. Buildkite, *Buildkite Remote MCP Server Documentation* (checked 2026-10-30) — <https://buildkite.com/docs/apis/mcp-server/remote/configuring-ai-tools>\n25. Hugging Face, *huggingface/hf-discover Repository* (checked 2026-10-30) — <https://github.com/huggingface/hf-discover>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "dawn-agent-discovery-framework",
   "name": "A Framework for Agent Discovery in DAWN",
   "acronym": "",
   "aliases": [
    "draft-zhang-dawn-agent-discovery-framework",
    "DAWN Discovery Architecture"
   ],
   "collisions": [],
   "step": "discover",
   "parties": [
    "agent-site",
    "agent-registry"
   ],
   "form": "dns-record",
   "track": "ietf",
   "scope": "general",
   "question": "How can a client discover the minimum public information about AI agents across local and cross-organizational boundaries while preserving each site's data sovereignty?",
   "analog": "Federated DNS delegation and referral applied to agent discovery records",
   "origin": {
    "org": "Pengcheng Laboratory, Futurewei, Sun Yat-sen University (IETF DAWN contributors)",
    "date": "2026-09-05"
   },
   "governance": "Individual IETF Internet-Draft (Datatracker: Active Internet-Draft (individual)) written for the scope of the IETF DAWN (Discovery of Agents With Names) working group; not a DAWN working-group document; Informational intended status",
   "native_status": "Internet-Draft (draft-zhang-dawn-agent-discovery-framework-09), Intended Status: Informational; expires 2027-04-24",
   "phase": "draft",
   "implementation": "none-found",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "version": {
    "label": "draft-zhang-dawn-agent-discovery-framework-09",
    "date": "2026-10-21"
   },
   "spec_url": "https://datatracker.ietf.org/doc/html/draft-zhang-dawn-agent-discovery-framework-09",
   "discovery": {
    "mechanism": "Federation Metadata Records (FMRs) published as DNS resource records in a site's authoritative zone (Mode A, DNSSEC-validated), or synchronized between Federation Gateways via non-DNS modes (Mode B: BGP-like peering, gossip, trusted directory publication)",
    "path": null
   },
   "probe": {
    "method": "NONE",
    "path": "",
    "parse": "No concrete record format or name is defined in this informational draft, so support cannot be observed from a site.",
    "on_absent": "No inference; the draft defines no normative formats."
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.ietf.org/archive/id/draft-zhang-dawn-agent-discovery-framework-09.txt",
     "claim": "B. Zhang, Ed. (Pengcheng Laboratory), L. Dunbar (Futurewei), and Y. Yang, Ed. (Sun Yat-sen University), *A Framework for Agent Discovery in DAWN (draft-zhang-dawn-agent-discovery-framework-09)*, checked 2026-10-31",
     "date": null,
     "quote": "A Framework for Agent Discovery in DAWN draft-zhang-dawn-agent-discovery-framework-09 Abstract This document describes a two-layer reference architecture for discovering the minimum public information needed to reach AI agents. / Intended status: Informational / The Local Discovery Plane obtains discovery information within an administrative domain through mDNS/DNS-SD or infrastructure-assisted discovery. For cross-domain discovery, the Federation Plane uses publication of policy-approved information in authoritative DNS zones and on-demand resolution as its baseline; Federation Gateways apply export policy and validate and cache accepted results. / 20 October 2026 A Framework for Agent Discovery in DAWN draft-zhang-dawn-agent-discovery-framework-09 / This Internet-Draft will expire on 23 April 2027. / 23 April 2027 Futurewei Y. Yang, Ed. Sun Yat-sen University 20 October 2026 A / Yat-sen University 20 October 2026 A Framework for Agent Discovery in DAWN draft-zhang-dawn-agent-discovery-framework-09 Abstract / Its problem statement identifies that no single existing mechanism satisfies all discovery scenarios, particularly when crossing trust and administrative boundaries / mDNS/DNS-SD [RFC6762] [RFC6763] provides excellent zero-configuration discovery within a single broadcast domain. / Link-local multicast does not cross IP routers, so discovery is confined to a single LAN. / The Federation Gateway (FGW) connects local discovery to DNS publication and resolution. Its Export Policy Engine selects the minimum information that may leave the site. A Federation Metadata Record (FMR) represents that information, while the Federated Agent Directory (FAD) caches accepted results on demand. / Across administrative domains, DNS publication and on-demand resolution provide the baseline: each site publishes permitted information in its authoritative DNS zone, and remote sites resolve, validate, and cache it when needed. / The following items are explicitly out of scope for this informational document / Normative protocol message formats, encodings, or state machines. These are addressed in separate protocol specifications that may be developed based on this architecture. / All communication beyond the initial discovery process, including any interaction, invocation, or selection that follows discovery.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://datatracker.ietf.org/doc/draft-zhang-dawn-agent-discovery-framework/",
     "claim": "B. Zhang, Ed. (Pengcheng Laboratory), L. Dunbar (Futurewei), and Y. Yang, Ed. (Sun Yat-sen University), *draft-zhang-dawn-agent-discovery-framework — A Framework for Agent Discovery in DAWN (IETF Datatracker)*, checked 2026-10-31",
     "date": null,
     "quote": "Active Internet-Draft (individual) / This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. / Last updated | 2026-10-20 | | RFC stream | | (None) / IESG state | | I-D Exists / Expires 23 April 2027 [Page 2]Internet-Draft A Framework for Agent Discovery in DAWN October 2026Zhang, et al.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://datatracker.ietf.org/doc/html/draft-zhang-dawn-agent-discovery-framework-09",
     "claim": "B. Zhang, Ed. (Pengcheng Laboratory), L. Dunbar (Futurewei), and Y. Yang, Ed. (Sun Yat-sen University), *A Framework for Agent Discovery in DAWN (draft-zhang-dawn-agent-discovery-framework-09 HTML)*, checked 2026-10-31",
     "date": null,
     "quote": "Intended status: Informational / draft-jimenez-agent-directory-01, May 2026, < https://datatracker.ietf.org/doc/html/draft-jimenez-agent-directory-01 >. \\[I-D.jimenez-dawn-discovery-landscape\\]Jimenez, J., Feng, J., Arkko, J., Kuehlewind, M., / April 2027 \\Page\\ Workgroup:Network Working GroupInternet-Draft:draft-zhang-dawn-agent-discovery-framework-09Published:20 October 2026Intended Status:InformationalExpires:23 April 2027Authors: B. Zhang, Ed. / **Metadata Integrity Module** (on FGW): Uses the DNSSEC validation result for DNS-published discovery information / < https://datatracker.ietf.org/doc/html/draft-zahed-acap-00 >. \\I-D.yao-dawn-agent-discovery-architect\\Yao, J., Geng, G., Chen, M., and H. Li, \"DNS-like Agent / or infrastructure-assisted discovery. Across administrative domains, DNS publication and on-demand resolution provide the baseline: / Copyright (c) 2026 IETF Trust and the persons identified as the document authors.",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://www.rfc-editor.org/rfc/rfc6763.html",
     "claim": "S. Cheshire and M. Krochmal, *RFC 6763: DNS-Based Service Discovery*, February 2013",
     "date": null,
     "quote": "This document specifies how DNS resource records are named and",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://www.rfc-editor.org/rfc/rfc9460.html",
     "claim": "B. Schwartz, M. Bishop, and E. Nygren, *RFC 9460: Service Binding and Parameter Specification via the DNS (SVCB and HTTPS Resource Records)*, November 2023",
     "date": null,
     "quote": "This document specifies the \"SVCB\" (\"Service Binding\") and \"HTTPS\" DNS resource record (RR)",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://datatracker.ietf.org/doc/draft-mozleywilliams-dnsop-dnsaid/",
     "claim": "J. Mozley and N. Williams (Infoblox), B. Sarikaya, R. Schott (Deutsche Telekom), and J. Damick (Amazon), *draft-mozleywilliams-dnsop-dnsaid — DNS for AI Discovery (IETF Datatracker; succeeded by draft-nemethi-dawn-dnsaid)*, checked 2026-10-29",
     "date": null,
     "quote": "draft-mozleywilliams-dnsop-dnsaid-02 Published: Intended Status:: Standards Track Expires: Authors:: J. Mozley Infoblox, Inc. N. Williams",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://datatracker.ietf.org/doc/html/draft-morrison-mcp-dns-discovery-09",
     "claim": "B. Morrison (Alter Meridian Pty Ltd), *Discovery of Model Context Protocol Servers via DNS TXT Records (draft-morrison-mcp-dns-discovery-09 HTML)*, checked 2026-10-31",
     "date": null,
     "quote": "Morrison Expires 24 April 2027 [Page 25] Internet-Draft MCP DNS Discovery October 2026 6.3.12.",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://datatracker.ietf.org/doc/html/draft-pioli-agent-discovery-01",
     "claim": "R. Pioli, *Agent Registration and Discovery Protocol (ARDP) (draft-pioli-agent-discovery-01 HTML)*, checked 2026-10-31",
     "date": null,
     "quote": "Internet-Draft Agent Registration and Discovery Protoco February 2026 Pioli Expires 28 August 2026 Page",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://www.ietf.org/archive/id/draft-mp-agntcy-ads-03.txt",
     "claim": "L. Muscariello and R. Polic (Cisco), *Agent Directory Service (draft-mp-agntcy-ads-03)*, 2 November 2026",
     "date": null,
     "quote": "Intended status: Informational ... The latest revision of this draft can be found at https://spec.dir.agncty.org. ... Source for this draft and an issue tracker can be found at https://github.com/agntcy/dir. ... work in progress. ... This Internet-Draft will expire on 6 May 2027.",
     "ref": 9
    }
   ],
   "summary_md": "**A Framework for Agent Discovery in DAWN** (`draft-zhang-dawn-agent-discovery-framework-09`) describes a two-layer reference architecture for discovering the minimum public information needed to reach AI agents. Intended status is Informational. Document type is Active Internet-Draft (individual). This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. The Local Discovery Plane obtains discovery information within an administrative domain through mDNS/DNS-SD or infrastructure-assisted discovery. For cross-domain discovery, the Federation Plane uses publication of policy-approved information in authoritative DNS zones and on-demand resolution as its baseline; Federation Gateways apply export policy and validate and cache accepted results. `draft-zhang-dawn-agent-discovery-framework-09` is dated 20 October 2026. This Internet-Draft will expire on 23 April 2027. Last updated `2026-10-20`. RFC stream is (None). IESG state is I-D Exists.",
   "part_of": null,
   "group": null,
   "use_cases": [
    "agent-naming",
    "describe-agent-capabilities"
   ],
   "audience": [
    "standards-body",
    "platform",
    "agent-builder"
   ],
   "pairs_with": [
    "dns-aid",
    "mcp-dns-discovery",
    "ardp",
    "ads"
   ],
   "prerequisites": [],
   "dispute": null,
   "last_verified": "2026-11-12",
   "history": [
    {
     "date": "2026-10-16",
     "note": "initial candidate record from primary source (https://datatracker.ietf.org/doc/html/draft-zhang-dawn-agent-discovery-framework-06)"
    },
    {
     "date": "2026-10-20",
     "note": "updated to revision -08 (2026-10-19), verified against the IETF archive"
    },
    {
     "date": "2026-10-22",
     "note": "revision draft-zhang-dawn-agent-discovery-framework-08 → 09"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-zhang-dawn-agent-discovery-framework"
    }
   ],
   "ietf_tracker": {
    "doc": "draft-zhang-dawn-agent-discovery-framework",
    "rev": "09",
    "state": "active",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-10-20",
    "expires_utc": "2027-04-23",
    "as_of": "2026-10-31",
    "source": "https://datatracker.ietf.org/doc/draft-zhang-dawn-agent-discovery-framework/",
    "source_label": "per IETF Datatracker"
   },
   "hatnote_md": "",
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "harnesses_rpc_ui",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": null,
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**A Framework for Agent Discovery in DAWN** (`draft-zhang-dawn-agent-discovery-framework-09`) describes a two-layer reference architecture for discovering the minimum public information needed to reach AI agents. Intended status is Informational. [1] Document type is Active Internet-Draft (individual). This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. [2] The Local Discovery Plane obtains discovery information within an administrative domain through mDNS/DNS-SD or infrastructure-assisted discovery. For cross-domain discovery, the Federation Plane uses publication of policy-approved information in authoritative DNS zones and on-demand resolution as its baseline; Federation Gateways apply export policy and validate and cache accepted results. [1] `draft-zhang-dawn-agent-discovery-framework-09` is dated 20 October 2026. This Internet-Draft will expire on 23 April 2027. [1] Last updated `2026-10-20`. RFC stream is (None). IESG state is I-D Exists. [2]",
   "v05_identity_sentence_md": "**A Framework for Agent Discovery in DAWN** (`draft-zhang-dawn-agent-discovery-framework-09`) describes a two-layer reference architecture for discovering the minimum public information needed to reach AI agents. Intended status is Informational. [1] Document type is Active Internet-Draft (individual). This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. [2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Discover](/category/discover/) (`discover`)"
    },
    {
     "label": "Form",
     "value_md": "DNS record (`dns-record`)"
    },
    {
     "label": "Originated by",
     "value_md": "B. Zhang, Ed. (Pengcheng Laboratory), L. Dunbar (Futurewei) and Y. Yang, Ed. (Sun Yat-sen University) [1]"
    },
    {
     "label": "Governed by",
     "value_md": "Individual Internet-Draft in the IETF DAWN effort; no RFC stream, IESG state \"I-D Exists\", not endorsed by the IETF [2]"
    },
    {
     "label": "Track",
     "value_md": "IETF Internet-Draft (Informational) [3]"
    },
    {
     "label": "Status",
     "value_md": "Internet-Draft (draft-zhang-dawn-agent-discovery-framework-09), Intended Status: Informational; expires 23 April 2027 (2027-04-23) [1][3]"
    },
    {
     "label": "Version",
     "value_md": "`draft-zhang-dawn-agent-discovery-framework-09`, dated 20 October 2026, expires 23 April 2027; intended status Informational [1][3]"
    },
    {
     "label": "Wire format",
     "value_md": "No normative formats of its own; composes DNS (with DNSSEC), mDNS/DNS-SD and Federation Metadata Records that bind Minimum Discoverable Information [3]"
    },
    {
     "label": "Specification",
     "value_md": "https://datatracker.ietf.org/doc/html/draft-zhang-dawn-agent-discovery-framework-09 [3]"
    },
    {
     "label": "Found at",
     "value_md": "mDNS/DNS-SD or infrastructure-assisted discovery inside a site; authoritative DNS publication plus on-demand resolution across domains; DNS may bootstrap a non-DNS endpoint in mixed mode [3]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust Legal Provisions (BCP 78) [3]"
    },
    {
     "label": "IETF state",
     "value_md": "`draft-zhang-dawn-agent-discovery-framework-09` · **Active Internet-Draft** (expires 2027-04-23) · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-zhang-dawn-agent-discovery-framework/))"
    }
   ],
   "v05_problem_md": "Its problem statement identifies that no single existing mechanism satisfies all discovery scenarios, particularly when crossing trust and administrative boundaries. [1] mDNS/DNS-SD provides excellent zero-configuration discovery within a single broadcast domain. Link-local multicast does not cross IP routers, so discovery is confined to a single LAN. [1] The Federation Gateway (FGW) connects local discovery to DNS publication and resolution. Its Export Policy Engine selects the minimum information that may leave the site. A Federation Metadata Record (FMR) represents that information, while the Federated Agent Directory (FAD) caches accepted results on demand. [1] Across administrative domains, DNS publication and on-demand resolution provide the baseline: each site publishes permitted information in its authoritative DNS zone, and remote sites resolve, validate, and cache it when needed. [1] Normative protocol message formats, encodings, or state machines are explicitly out of scope. These are addressed in separate protocol specifications that may be developed based on this architecture. [1] All communication beyond the initial discovery process, including any interaction, invocation, or selection that follows discovery, is out of scope. [1]",
   "v05_mechanism_delta_md": "The Federation Gateway (FGW) connects local discovery to DNS publication and resolution. Its Export Policy Engine selects the minimum information that may leave the site. A Federation Metadata Record (FMR) represents that information, while the Federated Agent Directory (FAD) caches accepted results on demand. [1] Across administrative domains, DNS publication and on-demand resolution provide the baseline: each site publishes permitted information in its authoritative DNS zone, and remote sites resolve, validate, and cache it when needed. [1]",
   "v05_scope_boundary_md": "Normative protocol message formats, encodings, or state machines are explicitly out of scope. These are addressed in separate protocol specifications that may be developed based on this architecture. [1] All communication beyond the initial discovery process, including any interaction, invocation, or selection that follows discovery, is out of scope. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "DNS-Based Service Discovery (RFC 6763)",
      "spec_or_rfc": "RFC 6763",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "DAWN's Local Discovery Plane uses mDNS and DNS-SD, or infrastructure-assisted discovery, inside a site, while the Federation Plane exchanges Federation Metadata Records with DNS and DNSSEC as its baseline. [3][4]"
     },
     {
      "name": "DNS SRV & SVCB Records (RFC 2782 / RFC 9460)",
      "spec_or_rfc": "RFC 2782 / RFC 9460",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "DAWN's Federation Plane uses DNS with DNSSEC as its baseline and can combine it with recipient-specific sharing, proactive or multi-hop dissemination, or aggregated directory queries, which is broader than an SVCB endpoint-parameter record. [3][5]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "dns-aid",
      "target_name": "DNS-AID (DNS for AI Discovery, draft-nemethi-dawn-dnsaid)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "DAWN's Local Discovery Plane uses mDNS and DNS-SD inside a site and its Federation Plane publishes DNSSEC-validated Federation Metadata Records, while DNS-AID (draft-nemethi-dawn-dnsaid, succeeding draft-mozleywilliams-dnsop-dnsaid) is a separate DNS record convention for AI discovery. [3][6]"
     },
     {
      "target_id": "mcp-dns-discovery",
      "target_name": "Discovery of Model Context Protocol Servers via DNS TXT Records",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "DAWN describes a local mDNS/DNS-SD plane plus a DNSSEC federation plane, while MCP DNS discovery defines TXT records at `_mcp.<domain>`, `_org-alter.<domain>`, and an Ed25519-signed envelope at `_alter.<domain>`. [3][7]"
     },
     {
      "target_id": "ardp",
      "target_name": "Agent Registration and Discovery Protocol",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "DAWN's cross-domain mechanism is DNS publication and resolution, with mDNS/DNS-SD only on the local plane, while ARDP publishes registrar metadata at /.well-known/ardp/meta, registers agents with REGISTER, and resolves them with RESOLVE and QUERY. [3][8]"
     },
     {
      "target_id": "ads",
      "target_name": "Agent Directory Service",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "DAWN's Federation Plane supports application-level queries across an aggregated multi-domain directory alongside its DNS baseline, and ADS is one such directory, with GET /v1/agents and a host-local file at /.well-known/ai-catalog.json. [3][9]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Discover protocols](/category/discover/)** — Category index for `discover` standards."
    }
   ],
   "v05_compiled_md": "---\nid: dawn-agent-discovery-framework\ntitle: \"A Framework for Agent Discovery in DAWN\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: discover\nform: dns-record\nwire_archetype: harnesses_rpc_ui\nspec_url: https://datatracker.ietf.org/doc/html/draft-zhang-dawn-agent-discovery-framework-09\nlast_checked: 2026-11-12\n---\n\n# A Framework for Agent Discovery in DAWN\n\n**Category:** [Discover](/category/discover/) (`discover`) · **Form:** DNS record (`dns-record`) · **Last checked:** 2026-11-12\n\n**A Framework for Agent Discovery in DAWN** (`draft-zhang-dawn-agent-discovery-framework-09`) describes a two-layer reference architecture for discovering the minimum public information needed to reach AI agents. Intended status is Informational. [1] Document type is Active Internet-Draft (individual). This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. [2] The Local Discovery Plane obtains discovery information within an administrative domain through mDNS/DNS-SD or infrastructure-assisted discovery. For cross-domain discovery, the Federation Plane uses publication of policy-approved information in authoritative DNS zones and on-demand resolution as its baseline; Federation Gateways apply export policy and validate and cache accepted results. [1] `draft-zhang-dawn-agent-discovery-framework-09` is dated 20 October 2026. This Internet-Draft will expire on 23 April 2027. [1] Last updated `2026-10-20`. RFC stream is (None). IESG state is I-D Exists. [2]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Discover](/category/discover/) (`discover`) |\n| **Form** | DNS record (`dns-record`) |\n| **Originated by** | B. Zhang, Ed. (Pengcheng Laboratory), L. Dunbar (Futurewei) and Y. Yang, Ed. (Sun Yat-sen University) [1] |\n| **Governed by** | Individual Internet-Draft in the IETF DAWN effort; no RFC stream, IESG state \"I-D Exists\", not endorsed by the IETF [2] |\n| **Track** | IETF Internet-Draft (Informational) [3] |\n| **Status** | Internet-Draft (draft-zhang-dawn-agent-discovery-framework-09), Intended Status: Informational; expires 23 April 2027 (2027-04-23) [1][3] |\n| **Version** | `draft-zhang-dawn-agent-discovery-framework-09`, dated 20 October 2026, expires 23 April 2027; intended status Informational [1][3] |\n| **Wire format** | No normative formats of its own; composes DNS (with DNSSEC), mDNS/DNS-SD and Federation Metadata Records that bind Minimum Discoverable Information [3] |\n| **Specification** | https://datatracker.ietf.org/doc/html/draft-zhang-dawn-agent-discovery-framework-09 [3] |\n| **Found at** | mDNS/DNS-SD or infrastructure-assisted discovery inside a site; authoritative DNS publication plus on-demand resolution across domains; DNS may bootstrap a non-DNS endpoint in mixed mode [3] |\n| **Licence** | IETF Trust Legal Provisions (BCP 78) [3] |\n| **IETF state** | `draft-zhang-dawn-agent-discovery-framework-09` · **Active Internet-Draft** (expires 2027-04-23) · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-zhang-dawn-agent-discovery-framework/)) |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nIts problem statement identifies that no single existing mechanism satisfies all discovery scenarios, particularly when crossing trust and administrative boundaries. [1] mDNS/DNS-SD provides excellent zero-configuration discovery within a single broadcast domain. Link-local multicast does not cross IP routers, so discovery is confined to a single LAN. [1] The Federation Gateway (FGW) connects local discovery to DNS publication and resolution. Its Export Policy Engine selects the minimum information that may leave the site. A Federation Metadata Record (FMR) represents that information, while the Federated Agent Directory (FAD) caches accepted results on demand. [1] Across administrative domains, DNS publication and on-demand resolution provide the baseline: each site publishes permitted information in its authoritative DNS zone, and remote sites resolve, validate, and cache it when needed. [1] Normative protocol message formats, encodings, or state machines are explicitly out of scope. These are addressed in separate protocol specifications that may be developed based on this architecture. [1] All communication beyond the initial discovery process, including any interaction, invocation, or selection that follows discovery, is out of scope. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **DNS-Based Service Discovery (RFC 6763)** | `RFC 6763` | Profiles classic standard | DAWN's Local Discovery Plane uses mDNS and DNS-SD, or infrastructure-assisted discovery, inside a site, while the Federation Plane exchanges Federation Metadata Records with DNS and DNSSEC as its baseline. [3][4] |\n| **DNS SRV & SVCB Records (RFC 2782 / RFC 9460)** | `RFC 2782 / RFC 9460` | Analogous to classic standard | DAWN's Federation Plane uses DNS with DNSSEC as its baseline and can combine it with recipient-specific sharing, proactive or multi-hop dissemination, or aggregated directory queries, which is broader than an SVCB endpoint-parameter record. [3][5] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[DNS-AID (DNS for AI Discovery, draft-nemethi-dawn-dnsaid)](/protocols/dns-aid/)** | Peer alternative | DAWN's Local Discovery Plane uses mDNS and DNS-SD inside a site and its Federation Plane publishes DNSSEC-validated Federation Metadata Records, while DNS-AID (draft-nemethi-dawn-dnsaid, succeeding draft-mozleywilliams-dnsop-dnsaid) is a separate DNS record convention for AI discovery. [3][6] |\n| **[Discovery of Model Context Protocol Servers via DNS TXT Records](/protocols/mcp-dns-discovery/)** | Peer alternative | DAWN describes a local mDNS/DNS-SD plane plus a DNSSEC federation plane, while MCP DNS discovery defines TXT records at `_mcp.<domain>`, `_org-alter.<domain>`, and an Ed25519-signed envelope at `_alter.<domain>`. [3][7] |\n| **[Agent Registration and Discovery Protocol](/protocols/ardp/)** | Peer alternative | DAWN's cross-domain mechanism is DNS publication and resolution, with mDNS/DNS-SD only on the local plane, while ARDP publishes registrar metadata at /.well-known/ardp/meta, registers agents with REGISTER, and resolves them with RESOLVE and QUERY. [3][8] |\n| **[Agent Directory Service](/protocols/ads/)** | Complements | DAWN's Federation Plane supports application-level queries across an aggregated multi-domain directory alongside its DNS baseline, and ADS is one such directory, with GET /v1/agents and a host-local file at /.well-known/ai-catalog.json. [3][9] |\n\n---\n\n## See also\n\n- **Category:** [Discover protocols](/category/discover/)\n\n---\n\n## References\n\n1. B. Zhang, Ed. (Pengcheng Laboratory), L. Dunbar (Futurewei), and Y. Yang, Ed. (Sun Yat-sen University), *A Framework for Agent Discovery in DAWN (draft-zhang-dawn-agent-discovery-framework-09)* (checked 2026-10-31) — <https://www.ietf.org/archive/id/draft-zhang-dawn-agent-discovery-framework-09.txt>\n2. B. Zhang, Ed. (Pengcheng Laboratory), L. Dunbar (Futurewei), and Y. Yang, Ed. (Sun Yat-sen University), *draft-zhang-dawn-agent-discovery-framework — A Framework for Agent Discovery in DAWN (IETF Datatracker)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/draft-zhang-dawn-agent-discovery-framework/>\n3. B. Zhang, Ed. (Pengcheng Laboratory), L. Dunbar (Futurewei), and Y. Yang, Ed. (Sun Yat-sen University), *A Framework for Agent Discovery in DAWN (draft-zhang-dawn-agent-discovery-framework-09 HTML)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/html/draft-zhang-dawn-agent-discovery-framework-09>\n4. S. Cheshire and M. Krochmal, *RFC 6763: DNS-Based Service Discovery* (February 2013) — <https://www.rfc-editor.org/rfc/rfc6763.html>\n5. B. Schwartz, M. Bishop, and E. Nygren, *RFC 9460: Service Binding and Parameter Specification via the DNS (SVCB and HTTPS Resource Records)* (November 2023) — <https://www.rfc-editor.org/rfc/rfc9460.html>\n6. J. Mozley and N. Williams (Infoblox), B. Sarikaya, R. Schott (Deutsche Telekom), and J. Damick (Amazon), *draft-mozleywilliams-dnsop-dnsaid — DNS for AI Discovery (IETF Datatracker; succeeded by draft-nemethi-dawn-dnsaid)* (checked 2026-10-29) — <https://datatracker.ietf.org/doc/draft-mozleywilliams-dnsop-dnsaid/>\n7. B. Morrison (Alter Meridian Pty Ltd), *Discovery of Model Context Protocol Servers via DNS TXT Records (draft-morrison-mcp-dns-discovery-09 HTML)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/html/draft-morrison-mcp-dns-discovery-09>\n8. R. Pioli, *Agent Registration and Discovery Protocol (ARDP) (draft-pioli-agent-discovery-01 HTML)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/html/draft-pioli-agent-discovery-01>\n9. L. Muscariello and R. Polic (Cisco), *Agent Directory Service (draft-mp-agntcy-ads-03)* (2 November 2026) — <https://www.ietf.org/archive/id/draft-mp-agntcy-ads-03.txt>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "agent-identity-document",
   "name": "The Agent Identity Document: A Hosted, Accountable Public Record for AI Agents",
   "acronym": "",
   "aliases": [
    "Agent Identity Document",
    "agent-identity.json"
   ],
   "collisions": [],
   "step": "identify",
   "parties": [
    "agent-site",
    "agent-registry"
   ],
   "form": "well-known-file",
   "track": "ietf",
   "scope": "general",
   "question": "How can a counterparty look up who an agent is, who is accountable for it, what the provider has checked about its operator, and whether it has been withdrawn, when the operator has no domain or PKI of their own?",
   "analog": "security.txt-style well-known record combined with a hosted identity provider's public registry entry",
   "origin": {
    "org": "knownAs.dev (Authecity Systems LLC)",
    "date": "2026-10-05"
   },
   "governance": "Internet-Draft by F. Alla, knownAs.dev (Authecity Systems LLC). Intended status Informational. The source no longer declares a submission type: the document has no stream.",
   "native_status": "Internet-Draft, Intended status: Informational; expires 4 May 2027",
   "phase": "draft",
   "implementation": "shipping",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "version": {
    "label": "draft-alla-agent-identity-document-02",
    "date": "2026-10-31"
   },
   "spec_url": "https://www.ietf.org/archive/id/draft-alla-agent-identity-document-02.txt",
   "discovery": {
    "mechanism": "well-known URI on the agent's identity hostname",
    "path": "/.well-known/agent-identity.json"
   },
   "probe": {
    "method": "GET",
    "path": "/.well-known/agent-identity.json",
    "parse": "Parse JSON; check for version, fqdn, status and endpoints members, and for provider-generated facts versus operator-asserted claims",
    "on_absent": "A 404 means no identity is published at that hostname; do not infer the hostname was never allocated. Also try legacy /.well-known/agent.json."
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.ietf.org/archive/id/draft-alla-agent-identity-document-02.txt",
     "claim": "F. Alla (knownAs.dev / Authecity Systems LLC), *The Agent Identity Document: A Hosted, Accountable Public Record for AI Agents (draft-alla-agent-identity-document-02)*, checked 2026-11-07",
     "date": null,
     "quote": "This document specifies the Agent Identity Document, a small JSON document served at a well-known URI on a hostname assigned to one agent, and the practices an identity provider follows when it hosts such names for operators who do not run their own domain. / The Agent Identity Document is a JSON document [RFC8259] served over HTTPS [RFC9110] at the well-known URI [RFC8615] ... https://<identity-hostname>/.well-known/agent-identity.json / F. Alla ... knownAs.dev (Authecity Systems LLC) ... Intended status: Informational ... 31 October 2026 ... Expires: 4 May 2027 ... draft-alla-agent-identity-document-02 ... This document defines \"1\". ... The source no longer declares a submission type: the document has no stream. / F. Alla ... knownAs.dev (Authecity Systems LLC) / Femi Alla ... knownAs.dev (Authecity Systems LLC) / Intended status: Informational ... The source no longer declares a submission type: the document has no stream. / Intended status: Informational / This Internet-Draft will expire on 4 May 2027. / 31 October 2026 ... draft-alla-agent-identity-document-02 ... This document defines \"1\". / Content-Type: application/json / The Agent Identity Document: A Hosted, Accountable Public Record for AI Agents ... draft-alla-agent-identity-document-02 / a single DNS label under the base domain: <slug>.<base-domain> e.g. alice.knownas.dev ... https://<identity-hostname>/.well-known/agent-identity.json ... Implementations that predate this document serve the same content at /.well-known/agent.json / \"fqdn\": \"ada.knownas.dev\", \"endpoints\": { \"web\": \"https://ada.knownas.dev\", \"manifest\": \"https://ada.knownas.dev/.well-known/agent-identity.json\" / Copyright (c) 2026 IETF Trust and the persons identified as the document authors. / Each of these assumes the operator already has something: a domain, a certificate, a key directory. Most people who build agents have none of them, and have no wish to run DNS or PKI. / The document records what the provider knows to be true (the hostname, its service endpoints and the identity's lifecycle status) separately from what the operator asserts (a description, a contact, a homepage, a public key) / publishes the provider's dated, expiring checks on the operator rather than a single trust level. / An agent MUST NOT be able to create an account. This keeps a person or organisation answerable for every identity, however it was created. / Agents MUST NOT receive credentials that can modify DNS. The provider's own provisioning component SHOULD be limited, by the DNS service's access control rather than by application code alone, to writing address records under the base domain and nothing else. / IANA is requested to register the following well-known URI suffix in the \"Well-Known URIs\" registry [RFC8615]: URI suffix: agent-identity.json ... Status: provisional / Implementations that predate this document serve the same content at /.well-known/agent.json",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://www.iana.org/assignments/well-known-uris/well-known-uris-1.csv",
     "claim": "IANA, *Well-Known URIs*, registry CSV, fetched 2026-10-30",
     "date": null,
     "quote": "URI Suffix,Reference,Status,Change Controller,Related Information,Date Registered,Date Modified acme-challenge,\"[RFC 8555, Section 8.3]\",permanent,IETF,,2016-08-18, agent-card.json,[https://a2a-protocol.org/latest/specification/],permanent,Linux Foundation,,2025-08-01,",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://www.rfc-editor.org/rfc/rfc9116.html",
     "claim": "IETF, *RFC 9116: A File Format to Aid in Security Vulnerability Disclosure*, IETF RFC",
     "date": null,
     "quote": "When security vulnerabilities are discovered by",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://www.ietf.org/archive/id/draft-meunier-webbotauth-registry-04.txt",
     "claim": "M. Guerreiro (Cloudflare), U. Kirazci (Amazon), and T. Meunier (Cloudflare), *Registry and Signature Agent card for Web bot auth (draft-meunier-webbotauth-registry-04)*, checked 2026-10-30",
     "date": null,
     "quote": "https://www.ietf.org/mailman/listinfo/web-bot-auth/. Source for this draft and an issue tracker can be found at https://github.com/thibmeu/draft-meunier-webbotauth-registry.",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://datatracker.ietf.org/doc/draft-narajala-courtney-ansv2/",
     "claim": "Scott Courtney, Vineeth Sai Narajala, Ken Huang, Idan Habler, and Akram Sheriff, *draft-narajala-courtney-ansv2 — Agent Name Service v2 (ANS): A Domain-Anchored Identity Layer for Autonomous AI Agents (IETF Datatracker; HTML overview snapshot at -01 'Trust Layer')*, draft-narajala-courtney-ansv2-02 posted 2026-10-26 (HTML overview snapshot 2026-10-15)",
     "date": null,
     "quote": "Document Type Active Internet-Draft (individual) Authors Scott Courtney, Vineeth Sai Narajala, Ken Huang, Idan Habler, Akram Sheriff Last updated 2026-10-26 Replaces draft-narajala-ans RFC stream (None) Intended RFC status (None)",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://aaif.io/blog/a2a-joins-aaif",
     "claim": "Agentic AI Foundation, *A2A joins AAIF's open agentic stack*, published 2026-08-17; modified 2026-09-24",
     "date": null,
     "quote": "A2A v1.0, the first stable specification, shipped in March 2026.",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://raw.githubusercontent.com/ethereum/ERCs/master/ERCS/erc-8004.md",
     "claim": "Marco De Rossi, Davide Crapis, Jordan Ellis, and Erik Reppel, *ERCS/erc-8004.md (Trustless Agents)*, created 2025-08-13; fetched 2026-10-30",
     "date": null,
     "quote": "author: Marco De Rossi (@MarcoMetaMask), Davide Crapis (@dcrapis) <davide@ethereum.org>, Jordan Ellis <jordanellis@google.com>, Erik Reppel <erik.reppel@coinbase.com> discussions-to: https://ethereum-magicians.org/t/erc-8004-trustless-agents/25098 status: Draft type: Standards Track category: ERC created: 2025-08-13 requires: 155, 712, 721, 1271",
     "ref": 7
    }
   ],
   "summary_md": "**The Agent Identity Document: A Hosted, Accountable Public Record for AI Agents** (`draft-alla-agent-identity-document-02`) specifies a small JSON document served at a well-known URI on a hostname assigned to one agent, and the practices an identity provider follows when it hosts such names for operators who do not run their own domain. The identity provider serves that JSON document over HTTPS at `https://<identity-hostname>/.well-known/agent-identity.json`. `draft-alla-agent-identity-document-02` by F. Alla, knownAs.dev (Authecity Systems LLC), is an Internet-Draft with intended status Informational, dated 31 October 2026, and expires on 4 May 2027. The draft defines schema `version` `\"1\"` and no longer declares a submission type or RFC stream.",
   "part_of": null,
   "group": null,
   "use_cases": [
    "prove-agent-identity",
    "describe-agent-capabilities",
    "agent-naming"
   ],
   "audience": [
    "agent-builder",
    "platform",
    "standards-body"
   ],
   "pairs_with": [
    "web-bot-auth-signature-agent-card",
    "ans",
    "a2a",
    "erc-8004"
   ],
   "prerequisites": [],
   "dispute": null,
   "last_verified": "2026-11-12",
   "history": [
    {
     "date": "2026-10-16",
     "note": "initial candidate record from primary source (https://datatracker.ietf.org/doc/html/draft-alla-agent-identity-document-01)"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-alla-agent-identity-document"
    }
   ],
   "ietf_tracker": {
    "doc": "draft-alla-agent-identity-document",
    "rev": "02",
    "state": "active",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-10-31",
    "expires_utc": "2027-05-04",
    "as_of": "2026-11-07",
    "source": "https://datatracker.ietf.org/doc/draft-alla-agent-identity-document/",
    "source_label": "per IETF Datatracker"
   },
   "hatnote_md": "",
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": null,
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**The Agent Identity Document: A Hosted, Accountable Public Record for AI Agents** (`draft-alla-agent-identity-document-02`) specifies a small JSON document served at a well-known URI on a hostname assigned to one agent, and the practices an identity provider follows when it hosts such names for operators who do not run their own domain. [1] The identity provider serves that JSON document over HTTPS at `https://<identity-hostname>/.well-known/agent-identity.json`. [1] `draft-alla-agent-identity-document-02` by F. Alla, knownAs.dev (Authecity Systems LLC), is an Internet-Draft with intended status Informational, dated 31 October 2026, and expires on 4 May 2027. The draft defines schema `version` `\"1\"` and no longer declares a submission type or RFC stream. [1]",
   "v05_identity_sentence_md": "**The Agent Identity Document: A Hosted, Accountable Public Record for AI Agents** (`draft-alla-agent-identity-document-02`) specifies a small JSON document served at a well-known URI on a hostname assigned to one agent, and the practices an identity provider follows when it hosts such names for operators who do not run their own domain. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Identify](/category/identify/) (`identify`)"
    },
    {
     "label": "Form",
     "value_md": "Well-known file (`well-known-file`)"
    },
    {
     "label": "Originated by",
     "value_md": "F. Alla, knownAs.dev (Authecity Systems LLC) [1]"
    },
    {
     "label": "Governed by",
     "value_md": "IETF Internet-Draft (`draft-alla-agent-identity-document-02`); no submission stream declared [1]"
    },
    {
     "label": "Track",
     "value_md": "IETF Internet-Draft (Informational) [1]"
    },
    {
     "label": "Status",
     "value_md": "Internet-Draft, Intended status: Informational; expires 4 May 2027 [1]"
    },
    {
     "label": "Version",
     "value_md": "Document schema `\"version\": \"1\"` (`draft-alla-agent-identity-document-02`, published 31 October 2026) [1]"
    },
    {
     "label": "Wire format",
     "value_md": "JSON document (`application/json`) served over HTTPS [1]"
    },
    {
     "label": "Specification",
     "value_md": "https://www.ietf.org/archive/id/draft-alla-agent-identity-document-02.txt [1]"
    },
    {
     "label": "Found at",
     "value_md": "`https://<identity-hostname>/.well-known/agent-identity.json` on `<slug>.<base-domain>` (with pre-draft deployments at `/.well-known/agent.json`; `ada.knownas.dev` and `alice.knownas.dev` are draft specimen hostnames rather than verified live HTTPS endpoints) [1]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust Legal Provisions (BCP 78) [1]"
    },
    {
     "label": "IETF state",
     "value_md": "`draft-alla-agent-identity-document-02` · **Active Internet-Draft** (expires 2027-05-04) · Individual · as of 2026-11-07 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-alla-agent-identity-document/))"
    }
   ],
   "v05_problem_md": "Related efforts assume the operator already has a domain, a certificate, or a key directory. Most people who build agents have none of them, and have no wish to run DNS or PKI. [1] The document records what the provider knows to be true (the hostname, its service endpoints and the identity's lifecycle status) separately from what the operator asserts (a description, a contact, a homepage, a public key). [1] It publishes the provider's dated, expiring checks on the operator rather than a single trust level. [1] An agent MUST NOT be able to create an account. This keeps a person or organization answerable for every identity, however it was created. [1] Agents MUST NOT receive credentials that can modify DNS. The provider's own provisioning component SHOULD be limited, by the DNS service's access control rather than by application code alone, to writing address records under the base domain and nothing else. [1]",
   "v05_mechanism_delta_md": "The document records what the provider knows to be true (the hostname, its service endpoints and the identity's lifecycle status) separately from what the operator asserts (a description, a contact, a homepage, a public key). [1] It publishes the provider's dated, expiring checks on the operator rather than a single trust level. [1]",
   "v05_scope_boundary_md": "An agent MUST NOT be able to create an account. This keeps a person or organization answerable for every identity, however it was created. [1] Agents MUST NOT receive credentials that can modify DNS. The provider's own provisioning component SHOULD be limited, by the DNS service's access control rather than by application code alone, to writing address records under the base domain and nothing else. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "Well-Known URIs (RFC 8615)",
      "spec_or_rfc": "RFC 8615",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "The identity provider serves the document at `/.well-known/agent-identity.json` (with pre-draft implementations at `/.well-known/agent.json`); Section 8 requests provisional IANA registration of `agent-identity.json`, and neither `agent-identity.json` nor legacy `agent.json` is registered in the IANA Well-Known URIs registry. [1][2]"
     },
     {
      "name": "security.txt (RFC 9116)",
      "spec_or_rfc": "RFC 9116",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "security.txt publishes vulnerability-contact fields at /.well-known/security.txt, while the Agent Identity Document is the agent identity record at /.well-known/agent-identity.json. [1][3]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "web-bot-auth-signature-agent-card",
      "target_name": "Signature Agent Card (Web Bot Auth registry)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "A Signature Agent Card is a Client ID Metadata Document plus web_bot_auth, while the Agent Identity Document is the agent identity file at /.well-known/agent-identity.json. [1][4]"
     },
     {
      "target_id": "ans",
      "target_name": "Agent Name Service v2 (ANS)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ANS publishes DNSSEC-anchored _ans TXT records and a transparency log, while the Agent Identity Document is a single JSON file at /.well-known/agent-identity.json. [1][5]"
     },
     {
      "target_id": "a2a",
      "target_name": "Agent2Agent Protocol (A2A)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "The JSON document at /.well-known/agent-identity.json can list service endpoints, including an A2A endpoint, and A2A is the protocol spoken at that endpoint. [1][6]"
     },
     {
      "target_id": "erc-8004",
      "target_name": "ERC-8004: Trustless Agents",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ERC-8004 uses on-chain Identity and Reputation registries plus /.well-known/agent-registration.json, while the Agent Identity Document is JSON at /.well-known/agent-identity.json. [1][7]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "idmandat-credential",
     "target_name": "ID MANDAT: A Machine-Readable Credential for the Agents of a Company",
     "relation_label": "Peer alternative",
     "delta": "The Agent Identity Document is JSON at /.well-known/agent-identity.json, while ID MANDAT publishes /.well-known/idmandat.json plus a _idmandat TXT record and per-agent may and mayNot mandates. [1]",
     "item_md": "**[ID MANDAT: A Machine-Readable Credential for the Agents of a Company](/protocols/idmandat-credential/)** (Peer alternative) — The Agent Identity Document is JSON at /.well-known/agent-identity.json, while ID MANDAT publishes /.well-known/idmandat.json plus a _idmandat TXT record and per-agent may and mayNot mandates. [1]"
    },
    {
     "item_md": "**[Identify protocols](/category/identify/)** — Category index for `identify` standards."
    }
   ],
   "v05_compiled_md": "---\nid: agent-identity-document\ntitle: \"The Agent Identity Document: A Hosted, Accountable Public Record for AI Agents\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: identify\nform: well-known-file\nwire_archetype: identity_auth_crypto\nspec_url: https://www.ietf.org/archive/id/draft-alla-agent-identity-document-02.txt\nlast_checked: 2026-11-12\n---\n\n# The Agent Identity Document: A Hosted, Accountable Public Record for AI Agents\n\n**Category:** [Identify](/category/identify/) (`identify`) · **Form:** Well-known file (`well-known-file`) · **Last checked:** 2026-11-12\n\n**The Agent Identity Document: A Hosted, Accountable Public Record for AI Agents** (`draft-alla-agent-identity-document-02`) specifies a small JSON document served at a well-known URI on a hostname assigned to one agent, and the practices an identity provider follows when it hosts such names for operators who do not run their own domain. [1] The identity provider serves that JSON document over HTTPS at `https://<identity-hostname>/.well-known/agent-identity.json`. [1] `draft-alla-agent-identity-document-02` by F. Alla, knownAs.dev (Authecity Systems LLC), is an Internet-Draft with intended status Informational, dated 31 October 2026, and expires on 4 May 2027. The draft defines schema `version` `\"1\"` and no longer declares a submission type or RFC stream. [1]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Identify](/category/identify/) (`identify`) |\n| **Form** | Well-known file (`well-known-file`) |\n| **Originated by** | F. Alla, knownAs.dev (Authecity Systems LLC) [1] |\n| **Governed by** | IETF Internet-Draft (`draft-alla-agent-identity-document-02`); no submission stream declared [1] |\n| **Track** | IETF Internet-Draft (Informational) [1] |\n| **Status** | Internet-Draft, Intended status: Informational; expires 4 May 2027 [1] |\n| **Version** | Document schema `\"version\": \"1\"` (`draft-alla-agent-identity-document-02`, published 31 October 2026) [1] |\n| **Wire format** | JSON document (`application/json`) served over HTTPS [1] |\n| **Specification** | https://www.ietf.org/archive/id/draft-alla-agent-identity-document-02.txt [1] |\n| **Found at** | `https://<identity-hostname>/.well-known/agent-identity.json` on `<slug>.<base-domain>` (with pre-draft deployments at `/.well-known/agent.json`; `ada.knownas.dev` and `alice.knownas.dev` are draft specimen hostnames rather than verified live HTTPS endpoints) [1] |\n| **Licence** | IETF Trust Legal Provisions (BCP 78) [1] |\n| **IETF state** | `draft-alla-agent-identity-document-02` · **Active Internet-Draft** (expires 2027-05-04) · Individual · as of 2026-11-07 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-alla-agent-identity-document/)) |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nRelated efforts assume the operator already has a domain, a certificate, or a key directory. Most people who build agents have none of them, and have no wish to run DNS or PKI. [1] The document records what the provider knows to be true (the hostname, its service endpoints and the identity's lifecycle status) separately from what the operator asserts (a description, a contact, a homepage, a public key). [1] It publishes the provider's dated, expiring checks on the operator rather than a single trust level. [1] An agent MUST NOT be able to create an account. This keeps a person or organization answerable for every identity, however it was created. [1] Agents MUST NOT receive credentials that can modify DNS. The provider's own provisioning component SHOULD be limited, by the DNS service's access control rather than by application code alone, to writing address records under the base domain and nothing else. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **Well-Known URIs (RFC 8615)** | `RFC 8615` | Analogous to classic standard | The identity provider serves the document at `/.well-known/agent-identity.json` (with pre-draft implementations at `/.well-known/agent.json`); Section 8 requests provisional IANA registration of `agent-identity.json`, and neither `agent-identity.json` nor legacy `agent.json` is registered in the IANA Well-Known URIs registry. [1][2] |\n| **security.txt (RFC 9116)** | `RFC 9116` | Analogous to classic standard | security.txt publishes vulnerability-contact fields at /.well-known/security.txt, while the Agent Identity Document is the agent identity record at /.well-known/agent-identity.json. [1][3] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Signature Agent Card (Web Bot Auth registry)](/protocols/web-bot-auth-signature-agent-card/)** | Peer alternative | A Signature Agent Card is a Client ID Metadata Document plus web_bot_auth, while the Agent Identity Document is the agent identity file at /.well-known/agent-identity.json. [1][4] |\n| **[Agent Name Service v2 (ANS)](/protocols/ans/)** | Peer alternative | ANS publishes DNSSEC-anchored _ans TXT records and a transparency log, while the Agent Identity Document is a single JSON file at /.well-known/agent-identity.json. [1][5] |\n| **[Agent2Agent Protocol (A2A)](/protocols/a2a/)** | Complements | The JSON document at /.well-known/agent-identity.json can list service endpoints, including an A2A endpoint, and A2A is the protocol spoken at that endpoint. [1][6] |\n| **[ERC-8004: Trustless Agents](/protocols/erc-8004/)** | Peer alternative | ERC-8004 uses on-chain Identity and Reputation registries plus /.well-known/agent-registration.json, while the Agent Identity Document is JSON at /.well-known/agent-identity.json. [1][7] |\n\n---\n\n## See also\n\n- **[ID MANDAT: A Machine-Readable Credential for the Agents of a Company](/protocols/idmandat-credential/)** *(Peer alternative)* — The Agent Identity Document is JSON at /.well-known/agent-identity.json, while ID MANDAT publishes /.well-known/idmandat.json plus a _idmandat TXT record and per-agent may and mayNot mandates. [1]\n- **Category:** [Identify protocols](/category/identify/)\n\n---\n\n## References\n\n1. F. Alla (knownAs.dev / Authecity Systems LLC), *The Agent Identity Document: A Hosted, Accountable Public Record for AI Agents (draft-alla-agent-identity-document-02)* (checked 2026-11-07) — <https://www.ietf.org/archive/id/draft-alla-agent-identity-document-02.txt>\n2. IANA, *Well-Known URIs* (registry CSV, fetched 2026-10-30) — <https://www.iana.org/assignments/well-known-uris/well-known-uris-1.csv>\n3. IETF, *RFC 9116: A File Format to Aid in Security Vulnerability Disclosure* (IETF RFC) — <https://www.rfc-editor.org/rfc/rfc9116.html>\n4. M. Guerreiro (Cloudflare), U. Kirazci (Amazon), and T. Meunier (Cloudflare), *Registry and Signature Agent card for Web bot auth (draft-meunier-webbotauth-registry-04)* (checked 2026-10-30) — <https://www.ietf.org/archive/id/draft-meunier-webbotauth-registry-04.txt>\n5. Scott Courtney, Vineeth Sai Narajala, Ken Huang, Idan Habler, and Akram Sheriff, *draft-narajala-courtney-ansv2 — Agent Name Service v2 (ANS): A Domain-Anchored Identity Layer for Autonomous AI Agents (IETF Datatracker; HTML overview snapshot at -01 'Trust Layer')* (draft-narajala-courtney-ansv2-02 posted 2026-10-26 (HTML overview snapshot 2026-10-15)) — <https://datatracker.ietf.org/doc/draft-narajala-courtney-ansv2/>\n6. Agentic AI Foundation, *A2A joins AAIF's open agentic stack* (published 2026-08-17; modified 2026-09-24) — <https://aaif.io/blog/a2a-joins-aaif>\n7. Marco De Rossi, Davide Crapis, Jordan Ellis, and Erik Reppel, *ERCS/erc-8004.md (Trustless Agents)* (created 2025-08-13; fetched 2026-10-30) — <https://raw.githubusercontent.com/ethereum/ERCs/master/ERCS/erc-8004.md>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "mcp-dns-discovery",
   "name": "Discovery of Model Context Protocol Servers via DNS TXT Records",
   "acronym": "",
   "aliases": [
    "MCP DNS Discovery",
    "draft-morrison-mcp-dns-discovery"
   ],
   "collisions": [],
   "step": "discover",
   "parties": [
    "agent-site",
    "agent-registry"
   ],
   "form": "dns-record",
   "track": "ietf",
   "scope": "general",
   "question": "How can a client discover an MCP server's endpoint, the operating organisation's identity, and a signed ~handle identity envelope using DNS TXT records under a domain?",
   "analog": "DKIM/DMARC-style underscore-labelled TXT records for MCP server discovery",
   "origin": {
    "org": "Alter Meridian Pty Ltd (B. Morrison)",
    "date": "2026-04-06"
   },
   "governance": "Individual Internet-Draft by a single author; not adopted by an IETF working group per the page text (Network Working Group, Intended Status: Informational).",
   "native_status": "Active Internet-Draft (-09, Informational; expires 2027-04-25)",
   "phase": "draft",
   "implementation": "none-found",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "version": {
    "label": "draft-morrison-mcp-dns-discovery-09",
    "date": "2026-10-22"
   },
   "spec_url": "https://datatracker.ietf.org/doc/html/draft-morrison-mcp-dns-discovery-09",
   "discovery": {
    "mechanism": "DNS TXT records at _mcp.<domain>, _org-alter.<domain> and _alter.<domain>; DNSSEC required for the envelope record, DANE TLSA pin on the MCP endpoint where required",
    "path": "_mcp.<domain>"
   },
   "probe": {
    "method": "DNS TXT query",
    "path": "_mcp.<domain>",
    "parse": "Parse the semicolon-delimited key=value TXT record (endpoint URL, protocol family, transport, key, capability profile); optionally query _org-alter.<domain> and _alter.<domain>",
    "on_absent": "Treat the domain as not advertising MCP discovery via DNS (NXDOMAIN or no TXT record)"
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.ietf.org/archive/id/draft-morrison-mcp-dns-discovery-09.txt",
     "claim": "B. Morrison (Alter Meridian Pty Ltd), *Discovery of Model Context Protocol Servers via DNS TXT Records (draft-morrison-mcp-dns-discovery-09)*, checked 2026-10-31",
     "date": null,
     "quote": "This document defines a DNS-based mechanism for discovering Model Context Protocol (MCP) servers, the identity of the organisations that operate them, and a cryptographic identity envelope bound to an individual Sovereign-tier ~handle published under the same zone. / Network Working Group B. Morrison Internet-Draft Alter Meridian Pty Ltd Intended status: Informational 21 October 2026 / The Discovery Record is a DNS TXT resource record ... published at the label _mcp prepended to the Policy Domain / The record value is a semicolon-delimited sequence of key-value pairs. / MUST be the literal string mcp1. MUST appear as the first field in the record. / Where a Discovery Record exceeds 255 bytes, the record MUST be split across multiple character-strings within a single TXT RDATA, which the client concatenates / Intended status: Informational 21 October 2026 Expires: 24 April 2027 Discovery of Model Context Protocol Servers via DNS TXT Records draft-morrison-mcp-dns-discovery-09 / This revision is fully backward-compatible with revisions 01 and 02. Implementations that consume only the _mcp. record continue to work unchanged. / Deployed and resolvable in the truealter.com zone: * _mcp.truealter.com, carrying v=mcp1 ... * _alter.truealter.com, an Envelope Record of Section 7 for the handle ~truealter.com, published 20 October 2026. ... * _org-alter.truealter.com, carrying v=alter1 ... as the zone is DNSSEC-signed. / It does NOT conform on two steps of the recognition procedure of Section 12.3: it still treats the IdentityLog cross-reference as fatal, where step 9 now says a resolver MUST NOT abort, and it still fetches caveats over HTTPS, a step that step 11 now places out of scope. ... check of step 12 ... NOT deployed: * _443._tcp.mcp.truealter.com does not resolve. No DANE TLSA pin is published / Network Working Group B. Morrison Internet-Draft Alter Meridian Pty Ltd Intended status: Informational 21 / Morrison Expires 24 April 2027 [Page 22] Internet-Draft MCP DNS Discovery October 2026 * / An _mcp record's value is almost entirely opaque tokens the resolver does not interpret, an endpoint URL, a public key, a capability list, an attestation scope. SVCB is useful when a resolver or a connection library acts on the parameters directly, selecting a transport, following an alpn, choosing a port. It adds a registered SvcParamKey per field and a priority-ordered target list. For a record whose fields are consumed by an MCP client after resolution, and not by the resolver, that machinery is overhead without a matching benefit, and a TXT string is the lighter carrier. / Conflating any two of these into a single TXT record would force every consumer to parse fields it does not need and would crowd the 255-octet character-string limit. / _mcp. advertises an MCP server's endpoint URL, agent protocol family, transport binding, cryptographic identity, and capability profile. / _org-alter. advertises the operator's canonical organisational identity / _alter. publishes an Ed25519-signed envelope binding a ~handle to a public key, an IdentityLog root reference, and a revocation commitment. / This procedure does not consume the _alter. record and imposes no DNSSEC requirement. / Publication of a per-individual envelope in DNS is *NOT RECOMMENDED* for new deployments. / MCP clients that do not resolve an envelope (e.g. revision 01 clients consuming only _mcp.) are out of scope for this requirement",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28/changelog",
     "claim": "Model Context Protocol, *Key Changes — Model Context Protocol Specification (2026-07-28)*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Make MCP stateless: remove the initialize / notifications/initialized handshake.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://datatracker.ietf.org/doc/draft-morrison-mcp-dns-discovery/",
     "claim": "IETF Datatracker, *draft-morrison-mcp-dns-discovery-09 — Discovery of Model Context Protocol Servers via DNS TXT Records (IETF Datatracker)*, checked 2026-10-31",
     "date": null,
     "quote": "This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process.",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://datatracker.ietf.org/doc/html/draft-morrison-mcp-dns-discovery-09",
     "claim": "B. Morrison (Alter Meridian Pty Ltd), *Discovery of Model Context Protocol Servers via DNS TXT Records (draft-morrison-mcp-dns-discovery-09 HTML)*, checked 2026-10-31",
     "date": null,
     "quote": "Intended status: Informational / Morrison Expires 24 April 2027 [Page 25] Internet-Draft MCP DNS Discovery October 2026 6.3.12. / value is a semicolon-delimited sequence of key-value pairs. The following ABNF \\[ RFC5234\\] defines / draft-morrison-mcp-dns-discovery-09 / claimed an _org-alter record, a DANE TLSA pin, a conformant envelope record and a / Copyright (c) 2026 IETF Trust and the persons identified as the document authors.",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://datatracker.ietf.org/doc/html/draft-morrison-mcp-dns-discovery-08",
     "claim": "B. Morrison (Alter Meridian Pty Ltd), *Discovery of Model Context Protocol Servers via DNS TXT Records (draft-morrison-mcp-dns-discovery-08 HTML)*, checked 2026-10-31",
     "date": null,
     "quote": "verify. Morrison Expires 12 April 2027 Page 32 Internet-Draft MCP DNS Discovery October 2026",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://www.rfc-editor.org/rfc/rfc6376.html",
     "claim": "IETF, *RFC 6376: DomainKeys Identified Mail (DKIM) Signatures*, IETF RFC",
     "date": null,
     "quote": "DomainKeys Identified Mail (DKIM) permits a person, role, or",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://www.rfc-editor.org/rfc/rfc9460.html",
     "claim": "IETF, *RFC 9460: Service Binding and Parameter Specification via the DNS (SVCB and HTTPS Resource Records)*, IETF RFC",
     "date": null,
     "quote": "This document specifies the \"SVCB\" (\"Service Binding\") and \"HTTPS\" DNS resource record (RR)",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Current : the current protocol version, which is ready for use and may continue to receive backwards compatible changes.",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://modelcontextprotocol.io/seps/2127-mcp-server-cards",
     "claim": "Model Context Protocol, *SEP-2127: MCP Server Cards*, checked 2026-10-30",
     "date": null,
     "quote": "The TypeScript file,_jsx(_components.a,{href:https://github.com/modelcontextprotocol/experimental-ext-server-card/blob/main/schema.ts,children:_jsx(_components.code,{children:schema.ts})}), is the single",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://www.ietf.org/archive/id/draft-mozleywilliams-dawn-dnsaid-00.txt",
     "claim": "J. Mozley, N. Williams, B. Sarikaya, R. Schott, J. Damick, S. Courtney, *DNS for AI Discovery (draft-mozleywilliams-dawn-dnsaid-00)*, 2026-11-02",
     "date": "2026-11-02",
     "quote": "DNS for AI Discovery draft-mozleywilliams-dawn-dnsaid-00",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://www.ietf.org/archive/id/draft-nemethi-dawn-aid-00.txt",
     "claim": "B. Nemethi (Agent Community), *Agent Identity and Discovery (AID) (draft-nemethi-dawn-aid-00)*, 2026-09-02",
     "date": "2026-09-02",
     "quote": "For aid2 records, clients SHOULD request domain binding by sending the AID-Domain header",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://aid.agentcommunity.org/docs/specification",
     "claim": "Agent Community (Open Agent Registry, Inc.), *Agent Identity & Discovery (AID) - v2.1.1 Specification*, 2026-10-02 (fetched 2026-10-30)",
     "date": null,
     "quote": "Specification | Agent Identity & Discovery",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://datatracker.ietf.org/doc/html/draft-morrison-agent-channel-fan-out-03",
     "claim": "B. Morrison (Alter Meridian Pty Ltd), *An Agent-Channel Frame for Identity-Keyed Fan-Out Delivery to Concurrent Sessions (draft-morrison-agent-channel-fan-out-03 HTML)*, checked 2026-10-31",
     "date": null,
     "quote": "delivery substrate. Morrison Expires 24 April 2027 [Page 5] Internet-Draft Agent-Channel Fan-Out October 2026",
     "ref": 13
    }
   ],
   "summary_md": "**Discovery of Model Context Protocol Servers via DNS TXT Records** (`draft-morrison-mcp-dns-discovery-09`) is an individual IETF Internet-Draft by B. Morrison (Alter Meridian Pty Ltd) that defines a DNS-based mechanism for discovering Model Context Protocol (MCP) servers, the identity of the organizations that operate them, and an Ed25519-signed cryptographic identity envelope bound to a Sovereign-tier `~handle` published under the same DNS zone. A domain operator publishes a Discovery Record as a DNS `TXT` resource record at `_mcp.<domain>` containing a semicolon-delimited sequence of key-value pairs whose first field MUST be `v=mcp1`, followed by an HTTPS `url` and optional `proto`, `transport`, `pk`, `priority`, and `scope` fields. When a record exceeds 255 bytes, it is split across multiple character-strings within a single `TXT` RDATA that the MCP client concatenates before verifying `v=mcp1` and initiating the HTTPS MCP `initialize` handshake (though core stateless MCP `2026-07-28` subsequently retired the `initialize` / `notifications/initialized` handshake referenced by Morrison's draft). Published on 21 October 2026 as an active individual submission with intended status Informational (expiring 24 April 2027, without IETF endorsement or working-group adoption), revision `-09` remains backward-compatible with revisions `-01` and `-02` for clients that consume only `_mcp.<domain>`. The author's DNSSEC-signed `truealter.com` zone publishes live `_mcp.truealter.com` (`v=mcp1`), `_org-alter.truealter.com` (`v=alter1`), and `_alter.truealter.com` envelope records, though its reference verifier still treats `IdentityLog` cross-references as fatal, fetches caveats over HTTPS, and omits a `_443._tcp.mcp.truealter.com` DANE TLSA pin.",
   "part_of": null,
   "group": null,
   "use_cases": [
    "discover-my-api",
    "expose-tools-to-agents",
    "prove-agent-identity"
   ],
   "audience": [
    "agent-builder",
    "platform",
    "standards-body"
   ],
   "pairs_with": [
    "mcp",
    "mcp-server-cards",
    "dns-aid",
    "aid",
    "agent-channel-fan-out"
   ],
   "prerequisites": [
    "mcp"
   ],
   "dispute": null,
   "last_verified": "2026-11-12",
   "history": [
    {
     "date": "2026-10-16",
     "note": "initial candidate record from primary source (https://datatracker.ietf.org/doc/html/draft-morrison-mcp-dns-discovery-08)"
    },
    {
     "date": "2026-10-23",
     "note": "A newer revision, draft-morrison-mcp-dns-discovery-09, now exists; the -08 page is marked as an older version of an Internet-Draft whose latest revision is Active."
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-morrison-mcp-dns-discovery"
    }
   ],
   "ietf_tracker": {
    "doc": "draft-morrison-mcp-dns-discovery",
    "rev": "09",
    "state": "active",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-10-20",
    "expires_utc": "2027-04-24",
    "as_of": "2026-10-31",
    "source": "https://datatracker.ietf.org/doc/draft-morrison-mcp-dns-discovery/",
    "source_label": "per IETF Datatracker"
   },
   "hatnote_md": "",
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "harnesses_rpc_ui",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": null,
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Discovery of Model Context Protocol Servers via DNS TXT Records** (`draft-morrison-mcp-dns-discovery-09`) is an individual IETF Internet-Draft by B. Morrison (Alter Meridian Pty Ltd) that defines a DNS-based mechanism for discovering Model Context Protocol (MCP) servers, the identity of the organizations that operate them, and an Ed25519-signed cryptographic identity envelope bound to a Sovereign-tier `~handle` published under the same DNS zone. [1] A domain operator publishes a Discovery Record as a DNS `TXT` resource record at `_mcp.<domain>` containing a semicolon-delimited sequence of key-value pairs whose first field MUST be `v=mcp1`, followed by an HTTPS `url` and optional `proto`, `transport`, `pk`, `priority`, and `scope` fields. [1] When a record exceeds 255 bytes, it is split across multiple character-strings within a single `TXT` RDATA that the MCP client concatenates before verifying `v=mcp1` and initiating the HTTPS MCP `initialize` handshake (though core stateless MCP `2026-07-28` subsequently retired the `initialize` / `notifications/initialized` handshake referenced by Morrison's draft). [1][2] Published on 21 October 2026 as an active individual submission with intended status Informational (expiring 24 April 2027, without IETF endorsement or working-group adoption), revision `-09` remains backward-compatible with revisions `-01` and `-02` for clients that consume only `_mcp.<domain>`. [1][3] The author's DNSSEC-signed `truealter.com` zone publishes live `_mcp.truealter.com` (`v=mcp1`), `_org-alter.truealter.com` (`v=alter1`), and `_alter.truealter.com` envelope records, though its reference verifier still treats `IdentityLog` cross-references as fatal, fetches caveats over HTTPS, and omits a `_443._tcp.mcp.truealter.com` DANE TLSA pin. [1]",
   "v05_identity_sentence_md": "**Discovery of Model Context Protocol Servers via DNS TXT Records** (`draft-morrison-mcp-dns-discovery-09`) is an individual IETF Internet-Draft by B. Morrison (Alter Meridian Pty Ltd) that defines a DNS-based mechanism for discovering Model Context Protocol (MCP) servers, the identity of the organizations that operate them, and an Ed25519-signed cryptographic identity envelope bound to a Sovereign-tier `~handle` published under the same DNS zone. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Discover](/category/discover/) (`discover`)"
    },
    {
     "label": "Form",
     "value_md": "DNS record (`dns-record`)"
    },
    {
     "label": "Originated by",
     "value_md": "B. Morrison, Alter Meridian Pty Ltd (individual Internet-Draft, Network Working Group) [1]"
    },
    {
     "label": "Governed by",
     "value_md": "Individual submission on the IETF Datatracker; not endorsed by the IETF and without formal standing in the standards process [3]"
    },
    {
     "label": "Track",
     "value_md": "IETF Internet-Draft (Informational) [4]"
    },
    {
     "label": "Status",
     "value_md": "Active Internet-Draft (-09, Informational; expires 2027-04-24) [1][4]"
    },
    {
     "label": "Version",
     "value_md": "`draft-morrison-mcp-dns-discovery-09` (Intended status: Informational, 21 October 2026; expires 24 April 2027), superseding `-08` [1][4][5]"
    },
    {
     "label": "Wire format",
     "value_md": "DNS TXT records carrying semicolon-separated `key=value` pairs (`v=mcp1`, `v=alter1`), split across multiple character-strings when long [4]"
    },
    {
     "label": "Specification",
     "value_md": "https://datatracker.ietf.org/doc/html/draft-morrison-mcp-dns-discovery-09 [4]"
    },
    {
     "label": "Found at",
     "value_md": "`_mcp.<domain>`, `_org-alter.<domain>`, `_alter.<domain>` TXT; DANE pin at `_443._tcp.mcp.<zone>` TLSA [4]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust Legal Provisions (BCP 78) [4]"
    },
    {
     "label": "IETF state",
     "value_md": "`draft-morrison-mcp-dns-discovery-09` · **Active Internet-Draft** (expires 2027-04-24) · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-morrison-mcp-dns-discovery/))"
    }
   ],
   "v05_problem_md": "Multi-record service-binding chains such as DNS `SRV` (RFC 2782) and `SVCB` (RFC 9460) add a registered `SvcParamKey` per field and a priority-ordered target list for resolvers that select a transport, follow an `alpn`, or choose a port. Because an `_mcp` payload carries opaque client-consumed tokens (`url`, `pk`, capability `scope`, and `attest`), that `SVCB` machinery is overhead without a matching benefit, making a `TXT` string the lighter carrier. [1] Conversely, conflating endpoint, organization, and individual discovery into a single `TXT` record would crowd the 255-octet character-string limit and force every client to parse unneeded fields. [1] The draft separates discovery across three `TXT` names: `_mcp.<domain>` advertises the MCP server URL, transport binding, cryptographic identity, and capability profile; `_org-alter.<domain>` advertises canonical organizational identity; and `_alter.<domain>` publishes an Ed25519-signed `~handle` envelope. [1] Standard `_mcp` server discovery does not consume `_alter`, requires neither DNSSEC nor a DANE TLSA pin when no envelope is resolved, and marks per-individual `_alter` publication in DNS as `NOT RECOMMENDED` for new deployments. [1]",
   "v05_mechanism_delta_md": "The draft separates discovery across three `TXT` names: `_mcp.<domain>` advertises the MCP server URL, transport binding, cryptographic identity, and capability profile; `_org-alter.<domain>` advertises canonical organizational identity; and `_alter.<domain>` publishes an Ed25519-signed `~handle` envelope. [1]",
   "v05_scope_boundary_md": "Standard `_mcp` server discovery does not consume `_alter`, requires neither DNSSEC nor a DANE TLSA pin when no envelope is resolved, and marks per-individual `_alter` publication in DNS as `NOT RECOMMENDED` for new deployments. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "DomainKeys Identified Mail (DKIM) Signatures (RFC 6376)",
      "spec_or_rfc": "RFC 6376",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "The draft publishes MCP endpoint, transport, key, and capability data in a TXT record at `_mcp.<domain>`, plus `_org-alter.<domain>` for operator identity and an Ed25519-signed ~handle envelope at `_alter.<domain>`, following the DKIM and DMARC TXT precedent. [1][6]"
     },
     {
      "name": "DNS SRV & SVCB Records (RFC 2782 / RFC 9460)",
      "spec_or_rfc": "RFC 2782 / RFC 9460",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "Discovery uses the TXT names `_mcp.<domain>`, `_org-alter.<domain>`, and `_alter.<domain>`, with DNSSEC required for the _alter envelope and a DANE TLSA pin on the MCP endpoint in some cases, rather than an SRV or SVCB record. [1][7]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "The draft lists MCP as a prerequisite and advertises a server with TXT records at `_mcp.<domain>`, `_org-alter.<domain>`, and `_alter.<domain>`, and the MCP session after resolution is still JSON-RPC 2.0 over stdio or Streamable HTTP. [1][8]"
     },
     {
      "target_id": "mcp-server-cards",
      "target_name": "MCP Server Cards",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "This draft answers discovery with DNS TXT at `_mcp.<domain>`, `_org-alter.<domain>`, and `_alter.<domain>`, while a Server Card is HTTP GET `<endpoint>/server-card` after the client already has the MCP URL. [1][9]"
     },
     {
      "target_id": "dns-aid",
      "target_name": "DNS-AID (DNS for AI Discovery)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "DNS-AID uses SVCB (RFC 9460) service-binding records under `_agents.<domain>` (with TXT fallback), whereas MCP DNS Discovery uses DNS TXT records at `_mcp.<domain>` (v=mcp1; url=...), `_org-alter.<domain>`, and `_alter.<domain>`. [1][10]"
     },
     {
      "target_id": "aid",
      "target_name": "Agent Identity & Discovery (AID)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "AID (`v2.1.1` / `draft-nemethi-dawn-aid-00`) publishes a single `_agent.<domain>` TXT record with compact keys defaulting to `v=aid2;u=...;p=...` (while accepting `v=aid1` for compatibility), whereas MCP DNS Discovery uses `_mcp.<domain>` TXT records (`v=mcp1; url=...`) alongside `_org-alter.<domain>` and Ed25519-signed `~handle` envelopes at `_alter.<domain>`. [1][11][12]"
     },
     {
      "target_id": "agent-channel-fan-out",
      "target_name": "Agent-Channel Frame for Identity-Keyed Fan-Out Delivery to Concurrent Sessions",
      "relation_type": "depended_on_by",
      "relation_label": "Depended on by",
      "delta_md": "The fan-out draft addresses delivery with this draft's DNS names, including `_mcp.<domain>` and the `_alter.<domain>` handle envelope, and then sends ephemeral JSON agent-channel frames on a per-handle Server-Sent Events stream. [1][13]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "dawn-agent-discovery-framework",
     "target_name": "A Framework for Agent Discovery in DAWN",
     "relation_label": "Peer alternative",
     "delta": "DAWN describes a local mDNS/DNS-SD plane plus a DNSSEC federation plane, while MCP DNS discovery defines TXT records at `_mcp.<domain>`, `_org-alter.<domain>`, and an Ed25519-signed envelope at `_alter.<domain>`. [1]",
     "item_md": "**[A Framework for Agent Discovery in DAWN](/protocols/dawn-agent-discovery-framework/)** (Peer alternative) — DAWN describes a local mDNS/DNS-SD plane plus a DNSSEC federation plane, while MCP DNS discovery defines TXT records at `_mcp.<domain>`, `_org-alter.<domain>`, and an Ed25519-signed envelope at `_alter.<domain>`. [1]"
    },
    {
     "item_md": "**[Discover protocols](/category/discover/)** — Category index for `discover` standards."
    }
   ],
   "v05_compiled_md": "---\nid: mcp-dns-discovery\ntitle: \"Discovery of Model Context Protocol Servers via DNS TXT Records\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: discover\nform: dns-record\nwire_archetype: harnesses_rpc_ui\nspec_url: https://datatracker.ietf.org/doc/html/draft-morrison-mcp-dns-discovery-09\nlast_checked: 2026-11-12\n---\n\n# Discovery of Model Context Protocol Servers via DNS TXT Records\n\n**Category:** [Discover](/category/discover/) (`discover`) · **Form:** DNS record (`dns-record`) · **Last checked:** 2026-11-12\n\n**Discovery of Model Context Protocol Servers via DNS TXT Records** (`draft-morrison-mcp-dns-discovery-09`) is an individual IETF Internet-Draft by B. Morrison (Alter Meridian Pty Ltd) that defines a DNS-based mechanism for discovering Model Context Protocol (MCP) servers, the identity of the organizations that operate them, and an Ed25519-signed cryptographic identity envelope bound to a Sovereign-tier `~handle` published under the same DNS zone. [1] A domain operator publishes a Discovery Record as a DNS `TXT` resource record at `_mcp.<domain>` containing a semicolon-delimited sequence of key-value pairs whose first field MUST be `v=mcp1`, followed by an HTTPS `url` and optional `proto`, `transport`, `pk`, `priority`, and `scope` fields. [1] When a record exceeds 255 bytes, it is split across multiple character-strings within a single `TXT` RDATA that the MCP client concatenates before verifying `v=mcp1` and initiating the HTTPS MCP `initialize` handshake (though core stateless MCP `2026-07-28` subsequently retired the `initialize` / `notifications/initialized` handshake referenced by Morrison's draft). [1][2] Published on 21 October 2026 as an active individual submission with intended status Informational (expiring 24 April 2027, without IETF endorsement or working-group adoption), revision `-09` remains backward-compatible with revisions `-01` and `-02` for clients that consume only `_mcp.<domain>`. [1][3] The author's DNSSEC-signed `truealter.com` zone publishes live `_mcp.truealter.com` (`v=mcp1`), `_org-alter.truealter.com` (`v=alter1`), and `_alter.truealter.com` envelope records, though its reference verifier still treats `IdentityLog` cross-references as fatal, fetches caveats over HTTPS, and omits a `_443._tcp.mcp.truealter.com` DANE TLSA pin. [1]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Discover](/category/discover/) (`discover`) |\n| **Form** | DNS record (`dns-record`) |\n| **Originated by** | B. Morrison, Alter Meridian Pty Ltd (individual Internet-Draft, Network Working Group) [1] |\n| **Governed by** | Individual submission on the IETF Datatracker; not endorsed by the IETF and without formal standing in the standards process [3] |\n| **Track** | IETF Internet-Draft (Informational) [4] |\n| **Status** | Active Internet-Draft (-09, Informational; expires 2027-04-24) [1][4] |\n| **Version** | `draft-morrison-mcp-dns-discovery-09` (Intended status: Informational, 21 October 2026; expires 24 April 2027), superseding `-08` [1][4][5] |\n| **Wire format** | DNS TXT records carrying semicolon-separated `key=value` pairs (`v=mcp1`, `v=alter1`), split across multiple character-strings when long [4] |\n| **Specification** | https://datatracker.ietf.org/doc/html/draft-morrison-mcp-dns-discovery-09 [4] |\n| **Found at** | `_mcp.<domain>`, `_org-alter.<domain>`, `_alter.<domain>` TXT; DANE pin at `_443._tcp.mcp.<zone>` TLSA [4] |\n| **Licence** | IETF Trust Legal Provisions (BCP 78) [4] |\n| **IETF state** | `draft-morrison-mcp-dns-discovery-09` · **Active Internet-Draft** (expires 2027-04-24) · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-morrison-mcp-dns-discovery/)) |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nMulti-record service-binding chains such as DNS `SRV` (RFC 2782) and `SVCB` (RFC 9460) add a registered `SvcParamKey` per field and a priority-ordered target list for resolvers that select a transport, follow an `alpn`, or choose a port. Because an `_mcp` payload carries opaque client-consumed tokens (`url`, `pk`, capability `scope`, and `attest`), that `SVCB` machinery is overhead without a matching benefit, making a `TXT` string the lighter carrier. [1] Conversely, conflating endpoint, organization, and individual discovery into a single `TXT` record would crowd the 255-octet character-string limit and force every client to parse unneeded fields. [1] The draft separates discovery across three `TXT` names: `_mcp.<domain>` advertises the MCP server URL, transport binding, cryptographic identity, and capability profile; `_org-alter.<domain>` advertises canonical organizational identity; and `_alter.<domain>` publishes an Ed25519-signed `~handle` envelope. [1] Standard `_mcp` server discovery does not consume `_alter`, requires neither DNSSEC nor a DANE TLSA pin when no envelope is resolved, and marks per-individual `_alter` publication in DNS as `NOT RECOMMENDED` for new deployments. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **DomainKeys Identified Mail (DKIM) Signatures (RFC 6376)** | `RFC 6376` | Analogous to classic standard | The draft publishes MCP endpoint, transport, key, and capability data in a TXT record at `_mcp.<domain>`, plus `_org-alter.<domain>` for operator identity and an Ed25519-signed ~handle envelope at `_alter.<domain>`, following the DKIM and DMARC TXT precedent. [1][6] |\n| **DNS SRV & SVCB Records (RFC 2782 / RFC 9460)** | `RFC 2782 / RFC 9460` | Analogous to classic standard | Discovery uses the TXT names `_mcp.<domain>`, `_org-alter.<domain>`, and `_alter.<domain>`, with DNSSEC required for the _alter envelope and a DANE TLSA pin on the MCP endpoint in some cases, rather than an SRV or SVCB record. [1][7] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Model Context Protocol](/protocols/mcp/)** | Builds on | The draft lists MCP as a prerequisite and advertises a server with TXT records at `_mcp.<domain>`, `_org-alter.<domain>`, and `_alter.<domain>`, and the MCP session after resolution is still JSON-RPC 2.0 over stdio or Streamable HTTP. [1][8] |\n| **[MCP Server Cards](/protocols/mcp-server-cards/)** | Peer alternative | This draft answers discovery with DNS TXT at `_mcp.<domain>`, `_org-alter.<domain>`, and `_alter.<domain>`, while a Server Card is HTTP GET `<endpoint>/server-card` after the client already has the MCP URL. [1][9] |\n| **[DNS-AID (DNS for AI Discovery)](/protocols/dns-aid/)** | Peer alternative | DNS-AID uses SVCB (RFC 9460) service-binding records under `_agents.<domain>` (with TXT fallback), whereas MCP DNS Discovery uses DNS TXT records at `_mcp.<domain>` (v=mcp1; url=...), `_org-alter.<domain>`, and `_alter.<domain>`. [1][10] |\n| **[Agent Identity & Discovery (AID)](/protocols/aid/)** | Peer alternative | AID (`v2.1.1` / `draft-nemethi-dawn-aid-00`) publishes a single `_agent.<domain>` TXT record with compact keys defaulting to `v=aid2;u=...;p=...` (while accepting `v=aid1` for compatibility), whereas MCP DNS Discovery uses `_mcp.<domain>` TXT records (`v=mcp1; url=...`) alongside `_org-alter.<domain>` and Ed25519-signed `~handle` envelopes at `_alter.<domain>`. [1][11][12] |\n| **[Agent-Channel Frame for Identity-Keyed Fan-Out Delivery to Concurrent Sessions](/protocols/agent-channel-fan-out/)** | Depended on by | The fan-out draft addresses delivery with this draft's DNS names, including `_mcp.<domain>` and the `_alter.<domain>` handle envelope, and then sends ephemeral JSON agent-channel frames on a per-handle Server-Sent Events stream. [1][13] |\n\n---\n\n## See also\n\n- **[A Framework for Agent Discovery in DAWN](/protocols/dawn-agent-discovery-framework/)** *(Peer alternative)* — DAWN describes a local mDNS/DNS-SD plane plus a DNSSEC federation plane, while MCP DNS discovery defines TXT records at `_mcp.<domain>`, `_org-alter.<domain>`, and an Ed25519-signed envelope at `_alter.<domain>`. [1]\n- **Category:** [Discover protocols](/category/discover/)\n\n---\n\n## References\n\n1. B. Morrison (Alter Meridian Pty Ltd), *Discovery of Model Context Protocol Servers via DNS TXT Records (draft-morrison-mcp-dns-discovery-09)* (checked 2026-10-31) — <https://www.ietf.org/archive/id/draft-morrison-mcp-dns-discovery-09.txt>\n2. Model Context Protocol, *Key Changes — Model Context Protocol Specification (2026-07-28)* (2026-07-28) — <https://modelcontextprotocol.io/specification/2026-07-28/changelog>\n3. IETF Datatracker, *draft-morrison-mcp-dns-discovery-09 — Discovery of Model Context Protocol Servers via DNS TXT Records (IETF Datatracker)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/draft-morrison-mcp-dns-discovery/>\n4. B. Morrison (Alter Meridian Pty Ltd), *Discovery of Model Context Protocol Servers via DNS TXT Records (draft-morrison-mcp-dns-discovery-09 HTML)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/html/draft-morrison-mcp-dns-discovery-09>\n5. B. Morrison (Alter Meridian Pty Ltd), *Discovery of Model Context Protocol Servers via DNS TXT Records (draft-morrison-mcp-dns-discovery-08 HTML)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/html/draft-morrison-mcp-dns-discovery-08>\n6. IETF, *RFC 6376: DomainKeys Identified Mail (DKIM) Signatures* (IETF RFC) — <https://www.rfc-editor.org/rfc/rfc6376.html>\n7. IETF, *RFC 9460: Service Binding and Parameter Specification via the DNS (SVCB and HTTPS Resource Records)* (IETF RFC) — <https://www.rfc-editor.org/rfc/rfc9460.html>\n8. Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation* (2026-07-28) — <https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning>\n9. Model Context Protocol, *SEP-2127: MCP Server Cards* (checked 2026-10-30) — <https://modelcontextprotocol.io/seps/2127-mcp-server-cards>\n10. J. Mozley, N. Williams, B. Sarikaya, R. Schott, J. Damick, S. Courtney, *DNS for AI Discovery (draft-mozleywilliams-dawn-dnsaid-00)* (2026-11-02) — <https://www.ietf.org/archive/id/draft-mozleywilliams-dawn-dnsaid-00.txt>\n11. B. Nemethi (Agent Community), *Agent Identity and Discovery (AID) (draft-nemethi-dawn-aid-00)* (2026-09-02) — <https://www.ietf.org/archive/id/draft-nemethi-dawn-aid-00.txt>\n12. Agent Community (Open Agent Registry, Inc.), *Agent Identity & Discovery (AID) - v2.1.1 Specification* (2026-10-02 (fetched 2026-10-30)) — <https://aid.agentcommunity.org/docs/specification>\n13. B. Morrison (Alter Meridian Pty Ltd), *An Agent-Channel Frame for Identity-Keyed Fan-Out Delivery to Concurrent Sessions (draft-morrison-agent-channel-fan-out-03 HTML)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/html/draft-morrison-agent-channel-fan-out-03>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "agent-principal-binding",
   "name": "Security Principal and Verifier Binding for Agent Communication Protocols",
   "acronym": "",
   "aliases": [
    "Agent Principal Binding",
    "draft-bu-agentproto-security-principal-binding"
   ],
   "collisions": [],
   "step": "identify",
   "parties": [
    "agent-agent",
    "agent-site"
   ],
   "form": "document-format",
   "track": "ietf",
   "scope": "general",
   "question": "How can an agent communication protocol state, for each security-relevant claim (user authority, agent instance, tool identity, delegation, session, action evidence), which field carries it, which party verifies it, and what happens when it is absent, stale, or unverifiable?",
   "analog": "A claim-to-verifier checklist template for protocol security reviews, similar to a threat-model matrix.",
   "origin": {
    "org": "S. Bu (individual IETF Internet-Draft author)",
    "date": "2026-07-04"
   },
   "governance": "Individual Internet-Draft submitted under BCP 78 and BCP 79; the draft header carries the label 'Agent Communication Protocols', but Datatracker lists it as an individual draft, not a working-group document.",
   "native_status": "Internet-Draft, Intended Status: Informational; expires 17 April 2027",
   "phase": "draft",
   "implementation": "none-found",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "version": {
    "label": "draft-bu-agentproto-security-principal-binding-08",
    "date": "2026-10-14"
   },
   "spec_url": "https://datatracker.ietf.org/doc/html/draft-bu-agentproto-security-principal-binding-08",
   "discovery": {
    "mechanism": "none; a protocol-neutral review and specification-authoring model, not a wire protocol",
    "path": null
   },
   "probe": {
    "method": "NONE",
    "path": "",
    "parse": "",
    "on_absent": "Not applicable; no site-observable artifact is defined."
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.ietf.org/archive/id/draft-bu-agentproto-security-principal-binding-08.txt",
     "claim": "S. Bu, *Security Principal and Verifier Binding for Agent Communication Protocols (draft-bu-agentproto-security-principal-binding-08)*, checked 2026-10-31",
     "date": null,
     "quote": "S. Bu Internet-Draft 14 October 2026 Intended status: Informational ... draft-bu-agentproto-security-principal-binding-08 ... This document defines a verifier-facing model for separating those claims. It provides a reusable matrix format that protocol authors can use to state, for each security-relevant claim, which field carries it, which party verifies it / A companion artifact MAY represent mapping rows and dependencies in a machine-readable mapping set. The representation is a review and interoperability aid; it is not an agent wire format, does not create a new security claim, and does not make the example field names normative. / \"profile\": \"example-interop-profile-0.1\", \"mapping_set_id\": \"example.agent-protocol\", \"mapping_set_revision\": \"2026-08-04.1\" ... \"required_claim_ids\": [\"C-002\", \"C-013\"] ... \"row_id\": \"authority.external\", \"claim_id\": \"C-002\", \"path\": \"rows/authority.external.json\", \"critical\": true, \"depends_on_rows\": [] ... \"row_id\": \"grant.semantic\", \"claim_id\": \"C-013\", \"path\": \"rows/grant.semantic.json\", \"critical\": true, \"depends_on_rows\": [\"authority.external\"] / 14 October 2026 Intended status: Informational Expires: 17 April 2027 ... draft-bu-agentproto-security-principal-binding-08 ... This Internet-Draft will expire on 17 April 2027. / This revision makes a bounded clarification of logical-agent binding and continuity. The claim registry, row-outcome model, evidence floor, and dependency-composition rules remain unchanged. ... This revision adds no protocol-execution, native cryptographic-validation, independent implementation, or interoperability evidence. / Agent Communication Protocols S. Bu Internet-Draft 14 October 2026 Intended status: Informational Expires: 17 / Expires 17 April 2027 [Page 8] Internet-Draft Agent Principal Binding October 2026 * define / \"row_id\": \"authority.external\", \"claim_id\": \"C-002\", \"path\": \"rows/authority.external.json\", \"critical\": true, \"depends_on_rows\": [] ... \"row_id\": \"grant.semantic\", \"claim_id\": \"C-013\", \"path\": \"rows/grant.semantic.json\", \"critical\": true, \"depends_on_rows\": [\"authority.external\"] ... \"binding_ref\": \"sha256:example-action-001\" / Agent communication drafts can become difficult to review when a single architectural label is used to imply several security properties. ... Two implementations can agree on a field name while making different decisions about who verifies the field, what state the field is bound to, and what happens when the field cannot be validated. / This document addresses that problem by giving protocol authors a common way to map each security-relevant claim to a carrier, verifier, verification rule, binding, freshness rule, accepted result, layer, and failure behavior. / The document also defines row-outcome semantics and dependency- closure rules for composed mappings. These rules prevent a composite result from becoming stronger than its verified inputs / It does not define a new agent protocol, token format, audit log, transparency service, or authorization system. / This document is currently intended as Informational guidance. Requirement language is used to make security expectations reviewable by protocol authors; it does not by itself define a wire protocol.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://datatracker.ietf.org/doc/html/draft-bu-agentproto-security-principal-binding-08",
     "claim": "S. Bu, *Security Principal and Verifier Binding for Agent Communication Protocols (draft-bu-agentproto-security-principal-binding-08 HTML)*, checked 2026-10-31",
     "date": null,
     "quote": "Active Internet-Draft (individual) This document is an Internet-Draft (I-D). Anyone may submit an I-D to the IETF. This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. / to cite them other than as \"work in progress.\"¶ This Internet-Draft will expire on / Intended status: Informational / Expires 17 April 2027 [Page 9] Internet-Draft Agent Principal Binding October 2026 The person, / and failure semantics. { \"profile\": \"example-interop-profile-0.1\", \"mapping\\_set\\_id\": \"example.agent-protocol\", \"mapping\\_set\\_revision\": \"2026-08-04.1\", \"protocol\": \"example-agent-protocol\", / draft-bu-agentproto-security-principal-binding-08 / Copyright (c) 2026 IETF Trust and the persons identified as the document authors.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://datatracker.ietf.org/doc/draft-bu-agentproto-security-principal-binding/",
     "claim": "S. Bu, *draft-bu-agentproto-security-principal-binding — Security Principal and Verifier Binding for Agent Communication Protocols (IETF Datatracker)*, checked 2026-10-31",
     "date": null,
     "quote": "| | Active Internet-Draft (individual) | | | Author | | Songbo Bu Compose",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://www.rfc-editor.org/rfc/rfc9334.html",
     "claim": "H. Birkholz, D. Thaler, M. Richardson, N. Smith, and W. Pan, *RFC 9334: Remote ATtestation procedureS (RATS) Architecture*, January 2023",
     "date": null,
     "quote": "RFC 9334: Remote ATtestation procedureS (RATS) Architecture /* NOTE: Changes at the bottom of this file overrides some earlier settings.",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://openid.net/specs/openid-connect-core-1_0.html",
     "claim": "OpenID Foundation, *OpenID Connect Core 1.0*, 2014-11-08",
     "date": "2014-11-08",
     "quote": "OpenID Connect 1.0 is a simple identity layer on top of the OAuth 2.0",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://aaif.io/blog/a2a-joins-aaif",
     "claim": "Agentic AI Foundation, *A2A joins AAIF's open agentic stack*, published 2026-08-17; modified 2026-09-24",
     "date": null,
     "quote": "A2A v1.0, the first stable specification, shipped in March 2026.",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Current : the current protocol version, which is ready for use and may continue to receive backwards compatible changes.",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://www.ietf.org/archive/id/draft-ietf-wimse-workload-creds-03.txt",
     "claim": "B. Campbell, J. Salowey, A. Schwenkschuster, Y. Sheffer, and Y. Rosomakho, *WIMSE Workload Credentials (draft-ietf-wimse-workload-creds-03)*, 30 October 2026; expires 3 May 2027",
     "date": null,
     "quote": "typ: the WIT is explicitly typed, as recommended in Section 3.11 of [I-D.ietf-oauth-rfc8725bis], using the wit+jwt media type.",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://datatracker.ietf.org/doc/rfc9421/",
     "claim": "IETF Datatracker, *HTTP Message Signatures (RFC 9421)*, Proposed Standard (February 2024); checked 2026-10-30",
     "date": null,
     "quote": "RFC - Proposed Standard (February 2024)",
     "ref": 9
    }
   ],
   "summary_md": "**Security Principal and Verifier Binding for Agent Communication Protocols** (`draft-bu-agentproto-security-principal-binding-08`) is an Informational Internet-Draft by S. Bu. It defines a verifier-facing model for separating security claims in agent communication, and a reusable matrix format protocol authors can use to state, for each security-relevant claim, which field carries it and which party verifies it. Datatracker lists the document type as an Active Internet-Draft (individual). The draft is not endorsed by the IETF and has no formal standing in the IETF standards process. A companion artifact MAY represent mapping rows and dependencies in a machine-readable mapping set. The representation is a review and interoperability aid; it is not an agent wire format, does not create a new security claim, and does not make the example field names normative. The example profile is `example-interop-profile-0.1`, `mapping_set_revision` is `2026-08-04.1`, and `required_claim_ids` are `C-002` and `C-013`. Row `authority.external` has an empty `depends_on_rows` value. Row `grant.semantic` names `authority.external` in `depends_on_rows`. `draft-bu-agentproto-security-principal-binding-08` is dated 14 October 2026, its intended status is Informational, and the Internet-Draft expires on 17 April 2027. Revision `-08` makes a bounded clarification of logical-agent binding and continuity. The claim registry, row-outcome model, evidence floor, and dependency-composition rules remain unchanged, and `-08` adds no protocol-execution, native cryptographic-validation, independent implementation, or interoperability evidence.",
   "part_of": null,
   "group": null,
   "use_cases": [
    "prove-agent-identity",
    "delegate-user-authority",
    "audit-agent-actions"
   ],
   "audience": [
    "standards-body",
    "agent-builder"
   ],
   "pairs_with": [
    "a2a",
    "mcp",
    "wimse",
    "http-message-signatures"
   ],
   "prerequisites": [],
   "dispute": null,
   "last_verified": "2026-11-12",
   "history": [
    {
     "date": "2026-10-16",
     "note": "initial candidate record from primary source (https://datatracker.ietf.org/doc/html/draft-bu-agentproto-security-principal-binding-08)"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-bu-agentproto-security-principal-binding"
    }
   ],
   "ietf_tracker": {
    "doc": "draft-bu-agentproto-security-principal-binding",
    "rev": "08",
    "state": "active",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-10-14",
    "expires_utc": "2027-04-17",
    "as_of": "2026-10-31",
    "source": "https://datatracker.ietf.org/doc/draft-bu-agentproto-security-principal-binding/",
    "source_label": "per IETF Datatracker"
   },
   "hatnote_md": "",
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": null,
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Security Principal and Verifier Binding for Agent Communication Protocols** (`draft-bu-agentproto-security-principal-binding-08`) is an Informational Internet-Draft by S. Bu. It defines a verifier-facing model for separating security claims in agent communication, and a reusable matrix format protocol authors can use to state, for each security-relevant claim, which field carries it and which party verifies it. [1] Datatracker lists the document type as an Active Internet-Draft (individual). The draft is not endorsed by the IETF and has no formal standing in the IETF standards process. [2] A companion artifact MAY represent mapping rows and dependencies in a machine-readable mapping set. The representation is a review and interoperability aid; it is not an agent wire format, does not create a new security claim, and does not make the example field names normative. [1] The example profile is `example-interop-profile-0.1`, `mapping_set_revision` is `2026-08-04.1`, and `required_claim_ids` are `C-002` and `C-013`. Row `authority.external` has an empty `depends_on_rows` value. Row `grant.semantic` names `authority.external` in `depends_on_rows`. [1] `draft-bu-agentproto-security-principal-binding-08` is dated 14 October 2026, its intended status is Informational, and the Internet-Draft expires on 17 April 2027. [1] Revision `-08` makes a bounded clarification of logical-agent binding and continuity. The claim registry, row-outcome model, evidence floor, and dependency-composition rules remain unchanged, and `-08` adds no protocol-execution, native cryptographic-validation, independent implementation, or interoperability evidence. [1]",
   "v05_identity_sentence_md": "**Security Principal and Verifier Binding for Agent Communication Protocols** (`draft-bu-agentproto-security-principal-binding-08`) is an Informational Internet-Draft by S. Bu. It defines a verifier-facing model for separating security claims in agent communication, and a reusable matrix format protocol authors can use to state, for each security-relevant claim, which field carries it and which party verifies it. [1] Datatracker lists the document type as an Active Internet-Draft (individual). The draft is not endorsed by the IETF and has no formal standing in the IETF standards process. [2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Identify](/category/identify/) (`identify`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "S. Bu (Individual IETF Internet-Draft author) [1]"
    },
    {
     "label": "Governed by",
     "value_md": "Individual submission to the Internet Engineering Task Force (IETF) under BCP 78 and BCP 79 [2][3]"
    },
    {
     "label": "Track",
     "value_md": "IETF Internet-Draft (Informational) [2]"
    },
    {
     "label": "Status",
     "value_md": "Internet-Draft, Intended Status: Informational; expires 17 April 2027 [1][2]"
    },
    {
     "label": "Version",
     "value_md": "`draft-bu-agentproto-security-principal-binding-08` (Published 14 October 2026; expires 17 April 2027) [1][2]"
    },
    {
     "label": "Wire format",
     "value_md": "Protocol-neutral Informational model; defines JSON machine-readable mapping sets (`example-interop-profile-0.1`) rather than a wire protocol [2]"
    },
    {
     "label": "Specification",
     "value_md": "https://datatracker.ietf.org/doc/html/draft-bu-agentproto-security-principal-binding-08 [2]"
    },
    {
     "label": "Found at",
     "value_md": "Protocol-neutral review artifact (no network discovery URL); optional JSON mapping sets use draft example paths such as `rows/authority.external.json`, `rows/grant.semantic.json`, and digest pointer `binding_ref` as review aids [1]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust Legal Provisions (BCP 78) [2]"
    },
    {
     "label": "IETF state",
     "value_md": "`draft-bu-agentproto-security-principal-binding-08` · **Active Internet-Draft** (expires 2027-04-17) · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-bu-agentproto-security-principal-binding/))"
    }
   ],
   "v05_problem_md": "Agent communication drafts can become difficult to review when a single architectural label is used to imply several security properties. Two implementations can agree on a field name while making different decisions about who verifies the field, what state the field is bound to, and what happens when the field cannot be validated. [1] The draft addresses that problem by giving protocol authors a common way to map each security-relevant claim to a carrier, verifier, verification rule, binding, freshness rule, accepted result, layer, and failure behavior. [1] The document also defines row-outcome semantics and dependency-closure rules for composed mappings. These rules prevent a composite result from becoming stronger than its verified inputs. [1] It does not define a new agent protocol, token format, audit log, transparency service, or authorization system. [1] The draft is intended as Informational guidance. Requirement language is used to make security expectations reviewable by protocol authors; it does not by itself define a wire protocol. [1]",
   "v05_mechanism_delta_md": "The draft addresses that problem by giving protocol authors a common way to map each security-relevant claim to a carrier, verifier, verification rule, binding, freshness rule, accepted result, layer, and failure behavior. [1] The document also defines row-outcome semantics and dependency-closure rules for composed mappings. These rules prevent a composite result from becoming stronger than its verified inputs. [1]",
   "v05_scope_boundary_md": "It does not define a new agent protocol, token format, audit log, transparency service, or authorization system. [1] The draft is intended as Informational guidance. Requirement language is used to make security expectations reviewable by protocol authors; it does not by itself define a wire protocol. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "Remote ATtestation procedureS Architecture (RATS, RFC 9334)",
      "spec_or_rfc": "RFC 9334",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "The draft is a claim-to-verifier checklist for protocol authors, not a wire protocol, in the role RATS plays by separating evidence, the verifier, and the relying party. [2][4]"
     },
     {
      "name": "OpenID Connect Core 1.0",
      "spec_or_rfc": "OpenID Connect Core 1.0",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "An OpenID Connect ID Token is one issuer-signed assertion for the subject, and this matrix keeps each agent-protocol claim paired with its own verifier instead of folding them into that single token. [2][5]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "a2a",
      "target_name": "Agent2Agent Protocol (A2A)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "The matrix is a review sheet for a protocol such as A2A: each A2A claim must name the field that carries it and the party that verifies it, and the draft defines no A2A message. [2][6]"
     },
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Applied to MCP, the matrix separates tool identity and user authority onto different verifiers, and it does not add an MCP JSON-RPC method. [2][7]"
     },
     {
      "target_id": "wimse",
      "target_name": "Workload Identity in Multi System Environments (WIMSE)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Applied to WIMSE, the matrix keeps the WIT, the Workload Proof Token, and any user delegation as separately verified claims. [2][8]"
     },
     {
      "target_id": "http-message-signatures",
      "target_name": "HTTP Message Signatures",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "A Signature header proves the signer of the covered components, and the matrix requires a protocol to say which principal that signature does and does not establish. [2][9]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Identify protocols](/category/identify/)** — Category index for `identify` standards."
    }
   ],
   "v05_compiled_md": "---\nid: agent-principal-binding\ntitle: \"Security Principal and Verifier Binding for Agent Communication Protocols\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: identify\nform: document-format\nwire_archetype: identity_auth_crypto\nspec_url: https://datatracker.ietf.org/doc/html/draft-bu-agentproto-security-principal-binding-08\nlast_checked: 2026-11-12\n---\n\n# Security Principal and Verifier Binding for Agent Communication Protocols\n\n**Category:** [Identify](/category/identify/) (`identify`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-11-12\n\n**Security Principal and Verifier Binding for Agent Communication Protocols** (`draft-bu-agentproto-security-principal-binding-08`) is an Informational Internet-Draft by S. Bu. It defines a verifier-facing model for separating security claims in agent communication, and a reusable matrix format protocol authors can use to state, for each security-relevant claim, which field carries it and which party verifies it. [1] Datatracker lists the document type as an Active Internet-Draft (individual). The draft is not endorsed by the IETF and has no formal standing in the IETF standards process. [2] A companion artifact MAY represent mapping rows and dependencies in a machine-readable mapping set. The representation is a review and interoperability aid; it is not an agent wire format, does not create a new security claim, and does not make the example field names normative. [1] The example profile is `example-interop-profile-0.1`, `mapping_set_revision` is `2026-08-04.1`, and `required_claim_ids` are `C-002` and `C-013`. Row `authority.external` has an empty `depends_on_rows` value. Row `grant.semantic` names `authority.external` in `depends_on_rows`. [1] `draft-bu-agentproto-security-principal-binding-08` is dated 14 October 2026, its intended status is Informational, and the Internet-Draft expires on 17 April 2027. [1] Revision `-08` makes a bounded clarification of logical-agent binding and continuity. The claim registry, row-outcome model, evidence floor, and dependency-composition rules remain unchanged, and `-08` adds no protocol-execution, native cryptographic-validation, independent implementation, or interoperability evidence. [1]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Identify](/category/identify/) (`identify`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | S. Bu (Individual IETF Internet-Draft author) [1] |\n| **Governed by** | Individual submission to the Internet Engineering Task Force (IETF) under BCP 78 and BCP 79 [2][3] |\n| **Track** | IETF Internet-Draft (Informational) [2] |\n| **Status** | Internet-Draft, Intended Status: Informational; expires 17 April 2027 [1][2] |\n| **Version** | `draft-bu-agentproto-security-principal-binding-08` (Published 14 October 2026; expires 17 April 2027) [1][2] |\n| **Wire format** | Protocol-neutral Informational model; defines JSON machine-readable mapping sets (`example-interop-profile-0.1`) rather than a wire protocol [2] |\n| **Specification** | https://datatracker.ietf.org/doc/html/draft-bu-agentproto-security-principal-binding-08 [2] |\n| **Found at** | Protocol-neutral review artifact (no network discovery URL); optional JSON mapping sets use draft example paths such as `rows/authority.external.json`, `rows/grant.semantic.json`, and digest pointer `binding_ref` as review aids [1] |\n| **Licence** | IETF Trust Legal Provisions (BCP 78) [2] |\n| **IETF state** | `draft-bu-agentproto-security-principal-binding-08` · **Active Internet-Draft** (expires 2027-04-17) · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-bu-agentproto-security-principal-binding/)) |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nAgent communication drafts can become difficult to review when a single architectural label is used to imply several security properties. Two implementations can agree on a field name while making different decisions about who verifies the field, what state the field is bound to, and what happens when the field cannot be validated. [1] The draft addresses that problem by giving protocol authors a common way to map each security-relevant claim to a carrier, verifier, verification rule, binding, freshness rule, accepted result, layer, and failure behavior. [1] The document also defines row-outcome semantics and dependency-closure rules for composed mappings. These rules prevent a composite result from becoming stronger than its verified inputs. [1] It does not define a new agent protocol, token format, audit log, transparency service, or authorization system. [1] The draft is intended as Informational guidance. Requirement language is used to make security expectations reviewable by protocol authors; it does not by itself define a wire protocol. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **Remote ATtestation procedureS Architecture (RATS, RFC 9334)** | `RFC 9334` | Analogous to classic standard | The draft is a claim-to-verifier checklist for protocol authors, not a wire protocol, in the role RATS plays by separating evidence, the verifier, and the relying party. [2][4] |\n| **OpenID Connect Core 1.0** | `OpenID Connect Core 1.0` | Analogous to classic standard | An OpenID Connect ID Token is one issuer-signed assertion for the subject, and this matrix keeps each agent-protocol claim paired with its own verifier instead of folding them into that single token. [2][5] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Agent2Agent Protocol (A2A)](/protocols/a2a/)** | Complements | The matrix is a review sheet for a protocol such as A2A: each A2A claim must name the field that carries it and the party that verifies it, and the draft defines no A2A message. [2][6] |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | Applied to MCP, the matrix separates tool identity and user authority onto different verifiers, and it does not add an MCP JSON-RPC method. [2][7] |\n| **[Workload Identity in Multi System Environments (WIMSE)](/protocols/wimse/)** | Complements | Applied to WIMSE, the matrix keeps the WIT, the Workload Proof Token, and any user delegation as separately verified claims. [2][8] |\n| **[HTTP Message Signatures](/protocols/http-message-signatures/)** | Complements | A Signature header proves the signer of the covered components, and the matrix requires a protocol to say which principal that signature does and does not establish. [2][9] |\n\n---\n\n## See also\n\n- **Category:** [Identify protocols](/category/identify/)\n\n---\n\n## References\n\n1. S. Bu, *Security Principal and Verifier Binding for Agent Communication Protocols (draft-bu-agentproto-security-principal-binding-08)* (checked 2026-10-31) — <https://www.ietf.org/archive/id/draft-bu-agentproto-security-principal-binding-08.txt>\n2. S. Bu, *Security Principal and Verifier Binding for Agent Communication Protocols (draft-bu-agentproto-security-principal-binding-08 HTML)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/html/draft-bu-agentproto-security-principal-binding-08>\n3. S. Bu, *draft-bu-agentproto-security-principal-binding — Security Principal and Verifier Binding for Agent Communication Protocols (IETF Datatracker)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/draft-bu-agentproto-security-principal-binding/>\n4. H. Birkholz, D. Thaler, M. Richardson, N. Smith, and W. Pan, *RFC 9334: Remote ATtestation procedureS (RATS) Architecture* (January 2023) — <https://www.rfc-editor.org/rfc/rfc9334.html>\n5. OpenID Foundation, *OpenID Connect Core 1.0* (2014-11-08) — <https://openid.net/specs/openid-connect-core-1_0.html>\n6. Agentic AI Foundation, *A2A joins AAIF's open agentic stack* (published 2026-08-17; modified 2026-09-24) — <https://aaif.io/blog/a2a-joins-aaif>\n7. Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation* (2026-07-28) — <https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning>\n8. B. Campbell, J. Salowey, A. Schwenkschuster, Y. Sheffer, and Y. Rosomakho, *WIMSE Workload Credentials (draft-ietf-wimse-workload-creds-03)* (30 October 2026; expires 3 May 2027) — <https://www.ietf.org/archive/id/draft-ietf-wimse-workload-creds-03.txt>\n9. IETF Datatracker, *HTTP Message Signatures (RFC 9421)* (Proposed Standard (February 2024); checked 2026-10-30) — <https://datatracker.ietf.org/doc/rfc9421/>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "aip-delegation-chain",
   "name": "Agent Identity Protocol (AIP): Verifiable Delegation for AI Agent Systems",
   "acronym": "AIP",
   "aliases": [
    "Agent Identity Protocol",
    "draft-prakash-aip"
   ],
   "collisions": [
    "aip"
   ],
   "step": "permit",
   "parties": [
    "agent-agent"
   ],
   "form": "document-format",
   "track": "ietf",
   "scope": "general",
   "question": "How can a relying party verify from a token and the issuer's public key who delegated authority, which agents it passed through, and that no hop widened it, when no authorization server is on the path?",
   "analog": "Attenuable capability tokens (Biscuit), applied to agent-to-agent subdelegation",
   "origin": {
    "org": "Independent (S. Prakash)",
    "date": "2026-03-27"
   },
   "governance": "Individual Internet-Draft by a single independent author; Intended Status: Standards Track",
   "native_status": "Internet-Draft, Intended Status: Standards Track; expires 13 April 2027",
   "phase": "draft",
   "implementation": "none-found",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "version": {
    "label": "draft-prakash-aip-02",
    "date": "2026-10-10"
   },
   "spec_url": "https://datatracker.ietf.org/doc/html/draft-prakash-aip-02",
   "discovery": {
    "mechanism": "Self-signed agent identity document at a well-known HTTPS path derived from the aip:web identifier",
    "path": "/.well-known/aip/<path>.json"
   },
   "probe": {
    "method": "GET",
    "path": "/.well-known/aip/<path>.json",
    "parse": "Parse JSON; check aip equals \"1.0\", id is an AIP identifier, and document_signature verifies over the JCS-canonicalized document",
    "on_absent": "Treat the site or agent as not supporting AIP"
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.ietf.org/archive/id/draft-prakash-aip-02.txt",
     "claim": "S. Prakash, *Agent Identity Protocol (AIP): Verifiable Delegation for AI Agent Systems (draft-prakash-aip-02)*, checked 2026-10-31",
     "date": null,
     "quote": "Agent Identity Protocol (AIP): Verifiable Delegation for AI Agent Systems draft-prakash-aip-02 / Network Working Group S. Prakash Internet-Draft Independent Intended status: Standards Track 10 October 2026 Expires: 13 April 2027 Agent Identity Protocol (AIP): Verifiable Delegation for AI Agent Systems draft-prakash-aip-02 / This document specifies the Agent Identity Protocol (AIP), which conveys delegated authority along a chain of AI agents so that a relying party can verify, from the token and the issuer's public key, who granted the authority, through which agents it passed, and that no hop widened what it received. / A JWT chain is the links in order, each a JWS Compact Serialization [RFC7515] of a JWT [RFC7519], joined by the tilde character: / The protected header of every link MUST contain alg \"EdDSA\" and typ \"aip-link+jwt\": / The Biscuit encoding uses Biscuit tokens [BISCUIT] with append-only blocks and Datalog policy. Block 0 is L0 and is signed by the root key. / This Internet-Draft will expire on 13 April 2027. / Moved to the IETF stream as an individual submission with intended status Standards Track. / For this revision only, verifiers MAY accept a single token with header typ \"aip+jwt\" and the draft-01 claims (scope, budget_usd, max_depth) as a one-link chain. / This form is deprecated and is expected to be removed in a later revision. / Network Working Group S. Prakash Internet-Draft Independent Intended status: Standards Track 10 October 2026 / Change Controller: IETF Prakash Expires 13 April 2027 Page 31 Internet-Draft AIP October 2026 / separately (Section 4.4). Prakash Expires 13 April 2027 [Page 8] Internet-Draft AIP October 2026 / the JWT chain encoding; NOT MET in the Biscuit encoding. In the JWT chain / Identifiers aip:key:ed25519: Self-certifying identifiers derive identity from the public key itself. They are suitable / The Model Context Protocol (MCP) [MCP] and the Agent2Agent protocol (A2A) [A2A] define how agents and tools connect. / Neither carries a verifiable record of authority as it passes through several agents. / The AI Identity Management System framework [I-D.ietf-wimse-aims] describes how agents obtain identifiers and credentials from the WIMSE architecture and how OAuth 2.0 mechanisms, including token exchange [RFC8693], transaction tokens [I-D.ietf-oauth-transaction-tokens], and identity and authorization chaining across domains [I-D.ietf-oauth-identity-chaining], apply to agent authorization. In those mechanisms, narrowing is done by an authorization server or token service that evaluates its policy and issues a new token. The holder does not narrow its own token. Some hops have no such server. / The relying party at the end of such a chain then needs to check, without calling back to the origin, that each hop narrowed or kept what it received. AIP specifies that check. / A verifier presented with an AIP token MUST perform steps V1 through V7 before treating any identity or capability asserted by the token as established. V1 MUST complete before any other step reads link content. The remaining steps MAY be performed in any order or interleaved / Nothing in a delegation chain records how much of a ceiling has been consumed, and a verifier evaluating a single request cannot know. Enforcement of actual spend against a ceiling is out of band, and is the responsibility of the orchestration platform at dispatch time. Implementations MUST NOT present ceiling verification as spend enforcement. A chain that verifies establishes that no hop authorized more than it held. It does not establish that the authorized amount remains available. / It does not establish that the party presenting the chain is the party the leaf was delegated to. / Implementations MUST NOT describe AIP verification as authenticating the presenter. / The [BISCUIT] reference is pinned to tag v3.3 of the Biscuit specification.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://datatracker.ietf.org/doc/draft-prakash-aip/",
     "claim": "S. Prakash, *draft-prakash-aip — Agent Identity Protocol (AIP): Verifiable Delegation for AI Agent Systems (IETF Datatracker)*, checked 2026-10-31",
     "date": null,
     "quote": "This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. | | | | | --- | --- | --- | | Document | Type | Active Internet-Draft (individual) | | Author | | Sunil Prakash | | Last updated | 2026-10-10 | / Active Internet-Draft (individual) | | Author | | Sunil Prakash | | Last updated | 2026-10-10 | | RFC stream | | (None) / from draft-prakash-aip-01 * Moved to the IETF stream as an individual submission with intended",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://datatracker.ietf.org/doc/html/draft-prakash-aip-02",
     "claim": "S. Prakash, *Agent Identity Protocol (AIP): Verifiable Delegation for AI Agent Systems (draft-prakash-aip-02 HTML)*, checked 2026-10-31",
     "date": null,
     "quote": "Intended status: Standards Track / fields: Prakash Expires 13 April 2027 [Page 6] Internet-Draft AIP October 2026 +================+===================+=====================+ | / \"JSON Web Token (JWT)\", RFC 7519,, < >. RFC7800 Jones, M., Bradley, J., and / extends.¶ ## Author's Address Sunil Prakash Independent Email: [email redacted] URI: Datatracker draft-prakash-aip-02 Active Internet-Draft / ¶ Self-certifying identifiers derive identity from the public key itself. They are suitable for / Copyright (c) 2026 IETF Trust and the persons identified as the document authors.",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://raw.githubusercontent.com/biscuit-auth/biscuit/master/SPECIFICATIONS.md",
     "claim": "Biscuit Authorization, *Biscuit Specification: A Bearer Token with Offline Attenuation and Decentralized Verification*, fetched 2026-11-12",
     "date": null,
     "quote": "# Biscuit, a bearer token with offline attenuation and decentralized verification",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://www.rfc-editor.org/rfc/rfc7519.html",
     "claim": "M. Jones, J. Bradley, and N. Sakimura, *RFC 7519: JSON Web Token (JWT)*, May 2015",
     "date": null,
     "quote": "JSON Web Token (JWT) is a compact, URL-safe means of representing",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-wimse-aims/",
     "claim": "IETF Datatracker, *draft-ietf-wimse-aims — AI Identity Management System (IETF Datatracker)*, checked 2026-11-08",
     "date": null,
     "quote": "Active Internet-Draft (wimse WG)",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Current : the current protocol version, which is ready for use and may continue to receive backwards compatible changes.",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://aaif.io/blog/a2a-joins-aaif",
     "claim": "Agentic AI Foundation, *A2A joins AAIF's open agentic stack*, published 2026-08-17; modified 2026-09-24",
     "date": null,
     "quote": "A2A v1.0, the first stable specification, shipped in March 2026.",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://www.ietf.org/archive/id/draft-sweeney-wimse-credential-delegation-02.txt",
     "claim": "K. Sweeney, *Credential Delegation Protocol for AI Agents in Multi-System Environments (draft-sweeney-wimse-credential-delegation-02)*, 30 October 2026",
     "date": null,
     "quote": "Intended status: Standards Track",
     "ref": 9
    }
   ],
   "summary_md": "**Agent Identity Protocol (AIP): Verifiable Delegation for AI Agent Systems** (`draft-prakash-aip`) is individual Internet-Draft `draft-prakash-aip-02` by S. Prakash, intended status Standards Track. It conveys delegated authority along a chain of AI agents so that a relying party can verify, from the token and the issuer's public key, who granted the authority, through which agents it passed, and that no hop widened what it received. A JWT chain is the links in order, each a JWS Compact Serialization of a JWT, joined by the tilde character. The protected header of every link MUST contain alg `EdDSA` and typ `aip-link+jwt`. The Biscuit encoding uses Biscuit tokens with append-only blocks and Datalog policy. Block 0 is L0 and is signed by the root key. `draft-prakash-aip-02` is an Active Internet-Draft (individual), last updated 2026-10-10. This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. This Internet-Draft will expire on 13 April 2027. While Appendix B's changelog notes a move from the Independent stream to the IETF stream as an individual submission with intended status Standards Track, IETF Datatracker lists the unadopted draft with RFC stream (None). For this revision only, verifiers MAY accept a single token with header typ `aip+jwt` and the draft-01 claims as a one-link chain. This form is deprecated and is expected to be removed in a later revision.",
   "part_of": null,
   "group": null,
   "use_cases": [
    "delegate-user-authority",
    "prove-agent-identity"
   ],
   "audience": [
    "agent-builder",
    "standards-body"
   ],
   "pairs_with": [
    "wimse-aims",
    "mcp",
    "a2a",
    "credential-delegation-protocol-wimse"
   ],
   "prerequisites": [],
   "dispute": null,
   "last_verified": "2026-11-12",
   "history": [
    {
     "date": "2026-10-16",
     "note": "initial candidate record from primary source (https://datatracker.ietf.org/doc/html/draft-prakash-aip-02)"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-prakash-aip"
    }
   ],
   "ietf_tracker": {
    "doc": "draft-prakash-aip",
    "rev": "02",
    "state": "active",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-10-10",
    "expires_utc": "2027-04-13",
    "as_of": "2026-10-31",
    "source": "https://datatracker.ietf.org/doc/draft-prakash-aip/",
    "source_label": "per IETF Datatracker"
   },
   "hatnote_md": "This page is about Agent Identity Protocol (AIP): Verifiable Delegation for AI Agent Systems (draft-prakash-aip), an individual Internet-Draft by S. Prakash defining attenuated JWT and Biscuit delegation chains. For P. Singla's did:aip identity and capability-grant draft sharing the AIP name, see [Agent Identity Protocol](/protocols/aip/). For China's national agent interconnection standard series and its accompanying Agent Interconnection Protocol (AIP), see [GB/Z 185 Agent Interconnection](/protocols/gbz-185-agent-interconnection/).",
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "This page is about Agent Identity Protocol (AIP): Verifiable Delegation for AI Agent Systems (draft-prakash-aip), an individual Internet-Draft by S. Prakash defining attenuated JWT and Biscuit delegation chains. For P. Singla's did:aip identity and capability-grant draft sharing the AIP name, see [Agent Identity Protocol](/protocols/aip/). For China's national agent interconnection standard series and its accompanying Agent Interconnection Protocol (AIP), see [GB/Z 185 Agent Interconnection](/protocols/gbz-185-agent-interconnection/). [1]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Agent Identity Protocol (AIP): Verifiable Delegation for AI Agent Systems** (`draft-prakash-aip`) is individual Internet-Draft `draft-prakash-aip-02` by S. Prakash, intended status Standards Track. [1] It conveys delegated authority along a chain of AI agents so that a relying party can verify, from the token and the issuer's public key, who granted the authority, through which agents it passed, and that no hop widened what it received. [1] A JWT chain is the links in order, each a JWS Compact Serialization of a JWT, joined by the tilde character. The protected header of every link MUST contain alg `EdDSA` and typ `aip-link+jwt`. [1] The Biscuit encoding uses Biscuit tokens with append-only blocks and Datalog policy. Block 0 is L0 and is signed by the root key. [1] `draft-prakash-aip-02` is an Active Internet-Draft (individual), last updated 2026-10-10. This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. [2] This Internet-Draft will expire on 13 April 2027. [1] While Appendix B's changelog notes a move from the Independent stream to the IETF stream as an individual submission with intended status Standards Track, IETF Datatracker lists the unadopted draft with RFC stream (None). [1][2] For this revision only, verifiers MAY accept a single token with header typ `aip+jwt` and the draft-01 claims as a one-link chain. This form is deprecated and is expected to be removed in a later revision. [1]",
   "v05_identity_sentence_md": "**Agent Identity Protocol (AIP): Verifiable Delegation for AI Agent Systems** (`draft-prakash-aip`) is individual Internet-Draft `draft-prakash-aip-02` by S. Prakash, intended status Standards Track. [1] It conveys delegated authority along a chain of AI agents so that a relying party can verify, from the token and the issuer's public key, who granted the authority, through which agents it passed, and that no hop widened what it received. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Permit](/category/permit/) (`permit`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "S. Prakash (Independent submission to the IETF Network Working Group) [1][2]"
    },
    {
     "label": "Governed by",
     "value_md": "Individual IETF Internet-Draft (`draft-prakash-aip-02`, unadopted individual submission with Datatracker RFC stream listed as None; Appendix B notes an intended move from the Independent stream to an IETF-stream individual submission) [1][2]"
    },
    {
     "label": "Track",
     "value_md": "IETF Internet-Draft (Standards Track) [3]"
    },
    {
     "label": "Status",
     "value_md": "Internet-Draft, Intended Status: Standards Track; expires 13 April 2027 [1][3]"
    },
    {
     "label": "Version",
     "value_md": "`draft-prakash-aip-02` (Published 10 October 2026; expires 13 April 2027) [1][3]"
    },
    {
     "label": "Wire format",
     "value_md": "Encoding-neutral delegation chain serialized as either a JSON Web Token (JWT) chain (with `RFC 8785` JCS) or a Biscuit v3.3 token with Datalog policy [1][3]"
    },
    {
     "label": "Specification",
     "value_md": "https://datatracker.ietf.org/doc/html/draft-prakash-aip-02 [3]"
    },
    {
     "label": "Found at",
     "value_md": "HTTPS well-known resolution for `aip:web:<domain>/<path>` identity documents; self-certifying `aip:key:ed25519:<multibase-encoded-public-key>` identifiers; protocol bindings for MCP, A2A, and generic HTTP [1][3]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust Legal Provisions (BCP 78) [3]"
    },
    {
     "label": "IETF state",
     "value_md": "`draft-prakash-aip-02` · **Active Internet-Draft** (expires 2027-04-13) · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-prakash-aip/))"
    }
   ],
   "v05_problem_md": "The Model Context Protocol (MCP) and the Agent2Agent protocol (A2A) define how agents and tools connect. Neither carries a verifiable record of authority as it passes through several agents. [1] In the AI Identity Management System framework's OAuth mechanisms, narrowing is done by an authorization server or token service that issues a new token. The holder does not narrow its own token. Some hops have no such server. [1] AIP specifies the check, made without calling back to the origin, that each hop narrowed or kept what it received. [1] A verifier presented with an AIP token MUST perform steps V1 through V7 before treating any identity or capability asserted by the token as established. V1 MUST complete before any other step reads link content. The remaining steps MAY be performed in any order or interleaved. [1] Nothing in a delegation chain records how much of a ceiling has been consumed. Implementations MUST NOT present ceiling verification as spend enforcement. [1] Verification does not establish that the party presenting the chain is the party the leaf was delegated to. Implementations MUST NOT describe AIP verification as authenticating the presenter. [1]",
   "v05_mechanism_delta_md": "AIP specifies the check, made without calling back to the origin, that each hop narrowed or kept what it received. [1] A verifier presented with an AIP token MUST perform steps V1 through V7 before treating any identity or capability asserted by the token as established. V1 MUST complete before any other step reads link content. The remaining steps MAY be performed in any order or interleaved. [1]",
   "v05_scope_boundary_md": "Nothing in a delegation chain records how much of a ceiling has been consumed. Implementations MUST NOT present ceiling verification as spend enforcement. [1] Verification does not establish that the party presenting the chain is the party the leaf was delegated to. Implementations MUST NOT describe AIP verification as authenticating the presenter. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "Biscuit authorization token specification",
      "spec_or_rfc": "Biscuit v3.3",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "One encoding of the attenuated chain is a Biscuit token with a Datalog policy, the other is a JWT chain, and agent identifiers are aip:web or aip:key. [1][3][4]"
     },
     {
      "name": "JSON Web Token (JWT, RFC 7519)",
      "spec_or_rfc": "RFC 7519",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "One normative encoding is a chain of JWTs and the other is a Biscuit token with a Datalog policy, and agent identifiers are aip:web or aip:key. [3][5]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "wimse-aims",
      "target_name": "AI Identity Management System (AIMS)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "AIMS covers hops that have an authorization server and a WIMSE identifier, while this chain encodes agent-to-agent subdelegation as a JWT chain or a Biscuit where no authorization server sits on the hop. [3][6]"
     },
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "The draft defines an MCP binding so the receiving agent can verify the JWT or Biscuit attenuation chain, and MCP remains the tool protocol. [3][7]"
     },
     {
      "target_id": "a2a",
      "target_name": "Agent2Agent Protocol (A2A)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "The draft defines an A2A binding so the receiving agent can verify the JWT or Biscuit chain, whose identifiers are aip:web or aip:key, without an authorization server on the hop. [3][8]"
     },
     {
      "target_id": "credential-delegation-protocol-wimse",
      "target_name": "Credential Delegation Protocol for AI Agents in Multi-System Environments",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "The WIMSE credential-delegation draft profiles RFC 8693, DPoP (RFC 9449), RAR (RFC 9396), and CIBA inside a trust domain, while this chain is a JWT or Biscuit encoding with aip:web or aip:key identifiers. [3][9]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "aagv",
     "target_name": "Agentic Authority Graph Validation",
     "relation_label": "Complements",
     "delta": "The delegation-chain draft publishes one attenuating capability chain at `/.well-known/aip/<path>.json`, while AAGV validates an out-of-band JSON snapshot and returns INVALID, INDETERMINATE, VALID_OPEN, or VALID_CLOSED.",
     "item_md": "**[Agentic Authority Graph Validation](/protocols/aagv/)** (Complements) — The delegation-chain draft publishes one attenuating capability chain at `/.well-known/aip/<path>.json`, while AAGV validates an out-of-band JSON snapshot and returns INVALID, INDETERMINATE, VALID_OPEN, or VALID_CLOSED."
    },
    {
     "item_md": "**[Permit protocols](/category/permit/)** — Category index for `permit` standards."
    }
   ],
   "v05_compiled_md": "---\nid: aip-delegation-chain\ntitle: \"Agent Identity Protocol (AIP): Verifiable Delegation for AI Agent Systems\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: permit\nform: document-format\nwire_archetype: identity_auth_crypto\nspec_url: https://datatracker.ietf.org/doc/html/draft-prakash-aip-02\nlast_checked: 2026-11-12\n---\n\n# Agent Identity Protocol (AIP): Verifiable Delegation for AI Agent Systems\n\n**Category:** [Permit](/category/permit/) (`permit`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-11-12\n\n> *This page is about Agent Identity Protocol (AIP): Verifiable Delegation for AI Agent Systems (draft-prakash-aip), an individual Internet-Draft by S. Prakash defining attenuated JWT and Biscuit delegation chains. For P. Singla's did:aip identity and capability-grant draft sharing the AIP name, see [Agent Identity Protocol](/protocols/aip/). For China's national agent interconnection standard series and its accompanying Agent Interconnection Protocol (AIP), see [GB/Z 185 Agent Interconnection](/protocols/gbz-185-agent-interconnection/). [1]*\n\n**Agent Identity Protocol (AIP): Verifiable Delegation for AI Agent Systems** (`draft-prakash-aip`) is individual Internet-Draft `draft-prakash-aip-02` by S. Prakash, intended status Standards Track. [1] It conveys delegated authority along a chain of AI agents so that a relying party can verify, from the token and the issuer's public key, who granted the authority, through which agents it passed, and that no hop widened what it received. [1] A JWT chain is the links in order, each a JWS Compact Serialization of a JWT, joined by the tilde character. The protected header of every link MUST contain alg `EdDSA` and typ `aip-link+jwt`. [1] The Biscuit encoding uses Biscuit tokens with append-only blocks and Datalog policy. Block 0 is L0 and is signed by the root key. [1] `draft-prakash-aip-02` is an Active Internet-Draft (individual), last updated 2026-10-10. This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. [2] This Internet-Draft will expire on 13 April 2027. [1] While Appendix B's changelog notes a move from the Independent stream to the IETF stream as an individual submission with intended status Standards Track, IETF Datatracker lists the unadopted draft with RFC stream (None). [1][2] For this revision only, verifiers MAY accept a single token with header typ `aip+jwt` and the draft-01 claims as a one-link chain. This form is deprecated and is expected to be removed in a later revision. [1]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Permit](/category/permit/) (`permit`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | S. Prakash (Independent submission to the IETF Network Working Group) [1][2] |\n| **Governed by** | Individual IETF Internet-Draft (`draft-prakash-aip-02`, unadopted individual submission with Datatracker RFC stream listed as None; Appendix B notes an intended move from the Independent stream to an IETF-stream individual submission) [1][2] |\n| **Track** | IETF Internet-Draft (Standards Track) [3] |\n| **Status** | Internet-Draft, Intended Status: Standards Track; expires 13 April 2027 [1][3] |\n| **Version** | `draft-prakash-aip-02` (Published 10 October 2026; expires 13 April 2027) [1][3] |\n| **Wire format** | Encoding-neutral delegation chain serialized as either a JSON Web Token (JWT) chain (with `RFC 8785` JCS) or a Biscuit v3.3 token with Datalog policy [1][3] |\n| **Specification** | https://datatracker.ietf.org/doc/html/draft-prakash-aip-02 [3] |\n| **Found at** | HTTPS well-known resolution for `aip:web:<domain>/<path>` identity documents; self-certifying `aip:key:ed25519:<multibase-encoded-public-key>` identifiers; protocol bindings for MCP, A2A, and generic HTTP [1][3] |\n| **Licence** | IETF Trust Legal Provisions (BCP 78) [3] |\n| **IETF state** | `draft-prakash-aip-02` · **Active Internet-Draft** (expires 2027-04-13) · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-prakash-aip/)) |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nThe Model Context Protocol (MCP) and the Agent2Agent protocol (A2A) define how agents and tools connect. Neither carries a verifiable record of authority as it passes through several agents. [1] In the AI Identity Management System framework's OAuth mechanisms, narrowing is done by an authorization server or token service that issues a new token. The holder does not narrow its own token. Some hops have no such server. [1] AIP specifies the check, made without calling back to the origin, that each hop narrowed or kept what it received. [1] A verifier presented with an AIP token MUST perform steps V1 through V7 before treating any identity or capability asserted by the token as established. V1 MUST complete before any other step reads link content. The remaining steps MAY be performed in any order or interleaved. [1] Nothing in a delegation chain records how much of a ceiling has been consumed. Implementations MUST NOT present ceiling verification as spend enforcement. [1] Verification does not establish that the party presenting the chain is the party the leaf was delegated to. Implementations MUST NOT describe AIP verification as authenticating the presenter. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **Biscuit authorization token specification** | `Biscuit v3.3` | Profiles classic standard | One encoding of the attenuated chain is a Biscuit token with a Datalog policy, the other is a JWT chain, and agent identifiers are aip:web or aip:key. [1][3][4] |\n| **JSON Web Token (JWT, RFC 7519)** | `RFC 7519` | Profiles classic standard | One normative encoding is a chain of JWTs and the other is a Biscuit token with a Datalog policy, and agent identifiers are aip:web or aip:key. [3][5] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[AI Identity Management System (AIMS)](/protocols/wimse-aims/)** | Complements | AIMS covers hops that have an authorization server and a WIMSE identifier, while this chain encodes agent-to-agent subdelegation as a JWT chain or a Biscuit where no authorization server sits on the hop. [3][6] |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | The draft defines an MCP binding so the receiving agent can verify the JWT or Biscuit attenuation chain, and MCP remains the tool protocol. [3][7] |\n| **[Agent2Agent Protocol (A2A)](/protocols/a2a/)** | Complements | The draft defines an A2A binding so the receiving agent can verify the JWT or Biscuit chain, whose identifiers are aip:web or aip:key, without an authorization server on the hop. [3][8] |\n| **[Credential Delegation Protocol for AI Agents in Multi-System Environments](/protocols/credential-delegation-protocol-wimse/)** | Peer alternative | The WIMSE credential-delegation draft profiles RFC 8693, DPoP (RFC 9449), RAR (RFC 9396), and CIBA inside a trust domain, while this chain is a JWT or Biscuit encoding with aip:web or aip:key identifiers. [3][9] |\n\n---\n\n## See also\n\n- **[Agentic Authority Graph Validation](/protocols/aagv/)** *(Complements)* — The delegation-chain draft publishes one attenuating capability chain at `/.well-known/aip/<path>.json`, while AAGV validates an out-of-band JSON snapshot and returns INVALID, INDETERMINATE, VALID_OPEN, or VALID_CLOSED.\n- **Category:** [Permit protocols](/category/permit/)\n\n---\n\n## References\n\n1. S. Prakash, *Agent Identity Protocol (AIP): Verifiable Delegation for AI Agent Systems (draft-prakash-aip-02)* (checked 2026-10-31) — <https://www.ietf.org/archive/id/draft-prakash-aip-02.txt>\n2. S. Prakash, *draft-prakash-aip — Agent Identity Protocol (AIP): Verifiable Delegation for AI Agent Systems (IETF Datatracker)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/draft-prakash-aip/>\n3. S. Prakash, *Agent Identity Protocol (AIP): Verifiable Delegation for AI Agent Systems (draft-prakash-aip-02 HTML)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/html/draft-prakash-aip-02>\n4. Biscuit Authorization, *Biscuit Specification: A Bearer Token with Offline Attenuation and Decentralized Verification* (fetched 2026-11-12) — <https://raw.githubusercontent.com/biscuit-auth/biscuit/master/SPECIFICATIONS.md>\n5. M. Jones, J. Bradley, and N. Sakimura, *RFC 7519: JSON Web Token (JWT)* (May 2015) — <https://www.rfc-editor.org/rfc/rfc7519.html>\n6. IETF Datatracker, *draft-ietf-wimse-aims — AI Identity Management System (IETF Datatracker)* (checked 2026-11-08) — <https://datatracker.ietf.org/doc/draft-ietf-wimse-aims/>\n7. Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation* (2026-07-28) — <https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning>\n8. Agentic AI Foundation, *A2A joins AAIF's open agentic stack* (published 2026-08-17; modified 2026-09-24) — <https://aaif.io/blog/a2a-joins-aaif>\n9. K. Sweeney, *Credential Delegation Protocol for AI Agents in Multi-System Environments (draft-sweeney-wimse-credential-delegation-02)* (30 October 2026) — <https://www.ietf.org/archive/id/draft-sweeney-wimse-credential-delegation-02.txt>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "credential-delegation-protocol-wimse",
   "name": "Credential Delegation Protocol for AI Agents in Multi-System Environments",
   "acronym": "",
   "aliases": [
    "draft-sweeney-wimse-credential-delegation",
    "Cred Credential Delegation Protocol"
   ],
   "collisions": [],
   "step": "permit",
   "parties": [
    "agent-human",
    "agent-site"
   ],
   "form": "endpoint",
   "track": "ietf",
   "scope": "general",
   "question": "How can a human user delegate scoped, attenuated, revocable credentials to AI agents across multiple service providers without exposing the underlying OAuth tokens to the agents?",
   "analog": "OAuth 2.0 Token Exchange profile for agent delegation",
   "origin": {
    "org": "K. Sweeney (individual IETF submission, WIMSE)",
    "date": "2026-07-28"
   },
   "governance": "Individual Internet-Draft submitted to the IETF WIMSE Working Group mailing list; source on GitHub (cred-ninja/protocol)",
   "native_status": "Internet-Draft, Intended status: Standards Track; expires 3 May 2027",
   "phase": "draft",
   "implementation": "prototype",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "version": {
    "label": "draft-sweeney-wimse-credential-delegation-02",
    "date": "2026-10-30"
   },
   "spec_url": "https://www.ietf.org/archive/id/draft-sweeney-wimse-credential-delegation-02.txt",
   "discovery": {
    "mechanism": "Delegation Server endpoints within a trust domain. Clients send Cred-Protocol-Version. No well-known discovery path is defined.",
    "path": null
   },
   "probe": {
    "method": "NONE",
    "path": "",
    "parse": "",
    "on_absent": "No externally observable site-level signal described; treat support as unknown"
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.ietf.org/archive/id/draft-sweeney-wimse-credential-delegation-02.txt",
     "claim": "K. Sweeney, *Credential Delegation Protocol for AI Agents in Multi-System Environments (draft-sweeney-wimse-credential-delegation-02)*, 30 October 2026",
     "date": null,
     "quote": "K. Sweeney … Intended status: Standards Track … draft-sweeney-wimse-credential-delegation-02 … This document specifies the Credential Delegation Protocol: a profile of OAuth 2.0 Token Exchange (RFC 8693), Demonstrating Proof-of- … Possession (RFC 9449), Rich Authorization Requests (RFC 9396), and Client-Initiated Backchannel Authentication (OpenID Connect CIBA) / Figure 1: Protocol Architecture / 1. Generates ephemeral did:key … 2. Authenticates via JWT Bearer (RFC 7523) … 4. Receives DT (DPoP-bound, capability-shaped) / The Agent presents a valid DT and DPoP proof to the DS's /exercise endpoint. … Retrieves the credential from the Vault using the opaque credential_handle … Returns only the API response … The raw credential MUST NOT appear in any agent-facing response. / 30 October 2026 … Expires: 3 May 2027 … draft-sweeney-wimse-credential-delegation-02 … The canonical protocol version for this draft is 0.1.0. … Cred-Protocol-Version … Changes from -01 … MUST NOT be carried in act / Source for this draft and an issue tracker can be found at https://github.com/cred-ninja/protocol. / Discussion of this document takes place on the Workload Identity in Multi System Environments (WIMSE) Working Group mailing list / This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79. / Intended status: Standards Track / This Internet-Draft will expire on 3 May 2027. / 30 October 2026 … draft-sweeney-wimse-credential-delegation-02 / The canonical protocol version for this draft is 0.1.0. / This document specifies the Credential Delegation Protocol: a profile of OAuth 2.0 Token Exchange (RFC 8693), Demonstrating Proof-of- … Possession (RFC 9449), Rich Authorization Requests (RFC 9396), and Client-Initiated Backchannel Authentication (OpenID Connect CIBA) / Credential Delegation Protocol for AI Agents in Multi-System Environments draft-sweeney-wimse-credential-delegation-02 / 5. Exercises credentials via DS /exercise endpoint / Capabilities are expressed as RFC 9396 authorization_details objects: / WIMSE K. Sweeney Internet-Draft 30 October 2026 Intended status: Standards Track Expires: 3 May 2027 Credential Delegation Protocol for AI Agents in Multi-System Environments draft-sweeney-wimse-credential-delegation-02 / Copyright (c) 2026 IETF Trust and the persons identified as the document authors. / OAuth 2.0 [RFC6749] solved human-to-service authorization. … This model assumes a human present at a browser for the consent ceremony. / Existing OAuth 2.0 extensions address individual aspects of this problem (token exchange, proof-of-possession, and structured authorization) but no current specification defines how these mechanisms compose into a coherent credential delegation framework for AI agents. / The protocol defines: agent identity lifecycle management using ephemeral key pairs; capability-shaped delegation tokens bound to specific operations and resources / credential wrapping semantics that prevent exposure of underlying OAuth tokens to agents / This document does not define new token formats, new OAuth grant types, or modifications to existing authorization server behavior. / Enforcing a revoked delegation across Delegation Servers or across administrative domains is out of scope for this document.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://github.com/cred-ninja/protocol",
     "claim": "cred-ninja/protocol (GitHub), *cred-ninja/protocol GitHub repository metadata*, checked 2026-10-31",
     "date": null,
     "quote": "\"full_name\": \"cred-ninja/protocol\",",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://www.rfc-editor.org/rfc/rfc8693.html",
     "claim": "M. Jones, A. Nadalin, B. Campbell, Ed., J. Bradley, and C. Mortimore, *RFC 8693: OAuth 2.0 Token Exchange*, January 2020",
     "date": null,
     "quote": "This specification defines a protocol for an HTTP- and JSON-based",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://www.rfc-editor.org/rfc/rfc9449.html",
     "claim": "D. Fett, B. Campbell, J. Bradley, T. Lodderstedt, M. Jones, and D. Waite, *RFC 9449: OAuth 2.0 Demonstrating Proof of Possession (DPoP)*, September 2023",
     "date": null,
     "quote": "This document describes a mechanism for sender-constraining OAuth 2.0",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://www.rfc-editor.org/rfc/rfc9396.html",
     "claim": "T. Lodderstedt, J. Richer, and B. Campbell, *RFC 9396: OAuth 2.0 Rich Authorization Requests*, May 2023",
     "date": null,
     "quote": "This document specifies a new parameter authorization_details that is",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://openid.net/specs/openid-client-initiated-backchannel-authentication-core-1_0.html",
     "claim": "OpenID Foundation, *OpenID Connect Client-Initiated Backchannel Authentication Flow - Core 1.0*, 2021-09-01",
     "date": "2021-09-01",
     "quote": "1.1. Requirements Notation and Conventions",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-wimse-aims/",
     "claim": "IETF Datatracker, *draft-ietf-wimse-aims — AI Identity Management System (IETF Datatracker)*, checked 2026-11-08",
     "date": null,
     "quote": "Active Internet-Draft (wimse WG)",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://datatracker.ietf.org/doc/html/draft-prakash-aip-02",
     "claim": "S. Prakash, *Agent Identity Protocol (AIP): Verifiable Delegation for AI Agent Systems (draft-prakash-aip-02 HTML)*, checked 2026-10-31",
     "date": null,
     "quote": "fields: Prakash Expires 13 April 2027 [Page 6] Internet-Draft AIP October 2026 +================+===================+=====================+ |",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://datatracker.ietf.org/doc/html/draft-nelson-agent-delegation-receipts-15",
     "claim": "R. Nelson (Authproof), *Agent Delegation Receipts (draft-nelson-agent-delegation-receipts-15 HTML)*, checked 2026-10-31",
     "date": null,
     "quote": "behavior. Nelson Expires 24 April 2027 [Page 1] Internet-Draft Agent Delegation Receipts October 2026",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://datatracker.ietf.org/doc/draft-carleton-workload-authz-grant/",
     "claim": "Paul Carleton (Anthropic), Nick Steele (OpenAI), Aaron Parecki (Okta), Arndt Schwenkschuster (Defakto Security), and Brian Campbell (Ping Identity), *draft-carleton-workload-authz-grant — Workload Authorization Grant (IETF Datatracker)*, checked 2026-11-08",
     "date": null,
     "quote": "Active Internet-Draft (individual)",
     "ref": 10
    }
   ],
   "summary_md": "**Credential Delegation Protocol for AI Agents in Multi-System Environments** (`draft-sweeney-wimse-credential-delegation-02`) is an individual Internet-Draft by K. Sweeney. Its intended status is Standards Track. It specifies a profile of OAuth 2.0 Token Exchange (RFC 8693), Demonstrating Proof-of-Possession (RFC 9449), Rich Authorization Requests (RFC 9396), and Client-Initiated Backchannel Authentication (OpenID Connect CIBA) so human users can delegate scoped, attenuated credentials to AI agents. Figure 1 has the agent generate an ephemeral `did:key`, authenticate via JWT Bearer (RFC 7523), and receive a DT that is DPoP-bound and capability-shaped. The agent presents a valid delegation token and a DPoP proof to the delegation server `/exercise` endpoint. The server retrieves the credential from the vault with the opaque `credential_handle` and returns only the API response. The raw credential MUST NOT appear in any agent-facing response. `draft-sweeney-wimse-credential-delegation-02` is dated 30 October 2026 and expires on 3 May 2027. The canonical protocol version is `0.1.0`, carried in the `Cred-Protocol-Version` header. Changes from -01 say WAG identity travels only as receipt evidence and MUST NOT be carried in `act`.",
   "part_of": null,
   "group": null,
   "use_cases": [
    "delegate-user-authority",
    "prove-agent-identity",
    "audit-agent-actions"
   ],
   "audience": [
    "agent-builder",
    "platform",
    "standards-body"
   ],
   "pairs_with": [
    "wimse-aims",
    "aip-delegation-chain",
    "agent-delegation-receipts",
    "workload-authz-grant"
   ],
   "prerequisites": [],
   "dispute": null,
   "last_verified": "2026-11-12",
   "history": [
    {
     "date": "2026-10-16",
     "note": "initial candidate record from primary source (https://datatracker.ietf.org/doc/html/draft-sweeney-wimse-credential-delegation-01)"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-sweeney-wimse-credential-delegation"
    }
   ],
   "ietf_tracker": {
    "doc": "draft-sweeney-wimse-credential-delegation",
    "rev": "02",
    "state": "active",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-10-30",
    "expires_utc": "2027-05-03",
    "as_of": "2026-11-07",
    "source": "https://datatracker.ietf.org/doc/draft-sweeney-wimse-credential-delegation/",
    "source_label": "per IETF Datatracker"
   },
   "hatnote_md": "",
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": null,
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Credential Delegation Protocol for AI Agents in Multi-System Environments** (`draft-sweeney-wimse-credential-delegation-02`) is an individual Internet-Draft by K. Sweeney. Its intended status is Standards Track. It specifies a profile of OAuth 2.0 Token Exchange (RFC 8693), Demonstrating Proof-of-Possession (RFC 9449), Rich Authorization Requests (RFC 9396), and Client-Initiated Backchannel Authentication (OpenID Connect CIBA) so human users can delegate scoped, attenuated credentials to AI agents. [1] Figure 1 has the agent generate an ephemeral `did:key`, authenticate via JWT Bearer (RFC 7523), and receive a DT that is DPoP-bound and capability-shaped. [1] The agent presents a valid delegation token and a DPoP proof to the delegation server `/exercise` endpoint. The server retrieves the credential from the vault with the opaque `credential_handle` and returns only the API response. The raw credential MUST NOT appear in any agent-facing response. [1] `draft-sweeney-wimse-credential-delegation-02` is dated 30 October 2026 and expires on 3 May 2027. The canonical protocol version is `0.1.0`, carried in the `Cred-Protocol-Version` header. Changes from -01 say WAG identity travels only as receipt evidence and MUST NOT be carried in `act`. [1]",
   "v05_identity_sentence_md": "**Credential Delegation Protocol for AI Agents in Multi-System Environments** (`draft-sweeney-wimse-credential-delegation-02`) is an individual Internet-Draft by K. Sweeney. Its intended status is Standards Track. It specifies a profile of OAuth 2.0 Token Exchange (RFC 8693), Demonstrating Proof-of-Possession (RFC 9449), Rich Authorization Requests (RFC 9396), and Client-Initiated Backchannel Authentication (OpenID Connect CIBA) so human users can delegate scoped, attenuated credentials to AI agents. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Permit](/category/permit/) (`permit`)"
    },
    {
     "label": "Form",
     "value_md": "Endpoint (`endpoint`)"
    },
    {
     "label": "Originated by",
     "value_md": "K. Sweeney (cred-ninja). Source and issue tracker: https://github.com/cred-ninja/protocol [1][2]"
    },
    {
     "label": "Governed by",
     "value_md": "Individual IETF Internet-Draft. Discussion takes place on the Workload Identity in Multi System Environments (WIMSE) Working Group mailing list. [1]"
    },
    {
     "label": "Track",
     "value_md": "IETF Internet-Draft (Standards Track) [1]"
    },
    {
     "label": "Status",
     "value_md": "Internet-Draft, Intended status: Standards Track; expires 3 May 2027 [1]"
    },
    {
     "label": "Version",
     "value_md": "Internet-Draft `draft-sweeney-wimse-credential-delegation-02` (30 October 2026); canonical protocol version `0.1.0` [1]"
    },
    {
     "label": "Wire format",
     "value_md": "Profile of OAuth 2.0 Token Exchange (RFC 8693), Demonstrating Proof-of-Possession (RFC 9449), Rich Authorization Requests (RFC 9396), JWT Bearer (RFC 7523), OpenID Connect CIBA, and `did:key` [1]"
    },
    {
     "label": "Specification",
     "value_md": "https://www.ietf.org/archive/id/draft-sweeney-wimse-credential-delegation-02.txt [1]"
    },
    {
     "label": "Found at",
     "value_md": "Delegation Server `/exercise` endpoint; ephemeral `did:key`; JWT Bearer (RFC 7523); `cred_delegation` objects in `authorization_details` [1]"
    },
    {
     "label": "IETF state",
     "value_md": "`draft-sweeney-wimse-credential-delegation-02` · **Active Internet-Draft** (published 30 October 2026; expires 3 May 2027) · Individual submission discussed on the WIMSE WG list [1]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust Legal Provisions (BCP 78) [1]"
    }
   ],
   "v05_problem_md": "OAuth 2.0 solved human-to-service authorization. This model assumes a human present at a browser for the consent ceremony. [1] Existing OAuth 2.0 extensions address token exchange, proof-of-possession, and structured authorization, but no current specification defines how these mechanisms compose into a coherent credential delegation framework for AI agents. [1] The protocol defines agent identity lifecycle management using ephemeral key pairs, and capability-shaped delegation tokens bound to specific operations and resources. [1] It defines credential wrapping semantics that prevent exposure of underlying OAuth tokens to agents. [1] This document does not define new token formats, new OAuth grant types, or modifications to existing authorization server behavior. [1] Enforcing a revoked delegation across Delegation Servers or across administrative domains is out of scope for this document. [1]",
   "v05_mechanism_delta_md": "The protocol defines agent identity lifecycle management using ephemeral key pairs, and capability-shaped delegation tokens bound to specific operations and resources. [1] It defines credential wrapping semantics that prevent exposure of underlying OAuth tokens to agents. [1]",
   "v05_scope_boundary_md": "This document does not define new token formats, new OAuth grant types, or modifications to existing authorization server behavior. [1] Enforcing a revoked delegation across Delegation Servers or across administrative domains is out of scope for this document. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "OAuth 2.0 Token Exchange (RFC 8693)",
      "spec_or_rfc": "RFC 8693",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "The draft profiles RFC 8693 token exchange together with DPoP (RFC 9449), Rich Authorization Requests (RFC 9396), and CIBA, and it defines no new token format or grant type. [1][3]"
     },
     {
      "name": "OAuth 2.0 Demonstrating Proof of Possession (DPoP, RFC 9449)",
      "spec_or_rfc": "RFC 9449",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "The draft profiles DPoP (RFC 9449) for delegated agent credentials and defines no new token format or grant type of its own. [1][4]"
     },
     {
      "name": "OAuth 2.0 Rich Authorization Requests (RAR, RFC 9396)",
      "spec_or_rfc": "RFC 9396",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "Requested authority is profiled with Rich Authorization Requests (RFC 9396), and the draft defines no new grant type. [1][5]"
     },
     {
      "name": "OpenID Connect Client-Initiated Backchannel Authentication (CIBA) Core 1.0",
      "spec_or_rfc": "OpenID CIBA Core 1.0",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "User approval is profiled with OpenID Connect CIBA so the authorization server can reach the user without a browser redirect, and the draft defines no new grant type. [1][6]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "wimse-aims",
      "target_name": "AI Identity Management System (AIMS)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "AIMS assigns the agent one WIMSE identifier and defines no new grant, while this companion profiles RFC 8693, DPoP, RAR, and CIBA for capability-shaped delegation tokens inside a trust domain. [1][7]"
     },
     {
      "target_id": "aip-delegation-chain",
      "target_name": "Agent Identity Protocol (AIP): Verifiable Delegation for AI Agent Systems",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "Prakash's chain is a JWT or Biscuit with aip:web or aip:key identifiers, while this draft profiles RFC 8693 token exchange, DPoP (RFC 9449), and CIBA and defines no new grant type. [1][8]"
     },
     {
      "target_id": "agent-delegation-receipts",
      "target_name": "Agent Delegation Receipts",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "A delegation receipt is a JWS over JCS-canonicalized JSON, or a COSE_Sign1, binding an operator-instruction hash, while this draft profiles RFC 8693, DPoP, and RAR for the delegated credential itself. [1][9]"
     },
     {
      "target_id": "workload-authz-grant",
      "target_name": "Workload Authorization Grant (WAG)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "The Workload Authorization Grant trades one platform-signed JWT at the jwt-bearer grant, while this draft profiles RFC 8693, DPoP (RFC 9449), RAR (RFC 9396), and CIBA and defines no new grant type. [1][10]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Permit protocols](/category/permit/)** — Category index for `permit` standards."
    }
   ],
   "v05_compiled_md": "---\nid: credential-delegation-protocol-wimse\ntitle: \"Credential Delegation Protocol for AI Agents in Multi-System Environments\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: permit\nform: endpoint\nwire_archetype: identity_auth_crypto\nspec_url: https://www.ietf.org/archive/id/draft-sweeney-wimse-credential-delegation-02.txt\nlast_checked: 2026-11-12\n---\n\n# Credential Delegation Protocol for AI Agents in Multi-System Environments\n\n**Category:** [Permit](/category/permit/) (`permit`) · **Form:** Endpoint (`endpoint`) · **Last checked:** 2026-11-12\n\n**Credential Delegation Protocol for AI Agents in Multi-System Environments** (`draft-sweeney-wimse-credential-delegation-02`) is an individual Internet-Draft by K. Sweeney. Its intended status is Standards Track. It specifies a profile of OAuth 2.0 Token Exchange (RFC 8693), Demonstrating Proof-of-Possession (RFC 9449), Rich Authorization Requests (RFC 9396), and Client-Initiated Backchannel Authentication (OpenID Connect CIBA) so human users can delegate scoped, attenuated credentials to AI agents. [1] Figure 1 has the agent generate an ephemeral `did:key`, authenticate via JWT Bearer (RFC 7523), and receive a DT that is DPoP-bound and capability-shaped. [1] The agent presents a valid delegation token and a DPoP proof to the delegation server `/exercise` endpoint. The server retrieves the credential from the vault with the opaque `credential_handle` and returns only the API response. The raw credential MUST NOT appear in any agent-facing response. [1] `draft-sweeney-wimse-credential-delegation-02` is dated 30 October 2026 and expires on 3 May 2027. The canonical protocol version is `0.1.0`, carried in the `Cred-Protocol-Version` header. Changes from -01 say WAG identity travels only as receipt evidence and MUST NOT be carried in `act`. [1]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Permit](/category/permit/) (`permit`) |\n| **Form** | Endpoint (`endpoint`) |\n| **Originated by** | K. Sweeney (cred-ninja). Source and issue tracker: https://github.com/cred-ninja/protocol [1][2] |\n| **Governed by** | Individual IETF Internet-Draft. Discussion takes place on the Workload Identity in Multi System Environments (WIMSE) Working Group mailing list. [1] |\n| **Track** | IETF Internet-Draft (Standards Track) [1] |\n| **Status** | Internet-Draft, Intended status: Standards Track; expires 3 May 2027 [1] |\n| **Version** | Internet-Draft `draft-sweeney-wimse-credential-delegation-02` (30 October 2026); canonical protocol version `0.1.0` [1] |\n| **Wire format** | Profile of OAuth 2.0 Token Exchange (RFC 8693), Demonstrating Proof-of-Possession (RFC 9449), Rich Authorization Requests (RFC 9396), JWT Bearer (RFC 7523), OpenID Connect CIBA, and `did:key` [1] |\n| **Specification** | https://www.ietf.org/archive/id/draft-sweeney-wimse-credential-delegation-02.txt [1] |\n| **Found at** | Delegation Server `/exercise` endpoint; ephemeral `did:key`; JWT Bearer (RFC 7523); `cred_delegation` objects in `authorization_details` [1] |\n| **IETF state** | `draft-sweeney-wimse-credential-delegation-02` · **Active Internet-Draft** (published 30 October 2026; expires 3 May 2027) · Individual submission discussed on the WIMSE WG list [1] |\n| **Licence** | IETF Trust Legal Provisions (BCP 78) [1] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nOAuth 2.0 solved human-to-service authorization. This model assumes a human present at a browser for the consent ceremony. [1] Existing OAuth 2.0 extensions address token exchange, proof-of-possession, and structured authorization, but no current specification defines how these mechanisms compose into a coherent credential delegation framework for AI agents. [1] The protocol defines agent identity lifecycle management using ephemeral key pairs, and capability-shaped delegation tokens bound to specific operations and resources. [1] It defines credential wrapping semantics that prevent exposure of underlying OAuth tokens to agents. [1] This document does not define new token formats, new OAuth grant types, or modifications to existing authorization server behavior. [1] Enforcing a revoked delegation across Delegation Servers or across administrative domains is out of scope for this document. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **OAuth 2.0 Token Exchange (RFC 8693)** | `RFC 8693` | Profiles classic standard | The draft profiles RFC 8693 token exchange together with DPoP (RFC 9449), Rich Authorization Requests (RFC 9396), and CIBA, and it defines no new token format or grant type. [1][3] |\n| **OAuth 2.0 Demonstrating Proof of Possession (DPoP, RFC 9449)** | `RFC 9449` | Profiles classic standard | The draft profiles DPoP (RFC 9449) for delegated agent credentials and defines no new token format or grant type of its own. [1][4] |\n| **OAuth 2.0 Rich Authorization Requests (RAR, RFC 9396)** | `RFC 9396` | Profiles classic standard | Requested authority is profiled with Rich Authorization Requests (RFC 9396), and the draft defines no new grant type. [1][5] |\n| **OpenID Connect Client-Initiated Backchannel Authentication (CIBA) Core 1.0** | `OpenID CIBA Core 1.0` | Profiles classic standard | User approval is profiled with OpenID Connect CIBA so the authorization server can reach the user without a browser redirect, and the draft defines no new grant type. [1][6] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[AI Identity Management System (AIMS)](/protocols/wimse-aims/)** | Complements | AIMS assigns the agent one WIMSE identifier and defines no new grant, while this companion profiles RFC 8693, DPoP, RAR, and CIBA for capability-shaped delegation tokens inside a trust domain. [1][7] |\n| **[Agent Identity Protocol (AIP): Verifiable Delegation for AI Agent Systems](/protocols/aip-delegation-chain/)** | Peer alternative | Prakash's chain is a JWT or Biscuit with aip:web or aip:key identifiers, while this draft profiles RFC 8693 token exchange, DPoP (RFC 9449), and CIBA and defines no new grant type. [1][8] |\n| **[Agent Delegation Receipts](/protocols/agent-delegation-receipts/)** | Complements | A delegation receipt is a JWS over JCS-canonicalized JSON, or a COSE_Sign1, binding an operator-instruction hash, while this draft profiles RFC 8693, DPoP, and RAR for the delegated credential itself. [1][9] |\n| **[Workload Authorization Grant (WAG)](/protocols/workload-authz-grant/)** | Peer alternative | The Workload Authorization Grant trades one platform-signed JWT at the jwt-bearer grant, while this draft profiles RFC 8693, DPoP (RFC 9449), RAR (RFC 9396), and CIBA and defines no new grant type. [1][10] |\n\n---\n\n## See also\n\n- **Category:** [Permit protocols](/category/permit/)\n\n---\n\n## References\n\n1. K. Sweeney, *Credential Delegation Protocol for AI Agents in Multi-System Environments (draft-sweeney-wimse-credential-delegation-02)* (30 October 2026) — <https://www.ietf.org/archive/id/draft-sweeney-wimse-credential-delegation-02.txt>\n2. cred-ninja/protocol (GitHub), *cred-ninja/protocol GitHub repository metadata* (checked 2026-10-31) — <https://github.com/cred-ninja/protocol>\n3. M. Jones, A. Nadalin, B. Campbell, Ed., J. Bradley, and C. Mortimore, *RFC 8693: OAuth 2.0 Token Exchange* (January 2020) — <https://www.rfc-editor.org/rfc/rfc8693.html>\n4. D. Fett, B. Campbell, J. Bradley, T. Lodderstedt, M. Jones, and D. Waite, *RFC 9449: OAuth 2.0 Demonstrating Proof of Possession (DPoP)* (September 2023) — <https://www.rfc-editor.org/rfc/rfc9449.html>\n5. T. Lodderstedt, J. Richer, and B. Campbell, *RFC 9396: OAuth 2.0 Rich Authorization Requests* (May 2023) — <https://www.rfc-editor.org/rfc/rfc9396.html>\n6. OpenID Foundation, *OpenID Connect Client-Initiated Backchannel Authentication Flow - Core 1.0* (2021-09-01) — <https://openid.net/specs/openid-client-initiated-backchannel-authentication-core-1_0.html>\n7. IETF Datatracker, *draft-ietf-wimse-aims — AI Identity Management System (IETF Datatracker)* (checked 2026-11-08) — <https://datatracker.ietf.org/doc/draft-ietf-wimse-aims/>\n8. S. Prakash, *Agent Identity Protocol (AIP): Verifiable Delegation for AI Agent Systems (draft-prakash-aip-02 HTML)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/html/draft-prakash-aip-02>\n9. R. Nelson (Authproof), *Agent Delegation Receipts (draft-nelson-agent-delegation-receipts-15 HTML)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/html/draft-nelson-agent-delegation-receipts-15>\n10. Paul Carleton (Anthropic), Nick Steele (OpenAI), Aaron Parecki (Okta), Arndt Schwenkschuster (Defakto Security), and Brian Campbell (Ping Identity), *draft-carleton-workload-authz-grant — Workload Authorization Grant (IETF Datatracker)* (checked 2026-11-08) — <https://datatracker.ietf.org/doc/draft-carleton-workload-authz-grant/>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "agent-delegation-receipts",
   "name": "Agent Delegation Receipts",
   "acronym": "",
   "aliases": [
    "Delegation Receipt",
    "draft-nelson-agent-delegation-receipts"
   ],
   "collisions": [],
   "step": "permit",
   "parties": [
    "agent-human",
    "agent-agent",
    "agent-site"
   ],
   "form": "document-format",
   "track": "ietf",
   "scope": "general",
   "question": "How can a human principal's authorization of an AI agent (scope, boundaries, validity window, and operator instruction hash) be recorded as a signed, verifiable receipt that can be checked before the agent acts?",
   "analog": "A signed power-of-attorney slip the agent shows before acting, with a hash pinning the operator's instructions.",
   "origin": {
    "org": "Authproof (R. Nelson)",
    "date": "2026-04-28"
   },
   "governance": "Individual Internet-Draft submitted to the IETF (Network Working Group); not an adopted working group document.",
   "native_status": "Internet-Draft (draft-nelson-agent-delegation-receipts-15), Intended Status: Informational; expires 24 April 2027",
   "phase": "draft",
   "implementation": "none-found",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "version": {
    "label": "draft-nelson-agent-delegation-receipts-15",
    "date": "2026-10-21"
   },
   "spec_url": "https://datatracker.ietf.org/doc/html/draft-nelson-agent-delegation-receipts-15",
   "discovery": {
    "mechanism": "Transport-agnostic receipt artifact (typ: \"drp-receipt\" JWS or COSE_Sign1) presented to a verifier; Section 13 sketches an informative, unregistered OAuth authorization_details binding",
    "path": null
   },
   "probe": {
    "method": "NONE",
    "path": "",
    "parse": "",
    "on_absent": "No site-level support signal is defined, so absence cannot be observed."
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.ietf.org/archive/id/draft-nelson-agent-delegation-receipts-15.txt",
     "claim": "R. Nelson (Authproof), *Agent Delegation Receipts (draft-nelson-agent-delegation-receipts-15)*, checked 2026-10-31",
     "date": null,
     "quote": "R. Nelson Internet-Draft Authproof Intended status: Informational 21 October 2026 Expires: 24 April 2027 Agent Delegation Receipts draft-nelson-agent-delegation-receipts-15 Abstract This document defines the Agent Delegation Receipt: a signed record of what a human principal authorized an AI agent to do, for how long, and under what instructions. / a JWS profile (RFC 7515) over JCS-canonicalized JSON (RFC 8785) as the primary wire format, and a COSE_Sign1 profile (RFC 9052) for constrained environments. / A receipt MUST use one profile or the other, never both for the same issuance. / Expires: 24 April 2027 Agent Delegation Receipts draft-nelson-agent-delegation-receipts-15 Abstract This document defines the Agent Delegation Receipt: a signed record of what a human principal authorized an AI agent to do, for how long, and under what instructions. The receipt carries a scope, hard boundaries, a validity window, and a hash of the operator's stated instructions, all signed by the authorizing key. Version -11 replaces the draft's earlier custom signature format with two standard profiles: a JWS profile (RFC 7515) over JCS-canonicalized JSON (RFC 8785) as the primary wire format, and a COSE_Sign1 profile (RFC 9052) for constrained environments. It also specifies scope attenuation rules for multi-agent delegation chains, a revocation registry model with cascade semantics, and the limitations of what receipts can and cannot prove. Version -12 resolves the unknown-fields question raised on the IETF oauth mailing list: authorization fields are closed (verifiers reject unknown top-level body fields rather than silently ignoring them), the \"metadata\" object is the defined extension point, and one-time-use receipts fail closed without a durable consumption store. Version -13 incorporates independent-implementation feedback: it pins the orchestratorSignature verification key to the sub-receipt signer's key, states the receipt-issuance computation order explicitly, and guides issuers on default boundaries versus explicit allowances. Version -14 adds a pointer to content profiles for verification of what the agent produced, following implementer feedback. Version -15 adopts the grant/execution vocabulary of CHEN-AGENT-USE-CASES: the receipt as Execution Layer Evidence for a Grant Layer Authority. It adds delegatee holder binding for sub-receipts -- a parent names the delegatee's public key, closing a bearer-copy issuance gap found in review -- deprecates orchestratorSignature as redundant, sketches an OAuth authorization_details binding so a token can reference its receipt, and states normative custody requirements for the authorizing key. The delegateeKey field is a wire-format addition; -14-era verifiers will reject receipts carrying it, which is the intended fail-closed version behavior. / was published with the -11 revision. Author's Address Ryan Nelson Authproof Email: [email redacted] Nelson / key. Nelson Expires 24 April 2027 [Page 25] Internet-Draft Agent Delegation Receipts October 2026 / JWS profile (RFC 7515) over JCS-canonicalized JSON (RFC 8785) as the primary wire format, and a COSE_Sign1 profile (RFC 9052) ... SHOULD contain \"typ\" with the value \"drp-receipt\" / It is informative: the \"delegation_receipt\" authorization_details type sketched here is not registered by this document, and the names below are sketches, not final registered names. ... \"type\": \"delegation_receipt\", \"receipt_id\": ... \"delegatee_key_thumbprint\": / 14. IANA Considerations This document makes no IANA requests. / Agentic deployments separate the authority to act from the instructions that drive action. The User approves a scope. The Operator writes the prompts, configures the tools, and runs the runtime. / Nothing in that pipeline is cryptographic, so when the agent does something the person did not want, there is no reliable record of what was authorized versus what was delivered. / The Delegation Receipt puts a signed artifact in the gap. It commits the User's scope, boundaries, validity window, and the hash of the Operator's stated instructions under the User's key before the agent runs. / It is not a control that stops a malicious operator. An operator who controls the runtime can simply not run the checks, and no signature prevents that. The receipt is an audit and attribution layer for honest deployments: it makes misbehavior provable after the fact, not impossible. / The following are deliberately NOT specified here, and conformance to this document MUST NOT be read as covering them:  Key management: generation, storage, rotation, recovery, and custody of signing keys.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://datatracker.ietf.org/doc/draft-nelson-agent-delegation-receipts/",
     "claim": "R. Nelson (Authproof), *draft-nelson-agent-delegation-receipts — Agent Delegation Receipts (IETF Datatracker)*, checked 2026-10-31",
     "date": null,
     "quote": "This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. | | | | | --- | --- | --- | | Document | Type | Active Internet-Draft (individual) | | Author | | Ryan Nelson | | Last updated | 2026-10-21 / 2026-06-13 | 10 | Ryan Nelson | New version available: draft-nelson-agent-delegation-receipts-10.txt | | 2026-06-13 / private key. Nelson Expires 24 April 2027 [Page 25] Internet-Draft Agent Delegation Receipts October",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://datatracker.ietf.org/doc/html/draft-nelson-agent-delegation-receipts-15",
     "claim": "R. Nelson (Authproof), *Agent Delegation Receipts (draft-nelson-agent-delegation-receipts-15 HTML)*, checked 2026-10-31",
     "date": null,
     "quote": "behavior. Nelson Expires 24 April 2027 [Page 1] Internet-Draft Agent Delegation Receipts October 2026 / Intended status: Informational / with two standard profiles: a JWS profile (RFC 7515) over JCS-canonicalized JSON (RFC 8785) / draft-nelson-agent-delegation-receipts-15 / Copyright (c) 2026 IETF Trust and the persons identified as the document authors.",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://www.rfc-editor.org/rfc/rfc7515.html",
     "claim": "M. Jones, J. Bradley, and N. Sakimura, *RFC 7515: JSON Web Signature (JWS)*, May 2015",
     "date": null,
     "quote": "JSON Web Signature (JWS) represents content secured with digital",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://www.rfc-editor.org/rfc/rfc8785.html",
     "claim": "A. Rundgren, B. Jordan, and S. Erdtman, *RFC 8785: JSON Canonicalization Scheme (JCS)*, June 2020",
     "date": null,
     "quote": "<meta content=\"Common,Latin\" name=\"scripts\">",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://www.rfc-editor.org/rfc/rfc9052.html",
     "claim": "J. Schaad, *RFC 9052: CBOR Object Signing and Encryption (COSE): Structures and Process*, August 2022",
     "date": null,
     "quote": "RFC 9052: CBOR Object Signing and Encryption (COSE): Structures and Process /* NOTE: Changes at the bottom of this file overrides some earlier settings.",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/specification.md",
     "claim": "Google (google-agentic-commerce), *Agentic Payment Protocol (v0.2)*, fetched 2026-10-30",
     "date": null,
     "quote": "Agentic Payment Protocol (v0.2)",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://raw.githubusercontent.com/ethereum/ERCs/master/ERCS/erc-8004.md",
     "claim": "Marco De Rossi, Davide Crapis, Jordan Ellis, and Erik Reppel, *ERCS/erc-8004.md (Trustless Agents)*, created 2025-08-13; fetched 2026-10-30",
     "date": null,
     "quote": "author: Marco De Rossi (@MarcoMetaMask), Davide Crapis (@dcrapis) <davide@ethereum.org>, Jordan Ellis <jordanellis@google.com>, Erik Reppel <erik.reppel@coinbase.com> discussions-to: https://ethereum-magicians.org/t/erc-8004-trustless-agents/25098 status: Draft type: Standards Track category: ERC created: 2025-08-13 requires: 155, 712, 721, 1271",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://www.ietf.org/archive/id/draft-sharif-agent-audit-trail-09.txt",
     "claim": "R. Sharif (CyberSecAI Ltd), *Agent Audit Trail: A Standard Logging Format for Autonomous AI Systems (draft-sharif-agent-audit-trail-09)*, draft-sharif-agent-audit-trail-09; 26 October 2026",
     "date": null,
     "quote": "draft-sharif-agent-audit-trail-09 Abstract This document specifies a standard logging format for autonomous AI agent systems.",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://datatracker.ietf.org/doc/html/draft-kroehl-agentic-trust-aae-02",
     "claim": "L. K. Kroehl (CryptoKRI GmbH), *Agent Authorization Envelope (AAE): A Machine-Evaluable Authorization Structure for Autonomous AI Agents (draft-kroehl-agentic-trust-aae-02 HTML)*, checked 2026-10-31",
     "date": null,
     "quote": "|| BASE64URL(JWS Signature) Kroehl Expires 10 March 2027 [Page 5] Internet-Draft AAE September 2026",
     "ref": 10
    }
   ],
   "summary_md": "**Agent Delegation Receipts** (`draft-nelson-agent-delegation-receipts`) is Internet-Draft `draft-nelson-agent-delegation-receipts-15` by R. Nelson (Authproof), intended status Informational. It defines the Agent Delegation Receipt: a signed record of what a human principal authorized an AI agent to do, for how long, and under what instructions. Two standard profiles are specified: a JWS profile (RFC 7515) over JCS-canonicalized JSON (RFC 8785) as the primary wire format, and a `COSE_Sign1` profile (RFC 9052) for constrained environments. A receipt MUST use one profile or the other, never both for the same issuance. Datatracker records `draft-nelson-agent-delegation-receipts-15` as an active individual Internet-Draft, last updated 2026-10-21. The draft is not endorsed by the IETF and has no formal standing in the IETF standards process. The draft expires 24 April 2027. The `delegateeKey` field is a wire-format addition; -14-era verifiers will reject receipts carrying it, which is the intended fail-closed version behavior.",
   "part_of": null,
   "group": null,
   "use_cases": [
    "delegate-user-authority",
    "audit-agent-actions",
    "prove-agent-identity"
   ],
   "audience": [
    "agent-builder",
    "platform",
    "standards-body"
   ],
   "pairs_with": [
    "ap2",
    "erc-8004",
    "agent-audit-trail",
    "agent-authorization-envelope"
   ],
   "prerequisites": [],
   "dispute": null,
   "last_verified": "2026-11-12",
   "history": [
    {
     "date": "2026-10-16",
     "note": "initial candidate record from primary source (https://datatracker.ietf.org/doc/html/draft-nelson-agent-delegation-receipts-11)"
    },
    {
     "date": "2026-10-20",
     "note": "updated to revision -14 (2026-10-15)"
    },
    {
     "date": "2026-10-23",
     "note": "revision 14 → 15"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-nelson-agent-delegation-receipts"
    }
   ],
   "ietf_tracker": {
    "doc": "draft-nelson-agent-delegation-receipts",
    "rev": "15",
    "state": "active",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-10-21",
    "expires_utc": "2027-04-24",
    "as_of": "2026-10-31",
    "source": "https://datatracker.ietf.org/doc/draft-nelson-agent-delegation-receipts/",
    "source_label": "per IETF Datatracker"
   },
   "hatnote_md": "",
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": null,
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Agent Delegation Receipts** (`draft-nelson-agent-delegation-receipts`) is Internet-Draft `draft-nelson-agent-delegation-receipts-15` by R. Nelson (Authproof), intended status Informational. It defines the Agent Delegation Receipt: a signed record of what a human principal authorized an AI agent to do, for how long, and under what instructions. [1] Two standard profiles are specified: a JWS profile (RFC 7515) over JCS-canonicalized JSON (RFC 8785) as the primary wire format, and a `COSE_Sign1` profile (RFC 9052) for constrained environments. A receipt MUST use one profile or the other, never both for the same issuance. [1] Datatracker records `draft-nelson-agent-delegation-receipts-15` as an active individual Internet-Draft, last updated 2026-10-21. The draft is not endorsed by the IETF and has no formal standing in the IETF standards process. The draft expires 24 April 2027. The `delegateeKey` field is a wire-format addition; -14-era verifiers will reject receipts carrying it, which is the intended fail-closed version behavior. [1][2]",
   "v05_identity_sentence_md": "**Agent Delegation Receipts** (`draft-nelson-agent-delegation-receipts`) is Internet-Draft `draft-nelson-agent-delegation-receipts-15` by R. Nelson (Authproof), intended status Informational. It defines the Agent Delegation Receipt: a signed record of what a human principal authorized an AI agent to do, for how long, and under what instructions. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Permit](/category/permit/) (`permit`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "Ryan Nelson (Authproof) [1][2]"
    },
    {
     "label": "Governed by",
     "value_md": "Individual IETF Internet-Draft submission (`draft-nelson-agent-delegation-receipts`, Network Working Group, no formal IETF standing) [2][3]"
    },
    {
     "label": "Track",
     "value_md": "IETF Internet-Draft (Informational) [3]"
    },
    {
     "label": "Status",
     "value_md": "Internet-Draft (`draft-nelson-agent-delegation-receipts-15`), Intended Status: Informational; expires 24 April 2027 [1][3]"
    },
    {
     "label": "Version",
     "value_md": "`draft-nelson-agent-delegation-receipts-15` (published October 2026, expires 24 April 2027) [1][3]"
    },
    {
     "label": "Wire format",
     "value_md": "JSON Web Signature (`RFC 7515`) over JSON Canonicalization Scheme (`RFC 8785`) primary profile; `COSE_Sign1` (`RFC 9052`) constrained profile [1][3]"
    },
    {
     "label": "Specification",
     "value_md": "https://datatracker.ietf.org/doc/html/draft-nelson-agent-delegation-receipts-15 [3]"
    },
    {
     "label": "Found at",
     "value_md": "Transport-agnostic receipt artifact (`typ: \"drp-receipt\"` JWS or `COSE_Sign1`, no fixed discovery endpoint); Section 13 sketches an informative, unregistered OAuth `authorization_details` binding (`\"type\": \"delegation_receipt\"`, carrying `receipt_id` and `delegatee_key_thumbprint`; Section 14 makes no IANA requests) [1]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust Legal Provisions (BCP 78) [3]"
    },
    {
     "label": "IETF state",
     "value_md": "`draft-nelson-agent-delegation-receipts-15` · **Active Internet-Draft** (expires 2027-04-24) · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-nelson-agent-delegation-receipts/))"
    }
   ],
   "v05_problem_md": "Agentic deployments separate the authority to act from the instructions that drive action. The User approves a scope. The Operator writes the prompts, configures the tools, and runs the runtime. Nothing in that pipeline is cryptographic, so when the agent does something the person did not want, there is no reliable record of what was authorized versus what was delivered. [1] The Delegation Receipt puts a signed artifact in the gap. It commits the User's scope, boundaries, validity window, and the hash of the Operator's stated instructions under the User's key before the agent runs. [1] The receipt is an audit and attribution layer for honest deployments: it makes misbehavior provable after the fact, not impossible. It is not a control that stops a malicious operator. An operator who controls the runtime can simply not run the checks, and no signature prevents that. Key management (generation, storage, rotation, recovery, and custody of signing keys) is deliberately not specified here, and conformance to the draft MUST NOT be read as covering it. [1]",
   "v05_mechanism_delta_md": "The Delegation Receipt puts a signed artifact in the gap. It commits the User's scope, boundaries, validity window, and the hash of the Operator's stated instructions under the User's key before the agent runs. [1]",
   "v05_scope_boundary_md": "The receipt is an audit and attribution layer for honest deployments: it makes misbehavior provable after the fact, not impossible. It is not a control that stops a malicious operator. An operator who controls the runtime can simply not run the checks, and no signature prevents that. Key management (generation, storage, rotation, recovery, and custody of signing keys) is deliberately not specified here, and conformance to the draft MUST NOT be read as covering it. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "JSON Web Signature (JWS, RFC 7515)",
      "spec_or_rfc": "RFC 7515",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "Revision -15 signs the receipt with a JWS (RFC 7515) over JCS-canonicalized JSON (RFC 8785), binding the operator-instruction hash, scope, hard boundaries, and validity window. [3][4]"
     },
     {
      "name": "JSON Canonicalization Scheme (JCS, RFC 8785)",
      "spec_or_rfc": "RFC 8785",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "Revision -15 canonicalizes the receipt JSON with JCS (RFC 8785) before the JWS (RFC 7515) or COSE_Sign1 (RFC 9052) signature. [3][5]"
     },
     {
      "name": "CBOR Object Signing and Encryption (COSE, RFC 9052)",
      "spec_or_rfc": "RFC 9052",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "Revision -15 defines a COSE_Sign1 profile (RFC 9052) of the same receipt, which binds the operator-instruction hash, scope, hard boundaries, and validity window. [3][6]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "ap2",
      "target_name": "Agent Payments Protocol (AP2)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "AP2 payment mandates authorize a checkout, while a delegation receipt is a JWS over JCS JSON, or a COSE_Sign1, that binds the operator-instruction hash before the agent acts. [3][7]"
     },
     {
      "target_id": "erc-8004",
      "target_name": "ERC-8004: Trustless Agents",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "ERC-8004 registers the agent as an ERC-721 agentId, while a delegation receipt is the JWS or COSE_Sign1 slip that binds the operator-instruction hash and scope. [3][8]"
     },
     {
      "target_id": "agent-audit-trail",
      "target_name": "Agent Audit Trail",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "The Agent Audit Trail hash-chains records with SHA-256 over RFC 8785 JSON, while a delegation receipt is one JWS or COSE_Sign1 document binding the operator-instruction hash. [3][9]"
     },
     {
      "target_id": "agent-authorization-envelope",
      "target_name": "Agent Authorization Envelope",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "The envelope is a JWS-secured W3C Verifiable Credential carrying a mandate, constraints, and a validity block, while a delegation receipt is a JWS over JCS JSON, or a COSE_Sign1, binding the operator-instruction hash. [3][10]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "credential-delegation-protocol-wimse",
     "target_name": "Credential Delegation Protocol for AI Agents in Multi-System Environments",
     "relation_label": "Complements",
     "delta": "A delegation receipt is a JWS over JCS-canonicalized JSON, or a COSE_Sign1, binding an operator-instruction hash, while this draft profiles RFC 8693, DPoP, and RAR for the delegated credential itself.",
     "item_md": "**[Credential Delegation Protocol for AI Agents in Multi-System Environments](/protocols/credential-delegation-protocol-wimse/)** (Complements) — A delegation receipt is a JWS over JCS-canonicalized JSON, or a COSE_Sign1, binding an operator-instruction hash, while this draft profiles RFC 8693, DPoP, and RAR for the delegated credential itself."
    },
    {
     "item_md": "**[Permit protocols](/category/permit/)** — Category index for `permit` standards."
    }
   ],
   "v05_compiled_md": "---\nid: agent-delegation-receipts\ntitle: \"Agent Delegation Receipts\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: permit\nform: document-format\nwire_archetype: identity_auth_crypto\nspec_url: https://datatracker.ietf.org/doc/html/draft-nelson-agent-delegation-receipts-15\nlast_checked: 2026-11-12\n---\n\n# Agent Delegation Receipts\n\n**Category:** [Permit](/category/permit/) (`permit`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-11-12\n\n**Agent Delegation Receipts** (`draft-nelson-agent-delegation-receipts`) is Internet-Draft `draft-nelson-agent-delegation-receipts-15` by R. Nelson (Authproof), intended status Informational. It defines the Agent Delegation Receipt: a signed record of what a human principal authorized an AI agent to do, for how long, and under what instructions. [1] Two standard profiles are specified: a JWS profile (RFC 7515) over JCS-canonicalized JSON (RFC 8785) as the primary wire format, and a `COSE_Sign1` profile (RFC 9052) for constrained environments. A receipt MUST use one profile or the other, never both for the same issuance. [1] Datatracker records `draft-nelson-agent-delegation-receipts-15` as an active individual Internet-Draft, last updated 2026-10-21. The draft is not endorsed by the IETF and has no formal standing in the IETF standards process. The draft expires 24 April 2027. The `delegateeKey` field is a wire-format addition; -14-era verifiers will reject receipts carrying it, which is the intended fail-closed version behavior. [1][2]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Permit](/category/permit/) (`permit`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | Ryan Nelson (Authproof) [1][2] |\n| **Governed by** | Individual IETF Internet-Draft submission (`draft-nelson-agent-delegation-receipts`, Network Working Group, no formal IETF standing) [2][3] |\n| **Track** | IETF Internet-Draft (Informational) [3] |\n| **Status** | Internet-Draft (`draft-nelson-agent-delegation-receipts-15`), Intended Status: Informational; expires 24 April 2027 [1][3] |\n| **Version** | `draft-nelson-agent-delegation-receipts-15` (published October 2026, expires 24 April 2027) [1][3] |\n| **Wire format** | JSON Web Signature (`RFC 7515`) over JSON Canonicalization Scheme (`RFC 8785`) primary profile; `COSE_Sign1` (`RFC 9052`) constrained profile [1][3] |\n| **Specification** | https://datatracker.ietf.org/doc/html/draft-nelson-agent-delegation-receipts-15 [3] |\n| **Found at** | Transport-agnostic receipt artifact (`typ: \"drp-receipt\"` JWS or `COSE_Sign1`, no fixed discovery endpoint); Section 13 sketches an informative, unregistered OAuth `authorization_details` binding (`\"type\": \"delegation_receipt\"`, carrying `receipt_id` and `delegatee_key_thumbprint`; Section 14 makes no IANA requests) [1] |\n| **Licence** | IETF Trust Legal Provisions (BCP 78) [3] |\n| **IETF state** | `draft-nelson-agent-delegation-receipts-15` · **Active Internet-Draft** (expires 2027-04-24) · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-nelson-agent-delegation-receipts/)) |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nAgentic deployments separate the authority to act from the instructions that drive action. The User approves a scope. The Operator writes the prompts, configures the tools, and runs the runtime. Nothing in that pipeline is cryptographic, so when the agent does something the person did not want, there is no reliable record of what was authorized versus what was delivered. [1] The Delegation Receipt puts a signed artifact in the gap. It commits the User's scope, boundaries, validity window, and the hash of the Operator's stated instructions under the User's key before the agent runs. [1] The receipt is an audit and attribution layer for honest deployments: it makes misbehavior provable after the fact, not impossible. It is not a control that stops a malicious operator. An operator who controls the runtime can simply not run the checks, and no signature prevents that. Key management (generation, storage, rotation, recovery, and custody of signing keys) is deliberately not specified here, and conformance to the draft MUST NOT be read as covering it. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **JSON Web Signature (JWS, RFC 7515)** | `RFC 7515` | Profiles classic standard | Revision -15 signs the receipt with a JWS (RFC 7515) over JCS-canonicalized JSON (RFC 8785), binding the operator-instruction hash, scope, hard boundaries, and validity window. [3][4] |\n| **JSON Canonicalization Scheme (JCS, RFC 8785)** | `RFC 8785` | Profiles classic standard | Revision -15 canonicalizes the receipt JSON with JCS (RFC 8785) before the JWS (RFC 7515) or COSE_Sign1 (RFC 9052) signature. [3][5] |\n| **CBOR Object Signing and Encryption (COSE, RFC 9052)** | `RFC 9052` | Profiles classic standard | Revision -15 defines a COSE_Sign1 profile (RFC 9052) of the same receipt, which binds the operator-instruction hash, scope, hard boundaries, and validity window. [3][6] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Agent Payments Protocol (AP2)](/protocols/ap2/)** | Complements | AP2 payment mandates authorize a checkout, while a delegation receipt is a JWS over JCS JSON, or a COSE_Sign1, that binds the operator-instruction hash before the agent acts. [3][7] |\n| **[ERC-8004: Trustless Agents](/protocols/erc-8004/)** | Complements | ERC-8004 registers the agent as an ERC-721 agentId, while a delegation receipt is the JWS or COSE_Sign1 slip that binds the operator-instruction hash and scope. [3][8] |\n| **[Agent Audit Trail](/protocols/agent-audit-trail/)** | Complements | The Agent Audit Trail hash-chains records with SHA-256 over RFC 8785 JSON, while a delegation receipt is one JWS or COSE_Sign1 document binding the operator-instruction hash. [3][9] |\n| **[Agent Authorization Envelope](/protocols/agent-authorization-envelope/)** | Peer alternative | The envelope is a JWS-secured W3C Verifiable Credential carrying a mandate, constraints, and a validity block, while a delegation receipt is a JWS over JCS JSON, or a COSE_Sign1, binding the operator-instruction hash. [3][10] |\n\n---\n\n## See also\n\n- **[Credential Delegation Protocol for AI Agents in Multi-System Environments](/protocols/credential-delegation-protocol-wimse/)** *(Complements)* — A delegation receipt is a JWS over JCS-canonicalized JSON, or a COSE_Sign1, binding an operator-instruction hash, while this draft profiles RFC 8693, DPoP, and RAR for the delegated credential itself.\n- **Category:** [Permit protocols](/category/permit/)\n\n---\n\n## References\n\n1. R. Nelson (Authproof), *Agent Delegation Receipts (draft-nelson-agent-delegation-receipts-15)* (checked 2026-10-31) — <https://www.ietf.org/archive/id/draft-nelson-agent-delegation-receipts-15.txt>\n2. R. Nelson (Authproof), *draft-nelson-agent-delegation-receipts — Agent Delegation Receipts (IETF Datatracker)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/draft-nelson-agent-delegation-receipts/>\n3. R. Nelson (Authproof), *Agent Delegation Receipts (draft-nelson-agent-delegation-receipts-15 HTML)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/html/draft-nelson-agent-delegation-receipts-15>\n4. M. Jones, J. Bradley, and N. Sakimura, *RFC 7515: JSON Web Signature (JWS)* (May 2015) — <https://www.rfc-editor.org/rfc/rfc7515.html>\n5. A. Rundgren, B. Jordan, and S. Erdtman, *RFC 8785: JSON Canonicalization Scheme (JCS)* (June 2020) — <https://www.rfc-editor.org/rfc/rfc8785.html>\n6. J. Schaad, *RFC 9052: CBOR Object Signing and Encryption (COSE): Structures and Process* (August 2022) — <https://www.rfc-editor.org/rfc/rfc9052.html>\n7. Google (google-agentic-commerce), *Agentic Payment Protocol (v0.2)* (fetched 2026-10-30) — <https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/specification.md>\n8. Marco De Rossi, Davide Crapis, Jordan Ellis, and Erik Reppel, *ERCS/erc-8004.md (Trustless Agents)* (created 2025-08-13; fetched 2026-10-30) — <https://raw.githubusercontent.com/ethereum/ERCs/master/ERCS/erc-8004.md>\n9. R. Sharif (CyberSecAI Ltd), *Agent Audit Trail: A Standard Logging Format for Autonomous AI Systems (draft-sharif-agent-audit-trail-09)* (draft-sharif-agent-audit-trail-09; 26 October 2026) — <https://www.ietf.org/archive/id/draft-sharif-agent-audit-trail-09.txt>\n10. L. K. Kroehl (CryptoKRI GmbH), *Agent Authorization Envelope (AAE): A Machine-Evaluable Authorization Structure for Autonomous AI Agents (draft-kroehl-agentic-trust-aae-02 HTML)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/html/draft-kroehl-agentic-trust-aae-02>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "aauth-r3",
   "name": "AAuth Rich Resource Requests",
   "acronym": "R3",
   "aliases": [
    "AAuth R3",
    "Rich Resource Requests"
   ],
   "collisions": [],
   "step": "permit",
   "parties": [
    "agent-site",
    "agent-human"
   ],
   "form": "endpoint",
   "track": "ietf",
   "scope": "general",
   "question": "How can an agent request an API's named operations, and a person approve one exact call, without relying on opaque scope strings?",
   "analog": "OAuth Rich Authorization Requests (RAR)",
   "origin": {
    "org": "Dick Hardt (Hellō)",
    "date": "2026-09-28"
   },
   "governance": "Individual IETF Internet-Draft submission, companion to the AAuth Protocol; no working group.",
   "native_status": "Exploratory Draft (-00); no known implementations",
   "phase": "draft",
   "implementation": "none-found",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "version": {
    "label": "draft-hardt-aauth-r3-00",
    "date": "2026-09-28"
   },
   "spec_url": "https://datatracker.ietf.org/doc/html/draft-hardt-aauth-r3-00",
   "discovery": {
    "mechanism": "Resource advertises supported operation vocabularies as r3_vocabularies; a resource token carries r3_uri and r3_s256 pointing at the R3 document",
    "path": null
   },
   "probe": {
    "method": "NONE",
    "path": "",
    "parse": "",
    "on_absent": ""
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.ietf.org/archive/id/draft-hardt-aauth-r3-00.txt",
     "claim": "D. Hardt (Hellō), *AAuth Rich Resource Requests (R3) (draft-hardt-aauth-r3-00)*, checked 2026-10-31",
     "date": null,
     "quote": "draft-hardt-aauth-r3-00 Abstract This document defines AAuth Rich Resource Requests (R3), an extension to the AAuth Protocol ([I-D.hardt-oauth-aauth-protocol]) that enables structured, vocabulary-based authorization for resource access. / The agent sends r3_operations in the authorization endpoint request, presenting a person token in Signature-Key / \"vocabulary\": \"urn:aauth:vocabulary:openapi\" ... { \"operationId\": \"createEvent\" }, { \"operationId\": \"updateEvent\" } / Intended status: Standards Track 28 September 2026 Expires: 1 April 2027 ... draft-hardt-aauth-r3-00 ... Status: Exploratory Draft / There are currently no known implementations. / Internet-Draft Hellō Intended status: Standards Track 28 September 2026 Expires: 1 April 2027 AAuth Rich Resource Requests (R3) draft-hardt-aauth-r3-00 / \" } Hardt Expires 1 April 2027 [Page 15] Internet-Draft AAuth-R3 September 2026 The / R3 extends the /.well-known/aauth-resource.json document defined in AAuth Protocol ... \"r3_vocabularies\" ... a resource MAY return any AAuth-Requirement at runtime / Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved. This document is subject to BCP 78 / scope strings as the primary way to express what operations are available / Scope strings like calendar:write are not self-describing to a person deciding whether to approve, or to the PS presenting that decision. / Scopes do not express which specific operations a grant covers. / advertise vocabularies describing their operations. Agents request access using those vocabularies. / Auth tokens carry granted operations in the same vocabulary format, enabling resources to enforce authorization directly from the token. / Resource tokens MAY include both scope (as defined in AAuth Protocol ([I-D.hardt-oauth-aauth-protocol])) and R3 claims. When both are present, the auth token's issuer MUST enforce both independently. / The resource MUST require a valid HTTP Message Signature on requests to R3 document URIs, and MUST reject requests not signed by the AS or the PS entitled to that document ... Agents cannot fetch R3 documents. ... 11.1. R3 Document Access Restriction",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://datatracker.ietf.org/doc/draft-hardt-aauth-r3/",
     "claim": "D. Hardt (Hellō), *draft-hardt-aauth-r3 — AAuth Rich Resource Requests (R3) (IETF Datatracker)*, checked 2026-10-31",
     "date": null,
     "quote": "Active Internet-Draft (individual) ... Dick Hardt ... Last updated | 2026-09-28 ... Intended RFC status | | (None) / Table 7 Author's Address Dick Hardt Hellō Email: [email redacted] Hardt Expires 1 April 2027 / urn:aauth:vocabulary: namespace. Hardt Expires 1 April 2027 [Page 6] Internet-Draft AAuth-R3 September 2026 4.3.1. / Intended status: Standards Track / resource itself issued. Added operation access annotations: a resource states, on the operation in / Copyright (c) 2026 IETF Trust and the persons identified as the document authors.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://datatracker.ietf.org/doc/html/draft-hardt-aauth-r3-00",
     "claim": "D. Hardt (Hellō), *AAuth Rich Resource Requests (R3) (draft-hardt-aauth-r3-00 HTML)*, checked 2026-10-31",
     "date": null,
     "quote": "Mode Value Registry ([I-D.hardt-oauth-aauth-protocol]): per-call, meaning the resource authorizes each invocation individually against that / expected to interpret account. Hardt Expires 1 April 2027 [Page 17] Internet-Draft AAuth-R3 September / R3 documents (content-addressed authorization definitions) and advertise vocabularies describing their operations. Agents request access / https://datatracker.ietf.org/drafts/current/. Internet-Drafts are draft documents valid for a maximum of six months and may",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://insights.bostonidentity.com/research/ietf-datatracker-2026-09-28-aauth-rich-resource-requests",
     "claim": "Boston Identity (IAM Insights), *AAuth's R3 lets an agent ask for an API's named operations, and a person approve one exact call · IAM Insights*, checked 2026-10-31",
     "date": null,
     "quote": "Hellō Agentic identityStandards Individual-submission companion to the AAuth Protocol, by Dick Hardt (Hello); -00, / identity of its own. AAuth (Hardt) An individual Internet-Draft that defines the AAuth protocol / (R3)\",\"@id\":\"https://insights.bostonidentity.com/glossary/hardt-aauth-r3\",\"url\":\"https://insights.bostonidentity.com/glossary/hardt-aauth-r3\",\"sameAs\":\"https://datatracker.ietf.org/doc/draft-hardt-aauth-r3/\",\"d / vocabularies, content-addressed R3 documents, vocabulary-based grants, operation access annotations and per-call proposals. The resource",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://www.rfc-editor.org/rfc/rfc9396.html",
     "claim": "T. Lodderstedt, J. Richer, and B. Campbell, *RFC 9396: OAuth 2.0 Rich Authorization Requests*, May 2023",
     "date": null,
     "quote": "This document specifies a new parameter authorization_details that is",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://datatracker.ietf.org/doc/draft-hardt-oauth-aauth-protocol/",
     "claim": "Dick Hardt, *draft-hardt-oauth-aauth-protocol — AAuth Protocol (IETF Datatracker)*, checked 2026-10-31",
     "date": null,
     "quote": "is at https://raw.githubusercontent.com/dickhardt/AAuth/refs/heads/main/ draft-hardt-oauth-aauth-protocol.md (https://raw.githubusercontent.com/dickhardt/AAuth/refs/heads/main/",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Current : the current protocol version, which is ready for use and may continue to receive backwards compatible changes.",
     "ref": 7
    }
   ],
   "summary_md": "**AAuth Rich Resource Requests** (`R3`), `draft-hardt-aauth-r3-00`, is an extension to the AAuth Protocol that enables structured, vocabulary-based authorization for resource access. The agent sends `r3_operations` in the authorization endpoint request, presenting a person token in `Signature-Key`. The example sets `vocabulary` to `urn:aauth:vocabulary:openapi` and names `operationId` values `createEvent` and `updateEvent`. `draft-hardt-aauth-r3-00` states intended status Standards Track, is dated 28 September 2026, and expires 1 April 2027. The introduction marks the text Exploratory Draft, and there are currently no known implementations. Datatracker lists the document as an Active Internet-Draft (individual) by Dick Hardt, last updated `2026-09-28`, with intended RFC status (None).",
   "part_of": "aauth",
   "group": null,
   "use_cases": [
    "let-agents-act-on-my-site",
    "delegate-user-authority"
   ],
   "audience": [
    "platform",
    "agent-builder",
    "standards-body"
   ],
   "pairs_with": [
    "aauth-hardt",
    "mcp"
   ],
   "prerequisites": [
    "aauth"
   ],
   "dispute": null,
   "last_verified": "2026-11-12",
   "history": [
    {
     "date": "2026-10-16",
     "note": "initial candidate record from primary source (https://insights.bostonidentity.com/research/ietf-datatracker-2026-09-28-aauth-rich-resource-requests)"
    },
    {
     "date": "2026-10-16",
     "note": "spec_url updated to the Internet-Draft draft-hardt-aauth-r3-00"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-hardt-aauth-r3"
    }
   ],
   "ietf_tracker": {
    "doc": "draft-hardt-aauth-r3",
    "rev": "00",
    "state": "active",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-09-28",
    "expires_utc": "2027-04-01",
    "as_of": "2026-10-31",
    "source": "https://datatracker.ietf.org/doc/draft-hardt-aauth-r3/",
    "source_label": "per IETF Datatracker"
   },
   "hatnote_md": "",
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": null,
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**AAuth Rich Resource Requests** (`R3`), `draft-hardt-aauth-r3-00`, is an extension to the AAuth Protocol that enables structured, vocabulary-based authorization for resource access. [1] The agent sends `r3_operations` in the authorization endpoint request, presenting a person token in `Signature-Key`. The example sets `vocabulary` to `urn:aauth:vocabulary:openapi` and names `operationId` values `createEvent` and `updateEvent`. [1] `draft-hardt-aauth-r3-00` states intended status Standards Track, is dated 28 September 2026, and expires 1 April 2027. The introduction marks the text Exploratory Draft, and there are currently no known implementations. [1] Datatracker lists the document as an Active Internet-Draft (individual) by Dick Hardt, last updated `2026-09-28`, with intended RFC status (None). [2]",
   "v05_identity_sentence_md": "**AAuth Rich Resource Requests** (`R3`), `draft-hardt-aauth-r3-00`, is an extension to the AAuth Protocol that enables structured, vocabulary-based authorization for resource access. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Permit](/category/permit/) (`permit`)"
    },
    {
     "label": "Form",
     "value_md": "Endpoint (`endpoint`)"
    },
    {
     "label": "Originated by",
     "value_md": "Dick Hardt (Hellō) [2][3][4]"
    },
    {
     "label": "Governed by",
     "value_md": "Individual IETF Internet-Draft (`draft-hardt-aauth-r3-00`, no working group) [2][3][4]"
    },
    {
     "label": "Track",
     "value_md": "IETF Internet-Draft (Standards Track) [1][2]"
    },
    {
     "label": "Status",
     "value_md": "Exploratory Draft (-00); no known implementations [1][2][4]"
    },
    {
     "label": "Version",
     "value_md": "`draft-hardt-aauth-r3-00` (Published 2026-09-28; expires 2027-04-01) [1][2][4]"
    },
    {
     "label": "Wire format",
     "value_md": "JSON R3 documents (content-addressed via SHA-256 `r3_s256`), JWT tokens, and API vocabularies [3][4]"
    },
    {
     "label": "Specification",
     "value_md": "https://datatracker.ietf.org/doc/html/draft-hardt-aauth-r3-00 [3]"
    },
    {
     "label": "Found at",
     "value_md": "Resource metadata (`r3_vocabularies`), operation access annotations, and `AAuth-Requirement` header [1][2][4]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust Legal Provisions (BCP 78) [1][2]"
    },
    {
     "label": "IETF state",
     "value_md": "`draft-hardt-aauth-r3-00` · **Active Internet-Draft** (expires 2027-04-01) · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-hardt-aauth-r3/))"
    }
   ],
   "v05_problem_md": "The AAuth Protocol defines scope strings as the primary way to express what operations are available. [1] Scope strings like `calendar:write` are not self-describing to a person deciding whether to approve, or to the PS presenting that decision. [1] Scopes do not express which specific operations a grant covers. [1] Agents request access using the vocabularies a resource advertises for its operations. [1] Auth tokens carry the granted operations in that same vocabulary format, so the resource can enforce authorization directly from the token. [1] When a resource token includes both scope and R3 claims, the auth token's issuer MUST enforce both independently. [1] Under Section 7 and Section 11.1 (`R3 Document Access Restriction`), the resource MUST require a valid HTTP Message Signature on requests to R3 document URIs and MUST reject requests whose signer is not the AS or the PS entitled to that document, so agents cannot fetch R3 documents directly. [1]",
   "v05_mechanism_delta_md": "Agents request access using the vocabularies a resource advertises for its operations. [1] Auth tokens carry the granted operations in that same vocabulary format, so the resource can enforce authorization directly from the token. [1] When a resource token includes both scope and R3 claims, the auth token's issuer MUST enforce both independently. [1]",
   "v05_scope_boundary_md": "Under Section 7 and Section 11.1 (`R3 Document Access Restriction`), the resource MUST require a valid HTTP Message Signature on requests to R3 document URIs and MUST reject requests whose signer is not the AS or the PS entitled to that document, so agents cannot fetch R3 documents directly. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "OAuth 2.0 Rich Authorization Requests (RAR, RFC 9396)",
      "spec_or_rfc": "RFC 9396",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "R3 requests named operations from a vocabulary the resource advertises, with the JSON document identified by its SHA-256 hash and carried as r3_uri and r3_s256, in the structured-authorization role Rich Authorization Requests play. [3][5]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "aauth-hardt",
      "target_name": "AAuth (Hardt)",
      "relation_type": "part_of",
      "relation_label": "Part of",
      "delta_md": "R3 is part of Hardt's AAuth: the resource advertises r3_vocabularies, and the auth token carries the granted operations plus r3_uri and r3_s256 of the SHA-256-identified R3 document. [3][6]"
     },
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "R3 puts the granted operations and the SHA-256 hash of the R3 document on the auth token as r3_uri and r3_s256, and MCP remains the tool protocol that call may invoke. [3][7]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Permit protocols](/category/permit/)** — Category index for `permit` standards."
    }
   ],
   "v05_compiled_md": "---\nid: aauth-r3\ntitle: \"AAuth Rich Resource Requests\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: permit\nform: endpoint\nwire_archetype: identity_auth_crypto\nspec_url: https://datatracker.ietf.org/doc/html/draft-hardt-aauth-r3-00\nlast_checked: 2026-11-12\n---\n\n# AAuth Rich Resource Requests\n\n**Category:** [Permit](/category/permit/) (`permit`) · **Form:** Endpoint (`endpoint`) · **Last checked:** 2026-11-12\n\n**AAuth Rich Resource Requests** (`R3`), `draft-hardt-aauth-r3-00`, is an extension to the AAuth Protocol that enables structured, vocabulary-based authorization for resource access. [1] The agent sends `r3_operations` in the authorization endpoint request, presenting a person token in `Signature-Key`. The example sets `vocabulary` to `urn:aauth:vocabulary:openapi` and names `operationId` values `createEvent` and `updateEvent`. [1] `draft-hardt-aauth-r3-00` states intended status Standards Track, is dated 28 September 2026, and expires 1 April 2027. The introduction marks the text Exploratory Draft, and there are currently no known implementations. [1] Datatracker lists the document as an Active Internet-Draft (individual) by Dick Hardt, last updated `2026-09-28`, with intended RFC status (None). [2]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Permit](/category/permit/) (`permit`) |\n| **Form** | Endpoint (`endpoint`) |\n| **Originated by** | Dick Hardt (Hellō) [2][3][4] |\n| **Governed by** | Individual IETF Internet-Draft (`draft-hardt-aauth-r3-00`, no working group) [2][3][4] |\n| **Track** | IETF Internet-Draft (Standards Track) [1][2] |\n| **Status** | Exploratory Draft (-00); no known implementations [1][2][4] |\n| **Version** | `draft-hardt-aauth-r3-00` (Published 2026-09-28; expires 2027-04-01) [1][2][4] |\n| **Wire format** | JSON R3 documents (content-addressed via SHA-256 `r3_s256`), JWT tokens, and API vocabularies [3][4] |\n| **Specification** | https://datatracker.ietf.org/doc/html/draft-hardt-aauth-r3-00 [3] |\n| **Found at** | Resource metadata (`r3_vocabularies`), operation access annotations, and `AAuth-Requirement` header [1][2][4] |\n| **Licence** | IETF Trust Legal Provisions (BCP 78) [1][2] |\n| **IETF state** | `draft-hardt-aauth-r3-00` · **Active Internet-Draft** (expires 2027-04-01) · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-hardt-aauth-r3/)) |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nThe AAuth Protocol defines scope strings as the primary way to express what operations are available. [1] Scope strings like `calendar:write` are not self-describing to a person deciding whether to approve, or to the PS presenting that decision. [1] Scopes do not express which specific operations a grant covers. [1] Agents request access using the vocabularies a resource advertises for its operations. [1] Auth tokens carry the granted operations in that same vocabulary format, so the resource can enforce authorization directly from the token. [1] When a resource token includes both scope and R3 claims, the auth token's issuer MUST enforce both independently. [1] Under Section 7 and Section 11.1 (`R3 Document Access Restriction`), the resource MUST require a valid HTTP Message Signature on requests to R3 document URIs and MUST reject requests whose signer is not the AS or the PS entitled to that document, so agents cannot fetch R3 documents directly. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **OAuth 2.0 Rich Authorization Requests (RAR, RFC 9396)** | `RFC 9396` | Analogous to classic standard | R3 requests named operations from a vocabulary the resource advertises, with the JSON document identified by its SHA-256 hash and carried as r3_uri and r3_s256, in the structured-authorization role Rich Authorization Requests play. [3][5] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[AAuth (Hardt)](/protocols/aauth-hardt/)** | Part of | R3 is part of Hardt's AAuth: the resource advertises r3_vocabularies, and the auth token carries the granted operations plus r3_uri and r3_s256 of the SHA-256-identified R3 document. [3][6] |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | R3 puts the granted operations and the SHA-256 hash of the R3 document on the auth token as r3_uri and r3_s256, and MCP remains the tool protocol that call may invoke. [3][7] |\n\n---\n\n## See also\n\n- **Category:** [Permit protocols](/category/permit/)\n\n---\n\n## References\n\n1. D. Hardt (Hellō), *AAuth Rich Resource Requests (R3) (draft-hardt-aauth-r3-00)* (checked 2026-10-31) — <https://www.ietf.org/archive/id/draft-hardt-aauth-r3-00.txt>\n2. D. Hardt (Hellō), *draft-hardt-aauth-r3 — AAuth Rich Resource Requests (R3) (IETF Datatracker)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/draft-hardt-aauth-r3/>\n3. D. Hardt (Hellō), *AAuth Rich Resource Requests (R3) (draft-hardt-aauth-r3-00 HTML)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/html/draft-hardt-aauth-r3-00>\n4. Boston Identity (IAM Insights), *AAuth's R3 lets an agent ask for an API's named operations, and a person approve one exact call · IAM Insights* (checked 2026-10-31) — <https://insights.bostonidentity.com/research/ietf-datatracker-2026-09-28-aauth-rich-resource-requests>\n5. T. Lodderstedt, J. Richer, and B. Campbell, *RFC 9396: OAuth 2.0 Rich Authorization Requests* (May 2023) — <https://www.rfc-editor.org/rfc/rfc9396.html>\n6. Dick Hardt, *draft-hardt-oauth-aauth-protocol — AAuth Protocol (IETF Datatracker)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/draft-hardt-oauth-aauth-protocol/>\n7. Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation* (2026-07-28) — <https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "acip",
   "name": "Agent Context Interchange Protocol",
   "acronym": "ACIP",
   "aliases": [
    "draft-agarwal-acip"
   ],
   "collisions": [],
   "step": "permit",
   "parties": [
    "agent-human"
   ],
   "form": "document-format",
   "track": "ietf",
   "scope": "coding-tools",
   "question": "How can a coding-agent host resolve organization, project, task, user, and vendor instruction sources into one deterministic set of rules with defined precedence, path scoping, enforceability, and an audit receipt?",
   "analog": "AGENTS.md with a structured YAML schema, precedence algorithm, and resolution receipt",
   "origin": {
    "org": "S. Agarwal (individual IETF Internet-Draft submission)",
    "date": "2026-10-12"
   },
   "governance": "Individual Internet-Draft, Network Working Group; not adopted by an IETF working group",
   "native_status": "Internet-Draft, Intended Status: Informational; expires 15 April 2027; work in progress",
   "phase": "draft",
   "implementation": "none-found",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "version": {
    "label": "draft-agarwal-acip-00",
    "date": "2026-10-12"
   },
   "spec_url": "https://datatracker.ietf.org/doc/html/draft-agarwal-acip-00",
   "discovery": {
    "mechanism": "Fixed repository path (.agents/agent-context.yaml and .agents/policies/) plus a user-level config path; organization policy via a host-specific managed channel",
    "path": ".agents/agent-context.yaml"
   },
   "probe": {
    "method": "GET",
    "path": ".agents/agent-context.yaml",
    "parse": "Parse as a single YAML 1.2 document and check that it validates against the ACIP top-level members. Only applies to public repositories; file is in the repository, not the site root.",
    "on_absent": "Treat ACIP as not supported by that repository"
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://datatracker.ietf.org/doc/html/draft-agarwal-acip-00",
     "claim": "S. Agarwal, *ACIP (draft-agarwal-acip-00 HTML)*, checked 2026-10-31",
     "date": null,
     "quote": "Internet-Draft: draft-agarwal-acip-00 Published: 12 October 2026 Intended Status: Informational Expires: 15 April 2027 Author: S. Agarwal Agent Context Interchange Protocol Abstract AI coding agents obtain persistent context from organization, project, user, vendor, and task sources. Existing formats can carry prose, skills, or tool permissions, but they do not provide one interoperable resolution model for authority, file scope, enforceability, and audit evidence. This document defines the Agent Context Interchange Protocol (ACIP), a YAML-based format and host-resolution behavior for those sources. / The canonical project policy is.agents/agent-context.yaml at the repository root. A project MAY place additional ACIP files in.agents/policies/. ... The canonical user policy is $XDG_CONFIG_HOME/agent-context/agent-context.yaml when XDG_CONFIG_HOME is set. ... On Windows, %APPDATA%\\\\agent-context\\\\agent-context.yaml is the default. / cite them other than as \"work in progress.\" ... This Internet-Draft will expire on 15 April 2027. ... Workgroup: Network Working Group Internet-Draft: draft-agarwal-acip-00 Published: 12 October 2026 Intended Status: Informational Expires: 15 April 2027 Author: S. Agarwal / December 2025,. Agarwal Expires 15 April 2027 Page 26 Internet-Draft ACIP October 2026 ECMA431 / in its conformance documentation. On Windows, %APPDATA%\\\\agent-context\\\\agent-context.yaml is the default. Organization-level policy is supplied / for Automated Clients\", Work in Progress, Internet-Draft, draft-srijal-agents-policy-00, October 2025, < https://datatracker.ietf.org/doc/draft-srijal-agents-policy/ >. JUNIE / host resolves organization, project, task, user, and vendor sources before acting, applies path-scoped rules / Existing formats can carry prose, skills, or tool permissions, but they do not provide one interoperable resolution model for authority, file scope, enforceability, and audit evidence. / It defines source precedence, file matching, explicit distinctions between enforceable constraints, textual directives, and preferences, a resolution receipt ... A conforming host resolves organization, project, task, user, and vendor sources before acting, applies path-scoped rules only to matching operation targets, and records a receipt of the resolved inputs. / ACIP does not claim that natural-language instructions can force an agent to behave; enforcement requires a host or external control at the action boundary. ... It does not define agent-to-agent task exchange, tool discovery, model behavior, a general-purpose authorization token, or the contents of a specific organization's policy. ... These are proposals pending IETF review and IANA approval; this document does not claim that the assignments already exist.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://datatracker.ietf.org/doc/draft-agarwal-acip/",
     "claim": "S. Agarwal, *draft-agarwal-acip — Agent Context Interchange Protocol (IETF Datatracker)*, checked 2026-10-31",
     "date": null,
     "quote": "This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. | | | | | --- | --- | --- | | Document | Type | Active Internet-Draft (individual) | | Author | | Shubham Agarwal | | Last updated | 2026-10-12 | | RFC stream | | (None) | | Intended RFC status | | (None) | | Formats | | txt html xml htmlized bibtex bibxml | | Stream | Stream state | | (No stream defined) / 2026 An IETF individual Internet-Draft on Agent Delegation Receipts addresses signed authorization scopes, instruction / Intended status: Informational / registry contains: Agarwal Expires 15 April 2027 [Page 12] Internet-Draft ACIP October 2026 * / document. Intended for local or authenticated policy exchange; not a web-origin access policy.¶.agent-context.yaml Deprecated / as YAML in agent-context.yaml. A conforming host resolves organization, project, task, user, and vendor / Copyright (c) 2026 IETF Trust and the persons identified as the document authors.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://www.ietf.org/archive/id/draft-agarwal-acip-00.txt",
     "claim": "S. Agarwal, *Agent Context Interchange Protocol (draft-agarwal-acip-00)*, checked 2026-10-31",
     "date": null,
     "quote": "explanatory text. Agarwal Expires 15 April 2027 [Page 8] Internet-Draft ACIP October 2026 * / type. * *Additional information:* The preferred file extension is.agent- context.yaml. The format is a / *Discover sources.* Load available organization, project, task, user, and vendor sources. Record each source's",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://docs.oasis-open.org/xacml/3.0/xacml-3.0-core-spec-os-en.html",
     "claim": "OASIS, *eXtensible Access Control Markup Language (XACML) Version 3.0*, 2013-01-22",
     "date": "2013-01-22",
     "quote": "eXtensible Access Control Markup Language (XACML) Version 3.0",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://agents.md/",
     "claim": "AGENTS.md (Agentic AI Foundation), *AGENTS.md*, checked 2026-10-30",
     "date": null,
     "quote": "A simple, open format for guiding coding agents",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://claude.com/resources/articles/organization-skills-and-directory",
     "claim": "Anthropic, *Skills for organizations, partners, the ecosystem*, published 2025-12-18",
     "date": null,
     "quote": "We're also publishing Agent Skills as an open standard.",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Current : the current protocol version, which is ready for use and may continue to receive backwards compatible changes.",
     "ref": 7
    }
   ],
   "summary_md": "**Agent Context Interchange Protocol** (`ACIP`) is `draft-agarwal-acip-00`, an Informational Internet-Draft by S. Agarwal published 12 October 2026. It defines a YAML-based format and host-resolution behavior for persistent context from organization, project, user, vendor, and task sources. The canonical project policy is `.agents/agent-context.yaml` at the repository root. A project MAY place additional ACIP files in `.agents/policies/`. The canonical user policy is `$XDG_CONFIG_HOME/agent-context/agent-context.yaml` when `XDG_CONFIG_HOME` is set. On Windows, `%APPDATA%\\\\agent-context\\\\agent-context.yaml` is the default. `draft-agarwal-acip-00` expires 15 April 2027. The status text says to cite Internet-Drafts as work in progress. The document header names Workgroup Network Working Group, Intended Status Informational, and author S. Agarwal. Datatracker lists `draft-agarwal-acip-00` as an Active Internet-Draft (individual), last updated `2026-10-12`, with Intended RFC status (None) and stream state (No stream defined). This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process.",
   "part_of": null,
   "group": null,
   "use_cases": [
    "let-agents-act-on-my-site",
    "audit-agent-actions",
    "describe-agent-capabilities"
   ],
   "audience": [
    "agent-builder",
    "platform",
    "standards-body"
   ],
   "pairs_with": [
    "agents-md",
    "anthropic-agent-skills-format",
    "mcp"
   ],
   "prerequisites": [],
   "dispute": null,
   "last_verified": "2026-11-12",
   "history": [
    {
     "date": "2026-10-16",
     "note": "initial candidate record from primary source (https://datatracker.ietf.org/doc/html/draft-agarwal-acip-00)"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-agarwal-acip"
    }
   ],
   "ietf_tracker": {
    "doc": "draft-agarwal-acip",
    "rev": "00",
    "state": "active",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-10-12",
    "expires_utc": "2027-04-15",
    "as_of": "2026-10-31",
    "source": "https://datatracker.ietf.org/doc/draft-agarwal-acip/",
    "source_label": "per IETF Datatracker"
   },
   "hatnote_md": "",
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": null,
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Agent Context Interchange Protocol** (`ACIP`) is `draft-agarwal-acip-00`, an Informational Internet-Draft by S. Agarwal published 12 October 2026. It defines a YAML-based format and host-resolution behavior for persistent context from organization, project, user, vendor, and task sources. [1] The canonical project policy is `.agents/agent-context.yaml` at the repository root. A project MAY place additional ACIP files in `.agents/policies/`. The canonical user policy is `$XDG_CONFIG_HOME/agent-context/agent-context.yaml` when `XDG_CONFIG_HOME` is set. On Windows, `%APPDATA%\\\\agent-context\\\\agent-context.yaml` is the default. [1] `draft-agarwal-acip-00` expires 15 April 2027. The status text says to cite Internet-Drafts as work in progress. The document header names Workgroup Network Working Group, Intended Status Informational, and author S. Agarwal. [1] Datatracker lists `draft-agarwal-acip-00` as an Active Internet-Draft (individual), last updated `2026-10-12`, with Intended RFC status (None) and stream state (No stream defined). This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. [2]",
   "v05_identity_sentence_md": "**Agent Context Interchange Protocol** (`ACIP`) is `draft-agarwal-acip-00`, an Informational Internet-Draft by S. Agarwal published 12 October 2026. It defines a YAML-based format and host-resolution behavior for persistent context from organization, project, user, vendor, and task sources. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Permit](/category/permit/) (`permit`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "S. Agarwal (Individual IETF Internet-Draft submission) [2]"
    },
    {
     "label": "Governed by",
     "value_md": "No formal governance body (Individual IETF Internet-Draft; not endorsed by the IETF) [2]"
    },
    {
     "label": "Track",
     "value_md": "IETF Internet-Draft (Informational) [2]"
    },
    {
     "label": "Status",
     "value_md": "Internet-Draft, Intended Status: Informational; expires 15 April 2027; work in progress [1][2][3]"
    },
    {
     "label": "Version",
     "value_md": "`draft-agarwal-acip-00` (`format: 1`, published 12 October 2026, expires 15 April 2027) [2][3]"
    },
    {
     "label": "Wire format",
     "value_md": "YAML policy file (`agent-context.yaml`); Section 13 requests media type application/agent-context+yaml (type name application, subtype agent-context+yaml), and that media type and the ACIP registries are not registered in IANA [1][2][3]"
    },
    {
     "label": "Specification",
     "value_md": "https://datatracker.ietf.org/doc/html/draft-agarwal-acip-00 [1]"
    },
    {
     "label": "Found at",
     "value_md": "Canonical project policy at `.agents/agent-context.yaml` (plus `.agents/policies/`) and user policy at `$XDG_CONFIG_HOME/agent-context/agent-context.yaml`, combined with host-resolved organization, project, task, user, and vendor sources [1][2][3]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust Legal Provisions (BCP 78) [2]"
    },
    {
     "label": "IETF state",
     "value_md": "`draft-agarwal-acip-00` · **Active Internet-Draft** (expires 2027-04-15) · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-agarwal-acip/))"
    }
   ],
   "v05_problem_md": "Existing formats can carry prose, skills, or tool permissions, but they do not provide one interoperable resolution model for authority, file scope, enforceability, and audit evidence. [1] It defines source precedence, file matching, explicit distinctions between enforceable constraints, textual directives, and preferences, and a resolution receipt. A conforming host resolves organization, project, task, user, and vendor sources before acting, applies path-scoped rules only to matching operation targets, and records a receipt of the resolved inputs. [1] ACIP does not claim that natural-language instructions can force an agent to behave. Enforcement requires a host or external control at the action boundary. It does not define agent-to-agent task exchange, tool discovery, model behavior, a general-purpose authorization token, or the contents of a specific organization's policy. Requested media-type and registry assignments in Section 13, including media type application/agent-context+yaml, are proposals pending IETF review and IANA approval and are not registered. The specification does not claim that the assignments already exist. [1]",
   "v05_mechanism_delta_md": "It defines source precedence, file matching, explicit distinctions between enforceable constraints, textual directives, and preferences, and a resolution receipt. A conforming host resolves organization, project, task, user, and vendor sources before acting, applies path-scoped rules only to matching operation targets, and records a receipt of the resolved inputs. [1]",
   "v05_scope_boundary_md": "ACIP does not claim that natural-language instructions can force an agent to behave. Enforcement requires a host or external control at the action boundary. It does not define agent-to-agent task exchange, tool discovery, model behavior, a general-purpose authorization token, or the contents of a specific organization's policy. Requested media-type and registry assignments in Section 13, including media type application/agent-context+yaml, are proposals pending IETF review and IANA approval and are not registered. The specification does not claim that the assignments already exist. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "OASIS XACML 3.0 Core Specification",
      "spec_or_rfc": "OASIS XACML 3.0",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "ACIP reads agent-context.yaml, ranks organization, project, task, user, and vendor sources, and writes a resolution receipt, while XACML 3.0 combines XML policies into one access decision. [1][4]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "agents-md",
      "target_name": "AGENTS.md",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "ACIP reads YAML at .agents/agent-context.yaml with a precedence algorithm and a resolution receipt, and it is paired with AGENTS.md prose rather than replacing that file format. [1][5]"
     },
     {
      "target_id": "anthropic-agent-skills-format",
      "target_name": "Agent Skills",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Agent Skills stay a skill package, and ACIP's resolution receipt records when a skill file was one of the sources the host applied. [1][6]"
     },
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Per Appendix A.6, MCP standardizes context and tool integration whereas ACIP resolves local and managed instruction sources before an agent action; ACIP can be carried by MCP or ACP, but neither transport is required to read a repository file or resolve organization and user configuration. [1][7]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Permit protocols](/category/permit/)** — Category index for `permit` standards."
    }
   ],
   "v05_compiled_md": "---\nid: acip\ntitle: \"Agent Context Interchange Protocol\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: permit\nform: document-format\nwire_archetype: identity_auth_crypto\nspec_url: https://datatracker.ietf.org/doc/html/draft-agarwal-acip-00\nlast_checked: 2026-11-12\n---\n\n# Agent Context Interchange Protocol\n\n**Category:** [Permit](/category/permit/) (`permit`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-11-12\n\n**Agent Context Interchange Protocol** (`ACIP`) is `draft-agarwal-acip-00`, an Informational Internet-Draft by S. Agarwal published 12 October 2026. It defines a YAML-based format and host-resolution behavior for persistent context from organization, project, user, vendor, and task sources. [1] The canonical project policy is `.agents/agent-context.yaml` at the repository root. A project MAY place additional ACIP files in `.agents/policies/`. The canonical user policy is `$XDG_CONFIG_HOME/agent-context/agent-context.yaml` when `XDG_CONFIG_HOME` is set. On Windows, `%APPDATA%\\\\agent-context\\\\agent-context.yaml` is the default. [1] `draft-agarwal-acip-00` expires 15 April 2027. The status text says to cite Internet-Drafts as work in progress. The document header names Workgroup Network Working Group, Intended Status Informational, and author S. Agarwal. [1] Datatracker lists `draft-agarwal-acip-00` as an Active Internet-Draft (individual), last updated `2026-10-12`, with Intended RFC status (None) and stream state (No stream defined). This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. [2]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Permit](/category/permit/) (`permit`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | S. Agarwal (Individual IETF Internet-Draft submission) [2] |\n| **Governed by** | No formal governance body (Individual IETF Internet-Draft; not endorsed by the IETF) [2] |\n| **Track** | IETF Internet-Draft (Informational) [2] |\n| **Status** | Internet-Draft, Intended Status: Informational; expires 15 April 2027; work in progress [1][2][3] |\n| **Version** | `draft-agarwal-acip-00` (`format: 1`, published 12 October 2026, expires 15 April 2027) [2][3] |\n| **Wire format** | YAML policy file (`agent-context.yaml`); Section 13 requests media type application/agent-context+yaml (type name application, subtype agent-context+yaml), and that media type and the ACIP registries are not registered in IANA [1][2][3] |\n| **Specification** | https://datatracker.ietf.org/doc/html/draft-agarwal-acip-00 [1] |\n| **Found at** | Canonical project policy at `.agents/agent-context.yaml` (plus `.agents/policies/`) and user policy at `$XDG_CONFIG_HOME/agent-context/agent-context.yaml`, combined with host-resolved organization, project, task, user, and vendor sources [1][2][3] |\n| **Licence** | IETF Trust Legal Provisions (BCP 78) [2] |\n| **IETF state** | `draft-agarwal-acip-00` · **Active Internet-Draft** (expires 2027-04-15) · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-agarwal-acip/)) |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nExisting formats can carry prose, skills, or tool permissions, but they do not provide one interoperable resolution model for authority, file scope, enforceability, and audit evidence. [1] It defines source precedence, file matching, explicit distinctions between enforceable constraints, textual directives, and preferences, and a resolution receipt. A conforming host resolves organization, project, task, user, and vendor sources before acting, applies path-scoped rules only to matching operation targets, and records a receipt of the resolved inputs. [1] ACIP does not claim that natural-language instructions can force an agent to behave. Enforcement requires a host or external control at the action boundary. It does not define agent-to-agent task exchange, tool discovery, model behavior, a general-purpose authorization token, or the contents of a specific organization's policy. Requested media-type and registry assignments in Section 13, including media type application/agent-context+yaml, are proposals pending IETF review and IANA approval and are not registered. The specification does not claim that the assignments already exist. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **OASIS XACML 3.0 Core Specification** | `OASIS XACML 3.0` | Analogous to classic standard | ACIP reads agent-context.yaml, ranks organization, project, task, user, and vendor sources, and writes a resolution receipt, while XACML 3.0 combines XML policies into one access decision. [1][4] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[AGENTS.md](/protocols/agents-md/)** | Complements | ACIP reads YAML at .agents/agent-context.yaml with a precedence algorithm and a resolution receipt, and it is paired with AGENTS.md prose rather than replacing that file format. [1][5] |\n| **[Agent Skills](/protocols/anthropic-agent-skills-format/)** | Complements | Agent Skills stay a skill package, and ACIP's resolution receipt records when a skill file was one of the sources the host applied. [1][6] |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | Per Appendix A.6, MCP standardizes context and tool integration whereas ACIP resolves local and managed instruction sources before an agent action; ACIP can be carried by MCP or ACP, but neither transport is required to read a repository file or resolve organization and user configuration. [1][7] |\n\n---\n\n## See also\n\n- **Category:** [Permit protocols](/category/permit/)\n\n---\n\n## References\n\n1. S. Agarwal, *ACIP (draft-agarwal-acip-00 HTML)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/html/draft-agarwal-acip-00>\n2. S. Agarwal, *draft-agarwal-acip — Agent Context Interchange Protocol (IETF Datatracker)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/draft-agarwal-acip/>\n3. S. Agarwal, *Agent Context Interchange Protocol (draft-agarwal-acip-00)* (checked 2026-10-31) — <https://www.ietf.org/archive/id/draft-agarwal-acip-00.txt>\n4. OASIS, *eXtensible Access Control Markup Language (XACML) Version 3.0* (2013-01-22) — <https://docs.oasis-open.org/xacml/3.0/xacml-3.0-core-spec-os-en.html>\n5. AGENTS.md (Agentic AI Foundation), *AGENTS.md* (checked 2026-10-30) — <https://agents.md/>\n6. Anthropic, *Skills for organizations, partners, the ecosystem* (published 2025-12-18) — <https://claude.com/resources/articles/organization-skills-and-directory>\n7. Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation* (2026-07-28) — <https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "knowledge-linkset",
   "name": "The 'knowledge-linkset' Well-Known URI for Publishing Knowledge Artefacts",
   "acronym": "",
   "aliases": [
    "knowledge-linkset well-known URI",
    "draft-besleaga-agentic-knowledge-wellknown"
   ],
   "collisions": [],
   "step": "discover",
   "parties": [
    "agent-site"
   ],
   "form": "well-known-file",
   "track": "ietf",
   "scope": "general",
   "question": "How can a web origin publish, at one well-known location, a checkable list of the knowledge artefacts it offers (graph serializations, JSON-LD context, text file, chunk export, change ledger) so that agents can find them and verify digests?",
   "analog": "api-catalog (RFC 9727) applied to knowledge artefacts instead of APIs",
   "origin": {
    "org": "A. N. Besleaga (independent)",
    "date": "2026-09-30"
   },
   "governance": "Individual Internet-Draft, not adopted by a working group; Informational intended status; the artefact formats are defined in a separate AgenticSystemCore Specification.",
   "native_status": "Internet-Draft, Intended Status: Informational; expires 17 April 2027; work in progress",
   "phase": "draft",
   "implementation": "none-found",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "version": {
    "label": "draft-besleaga-agentic-knowledge-wellknown-01",
    "date": "2026-10-14"
   },
   "spec_url": "https://datatracker.ietf.org/doc/html/draft-besleaga-agentic-knowledge-wellknown-01",
   "discovery": {
    "mechanism": "well-known URI serving an application/linkset+json link set, with a profile URI; pages point to it with the 'describedby' relation",
    "path": "/.well-known/knowledge-linkset"
   },
   "probe": {
    "method": "GET",
    "path": "/.well-known/knowledge-linkset",
    "parse": "Check for HTTP 200 with Content-Type application/linkset+json carrying the profile https://w3id.org/agentic-system-core/profile/agentic-knowledge (or a Link rel=profile header); parse JSON with a single top-level 'linkset' member.",
    "on_absent": "Treat as not supported (404 or no linkset JSON)."
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.ietf.org/archive/id/draft-besleaga-agentic-knowledge-wellknown-01.txt",
     "claim": "Andrei Nicolae Besleaga (Independent), *The 'knowledge-linkset' Well-Known URI for Publishing Knowledge Artefacts (draft-besleaga-agentic-knowledge-wellknown-01)*, checked 2026-10-31",
     "date": null,
     "quote": "draft-besleaga-agentic-knowledge-wellknown-01 Abstract This document defines the \"knowledge-linkset\" well-known URI, at which a web origin publishes one link set describing the knowledge artefacts it makes available: graph serializations, a JSON-LD context, an agent-facing text file, a chunk export, a change ledger, and related resources. / A node MUST serve its discovery document at the path /.well-known/ knowledge-linkset of its origin, over HTTPS. A node MUST serve exactly one such document / The representation MUST be a JSON link set, media type application/ linkset+json / SHOULD send, at least on the origin's root route, the equivalent response header field: Link: </.well-known/knowledge-linkset>; rel=\"describedby\"; type=\"application/linkset+json\" / Intended status: Informational 14 October 2026 Expires: 17 April 2027 The 'knowledge-linkset' Well-Known URI for Publishing Knowledge Artefacts draft-besleaga-agentic-knowledge-wellknown-01 / version it follows in its agsc-spec-version attribute. Change controller: Andrei N. Besleaga, Independent, [email redacted]. / Network Working Group A. N. Besleaga Internet-Draft Independent Intended status: Informational 14 October 2026 / Expires: 17 April 2027 The 'knowledge-linkset' Well-Known URI for Publishing Knowledge Artefacts draft-besleaga-agentic-knowledge-wellknown-01 Abstract / an origin that publishes a knowledge base in several serializations has had no uniform place to list them, no uniform way to say which serialization is which, and no uniform way to let a client check that what it fetched is what was published. / This document defines that place. A web origin serves one resource at /.well-known/knowledge-linkset / Each artefact link may carry a SHA-256 digest, expressed with the syntax of HTTP digest fields, so that a client can check that a retrieved artefact is the one the publisher described. / A profile URI identifies the conventions the link set follows. / The mechanism defines no new media type and no new link relation type: a page points at the resource with the existing \"describedby\" relation. / The canonical, normative definition of the artefacts themselves, of the Bundle that contains them, and of the byte-level forms their digests cover, is the AgenticSystemCore Specification [AGSC-SPEC]. This document specifies the discovery resource / This document requests no IANA action. It creates no registry, and requests no media type, no URI scheme, no link relation type, and no well-known URI registration.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://datatracker.ietf.org/doc/draft-besleaga-agentic-knowledge-wellknown/",
     "claim": "Andrei Nicolae Besleaga (Independent), *draft-besleaga-agentic-knowledge-wellknown-01 — The 'knowledge-linkset' Well-Known URI for Publishing Knowledge Artefacts (IETF Datatracker)*, checked 2026-10-31",
     "date": null,
     "quote": "This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. ... Active Internet-Draft (individual) ... Andrei Nicolae Besleaga / Last updated | 2026-10-14 | | RFC stream | | (None) | | Intended RFC status | | (None) / previous authors: Andrei Besleaga | | 2026-10-14 | 01 | Andrei Besleaga | Uploaded",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://datatracker.ietf.org/doc/html/draft-besleaga-agentic-knowledge-wellknown-01",
     "claim": "Andrei Nicolae Besleaga (Independent), *The 'knowledge-linkset' Well-Known URI for Publishing Knowledge Artefacts (draft-besleaga-agentic-knowledge-wellknown-01 HTML)*, checked 2026-10-31",
     "date": null,
     "quote": "Intended Status: Informational / April 2027 [Page] Workgroup: Network Working Group Internet-Draft: draft-besleaga-agentic-knowledge-wellknown-01 Published: 14 October 2026 Intended / * Common Name: AgenticSystemCore knowledge link set profile¶ * Description: Identifies an application/linkset+json document / Licensing, and Policy\", Work in Progress, Internet-Draft, draft-car-ai-txt-wellknown-00, 12 June 2026, < https://datatracker.ietf.org/doc/html/draft-car-ai-txt-wellknown-00 >. / described in Section 11.2.¶ application/linkset+json https://w3id.org/agentic-system-core/profile/agentic-knowledge The suffix names the class of resource served / Copyright (c) 2026 IETF Trust and the persons identified as the document authors.",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://www.rfc-editor.org/rfc/rfc9264.html",
     "claim": "IETF, *RFC 9264: Linkset: Media Types and a Link Relation Type for Link Sets*, IETF RFC",
     "date": null,
     "quote": "RFC 9264: Linkset: Media Types and a Link Relation Type for Link Sets /* NOTE: Changes at the bottom of this file overrides some earlier settings.",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://www.rfc-editor.org/rfc/rfc8615.html",
     "claim": "IETF, *RFC 8615: Well-Known Uniform Resource Identifiers (URIs)*, IETF RFC",
     "date": null,
     "quote": "This memo defines a path prefix for \"well-known locations\",",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://datatracker.ietf.org/doc/rfc9727/",
     "claim": "IETF Datatracker, *RFC 9727: api-catalog: A Well-Known URI and Link Relation to Help Discovery of APIs*, Proposed Standard (June 2025); last updated 2026-05-20",
     "date": null,
     "quote": "RFC - Proposed Standard (June 2025)",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://llmstxt.org",
     "claim": "Jeremy Howard, *The /llms.txt file, v2*, published 2024-09-03; modified 2026-08-10; HTTP last-modified 2026-09-24",
     "date": null,
     "quote": "This is v2 of the proposal … The llms.txt specification is open for community input. A GitHub repository hosts this informal overview",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://github.com/GoogleCloudPlatform/open-knowledge-format/blob/main/SPEC.md",
     "claim": "GoogleCloudPlatform, *Open Knowledge Format (OKF), Version 0.2*, Version 0.2; fetched 2026-10-30",
     "date": null,
     "quote": "Version 0.2",
     "ref": 8
    }
   ],
   "summary_md": "**The 'knowledge-linkset' Well-Known URI for Publishing Knowledge Artefacts** (`draft-besleaga-agentic-knowledge-wellknown-01`) defines the \"knowledge-linkset\" well-known URI, at which a web origin publishes one link set describing the knowledge artefacts it makes available: graph serializations, a JSON-LD context, an agent-facing text file, a chunk export, a change ledger, and related resources. This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. Datatracker lists the document type as Active Internet-Draft (individual). The author is Andrei Nicolae Besleaga. A node MUST serve its discovery document at the path `/.well-known/knowledge-linkset` of its origin, over HTTPS. A node MUST serve exactly one such document. The representation MUST be a JSON link set, media type `application/linkset+json`. A node SHOULD send, at least on the origin's root route, the response header field `Link: </.well-known/knowledge-linkset>; rel=\"describedby\"; type=\"application/linkset+json\"`. `draft-besleaga-agentic-knowledge-wellknown-01` states Intended status: Informational, is dated 14 October 2026, and the header says Expires: 17 April 2027. Datatracker lists Last updated 2026-10-14, RFC stream (None), and Intended RFC status (None).",
   "part_of": null,
   "group": null,
   "use_cases": [
    "serve-content-to-agents",
    "discover-my-api"
   ],
   "audience": [
    "site-owner",
    "agent-builder",
    "standards-body"
   ],
   "pairs_with": [
    "api-catalog-rfc9727",
    "llms-txt",
    "okf"
   ],
   "prerequisites": [],
   "dispute": null,
   "last_verified": "2026-11-12",
   "history": [
    {
     "date": "2026-10-16",
     "note": "initial candidate record from primary source (https://datatracker.ietf.org/doc/html/draft-besleaga-agentic-knowledge-wellknown-01)"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-besleaga-agentic-knowledge-wellknown"
    }
   ],
   "ietf_tracker": {
    "doc": "draft-besleaga-agentic-knowledge-wellknown",
    "rev": "01",
    "state": "active",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-10-14",
    "expires_utc": "2027-04-17",
    "as_of": "2026-10-31",
    "source": "https://datatracker.ietf.org/doc/draft-besleaga-agentic-knowledge-wellknown/",
    "source_label": "per IETF Datatracker"
   },
   "hatnote_md": "",
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "web_discovery",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": null,
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**The 'knowledge-linkset' Well-Known URI for Publishing Knowledge Artefacts** (`draft-besleaga-agentic-knowledge-wellknown-01`) defines the \"knowledge-linkset\" well-known URI, at which a web origin publishes one link set describing the knowledge artefacts it makes available: graph serializations, a JSON-LD context, an agent-facing text file, a chunk export, a change ledger, and related resources. [1] This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. Datatracker lists the document type as Active Internet-Draft (individual). The author is Andrei Nicolae Besleaga. [2] A node MUST serve its discovery document at the path `/.well-known/knowledge-linkset` of its origin, over HTTPS. A node MUST serve exactly one such document. [1] The representation MUST be a JSON link set, media type `application/linkset+json`. [1] A node SHOULD send, at least on the origin's root route, the response header field `Link: </.well-known/knowledge-linkset>; rel=\"describedby\"; type=\"application/linkset+json\"`. [1] `draft-besleaga-agentic-knowledge-wellknown-01` states Intended status: Informational, is dated 14 October 2026, and the header says Expires: 17 April 2027. [1] Datatracker lists Last updated 2026-10-14, RFC stream (None), and Intended RFC status (None). [2]",
   "v05_identity_sentence_md": "**The 'knowledge-linkset' Well-Known URI for Publishing Knowledge Artefacts** (`draft-besleaga-agentic-knowledge-wellknown-01`) defines the \"knowledge-linkset\" well-known URI, at which a web origin publishes one link set describing the knowledge artefacts it makes available: graph serializations, a JSON-LD context, an agent-facing text file, a chunk export, a change ledger, and related resources. [1] This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. Datatracker lists the document type as Active Internet-Draft (individual). The author is Andrei Nicolae Besleaga. [2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Discover](/category/discover/) (`discover`)"
    },
    {
     "label": "Form",
     "value_md": "Well-known file (`well-known-file`)"
    },
    {
     "label": "Originated by",
     "value_md": "Andrei Nicolae Besleaga (Independent) [1][2]"
    },
    {
     "label": "Governed by",
     "value_md": "Individual IETF Internet-Draft submission (`Network Working Group`, author affiliation `Independent`; Datatracker RFC stream `(None)`) [1][2]"
    },
    {
     "label": "Track",
     "value_md": "IETF Internet-Draft (Informational) [3]"
    },
    {
     "label": "Status",
     "value_md": "Internet-Draft, Intended Status: Informational; expires 17 April 2027; work in progress [1][3]"
    },
    {
     "label": "Version",
     "value_md": "`draft-besleaga-agentic-knowledge-wellknown-01` (Published 14 October 2026; expires 17 April 2027) [1][3]"
    },
    {
     "label": "Wire format",
     "value_md": "RFC 9264 JSON Link Set (`application/linkset+json`) with RFC 9530 / RFC 9651 SHA-256 `digest` attributes [3]"
    },
    {
     "label": "Specification",
     "value_md": "https://datatracker.ietf.org/doc/html/draft-besleaga-agentic-knowledge-wellknown-01 [3]"
    },
    {
     "label": "Found at",
     "value_md": "`GET /.well-known/knowledge-linkset`, `Link: <...>; rel=\"describedby\"`, and `profile=\"https://w3id.org/agentic-system-core/profile/agentic-knowledge\"` [3]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust Legal Provisions (BCP 78) [3]"
    },
    {
     "label": "IETF state",
     "value_md": "`draft-besleaga-agentic-knowledge-wellknown-01` · **Active Internet-Draft** (expires 2027-04-17) · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-besleaga-agentic-knowledge-wellknown/))"
    }
   ],
   "v05_problem_md": "An origin that publishes a knowledge base in several serializations has had no uniform place to list them, no uniform way to say which serialization is which, and no uniform way to let a client check that what it fetched is what was published. [1] The draft defines that place. A web origin serves one resource at `/.well-known/knowledge-linkset`. [1] Each artefact link may carry a SHA-256 digest, expressed with the syntax of HTTP digest fields, so that a client can check that a retrieved artefact is the one the publisher described. [1] A profile URI identifies the conventions the link set follows. [1] The mechanism defines no new media type and no new link relation type: a page points at the resource with the existing \"describedby\" relation. [1] The canonical, normative definition of the artefacts themselves, of the Bundle that contains them, and of the byte-level forms their digests cover, is the AgenticSystemCore Specification. The draft specifies the discovery resource. [1] The draft requests no IANA action. It creates no registry, and requests no media type, no URI scheme, no link relation type, and no well-known URI registration. [1]",
   "v05_mechanism_delta_md": "The draft defines that place. A web origin serves one resource at `/.well-known/knowledge-linkset`. [1] Each artefact link may carry a SHA-256 digest, expressed with the syntax of HTTP digest fields, so that a client can check that a retrieved artefact is the one the publisher described. [1] A profile URI identifies the conventions the link set follows. [1]",
   "v05_scope_boundary_md": "The mechanism defines no new media type and no new link relation type: a page points at the resource with the existing \"describedby\" relation. [1] The canonical, normative definition of the artefacts themselves, of the Bundle that contains them, and of the byte-level forms their digests cover, is the AgenticSystemCore Specification. The draft specifies the discovery resource. [1] The draft requests no IANA action. It creates no registry, and requests no media type, no URI scheme, no link relation type, and no well-known URI registration. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "Web Linking & Linksets (RFC 8288 / RFC 9264)",
      "spec_or_rfc": "RFC 8288 / RFC 9264",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "The draft serves one application/linkset+json document at /.well-known/knowledge-linkset, links may carry SHA-256 digests, and pages point at it with rel=\"describedby\", using RFC 9264 linksets rather than defining a new media type or link relation. [1][4]"
     },
     {
      "name": "Well-Known URIs (RFC 8615)",
      "spec_or_rfc": "RFC 8615",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "The draft normatively serves its application/linkset+json document at /.well-known/knowledge-linkset, which uses the RFC 8615 well-known prefix, and RFC 8615 does not define that document. [1][5]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "api-catalog-rfc9727",
      "target_name": "api-catalog (RFC 9727)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "knowledge-linkset publishes knowledge artefacts as application/linkset+json at /.well-known/knowledge-linkset, with optional SHA-256 digests and rel=\"describedby\", while RFC 9727 is application/linkset+json at /.well-known/api-catalog with profile https://www.rfc-editor.org/info/rfc9727 and rel=\"api-catalog\". [1][6]"
     },
     {
      "target_id": "llms-txt",
      "target_name": "llms.txt",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "knowledge-linkset is application/linkset+json at /.well-known/knowledge-linkset, while llms.txt is Markdown at /llms.txt or a subpath with a required H1, an optional blockquote, and H2 link sections, and may use rel=\"describedby\" to point at that file. [1][7]"
     },
     {
      "target_id": "okf",
      "target_name": "Open Knowledge Format",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "knowledge-linkset is a catalog of knowledge artefacts at /.well-known/knowledge-linkset and can attach a SHA-256 digest, while OKF is a bundle of Markdown files with YAML frontmatter and defines no web path. [1][8]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Discover protocols](/category/discover/)** — Category index for `discover` standards."
    }
   ],
   "v05_compiled_md": "---\nid: knowledge-linkset\ntitle: \"The 'knowledge-linkset' Well-Known URI for Publishing Knowledge Artefacts\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: discover\nform: well-known-file\nwire_archetype: web_discovery\nspec_url: https://datatracker.ietf.org/doc/html/draft-besleaga-agentic-knowledge-wellknown-01\nlast_checked: 2026-11-12\n---\n\n# The 'knowledge-linkset' Well-Known URI for Publishing Knowledge Artefacts\n\n**Category:** [Discover](/category/discover/) (`discover`) · **Form:** Well-known file (`well-known-file`) · **Last checked:** 2026-11-12\n\n**The 'knowledge-linkset' Well-Known URI for Publishing Knowledge Artefacts** (`draft-besleaga-agentic-knowledge-wellknown-01`) defines the \"knowledge-linkset\" well-known URI, at which a web origin publishes one link set describing the knowledge artefacts it makes available: graph serializations, a JSON-LD context, an agent-facing text file, a chunk export, a change ledger, and related resources. [1] This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. Datatracker lists the document type as Active Internet-Draft (individual). The author is Andrei Nicolae Besleaga. [2] A node MUST serve its discovery document at the path `/.well-known/knowledge-linkset` of its origin, over HTTPS. A node MUST serve exactly one such document. [1] The representation MUST be a JSON link set, media type `application/linkset+json`. [1] A node SHOULD send, at least on the origin's root route, the response header field `Link: </.well-known/knowledge-linkset>; rel=\"describedby\"; type=\"application/linkset+json\"`. [1] `draft-besleaga-agentic-knowledge-wellknown-01` states Intended status: Informational, is dated 14 October 2026, and the header says Expires: 17 April 2027. [1] Datatracker lists Last updated 2026-10-14, RFC stream (None), and Intended RFC status (None). [2]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Discover](/category/discover/) (`discover`) |\n| **Form** | Well-known file (`well-known-file`) |\n| **Originated by** | Andrei Nicolae Besleaga (Independent) [1][2] |\n| **Governed by** | Individual IETF Internet-Draft submission (`Network Working Group`, author affiliation `Independent`; Datatracker RFC stream `(None)`) [1][2] |\n| **Track** | IETF Internet-Draft (Informational) [3] |\n| **Status** | Internet-Draft, Intended Status: Informational; expires 17 April 2027; work in progress [1][3] |\n| **Version** | `draft-besleaga-agentic-knowledge-wellknown-01` (Published 14 October 2026; expires 17 April 2027) [1][3] |\n| **Wire format** | RFC 9264 JSON Link Set (`application/linkset+json`) with RFC 9530 / RFC 9651 SHA-256 `digest` attributes [3] |\n| **Specification** | https://datatracker.ietf.org/doc/html/draft-besleaga-agentic-knowledge-wellknown-01 [3] |\n| **Found at** | `GET /.well-known/knowledge-linkset`, `Link: <...>; rel=\"describedby\"`, and `profile=\"https://w3id.org/agentic-system-core/profile/agentic-knowledge\"` [3] |\n| **Licence** | IETF Trust Legal Provisions (BCP 78) [3] |\n| **IETF state** | `draft-besleaga-agentic-knowledge-wellknown-01` · **Active Internet-Draft** (expires 2027-04-17) · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-besleaga-agentic-knowledge-wellknown/)) |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nAn origin that publishes a knowledge base in several serializations has had no uniform place to list them, no uniform way to say which serialization is which, and no uniform way to let a client check that what it fetched is what was published. [1] The draft defines that place. A web origin serves one resource at `/.well-known/knowledge-linkset`. [1] Each artefact link may carry a SHA-256 digest, expressed with the syntax of HTTP digest fields, so that a client can check that a retrieved artefact is the one the publisher described. [1] A profile URI identifies the conventions the link set follows. [1] The mechanism defines no new media type and no new link relation type: a page points at the resource with the existing \"describedby\" relation. [1] The canonical, normative definition of the artefacts themselves, of the Bundle that contains them, and of the byte-level forms their digests cover, is the AgenticSystemCore Specification. The draft specifies the discovery resource. [1] The draft requests no IANA action. It creates no registry, and requests no media type, no URI scheme, no link relation type, and no well-known URI registration. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **Web Linking & Linksets (RFC 8288 / RFC 9264)** | `RFC 8288 / RFC 9264` | Profiles classic standard | The draft serves one application/linkset+json document at /.well-known/knowledge-linkset, links may carry SHA-256 digests, and pages point at it with rel=\"describedby\", using RFC 9264 linksets rather than defining a new media type or link relation. [1][4] |\n| **Well-Known URIs (RFC 8615)** | `RFC 8615` | Profiles classic standard | The draft normatively serves its application/linkset+json document at /.well-known/knowledge-linkset, which uses the RFC 8615 well-known prefix, and RFC 8615 does not define that document. [1][5] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[api-catalog (RFC 9727)](/protocols/api-catalog-rfc9727/)** | Peer alternative | knowledge-linkset publishes knowledge artefacts as application/linkset+json at /.well-known/knowledge-linkset, with optional SHA-256 digests and rel=\"describedby\", while RFC 9727 is application/linkset+json at /.well-known/api-catalog with profile https://www.rfc-editor.org/info/rfc9727 and rel=\"api-catalog\". [1][6] |\n| **[llms.txt](/protocols/llms-txt/)** | Peer alternative | knowledge-linkset is application/linkset+json at /.well-known/knowledge-linkset, while llms.txt is Markdown at /llms.txt or a subpath with a required H1, an optional blockquote, and H2 link sections, and may use rel=\"describedby\" to point at that file. [1][7] |\n| **[Open Knowledge Format](/protocols/okf/)** | Complements | knowledge-linkset is a catalog of knowledge artefacts at /.well-known/knowledge-linkset and can attach a SHA-256 digest, while OKF is a bundle of Markdown files with YAML frontmatter and defines no web path. [1][8] |\n\n---\n\n## See also\n\n- **Category:** [Discover protocols](/category/discover/)\n\n---\n\n## References\n\n1. Andrei Nicolae Besleaga (Independent), *The 'knowledge-linkset' Well-Known URI for Publishing Knowledge Artefacts (draft-besleaga-agentic-knowledge-wellknown-01)* (checked 2026-10-31) — <https://www.ietf.org/archive/id/draft-besleaga-agentic-knowledge-wellknown-01.txt>\n2. Andrei Nicolae Besleaga (Independent), *draft-besleaga-agentic-knowledge-wellknown-01 — The 'knowledge-linkset' Well-Known URI for Publishing Knowledge Artefacts (IETF Datatracker)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/draft-besleaga-agentic-knowledge-wellknown/>\n3. Andrei Nicolae Besleaga (Independent), *The 'knowledge-linkset' Well-Known URI for Publishing Knowledge Artefacts (draft-besleaga-agentic-knowledge-wellknown-01 HTML)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/html/draft-besleaga-agentic-knowledge-wellknown-01>\n4. IETF, *RFC 9264: Linkset: Media Types and a Link Relation Type for Link Sets* (IETF RFC) — <https://www.rfc-editor.org/rfc/rfc9264.html>\n5. IETF, *RFC 8615: Well-Known Uniform Resource Identifiers (URIs)* (IETF RFC) — <https://www.rfc-editor.org/rfc/rfc8615.html>\n6. IETF Datatracker, *RFC 9727: api-catalog: A Well-Known URI and Link Relation to Help Discovery of APIs* (Proposed Standard (June 2025); last updated 2026-05-20) — <https://datatracker.ietf.org/doc/rfc9727/>\n7. Jeremy Howard, *The /llms.txt file, v2* (published 2024-09-03; modified 2026-08-10; HTTP last-modified 2026-09-24) — <https://llmstxt.org>\n8. GoogleCloudPlatform, *Open Knowledge Format (OKF), Version 0.2* (Version 0.2; fetched 2026-10-30) — <https://github.com/GoogleCloudPlatform/open-knowledge-format/blob/main/SPEC.md>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "scitt-ai-agent-execution",
   "name": "AI Agent Execution Profile of SCITT",
   "acronym": "AIR",
   "aliases": [
    "AgentInteractionRecord",
    "Evidence Envelope Specification",
    "draft-emirdag-scitt-ai-agent-execution"
   ],
   "collisions": [],
   "step": "account",
   "parties": [
    "agent-agent",
    "agent-human"
   ],
   "form": "document-format",
   "track": "ietf",
   "scope": "general",
   "question": "How can an agent operator produce independently verifiable, tamper-evident records of an AI agent's material actions using SCITT signed statements and an independent transparency service?",
   "analog": "A notarized, hash-chained audit ledger held by a third-party custodian, applied to agent actions via SCITT.",
   "origin": {
    "org": "Pinar Emirdag and Daniel Feichtinger, Veridic Inc.",
    "date": "2026-04-11"
   },
   "governance": "Individual IETF Internet-Draft (`Intended status: Informational`, `IESG state: I-D Exists`, not endorsed by the IETF and not adopted by a Working Group); companion `Evidence Envelope Specification v0.1` (`EES v0.1`) maintained by Veridic Inc.",
   "native_status": "Revision `-01` published 12 October 2026 (35 pages, expires 15 April 2027), following `-00` (posted 11 April 2026, header dated 13 April 2026, 25 pages)",
   "phase": "draft",
   "implementation": "none-found",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "version": {
    "label": "draft-emirdag-scitt-ai-agent-execution-01 (air-1.0 / EES v0.1)",
    "date": "2026-10-12"
   },
   "spec_url": "https://www.ietf.org/archive/id/draft-emirdag-scitt-ai-agent-execution-01.txt",
   "discovery": {
    "mechanism": "Not a web-discovery standard. Records are registered with a SCITT Transparency Service (Evidence Custodian) and verified by relying parties out of band.",
    "path": null
   },
   "probe": {
    "method": "NONE",
    "path": "",
    "parse": "",
    "on_absent": "No site-level probe is defined; support cannot be observed from a site's public endpoints."
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.ietf.org/archive/id/draft-emirdag-scitt-ai-agent-execution-01.txt",
     "claim": "Pinar Emirdag and Daniel Feichtinger (Veridic Inc.), *AI Agent Execution Profile of SCITT (draft-emirdag-scitt-ai-agent-execution-01)*, 2026-10-12",
     "date": "2026-10-12",
     "quote": "Upon successful admission, the Transparency Service issues an Evidence Receipt (COSE_Sign1 signed by the Service's own key) containing: record_id, chain_hash, sequence_number, admission_timestamp_ms, and Service operator identifier. The admission_timestamp_ms is assigned by the Transparency Service. The AIR existed no later than that time. The timestamps inside the AIR are asserted by the Issuer. The Evidence Receipt is the primary artefact presented in verification, audit, or legal proceedings. / This document defines a SCITT (Supply Chain Integrity, Transparency, and Trust) profile for creating independently verifiable, tamper-evident records of autonomous AI agent actions. The profile defines the AgentInteractionRecord (AIR) as the COSE_Sign1 signed statement payload for material agent actions / Pinar Emirdag … Veridic Inc. … Daniel Feichtinger / Intended status: Informational … 12 October 2026 … draft-emirdag-scitt-ai-agent-execution-01 … This Internet-Draft will expire on 15 April 2027. / The Agent Operator is the Issuer. The Operator's evidence pipeline captures Material Actions at execution time, normalises them to the AIR schema, applies redaction policy, and signs the record using an ECDSA P-256 key pair. / The Transparency Service MUST maintain the chain as append-only (records once admitted cannot be deleted, modified, or reordered), issue an Evidence Receipt for each admitted record via [I-D.ietf-scitt-scrapi], and implement the non-equivocation guarantee. / This revision does not yet define the proofs on which that property rests / Relying Parties arrive after the fact, with zero prior context, and must be able to verify records without operator cooperation. / draft-emirdag-scitt-ai-agent-execution-01 / This is a maintenance revision. It updates references, positions the profile against related drafts, narrows several statements to what the mechanisms deliver, and records deferred items. / It makes no change to the AIR schema, the hash chain construction, the verification algorithm, or the admission requirements of the Registration Policy. No field of the AIR schema is renamed, retyped, or removed, and no normative requirement is added. / Implementations of this profile do not require the EES; the AIR schema in Section 5.2 is self-contained. … The schema in Section 5.2 is taken from EES v0.1 / AI Agent Execution October 2026 Email: [email redacted] URI: https://theveridic.ai Emirdag & Feichtinger Expires 15 / Network Working Group P. Emirdag Internet-Draft D. Feichtinger Intended status: Informational Veridic Inc. Expires: / Intended status: Informational / Expires 15 April 2027 [Page 5] Internet-Draft SCITT AI Agent Execution October 2026 AgentInteractionRecord / A Transparency Service operating this profile MUST enforce the following policy. Records failing any requirement MUST be rejected. The Registration Policy and associated trust anchors MUST be registered as Signed Statements on the Transparency Service's verifiable data structure, per Section 5.1.1.1 of [RFC9943]. 6.1. Schema Conformance: Valid COSE_Sign1 with ES256; protected header MUST include CWT Claims (label 15) with iss and sub per Section 6 of [RFC9943] and [RFC9597], and key identification via kid, x5t, or x5chain; valid AIR per CDDL; schema_version \"air-1.0\"; all REQUIRED fields non-null; valid action_type. 6.2. Identity Binding: Minimum Level 1. Services MAY require Level 2 or 3 for specific categories. 6.3. Temporal Ordering: action_timestamp_ms <= captured_timestamp_ms; captured within 300s of submission; prev_chain_hash matches; sequence_number correct. / This document defines a SCITT (Supply Chain Integrity, Transparency, and Trust) profile for creating independently verifiable, tamper- evident records of autonomous AI agent actions. The profile defines the AgentInteractionRecord (AIR) as the COSE_Sign1 signed statement payload for material agent actions; maps SCITT roles to the agent execution context, with the Agent Operator as Issuer and an independent Evidence Custodian as Transparency Service; specifies Registration Policy requirements including hash chain integrity, temporal ordering, and sequence completeness; defines a redaction receipt mechanism for privacy-preserving evidence custody; and provides compliance mappings to EU AI Act Articles 12 and 19, DORA, NIST AI RMF, MAS AI Risk Management Guidelines, PCI DSS, and MiFID II. / The Evidence Custodian is an independent party -- not the Agent Operator, without financial or operational interest in the Agent's behaviour -- that holds the append-only Evidence Chain under custodial SLAs. The Transparency Service MUST maintain the chain as append-only (records once admitted cannot be deleted, modified, or reordered), issue an Evidence Receipt for each admitted record via [I-D.ietf-scitt-scrapi], and implement the non-equivocation guarantee. / When such an action is later disputed, a counterparty, an auditor, or a regulator needs to be able to establish, without relying on the agent operator, who made the record of it, the latest time at which that record can have been made, and that the record has not been altered since. / Operator-controlled audit logs are mutable by the operator, carry no third-party attestation, and are not designed for independent verification. / This profile addresses the gap by defining how independently custodied, post-execution evidence records bind to the SCITT architecture. / Every Material Action MUST produce exactly one AgentInteractionRecord. / The admission_timestamp_ms is assigned by the Transparency Service. The AIR existed no later than that time. The timestamps inside the AIR are asserted by the Issuer. / Under this profile, an agent that acts without producing a signed record has left the scope of what can be externally verified. This profile does not establish that a record is accurate. / A gap in sequence_number is evidence that a record was produced and not registered. An action that was never recorded leaves no gap.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://www.ietf.org/archive/id/draft-gilda-audit-agent-audit-record-03.txt",
     "claim": "S. Gilda, *An Audit Record Format for AI Agent Authorization Decisions (draft-gilda-audit-agent-audit-record-03)*, 29 October 2026",
     "date": null,
     "quote": "An Audit Record Format for AI Agent Authorization Decisions draft-gilda-audit-agent-audit-record-03 / S. Gilda Internet-Draft 29 October 2026 Intended status: Standards Track Expires: 2 May 2027",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://www.ietf.org/archive/id/draft-ietf-scitt-scrapi-11.txt",
     "claim": "H. Birkholz, J. Geater, and A. Delignat-Lavaud, *Supply Chain Integrity, Transparency, and Trust (SCITT) Reference APIs (draft-ietf-scitt-scrapi-11)*, 2026-06-26",
     "date": "2026-06-26",
     "quote": "Supply Chain Integrity, Transparency, and Trust (SCITT) Reference APIs draft-ietf-scitt-scrapi-11 / implementations of, a Transparency Service as specified in I-D.draft-ietf-scitt-architecture. As such the security considerations",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://raw.githubusercontent.com/THEVERIDIC/VERIDIC/main/standards/ees/v0.2/air.schema.json",
     "claim": "VERIDIC Inc. (`THEVERIDIC/VERIDIC`), *AgentInteractionRecord JSON Schema (standards/ees/v0.2/air.schema.json)*, 2026-10-29",
     "date": "2026-10-29",
     "quote": "schema_version air-1.0. DRAFT for EES v0.2: field set and types transcribed from the published EES v0.1 field tables (sections 4.1 and 4.2). / \"SHA-256(content_hash || prev_chain_hash || action_timestamp_ms || agent_id) per EES section 5.1\" }, \"sequence_number\": {",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://theveridic.github.io/VERIDIC/standards/ees/v0.1/",
     "claim": "Pinar Emirdag (VERIDIC Inc.), *Evidence Envelope Specification v0.1 — VERIDIC*, 2026-04",
     "date": null,
     "quote": "April 2026 · VERIDIC Inc. Canonical URL: theveridic.github.io/VERIDIC/standards/ees/v0.1 · Contact: [email redacted] This specification is / Evidence Envelope Specification v0.1 / specification and the AI Agent Execution Profile of SCITT (draft-emirdag-scitt-ai-agent-execution-00) are complementary. The EES / This specification is published under the Apache 2.0 licence. It may be reproduced, implemented, and extended without restriction. The Evidence Envelope Specification governs the format, schema, and verification algorithm only. VERIDIC's custody infrastructure — the append-only chain, key management, jurisdictional SLAs, institutional access controls — remains proprietary. This is version 0.1. The specification is stable enough for implementation and reference but may be amended in future versions. Governance of this specification will transition to a neutral Technical Steering Committee. Until that transition, VERIDIC Inc. maintains editorial control.",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://github.com/THEVERIDIC/VERIDIC",
     "claim": "GitHub REST API, *THEVERIDIC/VERIDIC Repository Metadata*, 2026-10-29",
     "date": "2026-10-29",
     "quote": "\"https://api.github.com/users/THEVERIDIC/received_events\", \"type\": \"Organization\", \"user_view_type\": \"public\", \"site_admin\": false }, \"html_url\": \"https://github.com/THEVERIDIC/VERIDIC\", \"description\": \"Set-up",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://datatracker.ietf.org/doc/draft-emirdag-scitt-ai-agent-execution/",
     "claim": "IETF Datatracker, *draft-emirdag-scitt-ai-agent-execution-01 - AI Agent Execution Profile of SCITT*, 2026-10-12",
     "date": "2026-10-12",
     "quote": "Emirdag Internet-Draft D. Feichtinger Intended status: Informational Veridic Inc. Expires: 15 April 2027 12 / [Page 34] Internet-Draft SCITT AI Agent Execution October 2026 Email: [email redacted] URI: https://theveridic.ai Emirdag / Emirdag & Feichtinger Expires 15 April 2027 [Page 31] Internet-Draft SCITT AI Agent Execution",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://datatracker.ietf.org/doc/draft-emirdag-scitt-ai-agent-execution/doc.json",
     "claim": "IETF Datatracker JSON Metadata, *IETF Datatracker document JSON metadata for draft-emirdag-scitt-ai-agent-execution*, 2026-10-29",
     "date": "2026-10-29",
     "quote": "\"published\": \"2026-10-12T18:12:35.303447+00:00\", \"url\": \"/doc/draft-emirdag-scitt-ai-agent-execution/01/\", \"pages\": 35 } ], \"iesg_state\": \"I-D Exists\", \"rfceditor_state\": null, \"iana_review_state\":",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://www.ietf.org/archive/id/draft-emirdag-scitt-ai-agent-execution-00.txt",
     "claim": "Pinar Emirdag (VERIDIC Inc.), *AI Agent Execution Profile of SCITT (draft-emirdag-scitt-ai-agent-execution-00)*, 2026-04-11",
     "date": "2026-04-11",
     "quote": "Directive 2014/65/EU, 2014. [EES] VERIDIC Inc., \"Evidence Envelope Specification v0.1\", URL https://theveridic.github.io/VERIDIC/standards/ees/v0.1, 2026. [SPIFFE] / 20 Emirdag Expires 15 October 2026 [Page 2] Internet-Draft SCITT AI Agent Execution April",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://www.rfc-editor.org/rfc/rfc9943.html",
     "claim": "H. Birkholz, A. Delignat-Lavaud, C. Fournet, Y. Deshpande, and S. Lasker, *RFC 9943: An Architecture for Trustworthy and Transparent Digital Supply Chains*, 2026-06",
     "date": null,
     "quote": "at the Signed Statement. The iss and sub Claims, within the CWT Claims protected / <meta content=\"Common,Latin\" name=\"scripts\">",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://raw.githubusercontent.com/THEVERIDIC/VERIDIC/main/standards/README.md",
     "claim": "VERIDIC Inc. (`THEVERIDIC/VERIDIC`), *Veridic Standards Overview (standards/README.md)*, 2026-10-29",
     "date": "2026-10-29",
     "quote": "# VERIDIC Standards This directory holds VERIDIC's open standards. ## Evidence Envelope Specification (EES)",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://www.rfc-editor.org/rfc/rfc9052.html",
     "claim": "J. Schaad, *RFC 9052: CBOR Object Signing and Encryption (COSE): Structures and Process*, 2022-08",
     "date": null,
     "quote": "RFC 9052: CBOR Object Signing and Encryption (COSE): Structures and Process /* NOTE: Changes at the bottom of this file overrides some earlier settings.",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://www.ietf.org/archive/id/draft-sharif-agent-audit-trail-09.txt",
     "claim": "Raza Sharif (CyberSecAI Ltd), *Agent Audit Trail: A Standard Logging Format for Autonomous AI Systems (draft-sharif-agent-audit-trail-09)*, 2026-10-26",
     "date": "2026-10-26",
     "quote": "draft-sharif-agent-audit-trail-09 Abstract This document specifies a standard logging format for autonomous AI agent systems.",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://github.com/spiffe/spiffe/blob/main/standards/SPIFFE-ID.md",
     "claim": "SPIFFE, *SPIFFE ID*, checked 2026-10-30",
     "date": null,
     "quote": "Stability: Stable",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://www.ietf.org/archive/id/draft-milan-agent-decision-commitment-00.txt",
     "claim": "F. H. D. Milan, *Agent Decision Commitments for Payments (draft-milan-agent-decision-commitment-00)*, checked 2026-10-31",
     "date": null,
     "quote": "Milan Internet-Draft 15 October 2026 Intended status: Experimental Expires: 18 April 2027 Agent Decision",
     "ref": 15
    }
   ],
   "summary_md": "**AI Agent Execution Profile of SCITT** defines a SCITT (Supply Chain Integrity, Transparency, and Trust) profile for creating independently verifiable, tamper-evident records of autonomous AI agent actions. The profile defines the AgentInteractionRecord (AIR) as the COSE_Sign1 signed statement payload for material agent actions. Pinar Emirdag and Daniel Feichtinger of Veridic Inc. are the authors of `draft-emirdag-scitt-ai-agent-execution-01`, an Internet-Draft with intended status Informational, dated 12 October 2026. This Internet-Draft will expire on 15 April 2027. The Agent Operator is the Issuer. The Operator's evidence pipeline captures Material Actions at execution time, normalizes them to the AIR schema, applies redaction policy, and signs the record using an ECDSA P-256 key pair. The Transparency Service MUST maintain the chain as append-only (records once admitted cannot be deleted, modified, or reordered), issue an Evidence Receipt for each admitted record via the SCITT Reference APIs (`draft-ietf-scitt-scrapi`), and implement the non-equivocation guarantee. This revision does not yet define the proofs on which that property rests. Relying Parties arrive after the fact, with zero prior context, and must be able to verify records without operator cooperation. `draft-emirdag-scitt-ai-agent-execution-01` is a maintenance revision. It updates references, narrows several statements to what the mechanisms deliver, and records deferred items. It makes no change to the AIR schema, the hash chain construction, the verification algorithm, or the admission requirements of the Registration Policy. No field of the AIR schema is renamed, retyped, or removed, and no normative requirement is added. Implementations of this profile do not require the EES; the AIR schema in Section 5.2 is self-contained. The schema in Section 5.2 is taken from EES v0.1, while the Draft 2020-12 JSON Schema at `standards/ees/v0.2/air.schema.json` is marked `DRAFT for EES v0.2` with `schema_version` `air-1.0` transcribed from the published EES v0.1 field tables.",
   "part_of": null,
   "group": null,
   "use_cases": [
    "audit-agent-actions",
    "prove-agent-identity"
   ],
   "audience": [
    "agent-builder",
    "platform",
    "standards-body"
   ],
   "pairs_with": [
    "agent-audit-trail",
    "wimse-agent-audit-record",
    "spiffe",
    "agent-decision-commitment"
   ],
   "prerequisites": [],
   "dispute": null,
   "last_verified": "2026-11-07",
   "history": [
    {
     "date": "2026-10-16",
     "note": "initial candidate record from primary source (https://datatracker.ietf.org/doc/html/draft-emirdag-scitt-ai-agent-execution-01)"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-emirdag-scitt-ai-agent-execution"
    }
   ],
   "hatnote_md": "*For the RFC 8785 JSON hash-chained agent logging specification (`draft-sharif-agent-audit-trail`), see [Agent Audit Trail](/protocols/agent-audit-trail/). For the in-toto/DSSE authorization-decision audit format (`draft-gilda-audit-agent-audit-record`), see [Agent Audit Record](/protocols/wimse-agent-audit-record/). Not to be confused with unrelated packages sharing the \"AIR\" or \"agent-evidence\" name (`vindicara-inc/projectair`, the Rust `air` crate, or `sigill-python`).*",
   "ietf_tracker": {
    "doc": "draft-emirdag-scitt-ai-agent-execution",
    "rev": "01",
    "state": "active",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-10-12",
    "expires_utc": "2027-04-15",
    "as_of": "2026-10-30",
    "source": "https://datatracker.ietf.org/doc/draft-emirdag-scitt-ai-agent-execution/",
    "source_label": "per IETF Datatracker"
   },
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-07",
   "v05_hatnote_html_md": "For the RFC 8785 JSON hash-chained agent logging specification (`draft-sharif-agent-audit-trail`), see [Agent Audit Trail](/protocols/agent-audit-trail/). For the in-toto/DSSE authorization-decision audit format (`draft-gilda-audit-agent-audit-record`), see [Agent Audit Record](/protocols/wimse-agent-audit-record/). Not to be confused with unrelated packages sharing the \"AIR\" or \"agent-evidence\" name (`vindicara-inc/projectair`, the Rust `air` crate, or `sigill-python`). [1][2]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**AI Agent Execution Profile of SCITT** defines a SCITT (Supply Chain Integrity, Transparency, and Trust) profile for creating independently verifiable, tamper-evident records of autonomous AI agent actions. The profile defines the AgentInteractionRecord (AIR) as the COSE_Sign1 signed statement payload for material agent actions. [1] Pinar Emirdag and Daniel Feichtinger of Veridic Inc. are the authors of `draft-emirdag-scitt-ai-agent-execution-01`, an Internet-Draft with intended status Informational, dated 12 October 2026. This Internet-Draft will expire on 15 April 2027. [1] The Agent Operator is the Issuer. The Operator's evidence pipeline captures Material Actions at execution time, normalizes them to the AIR schema, applies redaction policy, and signs the record using an ECDSA P-256 key pair. [1] The Transparency Service MUST maintain the chain as append-only (records once admitted cannot be deleted, modified, or reordered), issue an Evidence Receipt for each admitted record via the SCITT Reference APIs (`draft-ietf-scitt-scrapi`), and implement the non-equivocation guarantee. This revision does not yet define the proofs on which that property rests. [1][3] Relying Parties arrive after the fact, with zero prior context, and must be able to verify records without operator cooperation. [1] `draft-emirdag-scitt-ai-agent-execution-01` is a maintenance revision. It updates references, narrows several statements to what the mechanisms deliver, and records deferred items. [1] It makes no change to the AIR schema, the hash chain construction, the verification algorithm, or the admission requirements of the Registration Policy. No field of the AIR schema is renamed, retyped, or removed, and no normative requirement is added. [1] Implementations of this profile do not require the EES; the AIR schema in Section 5.2 is self-contained. The schema in Section 5.2 is taken from EES v0.1, while the Draft 2020-12 JSON Schema at `standards/ees/v0.2/air.schema.json` is marked `DRAFT for EES v0.2` with `schema_version` `air-1.0` transcribed from the published EES v0.1 field tables. [1][4]",
   "v05_identity_sentence_md": "**AI Agent Execution Profile of SCITT** defines a SCITT (Supply Chain Integrity, Transparency, and Trust) profile for creating independently verifiable, tamper-evident records of autonomous AI agent actions. The profile defines the AgentInteractionRecord (AIR) as the COSE_Sign1 signed statement payload for material agent actions. [1] Pinar Emirdag and Daniel Feichtinger of Veridic Inc. are the authors of `draft-emirdag-scitt-ai-agent-execution-01`, an Internet-Draft with intended status Informational, dated 12 October 2026. This Internet-Draft will expire on 15 April 2027. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Account](/category/account/) (`account`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "Pinar Emirdag and Daniel Feichtinger (joined in `-01`), Veridic Inc. (*Veridic AI*, `https://theveridic.ai/`); open standards repository at `THEVERIDIC/VERIDIC` (`https://theveridic.github.io/VERIDIC/standards/ees/v0.1/`) [1][5][6]"
    },
    {
     "label": "Governed by",
     "value_md": "Individual IETF Internet-Draft (`Intended status: Informational`, `IESG state: I-D Exists`, not endorsed by the IETF and not adopted by a Working Group); companion `Evidence Envelope Specification v0.1` (`EES v0.1`) maintained by Veridic Inc. [1][7][8]"
    },
    {
     "label": "Track",
     "value_md": "Individual IETF Internet-Draft (Informational) and vendor open specification (Veridic `EES v0.1`) [1][5]"
    },
    {
     "label": "Status",
     "value_md": "Revision `-01` published 12 October 2026 (35 pages, expires 15 April 2027), following `-00` (posted 11 April 2026, header dated 13 April 2026, 25 pages) [1][7][9]"
    },
    {
     "label": "Version",
     "value_md": "`draft-emirdag-scitt-ai-agent-execution-01` (`2026-10-12`, 35 pages, expires `2027-04-15`, following `-00` posted `2026-04-11`; `schema_version: \"air-1.0\"`, companion `EES v0.1` and `DRAFT for EES v0.2` JSON Schema at `standards/ees/v0.2/air.schema.json`) [1][4][7][9]"
    },
    {
     "label": "Wire format",
     "value_md": "`COSE_Sign1` Signed Statement (*RFC 9052*, `ES256` / `alg: -7`) whose payload is a CBOR byte string (`bstr`) carrying the RFC 8785 canonical JSON serialization of an `AgentInteractionRecord` (`schema_version: \"air-1.0\"`, defined in RFC 8610 CDDL and JSON Schema Draft 2020-12), with CWT Claims (`iss`, `sub`, label `15` per RFC 8392 and RFC 9597), `kid` (label `4`), and chain integrity headers (`content_hash`, `prev_chain_hash`, `chain_hash`, `sequence_number`, `action_timestamp_ms`, `agent_id`) in the COSE protected header [1][4][10]"
    },
    {
     "label": "Specification",
     "value_md": "[draft-emirdag-scitt-ai-agent-execution-01.txt](https://www.ietf.org/archive/id/draft-emirdag-scitt-ai-agent-execution-01.txt) · [IETF Datatracker Document Page](https://datatracker.ietf.org/doc/draft-emirdag-scitt-ai-agent-execution/) · [Evidence Envelope Specification v0.1 (EES v0.1)](https://theveridic.github.io/VERIDIC/standards/ees/v0.1/) · [air.schema.json (Draft 2020-12)](https://raw.githubusercontent.com/THEVERIDIC/VERIDIC/main/standards/ees/v0.2/air.schema.json) [1][5][7]"
    },
    {
     "label": "Found at",
     "value_md": "Not a web-discovery standard (`NONE`); records are registered with a SCITT Transparency Service (`Evidence Custodian`) via SCRAPI (`draft-ietf-scitt-scrapi-11`) and verified out of band [1][3]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust Revised BSD License (Internet-Draft code components); Apache 2.0 (`Evidence Envelope Specification v0.1` text and schema, while Veridic's custody infrastructure remains proprietary) [1][5][11]"
    },
    {
     "label": "IETF state",
     "value_md": "`draft-emirdag-scitt-ai-agent-execution-01` · **Active Internet-Draft** (expires 2027-04-15) · Individual · as of 2026-10-30 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-emirdag-scitt-ai-agent-execution/))"
    }
   ],
   "v05_problem_md": "When such an action is later disputed, a counterparty, an auditor, or a regulator needs to be able to establish, without relying on the agent operator, who made the record of it, the latest time at which that record can have been made, and that the record has not been altered since. [1] Operator-controlled audit logs are mutable by the operator, carry no third-party attestation, and are not designed for independent verification. [1] This profile addresses the gap by defining how independently custodied, post-execution evidence records bind to the SCITT architecture. [1] Every Material Action MUST produce exactly one AgentInteractionRecord. [1] The `admission_timestamp_ms` is assigned by the Transparency Service. The AIR existed no later than that time. The timestamps inside the AIR are asserted by the Issuer. [1] Under this profile, an agent that acts without producing a signed record has left the scope of what can be externally verified. This profile does not establish that a record is accurate. [1] A gap in `sequence_number` is evidence that a record was produced and not registered. An action that was never recorded leaves no gap. [1]",
   "v05_mechanism_delta_md": "This profile addresses the gap by defining how independently custodied, post-execution evidence records bind to the SCITT architecture. [1] Every Material Action MUST produce exactly one AgentInteractionRecord. [1] The `admission_timestamp_ms` is assigned by the Transparency Service. The AIR existed no later than that time. The timestamps inside the AIR are asserted by the Issuer. [1]",
   "v05_scope_boundary_md": "Under this profile, an agent that acts without producing a signed record has left the scope of what can be externally verified. This profile does not establish that a record is accurate. [1] A gap in `sequence_number` is evidence that a record was produced and not registered. An action that was never recorded leaves no gap. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "IETF SCITT Architecture (RFC 9943)",
      "spec_or_rfc": "RFC 9943",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "Revision -01 profiles the IETF SCITT Architecture (RFC 9943) by defining an AgentInteractionRecord at schema_version air-1.0 that is registered as a signed statement with a SCITT transparency service (which the draft calls an evidence custodian). [1][10]"
     },
     {
      "name": "CBOR Object Signing and Encryption (COSE, RFC 9052)",
      "spec_or_rfc": "RFC 9052",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "That registered statement is COSE-signed, as the SCITT profile of an agent action, rather than a bare JSON log line. [1][12]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "agent-audit-trail",
      "target_name": "Agent Audit Trail",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "The Agent Audit Trail hash-chains RFC 8785 JSON with SHA-256 and optional ECDSA, while this profile registers a COSE-signed AgentInteractionRecord at air-1.0 with a SCITT evidence custodian. [1][13]"
     },
     {
      "target_id": "wimse-agent-audit-record",
      "target_name": "An Audit Record Format for AI Agent Authorization Decisions",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "The WIMSE audit record is an in-toto/DSSE authorization-decision record, while an AgentInteractionRecord is a COSE-signed statement of an agent action registered with a SCITT evidence custodian. [1][2]"
     },
     {
      "target_id": "spiffe",
      "target_name": "SPIFFE (Secure Production Identity Framework for Everyone)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "The optional agent_workload_id field of an AgentInteractionRecord can hold a SPIFFE ID, and the record remains the COSE-signed statement registered with the evidence custodian. [1][14]"
     },
     {
      "target_id": "agent-decision-commitment",
      "target_name": "Agent Decision Commitments for Payments",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "An Agent Decision Commitment anchors a salted decision_context hash in a SCITT transparency service before payment, while this profile's statement is the AgentInteractionRecord of the action itself. [1][15]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Account protocols](/category/account/)** — Category index for `account` standards."
    }
   ],
   "v05_compiled_md": "---\nid: scitt-ai-agent-execution\ntitle: \"AI Agent Execution Profile of SCITT\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: account\nform: document-format\nwire_archetype: identity_auth_crypto\nspec_url: https://www.ietf.org/archive/id/draft-emirdag-scitt-ai-agent-execution-01.txt\nlast_checked: 2026-11-07\n---\n\n# AI Agent Execution Profile of SCITT\n\n**Category:** [Account](/category/account/) (`account`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-11-07\n\n> *For the RFC 8785 JSON hash-chained agent logging specification (`draft-sharif-agent-audit-trail`), see [Agent Audit Trail](/protocols/agent-audit-trail/). For the in-toto/DSSE authorization-decision audit format (`draft-gilda-audit-agent-audit-record`), see [Agent Audit Record](/protocols/wimse-agent-audit-record/). Not to be confused with unrelated packages sharing the \"AIR\" or \"agent-evidence\" name (`vindicara-inc/projectair`, the Rust `air` crate, or `sigill-python`). [1][2]*\n\n**AI Agent Execution Profile of SCITT** defines a SCITT (Supply Chain Integrity, Transparency, and Trust) profile for creating independently verifiable, tamper-evident records of autonomous AI agent actions. The profile defines the AgentInteractionRecord (AIR) as the COSE_Sign1 signed statement payload for material agent actions. [1] Pinar Emirdag and Daniel Feichtinger of Veridic Inc. are the authors of `draft-emirdag-scitt-ai-agent-execution-01`, an Internet-Draft with intended status Informational, dated 12 October 2026. This Internet-Draft will expire on 15 April 2027. [1] The Agent Operator is the Issuer. The Operator's evidence pipeline captures Material Actions at execution time, normalizes them to the AIR schema, applies redaction policy, and signs the record using an ECDSA P-256 key pair. [1] The Transparency Service MUST maintain the chain as append-only (records once admitted cannot be deleted, modified, or reordered), issue an Evidence Receipt for each admitted record via the SCITT Reference APIs (`draft-ietf-scitt-scrapi`), and implement the non-equivocation guarantee. This revision does not yet define the proofs on which that property rests. [1][3] Relying Parties arrive after the fact, with zero prior context, and must be able to verify records without operator cooperation. [1] `draft-emirdag-scitt-ai-agent-execution-01` is a maintenance revision. It updates references, narrows several statements to what the mechanisms deliver, and records deferred items. [1] It makes no change to the AIR schema, the hash chain construction, the verification algorithm, or the admission requirements of the Registration Policy. No field of the AIR schema is renamed, retyped, or removed, and no normative requirement is added. [1] Implementations of this profile do not require the EES; the AIR schema in Section 5.2 is self-contained. The schema in Section 5.2 is taken from EES v0.1, while the Draft 2020-12 JSON Schema at `standards/ees/v0.2/air.schema.json` is marked `DRAFT for EES v0.2` with `schema_version` `air-1.0` transcribed from the published EES v0.1 field tables. [1][4]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Account](/category/account/) (`account`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | Pinar Emirdag and Daniel Feichtinger (joined in `-01`), Veridic Inc. (*Veridic AI*, `https://theveridic.ai/`); open standards repository at `THEVERIDIC/VERIDIC` (`https://theveridic.github.io/VERIDIC/standards/ees/v0.1/`) [1][5][6] |\n| **Governed by** | Individual IETF Internet-Draft (`Intended status: Informational`, `IESG state: I-D Exists`, not endorsed by the IETF and not adopted by a Working Group); companion `Evidence Envelope Specification v0.1` (`EES v0.1`) maintained by Veridic Inc. [1][7][8] |\n| **Track** | Individual IETF Internet-Draft (Informational) and vendor open specification (Veridic `EES v0.1`) [1][5] |\n| **Status** | Revision `-01` published 12 October 2026 (35 pages, expires 15 April 2027), following `-00` (posted 11 April 2026, header dated 13 April 2026, 25 pages) [1][7][9] |\n| **Version** | `draft-emirdag-scitt-ai-agent-execution-01` (`2026-10-12`, 35 pages, expires `2027-04-15`, following `-00` posted `2026-04-11`; `schema_version: \"air-1.0\"`, companion `EES v0.1` and `DRAFT for EES v0.2` JSON Schema at `standards/ees/v0.2/air.schema.json`) [1][4][7][9] |\n| **Wire format** | `COSE_Sign1` Signed Statement (*RFC 9052*, `ES256` / `alg: -7`) whose payload is a CBOR byte string (`bstr`) carrying the RFC 8785 canonical JSON serialization of an `AgentInteractionRecord` (`schema_version: \"air-1.0\"`, defined in RFC 8610 CDDL and JSON Schema Draft 2020-12), with CWT Claims (`iss`, `sub`, label `15` per RFC 8392 and RFC 9597), `kid` (label `4`), and chain integrity headers (`content_hash`, `prev_chain_hash`, `chain_hash`, `sequence_number`, `action_timestamp_ms`, `agent_id`) in the COSE protected header [1][4][10] |\n| **Specification** | [draft-emirdag-scitt-ai-agent-execution-01.txt](https://www.ietf.org/archive/id/draft-emirdag-scitt-ai-agent-execution-01.txt) · [IETF Datatracker Document Page](https://datatracker.ietf.org/doc/draft-emirdag-scitt-ai-agent-execution/) · [Evidence Envelope Specification v0.1 (EES v0.1)](https://theveridic.github.io/VERIDIC/standards/ees/v0.1/) · [air.schema.json (Draft 2020-12)](https://raw.githubusercontent.com/THEVERIDIC/VERIDIC/main/standards/ees/v0.2/air.schema.json) [1][5][7] |\n| **Found at** | Not a web-discovery standard (`NONE`); records are registered with a SCITT Transparency Service (`Evidence Custodian`) via SCRAPI (`draft-ietf-scitt-scrapi-11`) and verified out of band [1][3] |\n| **Licence** | IETF Trust Revised BSD License (Internet-Draft code components); Apache 2.0 (`Evidence Envelope Specification v0.1` text and schema, while Veridic's custody infrastructure remains proprietary) [1][5][11] |\n| **IETF state** | `draft-emirdag-scitt-ai-agent-execution-01` · **Active Internet-Draft** (expires 2027-04-15) · Individual · as of 2026-10-30 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-emirdag-scitt-ai-agent-execution/)) |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nWhen such an action is later disputed, a counterparty, an auditor, or a regulator needs to be able to establish, without relying on the agent operator, who made the record of it, the latest time at which that record can have been made, and that the record has not been altered since. [1] Operator-controlled audit logs are mutable by the operator, carry no third-party attestation, and are not designed for independent verification. [1] This profile addresses the gap by defining how independently custodied, post-execution evidence records bind to the SCITT architecture. [1] Every Material Action MUST produce exactly one AgentInteractionRecord. [1] The `admission_timestamp_ms` is assigned by the Transparency Service. The AIR existed no later than that time. The timestamps inside the AIR are asserted by the Issuer. [1] Under this profile, an agent that acts without producing a signed record has left the scope of what can be externally verified. This profile does not establish that a record is accurate. [1] A gap in `sequence_number` is evidence that a record was produced and not registered. An action that was never recorded leaves no gap. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **IETF SCITT Architecture (RFC 9943)** | `RFC 9943` | Profiles classic standard | Revision -01 profiles the IETF SCITT Architecture (RFC 9943) by defining an AgentInteractionRecord at schema_version air-1.0 that is registered as a signed statement with a SCITT transparency service (which the draft calls an evidence custodian). [1][10] |\n| **CBOR Object Signing and Encryption (COSE, RFC 9052)** | `RFC 9052` | Profiles classic standard | That registered statement is COSE-signed, as the SCITT profile of an agent action, rather than a bare JSON log line. [1][12] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Agent Audit Trail](/protocols/agent-audit-trail/)** | Peer alternative | The Agent Audit Trail hash-chains RFC 8785 JSON with SHA-256 and optional ECDSA, while this profile registers a COSE-signed AgentInteractionRecord at air-1.0 with a SCITT evidence custodian. [1][13] |\n| **[An Audit Record Format for AI Agent Authorization Decisions](/protocols/wimse-agent-audit-record/)** | Peer alternative | The WIMSE audit record is an in-toto/DSSE authorization-decision record, while an AgentInteractionRecord is a COSE-signed statement of an agent action registered with a SCITT evidence custodian. [1][2] |\n| **[SPIFFE (Secure Production Identity Framework for Everyone)](/protocols/spiffe/)** | Complements | The optional agent_workload_id field of an AgentInteractionRecord can hold a SPIFFE ID, and the record remains the COSE-signed statement registered with the evidence custodian. [1][14] |\n| **[Agent Decision Commitments for Payments](/protocols/agent-decision-commitment/)** | Complements | An Agent Decision Commitment anchors a salted decision_context hash in a SCITT transparency service before payment, while this profile's statement is the AgentInteractionRecord of the action itself. [1][15] |\n\n---\n\n## See also\n\n- **Category:** [Account protocols](/category/account/)\n\n---\n\n## References\n\n1. Pinar Emirdag and Daniel Feichtinger (Veridic Inc.), *AI Agent Execution Profile of SCITT (draft-emirdag-scitt-ai-agent-execution-01)* (2026-10-12) — <https://www.ietf.org/archive/id/draft-emirdag-scitt-ai-agent-execution-01.txt>\n2. S. Gilda, *An Audit Record Format for AI Agent Authorization Decisions (draft-gilda-audit-agent-audit-record-03)* (29 October 2026) — <https://www.ietf.org/archive/id/draft-gilda-audit-agent-audit-record-03.txt>\n3. H. Birkholz, J. Geater, and A. Delignat-Lavaud, *Supply Chain Integrity, Transparency, and Trust (SCITT) Reference APIs (draft-ietf-scitt-scrapi-11)* (2026-06-26) — <https://www.ietf.org/archive/id/draft-ietf-scitt-scrapi-11.txt>\n4. VERIDIC Inc. (`THEVERIDIC/VERIDIC`), *AgentInteractionRecord JSON Schema (standards/ees/v0.2/air.schema.json)* (2026-10-29) — <https://raw.githubusercontent.com/THEVERIDIC/VERIDIC/main/standards/ees/v0.2/air.schema.json>\n5. Pinar Emirdag (VERIDIC Inc.), *Evidence Envelope Specification v0.1 — VERIDIC* (2026-04) — <https://theveridic.github.io/VERIDIC/standards/ees/v0.1/>\n6. GitHub REST API, *THEVERIDIC/VERIDIC Repository Metadata* (2026-10-29) — <https://github.com/THEVERIDIC/VERIDIC>\n7. IETF Datatracker, *draft-emirdag-scitt-ai-agent-execution-01 - AI Agent Execution Profile of SCITT* (2026-10-12) — <https://datatracker.ietf.org/doc/draft-emirdag-scitt-ai-agent-execution/>\n8. IETF Datatracker JSON Metadata, *IETF Datatracker document JSON metadata for draft-emirdag-scitt-ai-agent-execution* (2026-10-29) — <https://datatracker.ietf.org/doc/draft-emirdag-scitt-ai-agent-execution/doc.json>\n9. Pinar Emirdag (VERIDIC Inc.), *AI Agent Execution Profile of SCITT (draft-emirdag-scitt-ai-agent-execution-00)* (2026-04-11) — <https://www.ietf.org/archive/id/draft-emirdag-scitt-ai-agent-execution-00.txt>\n10. H. Birkholz, A. Delignat-Lavaud, C. Fournet, Y. Deshpande, and S. Lasker, *RFC 9943: An Architecture for Trustworthy and Transparent Digital Supply Chains* (2026-06) — <https://www.rfc-editor.org/rfc/rfc9943.html>\n11. VERIDIC Inc. (`THEVERIDIC/VERIDIC`), *Veridic Standards Overview (standards/README.md)* (2026-10-29) — <https://raw.githubusercontent.com/THEVERIDIC/VERIDIC/main/standards/README.md>\n12. J. Schaad, *RFC 9052: CBOR Object Signing and Encryption (COSE): Structures and Process* (2022-08) — <https://www.rfc-editor.org/rfc/rfc9052.html>\n13. Raza Sharif (CyberSecAI Ltd), *Agent Audit Trail: A Standard Logging Format for Autonomous AI Systems (draft-sharif-agent-audit-trail-09)* (2026-10-26) — <https://www.ietf.org/archive/id/draft-sharif-agent-audit-trail-09.txt>\n14. SPIFFE, *SPIFFE ID* (checked 2026-10-30) — <https://github.com/spiffe/spiffe/blob/main/standards/SPIFFE-ID.md>\n15. F. H. D. Milan, *Agent Decision Commitments for Payments (draft-milan-agent-decision-commitment-00)* (checked 2026-10-31) — <https://www.ietf.org/archive/id/draft-milan-agent-decision-commitment-00.txt>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "agent-channel-fan-out",
   "name": "Agent-Channel Frame for Identity-Keyed Fan-Out Delivery to Concurrent Sessions",
   "acronym": "",
   "aliases": [
    "agent-channel frame",
    "draft-morrison-agent-channel-fan-out"
   ],
   "collisions": [],
   "step": "coordinate",
   "parties": [
    "agent-agent"
   ],
   "form": "endpoint",
   "track": "ietf",
   "scope": "general",
   "question": "How can concurrent agent sessions of one identity-bound principal (or members of an organisation) exchange short structured messages through identity-keyed fan-out delivery rather than a shared-file fallback?",
   "analog": "A pub/sub message envelope with Server-Sent Events delivery, addressed by identity scope rather than endpoint",
   "origin": {
    "org": "Alter Meridian Pty Ltd",
    "date": "2026-05-21"
   },
   "governance": "Individual Internet-Draft by a single author, submitted via the IETF datatracker; not an IETF working group document. Datatracker lists one IPR disclosure (No. 7363, posted 2026-06-22, holder Alter Meridian Pty Ltd) covering revision -00.",
   "native_status": "Internet-Draft, Intended Status: Informational; expires 24 April 2027",
   "phase": "draft",
   "implementation": "none-found",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "version": {
    "label": "draft-morrison-agent-channel-fan-out-03",
    "date": "2026-10-23"
   },
   "spec_url": "https://datatracker.ietf.org/doc/html/draft-morrison-agent-channel-fan-out-03",
   "discovery": {
    "mechanism": "Delivery substrate addressed via the discovery mechanism of draft-morrison-mcp-dns-discovery (DNS-based); per-handle SSE stream",
    "path": null
   },
   "probe": {
    "method": "NONE",
    "path": "",
    "parse": "",
    "on_absent": "No public probe defined in the available text; support cannot be observed from a site without the companion discovery draft details."
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.ietf.org/archive/id/draft-morrison-agent-channel-fan-out-03.txt",
     "claim": "B. Morrison (Alter Meridian Pty Ltd), *An Agent-Channel Frame for Identity-Keyed Fan-Out Delivery to Concurrent Sessions (draft-morrison-agent-channel-fan-out-03)*, checked 2026-10-31",
     "date": null,
     "quote": "An Agent-Channel Frame for Identity-Keyed Fan-Out Delivery to Concurrent Sessions draft-morrison-agent-channel-fan-out-03 / Internet-Draft Alter Meridian Pty Ltd Intended status: Informational / This memo specifies an application-layer frame format and a delivery model by which the several concurrent agentic sessions of a single identity-bound principal, and the recognised members of an organisational identity substrate, exchange short structured messages. / Delivery is fan-out: a sender names a recipient scope rather than a single endpoint, and the scope is expanded at delivery time against the recipient's subscriptions. / Recipients receive frames over a per-handle Server-Sent Events stream and can narrow what they receive with a subscribe-time filter expression. / No change to any field, kind, scope form, filter axis, error code or procedure. / dates the [MCP] reference to the 2026-07-28 revision / or requirement changes. Author's Address Blake Morrison Alter Meridian Pty Ltd Email: [email redacted] URI: / Network Working Group B. Morrison Internet-Draft Alter Meridian Pty Ltd Intended status: Informational 21 / \"urgent\". Morrison Expires 24 April 2027 [Page 13] Internet-Draft Agent-Channel Fan-Out October 2026 intent_withdraw / namespace and discovery surface of draft-morrison-mcp-dns-discovery and the cross-organisational ceremony of draft-morrison-identity-accord; no new / Where two sessions of the same principal must coordinate, the prevailing fallback is a file written to a shared temporary directory and a manual instruction to a second session to read it. / That fallback has no addressing, no delivery guarantee, no attribution, and no filtering; it does not reach a session on a second host, and it does not reach the principal's runtimes operating under a second organisational context. / the agent-channel frame, is a transport envelope: it carries a closed-catalogue kind discriminator, a structured per-kind payload, an identity attribution pair, and an inline provenance block. / This memo specifies a frame format and a delivery model that replace the file fallback. / Frames are ephemeral routing units / Frame persistence, where an implementation chooses to retain frames for replay, is out of scope and is not specified. / It is a transport, not a coordination protocol. No frame in this memo's catalogue compels a recipient to any action / no new transport and no new handle category is introduced.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://datatracker.ietf.org/doc/html/draft-morrison-agent-channel-fan-out-03",
     "claim": "B. Morrison (Alter Meridian Pty Ltd), *An Agent-Channel Frame for Identity-Keyed Fan-Out Delivery to Concurrent Sessions (draft-morrison-agent-channel-fan-out-03 HTML)*, checked 2026-10-31",
     "date": null,
     "quote": "Internet-Draft: draft-morrison-agent-channel-fan-out-03 Published: 21 October 2026 Intended status: Informational Expires: 24 April 2027 / Intended status: Informational / delivery substrate. Morrison Expires 24 April 2027 [Page 5] Internet-Draft Agent-Channel Fan-Out October 2026 / of this memo is an application-layer JSON object RFC8259 carried over the existing Server-Sent / Morrison Alter Meridian Pty Ltd Email: [email redacted] URI: alter:~blake Datatracker draft-morrison-agent-channel-fan-out-03 Active Internet-Draft (individual) / ~handle Identity Systems\", Work in Progress, Internet-Draft, draft-morrison-identity-pronouns-05, 2026,. [IDACCORD] Morrison, B., \"Identity Accord / Copyright (c) 2026 IETF Trust and the persons identified as the document authors.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://datatracker.ietf.org/doc/html/draft-morrison-agent-channel-fan-out-02",
     "claim": "B. Morrison (Alter Meridian Pty Ltd), *An Agent-Channel Frame for Identity-Keyed Fan-Out Delivery to Concurrent Sessions (draft-morrison-agent-channel-fan-out-02 HTML)*, historical revision (checked 2026-10-31)",
     "date": null,
     "quote": "Alter Meridian Pty Ltd (~truealter) / termed the agent-channel frame, is a transport envelope: it carries a closed-catalogue kind discriminator,",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://datatracker.ietf.org/doc/draft-morrison-agent-channel-fan-out/",
     "claim": "B. Morrison (Alter Meridian Pty Ltd), *draft-morrison-agent-channel-fan-out — An Agent-Channel Frame for Identity-Keyed Fan-Out Delivery to Concurrent Sessions*, checked 2026-10-31",
     "date": null,
     "quote": "Document Type Active Internet-Draft (individual) Author Blake Morrison Last updated 2026-10-22 RFC stream (None)",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://html.spec.whatwg.org/multipage/server-sent-events.html",
     "claim": "WHATWG, *HTML Living Standard — Server-sent events*, fetched 2026-11-12",
     "date": null,
     "quote": "HTML Living Standard — Last Updated 11 November 2026",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://datatracker.ietf.org/doc/html/draft-morrison-mcp-dns-discovery-09",
     "claim": "B. Morrison (Alter Meridian Pty Ltd), *Discovery of Model Context Protocol Servers via DNS TXT Records (draft-morrison-mcp-dns-discovery-09 HTML)*, checked 2026-10-31",
     "date": null,
     "quote": "Morrison Expires 24 April 2027 [Page 25] Internet-Draft MCP DNS Discovery October 2026 6.3.12.",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://github.com/ag-ui-protocol/ag-ui/discussions/2792",
     "claim": "mme (ag-ui-protocol/ag-ui), *AG-UI 1.0 is officially released*, created 2026-09-18",
     "date": null,
     "quote": "Following the draft period and the feedback collected here, AG-UI 1.0 is now officially released and frozen.",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Current : the current protocol version, which is ready for use and may continue to receive backwards compatible changes.",
     "ref": 8
    }
   ],
   "summary_md": "**Agent-Channel Frame for Identity-Keyed Fan-Out Delivery to Concurrent Sessions** (`draft-morrison-agent-channel-fan-out`) is an individual Informational Internet-Draft from Alter Meridian Pty Ltd. It specifies an application-layer frame format and a delivery model by which the several concurrent agentic sessions of a single identity-bound principal, and the recognized members of an organizational identity substrate, exchange short structured messages. Delivery is fan-out: a sender names a recipient scope rather than a single endpoint, and the scope is expanded at delivery time against the recipient's subscriptions. Recipients receive frames over a per-handle Server-Sent Events stream and can narrow what they receive with a subscribe-time filter expression. `draft-morrison-agent-channel-fan-out-03` was published on 21 October 2026 (2026-10-21) and expires on 24 April 2027 (2027-04-24). The document history for this revision records no change to any field, kind, scope form, filter axis, error code or procedure. It dates the MCP reference to the 2026-07-28 revision.",
   "part_of": null,
   "group": null,
   "use_cases": [
    "agent-to-agent-messaging"
   ],
   "audience": [
    "agent-builder",
    "standards-body"
   ],
   "pairs_with": [
    "mcp-dns-discovery",
    "ag-ui",
    "mcp"
   ],
   "prerequisites": [],
   "dispute": null,
   "last_verified": "2026-11-12",
   "history": [
    {
     "date": "2026-10-16",
     "note": "initial candidate record from primary source (https://datatracker.ietf.org/doc/html/draft-morrison-agent-channel-fan-out-02)"
    },
    {
     "date": "2026-10-23",
     "note": "revision 02 → 03"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-morrison-agent-channel-fan-out"
    }
   ],
   "ietf_tracker": {
    "doc": "draft-morrison-agent-channel-fan-out",
    "rev": "03",
    "state": "active",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-10-21",
    "expires_utc": "2027-04-24",
    "as_of": "2026-10-31",
    "source": "https://datatracker.ietf.org/doc/draft-morrison-agent-channel-fan-out/",
    "source_label": "per IETF Datatracker"
   },
   "hatnote_md": "",
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "harnesses_rpc_ui",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": null,
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Agent-Channel Frame for Identity-Keyed Fan-Out Delivery to Concurrent Sessions** (`draft-morrison-agent-channel-fan-out`) is an individual Informational Internet-Draft from Alter Meridian Pty Ltd. [1] It specifies an application-layer frame format and a delivery model by which the several concurrent agentic sessions of a single identity-bound principal, and the recognized members of an organizational identity substrate, exchange short structured messages. [1] Delivery is fan-out: a sender names a recipient scope rather than a single endpoint, and the scope is expanded at delivery time against the recipient's subscriptions. [1] Recipients receive frames over a per-handle Server-Sent Events stream and can narrow what they receive with a subscribe-time filter expression. [1] `draft-morrison-agent-channel-fan-out-03` was published on 21 October 2026 (2026-10-21) and expires on 24 April 2027 (2027-04-24). [2] The document history for this revision records no change to any field, kind, scope form, filter axis, error code or procedure. It dates the MCP reference to the 2026-07-28 revision. [1]",
   "v05_identity_sentence_md": "**Agent-Channel Frame for Identity-Keyed Fan-Out Delivery to Concurrent Sessions** (`draft-morrison-agent-channel-fan-out`) is an individual Informational Internet-Draft from Alter Meridian Pty Ltd. [1] It specifies an application-layer frame format and a delivery model by which the several concurrent agentic sessions of a single identity-bound principal, and the recognized members of an organizational identity substrate, exchange short structured messages. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Coordinate](/category/coordinate/) (`coordinate`)"
    },
    {
     "label": "Form",
     "value_md": "Endpoint (`endpoint`)"
    },
    {
     "label": "Originated by",
     "value_md": "B. Morrison, Alter Meridian Pty Ltd (`~truealter`) [1][3]"
    },
    {
     "label": "Governed by",
     "value_md": "Individual IETF Internet-Draft submission (Network Working Group, Informational status) [1][4]"
    },
    {
     "label": "Track",
     "value_md": "IETF Internet-Draft (Informational) [2]"
    },
    {
     "label": "Status",
     "value_md": "Internet-Draft, Intended Status: Informational; expires 24 April 2027 [1][2]"
    },
    {
     "label": "Version",
     "value_md": "`draft-morrison-agent-channel-fan-out-03` (published October 2026, expires 24 April 2027) [1][2]"
    },
    {
     "label": "Wire format",
     "value_md": "Application-layer JSON transport envelope (`agent-channel frame`) delivered over Server-Sent Events (SSE) [2][3]"
    },
    {
     "label": "Specification",
     "value_md": "https://datatracker.ietf.org/doc/html/draft-morrison-agent-channel-fan-out-03 [2]"
    },
    {
     "label": "Found at",
     "value_md": "Composes with `draft-morrison-mcp-dns-discovery` handle namespace and subscribe-time filter expressions [1][2]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust Legal Provisions (BCP 78) [2]"
    },
    {
     "label": "IETF state",
     "value_md": "`draft-morrison-agent-channel-fan-out-03` · **Active Internet-Draft** (expires 2027-04-24) · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-morrison-agent-channel-fan-out/))"
    }
   ],
   "v05_problem_md": "Where two sessions of the same principal must coordinate, the prevailing fallback is a file written to a shared temporary directory and a manual instruction to a second session to read it. [1] That fallback has no addressing, no delivery guarantee, no attribution, and no filtering; it does not reach a session on a second host, and it does not reach the principal's runtimes operating under a second organizational context. [1] The agent-channel frame is a transport envelope: it carries a closed-catalog kind discriminator, a structured per-kind payload, an identity attribution pair, and an inline provenance block. [1] The specification defines a frame format and a delivery model that replace the file fallback. [1] Frames are ephemeral routing units. Frame persistence, where an implementation chooses to retain frames for replay, is out of scope and is not specified. [1] The protocol is a transport, not a coordination protocol. No frame in the specification's catalog compels a recipient to any action. [1] The memo introduces no new transport and no new handle category. [1]",
   "v05_mechanism_delta_md": "The agent-channel frame is a transport envelope: it carries a closed-catalog kind discriminator, a structured per-kind payload, an identity attribution pair, and an inline provenance block. [1] The specification defines a frame format and a delivery model that replace the file fallback. [1]",
   "v05_scope_boundary_md": "Frames are ephemeral routing units. Frame persistence, where an implementation chooses to retain frames for replay, is out of scope and is not specified. [1] The protocol is a transport, not a coordination protocol. No frame in the specification's catalog compels a recipient to any action. [1] The memo introduces no new transport and no new handle category. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "Server-Sent Events (WHATWG HTML)",
      "spec_or_rfc": "WHATWG HTML SSE",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "Recipients receive ephemeral JSON agent-channel frames on a per-handle Server-Sent Events stream, with the sender's recipient scope expanded against live subscriptions at delivery time. [2][5]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "mcp-dns-discovery",
      "target_name": "Discovery of Model Context Protocol Servers via DNS TXT Records",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "Fan-out introduces no separate discovery locator and uses the DNS mechanism of draft-morrison-mcp-dns-discovery, whose records are TXT at `_mcp.<domain>`, `_org-alter.<domain>`, and `_alter.<domain>`. [2][6]"
     },
     {
      "target_id": "ag-ui",
      "target_name": "Agent-User Interaction Protocol (AG-UI)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "Fan-out delivers agent-channel frames on per-handle SSE streams addressed by DNS discovery, while AG-UI's required SSE stream follows one HTTP POST of a user-facing run. [2][7]"
     },
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "The fan-out frame is an ephemeral JSON delivery envelope on a per-handle SSE stream, and it is not an MCP JSON-RPC 2.0 session for tools, resources, and prompt templates. [2][8]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Coordinate protocols](/category/coordinate/)** — Category index for `coordinate` standards."
    }
   ],
   "v05_compiled_md": "---\nid: agent-channel-fan-out\ntitle: \"Agent-Channel Frame for Identity-Keyed Fan-Out Delivery to Concurrent Sessions\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: coordinate\nform: endpoint\nwire_archetype: harnesses_rpc_ui\nspec_url: https://datatracker.ietf.org/doc/html/draft-morrison-agent-channel-fan-out-03\nlast_checked: 2026-11-12\n---\n\n# Agent-Channel Frame for Identity-Keyed Fan-Out Delivery to Concurrent Sessions\n\n**Category:** [Coordinate](/category/coordinate/) (`coordinate`) · **Form:** Endpoint (`endpoint`) · **Last checked:** 2026-11-12\n\n**Agent-Channel Frame for Identity-Keyed Fan-Out Delivery to Concurrent Sessions** (`draft-morrison-agent-channel-fan-out`) is an individual Informational Internet-Draft from Alter Meridian Pty Ltd. [1] It specifies an application-layer frame format and a delivery model by which the several concurrent agentic sessions of a single identity-bound principal, and the recognized members of an organizational identity substrate, exchange short structured messages. [1] Delivery is fan-out: a sender names a recipient scope rather than a single endpoint, and the scope is expanded at delivery time against the recipient's subscriptions. [1] Recipients receive frames over a per-handle Server-Sent Events stream and can narrow what they receive with a subscribe-time filter expression. [1] `draft-morrison-agent-channel-fan-out-03` was published on 21 October 2026 (2026-10-21) and expires on 24 April 2027 (2027-04-24). [2] The document history for this revision records no change to any field, kind, scope form, filter axis, error code or procedure. It dates the MCP reference to the 2026-07-28 revision. [1]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Coordinate](/category/coordinate/) (`coordinate`) |\n| **Form** | Endpoint (`endpoint`) |\n| **Originated by** | B. Morrison, Alter Meridian Pty Ltd (`~truealter`) [1][3] |\n| **Governed by** | Individual IETF Internet-Draft submission (Network Working Group, Informational status) [1][4] |\n| **Track** | IETF Internet-Draft (Informational) [2] |\n| **Status** | Internet-Draft, Intended Status: Informational; expires 24 April 2027 [1][2] |\n| **Version** | `draft-morrison-agent-channel-fan-out-03` (published October 2026, expires 24 April 2027) [1][2] |\n| **Wire format** | Application-layer JSON transport envelope (`agent-channel frame`) delivered over Server-Sent Events (SSE) [2][3] |\n| **Specification** | https://datatracker.ietf.org/doc/html/draft-morrison-agent-channel-fan-out-03 [2] |\n| **Found at** | Composes with `draft-morrison-mcp-dns-discovery` handle namespace and subscribe-time filter expressions [1][2] |\n| **Licence** | IETF Trust Legal Provisions (BCP 78) [2] |\n| **IETF state** | `draft-morrison-agent-channel-fan-out-03` · **Active Internet-Draft** (expires 2027-04-24) · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-morrison-agent-channel-fan-out/)) |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nWhere two sessions of the same principal must coordinate, the prevailing fallback is a file written to a shared temporary directory and a manual instruction to a second session to read it. [1] That fallback has no addressing, no delivery guarantee, no attribution, and no filtering; it does not reach a session on a second host, and it does not reach the principal's runtimes operating under a second organizational context. [1] The agent-channel frame is a transport envelope: it carries a closed-catalog kind discriminator, a structured per-kind payload, an identity attribution pair, and an inline provenance block. [1] The specification defines a frame format and a delivery model that replace the file fallback. [1] Frames are ephemeral routing units. Frame persistence, where an implementation chooses to retain frames for replay, is out of scope and is not specified. [1] The protocol is a transport, not a coordination protocol. No frame in the specification's catalog compels a recipient to any action. [1] The memo introduces no new transport and no new handle category. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **Server-Sent Events (WHATWG HTML)** | `WHATWG HTML SSE` | Profiles classic standard | Recipients receive ephemeral JSON agent-channel frames on a per-handle Server-Sent Events stream, with the sender's recipient scope expanded against live subscriptions at delivery time. [2][5] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Discovery of Model Context Protocol Servers via DNS TXT Records](/protocols/mcp-dns-discovery/)** | Builds on | Fan-out introduces no separate discovery locator and uses the DNS mechanism of draft-morrison-mcp-dns-discovery, whose records are TXT at `_mcp.<domain>`, `_org-alter.<domain>`, and `_alter.<domain>`. [2][6] |\n| **[Agent-User Interaction Protocol (AG-UI)](/protocols/ag-ui/)** | Peer alternative | Fan-out delivers agent-channel frames on per-handle SSE streams addressed by DNS discovery, while AG-UI's required SSE stream follows one HTTP POST of a user-facing run. [2][7] |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | The fan-out frame is an ephemeral JSON delivery envelope on a per-handle SSE stream, and it is not an MCP JSON-RPC 2.0 session for tools, resources, and prompt templates. [2][8] |\n\n---\n\n## See also\n\n- **Category:** [Coordinate protocols](/category/coordinate/)\n\n---\n\n## References\n\n1. B. Morrison (Alter Meridian Pty Ltd), *An Agent-Channel Frame for Identity-Keyed Fan-Out Delivery to Concurrent Sessions (draft-morrison-agent-channel-fan-out-03)* (checked 2026-10-31) — <https://www.ietf.org/archive/id/draft-morrison-agent-channel-fan-out-03.txt>\n2. B. Morrison (Alter Meridian Pty Ltd), *An Agent-Channel Frame for Identity-Keyed Fan-Out Delivery to Concurrent Sessions (draft-morrison-agent-channel-fan-out-03 HTML)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/html/draft-morrison-agent-channel-fan-out-03>\n3. B. Morrison (Alter Meridian Pty Ltd), *An Agent-Channel Frame for Identity-Keyed Fan-Out Delivery to Concurrent Sessions (draft-morrison-agent-channel-fan-out-02 HTML)* (historical revision (checked 2026-10-31)) — <https://datatracker.ietf.org/doc/html/draft-morrison-agent-channel-fan-out-02>\n4. B. Morrison (Alter Meridian Pty Ltd), *draft-morrison-agent-channel-fan-out — An Agent-Channel Frame for Identity-Keyed Fan-Out Delivery to Concurrent Sessions* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/draft-morrison-agent-channel-fan-out/>\n5. WHATWG, *HTML Living Standard — Server-sent events* (fetched 2026-11-12) — <https://html.spec.whatwg.org/multipage/server-sent-events.html>\n6. B. Morrison (Alter Meridian Pty Ltd), *Discovery of Model Context Protocol Servers via DNS TXT Records (draft-morrison-mcp-dns-discovery-09 HTML)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/html/draft-morrison-mcp-dns-discovery-09>\n7. mme (ag-ui-protocol/ag-ui), *AG-UI 1.0 is officially released* (created 2026-09-18) — <https://github.com/ag-ui-protocol/ag-ui/discussions/2792>\n8. Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation* (2026-07-28) — <https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "aagv",
   "name": "Agentic Authority Graph Validation",
   "acronym": "AAGV",
   "aliases": [
    "AAGV-v0.1",
    "Agentic Authority Graph Validation: A Non-Vacuous Interchange Profile for Revocation-Cut Analysis"
   ],
   "collisions": [],
   "step": "permit",
   "parties": [
    "agent-agent"
   ],
   "form": "document-format",
   "track": "ietf",
   "scope": "general",
   "question": "How can an implementer represent a delegated-authority graph in JSON and deterministically validate that declared revocation cuts disconnect all authority roots from all consequential sinks, without accepting vacuous or incomplete graphs?",
   "analog": "A linter or schema validator for authority graphs that returns INVALID, INDETERMINATE, VALID_OPEN, or VALID_CLOSED for a single snapshot.",
   "origin": {
    "org": "GoodShyt Group Inc.",
    "date": "2026-10-14"
   },
   "governance": "Individual Submission by D. O. Watts, GoodShyt Group Inc.; Intended status: Experimental",
   "native_status": "Internet-Draft, Intended status: Experimental; expires 3 May 2027",
   "phase": "draft",
   "implementation": "none-found",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "version": {
    "label": "draft-watts-agentic-authority-graph-validation-01",
    "date": "2026-10-30"
   },
   "spec_url": "https://www.ietf.org/archive/id/draft-watts-agentic-authority-graph-validation-01.txt",
   "discovery": {
    "mechanism": "none defined; carrier-neutral JSON interchange profile, and this document has no IANA actions",
    "path": null
   },
   "probe": {
    "method": "NONE",
    "path": "",
    "parse": "",
    "on_absent": "No site-level discovery mechanism is defined, so support cannot be observed from a site."
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.ietf.org/archive/id/draft-watts-agentic-authority-graph-validation-01.txt",
     "claim": "D. O. Watts (GoodShyt Group Inc.), *Agentic Authority Graph Validation: A Non-Vacuous Interchange Profile for Revocation-Cut Analysis (draft-watts-agentic-authority-graph-validation-01)*, checked 2026-11-07",
     "date": null,
     "quote": "draft-watts-agentic-authority-graph-validation-01 / Individual Submission D. O. Watts Internet-Draft GoodShyt Group Inc. Intended status: Experimental / defines Agentic Authority Graph Validation (AAGV), a JSON interchange profile and validation algorithm for authority roots, consequential sinks, declared normal paths, revocation cut sets, and snapshot edge state. / This document specifies a carrier-neutral JSON representation and deterministic validation procedure. / An AAGV object MUST contain: a version, graph identifier, snapshot sequence, capture time, authority-epoch identifier, one or more roots, one or more sinks, node records, edge records, a non-empty normal-path inventory, and one or more revocation cut sets. / If no sink is reachable, return INVALID. ... If so, return INDETERMINATE. ... If any sink is reachable, return VALID_OPEN; otherwise return VALID_CLOSED. / Intended status: Experimental 30 October 2026 Expires: 3 May 2027 / Changes since -00 ... Editorial and tooling-conformance changes only; no technical content was changed. / Updated document date and revision number. / Deonté O'dell Watts GoodShyt Group Inc. San Francisco, CA United States of America / Individual Submission D. O. Watts Internet-Draft GoodShyt Group Inc. / Intended status: Experimental / This Internet-Draft will expire on 3 May 2027. / 30 October 2026 Expires: 3 May 2027 / Individual Submission D. O. Watts Internet-Draft GoodShyt Group Inc. Intended status: Experimental 30 October 2026 Expires: 3 May 2027 Agentic Authority Graph Validation: A Non-Vacuous Interchange Profile for Revocation-Cut Analysis draft-watts-agentic-authority-graph-validation-01 / AAGV JSON Model / Agentic Authority Graph Validation: A Non-Vacuous Interchange Profile for Revocation-Cut Analysis draft-watts-agentic-authority-graph-validation-01 / Copyright (c) 2026 IETF Trust and the persons identified as the document authors. / a universal statement such as \"every path crosses K\" can be misleading if the graph omits its sinks or contains no declared normal path. / A validator therefore needs explicit anti- vacuity rules in addition to ordinary reachability checks. / A validator MUST reject an object as INVALID if the root set or sink set is empty; if the normal-path inventory is empty; if any listed sink lacks at least one contiguous declared normal path from a listed root; or if there is no structural root-to-sink path in the graph. / it returns INDETERMINATE rather than CLOSED when relevant edge state is unknown. / AAGV does not define an authorization token, discover hidden paths, or prove physical containment. / VALID_CLOSED is a graph-snapshot result, not a claim of physical or deployment-wide revocation closure. A relying party MUST NOT describe VALID_CLOSED as proving absence of undeclared, hidden, future, or out-of-scope paths.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://www.w3.org/TR/shacl/",
     "claim": "W3C, *Shapes Constraint Language (SHACL)*, 2017-07-20",
     "date": "2017-07-20",
     "quote": "This document was published by the RDF Data Shapes Working Group as a Recommendation. Comments regarding this document are welcome. Please send them to",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://docs.oasis-open.org/xacml/3.0/xacml-3.0-core-spec-os-en.html",
     "claim": "OASIS, *eXtensible Access Control Markup Language (XACML) Version 3.0*, 2013-01-22",
     "date": "2013-01-22",
     "quote": "eXtensible Access Control Markup Language (XACML) Version 3.0",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://www.ietf.org/archive/id/draft-watts-high-assurance-agent-control-envelope-01.txt",
     "claim": "D. O. Watts (GoodShyt Group Inc.), *High-Assurance Agent Control Envelope (draft-watts-high-assurance-agent-control-envelope-01)*, checked 2026-11-07",
     "date": null,
     "quote": "Intended status: Informational 30 October 2026 Expires: 3 May 2027",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://datatracker.ietf.org/doc/html/draft-prakash-aip-02",
     "claim": "S. Prakash, *Agent Identity Protocol (AIP): Verifiable Delegation for AI Agent Systems (draft-prakash-aip-02 HTML)*, checked 2026-10-31",
     "date": null,
     "quote": "fields: Prakash Expires 13 April 2027 [Page 6] Internet-Draft AIP October 2026 +================+===================+=====================+ |",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://www.ietf.org/archive/id/draft-hamr-oauth-agent-delegation-03.txt",
     "claim": "Amr Hassan (Independent), *An Attenuated Delegation Profile for Automated Agents (draft-hamr-oauth-agent-delegation-03)*, checked 2026-10-30",
     "date": null,
     "quote": "Vectors appendix of draft-hamr-oauth-agent-delegation-01 (https://datatracker.ietf.org/doc/html/draft-hamr-oauth-agent-delegation-01). There, V10 and V11 use writeBudget 2; in this",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://datatracker.ietf.org/doc/html/draft-kroehl-agentic-trust-aae-02",
     "claim": "L. K. Kroehl (CryptoKRI GmbH), *Agent Authorization Envelope (AAE): A Machine-Evaluable Authorization Structure for Autonomous AI Agents (draft-kroehl-agentic-trust-aae-02 HTML)*, checked 2026-10-31",
     "date": null,
     "quote": "|| BASE64URL(JWS Signature) Kroehl Expires 10 March 2027 [Page 5] Internet-Draft AAE September 2026",
     "ref": 7
    }
   ],
   "summary_md": "**Agentic Authority Graph Validation** (`AAGV`), `draft-watts-agentic-authority-graph-validation-01`, is an active individual Internet-Draft with intended status Experimental by D. O. Watts of GoodShyt Group Inc. It defines a JSON interchange profile and a validation algorithm for authority roots, consequential sinks, declared normal paths, revocation cut sets, and snapshot edge state. AAGV specifies a carrier-neutral JSON representation. An AAGV object MUST contain a version, graph identifier, snapshot sequence, capture time, authority-epoch identifier, one or more roots, one or more sinks, node records, edge records, a non-empty normal-path inventory, and one or more revocation cut sets. A validator returns `INVALID`, `INDETERMINATE`, `VALID_OPEN`, or `VALID_CLOSED`. `draft-watts-agentic-authority-graph-validation-01` is an Experimental Internet-Draft dated 30 October 2026 and expires on 3 May 2027. Appendix A, Changes since -00, records editorial and tooling-conformance changes only, states that no technical content was changed, and records an updated document date and revision number.",
   "part_of": null,
   "group": null,
   "use_cases": [
    "audit-agent-actions",
    "delegate-user-authority"
   ],
   "audience": [
    "standards-body",
    "agent-builder",
    "platform"
   ],
   "pairs_with": [
    "haace",
    "aip-delegation-chain",
    "oauth-agent-delegation",
    "agent-authorization-envelope"
   ],
   "prerequisites": [],
   "dispute": null,
   "last_verified": "2026-11-12",
   "history": [
    {
     "date": "2026-10-16",
     "note": "initial candidate record from primary source (https://datatracker.ietf.org/doc/html/draft-watts-agentic-authority-graph-validation-00)"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-watts-agentic-authority-graph-validation"
    }
   ],
   "ietf_tracker": {
    "doc": "draft-watts-agentic-authority-graph-validation",
    "rev": "01",
    "state": "active",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-10-30",
    "expires_utc": "2027-05-03",
    "as_of": "2026-11-07",
    "source": "https://datatracker.ietf.org/doc/draft-watts-agentic-authority-graph-validation/",
    "source_label": "per IETF Datatracker"
   },
   "hatnote_md": "",
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": null,
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Agentic Authority Graph Validation** (`AAGV`), `draft-watts-agentic-authority-graph-validation-01`, is an active individual Internet-Draft with intended status Experimental by D. O. Watts of GoodShyt Group Inc. [1] It defines a JSON interchange profile and a validation algorithm for authority roots, consequential sinks, declared normal paths, revocation cut sets, and snapshot edge state. [1] AAGV specifies a carrier-neutral JSON representation. An AAGV object MUST contain a version, graph identifier, snapshot sequence, capture time, authority-epoch identifier, one or more roots, one or more sinks, node records, edge records, a non-empty normal-path inventory, and one or more revocation cut sets. [1] A validator returns `INVALID`, `INDETERMINATE`, `VALID_OPEN`, or `VALID_CLOSED`. [1] `draft-watts-agentic-authority-graph-validation-01` is an Experimental Internet-Draft dated 30 October 2026 and expires on 3 May 2027. [1] Appendix A, Changes since -00, records editorial and tooling-conformance changes only, states that no technical content was changed, and records an updated document date and revision number. [1]",
   "v05_identity_sentence_md": "**Agentic Authority Graph Validation** (`AAGV`), `draft-watts-agentic-authority-graph-validation-01`, is an active individual Internet-Draft with intended status Experimental by D. O. Watts of GoodShyt Group Inc. [1] It defines a JSON interchange profile and a validation algorithm for authority roots, consequential sinks, declared normal paths, revocation cut sets, and snapshot edge state. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Permit](/category/permit/) (`permit`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "Deonté O'dell Watts (D. O. Watts), GoodShyt Group Inc. [1]"
    },
    {
     "label": "Governed by",
     "value_md": "Individual Submission by D. O. Watts, GoodShyt Group Inc. (Intended status: Experimental) [1]"
    },
    {
     "label": "Track",
     "value_md": "IETF Internet-Draft (Experimental) [1]"
    },
    {
     "label": "Status",
     "value_md": "Internet-Draft, Intended status: Experimental; expires 3 May 2027 [1]"
    },
    {
     "label": "Version",
     "value_md": "`draft-watts-agentic-authority-graph-validation-01` (30 October 2026; expires 3 May 2027) [1]"
    },
    {
     "label": "IETF tracker",
     "value_md": "`draft-watts-agentic-authority-graph-validation-01` · Active Internet-Draft (individual; intended status Experimental; published 30 October 2026; expires 3 May 2027) [1]"
    },
    {
     "label": "Wire format",
     "value_md": "Carrier-neutral JSON interchange profile (`AAGV JSON Model`) [1]"
    },
    {
     "label": "Specification",
     "value_md": "https://www.ietf.org/archive/id/draft-watts-agentic-authority-graph-validation-01.txt [1]"
    },
    {
     "label": "Found at",
     "value_md": "JSON object that MUST contain a version, graph identifier, snapshot sequence, capture time, authority-epoch identifier, roots, sinks, node records, edge records, a non-empty normal-path inventory, and revocation cut sets [1]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust Legal Provisions (BCP 78) [1]"
    }
   ],
   "v05_problem_md": "A universal statement such as \"every path crosses K\" can be misleading if the graph omits its sinks or contains no declared normal path. [1] A validator needs explicit anti-vacuity rules in addition to ordinary reachability checks. [1] A validator MUST reject an object as `INVALID` if the root set or sink set is empty, if the normal-path inventory is empty, if any listed sink lacks at least one contiguous declared normal path from a listed root, or if there is no structural root-to-sink path in the graph. [1] It returns `INDETERMINATE` rather than closed when relevant edge state is unknown. [1] AAGV does not define an authorization token, discover hidden paths, or prove physical containment. [1] `VALID_CLOSED` is a graph-snapshot result, not a claim of physical or deployment-wide revocation closure. A relying party MUST NOT describe `VALID_CLOSED` as proving absence of undeclared, hidden, future, or out-of-scope paths. [1]",
   "v05_mechanism_delta_md": "A validator MUST reject an object as `INVALID` if the root set or sink set is empty, if the normal-path inventory is empty, if any listed sink lacks at least one contiguous declared normal path from a listed root, or if there is no structural root-to-sink path in the graph. [1] It returns `INDETERMINATE` rather than closed when relevant edge state is unknown. [1]",
   "v05_scope_boundary_md": "AAGV does not define an authorization token, discover hidden paths, or prove physical containment. [1] `VALID_CLOSED` is a graph-snapshot result, not a claim of physical or deployment-wide revocation closure. A relying party MUST NOT describe `VALID_CLOSED` as proving absence of undeclared, hidden, future, or out-of-scope paths. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "W3C Shapes Constraint Language (SHACL)",
      "spec_or_rfc": "W3C SHACL",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "AAGV validates one out-of-band JSON snapshot and returns INVALID, INDETERMINATE, VALID_OPEN, or VALID_CLOSED, while SHACL validates an RDF graph against shapes. [1][2]"
     },
     {
      "name": "OASIS XACML 3.0 Core Specification",
      "spec_or_rfc": "OASIS XACML 3.0",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "XACML evaluates one access request, while AAGV returns INVALID, INDETERMINATE, VALID_OPEN, or VALID_CLOSED for a snapshot and does not issue an authorization token. [1][3]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "haace",
      "target_name": "High-Assurance Agent Control Envelope",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "HAACE emits a non-bearer Action Decision Receipt and refuses ALLOW when a premise is indeterminate, and AAGV is the separate snapshot verdict on whether the authority graph's cuts are structurally valid. [1][4]"
     },
     {
      "target_id": "aip-delegation-chain",
      "target_name": "Agent Identity Protocol (AIP): Verifiable Delegation for AI Agent Systems",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "The delegation-chain draft publishes one attenuating capability chain at `/.well-known/aip/<path>.json`, while AAGV validates an out-of-band JSON snapshot and returns INVALID, INDETERMINATE, VALID_OPEN, or VALID_CLOSED. [1][5]"
     },
     {
      "target_id": "oauth-agent-delegation",
      "target_name": "An Attenuated Delegation Profile for Automated Agents",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "The Agent-Delegation header is one attenuated chain on a signed HTTP request, and AAGV exchanges a carrier-neutral JSON snapshot out of band. [1][6]"
     },
     {
      "target_id": "agent-authorization-envelope",
      "target_name": "Agent Authorization Envelope",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "The envelope is a JWS-secured Verifiable Credential carrying a mandate, constraints, and a validity block, while AAGV only returns INVALID, INDETERMINATE, VALID_OPEN, or VALID_CLOSED for an out-of-band JSON snapshot. [1][7]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Permit protocols](/category/permit/)** — Category index for `permit` standards."
    }
   ],
   "v05_compiled_md": "---\nid: aagv\ntitle: \"Agentic Authority Graph Validation\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: permit\nform: document-format\nwire_archetype: identity_auth_crypto\nspec_url: https://www.ietf.org/archive/id/draft-watts-agentic-authority-graph-validation-01.txt\nlast_checked: 2026-11-12\n---\n\n# Agentic Authority Graph Validation\n\n**Category:** [Permit](/category/permit/) (`permit`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-11-12\n\n**Agentic Authority Graph Validation** (`AAGV`), `draft-watts-agentic-authority-graph-validation-01`, is an active individual Internet-Draft with intended status Experimental by D. O. Watts of GoodShyt Group Inc. [1] It defines a JSON interchange profile and a validation algorithm for authority roots, consequential sinks, declared normal paths, revocation cut sets, and snapshot edge state. [1] AAGV specifies a carrier-neutral JSON representation. An AAGV object MUST contain a version, graph identifier, snapshot sequence, capture time, authority-epoch identifier, one or more roots, one or more sinks, node records, edge records, a non-empty normal-path inventory, and one or more revocation cut sets. [1] A validator returns `INVALID`, `INDETERMINATE`, `VALID_OPEN`, or `VALID_CLOSED`. [1] `draft-watts-agentic-authority-graph-validation-01` is an Experimental Internet-Draft dated 30 October 2026 and expires on 3 May 2027. [1] Appendix A, Changes since -00, records editorial and tooling-conformance changes only, states that no technical content was changed, and records an updated document date and revision number. [1]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Permit](/category/permit/) (`permit`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | Deonté O'dell Watts (D. O. Watts), GoodShyt Group Inc. [1] |\n| **Governed by** | Individual Submission by D. O. Watts, GoodShyt Group Inc. (Intended status: Experimental) [1] |\n| **Track** | IETF Internet-Draft (Experimental) [1] |\n| **Status** | Internet-Draft, Intended status: Experimental; expires 3 May 2027 [1] |\n| **Version** | `draft-watts-agentic-authority-graph-validation-01` (30 October 2026; expires 3 May 2027) [1] |\n| **IETF tracker** | `draft-watts-agentic-authority-graph-validation-01` · Active Internet-Draft (individual; intended status Experimental; published 30 October 2026; expires 3 May 2027) [1] |\n| **Wire format** | Carrier-neutral JSON interchange profile (`AAGV JSON Model`) [1] |\n| **Specification** | https://www.ietf.org/archive/id/draft-watts-agentic-authority-graph-validation-01.txt [1] |\n| **Found at** | JSON object that MUST contain a version, graph identifier, snapshot sequence, capture time, authority-epoch identifier, roots, sinks, node records, edge records, a non-empty normal-path inventory, and revocation cut sets [1] |\n| **Licence** | IETF Trust Legal Provisions (BCP 78) [1] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nA universal statement such as \"every path crosses K\" can be misleading if the graph omits its sinks or contains no declared normal path. [1] A validator needs explicit anti-vacuity rules in addition to ordinary reachability checks. [1] A validator MUST reject an object as `INVALID` if the root set or sink set is empty, if the normal-path inventory is empty, if any listed sink lacks at least one contiguous declared normal path from a listed root, or if there is no structural root-to-sink path in the graph. [1] It returns `INDETERMINATE` rather than closed when relevant edge state is unknown. [1] AAGV does not define an authorization token, discover hidden paths, or prove physical containment. [1] `VALID_CLOSED` is a graph-snapshot result, not a claim of physical or deployment-wide revocation closure. A relying party MUST NOT describe `VALID_CLOSED` as proving absence of undeclared, hidden, future, or out-of-scope paths. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **W3C Shapes Constraint Language (SHACL)** | `W3C SHACL` | Analogous to classic standard | AAGV validates one out-of-band JSON snapshot and returns INVALID, INDETERMINATE, VALID_OPEN, or VALID_CLOSED, while SHACL validates an RDF graph against shapes. [1][2] |\n| **OASIS XACML 3.0 Core Specification** | `OASIS XACML 3.0` | Analogous to classic standard | XACML evaluates one access request, while AAGV returns INVALID, INDETERMINATE, VALID_OPEN, or VALID_CLOSED for a snapshot and does not issue an authorization token. [1][3] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[High-Assurance Agent Control Envelope](/protocols/haace/)** | Complements | HAACE emits a non-bearer Action Decision Receipt and refuses ALLOW when a premise is indeterminate, and AAGV is the separate snapshot verdict on whether the authority graph's cuts are structurally valid. [1][4] |\n| **[Agent Identity Protocol (AIP): Verifiable Delegation for AI Agent Systems](/protocols/aip-delegation-chain/)** | Complements | The delegation-chain draft publishes one attenuating capability chain at `/.well-known/aip/<path>.json`, while AAGV validates an out-of-band JSON snapshot and returns INVALID, INDETERMINATE, VALID_OPEN, or VALID_CLOSED. [1][5] |\n| **[An Attenuated Delegation Profile for Automated Agents](/protocols/oauth-agent-delegation/)** | Complements | The Agent-Delegation header is one attenuated chain on a signed HTTP request, and AAGV exchanges a carrier-neutral JSON snapshot out of band. [1][6] |\n| **[Agent Authorization Envelope](/protocols/agent-authorization-envelope/)** | Complements | The envelope is a JWS-secured Verifiable Credential carrying a mandate, constraints, and a validity block, while AAGV only returns INVALID, INDETERMINATE, VALID_OPEN, or VALID_CLOSED for an out-of-band JSON snapshot. [1][7] |\n\n---\n\n## See also\n\n- **Category:** [Permit protocols](/category/permit/)\n\n---\n\n## References\n\n1. D. O. Watts (GoodShyt Group Inc.), *Agentic Authority Graph Validation: A Non-Vacuous Interchange Profile for Revocation-Cut Analysis (draft-watts-agentic-authority-graph-validation-01)* (checked 2026-11-07) — <https://www.ietf.org/archive/id/draft-watts-agentic-authority-graph-validation-01.txt>\n2. W3C, *Shapes Constraint Language (SHACL)* (2017-07-20) — <https://www.w3.org/TR/shacl/>\n3. OASIS, *eXtensible Access Control Markup Language (XACML) Version 3.0* (2013-01-22) — <https://docs.oasis-open.org/xacml/3.0/xacml-3.0-core-spec-os-en.html>\n4. D. O. Watts (GoodShyt Group Inc.), *High-Assurance Agent Control Envelope (draft-watts-high-assurance-agent-control-envelope-01)* (checked 2026-11-07) — <https://www.ietf.org/archive/id/draft-watts-high-assurance-agent-control-envelope-01.txt>\n5. S. Prakash, *Agent Identity Protocol (AIP): Verifiable Delegation for AI Agent Systems (draft-prakash-aip-02 HTML)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/html/draft-prakash-aip-02>\n6. Amr Hassan (Independent), *An Attenuated Delegation Profile for Automated Agents (draft-hamr-oauth-agent-delegation-03)* (checked 2026-10-30) — <https://www.ietf.org/archive/id/draft-hamr-oauth-agent-delegation-03.txt>\n7. L. K. Kroehl (CryptoKRI GmbH), *Agent Authorization Envelope (AAE): A Machine-Evaluable Authorization Structure for Autonomous AI Agents (draft-kroehl-agentic-trust-aae-02 HTML)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/html/draft-kroehl-agentic-trust-aae-02>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "agentic-payments-gating-model",
   "name": "Agent-Initiated Payment Gating",
   "acronym": "",
   "aliases": [
    "A Server-Side Model for Gating Agent-Initiated Human-Sourced Asynchronous HTTP Tasks on Payment or Entitlement",
    "draft-king-yew-choo-agentic-payments"
   ],
   "collisions": [],
   "step": "pay",
   "parties": [
    "agent-site",
    "agent-payment"
   ],
   "form": "document-format",
   "track": "ietf",
   "scope": "payments",
   "question": "How should a server gate paid, agent-initiated asynchronous HTTP tasks on payment or entitlement so that fulfilment never precedes validation and retries do not create duplicate tasks or gate acceptances?",
   "analog": "",
   "origin": {
    "org": "True Primary, London (King Yew Choo, individual submission)",
    "date": "2026-07-23"
   },
   "governance": "Individual IETF Internet-Draft submission, not adopted by a working group",
   "native_status": "Internet-Draft, Intended Status: Informational; expires 11 April 2027",
   "phase": "draft",
   "implementation": "none-found",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "version": {
    "label": "draft-king-yew-choo-agentic-payments-01",
    "date": "2026-10-08"
   },
   "spec_url": "https://datatracker.ietf.org/doc/html/draft-king-yew-choo-agentic-payments-01",
   "discovery": {
    "mechanism": "none; architectural model with no wire format or discovery element",
    "path": null
   },
   "probe": {
    "method": "NONE",
    "path": "",
    "parse": "",
    "on_absent": ""
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.ietf.org/archive/id/draft-king-yew-choo-agentic-payments-01.txt",
     "claim": "King Yew Choo (True Primary, London), *A Server-Side Model for Gating Agent-Initiated Human-Sourced Asynchronous HTTP Tasks on Payment or Entitlement (draft-king-yew-choo-agentic-payments-01)*, checked 2026-10-31",
     "date": null,
     "quote": "Network Working Group King Yew Choo Internet-Draft True Primary, London Intended status: Informational 8 October 2026 Expires: 11 April 2027 A Server-Side Model for Gating Agent-Initiated Human-Sourced Asynchronous HTTP Tasks on Payment or Entitlement draft-king-yew-choo-agentic-payments-01 / It defines no protocol, wire format, or conformance requirements. / The model places a payment or entitlement gate before fulfilment, maps that gate to adjacent protocols, and defines a task state machine. / The intended status of this document is Informational. It describes a model, uses no BCP 14 key words, and defines no protocol elements. / Network Working Group King Yew Choo Internet-Draft True Primary, London Intended status: Informational 8 / Yew Choo Expires 11 April 2027 Page 31 Internet-Draft Agent-Initiated Payment Gating October 2026 / April 2027 A Server-Side Model for Gating Agent-Initiated Human-Sourced Asynchronous HTTP Tasks on Payment / Requests, Keys, and Nonces The gate transition is performed by an activation request: the / requests can be lost, retried, duplicated, or observed out of order, so any state-changing exchange is exposed to duplication, and a retry that creates a second task or captures a second charge is a correctness failure even though every individual message was well- formed. / the principal is not present: authority to spend was delegated in advance, with limits (a budget, an authorised scope, an expiry, and conditions under which a human is brought back into the loop), so the server evaluates delegated authority as data presented with the request. / a server that begins fulfilment before payment is validated can have cost extracted from it by a non-paying or unauthorised caller. / Under stated well-formedness constraints and operating assumptions, it yields gate-before-fulfilment safety, at most one task per retained idempotency key, at most one gate acceptance per payment requirement, and an operator-checkable record linking a delivered artefact to operator-controlled records. / The model places one gate state, written g*; every path into the fulfilment region of the state machine passes through that gate, and no fulfilment side effect occurs before it. / It analyses the security of none of the cited protocols. / This document's subject is narrower: one operator's admission of paid, human-sourced asynchronous work, under the constraints and operating assumptions of Section 6.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://datatracker.ietf.org/doc/draft-king-yew-choo-agentic-payments/",
     "claim": "King Yew Choo (True Primary, London), *draft-king-yew-choo-agentic-payments — document page (IETF Datatracker)*, checked 2026-10-29",
     "date": null,
     "quote": "This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. | | | | | --- | --- | --- | | Document | Type | Active Internet-Draft (individual) | | Author | | King Yew Choo | | Last updated | 2026-10-08 | | RFC stream | | (None) | | Intended RFC status | | (None) | | Formats | | txt html xml htmlized bibtex bibxml | | Stream | Stream state | | (No stream defined) | | Consensus boilerplate | | Unknown | | RFC Editor Note | | (None) | | IESG | IESG state | | I-D Exists / This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://datatracker.ietf.org/doc/html/draft-king-yew-choo-agentic-payments-01",
     "claim": "King Yew Choo (True Primary, London), *A Server-Side Model for Gating Agent-Initiated Human-Sourced Asynchronous HTTP Tasks on Payment or Entitlement (draft-king-yew-choo-agentic-payments-01 HTML)*, checked 2026-10-31",
     "date": null,
     "quote": "Intended status: Informational / Choo Expires 11 April 2027 [Page 31] Internet-Draft Agent-Initiated Payment Gating October 2026 states / # A Server-Side Model for Gating Agent-Initiated Human-Sourced Asynchronous HTTP Tasks on Payment or Entitlement / by a non-paying or unauthorised caller. King Yew Choo Expires 11 April 2027 Page / Region 5.3. Transitions 5.4. Activation Requests, Keys, and Nonces 5.5. A Worked Example 6. / Copyright (c) 2026 IETF Trust and the persons identified as the document authors.",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://www.rfc-editor.org/rfc/rfc9110.html",
     "claim": "R. Fielding, Ed., M. Nottingham, Ed., and J. Reschke, Ed., *RFC 9110: HTTP Semantics*, June 2022",
     "date": null,
     "quote": "<meta content=\"Common,Latin\" name=\"scripts\">",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://datatracker.ietf.org/doc/draft-httpauth-payment/",
     "claim": "B. Ryan, J. Moxey, T. Meagher, J. Weinstein, and S. Kaliski, *draft-httpauth-payment — The \"Payment\" HTTP Authentication Scheme (IETF Datatracker)*, checked 2026-11-08",
     "date": null,
     "quote": "IESG state I-D Exists",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://www.linuxfoundation.org/press/linux-foundation-announces-operational-launch-of-x402-foundation-to-standardize-internet-native-payments-for-ai-agents-and-applications",
     "claim": "Linux Foundation, *Linux Foundation Announces Operational Launch of x402 Foundation to Standardize Internet-Native Payments for AI Agents and Applications*, July 14, 2026",
     "date": null,
     "quote": "SAN FRANCISCO, July 14, 2026 – The Linux Foundation , the nonprofit organization enabling mass innovation through open source, today announced the operational launch of the x402 Foundation",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/specification.md",
     "claim": "Google (google-agentic-commerce), *Agentic Payment Protocol (v0.2)*, fetched 2026-10-30",
     "date": null,
     "quote": "Agentic Payment Protocol (v0.2)",
     "ref": 7
    }
   ],
   "summary_md": "**Agent-Initiated Payment Gating** (`draft-king-yew-choo-agentic-payments-01`) is an Informational Internet-Draft by King Yew Choo of True Primary, London. The document is a server-side model for gating agent-initiated human-sourced asynchronous HTTP tasks on payment or entitlement. It defines no protocol, wire format, or conformance requirements. The model places a payment or entitlement gate before fulfillment, maps that gate to adjacent protocols, and defines a task state machine. `draft-king-yew-choo-agentic-payments-01` is dated 8 October 2026, and the header lists Expires: 11 April 2027. Its intended status is Informational. It describes a model, uses no BCP 14 key words, and defines no protocol elements. Datatracker records an Active Internet-Draft (individual), last updated `2026-10-08`, with IESG state I-D Exists. The draft is not endorsed by the IETF and has no formal standing in the IETF standards process.",
   "part_of": null,
   "group": null,
   "use_cases": [
    "accept-agent-payments",
    "agent-checkout",
    "delegate-user-authority",
    "audit-agent-actions"
   ],
   "audience": [
    "platform",
    "standards-body",
    "agent-builder"
   ],
   "pairs_with": [
    "mpp",
    "x402",
    "ap2"
   ],
   "prerequisites": [],
   "dispute": null,
   "last_verified": "2026-11-08",
   "history": [
    {
     "date": "2026-10-16",
     "note": "initial candidate record from primary source (https://datatracker.ietf.org/doc/html/draft-king-yew-choo-agentic-payments-01)"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-king-yew-choo-agentic-payments"
    }
   ],
   "ietf_tracker": {
    "doc": "draft-king-yew-choo-agentic-payments",
    "rev": "01",
    "state": "active",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-10-08",
    "expires_utc": "2027-04-11",
    "as_of": "2026-10-31",
    "source": "https://datatracker.ietf.org/doc/draft-king-yew-choo-agentic-payments/",
    "source_label": "per IETF Datatracker"
   },
   "hatnote_md": "",
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "payments_onchain",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-08",
   "v05_hatnote_html_md": null,
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Agent-Initiated Payment Gating** (`draft-king-yew-choo-agentic-payments-01`) is an Informational Internet-Draft by King Yew Choo of True Primary, London. The document is a server-side model for gating agent-initiated human-sourced asynchronous HTTP tasks on payment or entitlement. [1] It defines no protocol, wire format, or conformance requirements. [1] The model places a payment or entitlement gate before fulfillment, maps that gate to adjacent protocols, and defines a task state machine. [1] `draft-king-yew-choo-agentic-payments-01` is dated 8 October 2026, and the header lists Expires: 11 April 2027. [1] Its intended status is Informational. It describes a model, uses no BCP 14 key words, and defines no protocol elements. [1] Datatracker records an Active Internet-Draft (individual), last updated `2026-10-08`, with IESG state I-D Exists. The draft is not endorsed by the IETF and has no formal standing in the IETF standards process. [2]",
   "v05_identity_sentence_md": "**Agent-Initiated Payment Gating** (`draft-king-yew-choo-agentic-payments-01`) is an Informational Internet-Draft by King Yew Choo of True Primary, London. The document is a server-side model for gating agent-initiated human-sourced asynchronous HTTP tasks on payment or entitlement. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Pay](/category/pay/) (`pay`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "King Yew Choo (True Primary, London) [1]"
    },
    {
     "label": "Governed by",
     "value_md": "Individual IETF Internet-Draft submission (Network Working Group; no formal IETF standing) [1][2]"
    },
    {
     "label": "Track",
     "value_md": "IETF Internet-Draft (Informational) [3]"
    },
    {
     "label": "Status",
     "value_md": "Internet-Draft, Intended Status: Informational; expires 11 April 2027 [1][3]"
    },
    {
     "label": "Version",
     "value_md": "`draft-king-yew-choo-agentic-payments-01` (published 8 October 2026; expires 11 April 2027) [1][3]"
    },
    {
     "label": "Wire format",
     "value_md": "None defined (abstract server-side state machine and formal validation model over HTTP; defines no wire format) [1][3]"
    },
    {
     "label": "Specification",
     "value_md": "https://datatracker.ietf.org/doc/html/draft-king-yew-choo-agentic-payments-01 [3]"
    },
    {
     "label": "Found at",
     "value_md": "None defined (models abstract activation requests, idempotency keys, nonces, and payment requirements without normative HTTP headers) [1][3]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust Legal Provisions (BCP 78) [3]"
    },
    {
     "label": "IETF state",
     "value_md": "`draft-king-yew-choo-agentic-payments-01` · **Active Internet-Draft** (expires 2027-04-11) · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-king-yew-choo-agentic-payments/))"
    }
   ],
   "v05_problem_md": "Requests can be lost, retried, duplicated, or observed out of order, so a retry that creates a second task or captures a second charge is a correctness failure. [1] The principal is not present: authority to spend was delegated in advance, so the server evaluates delegated authority as data presented with the request. [1] A server that begins fulfillment before payment is validated can have cost extracted from it by a non-paying or unauthorized caller. [1] Under stated well-formedness constraints and operating assumptions, it yields gate-before-fulfillment safety, at most one task per retained idempotency key, at most one gate acceptance per payment requirement, and an operator-checkable record linking a delivered artifact to operator-controlled records. [1] The model places one gate state, written `g*`. Every path into the fulfillment region passes through that gate, and no fulfillment side effect occurs before it. [1] It defines no protocol, wire format, or conformance requirements. [1] It analyzes the security of none of the cited protocols. [1] The draft's subject is narrower: one operator's admission of paid, human-sourced asynchronous work, under the constraints and operating assumptions of Section 6. [1]",
   "v05_mechanism_delta_md": "Under stated well-formedness constraints and operating assumptions, it yields gate-before-fulfillment safety, at most one task per retained idempotency key, at most one gate acceptance per payment requirement, and an operator-checkable record linking a delivered artifact to operator-controlled records. [1] The model places one gate state, written `g*`. Every path into the fulfillment region passes through that gate, and no fulfillment side effect occurs before it. [1]",
   "v05_scope_boundary_md": "It defines no protocol, wire format, or conformance requirements. [1] It analyzes the security of none of the cited protocols. [1] The draft's subject is narrower: one operator's admission of paid, human-sourced asynchronous work, under the constraints and operating assumptions of Section 6. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "HTTP 402 Payment Required (RFC 9110 §15.5.3)",
      "spec_or_rfc": "RFC 9110 §15.5.3",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "draft-king-yew-choo-agentic-payments places a payment or entitlement gate before fulfillment and maps that gate to x402 and the HTTP Payment authentication scheme, and it defines no 402 header, body, or conformance requirement. [3][4]"
     },
     {
      "name": "HTTP WWW-Authenticate Challenge Framework (RFC 9110 §11.6.1)",
      "spec_or_rfc": "RFC 9110 §11.6.1",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "The model treats the HTTP Payment authentication scheme as one method adapter that can satisfy the gate, alongside MPP, and it specifies no WWW-Authenticate grammar of its own. [3][4]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "mpp",
      "target_name": "Machine Payments Protocol (MPP)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "The draft cites the HTTP Payment authentication scheme and MPP as wires that can satisfy its pre-fulfillment gate, and the draft's own content is the task state machine, which defines no protocol bytes. [3][5]"
     },
     {
      "target_id": "x402",
      "target_name": "x402",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "The draft cites x402 as an exchange a method adapter might use at the gate, while noting in Section 7 that x402's default verify-then-settle-after-fulfillment flow lies outside the pre-fulfillment gate model where SETTLEMENT_CONFIRMED precedes EXECUTING. [3][6]"
     },
     {
      "target_id": "ap2",
      "target_name": "Agent Payments Protocol (AP2)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "The draft cites AP2 as a mandate candidate for delegated authority at the gate while defining only the task state machine and no concrete AP2-to-M field mapping in Section 7. [3][7]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Pay protocols](/category/pay/)** — Category index for `pay` standards."
    }
   ],
   "v05_compiled_md": "---\nid: agentic-payments-gating-model\ntitle: \"Agent-Initiated Payment Gating\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: pay\nform: document-format\nwire_archetype: payments_onchain\nspec_url: https://datatracker.ietf.org/doc/html/draft-king-yew-choo-agentic-payments-01\nlast_checked: 2026-11-08\n---\n\n# Agent-Initiated Payment Gating\n\n**Category:** [Pay](/category/pay/) (`pay`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-11-08\n\n**Agent-Initiated Payment Gating** (`draft-king-yew-choo-agentic-payments-01`) is an Informational Internet-Draft by King Yew Choo of True Primary, London. The document is a server-side model for gating agent-initiated human-sourced asynchronous HTTP tasks on payment or entitlement. [1] It defines no protocol, wire format, or conformance requirements. [1] The model places a payment or entitlement gate before fulfillment, maps that gate to adjacent protocols, and defines a task state machine. [1] `draft-king-yew-choo-agentic-payments-01` is dated 8 October 2026, and the header lists Expires: 11 April 2027. [1] Its intended status is Informational. It describes a model, uses no BCP 14 key words, and defines no protocol elements. [1] Datatracker records an Active Internet-Draft (individual), last updated `2026-10-08`, with IESG state I-D Exists. The draft is not endorsed by the IETF and has no formal standing in the IETF standards process. [2]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Pay](/category/pay/) (`pay`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | King Yew Choo (True Primary, London) [1] |\n| **Governed by** | Individual IETF Internet-Draft submission (Network Working Group; no formal IETF standing) [1][2] |\n| **Track** | IETF Internet-Draft (Informational) [3] |\n| **Status** | Internet-Draft, Intended Status: Informational; expires 11 April 2027 [1][3] |\n| **Version** | `draft-king-yew-choo-agentic-payments-01` (published 8 October 2026; expires 11 April 2027) [1][3] |\n| **Wire format** | None defined (abstract server-side state machine and formal validation model over HTTP; defines no wire format) [1][3] |\n| **Specification** | https://datatracker.ietf.org/doc/html/draft-king-yew-choo-agentic-payments-01 [3] |\n| **Found at** | None defined (models abstract activation requests, idempotency keys, nonces, and payment requirements without normative HTTP headers) [1][3] |\n| **Licence** | IETF Trust Legal Provisions (BCP 78) [3] |\n| **IETF state** | `draft-king-yew-choo-agentic-payments-01` · **Active Internet-Draft** (expires 2027-04-11) · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-king-yew-choo-agentic-payments/)) |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nRequests can be lost, retried, duplicated, or observed out of order, so a retry that creates a second task or captures a second charge is a correctness failure. [1] The principal is not present: authority to spend was delegated in advance, so the server evaluates delegated authority as data presented with the request. [1] A server that begins fulfillment before payment is validated can have cost extracted from it by a non-paying or unauthorized caller. [1] Under stated well-formedness constraints and operating assumptions, it yields gate-before-fulfillment safety, at most one task per retained idempotency key, at most one gate acceptance per payment requirement, and an operator-checkable record linking a delivered artifact to operator-controlled records. [1] The model places one gate state, written `g*`. Every path into the fulfillment region passes through that gate, and no fulfillment side effect occurs before it. [1] It defines no protocol, wire format, or conformance requirements. [1] It analyzes the security of none of the cited protocols. [1] The draft's subject is narrower: one operator's admission of paid, human-sourced asynchronous work, under the constraints and operating assumptions of Section 6. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **HTTP 402 Payment Required (RFC 9110 §15.5.3)** | `RFC 9110 §15.5.3` | Analogous to classic standard | draft-king-yew-choo-agentic-payments places a payment or entitlement gate before fulfillment and maps that gate to x402 and the HTTP Payment authentication scheme, and it defines no 402 header, body, or conformance requirement. [3][4] |\n| **HTTP WWW-Authenticate Challenge Framework (RFC 9110 §11.6.1)** | `RFC 9110 §11.6.1` | Analogous to classic standard | The model treats the HTTP Payment authentication scheme as one method adapter that can satisfy the gate, alongside MPP, and it specifies no WWW-Authenticate grammar of its own. [3][4] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Machine Payments Protocol (MPP)](/protocols/mpp/)** | Complements | The draft cites the HTTP Payment authentication scheme and MPP as wires that can satisfy its pre-fulfillment gate, and the draft's own content is the task state machine, which defines no protocol bytes. [3][5] |\n| **[x402](/protocols/x402/)** | Complements | The draft cites x402 as an exchange a method adapter might use at the gate, while noting in Section 7 that x402's default verify-then-settle-after-fulfillment flow lies outside the pre-fulfillment gate model where SETTLEMENT_CONFIRMED precedes EXECUTING. [3][6] |\n| **[Agent Payments Protocol (AP2)](/protocols/ap2/)** | Complements | The draft cites AP2 as a mandate candidate for delegated authority at the gate while defining only the task state machine and no concrete AP2-to-M field mapping in Section 7. [3][7] |\n\n---\n\n## See also\n\n- **Category:** [Pay protocols](/category/pay/)\n\n---\n\n## References\n\n1. King Yew Choo (True Primary, London), *A Server-Side Model for Gating Agent-Initiated Human-Sourced Asynchronous HTTP Tasks on Payment or Entitlement (draft-king-yew-choo-agentic-payments-01)* (checked 2026-10-31) — <https://www.ietf.org/archive/id/draft-king-yew-choo-agentic-payments-01.txt>\n2. King Yew Choo (True Primary, London), *draft-king-yew-choo-agentic-payments — document page (IETF Datatracker)* (checked 2026-10-29) — <https://datatracker.ietf.org/doc/draft-king-yew-choo-agentic-payments/>\n3. King Yew Choo (True Primary, London), *A Server-Side Model for Gating Agent-Initiated Human-Sourced Asynchronous HTTP Tasks on Payment or Entitlement (draft-king-yew-choo-agentic-payments-01 HTML)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/html/draft-king-yew-choo-agentic-payments-01>\n4. R. Fielding, Ed., M. Nottingham, Ed., and J. Reschke, Ed., *RFC 9110: HTTP Semantics* (June 2022) — <https://www.rfc-editor.org/rfc/rfc9110.html>\n5. B. Ryan, J. Moxey, T. Meagher, J. Weinstein, and S. Kaliski, *draft-httpauth-payment — The \"Payment\" HTTP Authentication Scheme (IETF Datatracker)* (checked 2026-11-08) — <https://datatracker.ietf.org/doc/draft-httpauth-payment/>\n6. Linux Foundation, *Linux Foundation Announces Operational Launch of x402 Foundation to Standardize Internet-Native Payments for AI Agents and Applications* (July 14, 2026) — <https://www.linuxfoundation.org/press/linux-foundation-announces-operational-launch-of-x402-foundation-to-standardize-internet-native-payments-for-ai-agents-and-applications>\n7. Google (google-agentic-commerce), *Agentic Payment Protocol (v0.2)* (fetched 2026-10-30) — <https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/specification.md>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "idmandat-credential",
   "name": "ID MANDAT: A Machine-Readable Credential for the Agents of a Company",
   "acronym": "ID MANDAT",
   "aliases": [
    "idmandat",
    "draft-koenig-idmandat-credential"
   ],
   "collisions": [],
   "step": "identify",
   "parties": [
    "agent-site",
    "agent-registry"
   ],
   "form": "well-known-file",
   "track": "ietf",
   "scope": "general",
   "question": "How can a recipient find out which company stands behind an agent and what that agent is declared to be allowed and not allowed to do on the company's behalf?",
   "analog": "An imprint page for agents, with a DNS TXT proof record and a signed registry lookup",
   "origin": {
    "org": "M. König (individual submission; registry operated at idmandat.com)",
    "date": "2026-10-16"
   },
   "governance": "Individual Internet-Draft, not an IETF working group product; the reference registry is operated at idmandat.com",
   "native_status": "Internet-Draft, Intended Status: Informational; individual submission describing a deployed beta (version 0.3), not the product of an IETF working group",
   "phase": "draft",
   "implementation": "prototype",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "version": {
    "label": "draft-koenig-idmandat-credential-00",
    "date": "2026-10-16"
   },
   "spec_url": "https://datatracker.ietf.org/doc/html/draft-koenig-idmandat-credential-00",
   "discovery": {
    "mechanism": "well-known file at /.well-known/idmandat.json, linked to the domain by a DNS TXT record at _idmandat.<domain>",
    "path": "/.well-known/idmandat.json"
   },
   "probe": {
    "method": "GET",
    "path": "/.well-known/idmandat.json",
    "parse": "Parse JSON; check that 'domain' equals the fetched host and that 'agents' is present; optionally resolve the TXT record _idmandat.<domain> for 'v=idmandat1'",
    "on_absent": "Treat as no declaration; absence is not evidence against the agent"
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.ietf.org/archive/id/draft-koenig-idmandat-credential-00.txt",
     "claim": "Manja König (ID MANDAT), *A Machine-Readable Credential for the Agents of a Company (ID MANDAT) (draft-koenig-idmandat-credential-00)*, checked 2026-10-31",
     "date": null,
     "quote": "Network Working Group M. König Internet-Draft ID MANDAT Intended status: Informational 16 October 2026 Expires: 19 April 2027 A Machine-Readable Credential for the Agents of a Company (ID MANDAT) draft-koenig-idmandat-credential-00 / This is an individual submission describing a deployed beta (version 0.3). It is not the product of an IETF working group. / This document describes a small credential file that a company publishes on its own domain under /.well-known/idmandat.json, a DNS TXT record that links the file to the domain, and the answer format of a public registry that checks both and reports the result in a digitally signed response. / The reference registry answers GET requests on https://idmandat.com/api/v1/verify with a JSON object. / Answers are signed with Ed25519 / Intended status: Informational 16 October 2026 Expires: 19 April 2027 / This Internet-Draft will expire on 19 April 2027. / Manja König ID MANDAT Osnabrück Germany Email: [email redacted] URI: https://idmandat.com König Expires 19 April / MANDAT) draft-koenig-idmandat-credential-00 Abstract Automated software agents increasingly act for companies: t Network Working Group / Intended status: Informational / This is an individual submission describing a deployed beta (version 0.3). It is not the product of an IETF working group. The lookup interface described in Section 5 is operated at https://idmandat.com / The list of current Internet- Drafts is at https://datatracker.ietf.org/drafts/current/. Internet-Drafts are draft documents valid / [Page 4] Internet-Draft ID MANDAT Credential October 2026 { \"idmandat\": \"0.1\", \"domain\": \"example.com\", \"organization\": / Credential October 2026 * a DNS TXT record that ties the file to the / publishes on its own domain under /.well-known/idmandat.json, a DNS TXT record that links the / Copyright (c) 2026 IETF Trust and the persons identified as the document authors. / A recipient can verify, for example with Web Bot Auth, that a request was signed by the holder of a key. That does not tell the recipient which company stands behind the agent or what the agent is allowed to do on its behalf. / This document specifies a complementary, voluntary and declarative layer: / a credential file under the company's own domain, naming the company, its agents, and for each agent what it may and may not do / a DNS TXT record that ties the file to the domain / the lookup answer of a registry that checks both, including the possibility of revoking an entry / The credential states, by declaration of the company, which agents act for it and what each agent may and may not do. It does not make claims about creditworthiness, trustworthiness or quality. / The registry confirms identity of the company and that the declaration is published on its domain. It does not confirm that the agent exists, that a power of attorney was actually granted, or that the agent respects its \"mayNot\" list. A recipient decides what to do with the answer and MUST enforce its own limits. / This document does not define authorisation of single transactions (amount, purpose, time window) or delegation between agents.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://datatracker.ietf.org/doc/draft-koenig-idmandat-credential/",
     "claim": "Manja König (ID MANDAT), *draft-koenig-idmandat-credential — IDMandat Credential (IETF Datatracker)*, checked 2026-10-31",
     "date": null,
     "quote": "Active Internet-Draft (individual) / This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. / Last updated | 2026-10-16 | | RFC stream | | (None) | | Intended RFC status | | (None) / IESG state | | I-D Exists / # A Machine-Readable Credential for the Agents of a Company (ID MANDAT) draft-koenig-idmandat-credential-00 / | | 2026-10-16 | 00 | Manja König | New version available: draft-koenig-idmandat-credential-00.txt |",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://datatracker.ietf.org/doc/html/draft-koenig-idmandat-credential-00",
     "claim": "Manja König (ID MANDAT), *A Machine-Readable Credential for the Agents of a Company (ID MANDAT) (draft-koenig-idmandat-credential-00 HTML)*, checked 2026-10-31",
     "date": null,
     "quote": "URI: https://idmandat.com König Expires 19 April 2027 Page 9 Internet-Draft ID MANDAT Credential October / File 3. The DNS Proof Record 4. Check Levels 5. Registry Lookup and Signed / working documents as Internet-Drafts. The list of current Internet- Drafts is at https://datatracker.ietf.org/drafts/current/. Internet-Drafts / /.well-known/idmandat.json, a DNS TXT record that links the file to the domain, and the",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://www.rfc-editor.org/rfc/rfc8615.html",
     "claim": "M. Nottingham, *RFC 8615: Well-Known Uniform Resource Identifiers (URIs)*, May 2019",
     "date": null,
     "quote": "This memo defines a path prefix for \"well-known locations\",",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://www.w3.org/TR/did-core/",
     "claim": "W3C, *Decentralized Identifiers (DIDs) v1.0*, 2022-07-19",
     "date": "2022-07-19",
     "quote": "Decentralized identifiers (DIDs) are a new type of identifier that",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-webbotauth-httpsig-protocol/",
     "claim": "IETF Datatracker, *draft-ietf-webbotauth-httpsig-protocol — HTTP Message Signatures for automated traffic (IETF Datatracker)*, checked 2026-10-30",
     "date": null,
     "quote": "WG state WG Document",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://datatracker.ietf.org/doc/rfc9421/",
     "claim": "IETF Datatracker, *HTTP Message Signatures (RFC 9421)*, Proposed Standard (February 2024); checked 2026-10-30",
     "date": null,
     "quote": "RFC - Proposed Standard (February 2024)",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://www.ietf.org/archive/id/draft-alla-agent-identity-document-02.txt",
     "claim": "F. Alla (Authecity Systems LLC), *The Agent Identity Document: A Hosted, Accountable Public Record for AI Agents (draft-alla-agent-identity-document-02)*, checked 2026-11-07",
     "date": null,
     "quote": "This Internet-Draft will expire on 4 May 2027.",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://aaif.io/blog/a2a-joins-aaif",
     "claim": "Agentic AI Foundation, *A2A joins AAIF's open agentic stack*, published 2026-08-17; modified 2026-09-24",
     "date": null,
     "quote": "A2A v1.0, the first stable specification, shipped in March 2026.",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Current : the current protocol version, which is ready for use and may continue to receive backwards compatible changes.",
     "ref": 10
    }
   ],
   "summary_md": "**A Machine-Readable Credential for the Agents of a Company (ID MANDAT)** (`draft-koenig-idmandat-credential-00`) is an Internet-Draft by M. König. Intended status is Informational. This is an individual submission describing a deployed beta (version `0.3`). It is not the product of an IETF working group. Document type is Active Internet-Draft (individual). This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. The draft describes a small credential file that a company publishes on its own domain under `/.well-known/idmandat.json`, a DNS TXT record that links the file to the domain, and the answer format of a public registry that checks both and reports the result in a digitally signed response. The reference registry answers GET requests on `https://idmandat.com/api/v1/verify` with a JSON object. Answers are signed with Ed25519. `draft-koenig-idmandat-credential-00` is dated 16 October 2026. This Internet-Draft will expire on 19 April 2027. Last updated `2026-10-16`. RFC stream is (None). Intended RFC status is (None). IESG state is I-D Exists.",
   "part_of": null,
   "group": null,
   "use_cases": [
    "prove-agent-identity",
    "describe-agent-capabilities",
    "delegate-user-authority",
    "attribute-agent-traffic"
   ],
   "audience": [
    "site-owner",
    "agent-builder",
    "platform"
   ],
   "pairs_with": [
    "webbotauth",
    "http-message-signatures",
    "agent-identity-document",
    "a2a",
    "mcp"
   ],
   "prerequisites": [
    "webbotauth"
   ],
   "dispute": null,
   "last_verified": "2026-11-12",
   "history": [
    {
     "date": "2026-10-19",
     "note": "initial candidate record from primary source (https://datatracker.ietf.org/doc/html/draft-koenig-idmandat-credential-00)"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-koenig-idmandat-credential"
    }
   ],
   "ietf_tracker": {
    "doc": "draft-koenig-idmandat-credential",
    "rev": "00",
    "state": "active",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-10-16",
    "expires_utc": "2027-04-19",
    "as_of": "2026-10-31",
    "source": "https://datatracker.ietf.org/doc/draft-koenig-idmandat-credential/",
    "source_label": "per IETF Datatracker"
   },
   "hatnote_md": "",
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": null,
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**A Machine-Readable Credential for the Agents of a Company (ID MANDAT)** (`draft-koenig-idmandat-credential-00`) is an Internet-Draft by M. König. Intended status is Informational. [1] This is an individual submission describing a deployed beta (version `0.3`). It is not the product of an IETF working group. [1] Document type is Active Internet-Draft (individual). This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. [2] The draft describes a small credential file that a company publishes on its own domain under `/.well-known/idmandat.json`, a DNS TXT record that links the file to the domain, and the answer format of a public registry that checks both and reports the result in a digitally signed response. [1] The reference registry answers GET requests on `https://idmandat.com/api/v1/verify` with a JSON object. Answers are signed with Ed25519. [1] `draft-koenig-idmandat-credential-00` is dated 16 October 2026. This Internet-Draft will expire on 19 April 2027. [1] Last updated `2026-10-16`. RFC stream is (None). Intended RFC status is (None). IESG state is I-D Exists. [2]",
   "v05_identity_sentence_md": "**A Machine-Readable Credential for the Agents of a Company (ID MANDAT)** (`draft-koenig-idmandat-credential-00`) is an Internet-Draft by M. König. Intended status is Informational. [1] This is an individual submission describing a deployed beta (version `0.3`). It is not the product of an IETF working group. [1] Document type is Active Internet-Draft (individual). This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. [2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Identify](/category/identify/) (`identify`)"
    },
    {
     "label": "Form",
     "value_md": "Well-known file (`well-known-file`)"
    },
    {
     "label": "Originated by",
     "value_md": "Manja König (`idmandat.com`) [1][3]"
    },
    {
     "label": "Governed by",
     "value_md": "Individual IETF Internet-Draft submission (`draft-koenig-idmandat-credential-00`, no working group stream) [1][2]"
    },
    {
     "label": "Track",
     "value_md": "Vendor beta specification (idmandat.com version 0.3) and individual IETF Internet-Draft (Informational, draft-koenig-idmandat-credential-00) [1]"
    },
    {
     "label": "Status",
     "value_md": "Internet-Draft, Intended Status: Informational; individual submission describing a deployed beta (version 0.3), not the product of an IETF working group [1][2][3]"
    },
    {
     "label": "Version",
     "value_md": "`draft-koenig-idmandat-credential-00` (Published 16 October 2026; describes deployed beta version `0.3`) [1][2]"
    },
    {
     "label": "Wire format",
     "value_md": "HTTPS JSON credential file (`application/json`, RFC 8259), DNS `TXT` proof record, and Ed25519-signed registry response [1][3]"
    },
    {
     "label": "Specification",
     "value_md": "https://datatracker.ietf.org/doc/html/draft-koenig-idmandat-credential-00 [3]"
    },
    {
     "label": "Found at",
     "value_md": "`/.well-known/idmandat.json`, DNS `TXT` record at `_idmandat.<domain>`, and registry lookup via `Signature-Agent` key directory [1][3]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust Legal Provisions (BCP 78) [1]"
    },
    {
     "label": "IETF state",
     "value_md": "`draft-koenig-idmandat-credential-00` · **Active Internet-Draft** (expires 2027-04-19) · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-koenig-idmandat-credential/))"
    }
   ],
   "v05_problem_md": "A recipient can verify, for example with Web Bot Auth, that a request was signed by the holder of a key. That does not tell the recipient which company stands behind the agent or what the agent is allowed to do on its behalf. [1] The draft specifies a complementary, voluntary and declarative layer: a credential file under the company's own domain, naming the company, its agents, and for each agent what it may and may not do. [1] A DNS TXT record ties the file to the domain. The lookup answer of a registry checks both, including the possibility of revoking an entry. [1] The credential does not make claims about creditworthiness, trustworthiness or quality. [1] The registry confirms identity of the company and that the declaration is published on its domain. It does not confirm that the agent exists, that a power of attorney was actually granted, or that the agent respects its `mayNot` list. A recipient decides what to do with the answer and MUST enforce its own limits. [1] The draft does not define authorization of single transactions (amount, purpose, time window) or delegation between agents. [1]",
   "v05_mechanism_delta_md": "The draft specifies a complementary, voluntary and declarative layer: a credential file under the company's own domain, naming the company, its agents, and for each agent what it may and may not do. [1] A DNS TXT record ties the file to the domain. The lookup answer of a registry checks both, including the possibility of revoking an entry. [1]",
   "v05_scope_boundary_md": "The credential does not make claims about creditworthiness, trustworthiness or quality. [1] The registry confirms identity of the company and that the declaration is published on its domain. It does not confirm that the agent exists, that a power of attorney was actually granted, or that the agent respects its `mayNot` list. A recipient decides what to do with the answer and MUST enforce its own limits. [1] The draft does not define authorization of single transactions (amount, purpose, time window) or delegation between agents. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "Well-Known URIs (RFC 8615)",
      "spec_or_rfc": "RFC 8615",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "The company publishes the JSON credential at /.well-known/idmandat.json, and a DNS TXT record at `_idmandat.<domain>` binds that file to the domain. [3][4]"
     },
     {
      "name": "W3C Decentralized Identifiers (DID 1.0) & Verifiable Credentials (VC 2.0)",
      "spec_or_rfc": "W3C DID 1.0",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "The file names the company and each agent with per-agent may and mayNot mandates, and a public registry returns Ed25519-signed check answers, in the credential role a verifiable credential plays. [3][5]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "webbotauth",
      "target_name": "Web Bot Auth",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "The stated prerequisite is Web Bot Auth, whose Signature, Signature-Input, and Signature-Agent headers identify the caller, while the credential file is /.well-known/idmandat.json. [3][6]"
     },
     {
      "target_id": "http-message-signatures",
      "target_name": "HTTP Message Signatures",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "RFC 9421 Signature and Signature-Input are the signing headers Web Bot Auth uses, and the ID MANDAT document is the separate /.well-known/idmandat.json file tied to a _idmandat TXT record. [3][7]"
     },
     {
      "target_id": "agent-identity-document",
      "target_name": "The Agent Identity Document: A Hosted, Accountable Public Record for AI Agents",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "The Agent Identity Document is JSON at /.well-known/agent-identity.json, while ID MANDAT publishes /.well-known/idmandat.json plus a _idmandat TXT record and per-agent may and mayNot mandates. [3][8]"
     },
     {
      "target_id": "a2a",
      "target_name": "Agent2Agent Protocol (A2A)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "A2A is the agent message protocol, and ID MANDAT publishes the company's agent list, with may and mayNot mandates, at /.well-known/idmandat.json. [3][9]"
     },
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "MCP is the tool protocol, and ID MANDAT publishes per-agent may and mayNot mandates at /.well-known/idmandat.json with Ed25519-signed registry answers. [3][10]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Identify protocols](/category/identify/)** — Category index for `identify` standards."
    }
   ],
   "v05_compiled_md": "---\nid: idmandat-credential\ntitle: \"ID MANDAT: A Machine-Readable Credential for the Agents of a Company\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: identify\nform: well-known-file\nwire_archetype: identity_auth_crypto\nspec_url: https://datatracker.ietf.org/doc/html/draft-koenig-idmandat-credential-00\nlast_checked: 2026-11-12\n---\n\n# ID MANDAT: A Machine-Readable Credential for the Agents of a Company\n\n**Category:** [Identify](/category/identify/) (`identify`) · **Form:** Well-known file (`well-known-file`) · **Last checked:** 2026-11-12\n\n**A Machine-Readable Credential for the Agents of a Company (ID MANDAT)** (`draft-koenig-idmandat-credential-00`) is an Internet-Draft by M. König. Intended status is Informational. [1] This is an individual submission describing a deployed beta (version `0.3`). It is not the product of an IETF working group. [1] Document type is Active Internet-Draft (individual). This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. [2] The draft describes a small credential file that a company publishes on its own domain under `/.well-known/idmandat.json`, a DNS TXT record that links the file to the domain, and the answer format of a public registry that checks both and reports the result in a digitally signed response. [1] The reference registry answers GET requests on `https://idmandat.com/api/v1/verify` with a JSON object. Answers are signed with Ed25519. [1] `draft-koenig-idmandat-credential-00` is dated 16 October 2026. This Internet-Draft will expire on 19 April 2027. [1] Last updated `2026-10-16`. RFC stream is (None). Intended RFC status is (None). IESG state is I-D Exists. [2]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Identify](/category/identify/) (`identify`) |\n| **Form** | Well-known file (`well-known-file`) |\n| **Originated by** | Manja König (`idmandat.com`) [1][3] |\n| **Governed by** | Individual IETF Internet-Draft submission (`draft-koenig-idmandat-credential-00`, no working group stream) [1][2] |\n| **Track** | Vendor beta specification (idmandat.com version 0.3) and individual IETF Internet-Draft (Informational, draft-koenig-idmandat-credential-00) [1] |\n| **Status** | Internet-Draft, Intended Status: Informational; individual submission describing a deployed beta (version 0.3), not the product of an IETF working group [1][2][3] |\n| **Version** | `draft-koenig-idmandat-credential-00` (Published 16 October 2026; describes deployed beta version `0.3`) [1][2] |\n| **Wire format** | HTTPS JSON credential file (`application/json`, RFC 8259), DNS `TXT` proof record, and Ed25519-signed registry response [1][3] |\n| **Specification** | https://datatracker.ietf.org/doc/html/draft-koenig-idmandat-credential-00 [3] |\n| **Found at** | `/.well-known/idmandat.json`, DNS `TXT` record at `_idmandat.<domain>`, and registry lookup via `Signature-Agent` key directory [1][3] |\n| **Licence** | IETF Trust Legal Provisions (BCP 78) [1] |\n| **IETF state** | `draft-koenig-idmandat-credential-00` · **Active Internet-Draft** (expires 2027-04-19) · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-koenig-idmandat-credential/)) |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nA recipient can verify, for example with Web Bot Auth, that a request was signed by the holder of a key. That does not tell the recipient which company stands behind the agent or what the agent is allowed to do on its behalf. [1] The draft specifies a complementary, voluntary and declarative layer: a credential file under the company's own domain, naming the company, its agents, and for each agent what it may and may not do. [1] A DNS TXT record ties the file to the domain. The lookup answer of a registry checks both, including the possibility of revoking an entry. [1] The credential does not make claims about creditworthiness, trustworthiness or quality. [1] The registry confirms identity of the company and that the declaration is published on its domain. It does not confirm that the agent exists, that a power of attorney was actually granted, or that the agent respects its `mayNot` list. A recipient decides what to do with the answer and MUST enforce its own limits. [1] The draft does not define authorization of single transactions (amount, purpose, time window) or delegation between agents. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **Well-Known URIs (RFC 8615)** | `RFC 8615` | Profiles classic standard | The company publishes the JSON credential at /.well-known/idmandat.json, and a DNS TXT record at `_idmandat.<domain>` binds that file to the domain. [3][4] |\n| **W3C Decentralized Identifiers (DID 1.0) & Verifiable Credentials (VC 2.0)** | `W3C DID 1.0` | Analogous to classic standard | The file names the company and each agent with per-agent may and mayNot mandates, and a public registry returns Ed25519-signed check answers, in the credential role a verifiable credential plays. [3][5] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Web Bot Auth](/protocols/webbotauth/)** | Builds on | The stated prerequisite is Web Bot Auth, whose Signature, Signature-Input, and Signature-Agent headers identify the caller, while the credential file is /.well-known/idmandat.json. [3][6] |\n| **[HTTP Message Signatures](/protocols/http-message-signatures/)** | Complements | RFC 9421 Signature and Signature-Input are the signing headers Web Bot Auth uses, and the ID MANDAT document is the separate /.well-known/idmandat.json file tied to a _idmandat TXT record. [3][7] |\n| **[The Agent Identity Document: A Hosted, Accountable Public Record for AI Agents](/protocols/agent-identity-document/)** | Peer alternative | The Agent Identity Document is JSON at /.well-known/agent-identity.json, while ID MANDAT publishes /.well-known/idmandat.json plus a _idmandat TXT record and per-agent may and mayNot mandates. [3][8] |\n| **[Agent2Agent Protocol (A2A)](/protocols/a2a/)** | Complements | A2A is the agent message protocol, and ID MANDAT publishes the company's agent list, with may and mayNot mandates, at /.well-known/idmandat.json. [3][9] |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | MCP is the tool protocol, and ID MANDAT publishes per-agent may and mayNot mandates at /.well-known/idmandat.json with Ed25519-signed registry answers. [3][10] |\n\n---\n\n## See also\n\n- **Category:** [Identify protocols](/category/identify/)\n\n---\n\n## References\n\n1. Manja König (ID MANDAT), *A Machine-Readable Credential for the Agents of a Company (ID MANDAT) (draft-koenig-idmandat-credential-00)* (checked 2026-10-31) — <https://www.ietf.org/archive/id/draft-koenig-idmandat-credential-00.txt>\n2. Manja König (ID MANDAT), *draft-koenig-idmandat-credential — IDMandat Credential (IETF Datatracker)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/draft-koenig-idmandat-credential/>\n3. Manja König (ID MANDAT), *A Machine-Readable Credential for the Agents of a Company (ID MANDAT) (draft-koenig-idmandat-credential-00 HTML)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/html/draft-koenig-idmandat-credential-00>\n4. M. Nottingham, *RFC 8615: Well-Known Uniform Resource Identifiers (URIs)* (May 2019) — <https://www.rfc-editor.org/rfc/rfc8615.html>\n5. W3C, *Decentralized Identifiers (DIDs) v1.0* (2022-07-19) — <https://www.w3.org/TR/did-core/>\n6. IETF Datatracker, *draft-ietf-webbotauth-httpsig-protocol — HTTP Message Signatures for automated traffic (IETF Datatracker)* (checked 2026-10-30) — <https://datatracker.ietf.org/doc/draft-ietf-webbotauth-httpsig-protocol/>\n7. IETF Datatracker, *HTTP Message Signatures (RFC 9421)* (Proposed Standard (February 2024); checked 2026-10-30) — <https://datatracker.ietf.org/doc/rfc9421/>\n8. F. Alla (Authecity Systems LLC), *The Agent Identity Document: A Hosted, Accountable Public Record for AI Agents (draft-alla-agent-identity-document-02)* (checked 2026-11-07) — <https://www.ietf.org/archive/id/draft-alla-agent-identity-document-02.txt>\n9. Agentic AI Foundation, *A2A joins AAIF's open agentic stack* (published 2026-08-17; modified 2026-09-24) — <https://aaif.io/blog/a2a-joins-aaif>\n10. Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation* (2026-07-28) — <https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "lws10-authn-ssi-cid",
   "name": "LWS 1.0 Authentication Suite: Self-signed Identity using Controlled Identifiers",
   "acronym": "LWS-SSI-CID",
   "aliases": [
    "lws10-authn-ssi-cid",
    "LWS Self-signed Identity authentication suite"
   ],
   "collisions": [],
   "step": "identify",
   "parties": [
    "agent-site"
   ],
   "form": "document-format",
   "track": "w3c",
   "scope": "general",
   "question": "How can an agent that signs its own JWT identity tokens authenticate to a Linked Web Storage server, with verifiers validating the token against the agent's controlled identifier document?",
   "analog": "Self-issued OpenID-style JWT client authentication, where the public key is resolved from the subject's own HTTPS or DID controlled identifier document.",
   "origin": {
    "org": "W3C Linked Web Storage Working Group",
    "date": null
   },
   "governance": "W3C Linked Web Storage Working Group, Recommendation track, under the W3C Patent Policy and the 18 August 2025 W3C Process Document",
   "native_status": "W3C Working Draft 15 October 2026; published by the Linked Web Storage Working Group as a Working Draft using the Recommendation track. The page also says: This is an unofficial proposal.",
   "phase": "draft",
   "implementation": "none-found",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "version": {
    "label": "W3C Working Draft",
    "date": "2026-10-15"
   },
   "spec_url": "https://www.w3.org/TR/lws10-authn-ssi-cid/",
   "discovery": {
    "mechanism": "The verifier dereferences the JWT sub claim (an HTTPS URI or DID URI) to fetch the controlled identifier document and selects a verification method by the JWT kid header.",
    "path": null
   },
   "probe": {
    "method": "NONE",
    "path": "",
    "parse": "",
    "on_absent": "Support cannot be observed passively. It would require an authenticated request to an LWS authorization server using a self-issued JWT."
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.w3.org/TR/lws10-authn-ssi-cid/",
     "claim": "Jesse Wright (University of Oxford) and Aaron Coburn (Inrupt Inc.); W3C Linked Web Storage Working Group, *LWS 1.0 Authentication Suite: Self-signed Identity using Controlled Identifiers*, W3C Working Draft, 15 October 2026",
     "date": null,
     "quote": "This document defines an authentication suite for the Linked Web Storage (LWS) protocol, enabling clients that are able to sign their own identity tokens to integrate with LWS. / Self-issued identity is important for cases where applications act on their own behalf. This includes autonomous bots as well as server-side scripts, among others. In these cases, the agent is able to securely manage the private portion of a key pair, which it uses to generate signed JSON Web Tokens (JWT). This specification describes how this class of agents can generate authentication credentials that can be used with a Linked Web Storage. / Editor: Jesse Wright (University of Oxford) Author: Aaron Coburn (Inrupt Inc.) / This document was published by the Linked Web Storage Working Group as a Working Draft using the Recommendation track. / An example JWT that is also an LWS authentication credential is included below. / \"kid\": \"c1f52577\", \"kty\": \"EC\", \"alg\": \"ES256\", \"typ\": \"JWT\" … \"sub\": \"https://id.example/agent\", \"iss\": \"https://id.example/agent\", \"client_id\": \"https://id.example/agent\", \"aud\": [\"https://as.example\"] / W3C Working Draft 15 October 2026 More details about this document This version: https://www.w3.org/TR/2026/WD-lws10-authn-ssi-cid-20261015/ / \"publishDate\": \"2026-10-15\", \"previousMaturity\": \"WD\", \"previousPublishDate\": \"2026-09-21\" / This is an unofficial proposal. This document was published by the Linked Web Storage Working Group as a Working Draft using the Recommendation track. Publication as a Working Draft does not imply endorsement by W3C and its Members. This is a draft document and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to cite this document as other than a work in progress. / Commit history Editor: Jesse Wright ( University of Oxford ) Author: Aaron Coburn ( / \"web-platform\" ], \"group\": \"lws\", \"localBiblio\": { \"LWS10-CORE\": { \"title\": \"Linked Web Storage Protocol 1.0\", / Working Draft 15 October 2026 More details about this document / Working Draft 15 October 2026 More details about this document This version: https://www.w3.org/TR/2026/WD-lws10-authn-ssi-cid-20261015/ Latest / IETF. May 2015. Proposed Standard. URL: https://www.rfc-editor.org/info/rfc7515/ [RFC7519] JSON Web Token (JWT). M. Jones; / [RFC6749]. The terms \"controlled identifier document\" and \"verification method\" are defined by W3C Controlled / Copyright © 2026 World Wide Web Consortium. W3C liability, trademark and permissive document license rules apply. / The JWT MUST NOT use \"none\" as the signing algorithm. The JWT MUST use the sub (subject) claim for the LWS subject identifier. The JWT MUST use the iss (issuer) claim for the LWS issuer identifier. The JWT MUST use the client_id (client ID) claim for the LWS client identifier. The claims sub, iss, and client_id MUST all use the same URI value. Any audience restriction in the JWT MUST use the aud (audience) claim. The aud claim MUST include the target authorization server. The JWT MUST include an exp (expiration) claim, indicating the time the token expires. The JWT MUST include an iat (issued at) claim, indicating the time the token was issued. / In the absence of a pre-existing trust relationship, the verifier MUST dereference the sub (subject) claim in the authentication credential. The resulting resource MUST be formatted as a valid controlled identifier document [CID-1.0] with an id value equal to the subject identifier. A verifier MUST reject any tokens using an alg header parameter that equals \"none\". A verifier MUST validate all claims described by the authentication credential data model. The verifier MUST use the kid (key ID) value from the signed JWT header to identify a verification method from the subject's controlled identifier document. This process is described in [CID-1.0] Section 3.3. Using the selected verification method from the controlled identifier document, the signature of the JWT MUST be validated as described in [RFC7515], Section 5.2. A verifier MUST ensure that the current time is before the time represented by the exp claim. Implementers MAY provide for some small leeway to account for clock skew. / As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative. / This authentication suite is designed to work with subject identifiers that use HTTPS URIs as well as DID URIs. Since DID documents, as defined in Decentralized Identifiers (DIDs) 1.1 [DID-1.1] Section 5.1.2, extend controlled identifier documents [CID-1.0], they are compatible with the validation process described in this specification. / A self-issued JSON Web Token used as an authentication credential MUST use the urn:ietf:params:oauth:token-type:jwt URI when interacting with an authorization server.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://www.w3.org/TR/cid-1.0/",
     "claim": "W3C, *Controlled Identifiers v1.0*, 2025-05-15",
     "date": "2025-05-15",
     "quote": "A controlled identifier document contains cryptographic material and lists service",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://openid.net/specs/openid-connect-self-issued-v2-1_0.html",
     "claim": "OpenID Foundation, *Self-Issued OpenID Provider v2 - draft*, fetched 2026-11-12",
     "date": null,
     "quote": "1 . Introduction 1.1 . Requirements Notation and Conventions",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://www.w3.org/TR/did-core/",
     "claim": "W3C, *Decentralized Identifiers (DIDs) v1.0*, 2022-07-19",
     "date": "2022-07-19",
     "quote": "Decentralized identifiers (DIDs) are a new type of identifier that",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-oauth-client-id-metadata-document/",
     "claim": "Aaron Parecki and Emelia Smith (IETF Web Authorization Protocol Working Group), *draft-ietf-oauth-client-id-metadata-document — OAuth Client ID Metadata Document (IETF Datatracker)*, checked 2026-11-08",
     "date": null,
     "quote": "Active Internet-Draft … oauth WG",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://www.ietf.org/archive/id/draft-ietf-wimse-workload-creds-03.txt",
     "claim": "B. Campbell, J. Salowey, A. Schwenkschuster, Y. Sheffer, and Y. Rosomakho, *WIMSE Workload Credentials (draft-ietf-wimse-workload-creds-03)*, 30 October 2026; expires 3 May 2027",
     "date": null,
     "quote": "typ: the WIT is explicitly typed, as recommended in Section 3.11 of [I-D.ietf-oauth-rfc8725bis], using the wit+jwt media type. / ABNF [RFC5234] for the value of Workload-Identity-Token header field",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://github.com/spiffe/spiffe/blob/main/standards/SPIFFE-ID.md",
     "claim": "SPIFFE, *SPIFFE ID*, checked 2026-10-30",
     "date": null,
     "quote": "Stability: Stable",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://www.ietf.org/archive/id/draft-singla-agent-identity-protocol-03.txt",
     "claim": "P. Singla (Independent), *Agent Identity Protocol (AIP): Decentralized Identity and Delegation for AI Agents (draft-singla-agent-identity-protocol-03)*, checked 2026-10-31",
     "date": null,
     "quote": "10 June 2026 Expires: 12 December 2026 Agent Identity Protocol (AIP): Decentralized Identity and",
     "ref": 8
    }
   ],
   "summary_md": "The specification defines an authentication suite for the Linked Web Storage (LWS) protocol, enabling clients that are able to sign their own identity tokens to integrate with LWS. The introduction covers applications that act on their own behalf, including autonomous bots and server-side scripts, where the agent is able to hold the private portion of a key pair and generate signed JSON Web Tokens (JWT). Jesse Wright (University of Oxford) is the editor, and Aaron Coburn (Inrupt Inc.) is the author. The Linked Web Storage Working Group published the document as a Working Draft using the Recommendation track. An example JWT that is also an LWS authentication credential is included in the specification. The header carries `kid` `c1f52577`, `alg` `ES256`, and `typ` `JWT`. The payload sets `sub`, `iss`, and `client_id` to `https://id.example/agent`, and sets `aud` to an array containing `https://as.example`. This version is the W3C Working Draft published 2026-10-15 at `https://www.w3.org/TR/2026/WD-lws10-authn-ssi-cid-20261015/`, succeeding the 2026-09-21 Working Draft. The status section says the Working Draft is an unofficial proposal whose publication does not imply endorsement by W3C and its Members.",
   "part_of": null,
   "group": null,
   "use_cases": [
    "prove-agent-identity"
   ],
   "audience": [
    "agent-builder",
    "platform",
    "standards-body"
   ],
   "pairs_with": [
    "oauth-cimd",
    "wimse",
    "spiffe",
    "aip"
   ],
   "prerequisites": [],
   "dispute": null,
   "last_verified": "2026-11-12",
   "history": [
    {
     "date": "2026-10-19",
     "note": "initial candidate record from primary source (https://w3.org/TR/lws10-authn-ssi-cid)"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "watch": [
    {
     "type": "page",
     "url": "https://w3.org/TR/lws10-authn-ssi-cid"
    }
   ],
   "hatnote_md": "",
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": null,
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "The specification defines an authentication suite for the Linked Web Storage (LWS) protocol, enabling clients that are able to sign their own identity tokens to integrate with LWS. The introduction covers applications that act on their own behalf, including autonomous bots and server-side scripts, where the agent is able to hold the private portion of a key pair and generate signed JSON Web Tokens (JWT). [1] Jesse Wright (University of Oxford) is the editor, and Aaron Coburn (Inrupt Inc.) is the author. The Linked Web Storage Working Group published the document as a Working Draft using the Recommendation track. [1] An example JWT that is also an LWS authentication credential is included in the specification. The header carries `kid` `c1f52577`, `alg` `ES256`, and `typ` `JWT`. The payload sets `sub`, `iss`, and `client_id` to `https://id.example/agent`, and sets `aud` to an array containing `https://as.example`. [1] This version is the W3C Working Draft published 2026-10-15 at `https://www.w3.org/TR/2026/WD-lws10-authn-ssi-cid-20261015/`, succeeding the 2026-09-21 Working Draft. [1] The status section says the Working Draft is an unofficial proposal whose publication does not imply endorsement by W3C and its Members. [1]",
   "v05_identity_sentence_md": "The specification defines an authentication suite for the Linked Web Storage (LWS) protocol, enabling clients that are able to sign their own identity tokens to integrate with LWS. The introduction covers applications that act on their own behalf, including autonomous bots and server-side scripts, where the agent is able to hold the private portion of a key pair and generate signed JSON Web Tokens (JWT). [1] Jesse Wright (University of Oxford) is the editor, and Aaron Coburn (Inrupt Inc.) is the author. The Linked Web Storage Working Group published the document as a Working Draft using the Recommendation track. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Identify](/category/identify/) (`identify`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "Jesse Wright (University of Oxford) and Aaron Coburn (Inrupt Inc.) [1]"
    },
    {
     "label": "Governed by",
     "value_md": "World Wide Web Consortium (W3C) Linked Web Storage Working Group (`w3c/lws-protocol`) [1]"
    },
    {
     "label": "Track",
     "value_md": "W3C Working Draft on the Recommendation track (Linked Web Storage Working Group) [1]"
    },
    {
     "label": "Status",
     "value_md": "W3C Working Draft 15 October 2026; published by the Linked Web Storage Working Group as a Working Draft using the Recommendation track. The page also says: This is an unofficial proposal. [1]"
    },
    {
     "label": "Version",
     "value_md": "W3C Working Draft (`2026-10-15`, `WD-lws10-authn-ssi-cid-20261015`) [1]"
    },
    {
     "label": "Wire format",
     "value_md": "Signed JSON Web Token (`JWT`, RFC 7519 / RFC 7515) resolved against a JSON-LD W3C Controlled Identifier Document (`https://www.w3.org/ns/cid/v1`) [1]"
    },
    {
     "label": "Specification",
     "value_md": "https://www.w3.org/TR/lws10-authn-ssi-cid/ [1]"
    },
    {
     "label": "Found at",
     "value_md": "Subject URI dereferencing (`sub` claim via HTTPS URI or DID URI) to a W3C Controlled Identifier Document (`CID-1.0`) containing `authentication` verification methods matched by JWS `kid` [1]"
    },
    {
     "label": "Licence",
     "value_md": "W3C Permissive Document License [1]"
    }
   ],
   "v05_problem_md": "Self-issued identity is important where applications act on their own behalf. The agent is able to securely manage the private portion of a key pair and generate a signed JWT. [1] For a JWT to be an LWS authentication credential, the JWT MUST NOT use `none` as the signing algorithm. `sub`, `iss`, and `client_id` MUST all use the same URI value. Any audience restriction MUST use `aud`, and `aud` MUST include the target authorization server. The JWT MUST include `exp` and `iat`. [1] With no pre-existing trust relationship, the verifier MUST dereference `sub`, and the resource MUST be a controlled identifier document whose `id` equals the subject. The verifier MUST reject `alg` `none`, MUST select a verification method with `kid`, MUST validate the signature, and MUST ensure the current time is before `exp`. [1] Examples, diagrams, and notes are non-normative. Everything else in the specification is normative. A note says the suite is designed for HTTPS URIs and DID URIs. [1] A self-issued JSON Web Token used as an authentication credential MUST use the `urn:ietf:params:oauth:token-type:jwt` URI when interacting with an authorization server. [1]",
   "v05_mechanism_delta_md": "For a JWT to be an LWS authentication credential, the JWT MUST NOT use `none` as the signing algorithm. `sub`, `iss`, and `client_id` MUST all use the same URI value. Any audience restriction MUST use `aud`, and `aud` MUST include the target authorization server. The JWT MUST include `exp` and `iat`. [1] With no pre-existing trust relationship, the verifier MUST dereference `sub`, and the resource MUST be a controlled identifier document whose `id` equals the subject. The verifier MUST reject `alg` `none`, MUST select a verification method with `kid`, MUST validate the signature, and MUST ensure the current time is before `exp`. [1]",
   "v05_scope_boundary_md": "Examples, diagrams, and notes are non-normative. Everything else in the specification is normative. A note says the suite is designed for HTTPS URIs and DID URIs. [1] A self-issued JSON Web Token used as an authentication credential MUST use the `urn:ietf:params:oauth:token-type:jwt` URI when interacting with an authorization server. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "W3C Controlled Identifiers 1.0",
      "spec_or_rfc": "W3C CID 1.0",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "The verifier dereferences the JWT sub, an HTTPS URI or a DID, fetches the controlled identifier document, and checks the signature with the verification method selected by the JWT kid header. [1][2]"
     },
     {
      "name": "OpenID Connect Self-Issued OpenID Provider v2",
      "spec_or_rfc": "OpenID SIOPv2 1.0",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "Self-issued OpenID presents a self-issued ID token whose keys the subject publishes, and this suite checks the JWT against the kid verification method in the controlled identifier document the sub dereferences to. [1][3]"
     },
     {
      "name": "W3C Decentralized Identifiers (DID 1.0) & Verifiable Credentials (VC 2.0)",
      "spec_or_rfc": "W3C DID 1.0",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "When sub is a DID URI, the verifier dereferences it, selects the verification method by the JWT kid, and rejects alg none. [1][4]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "oauth-cimd",
      "target_name": "OAuth Client ID Metadata Document",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "CIMD fetches client metadata from the client_id URL, while this suite fetches a controlled identifier document from the JWT sub and selects the key by kid. [1][5]"
     },
     {
      "target_id": "wimse",
      "target_name": "Workload Identity in Multi System Environments (WIMSE)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "A WIMSE WIT is a wit+jwt in the Workload-Identity-Token header from a workload issuer, while this JWT is self-signed and verified from the subject's own identifier document. [1][6]"
     },
     {
      "target_id": "spiffe",
      "target_name": "SPIFFE (Secure Production Identity Framework for Everyone)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "A SPIFFE JWT-SVID is issued inside a trust domain and read from the local Workload API, while this JWT's key is resolved from the subject's HTTPS or DID document. [1][7]"
     },
     {
      "target_id": "aip",
      "target_name": "Agent Identity Protocol (AIP)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "Singla's draft identifies the agent with did:aip derived from an Ed25519 key and an AIP-GRANT ceremony, while this suite checks a self-signed JWT, with sub, iss, and client_id set to the same URI, against the controlled identifier document selected by kid. [1][8]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Identify protocols](/category/identify/)** — Category index for `identify` standards."
    }
   ],
   "v05_compiled_md": "---\nid: lws10-authn-ssi-cid\ntitle: \"LWS 1.0 Authentication Suite: Self-signed Identity using Controlled Identifiers\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: identify\nform: document-format\nwire_archetype: identity_auth_crypto\nspec_url: https://www.w3.org/TR/lws10-authn-ssi-cid/\nlast_checked: 2026-11-12\n---\n\n# LWS 1.0 Authentication Suite: Self-signed Identity using Controlled Identifiers\n\n**Category:** [Identify](/category/identify/) (`identify`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-11-12\n\nThe specification defines an authentication suite for the Linked Web Storage (LWS) protocol, enabling clients that are able to sign their own identity tokens to integrate with LWS. The introduction covers applications that act on their own behalf, including autonomous bots and server-side scripts, where the agent is able to hold the private portion of a key pair and generate signed JSON Web Tokens (JWT). [1] Jesse Wright (University of Oxford) is the editor, and Aaron Coburn (Inrupt Inc.) is the author. The Linked Web Storage Working Group published the document as a Working Draft using the Recommendation track. [1] An example JWT that is also an LWS authentication credential is included in the specification. The header carries `kid` `c1f52577`, `alg` `ES256`, and `typ` `JWT`. The payload sets `sub`, `iss`, and `client_id` to `https://id.example/agent`, and sets `aud` to an array containing `https://as.example`. [1] This version is the W3C Working Draft published 2026-10-15 at `https://www.w3.org/TR/2026/WD-lws10-authn-ssi-cid-20261015/`, succeeding the 2026-09-21 Working Draft. [1] The status section says the Working Draft is an unofficial proposal whose publication does not imply endorsement by W3C and its Members. [1]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Identify](/category/identify/) (`identify`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | Jesse Wright (University of Oxford) and Aaron Coburn (Inrupt Inc.) [1] |\n| **Governed by** | World Wide Web Consortium (W3C) Linked Web Storage Working Group (`w3c/lws-protocol`) [1] |\n| **Track** | W3C Working Draft on the Recommendation track (Linked Web Storage Working Group) [1] |\n| **Status** | W3C Working Draft 15 October 2026; published by the Linked Web Storage Working Group as a Working Draft using the Recommendation track. The page also says: This is an unofficial proposal. [1] |\n| **Version** | W3C Working Draft (`2026-10-15`, `WD-lws10-authn-ssi-cid-20261015`) [1] |\n| **Wire format** | Signed JSON Web Token (`JWT`, RFC 7519 / RFC 7515) resolved against a JSON-LD W3C Controlled Identifier Document (`https://www.w3.org/ns/cid/v1`) [1] |\n| **Specification** | https://www.w3.org/TR/lws10-authn-ssi-cid/ [1] |\n| **Found at** | Subject URI dereferencing (`sub` claim via HTTPS URI or DID URI) to a W3C Controlled Identifier Document (`CID-1.0`) containing `authentication` verification methods matched by JWS `kid` [1] |\n| **Licence** | W3C Permissive Document License [1] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nSelf-issued identity is important where applications act on their own behalf. The agent is able to securely manage the private portion of a key pair and generate a signed JWT. [1] For a JWT to be an LWS authentication credential, the JWT MUST NOT use `none` as the signing algorithm. `sub`, `iss`, and `client_id` MUST all use the same URI value. Any audience restriction MUST use `aud`, and `aud` MUST include the target authorization server. The JWT MUST include `exp` and `iat`. [1] With no pre-existing trust relationship, the verifier MUST dereference `sub`, and the resource MUST be a controlled identifier document whose `id` equals the subject. The verifier MUST reject `alg` `none`, MUST select a verification method with `kid`, MUST validate the signature, and MUST ensure the current time is before `exp`. [1] Examples, diagrams, and notes are non-normative. Everything else in the specification is normative. A note says the suite is designed for HTTPS URIs and DID URIs. [1] A self-issued JSON Web Token used as an authentication credential MUST use the `urn:ietf:params:oauth:token-type:jwt` URI when interacting with an authorization server. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **W3C Controlled Identifiers 1.0** | `W3C CID 1.0` | Profiles classic standard | The verifier dereferences the JWT sub, an HTTPS URI or a DID, fetches the controlled identifier document, and checks the signature with the verification method selected by the JWT kid header. [1][2] |\n| **OpenID Connect Self-Issued OpenID Provider v2** | `OpenID SIOPv2 1.0` | Analogous to classic standard | Self-issued OpenID presents a self-issued ID token whose keys the subject publishes, and this suite checks the JWT against the kid verification method in the controlled identifier document the sub dereferences to. [1][3] |\n| **W3C Decentralized Identifiers (DID 1.0) & Verifiable Credentials (VC 2.0)** | `W3C DID 1.0` | Profiles classic standard | When sub is a DID URI, the verifier dereferences it, selects the verification method by the JWT kid, and rejects alg none. [1][4] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[OAuth Client ID Metadata Document](/protocols/oauth-cimd/)** | Peer alternative | CIMD fetches client metadata from the client_id URL, while this suite fetches a controlled identifier document from the JWT sub and selects the key by kid. [1][5] |\n| **[Workload Identity in Multi System Environments (WIMSE)](/protocols/wimse/)** | Peer alternative | A WIMSE WIT is a wit+jwt in the Workload-Identity-Token header from a workload issuer, while this JWT is self-signed and verified from the subject's own identifier document. [1][6] |\n| **[SPIFFE (Secure Production Identity Framework for Everyone)](/protocols/spiffe/)** | Peer alternative | A SPIFFE JWT-SVID is issued inside a trust domain and read from the local Workload API, while this JWT's key is resolved from the subject's HTTPS or DID document. [1][7] |\n| **[Agent Identity Protocol (AIP)](/protocols/aip/)** | Peer alternative | Singla's draft identifies the agent with did:aip derived from an Ed25519 key and an AIP-GRANT ceremony, while this suite checks a self-signed JWT, with sub, iss, and client_id set to the same URI, against the controlled identifier document selected by kid. [1][8] |\n\n---\n\n## See also\n\n- **Category:** [Identify protocols](/category/identify/)\n\n---\n\n## References\n\n1. Jesse Wright (University of Oxford) and Aaron Coburn (Inrupt Inc.); W3C Linked Web Storage Working Group, *LWS 1.0 Authentication Suite: Self-signed Identity using Controlled Identifiers* (W3C Working Draft, 15 October 2026) — <https://www.w3.org/TR/lws10-authn-ssi-cid/>\n2. W3C, *Controlled Identifiers v1.0* (2025-05-15) — <https://www.w3.org/TR/cid-1.0/>\n3. OpenID Foundation, *Self-Issued OpenID Provider v2 - draft* (fetched 2026-11-12) — <https://openid.net/specs/openid-connect-self-issued-v2-1_0.html>\n4. W3C, *Decentralized Identifiers (DIDs) v1.0* (2022-07-19) — <https://www.w3.org/TR/did-core/>\n5. Aaron Parecki and Emelia Smith (IETF Web Authorization Protocol Working Group), *draft-ietf-oauth-client-id-metadata-document — OAuth Client ID Metadata Document (IETF Datatracker)* (checked 2026-11-08) — <https://datatracker.ietf.org/doc/draft-ietf-oauth-client-id-metadata-document/>\n6. B. Campbell, J. Salowey, A. Schwenkschuster, Y. Sheffer, and Y. Rosomakho, *WIMSE Workload Credentials (draft-ietf-wimse-workload-creds-03)* (30 October 2026; expires 3 May 2027) — <https://www.ietf.org/archive/id/draft-ietf-wimse-workload-creds-03.txt>\n7. SPIFFE, *SPIFFE ID* (checked 2026-10-30) — <https://github.com/spiffe/spiffe/blob/main/standards/SPIFFE-ID.md>\n8. P. Singla (Independent), *Agent Identity Protocol (AIP): Decentralized Identity and Delegation for AI Agents (draft-singla-agent-identity-protocol-03)* (checked 2026-10-31) — <https://www.ietf.org/archive/id/draft-singla-agent-identity-protocol-03.txt>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "wimse-workload-identity-metadata",
   "name": "Workload Identity Metadata",
   "acronym": "",
   "aliases": [
    "draft-heigh-wimse-workload-identity-metadata"
   ],
   "collisions": [],
   "step": "identify",
   "parties": [
    "agent-agent",
    "agent-site"
   ],
   "form": "endpoint",
   "track": "ietf",
   "scope": "general",
   "question": "How can a workload's group, role, and entitlement attributes be conveyed to relying parties without encoding them in the workload identifier?",
   "analog": "",
   "origin": {
    "org": "Palo Alto Networks / Zscaler",
    "date": "2026-10-16"
   },
   "governance": "IETF WIMSE working group mailing list; individual Internet-Draft",
   "native_status": "Internet-Draft, Intended Status: Standards Track; expires 19 April 2027",
   "phase": "draft",
   "implementation": "none-found",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "version": {
    "label": "draft-heigh-wimse-workload-identity-metadata-00",
    "date": "2026-10-16"
   },
   "spec_url": "https://datatracker.ietf.org/doc/html/draft-heigh-wimse-workload-identity-metadata-00",
   "discovery": {
    "mechanism": "Optional JWT claim or X.509 certificate extension in the workload credential that identifies the workload metadata endpoint",
    "path": null
   },
   "probe": {
    "method": "NONE",
    "path": "",
    "parse": "",
    "on_absent": "Support cannot be observed externally; the endpoint location is carried inside workload credentials, so treat as unobserved."
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.ietf.org/archive/id/draft-heigh-wimse-workload-identity-metadata-00.txt",
     "claim": "S. Heigh and J. Salowey (Palo Alto Networks); Y. Rosomakho (Zscaler), *Workload Identity Metadata (draft-heigh-wimse-workload-identity-metadata-00)*, 16 October 2026",
     "date": null,
     "quote": "This document specifies metadata attributes associated with a workload's identity that are used for auditing, authorization, accounting, and other purposes. / S. Heigh Internet-Draft J. Salowey Intended status: Standards Track Palo Alto Networks Expires: 19 April 2027 Y. Rosomakho Zscaler 16 October 2026 Workload Identity Metadata draft-heigh-wimse-workload-identity-metadata-00 / Discussion of this document takes place on the Workload Identity in Multi System Environments Working Group mailing list / A client MUST select a metadata endpoint for the requested subject in the following order: 1. An endpoint URI explicitly configured out of band for that subject or its namespace. 2. The endpoint URI carried in a validated Workload Identity Credential for that subject, using metadata_uri (Section 6.1.1) or the SubjectAltName URI Metadata extension (Section 6.2.1). 3. The default URI described below, when the conditions for its use are satisfied. / A client retrieves metadata using HTTP GET / The request MUST contain exactly one query parameter named sub, whose value is the complete Workload Identifier of the subject. The client MUST percent-encode the value as a URI query parameter using [URI]. Only unreserved characters can remain unencoded in the value; percent signs already present in the identifier are encoded as %25. If the endpoint has fixed query parameters, the client appends sub to them using &; otherwise it starts the query with ?sub=. The service decodes the parameter value once to recover the identifier and MUST NOT interpret its path as a set of claims. The client MUST NOT send request content with this GET request. / The endpoint MUST authenticate the caller using WIMSE workload authentication before returning metadata. / A successful response MUST use status code 200 and media type application/json. / The response MUST contain a string-valued sub exactly equal to the complete identifier recovered from the request, using case-sensitive string comparison. The client MUST verify this equality and MUST NOT use a response with a missing, invalid, or mismatched sub. / This document requests registration of the following entry in the \"JSON Web Token Claims\" registry established by [JWT]: Claim Name: metadata_uri Claim Description: Workload metadata API endpoint URI for the subject identified by the token. Change Controller: IETF / URI suffix: workload-metadata Change controller: IETF Specification document(s): Section 7 of this document Status: permanent / its ASN.1 definition. Authors' Addresses Shlomo Heigh Palo Alto Networks Email: [email redacted] Joseph Salowey / Intended status: Standards Track / found at https://datatracker.ietf.org/doc/draft- heigh-wimse-workload-identity-metadata/. Heigh, et al. Expires 19 April 2027 [Page 1] Internet-Draft / draft-ietf-wimse-Heigh, et al. Expires 19 April 2027 Page 31 Internet-Draft Workload Identity Metadata October / Copyright (c) 2026 IETF Trust and the persons identified as the document authors. / Deployments that need to authorize on a workload's group, role, or owner commonly encode those attributes in the identifier / Relying parties then parse the path and authorize on its components. This appears to work, and it is the path of least resistance because the identifier is the one field guaranteed to reach the relying party. It is nonetheless unsound, for reasons developed in Section 3.1: the identifier format does not promise parseable semantics, attributes and identifiers have different lifetimes, and the identifier is the most widely exposed field in the system. / An identifier denotes the workload or workload instance selected by the deployment's identity model; attributes are carried as Workload Metadata rather than in its structure. / Both delivery methods use the same metadata model and bind attributes to the complete Workload Identifier. The endpoint also supports workloads authenticated using X.509 credentials, for which this document defines no in-band metadata encoding. / The document applies to workloads generally, including services, batch and continuous integration jobs, serverless functions, and AI agents. Agentic use cases are discussed separately. / Out of scope: * the identifier format itself, which is [WIMSE-IDENTIFIER]; * defining new workload authentication mechanisms or selecting a mandatory-to-implement authentication binding; * carrying metadata attributes themselves in X.509 credentials; * independently signed metadata responses and their forwarding to other parties; * how a relying party reaches an authorization decision from metadata;",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://datatracker.ietf.org/doc/html/draft-heigh-wimse-workload-identity-metadata-00",
     "claim": "S. Heigh and J. Salowey (Palo Alto Networks); Y. Rosomakho (Zscaler), *Workload Identity Metadata (draft-heigh-wimse-workload-identity-metadata-00 HTML)*, 16 October 2026",
     "date": null,
     "quote": "Active Internet-Draft (individual) This document is an Internet-Draft (I-D). Anyone may submit an I-D to the IETF. This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. / Heigh Palo Alto Networks J. Salowey Palo Alto Networks Y. Rosomakho Zscaler # Workload / Workload Identity in Multi System Environments / Rosomakho, \"WIMSE Workload Credentials\", Work in Progress, Internet-Draft, draft-ietf-wimse-workload-creds-02, 2 July 2026, < https://datatracker.ietf.org/doc/html/draft-ietf-wimse-workload-creds-02 / \"JSON Web Token Claims\" registry established by [JWT]: Claim Name: metadata_uri Claim Description: Workload / response might be:¶ ``` HTTP/1.1 200 OK Content-Type: application/json Cache-Control: no-store { \"sub\": \"wimse://example.com/workload/a7f3c1a24b904d61\",",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://datatracker.ietf.org/doc/draft-heigh-wimse-workload-identity-metadata/",
     "claim": "S. Heigh and J. Salowey (Palo Alto Networks); Y. Rosomakho (Zscaler), *draft-heigh-wimse-workload-identity-metadata — Workload Identity Metadata (IETF Datatracker)*, checked 2026-10-31",
     "date": null,
     "quote": "the Workload Identity in Multi System Environments Working Group mailing list (mailto:wimse@ietf.org), which is / wimse-workload-identity-metadata.html. Status information for this document may be found at https://datatracker.ietf.org/doc/draft- heigh-wimse-workload-identity-metadata/. Heigh, et / April 2027 [Page 20] Internet-Draft Workload Identity Metadata October 2026 GET /workload-info?sub=wimse%3A%2F%2Fexample.com%2Fworkload%2Fa7f3c1a24b904d61 HTTP/1.1 Host:",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://www.rfc-editor.org/rfc/rfc7519.html",
     "claim": "M. Jones, J. Bradley, and N. Sakimura, *RFC 7519: JSON Web Token (JWT)*, May 2015",
     "date": null,
     "quote": "JSON Web Token (JWT) is a compact, URL-safe means of representing",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://www.rfc-editor.org/rfc/rfc5280.html",
     "claim": "D. Cooper, S. Santesson, S. Farrell, S. Boeyen, R. Housley, and W. Polk, *RFC 5280: Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile*, May 2008",
     "date": null,
     "quote": "This memo profiles the X.509 v3 certificate and X.509 v2 certificate",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-wimse-http-signature/history/",
     "claim": "IETF WIMSE Working Group (IETF Datatracker), *draft-ietf-wimse-http-signature document history*, revision 08 events through 2026-10-28",
     "date": null,
     "quote": "2026-10-28 | 08 | Justin Richer | IETF WG state changed to Submitted to IESG for Publication from WG Document",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://github.com/spiffe/spiffe/blob/main/standards/SPIFFE-ID.md",
     "claim": "SPIFFE, *SPIFFE ID*, checked 2026-10-30",
     "date": null,
     "quote": "Stability: Stable",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://datatracker.ietf.org/doc/html/rfc9728",
     "claim": "IETF Datatracker, *RFC 9728: OAuth 2.0 Protected Resource Metadata*, RFC - Proposed Standard (April 2025)",
     "date": null,
     "quote": "RFC - Proposed Standard April 2025",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://www.rfc-editor.org/rfc/rfc8414.html",
     "claim": "M. Jones (Microsoft), N. Sakimura (NRI), and J. Bradley (Yubico), *RFC 8414: OAuth 2.0 Authorization Server Metadata*, June 2018",
     "date": null,
     "quote": "OAuth 2.0 Authorization Server Metadata … /.well-known/oauth-authorization-server",
     "ref": 9
    }
   ],
   "summary_md": "**Workload Identity Metadata** specifies metadata attributes associated with a workload's identity that are used for auditing, authorization, accounting, and other purposes. `draft-heigh-wimse-workload-identity-metadata-00` is by S. Heigh and J. Salowey of Palo Alto Networks and Y. Rosomakho of Zscaler, dated 16 October 2026. Its intended status is Standards Track, and it expires on 19 April 2027. Discussion of this document takes place on the Workload Identity in Multi System Environments Working Group mailing list. A client MUST select a metadata endpoint for the requested subject in the following order: an endpoint URI explicitly configured out of band for that subject or its namespace; the endpoint URI carried in a validated Workload Identity Credential, using `metadata_uri` or the SubjectAltName URI Metadata extension; and the default URI when the conditions for its use are satisfied. A client retrieves metadata using HTTP GET. The request MUST contain exactly one query parameter named `sub`, whose value is the complete Workload Identifier of the subject. The endpoint MUST authenticate the caller using WIMSE workload authentication before returning metadata. A successful response MUST use status code 200 and media type `application/json`. The response MUST contain a string-valued `sub` exactly equal to the complete identifier recovered from the request. The client MUST verify this equality. The document type is Active Internet-Draft (individual). This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. This document requests registration of claim name `metadata_uri`, with change controller IETF. It requests well-known URI suffix `workload-metadata` with status permanent.",
   "part_of": "wimse",
   "group": null,
   "use_cases": [
    "prove-agent-identity",
    "audit-agent-actions",
    "delegate-user-authority"
   ],
   "audience": [
    "platform",
    "agent-builder",
    "standards-body"
   ],
   "pairs_with": [
    "wimse",
    "spiffe",
    "oauth-metadata-for-agents"
   ],
   "prerequisites": [
    "wimse"
   ],
   "dispute": null,
   "last_verified": "2026-11-12",
   "history": [
    {
     "date": "2026-10-19",
     "note": "initial candidate record from primary source (https://datatracker.ietf.org/doc/html/draft-heigh-wimse-workload-identity-metadata-00)"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-heigh-wimse-workload-identity-metadata"
    }
   ],
   "ietf_tracker": {
    "doc": "draft-heigh-wimse-workload-identity-metadata",
    "rev": "00",
    "state": "active",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-10-16",
    "expires_utc": "2027-04-19",
    "as_of": "2026-10-31",
    "source": "https://datatracker.ietf.org/doc/draft-heigh-wimse-workload-identity-metadata/",
    "source_label": "per IETF Datatracker"
   },
   "hatnote_md": "",
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": null,
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Workload Identity Metadata** specifies metadata attributes associated with a workload's identity that are used for auditing, authorization, accounting, and other purposes. [1] `draft-heigh-wimse-workload-identity-metadata-00` is by S. Heigh and J. Salowey of Palo Alto Networks and Y. Rosomakho of Zscaler, dated 16 October 2026. Its intended status is Standards Track, and it expires on 19 April 2027. [1] Discussion of this document takes place on the Workload Identity in Multi System Environments Working Group mailing list. [1] A client MUST select a metadata endpoint for the requested subject in the following order: an endpoint URI explicitly configured out of band for that subject or its namespace; the endpoint URI carried in a validated Workload Identity Credential, using `metadata_uri` or the SubjectAltName URI Metadata extension; and the default URI when the conditions for its use are satisfied. [1] A client retrieves metadata using HTTP GET. The request MUST contain exactly one query parameter named `sub`, whose value is the complete Workload Identifier of the subject. [1] The endpoint MUST authenticate the caller using WIMSE workload authentication before returning metadata. [1] A successful response MUST use status code 200 and media type `application/json`. [1] The response MUST contain a string-valued `sub` exactly equal to the complete identifier recovered from the request. The client MUST verify this equality. [1] The document type is Active Internet-Draft (individual). This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. [2] This document requests registration of claim name `metadata_uri`, with change controller IETF. It requests well-known URI suffix `workload-metadata` with status permanent. [1]",
   "v05_identity_sentence_md": "**Workload Identity Metadata** specifies metadata attributes associated with a workload's identity that are used for auditing, authorization, accounting, and other purposes. [1] `draft-heigh-wimse-workload-identity-metadata-00` is by S. Heigh and J. Salowey of Palo Alto Networks and Y. Rosomakho of Zscaler, dated 16 October 2026. Its intended status is Standards Track, and it expires on 19 April 2027. [1] Discussion of this document takes place on the Workload Identity in Multi System Environments Working Group mailing list. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Identify](/category/identify/) (`identify`)"
    },
    {
     "label": "Form",
     "value_md": "Endpoint (`endpoint`)"
    },
    {
     "label": "Originated by",
     "value_md": "S. Heigh & J. Salowey (Palo Alto Networks) and Y. Rosomakho (Zscaler) [1][2]"
    },
    {
     "label": "Governed by",
     "value_md": "Individual IETF Internet-Draft submitted to the Workload Identity in Multi System Environments (WIMSE) Working Group (not WG-adopted) [2][3]"
    },
    {
     "label": "Track",
     "value_md": "IETF Internet-Draft (Standards Track) [1]"
    },
    {
     "label": "Status",
     "value_md": "Internet-Draft, Intended Status: Standards Track; expires 19 April 2027 [1][2][3]"
    },
    {
     "label": "Version",
     "value_md": "`draft-heigh-wimse-workload-identity-metadata-00` (Published 16 October 2026; expires 19 April 2027) [1][3]"
    },
    {
     "label": "Wire format",
     "value_md": "JSON Web Token (JWT) claims (`groups`, `roles`, `entitlements`, `metadata_uri`), PKIX X.509v3 ASN.1 certificate extension (`id-pe-sanuri-metadata`), and JSON over HTTPS (`application/json`) [2]"
    },
    {
     "label": "Specification",
     "value_md": "https://datatracker.ietf.org/doc/html/draft-heigh-wimse-workload-identity-metadata-00 [2]"
    },
    {
     "label": "Found at",
     "value_md": "`/.well-known/workload-metadata?sub=<uri>`, JWT claim `metadata_uri`, and X.509 OID `id-pe-sanuri-metadata` (all three requested for IANA registration in Section 13; not yet registered), plus `Accept: application/json` and `Cache-Control: no-store` [2]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust Legal Provisions (BCP 78) [1]"
    },
    {
     "label": "IETF state",
     "value_md": "`draft-heigh-wimse-workload-identity-metadata-00` · **Active Internet-Draft** (expires 2027-04-19) · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-heigh-wimse-workload-identity-metadata/))"
    }
   ],
   "v05_problem_md": "Deployments that need to authorize on a workload's group, role, or owner commonly encode those attributes in the identifier. Relying parties then parse the path and authorize on its components. It is nonetheless unsound: the identifier format does not promise parseable semantics, attributes and identifiers have different lifetimes, and the identifier is the most widely exposed field in the system. [1] An identifier denotes the workload or workload instance selected by the deployment's identity model; attributes are carried as Workload Metadata rather than in its structure. [1] Both delivery methods use the same metadata model and bind attributes to the complete Workload Identifier. The endpoint also supports workloads authenticated using X.509 credentials, for which this document defines no in-band metadata encoding. [1] The document applies to workloads generally, including services, batch and continuous integration jobs, serverless functions, and AI agents. Agentic use cases are discussed separately. [1] Out of scope are the identifier format itself, defining new workload authentication mechanisms or selecting a mandatory-to-implement authentication binding, carrying metadata attributes in X.509 credentials, independently signed metadata responses, and how a relying party reaches an authorization decision from metadata. [1]",
   "v05_mechanism_delta_md": "An identifier denotes the workload or workload instance selected by the deployment's identity model; attributes are carried as Workload Metadata rather than in its structure. [1] Both delivery methods use the same metadata model and bind attributes to the complete Workload Identifier. The endpoint also supports workloads authenticated using X.509 credentials, for which this document defines no in-band metadata encoding. [1]",
   "v05_scope_boundary_md": "The document applies to workloads generally, including services, batch and continuous integration jobs, serverless functions, and AI agents. Agentic use cases are discussed separately. [1] Out of scope are the identifier format itself, defining new workload authentication mechanisms or selecting a mandatory-to-implement authentication binding, carrying metadata attributes in X.509 credentials, independently signed metadata responses, and how a relying party reaches an authorization decision from metadata. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "JSON Web Token (JWT, RFC 7519)",
      "spec_or_rfc": "RFC 7519",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "An optional JWT claim on the workload credential, alongside profiled group, role, and entitlement claims, identifies the workload metadata endpoint. [2][4]"
     },
     {
      "name": "X.509 PKI Certificates & TLS mTLS (RFC 5280 / RFC 8705)",
      "spec_or_rfc": "RFC 5280 / RFC 8705",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "An X.509 workload certificate may carry an extension that identifies the same metadata endpoint the optional JWT claim identifies. [2][5]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "wimse",
      "target_name": "Workload Identity in Multi System Environments (WIMSE)",
      "relation_type": "part_of",
      "relation_label": "Part of",
      "delta_md": "The optional JWT claim or X.509 extension sits on a WIMSE workload credential and points at the metadata endpoint for that workload. [2][6]"
     },
     {
      "target_id": "spiffe",
      "target_name": "SPIFFE (Secure Production Identity Framework for Everyone)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "A SPIFFE X.509-SVID or JWT-SVID identifies the workload, and this draft adds an optional pointer to a metadata endpoint the SVID does not itself define. [2][7]"
     },
     {
      "target_id": "oauth-metadata-for-agents",
      "target_name": "OAuth Protected Resource and Authorization Server Metadata (as used for agent authorization)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "RFC 9728 and RFC 8414 describe an OAuth protected resource and its authorization server, while this draft points a workload credential at a separate metadata endpoint. [2][8][9]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Identify protocols](/category/identify/)** — Category index for `identify` standards."
    }
   ],
   "v05_compiled_md": "---\nid: wimse-workload-identity-metadata\ntitle: \"Workload Identity Metadata\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: identify\nform: endpoint\nwire_archetype: identity_auth_crypto\nspec_url: https://datatracker.ietf.org/doc/html/draft-heigh-wimse-workload-identity-metadata-00\nlast_checked: 2026-11-12\n---\n\n# Workload Identity Metadata\n\n**Category:** [Identify](/category/identify/) (`identify`) · **Form:** Endpoint (`endpoint`) · **Last checked:** 2026-11-12\n\n**Workload Identity Metadata** specifies metadata attributes associated with a workload's identity that are used for auditing, authorization, accounting, and other purposes. [1] `draft-heigh-wimse-workload-identity-metadata-00` is by S. Heigh and J. Salowey of Palo Alto Networks and Y. Rosomakho of Zscaler, dated 16 October 2026. Its intended status is Standards Track, and it expires on 19 April 2027. [1] Discussion of this document takes place on the Workload Identity in Multi System Environments Working Group mailing list. [1] A client MUST select a metadata endpoint for the requested subject in the following order: an endpoint URI explicitly configured out of band for that subject or its namespace; the endpoint URI carried in a validated Workload Identity Credential, using `metadata_uri` or the SubjectAltName URI Metadata extension; and the default URI when the conditions for its use are satisfied. [1] A client retrieves metadata using HTTP GET. The request MUST contain exactly one query parameter named `sub`, whose value is the complete Workload Identifier of the subject. [1] The endpoint MUST authenticate the caller using WIMSE workload authentication before returning metadata. [1] A successful response MUST use status code 200 and media type `application/json`. [1] The response MUST contain a string-valued `sub` exactly equal to the complete identifier recovered from the request. The client MUST verify this equality. [1] The document type is Active Internet-Draft (individual). This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. [2] This document requests registration of claim name `metadata_uri`, with change controller IETF. It requests well-known URI suffix `workload-metadata` with status permanent. [1]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Identify](/category/identify/) (`identify`) |\n| **Form** | Endpoint (`endpoint`) |\n| **Originated by** | S. Heigh & J. Salowey (Palo Alto Networks) and Y. Rosomakho (Zscaler) [1][2] |\n| **Governed by** | Individual IETF Internet-Draft submitted to the Workload Identity in Multi System Environments (WIMSE) Working Group (not WG-adopted) [2][3] |\n| **Track** | IETF Internet-Draft (Standards Track) [1] |\n| **Status** | Internet-Draft, Intended Status: Standards Track; expires 19 April 2027 [1][2][3] |\n| **Version** | `draft-heigh-wimse-workload-identity-metadata-00` (Published 16 October 2026; expires 19 April 2027) [1][3] |\n| **Wire format** | JSON Web Token (JWT) claims (`groups`, `roles`, `entitlements`, `metadata_uri`), PKIX X.509v3 ASN.1 certificate extension (`id-pe-sanuri-metadata`), and JSON over HTTPS (`application/json`) [2] |\n| **Specification** | https://datatracker.ietf.org/doc/html/draft-heigh-wimse-workload-identity-metadata-00 [2] |\n| **Found at** | `/.well-known/workload-metadata?sub=<uri>`, JWT claim `metadata_uri`, and X.509 OID `id-pe-sanuri-metadata` (all three requested for IANA registration in Section 13; not yet registered), plus `Accept: application/json` and `Cache-Control: no-store` [2] |\n| **Licence** | IETF Trust Legal Provisions (BCP 78) [1] |\n| **IETF state** | `draft-heigh-wimse-workload-identity-metadata-00` · **Active Internet-Draft** (expires 2027-04-19) · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-heigh-wimse-workload-identity-metadata/)) |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nDeployments that need to authorize on a workload's group, role, or owner commonly encode those attributes in the identifier. Relying parties then parse the path and authorize on its components. It is nonetheless unsound: the identifier format does not promise parseable semantics, attributes and identifiers have different lifetimes, and the identifier is the most widely exposed field in the system. [1] An identifier denotes the workload or workload instance selected by the deployment's identity model; attributes are carried as Workload Metadata rather than in its structure. [1] Both delivery methods use the same metadata model and bind attributes to the complete Workload Identifier. The endpoint also supports workloads authenticated using X.509 credentials, for which this document defines no in-band metadata encoding. [1] The document applies to workloads generally, including services, batch and continuous integration jobs, serverless functions, and AI agents. Agentic use cases are discussed separately. [1] Out of scope are the identifier format itself, defining new workload authentication mechanisms or selecting a mandatory-to-implement authentication binding, carrying metadata attributes in X.509 credentials, independently signed metadata responses, and how a relying party reaches an authorization decision from metadata. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **JSON Web Token (JWT, RFC 7519)** | `RFC 7519` | Profiles classic standard | An optional JWT claim on the workload credential, alongside profiled group, role, and entitlement claims, identifies the workload metadata endpoint. [2][4] |\n| **X.509 PKI Certificates & TLS mTLS (RFC 5280 / RFC 8705)** | `RFC 5280 / RFC 8705` | Profiles classic standard | An X.509 workload certificate may carry an extension that identifies the same metadata endpoint the optional JWT claim identifies. [2][5] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Workload Identity in Multi System Environments (WIMSE)](/protocols/wimse/)** | Part of | The optional JWT claim or X.509 extension sits on a WIMSE workload credential and points at the metadata endpoint for that workload. [2][6] |\n| **[SPIFFE (Secure Production Identity Framework for Everyone)](/protocols/spiffe/)** | Complements | A SPIFFE X.509-SVID or JWT-SVID identifies the workload, and this draft adds an optional pointer to a metadata endpoint the SVID does not itself define. [2][7] |\n| **[OAuth Protected Resource and Authorization Server Metadata (as used for agent authorization)](/protocols/oauth-metadata-for-agents/)** | Peer alternative | RFC 9728 and RFC 8414 describe an OAuth protected resource and its authorization server, while this draft points a workload credential at a separate metadata endpoint. [2][8][9] |\n\n---\n\n## See also\n\n- **Category:** [Identify protocols](/category/identify/)\n\n---\n\n## References\n\n1. S. Heigh and J. Salowey (Palo Alto Networks); Y. Rosomakho (Zscaler), *Workload Identity Metadata (draft-heigh-wimse-workload-identity-metadata-00)* (16 October 2026) — <https://www.ietf.org/archive/id/draft-heigh-wimse-workload-identity-metadata-00.txt>\n2. S. Heigh and J. Salowey (Palo Alto Networks); Y. Rosomakho (Zscaler), *Workload Identity Metadata (draft-heigh-wimse-workload-identity-metadata-00 HTML)* (16 October 2026) — <https://datatracker.ietf.org/doc/html/draft-heigh-wimse-workload-identity-metadata-00>\n3. S. Heigh and J. Salowey (Palo Alto Networks); Y. Rosomakho (Zscaler), *draft-heigh-wimse-workload-identity-metadata — Workload Identity Metadata (IETF Datatracker)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/draft-heigh-wimse-workload-identity-metadata/>\n4. M. Jones, J. Bradley, and N. Sakimura, *RFC 7519: JSON Web Token (JWT)* (May 2015) — <https://www.rfc-editor.org/rfc/rfc7519.html>\n5. D. Cooper, S. Santesson, S. Farrell, S. Boeyen, R. Housley, and W. Polk, *RFC 5280: Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile* (May 2008) — <https://www.rfc-editor.org/rfc/rfc5280.html>\n6. IETF WIMSE Working Group (IETF Datatracker), *draft-ietf-wimse-http-signature document history* (revision 08 events through 2026-10-28) — <https://datatracker.ietf.org/doc/draft-ietf-wimse-http-signature/history/>\n7. SPIFFE, *SPIFFE ID* (checked 2026-10-30) — <https://github.com/spiffe/spiffe/blob/main/standards/SPIFFE-ID.md>\n8. IETF Datatracker, *RFC 9728: OAuth 2.0 Protected Resource Metadata* (RFC - Proposed Standard (April 2025)) — <https://datatracker.ietf.org/doc/html/rfc9728>\n9. M. Jones (Microsoft), N. Sakimura (NRI), and J. Bradley (Yubico), *RFC 8414: OAuth 2.0 Authorization Server Metadata* (June 2018) — <https://www.rfc-editor.org/rfc/rfc8414.html>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "haace",
   "name": "High-Assurance Agent Control Envelope",
   "acronym": "HAACE",
   "aliases": [
    "draft-watts-high-assurance-agent-control-envelope",
    "draft-watts-high-assurance-agent-control-envelope-01"
   ],
   "collisions": [],
   "step": "permit",
   "parties": [
    "agent-site"
   ],
   "form": "document-format",
   "track": "ietf",
   "scope": "general",
   "question": "How can a relying party gate an exact agent action at execution time so that missing, stale, or indeterminate identity, authorization, evidence, revocation, or human-approval prerequisites fail closed?",
   "analog": "A pre-flight checklist with a separate sign-off and a logbook entry: authorization is checked against the exact action at execution time and recorded in non-bearer receipts.",
   "origin": {
    "org": "GoodShyt Group Inc.",
    "date": "2026-10-14"
   },
   "governance": "Internet-Draft by D. O. Watts, GoodShyt Group Inc.; Intended status: Informational",
   "native_status": "Internet-Draft, Intended status: Informational; expires 3 May 2027",
   "phase": "draft",
   "implementation": "none-found",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "version": {
    "label": "draft-watts-high-assurance-agent-control-envelope-01",
    "date": "2026-10-30"
   },
   "spec_url": "https://www.ietf.org/archive/id/draft-watts-high-assurance-agent-control-envelope-01.txt",
   "discovery": {
    "mechanism": "A relying party declares an Assurance Requirement Profile (ARP); the draft has no IANA actions",
    "path": null
   },
   "probe": {
    "method": "NONE",
    "path": "",
    "parse": "",
    "on_absent": "Support cannot be observed externally; HAACE is an internal action-time enforcement profile with no public endpoint."
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.ietf.org/archive/id/draft-watts-high-assurance-agent-control-envelope-01.txt",
     "claim": "D. O. Watts (GoodShyt Group Inc.), *High-Assurance Agent Control Envelope (draft-watts-high-assurance-agent-control-envelope-01)*, checked 2026-11-07",
     "date": null,
     "quote": "Network Working Group D. O. Watts Internet-Draft GoodShyt Group Inc. Intended status: Informational 30 October 2026 Expires: 3 May 2027 High-Assurance Agent Control Envelope draft-watts-high-assurance-agent-control-envelope-01 / This document defines the High-Assurance Agent Control Envelope (HAACE), a protocol-neutral profile / This document defines the High-Assurance Agent Control Envelope (HAACE), a protocol-neutral profile that binds an exact agent action to identity status, authorization state, policy, assurance stage, evidence state, authority epoch, revocation state, oversight requirements, and an action-time decision. / A relying party declares an Assurance Requirement Profile (ARP). An agent or intermediary presents an Action Request Record (ARR) plus references to the required evidence. An independent Action Control Point (ACP) evaluates the request. / The ACP emits a non-bearer Action Decision Receipt (ADR). If an effect is attempted, the enforcement point emits a separate Action Execution Receipt (AER). No receipt defined by this document is itself a bearer credential. / 30 October 2026 Expires: 3 May 2027 High-Assurance Agent Control Envelope draft-watts-high-assurance-agent-control-envelope-01 / Changes since -00 ... Editorial and tooling-conformance changes only; no technical content was changed. / Deonté O'dell Watts GoodShyt Group Inc. / Network Working Group D. O. Watts Internet-Draft GoodShyt Group Inc. / Network Working Group D. O. Watts Internet-Draft GoodShyt Group Inc. Intended status: Informational / Intended status: Informational / Intended status: Informational 30 October 2026 Expires: 3 May 2027 / This Internet-Draft will expire on 3 May 2027. / draft-watts-high-assurance-agent-control-envelope-01 / 30 October 2026 Expires: 3 May 2027 / JSON Canonicalization Scheme (JCS) [RFC8785] and an approved digest algorithm. Deployments requiring specific cryptographic algorithms SHOULD select them through an external cryptographic policy rather than redefining algorithm suites in this document. / High-Assurance Agent Control Envelope draft-watts-high-assurance-agent-control-envelope-01 / A relying party declares an Assurance Requirement Profile (ARP). / Return ALLOW only if every required predicate is satisfied. Return DENY for a known failing predicate. Return INDETERMINATE when a required predicate cannot be established. ... This document has no IANA actions. / Copyright (c) 2026 IETF Trust and the persons identified as the document authors. / Agentic systems can authenticate successfully, hold a valid authorization object, and still be unsafe to execute because required evidence is missing, the software has not reached a required assurance stage, the authority epoch is stale, a prior revocation is unresolved, or a human-approval requirement is unsatisfied. / Missing, stale, unverifiable, contradictory, or indeterminate required premises MUST NOT produce ALLOW. / HAACE requires fail-closed treatment of missing or indeterminate prerequisites, separates authorization from execution, and produces non-bearer decision and execution receipts. / The ACP evaluates an ARR using current relying-party state. / Return ALLOW only if every required predicate is satisfied. Return DENY for a known failing predicate. Return INDETERMINATE when a required predicate cannot be established. / The profile composes with OAuth, workload identity, attestation, transparency, and agent-authorization mechanisms rather than replacing them. / It is not a U.S. Government standard and does not imply endorsement by any government agency.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://www.rfc-editor.org/rfc/rfc9334.html",
     "claim": "IETF, *RFC 9334: Remote ATtestation procedureS (RATS) Architecture*, IETF RFC",
     "date": null,
     "quote": "RFC 9334: Remote ATtestation procedureS (RATS) Architecture /* NOTE: Changes at the bottom of this file overrides some earlier settings.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://www.ietf.org/archive/id/draft-watts-agentic-authority-graph-validation-01.txt",
     "claim": "D. O. Watts (GoodShyt Group Inc.), *Agentic Authority Graph Validation: A Non-Vacuous Interchange Profile for Revocation-Cut Analysis (draft-watts-agentic-authority-graph-validation-01)*, checked 2026-11-07",
     "date": null,
     "quote": "Intended status: Experimental 30 October 2026 Expires: 3 May 2027",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://datatracker.ietf.org/doc/html/draft-kroehl-agentic-trust-aae-02",
     "claim": "Lars Kersten Kroehl (CryptoKRI GmbH), *Agent Authorization Envelope (AAE): A Machine-Evaluable Authorization Structure for Autonomous AI Agents (draft-kroehl-agentic-trust-aae-02 HTML)*, checked 2026-10-31",
     "date": null,
     "quote": "|| BASE64URL(JWS Signature) Kroehl Expires 10 March 2027 [Page 5] Internet-Draft AAE September 2026",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://datatracker.ietf.org/doc/html/draft-lee-wimse-local-tool-call-proof-01",
     "claim": "Jaebin Lee, Chang-hun Yoo, Mingyu Kim, and Wooyong Seo, *Per-Call Proof for Local Tool Invocation by AI Agents (draft-lee-wimse-local-tool-call-proof-01 HTML)*, checked 2026-10-31",
     "date": null,
     "quote": "Status information for this document may be found at https://datatracker.ietf.org/doc/draft-lee-wimse-local-tool-call-proof/ . ¶",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://www.ietf.org/archive/id/draft-gilda-audit-agent-audit-record-03.txt",
     "claim": "S. Gilda, *An Audit Record Format for AI Agent Authorization Decisions (draft-gilda-audit-agent-audit-record-03)*, 29 October 2026",
     "date": null,
     "quote": "S. Gilda Internet-Draft 29 October 2026 Intended status: Standards Track Expires: 2 May 2027",
     "ref": 6
    }
   ],
   "summary_md": "**High-Assurance Agent Control Envelope** (`HAACE`), `draft-watts-high-assurance-agent-control-envelope-01`, is an Informational Internet-Draft dated 30 October 2026 by D. O. Watts of GoodShyt Group Inc. It defines a protocol-neutral profile that binds an exact agent action to identity status, authorization state, policy, assurance stage, evidence state, authority epoch, revocation state, oversight requirements, and an action-time decision. A relying party declares an Assurance Requirement Profile (`ARP`). An agent or intermediary presents an Action Request Record (`ARR`) plus references to the required evidence. An independent Action Control Point (`ACP`) evaluates the request. The `ACP` emits a non-bearer Action Decision Receipt (`ADR`). If an effect is attempted, the enforcement point emits a separate Action Execution Receipt (`AER`). No receipt defined by the draft is itself a bearer credential. `draft-watts-high-assurance-agent-control-envelope-01` is dated 30 October 2026 and expires 3 May 2027. Appendix A records changes since `-00` as editorial and tooling-conformance changes only; no technical content was changed.",
   "part_of": null,
   "group": null,
   "use_cases": [
    "audit-agent-actions",
    "delegate-user-authority",
    "let-agents-act-on-my-site"
   ],
   "audience": [
    "platform",
    "standards-body",
    "agent-builder"
   ],
   "pairs_with": [
    "aagv",
    "agent-authorization-envelope",
    "local-tool-call-proof",
    "wimse-agent-audit-record"
   ],
   "prerequisites": [],
   "dispute": null,
   "last_verified": "2026-11-07",
   "history": [
    {
     "date": "2026-10-19",
     "note": "initial candidate record from primary source (https://datatracker.ietf.org/doc/html/draft-watts-high-assurance-agent-control-envelope-00)"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-watts-high-assurance-agent-control-envelope"
    }
   ],
   "ietf_tracker": {
    "doc": "draft-watts-high-assurance-agent-control-envelope",
    "rev": "01",
    "state": "active",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-10-30",
    "expires_utc": "2027-05-03",
    "as_of": "2026-11-07",
    "source": "https://datatracker.ietf.org/doc/draft-watts-high-assurance-agent-control-envelope/",
    "source_label": "per IETF Datatracker"
   },
   "hatnote_md": "",
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-07",
   "v05_hatnote_html_md": null,
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**High-Assurance Agent Control Envelope** (`HAACE`), `draft-watts-high-assurance-agent-control-envelope-01`, is an Informational Internet-Draft dated 30 October 2026 by D. O. Watts of GoodShyt Group Inc. [1] It defines a protocol-neutral profile that binds an exact agent action to identity status, authorization state, policy, assurance stage, evidence state, authority epoch, revocation state, oversight requirements, and an action-time decision. [1] A relying party declares an Assurance Requirement Profile (`ARP`). An agent or intermediary presents an Action Request Record (`ARR`) plus references to the required evidence. An independent Action Control Point (`ACP`) evaluates the request. [1] The `ACP` emits a non-bearer Action Decision Receipt (`ADR`). If an effect is attempted, the enforcement point emits a separate Action Execution Receipt (`AER`). No receipt defined by the draft is itself a bearer credential. [1] `draft-watts-high-assurance-agent-control-envelope-01` is dated 30 October 2026 and expires 3 May 2027. Appendix A records changes since `-00` as editorial and tooling-conformance changes only; no technical content was changed. [1]",
   "v05_identity_sentence_md": "**High-Assurance Agent Control Envelope** (`HAACE`), `draft-watts-high-assurance-agent-control-envelope-01`, is an Informational Internet-Draft dated 30 October 2026 by D. O. Watts of GoodShyt Group Inc. [1] It defines a protocol-neutral profile that binds an exact agent action to identity status, authorization state, policy, assurance stage, evidence state, authority epoch, revocation state, oversight requirements, and an action-time decision. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Permit](/category/permit/) (`permit`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "Deonté O'dell Watts (D. O. Watts), GoodShyt Group Inc. [1]"
    },
    {
     "label": "Governed by",
     "value_md": "Individual IETF Internet-Draft by D. O. Watts, GoodShyt Group Inc. (no working group; Intended status: Informational) [1]"
    },
    {
     "label": "Track",
     "value_md": "IETF Internet-Draft (Informational) [1]"
    },
    {
     "label": "Status",
     "value_md": "Internet-Draft, Intended status: Informational; expires 3 May 2027 [1]"
    },
    {
     "label": "Version",
     "value_md": "`draft-watts-high-assurance-agent-control-envelope-01` (30 October 2026; expires 3 May 2027) [1]"
    },
    {
     "label": "Wire format",
     "value_md": "Protocol-neutral profile with abstract fields for non-bearer Action Decision Receipt (`ADR`) and Action Execution Receipt (`AER`); RFC 8785 (`JCS`) recommended for digests, with cryptographic algorithm suites selected by external deployment policy [1]"
    },
    {
     "label": "Specification",
     "value_md": "https://www.ietf.org/archive/id/draft-watts-high-assurance-agent-control-envelope-01.txt [1]"
    },
    {
     "label": "Found at",
     "value_md": "Relying-party Assurance Requirement Profile (`ARP`); outcomes `ALLOW`, `DENY`, and `INDETERMINATE`; no IANA actions [1]"
    },
    {
     "label": "IETF state",
     "value_md": "`draft-watts-high-assurance-agent-control-envelope-01` · **Active Internet-Draft** (published 30 October 2026; expires 3 May 2027) · Individual submission [1]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust Legal Provisions (BCP 78) [1]"
    }
   ],
   "v05_problem_md": "Agentic systems can authenticate successfully, hold a valid authorization object, and still be unsafe to execute because required evidence is missing, the software has not reached a required assurance stage, the authority epoch is stale, a prior revocation is unresolved, or a human-approval requirement is unsatisfied. [1] Missing, stale, unverifiable, contradictory, or indeterminate required premises MUST NOT produce `ALLOW`. [1] `HAACE` requires fail-closed treatment of missing or indeterminate prerequisites, separates authorization from execution, and produces non-bearer decision and execution receipts. [1] The `ACP` returns `ALLOW` only if every required predicate is satisfied, returns `DENY` for a known failing predicate, and returns `INDETERMINATE` when a required predicate cannot be established. [1] The profile composes with OAuth, workload identity, attestation, transparency, and agent-authorization mechanisms rather than replacing them. [1] It is not a U.S. Government standard and does not imply endorsement by any government agency. [1]",
   "v05_mechanism_delta_md": "`HAACE` requires fail-closed treatment of missing or indeterminate prerequisites, separates authorization from execution, and produces non-bearer decision and execution receipts. [1] The `ACP` returns `ALLOW` only if every required predicate is satisfied, returns `DENY` for a known failing predicate, and returns `INDETERMINATE` when a required predicate cannot be established. [1]",
   "v05_scope_boundary_md": "The profile composes with OAuth, workload identity, attestation, transparency, and agent-authorization mechanisms rather than replacing them. [1] It is not a U.S. Government standard and does not imply endorsement by any government agency. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "Remote ATtestation procedureS Architecture (RATS, RFC 9334)",
      "spec_or_rfc": "RFC 9334",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "RATS produces attestation results for a relying party, while HAACE evaluates an Action Request Record against an Assurance Requirement Profile and emits a non-bearer Action Decision Receipt, refusing ALLOW when a required premise is missing or indeterminate. [1][2]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "aagv",
      "target_name": "Agentic Authority Graph Validation",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "AAGV returns INVALID, INDETERMINATE, VALID_OPEN, or VALID_CLOSED for an authority-graph snapshot, and HAACE is the later action-time check that still refuses ALLOW when evidence is indeterminate. [1][3]"
     },
     {
      "target_id": "agent-authorization-envelope",
      "target_name": "Agent Authorization Envelope",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "The envelope is a JWS-secured Verifiable Credential carrying a mandate and a validity block, while HAACE checks the Action Request Record at execution time and records a non-bearer Action Decision Receipt. [1][4]"
     },
     {
      "target_id": "local-tool-call-proof",
      "target_name": "Per-Call Proof for Local Tool Invocation by AI Agents",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "A local call proof is a single-use JSON-RPC proof bound to one tool name and argument digest, while HAACE is a protocol-neutral action-time check with decision and execution receipts. [1][5]"
     },
     {
      "target_id": "wimse-agent-audit-record",
      "target_name": "An Audit Record Format for AI Agent Authorization Decisions",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Gilda's AI agent authorization audit record (`draft-gilda-audit-agent-audit-record-03`, renamed from `draft-gilda-wimse-agent-audit-record-02`) is an in-toto Statement in a DSSE envelope, whereas HAACE's Action Decision Receipt and Action Execution Receipt are the non-bearer artifacts of the action-time check. [1][6]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Permit protocols](/category/permit/)** — Category index for `permit` standards."
    }
   ],
   "v05_compiled_md": "---\nid: haace\ntitle: \"High-Assurance Agent Control Envelope\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: permit\nform: document-format\nwire_archetype: identity_auth_crypto\nspec_url: https://www.ietf.org/archive/id/draft-watts-high-assurance-agent-control-envelope-01.txt\nlast_checked: 2026-11-07\n---\n\n# High-Assurance Agent Control Envelope\n\n**Category:** [Permit](/category/permit/) (`permit`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-11-07\n\n**High-Assurance Agent Control Envelope** (`HAACE`), `draft-watts-high-assurance-agent-control-envelope-01`, is an Informational Internet-Draft dated 30 October 2026 by D. O. Watts of GoodShyt Group Inc. [1] It defines a protocol-neutral profile that binds an exact agent action to identity status, authorization state, policy, assurance stage, evidence state, authority epoch, revocation state, oversight requirements, and an action-time decision. [1] A relying party declares an Assurance Requirement Profile (`ARP`). An agent or intermediary presents an Action Request Record (`ARR`) plus references to the required evidence. An independent Action Control Point (`ACP`) evaluates the request. [1] The `ACP` emits a non-bearer Action Decision Receipt (`ADR`). If an effect is attempted, the enforcement point emits a separate Action Execution Receipt (`AER`). No receipt defined by the draft is itself a bearer credential. [1] `draft-watts-high-assurance-agent-control-envelope-01` is dated 30 October 2026 and expires 3 May 2027. Appendix A records changes since `-00` as editorial and tooling-conformance changes only; no technical content was changed. [1]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Permit](/category/permit/) (`permit`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | Deonté O'dell Watts (D. O. Watts), GoodShyt Group Inc. [1] |\n| **Governed by** | Individual IETF Internet-Draft by D. O. Watts, GoodShyt Group Inc. (no working group; Intended status: Informational) [1] |\n| **Track** | IETF Internet-Draft (Informational) [1] |\n| **Status** | Internet-Draft, Intended status: Informational; expires 3 May 2027 [1] |\n| **Version** | `draft-watts-high-assurance-agent-control-envelope-01` (30 October 2026; expires 3 May 2027) [1] |\n| **Wire format** | Protocol-neutral profile with abstract fields for non-bearer Action Decision Receipt (`ADR`) and Action Execution Receipt (`AER`); RFC 8785 (`JCS`) recommended for digests, with cryptographic algorithm suites selected by external deployment policy [1] |\n| **Specification** | https://www.ietf.org/archive/id/draft-watts-high-assurance-agent-control-envelope-01.txt [1] |\n| **Found at** | Relying-party Assurance Requirement Profile (`ARP`); outcomes `ALLOW`, `DENY`, and `INDETERMINATE`; no IANA actions [1] |\n| **IETF state** | `draft-watts-high-assurance-agent-control-envelope-01` · **Active Internet-Draft** (published 30 October 2026; expires 3 May 2027) · Individual submission [1] |\n| **Licence** | IETF Trust Legal Provisions (BCP 78) [1] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nAgentic systems can authenticate successfully, hold a valid authorization object, and still be unsafe to execute because required evidence is missing, the software has not reached a required assurance stage, the authority epoch is stale, a prior revocation is unresolved, or a human-approval requirement is unsatisfied. [1] Missing, stale, unverifiable, contradictory, or indeterminate required premises MUST NOT produce `ALLOW`. [1] `HAACE` requires fail-closed treatment of missing or indeterminate prerequisites, separates authorization from execution, and produces non-bearer decision and execution receipts. [1] The `ACP` returns `ALLOW` only if every required predicate is satisfied, returns `DENY` for a known failing predicate, and returns `INDETERMINATE` when a required predicate cannot be established. [1] The profile composes with OAuth, workload identity, attestation, transparency, and agent-authorization mechanisms rather than replacing them. [1] It is not a U.S. Government standard and does not imply endorsement by any government agency. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **Remote ATtestation procedureS Architecture (RATS, RFC 9334)** | `RFC 9334` | Analogous to classic standard | RATS produces attestation results for a relying party, while HAACE evaluates an Action Request Record against an Assurance Requirement Profile and emits a non-bearer Action Decision Receipt, refusing ALLOW when a required premise is missing or indeterminate. [1][2] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Agentic Authority Graph Validation](/protocols/aagv/)** | Complements | AAGV returns INVALID, INDETERMINATE, VALID_OPEN, or VALID_CLOSED for an authority-graph snapshot, and HAACE is the later action-time check that still refuses ALLOW when evidence is indeterminate. [1][3] |\n| **[Agent Authorization Envelope](/protocols/agent-authorization-envelope/)** | Peer alternative | The envelope is a JWS-secured Verifiable Credential carrying a mandate and a validity block, while HAACE checks the Action Request Record at execution time and records a non-bearer Action Decision Receipt. [1][4] |\n| **[Per-Call Proof for Local Tool Invocation by AI Agents](/protocols/local-tool-call-proof/)** | Peer alternative | A local call proof is a single-use JSON-RPC proof bound to one tool name and argument digest, while HAACE is a protocol-neutral action-time check with decision and execution receipts. [1][5] |\n| **[An Audit Record Format for AI Agent Authorization Decisions](/protocols/wimse-agent-audit-record/)** | Complements | Gilda's AI agent authorization audit record (`draft-gilda-audit-agent-audit-record-03`, renamed from `draft-gilda-wimse-agent-audit-record-02`) is an in-toto Statement in a DSSE envelope, whereas HAACE's Action Decision Receipt and Action Execution Receipt are the non-bearer artifacts of the action-time check. [1][6] |\n\n---\n\n## See also\n\n- **Category:** [Permit protocols](/category/permit/)\n\n---\n\n## References\n\n1. D. O. Watts (GoodShyt Group Inc.), *High-Assurance Agent Control Envelope (draft-watts-high-assurance-agent-control-envelope-01)* (checked 2026-11-07) — <https://www.ietf.org/archive/id/draft-watts-high-assurance-agent-control-envelope-01.txt>\n2. IETF, *RFC 9334: Remote ATtestation procedureS (RATS) Architecture* (IETF RFC) — <https://www.rfc-editor.org/rfc/rfc9334.html>\n3. D. O. Watts (GoodShyt Group Inc.), *Agentic Authority Graph Validation: A Non-Vacuous Interchange Profile for Revocation-Cut Analysis (draft-watts-agentic-authority-graph-validation-01)* (checked 2026-11-07) — <https://www.ietf.org/archive/id/draft-watts-agentic-authority-graph-validation-01.txt>\n4. Lars Kersten Kroehl (CryptoKRI GmbH), *Agent Authorization Envelope (AAE): A Machine-Evaluable Authorization Structure for Autonomous AI Agents (draft-kroehl-agentic-trust-aae-02 HTML)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/html/draft-kroehl-agentic-trust-aae-02>\n5. Jaebin Lee, Chang-hun Yoo, Mingyu Kim, and Wooyong Seo, *Per-Call Proof for Local Tool Invocation by AI Agents (draft-lee-wimse-local-tool-call-proof-01 HTML)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/html/draft-lee-wimse-local-tool-call-proof-01>\n6. S. Gilda, *An Audit Record Format for AI Agent Authorization Decisions (draft-gilda-audit-agent-audit-record-03)* (29 October 2026) — <https://www.ietf.org/archive/id/draft-gilda-audit-agent-audit-record-03.txt>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "local-tool-call-proof",
   "name": "Per-Call Proof for Local Tool Invocation by AI Agents",
   "acronym": "",
   "aliases": [
    "Local Tool Call Proof",
    "draft-lee-wimse-local-tool-call-proof"
   ],
   "collisions": [],
   "step": "permit",
   "parties": [
    "agent-agent"
   ],
   "form": "endpoint",
   "track": "ietf",
   "scope": "general",
   "question": "How can a local tool server (for example an MCP stdio server) verify that each invocation from an AI agent passed a policy decision, without reusable credentials in the agent process?",
   "analog": "Per-request signed authorization token, applied to local inter-process tool calls instead of HTTP",
   "origin": {
    "org": "SSenStone Inc.",
    "date": "2026-10-07"
   },
   "governance": "Individual IETF Internet-Draft, not a working-group document (Datatracker: Active Internet-Draft (individual)); the draft directs discussion to the WIMSE Working Group mailing list",
   "native_status": "Internet-Draft, Intended Status: Standards Track; expires 15 April 2027",
   "phase": "draft",
   "implementation": "none-found",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "version": {
    "label": "draft-lee-wimse-local-tool-call-proof-01",
    "date": "2026-10-12"
   },
   "spec_url": "https://datatracker.ietf.org/doc/html/draft-lee-wimse-local-tool-call-proof-01",
   "discovery": {
    "mechanism": "Local Call Authority exposes a JSON-RPC 2.0 interface over a Unix domain socket or named pipe on the host; no network discovery described in the available text",
    "path": null
   },
   "probe": {
    "method": "NONE",
    "path": "",
    "parse": "",
    "on_absent": "Support is a host-local deployment property and cannot be observed from outside the host"
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.ietf.org/archive/id/draft-lee-wimse-local-tool-call-proof-01.txt",
     "claim": "J. Lee, C. Yoo, M. Kim, and W. Seo (SSenStone Inc.), *Per-Call Proof for Local Tool Invocation by AI Agents (draft-lee-wimse-local-tool-call-proof-01)*, checked 2026-10-31",
     "date": null,
     "quote": "Network Working Group J. Lee Internet-Draft C. Yoo Intended status: Standards Track M. Kim Expires: 15 April 2027 W. Seo SSenStone Inc. 12 October 2026 Per-Call Proof for Local Tool Invocation by AI Agents draft-lee-wimse-local-tool-call-proof-01 / This Internet-Draft will expire on 15 April 2027. / Discussion of this document takes place on the Workload Identity in Multi System Environments (WIMSE) Working Group mailing list / The Agent asks the Call Authority to issue a proof for an intended invocation. 2. The Call Authority identifies the calling process from the platform, evaluates Policy and, if allowed, returns a Call Proof. The proof never passes through the Call Authority again on the way to the Tool Server. 3. The Agent sends the invocation to the Tool Server with the Call Proof attached. / The Tool Server computes the Action Digest from the invocation as received and asks the Call Authority to verify the proof against it. / The Call Authority checks binding, freshness and single use, records the decision, and answers. 6. The Tool Server executes the invocation only if the answer is valid. / Rejection reasons split into policy and availability classes, with a next step of none, retry or reissue (Section 7.1). / Verification required immediately before execution starts; deferred invocations are verified when they start. / -00 * Initial version. / Yoo Intended status: Standards Track M. Kim Expires: 15 April 2027 W. Seo SSenStone / Expires 15 April 2027 [Page 2] Internet-Draft Local Tool Call Proof October 2026 10.2. / The extension identifier is shown with the MCP official prefix for illustration. Until the extension is accepted by the MCP project, implementations SHOULD use an identifier under their own vendor prefix. / reached over inter-process channels such as the stdio transport of the Model Context Protocol (MCP). These channels are outside the scope of HTTP-based authorization: the tool server cannot tell whether a given invocation passed any policy decision, and reusable credentials typically sit in the agent's process memory. / In MCP [MCP], this is the stdio transport, and the authorization specification states that implementations using it \"SHOULD NOT follow this specification, and instead retrieve credentials from the environment\" [MCP-AUTHZ]. The MCP local server guidance describes the agent client and a stdio server as sharing one trust domain [MCP-LOCAL]. That model is adequate for a single user on a personal device. It is not adequate when: * an agent host runs on shared infrastructure and acts on behalf of many users / A Call Authority that runs outside the agent process evaluates policy, issues a short-lived, single-use proof bound to the exact tool name and arguments through a canonical action digest, and verifies that proof on behalf of the tool server. / The tool server rejects invocations whose proof is missing or does not verify. / The mechanism does not prevent prompt injection. It confines the effects of an injected or compromised agent to actions that policy permits, removes reusable secrets from the agent process, and makes every invocation attributable. / This document does not provide authorization of a multi-step plan as a whole.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://datatracker.ietf.org/doc/html/draft-lee-wimse-local-tool-call-proof-01",
     "claim": "J. Lee, C. Yoo, M. Kim, and W. Seo (SSenStone Inc.), *Per-Call Proof for Local Tool Invocation by AI Agents (draft-lee-wimse-local-tool-call-proof-01 HTML)*, checked 2026-10-31",
     "date": null,
     "quote": "Active Internet-Draft (individual) / handling and decision horizons.¶ ## Authors' Addresses draft-lee-wimse-local-tool-call-proof-01 Active Internet-Draft (individual) | | | / Intended status: Standards Track / Status information for this document may be found at https://datatracker.ietf.org/doc/draft-lee-wimse-local-tool-call-proof/ . ¶ / Expires 15 April 2027 | \\[Page\\] | Workgroup:Network Working GroupInternet-Draft:draft-lee-wimse-local-tool-call-proof-01Published:12 October 2026Intended Status:Standards TrackExpires:15 / JCS is the JSON Canonicalization Scheme RFC8785;¶ SHA-256 is as defined in RFC6234;¶ BASE64URL / of a proof: ¶ \"_meta\": { \"io.modelcontextprotocol/callProofIssuance\": { \"status\": \"authorityUnavailable\" } } ¶ ### / Copyright (c) 2026 IETF Trust and the persons identified as the document authors.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://datatracker.ietf.org/doc/draft-lee-wimse-local-tool-call-proof/",
     "claim": "J. Lee, C. Yoo, M. Kim, and W. Seo (SSenStone Inc.), *draft-lee-wimse-local-tool-call-proof — Per-Call Proof for Local Tool Invocation by AI Agents (IETF Datatracker)*, checked 2026-10-31",
     "date": null,
     "quote": "Nits Nits v3 Search email archive draft-lee-wimse-local-tool-call-proof-01 Network Working Group J. Lee Internet-Draft C.",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://www.jsonrpc.org/specification",
     "claim": "JSON-RPC Working Group, *JSON-RPC 2.0 Specification*, 2013-01-04",
     "date": "2013-01-04",
     "quote": "Origin Date: 2010-03-26 (based on the 2009-05-24 version)",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://www.rfc-editor.org/rfc/rfc9449.html",
     "claim": "D. Fett, B. Campbell, J. Bradley, T. Lodderstedt, M. Jones, and D. Waite, *RFC 9449: OAuth 2.0 Demonstrating Proof of Possession (DPoP)*, September 2023",
     "date": null,
     "quote": "This document describes a mechanism for sender-constraining OAuth 2.0",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Current : the current protocol version, which is ready for use and may continue to receive backwards compatible changes.",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-wimse-aims/",
     "claim": "IETF Datatracker, *draft-ietf-wimse-aims — AI Identity Management System (IETF Datatracker)*, checked 2026-11-08",
     "date": null,
     "quote": "Active Internet-Draft (wimse WG)",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://datatracker.ietf.org/doc/rfc9421/",
     "claim": "IETF Datatracker, *HTTP Message Signatures (RFC 9421)*, Proposed Standard (February 2024); checked 2026-10-30",
     "date": null,
     "quote": "RFC - Proposed Standard (February 2024)",
     "ref": 8
    }
   ],
   "summary_md": "**Per-Call Proof for Local Tool Invocation by AI Agents** (`draft-lee-wimse-local-tool-call-proof-01`) is an Internet-Draft by J. Lee, C. Yoo, M. Kim, and W. Seo of SSenStone Inc. Its intended status is Standards Track. It is dated 12 October 2026 and expires on 15 April 2027. The document type is Active Internet-Draft (individual). Discussion of the draft takes place on the Workload Identity in Multi System Environments (WIMSE) Working Group mailing list. The Agent asks the Call Authority to issue a proof for an intended invocation. The Call Authority identifies the calling process from the platform, evaluates Policy and, if allowed, returns a Call Proof. The proof never passes through the Call Authority again on the way to the Tool Server. The Agent sends the invocation to the Tool Server with the Call Proof attached. The Tool Server computes the Action Digest from the invocation as received and asks the Call Authority to verify the proof against it. The Call Authority checks binding, freshness and single use, records the decision, and answers. The Tool Server executes the invocation only if the answer is valid. Document History for `-01` splits rejection reasons into policy and availability classes, with a next step of none, retry or reissue. Verification is required immediately before execution starts. Deferred invocations are verified when they start. `-00` is the initial version.",
   "part_of": null,
   "group": null,
   "use_cases": [
    "delegate-user-authority",
    "audit-agent-actions",
    "expose-tools-to-agents"
   ],
   "audience": [
    "agent-builder",
    "platform",
    "standards-body"
   ],
   "pairs_with": [
    "mcp",
    "wimse-aims",
    "http-message-signatures"
   ],
   "prerequisites": [
    "mcp"
   ],
   "dispute": null,
   "last_verified": "2026-11-12",
   "history": [
    {
     "date": "2026-10-19",
     "note": "initial candidate record from primary source (https://datatracker.ietf.org/doc/html/draft-lee-wimse-local-tool-call-proof-01)"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-lee-wimse-local-tool-call-proof"
    }
   ],
   "ietf_tracker": {
    "doc": "draft-lee-wimse-local-tool-call-proof",
    "rev": "01",
    "state": "active",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-10-12",
    "expires_utc": "2027-04-15",
    "as_of": "2026-10-31",
    "source": "https://datatracker.ietf.org/doc/draft-lee-wimse-local-tool-call-proof/",
    "source_label": "per IETF Datatracker"
   },
   "hatnote_md": "",
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": null,
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Per-Call Proof for Local Tool Invocation by AI Agents** (`draft-lee-wimse-local-tool-call-proof-01`) is an Internet-Draft by J. Lee, C. Yoo, M. Kim, and W. Seo of SSenStone Inc. Its intended status is Standards Track. It is dated 12 October 2026 and expires on 15 April 2027. [1] The document type is Active Internet-Draft (individual). [2] Discussion of the draft takes place on the Workload Identity in Multi System Environments (WIMSE) Working Group mailing list. [1] The Agent asks the Call Authority to issue a proof for an intended invocation. The Call Authority identifies the calling process from the platform, evaluates Policy and, if allowed, returns a Call Proof. [1] The proof never passes through the Call Authority again on the way to the Tool Server. The Agent sends the invocation to the Tool Server with the Call Proof attached. [1] The Tool Server computes the Action Digest from the invocation as received and asks the Call Authority to verify the proof against it. [1] The Call Authority checks binding, freshness and single use, records the decision, and answers. The Tool Server executes the invocation only if the answer is valid. [1] Document History for `-01` splits rejection reasons into policy and availability classes, with a next step of none, retry or reissue. [1] Verification is required immediately before execution starts. Deferred invocations are verified when they start. [1] `-00` is the initial version. [1]",
   "v05_identity_sentence_md": "**Per-Call Proof for Local Tool Invocation by AI Agents** (`draft-lee-wimse-local-tool-call-proof-01`) is an Internet-Draft by J. Lee, C. Yoo, M. Kim, and W. Seo of SSenStone Inc. Its intended status is Standards Track. It is dated 12 October 2026 and expires on 15 April 2027. [1] The document type is Active Internet-Draft (individual). [2] Discussion of the draft takes place on the Workload Identity in Multi System Environments (WIMSE) Working Group mailing list. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Permit](/category/permit/) (`permit`)"
    },
    {
     "label": "Form",
     "value_md": "Endpoint (`endpoint`)"
    },
    {
     "label": "Originated by",
     "value_md": "J. Lee, C. Yoo, M. Kim, and W. Seo (SSenStone Inc.) [1]"
    },
    {
     "label": "Governed by",
     "value_md": "Individual IETF Internet-Draft (discussed on the WIMSE Working Group mailing list; not WG-adopted) [2][3]"
    },
    {
     "label": "Track",
     "value_md": "IETF Internet-Draft (Standards Track) [2]"
    },
    {
     "label": "Status",
     "value_md": "Internet-Draft, Intended Status: Standards Track; expires 15 April 2027 [1][2]"
    },
    {
     "label": "Version",
     "value_md": "`draft-lee-wimse-local-tool-call-proof-01` (Published 12 October 2026; Expires 15 April 2027) [1][2]"
    },
    {
     "label": "Wire format",
     "value_md": "JSON-RPC 2.0 messages carrying JCS (SHA-256 + Base64url) action digests and opaque evidence type profiles over local IPC / MCP `stdio` [2]"
    },
    {
     "label": "Specification",
     "value_md": "https://datatracker.ietf.org/doc/html/draft-lee-wimse-local-tool-call-proof-01 [2]"
    },
    {
     "label": "Found at",
     "value_md": "MCP capability extension `io.modelcontextprotocol/call-proof` (shown with the `io.modelcontextprotocol/` prefix for illustration pending MCP project acceptance; vendor-prefixed otherwise) and request `_meta` fields `io.modelcontextprotocol/callProof` and `io.modelcontextprotocol/callProofIssuance` [1][2]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust Legal Provisions (BCP 78) [2]"
    },
    {
     "label": "IETF state",
     "value_md": "`draft-lee-wimse-local-tool-call-proof-01` · **Active Internet-Draft** (expires 2027-04-15) · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-lee-wimse-local-tool-call-proof/))"
    }
   ],
   "v05_problem_md": "Local inter-process channels such as MCP stdio are outside the scope of HTTP-based authorization. The tool server cannot tell whether a given invocation passed any policy decision, and reusable credentials typically sit in the agent's process memory. [1] The MCP authorization specification states that stdio implementations \"SHOULD NOT follow this specification, and instead retrieve credentials from the environment.\" A shared trust domain is adequate for one user on a personal device, not when an agent host runs on shared infrastructure and acts on behalf of many users. [1] A Call Authority that runs outside the agent process evaluates policy, issues a short-lived, single-use proof bound to the exact tool name and arguments through a canonical action digest, and verifies that proof on behalf of the tool server. [1] The tool server rejects invocations whose proof is missing or does not verify. [1] The mechanism does not prevent prompt injection. It confines the effects of an injected or compromised agent to actions that policy permits, removes reusable secrets from the agent process, and makes every invocation attributable. [1] The draft does not provide authorization of a multi-step plan as a whole. [1]",
   "v05_mechanism_delta_md": "A Call Authority that runs outside the agent process evaluates policy, issues a short-lived, single-use proof bound to the exact tool name and arguments through a canonical action digest, and verifies that proof on behalf of the tool server. [1] The tool server rejects invocations whose proof is missing or does not verify. [1]",
   "v05_scope_boundary_md": "The mechanism does not prevent prompt injection. It confines the effects of an injected or compromised agent to actions that policy permits, removes reusable secrets from the agent process, and makes every invocation attributable. [1] The draft does not provide authorization of a multi-step plan as a whole. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "JSON-RPC 2.0 Specification",
      "spec_or_rfc": "JSON-RPC 2.0",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "The local Call Authority exposes JSON-RPC 2.0 over a Unix domain socket or named pipe and issues a single-use proof bound to a canonical digest of the method, tool name, and arguments. [2][4]"
     },
     {
      "name": "OAuth 2.0 Demonstrating Proof of Possession (DPoP, RFC 9449)",
      "spec_or_rfc": "RFC 9449",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "DPoP binds a proof JWT to an HTTP method and URL, while this draft binds a single-use proof to the digest of the method, tool name, and arguments on a local JSON-RPC socket. [2][5]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "An MCP stdio binding is included, and the Call Authority issues a single-use proof over JSON-RPC 2.0 on a Unix domain socket or named pipe before the local tool runs. [2][6]"
     },
     {
      "target_id": "wimse-aims",
      "target_name": "AI Identity Management System (AIMS)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "AIMS assigns the agent a workload identity for networked tool calls, and this proof is the additional per-call check on the local socket before a local MCP tool runs. [2][7]"
     },
     {
      "target_id": "http-message-signatures",
      "target_name": "HTTP Message Signatures",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "HTTP Message Signatures authenticate an HTTP request, while this proof authorizes a local tool call over a JSON-RPC socket or named pipe. [2][8]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "haace",
     "target_name": "High-Assurance Agent Control Envelope",
     "relation_label": "Peer alternative",
     "delta": "A local call proof is a single-use JSON-RPC proof bound to one tool name and argument digest, while HAACE is a protocol-neutral action-time check with decision and execution receipts.",
     "item_md": "**[High-Assurance Agent Control Envelope](/protocols/haace/)** (Peer alternative) — A local call proof is a single-use JSON-RPC proof bound to one tool name and argument digest, while HAACE is a protocol-neutral action-time check with decision and execution receipts."
    },
    {
     "item_md": "**[Permit protocols](/category/permit/)** — Category index for `permit` standards."
    }
   ],
   "v05_compiled_md": "---\nid: local-tool-call-proof\ntitle: \"Per-Call Proof for Local Tool Invocation by AI Agents\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: permit\nform: endpoint\nwire_archetype: identity_auth_crypto\nspec_url: https://datatracker.ietf.org/doc/html/draft-lee-wimse-local-tool-call-proof-01\nlast_checked: 2026-11-12\n---\n\n# Per-Call Proof for Local Tool Invocation by AI Agents\n\n**Category:** [Permit](/category/permit/) (`permit`) · **Form:** Endpoint (`endpoint`) · **Last checked:** 2026-11-12\n\n**Per-Call Proof for Local Tool Invocation by AI Agents** (`draft-lee-wimse-local-tool-call-proof-01`) is an Internet-Draft by J. Lee, C. Yoo, M. Kim, and W. Seo of SSenStone Inc. Its intended status is Standards Track. It is dated 12 October 2026 and expires on 15 April 2027. [1] The document type is Active Internet-Draft (individual). [2] Discussion of the draft takes place on the Workload Identity in Multi System Environments (WIMSE) Working Group mailing list. [1] The Agent asks the Call Authority to issue a proof for an intended invocation. The Call Authority identifies the calling process from the platform, evaluates Policy and, if allowed, returns a Call Proof. [1] The proof never passes through the Call Authority again on the way to the Tool Server. The Agent sends the invocation to the Tool Server with the Call Proof attached. [1] The Tool Server computes the Action Digest from the invocation as received and asks the Call Authority to verify the proof against it. [1] The Call Authority checks binding, freshness and single use, records the decision, and answers. The Tool Server executes the invocation only if the answer is valid. [1] Document History for `-01` splits rejection reasons into policy and availability classes, with a next step of none, retry or reissue. [1] Verification is required immediately before execution starts. Deferred invocations are verified when they start. [1] `-00` is the initial version. [1]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Permit](/category/permit/) (`permit`) |\n| **Form** | Endpoint (`endpoint`) |\n| **Originated by** | J. Lee, C. Yoo, M. Kim, and W. Seo (SSenStone Inc.) [1] |\n| **Governed by** | Individual IETF Internet-Draft (discussed on the WIMSE Working Group mailing list; not WG-adopted) [2][3] |\n| **Track** | IETF Internet-Draft (Standards Track) [2] |\n| **Status** | Internet-Draft, Intended Status: Standards Track; expires 15 April 2027 [1][2] |\n| **Version** | `draft-lee-wimse-local-tool-call-proof-01` (Published 12 October 2026; Expires 15 April 2027) [1][2] |\n| **Wire format** | JSON-RPC 2.0 messages carrying JCS (SHA-256 + Base64url) action digests and opaque evidence type profiles over local IPC / MCP `stdio` [2] |\n| **Specification** | https://datatracker.ietf.org/doc/html/draft-lee-wimse-local-tool-call-proof-01 [2] |\n| **Found at** | MCP capability extension `io.modelcontextprotocol/call-proof` (shown with the `io.modelcontextprotocol/` prefix for illustration pending MCP project acceptance; vendor-prefixed otherwise) and request `_meta` fields `io.modelcontextprotocol/callProof` and `io.modelcontextprotocol/callProofIssuance` [1][2] |\n| **Licence** | IETF Trust Legal Provisions (BCP 78) [2] |\n| **IETF state** | `draft-lee-wimse-local-tool-call-proof-01` · **Active Internet-Draft** (expires 2027-04-15) · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-lee-wimse-local-tool-call-proof/)) |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nLocal inter-process channels such as MCP stdio are outside the scope of HTTP-based authorization. The tool server cannot tell whether a given invocation passed any policy decision, and reusable credentials typically sit in the agent's process memory. [1] The MCP authorization specification states that stdio implementations \"SHOULD NOT follow this specification, and instead retrieve credentials from the environment.\" A shared trust domain is adequate for one user on a personal device, not when an agent host runs on shared infrastructure and acts on behalf of many users. [1] A Call Authority that runs outside the agent process evaluates policy, issues a short-lived, single-use proof bound to the exact tool name and arguments through a canonical action digest, and verifies that proof on behalf of the tool server. [1] The tool server rejects invocations whose proof is missing or does not verify. [1] The mechanism does not prevent prompt injection. It confines the effects of an injected or compromised agent to actions that policy permits, removes reusable secrets from the agent process, and makes every invocation attributable. [1] The draft does not provide authorization of a multi-step plan as a whole. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **JSON-RPC 2.0 Specification** | `JSON-RPC 2.0` | Profiles classic standard | The local Call Authority exposes JSON-RPC 2.0 over a Unix domain socket or named pipe and issues a single-use proof bound to a canonical digest of the method, tool name, and arguments. [2][4] |\n| **OAuth 2.0 Demonstrating Proof of Possession (DPoP, RFC 9449)** | `RFC 9449` | Analogous to classic standard | DPoP binds a proof JWT to an HTTP method and URL, while this draft binds a single-use proof to the digest of the method, tool name, and arguments on a local JSON-RPC socket. [2][5] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Model Context Protocol](/protocols/mcp/)** | Builds on | An MCP stdio binding is included, and the Call Authority issues a single-use proof over JSON-RPC 2.0 on a Unix domain socket or named pipe before the local tool runs. [2][6] |\n| **[AI Identity Management System (AIMS)](/protocols/wimse-aims/)** | Complements | AIMS assigns the agent a workload identity for networked tool calls, and this proof is the additional per-call check on the local socket before a local MCP tool runs. [2][7] |\n| **[HTTP Message Signatures](/protocols/http-message-signatures/)** | Peer alternative | HTTP Message Signatures authenticate an HTTP request, while this proof authorizes a local tool call over a JSON-RPC socket or named pipe. [2][8] |\n\n---\n\n## See also\n\n- **[High-Assurance Agent Control Envelope](/protocols/haace/)** *(Peer alternative)* — A local call proof is a single-use JSON-RPC proof bound to one tool name and argument digest, while HAACE is a protocol-neutral action-time check with decision and execution receipts.\n- **Category:** [Permit protocols](/category/permit/)\n\n---\n\n## References\n\n1. J. Lee, C. Yoo, M. Kim, and W. Seo (SSenStone Inc.), *Per-Call Proof for Local Tool Invocation by AI Agents (draft-lee-wimse-local-tool-call-proof-01)* (checked 2026-10-31) — <https://www.ietf.org/archive/id/draft-lee-wimse-local-tool-call-proof-01.txt>\n2. J. Lee, C. Yoo, M. Kim, and W. Seo (SSenStone Inc.), *Per-Call Proof for Local Tool Invocation by AI Agents (draft-lee-wimse-local-tool-call-proof-01 HTML)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/html/draft-lee-wimse-local-tool-call-proof-01>\n3. J. Lee, C. Yoo, M. Kim, and W. Seo (SSenStone Inc.), *draft-lee-wimse-local-tool-call-proof — Per-Call Proof for Local Tool Invocation by AI Agents (IETF Datatracker)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/draft-lee-wimse-local-tool-call-proof/>\n4. JSON-RPC Working Group, *JSON-RPC 2.0 Specification* (2013-01-04) — <https://www.jsonrpc.org/specification>\n5. D. Fett, B. Campbell, J. Bradley, T. Lodderstedt, M. Jones, and D. Waite, *RFC 9449: OAuth 2.0 Demonstrating Proof of Possession (DPoP)* (September 2023) — <https://www.rfc-editor.org/rfc/rfc9449.html>\n6. Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation* (2026-07-28) — <https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning>\n7. IETF Datatracker, *draft-ietf-wimse-aims — AI Identity Management System (IETF Datatracker)* (checked 2026-11-08) — <https://datatracker.ietf.org/doc/draft-ietf-wimse-aims/>\n8. IETF Datatracker, *HTTP Message Signatures (RFC 9421)* (Proposed Standard (February 2024); checked 2026-10-30) — <https://datatracker.ietf.org/doc/rfc9421/>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "agent-authorization-envelope",
   "name": "Agent Authorization Envelope",
   "acronym": "AAE",
   "aliases": [],
   "collisions": [],
   "step": "permit",
   "parties": [
    "agent-site"
   ],
   "form": "document-format",
   "track": "ietf",
   "scope": "general",
   "question": "How can a relying party verify offline, without calling the issuer, that an agent holds a mandate with limits, an expiry and a bounded delegation chain?",
   "analog": "A signed power of attorney with stated spending limits and an expiry date that a counterparty can check on its own.",
   "origin": {
    "org": "CryptoKRI GmbH (Lars Kersten Kroehl)",
    "date": "2026-05-21"
   },
   "governance": "Individual Internet-Draft submitted to the IETF datatracker by a single author; not adopted by a working group per the page.",
   "native_status": "Active Internet-Draft (-02, expires 2027-03-10)",
   "phase": "draft",
   "implementation": "none-found",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "version": {
    "label": "draft-kroehl-agentic-trust-aae-02",
    "date": "2026-09-06"
   },
   "spec_url": "https://datatracker.ietf.org/doc/html/draft-kroehl-agentic-trust-aae-02",
   "discovery": {
    "mechanism": "Envelope presented by the agent to the relying party; no discovery path is described. The optional revocation endpoint is named inside the envelope.",
    "path": null
   },
   "probe": {
    "method": "NONE",
    "path": "",
    "parse": "",
    "on_absent": "No site-level signal to observe; support is only visible when an agent presents an envelope."
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.ietf.org/archive/id/draft-kroehl-agentic-trust-aae-02.txt",
     "claim": "L. K. Kroehl (CryptoKRI GmbH), *Agent Authorization Envelope (AAE): A Machine-Evaluable Authorization Structure for Autonomous AI Agents (draft-kroehl-agentic-trust-aae-02)*, checked 2026-10-31",
     "date": null,
     "quote": "draft-kroehl-agentic-trust-aae-02 / Independent Submission L. K. Kroehl Internet-Draft CryptoKRI GmbH Intended status: Informational / This document specifies the Agent Authorization Envelope (AAE), a structured authorization container for autonomous AI agents. AAE defines three mandatory blocks - MANDATE, CONSTRAINTS, and VALIDITY / An AAE is a W3C Verifiable Credential [W3C-VC] whose credentialSubject carries an aae object. The aae object has three mandatory members - mandate, constraints, and validity / On the wire, a secured AAE is a JWS in compact serialization / The JWS Protected Header MUST contain / alg: REQUIRED. MUST be \"EdDSA\" ... cty: REQUIRED. The media type of the JWS payload; MUST be \"aae+json\" ... kid: REQUIRED. A DID URL identifying the issuer verification method. / 6 September 2026 Expires: 10 March 2027 / This revision is substantive. / An AAE that conforms to -01 still conforms to this revision: every member added here is OPTIONAL, and the wire format and verification algorithm of -01 are unchanged for an envelope that does not use them. / Independent Submission L. K. Kroehl Internet-Draft CryptoKRI GmbH Intended status: Informational 6 September 2026 / payload: Kroehl Expires 10 March 2027 Page 51 Internet-Draft AAE September 2026 {\"@context\": \"https://www.w3.org/ns/credentials/v2\",\"https://moltrust.ch/contexts/aae/v1\" / Kroehl Expires 10 March 2027 [Page 15] Internet-Draft AAE September 2026 * exact - / \"alg\": \"EdDSA\", \"cty\": \"aae+json\", \"kid\": \"did:moltrust:registry#key-1\" / \"revocation_check\": \"https://api.moltrust.ch/aae/revocation/{id}\" ... revocation_check: OPTIONAL. An HTTPS URI Template [RFC6570] for checking AAE revocation status. / the authorization may expire on a schedule that the receiving system must be able to verify without contacting the issuing party. / OAuth 2.0 scopes are issuer-defined strings without machine-evaluable semantics for agent mandates. / This document defines no step in which the relying party contacts the organization that originated the authorization in order to obtain an authorization decision: the AAE carries the authorization and the relying party evaluates it. / A relying party receiving an agent request with an attached AAE MUST perform the following checks in order / Steps 1-7 are REQUIRED. Steps 8-9 are conditional on presence of the relevant fields. / Verification therefore requires no synchronous call to the originating organization, but characterising it as offline without qualification is inaccurate for any AAE that carries a delegation chain or a revocation_check member. / 5.2. Deferred Verification Capabilities Four capabilities named elsewhere in this document are not available in this revision, and all four wait on the same thing: a relying party can only make them safe once it can perform outbound requests through a proxy that constrains where those requests may go. Until such a proxy exists, a conforming implementation refuses rather than pretends. * *Ancestor retrieval by delegator_aae_uri.* ... * *DID methods requiring outbound resolution.* ... * *Revocation checking (step 8).* ... * *Case (b) delegated signing authority.*",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://datatracker.ietf.org/doc/draft-kroehl-agentic-trust-aae/",
     "claim": "L. K. Kroehl (CryptoKRI GmbH), *draft-kroehl-agentic-trust-aae — Agent Authorization Envelope (AAE): A Machine-Evaluable Authorization Structure for Autonomous AI Agents (IETF Datatracker)*, checked 2026-10-31",
     "date": null,
     "quote": "Autonomous AI Agents draft-kroehl-agentic-trust-aae-02 Abstract Autonomous AI agents now operate at production scale across",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://datatracker.ietf.org/doc/html/draft-kroehl-agentic-trust-aae-02",
     "claim": "L. K. Kroehl (CryptoKRI GmbH), *Agent Authorization Envelope (AAE): A Machine-Evaluable Authorization Structure for Autonomous AI Agents (draft-kroehl-agentic-trust-aae-02 HTML)*, checked 2026-10-31",
     "date": null,
     "quote": "Intended status: Informational / || BASE64URL(JWS Signature) Kroehl Expires 10 March 2027 [Page 5] Internet-Draft AAE September 2026 / a JSON Web Signature (JWS) [RFC7515] in compact serialization, signed by the issuer using / Copyright (c) 2026 IETF Trust and the persons identified as the document authors.",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://www.rfc-editor.org/rfc/rfc7515.html",
     "claim": "M. Jones, J. Bradley, and N. Sakimura, *RFC 7515: JSON Web Signature (JWS)*, May 2015",
     "date": null,
     "quote": "JSON Web Signature (JWS) represents content secured with digital",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://www.w3.org/TR/did-core/",
     "claim": "W3C, *Decentralized Identifiers (DIDs) v1.0*, 2022-07-19",
     "date": "2022-07-19",
     "quote": "Decentralized identifiers (DIDs) are a new type of identifier that",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://www.ietf.org/archive/id/draft-ietf-wimse-workload-creds-03.txt",
     "claim": "B. Campbell, J. Salowey, A. Schwenkschuster, Y. Sheffer, and Y. Rosomakho, *WIMSE Workload Credentials (draft-ietf-wimse-workload-creds-03)*, 30 October 2026; expires 3 May 2027",
     "date": null,
     "quote": "typ: the WIT is explicitly typed, as recommended in Section 3.11 of [I-D.ietf-oauth-rfc8725bis], using the wit+jwt media type. / ABNF [RFC5234] for the value of Workload-Identity-Token header field",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://github.com/spiffe/spiffe/blob/main/standards/SPIFFE-ID.md",
     "claim": "SPIFFE, *SPIFFE ID*, checked 2026-10-30",
     "date": null,
     "quote": "Stability: Stable",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://github.com/ethereum/ERCs/pull/1844",
     "claim": "thamerdridi, *Update ERC-8226: add reference implementation and refine spec*, merged 2026-06-29; fetched 2026-10-31",
     "date": null,
     "quote": "\"https://github.com/ethereum/ERCs/pull/1844.diff\", \"patch_url\": \"https://github.com/ethereum/ERCs/pull/1844.patch\", \"merged_at\": \"2026-06-29T21:55:50Z\" }, \"body\": \"this pr updates ERC-8226 (Regulated Agent",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://datatracker.ietf.org/doc/html/draft-nelson-agent-delegation-receipts-15",
     "claim": "R. Nelson (Authproof), *Agent Delegation Receipts (draft-nelson-agent-delegation-receipts-15 HTML)*, checked 2026-10-31",
     "date": null,
     "quote": "behavior. Nelson Expires 24 April 2027 [Page 1] Internet-Draft Agent Delegation Receipts October 2026",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://www.ietf.org/archive/id/draft-hamr-oauth-agent-delegation-03.txt",
     "claim": "Amr Hassan (Independent), *An Attenuated Delegation Profile for Automated Agents (draft-hamr-oauth-agent-delegation-03)*, checked 2026-10-30",
     "date": null,
     "quote": "Vectors appendix of draft-hamr-oauth-agent-delegation-01 (https://datatracker.ietf.org/doc/html/draft-hamr-oauth-agent-delegation-01). There, V10 and V11 use writeBudget 2; in this",
     "ref": 10
    }
   ],
   "summary_md": "**Agent Authorization Envelope** (`AAE`), `draft-kroehl-agentic-trust-aae-02`, is an Independent Submission by L. K. Kroehl of CryptoKRI GmbH with intended status Informational. The draft specifies a structured authorization container for autonomous AI agents and defines three mandatory blocks: MANDATE, CONSTRAINTS, and VALIDITY. An AAE is a W3C Verifiable Credential whose credentialSubject carries an aae object with three mandatory members: mandate, constraints, and validity. On the wire, a secured AAE is a JWS in compact serialization. The JWS Protected Header MUST contain `alg`, `cty`, and `kid`. `alg` MUST be `EdDSA`, and `cty` MUST be `aae+json`. `draft-kroehl-agentic-trust-aae-02` is dated 6 September 2026 and expires on 10 March 2027. This revision is substantive. An AAE that conforms to -01 still conforms to this revision: every member added here is OPTIONAL, and the wire format and verification algorithm of -01 are unchanged for an envelope that does not use them.",
   "part_of": null,
   "group": null,
   "use_cases": [
    "delegate-user-authority",
    "prove-agent-identity",
    "audit-agent-actions"
   ],
   "audience": [
    "agent-builder",
    "platform",
    "standards-body"
   ],
   "pairs_with": [
    "wimse",
    "spiffe",
    "erc-8226",
    "agent-delegation-receipts",
    "oauth-agent-delegation"
   ],
   "prerequisites": [],
   "dispute": null,
   "last_verified": "2026-11-12",
   "history": [
    {
     "date": "2026-10-19",
     "note": "initial candidate record from primary source (https://insights.bostonidentity.com/research/ietf-datatracker-2026-05-21-agent-authorization-envelope-aae)"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-kroehl-agentic-trust-aae"
    }
   ],
   "ietf_tracker": {
    "doc": "draft-kroehl-agentic-trust-aae",
    "rev": "02",
    "state": "active",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-09-06",
    "expires_utc": "2027-03-10",
    "as_of": "2026-10-31",
    "source": "https://datatracker.ietf.org/doc/draft-kroehl-agentic-trust-aae/",
    "source_label": "per IETF Datatracker"
   },
   "hatnote_md": "",
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": null,
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Agent Authorization Envelope** (`AAE`), `draft-kroehl-agentic-trust-aae-02`, is an Independent Submission by L. K. Kroehl of CryptoKRI GmbH with intended status Informational. [1] The draft specifies a structured authorization container for autonomous AI agents and defines three mandatory blocks: MANDATE, CONSTRAINTS, and VALIDITY. [1] An AAE is a W3C Verifiable Credential whose credentialSubject carries an aae object with three mandatory members: mandate, constraints, and validity. [1] On the wire, a secured AAE is a JWS in compact serialization. [1] The JWS Protected Header MUST contain `alg`, `cty`, and `kid`. `alg` MUST be `EdDSA`, and `cty` MUST be `aae+json`. [1] `draft-kroehl-agentic-trust-aae-02` is dated 6 September 2026 and expires on 10 March 2027. [1] This revision is substantive. An AAE that conforms to -01 still conforms to this revision: every member added here is OPTIONAL, and the wire format and verification algorithm of -01 are unchanged for an envelope that does not use them. [1]",
   "v05_identity_sentence_md": "**Agent Authorization Envelope** (`AAE`), `draft-kroehl-agentic-trust-aae-02`, is an Independent Submission by L. K. Kroehl of CryptoKRI GmbH with intended status Informational. [1] The draft specifies a structured authorization container for autonomous AI agents and defines three mandatory blocks: MANDATE, CONSTRAINTS, and VALIDITY. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Permit](/category/permit/) (`permit`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "Lars Kersten Kroehl (CryptoKRI GmbH) [1]"
    },
    {
     "label": "Governed by",
     "value_md": "Independent Submission IETF Internet-Draft (`draft-kroehl-agentic-trust-aae-02`; not endorsed by the IETF) [1][2]"
    },
    {
     "label": "Track",
     "value_md": "IETF Internet-Draft (Informational) [3]"
    },
    {
     "label": "Status",
     "value_md": "Active Internet-Draft (-02, expires 2027-03-10) [1][3]"
    },
    {
     "label": "Version",
     "value_md": "`draft-kroehl-agentic-trust-aae-02` (published 6 September 2026; expires 10 March 2027) [1][3]"
    },
    {
     "label": "Wire format",
     "value_md": "JWS Compact Serialization (`alg: \"EdDSA\"`, `cty: \"aae+json\"`) wrapping a W3C Verifiable Credential v2 (`VerifiableCredential`, `AgentAuthorizationEnvelope`) [3]"
    },
    {
     "label": "Specification",
     "value_md": "https://datatracker.ietf.org/doc/html/draft-kroehl-agentic-trust-aae-02 [3]"
    },
    {
     "label": "Found at",
     "value_md": "Carried as a compact JWS (`cty: \"aae+json\"`, no fixed network discovery endpoint); signer verification via W3C DID key resolution and optional `validity.revocation_check` URI Template (illustrated in draft examples as `did:moltrust:registry#key-1` and `https://api.moltrust.ch/aae/revocation/{id}`) [1]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust Legal Provisions (BCP 78) [3]"
    },
    {
     "label": "IETF state",
     "value_md": "`draft-kroehl-agentic-trust-aae-02` · **Active Internet-Draft** (expires 2027-03-10) · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-kroehl-agentic-trust-aae/))"
    }
   ],
   "v05_problem_md": "When an autonomous agent initiates a request, the authorization may expire on a schedule that the receiving system must be able to verify without contacting the issuing party. [1] OAuth 2.0 scopes are issuer-defined strings without machine-evaluable semantics for agent mandates. [1] The specification defines no step in which the relying party contacts the originating organization for an authorization decision: the AAE carries the authorization and the relying party evaluates it. [1] The relying party MUST perform the checks in order. Steps 1-7 are REQUIRED. Steps 8-9 are conditional on presence of the relevant fields. [1] Verification requires no synchronous call to the originating organization, but characterising it as offline without qualification is inaccurate for any AAE that carries a delegation chain or a `revocation_check` member. [1] Section 5.2 defers four verification capabilities — ancestor retrieval by `delegator_aae_uri`, DID methods requiring outbound resolution, step-8 `revocation_check` lookups, and delegated signing authority — requiring conforming implementations to fail closed until an outbound egress-constraining proxy exists. [1]",
   "v05_mechanism_delta_md": "The specification defines no step in which the relying party contacts the originating organization for an authorization decision: the AAE carries the authorization and the relying party evaluates it. [1] The relying party MUST perform the checks in order. Steps 1-7 are REQUIRED. Steps 8-9 are conditional on presence of the relevant fields. [1]",
   "v05_scope_boundary_md": "Verification requires no synchronous call to the originating organization, but characterising it as offline without qualification is inaccurate for any AAE that carries a delegation chain or a `revocation_check` member. [1] Section 5.2 defers four verification capabilities — ancestor retrieval by `delegator_aae_uri`, DID methods requiring outbound resolution, step-8 `revocation_check` lookups, and delegated signing authority — requiring conforming implementations to fail closed until an outbound egress-constraining proxy exists. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "JSON Web Signature (JWS, RFC 7515)",
      "spec_or_rfc": "RFC 7515",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "The envelope is a JWS-secured W3C Verifiable Credential carrying a mandate, constraints, and a validity block, and relying parties run nine ordered checks including proof of key possession and revocation. [3][4]"
     },
     {
      "name": "W3C Decentralized Identifiers (DID 1.0) & Verifiable Credentials (VC 2.0)",
      "spec_or_rfc": "W3C DID 1.0",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "The envelope is a W3C Verifiable Credential secured by a JWS and carrying a mandate, constraints, and a validity block, and a delegated envelope may only narrow the parent's actions, caps, allowlists, and validity window. [3][5]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "wimse",
      "target_name": "Workload Identity in Multi System Environments (WIMSE)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "The wit+jwt Workload Identity Token in the Workload-Identity-Token header authenticates the workload, and the envelope is the separate JWS-secured Verifiable Credential the agent presents. [3][6]"
     },
     {
      "target_id": "spiffe",
      "target_name": "SPIFFE (Secure Production Identity Framework for Everyone)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "A SPIFFE X.509-SVID or JWT-SVID identifies the workload, while the envelope is a JWS-secured W3C Verifiable Credential carrying a mandate, constraints, and a validity block. [3][7]"
     },
     {
      "target_id": "erc-8226",
      "target_name": "ERC-8226 Regulated Agent Mandate",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ERC-8226 exposes IAgentMandate.canExecute and recordExecution, detected with ERC-165 supportsInterface, while this envelope is a JWS-secured Verifiable Credential checked without that contract interface. [3][8]"
     },
     {
      "target_id": "agent-delegation-receipts",
      "target_name": "Agent Delegation Receipts",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "A delegation receipt is a JWS over JCS-canonicalized JSON, or a COSE_Sign1, binding the operator-instruction hash, while this envelope is a JWS-secured Verifiable Credential carrying a mandate, constraints, and a validity block. [3][9]"
     },
     {
      "target_id": "oauth-agent-delegation",
      "target_name": "An Attenuated Delegation Profile for Automated Agents",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "Agent-Delegation is an HTTP header of r, w, and x links on an RFC 9421-signed request, each link narrowing scope, floors, and expiry, while the envelope is a JWS-secured Verifiable Credential. [3][10]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "aagv",
     "target_name": "Agentic Authority Graph Validation",
     "relation_label": "Complements",
     "delta": "The envelope is a JWS-secured Verifiable Credential carrying a mandate, constraints, and a validity block, while AAGV only returns INVALID, INDETERMINATE, VALID_OPEN, or VALID_CLOSED for an out-of-band JSON snapshot.",
     "item_md": "**[Agentic Authority Graph Validation](/protocols/aagv/)** (Complements) — The envelope is a JWS-secured Verifiable Credential carrying a mandate, constraints, and a validity block, while AAGV only returns INVALID, INDETERMINATE, VALID_OPEN, or VALID_CLOSED for an out-of-band JSON snapshot."
    },
    {
     "target_id": "haace",
     "target_name": "High-Assurance Agent Control Envelope",
     "relation_label": "Peer alternative",
     "delta": "The envelope is a JWS-secured Verifiable Credential carrying a mandate and a validity block, while HAACE checks the Action Request Record at execution time and records a non-bearer Action Decision Receipt.",
     "item_md": "**[High-Assurance Agent Control Envelope](/protocols/haace/)** (Peer alternative) — The envelope is a JWS-secured Verifiable Credential carrying a mandate and a validity block, while HAACE checks the Action Request Record at execution time and records a non-bearer Action Decision Receipt."
    },
    {
     "item_md": "**[Permit protocols](/category/permit/)** — Category index for `permit` standards."
    }
   ],
   "v05_compiled_md": "---\nid: agent-authorization-envelope\ntitle: \"Agent Authorization Envelope\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: permit\nform: document-format\nwire_archetype: identity_auth_crypto\nspec_url: https://datatracker.ietf.org/doc/html/draft-kroehl-agentic-trust-aae-02\nlast_checked: 2026-11-12\n---\n\n# Agent Authorization Envelope\n\n**Category:** [Permit](/category/permit/) (`permit`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-11-12\n\n**Agent Authorization Envelope** (`AAE`), `draft-kroehl-agentic-trust-aae-02`, is an Independent Submission by L. K. Kroehl of CryptoKRI GmbH with intended status Informational. [1] The draft specifies a structured authorization container for autonomous AI agents and defines three mandatory blocks: MANDATE, CONSTRAINTS, and VALIDITY. [1] An AAE is a W3C Verifiable Credential whose credentialSubject carries an aae object with three mandatory members: mandate, constraints, and validity. [1] On the wire, a secured AAE is a JWS in compact serialization. [1] The JWS Protected Header MUST contain `alg`, `cty`, and `kid`. `alg` MUST be `EdDSA`, and `cty` MUST be `aae+json`. [1] `draft-kroehl-agentic-trust-aae-02` is dated 6 September 2026 and expires on 10 March 2027. [1] This revision is substantive. An AAE that conforms to -01 still conforms to this revision: every member added here is OPTIONAL, and the wire format and verification algorithm of -01 are unchanged for an envelope that does not use them. [1]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Permit](/category/permit/) (`permit`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | Lars Kersten Kroehl (CryptoKRI GmbH) [1] |\n| **Governed by** | Independent Submission IETF Internet-Draft (`draft-kroehl-agentic-trust-aae-02`; not endorsed by the IETF) [1][2] |\n| **Track** | IETF Internet-Draft (Informational) [3] |\n| **Status** | Active Internet-Draft (-02, expires 2027-03-10) [1][3] |\n| **Version** | `draft-kroehl-agentic-trust-aae-02` (published 6 September 2026; expires 10 March 2027) [1][3] |\n| **Wire format** | JWS Compact Serialization (`alg: \"EdDSA\"`, `cty: \"aae+json\"`) wrapping a W3C Verifiable Credential v2 (`VerifiableCredential`, `AgentAuthorizationEnvelope`) [3] |\n| **Specification** | https://datatracker.ietf.org/doc/html/draft-kroehl-agentic-trust-aae-02 [3] |\n| **Found at** | Carried as a compact JWS (`cty: \"aae+json\"`, no fixed network discovery endpoint); signer verification via W3C DID key resolution and optional `validity.revocation_check` URI Template (illustrated in draft examples as `did:moltrust:registry#key-1` and `https://api.moltrust.ch/aae/revocation/{id}`) [1] |\n| **Licence** | IETF Trust Legal Provisions (BCP 78) [3] |\n| **IETF state** | `draft-kroehl-agentic-trust-aae-02` · **Active Internet-Draft** (expires 2027-03-10) · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-kroehl-agentic-trust-aae/)) |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nWhen an autonomous agent initiates a request, the authorization may expire on a schedule that the receiving system must be able to verify without contacting the issuing party. [1] OAuth 2.0 scopes are issuer-defined strings without machine-evaluable semantics for agent mandates. [1] The specification defines no step in which the relying party contacts the originating organization for an authorization decision: the AAE carries the authorization and the relying party evaluates it. [1] The relying party MUST perform the checks in order. Steps 1-7 are REQUIRED. Steps 8-9 are conditional on presence of the relevant fields. [1] Verification requires no synchronous call to the originating organization, but characterising it as offline without qualification is inaccurate for any AAE that carries a delegation chain or a `revocation_check` member. [1] Section 5.2 defers four verification capabilities — ancestor retrieval by `delegator_aae_uri`, DID methods requiring outbound resolution, step-8 `revocation_check` lookups, and delegated signing authority — requiring conforming implementations to fail closed until an outbound egress-constraining proxy exists. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **JSON Web Signature (JWS, RFC 7515)** | `RFC 7515` | Profiles classic standard | The envelope is a JWS-secured W3C Verifiable Credential carrying a mandate, constraints, and a validity block, and relying parties run nine ordered checks including proof of key possession and revocation. [3][4] |\n| **W3C Decentralized Identifiers (DID 1.0) & Verifiable Credentials (VC 2.0)** | `W3C DID 1.0` | Profiles classic standard | The envelope is a W3C Verifiable Credential secured by a JWS and carrying a mandate, constraints, and a validity block, and a delegated envelope may only narrow the parent's actions, caps, allowlists, and validity window. [3][5] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Workload Identity in Multi System Environments (WIMSE)](/protocols/wimse/)** | Complements | The wit+jwt Workload Identity Token in the Workload-Identity-Token header authenticates the workload, and the envelope is the separate JWS-secured Verifiable Credential the agent presents. [3][6] |\n| **[SPIFFE (Secure Production Identity Framework for Everyone)](/protocols/spiffe/)** | Complements | A SPIFFE X.509-SVID or JWT-SVID identifies the workload, while the envelope is a JWS-secured W3C Verifiable Credential carrying a mandate, constraints, and a validity block. [3][7] |\n| **[ERC-8226 Regulated Agent Mandate](/protocols/erc-8226/)** | Peer alternative | ERC-8226 exposes IAgentMandate.canExecute and recordExecution, detected with ERC-165 supportsInterface, while this envelope is a JWS-secured Verifiable Credential checked without that contract interface. [3][8] |\n| **[Agent Delegation Receipts](/protocols/agent-delegation-receipts/)** | Peer alternative | A delegation receipt is a JWS over JCS-canonicalized JSON, or a COSE_Sign1, binding the operator-instruction hash, while this envelope is a JWS-secured Verifiable Credential carrying a mandate, constraints, and a validity block. [3][9] |\n| **[An Attenuated Delegation Profile for Automated Agents](/protocols/oauth-agent-delegation/)** | Peer alternative | Agent-Delegation is an HTTP header of r, w, and x links on an RFC 9421-signed request, each link narrowing scope, floors, and expiry, while the envelope is a JWS-secured Verifiable Credential. [3][10] |\n\n---\n\n## See also\n\n- **[Agentic Authority Graph Validation](/protocols/aagv/)** *(Complements)* — The envelope is a JWS-secured Verifiable Credential carrying a mandate, constraints, and a validity block, while AAGV only returns INVALID, INDETERMINATE, VALID_OPEN, or VALID_CLOSED for an out-of-band JSON snapshot.\n- **[High-Assurance Agent Control Envelope](/protocols/haace/)** *(Peer alternative)* — The envelope is a JWS-secured Verifiable Credential carrying a mandate and a validity block, while HAACE checks the Action Request Record at execution time and records a non-bearer Action Decision Receipt.\n- **Category:** [Permit protocols](/category/permit/)\n\n---\n\n## References\n\n1. L. K. Kroehl (CryptoKRI GmbH), *Agent Authorization Envelope (AAE): A Machine-Evaluable Authorization Structure for Autonomous AI Agents (draft-kroehl-agentic-trust-aae-02)* (checked 2026-10-31) — <https://www.ietf.org/archive/id/draft-kroehl-agentic-trust-aae-02.txt>\n2. L. K. Kroehl (CryptoKRI GmbH), *draft-kroehl-agentic-trust-aae — Agent Authorization Envelope (AAE): A Machine-Evaluable Authorization Structure for Autonomous AI Agents (IETF Datatracker)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/draft-kroehl-agentic-trust-aae/>\n3. L. K. Kroehl (CryptoKRI GmbH), *Agent Authorization Envelope (AAE): A Machine-Evaluable Authorization Structure for Autonomous AI Agents (draft-kroehl-agentic-trust-aae-02 HTML)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/html/draft-kroehl-agentic-trust-aae-02>\n4. M. Jones, J. Bradley, and N. Sakimura, *RFC 7515: JSON Web Signature (JWS)* (May 2015) — <https://www.rfc-editor.org/rfc/rfc7515.html>\n5. W3C, *Decentralized Identifiers (DIDs) v1.0* (2022-07-19) — <https://www.w3.org/TR/did-core/>\n6. B. Campbell, J. Salowey, A. Schwenkschuster, Y. Sheffer, and Y. Rosomakho, *WIMSE Workload Credentials (draft-ietf-wimse-workload-creds-03)* (30 October 2026; expires 3 May 2027) — <https://www.ietf.org/archive/id/draft-ietf-wimse-workload-creds-03.txt>\n7. SPIFFE, *SPIFFE ID* (checked 2026-10-30) — <https://github.com/spiffe/spiffe/blob/main/standards/SPIFFE-ID.md>\n8. thamerdridi, *Update ERC-8226: add reference implementation and refine spec* (merged 2026-06-29; fetched 2026-10-31) — <https://github.com/ethereum/ERCs/pull/1844>\n9. R. Nelson (Authproof), *Agent Delegation Receipts (draft-nelson-agent-delegation-receipts-15 HTML)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/html/draft-nelson-agent-delegation-receipts-15>\n10. Amr Hassan (Independent), *An Attenuated Delegation Profile for Automated Agents (draft-hamr-oauth-agent-delegation-03)* (checked 2026-10-30) — <https://www.ietf.org/archive/id/draft-hamr-oauth-agent-delegation-03.txt>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "a2wp",
   "name": "Agent-to-Wallet Protocol for Digital Credentials",
   "acronym": "A2WP",
   "aliases": [
    "Agent-to-Wallet Protocol"
   ],
   "collisions": [],
   "step": "present",
   "parties": [
    "agent-agent"
   ],
   "form": "endpoint",
   "track": "ietf",
   "scope": "general",
   "question": "How can an AI agent hand a credential offer or presentation request to a wallet unchanged, so that credentials and keys never reach the agent, and still resume its task from the outcome and continuation?",
   "analog": "A delegation hand-off, similar to a browser passing a payment request to a separate wallet app, applied to OpenID4VCI and OpenID4VP requests",
   "origin": {
    "org": "T. S. Senarath (individual Internet-Draft, IETF Network Working Group)",
    "date": "2026-09-19"
   },
   "governance": "Individual Internet-Draft (Datatracker: Active Internet-Draft (individual)); not adopted by a working group. \"Network Working Group\" is only the draft header label",
   "native_status": "Internet-Draft, Intended Status: Standards Track; expires 20 April 2027; work in progress",
   "phase": "draft",
   "implementation": "none-found",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "version": {
    "label": "draft-senarath-a2wp-01",
    "date": "2026-10-17"
   },
   "spec_url": "https://datatracker.ietf.org/doc/html/draft-senarath-a2wp-01",
   "discovery": {
    "mechanism": "Not specified in the visible text; bindings (transport and agent authentication) are out of scope of the document",
    "path": null
   },
   "probe": {
    "method": "NONE",
    "path": "",
    "parse": "",
    "on_absent": "No public discovery mechanism is defined in the visible text, so support cannot be observed from a site."
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.ietf.org/archive/id/draft-senarath-a2wp-01.txt",
     "claim": "T. S. Senarath, *Agent-to-Wallet Protocol for Digital Credentials (A2WP) (draft-senarath-a2wp-01)*, checked 2026-10-31",
     "date": null,
     "quote": "Agent-to-Wallet Protocol for Digital Credentials (A2WP) draft-senarath-a2wp-01 ... credential offers and presentation requests ... passes such an offer or request to a Wallet exactly as it received it. / passes such an offer or request to a Wallet ... Submit: Takes a submission and returns an operation ... Get: Takes an operation id and returns the operation ... Cancel: Takes an operation id and returns the operation / status: REQUIRED string: pending, completed, failed or cancelled ... While an operation is pending, the Agent SHOULD keep calling Get until it is terminal. / T. S. Senarath Internet-Draft 17 October 2026 Intended status: Standards Track Expires: 20 April 2027 Agent-to-Wallet Protocol for Digital Credentials (A2WP) draft-senarath-a2wp-01 / Network Working Group T. S. Senarath Internet-Draft 17 October 2026 Intended status: Standards Track / Intended status: Standards Track / Agent; Senarath Expires 20 April 2027 [Page 3] Internet-Draft A2WP October 2026 * Wallet / its policy requires, and runs OpenID4VCI or OpenID4VP with the Issuer or Verifier. The / The following are out of scope: ... bindings, meaning how the calls are carried and how the Wallet authenticates the Agent / Copyright (c) 2026 IETF Trust and the persons identified as the document authors. / An AI Agent can be misled by the content it processes, so it should not possess credentials or keys, or decide what to disclose. / The Agent finds the offer or request and passes it to a Wallet exactly as it received it. The Wallet decides whether to act, asks the Principal when its policy requires, and runs OpenID4VCI or OpenID4VP with the Issuer or Verifier. The Agent sees only the operation's status, any link it must pass to the Principal, and the continuation. / The Wallet MUST NOT return to the Agent private keys, credentials, or the presentations it sends. / This document defines the messages and calls between an Agent and a Wallet (Section 3), and how OpenID4VCI and OpenID4VP requests map onto them (Section 4). ... The following are out of scope: ... bindings, meaning how the calls are carried and how the Wallet authenticates the Agent ... Wallet policy, meaning which Issuers and Verifiers it trusts and when it asks the Principal ... the interaction user interface ... credential formats and contents ... delegation mechanisms ... Wallet internals, such as storage and key management. / { \"id\": \"op_x2p9E4\", \"status\": \"completed\", \"continuation\": \"https://tickets.example/cb?response_code=091535f699ea575c7937fa5f0f454aee\" } The Agent opens the continuation in its browser session. / draft-senarath-a2wp-01 ... defines the messages and calls between an Agent and a Wallet ... The Wallet MUST NOT return to the Agent private keys, credentials, or the presentations it sends. ... The Wallet MUST scope operations to the Agent that submitted them, and MUST use credentials it acquired for an Agent only in that Agent's operations. ... Messages are JSON objects ... Recipients MUST ignore members they do not recognize. / request: REQUIRED string. The request exactly as the Agent received it ... The Agent MUST NOT modify the request and MUST NOT dereference it or anything in it. / If an Agent submits a request string it has submitted before, the Wallet MUST return the most recent operation for it, unless that operation ended before its commit point; the Wallet then MUST create a new operation. / id: REQUIRED string. Unique among the Wallet's operations for the Agent. status: REQUIRED string: pending, completed, failed or cancelled ... Present only while status is pending and the Wallet needs the Principal. ... Present only when status is completed or failed. / The pending status is the only nonterminal status. ... While an operation is pending, the Agent SHOULD keep calling Get until it is terminal. Cancel before the commit point stops the operation and returns it as cancelled ... After the commit point, or once the operation is completed or failed, Cancel is rejected with not-cancellable. / When the Wallet needs the Principal ... the operation stays pending and carries an interaction object ... The Agent SHOULD relay the URI to the Principal. ... The Wallet MUST obtain any secret the external protocol needs from the Principal, such as a transaction code, through interaction, never from the Agent. / If the counterparty returns a continuation, the Wallet MUST put it in the operation unchanged, whether the operation completed or failed. / It does not replace OpenID4VCI or OpenID4VP. The Wallet speaks those protocols; A2WP only connects the Agent to the Wallet. ... A mapping fixes, for one external protocol, what the Agent can observe. ... This document maps OpenID4VCI ... and OpenID4VP / Other requests are unsupported-request. ... An Agent treats an unrecognized code as processing-error. ... A Wallet MAY report denied in place of no-matching-credential. ... After outcome-unknown, the Agent MUST NOT submit a request for the same transaction again without the Principal's agreement; the issuance or presentation may already have happened. / A2WP limits the damage: the Agent never receives credentials, presentations or keys. The Agent does decide which requests to submit, and so, indirectly, what of its credentials is disclosed and to whom. Wallet policy and, where policy requires it, the Principal's approval bound those choices. A Wallet that approves every request automatically lets a manipulated Agent disclose anything its trust list allows. / A page can show a request taken from another party's session with the same Verifier; presenting then completes that other session. The continuation defends against this when the Verifier completes a session only once the continuation is redeemed in the session that showed the request, as with an OpenID4VP response code. / Network Working Group T. S. Senarath Internet-Draft 17 October 2026 Intended status: Standards Track Expires: 20 April 2027 Agent-to-Wallet Protocol for Digital Credentials (A2WP) draft-senarath-a2wp-01",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://datatracker.ietf.org/doc/html/draft-senarath-a2wp-01",
     "claim": "T. S. Senarath, *Agent-to-Wallet Protocol for Digital Credentials (A2WP) (draft-senarath-a2wp-01 HTML)*, checked 2026-10-31",
     "date": null,
     "quote": "Active Internet-Draft (individual) ... Published: ... 17 October 2026 / Internet-Draft, draft-gco-oauth-delegate-sd-jwt-00 , 21 April 2026 , < https://datatracker.ietf.org/doc/html/draft-gco-oauth-delegate-sd-jwt-00 > . Appendix A. Examples / Credential Offer with a pre-authorized code ... | issuance | ... redeeming the pre-authorized code ... every requested credential is obtained, validated and kept ... | Continuation | none / Authorization Request ... | presentation | ... sending the presentation ... the Verifier accepts the Authorization Response ... the redirect URI the Verifier returns",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://datatracker.ietf.org/doc/draft-senarath-a2wp/",
     "claim": "T. S. Senarath, *draft-senarath-a2wp — Agent-to-Wallet Protocol for Digital Credentials (A2WP) (IETF Datatracker)*, checked 2026-10-31",
     "date": null,
     "quote": "!IETF Logo!IETF Logo # Agent-to-Wallet Protocol for Digital Credentials (A2WP) draft-senarath-a2wp-01",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://openid.net/specs/openid-4-verifiable-credential-issuance-1_0.html",
     "claim": "OpenID Foundation, *OpenID for Verifiable Credential Issuance 1.0*, fetched 2026-11-12",
     "date": null,
     "quote": "This specification defines an API for the issuance of Verifiable Credentials. ¶",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://openid.net/specs/openid-4-verifiable-presentations-1_0.html",
     "claim": "OpenID Foundation, *OpenID for Verifiable Presentations 1.0*, fetched 2026-11-12",
     "date": null,
     "quote": "This specification defines a protocol for requesting and presenting Credentials. ¶",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://github.com/ag-ui-protocol/ag-ui/discussions/2792",
     "claim": "mme (ag-ui-protocol/ag-ui), *AG-UI 1.0 is officially released*, created 2026-09-18",
     "date": null,
     "quote": "Following the draft period and the feedback collected here, AG-UI 1.0 is now officially released and frozen.",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://aaif.io/blog/a2a-joins-aaif",
     "claim": "Agentic AI Foundation, *A2A joins AAIF's open agentic stack*, published 2026-08-17; modified 2026-09-24",
     "date": null,
     "quote": "A2A v1.0, the first stable specification, shipped in March 2026.",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/specification.md",
     "claim": "Google (google-agentic-commerce), *Agentic Payment Protocol (v0.2)*, fetched 2026-10-30",
     "date": null,
     "quote": "Agentic Payment Protocol (v0.2)",
     "ref": 8
    }
   ],
   "summary_md": "**Agent-to-Wallet Protocol for Digital Credentials** (`A2WP`), `draft-senarath-a2wp-01`, is an individual Internet-Draft for AI Agents acting for people and organizations when they meet credential offers and presentation requests. The Agent passes an offer or request to a Wallet via `Submit` (`Submit` takes a submission and returns an operation; `Get` takes an operation id and returns the operation; `Cancel` takes an operation id and returns the operation). `status` is a REQUIRED string (`pending`, `completed`, `failed`, or `cancelled`), and while an operation is `pending`, the Agent SHOULD keep calling `Get` until it is terminal. `draft-senarath-a2wp-01` by T. S. Senarath is an Internet-Draft with intended status Standards Track and expires 20 April 2027. The document type is Active Internet-Draft (individual), published 17 October 2026 (`2026-10-17`).",
   "part_of": null,
   "group": null,
   "use_cases": [
    "prove-agent-identity",
    "delegate-user-authority"
   ],
   "audience": [
    "agent-builder",
    "platform",
    "standards-body"
   ],
   "prerequisites": [],
   "pairs_with": [
    "ag-ui",
    "a2a",
    "ap2"
   ],
   "dispute": null,
   "last_verified": "2026-11-12",
   "history": [
    {
     "date": "2026-10-19",
     "note": "initial candidate record from primary source (https://datatracker.ietf.org/doc/html/draft-senarath-a2wp-01)"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-senarath-a2wp"
    }
   ],
   "ietf_tracker": {
    "doc": "draft-senarath-a2wp",
    "rev": "01",
    "state": "active",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-10-17",
    "expires_utc": "2027-04-20",
    "as_of": "2026-10-31",
    "source": "https://datatracker.ietf.org/doc/draft-senarath-a2wp/",
    "source_label": "per IETF Datatracker"
   },
   "hatnote_md": "",
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "harnesses_rpc_ui",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": null,
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Agent-to-Wallet Protocol for Digital Credentials** (`A2WP`), `draft-senarath-a2wp-01`, is an individual Internet-Draft for AI Agents acting for people and organizations when they meet credential offers and presentation requests. [1] The Agent passes an offer or request to a Wallet via `Submit` (`Submit` takes a submission and returns an operation; `Get` takes an operation id and returns the operation; `Cancel` takes an operation id and returns the operation). [1] `status` is a REQUIRED string (`pending`, `completed`, `failed`, or `cancelled`), and while an operation is `pending`, the Agent SHOULD keep calling `Get` until it is terminal. [1] `draft-senarath-a2wp-01` by T. S. Senarath is an Internet-Draft with intended status Standards Track and expires 20 April 2027. The document type is Active Internet-Draft (individual), published 17 October 2026 (`2026-10-17`). [1][2]",
   "v05_identity_sentence_md": "**Agent-to-Wallet Protocol for Digital Credentials** (`A2WP`), `draft-senarath-a2wp-01`, is an individual Internet-Draft for AI Agents acting for people and organizations when they meet credential offers and presentation requests. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Present](/category/present/) (`present`)"
    },
    {
     "label": "Form",
     "value_md": "Endpoint (`endpoint`)"
    },
    {
     "label": "Originated by",
     "value_md": "T. S. Senarath (Individual IETF Internet-Draft, Network Working Group) [1]"
    },
    {
     "label": "Governed by",
     "value_md": "Individual Internet-Draft submitted to the IETF (`draft-senarath-a2wp-01`, no formal IETF standing) [3]"
    },
    {
     "label": "Track",
     "value_md": "IETF Internet-Draft (Standards Track) [1]"
    },
    {
     "label": "Status",
     "value_md": "Internet-Draft, Intended Status: Standards Track; expires 20 April 2027; work in progress [1][2]"
    },
    {
     "label": "Version",
     "value_md": "`draft-senarath-a2wp-01` (Published 17 October 2026; expires 20 April 2027) [1]"
    },
    {
     "label": "Wire format",
     "value_md": "Abstract JSON call payloads (`Submit`, `Get`, `Cancel`) wrapping pass-through `OpenID4VCI` / `OpenID4VP` strings [1]"
    },
    {
     "label": "Specification",
     "value_md": "https://datatracker.ietf.org/doc/html/draft-senarath-a2wp-01 [2]"
    },
    {
     "label": "Found at",
     "value_md": "Bindings, meaning how the calls are carried and how the Wallet authenticates the Agent, are out of scope (Section 1.1) [1]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust Legal Provisions (BCP 78) [1]"
    },
    {
     "label": "IETF state",
     "value_md": "`draft-senarath-a2wp-01` · **Active Internet-Draft** (expires 2027-04-20) · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-senarath-a2wp/))"
    }
   ],
   "v05_problem_md": "An AI Agent can be misled by the content it processes, so it should not possess credentials or keys, or decide what to disclose. [1] The Agent finds the offer or request and passes it to a Wallet exactly as it received it. The Wallet decides whether to act, asks the Principal when its policy requires, and runs OpenID4VCI or OpenID4VP with the Issuer or Verifier. The Agent sees only the operation's status, any link it must pass to the Principal, and the continuation. [1] The Wallet MUST NOT return to the Agent private keys, credentials, or the presentations it sends. [1] The specification defines the messages and calls between an Agent and a Wallet, and how OpenID4VCI and OpenID4VP requests map onto them. Bindings, meaning how the calls are carried and how the Wallet authenticates the Agent, are out of scope. Wallet policy, the interaction user interface, credential formats and contents, delegation mechanisms, and Wallet internals, such as storage and key management, are out of scope. [1]",
   "v05_mechanism_delta_md": "The Agent finds the offer or request and passes it to a Wallet exactly as it received it. The Wallet decides whether to act, asks the Principal when its policy requires, and runs OpenID4VCI or OpenID4VP with the Issuer or Verifier. The Agent sees only the operation's status, any link it must pass to the Principal, and the continuation. [1] The Wallet MUST NOT return to the Agent private keys, credentials, or the presentations it sends. [1]",
   "v05_scope_boundary_md": "The specification defines the messages and calls between an Agent and a Wallet, and how OpenID4VCI and OpenID4VP requests map onto them. Bindings, meaning how the calls are carried and how the Wallet authenticates the Agent, are out of scope. Wallet policy, the interaction user interface, credential formats and contents, delegation mechanisms, and Wallet internals, such as storage and key management, are out of scope. [1]",
   "v05_fuzzy_additions": [
    {
     "id": "submit-get-cancel-and-the-operation-lifecycle",
     "heading": "Submit, Get, Cancel, and the operation lifecycle",
     "body_md": "`draft-senarath-a2wp-01` defines the messages and calls between an Agent and a Wallet. Messages are JSON objects. Recipients MUST ignore members they do not recognize. The Wallet MUST NOT return to the Agent private keys, credentials, or the presentations it sends. The Wallet MUST scope operations to the Agent that submitted them, and MUST use credentials it acquired for an Agent only in that Agent's operations. [1]",
     "bullets": [
      {
       "label": "Unmodified request string",
       "text_md": "`request` is a REQUIRED string, the request exactly as the Agent received it. The Agent MUST NOT modify the request and MUST NOT dereference it or anything in it. If an Agent submits a request string it has submitted before, the Wallet MUST return the most recent operation for it, unless that operation ended before its commit point; the Wallet then MUST create a new operation. [1]"
      },
      {
       "label": "Operation members",
       "text_md": "`id` is unique among the Wallet's operations for the Agent. `status` is `pending`, `completed`, `failed`, or `cancelled`. `interaction` is present only while status is pending and the Wallet needs the Principal. `continuation` is present only when status is completed or failed. [1]"
      },
      {
       "label": "Poll, terminal status, and Cancel",
       "text_md": "`pending` is the only nonterminal status. While an operation is pending, the Agent SHOULD keep calling Get until it is terminal. Cancel before the commit point stops the operation and returns it as `cancelled`. After the commit point, or once the operation is completed or failed, Cancel is rejected with `not-cancellable`. [1]"
      },
      {
       "label": "Interaction URI and continuation",
       "text_md": "When the Wallet needs the Principal, the operation stays pending and carries an interaction object. The Agent SHOULD relay the `uri` to the Principal. The Wallet MUST obtain any secret the external protocol needs from the Principal through interaction, never from the Agent. If the counterparty returns a continuation, the Wallet MUST put it in the operation unchanged, whether the operation completed or failed. [1]"
      }
     ]
    },
    {
     "id": "openid4vci-and-openid4vp-mappings-errors-and-agent-limits",
     "heading": "OpenID4VCI and OpenID4VP mappings, errors, and agent limits",
     "body_md": "A2WP does not replace OpenID4VCI or OpenID4VP. The Wallet speaks those protocols; A2WP only connects the Agent to the Wallet. A mapping fixes, for one external protocol, what the Agent can observe. The specification maps OpenID4VCI and OpenID4VP. [1]",
     "bullets": [
      {
       "label": "OpenID4VCI issuance row",
       "text_md": "The OpenID4VCI request is a Credential Offer with a pre-authorized code. The operation is `issuance`. The commit point is redeeming the pre-authorized code. The operation is completed when every requested credential is obtained, validated and kept. Continuation is `none`. [2]"
      },
      {
       "label": "OpenID4VP presentation row",
       "text_md": "The OpenID4VP request is an Authorization Request. The operation is `presentation`. The commit point is sending the presentation. The operation is completed when the Verifier accepts the Authorization Response. The continuation is the redirect URI the Verifier returns. [2]"
      },
      {
       "label": "Error codes that bind the Agent",
       "text_md": "Other requests are `unsupported-request`. An Agent treats an unrecognized code as `processing-error`. A Wallet MAY report `denied` in place of `no-matching-credential`. After `outcome-unknown`, the Agent MUST NOT submit a request for the same transaction again without the Principal's agreement; the issuance or presentation may already have happened. [1]"
      },
      {
       "label": "Manipulated agents and relayed requests",
       "text_md": "An AI Agent can be steered by instructions hidden in the content it processes. A2WP limits the damage: the Agent never receives credentials, presentations or keys. The Agent does decide which requests to submit, and so, indirectly, what of its credentials is disclosed and to whom. Wallet policy and Principal approval bound those choices; a Wallet that approves every request automatically lets a manipulated Agent disclose anything its trust list allows. A page can show a request taken from another party's session with the same Verifier; presenting then completes that other session. For relayed requests from another party's session, the continuation defends against session fixation only when the Verifier completes a session once the continuation is redeemed in the session that showed the request. [1]"
      }
     ]
    }
   ],
   "v05_diagram": null,
   "v05_wire_artifact": {
    "title": "Completed presentation operation with continuation",
    "heading": "Completed presentation operation with continuation",
    "lang": "json",
    "code": "{\n  \"id\": \"op_x2p9E4\",\n  \"status\": \"completed\",\n  \"continuation\": \"https://tickets.example/cb?response_code=091535f699ea575c7937fa5f0f454aee\"\n}",
    "caption_md": "The completed browser presentation operation carries `id` `op_x2p9E4`, `status` `completed`, and `continuation`. The Agent opens the continuation in its browser session. [1]"
   },
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "OpenID for Verifiable Credential Issuance 1.0",
      "spec_or_rfc": "OpenID4VCI 1.0",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "A2WP has the agent submit a credential offer exactly as received, the wallet runs OpenID4VCI with the issuer, and the agent polls status for a continuation while keys and credentials stay in the wallet, with transport out of scope. [2][4]"
     },
     {
      "name": "OpenID for Verifiable Presentations 1.0",
      "spec_or_rfc": "OpenID4VP 1.0",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "A2WP has the agent submit a presentation request exactly as received, the wallet runs OpenID4VP with the verifier, and the agent polls status for a continuation while keys and credentials stay in the wallet, with transport out of scope. [2][5]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "ag-ui",
      "target_name": "Agent-User Interaction Protocol (AG-UI)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "A2WP is the agent-to-wallet hand-off of OpenID4VCI and OpenID4VP requests, while AG-UI is an HTTP POST plus a required SSE stream for a user-facing run. [2][6]"
     },
     {
      "target_id": "a2a",
      "target_name": "Agent2Agent Protocol (A2A)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "A2A delegates a task between agents over JSON-RPC 2.0, gRPC, or HTTP+JSON using an Agent Card, while A2WP has the agent submit an OpenID4VCI or OpenID4VP request unchanged to a wallet and poll for a continuation. [2][7]"
     },
     {
      "target_id": "ap2",
      "target_name": "Agent Payments Protocol (AP2)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "AP2 is the verifiable-credential mandate protocol, while A2WP is the agent-to-wallet hand-off of OpenID4VCI and OpenID4VP requests and leaves transport out of scope. [2][8]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": "No independent production wallet or agent harness deployments of `draft-senarath-a2wp-01` (an individual IETF Internet-Draft published 17 October 2026, expiring 20 April 2027) have been verified in the wild. [1]",
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Present protocols](/category/present/)** — Category index for `present` standards."
    }
   ],
   "v05_compiled_md": "---\nid: a2wp\ntitle: \"Agent-to-Wallet Protocol for Digital Credentials\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: present\nform: endpoint\nwire_archetype: harnesses_rpc_ui\nspec_url: https://datatracker.ietf.org/doc/html/draft-senarath-a2wp-01\nlast_checked: 2026-11-12\n---\n\n# Agent-to-Wallet Protocol for Digital Credentials\n\n**Category:** [Present](/category/present/) (`present`) · **Form:** Endpoint (`endpoint`) · **Last checked:** 2026-11-12\n\n**Agent-to-Wallet Protocol for Digital Credentials** (`A2WP`), `draft-senarath-a2wp-01`, is an individual Internet-Draft for AI Agents acting for people and organizations when they meet credential offers and presentation requests. [1] The Agent passes an offer or request to a Wallet via `Submit` (`Submit` takes a submission and returns an operation; `Get` takes an operation id and returns the operation; `Cancel` takes an operation id and returns the operation). [1] `status` is a REQUIRED string (`pending`, `completed`, `failed`, or `cancelled`), and while an operation is `pending`, the Agent SHOULD keep calling `Get` until it is terminal. [1] `draft-senarath-a2wp-01` by T. S. Senarath is an Internet-Draft with intended status Standards Track and expires 20 April 2027. The document type is Active Internet-Draft (individual), published 17 October 2026 (`2026-10-17`). [1][2]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Present](/category/present/) (`present`) |\n| **Form** | Endpoint (`endpoint`) |\n| **Originated by** | T. S. Senarath (Individual IETF Internet-Draft, Network Working Group) [1] |\n| **Governed by** | Individual Internet-Draft submitted to the IETF (`draft-senarath-a2wp-01`, no formal IETF standing) [3] |\n| **Track** | IETF Internet-Draft (Standards Track) [1] |\n| **Status** | Internet-Draft, Intended Status: Standards Track; expires 20 April 2027; work in progress [1][2] |\n| **Version** | `draft-senarath-a2wp-01` (Published 17 October 2026; expires 20 April 2027) [1] |\n| **Wire format** | Abstract JSON call payloads (`Submit`, `Get`, `Cancel`) wrapping pass-through `OpenID4VCI` / `OpenID4VP` strings [1] |\n| **Specification** | https://datatracker.ietf.org/doc/html/draft-senarath-a2wp-01 [2] |\n| **Found at** | Bindings, meaning how the calls are carried and how the Wallet authenticates the Agent, are out of scope (Section 1.1) [1] |\n| **Licence** | IETF Trust Legal Provisions (BCP 78) [1] |\n| **IETF state** | `draft-senarath-a2wp-01` · **Active Internet-Draft** (expires 2027-04-20) · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-senarath-a2wp/)) |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Submit, Get, Cancel, and the operation lifecycle](#submit-get-cancel-and-the-operation-lifecycle)\n3. [OpenID4VCI and OpenID4VP mappings, errors, and agent limits](#openid4vci-and-openid4vp-mappings-errors-and-agent-limits)\n4. [Counterparts and related standards](#counterparts-and-related-standards)\n5. [Adoption and ecosystem](#adoption-and-ecosystem)\n6. [See also](#see-also)\n7. [References](#references)\n\n---\n\n## Problem and scope\n\nAn AI Agent can be misled by the content it processes, so it should not possess credentials or keys, or decide what to disclose. [1] The Agent finds the offer or request and passes it to a Wallet exactly as it received it. The Wallet decides whether to act, asks the Principal when its policy requires, and runs OpenID4VCI or OpenID4VP with the Issuer or Verifier. The Agent sees only the operation's status, any link it must pass to the Principal, and the continuation. [1] The Wallet MUST NOT return to the Agent private keys, credentials, or the presentations it sends. [1] The specification defines the messages and calls between an Agent and a Wallet, and how OpenID4VCI and OpenID4VP requests map onto them. Bindings, meaning how the calls are carried and how the Wallet authenticates the Agent, are out of scope. Wallet policy, the interaction user interface, credential formats and contents, delegation mechanisms, and Wallet internals, such as storage and key management, are out of scope. [1]\n\n### Completed presentation operation with continuation\n\n```json\n{\n  \"id\": \"op_x2p9E4\",\n  \"status\": \"completed\",\n  \"continuation\": \"https://tickets.example/cb?response_code=091535f699ea575c7937fa5f0f454aee\"\n}\n```\n\n*The completed browser presentation operation carries `id` `op_x2p9E4`, `status` `completed`, and `continuation`. The Agent opens the continuation in its browser session. [1]*\n\n---\n\n## Submit, Get, Cancel, and the operation lifecycle\n\n`draft-senarath-a2wp-01` defines the messages and calls between an Agent and a Wallet. Messages are JSON objects. Recipients MUST ignore members they do not recognize. The Wallet MUST NOT return to the Agent private keys, credentials, or the presentations it sends. The Wallet MUST scope operations to the Agent that submitted them, and MUST use credentials it acquired for an Agent only in that Agent's operations. [1]\n\n- **Unmodified request string:** `request` is a REQUIRED string, the request exactly as the Agent received it. The Agent MUST NOT modify the request and MUST NOT dereference it or anything in it. If an Agent submits a request string it has submitted before, the Wallet MUST return the most recent operation for it, unless that operation ended before its commit point; the Wallet then MUST create a new operation. [1]\n- **Operation members:** `id` is unique among the Wallet's operations for the Agent. `status` is `pending`, `completed`, `failed`, or `cancelled`. `interaction` is present only while status is pending and the Wallet needs the Principal. `continuation` is present only when status is completed or failed. [1]\n- **Poll, terminal status, and Cancel:** `pending` is the only nonterminal status. While an operation is pending, the Agent SHOULD keep calling Get until it is terminal. Cancel before the commit point stops the operation and returns it as `cancelled`. After the commit point, or once the operation is completed or failed, Cancel is rejected with `not-cancellable`. [1]\n- **Interaction URI and continuation:** When the Wallet needs the Principal, the operation stays pending and carries an interaction object. The Agent SHOULD relay the `uri` to the Principal. The Wallet MUST obtain any secret the external protocol needs from the Principal through interaction, never from the Agent. If the counterparty returns a continuation, the Wallet MUST put it in the operation unchanged, whether the operation completed or failed. [1]\n\n---\n\n## OpenID4VCI and OpenID4VP mappings, errors, and agent limits\n\nA2WP does not replace OpenID4VCI or OpenID4VP. The Wallet speaks those protocols; A2WP only connects the Agent to the Wallet. A mapping fixes, for one external protocol, what the Agent can observe. The specification maps OpenID4VCI and OpenID4VP. [1]\n\n- **OpenID4VCI issuance row:** The OpenID4VCI request is a Credential Offer with a pre-authorized code. The operation is `issuance`. The commit point is redeeming the pre-authorized code. The operation is completed when every requested credential is obtained, validated and kept. Continuation is `none`. [2]\n- **OpenID4VP presentation row:** The OpenID4VP request is an Authorization Request. The operation is `presentation`. The commit point is sending the presentation. The operation is completed when the Verifier accepts the Authorization Response. The continuation is the redirect URI the Verifier returns. [2]\n- **Error codes that bind the Agent:** Other requests are `unsupported-request`. An Agent treats an unrecognized code as `processing-error`. A Wallet MAY report `denied` in place of `no-matching-credential`. After `outcome-unknown`, the Agent MUST NOT submit a request for the same transaction again without the Principal's agreement; the issuance or presentation may already have happened. [1]\n- **Manipulated agents and relayed requests:** An AI Agent can be steered by instructions hidden in the content it processes. A2WP limits the damage: the Agent never receives credentials, presentations or keys. The Agent does decide which requests to submit, and so, indirectly, what of its credentials is disclosed and to whom. Wallet policy and Principal approval bound those choices; a Wallet that approves every request automatically lets a manipulated Agent disclose anything its trust list allows. A page can show a request taken from another party's session with the same Verifier; presenting then completes that other session. For relayed requests from another party's session, the continuation defends against session fixation only when the Verifier completes a session once the continuation is redeemed in the session that showed the request. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **OpenID for Verifiable Credential Issuance 1.0** | `OpenID4VCI 1.0` | Profiles classic standard | A2WP has the agent submit a credential offer exactly as received, the wallet runs OpenID4VCI with the issuer, and the agent polls status for a continuation while keys and credentials stay in the wallet, with transport out of scope. [2][4] |\n| **OpenID for Verifiable Presentations 1.0** | `OpenID4VP 1.0` | Profiles classic standard | A2WP has the agent submit a presentation request exactly as received, the wallet runs OpenID4VP with the verifier, and the agent polls status for a continuation while keys and credentials stay in the wallet, with transport out of scope. [2][5] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Agent-User Interaction Protocol (AG-UI)](/protocols/ag-ui/)** | Peer alternative | A2WP is the agent-to-wallet hand-off of OpenID4VCI and OpenID4VP requests, while AG-UI is an HTTP POST plus a required SSE stream for a user-facing run. [2][6] |\n| **[Agent2Agent Protocol (A2A)](/protocols/a2a/)** | Complements | A2A delegates a task between agents over JSON-RPC 2.0, gRPC, or HTTP+JSON using an Agent Card, while A2WP has the agent submit an OpenID4VCI or OpenID4VP request unchanged to a wallet and poll for a continuation. [2][7] |\n| **[Agent Payments Protocol (AP2)](/protocols/ap2/)** | Complements | AP2 is the verifiable-credential mandate protocol, while A2WP is the agent-to-wallet hand-off of OpenID4VCI and OpenID4VP requests and leaves transport out of scope. [2][8] |\n\n---\n\n## Adoption and ecosystem\n\nNo independent production wallet or agent harness deployments of `draft-senarath-a2wp-01` (an individual IETF Internet-Draft published 17 October 2026, expiring 20 April 2027) have been verified in the wild. [1]\n\n---\n\n## See also\n\n- **Category:** [Present protocols](/category/present/)\n\n---\n\n## References\n\n1. T. S. Senarath, *Agent-to-Wallet Protocol for Digital Credentials (A2WP) (draft-senarath-a2wp-01)* (checked 2026-10-31) — <https://www.ietf.org/archive/id/draft-senarath-a2wp-01.txt>\n2. T. S. Senarath, *Agent-to-Wallet Protocol for Digital Credentials (A2WP) (draft-senarath-a2wp-01 HTML)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/html/draft-senarath-a2wp-01>\n3. T. S. Senarath, *draft-senarath-a2wp — Agent-to-Wallet Protocol for Digital Credentials (A2WP) (IETF Datatracker)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/draft-senarath-a2wp/>\n4. OpenID Foundation, *OpenID for Verifiable Credential Issuance 1.0* (fetched 2026-11-12) — <https://openid.net/specs/openid-4-verifiable-credential-issuance-1_0.html>\n5. OpenID Foundation, *OpenID for Verifiable Presentations 1.0* (fetched 2026-11-12) — <https://openid.net/specs/openid-4-verifiable-presentations-1_0.html>\n6. mme (ag-ui-protocol/ag-ui), *AG-UI 1.0 is officially released* (created 2026-09-18) — <https://github.com/ag-ui-protocol/ag-ui/discussions/2792>\n7. Agentic AI Foundation, *A2A joins AAIF's open agentic stack* (published 2026-08-17; modified 2026-09-24) — <https://aaif.io/blog/a2a-joins-aaif>\n8. Google (google-agentic-commerce), *Agentic Payment Protocol (v0.2)* (fetched 2026-10-30) — <https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/specification.md>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "agent-decision-commitment",
   "name": "Agent Decision Commitments for Payments",
   "acronym": "ADC",
   "aliases": [
    "Agent Decision Commitment"
   ],
   "collisions": [],
   "step": "account",
   "parties": [
    "agent-payment",
    "agent-agent"
   ],
   "form": "document-format",
   "track": "ietf",
   "scope": "payments",
   "question": "How can an agent's payment decision, including the content it gave the model, be committed to before payment and later disclosed to dispute participants for verification?",
   "analog": "A sealed, timestamped receipt of what the agent read before it paid, openable only in a dispute.",
   "origin": {
    "org": "F. H. D. Milan (individual IETF submission)",
    "date": "2026-10-15"
   },
   "governance": "Individual Internet-Draft; discussion on DISPATCH, SCITT and OAuth mailing lists",
   "native_status": "Internet-Draft, Intended Status: Experimental; expires 18 April 2027",
   "phase": "draft",
   "implementation": "none-found",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "version": {
    "label": "draft-milan-agent-decision-commitment-00",
    "date": "2026-10-15"
   },
   "spec_url": "https://datatracker.ietf.org/doc/html/draft-milan-agent-decision-commitment-00",
   "discovery": {
    "mechanism": "Decision context claim (JWT claim \"decision_context\") carried in a payment mandate or payload; commitment registered with a SCITT transparency service",
    "path": null
   },
   "probe": {
    "method": "NONE",
    "path": "",
    "parse": "",
    "on_absent": "No public discovery endpoint; support could only be observed by inspecting payment mandates for a decision_context claim."
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.ietf.org/archive/id/draft-milan-agent-decision-commitment-00.txt",
     "claim": "F. H. D. Milan, *Agent Decision Commitments for Payments (draft-milan-agent-decision-commitment-00)*, checked 2026-10-31",
     "date": null,
     "quote": "Internet-Draft 15 October 2026 Intended status: Experimental Expires: 18 April 2027 Agent Decision Commitments for Payments draft-milan-agent-decision-commitment-00 / This document defines the Agent Decision Commitment (ADC): a salted hash commitment to a decision record that identifies the content the agent provided to the model interface (after any agent-side transformation), the model calls made, and the resulting answer and action. / The commitment is carried as a single selectively disclosable claim in an existing payment mandate or payment payload / by default, registered with a transparency service before the payment is authorized / The decision record and its content remain with the holder and are disclosed only to dispute participants, who can verify them against the mandate and the transparency service / This Internet-Draft will expire on 18 April 2027. ... This document is an individual submission. ... Discussion is invited on the DISPATCH mailing list (dispatch@ietf.org), and on the SCITT (scitt@ietf.org) and OAuth (oauth@ietf.org) working group lists, since this document uses the SCITT architecture [RFC9943] and SD-JWT [RFC9901]. / and on the SCITT (scitt@ietf.org) and OAuth (oauth@ietf.org) working group lists, since this document / SCITT (scitt@ietf.org) and OAuth (oauth@ietf.org) working group lists, since this document uses the SCITT / Intended status: Experimental / Milan Internet-Draft 15 October 2026 Intended status: Experimental Expires: 18 April 2027 Agent Decision / | Milan Expires 18 April 2027 [Page 7] Internet-Draft Agent Decision Commitments October 2026 / Claim C = BASE64URL(SHA-256(salt || CANON(record))) The decision context claim is: {\"v\":1,\"alg\":\"sha-256\",\"commitment\":\"\",\"receipt_uri\":\"\", \"profile\":\"\"} \"receipt_uri\" / Copyright (c) 2026 IETF Trust and the persons identified as the document authors. / Mandate formats such as Verifiable Intent [VI] and the Agent Payments Protocol [AP2] bind a principal's authorization to an agent key. Merchant-signed checkout objects record what was bought, and payment receipts and settlement record that value moved. None of these records what the agent relied on when it chose. ... a misread invoice or a fraudulent payee that fits the budget. The second is the manipulated agent: content the agent read, including text embedded in images / The holder of the agent's records computes a decision record that identifies, by salted digests, every item provided to the deciding model ... registers it with a transparency service [RFC9943] before the payment is authorized. In a dispute, the holder discloses the record, the salts and the content to authorized verifiers ... use the witnessed reciprocal exchange (Section 8) / transformations applied by a provider after receipt are visible only through provider attestation (Section 6.5). / ADC produces evidence. It does not allocate liability among principals, holders, merchants, issuers, acquirers, networks, or model providers ... Verifiers report the attestation level and step results defined in Section 6.5, not a verdict. / The decision context claim is: {\"v\":1,\"alg\":\"sha-256\",\"commitment\":\"\",\"receipt_uri\":\"\", \"profile\":\"\"} / decision_context / decline\", or an extension value in the form of a URI. / The holder MUST list every input to every model call covered by the decision, including instructions, tool definitions, prior turns, retrieved content, and media, and MUST include the raw provider response for each call with role \"response\" / In JWT-based mandates, the claim is carried as an ordinary SD-JWT disclosure [RFC9901]: it is not canonicalized, its member order is whatever the issuer serialized, and its digest is computed over the base64url-encoded disclosure string as RFC 9901 specifies. Verifiers MUST use the received disclosure string and MUST NOT re-serialize the claim. / The commitment salt is distinct from any SD-JWT disclosure salt and is released only under Section 6. / Unless the profile permits late registration, the holder MUST register an anchor statement with at least one transparency service [RFC9943] before the mandate or payment payload that carries the claim is signed. / The holder MUST create a decision record for every covered decision, including decisions whose action is \"decline\", and MUST assign consecutive sequence numbers per chain. The \"prev\" member links each record to its predecessor, so that a missing record appears as a gap. / this document uses the SCITT architecture [RFC9943] and SD-JWT [RFC9901]. / COSE_Sign1 ... registers it with a transparency service [RFC9943] before the payment is authorized. / Network Working Group F. H. D. Milan Internet-Draft 15 October 2026 Intended status: Experimental Expires: 18 April 2027 Agent Decision Commitments for Payments draft-milan-agent-decision-commitment-00",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://datatracker.ietf.org/doc/html/draft-milan-agent-decision-commitment-00",
     "claim": "F. H. D. Milan, *Agent Decision Commitments for Payments (draft-milan-agent-decision-commitment-00 HTML)*, checked 2026-10-31",
     "date": null,
     "quote": "Select version 00 Author Fernando Henrique D. Milan Email authors RFC stream (None) Intended / is level A0. checkout_digest is BASE64URL(SHA-256(CANON(accepted payment requirements))). Payee is the \"payTo\" value and / \"receipt_uri\" is an HTTPS URI at which disclosure requests for this record are made ... Verifiable Intent and the Agent Payments Protocol ... x402 ... set the 32-octet nonce / 7.4. Account-to-Account Credit Transfers For ISO 20022 credit transfers [ISO20022], including instant schemes, the holder places \"ADC1:\" followed by the lowercase hexadecimal encoding of the 32 octets of the commitment in the unstructured remittance information (69 characters) / 7.5. Card Authorization Messages Card authorization and authentication messages do not carry the claim. ... This document defines no binding for authorization messages. / When the policy permits, the holder returns a release object of type \"adc-release\" / 13.1. JSON Web Token Claims Registration IANA is requested to register the following claim in the \"JSON Web Token Claims\" registry ... decision_context ... 13.2. Media Type Registrations IANA is requested to register the following media types ... application/adc-anchor+json ... application/adc-release+json ... application/adc-exchange+json / The holder MUST retain the transparency receipt. / The credential MUST be audience-restricted to the holder, sender-constrained (for example with DPoP [RFC9449]), short-lived, and bound to the transaction / A0 The record matches a commitment carried in a field not signed by the agent, the principal, or the payer. ... A3 A2, every model call carries an attestation / The holder MUST reject a request whose request_id it has already accepted within the lifetime of the credential, and a request whose issued_at lies outside the profile's tolerance (60 seconds if unspecified). / A0 The record matches a commitment carried in a field not signed by the agent, the principal, or the payer. A1 The commitment is covered by the signature of the agent, the principal, or the payer (including the x402 nonce construction), and steps 2 to 5 succeed. The verifier reports which party signed. A2 A1, and step 6 succeeds: the anchor was registered in time, and the anchored chain values are consistent with the record and with any neighboring anchors obtained. A3 A2, every model call carries an attestation, and step 7 succeeds for every model call. / A late or missing anchor caps the level at A1, and the verifier reports the delay; a timely anchor for an A0 commitment is reported alongside A0. No level asserts that the receipt lists every input to the model. / If any of steps 1 to 5 yields \"fail\" or \"unsupported\", no level is reported. / In Autonomous mode, the agent includes \"decision_context\" as an additional selectively disclosable claim in both the Layer 3a payment payload and the Layer 3b checkout payload / the client SHOULD set the 32-octet nonce to SHA-256(BASE64URL-DECODE(C) || r), where r is 16 random octets that the holder retains with the record and returns, as \"nonce_random\", in the release (Section 6.2); the 32-octet value is encoded as the payment scheme requires (for example as a decimal string for Permit2). Without this construction, the binding is level A0. / its digest is computed over the base64url-encoded disclosure string as RFC 9901 specifies. / The anchor is a Signed Statement as defined in [RFC9943]: a COSE\\_Sign1 message [RFC9052]",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://datatracker.ietf.org/doc/draft-milan-agent-decision-commitment/",
     "claim": "F. H. D. Milan (IETF Datatracker), *draft-milan-agent-decision-commitment — Agent Decision Commitments for Payments (IETF Datatracker)*, checked 2026-10-31",
     "date": null,
     "quote": "Expires 18 April 2027 [Page 2] Internet-Draft Agent Decision Commitments October 2026 5.7. CDDL / hash of a decision record defined in Section 5.4. Decision context claim: The JSON",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://www.rfc-editor.org/rfc/rfc9901.html",
     "claim": "D. Fett, K. Yasuda, and B. Campbell, *RFC 9901: Selective Disclosure for JSON Web Tokens*, November 2025",
     "date": null,
     "quote": "RFC 9901: Selective Disclosure for JSON Web Tokens",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://www.rfc-editor.org/rfc/rfc9943.html",
     "claim": "H. Birkholz, A. Delignat-Lavaud, C. Fournet, Y. Deshpande, and S. Lasker, *RFC 9943: An Architecture for Trustworthy and Transparent Digital Supply Chains*, June 2026",
     "date": null,
     "quote": "RFC 9943: An Architecture for Trustworthy and Transparent Digital Supply Chains",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/specification.md",
     "claim": "Google (google-agentic-commerce), *Agentic Payment Protocol (v0.2)*, fetched 2026-10-30",
     "date": null,
     "quote": "Agentic Payment Protocol (v0.2)",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://verifiableintent.dev/spec/",
     "claim": "Verifiable Intent Working Group, *Verifiable Intent (VI) — Specification Overview (v0.1-draft)*, 2026-02-18 (v0.1-draft); fetched 2026-10-31",
     "date": null,
     "quote": "Overview¶ Version: 0.1-draft Status: Draft Date: 2026-02-18 Authors: Verifiable Intent Working Group Abstract¶ Verifiable",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://www.ietf.org/archive/id/draft-emirdag-scitt-ai-agent-execution-01.txt",
     "claim": "Pinar Emirdag and Daniel Feichtinger (Veridic Inc.), *AI Agent Execution Profile of SCITT (draft-emirdag-scitt-ai-agent-execution-01)*, 2026-10-12",
     "date": "2026-10-12",
     "quote": "Expires 15 April 2027 [Page 5] Internet-Draft SCITT AI Agent Execution October 2026 AgentInteractionRecord",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/checkout_mandate.md",
     "claim": "Google Agentic Commerce, *AP2 Specification: Checkout Mandate*, v0.2.0; fetched 2026-10-31",
     "date": null,
     "quote": "Versioning for how the version suffix works. ## Mandate Schema The closed Checkout Mandate",
     "ref": 9
    }
   ],
   "summary_md": "**Agent Decision Commitments for Payments** (`draft-milan-agent-decision-commitment-00`) is an Internet-Draft dated 15 October 2026 with intended status Experimental. It defines the **Agent Decision Commitment** (**ADC**): a salted hash commitment to a decision record that identifies the content the agent provided to the model interface (after any agent-side transformation), the model calls made, and the resulting answer and action. The commitment is carried as a single selectively disclosable claim in an existing payment mandate or payment payload. By default, the commitment is registered with a transparency service before the payment is authorized. The decision record and its content remain with the holder and are disclosed only to dispute participants, who can verify them against the mandate and the transparency service. Submitted as an individual Internet-Draft expiring 18 April 2027, `draft-milan-agent-decision-commitment-00` directs technical discussion to the IETF `DISPATCH`, `SCITT`, and `OAuth` mailing lists given its reliance on SCITT (`RFC9943`) and SD-JWT (`RFC9901`).",
   "part_of": null,
   "group": null,
   "use_cases": [
    "audit-agent-actions",
    "agent-checkout"
   ],
   "audience": [
    "standards-body",
    "agent-builder",
    "platform"
   ],
   "pairs_with": [
    "ap2",
    "vi",
    "scitt-ai-agent-execution",
    "ap2-checkout-mandate"
   ],
   "prerequisites": [
    "ap2"
   ],
   "dispute": null,
   "last_verified": "2026-11-12",
   "history": [
    {
     "date": "2026-10-19",
     "note": "initial candidate record from primary source (https://datatracker.ietf.org/doc/html/draft-milan-agent-decision-commitment-00)"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-milan-agent-decision-commitment"
    }
   ],
   "ietf_tracker": {
    "doc": "draft-milan-agent-decision-commitment",
    "rev": "00",
    "state": "active",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-10-15",
    "expires_utc": "2027-04-18",
    "as_of": "2026-10-31",
    "source": "https://datatracker.ietf.org/doc/draft-milan-agent-decision-commitment/",
    "source_label": "per IETF Datatracker"
   },
   "hatnote_md": "",
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": null,
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Agent Decision Commitments for Payments** (`draft-milan-agent-decision-commitment-00`) is an Internet-Draft dated 15 October 2026 with intended status Experimental. [1] It defines the **Agent Decision Commitment** (**ADC**): a salted hash commitment to a decision record that identifies the content the agent provided to the model interface (after any agent-side transformation), the model calls made, and the resulting answer and action. [1] The commitment is carried as a single selectively disclosable claim in an existing payment mandate or payment payload. [1] By default, the commitment is registered with a transparency service before the payment is authorized. [1] The decision record and its content remain with the holder and are disclosed only to dispute participants, who can verify them against the mandate and the transparency service. [1] Submitted as an individual Internet-Draft expiring 18 April 2027, `draft-milan-agent-decision-commitment-00` directs technical discussion to the IETF `DISPATCH`, `SCITT`, and `OAuth` mailing lists given its reliance on SCITT (`RFC9943`) and SD-JWT (`RFC9901`). [1]",
   "v05_identity_sentence_md": "**Agent Decision Commitments for Payments** (`draft-milan-agent-decision-commitment-00`) is an Internet-Draft dated 15 October 2026 with intended status Experimental. [1] It defines the **Agent Decision Commitment** (**ADC**): a salted hash commitment to a decision record that identifies the content the agent provided to the model interface (after any agent-side transformation), the model calls made, and the resulting answer and action. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Account](/category/account/) (`account`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "Fernando Henrique D. Milan (Mechanist AI) [2]"
    },
    {
     "label": "Governed by",
     "value_md": "Individual IETF Internet-Draft submission (discussion on IETF `DISPATCH`, `SCITT`, and `OAuth` working group lists) [1]"
    },
    {
     "label": "Track",
     "value_md": "IETF Internet-Draft (Experimental) [1]"
    },
    {
     "label": "Status",
     "value_md": "Internet-Draft, Intended Status: Experimental; expires 18 April 2027 [1][3]"
    },
    {
     "label": "Version",
     "value_md": "`draft-milan-agent-decision-commitment-00` (published 15 October 2026, expires 18 April 2027; schema `\"v\":1`) [1][3]"
    },
    {
     "label": "Wire format",
     "value_md": "Selectively disclosable `decision_context` JSON claim via SD-JWT (`RFC 9901`), CDDL data model structures, `BASE64URL` `SHA-256` digest over concatenated `salt` and `CANON(record)`, and SCITT (`RFC 9943`) receipts [1][2][3]"
    },
    {
     "label": "Specification",
     "value_md": "https://datatracker.ietf.org/doc/html/draft-milan-agent-decision-commitment-00 [1]"
    },
    {
     "label": "Found at",
     "value_md": "`decision_context` SD-JWT claim and `receipt_uri` field in payment mandates or payloads across Verifiable Intent, Agent Payments Protocol (`AP2`), and `x402` (32-octet nonce), plus `ADC1:` 69-character hexadecimal remittance commitment in ISO 20022 account-to-account credit transfers (no binding is defined for card authorization messages) [2]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust Legal Provisions (BCP 78) [1]"
    },
    {
     "label": "IETF state",
     "value_md": "`draft-milan-agent-decision-commitment-00` · **Active Internet-Draft** (expires 2027-04-18) · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-milan-agent-decision-commitment/))"
    }
   ],
   "v05_problem_md": "Mandate formats such as Verifiable Intent and `AP2`, merchant-signed checkout objects, and settlement receipts prove principal authorization, purchased items, and value transfer, yet omit the inputs an agent relied on — leaving authorized-but-wrong purchases (such as misread invoices) and prompt- or image-manipulated decisions unevidenced. [1] A record holder hashes each post-transformation model input with a fresh salt, anchors the commitment chain in a SCITT (`RFC9943`) transparency service, and selectively discloses the signed `adc-release` record and salts via `receipt_uri` during a dispute (with Section 8 witnessed reciprocal exchange covering bilateral counterparty messages). [1][2] ADC remains liability-neutral: verifiers report attestation levels and step results rather than legal verdicts, and provider-side media resampling after receipt is visible only through provider attestation. [1] Section 13 requests IANA registration of the `decision_context` JWT claim and the `application/adc-anchor+json`, `application/adc-release+json`, and `application/adc-exchange+json` media types (unregistered draft requests). [2]",
   "v05_mechanism_delta_md": "A record holder hashes each post-transformation model input with a fresh salt, anchors the commitment chain in a SCITT (`RFC9943`) transparency service, and selectively discloses the signed `adc-release` record and salts via `receipt_uri` during a dispute (with Section 8 witnessed reciprocal exchange covering bilateral counterparty messages). [1][2]",
   "v05_scope_boundary_md": "ADC remains liability-neutral: verifiers report attestation levels and step results rather than legal verdicts, and provider-side media resampling after receipt is visible only through provider attestation. [1] Section 13 requests IANA registration of the `decision_context` JWT claim and the `application/adc-anchor+json`, `application/adc-release+json`, and `application/adc-exchange+json` media types (unregistered draft requests). [2]",
   "v05_fuzzy_additions": [
    {
     "id": "decision-record-commitment-and-holder-chain",
     "heading": "Decision record, commitment, and holder chain",
     "body_md": "`draft-milan-agent-decision-commitment-00` binds an agent's pre-action reasoning inputs to a compact `decision_context` claim without exposing raw prompts or model weights on the payment or authorization wire. Holders maintain a hash-linked chain across covered decisions—including `decline` outcomes—and register commitment anchors in transparency logs. [1]",
     "bullets": [
      {
       "label": "Model inputs",
       "text_md": "The holder MUST list every input to every model call covered by the decision, including instructions, tool definitions, prior turns, retrieved content, and media, and MUST include the raw provider response for each call with role `response`. [1]"
      },
      {
       "label": "Selective disclosure",
       "text_md": "In JWT-based mandates, the claim is carried as an ordinary SD-JWT disclosure. Verifiers MUST use the received disclosure string and MUST NOT re-serialize the claim. The commitment salt is distinct from any SD-JWT disclosure salt and is released only under Section 6. [1]"
      },
      {
       "label": "Anchor registration",
       "text_md": "Unless the profile permits late registration, the holder MUST register an anchor statement with at least one transparency service before the mandate or payment payload that carries the claim is signed. The holder MUST retain the transparency receipt. [1][2]"
      },
      {
       "label": "Decline chain",
       "text_md": "The holder MUST create a decision record for every covered decision, including decisions whose action is `decline`, and MUST assign consecutive sequence numbers per chain. The `prev` member links each record to its predecessor, so that a missing record appears as a gap. [1]"
      }
     ]
    },
    {
     "id": "disclosure-attestation-levels-and-payment-bindings",
     "heading": "Disclosure, attestation levels, and payment bindings",
     "body_md": "Post-hoc audit access uses short-lived, sender-constrained disclosure credentials, while verifiers grade evidence across tiered attestation levels (`A0` through `A3`) and embed `decision_context` inside autonomous payment payloads such as Verifiable Intent and AP2 mandates. [1][2]",
     "bullets": [
      {
       "label": "Disclosure request",
       "text_md": "The credential MUST be audience-restricted to the holder, sender-constrained, short-lived, and bound to the transaction. The holder MUST reject a request whose `request_id` it has already accepted within the lifetime of the credential, and a request whose `issued_at` lies outside the profile's tolerance (60 seconds if unspecified). [2]"
      },
      {
       "label": "Attestation levels",
       "text_md": "A0 is a record that matches a commitment carried in a field not signed by the agent, the principal, or the payer. A1 requires that the commitment is covered by the signature of the agent, the principal, or the payer, including the x402 nonce construction, and that steps 2 to 5 succeed. A2 requires A1, and step 6 succeeds: the anchor was registered in time, and the anchored chain values are consistent with the record. A3 is A2, every model call carries an attestation, and step 7 succeeds for every model call. [2]"
      },
      {
       "label": "Level limits",
       "text_md": "A late or missing anchor caps the level at A1. No level asserts that the receipt lists every input to the model. If any of steps 1 to 5 yields `fail` or `unsupported`, no level is reported. [2]"
      },
      {
       "label": "Rail bindings",
       "text_md": "In Verifiable Intent Autonomous mode, the agent includes `decision_context` in both the Layer 3a payment payload and the Layer 3b checkout payload, with the same claim value. The claim MUST NOT be expressed as a constraint. The agent includes `decision_context` as a selectively disclosable claim of the closed Checkout Mandate (`mandate.checkout.1`). The claim MUST NOT appear in open mandates or constraints. For x402, the client SHOULD set the 32-octet nonce to `SHA-256(BASE64URL-DECODE(C) || r)`. Without this construction, the binding is level A0. The specification defines no binding for card authorization messages. [2]"
      }
     ]
    }
   ],
   "v05_diagram": null,
   "v05_wire_artifact": {
    "title": "Decision context claim (`decision_context`)",
    "heading": "Decision context claim (`decision_context`)",
    "lang": "json",
    "code": "{\"v\":1,\"alg\":\"sha-256\",\"commitment\":\"\",\"receipt_uri\":\"\",\n\"profile\":\"\"}",
    "caption_md": "The decision context claim is a JSON object with `v` set to 1, `alg` set to `sha-256`, and empty `commitment`, `receipt_uri`, and `profile` strings. [1]"
   },
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "Selective Disclosure for JSON Web Tokens (SD-JWT, RFC 9901)",
      "spec_or_rfc": "RFC 9901",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "Carries the `decision_context` commitment as a single selectively disclosable SD-JWT (`RFC9901`) claim inside a payment mandate or payload so non-participating counterparties need not receive disclosure. [1][2][4]"
     },
     {
      "name": "IETF Supply Chain Integrity, Transparency, and Trust (SCITT, RFC 9943)",
      "spec_or_rfc": "RFC 9943",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "Uses the SCITT (`RFC9943`) transparency-service architecture to register `COSE_Sign1` anchor statements before payment authorization and verify inclusion during dispute disclosure. [1][2][5]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "ap2",
      "target_name": "Agent Payments Protocol (AP2)",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "AP2 is the payment-mandate protocol the draft binds to, and the added claim is decision_context, a salted hash commitment registered with a SCITT transparency service. [1][6]"
     },
     {
      "target_id": "vi",
      "target_name": "Verifiable Intent",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Verifiable Intent is an SD-JWT (RFC 9901) L1 through L3 consent chain, and decision_context is the selectively disclosable claim the draft puts on the payment mandate for the model inputs and the action. [1][7]"
     },
     {
      "target_id": "scitt-ai-agent-execution",
      "target_name": "AI Agent Execution Profile of SCITT",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "The SCITT AI profile registers a COSE-signed AgentInteractionRecord, while the draft registers a decision_context commitment with a SCITT transparency service before payment authorization. [1][8]"
     },
     {
      "target_id": "ap2-checkout-mandate",
      "target_name": "AP2 Checkout Mandate",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "The checkout mandate authorizes the cart, and decision_context is an additional selectively disclosable claim, registered with SCITT, about the model inputs behind that cart. [1][9]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": "No independent production issuers or verifiers of `draft-milan-agent-decision-commitment-00` (an individual IETF Internet-Draft published in October 2026) have been verified in public deployments. [1]",
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Account protocols](/category/account/)** — Category index for `account` standards."
    }
   ],
   "v05_compiled_md": "---\nid: agent-decision-commitment\ntitle: \"Agent Decision Commitments for Payments\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: account\nform: document-format\nwire_archetype: identity_auth_crypto\nspec_url: https://datatracker.ietf.org/doc/html/draft-milan-agent-decision-commitment-00\nlast_checked: 2026-11-12\n---\n\n# Agent Decision Commitments for Payments\n\n**Category:** [Account](/category/account/) (`account`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-11-12\n\n**Agent Decision Commitments for Payments** (`draft-milan-agent-decision-commitment-00`) is an Internet-Draft dated 15 October 2026 with intended status Experimental. [1] It defines the **Agent Decision Commitment** (**ADC**): a salted hash commitment to a decision record that identifies the content the agent provided to the model interface (after any agent-side transformation), the model calls made, and the resulting answer and action. [1] The commitment is carried as a single selectively disclosable claim in an existing payment mandate or payment payload. [1] By default, the commitment is registered with a transparency service before the payment is authorized. [1] The decision record and its content remain with the holder and are disclosed only to dispute participants, who can verify them against the mandate and the transparency service. [1] Submitted as an individual Internet-Draft expiring 18 April 2027, `draft-milan-agent-decision-commitment-00` directs technical discussion to the IETF `DISPATCH`, `SCITT`, and `OAuth` mailing lists given its reliance on SCITT (`RFC9943`) and SD-JWT (`RFC9901`). [1]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Account](/category/account/) (`account`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | Fernando Henrique D. Milan (Mechanist AI) [2] |\n| **Governed by** | Individual IETF Internet-Draft submission (discussion on IETF `DISPATCH`, `SCITT`, and `OAuth` working group lists) [1] |\n| **Track** | IETF Internet-Draft (Experimental) [1] |\n| **Status** | Internet-Draft, Intended Status: Experimental; expires 18 April 2027 [1][3] |\n| **Version** | `draft-milan-agent-decision-commitment-00` (published 15 October 2026, expires 18 April 2027; schema `\"v\":1`) [1][3] |\n| **Wire format** | Selectively disclosable `decision_context` JSON claim via SD-JWT (`RFC 9901`), CDDL data model structures, `BASE64URL` `SHA-256` digest over concatenated `salt` and `CANON(record)`, and SCITT (`RFC 9943`) receipts [1][2][3] |\n| **Specification** | https://datatracker.ietf.org/doc/html/draft-milan-agent-decision-commitment-00 [1] |\n| **Found at** | `decision_context` SD-JWT claim and `receipt_uri` field in payment mandates or payloads across Verifiable Intent, Agent Payments Protocol (`AP2`), and `x402` (32-octet nonce), plus `ADC1:` 69-character hexadecimal remittance commitment in ISO 20022 account-to-account credit transfers (no binding is defined for card authorization messages) [2] |\n| **Licence** | IETF Trust Legal Provisions (BCP 78) [1] |\n| **IETF state** | `draft-milan-agent-decision-commitment-00` · **Active Internet-Draft** (expires 2027-04-18) · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-milan-agent-decision-commitment/)) |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Decision record, commitment, and holder chain](#decision-record-commitment-and-holder-chain)\n3. [Disclosure, attestation levels, and payment bindings](#disclosure-attestation-levels-and-payment-bindings)\n4. [Counterparts and related standards](#counterparts-and-related-standards)\n5. [Adoption and ecosystem](#adoption-and-ecosystem)\n6. [See also](#see-also)\n7. [References](#references)\n\n---\n\n## Problem and scope\n\nMandate formats such as Verifiable Intent and `AP2`, merchant-signed checkout objects, and settlement receipts prove principal authorization, purchased items, and value transfer, yet omit the inputs an agent relied on — leaving authorized-but-wrong purchases (such as misread invoices) and prompt- or image-manipulated decisions unevidenced. [1] A record holder hashes each post-transformation model input with a fresh salt, anchors the commitment chain in a SCITT (`RFC9943`) transparency service, and selectively discloses the signed `adc-release` record and salts via `receipt_uri` during a dispute (with Section 8 witnessed reciprocal exchange covering bilateral counterparty messages). [1][2] ADC remains liability-neutral: verifiers report attestation levels and step results rather than legal verdicts, and provider-side media resampling after receipt is visible only through provider attestation. [1] Section 13 requests IANA registration of the `decision_context` JWT claim and the `application/adc-anchor+json`, `application/adc-release+json`, and `application/adc-exchange+json` media types (unregistered draft requests). [2]\n\n### Decision context claim (`decision_context`)\n\n```json\n{\"v\":1,\"alg\":\"sha-256\",\"commitment\":\"\",\"receipt_uri\":\"\",\n\"profile\":\"\"}\n```\n\n*The decision context claim is a JSON object with `v` set to 1, `alg` set to `sha-256`, and empty `commitment`, `receipt_uri`, and `profile` strings. [1]*\n\n---\n\n## Decision record, commitment, and holder chain\n\n`draft-milan-agent-decision-commitment-00` binds an agent's pre-action reasoning inputs to a compact `decision_context` claim without exposing raw prompts or model weights on the payment or authorization wire. Holders maintain a hash-linked chain across covered decisions—including `decline` outcomes—and register commitment anchors in transparency logs. [1]\n\n- **Model inputs:** The holder MUST list every input to every model call covered by the decision, including instructions, tool definitions, prior turns, retrieved content, and media, and MUST include the raw provider response for each call with role `response`. [1]\n- **Selective disclosure:** In JWT-based mandates, the claim is carried as an ordinary SD-JWT disclosure. Verifiers MUST use the received disclosure string and MUST NOT re-serialize the claim. The commitment salt is distinct from any SD-JWT disclosure salt and is released only under Section 6. [1]\n- **Anchor registration:** Unless the profile permits late registration, the holder MUST register an anchor statement with at least one transparency service before the mandate or payment payload that carries the claim is signed. The holder MUST retain the transparency receipt. [1][2]\n- **Decline chain:** The holder MUST create a decision record for every covered decision, including decisions whose action is `decline`, and MUST assign consecutive sequence numbers per chain. The `prev` member links each record to its predecessor, so that a missing record appears as a gap. [1]\n\n---\n\n## Disclosure, attestation levels, and payment bindings\n\nPost-hoc audit access uses short-lived, sender-constrained disclosure credentials, while verifiers grade evidence across tiered attestation levels (`A0` through `A3`) and embed `decision_context` inside autonomous payment payloads such as Verifiable Intent and AP2 mandates. [1][2]\n\n- **Disclosure request:** The credential MUST be audience-restricted to the holder, sender-constrained, short-lived, and bound to the transaction. The holder MUST reject a request whose `request_id` it has already accepted within the lifetime of the credential, and a request whose `issued_at` lies outside the profile's tolerance (60 seconds if unspecified). [2]\n- **Attestation levels:** A0 is a record that matches a commitment carried in a field not signed by the agent, the principal, or the payer. A1 requires that the commitment is covered by the signature of the agent, the principal, or the payer, including the x402 nonce construction, and that steps 2 to 5 succeed. A2 requires A1, and step 6 succeeds: the anchor was registered in time, and the anchored chain values are consistent with the record. A3 is A2, every model call carries an attestation, and step 7 succeeds for every model call. [2]\n- **Level limits:** A late or missing anchor caps the level at A1. No level asserts that the receipt lists every input to the model. If any of steps 1 to 5 yields `fail` or `unsupported`, no level is reported. [2]\n- **Rail bindings:** In Verifiable Intent Autonomous mode, the agent includes `decision_context` in both the Layer 3a payment payload and the Layer 3b checkout payload, with the same claim value. The claim MUST NOT be expressed as a constraint. The agent includes `decision_context` as a selectively disclosable claim of the closed Checkout Mandate (`mandate.checkout.1`). The claim MUST NOT appear in open mandates or constraints. For x402, the client SHOULD set the 32-octet nonce to `SHA-256(BASE64URL-DECODE(C) || r)`. Without this construction, the binding is level A0. The specification defines no binding for card authorization messages. [2]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **Selective Disclosure for JSON Web Tokens (SD-JWT, RFC 9901)** | `RFC 9901` | Analogous to classic standard | Carries the `decision_context` commitment as a single selectively disclosable SD-JWT (`RFC9901`) claim inside a payment mandate or payload so non-participating counterparties need not receive disclosure. [1][2][4] |\n| **IETF Supply Chain Integrity, Transparency, and Trust (SCITT, RFC 9943)** | `RFC 9943` | Analogous to classic standard | Uses the SCITT (`RFC9943`) transparency-service architecture to register `COSE_Sign1` anchor statements before payment authorization and verify inclusion during dispute disclosure. [1][2][5] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Agent Payments Protocol (AP2)](/protocols/ap2/)** | Builds on | AP2 is the payment-mandate protocol the draft binds to, and the added claim is decision_context, a salted hash commitment registered with a SCITT transparency service. [1][6] |\n| **[Verifiable Intent](/protocols/vi/)** | Complements | Verifiable Intent is an SD-JWT (RFC 9901) L1 through L3 consent chain, and decision_context is the selectively disclosable claim the draft puts on the payment mandate for the model inputs and the action. [1][7] |\n| **[AI Agent Execution Profile of SCITT](/protocols/scitt-ai-agent-execution/)** | Complements | The SCITT AI profile registers a COSE-signed AgentInteractionRecord, while the draft registers a decision_context commitment with a SCITT transparency service before payment authorization. [1][8] |\n| **[AP2 Checkout Mandate](/protocols/ap2-checkout-mandate/)** | Complements | The checkout mandate authorizes the cart, and decision_context is an additional selectively disclosable claim, registered with SCITT, about the model inputs behind that cart. [1][9] |\n\n---\n\n## Adoption and ecosystem\n\nNo independent production issuers or verifiers of `draft-milan-agent-decision-commitment-00` (an individual IETF Internet-Draft published in October 2026) have been verified in public deployments. [1]\n\n---\n\n## See also\n\n- **Category:** [Account protocols](/category/account/)\n\n---\n\n## References\n\n1. F. H. D. Milan, *Agent Decision Commitments for Payments (draft-milan-agent-decision-commitment-00)* (checked 2026-10-31) — <https://www.ietf.org/archive/id/draft-milan-agent-decision-commitment-00.txt>\n2. F. H. D. Milan, *Agent Decision Commitments for Payments (draft-milan-agent-decision-commitment-00 HTML)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/html/draft-milan-agent-decision-commitment-00>\n3. F. H. D. Milan (IETF Datatracker), *draft-milan-agent-decision-commitment — Agent Decision Commitments for Payments (IETF Datatracker)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/draft-milan-agent-decision-commitment/>\n4. D. Fett, K. Yasuda, and B. Campbell, *RFC 9901: Selective Disclosure for JSON Web Tokens* (November 2025) — <https://www.rfc-editor.org/rfc/rfc9901.html>\n5. H. Birkholz, A. Delignat-Lavaud, C. Fournet, Y. Deshpande, and S. Lasker, *RFC 9943: An Architecture for Trustworthy and Transparent Digital Supply Chains* (June 2026) — <https://www.rfc-editor.org/rfc/rfc9943.html>\n6. Google (google-agentic-commerce), *Agentic Payment Protocol (v0.2)* (fetched 2026-10-30) — <https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/specification.md>\n7. Verifiable Intent Working Group, *Verifiable Intent (VI) — Specification Overview (v0.1-draft)* (2026-02-18 (v0.1-draft); fetched 2026-10-31) — <https://verifiableintent.dev/spec/>\n8. Pinar Emirdag and Daniel Feichtinger (Veridic Inc.), *AI Agent Execution Profile of SCITT (draft-emirdag-scitt-ai-agent-execution-01)* (2026-10-12) — <https://www.ietf.org/archive/id/draft-emirdag-scitt-ai-agent-execution-01.txt>\n9. Google Agentic Commerce, *AP2 Specification: Checkout Mandate* (v0.2.0; fetched 2026-10-31) — <https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/checkout_mandate.md>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "gbz-185-agent-interconnection",
   "name": "GB/Z 185 Artificial intelligence — Agent interconnection",
   "acronym": "GB/Z 185",
   "aliases": [
    "人工智能 智能体互联",
    "GB/Z 185-2026",
    "Agent interconnection national standard"
   ],
   "collisions": [
    "AIP: the open-source Agent Interconnection Protocol (OpenAtom) that accompanies this series is unrelated to the Agent Identity Protocol drafts tracked as aip and aip-delegation-chain"
   ],
   "step": "coordinate",
   "parties": [
    "agent-agent",
    "agent-registry"
   ],
   "form": "document-format",
   "track": "industry-body",
   "scope": "general",
   "question": "How do AI agents built by different Chinese companies identify, describe, find and call each other, and invoke tools, under one national framework?",
   "analog": "A national interconnection standard, like the rules that let different carriers' phone networks call each other",
   "origin": {
    "org": "China Electronics Standardization Institute (CESI), lead drafter, under SAC/TC28/SC42",
    "date": "2026-05-22"
   },
   "governance": "Issued by the State Administration for Market Regulation and the Standardization Administration of China. Responsible committee TC28 (National Information Technology Standardization Technical Committee), executed by TC28/SC42, supervised by SAC. Part 1 is proposed by and under SAC/TC 28.",
   "native_status": "In force (现行) as non-mandatory national standardization guidance technical documents (国家标准化指导性技术文件, GB/Z). Seven current records, GB/Z 185.1-2026 through GB/Z 185.7-2026, issued 2026-05-22. Part 1 is effective on publication. Part 8 (20264195-Z-469, agent audit) and Part 9 (20264253-Z-469, agent transaction) were still being drafted.",
   "phase": "stable",
   "implementation": "prototype",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "version": {
    "label": "GB/Z 185.1-2026 to GB/Z 185.7-2026",
    "date": "2026-05-22"
   },
   "spec_url": "https://openstd.samr.gov.cn/bzgk/std/newGbInfo?hcno=CFF03D872963466AC7F03ED0E28B6702",
   "discovery": {
    "mechanism": "GB/Z 185.5-2026 defines discovery via an agent discovery service (clause 6.1) and via preset information (clause 6.2). An implementation may use either or both. A .well-known address is one listed preset source.",
    "path": null
   },
   "probe": {
    "method": "GET",
    "path": "none — no fixed path",
    "parse": "Discovery goes through an agent discovery service (clause 6.1) or preset information (clause 6.2), where a .well-known address is one allowed source.",
    "on_absent": "No fixed probe path exists; absence of a well-known file does not indicate non-support."
   },
   "hatnote_md": "This page is about GB/Z 185 (人工智能 智能体互联), the national standards series Artificial Intelligence — Agent Interconnection. The accompanying open-source work is the Agent Interconnection Protocol (AIP), a protocol reference and code implementation of GB/Z 185. For the international agent-to-agent protocol see [Agent2Agent Protocol (A2A)](/protocols/a2a/).",
   "summary_md": "**GB/Z 185** (*Artificial intelligence — Agent interconnection*, 人工智能 智能体互联) is a seven-part series of non-mandatory Chinese national standardization guidance technical documents (国家标准化指导性技术文件), `GB/Z 185.1-2026` through `GB/Z 185.7-2026`, issued on `2026-05-22` by SAMR and SAC; Part 1 defines the conceptual model and functional reference architecture for cross-platform agent interconnection. After a requesting agent discovers a service agent under `GB/Z 185.5-2026`, and after mutual identity authentication has passed, `GB/Z 185.6-2026` says each implementation shall support point-to-point mode and should support group and mixed modes. The 2026年第22号 announcement, dated 2026-05-22, issues `GB/Z 185.1-2026` through `GB/Z 185.7-2026` as national standardization guidance documents. Part 8 agent audit, `20264195-Z-469`, remains 正在起草 under TC28.",
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.samr.gov.cn/xw/xwfbt/art/2026/art_fa730f984b2740baa248318118d77921.html",
     "claim": "State Administration for Market Regulation, *市场监管总局智能体互联标准化新闻发布会实录*, published 2026-06-26",
     "date": null,
     "quote": "批准发布《人工智能 智能体互联》系列7项国家标准，全面覆盖总体架构、身份码、身份管理、智能体描述、智能体发现、智能体交互、智能体工具调用等核心环节 / 本次7项标准以国家标准化指导性技术文件发布，是产业培育阶段采取的敏捷标准化安排 / 中国电子技术标准化研究院主持了智能体互联系列标准的研制工作。 / 汇聚多领域70余家头部企业、高校、科研院所，超百位专家参与编制",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://aip.openatom.tech/explore/journalism/detail/507545311238033408",
     "claim": "AIP community (OpenAtom), *AIP智能体互联协议代码正式发布，持续征集试点应用单位*, published 2025-11-01",
     "date": null,
     "quote": "Agent Interconnection Protocol / 同步依托开放原子基金会AtomGit平台成立AIP智能体互联开源社区 项目正式对外开源其核心协议代码",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://raw.githubusercontent.com/AIP-PUB/ACPs-community/main/readme_cn.md",
     "claim": "Beijing University of Posts and Telecommunications and China Electronics Standardization Institute, *AIP Project整体介绍 (ACPs-community readme_cn.md)*, GB/Z 185 released 2026-05-22; checked 2026-10-30",
     "date": null,
     "quote": "本项目是基于 GB/Z 185《人工智能 智能体互联》 的协议参考及代码实现。",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://www.gb-gbt.com/PDF/Chinese.aspx/GBZ185.1-2026",
     "claim": "gb-gbt.com (commercial preview of the national standard), *GB/Z 185.1-2026 preview, 人工智能 智能体互联 第1部分：总体架构*, issued 2026-05-22; checked 2026-10-30",
     "date": null,
     "quote": "Artificial intelligence - Agent interconnection … 本文件为规范类指导性技术文件。 … 本文件给出了智能体互联的概念模型和功能参考架构。 / 本文件由全国信息技术标准化技术委员会（SAC/TC 28）提出并归口。 / 本文件为规范类指导性技术文件。 … 本文件由全国信息技术标准化技术委员会（SAC/TC 28）提出并归口。 / 国际上已有 MCP、 A2A、ANP 等智能体通信协议，但并未形成行业完全共识的方案",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://std.sacinfo.org.cn/gnoc/queryInfo?id=495B8834610A6828F254D73BD7DCAF99",
     "claim": "Standardization Administration of China, *Announcement 2026 No. 22, national standardization guidance documents*, published 2026-05-22; checked 2026-10-30",
     "date": null,
     "quote": "2026年第22号 … 国家市场监督管理总局（国家标准化管理委员会） … 国家标准化指导性技术文件 … 2026-05-22 … GB/Z 185.1-2026 … GB/Z 185.7-2026 / 2026年第22号 … 2026-05-22 … GB/Z 185.1-2026 … GB/Z 185.7-2026 … 国家标准化指导性技术文件 / GB/Z 185.1-2026 … GB/Z 185.7-2026 / 2026-05-22 / 国家标准化指导性技术文件 … GB/Z 185.1-2026 … GB/Z 185.7-2026",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://www.gb-gbt.com/PDF/Chinese.aspx/GBZ185.6-2026",
     "claim": "gb-gbt.com (commercial preview of the national standard), *GB/Z 185.6-2026 preview, 人工智能 智能体互联 第6部分：智能体交互*, issued 2026-05-22; checked 2026-10-30",
     "date": null,
     "quote": "请求智能体通过智能体发现功能寻获符合能力要求的服务智能体（按 GB/Z 185.5-2026）后，在 双方身份鉴别通过的基础上 … 各系统在实现时，应支持点对点模式，宜 支持群组模式、混合模式 / 各系统在实现时，应支持点对点模式，宜 支持群组模式、混合模式 / 请求智能体与服务智能体在完成双向智能体身份鉴别后，方能进行智能体交互。",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://std.samr.gov.cn/gb/search/gbDetailed?id=574304045D075760E06397BE0A0AD7F5",
     "claim": "National Public Service Platform for Standards Information (SAMR), *Registration 20264195-Z-469, Part 8 Agent audit*, registered 2026-07-23; checked 2026-10-30",
     "date": null,
     "quote": "20264195-Z-469 正在起草 … TC28（全国信息技术标准化技术委员会） / 20264195-Z-469 正在起草 / Agent audit",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://www.digitalchina.gov.cn/2026/english/dn/202607/t20260715_5346957.htm",
     "claim": "Ministry of Industry and Information Technology (Digital China Summit English page), *Interpretation of the National Standards Series Artificial Intelligence - Agent Interconnection*, published 2026-07-15",
     "date": null,
     "quote": "the Ministry of Industry and Information Technology guided the China Electronics Standardization Institute in organizing more than 70 key enterprises to formulate the national standards series Artificial Intelligence - Agent Interconnection (Standard No.: GB/Z 185-2026) / Although protocols such as MCP and A2A have emerged internationally, no unified consensus has been formed, and such protocols fail to fully meet the needs of industry development. / requesting agents and service agents shall complete mutual identity authentication before any interaction.",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://std.samr.gov.cn/gb/search/gbDetailed?id=52A05F8113453761E06397BE0A0AFEB5",
     "claim": "National Public Service Platform for Standards Information (SAMR), *GB/Z 185.1-2026 人工智能 智能体互联 第1部分：总体架构*, published 2026-05-22; checked 2026-10-30",
     "date": null,
     "quote": "主要起草单位 中国电子技术标准化研究院 、北京邮电大学 、小米通讯技术有限公司 、华为技术有限公司 、蚂蚁科技集团股份有限公司 、中移互联网有限公司 、阿里云计算有限公司 / 中国互联网络信息中心 、北京数原数字化城市研究中心 、海信集团控股股份有限公司 。 / 国家标准《人工智能 智能体互联 第1部分：总体架构》 由TC28（全国信息技术标准化技术委员会）归口，TC28SC42（全国信息技术标准化技术委员会人工智能分会）执行 ，主管部门为国家标准委。 / 国家标准 指导性技术文件 现行",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://openstd.samr.gov.cn/bzgk/std/newGbInfo?hcno=CFF03D872963466AC7F03ED0E28B6702",
     "claim": "SAMR National Standards Information Public Service Platform, *GB/Z 185.1-2026 人工智能 智能体互联 第1部分：总体架构*, published 2026-05-22; checked 2026-10-30",
     "date": null,
     "quote": "发布日期 2026-05-22 / 发布单位 国家市场监督管理总局、国家标准化管理委员会 / 标准状态： 现行 / 标准号：GB/Z 185.1-2026 / 中文标准名称：人工智能 智能体互联 第1部分：总体架构 / 版权所有 侵权必究 主管：国家市场监督管理总局 国家标准化管理委员会",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://std.samr.gov.cn/gb/search/gbDetailed?mode=plan&id=pwZb%2BZI8am8%3D",
     "claim": "National Public Service Platform for Standards Information (SAMR), *Registration 20254281-Z-469, GB/Z 185.1-2026*, registered 2025-07-15; checked 2026-10-30",
     "date": null,
     "quote": "拟实施日期：发布即实施。",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://std.samr.gov.cn/gb/search/gbDetailed?id=593D2189872044E8E06397BE0A0AE645",
     "claim": "National Public Service Platform for Standards Information (SAMR), *Registration 20264253-Z-469, Part 9 Agent Transaction*, registered 2026-08-17; checked 2026-10-30",
     "date": null,
     "quote": "20264253-Z-469 正在起草 / Agent Transaction",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://std.samr.gov.cn/gb/search/gbQueryPage?searchText=%E6%99%BA%E8%83%BD%E4%BD%93%E4%BA%92%E8%81%94&ics=&state=&ISSUE_DATE=&sortOrder=asc&pageSize=15&pageNumber=1&_=1",
     "claim": "National Public Service Platform for Standards Information (SAMR), *Standards search results for 智能体互联*, checked 2026-10-30",
     "date": null,
     "quote": "\"total\":7 / \"C_STD_CODE\":\"GB/Z 185.5-2026\",\"STD_NATURE\":\"指导性技术文件\",\"STATE\":\"现行\",\"ISSUE_DATE\":\"2026-05-22\"",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://www.gb-gbt.com/PDF/Chinese.aspx/GBZ185.2-2026",
     "claim": "gb-gbt.com (commercial preview of the national standard), *GB/Z 185.2-2026 preview, 人工智能 智能体互联 第2部分：身份码*, issued 2026-05-22; checked 2026-10-30",
     "date": null,
     "quote": "本文件规定了智能体身份码的编码规则、分配与管理要求。 / 智能体身份码编码规则遵循 GB/T 26231 的有关规定，采用分层结构的 OID 标识体系。 / 固定为：1.2.156.3088。",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://www.gb-gbt.com/PDF/Chinese.aspx/GBZ185.5-2026",
     "claim": "gb-gbt.com (commercial preview of the national standard), *GB/Z 185.5-2026 preview, 人工智能 智能体互联 第5部分：智能体发现*, issued 2026-05-22; checked 2026-10-30",
     "date": null,
     "quote": "本文件定义智能体发现机制，包含基于智能体发现服务的发现（见 6.1）和基于预置信息的发现（见 6.2）。在实现智能体互联时，可任选 1 种或 2 种，并实施有效的衔接。 / 本文件定义智能体发现机制，包含基于智能体发现服务的发现（见 6.1）和基于预置信息的发现（见 6.2）。 / 智能体发现服务宜至少提供 1 种查询接口，如 API、GUI 或 LUI。",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://chinastandards.org/standards/gb-z-185-5-2026",
     "claim": "China Standards (commercial English preview), *GB/Z 185.5-2026 English preview, Artificial intelligence - Agent discovery*, checked 2026-10-30",
     "date": null,
     "quote": "4).well-known address.",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://a2a-protocol.org/latest/specification/",
     "claim": "A2A Protocol project, *Agent2Agent Protocol specification*, checked 2026-10-30",
     "date": null,
     "quote": "GET /.well-known/agent-card.json",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/README.md",
     "claim": "Agent Network Protocol community, *Agent Network Protocol (ANP) README*, checked 2026-10-30",
     "date": null,
     "quote": "ANP-08: Agent Discovery Protocol / well-known discovery and passive registration with search agents / ANP-02 separates common authentication from DID method validation, including did:wba and native did:web",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://www.ietf.org/archive/id/draft-mp-agntcy-ads-03.txt",
     "claim": "L. Muscariello and R. Polic (Cisco), *Agent Directory Service (draft-mp-agntcy-ads-03)*, 2 November 2026",
     "date": null,
     "quote": "GET /v1/agents / GET /.well-known/ai-catalog.json",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://www.ietf.org/archive/id/draft-mozleywilliams-dawn-dnsaid-00.txt",
     "claim": "J. Mozley, N. Williams, B. Sarikaya, R. Schott, J. Damick, and S. Courtney, *DNS for AI Discovery (draft-mozleywilliams-dawn-dnsaid-00)*, 2026-11-02 (fetched 2026-11-07)",
     "date": null,
     "quote": "This document specifies DNS for AI Discovery (DNS-AID), a method for",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://www.dns-aid.org/",
     "claim": "DNS-AID, *DNS-AID: AI Agent Discovery via DNS*, checked 2026-10-30",
     "date": null,
     "quote": "Publish agents to DNS",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://datatracker.ietf.org/doc/draft-narajala-courtney-ansv2/",
     "claim": "Narajala, Courtney, et al., *draft-narajala-courtney-ansv2 — Agent Name Service v2 (ANS): A Domain-Anchored Trust Layer for Autonomous AI Agent Identity (IETF Datatracker)*, checked 2026-10-30",
     "date": null,
     "quote": "The _ans TXT record is a connection hint published in DNS, telling a client which protocol the agent supports and where to find the metadata.",
     "ref": 22
    }
   ],
   "last_verified": "2026-11-07",
   "dispute": null,
   "history": [
    {
     "date": "2026-10-20",
     "note": "initial record; verified against the SAMR standards records for Parts 1 and 7, the openstd full-text entry, the SAMR press conference of 2026-06-26 and the AIP project news page"
    },
    {
     "date": "2026-10-29",
     "note": "Primary-source verification across 26 primary sources"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "part_of": null,
   "group": null,
   "watch": [
    {
     "type": "page",
     "url": "https://std.samr.gov.cn/gb/search/gbDetailed?id=52A05F8113453761E06397BE0A0AFEB5",
     "selector": "main",
     "cadence": "weekly"
    }
   ],
   "use_cases": [
    "agent-to-agent-messaging",
    "prove-agent-identity",
    "agent-naming",
    "describe-agent-capabilities"
   ],
   "audience": [
    "platform",
    "agent-builder",
    "standards-body"
   ],
   "pairs_with": [
    "a2a",
    "anp",
    "ads",
    "dns-aid",
    "ans"
   ],
   "prerequisites": [],
   "tier": "spec_brief",
   "lifecycle_status": "published_standard",
   "wire_archetype": "harnesses_rpc_ui",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-07",
   "v05_hatnote_html_md": "This page is about GB/Z 185 (人工智能 智能体互联), the national standards series Artificial Intelligence — Agent Interconnection. The accompanying open-source work is the Agent Interconnection Protocol (AIP), a protocol reference and code implementation of GB/Z 185. For the international agent-to-agent protocol see [Agent2Agent Protocol (A2A)](/protocols/a2a/). [1][2][3]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**GB/Z 185** (*Artificial intelligence — Agent interconnection*, 人工智能 智能体互联) is a seven-part series of non-mandatory Chinese national standardization guidance technical documents (国家标准化指导性技术文件), `GB/Z 185.1-2026` through `GB/Z 185.7-2026`, issued on `2026-05-22` by SAMR and SAC; Part 1 defines the conceptual model and functional reference architecture for cross-platform agent interconnection. [1][4][5] After a requesting agent discovers a service agent under `GB/Z 185.5-2026`, and after mutual identity authentication has passed, `GB/Z 185.6-2026` says each implementation shall support point-to-point mode and should support group and mixed modes. [6] The 2026年第22号 announcement, dated 2026-05-22, issues `GB/Z 185.1-2026` through `GB/Z 185.7-2026` as national standardization guidance documents. Part 8 agent audit, `20264195-Z-469`, remains 正在起草 under TC28. [5][7]",
   "v05_identity_sentence_md": "**GB/Z 185** (*Artificial intelligence — Agent interconnection*, 人工智能 智能体互联) is a seven-part series of non-mandatory Chinese national standardization guidance technical documents (国家标准化指导性技术文件), `GB/Z 185.1-2026` through `GB/Z 185.7-2026`, issued on `2026-05-22` by SAMR and SAC; Part 1 defines the conceptual model and functional reference architecture for cross-platform agent interconnection. [1][4][5]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Coordinate](/category/coordinate/) (`coordinate`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "China Electronics Standardization Institute (CESI, lead drafter) under Ministry of Industry and Information Technology (MIIT) guidance; 37 principal drafting organizations (主要起草单位) are listed on the Part 1 record (including Beijing University of Posts and Telecommunications, Xiaomi, Huawei, Ant Technology Group, China Mobile Internet, and Alibaba Cloud), and more than 70 organizations and over 100 experts contributed across the 7-part series. Issued 2026-05-22. [1][8][9][10]"
    },
    {
     "label": "Governed by",
     "value_md": "State Administration for Market Regulation and the Standardization Administration of China. SAC/TC 28 is the responsible committee; TC28/SC42 (its AI subcommittee) executes. [4][9][10]"
    },
    {
     "label": "Track",
     "value_md": "Non-mandatory national standardization guidance technical document (国家标准化指导性技术文件, `GB/Z`; agile standardization arrangement under SAC/TC 28) [1][4][9]"
    },
    {
     "label": "Status",
     "value_md": "现行 (in force) as non-mandatory 指导性技术文件 (standardization guidance technical documents), issued 2026-05-22 and effective on publication. Part 8 (20264195-Z-469, agent audit) and Part 9 (20264253-Z-469, agent transaction) were still 正在起草. [7][9][10][11][12]"
    },
    {
     "label": "Version",
     "value_md": "GB/Z 185.1-2026 through GB/Z 185.7-2026, each issued 2026-05-22 (seven current records). [5][13]"
    },
    {
     "label": "Identity code",
     "value_md": "Hierarchical OID under GB/T 26231. Prefix fixed as 1.2.156.3088 (GB/Z 185.2-2026). [14]"
    },
    {
     "label": "Specification",
     "value_md": "[GB/Z 185.1-2026](https://openstd.samr.gov.cn/bzgk/std/newGbInfo?hcno=CFF03D872963466AC7F03ED0E28B6702) [10]"
    },
    {
     "label": "Found at",
     "value_md": "Agent discovery service (Part 5, clause 6.1) or preset information (clause 6.2). A .well-known address is one listed preset source. An implementation may use either mechanism or both. [15][16]"
    },
    {
     "label": "Licence",
     "value_md": "National standardization guidance document copyright (SAMR / SAC; disclosed via openstd.samr.gov.cn); companion AIP core protocol code open-sourced via the OpenAtom Foundation AtomGit community [2][10]"
    }
   ],
   "v05_problem_md": "GB/Z 185.1-2026 states that MCP, A2A, and ANP exist as agent communication protocols, but that no scheme with complete industry consensus has formed. Protocols such as MCP and A2A fail to fully meet the needs of industry development. [4][8] Requesting agents and service agents shall complete mutual identity authentication before any interaction. `GB/Z 185.6-2026` states that each implementation shall support point-to-point mode and should support group mode and mixed mode. [6][8] The seven issued parts (`GB/Z 185.1-2026` through `GB/Z 185.7-2026`) are non-mandatory national standardization guidance technical documents (国家标准化指导性技术文件) published as an agile standardization arrangement for the industry-cultivation stage; Part 8 (`20264195-Z-469`, agent audit) and Part 9 (`20264253-Z-469`, agent transaction) remain under drafting (正在起草). [1][5][7][12]",
   "v05_mechanism_delta_md": "Requesting agents and service agents shall complete mutual identity authentication before any interaction. `GB/Z 185.6-2026` states that each implementation shall support point-to-point mode and should support group mode and mixed mode. [6][8]",
   "v05_scope_boundary_md": "The seven issued parts (`GB/Z 185.1-2026` through `GB/Z 185.7-2026`) are non-mandatory national standardization guidance technical documents (国家标准化指导性技术文件) published as an agile standardization arrangement for the industry-cultivation stage; Part 8 (`20264195-Z-469`, agent audit) and Part 9 (`20264253-Z-469`, agent transaction) remain under drafting (正在起草). [1][5][7][12]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "FIPA ACL Message Structure",
      "spec_or_rfc": "SC00061G",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "FIPA SC00061G is the classic agent-communication specification used as the analogue. GB/Z 185.1-2026 through GB/Z 185.7-2026, issued 2026-05-22, give each agent a hierarchical OID identity code fixed at prefix 1.2.156.3088 and allow interaction only after mutual identity authentication. [5][6][10][14]"
     },
     {
      "name": "Well-Known URIs",
      "spec_or_rfc": "RFC 8615",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "RFC 8615 is the well-known URI convention. GB/Z 185.5-2026 defines discovery by an agent discovery service or by preset information, and its English preview lists a .well-known address as one preset source. [15][16]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "a2a",
      "target_name": "Agent2Agent Protocol (A2A)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "A2A fetches the public Agent Card with GET /.well-known/agent-card.json. GB/Z 185 discovers agents through a discovery service or preset information, lists a .well-known address as one preset source, and fixes the identity-code prefix at 1.2.156.3088. [14][15][16][17]"
     },
     {
      "target_id": "anp",
      "target_name": "Agent Network Protocol",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ANP-08, the Agent Discovery Protocol, uses .well-known discovery and passive registration with search agents, and ANP-02 separates common authentication from DID method validation, including did:wba and did:web. GB/Z 185 defines discovery as an agent discovery service or preset information. [15][18]"
     },
     {
      "target_id": "ads",
      "target_name": "Agent Directory Service",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "ADS lists catalog entries with GET /v1/agents and returns a host catalog at GET /.well-known/ai-catalog.json. GB/Z 185 defines an agent discovery service whose query interface may be an API, a GUI, or an LUI. [15][19]"
     },
     {
      "target_id": "dns-aid",
      "target_name": "DNS-AID (DNS for AI Discovery)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "DNS-AID publishes agents to DNS and uses SVCB records for connectivity information. GB/Z 185 defines discovery through an agent discovery service or through preset information. [15][20][21]"
     },
     {
      "target_id": "ans",
      "target_name": "Agent Name Service v2 (ANS)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ANS v2 publishes an _ans TXT record in DNS as a connection hint for the protocol an agent supports and where to find its metadata. GB/Z 185 specifies discovery by a discovery service or by preset information. [15][22]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Coordinate protocols](/category/coordinate/)** — Category index for `coordinate` standards."
    }
   ],
   "v05_compiled_md": "---\nid: gbz-185-agent-interconnection\ntitle: \"GB/Z 185 Artificial intelligence — Agent interconnection\"\ntier: spec_brief\nlifecycle_status: published_standard\ncategory: coordinate\nform: document-format\nwire_archetype: harnesses_rpc_ui\nspec_url: https://openstd.samr.gov.cn/bzgk/std/newGbInfo?hcno=CFF03D872963466AC7F03ED0E28B6702\nlast_checked: 2026-11-07\n---\n\n# GB/Z 185 Artificial intelligence — Agent interconnection\n\n**Category:** [Coordinate](/category/coordinate/) (`coordinate`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-11-07\n\n> *This page is about GB/Z 185 (人工智能 智能体互联), the national standards series Artificial Intelligence — Agent Interconnection. The accompanying open-source work is the Agent Interconnection Protocol (AIP), a protocol reference and code implementation of GB/Z 185. For the international agent-to-agent protocol see [Agent2Agent Protocol (A2A)](/protocols/a2a/). [1][2][3]*\n\n**GB/Z 185** (*Artificial intelligence — Agent interconnection*, 人工智能 智能体互联) is a seven-part series of non-mandatory Chinese national standardization guidance technical documents (国家标准化指导性技术文件), `GB/Z 185.1-2026` through `GB/Z 185.7-2026`, issued on `2026-05-22` by SAMR and SAC; Part 1 defines the conceptual model and functional reference architecture for cross-platform agent interconnection. [1][4][5] After a requesting agent discovers a service agent under `GB/Z 185.5-2026`, and after mutual identity authentication has passed, `GB/Z 185.6-2026` says each implementation shall support point-to-point mode and should support group and mixed modes. [6] The 2026年第22号 announcement, dated 2026-05-22, issues `GB/Z 185.1-2026` through `GB/Z 185.7-2026` as national standardization guidance documents. Part 8 agent audit, `20264195-Z-469`, remains 正在起草 under TC28. [5][7]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Coordinate](/category/coordinate/) (`coordinate`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | China Electronics Standardization Institute (CESI, lead drafter) under Ministry of Industry and Information Technology (MIIT) guidance; 37 principal drafting organizations (主要起草单位) are listed on the Part 1 record (including Beijing University of Posts and Telecommunications, Xiaomi, Huawei, Ant Technology Group, China Mobile Internet, and Alibaba Cloud), and more than 70 organizations and over 100 experts contributed across the 7-part series. Issued 2026-05-22. [1][8][9][10] |\n| **Governed by** | State Administration for Market Regulation and the Standardization Administration of China. SAC/TC 28 is the responsible committee; TC28/SC42 (its AI subcommittee) executes. [4][9][10] |\n| **Track** | Non-mandatory national standardization guidance technical document (国家标准化指导性技术文件, `GB/Z`; agile standardization arrangement under SAC/TC 28) [1][4][9] |\n| **Status** | 现行 (in force) as non-mandatory 指导性技术文件 (standardization guidance technical documents), issued 2026-05-22 and effective on publication. Part 8 (20264195-Z-469, agent audit) and Part 9 (20264253-Z-469, agent transaction) were still 正在起草. [7][9][10][11][12] |\n| **Version** | GB/Z 185.1-2026 through GB/Z 185.7-2026, each issued 2026-05-22 (seven current records). [5][13] |\n| **Identity code** | Hierarchical OID under GB/T 26231. Prefix fixed as 1.2.156.3088 (GB/Z 185.2-2026). [14] |\n| **Specification** | [GB/Z 185.1-2026](https://openstd.samr.gov.cn/bzgk/std/newGbInfo?hcno=CFF03D872963466AC7F03ED0E28B6702) [10] |\n| **Found at** | Agent discovery service (Part 5, clause 6.1) or preset information (clause 6.2). A .well-known address is one listed preset source. An implementation may use either mechanism or both. [15][16] |\n| **Licence** | National standardization guidance document copyright (SAMR / SAC; disclosed via openstd.samr.gov.cn); companion AIP core protocol code open-sourced via the OpenAtom Foundation AtomGit community [2][10] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nGB/Z 185.1-2026 states that MCP, A2A, and ANP exist as agent communication protocols, but that no scheme with complete industry consensus has formed. Protocols such as MCP and A2A fail to fully meet the needs of industry development. [4][8] Requesting agents and service agents shall complete mutual identity authentication before any interaction. `GB/Z 185.6-2026` states that each implementation shall support point-to-point mode and should support group mode and mixed mode. [6][8] The seven issued parts (`GB/Z 185.1-2026` through `GB/Z 185.7-2026`) are non-mandatory national standardization guidance technical documents (国家标准化指导性技术文件) published as an agile standardization arrangement for the industry-cultivation stage; Part 8 (`20264195-Z-469`, agent audit) and Part 9 (`20264253-Z-469`, agent transaction) remain under drafting (正在起草). [1][5][7][12]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **FIPA ACL Message Structure** | `SC00061G` | Analogous to classic standard | FIPA SC00061G is the classic agent-communication specification used as the analogue. GB/Z 185.1-2026 through GB/Z 185.7-2026, issued 2026-05-22, give each agent a hierarchical OID identity code fixed at prefix 1.2.156.3088 and allow interaction only after mutual identity authentication. [5][6][10][14] |\n| **Well-Known URIs** | `RFC 8615` | Analogous to classic standard | RFC 8615 is the well-known URI convention. GB/Z 185.5-2026 defines discovery by an agent discovery service or by preset information, and its English preview lists a .well-known address as one preset source. [15][16] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Agent2Agent Protocol (A2A)](/protocols/a2a/)** | Peer alternative | A2A fetches the public Agent Card with GET /.well-known/agent-card.json. GB/Z 185 discovers agents through a discovery service or preset information, lists a .well-known address as one preset source, and fixes the identity-code prefix at 1.2.156.3088. [14][15][16][17] |\n| **[Agent Network Protocol](/protocols/anp/)** | Peer alternative | ANP-08, the Agent Discovery Protocol, uses .well-known discovery and passive registration with search agents, and ANP-02 separates common authentication from DID method validation, including did:wba and did:web. GB/Z 185 defines discovery as an agent discovery service or preset information. [15][18] |\n| **[Agent Directory Service](/protocols/ads/)** | Complements | ADS lists catalog entries with GET /v1/agents and returns a host catalog at GET /.well-known/ai-catalog.json. GB/Z 185 defines an agent discovery service whose query interface may be an API, a GUI, or an LUI. [15][19] |\n| **[DNS-AID (DNS for AI Discovery)](/protocols/dns-aid/)** | Complements | DNS-AID publishes agents to DNS and uses SVCB records for connectivity information. GB/Z 185 defines discovery through an agent discovery service or through preset information. [15][20][21] |\n| **[Agent Name Service v2 (ANS)](/protocols/ans/)** | Peer alternative | ANS v2 publishes an _ans TXT record in DNS as a connection hint for the protocol an agent supports and where to find its metadata. GB/Z 185 specifies discovery by a discovery service or by preset information. [15][22] |\n\n---\n\n## See also\n\n- **Category:** [Coordinate protocols](/category/coordinate/)\n\n---\n\n## References\n\n1. State Administration for Market Regulation, *市场监管总局智能体互联标准化新闻发布会实录* (published 2026-06-26) — <https://www.samr.gov.cn/xw/xwfbt/art/2026/art_fa730f984b2740baa248318118d77921.html>\n2. AIP community (OpenAtom), *AIP智能体互联协议代码正式发布，持续征集试点应用单位* (published 2025-11-01) — <https://aip.openatom.tech/explore/journalism/detail/507545311238033408>\n3. Beijing University of Posts and Telecommunications and China Electronics Standardization Institute, *AIP Project整体介绍 (ACPs-community readme_cn.md)* (GB/Z 185 released 2026-05-22; checked 2026-10-30) — <https://raw.githubusercontent.com/AIP-PUB/ACPs-community/main/readme_cn.md>\n4. gb-gbt.com (commercial preview of the national standard), *GB/Z 185.1-2026 preview, 人工智能 智能体互联 第1部分：总体架构* (issued 2026-05-22; checked 2026-10-30) — <https://www.gb-gbt.com/PDF/Chinese.aspx/GBZ185.1-2026>\n5. Standardization Administration of China, *Announcement 2026 No. 22, national standardization guidance documents* (published 2026-05-22; checked 2026-10-30) — <https://std.sacinfo.org.cn/gnoc/queryInfo?id=495B8834610A6828F254D73BD7DCAF99>\n6. gb-gbt.com (commercial preview of the national standard), *GB/Z 185.6-2026 preview, 人工智能 智能体互联 第6部分：智能体交互* (issued 2026-05-22; checked 2026-10-30) — <https://www.gb-gbt.com/PDF/Chinese.aspx/GBZ185.6-2026>\n7. National Public Service Platform for Standards Information (SAMR), *Registration 20264195-Z-469, Part 8 Agent audit* (registered 2026-07-23; checked 2026-10-30) — <https://std.samr.gov.cn/gb/search/gbDetailed?id=574304045D075760E06397BE0A0AD7F5>\n8. Ministry of Industry and Information Technology (Digital China Summit English page), *Interpretation of the National Standards Series Artificial Intelligence - Agent Interconnection* (published 2026-07-15) — <https://www.digitalchina.gov.cn/2026/english/dn/202607/t20260715_5346957.htm>\n9. National Public Service Platform for Standards Information (SAMR), *GB/Z 185.1-2026 人工智能 智能体互联 第1部分：总体架构* (published 2026-05-22; checked 2026-10-30) — <https://std.samr.gov.cn/gb/search/gbDetailed?id=52A05F8113453761E06397BE0A0AFEB5>\n10. SAMR National Standards Information Public Service Platform, *GB/Z 185.1-2026 人工智能 智能体互联 第1部分：总体架构* (published 2026-05-22; checked 2026-10-30) — <https://openstd.samr.gov.cn/bzgk/std/newGbInfo?hcno=CFF03D872963466AC7F03ED0E28B6702>\n11. National Public Service Platform for Standards Information (SAMR), *Registration 20254281-Z-469, GB/Z 185.1-2026* (registered 2025-07-15; checked 2026-10-30) — <https://std.samr.gov.cn/gb/search/gbDetailed?mode=plan&id=pwZb%2BZI8am8%3D>\n12. National Public Service Platform for Standards Information (SAMR), *Registration 20264253-Z-469, Part 9 Agent Transaction* (registered 2026-08-17; checked 2026-10-30) — <https://std.samr.gov.cn/gb/search/gbDetailed?id=593D2189872044E8E06397BE0A0AE645>\n13. National Public Service Platform for Standards Information (SAMR), *Standards search results for 智能体互联* (checked 2026-10-30) — <https://std.samr.gov.cn/gb/search/gbQueryPage?searchText=%E6%99%BA%E8%83%BD%E4%BD%93%E4%BA%92%E8%81%94&ics=&state=&ISSUE_DATE=&sortOrder=asc&pageSize=15&pageNumber=1&_=1>\n14. gb-gbt.com (commercial preview of the national standard), *GB/Z 185.2-2026 preview, 人工智能 智能体互联 第2部分：身份码* (issued 2026-05-22; checked 2026-10-30) — <https://www.gb-gbt.com/PDF/Chinese.aspx/GBZ185.2-2026>\n15. gb-gbt.com (commercial preview of the national standard), *GB/Z 185.5-2026 preview, 人工智能 智能体互联 第5部分：智能体发现* (issued 2026-05-22; checked 2026-10-30) — <https://www.gb-gbt.com/PDF/Chinese.aspx/GBZ185.5-2026>\n16. China Standards (commercial English preview), *GB/Z 185.5-2026 English preview, Artificial intelligence - Agent discovery* (checked 2026-10-30) — <https://chinastandards.org/standards/gb-z-185-5-2026>\n17. A2A Protocol project, *Agent2Agent Protocol specification* (checked 2026-10-30) — <https://a2a-protocol.org/latest/specification/>\n18. Agent Network Protocol community, *Agent Network Protocol (ANP) README* (checked 2026-10-30) — <https://raw.githubusercontent.com/agent-network-protocol/AgentNetworkProtocol/main/README.md>\n19. L. Muscariello and R. Polic (Cisco), *Agent Directory Service (draft-mp-agntcy-ads-03)* (2 November 2026) — <https://www.ietf.org/archive/id/draft-mp-agntcy-ads-03.txt>\n20. J. Mozley, N. Williams, B. Sarikaya, R. Schott, J. Damick, and S. Courtney, *DNS for AI Discovery (draft-mozleywilliams-dawn-dnsaid-00)* (2026-11-02 (fetched 2026-11-07)) — <https://www.ietf.org/archive/id/draft-mozleywilliams-dawn-dnsaid-00.txt>\n21. DNS-AID, *DNS-AID: AI Agent Discovery via DNS* (checked 2026-10-30) — <https://www.dns-aid.org/>\n22. Narajala, Courtney, et al., *draft-narajala-courtney-ansv2 — Agent Name Service v2 (ANS): A Domain-Anchored Trust Layer for Autonomous AI Agent Identity (IETF Datatracker)* (checked 2026-10-30) — <https://datatracker.ietf.org/doc/draft-narajala-courtney-ansv2/>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "amp-ant",
   "name": "Agentic Mobile Protocol (AMP)",
   "acronym": "AMP",
   "aliases": [
    "AMP",
    "Alipay+ Agentic Mobile Protocol"
   ],
   "collisions": [
    "AMP (Accelerated Mobile Pages, Google's unrelated web page format)"
   ],
   "step": "pay",
   "parties": [
    "agent-payment",
    "agent-human"
   ],
   "form": "endpoint",
   "track": "single-vendor",
   "scope": "payments",
   "question": "How can an AI agent shop and pay through a person's mobile wallet, within limits the person signed in advance, and have each step checked against that permission?",
   "analog": "A signed standing order on a mobile wallet, checked at every step of the payment",
   "origin": {
    "org": "Ant International, through its Alipay+ wallet network",
    "date": "2026-04-28"
   },
   "governance": "Ant International alone; no standards body or outside editors were found. Licensed under Apache-2.0. Alipay+ \"serves as the core payment network infrastructure under this protocol.\". Separately, on agent identity: \"Ant International, Mastercard, and Visa have begun collaboration on a Know-Your-Agent (KYA) interoperability framework\"; \"Ant International, Mastercard and Visa will collaborate through BuildFin.ai to advance common approaches for AI agent verification, accountability and risk management across payment ecosystems in Singapore.\"",
   "native_status": "Published and open-sourced, with no numbered release (repository last pushed 2026-09-23; no tags or releases when checked). The reference code is a local demo using per-run SQLite / JSON stores under `.temp-db/`.",
   "phase": "draft",
   "implementation": "shipping",
   "adoption": {
    "level": "observed",
    "by": "Ant International (Alipay+ network), MPay (Macau Pass), Nuvei, Ant International Reference Shopping Agent (ant-intl/AMP), and Ant International AMP Python Libraries (mandatechain, schemas, common)",
    "probe_run": null
   },
   "version": {
    "label": "Unversioned (main branch)",
    "date": "2026-09-23"
   },
   "spec_url": "https://github.com/ant-intl/AMP/blob/main/docs/Overview.md",
   "discovery": {
    "mechanism": "No discovery file or fixed path. The specification's discovery step: \"They may also conduct service resource discovery and exchange service capability information prior to transaction execution.\" \"This step is outside the scope of the AMP specification and is not standardized by this protocol.\"",
    "path": null
   },
   "probe": {
    "method": "GET",
    "path": "none — mandates and payment tokens are exchanged inside an authorised wallet flow",
    "parse": "No public artefact at a fixed path to parse.",
    "on_absent": "Not probeable from an origin; check the merchant's or wallet's own announcement instead."
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://github.com/ant-intl/AMP/blob/main/docs/Overview.md",
     "claim": "ant-intl/AMP (GitHub), *AMP/docs/Overview.md at main · ant-intl/AMP · GitHub*, checked 2026-11-03",
     "date": null,
     "quote": "· ant-intl/AMP Agentic Mobile Protocol. Contribute to ant-intl/AMP development by creating an account on",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://raw.githubusercontent.com/ant-intl/AMP/main/docs/Overview.md",
     "claim": "Ant International, *AMP Specification — Overview*, checked 2026-10-30",
     "date": null,
     "quote": "The Agentic Mobile Protocol (AMP) is an application-layer trust protocol designed for payment scenarios involving AI agents. This protocol standardizes the collaboration mechanisms and security boundaries among Users, Agents, Mobile Payment Providers, Merchants, Acquirers, and Credential Providers, ensuring that every payment transaction initiated or facilitated by an Agent is authorizable, executable, verifiable, and traceable. / This protocol is layered on top of existing payment networks, merchant systems, identity infrastructure, and clearing and settlement systems. / During payment processing, the Merchant accesses the Alipay+ payment network through an Acquirer and initiates payment acceptance requests based on the Payment Token. / Within the payment chain, Alipay+ performs network connectivity and coordination functions. / Alipay+ Token, transaction information, and Alipay+ rules. A Payment Token is used to support / This protocol is designed as a modular framework comprising three core domains: Intent Trust Domain, Payment Service Domain, and Wallet Service Domain. / or Merchant APIs; + Merchant-side business-management rules, including product pricing, inventory management, order fulfillment, / Conventional payment flows are based on the premise that Users directly initiate transactions and confirm payments in real time, enabling merchants, payment institutions, and digital wallets to verify transaction intent and assign liability. / In agentic commerce, transactions or related actions may be performed by an Agent within a pre-authorized scope on behalf of Users. This change introduces new trust challenges for all participants across the transaction chain: / It does not replace underlying payment infrastructure; instead, it defines a trust coordination mechanism for agentic transactions on top of such infrastructure. / provides network-level credential capabilities, including Alipay+ Tokens and Payment Tokens, and performs network-level verification",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://www.ant-intl.com/en/news/detail/ant-international-launches-open-sourced-agentic-mobile-protocol-to-drive-ai-commerce/",
     "claim": "Ant International, *Ant International Launches Open-Sourced Agentic Mobile Protocol to Drive AI Commerce*, 2026-04-28; checked 2026-10-30",
     "date": null,
     "quote": "KUALA LUMPUR - Ant International is introducing the Agentic Mobile Protocol (AMP) for the agentic commerce industry to enable secure, AIOps-native agentic payment connection / the full Alipay merchant network.\\\",\\\"esg.CopyRightDesc\\\":\\\"Launched in September 2023 and headquartered in Singapore, Ant International",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://raw.githubusercontent.com/ant-intl/AMP/main/docs/Payment%20Service%20Domain.md",
     "claim": "Ant International, *AMP Specification — Payment Service Domain*, checked 2026-10-30",
     "date": null,
     "quote": "The Buyer Agent initiates an order placement with the Merchant carrying the Payment Token and L1, L2, and L3 Assurance Data. / The Payment Token uses a CGCP code with a length of more than 24 bits. A standard CGCP code typically consists of a Header and a Payload. / Oct 2026 23:45:19 GMT source-age: 0 Overview The Payment Service Domain is the core / Under this protocol, the generated Business Type is 23. / The Payment Service Domain is the core payment execution domain of the Agentic Mobile Protocol (AMP). / CGCP code with a length of more than 24 bits. / The Payment Service Domain is the core payment execution domain of the Agentic Mobile Protocol (AMP). It standardizes the end-to-end payment lifecycle, including wallet payment method binding through the Buyer Agent, Payment Token request and provisioning",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://raw.githubusercontent.com/ant-intl/AMP/main/docs/Intent%20Trust%20Domain.md",
     "claim": "Ant International, *AMP Specification — Intent Trust Domain*, checked 2026-10-30",
     "date": null,
     "quote": "AMP leverages the SD-JWT protocol to generate Assurance Data across the following three layers of the payment flow: / ecosystem is operated under the governance of Alipay+ and supports collaboration among multiple participants. / ecosystem is operated under the governance of Alipay+ / Header alg string MUST Signing algorithm: ES256 L1 Header typ string MUST SD-JWT type: / The Intent Trust Domain is the core trust infrastructure of the Agentic Mobile Protocol (AMP). / The Intent Trust Domain is the core trust infrastructure of the Agentic Mobile Protocol (AMP). It establishes the standards for Agent identity onboarding, converts a User's natural-language transaction intent into an authorizable, verifiable, and structured Mandate",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://github.com/ant-intl/AMP",
     "claim": "GitHub REST API, *ant-intl/AMP repository record*, checked 2026-10-30",
     "date": null,
     "quote": "\"created_at\": \"2026-08-17T06:44:30Z\", \"updated_at\": \"2026-10-27T03:07:49Z\", \"pushed_at\": \"2026-09-23T06:32:45Z\" / \"releases_url\": \"https://api.github.com/repos/ant-intl/AMP/releases{/id}\", \"deployments_url\": \"https://api.github.com/repos/ant-intl/AMP/deployments\", \"created_at\": \"2026-08-17T06:44:30Z\", \"updated_at\": / \"full_name\": \"ant-intl/AMP\", / \"user_view_type\": \"public\", \"site_admin\": false }, \"html_url\": \"https://github.com/ant-intl/AMP\", \"description\": \"Agentic Mobile Protocol\", \"fork\": false, \"url\": / { \"id\": 1336781628, \"node_id\": \"R_kgDOT62rPA\", \"name\": \"AMP\", \"full_name\": \"ant-intl/AMP\", \"private\": false, \"owner\": { \"login\":",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://www.ant-intl.com/en/news/detail/ant-internationals-agentic-mobile-protocol-rolls-out-globally-with-wallets-acquirers-initiating-collaboration-on-kya-interoperability-framework-with-mastercard-and-visa/",
     "claim": "Ant International, *Ant International's Agentic Mobile Protocol Rolls Out Globally with Wallets and Acquirers; Initiating Collaboration on KYA Interoperability Framework with Mastercard and Visa*, 2026-09-11; checked 2026-10-30",
     "date": null,
     "quote": "10 Alipay+ mobile wallet partners will support AMP in their own agent security architecture in Phase I. / Ant International, Mastercard, and Visa have begun collaboration on a Know-Your-Agent (KYA) interoperability framework",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://github.com/ant-intl/AMP/commits",
     "claim": "GitHub REST API, *ant-intl/AMP commits*, checked 2026-10-30",
     "date": null,
     "quote": "\"2026-09-09T02:04:30Z\" }, \"committer\": { \"name\": \"yinhonglu\", \"email\": \"[email redacted]\", \"date\": \"2026-09-09T02:04:30Z\" }, \"message\": \"update README.md\", / \"Updated color style for figure 8\", \"tree\": { \"sha\": \"c4cad9b034ff1c30b47bef9389090356aa1b3e8b\", \"url\": \"https://api.github.com/repos/ant-intl/AMP/git/trees/c4cad9b034ff1c30b47bef9389090356aa1b3e8b\" }, \"url\":",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://raw.githubusercontent.com/ant-intl/AMP/main/README.md",
     "claim": "Ant International, *Agentic Mobile Protocol (AMP) README*, checked 2026-10-30",
     "date": null,
     "quote": "Pydantic v2 - Cryptography/tokens: cryptography, jwcrypto, sd-jwt (SD-JWT per RFC 9901, ES256 signatures) - / | Acquirer | samples/python/acquirer | Recognizes CGCP tokens, routes requests by token prefix, and / / JSON stores under.temp-db/ ## Contact For security issues, please reach out to [email redacted]. / Parses user intent, plans and drives the shopping steps under the AMP protocol (search → checkout → mandate → credential → pay). / money utils mandate_chain src/python/mandate_chain Three-layer SD-JWT generation, validation, and mandate service schemas src/python/schemas Pydantic",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://raw.githubusercontent.com/ant-intl/AMP/main/docs/Business%20Scenarios%20Processes.md",
     "claim": "Ant International, *AMP Specification — Business Scenarios Processes*, checked 2026-10-30",
     "date": null,
     "quote": "Step 4: Service resource discovery and capability negotiation / This step is outside the scope of the AMP specification and is not standardized by this protocol.",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://www.rfc-editor.org/rfc/rfc9901.html",
     "claim": "D. Fett, K. Yasuda, and B. Campbell, *RFC 9901: Selective Disclosure for JSON Web Tokens*, November 2025",
     "date": null,
     "quote": "This specification defines a mechanism for the selective disclosure of individual elements of a JSON data structure used as the payload of a JSON Web Signature (JWS).",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/specification.md",
     "claim": "Google (google-agentic-commerce), *Agentic Payment Protocol (v0.2)*, fetched 2026-10-30",
     "date": null,
     "quote": "Agentic Payment Protocol (v0.2)",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://ucp.dev/documentation/announcements/",
     "claim": "Universal Commerce Protocol, *Announcements*, fetched 2026-10-30",
     "date": null,
     "quote": "August 25, 2026: Protocol Release v2026-08-25",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://www.linuxfoundation.org/press/linux-foundation-announces-operational-launch-of-x402-foundation-to-standardize-internet-native-payments-for-ai-agents-and-applications",
     "claim": "Linux Foundation, *Linux Foundation Announces Operational Launch of x402 Foundation to Standardize Internet-Native Payments for AI Agents and Applications*, July 14, 2026",
     "date": null,
     "quote": "SAN FRANCISCO, July 14, 2026 – The Linux Foundation , the nonprofit organization enabling mass innovation through open source, today announced the operational launch of the x402 Foundation",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://developer.visa.com/docs/trusted-agent-protocol/trusted-agent-protocol-specifications",
     "claim": "Visa, *Trusted Agent Protocol specifications*, checked 2026-10-30",
     "date": null,
     "quote": "By accessing, downloading, or using this specification, you agree to the terms and conditions outlined in the Visa Trusted Agent Protocol Product Terms.",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://www.macaupass.com/news_detail/1150",
     "claim": "Macau Pass (澳門通), *MPay將接入螞蟻國際AMP協議，成為全球首批支持AI智能體支付的電子錢包*, 2026-09-11; checked 2026-10-30",
     "date": null,
     "quote": "MPay將接入螞蟻國際AMP協議，成為全球首批支持AI智能體支付的電子錢包 最新消息 - 澳門通 Macau Pass @font-face{font-family:element-icons;src:url(/_nuxt/fonts/element-icons.313f7da.woff) format(\"woff\"),url(/_nuxt/fonts/element-icons.4520188.ttf)",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://www.linkedin.com/posts/nuvei_nuvei-is-joining-ant-internationals-agentic-activity-7504194123449667585-SNmC",
     "claim": "Nuvei on LinkedIn, *Nuvei Joins Ant International's AMP as Acquiring Partner*, 2026-09-11; checked 2026-10-30",
     "date": null,
     "quote": "Nuvei is joining Ant International's Agentic Mobile Protocol (AMP) as a Phase I acquiring partner, supporting a more open and interoperable agentic commerce ecosystem.",
     "ref": 17
    }
   ],
   "last_verified": "2026-11-12",
   "dispute": null,
   "summary_md": "**Agentic Mobile Protocol** (`AMP`) is an application-layer trust protocol designed for payment scenarios involving AI agents that standardizes the collaboration mechanisms and security boundaries among Users, Agents, Mobile Payment Providers, Merchants, Acquirers, and Credential Providers, ensuring that every payment transaction initiated or facilitated by an Agent is authorizable, executable, verifiable, and traceable. Introduced by Ant International in Kuala Lumpur on 2026-04-28, the protocol is layered on top of existing payment networks, merchant systems, identity infrastructure, and clearing and settlement systems, with Alipay+ serving as the core payment network infrastructure. During payment processing, the Buyer Agent initiates an order placement with the Merchant carrying a one-time Payment Token and `L1`, `L2`, and `L3` Assurance Data generated under the `SD-JWT` protocol with `ES256` signatures and type `sd+jwt`. The Payment Token uses a `CGCP` code with a length of more than 24 bits whose header carries a 2-digit fixed prefix `28`, a 1-digit protocol version bit, a 3-digit partner routing segment, and Business Type `23`, followed by a payload of at least 16 characters, and the Merchant initiates payment acceptance requests to Alipay+ through an Acquirer based on that token. The `ant-intl/AMP` GitHub repository was created on 2026-08-17 under the `Apache-2.0` license and pushed on 2026-09-23 without numbered release tags, while Ant International announced Phase I rollout across 10 Alipay+ mobile wallet partners and 7 acquiring partners on 2026-09-11.",
   "history": [
    {
     "date": "2026-10-20",
     "note": "initial record; verified against github.com/ant-intl/AMP (repo metadata, Overview.md, Intent Trust Domain.md) and Ant International's 2026-04-28 launch release; rollout via The Paypers"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "part_of": null,
   "group": null,
   "watch": [
    {
     "type": "github",
     "repo": "ant-intl/AMP",
     "mode": "release"
    }
   ],
   "use_cases": [
    "agent-checkout",
    "accept-agent-payments",
    "delegate-user-authority"
   ],
   "audience": [
    "platform",
    "agent-builder"
   ],
   "pairs_with": [
    "ap2",
    "ucp",
    "x402",
    "tap"
   ],
   "prerequisites": [],
   "hatnote_md": "This page is about the Agentic Mobile Protocol, the open specification Ant International published for AI agents that pay through mobile wallets on its Alipay+ network. It is not Accelerated Mobile Pages, the web page framework also called AMP. For card-network agent payments see [Agent Payments Protocol (AP2)](/protocols/ap2/) and [Trusted Agent Protocol (TAP)](/protocols/tap/).",
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "payments_onchain",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "This page is about the Agentic Mobile Protocol, the open specification Ant International published for AI agents that pay through mobile wallets on its Alipay+ network. It is not Accelerated Mobile Pages, the web page framework also called AMP. For card-network agent payments see [Agent Payments Protocol (AP2)](/protocols/ap2/) and [Trusted Agent Protocol (TAP)](/protocols/tap/). [1]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Agentic Mobile Protocol** (`AMP`) is an application-layer trust protocol designed for payment scenarios involving AI agents that standardizes the collaboration mechanisms and security boundaries among Users, Agents, Mobile Payment Providers, Merchants, Acquirers, and Credential Providers, ensuring that every payment transaction initiated or facilitated by an Agent is authorizable, executable, verifiable, and traceable. [2] Introduced by Ant International in Kuala Lumpur on 2026-04-28, the protocol is layered on top of existing payment networks, merchant systems, identity infrastructure, and clearing and settlement systems, with Alipay+ serving as the core payment network infrastructure. [2][3] During payment processing, the Buyer Agent initiates an order placement with the Merchant carrying a one-time Payment Token and `L1`, `L2`, and `L3` Assurance Data generated under the `SD-JWT` protocol with `ES256` signatures and type `sd+jwt`. [4][5] The Payment Token uses a `CGCP` code with a length of more than 24 bits whose header carries a 2-digit fixed prefix `28`, a 1-digit protocol version bit, a 3-digit partner routing segment, and Business Type `23`, followed by a payload of at least 16 characters, and the Merchant initiates payment acceptance requests to Alipay+ through an Acquirer based on that token. [2][4] The `ant-intl/AMP` GitHub repository was created on 2026-08-17 under the `Apache-2.0` license and pushed on 2026-09-23 without numbered release tags, while Ant International announced Phase I rollout across 10 Alipay+ mobile wallet partners and 7 acquiring partners on 2026-09-11. [6][7]",
   "v05_identity_sentence_md": "**Agentic Mobile Protocol** (`AMP`) is an application-layer trust protocol designed for payment scenarios involving AI agents that standardizes the collaboration mechanisms and security boundaries among Users, Agents, Mobile Payment Providers, Merchants, Acquirers, and Credential Providers, ensuring that every payment transaction initiated or facilitated by an Agent is authorizable, executable, verifiable, and traceable. [2] Introduced by Ant International in Kuala Lumpur on 2026-04-28, the protocol is layered on top of existing payment networks, merchant systems, identity infrastructure, and clearing and settlement systems, with Alipay+ serving as the core payment network infrastructure. [2][3]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Pay](/category/pay/) (`pay`)"
    },
    {
     "label": "Form",
     "value_md": "Endpoint (`endpoint`)"
    },
    {
     "label": "Originated by",
     "value_md": "Ant International (Alipay+ network; announced `2026-04-28` in Kuala Lumpur; repo created `2026-08-17`) [2][6][8]"
    },
    {
     "label": "Governed by",
     "value_md": "Ant International under Alipay+ governance rules (with a Know-Your-Agent (`KYA`) interoperability collaboration with Mastercard and Visa via MAS `BuildFin.ai` announced `2026-09-11`) [2][5][7]"
    },
    {
     "label": "Track",
     "value_md": "Single-vendor open-sourced framework specification (`ant-intl/AMP`, operated under Alipay+ governance) [5][6]"
    },
    {
     "label": "Status",
     "value_md": "Published and open-sourced, with no numbered release (repository last pushed 2026-09-23; no tags or releases when checked). The reference code is a local demo using per-run SQLite / JSON stores under `.temp-db/`. [2][4][6]"
    },
    {
     "label": "Version",
     "value_md": "Unversioned (`main` branch; created `2026-08-17`, initial commit `2026-08-18`, latest push `2026-09-23`; CGCP Business Type `23`) [2][4][6]"
    },
    {
     "label": "Wire format",
     "value_md": "RFC 9901 `SD-JWT` (`typ: \"sd+jwt\"`, `alg: \"ES256\"`, `_sd_alg: \"sha-256\"`), `sd_hash`-linked `L1`/`L2`/`L3`, JSON Mandates (`IMMEDIATE`, `AUTONOMOUS`), `>24`-bit `CGCP` tokens (prefix `28`, Business Type `23`) [4][5][9]"
    },
    {
     "label": "Specification",
     "value_md": "[Overview.md](https://raw.githubusercontent.com/ant-intl/AMP/main/docs/Overview.md) · [Intent Trust Domain.md](https://raw.githubusercontent.com/ant-intl/AMP/main/docs/Intent%20Trust%20Domain.md) · [Payment Service Domain.md](https://raw.githubusercontent.com/ant-intl/AMP/main/docs/Payment%20Service%20Domain.md) · [Wallet Service Domain.md](https://raw.githubusercontent.com/ant-intl/AMP/main/docs/Wallet%20Service%20Domain.md) · [Business Scenarios Processes.md](https://raw.githubusercontent.com/ant-intl/AMP/main/docs/Business%20Scenarios%20Processes.md) [2][4][5]"
    },
    {
     "label": "Found at",
     "value_md": "No `.well-known` path; Step 4 discovery is out of scope (`CGCP` tokens route via prefix `28` + 3-digit partner code) [4][9][10]"
    },
    {
     "label": "Licence",
     "value_md": "Apache License 2.0 (`ant-intl/AMP`) [6][8][9]"
    }
   ],
   "v05_problem_md": "Conventional payment flows assume Users directly initiate transactions and confirm payments in real time, enabling merchants, payment institutions, and digital wallets to verify intent and assign liability. [2] When an Agent performs transactions within a pre-authorized scope on behalf of Users, participants face challenges verifying Agent identity, ambiguity in accountability, execution fidelity demands without real-time user confirmation, and reliance on traceable records for disputes. [2] AMP organizes trust coordination into three domains: the Intent Trust Domain converts natural-language intent into a structured `IMMEDIATE` or `AUTONOMOUS` Mandate confirmed via a Trusted Authorization Surface, enforces four-stage Intent Guard pre-verification, and chains three-layer `SD-JWT` Assurance Data (`L1`, `L2`, and `L3`); the Payment Service Domain binds wallets to an Alipay+ Token and provisions one-time `CGCP` Payment Tokens; and the Wallet Service Domain exposes delegated task and limit controls. [4][5] AMP does not replace underlying payment infrastructure, interbank clearing cycles, or institutional anti-fraud models, and Step 4 service resource discovery and capability negotiation between Buyer Agents and Merchants is outside the scope of the AMP specification. [2][10]",
   "v05_mechanism_delta_md": "AMP organizes trust coordination into three domains: the Intent Trust Domain converts natural-language intent into a structured `IMMEDIATE` or `AUTONOMOUS` Mandate confirmed via a Trusted Authorization Surface, enforces four-stage Intent Guard pre-verification, and chains three-layer `SD-JWT` Assurance Data (`L1`, `L2`, and `L3`); the Payment Service Domain binds wallets to an Alipay+ Token and provisions one-time `CGCP` Payment Tokens; and the Wallet Service Domain exposes delegated task and limit controls. [4][5]",
   "v05_scope_boundary_md": "AMP does not replace underlying payment infrastructure, interbank clearing cycles, or institutional anti-fraud models, and Step 4 service resource discovery and capability negotiation between Buyer Agents and Merchants is outside the scope of the AMP specification. [2][10]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "Selective Disclosure for JWTs (SD-JWT, RFC 9901)",
      "spec_or_rfc": "RFC 9901",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "AMP builds assurance data with SD-JWT across three layers of the payment flow, covering an immediate mandate and an autonomous mandate, and the merchant-facing credential is a one-time CGCP Payment Token longer than 24 bits. [2][11]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "ap2",
      "target_name": "Agent Payments Protocol (AP2)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "AMP assurance data is an SD-JWT across three layers, followed by an Alipay+ CGCP Payment Token longer than 24 bits, while AP2's checkout credential is an SD-JWT verifiable credential for the Checkout Mandate signed on a Trusted Surface. [2][12]"
     },
     {
      "target_id": "ucp",
      "target_name": "Universal Commerce Protocol (UCP)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "UCP publishes a merchant profile at /.well-known/ucp with payment handlers, while AMP defines onboarding to an Agent ID, the immediate or autonomous mandate, and the CGCP Payment Token, and standardizes no discovery file. [2][13]"
     },
     {
      "target_id": "x402",
      "target_name": "x402",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "AMP pays by presenting a CGCP Payment Token over the Alipay+ network after the SD-JWT mandate check, while x402 pays by retrying an HTTP request with PAYMENT-SIGNATURE. [2][14]"
     },
     {
      "target_id": "tap",
      "target_name": "Trusted Agent Protocol (TAP)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "TAP identifies an agent by a signature on the merchant HTTP request, while AMP's agent binding is the Agent ID from Alipay+ Know Your Agent onboarding and the SD-JWT mandate that precedes the CGCP Payment Token. [2][15]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (5 probed or cited examples; non-exhaustive).",
    "side_a": {
     "visible": true,
     "heading": "Sellers, platforms & payment rails",
     "col4_header": "Rail, Asset & Scheme",
     "note_md": null,
     "rows": [
      {
       "actor": "Ant International (Alipay+ network)",
       "role": "Payment network (Originator)",
       "status": "Partial",
       "status_display": "Partial · checked 2026-10-30",
       "col4_md": "Alipay+ clearing & settlement rail; 3-layer SD-JWT mandates (Immediate & Autonomous) and >24-bit CGCP one-time Payment Tokens",
       "source_md": "[Ant International Launch (2026-04-28)](https://www.ant-intl.com/en/news/detail/ant-international-launches-open-sourced-agentic-mobile-protocol-to-drive-ai-commerce/) [3] · [ant-intl/AMP Overview.md](https://raw.githubusercontent.com/ant-intl/AMP/main/docs/Overview.md) [2]"
      },
      {
       "actor": "MPay (Macau Pass)",
       "role": "Mobile wallet / payment provider",
       "status": "Development",
       "status_display": "Development · as of 2026-09-11",
       "col4_md": "Alipay+ partner e-wallet connecting to AMP for user mandate authorization and AI-agent wallet debiting (self-confirmed 2026-09-11 in future tense: 'will connect')",
       "source_md": "[Macau Pass Announcement (2026-09-11)](https://www.macaupass.com/news_detail/1150) [16]"
      },
      {
       "actor": "Nuvei",
       "role": "Acquirer",
       "status": "Development",
       "status_display": "Development · as of 2026-09-11",
       "col4_md": "Phase I merchant acquiring partner routing AMP Payment Token acceptance requests over the Alipay+ network (self-confirmed 2026-09-11)",
       "source_md": "[Nuvei Announcement (2026-09-11)](https://www.linkedin.com/posts/nuvei_nuvei-is-joining-ant-internationals-agentic-activity-7504194123449667585-SNmC) [17]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Buying agents, wallets & client SDKs",
     "col4_header": "Rail, Asset & Scheme",
     "note_md": null,
     "rows": [
      {
       "actor": "Ant International Reference Shopping Agent (`ant-intl/AMP`)",
       "role": "Reference agent (Originator)",
       "status": "Experimental",
       "status_display": "Experimental · checked 2026-10-30",
       "col4_md": "Local reference shopping agent driving `search → checkout → mandate → credential → pay` backed by per-run `.temp-db/` SQLite/JSON stores",
       "source_md": "[ant-intl/AMP README (checked 2026-10-29)](https://raw.githubusercontent.com/ant-intl/AMP/main/README.md) [9]"
      },
      {
       "actor": "Ant International AMP Python Libraries (`mandate_chain`, `schemas`, `common`)",
       "role": "Reference SDK (Originator)",
       "status": "Partial",
       "status_display": "Partial · checked 2026-10-30",
       "col4_md": "Python libraries for 3-layer SD-JWT mandate generation, validation, and AMP message schemas",
       "source_md": "[ant-intl/AMP README (checked 2026-10-29)](https://raw.githubusercontent.com/ant-intl/AMP/main/README.md) [9]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Pay protocols](/category/pay/)** — Category index for `pay` standards."
    }
   ],
   "v05_compiled_md": "---\nid: amp-ant\ntitle: \"Agentic Mobile Protocol (AMP)\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: pay\nform: endpoint\nwire_archetype: payments_onchain\nspec_url: https://raw.githubusercontent.com/ant-intl/AMP/main/docs/Overview.md\nlast_checked: 2026-11-12\n---\n\n# Agentic Mobile Protocol (AMP)\n\n**Category:** [Pay](/category/pay/) (`pay`) · **Form:** Endpoint (`endpoint`) · **Last checked:** 2026-11-12\n\n> *This page is about the Agentic Mobile Protocol, the open specification Ant International published for AI agents that pay through mobile wallets on its Alipay+ network. It is not Accelerated Mobile Pages, the web page framework also called AMP. For card-network agent payments see [Agent Payments Protocol (AP2)](/protocols/ap2/) and [Trusted Agent Protocol (TAP)](/protocols/tap/). [1]*\n\n**Agentic Mobile Protocol** (`AMP`) is an application-layer trust protocol designed for payment scenarios involving AI agents that standardizes the collaboration mechanisms and security boundaries among Users, Agents, Mobile Payment Providers, Merchants, Acquirers, and Credential Providers, ensuring that every payment transaction initiated or facilitated by an Agent is authorizable, executable, verifiable, and traceable. [2] Introduced by Ant International in Kuala Lumpur on 2026-04-28, the protocol is layered on top of existing payment networks, merchant systems, identity infrastructure, and clearing and settlement systems, with Alipay+ serving as the core payment network infrastructure. [2][3] During payment processing, the Buyer Agent initiates an order placement with the Merchant carrying a one-time Payment Token and `L1`, `L2`, and `L3` Assurance Data generated under the `SD-JWT` protocol with `ES256` signatures and type `sd+jwt`. [4][5] The Payment Token uses a `CGCP` code with a length of more than 24 bits whose header carries a 2-digit fixed prefix `28`, a 1-digit protocol version bit, a 3-digit partner routing segment, and Business Type `23`, followed by a payload of at least 16 characters, and the Merchant initiates payment acceptance requests to Alipay+ through an Acquirer based on that token. [2][4] The `ant-intl/AMP` GitHub repository was created on 2026-08-17 under the `Apache-2.0` license and pushed on 2026-09-23 without numbered release tags, while Ant International announced Phase I rollout across 10 Alipay+ mobile wallet partners and 7 acquiring partners on 2026-09-11. [6][7]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Pay](/category/pay/) (`pay`) |\n| **Form** | Endpoint (`endpoint`) |\n| **Originated by** | Ant International (Alipay+ network; announced `2026-04-28` in Kuala Lumpur; repo created `2026-08-17`) [2][6][8] |\n| **Governed by** | Ant International under Alipay+ governance rules (with a Know-Your-Agent (`KYA`) interoperability collaboration with Mastercard and Visa via MAS `BuildFin.ai` announced `2026-09-11`) [2][5][7] |\n| **Track** | Single-vendor open-sourced framework specification (`ant-intl/AMP`, operated under Alipay+ governance) [5][6] |\n| **Status** | Published and open-sourced, with no numbered release (repository last pushed 2026-09-23; no tags or releases when checked). The reference code is a local demo using per-run SQLite / JSON stores under `.temp-db/`. [2][4][6] |\n| **Version** | Unversioned (`main` branch; created `2026-08-17`, initial commit `2026-08-18`, latest push `2026-09-23`; CGCP Business Type `23`) [2][4][6] |\n| **Wire format** | RFC 9901 `SD-JWT` (`typ: \"sd+jwt\"`, `alg: \"ES256\"`, `_sd_alg: \"sha-256\"`), `sd_hash`-linked `L1`/`L2`/`L3`, JSON Mandates (`IMMEDIATE`, `AUTONOMOUS`), `>24`-bit `CGCP` tokens (prefix `28`, Business Type `23`) [4][5][9] |\n| **Specification** | [Overview.md](https://raw.githubusercontent.com/ant-intl/AMP/main/docs/Overview.md) · [Intent Trust Domain.md](https://raw.githubusercontent.com/ant-intl/AMP/main/docs/Intent%20Trust%20Domain.md) · [Payment Service Domain.md](https://raw.githubusercontent.com/ant-intl/AMP/main/docs/Payment%20Service%20Domain.md) · [Wallet Service Domain.md](https://raw.githubusercontent.com/ant-intl/AMP/main/docs/Wallet%20Service%20Domain.md) · [Business Scenarios Processes.md](https://raw.githubusercontent.com/ant-intl/AMP/main/docs/Business%20Scenarios%20Processes.md) [2][4][5] |\n| **Found at** | No `.well-known` path; Step 4 discovery is out of scope (`CGCP` tokens route via prefix `28` + 3-digit partner code) [4][9][10] |\n| **Licence** | Apache License 2.0 (`ant-intl/AMP`) [6][8][9] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [Adoption and ecosystem](#adoption-and-ecosystem)\n4. [See also](#see-also)\n5. [References](#references)\n\n---\n\n## Problem and scope\n\nConventional payment flows assume Users directly initiate transactions and confirm payments in real time, enabling merchants, payment institutions, and digital wallets to verify intent and assign liability. [2] When an Agent performs transactions within a pre-authorized scope on behalf of Users, participants face challenges verifying Agent identity, ambiguity in accountability, execution fidelity demands without real-time user confirmation, and reliance on traceable records for disputes. [2] AMP organizes trust coordination into three domains: the Intent Trust Domain converts natural-language intent into a structured `IMMEDIATE` or `AUTONOMOUS` Mandate confirmed via a Trusted Authorization Surface, enforces four-stage Intent Guard pre-verification, and chains three-layer `SD-JWT` Assurance Data (`L1`, `L2`, and `L3`); the Payment Service Domain binds wallets to an Alipay+ Token and provisions one-time `CGCP` Payment Tokens; and the Wallet Service Domain exposes delegated task and limit controls. [4][5] AMP does not replace underlying payment infrastructure, interbank clearing cycles, or institutional anti-fraud models, and Step 4 service resource discovery and capability negotiation between Buyer Agents and Merchants is outside the scope of the AMP specification. [2][10]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **Selective Disclosure for JWTs (SD-JWT, RFC 9901)** | `RFC 9901` | Profiles classic standard | AMP builds assurance data with SD-JWT across three layers of the payment flow, covering an immediate mandate and an autonomous mandate, and the merchant-facing credential is a one-time CGCP Payment Token longer than 24 bits. [2][11] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Agent Payments Protocol (AP2)](/protocols/ap2/)** | Peer alternative | AMP assurance data is an SD-JWT across three layers, followed by an Alipay+ CGCP Payment Token longer than 24 bits, while AP2's checkout credential is an SD-JWT verifiable credential for the Checkout Mandate signed on a Trusted Surface. [2][12] |\n| **[Universal Commerce Protocol (UCP)](/protocols/ucp/)** | Complements | UCP publishes a merchant profile at /.well-known/ucp with payment handlers, while AMP defines onboarding to an Agent ID, the immediate or autonomous mandate, and the CGCP Payment Token, and standardizes no discovery file. [2][13] |\n| **[x402](/protocols/x402/)** | Peer alternative | AMP pays by presenting a CGCP Payment Token over the Alipay+ network after the SD-JWT mandate check, while x402 pays by retrying an HTTP request with PAYMENT-SIGNATURE. [2][14] |\n| **[Trusted Agent Protocol (TAP)](/protocols/tap/)** | Complements | TAP identifies an agent by a signature on the merchant HTTP request, while AMP's agent binding is the Agent ID from Alipay+ Know Your Agent onboarding and the SD-JWT mandate that precedes the CGCP Payment Token. [2][15] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (5 probed or cited examples; non-exhaustive).*\n\n### Sellers, platforms & payment rails\n\n| Actor | Role | Status | Rail, Asset & Scheme | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Ant International (Alipay+ network)** | Payment network (Originator) | Partial · checked 2026-10-30 | Alipay+ clearing & settlement rail; 3-layer SD-JWT mandates (Immediate & Autonomous) and >24-bit CGCP one-time Payment Tokens | [Ant International Launch (2026-04-28)](https://www.ant-intl.com/en/news/detail/ant-international-launches-open-sourced-agentic-mobile-protocol-to-drive-ai-commerce/) [3] · [ant-intl/AMP Overview.md](https://raw.githubusercontent.com/ant-intl/AMP/main/docs/Overview.md) [2] |\n| **MPay (Macau Pass)** | Mobile wallet / payment provider | Development · as of 2026-09-11 | Alipay+ partner e-wallet connecting to AMP for user mandate authorization and AI-agent wallet debiting (self-confirmed 2026-09-11 in future tense: 'will connect') | [Macau Pass Announcement (2026-09-11)](https://www.macaupass.com/news_detail/1150) [16] |\n| **Nuvei** | Acquirer | Development · as of 2026-09-11 | Phase I merchant acquiring partner routing AMP Payment Token acceptance requests over the Alipay+ network (self-confirmed 2026-09-11) | [Nuvei Announcement (2026-09-11)](https://www.linkedin.com/posts/nuvei_nuvei-is-joining-ant-internationals-agentic-activity-7504194123449667585-SNmC) [17] |\n\n### Buying agents, wallets & client SDKs\n\n| Actor | Role | Status | Rail, Asset & Scheme | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Ant International Reference Shopping Agent (`ant-intl/AMP`)** | Reference agent (Originator) | Experimental · checked 2026-10-30 | Local reference shopping agent driving `search → checkout → mandate → credential → pay` backed by per-run `.temp-db/` SQLite/JSON stores | [ant-intl/AMP README (checked 2026-10-29)](https://raw.githubusercontent.com/ant-intl/AMP/main/README.md) [9] |\n| **Ant International AMP Python Libraries (`mandate_chain`, `schemas`, `common`)** | Reference SDK (Originator) | Partial · checked 2026-10-30 | Python libraries for 3-layer SD-JWT mandate generation, validation, and AMP message schemas | [ant-intl/AMP README (checked 2026-10-29)](https://raw.githubusercontent.com/ant-intl/AMP/main/README.md) [9] |\n\n---\n\n## See also\n\n- **Category:** [Pay protocols](/category/pay/)\n\n---\n\n## References\n\n1. ant-intl/AMP (GitHub), *AMP/docs/Overview.md at main · ant-intl/AMP · GitHub* (checked 2026-11-03) — <https://github.com/ant-intl/AMP/blob/main/docs/Overview.md>\n2. Ant International, *AMP Specification — Overview* (checked 2026-10-30) — <https://raw.githubusercontent.com/ant-intl/AMP/main/docs/Overview.md>\n3. Ant International, *Ant International Launches Open-Sourced Agentic Mobile Protocol to Drive AI Commerce* (2026-04-28; checked 2026-10-30) — <https://www.ant-intl.com/en/news/detail/ant-international-launches-open-sourced-agentic-mobile-protocol-to-drive-ai-commerce/>\n4. Ant International, *AMP Specification — Payment Service Domain* (checked 2026-10-30) — <https://raw.githubusercontent.com/ant-intl/AMP/main/docs/Payment%20Service%20Domain.md>\n5. Ant International, *AMP Specification — Intent Trust Domain* (checked 2026-10-30) — <https://raw.githubusercontent.com/ant-intl/AMP/main/docs/Intent%20Trust%20Domain.md>\n6. GitHub REST API, *ant-intl/AMP repository record* (checked 2026-10-30) — <https://github.com/ant-intl/AMP>\n7. Ant International, *Ant International's Agentic Mobile Protocol Rolls Out Globally with Wallets and Acquirers; Initiating Collaboration on KYA Interoperability Framework with Mastercard and Visa* (2026-09-11; checked 2026-10-30) — <https://www.ant-intl.com/en/news/detail/ant-internationals-agentic-mobile-protocol-rolls-out-globally-with-wallets-acquirers-initiating-collaboration-on-kya-interoperability-framework-with-mastercard-and-visa/>\n8. GitHub REST API, *ant-intl/AMP commits* (checked 2026-10-30) — <https://github.com/ant-intl/AMP/commits>\n9. Ant International, *Agentic Mobile Protocol (AMP) README* (checked 2026-10-30) — <https://raw.githubusercontent.com/ant-intl/AMP/main/README.md>\n10. Ant International, *AMP Specification — Business Scenarios Processes* (checked 2026-10-30) — <https://raw.githubusercontent.com/ant-intl/AMP/main/docs/Business%20Scenarios%20Processes.md>\n11. D. Fett, K. Yasuda, and B. Campbell, *RFC 9901: Selective Disclosure for JSON Web Tokens* (November 2025) — <https://www.rfc-editor.org/rfc/rfc9901.html>\n12. Google (google-agentic-commerce), *Agentic Payment Protocol (v0.2)* (fetched 2026-10-30) — <https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/specification.md>\n13. Universal Commerce Protocol, *Announcements* (fetched 2026-10-30) — <https://ucp.dev/documentation/announcements/>\n14. Linux Foundation, *Linux Foundation Announces Operational Launch of x402 Foundation to Standardize Internet-Native Payments for AI Agents and Applications* (July 14, 2026) — <https://www.linuxfoundation.org/press/linux-foundation-announces-operational-launch-of-x402-foundation-to-standardize-internet-native-payments-for-ai-agents-and-applications>\n15. Visa, *Trusted Agent Protocol specifications* (checked 2026-10-30) — <https://developer.visa.com/docs/trusted-agent-protocol/trusted-agent-protocol-specifications>\n16. Macau Pass (澳門通), *MPay將接入螞蟻國際AMP協議，成為全球首批支持AI智能體支付的電子錢包* (2026-09-11; checked 2026-10-30) — <https://www.macaupass.com/news_detail/1150>\n17. Nuvei on LinkedIn, *Nuvei Joins Ant International's AMP as Acquiring Partner* (2026-09-11; checked 2026-10-30) — <https://www.linkedin.com/posts/nuvei_nuvei-is-joining-ant-internationals-agentic-activity-7504194123449667585-SNmC>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "x401",
   "hatnote_md": "This page is about x401 from Proof (Notarize, Inc.), an HTTP protocol that lets a website or API demand a verifiable credential before it serves a route. Several unrelated projects use the same name: X401KIT, a Solana token-gating protocol whose repository was created on 2025-11-14 (UTC), before Proof's; Shehryar/x401, an agent-authorization scheme with ACT tokens (2026-02-24 UTC); the Claw401 wallet-authentication SDK; and a `$X401` meme coin on Base.meme. Payment is out of scope here and is handled by [x402](/protocols/x402/) or another payment protocol.",
   "name": "x401: HTTP Proof Requirement Protocol",
   "acronym": "",
   "aliases": [
    "x401"
   ],
   "collisions": [
    "X401KIT (X401KIT/x401kit, created 2025-11-14 UTC), an unrelated Solana token-gating protocol over HTTP 401",
    "Shehryar/x401 (created 2026-02-24 UTC), an unrelated agent-authorization scheme using ACT tokens",
    "Claw401 (claw401 on PyPI, uploaded 2026-03-08), an unrelated wallet-authentication SDK",
    "$X401 on Base.meme, an unrelated meme coin"
   ],
   "step": "identify",
   "parties": [
    "agent-site"
   ],
   "form": "http-header",
   "track": "vendor-consortium",
   "scope": "general",
   "question": "How can a resource ask an agent to prove something about the person behind it, such as being a verified human, before serving a request?",
   "analog": "A WWW-Authenticate challenge that asks for a verifiable credential instead of a password",
   "origin": {
    "org": "Proof (Notarize, Inc.), with Circle as co-editor",
    "date": "2026-05-07"
   },
   "governance": "No standards body. Proof runs the repository (proof/x401, Apache-2.0) and site (x401.id). Editors: Daniel Buchner (Proof) and Bhushit Agarwal (Circle). Spec lists named reviewers from Lightspark, MATTR, Okta, OpenAI, Proof, and Visa (listing a reviewer is not a company endorsement)",
   "native_status": "Status: Draft, Version: 0.2.0 (\"The spec is a working draft\"; repo has no tags or releases; Proof calls its own Verifier service live in production with Cloudflare Workers)",
   "phase": "draft",
   "implementation": "shipping",
   "adoption": {
    "level": "observed",
    "by": "Proof, Superfluid Wallet, Proof (@proof.com/x401-workers), and Solidus Network",
    "probe_run": null
   },
   "version": {
    "label": "0.2.0 (Draft, bumped 2026-06-22; v0.1.0 still published at /spec/0.1.0/)",
    "date": "2026-06-22"
   },
   "spec_url": "https://x401.proof.com/spec/latest/",
   "discovery": {
    "mechanism": "HTTP header fields (`PROOF-REQUEST`, `PROOF-RESPONSE`, `PROOF-RESULT`), each carrying one base64url-encoded UTF-8 JSON object wrapping a Digital Credentials request authored by the Verifier",
    "path": "none — signaled per request on the protected route itself"
   },
   "probe": {
    "method": "GET",
    "path": "{origin}/{protected-path}",
    "parse": "A PROOF-REQUEST response header carrying base64url JSON that describes the credential required (OpenID4VP/DCQL)",
    "on_absent": "No PROOF-REQUEST header means this path does not ask for proof via x401; other paths on the same origin may."
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://x401.proof.com/spec/latest/",
     "claim": "Daniel Buchner (Proof) and Bhushit Agarwal (Circle), eds., *x401: HTTP Proof Requirement Protocol (Draft 0.2.0)*, Draft 0.2.0; fetched 2026-10-30",
     "date": null,
     "quote": "x401 defines an HTTP-based, route-scoped proof requirement protocol for requiring credential-based proof before access to a protected resource is granted. / Status: Draft Version: 0.2.0 Latest draft: https://x401.proof.com/spec/latest/ Previous version: https://x401.proof.com/spec/0.1.0/ Editors: Daniel Buchner - Proof Bhushit Agarwal - Circle / Reuse OpenID4VP over the DC API, DCQL, OAuth, and OpenID4VCI rather than redefining them. / the PROOF-REQUEST HTTP header field to carry proof requirements the PROOF-RESPONSE HTTP header field to carry credential results, result references, or reusable proof-satisfaction tokens the PROOF-RESULT HTTP header field to carry verifier response information, including x401 proof errors / Each x401 proof header field carries exactly one base64url-encoded UTF-8 JSON object. / The request is carried in the digital member of the payload's credential_requirements - itself a CredentialRequestOptions value usable directly as the argument to native credential manager or handler methods (navigator.credentials.get(payload.credential_requirements)) / MUST make each entry a valid OpenID4VP request for the Digital Credentials API, using protocol: \"openid4vp-v1-signed\" (RECOMMENDED) or protocol: \"openid4vp-v1-unsigned\". / This draft does not yet request any IANA registrations. / Previous Version: https://x401.proof.com/spec/0.1.0/ Editors: Daniel Buchner - Proof Bhushit Agarwal - Circle Reviewers: Jacky / Previous Version: https://x401.proof.com/spec/0.1.0/ Editors: Daniel Buchner - Proof / an embedded element: https://x401.id/spec/schemas/request.json. {\"$schema\": \"https://json-schema.org/draft/2020-12/schema\", \"$id\": \"https://x401.id/spec/schemas/request.json\", \"title\": \"x401 Proof Requirement / Status: Draft Version: 0.2.0 / credential format replace OpenID4VP or the W3C Digital Credentials API replace OpenID4VCI redefine how / \"$id\": \"https://x401.id/spec/schemas/request.json\", \"title\": \"x401 Proof Requirement Payload\", \"description\": \"Schema for an x401 proof requirement / PROOF-REQUEST payload satisfies the route's x401 gate. POST /accounts/applications HTTP/1.1 Host: bank.example.com Accept: application/json / HTTP has an established challenge model for authentication - a 401 Unauthorized response carrying a WWW-Authenticate challenge - but that model is scoped to negotiating an authentication scheme and does not define a general-purpose, machine-readable protocol for route-scoped proof requirements / x401 does not extend or overload that model. It carries proof requirements in a dedicated PROOF-REQUEST header field and treats the response status code as independent of the proof requirement, so an x401 requirement can coexist with any existing WWW-Authenticate-based authentication on the same route / In the typical flow, an Agent receives an x401 proof requirement from a Verifier, obtains a result for the Verifier-composed proof request - by invoking the request through native credential methods, relaying it to a Credential Manager, or acquiring a remotely generated result - and retries the original protected route with the credential result inline or by reference. / x401 does not: define a new credential format replace OpenID4VP or the W3C Digital Credentials API replace OpenID4VCI redefine how a Digital Credentials request is composed, signed, or invoked mandate a single transport for delivering the composed request to a Credential Manager define a payment protocol require all Verifiers to maintain server-side session state / x401 is intentionally separate from payment protocols. When payment is required, it MUST be handled with HTTP 402 Payment Required and an appropriate payment protocol. x401 MUST NOT redefine payment semantics. / HTTP/1.1 401 Unauthorized PROOF-REQUEST: <base64url-x401-payload> Cache-Control: no-store",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://raw.githubusercontent.com/proof/x401/main/CHANGELOG.md",
     "claim": "Proof (Notarize, Inc.), *proof/x401 CHANGELOG*, 0.2.0; fetched 2026-10-30",
     "date": null,
     "quote": "## [0.2.0] Reworks the proof requirement from a decomposed OpenID4VP request the Agent assembles into a composed, Verifier-authored Digital Credentials request the Agent executes, relays, or acquires remotely. This is a breaking change to the proof object and the VP Artifact. / C \"x401 Request Object JSON Schema\" (JSON Schema 2020-12), published at https://x401.id/spec/schemas/request.json, covering both / Bumped the payload, error object, and token object `version`, and the spec version, to `0.2.0`. / Presentation\" replaced by \"Obtaining a Presentation\"; the W3C Digital Credentials API and the OpenID4VP / the result and replay the route. - Appendix C \"x401 Request Object JSON Schema\"",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://x401.proof.com/spec/0.1.0/",
     "claim": "Daniel Buchner (Proof) and Darren Louie (Proof), eds., *x401: HTTP Proof Requirement Protocol (Draft 0.1.0)*, Draft 0.1.0; fetched 2026-10-30",
     "date": null,
     "quote": "the PROOF-REQUIRED HTTP header field to carry proof requirements the PROOF-PRESENTATION HTTP header field to carry proof presentations or reusable proof-satisfaction tokens the PROOF-RESPONSE HTTP header field to carry verifier response information, including x401 proof errors / }, \"issuers\": {\"trust_establishment_url\": \"https://bank.example.com/.well-known/x401/trust/financial-customer-v1\" }, \"request_id\": \"proof-template-financial-customer-v1\", \"satisfied_requirements\": / Status: Draft Version: 0.1.0 Editors: Daniel Buchner - Proof Darren Louie - Proof",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://raw.githubusercontent.com/proof/x401/main/README.md",
     "claim": "Proof (Notarize, Inc.), *proof/x401 README*, fetched 2026-10-30",
     "date": null,
     "quote": "The spec is a working draft, and the Open Questions & Future Additions section of spec.md lists areas where proposals, examples, interop profiles, and reference implementations are especially wanted. / # x401 x401 is an HTTP-based, route-scoped proof requirement protocol: it lets a server / it works x401 is a header protocol carried over three dedicated fields: - PROOF-REQUEST / JSON payload. - PROOF-RESPONSE - the Agent returns the presentation result (inline or by / Licensed under the [Apache License 2.0](LICENSE). / 401 Unauthorized / WWW-Authenticate handle authentication, and 402 Payment Required handles payment, but there is no general, machine-readable way to express *\"present a qualifying credential to proceed.\"*",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://github.com/proof/x401",
     "claim": "GitHub API (proof/x401), *Repository metadata for proof/x401*, created 2026-05-07; fetched 2026-10-30",
     "date": null,
     "quote": "\"https://api.github.com/repos/proof/x401/releases{/id}\", \"deployments_url\": \"https://api.github.com/repos/proof/x401/deployments\", \"created_at\": \"2026-05-07T18:23:10Z\", \"updated_at\": \"2026-10-28T12:06:45Z\", / { \"id\": 1232241154, \"node_id\": \"R_kgDOSXKCAg\", \"name\": \"x401\", \"full_name\": \"proof/x401\", \"private\": false, \"owner\": { \"login\": / \"full_name\": \"proof/x401\", / \"proof/x401\", \"private\": false, \"owner\": { \"login\": \"proof\", \"id\": 39162611, \"node_id\": \"MDEyOk9yZ2FuaXphdGlvbjM5MTYyNjEx\", \"avatar_url\": \"https://avatars.githubusercontent.com/u/39162611?v=4\", \"gravatar_id\":",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://x401.id/",
     "claim": "Proof (Notarize, Inc.), *x401 — HTTP Proof Requirement Protocol homepage*, fetched 2026-10-30",
     "date": null,
     "quote": "© 2026 Notarize, Inc. (dba Proof.com). All rights reserved. / ) TE Tony England ( Visa ) PROOF-REQUEST x401 Standard Draft 0.2.0 License Apache-2.0",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://x401.id/ecosystem",
     "claim": "Proof (Notarize, Inc.), *Ecosystem — x401*, fetched 2026-10-30",
     "date": null,
     "quote": "the W3C Digital Credentials API, OpenID4VP, DCQL, and",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://www.w3.org/TR/digital-credentials/",
     "claim": "W3C, *Digital Credentials API*, fetched 2026-11-12",
     "date": null,
     "quote": "This document specifies an API enabling user agents to mediate the",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://openid.net/specs/openid-4-verifiable-presentations-1_0.html",
     "claim": "OpenID Foundation, *OpenID for Verifiable Presentations 1.0*, fetched 2026-11-12",
     "date": null,
     "quote": "This specification defines a protocol for requesting and presenting Credentials. ¶",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://www.rfc-editor.org/rfc/rfc9110.html",
     "claim": "R. Fielding, Ed., M. Nottingham, Ed., and J. Reschke, Ed., *RFC 9110: HTTP Semantics*, June 2022",
     "date": null,
     "quote": "<meta content=\"Common,Latin\" name=\"scripts\">",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://www.linuxfoundation.org/press/linux-foundation-announces-operational-launch-of-x402-foundation-to-standardize-internet-native-payments-for-ai-agents-and-applications",
     "claim": "Linux Foundation, *Linux Foundation Announces Operational Launch of x402 Foundation to Standardize Internet-Native Payments for AI Agents and Applications*, July 14, 2026",
     "date": null,
     "quote": "SAN FRANCISCO, July 14, 2026 – The Linux Foundation , the nonprofit organization enabling mass innovation through open source, today announced the operational launch of the x402 Foundation",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-webbotauth-httpsig-protocol/",
     "claim": "IETF Datatracker, *draft-ietf-webbotauth-httpsig-protocol — HTTP Message Signatures for automated traffic (IETF Datatracker)*, checked 2026-10-30",
     "date": null,
     "quote": "WG state WG Document",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://verifiableintent.dev/spec/",
     "claim": "Verifiable Intent Working Group, *Verifiable Intent (VI) — Specification Overview (v0.1-draft)*, 2026-02-18 (v0.1-draft); fetched 2026-10-31",
     "date": null,
     "quote": "Overview¶ Version: 0.1-draft Status: Draft Date: 2026-02-18 Authors: Verifiable Intent Working Group Abstract¶ Verifiable",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://developer.visa.com/docs/trusted-agent-protocol/trusted-agent-protocol-specifications",
     "claim": "Visa, *Trusted Agent Protocol specifications*, checked 2026-10-30",
     "date": null,
     "quote": "By accessing, downloading, or using this specification, you agree to the terms and conditions outlined in the Visa Trusted Agent Protocol Product Terms.",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://datatracker.ietf.org/doc/rfc9421/",
     "claim": "IETF Datatracker, *HTTP Message Signatures (RFC 9421)*, Proposed Standard (February 2024); checked 2026-10-30",
     "date": null,
     "quote": "RFC - Proposed Standard (February 2024)",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://www.proof.com/x401",
     "claim": "Proof (Notarize, Inc.), *x401 — Identity protocol for agentic commerce*, fetched 2026-10-30",
     "date": null,
     "quote": "The identity protocol for agentic commerce x401 v0.1.0 · OpenID4VP · DCQL · jwt_vc_json",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://www.proof.com/blog/identity-infrastructure-agentic-internet-x401",
     "claim": "Proof (Notarize, Inc.), *Identity Infrastructure for the Agentic Internet: x401*, fetched 2026-10-30",
     "date": null,
     "quote": "Today, Proof, the identity authorization company, launched x401, an open, issuer-neutral protocol that lets any website or API ask for and verify the identity behind agents.",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://www.superfluidwallet.com/identity",
     "claim": "Superfluid Wallet, *Agent identity — Superfluid Wallet*, fetched 2026-10-30",
     "date": null,
     "quote": "With x401, an agent proves there's a verified person behind it, and only what you need to know, before it pays or signs up.",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://app.superfluidwallet.com/references/x401.md",
     "claim": "Superfluid Wallet, *Superfluid Wallet x401 reference*, fetched 2026-10-30",
     "date": null,
     "quote": "Use this when a site answers with HTTP 401 and a PROOF-REQUEST header, or asks for the owner's Proof account email. The packaged helper makes the site calls and relays the challenge through the Coordinator, so the challenge, cookies and Result Artifact stay in its private directory. No transaction is signed and no funds move. This reference follows x401 0.2.0 and needs no other reading.",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://dev.proof.com/docs/x401-cloudflare",
     "claim": "Proof (Notarize, Inc.), *x401 Cloudflare Workers integration documentation*, fetched 2026-10-30",
     "date": null,
     "quote": "@proof.com/x401-workers turns a Cloudflare Worker into an x401 Verifier: a request arriving without a verified Digital ID gets a 401 carrying a presentation request, and your handler runs only once a presentation has been verified.",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://registry.npmjs.org/@proof.com%2fx401-workers",
     "claim": "npm Registry (Proof), *@proof.com/x401-workers package metadata*, fetched 2026-10-30",
     "date": null,
     "quote": "- License ## Installation sh npm install @proof.com/x401-workers @proof.com/proof-vc-server Enable nodejs_compat in your Wrangler",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://www.proof.com/blog/x401-protocol-created-by-proof-now-offers-simple-cloudflare-integration-so-cloudflare-workers-can-verify-the-human-behind-the-agent",
     "claim": "Proof (Notarize, Inc.), *x401 Protocol Created by Proof Now Offers Simple Cloudflare Integration*, fetched 2026-10-30",
     "date": null,
     "quote": "Workers. https://cdn.prod.website-files.com/6488889b9c6ab83eafdf845a/6ad714d73e53402446355e40_X%20%E2%80%94%20with%20Cloudflare%20logo.png x401 Protocol Created by Proof Now Offers Simple Cloudflare",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://auth.solidus.network/v1/x401/demo",
     "claim": "Solidus Network, *Solidus Network x401 demo endpoint*, fetched 2026-10-30",
     "date": null,
     "quote": "curl -i https://auth.solidus.network/v1/x401/demo Specification: x401 v0.2.0, an editor's draft. This is an independent implementation",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://raw.githubusercontent.com/solidusnetwork/x401/main/README.md",
     "claim": "Solidus Network, *@solidus-network/x401 README*, fetched 2026-10-30",
     "date": null,
     "quote": "# @solidus-network/x401 Verifier side of x401, the HTTP Proof Requirement Protocol. x402 answers \"what",
     "ref": 24
    }
   ],
   "last_verified": "2026-11-12",
   "dispute": null,
   "summary_md": "**x401: HTTP Proof Requirement Protocol** (`x401`) is a Draft `0.2.0` specification edited by Daniel Buchner (Proof) and Bhushit Agarwal (Circle) that defines an HTTP-based, route-scoped proof requirement protocol for requiring credential-based proof before access to a protected resource is granted. The protocol reuses the W3C Digital Credentials API (`DC API`), OpenID for Verifiable Presentations (`OpenID4VP`) over the DC API with Digital Credentials Query Language (`DCQL`), OAuth 2.0 Token Exchange, and OpenID for Verifiable Credential Issuance (`OpenID4VCI`). x401 uses three dedicated HTTP header fields, each carrying one base64url-encoded UTF-8 JSON object: `PROOF-REQUEST` to carry proof requirements, `PROOF-RESPONSE` to carry credential results, result references, or reusable proof-satisfaction tokens, and `PROOF-RESULT` to carry verifier response information including x401 proof errors. The `PROOF-REQUEST` payload carries a Verifier-composed Digital Credentials request in `credential_requirements.digital` (`navigator.credentials.get(payload.credential_requirements)`), using `openid4vp-v1-signed` (recommended) or `openid4vp-v1-unsigned`. Version `0.2.0` is a breaking change from the still-published `0.1.0` draft (`https://x401.proof.com/spec/0.1.0/`), which used the header names `PROOF-REQUIRED`, `PROOF-PRESENTATION`, and `PROOF-RESPONSE` and required the Agent to compose its own OpenID4VP Authorization Request from a nested `proof` object. The Apache-2.0 `proof/x401` repository describes the specification as a working draft that does not yet request any IANA registrations.",
   "history": [
    {
     "date": "2026-10-20",
     "note": "initial record; verified against x401.proof.com/spec/latest/, github.com/proof/x401 and Proof's launch and Superfluid posts"
    },
    {
     "date": "2026-10-29",
     "note": "Expanded primary-source verified record across 31 primary sources including x401 0.2.0 and 0.1.0 specs, proof/x401 repo & commit 13b17b5, x401.id, @proof.com/x401-workers, Superfluid Wallet, solidusnetwork/x401 live demo route, draft-brezun-human-continuity-http-00, and four name collisions"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "part_of": null,
   "group": null,
   "watch": [
    {
     "type": "github",
     "repo": "proof/x401",
     "mode": "release",
     "version": false
    },
    {
     "type": "page",
     "url": "https://x401.proof.com/spec/latest/",
     "selector": "main",
     "cadence": "weekly"
    }
   ],
   "use_cases": [
    "prove-agent-identity",
    "delegate-user-authority"
   ],
   "audience": [
    "site-owner",
    "agent-builder",
    "platform"
   ],
   "pairs_with": [
    "x402",
    "webbotauth",
    "vi",
    "tap",
    "http-message-signatures"
   ],
   "prerequisites": [],
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "This page is about x401 from Proof (Notarize, Inc.), an HTTP protocol that lets a website or API demand a verifiable credential before it serves a route. Several unrelated projects use the same name: X401KIT, a Solana token-gating protocol whose repository was created on 2025-11-14 (UTC), before Proof's; Shehryar/x401, an agent-authorization scheme with ACT tokens (2026-02-24 UTC); the Claw401 wallet-authentication SDK; and a `$X401` meme coin on Base.meme. Payment is out of scope here and is handled by [x402](/protocols/x402/) or another payment protocol. [1]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**x401: HTTP Proof Requirement Protocol** (`x401`) is a Draft `0.2.0` specification edited by Daniel Buchner (Proof) and Bhushit Agarwal (Circle) that defines an HTTP-based, route-scoped proof requirement protocol for requiring credential-based proof before access to a protected resource is granted. [1] The protocol reuses the W3C Digital Credentials API (`DC API`), OpenID for Verifiable Presentations (`OpenID4VP`) over the DC API with Digital Credentials Query Language (`DCQL`), OAuth 2.0 Token Exchange, and OpenID for Verifiable Credential Issuance (`OpenID4VCI`). [1] x401 uses three dedicated HTTP header fields, each carrying one base64url-encoded UTF-8 JSON object: `PROOF-REQUEST` to carry proof requirements, `PROOF-RESPONSE` to carry credential results, result references, or reusable proof-satisfaction tokens, and `PROOF-RESULT` to carry verifier response information including x401 proof errors. [1] The `PROOF-REQUEST` payload carries a Verifier-composed Digital Credentials request in `credential_requirements.digital` (`navigator.credentials.get(payload.credential_requirements)`), using `openid4vp-v1-signed` (recommended) or `openid4vp-v1-unsigned`. [1] Version `0.2.0` is a breaking change from the still-published `0.1.0` draft (`https://x401.proof.com/spec/0.1.0/`), which used the header names `PROOF-REQUIRED`, `PROOF-PRESENTATION`, and `PROOF-RESPONSE` and required the Agent to compose its own OpenID4VP Authorization Request from a nested `proof` object. [2][3] The Apache-2.0 `proof/x401` repository describes the specification as a working draft that does not yet request any IANA registrations. [1][4]",
   "v05_identity_sentence_md": "**x401: HTTP Proof Requirement Protocol** (`x401`) is a Draft `0.2.0` specification edited by Daniel Buchner (Proof) and Bhushit Agarwal (Circle) that defines an HTTP-based, route-scoped proof requirement protocol for requiring credential-based proof before access to a protected resource is granted. [1] The protocol reuses the W3C Digital Credentials API (`DC API`), OpenID for Verifiable Presentations (`OpenID4VP`) over the DC API with Digital Credentials Query Language (`DCQL`), OAuth 2.0 Token Exchange, and OpenID for Verifiable Credential Issuance (`OpenID4VCI`). [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Identify](/category/identify/) (`identify`)"
    },
    {
     "label": "Form",
     "value_md": "HTTP header (`http-header`)"
    },
    {
     "label": "Originated by",
     "value_md": "Proof (Notarize, Inc., dba Proof.com; `proof/x401` created `2026-05-07` UTC), with Circle as `0.2.0` co-editor [1][5][6]"
    },
    {
     "label": "Governed by",
     "value_md": "Vendor-led draft maintained by Proof (`proof/x401`, `x401.id`); edited by Daniel Buchner (Proof) and Bhushit Agarwal (Circle), with reviewers from Lightspark, MATTR, Okta, OpenAI, Proof, and Visa [1][4][5]"
    },
    {
     "label": "Track",
     "value_md": "Vendor-led working draft specification (`x401.proof.com`, `proof/x401`; no SDO submission) [1][5]"
    },
    {
     "label": "Status",
     "value_md": "Status: Draft, Version: 0.2.0 (\"The spec is a working draft\"; repo has no tags or releases; Proof calls its own Verifier service live in production with Cloudflare Workers) [1][2][3]"
    },
    {
     "label": "Version",
     "value_md": "`0.2.0` (`Status: Draft`, bumped `2026-06-22` in commit `13b17b5`; `0.1.0` at `/spec/0.1.0/`) [1][2][3]"
    },
    {
     "label": "Wire format",
     "value_md": "Unpadded base64url (RFC 4648 Section 5) UTF-8 JSON wrapping W3C Digital Credentials API, OpenID4VP, DCQL, and RFC 8693 Token Exchange [1][2][7]"
    },
    {
     "label": "Specification",
     "value_md": "[x401 v0.2.0 Spec](https://x401.proof.com/spec/latest/) · [v0.1.0 Spec](https://x401.proof.com/spec/0.1.0/) · [proof/x401 Repo](https://raw.githubusercontent.com/proof/x401/main/README.md) · [x401.id](https://x401.id/) · [Request Schema](https://x401.id/spec/schemas/request.json) [1][3][4]"
    },
    {
     "label": "Found at",
     "value_md": "Per-route `PROOF-REQUEST`, `PROOF-RESPONSE`, `PROOF-RESULT` headers plus optional `<data value=\"application/json;x401=proof-required\" hidden>` [1][2][4]"
    },
    {
     "label": "Licence",
     "value_md": "Apache License 2.0 (`Apache-2.0` on `proof/x401`, `x401.id`, `@proof.com/x401-workers`, `@solidus-network/x401`) [4][5][6]"
    }
   ],
   "v05_problem_md": "HTTP defines `401 Unauthorized` with `WWW-Authenticate` for authentication and `402 Payment Required` for payment, but defines no general-purpose, machine-readable protocol for route-scoped proof requirements such as proving personhood, residency, membership, accreditation, entitlement, organizational standing, or workload identity attributes. [1][4] Instead of overloading `WWW-Authenticate`, x401 signals proof requirements in `PROOF-REQUEST` and treats the HTTP response status code as independent of x401 proof state so proof requirements can coexist with existing `WWW-Authenticate` or `Authorization` schemes on the same route. [1] The Verifier authors a composed Digital Credentials request in `credential_requirements.digital` so the Agent can invoke it natively, relay it to a credential manager, or acquire a remote result and retry with a Result Artifact or Verification Token. [1] x401 does not define a new credential format, replace OpenID4VP, OpenID4VCI, or the W3C Digital Credentials API, mandate a single delivery transport to a Credential Manager, or require server-side session state. [1] x401 is intentionally separate from payment protocols: when payment is required, servers MUST use HTTP `402 Payment Required` and an appropriate payment protocol, and x401 MUST NOT redefine payment semantics. [1]",
   "v05_mechanism_delta_md": "Instead of overloading `WWW-Authenticate`, x401 signals proof requirements in `PROOF-REQUEST` and treats the HTTP response status code as independent of x401 proof state so proof requirements can coexist with existing `WWW-Authenticate` or `Authorization` schemes on the same route. [1] The Verifier authors a composed Digital Credentials request in `credential_requirements.digital` so the Agent can invoke it natively, relay it to a credential manager, or acquire a remote result and retry with a Result Artifact or Verification Token. [1]",
   "v05_scope_boundary_md": "x401 does not define a new credential format, replace OpenID4VP, OpenID4VCI, or the W3C Digital Credentials API, mandate a single delivery transport to a Credential Manager, or require server-side session state. [1] x401 is intentionally separate from payment protocols: when payment is required, servers MUST use HTTP `402 Payment Required` and an appropriate payment protocol, and x401 MUST NOT redefine payment semantics. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "W3C Digital Credentials API",
      "spec_or_rfc": "W3C Digital Credentials API",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "The verifier puts a credential request in the PROOF-REQUEST header, the client returns a wallet presentation in PROOF-RESPONSE, and the verifier answers in PROOF-RESULT. [1][8]"
     },
     {
      "name": "OpenID for Verifiable Presentations 1.0",
      "spec_or_rfc": "OpenID4VP 1.0",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "PROOF-REQUEST, PROOF-RESPONSE, and PROOF-RESULT carry the credential challenge and presentation on the protected route, in the verifier-presentation role OpenID4VP plays. [1][9]"
     },
     {
      "name": "HTTP WWW-Authenticate Challenge Framework (RFC 9110 §11.6.1)",
      "spec_or_rfc": "RFC 9110 §11.6.1",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "x401 carries the proof in PROOF-REQUEST, PROOF-RESPONSE, and PROOF-RESULT, declares HTTP status independent of proof state, and places the requirement beside rather than inside WWW-Authenticate (though the 0.2.0 HTTP/1.1 401 Unauthorized examples and @proof.com/x401-workers return status 401 with PROOF-REQUEST and omit the WWW-Authenticate header required on 401 responses by RFC 9110 §15.5.2). [1][10]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "x402",
      "target_name": "x402",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "x401 carries the credential proof in PROOF-REQUEST and PROOF-RESPONSE, and any payment on the same route uses HTTP 402 and a separate protocol such as x402. [1][11]"
     },
     {
      "target_id": "webbotauth",
      "target_name": "Web Bot Auth",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "Web Bot Auth verifies an RFC 9421 Signature and Signature-Input plus a Signature-Agent key directory, while x401 carries a credential presentation in PROOF-RESPONSE. [1][12]"
     },
     {
      "target_id": "vi",
      "target_name": "Verifiable Intent",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "Verifiable Intent is an SD-JWT (RFC 9901) chain of L1, L2, and L3 consent layers with no discovery file, while x401 carries the proof in PROOF-REQUEST, PROOF-RESPONSE, and PROOF-RESULT. [1][13]"
     },
     {
      "target_id": "tap",
      "target_name": "Trusted Agent Protocol (TAP)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "TAP authenticates the agent with an RFC 9421 signature tagged agent-browser-auth or agent-payer-auth and a Visa-signed JWT, while x401 asks the client to satisfy PROOF-REQUEST. [1][14]"
     },
     {
      "target_id": "http-message-signatures",
      "target_name": "HTTP Message Signatures",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "RFC 9421 signs HTTP components in Signature and Signature-Input, while x401 carries the proof object in PROOF-REQUEST, PROOF-RESPONSE, and PROOF-RESULT. [1][15]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (4 probed or cited examples; non-exhaustive).",
    "side_a": {
     "visible": true,
     "heading": "Issuers, signers & proof presenters",
     "col4_header": "Boundary & Format",
     "note_md": null,
     "rows": [
      {
       "actor": "Proof",
       "role": "Identity issuer / Signer",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Credential issuer for an x401 challenge. The product page states x401 v0.1.0, OpenID4VP, DCQL, and credential format `jwt_vc_json`, with the challenge carried as `PROOF-REQUIRED: <base64url-x401-payload>`. The current editor's draft is 0.2.0.",
       "source_md": "[Proof x401 product page](https://www.proof.com/x401) [16][17]"
      },
      {
       "actor": "Superfluid Wallet",
       "role": "Agent wallet / Proof presenter",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Wallet presentation of an x401 proof. The identity page says an agent proves a verified person with x401 before it pays or signs up, and the agent reference says it follows x401 0.2.0.",
       "source_md": "[Superfluid Wallet identity](https://www.superfluidwallet.com/identity) [18][19]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Verifiers, WAFs & relying servers",
     "col4_header": "Boundary & Format",
     "note_md": null,
     "rows": [
      {
       "actor": "Proof (@proof.com/x401-workers)",
       "role": "Relying server / Verifier",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-17",
       "col4_md": "Cloudflare Worker verifier: a request without a verified Digital ID gets status 401 carrying a presentation request in `PROOF-REQUEST` (without a `WWW-Authenticate` header), and the handler runs only after the presentation is verified. npm package `@proof.com/x401-workers` was created 2026-10-17 (Apache-2.0).",
       "source_md": "[x401 on Cloudflare Workers](https://dev.proof.com/docs/x401-cloudflare) [1][20][21][22]"
      },
      {
       "actor": "Solidus Network",
       "role": "Relying server / Verifier",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-29",
       "col4_md": "Independent verifier. `https://auth.solidus.network/v1/x401/demo` answered on 2026-10-29 with status 200 and a `PROOF-REQUEST` header for `scheme` `x401` and `version` `0.2.0`. Library `@solidus-network/x401` says it is not affiliated with the draft authors.",
       "source_md": "[Solidus x401 demo route](https://auth.solidus.network/v1/x401/demo) [23][24]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "kya-os",
     "target_name": "KYA-OS (Know Your Agent Operating System)",
     "relation_label": "Peer alternative",
     "delta": "x401 carries PROOF-REQUEST and PROOF-RESPONSE headers. KYA-OS checks caller DID, VC chain, and detached JWS inside the MCP exchange.",
     "item_md": "**[KYA-OS (Know Your Agent Operating System)](/protocols/kya-os/)** (Peer alternative) — x401 carries PROOF-REQUEST and PROOF-RESPONSE headers. KYA-OS checks caller DID, VC chain, and detached JWS inside the MCP exchange."
    },
    {
     "item_md": "**[Identify protocols](/category/identify/)** — Category index for `identify` standards."
    }
   ],
   "v05_compiled_md": "---\nid: x401\ntitle: \"x401: HTTP Proof Requirement Protocol\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: identify\nform: http-header\nwire_archetype: identity_auth_crypto\nspec_url: https://x401.proof.com/spec/latest/\nlast_checked: 2026-11-12\n---\n\n# x401: HTTP Proof Requirement Protocol\n\n**Category:** [Identify](/category/identify/) (`identify`) · **Form:** HTTP header (`http-header`) · **Last checked:** 2026-11-12\n\n> *This page is about x401 from Proof (Notarize, Inc.), an HTTP protocol that lets a website or API demand a verifiable credential before it serves a route. Several unrelated projects use the same name: X401KIT, a Solana token-gating protocol whose repository was created on 2025-11-14 (UTC), before Proof's; Shehryar/x401, an agent-authorization scheme with ACT tokens (2026-02-24 UTC); the Claw401 wallet-authentication SDK; and a `$X401` meme coin on Base.meme. Payment is out of scope here and is handled by [x402](/protocols/x402/) or another payment protocol. [1]*\n\n**x401: HTTP Proof Requirement Protocol** (`x401`) is a Draft `0.2.0` specification edited by Daniel Buchner (Proof) and Bhushit Agarwal (Circle) that defines an HTTP-based, route-scoped proof requirement protocol for requiring credential-based proof before access to a protected resource is granted. [1] The protocol reuses the W3C Digital Credentials API (`DC API`), OpenID for Verifiable Presentations (`OpenID4VP`) over the DC API with Digital Credentials Query Language (`DCQL`), OAuth 2.0 Token Exchange, and OpenID for Verifiable Credential Issuance (`OpenID4VCI`). [1] x401 uses three dedicated HTTP header fields, each carrying one base64url-encoded UTF-8 JSON object: `PROOF-REQUEST` to carry proof requirements, `PROOF-RESPONSE` to carry credential results, result references, or reusable proof-satisfaction tokens, and `PROOF-RESULT` to carry verifier response information including x401 proof errors. [1] The `PROOF-REQUEST` payload carries a Verifier-composed Digital Credentials request in `credential_requirements.digital` (`navigator.credentials.get(payload.credential_requirements)`), using `openid4vp-v1-signed` (recommended) or `openid4vp-v1-unsigned`. [1] Version `0.2.0` is a breaking change from the still-published `0.1.0` draft (`https://x401.proof.com/spec/0.1.0/`), which used the header names `PROOF-REQUIRED`, `PROOF-PRESENTATION`, and `PROOF-RESPONSE` and required the Agent to compose its own OpenID4VP Authorization Request from a nested `proof` object. [2][3] The Apache-2.0 `proof/x401` repository describes the specification as a working draft that does not yet request any IANA registrations. [1][4]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Identify](/category/identify/) (`identify`) |\n| **Form** | HTTP header (`http-header`) |\n| **Originated by** | Proof (Notarize, Inc., dba Proof.com; `proof/x401` created `2026-05-07` UTC), with Circle as `0.2.0` co-editor [1][5][6] |\n| **Governed by** | Vendor-led draft maintained by Proof (`proof/x401`, `x401.id`); edited by Daniel Buchner (Proof) and Bhushit Agarwal (Circle), with reviewers from Lightspark, MATTR, Okta, OpenAI, Proof, and Visa [1][4][5] |\n| **Track** | Vendor-led working draft specification (`x401.proof.com`, `proof/x401`; no SDO submission) [1][5] |\n| **Status** | Status: Draft, Version: 0.2.0 (\"The spec is a working draft\"; repo has no tags or releases; Proof calls its own Verifier service live in production with Cloudflare Workers) [1][2][3] |\n| **Version** | `0.2.0` (`Status: Draft`, bumped `2026-06-22` in commit `13b17b5`; `0.1.0` at `/spec/0.1.0/`) [1][2][3] |\n| **Wire format** | Unpadded base64url (RFC 4648 Section 5) UTF-8 JSON wrapping W3C Digital Credentials API, OpenID4VP, DCQL, and RFC 8693 Token Exchange [1][2][7] |\n| **Specification** | [x401 v0.2.0 Spec](https://x401.proof.com/spec/latest/) · [v0.1.0 Spec](https://x401.proof.com/spec/0.1.0/) · [proof/x401 Repo](https://raw.githubusercontent.com/proof/x401/main/README.md) · [x401.id](https://x401.id/) · [Request Schema](https://x401.id/spec/schemas/request.json) [1][3][4] |\n| **Found at** | Per-route `PROOF-REQUEST`, `PROOF-RESPONSE`, `PROOF-RESULT` headers plus optional `<data value=\"application/json;x401=proof-required\" hidden>` [1][2][4] |\n| **Licence** | Apache License 2.0 (`Apache-2.0` on `proof/x401`, `x401.id`, `@proof.com/x401-workers`, `@solidus-network/x401`) [4][5][6] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [Adoption and ecosystem](#adoption-and-ecosystem)\n4. [See also](#see-also)\n5. [References](#references)\n\n---\n\n## Problem and scope\n\nHTTP defines `401 Unauthorized` with `WWW-Authenticate` for authentication and `402 Payment Required` for payment, but defines no general-purpose, machine-readable protocol for route-scoped proof requirements such as proving personhood, residency, membership, accreditation, entitlement, organizational standing, or workload identity attributes. [1][4] Instead of overloading `WWW-Authenticate`, x401 signals proof requirements in `PROOF-REQUEST` and treats the HTTP response status code as independent of x401 proof state so proof requirements can coexist with existing `WWW-Authenticate` or `Authorization` schemes on the same route. [1] The Verifier authors a composed Digital Credentials request in `credential_requirements.digital` so the Agent can invoke it natively, relay it to a credential manager, or acquire a remote result and retry with a Result Artifact or Verification Token. [1] x401 does not define a new credential format, replace OpenID4VP, OpenID4VCI, or the W3C Digital Credentials API, mandate a single delivery transport to a Credential Manager, or require server-side session state. [1] x401 is intentionally separate from payment protocols: when payment is required, servers MUST use HTTP `402 Payment Required` and an appropriate payment protocol, and x401 MUST NOT redefine payment semantics. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **W3C Digital Credentials API** | `W3C Digital Credentials API` | Analogous to classic standard | The verifier puts a credential request in the PROOF-REQUEST header, the client returns a wallet presentation in PROOF-RESPONSE, and the verifier answers in PROOF-RESULT. [1][8] |\n| **OpenID for Verifiable Presentations 1.0** | `OpenID4VP 1.0` | Analogous to classic standard | PROOF-REQUEST, PROOF-RESPONSE, and PROOF-RESULT carry the credential challenge and presentation on the protected route, in the verifier-presentation role OpenID4VP plays. [1][9] |\n| **HTTP WWW-Authenticate Challenge Framework (RFC 9110 §11.6.1)** | `RFC 9110 §11.6.1` | Analogous to classic standard | x401 carries the proof in PROOF-REQUEST, PROOF-RESPONSE, and PROOF-RESULT, declares HTTP status independent of proof state, and places the requirement beside rather than inside WWW-Authenticate (though the 0.2.0 HTTP/1.1 401 Unauthorized examples and @proof.com/x401-workers return status 401 with PROOF-REQUEST and omit the WWW-Authenticate header required on 401 responses by RFC 9110 §15.5.2). [1][10] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[x402](/protocols/x402/)** | Complements | x401 carries the credential proof in PROOF-REQUEST and PROOF-RESPONSE, and any payment on the same route uses HTTP 402 and a separate protocol such as x402. [1][11] |\n| **[Web Bot Auth](/protocols/webbotauth/)** | Peer alternative | Web Bot Auth verifies an RFC 9421 Signature and Signature-Input plus a Signature-Agent key directory, while x401 carries a credential presentation in PROOF-RESPONSE. [1][12] |\n| **[Verifiable Intent](/protocols/vi/)** | Peer alternative | Verifiable Intent is an SD-JWT (RFC 9901) chain of L1, L2, and L3 consent layers with no discovery file, while x401 carries the proof in PROOF-REQUEST, PROOF-RESPONSE, and PROOF-RESULT. [1][13] |\n| **[Trusted Agent Protocol (TAP)](/protocols/tap/)** | Peer alternative | TAP authenticates the agent with an RFC 9421 signature tagged agent-browser-auth or agent-payer-auth and a Visa-signed JWT, while x401 asks the client to satisfy PROOF-REQUEST. [1][14] |\n| **[HTTP Message Signatures](/protocols/http-message-signatures/)** | Peer alternative | RFC 9421 signs HTTP components in Signature and Signature-Input, while x401 carries the proof object in PROOF-REQUEST, PROOF-RESPONSE, and PROOF-RESULT. [1][15] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (4 probed or cited examples; non-exhaustive).*\n\n### Issuers, signers & proof presenters\n\n| Actor | Role | Status | Boundary & Format | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Proof** | Identity issuer / Signer | Supported · checked 2026-10-30 | Credential issuer for an x401 challenge. The product page states x401 v0.1.0, OpenID4VP, DCQL, and credential format `jwt_vc_json`, with the challenge carried as `PROOF-REQUIRED: <base64url-x401-payload>`. The current editor's draft is 0.2.0. | [Proof x401 product page](https://www.proof.com/x401) [16][17] |\n| **Superfluid Wallet** | Agent wallet / Proof presenter | Supported · checked 2026-10-30 | Wallet presentation of an x401 proof. The identity page says an agent proves a verified person with x401 before it pays or signs up, and the agent reference says it follows x401 0.2.0. | [Superfluid Wallet identity](https://www.superfluidwallet.com/identity) [18][19] |\n\n### Verifiers, WAFs & relying servers\n\n| Actor | Role | Status | Boundary & Format | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Proof (@proof.com/x401-workers)** | Relying server / Verifier | Supported · as of 2026-10-17 | Cloudflare Worker verifier: a request without a verified Digital ID gets status 401 carrying a presentation request in `PROOF-REQUEST` (without a `WWW-Authenticate` header), and the handler runs only after the presentation is verified. npm package `@proof.com/x401-workers` was created 2026-10-17 (Apache-2.0). | [x401 on Cloudflare Workers](https://dev.proof.com/docs/x401-cloudflare) [1][20][21][22] |\n| **Solidus Network** | Relying server / Verifier | Supported · as of 2026-10-29 | Independent verifier. `https://auth.solidus.network/v1/x401/demo` answered on 2026-10-29 with status 200 and a `PROOF-REQUEST` header for `scheme` `x401` and `version` `0.2.0`. Library `@solidus-network/x401` says it is not affiliated with the draft authors. | [Solidus x401 demo route](https://auth.solidus.network/v1/x401/demo) [23][24] |\n\n---\n\n## See also\n\n- **[KYA-OS (Know Your Agent Operating System)](/protocols/kya-os/)** *(Peer alternative)* — x401 carries PROOF-REQUEST and PROOF-RESPONSE headers. KYA-OS checks caller DID, VC chain, and detached JWS inside the MCP exchange.\n- **Category:** [Identify protocols](/category/identify/)\n\n---\n\n## References\n\n1. Daniel Buchner (Proof) and Bhushit Agarwal (Circle), eds., *x401: HTTP Proof Requirement Protocol (Draft 0.2.0)* (Draft 0.2.0; fetched 2026-10-30) — <https://x401.proof.com/spec/latest/>\n2. Proof (Notarize, Inc.), *proof/x401 CHANGELOG* (0.2.0; fetched 2026-10-30) — <https://raw.githubusercontent.com/proof/x401/main/CHANGELOG.md>\n3. Daniel Buchner (Proof) and Darren Louie (Proof), eds., *x401: HTTP Proof Requirement Protocol (Draft 0.1.0)* (Draft 0.1.0; fetched 2026-10-30) — <https://x401.proof.com/spec/0.1.0/>\n4. Proof (Notarize, Inc.), *proof/x401 README* (fetched 2026-10-30) — <https://raw.githubusercontent.com/proof/x401/main/README.md>\n5. GitHub API (proof/x401), *Repository metadata for proof/x401* (created 2026-05-07; fetched 2026-10-30) — <https://github.com/proof/x401>\n6. Proof (Notarize, Inc.), *x401 — HTTP Proof Requirement Protocol homepage* (fetched 2026-10-30) — <https://x401.id/>\n7. Proof (Notarize, Inc.), *Ecosystem — x401* (fetched 2026-10-30) — <https://x401.id/ecosystem>\n8. W3C, *Digital Credentials API* (fetched 2026-11-12) — <https://www.w3.org/TR/digital-credentials/>\n9. OpenID Foundation, *OpenID for Verifiable Presentations 1.0* (fetched 2026-11-12) — <https://openid.net/specs/openid-4-verifiable-presentations-1_0.html>\n10. R. Fielding, Ed., M. Nottingham, Ed., and J. Reschke, Ed., *RFC 9110: HTTP Semantics* (June 2022) — <https://www.rfc-editor.org/rfc/rfc9110.html>\n11. Linux Foundation, *Linux Foundation Announces Operational Launch of x402 Foundation to Standardize Internet-Native Payments for AI Agents and Applications* (July 14, 2026) — <https://www.linuxfoundation.org/press/linux-foundation-announces-operational-launch-of-x402-foundation-to-standardize-internet-native-payments-for-ai-agents-and-applications>\n12. IETF Datatracker, *draft-ietf-webbotauth-httpsig-protocol — HTTP Message Signatures for automated traffic (IETF Datatracker)* (checked 2026-10-30) — <https://datatracker.ietf.org/doc/draft-ietf-webbotauth-httpsig-protocol/>\n13. Verifiable Intent Working Group, *Verifiable Intent (VI) — Specification Overview (v0.1-draft)* (2026-02-18 (v0.1-draft); fetched 2026-10-31) — <https://verifiableintent.dev/spec/>\n14. Visa, *Trusted Agent Protocol specifications* (checked 2026-10-30) — <https://developer.visa.com/docs/trusted-agent-protocol/trusted-agent-protocol-specifications>\n15. IETF Datatracker, *HTTP Message Signatures (RFC 9421)* (Proposed Standard (February 2024); checked 2026-10-30) — <https://datatracker.ietf.org/doc/rfc9421/>\n16. Proof (Notarize, Inc.), *x401 — Identity protocol for agentic commerce* (fetched 2026-10-30) — <https://www.proof.com/x401>\n17. Proof (Notarize, Inc.), *Identity Infrastructure for the Agentic Internet: x401* (fetched 2026-10-30) — <https://www.proof.com/blog/identity-infrastructure-agentic-internet-x401>\n18. Superfluid Wallet, *Agent identity — Superfluid Wallet* (fetched 2026-10-30) — <https://www.superfluidwallet.com/identity>\n19. Superfluid Wallet, *Superfluid Wallet x401 reference* (fetched 2026-10-30) — <https://app.superfluidwallet.com/references/x401.md>\n20. Proof (Notarize, Inc.), *x401 Cloudflare Workers integration documentation* (fetched 2026-10-30) — <https://dev.proof.com/docs/x401-cloudflare>\n21. npm Registry (Proof), *@proof.com/x401-workers package metadata* (fetched 2026-10-30) — <https://registry.npmjs.org/@proof.com%2fx401-workers>\n22. Proof (Notarize, Inc.), *x401 Protocol Created by Proof Now Offers Simple Cloudflare Integration* (fetched 2026-10-30) — <https://www.proof.com/blog/x401-protocol-created-by-proof-now-offers-simple-cloudflare-integration-so-cloudflare-workers-can-verify-the-human-behind-the-agent>\n23. Solidus Network, *Solidus Network x401 demo endpoint* (fetched 2026-10-30) — <https://auth.solidus.network/v1/x401/demo>\n24. Solidus Network, *@solidus-network/x401 README* (fetched 2026-10-30) — <https://raw.githubusercontent.com/solidusnetwork/x401/main/README.md>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "kya-os",
   "name": "KYA-OS (Know Your Agent Operating System)",
   "acronym": "KYA-OS",
   "hatnote_md": "This page is about KYA-OS, the open agent identity and delegation specification hosted by the Decentralized Identity Foundation, formerly called MCP-I. It is not the Know-Your-Agent (KYA) interoperability framework that Ant International, Mastercard and Visa announced through BuildFin.ai, not the Know Your Agent part of Skyfire's KYAPay, and not Trulioo's KYA product. For the general idea see [Know Your Agent](/terms/know-your-agent/); for Skyfire's token see [KYAPay Token](/protocols/kyapay-token/).",
   "aliases": [
    "MCP-I",
    "Model Context Protocol – Identity",
    "KYA-OS"
   ],
   "collisions": [
    "KYA (the generic Know-Your-Agent term in the glossary)",
    "KYAPay (Skyfire's token profile, tracked as kyapay-token, unrelated)"
   ],
   "step": "identify",
   "parties": [
    "agent-site",
    "agent-agent"
   ],
   "form": "document-format",
   "track": "industry-body",
   "scope": "general",
   "question": "How can an MCP server tell which agent is calling, on whose authority it acts, and keep signed proof of what it did?",
   "analog": "A signed letter of authority plus a receipt for every action",
   "origin": {
    "org": "Vouched (as MCP-I), donated to the Decentralized Identity Foundation",
    "date": "2026-03-05"
   },
   "governance": "Decentralized Identity Foundation (DIF), KYA-OS Task Force of the Trusted AI Agents Working Group (TAAWG). \"The framework is being developed under open, community-driven governance through the KYA-OS Task Force within DIF's Trusted AI Agents Working Group.\" \"You must be a DIF member to participate in this group\". Editor and only listed maintainer is Dylan Hobbs of Vouched: \"Editors: Dylan Hobbs\"; role `Initial Maintainer, Editor`",
   "native_status": "Self-declared stable and ratified; DIF approval reported but no public ratification record found. Spec: \"Status: Stable\" \"Donated to DIF TAAWG (Decentralized Identity Foundation, Trusted AI Agents Working Group) and ratified as a DIF standard.\". Task-force notes, 21 July 2026: \"Grace: spec was approved by SC, next step is to announce on the blog (avoid being repetitive).\". DIF newsletter, 2026-08-18: \"Check out the mention of the KYA-OS approval in Business Wire!\"",
   "phase": "stable",
   "implementation": "shipping",
   "adoption": {
    "level": "observed",
    "by": "KYA-OS PoC demo server, Bankee, @kya-os/mcp, and decentralized-identity/kya-os-mcp",
    "probe_run": null
   },
   "version": {
    "label": "1.0.0",
    "date": "2026-07-29"
   },
   "spec_url": "https://raw.githubusercontent.com/decentralized-identity/kya-os-mcp/main/SPEC.md",
   "discovery": {
    "mechanism": "well-known JSON document on the MCP server naming its DID, capabilities and endpoints (SPEC.md §10, SHOULD)",
    "path": "/.well-known/kya-os-card.json on a bare did:web host, served live by the reference demo server. The spec also says \"KYA-OS servers SHOULD expose `/.well-known/mcp`.\", but the reference server returned 404 there on 2026-10-29"
   },
   "probe": {
    "method": "GET",
    "path": "/.well-known/kya-os-card.json",
    "parse": "JSON with 'id', 'proofProfile' or 'serverDid', 'version' and a 'capabilities' object (proofs, delegation, statusList)",
    "on_absent": "The server does not advertise KYA-OS; the endpoint is a SHOULD, so a KYA-OS server may still attach proofs in MCP _meta without it."
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://raw.githubusercontent.com/decentralized-identity/kya-os-mcp/main/README.md",
     "claim": "decentralized-identity/kya-os-mcp, *KYA-OS: agent identity, delegation, and proof*, fetched 2026-10-30",
     "date": null,
     "quote": "This protocol was previously known as MCP-Identity / MCP-I. / Detached JWS over JCS-canonicalized request/response hashes / with the identity did:web:demo-mcp.kya-os.ai / A public reference deployment runs the latest published release, with the identity did:web:demo-mcp.kya-os.ai. / The server is operated by a maintainer on pinned releases; this repo does not deploy it, it independently verifies it. / @kya-os/mcp is the MCP binding of KYA-OS, the reference implementation for Model Context Protocol servers, and the first binding to ship.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://blog.identity.foundation/why-dif-said-yes-to-mcp-i/",
     "claim": "Alex Keisner and Dylan Hobbs (Vouched); Decentralized Identity Foundation, *Why We Brought KYA-OS (formerly MCP-I) to DIF (and Why DIF Said Yes)*, published 2026-03-05; modified 2026-07-14",
     "date": null,
     "quote": "Today, Vouched is formally donating KYA-OS to the Decentralized Identity Foundation (DIF) / formerly MCP-I … formally donating KYA-OS to the Decentralized Identity Foundation (DIF) … will be further developed as a community-driven open standard under the Trusted AI Agents Working Group, through a dedicated KYA-OS task force. / \"datePublished\": \"2026-03-05T19:00:09.000Z\" … Today, Vouched is formally donating KYA-OS to the Decentralized Identity Foundation (DIF) / the KYA-OS specifications will be further developed as a community-driven open standard under the Trusted AI Agents Working Group, through a dedicated KYA-OS task force.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://www.ant-intl.com/en/news/detail/ant-international-mastercard-and-visa-initiate-collaboration-on-know-your-agent-interoperability-to-scale-agentic-commerce/",
     "claim": "Ant International, *Ant International, Mastercard and Visa Initiate Collaboration on Know-Your-Agent Interoperability to Scale Agentic Commerce*, published 2026-09-10",
     "date": null,
     "quote": "begun collaboration on a Know-Your-Agent (KYA) interoperability framework / Ant International, Mastercard and Visa will collaborate through BuildFin.ai",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://kyapay.org/whitepaper",
     "claim": "Skyfire, *KYAPay: Toward an Open Payment and Identity Layer for Agentic AI*, 2025-06-26",
     "date": "2025-06-26",
     "quote": "This whitepaper introduces KYAPay, an identity-linked payment protocol / collectively referred to as Know Your Agent (KYA).",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://www.trulioo.com/products/kya-verification",
     "claim": "Trulioo, *Know Your Agent (KYA) | AI Agent Verification*, fetched 2026-10-30",
     "date": null,
     "quote": "KYA is Trulioo's program for assessing both the entity behind an AI agent and the agent itself before a trusted verifiable token is generated.",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://raw.githubusercontent.com/decentralized-identity/kya-os-mcp/main/SPEC.md",
     "claim": "Dylan Hobbs (@H0BB5), KYA-OS Working Group, *KYA-OS Protocol Specification*, version 1.0.0",
     "date": null,
     "quote": "KYA-OS (Know Your Agent Operating System) is a protocol extension for the Model Context Protocol (MCP) that adds cryptographic identity, delegation chains, and non-repudiation proofs to AI agent interactions. / Convert request/response to RFC 8785 (JCS) canonical JSON … org.kya-os/response-proof inside the standard MCP _meta field / KYA-OS servers SHOULD expose /.well-known/mcp. / Editors: Dylan Hobbs (@H0BB5), KYA-OS Working Group / Status: Stable / Donated to DIF TAAWG (Decentralized Identity Foundation, Trusted AI Agents Working Group) and ratified as a DIF standard. / Version: 1.0.0 / The current protocol version is 1.0.0. / KYA-OS supports did:key (self-certifying, ephemeral) and did:web (organization-hosted, persistent). / KYA-OS-Delegation-Credential | AUTHORITATIVE … KYA-OS-Delegation-Proof | AUTHORITATIVE … KYA-OS-Agent-DID | AUTHORITATIVE … KYA-OS-Session-Id | Anchor … KYA-OS-Delegation-Chain | OPTIONAL (advisory) … KYA-OS-Granted-Scopes | OPTIONAL (advisory) / Convert request/response to RFC 8785 (JCS) canonical JSON / The protocol uses Decentralized Identifiers (DIDs) for agent identity, W3C Verifiable Credentials for delegation, Ed25519 signatures for cryptographic operations, and StatusList2021 for revocation. / # KYA-OS Protocol Specification / The Model Context Protocol (MCP) defines a standard interface for AI agents to interact with tools and resources. However, MCP lacks an identity layer / Without identity verification, any process can claim to be a particular agent. … Prompt Injection with Forged Identity: Attackers can inject prompts that include fabricated identity claims. / Delegation credentials can express scope constraints, temporal bounds, budget limits, and revocation status in an interoperable format. / The Principal MAY or MAY NOT be the Responsible Party. / The Responsible Party is the root issuer of the chain (issuerDid of the root DelegationCredential). / The §6.10 profile uses DataIntegrityProof with eddsa-jcs-2022 ... Verifiable Credentials 2.0 credential whose credentialSubject is an attenuated ZCAP-LD capability, revoked via W3C Bitstring Status List v1.0 / The Responsible Party is the root issuer of the chain",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://aijourn.com/why-ai-agents-need-verifiable-identity-before-they-run-the-web/",
     "claim": "The AI Journal, *Why AI Agents Need Verifiable Identity Before They Run the Web*, published 2026-10-09",
     "date": null,
     "quote": "Authored by Dylan Hobbs in May 2025 as MCP-I, the specification was formally donated by Vouched to the Decentralized Identity Foundation (DIF) in March 2026.",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://blog.identity.foundation/kya-os/",
     "claim": "Decentralized Identity Foundation, *DIF and Vouched Advance Agentic Identity with KYA-OS as International Demand for Open Agent Identity Standards Grows*, published 2026-04-22",
     "date": null,
     "quote": "The framework is being developed under open, community-driven governance through the KYA-OS Task Force within DIF's Trusted AI Agents Working Group.",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://identity.foundation/working-groups/trusted-agents.html",
     "claim": "Decentralized Identity Foundation, *Trusted AI Agents Working Group*, fetched 2026-10-30",
     "date": null,
     "quote": "KYA-OS Task Force Occurs every week on Tuesday at 9:00:00 Eastern Time / You must be a DIF member to participate in this group",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://raw.githubusercontent.com/decentralized-identity/kya-os-mcp/main/GOVERNANCE.md",
     "claim": "decentralized-identity/kya-os-mcp, *Governance*, fetched 2026-10-30",
     "date": null,
     "quote": "Dylan Hobbs | @H0BB5 | [email redacted] | Initial Maintainer, Editor / Spec decisions are made in the working group / This repository is the DIF TAAWG protocol reference implementation for the KYA-OS (Know Your Agent Operating System) protocol's MCP binding. / This project is licensed under the MIT License.",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://github.com/decentralized-identity/kya-os-mcp/commit/e062999c18f989d68e7cd3ef8c50052ba4cb1427",
     "claim": "Dylan Hobbs, *docs: mark KYA-OS v1 as ratified*, 2026-08-05",
     "date": "2026-08-05",
     "quote": "v1 of the KYA-OS spec was ratified as a DIF standard by the DIF TAAWG.",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://raw.githubusercontent.com/decentralized-identity/trusted-ai-agents/main/agenda/agenda-kyaos-tf-2026.md",
     "claim": "DIF Trusted AI Agents Working Group, *TAAWG - KYA-OS Task Force*, 2026 agenda",
     "date": null,
     "quote": "## 21 July … Grace: spec was approved by SC, next step is to announce on the blog (avoid being repetitive). / ## 11 August Agenda … Note that Dylan and Rosalyn are meeting with DIF SteerCo next week to obtain their guidance on versioning and required ratification",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://github.com/decentralized-identity/kya-os-mcp/commit/1ece3a888a1ca986d6c6ee4a4281258994019096",
     "claim": "Dylan Hobbs, *docs(spec): graduate spec + conformance to 1.0.0 for donation*, 2026-05-14",
     "date": "2026-05-14",
     "quote": "\"date\": \"2026-05-14T13:38:02Z\" … graduate spec + conformance to 1.0.0 for donation",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://www.vouched.id/learn/vouched-and-the-decentralized-identity-foundation-launch-kya-os-an-open-trust-layer-for-ai-agents",
     "claim": "Vouched, *Vouched and the Decentralized Identity Foundation Launch KYA-OS, an Open Trust Layer for AI Agents*, published 2026-07-29; modified 2026-08-20",
     "date": null,
     "quote": "\"datePublished\": \"2026-07-29T13:00:03.000Z\" … today announced the release of KYA-OS Protocol Specification v1.0.0",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://raw.githubusercontent.com/decentralized-identity/kya-os-mcp/main/SPEC-ENTITY-CARD.md",
     "claim": "Dylan Hobbs (@H0BB5), KYA-OS Working Group, *KYA-OS Entity Card - Profile Specification*, version 1.1",
     "date": null,
     "quote": "Version: 1.1 (Entity Card profile) / # KYA-OS Entity Card - Profile Specification / A bare did:web:host org root has no path segment to derive a card.json from, so it additionally publishes at the well-known path /.well-known/kya-os-card.json / where the ZCAP-LD capability (the signed credential) is the authority object.",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://registry.npmjs.org/@kya-os%2fmcp",
     "claim": "npm, *@kya-os/mcp*, created 2026-05-14; 1.21.2 published 2026-10-27",
     "date": null,
     "quote": "\"1.21.2\":\"2026-10-27T16:04:53.830Z\" / \"dist-tags\":{\"latest\":\"1.21.2\"} / \"name\":\"@kya-os/mcp\" / Reference implementation of the KYA-OS protocol for Model Context Protocol servers: delegation, proof, and session primitives / \"version\":\"1.18.0\" / \"1.18.0\":\"2026-10-08T17:45:51.679Z\" / \"created\":\"2026-05-14T14:02:46.436Z\" / \"1.2.0\":\"2026-05-14T14:02:46.667Z\"",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://github.com/decentralized-identity/kya-os-mcp/releases",
     "claim": "Decentralized Identity Foundation, *kya-os-mcp releases*, v1.21.2 published 2026-10-27",
     "date": null,
     "quote": "\"tag_name\": \"v1.21.2\" … \"published_at\": \"2026-10-27T16:06:39Z\" / \"tag_name\": \"v1.19.0\" ... \"published_at\": \"2026-10-09T21:51:41Z\" ... Conformance suite 1.2.0",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://demo-mcp.kya-os.ai/.well-known/kya-os-card.json",
     "claim": "KYA-OS PoC demo server, */.well-known/kya-os-card.json*, fetched 2026-10-30",
     "date": null,
     "quote": "\"id\": \"did:web:demo-mcp.kya-os.ai\" / \"name\": \"KYA-OS PoC demo server\" / \"entityType\": \"mcp\" / \"vault.read\" / \"vault.write\" / \"proofProfile\": \"org.kya-os/proof.v1\" / \"statusListIndex\": \"94\"",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://github.com/decentralized-identity/kya-os-mcp",
     "claim": "Decentralized Identity Foundation, *decentralized-identity/kya-os-mcp*, created 2026-03-10",
     "date": null,
     "quote": "\"name\": \"MIT License\", \"spdx_id\": \"MIT\" / \"full_name\": \"decentralized-identity/kya-os-mcp\" / \"description\": \"KYA-OS MCP protocol reference implementation - delegation, proof generation, session lifecycle, and cryptographic identity for the Model Context Protocol\" / \"created_at\": \"2026-03-10T19:06:33Z\" / \"pushed_at\": \"2026-10-27T20:43:13Z\" / \"name\": \"MIT License\"",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28",
     "claim": "Model Context Protocol, *Specification*, version 2026-07-28",
     "date": null,
     "quote": "MCP provides a standardized way to connect LLMs with the context they need. / Expose tools and capabilities to AI systems",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://eips.ethereum.org/EIPS/eip-8004",
     "claim": "Marco De Rossi (@MarcoMetaMask), Davide Crapis (@dcrapis), Jordan Ellis, and Erik Reppel, *ERC-8004: Trustless Agents*, created 2025-08-13",
     "date": null,
     "quote": "The Identity Registry uses ERC-721 with the URIStorage extension for agent registration / Throughout this document, tokenId in ERC-721 is referred to as agentId",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://x401.proof.com/spec/latest/",
     "claim": "Daniel Buchner (Proof) and Bhushit Agarwal (Circle), *x401: HTTP Proof Requirement Protocol*, latest",
     "date": null,
     "quote": "the PROOF-REQUEST HTTP header field to carry proof requirements the PROOF-RESPONSE HTTP header field to carry credential results",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://developer.visa.com/docs/trusted-agent-protocol",
     "claim": "Visa, *Getting Started - Trusted Agent Protocol*, fetched 2026-10-30",
     "date": null,
     "quote": "including the cryptographic standards (RFC9421)",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://developer.visa.com/docs/trusted-agent-protocol/trusted-agent-protocol-specifications",
     "claim": "Visa, *Trusted Agent Protocol Specifications*, fetched 2026-10-30",
     "date": null,
     "quote": "Will contain the value of agent-browser-auth or agent-payer-auth based on the type of interaction / idToken A JWT … The Visa implementation of the ID Token is digitally signed by Visa.",
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://demo-mcp.kya-os.ai/provenance",
     "claim": "KYA-OS reference demo, */provenance*, fetched 2026-10-30",
     "date": null,
     "quote": "\"package\": \"@kya-os/mcp\" / \"version\": \"1.18.0\" / \"mcpProtocol\": \"2026-07-28\" / \"node\": \"v20.20.2\" / \"repository\": \"https://github.com/decentralized-identity/kya-os-mcp\"",
     "ref": 25
    },
    {
     "label": "[26]",
     "url": "https://builders.kya-os.org/builders/",
     "claim": "KYA-OS Builders, *Builders · KYA-OS Builders*, fetched 2026-10-30",
     "date": null,
     "quote": "Deployed 1.18.0 / checked 2026-10-30 / An agent-identity registry service operating KYA-OS attestation infrastructure. / Listed 2026-08-20 / Listed in the registry, with no conformance claim yet. / The conformance vectors derive from this codebase, so its full-suite pass is self-reported, not independent evidence. / @kya-os/mcp / Claim L3 full / Suite 1.1.0 / 2 verified credentials, 7 projects.",
     "ref": 26
    },
    {
     "label": "[27]",
     "url": "https://knowthat.ai",
     "claim": "KnowThat.ai, *KnowThat.ai - The Trusted Agent Registry*, fetched 2026-10-30",
     "date": null,
     "quote": "KnowThat.ai is the shared reputation registry that helps you tell the difference - before you grant access. / Powered by Vouched / Install KYA-OS / 8,400+ Behavior reports / 214 Reporting operators",
     "ref": 27
    },
    {
     "label": "[28]",
     "url": "https://github.com/bankee-ai/bankee-kya-os",
     "claim": "Bankee, *bankee-kya-os*, repository README",
     "date": null,
     "quote": "Every server has a stable DID (`did:web` in production, `did:key` in dev). The DID document is published at `/.well-known/did.json` and holds the Ed25519 public key. / Tools above a configurable threshold are wrapped with `wrapWithDelegation`. Without a W3C Verifiable Credential bearing the correct scope, the tool returns `needs_authorization` and a consent URL. / Every tool response carries a detached JWS in `_meta.proof`. The JWS covers SHA-256 hashes of both the request and the response, the session ID, a timestamp, and a nonce. / The audit service stores every proof record and exposes a `/api/verify` endpoint for independent verification. / Identity: did:web:bankee.ai",
     "ref": 28
    }
   ],
   "last_verified": "2026-11-06",
   "dispute": null,
   "summary_md": "**KYA-OS (Know Your Agent Operating System)** is a protocol extension for the Model Context Protocol (MCP) that adds cryptographic identity, delegation chains, and non-repudiation proofs to AI agent interactions. Proof hashes cover the RFC 8785 (JCS) canonical JSON of the request and response. The detached proof is attached under `org.kya-os/response-proof` inside MCP `_meta`. Servers SHOULD expose `/.well-known/mcp`. Dylan Hobbs authored it in May 2025 as MCP-I. On 2026-03-05 Vouched formally donated KYA-OS to the Decentralized Identity Foundation, to be developed as a community-driven open standard under the Trusted AI Agents Working Group through a dedicated KYA-OS task force.",
   "history": [
    {
     "date": "2026-10-29",
     "note": "Primary-source verification review against SPEC.md, SPEC-ENTITY-CARD.md, GOVERNANCE.md, DIF TAAWG task force notes, and live demo-mcp.kya-os.ai endpoints (26 primary sources)"
    },
    {
     "date": "2026-10-20",
     "note": "initial record; verified against SPEC.md in decentralized-identity/kya-os-mcp (status line, §10 well-known endpoint) and DIF's posts of 2026-03-05 and 2026-04-22"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "part_of": null,
   "group": null,
   "watch": [
    {
     "type": "github",
     "repo": "decentralized-identity/kya-os-mcp",
     "mode": "tag",
     "version": false
    },
    {
     "type": "page",
     "url": "https://github.com/decentralized-identity/kya-os-mcp/blob/main/SPEC.md",
     "selector": "main",
     "cadence": "weekly"
    }
   ],
   "use_cases": [
    "prove-agent-identity",
    "delegate-user-authority",
    "audit-agent-actions"
   ],
   "audience": [
    "agent-builder",
    "platform"
   ],
   "pairs_with": [
    "mcp",
    "erc-8004",
    "x401",
    "tap"
   ],
   "prerequisites": [
    "mcp"
   ],
   "tier": "spec_brief",
   "lifecycle_status": "published_standard",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-06",
   "v05_hatnote_html_md": "This page is about KYA-OS, the open agent identity and delegation specification hosted by the Decentralized Identity Foundation, formerly called MCP-I. It is not the Know-Your-Agent (KYA) interoperability framework that Ant International, Mastercard and Visa announced through BuildFin.ai, not the Know Your Agent part of Skyfire's KYAPay, and not Trulioo's KYA product. For the general idea see [Know Your Agent](/terms/know-your-agent/); for Skyfire's token see [KYAPay Token](/protocols/kyapay-token/). [1][2][3][4][5]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**KYA-OS (Know Your Agent Operating System)** is a protocol extension for the Model Context Protocol (MCP) that adds cryptographic identity, delegation chains, and non-repudiation proofs to AI agent interactions. [6] Proof hashes cover the RFC 8785 (JCS) canonical JSON of the request and response. The detached proof is attached under `org.kya-os/response-proof` inside MCP `_meta`. Servers SHOULD expose `/.well-known/mcp`. [6] Dylan Hobbs authored it in May 2025 as MCP-I. On 2026-03-05 Vouched formally donated KYA-OS to the Decentralized Identity Foundation, to be developed as a community-driven open standard under the Trusted AI Agents Working Group through a dedicated KYA-OS task force. [2][7]",
   "v05_identity_sentence_md": "**KYA-OS (Know Your Agent Operating System)** is a protocol extension for the Model Context Protocol (MCP) that adds cryptographic identity, delegation chains, and non-repudiation proofs to AI agent interactions. [6]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Identify](/category/identify/) (`identify`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "Dylan Hobbs at Vouched, May 2025 as MCP-I; donated to the Decentralized Identity Foundation on 2026-03-05 [1][2][7]"
    },
    {
     "label": "Governed by",
     "value_md": "DIF Trusted AI Agents Working Group, KYA-OS Task Force (membership required). Editor and initial maintainer: Dylan Hobbs (Vouched). [6][8][9][10]"
    },
    {
     "label": "Track",
     "value_md": "Community-driven open standard under DIF's Trusted AI Agents Working Group [2]"
    },
    {
     "label": "Status",
     "value_md": "SPEC.md Status: Stable, self-declared DIF-ratified. 21 July notes: SC approved. 11 August notes: SteerCo ratification still open. [6][11][12]"
    },
    {
     "label": "Version",
     "value_md": "Main SPEC.md `1.0.0` and Entity Card `1.1`; release snapshot `@kya-os/mcp` `1.21.2` (2026-10-27). [6][13][14][15][16][17]"
    },
    {
     "label": "Schemes",
     "value_md": "`did:key` (self-certifying, ephemeral) and `did:web` (organization-hosted, persistent) [6]"
    },
    {
     "label": "Headers",
     "value_md": "`KYA-OS-Delegation-Credential` and `KYA-OS-Delegation-Proof` authoritative; `KYA-OS-Agent-DID` MUST match; `KYA-OS-Session-Id` anchor only; `KYA-OS-Delegation-Chain` and `KYA-OS-Granted-Scopes` advisory, MUST NOT authorize. [6]"
    },
    {
     "label": "Message format",
     "value_md": "Detached JWS over RFC 8785 (JCS) request and response hashes; delegation as a W3C Verifiable Credential [1][6]"
    },
    {
     "label": "Specification",
     "value_md": "[KYA-OS Protocol Specification](https://raw.githubusercontent.com/decentralized-identity/kya-os-mcp/main/SPEC.md) (main, 1.0.0); [KYA-OS Entity Card profile](https://raw.githubusercontent.com/decentralized-identity/kya-os-mcp/main/SPEC-ENTITY-CARD.md) (main, 1.1) [6][15]"
    },
    {
     "label": "Found at",
     "value_md": "`/.well-known/mcp` (servers SHOULD expose it); `/.well-known/kya-os-card.json` on a bare `did:web` host. The reference demo card id is `did:web:demo-mcp.kya-os.ai`. [1][6][15][18]"
    },
    {
     "label": "Licence",
     "value_md": "MIT [19]"
    }
   ],
   "v05_problem_md": "The Model Context Protocol defines a standard interface for AI agents to interact with tools and resources, but MCP lacks an identity layer. Without identity verification, any process can claim to be a particular agent, and attackers can inject prompts that include fabricated identity claims. [6] KYA-OS uses Decentralized Identifiers for agent identity, W3C Verifiable Credentials for delegation, Ed25519 signatures, and StatusList2021 for revocation. Delegation credentials can express scope constraints, temporal bounds, and budget limits. [6] The Responsible Party is the root issuer of the chain, the issuerDid of the root DelegationCredential. The Principal MAY or MAY NOT be the Responsible Party. [6]",
   "v05_mechanism_delta_md": "KYA-OS uses Decentralized Identifiers for agent identity, W3C Verifiable Credentials for delegation, Ed25519 signatures, and StatusList2021 for revocation. Delegation credentials can express scope constraints, temporal bounds, and budget limits. [6]",
   "v05_scope_boundary_md": "The Responsible Party is the root issuer of the chain, the issuerDid of the root DelegationCredential. The Principal MAY or MAY NOT be the Responsible Party. [6]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "W3C Decentralized Identifiers (DID 1.0) & Verifiable Credentials (VC 2.0)",
      "spec_or_rfc": "DID 1.0 / VC",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "KYA-OS profiles W3C DIDs (did:key and did:web) and Verifiable Credentials across two valid 1.x profiles: legacy session DelegationCredentials signed over RFC 8785 JCS with StatusList2021 revocation, and Section 6.10 VC 2.0 Entity Cards using DataIntegrityProof (eddsa-jcs-2022), ZCAP-LD capability delegation, and Bitstring Status List v1.0. [6]"
     },
     {
      "name": "ZCAP-LD Authorization Capabilities",
      "spec_or_rfc": "ZCAP-LD",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "ZCAP-LD is the Entity Card capability: the signed credential is the authority, and its root issuer is the Responsible Party. [6][15]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "MCP is the tool interface KYA-OS extends with identity, delegation, and proofs. KYA-OS servers SHOULD expose /.well-known/mcp. [6][20]"
     },
     {
      "target_id": "erc-8004",
      "target_name": "ERC-8004: Trustless Agents",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ERC-8004 names an agent by ERC-721 tokenId (agentId). KYA-OS uses did:key or did:web and a VC chain revoked by StatusList2021. [6][21]"
     },
     {
      "target_id": "x401",
      "target_name": "x401: HTTP Proof Requirement Protocol",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "x401 carries PROOF-REQUEST and PROOF-RESPONSE headers. KYA-OS checks caller DID, VC chain, and detached JWS inside the MCP exchange. [1][6][22]"
     },
     {
      "target_id": "tap",
      "target_name": "Trusted Agent Protocol (TAP)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "TAP uses RFC 9421 agent-browser-auth or agent-payer-auth plus a Visa-signed JWT. KYA-OS uses a DID, VC chain, and detached JWS. [1][6][23][24]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (5 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).",
    "side_a": {
     "visible": true,
     "heading": "Reference PoC server & registry",
     "col4_header": "Boundary & format",
     "note_md": null,
     "rows": [
      {
       "actor": "KYA-OS PoC demo server",
       "role": "Reference MCP server",
       "status": "Experimental",
       "status_display": "Experimental · as of 2026-10-30",
       "col4_md": "PoC `did:web:demo-mcp.kya-os.ai` pins `@kya-os/mcp` `1.18.0`, behind npm latest `1.21.2`.",
       "source_md": "[KYA-OS PoC Entity Card](https://demo-mcp.kya-os.ai/.well-known/kya-os-card.json) [18] · [KYA-OS PoC provenance](https://demo-mcp.kya-os.ai/provenance) [25] · [kya-os-mcp README](https://raw.githubusercontent.com/decentralized-identity/kya-os-mcp/main/README.md) [1] · [KYA-OS builders registry](https://builders.kya-os.org/builders/) [16][26]"
      },
      {
       "actor": "KnowThat.ai",
       "role": "Agent registry",
       "status": "Experimental",
       "status_display": "Experimental · as of 2026-08-20",
       "col4_md": "Vouched shared reputation registry: 8,400+ behavior reports, 214 operators, no conformance claim.",
       "source_md": "[KnowThat.ai](https://knowthat.ai) [27] · [KYA-OS builders registry](https://builders.kya-os.org/builders/) [26]"
      },
      {
       "actor": "Bankee",
       "role": "KYA-OS payment server",
       "status": "Experimental",
       "status_display": "Experimental · checked 2026-11-06",
       "col4_md": "Production DID `did:web:bankee.ai`. The DID document is at `/.well-known/did.json` and holds an Ed25519 key. Tools over a threshold use `wrapWithDelegation` and return `needs_authorization` without a credential.",
       "source_md": "[bankee-kya-os](https://github.com/bankee-ai/bankee-kya-os) [28]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Official SDKs & reference implementation",
     "col4_header": "Boundary & format",
     "note_md": null,
     "rows": [
      {
       "actor": "@kya-os/mcp",
       "role": "Reference SDK",
       "status": "Development",
       "status_display": "Development · as of 2026-10-27",
       "col4_md": "npm `@kya-os/mcp` latest `1.21.2` (`2026-10-27`); self-reported `L3 full` on suite `1.1.0`.",
       "source_md": "[npm @kya-os/mcp](https://registry.npmjs.org/@kya-os%2fmcp) [16] · [KYA-OS builders registry](https://builders.kya-os.org/builders/) [17][26]"
      },
      {
       "actor": "decentralized-identity/kya-os-mcp",
       "role": "Reference implementation",
       "status": "Development",
       "status_display": "Development · as of 2026-10-27",
       "col4_md": "Main-branch MCP reference repo, created `2026-03-10`; SPEC.md `1.0.0`, Status Stable.",
       "source_md": "[GitHub decentralized-identity/kya-os-mcp](https://github.com/decentralized-identity/kya-os-mcp) [19] · [GOVERNANCE.md](https://raw.githubusercontent.com/decentralized-identity/kya-os-mcp/main/GOVERNANCE.md) [10] · [kya-os-mcp README](https://raw.githubusercontent.com/decentralized-identity/kya-os-mcp/main/README.md) [1] · [SPEC.md](https://raw.githubusercontent.com/decentralized-identity/kya-os-mcp/main/SPEC.md) [6]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [
     {
      "label": "npm registry @kya-os/mcp",
      "as_of": "2026-10-27",
      "value_md": "npm dist-tags latest is 1.21.2, published 2026-10-27. Version 1.18.0 was published 2026-10-08. The package time record was created 2026-05-14, when version 1.2.0 was published. [16]"
     },
     {
      "label": "KYA-OS builders registry",
      "as_of": "2026-10-30",
      "value_md": "The builders registry lists 2 verified credentials and 7 projects. It says the @kya-os/mcp full-suite pass is self-reported because the conformance vectors derive from the same codebase. The demo server entry says Deployed 1.18.0, checked 2026-10-30, on suite 1.1.0. [26]"
     },
     {
      "label": "KnowThat.ai",
      "as_of": "2026-10-30",
      "value_md": "8,400+ behavior reports and 214 reporting operators (self-reported on the KnowThat.ai homepage, which identifies the site as a shared accountability layer for AI agents). [27]"
     },
     {
      "label": "SPEC.md",
      "as_of": "2026-10-30",
      "value_md": "SPEC.md is Version 1.0.0 with Status Stable. It describes KYA-OS as a protocol extension for the Model Context Protocol that adds cryptographic identity, delegation chains, and non-repudiation proofs. [6]"
     }
    ],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "erc-8126",
     "target_name": "ERC-8126: AI Agent Verification",
     "relation_label": "Peer alternative",
     "delta": "KYA-OS identifies the caller with did:key or did:web and a Verifiable Credential chain revoked by StatusList2021, while ERC-8126 attaches a 0-100 risk score to an ERC-8004 agentId.",
     "item_md": "**[ERC-8126: AI Agent Verification](/protocols/erc-8126/)** (Peer alternative) — KYA-OS identifies the caller with did:key or did:web and a Verifiable Credential chain revoked by StatusList2021, while ERC-8126 attaches a 0-100 risk score to an ERC-8004 agentId."
    },
    {
     "item_md": "**[Identify protocols](/category/identify/)** — Category index for `identify` standards."
    }
   ],
   "v05_compiled_md": "---\nid: kya-os\ntitle: \"KYA-OS (Know Your Agent Operating System)\"\ntier: spec_brief\nlifecycle_status: published_standard\ncategory: identify\nform: document-format\nwire_archetype: identity_auth_crypto\nspec_url: https://raw.githubusercontent.com/decentralized-identity/kya-os-mcp/main/SPEC.md\nlast_checked: 2026-11-06\n---\n\n# KYA-OS (Know Your Agent Operating System)\n\n**Category:** [Identify](/category/identify/) (`identify`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-11-06\n\n> *This page is about KYA-OS, the open agent identity and delegation specification hosted by the Decentralized Identity Foundation, formerly called MCP-I. It is not the Know-Your-Agent (KYA) interoperability framework that Ant International, Mastercard and Visa announced through BuildFin.ai, not the Know Your Agent part of Skyfire's KYAPay, and not Trulioo's KYA product. For the general idea see [Know Your Agent](/terms/know-your-agent/); for Skyfire's token see [KYAPay Token](/protocols/kyapay-token/). [1][2][3][4][5]*\n\n**KYA-OS (Know Your Agent Operating System)** is a protocol extension for the Model Context Protocol (MCP) that adds cryptographic identity, delegation chains, and non-repudiation proofs to AI agent interactions. [6] Proof hashes cover the RFC 8785 (JCS) canonical JSON of the request and response. The detached proof is attached under `org.kya-os/response-proof` inside MCP `_meta`. Servers SHOULD expose `/.well-known/mcp`. [6] Dylan Hobbs authored it in May 2025 as MCP-I. On 2026-03-05 Vouched formally donated KYA-OS to the Decentralized Identity Foundation, to be developed as a community-driven open standard under the Trusted AI Agents Working Group through a dedicated KYA-OS task force. [2][7]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Identify](/category/identify/) (`identify`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | Dylan Hobbs at Vouched, May 2025 as MCP-I; donated to the Decentralized Identity Foundation on 2026-03-05 [1][2][7] |\n| **Governed by** | DIF Trusted AI Agents Working Group, KYA-OS Task Force (membership required). Editor and initial maintainer: Dylan Hobbs (Vouched). [6][8][9][10] |\n| **Track** | Community-driven open standard under DIF's Trusted AI Agents Working Group [2] |\n| **Status** | SPEC.md Status: Stable, self-declared DIF-ratified. 21 July notes: SC approved. 11 August notes: SteerCo ratification still open. [6][11][12] |\n| **Version** | Main SPEC.md `1.0.0` and Entity Card `1.1`; release snapshot `@kya-os/mcp` `1.21.2` (2026-10-27). [6][13][14][15][16][17] |\n| **Schemes** | `did:key` (self-certifying, ephemeral) and `did:web` (organization-hosted, persistent) [6] |\n| **Headers** | `KYA-OS-Delegation-Credential` and `KYA-OS-Delegation-Proof` authoritative; `KYA-OS-Agent-DID` MUST match; `KYA-OS-Session-Id` anchor only; `KYA-OS-Delegation-Chain` and `KYA-OS-Granted-Scopes` advisory, MUST NOT authorize. [6] |\n| **Message format** | Detached JWS over RFC 8785 (JCS) request and response hashes; delegation as a W3C Verifiable Credential [1][6] |\n| **Specification** | [KYA-OS Protocol Specification](https://raw.githubusercontent.com/decentralized-identity/kya-os-mcp/main/SPEC.md) (main, 1.0.0); [KYA-OS Entity Card profile](https://raw.githubusercontent.com/decentralized-identity/kya-os-mcp/main/SPEC-ENTITY-CARD.md) (main, 1.1) [6][15] |\n| **Found at** | `/.well-known/mcp` (servers SHOULD expose it); `/.well-known/kya-os-card.json` on a bare `did:web` host. The reference demo card id is `did:web:demo-mcp.kya-os.ai`. [1][6][15][18] |\n| **Licence** | MIT [19] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [Adoption and ecosystem](#adoption-and-ecosystem)\n4. [See also](#see-also)\n5. [References](#references)\n\n---\n\n## Problem and scope\n\nThe Model Context Protocol defines a standard interface for AI agents to interact with tools and resources, but MCP lacks an identity layer. Without identity verification, any process can claim to be a particular agent, and attackers can inject prompts that include fabricated identity claims. [6] KYA-OS uses Decentralized Identifiers for agent identity, W3C Verifiable Credentials for delegation, Ed25519 signatures, and StatusList2021 for revocation. Delegation credentials can express scope constraints, temporal bounds, and budget limits. [6] The Responsible Party is the root issuer of the chain, the issuerDid of the root DelegationCredential. The Principal MAY or MAY NOT be the Responsible Party. [6]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **W3C Decentralized Identifiers (DID 1.0) & Verifiable Credentials (VC 2.0)** | `DID 1.0 / VC` | Profiles classic standard | KYA-OS profiles W3C DIDs (did:key and did:web) and Verifiable Credentials across two valid 1.x profiles: legacy session DelegationCredentials signed over RFC 8785 JCS with StatusList2021 revocation, and Section 6.10 VC 2.0 Entity Cards using DataIntegrityProof (eddsa-jcs-2022), ZCAP-LD capability delegation, and Bitstring Status List v1.0. [6] |\n| **ZCAP-LD Authorization Capabilities** | `ZCAP-LD` | Analogous to classic standard | ZCAP-LD is the Entity Card capability: the signed credential is the authority, and its root issuer is the Responsible Party. [6][15] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Model Context Protocol](/protocols/mcp/)** | Builds on | MCP is the tool interface KYA-OS extends with identity, delegation, and proofs. KYA-OS servers SHOULD expose /.well-known/mcp. [6][20] |\n| **[ERC-8004: Trustless Agents](/protocols/erc-8004/)** | Peer alternative | ERC-8004 names an agent by ERC-721 tokenId (agentId). KYA-OS uses did:key or did:web and a VC chain revoked by StatusList2021. [6][21] |\n| **[x401: HTTP Proof Requirement Protocol](/protocols/x401/)** | Peer alternative | x401 carries PROOF-REQUEST and PROOF-RESPONSE headers. KYA-OS checks caller DID, VC chain, and detached JWS inside the MCP exchange. [1][6][22] |\n| **[Trusted Agent Protocol (TAP)](/protocols/tap/)** | Peer alternative | TAP uses RFC 9421 agent-browser-auth or agent-payer-auth plus a Visa-signed JWT. KYA-OS uses a DID, VC chain, and detached JWS. [1][6][23][24] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (5 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).*\n\n### Reference PoC server & registry\n\n| Actor | Role | Status | Boundary & format | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **KYA-OS PoC demo server** | Reference MCP server | Experimental · as of 2026-10-30 | PoC `did:web:demo-mcp.kya-os.ai` pins `@kya-os/mcp` `1.18.0`, behind npm latest `1.21.2`. | [KYA-OS PoC Entity Card](https://demo-mcp.kya-os.ai/.well-known/kya-os-card.json) [18] · [KYA-OS PoC provenance](https://demo-mcp.kya-os.ai/provenance) [25] · [kya-os-mcp README](https://raw.githubusercontent.com/decentralized-identity/kya-os-mcp/main/README.md) [1] · [KYA-OS builders registry](https://builders.kya-os.org/builders/) [16][26] |\n| **KnowThat.ai** | Agent registry | Experimental · as of 2026-08-20 | Vouched shared reputation registry: 8,400+ behavior reports, 214 operators, no conformance claim. | [KnowThat.ai](https://knowthat.ai) [27] · [KYA-OS builders registry](https://builders.kya-os.org/builders/) [26] |\n| **Bankee** | KYA-OS payment server | Experimental · checked 2026-11-06 | Production DID `did:web:bankee.ai`. The DID document is at `/.well-known/did.json` and holds an Ed25519 key. Tools over a threshold use `wrapWithDelegation` and return `needs_authorization` without a credential. | [bankee-kya-os](https://github.com/bankee-ai/bankee-kya-os) [28] |\n\n### Official SDKs & reference implementation\n\n| Actor | Role | Status | Boundary & format | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **@kya-os/mcp** | Reference SDK | Development · as of 2026-10-27 | npm `@kya-os/mcp` latest `1.21.2` (`2026-10-27`); self-reported `L3 full` on suite `1.1.0`. | [npm @kya-os/mcp](https://registry.npmjs.org/@kya-os%2fmcp) [16] · [KYA-OS builders registry](https://builders.kya-os.org/builders/) [17][26] |\n| **decentralized-identity/kya-os-mcp** | Reference implementation | Development · as of 2026-10-27 | Main-branch MCP reference repo, created `2026-03-10`; SPEC.md `1.0.0`, Status Stable. | [GitHub decentralized-identity/kya-os-mcp](https://github.com/decentralized-identity/kya-os-mcp) [19] · [GOVERNANCE.md](https://raw.githubusercontent.com/decentralized-identity/kya-os-mcp/main/GOVERNANCE.md) [10] · [kya-os-mcp README](https://raw.githubusercontent.com/decentralized-identity/kya-os-mcp/main/README.md) [1] · [SPEC.md](https://raw.githubusercontent.com/decentralized-identity/kya-os-mcp/main/SPEC.md) [6] |\n\n### Ecosystem censuses\n\n- **npm registry @kya-os/mcp** (*as of 2026-10-27*): npm dist-tags latest is 1.21.2, published 2026-10-27. Version 1.18.0 was published 2026-10-08. The package time record was created 2026-05-14, when version 1.2.0 was published. [16]\n- **KYA-OS builders registry** (*as of 2026-10-30*): The builders registry lists 2 verified credentials and 7 projects. It says the @kya-os/mcp full-suite pass is self-reported because the conformance vectors derive from the same codebase. The demo server entry says Deployed 1.18.0, checked 2026-10-30, on suite 1.1.0. [26]\n- **KnowThat.ai** (*as of 2026-10-30*): 8,400+ behavior reports and 214 reporting operators (self-reported on the KnowThat.ai homepage, which identifies the site as a shared accountability layer for AI agents). [27]\n- **SPEC.md** (*as of 2026-10-30*): SPEC.md is Version 1.0.0 with Status Stable. It describes KYA-OS as a protocol extension for the Model Context Protocol that adds cryptographic identity, delegation chains, and non-repudiation proofs. [6]\n\n---\n\n## See also\n\n- **[ERC-8126: AI Agent Verification](/protocols/erc-8126/)** *(Peer alternative)* — KYA-OS identifies the caller with did:key or did:web and a Verifiable Credential chain revoked by StatusList2021, while ERC-8126 attaches a 0-100 risk score to an ERC-8004 agentId.\n- **Category:** [Identify protocols](/category/identify/)\n\n---\n\n## References\n\n1. decentralized-identity/kya-os-mcp, *KYA-OS: agent identity, delegation, and proof* (fetched 2026-10-30) — <https://raw.githubusercontent.com/decentralized-identity/kya-os-mcp/main/README.md>\n2. Alex Keisner and Dylan Hobbs (Vouched); Decentralized Identity Foundation, *Why We Brought KYA-OS (formerly MCP-I) to DIF (and Why DIF Said Yes)* (published 2026-03-05; modified 2026-07-14) — <https://blog.identity.foundation/why-dif-said-yes-to-mcp-i/>\n3. Ant International, *Ant International, Mastercard and Visa Initiate Collaboration on Know-Your-Agent Interoperability to Scale Agentic Commerce* (published 2026-09-10) — <https://www.ant-intl.com/en/news/detail/ant-international-mastercard-and-visa-initiate-collaboration-on-know-your-agent-interoperability-to-scale-agentic-commerce/>\n4. Skyfire, *KYAPay: Toward an Open Payment and Identity Layer for Agentic AI* (2025-06-26) — <https://kyapay.org/whitepaper>\n5. Trulioo, *Know Your Agent (KYA) | AI Agent Verification* (fetched 2026-10-30) — <https://www.trulioo.com/products/kya-verification>\n6. Dylan Hobbs (@H0BB5), KYA-OS Working Group, *KYA-OS Protocol Specification* (version 1.0.0) — <https://raw.githubusercontent.com/decentralized-identity/kya-os-mcp/main/SPEC.md>\n7. The AI Journal, *Why AI Agents Need Verifiable Identity Before They Run the Web* (published 2026-10-09) — <https://aijourn.com/why-ai-agents-need-verifiable-identity-before-they-run-the-web/>\n8. Decentralized Identity Foundation, *DIF and Vouched Advance Agentic Identity with KYA-OS as International Demand for Open Agent Identity Standards Grows* (published 2026-04-22) — <https://blog.identity.foundation/kya-os/>\n9. Decentralized Identity Foundation, *Trusted AI Agents Working Group* (fetched 2026-10-30) — <https://identity.foundation/working-groups/trusted-agents.html>\n10. decentralized-identity/kya-os-mcp, *Governance* (fetched 2026-10-30) — <https://raw.githubusercontent.com/decentralized-identity/kya-os-mcp/main/GOVERNANCE.md>\n11. Dylan Hobbs, *docs: mark KYA-OS v1 as ratified* (2026-08-05) — <https://github.com/decentralized-identity/kya-os-mcp/commit/e062999c18f989d68e7cd3ef8c50052ba4cb1427>\n12. DIF Trusted AI Agents Working Group, *TAAWG - KYA-OS Task Force* (2026 agenda) — <https://raw.githubusercontent.com/decentralized-identity/trusted-ai-agents/main/agenda/agenda-kyaos-tf-2026.md>\n13. Dylan Hobbs, *docs(spec): graduate spec + conformance to 1.0.0 for donation* (2026-05-14) — <https://github.com/decentralized-identity/kya-os-mcp/commit/1ece3a888a1ca986d6c6ee4a4281258994019096>\n14. Vouched, *Vouched and the Decentralized Identity Foundation Launch KYA-OS, an Open Trust Layer for AI Agents* (published 2026-07-29; modified 2026-08-20) — <https://www.vouched.id/learn/vouched-and-the-decentralized-identity-foundation-launch-kya-os-an-open-trust-layer-for-ai-agents>\n15. Dylan Hobbs (@H0BB5), KYA-OS Working Group, *KYA-OS Entity Card - Profile Specification* (version 1.1) — <https://raw.githubusercontent.com/decentralized-identity/kya-os-mcp/main/SPEC-ENTITY-CARD.md>\n16. npm, *@kya-os/mcp* (created 2026-05-14; 1.21.2 published 2026-10-27) — <https://registry.npmjs.org/@kya-os%2fmcp>\n17. Decentralized Identity Foundation, *kya-os-mcp releases* (v1.21.2 published 2026-10-27) — <https://github.com/decentralized-identity/kya-os-mcp/releases>\n18. KYA-OS PoC demo server, */.well-known/kya-os-card.json* (fetched 2026-10-30) — <https://demo-mcp.kya-os.ai/.well-known/kya-os-card.json>\n19. Decentralized Identity Foundation, *decentralized-identity/kya-os-mcp* (created 2026-03-10) — <https://github.com/decentralized-identity/kya-os-mcp>\n20. Model Context Protocol, *Specification* (version 2026-07-28) — <https://modelcontextprotocol.io/specification/2026-07-28>\n21. Marco De Rossi (@MarcoMetaMask), Davide Crapis (@dcrapis), Jordan Ellis, and Erik Reppel, *ERC-8004: Trustless Agents* (created 2025-08-13) — <https://eips.ethereum.org/EIPS/eip-8004>\n22. Daniel Buchner (Proof) and Bhushit Agarwal (Circle), *x401: HTTP Proof Requirement Protocol* (latest) — <https://x401.proof.com/spec/latest/>\n23. Visa, *Getting Started - Trusted Agent Protocol* (fetched 2026-10-30) — <https://developer.visa.com/docs/trusted-agent-protocol>\n24. Visa, *Trusted Agent Protocol Specifications* (fetched 2026-10-30) — <https://developer.visa.com/docs/trusted-agent-protocol/trusted-agent-protocol-specifications>\n25. KYA-OS reference demo, */provenance* (fetched 2026-10-30) — <https://demo-mcp.kya-os.ai/provenance>\n26. KYA-OS Builders, *Builders · KYA-OS Builders* (fetched 2026-10-30) — <https://builders.kya-os.org/builders/>\n27. KnowThat.ai, *KnowThat.ai - The Trusted Agent Registry* (fetched 2026-10-30) — <https://knowthat.ai>\n28. Bankee, *bankee-kya-os* (repository README) — <https://github.com/bankee-ai/bankee-kya-os>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "kyapay-token",
   "hatnote_md": "This page is about the KYAPay token, the signed JWT format from Skyfire that tells a website or API who is behind an AI agent and, optionally, carries a payment credential. It is not [KYA-OS](/protocols/kya-os/), a separate specification that shares the \"Know Your Agent\" name, and not the general idea of [Know Your Agent](/terms/know-your-agent/). Payment schemes it is often set beside, such as [x402](/protocols/x402/), the [Machine Payments Protocol (MPP)](/protocols/mpp/) and the [Agent Payments Protocol (AP2)](/protocols/ap2/), each have their own page.",
   "name": "KYAPay Token",
   "acronym": "KYAPay",
   "aliases": [
    "KYAPay",
    "draft-skyfire-oauth-kyapay-token",
    "draft-skyfire-kyapayprofile"
   ],
   "collisions": [
    "KYA-OS (DIF identity layer for MCP, tracked as kya-os, unrelated)"
   ],
   "step": "pay",
   "parties": [
    "agent-site",
    "agent-payment"
   ],
   "form": "document-format",
   "track": "ietf",
   "scope": "payments",
   "question": "How can an authorization or resource server from one vendor check which agent is calling and accept its payment token, when the token was issued by another vendor?",
   "analog": "A signed ID card and a payment card in one envelope, readable by any shop",
   "origin": {
    "org": "Skyfire Systems Inc. Skyfire launched KYAPay on 2025-06-26: \"Skyfire today announces the launch of Skyfire Agent Checkout, built on top of a groundbreaking open protocol, KYAPay, that turns AI agents into full participants in the digital economy.\" The first Internet-Draft, draft-skyfire-kyapayprofile-00, was posted on 2026-03-02 (UTC); it was renamed and the Datatracker records \"2026-07-06 00 Jamie Reyes This document now replaces draft-skyfire-kyapayprofile instead of None\"",
    "date": "2025-06-26"
   },
   "governance": "No standards body. It is an individual Internet-Draft by Ankit Agarwal (Skyfire) and Michael B. Jones (Self-Issued Consulting): \"Document Type Active Internet-Draft (individual)\" \"This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process.\". It is discussed on the OAuth working-group list, but the working group has not adopted it. The draft expects that: \"Note that, in the future, the payment token functionality could be split into a separate specification, if desired by a working group adopting the specification.\"",
   "native_status": "Active individual Internet-Draft, not an RFC. draft-skyfire-oauth-kyapay-token-03 (2 November 2026) says \"Intended status: Standards Track\" and \"This Internet-Draft will expire on 6 May 2027.\" Datatracker, checked 2026-10-29: \"Document Type Active Internet-Draft (individual)\" \"This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process.\" \"IESG state I-D Exists\". The predecessor draft-skyfire-kyapayprofile is \"Replaced Internet-Draft (individual) Expired & archived\" and \"IESG state Replaced by draft-skyfire-oauth-kyapay-token\". Five companion drafts cover use, token exchange, and claim values. The JWT claims, media types, and the jwks.json well-known suffix it asks IANA to register were not in the IANA registries on 2026-10-29",
   "phase": "draft",
   "implementation": "shipping",
   "adoption": {
    "level": "observed",
    "by": "Skyfire, Apify, Akamai, Forter, Jomashop, Sequentum Checkout Agent, Skyfire MCP Server & Create Token API, and Skyfire (skyfire-xyz/kyapaya2a)",
    "probe_run": null
   },
   "version": {
    "label": "draft-skyfire-oauth-kyapay-token-03, dated 2 November 2026 in its header, \"Expires: 6 May 2027\". \"This Internet-Draft will expire on 6 May 2027.\"",
    "date": "2026-11-02"
   },
   "spec_url": "https://www.ietf.org/archive/id/draft-skyfire-oauth-kyapay-token-03.txt",
   "discovery": {
    "mechanism": "Nothing at a fixed path on the site that accepts it. The agent sends the token in a `KYAPay-Token` request header; the verifier gets the issuer's keys from `/.well-known/jwks.json` on the issuer's origin: \"For example, an iss value of https://issuer.example.com yields https://issuer.example.com/.well-known/jwks.json.\"",
    "path": "/.well-known/jwks.json"
   },
   "probe": {
    "method": "GET",
    "path": "none — tokens are presented per request by the agent",
    "parse": "No artefact at a fixed path on the resource server; a verifier would check the token's typ (kya+jwt, pay+jwt or kya-pay+jwt) against the issuer's JWKS.",
    "on_absent": "Not probeable from a resource server's origin."
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.ietf.org/archive/id/draft-skyfire-oauth-kyapay-token-03.txt",
     "claim": "A. Agarwal (Skyfire Systems Inc.) and Michael B. Jones (Self-Issued Consulting), *KYAPay Token (draft-skyfire-oauth-kyapay-token-03)*, 2 November 2026; checked 2026-11-07",
     "date": null,
     "quote": "draft-skyfire-oauth-kyapay-token-03 ... This document defines a token format for agent identity and payment tokens in JSON Web Token (JWT) format. / Intended status: Standards Track ... Expires: 6 May 2027 ... 2 November 2026 ... draft-skyfire-oauth-kyapay-token-03 ... This Internet-Draft will expire on 6 May 2027. / Ankit Agarwal Skyfire Systems Inc. ... Michael B. Jones Self-Issued Consulting / This document defines a token format for agent identity and payment tokens in JSON Web Token (JWT) format. Authorization servers and resource servers from different vendors can leverage this token format to consume identity and payment tokens in an interoperable manner. / formed from the iss claim with the URI suffix jwks.json. ... yields https://issuer.example.com/.well-known/jwks.json. / A recipient retrieves this JWK Set only for an issuer it trusts / if desired by a working group adopting the specification. / This is a compatibility change: the previous definition admitted false, so a token carrying that value conformed to -02 and does not conform here. / Intended status: Standards Track / Recipients MUST support ES256 [RFC7518], and MUST accept it from any issuer they trust whose JWK Set publishes an ES256 key. Issuers MUST use ES256, or an algorithm that they know every recipient of the token accepts. / The typ header parameter MUST be present, and its value MUST be one of: kya+jwt, pay+jwt, or kya-pay+jwt. ... values are compared case- ... insensitively, and a value with the application/ prefix, such as application/kya+jwt, is the same type. ... A token whose typ is absent or has any other value fails validation. ... set aside: the recipient does not use it for that request, and does not treat it as having failed validation. / Subtype name: kya+jwt ... Subtype name: pay+jwt ... Subtype name: kya-pay+jwt / provisions of BCP 78 and BCP 79. ... Revised BSD License text as described in Section 4.e of the Trust Legal Provisions / When the stp value is card ... (visa_vic) or Mastercard Agent Pay, using Secure Card on File (mastercard_scof). Such a credential is a payment token issued by the payment network (Section 3.5.2). It is used with a single-use token cryptogram (token_security_code), and the network restricts its use to one initiator, one target, and one amount. It is not a Primary Account Number (PAN), and the underlying PAN cannot feasibly be recovered from it. / A token defined in this specification, of any type, MUST NOT contain a Primary Account Number, full magnetic-stripe or chip track data, a static card verification value (CVV, CVC2 or CVV2), or a PIN or PIN block. / Note that the protocols using these tokens to achieve these goals are not defined by this specification. The interoperable use of them for these purposes will require further specification. / This specification does not define encryption of the token itself.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://www.ietf.org/archive/id/draft-skyfire-oauth-using-kyapay-tokens-01.txt",
     "claim": "A. Agarwal (Skyfire Systems Inc.) and Michael B. Jones (Self-Issued Consulting), *Using KYAPay Tokens (draft-skyfire-oauth-using-kyapay-tokens-01)*, 2026-10-19; checked 2026-10-30",
     "date": null,
     "quote": "a human-via-agent request carries its token(s) in an HTTP header field ... The KYAPay-Token header field is an HTTP request header field whose value is a KYA, PAY, or KYA-PAY token, as defined in [I-D.skyfire-oauth-kyapay-token]. / Protocol A. Agarwal Internet-Draft Skyfire Systems Inc. Intended status: Standards Track M. B. Jones / The KYAPay-Token header field is an HTTP request header field whose value is a kya, pay, or",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://datatracker.ietf.org/doc/draft-skyfire-oauth-kyapay-token/",
     "claim": "IETF Datatracker, *draft-skyfire-oauth-kyapay-token — KYAPay Token (IETF Datatracker)*, checked 2026-10-30",
     "date": null,
     "quote": "Replaces draft-skyfire-kyapayprofile / This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. / This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. ... Document Type Active Internet-Draft (individual) ... IESG state I-D Exists",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://datatracker.ietf.org/doc/draft-skyfire-kyapayprofile/",
     "claim": "IETF Datatracker, *draft-skyfire-kyapayprofile — KYAPay Profile (IETF Datatracker)*, checked 2026-10-30",
     "date": null,
     "quote": "Replaced Internet-Draft (individual) Expired & archived ... IESG state Replaced by draft-skyfire-oauth-kyapay-token",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://datatracker.ietf.org/api/v1/doc/newrevisiondocevent/?doc__name=draft-skyfire-kyapayprofile&format=json&limit=50",
     "claim": "IETF Datatracker API, *newrevisiondocevent for draft-skyfire-kyapayprofile*, checked 2026-10-30",
     "date": null,
     "quote": "\"doc\": \"/api/v1/doc/document/draft-skyfire-kyapayprofile/\"",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://mailarchive.ietf.org/arch/msg/oauth/h_YQPuYbBQf0TaiNIJQDNcxgGfc/",
     "claim": "Michael Jones, *[OAUTH-WG] KYAPay drafts updated in response to reviews*, checked 2026-10-30",
     "date": null,
     "quote": "Fri, 2 Oct 2026 01:07:33 +0000 From: Michael Jones To: \"oauth@ietf.org\" Thread-Topic: KYAPay drafts",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://www.iana.org/assignments/media-types/application.csv",
     "claim": "IANA, *Media Types, application subtype registry*, registry CSV; checked 2026-10-30",
     "date": null,
     "quote": "jwt,application/jwt,[RFC 7519]",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://app.skyfire.xyz/.well-known/jwks.json",
     "claim": "Skyfire Systems Inc., *Production JWK Set at app.skyfire.xyz/.well-known/jwks.json*, checked 2026-10-30",
     "date": null,
     "quote": "23:41:43 GMT content-type: application/json transfer-encoding: chunked connection: close content-security-policy: frame-ancestors 'none' permissions-policy: camera=(self \"https://withpersona.com\" / {\"keys\":[{\"kid\":\"BEDD-0\" / {\"keys\":[{\"kid\":\"BEDD-0\",\"crv\":\"P-256\",\"kty\":\"EC\",\"x\":\"2bZYYFE2k7GqZfsLtNoG_lYKzG_BVO0Hyr1AC1fNhl8\",\"y\":\"v-sDxghp7fV6SvKjMioVY_OBN3FsFbd9DmpnZ3uT1KU\",\"alg\":\"ES256\"}]} date: Fri, 30 Oct 2026 23:41:43 GMT",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://github.com/skyfire-xyz/kyapay",
     "claim": "GitHub REST API, *skyfire-xyz/kyapay*, checked 2026-10-30",
     "date": null,
     "quote": "{ \"id\": 1008063504, \"node_id\": \"R_kgDOPBXUEA\", \"name\": \"kyapay\", \"full_name\": \"skyfire-xyz/kyapay\", \"private\": false, \"owner\": { \"login\":",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://raw.githubusercontent.com/skyfire-xyz/kyapay_a2a/main/README.md",
     "claim": "Skyfire Systems Inc., *Skyfire KYAPay A2A Extension*, checked 2026-10-30",
     "date": null,
     "quote": "python from kyapay_a2a import create_token token = await create_token( requirements=payment_required.accepts[0], buyer_tag=\"my-agent\", skyfire_api_key=os.getenv(\"SKYFIRE_API_KEY\") ) See / skills; client agents can pay for them automatically. This implementation brings the KYAPay protocol-an",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://www.rfc-editor.org/rfc/rfc7519.html",
     "claim": "IETF, *RFC 7519: JSON Web Token (JWT)*, IETF RFC",
     "date": null,
     "quote": "JSON Web Token (JWT) is a compact, URL-safe means of representing",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://www.rfc-editor.org/rfc/rfc8615.html",
     "claim": "IETF, *RFC 8615: Well-Known Uniform Resource Identifiers (URIs)*, IETF RFC",
     "date": null,
     "quote": "This memo defines a path prefix for \"well-known locations\",",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://www.emvco.com/emv-technologies/3d-secure/",
     "claim": "EMVCo, *EMV 3-D Secure*, fetched 2026-11-12",
     "date": null,
     "quote": "Approved and Evaluated More options of Approved and Evaluated",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://www.linuxfoundation.org/press/linux-foundation-announces-operational-launch-of-x402-foundation-to-standardize-internet-native-payments-for-ai-agents-and-applications",
     "claim": "Linux Foundation, *Linux Foundation Announces Operational Launch of x402 Foundation to Standardize Internet-Native Payments for AI Agents and Applications*, July 14, 2026",
     "date": null,
     "quote": "SAN FRANCISCO, July 14, 2026 – The Linux Foundation , the nonprofit organization enabling mass innovation through open source, today announced the operational launch of the x402 Foundation",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://datatracker.ietf.org/doc/draft-httpauth-payment/",
     "claim": "IETF Datatracker, *draft-httpauth-payment — The \"Payment\" HTTP Authentication Scheme (IETF Datatracker)*, last updated 2026-09-09",
     "date": null,
     "quote": "IESG state I-D Exists",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/specification.md",
     "claim": "Google (google-agentic-commerce), *Agentic Payment Protocol (v0.2)*, fetched 2026-10-30",
     "date": null,
     "quote": "Agentic Payment Protocol (v0.2)",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://developer.visa.com/docs/trusted-agent-protocol/trusted-agent-protocol-specifications",
     "claim": "Visa, *Trusted Agent Protocol specifications*, checked 2026-10-30",
     "date": null,
     "quote": "By accessing, downloading, or using this specification, you agree to the terms and conditions outlined in the Visa Trusted Agent Protocol Product Terms.",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://aaif.io/blog/a2a-joins-aaif",
     "claim": "Agentic AI Foundation, *A2A joins AAIF's open agentic stack*, published 2026-08-17; modified 2026-09-24",
     "date": null,
     "quote": "A2A v1.0, the first stable specification, shipped in March 2026.",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://docs.skyfire.xyz/reference/charge-token",
     "claim": "Skyfire Developer Portal, *Charge Token*, checked 2026-10-30",
     "date": null,
     "quote": "that have already expired. ## Token Requirements Only pay and kya-pay tokens can be",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://docs.apify.com/integrations/skyfire",
     "claim": "Apify Documentation, *Agentic payments with Skyfire*, checked 2026-10-30",
     "date": null,
     "quote": "Finally, Apify's billing system charges the Skyfire PAY token for the actual usage cost.",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://web.archive.org/web/20260610154228id_/https://www.akamai.com/newsroom/press-release/no-free-crawls-akamai-tollbit-and-skyfire-turn-traffic-into-revenue",
     "claim": "Akamai Press Release, *No Free Crawls: Akamai, TollBit, and Skyfire Turn Traffic into Revenue*, checked 2026-10-30",
     "date": null,
     "quote": "the TollBit platform globally to monitor over 1.5B quarterly bot scrapes, set access terms,",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://mailarchive.ietf.org/arch/msg/oauth/RMBSQa4prD0mRy9YIWqYozA26n8/",
     "claim": "Srini Thumma (Akamai), *[OAUTH-WG] draft-skyfire-oauth-using-kyapay-tokens: PR correcting bot manager layer characterization*, checked 2026-10-30",
     "date": null,
     "quote": "Crucially, identification is decoupled from admission: token verification provides authenticated context (hid, apd, aid), but admission remains a site-configured policy decision (admit, rate-limit, step-up, deny), not a bypass.",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://thepaypers.com/fraud-and-fincrime/news/skyfire-and-forter-partner-to-verify-ai-agents-at-checkout",
     "claim": "Forter, *Skyfire, Forter partner on agentic commerce checkout | The Paypers*, checked 2026-10-30",
     "date": null,
     "quote": "Forter now accepts Skyfire's Know Your Agent (KYA) tokens, adding agent identity data to its fraud decisions on agentic purchases.",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://www.pymnts.com/partnerships/2026/skyfire-and-forter-team-to-strengthen-agentic-commerce-decisioning/",
     "claim": "PYMNTS, *Skyfire, Forter Team to Strengthen Agentic Commerce Decisioning*, checked 2026-10-30",
     "date": null,
     "quote": "integration of Skyfire's KYA identity and Forter's fraud decisioning will help merchants separate \"trusted,",
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://www.sequentum.com/news/sequentum-launches-checkout-agent-with-skyfire-integration-for-secure-compliant-agentic-commerce",
     "claim": "Sequentum, *Sequentum Launches Checkout Agent with Skyfire Integration for Secure, Compliant Agentic Commerce*, checked 2026-10-30",
     "date": null,
     "quote": "2 Type 2 environment.\",\"mainEntityOfPage\":{\"@type\":\"WebPage\",\"@id\":\"https://www.sequentum.com/news/sequentum-launches-checkout-agent-with-skyfire-integration-for-secure-compliant-agentic-commerce\"}}",
     "ref": 25
    },
    {
     "label": "[26]",
     "url": "https://skyfire.xyz/skyfire-sequentum-and-the-browser-as-the-agentic-commerce-integration-layer/",
     "claim": "Skyfire Blog, *Skyfire, Sequentum, and the Browser as the Agentic Commerce Integration Layer*, checked 2026-10-30",
     "date": null,
     "quote": "Starting now, Sequentum's new Checkout Agent can complete real purchases on real merchant sites using Skyfire for identity and payments, inside a SOC 2 Type 2 environment with full audit trails for every transaction.",
     "ref": 26
    },
    {
     "label": "[27]",
     "url": "https://docs.skyfire.xyz/docs/using-the-skyfire-mcp-server",
     "claim": "Skyfire Developer Portal, *Using the Skyfire MCP Server*, checked 2026-10-30",
     "date": null,
     "quote": "agent: 1. Connects to the Skyfire MCP server to create a kya token 2.",
     "ref": 27
    },
    {
     "label": "[28]",
     "url": "https://docs.skyfire.xyz/reference/create-token",
     "claim": "Skyfire Developer Portal, *Create Token*, checked 2026-10-30",
     "date": null,
     "quote": "Token post https://api.skyfire.xyz/api/v1/tokens Create a kya, pay, or kya-pay token as a buyer agent.",
     "ref": 28
    }
   ],
   "last_verified": "2026-11-12",
   "dispute": null,
   "summary_md": "**KYAPay Token** (`draft-skyfire-oauth-kyapay-token-03`) is an Internet-Draft by Ankit Agarwal of Skyfire Systems Inc. and Michael B. Jones of Self-Issued Consulting. Its intended status is Standards Track. It defines a token format for agent identity and payment tokens in JSON Web Token (JWT) format, so authorization servers and resource servers from different vendors can consume those tokens in an interoperable manner. A human-via-agent request carries its token in the `KYAPay-Token` header field. The value is a KYA, PAY, or KYA-PAY token. The recipient verifies the signature with the JWK Set formed from the `iss` claim and the URI suffix `jwks.json`. An `iss` value of `https://issuer.example.com` yields `https://issuer.example.com/.well-known/jwks.json`. Retrieval is only for an issuer the recipient trusts. Published on 2 November 2026 (expiring 6 May 2027), `draft-skyfire-oauth-kyapay-token-03` notes that payment-token functionality could be split into a separate specification if adopted by an IETF working group. The document history records a compatibility change for `verified`: the previous definition admitted false, so a token carrying that value conformed to `-02` and does not conform to `draft-skyfire-oauth-kyapay-token-03`. The Datatracker records that this document replaces `draft-skyfire-kyapayprofile`. That predecessor is a replaced individual Internet-Draft that is expired and archived, with IESG state replaced by `draft-skyfire-oauth-kyapay-token`.",
   "history": [
    {
     "date": "2026-10-29",
     "note": "Primary-source verified record (39 sources): draft-skyfire-oauth-kyapay-token-02, draft-skyfire-oauth-using-kyapay-tokens-01, draft-skyfire-oauth-kyapay-token-exchange-01, OAuth WG list reviews, Skyfire JWKS & docs, Apify, Forter/Jomashop, Sequentum, Visa/Consumer Reports, Mastercard, Experian, Akamai, hCaptcha, and IANA CSV registries."
    },
    {
     "date": "2026-10-20",
     "note": "initial record; verified against the datatracker record and -02 text of draft-skyfire-oauth-kyapay-token, and Skyfire's live JWKS"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "part_of": null,
   "group": null,
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-skyfire-oauth-kyapay-token"
    }
   ],
   "use_cases": [
    "accept-agent-payments",
    "prove-agent-identity",
    "agent-checkout"
   ],
   "audience": [
    "platform",
    "agent-builder",
    "site-owner"
   ],
   "pairs_with": [
    "x402",
    "mpp",
    "ap2",
    "tap",
    "a2a"
   ],
   "prerequisites": [],
   "ietf_tracker": {
    "doc": "draft-skyfire-oauth-kyapay-token",
    "rev": "03",
    "state": "active",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-11-02",
    "expires_utc": "2027-05-06",
    "as_of": "2026-11-07",
    "source": "https://datatracker.ietf.org/doc/draft-skyfire-oauth-kyapay-token/",
    "source_label": "per IETF Datatracker"
   },
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "payments_onchain",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "This page is about the KYAPay token, the signed JWT format from Skyfire that tells a website or API who is behind an AI agent and, optionally, carries a payment credential. It is not [KYA-OS](/protocols/kya-os/), a separate specification that shares the \"Know Your Agent\" name, and not the general idea of [Know Your Agent](/terms/know-your-agent/). Payment schemes it is often set beside, such as [x402](/protocols/x402/), the [Machine Payments Protocol (MPP)](/protocols/mpp/) and the [Agent Payments Protocol (AP2)](/protocols/ap2/), each have their own page. [1]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**KYAPay Token** (`draft-skyfire-oauth-kyapay-token-03`) is an Internet-Draft by Ankit Agarwal of Skyfire Systems Inc. and Michael B. Jones of Self-Issued Consulting. Its intended status is Standards Track. [1] It defines a token format for agent identity and payment tokens in JSON Web Token (JWT) format, so authorization servers and resource servers from different vendors can consume those tokens in an interoperable manner. [1] A human-via-agent request carries its token in the `KYAPay-Token` header field. The value is a KYA, PAY, or KYA-PAY token. [2] The recipient verifies the signature with the JWK Set formed from the `iss` claim and the URI suffix `jwks.json`. An `iss` value of `https://issuer.example.com` yields `https://issuer.example.com/.well-known/jwks.json`. Retrieval is only for an issuer the recipient trusts. [1] Published on 2 November 2026 (expiring 6 May 2027), `draft-skyfire-oauth-kyapay-token-03` notes that payment-token functionality could be split into a separate specification if adopted by an IETF working group. [1] The document history records a compatibility change for `verified`: the previous definition admitted false, so a token carrying that value conformed to `-02` and does not conform to `draft-skyfire-oauth-kyapay-token-03`. [1] The Datatracker records that this document replaces `draft-skyfire-kyapayprofile`. That predecessor is a replaced individual Internet-Draft that is expired and archived, with IESG state replaced by `draft-skyfire-oauth-kyapay-token`. [3][4]",
   "v05_identity_sentence_md": "**KYAPay Token** (`draft-skyfire-oauth-kyapay-token-03`) is an Internet-Draft by Ankit Agarwal of Skyfire Systems Inc. and Michael B. Jones of Self-Issued Consulting. Its intended status is Standards Track. [1] It defines a token format for agent identity and payment tokens in JSON Web Token (JWT) format, so authorization servers and resource servers from different vendors can consume those tokens in an interoperable manner. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Pay](/category/pay/) (`pay`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "Skyfire Systems Inc. (`2025-06-26`; Ankit Agarwal and Michael B. Jones; companion drafts with Akamai, Okta, Ory, WorkOS, Experian) [1][2][5]"
    },
    {
     "label": "Governed by",
     "value_md": "Individual IETF Internet-Draft reviewed on `oauth@ietf.org` (payment-token functionality may split into a separate specification upon working-group adoption) [1][3][6]"
    },
    {
     "label": "Track",
     "value_md": "IETF Internet-Draft (Standards Track) [1]"
    },
    {
     "label": "Status",
     "value_md": "Active individual Internet-Draft (Intended status: Standards Track; IESG state `I-D Exists`, not endorsed by the IETF) [1][3]"
    },
    {
     "label": "Version",
     "value_md": "`draft-skyfire-oauth-kyapay-token-03` (`2 November 2026`, expires `6 May 2027`; replaces `draft-skyfire-kyapayprofile`) [1]"
    },
    {
     "label": "Wire format",
     "value_md": "JWS compact serialization; recipients must support `ES256`; `typ` is `kya+jwt`, `pay+jwt`, or `kya-pay+jwt` (an `application/` prefix is the same type); media types `application/kya+jwt`, `application/pay+jwt`, `application/kya-pay+jwt` and Section 7 JWT claims (`tdm`, `tsi`, `ori`, `env`, `hid`, `aid`) requested for IANA registration (not yet in `application.csv`) [1][7]"
    },
    {
     "label": "Specification",
     "value_md": "[draft-skyfire-oauth-kyapay-token-03.txt](https://www.ietf.org/archive/id/draft-skyfire-oauth-kyapay-token-03.txt) · [IETF Datatracker](https://datatracker.ietf.org/doc/draft-skyfire-oauth-kyapay-token/) [1]"
    },
    {
     "label": "Found at",
     "value_md": "Issuer JWK Set `{iss}/.well-known/jwks.json` (example `https://issuer.example.com/.well-known/jwks.json`; Skyfire `https://app.skyfire.xyz/.well-known/jwks.json`). HTTP request header `KYAPay-Token` [1][2][8]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust BCP 78/79 and Revised BSD (`draft-skyfire-oauth-kyapay-token-03`); `MIT` (`skyfire-xyz/kyapay`); `Apache-2.0` (`skyfire-xyz/kyapay_a2a`) [1][9][10]"
    },
    {
     "label": "IETF state",
     "value_md": "`draft-skyfire-oauth-kyapay-token-03` · **Active Internet-Draft** (published 2 November 2026; expires 6 May 2027) · Individual submission [1]"
    }
   ],
   "v05_problem_md": "Authorization servers and resource servers from different vendors can leverage this token format to consume identity and payment tokens in an interoperable manner. [1] The `typ` header parameter must be present, and its value must be one of `kya+jwt`, `pay+jwt`, or `kya-pay+jwt`. [1] When `stp` is `card`, the network restricts the credential's use to one initiator, one target, and one amount. `visa_vic` and `mastercard_scof` are the card examples, used with a single-use `token_security_code`. The credential is not a Primary Account Number, and the underlying PAN cannot feasibly be recovered from it. [1] A token of any type must not contain a Primary Account Number, full magnetic-stripe or chip track data, a static card verification value (`CVV`, `CVC2`, or `CVV2`), or a PIN or PIN block. [1] The protocols using these tokens to achieve these goals are not defined by this specification. Interoperable use for those purposes will require further specification. [1] This specification does not define encryption of the token itself. [1]",
   "v05_mechanism_delta_md": "The `typ` header parameter must be present, and its value must be one of `kya+jwt`, `pay+jwt`, or `kya-pay+jwt`. [1] When `stp` is `card`, the network restricts the credential's use to one initiator, one target, and one amount. `visa_vic` and `mastercard_scof` are the card examples, used with a single-use `token_security_code`. The credential is not a Primary Account Number, and the underlying PAN cannot feasibly be recovered from it. [1] A token of any type must not contain a Primary Account Number, full magnetic-stripe or chip track data, a static card verification value (`CVV`, `CVC2`, or `CVV2`), or a PIN or PIN block. [1]",
   "v05_scope_boundary_md": "The protocols using these tokens to achieve these goals are not defined by this specification. Interoperable use for those purposes will require further specification. [1] This specification does not define encryption of the token itself. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "JSON Web Token (JWT, RFC 7519)",
      "spec_or_rfc": "RFC 7519",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "A KYAPay token is a JWT in one of three kinds, a KYA token, a PAY token, or a KYA-PAY token, and only pay and kya-pay tokens can be charged, with settlement type coin or card. [1][11]"
     },
     {
      "name": "Well-Known URIs (RFC 8615)",
      "spec_or_rfc": "RFC 8615",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "Verifying keys are the JWK Set at /.well-known/jwks.json, and Skyfire's production set publishes kid BEDD-0 with alg ES256, which recipients use to verify the signature locally. [1][8][12]"
     },
     {
      "name": "EMV 3-D Secure & Network Tokenization",
      "spec_or_rfc": "EMV 3-D Secure",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "When settlement type is card, the instrument is visa_vic or mastercard_scof, and a PAY or KYA-PAY token must not carry a Primary Account Number or the static verification value, which is a different message from an EMV 3-D Secure exchange. [1][13]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "x402",
      "target_name": "x402",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "KYAPay's payment credential is a PAY or KYA-PAY JWT carried in the KYAPay-Token header, while x402's payment credential is the signed payload in PAYMENT-SIGNATURE. [1][2][14]"
     },
     {
      "target_id": "mpp",
      "target_name": "Machine Payments Protocol (MPP)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "KYAPay is presented as a PAY or KYA-PAY JWT in the KYAPay-Token header, while MPP's retry credential is Authorization: Payment answering a WWW-Authenticate: Payment challenge. [1][2][15]"
     },
     {
      "target_id": "ap2",
      "target_name": "Agent Payments Protocol (AP2)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "KYAPay binds the authorizing party, the agent platform, and a coin or card instrument inside one JWT, while AP2's checkout authorization is an SD-JWT verifiable credential for the Checkout Mandate. [1][16]"
     },
     {
      "target_id": "tap",
      "target_name": "Trusted Agent Protocol (TAP)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "TAP identifies an agent by signing the merchant request, while a KYAPay card token is a JWT in the KYAPay-Token header whose card instrument is visa_vic or mastercard_scof. [1][2][17]"
     },
     {
      "target_id": "a2a",
      "target_name": "Agent2Agent Protocol (A2A)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "The KYAPay core draft defines the JWT and not the protocols that carry it, and the companion use draft puts the token in the KYAPay-Token header, while A2A is a separate task protocol and does not define the KYA, PAY, or KYA-PAY claims. [1][2][18]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (8 probed or cited examples; non-exhaustive).",
    "side_a": {
     "visible": true,
     "heading": "Sellers, platforms & payment rails",
     "col4_header": "Rail, Asset & Scheme",
     "note_md": null,
     "rows": [
      {
       "actor": "Skyfire",
       "role": "Token issuer & settler (Originator)",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "ES256-signed JWTs (kya+jwt, pay+jwt, kya-pay+jwt; live JWK kid: \"BEDD-0\" at `app.skyfire.xyz/.well-known/jwks.json`) settling in usdc or card tokens (visa_vic, mastercard_scof; up to 51h settlement)",
       "source_md": "[app.skyfire.xyz/.well-known/jwks.json (checked 2026-10-29)](https://app.skyfire.xyz/.well-known/jwks.json) [8] · [Skyfire Charge Token Docs](https://docs.skyfire.xyz/reference/charge-token) [19]"
      },
      {
       "actor": "Apify",
       "role": "Seller",
       "status": "Experimental",
       "status_display": "Experimental · checked 2026-10-30",
       "col4_md": "Accepts and charges Skyfire `PAY` tokens passed in the legacy `skyfire-pay-id` HTTP header for Actor compute usage (marked experimental in Apify docs)",
       "source_md": "[Apify Skyfire Integration Docs (checked 2026-10-29)](https://docs.apify.com/integrations/skyfire) [20]"
      },
      {
       "actor": "Akamai",
       "role": "Edge verifier / platform (Companion draft co-author)",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Edge verification of Skyfire KYA/PAY JWTs (`hid`, `apd`, `aid` claims) for bot management and paid crawl access alongside TollBit",
       "source_md": "[Akamai Press Release (2025-09-17)](https://web.archive.org/web/20260610154228id_/https://www.akamai.com/newsroom/press-release/no-free-crawls-akamai-tollbit-and-skyfire-turn-traffic-into-revenue) [21] · [OAuth WG List (2026-09-15)](https://mailarchive.ietf.org/arch/msg/oauth/RMBSQa4prD0mRy9YIWqYozA26n8/) [22]"
      },
      {
       "actor": "Forter",
       "role": "Checkout fraud verifier",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Ingests Skyfire KYA JWT identity & consumer trust claims into checkout fraud decisioning (piloted with US online retailer Jomashop)",
       "source_md": "[The Paypers (2026-10-22)](https://thepaypers.com/fraud-and-fincrime/news/skyfire-and-forter-partner-to-verify-ai-agents-at-checkout) [23] · [PYMNTS (2026-10-19)](https://www.pymnts.com/partnerships/2026/skyfire-and-forter-team-to-strengthen-agentic-commerce-decisioning/) [24]"
      },
      {
       "actor": "Jomashop",
       "role": "Seller (Pilot merchant)",
       "status": "Experimental",
       "status_display": "Experimental · checked 2026-10-30",
       "col4_md": "Pilot US watch & luxury retailer verifying agentic checkout purchases via Skyfire KYA tokens and Forter fraud decisioning",
       "source_md": "[The Paypers (2026-10-22)](https://thepaypers.com/fraud-and-fincrime/news/skyfire-and-forter-partner-to-verify-ai-agents-at-checkout) [23]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Buying agents, wallets & client SDKs",
     "col4_header": "Rail, Asset & Scheme",
     "note_md": null,
     "rows": [
      {
       "actor": "Sequentum Checkout Agent",
       "role": "Buying agent",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Browser-automation checkout agent delivering signed Skyfire KYA/payment tokens in the `skyfire-pay-id` HTTP header on every merchant request inside a SOC 2 Type 2 environment",
       "source_md": "[Sequentum News (2026-04-28)](https://www.sequentum.com/news/sequentum-launches-checkout-agent-with-skyfire-integration-for-secure-compliant-agentic-commerce) [25] · [Skyfire Blog (2026-04-28)](https://skyfire.xyz/skyfire-sequentum-and-the-browser-as-the-agentic-commerce-integration-layer/) [26]"
      },
      {
       "actor": "Skyfire MCP Server & Create Token API",
       "role": "Issuer client MCP server (Originator)",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Buyer-agent MCP server & token provisioning API minting scoped kya+jwt, pay+jwt, and kya-pay+jwt tokens for transmission in the kyapay-token header",
       "source_md": "[Skyfire MCP Server Docs (checked 2026-10-29)](https://docs.skyfire.xyz/docs/using-the-skyfire-mcp-server) [27] · [Create Token Docs](https://docs.skyfire.xyz/reference/create-token) [28]"
      },
      {
       "actor": "Skyfire (`skyfire-xyz/kyapay_a2a`)",
       "role": "Protocol extension (Originator)",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "A2A protocol extension enabling client agents to pay merchant agents automatically with KYAPay tokens",
       "source_md": "[skyfire-xyz/kyapay_a2a README (checked 2026-10-29)](https://raw.githubusercontent.com/skyfire-xyz/kyapay_a2a/main/README.md) [10]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "agent-commerce-kit",
     "target_name": "Agent Commerce Kit (ACK)",
     "relation_label": "Peer alternative",
     "delta": "ACK-ID's identifiers are DID documents, including did:web, did:key, and did:pkh, and verifiable credentials, while a KYAPay token is a KYA, PAY, or KYA-PAY JWT verified from /.well-known/jwks.json. [1]",
     "item_md": "**[Agent Commerce Kit (ACK)](/protocols/agent-commerce-kit/)** (Peer alternative) — ACK-ID's identifiers are DID documents, including did:web, did:key, and did:pkh, and verifiable credentials, while a KYAPay token is a KYA, PAY, or KYA-PAY JWT verified from /.well-known/jwks.json. [1]"
    },
    {
     "item_md": "**[Pay protocols](/category/pay/)** — Category index for `pay` standards."
    }
   ],
   "v05_compiled_md": "---\nid: kyapay-token\ntitle: \"KYAPay Token\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: pay\nform: document-format\nwire_archetype: payments_onchain\nspec_url: https://www.ietf.org/archive/id/draft-skyfire-oauth-kyapay-token-03.txt\nlast_checked: 2026-11-12\n---\n\n# KYAPay Token\n\n**Category:** [Pay](/category/pay/) (`pay`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-11-12\n\n> *This page is about the KYAPay token, the signed JWT format from Skyfire that tells a website or API who is behind an AI agent and, optionally, carries a payment credential. It is not [KYA-OS](/protocols/kya-os/), a separate specification that shares the \"Know Your Agent\" name, and not the general idea of [Know Your Agent](/terms/know-your-agent/). Payment schemes it is often set beside, such as [x402](/protocols/x402/), the [Machine Payments Protocol (MPP)](/protocols/mpp/) and the [Agent Payments Protocol (AP2)](/protocols/ap2/), each have their own page. [1]*\n\n**KYAPay Token** (`draft-skyfire-oauth-kyapay-token-03`) is an Internet-Draft by Ankit Agarwal of Skyfire Systems Inc. and Michael B. Jones of Self-Issued Consulting. Its intended status is Standards Track. [1] It defines a token format for agent identity and payment tokens in JSON Web Token (JWT) format, so authorization servers and resource servers from different vendors can consume those tokens in an interoperable manner. [1] A human-via-agent request carries its token in the `KYAPay-Token` header field. The value is a KYA, PAY, or KYA-PAY token. [2] The recipient verifies the signature with the JWK Set formed from the `iss` claim and the URI suffix `jwks.json`. An `iss` value of `https://issuer.example.com` yields `https://issuer.example.com/.well-known/jwks.json`. Retrieval is only for an issuer the recipient trusts. [1] Published on 2 November 2026 (expiring 6 May 2027), `draft-skyfire-oauth-kyapay-token-03` notes that payment-token functionality could be split into a separate specification if adopted by an IETF working group. [1] The document history records a compatibility change for `verified`: the previous definition admitted false, so a token carrying that value conformed to `-02` and does not conform to `draft-skyfire-oauth-kyapay-token-03`. [1] The Datatracker records that this document replaces `draft-skyfire-kyapayprofile`. That predecessor is a replaced individual Internet-Draft that is expired and archived, with IESG state replaced by `draft-skyfire-oauth-kyapay-token`. [3][4]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Pay](/category/pay/) (`pay`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | Skyfire Systems Inc. (`2025-06-26`; Ankit Agarwal and Michael B. Jones; companion drafts with Akamai, Okta, Ory, WorkOS, Experian) [1][2][5] |\n| **Governed by** | Individual IETF Internet-Draft reviewed on `oauth@ietf.org` (payment-token functionality may split into a separate specification upon working-group adoption) [1][3][6] |\n| **Track** | IETF Internet-Draft (Standards Track) [1] |\n| **Status** | Active individual Internet-Draft (Intended status: Standards Track; IESG state `I-D Exists`, not endorsed by the IETF) [1][3] |\n| **Version** | `draft-skyfire-oauth-kyapay-token-03` (`2 November 2026`, expires `6 May 2027`; replaces `draft-skyfire-kyapayprofile`) [1] |\n| **Wire format** | JWS compact serialization; recipients must support `ES256`; `typ` is `kya+jwt`, `pay+jwt`, or `kya-pay+jwt` (an `application/` prefix is the same type); media types `application/kya+jwt`, `application/pay+jwt`, `application/kya-pay+jwt` and Section 7 JWT claims (`tdm`, `tsi`, `ori`, `env`, `hid`, `aid`) requested for IANA registration (not yet in `application.csv`) [1][7] |\n| **Specification** | [draft-skyfire-oauth-kyapay-token-03.txt](https://www.ietf.org/archive/id/draft-skyfire-oauth-kyapay-token-03.txt) · [IETF Datatracker](https://datatracker.ietf.org/doc/draft-skyfire-oauth-kyapay-token/) [1] |\n| **Found at** | Issuer JWK Set `{iss}/.well-known/jwks.json` (example `https://issuer.example.com/.well-known/jwks.json`; Skyfire `https://app.skyfire.xyz/.well-known/jwks.json`). HTTP request header `KYAPay-Token` [1][2][8] |\n| **Licence** | IETF Trust BCP 78/79 and Revised BSD (`draft-skyfire-oauth-kyapay-token-03`); `MIT` (`skyfire-xyz/kyapay`); `Apache-2.0` (`skyfire-xyz/kyapay_a2a`) [1][9][10] |\n| **IETF state** | `draft-skyfire-oauth-kyapay-token-03` · **Active Internet-Draft** (published 2 November 2026; expires 6 May 2027) · Individual submission [1] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [Adoption and ecosystem](#adoption-and-ecosystem)\n4. [See also](#see-also)\n5. [References](#references)\n\n---\n\n## Problem and scope\n\nAuthorization servers and resource servers from different vendors can leverage this token format to consume identity and payment tokens in an interoperable manner. [1] The `typ` header parameter must be present, and its value must be one of `kya+jwt`, `pay+jwt`, or `kya-pay+jwt`. [1] When `stp` is `card`, the network restricts the credential's use to one initiator, one target, and one amount. `visa_vic` and `mastercard_scof` are the card examples, used with a single-use `token_security_code`. The credential is not a Primary Account Number, and the underlying PAN cannot feasibly be recovered from it. [1] A token of any type must not contain a Primary Account Number, full magnetic-stripe or chip track data, a static card verification value (`CVV`, `CVC2`, or `CVV2`), or a PIN or PIN block. [1] The protocols using these tokens to achieve these goals are not defined by this specification. Interoperable use for those purposes will require further specification. [1] This specification does not define encryption of the token itself. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **JSON Web Token (JWT, RFC 7519)** | `RFC 7519` | Profiles classic standard | A KYAPay token is a JWT in one of three kinds, a KYA token, a PAY token, or a KYA-PAY token, and only pay and kya-pay tokens can be charged, with settlement type coin or card. [1][11] |\n| **Well-Known URIs (RFC 8615)** | `RFC 8615` | Profiles classic standard | Verifying keys are the JWK Set at /.well-known/jwks.json, and Skyfire's production set publishes kid BEDD-0 with alg ES256, which recipients use to verify the signature locally. [1][8][12] |\n| **EMV 3-D Secure & Network Tokenization** | `EMV 3-D Secure` | Analogous to classic standard | When settlement type is card, the instrument is visa_vic or mastercard_scof, and a PAY or KYA-PAY token must not carry a Primary Account Number or the static verification value, which is a different message from an EMV 3-D Secure exchange. [1][13] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[x402](/protocols/x402/)** | Peer alternative | KYAPay's payment credential is a PAY or KYA-PAY JWT carried in the KYAPay-Token header, while x402's payment credential is the signed payload in PAYMENT-SIGNATURE. [1][2][14] |\n| **[Machine Payments Protocol (MPP)](/protocols/mpp/)** | Peer alternative | KYAPay is presented as a PAY or KYA-PAY JWT in the KYAPay-Token header, while MPP's retry credential is Authorization: Payment answering a WWW-Authenticate: Payment challenge. [1][2][15] |\n| **[Agent Payments Protocol (AP2)](/protocols/ap2/)** | Peer alternative | KYAPay binds the authorizing party, the agent platform, and a coin or card instrument inside one JWT, while AP2's checkout authorization is an SD-JWT verifiable credential for the Checkout Mandate. [1][16] |\n| **[Trusted Agent Protocol (TAP)](/protocols/tap/)** | Complements | TAP identifies an agent by signing the merchant request, while a KYAPay card token is a JWT in the KYAPay-Token header whose card instrument is visa_vic or mastercard_scof. [1][2][17] |\n| **[Agent2Agent Protocol (A2A)](/protocols/a2a/)** | Complements | The KYAPay core draft defines the JWT and not the protocols that carry it, and the companion use draft puts the token in the KYAPay-Token header, while A2A is a separate task protocol and does not define the KYA, PAY, or KYA-PAY claims. [1][2][18] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (8 probed or cited examples; non-exhaustive).*\n\n### Sellers, platforms & payment rails\n\n| Actor | Role | Status | Rail, Asset & Scheme | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Skyfire** | Token issuer & settler (Originator) | Live (HTTP 200) · checked 2026-10-30 | ES256-signed JWTs (kya+jwt, pay+jwt, kya-pay+jwt; live JWK kid: \"BEDD-0\" at `app.skyfire.xyz/.well-known/jwks.json`) settling in usdc or card tokens (visa_vic, mastercard_scof; up to 51h settlement) | [app.skyfire.xyz/.well-known/jwks.json (checked 2026-10-29)](https://app.skyfire.xyz/.well-known/jwks.json) [8] · [Skyfire Charge Token Docs](https://docs.skyfire.xyz/reference/charge-token) [19] |\n| **Apify** | Seller | Experimental · checked 2026-10-30 | Accepts and charges Skyfire `PAY` tokens passed in the legacy `skyfire-pay-id` HTTP header for Actor compute usage (marked experimental in Apify docs) | [Apify Skyfire Integration Docs (checked 2026-10-29)](https://docs.apify.com/integrations/skyfire) [20] |\n| **Akamai** | Edge verifier / platform (Companion draft co-author) | Supported · checked 2026-10-30 | Edge verification of Skyfire KYA/PAY JWTs (`hid`, `apd`, `aid` claims) for bot management and paid crawl access alongside TollBit | [Akamai Press Release (2025-09-17)](https://web.archive.org/web/20260610154228id_/https://www.akamai.com/newsroom/press-release/no-free-crawls-akamai-tollbit-and-skyfire-turn-traffic-into-revenue) [21] · [OAuth WG List (2026-09-15)](https://mailarchive.ietf.org/arch/msg/oauth/RMBSQa4prD0mRy9YIWqYozA26n8/) [22] |\n| **Forter** | Checkout fraud verifier | Supported · checked 2026-10-30 | Ingests Skyfire KYA JWT identity & consumer trust claims into checkout fraud decisioning (piloted with US online retailer Jomashop) | [The Paypers (2026-10-22)](https://thepaypers.com/fraud-and-fincrime/news/skyfire-and-forter-partner-to-verify-ai-agents-at-checkout) [23] · [PYMNTS (2026-10-19)](https://www.pymnts.com/partnerships/2026/skyfire-and-forter-team-to-strengthen-agentic-commerce-decisioning/) [24] |\n| **Jomashop** | Seller (Pilot merchant) | Experimental · checked 2026-10-30 | Pilot US watch & luxury retailer verifying agentic checkout purchases via Skyfire KYA tokens and Forter fraud decisioning | [The Paypers (2026-10-22)](https://thepaypers.com/fraud-and-fincrime/news/skyfire-and-forter-partner-to-verify-ai-agents-at-checkout) [23] |\n\n### Buying agents, wallets & client SDKs\n\n| Actor | Role | Status | Rail, Asset & Scheme | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Sequentum Checkout Agent** | Buying agent | Supported · checked 2026-10-30 | Browser-automation checkout agent delivering signed Skyfire KYA/payment tokens in the `skyfire-pay-id` HTTP header on every merchant request inside a SOC 2 Type 2 environment | [Sequentum News (2026-04-28)](https://www.sequentum.com/news/sequentum-launches-checkout-agent-with-skyfire-integration-for-secure-compliant-agentic-commerce) [25] · [Skyfire Blog (2026-04-28)](https://skyfire.xyz/skyfire-sequentum-and-the-browser-as-the-agentic-commerce-integration-layer/) [26] |\n| **Skyfire MCP Server & Create Token API** | Issuer client MCP server (Originator) | Supported · checked 2026-10-30 | Buyer-agent MCP server & token provisioning API minting scoped kya+jwt, pay+jwt, and kya-pay+jwt tokens for transmission in the kyapay-token header | [Skyfire MCP Server Docs (checked 2026-10-29)](https://docs.skyfire.xyz/docs/using-the-skyfire-mcp-server) [27] · [Create Token Docs](https://docs.skyfire.xyz/reference/create-token) [28] |\n| **Skyfire (`skyfire-xyz/kyapay_a2a`)** | Protocol extension (Originator) | Supported · checked 2026-10-30 | A2A protocol extension enabling client agents to pay merchant agents automatically with KYAPay tokens | [skyfire-xyz/kyapay_a2a README (checked 2026-10-29)](https://raw.githubusercontent.com/skyfire-xyz/kyapay_a2a/main/README.md) [10] |\n\n---\n\n## See also\n\n- **[Agent Commerce Kit (ACK)](/protocols/agent-commerce-kit/)** *(Peer alternative)* — ACK-ID's identifiers are DID documents, including did:web, did:key, and did:pkh, and verifiable credentials, while a KYAPay token is a KYA, PAY, or KYA-PAY JWT verified from /.well-known/jwks.json. [1]\n- **Category:** [Pay protocols](/category/pay/)\n\n---\n\n## References\n\n1. A. Agarwal (Skyfire Systems Inc.) and Michael B. Jones (Self-Issued Consulting), *KYAPay Token (draft-skyfire-oauth-kyapay-token-03)* (2 November 2026; checked 2026-11-07) — <https://www.ietf.org/archive/id/draft-skyfire-oauth-kyapay-token-03.txt>\n2. A. Agarwal (Skyfire Systems Inc.) and Michael B. Jones (Self-Issued Consulting), *Using KYAPay Tokens (draft-skyfire-oauth-using-kyapay-tokens-01)* (2026-10-19; checked 2026-10-30) — <https://www.ietf.org/archive/id/draft-skyfire-oauth-using-kyapay-tokens-01.txt>\n3. IETF Datatracker, *draft-skyfire-oauth-kyapay-token — KYAPay Token (IETF Datatracker)* (checked 2026-10-30) — <https://datatracker.ietf.org/doc/draft-skyfire-oauth-kyapay-token/>\n4. IETF Datatracker, *draft-skyfire-kyapayprofile — KYAPay Profile (IETF Datatracker)* (checked 2026-10-30) — <https://datatracker.ietf.org/doc/draft-skyfire-kyapayprofile/>\n5. IETF Datatracker API, *newrevisiondocevent for draft-skyfire-kyapayprofile* (checked 2026-10-30) — <https://datatracker.ietf.org/api/v1/doc/newrevisiondocevent/?doc__name=draft-skyfire-kyapayprofile&format=json&limit=50>\n6. Michael Jones, *[OAUTH-WG] KYAPay drafts updated in response to reviews* (checked 2026-10-30) — <https://mailarchive.ietf.org/arch/msg/oauth/h_YQPuYbBQf0TaiNIJQDNcxgGfc/>\n7. IANA, *Media Types, application subtype registry* (registry CSV; checked 2026-10-30) — <https://www.iana.org/assignments/media-types/application.csv>\n8. Skyfire Systems Inc., *Production JWK Set at app.skyfire.xyz/.well-known/jwks.json* (checked 2026-10-30) — <https://app.skyfire.xyz/.well-known/jwks.json>\n9. GitHub REST API, *skyfire-xyz/kyapay* (checked 2026-10-30) — <https://github.com/skyfire-xyz/kyapay>\n10. Skyfire Systems Inc., *Skyfire KYAPay A2A Extension* (checked 2026-10-30) — <https://raw.githubusercontent.com/skyfire-xyz/kyapay_a2a/main/README.md>\n11. IETF, *RFC 7519: JSON Web Token (JWT)* (IETF RFC) — <https://www.rfc-editor.org/rfc/rfc7519.html>\n12. IETF, *RFC 8615: Well-Known Uniform Resource Identifiers (URIs)* (IETF RFC) — <https://www.rfc-editor.org/rfc/rfc8615.html>\n13. EMVCo, *EMV 3-D Secure* (fetched 2026-11-12) — <https://www.emvco.com/emv-technologies/3d-secure/>\n14. Linux Foundation, *Linux Foundation Announces Operational Launch of x402 Foundation to Standardize Internet-Native Payments for AI Agents and Applications* (July 14, 2026) — <https://www.linuxfoundation.org/press/linux-foundation-announces-operational-launch-of-x402-foundation-to-standardize-internet-native-payments-for-ai-agents-and-applications>\n15. IETF Datatracker, *draft-httpauth-payment — The \"Payment\" HTTP Authentication Scheme (IETF Datatracker)* (last updated 2026-09-09) — <https://datatracker.ietf.org/doc/draft-httpauth-payment/>\n16. Google (google-agentic-commerce), *Agentic Payment Protocol (v0.2)* (fetched 2026-10-30) — <https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/specification.md>\n17. Visa, *Trusted Agent Protocol specifications* (checked 2026-10-30) — <https://developer.visa.com/docs/trusted-agent-protocol/trusted-agent-protocol-specifications>\n18. Agentic AI Foundation, *A2A joins AAIF's open agentic stack* (published 2026-08-17; modified 2026-09-24) — <https://aaif.io/blog/a2a-joins-aaif>\n19. Skyfire Developer Portal, *Charge Token* (checked 2026-10-30) — <https://docs.skyfire.xyz/reference/charge-token>\n20. Apify Documentation, *Agentic payments with Skyfire* (checked 2026-10-30) — <https://docs.apify.com/integrations/skyfire>\n21. Akamai Press Release, *No Free Crawls: Akamai, TollBit, and Skyfire Turn Traffic into Revenue* (checked 2026-10-30) — <https://web.archive.org/web/20260610154228id_/https://www.akamai.com/newsroom/press-release/no-free-crawls-akamai-tollbit-and-skyfire-turn-traffic-into-revenue>\n22. Srini Thumma (Akamai), *[OAUTH-WG] draft-skyfire-oauth-using-kyapay-tokens: PR correcting bot manager layer characterization* (checked 2026-10-30) — <https://mailarchive.ietf.org/arch/msg/oauth/RMBSQa4prD0mRy9YIWqYozA26n8/>\n23. Forter, *Skyfire, Forter partner on agentic commerce checkout | The Paypers* (checked 2026-10-30) — <https://thepaypers.com/fraud-and-fincrime/news/skyfire-and-forter-partner-to-verify-ai-agents-at-checkout>\n24. PYMNTS, *Skyfire, Forter Team to Strengthen Agentic Commerce Decisioning* (checked 2026-10-30) — <https://www.pymnts.com/partnerships/2026/skyfire-and-forter-team-to-strengthen-agentic-commerce-decisioning/>\n25. Sequentum, *Sequentum Launches Checkout Agent with Skyfire Integration for Secure, Compliant Agentic Commerce* (checked 2026-10-30) — <https://www.sequentum.com/news/sequentum-launches-checkout-agent-with-skyfire-integration-for-secure-compliant-agentic-commerce>\n26. Skyfire Blog, *Skyfire, Sequentum, and the Browser as the Agentic Commerce Integration Layer* (checked 2026-10-30) — <https://skyfire.xyz/skyfire-sequentum-and-the-browser-as-the-agentic-commerce-integration-layer/>\n27. Skyfire Developer Portal, *Using the Skyfire MCP Server* (checked 2026-10-30) — <https://docs.skyfire.xyz/docs/using-the-skyfire-mcp-server>\n28. Skyfire Developer Portal, *Create Token* (checked 2026-10-30) — <https://docs.skyfire.xyz/reference/create-token>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "oauth-cimd",
   "name": "OAuth Client ID Metadata Document",
   "acronym": "CIMD",
   "aliases": [
    "CIMD",
    "Client ID Metadata Document",
    "draft-ietf-oauth-client-id-metadata-document",
    "draft-parecki-oauth-client-id-metadata-document"
   ],
   "collisions": [],
   "step": "permit",
   "parties": [
    "agent-site"
   ],
   "form": "document-format",
   "track": "ietf",
   "scope": "general",
   "question": "How can an authorization server accept an OAuth client, such as an MCP client, that it has never seen before, without pre-registration or Dynamic Client Registration?",
   "analog": "A business card at a URL: the client's ID is the address where its details live",
   "origin": {
    "org": "Aaron Parecki (Okta) and Emelia Smith",
    "date": "2024-07-02"
   },
   "governance": "Active Internet-Draft and WG Document of the IETF oauth Working Group. Published -03 (updated 2026-11-02, expires 2027-05-06) header says Intended status: Standards Track; Datatracker lists Intended RFC status (None). GitHub main sets category: std and docname draft-ietf-oauth-client-id-metadata-document-latest with an empty date.",
   "native_status": "Active Internet-Draft (oauth WG Document). Published snapshot is draft-ietf-oauth-client-id-metadata-document-03, dated 2 November 2026 (2026-11-02), expires 6 May 2027 (2027-05-06), header Intended status: Standards Track.",
   "phase": "working-group",
   "implementation": "multi-implementation",
   "adoption": {
    "level": "observed",
    "by": "Microsoft, Visual Studio Code, Cursor, Anthropic, Claude Code, Anthropic, Claude, Block, goose, Sentry, Apify, Zuplo, and 16 other verified implementations",
    "probe_run": null
   },
   "version": {
    "label": "draft-ietf-oauth-client-id-metadata-document-03",
    "date": "2026-11-02"
   },
   "spec_url": "https://www.ietf.org/archive/id/draft-ietf-oauth-client-id-metadata-document-03.txt",
   "discovery": {
    "mechanism": "the client_id is an HTTPS URL that serves the client's metadata JSON; authorization servers advertise support with client_id_metadata_document_supported in their RFC 8414 metadata",
    "path": "/.well-known/oauth-authorization-server"
   },
   "probe": {
    "method": "GET",
    "path": "{origin}/.well-known/oauth-authorization-server",
    "parse": "RFC 8414 authorization server metadata JSON; check for client_id_metadata_document_supported: true",
    "on_absent": "The authorization server does not advertise CIMD support; clients must pre-register or fall back to Dynamic Client Registration."
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.rfc-editor.org/rfc/rfc9728.html",
     "claim": "Michael B. Jones, Phil Hunt, and Aaron Parecki, *RFC 9728: OAuth 2.0 Protected Resource Metadata*, April 2025",
     "date": null,
     "quote": "RFC 9728: OAuth 2.0 Protected Resource Metadata … /.well-known/oauth-protected-resource / OAuth 2.0 Protected Resource Metadata … /.well-known/oauth-protected-resource",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://www.rfc-editor.org/rfc/rfc8414.html",
     "claim": "Michael B. Jones, Nat Sakimura, and John Bradley, *RFC 8414: OAuth 2.0 Authorization Server Metadata*, June 2018",
     "date": null,
     "quote": "OAuth 2.0 Authorization Server Metadata … /.well-known/oauth-authorization-server",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://www.rfc-editor.org/rfc/rfc7591.html",
     "claim": "Justin Richer (ed.), Michael B. Jones, John Bradley, Maciej Machulak, and Phil Hunt, *RFC 7591: OAuth 2.0 Dynamic Client Registration Protocol*, July 2015",
     "date": null,
     "quote": "OAuth 2.0 Dynamic Client Registration Protocol … The client registration endpoint MUST accept HTTP POST messages … the authorization server returns a client identifier for the client",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://www.ietf.org/archive/id/draft-ietf-oauth-identity-assertion-authz-grant-06.txt",
     "claim": "A. Parecki (Okta), K. McGuinness (Independent), and B. Campbell (Ping Identity), *Identity Assertion JWT Authorization Grant (draft-ietf-oauth-identity-assertion-authz-grant-06)*, draft-06, 31 October 2026; expires 4 May 2027",
     "date": null,
     "quote": "Identity Assertion JWT Authorization Grant … This specification provides a mechanism for an application to use an identity assertion to obtain an access token for a third-party API",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://raw.githubusercontent.com/workos/auth.md/main/README.md",
     "claim": "WorkOS, *auth.md*, README",
     "date": null,
     "quote": "# auth.md … A reference implementation of agentic registration … returns a service-signed identity_assertion / A reference implementation of agentic registration … returns a service-signed identity_assertion",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://www.ietf.org/archive/id/draft-ietf-oauth-client-id-metadata-document-03.txt",
     "claim": "Aaron Parecki (Okta) and Emelia Smith, *OAuth Client ID Metadata Document (draft-ietf-oauth-client-id-metadata-document-03)*, 2 November 2026; expires 6 May 2027",
     "date": null,
     "quote": "OAuth Client ID Metadata Document … draft-ietf-oauth-client-id-metadata-document-03 … This specification defines a mechanism through which an OAuth client can identify itself to authorization servers, without prior dynamic client registration or other existing registration. This is through the usage of a URL as a client_id / In cases where a client is interacting with authorization servers that it has no relationship with, manual registration is impossible. … While Dynamic Client Registration [RFC7591] can provide a method for a previously unknown client to establish itself at an authorization server and obtain a client identifier, this is not always practical in some deployments and can create additional challenges around management of the registration data and cleanup of inactive clients. / The Client ID Metadata Document is a JSON ([RFC8259]) document … whose value MUST match the Client Identifier URL, which MUST also match the URL that the authorization server used to fetch the document … The Client ID Metadata Document MUST be served with a 200 OK HTTP status code. … The authorization server MUST NOT automatically follow HTTP redirects when fetching the Client ID Metadata Document. / Intended status: Standards Track … Expires: 6 May 2027 … 2 November 2026 … draft-ietf-oauth-client-id-metadata-document-03 / Intended status: Standards Track / Expires: 6 May 2027 … 2 November 2026 … draft-ietf-oauth-client-id-metadata-document-03 / A Client Identifier URL: … MUST use the https URL scheme … MUST NOT contain a userinfo component … MAY contain a port … MUST contain a path component other than / … MUST NOT contain a fragment component / The Client ID Metadata Document is a JSON ([RFC8259]) document / whose value MUST match the Client Identifier URL, which MUST also match the URL that the authorization server used to fetch the document / The Client ID Metadata Document MUST be served with a 200 OK HTTP status code. / The authorization server MUST NOT automatically follow HTTP redirects when fetching the Client ID Metadata Document. / client_id_metadata_document_supported: OPTIONAL. Boolean value specifying whether the authorization server supports retrieving client metadata from a client_id URL / Metadata Name: client_id_metadata_document_supported: … Change Controller: IETF … Specification Document: Section 8 of [draft-ietf-oauth-client-id- metadata-document-03] / OAuth Client ID Metadata Document … draft-ietf-oauth-client-id-metadata-document-03 / Copyright (c) 2026 IETF Trust and the persons identified as the document authors. / This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents / Code Components extracted from this document must include Revised BSD License text / Authorization servers that publish Authorization Server Metadata [RFC8414] MUST include the following property … client_id_metadata_document_supported: OPTIONAL. Boolean value specifying whether the authorization server supports retrieving client metadata from a client_id URL … by only redirecting the user to an authorization server that supports this specification / Clients that do not control a stable public URL, such as clients under active development on a developer's local machine … the client_secret and client_secret_expires_at properties MUST NOT be used … private key material MUST NOT be included in the Client ID Metadata Document … Authorization servers MUST NOT fetch a Client ID Metadata Document URL or any URLs contained within a Client ID Metadata Document that resolve to special-use IP addresses / Authorization servers SHOULD fetch the client_id metadata document provided in the authorization request / The Client ID Metadata Document MUST contain a client_id property whose value MUST match the Client Identifier URL / This method of client information discovery establishes registered redirect URL(s) when the authorization server fetches the contents of the Client ID Metadata Document. / This section is non-normative. / the usage of a URL as a client_id in an OAuth flow, where the URL refers to a document containing the necessary client metadata, enabling the authorization server to fetch the metadata about the client as needed. … MUST use the https URL scheme … MUST contain a path component other than / … The Client ID Metadata Document is a JSON ([RFC8259]) document … OAuth Dynamic Client Registration Metadata / MUST use the https URL scheme … MUST contain a path component other than / … MUST NOT contain single-dot or double-dot path components … MUST NOT contain a fragment component … Client Identifier URLs MUST be compared using simple string comparison … The client SHOULD normalize its Client Identifier URL … the Authorization Server MUST NOT normalize Client Identifier URLs when performing comparison / whose value MUST match the Client Identifier URL, which MUST also match the URL that the authorization server used to fetch the document; comparisons MUST be made using simple string comparison … the client_secret and client_secret_expires_at properties MUST NOT be used … token_endpoint_auth_method and token_endpoint_auth_methods_supported properties MUST NOT include client_secret_post, client_secret_basic, client_secret_jwt … such as redirect_uris, token_endpoint_auth_method, scope, grant_types, jwks, jwks_uri, or display properties like client_name / A client SHOULD use the token_endpoint_auth_methods_supported … property to advertise which client authentication methods the client supports, even if the value is only [\"none\"]. … The token_endpoint_auth_method property is NOT RECOMMENDED … When a Client ID Metadata Document contains neither the token_endpoint_auth_method property … nor the token_endpoint_auth_methods_supported property … the authorization server MUST assume the token endpoint authentication method of none. / The authorization response MUST include the iss parameter, as defined in [RFC9207]. … prevent mix-up attacks. / The \"jwks_uri\" and \"jwks\" parameters MUST NOT both be present … such as private_key_jwt … the Client ID Metadata Document MUST include either jwks or jwks_uri properties … the authorization server MUST require client authentication according to Section 2.2 of [RFC7523] … \"token_endpoint_auth_methods_supported\": [\"private_key_jwt\"] … If the authorization server does not support private_key_jwt, then the token endpoint authentication method to be used by the client must be none and the client will be a public client. / The authorization server MUST NOT automatically follow HTTP redirects when fetching the Client ID Metadata Document. … a network error or timeout … The authorization server SHOULD respect HTTP cache headers … Authorization servers MUST NOT fetch a Client ID Metadata Document URL or any URLs contained within a Client ID Metadata Document that resolve to special-use IP addresses … authorization servers SHOULD limit the amount of data they read and process … The recommended maximum size to read is 5 kilobytes. / Authorization servers that publish Authorization Server Metadata [RFC8414] MUST include the following property … client_id_metadata_document_supported: OPTIONAL. Boolean value specifying whether the authorization server supports retrieving client metadata from a client_id URL / MAY apply their own policies when deciding whether and how to present them to the end-user. For example, an authorization server could … display a warning alongside these properties for clients that have not been reviewed, or could display only the hostname of the Client Identifier URL / without prior dynamic client registration or other existing registration / client_id_metadata_document_supported: … Boolean value specifying whether the authorization server supports retrieving client metadata from a client_id URL / where the URL refers to a document containing the necessary client metadata, enabling the authorization server to fetch the metadata about the client as needed.",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://github.com/modelcontextprotocol/modelcontextprotocol/blob/02dd8f61/docs/seps/991-enable-url-based-client-registration-using-oauth-c.mdx",
     "claim": "Paul Carleton and Aaron Parecki, *SEP-991: Enable URL-based Client Registration using OAuth Client ID Metadata Documents*, created 2025-07-07; status Final",
     "date": null,
     "quote": "SEP-991: Enable URL-based Client Registration using OAuth Client ID Metadata Documents / SEP-991: Enable URL-based Client Registration using OAuth Client ID Metadata Documents … | **Status** | Final | … | **Created** | 2025-07-07 | … This SEP proposes adopting OAuth Client ID Metadata Documents as specified in draft-parecki-oauth-client-id-metadata-document-03 as an additional client registration mechanism",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://aaronparecki.com/2025/10/08/4/cimd",
     "claim": "Aaron Parecki, *Client ID Metadata Document Adopted by the OAuth Working Group*, October 8, 2025",
     "date": null,
     "quote": "October 8, 2025 … The IETF OAuth Working Group has adopted the Client ID Metadata Document specification!",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://raw.githubusercontent.com/oauth-wg/draft-ietf-oauth-client-id-metadata-document/main/draft-ietf-oauth-client-id-metadata-document.md",
     "claim": "Aaron Parecki (Okta) and Emelia Smith (IETF Web Authorization Protocol Working Group), *OAuth Client ID Metadata Document (working-group markdown; docname -latest, date empty)*, undated main branch (docname draft-ietf-oauth-client-id-metadata-document-latest)",
     "date": null,
     "quote": "fullname: Aaron Parecki … organization: Okta … fullname: Emelia Smith / category: std / docname: draft-ietf-oauth-client-id-metadata-document-latest / number: date: consensus: true / docname: draft-ietf-oauth-client-id-metadata-document-latest … github: \"oauth-wg/draft-ietf-oauth-client-id-metadata-document\"",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://www.ietf.org/archive/id/draft-parecki-oauth-client-id-metadata-document-00.txt",
     "claim": "Aaron Parecki (Okta) and Emelia Smith, *OAuth Client ID Metadata Document (draft-parecki-oauth-client-id-metadata-document-00)*, 2 July 2024; expires 3 January 2025",
     "date": null,
     "quote": "A. Parecki … Okta … E. Smith … 2 July 2024 … OAuth Client ID Metadata Document",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-oauth-client-id-metadata-document/",
     "claim": "Aaron Parecki and Emelia Smith (IETF Web Authorization Protocol Working Group), *draft-ietf-oauth-client-id-metadata-document — OAuth Client ID Metadata Document (IETF Datatracker)*, revision -03; last updated 2026-11-02 (expires 2027-05-06)",
     "date": null,
     "quote": "Aaron Parecki … Emelia Smith / oauth WG … WG Document … Internet Engineering Task Force (IETF) / Intended RFC status (None) / Active Internet-Draft … oauth WG",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-oauth-client-id-metadata-document/doc.json",
     "claim": "IETF, *IETF Datatracker document JSON metadata for draft-ietf-oauth-client-id-metadata-document*, checked 2026-11-08",
     "date": null,
     "quote": "\"rev\": \"03\", \"pages\": 30, \"time\": \"2026-11-02 22:02:56\" … \"expires\": \"2027-05-06 22:02:56\"",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://www.iana.org/assignments/oauth-parameters",
     "claim": "IANA, *OAuth Parameters*, last updated 2026-08-24",
     "date": null,
     "quote": "OAuth Parameters Created 2012-07-27 Last Updated 2026-08-24",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://github.com/oauth-wg/draft-ietf-oauth-client-id-metadata-document",
     "claim": "IETF OAuth Working Group, *OAuth Client ID Metadata Document (working repository)*, repository readme",
     "date": null,
     "quote": "OAuth Client ID Metadata Document … This is the working area for the individual Internet-Draft, \"OAuth Client ID Metadata Document\".",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://modelcontextprotocol.io/specification/2025-11-25/basic/authorization",
     "claim": "Model Context Protocol, *Authorization*, specification 2025-11-25",
     "date": null,
     "quote": "Authorization servers and MCP clients SHOULD support OAuth Client ID Metadata Documents … Authorization servers and MCP clients MAY support the OAuth 2.0 Dynamic Client Registration Protocol ( RFC7591 ) … Authorization servers advertise that they support clients using Client ID Metadata Documents by including the following property in their OAuth Authorization Server metadata … client_id_metadata_document_supported … true / OpenID Connect Discovery 1.0 … MCP clients MUST support both discovery mechanisms … MCP clients SHOULD check for this capability / Clients supporting all options SHOULD follow the following priority order: … Use pre-registered client information for the server if the client has it available … Use Client ID Metadata Documents if the Authorization Server indicates if the server supports it (via client_id_metadata_document_supported in OAuth Authorization Server Metadata) … Use Dynamic Client Registration as a fallback if the Authorization Server supports it (via registration_endpoint in OAuth Authorization Server Metadata) … Prompt the user to enter the client information if no other option is available / Client ID Metadata Documents cannot prevent localhost URL impersonation by themselves. … SHOULD display additional warnings for localhost -only redirect URIs … MUST clearly display the redirect URI hostname during authorization",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28/basic/authorization/client-registration",
     "claim": "Model Context Protocol, *Client Registration*, specification 2026-07-28",
     "date": null,
     "quote": "Version 2026-07-28 (latest) ... Client ID Metadata Documents: When client and server have no prior relationship (most common) / MCP clients and authorization servers SHOULD support OAuth Client ID Metadata Documents / Dynamic Client Registration is deprecated. New implementations should use Client ID Metadata Documents instead. / MCP clients and authorization servers SHOULD support OAuth Client ID Metadata Documents as specified in OAuth Client ID Metadata Document for client registration.",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://www.ietf.org/archive/id/draft-mcguinness-oauth-cimd-sw-stmt-01.txt",
     "claim": "K. McGuinness (Independent), *Client ID Metadata Document Software Statement (draft-mcguinness-oauth-cimd-sw-stmt-01)*, 2 November 2026; expires 6 May 2027",
     "date": null,
     "quote": "This specification defines a software statement in which a trusted party records its review of the exact octets of a client's Client ID Metadata Document (CIMD), and how an authorization server enforces / without a registration. / draft-mcguinness-oauth-cimd-sw-stmt-01 / 2 November 2026",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://www.ietf.org/archive/id/draft-gerber-oauth-client-metadata-lookup-00.txt",
     "claim": "M. Gerber (Twilio), *OAuth Client Metadata Lookup (draft-gerber-oauth-client-metadata-lookup-00)*, 21 October 2026; expires 24 April 2027",
     "date": null,
     "quote": "This document defines an OAuth endpoint for retrieving a public subset of a client's effective configuration at an authorization server, including applied defaults. / endpoint chiefly serves Client ID Metadata Document clients / draft-gerber-oauth-client-metadata-lookup-00 / 21 October 2026",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://blog.modelcontextprotocol.io/posts/2026-07-28/",
     "claim": "David Soria Parra and Den Delimarsky, *The 2026-07-28 Specification*, July 28, 2026",
     "date": null,
     "quote": "July 28, 2026 … A formal shift away from Dynamic Client Registration (DCR) toward client metadata documents (CIMD). … The TypeScript, Python, Go, and C# SDKs are updated to match / Dynamic Client Registration itself is now formally deprecated in favor of CIMD. DCR continues to work for backward compatibility, but will be removed in a future version of the MCP spec.",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://www.ietf.org/archive/id/draft-meunier-webbotauth-registry-04.txt",
     "claim": "Maxime Guerreiro (Cloudflare), Ulas Kirazci (Amazon), and Thibault Meunier (Cloudflare), *Registry and Signature Agent card for Web bot auth (draft-meunier-webbotauth-registry-04)*, 27 October 2026; expires 30 April 2027",
     "date": null,
     "quote": "the same namespace used by OAuth Client ID Metadata Documents, extended with a single web_bot_auth object.",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://vscode.dev/oauth/client-metadata.json",
     "claim": "Microsoft Visual Studio Code, *OAuth Client ID Metadata Document (vscode.dev)*, HTTP Date Fri, 30 Oct 2026",
     "date": null,
     "quote": "HTTP/2 200 / \"client_id\":\"https://vscode.dev/oauth/client-metadata.json\",\"client_uri\":\"https://vscode.dev/product\" / \"client_name\":\"Visual Studio Code\" / \"token_endpoint_auth_method\":\"none\",\"application_type\":\"native\" / \"grant_types\":[\"authorization_code\",\"refresh_token\",\"urn:ietf:params:oauth:grant-type:device_code\"] / \"redirect_uris\":[\"http://127.0.0.1:33418/\",\"https://vscode.dev/redirect\"] / content-type: application/json; charset=utf-8",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://cursor.com/oauth/mcp-client.json",
     "claim": "Cursor, *OAuth Client ID Metadata Document (cursor.com MCP client)*, HTTP Date Fri, 30 Oct 2026",
     "date": null,
     "quote": "HTTP/2 200 / \"client_id\":\"https://cursor.com/oauth/mcp-client.json\",\"client_name\":\"Cursor\" / \"token_endpoint_auth_method\":\"none\" / \"grant_types\":[\"authorization_code\",\"refresh_token\"] / \"redirect_uris\":[\"https://www.cursor.com/agents/mcp/oauth/callback\",\"https://www.cursor.com/bot/mcp/oauth/callback\",\"https://grok.com/connectors-oauth-exchange-code/\",\"http://localhost:8787/callback\",\"http://127.0.0.1:8787/callback\"] / content-type: application/json",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://claude.ai/oauth/claude-code-client-metadata",
     "claim": "Anthropic, *Claude Code OAuth Client ID Metadata Document*, HTTP Date Fri, 30 Oct 2026",
     "date": null,
     "quote": "HTTP/2 200 / \"client_id\":\"https://claude.ai/oauth/claude-code-client-metadata\",\"client_name\":\"Claude Code\" / \"redirect_uris\":[\"http://localhost/callback\",\"http://127.0.0.1/callback\"] / \"grant_types\":[\"authorization_code\",\"refresh_token\"] / \"token_endpoint_auth_method\":\"none\" / content-type: application/json",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://claude.ai/oauth/mcp-oauth-client-metadata",
     "claim": "Anthropic, *Claude OAuth Client ID Metadata Document*, HTTP Date Fri, 30 Oct 2026",
     "date": null,
     "quote": "HTTP/2 200 / \"client_id\":\"https://claude.ai/oauth/mcp-oauth-client-metadata\",\"client_name\":\"Claude\" / \"redirect_uris\":[\"https://claude.ai/api/mcp/auth_callback\"] / \"grant_types\":[\"authorization_code\",\"refresh_token\",\"urn:ietf:params:oauth:grant-type:jwt-bearer\"] / \"token_endpoint_auth_method\":\"none\" / content-type: application/json",
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://goose-docs.ai/oauth/client-metadata.json",
     "claim": "Block goose, *goose OAuth Client ID Metadata Document*, HTTP Date Fri, 30 Oct 2026",
     "date": null,
     "quote": "HTTP/2 200 / \"client_id\": \"https://goose-docs.ai/oauth/client-metadata.json\", \"client_name\": \"goose\" / \"redirect_uris\": [ \"http://127.0.0.1/oauth_callback\", \"http://[::1]/oauth_callback\" ] / \"token_endpoint_auth_method\": \"none\", \"code_challenge_methods_supported\": [\"S256\"] / content-type: application/json; charset=utf-8",
     "ref": 25
    },
    {
     "label": "[26]",
     "url": "https://www.raycast.com/.well-known/oauth-client-metadata/raycast.json",
     "claim": "Raycast, *Raycast OAuth Client ID Metadata Document*, HTTP Date Fri, 30 Oct 2026",
     "date": null,
     "quote": "HTTP/2 200 / \"client_id\": \"https://www.raycast.com/.well-known/oauth-client-metadata/raycast.json\", \"client_name\": \"Raycast\" / \"token_endpoint_auth_method\": \"none\" / \"com.raycast:/oauth\", \"com.raycast-x:/oauth\", \"raycast://mcp-oauth-callback\", \"http://127.0.0.1/callback\" / content-type: application/json; charset=utf-8",
     "ref": 26
    },
    {
     "label": "[27]",
     "url": "https://ampcode.com/docs/customize/mcp",
     "claim": "Amp, *MCP*, Amp docs",
     "date": null,
     "quote": "Amp supports Client ID Metadata Documents (CIMD), and it falls back to dynamic client registration for servers that do not support CIMD. / amp mcp oauth",
     "ref": 27
    },
    {
     "label": "[28]",
     "url": "https://atproto.com/specs/oauth",
     "claim": "AT Protocol, *OAuth*, AT Protocol OAuth specification",
     "date": null,
     "quote": "The client_id is a fully-qualified web URL pointing to the public client metadata (JSON document). There is no client_secret shared between servers and clients.",
     "ref": 28
    },
    {
     "label": "[29]",
     "url": "https://raw.githubusercontent.com/bluesky-social/proposals/main/0004-oauth/README.md",
     "claim": "Bluesky Social, *0004-oauth proposal README*, bluesky-social/proposals",
     "date": null,
     "quote": "Instead, the Authorization Server will dynamically load the client metadata document from the client_id, during an authorization request, as described in the client metadata section.",
     "ref": 29
    },
    {
     "label": "[30]",
     "url": "https://py.sdk.modelcontextprotocol.io/client/oauth-clients/",
     "claim": "Model Context Protocol (Python SDK), *OAuth clients*, Python SDK documentation",
     "date": null,
     "quote": "The SDK already speaks it: pass the URL as client_metadata_url= when you construct the provider. / When the authorization server's metadata advertises client_id_metadata_document_supported: true, the provider skips the /register request entirely: the URL goes into the flow as the client_id, and there is no client_secret. / When the server doesn't advertise it (most don't yet), or you never pass a URL, the provider falls back to dynamic registration silently, and everything above works exactly as described.",
     "ref": 30
    },
    {
     "label": "[31]",
     "url": "https://csharp.sdk.modelcontextprotocol.io/v2/api/ModelContextProtocol.Authentication.ClientOAuthOptions.html",
     "claim": "Model Context Protocol (C# SDK), *Class ClientOAuthOptions*, MCP C# SDK v2",
     "date": null,
     "quote": "ClientMetadataDocumentUri / Gets or sets the HTTPS URL pointing to this client's metadata document. / When specified, and when the authorization server metadata reports client_id_metadata_document_supported = true, the OAuth client will respond to challenges by sending this URL as the client identifier instead of performing dynamic client registration.",
     "ref": 31
    },
    {
     "label": "[32]",
     "url": "https://gofastmcp.com/clients/auth/cimd",
     "claim": "FastMCP, *CIMD Authentication*, FastMCP client auth docs",
     "date": null,
     "quote": "CIMD (Client ID Metadata Documents) flips this around. You host a small JSON document at an HTTPS URL you control, and that URL becomes your client_id. / When your client connects to a server, the server fetches your metadata document and can verify your identity through your domain ownership.",
     "ref": 32
    },
    {
     "label": "[33]",
     "url": "https://mcp.sentry.dev/.well-known/oauth-authorization-server",
     "claim": "Sentry, *Sentry OAuth authorization server metadata*, HTTP Date Fri, 30 Oct 2026",
     "date": null,
     "quote": "HTTP/2 200 / \"issuer\":\"https://mcp.sentry.dev\" / \"authorization_endpoint\":\"https://mcp.sentry.dev/oauth/authorize\" / \"token_endpoint\":\"https://mcp.sentry.dev/oauth/token\" / \"registration_endpoint\":\"https://mcp.sentry.dev/oauth/register\" / \"grant_types_supported\":[\"authorization_code\",\"refresh_token\"] / \"code_challenge_methods_supported\":[\"S256\"] / \"client_id_metadata_document_supported\":true / content-type: application/json",
     "ref": 33
    },
    {
     "label": "[34]",
     "url": "https://mcp.apify.com/.well-known/oauth-authorization-server",
     "claim": "Apify, *Apify MCP OAuth authorization server metadata*, checked 2026-10-29",
     "date": null,
     "quote": "\"issuer\":\"https://console-backend.apify.com\" / \"authorization_endpoint\":\"https://console.apify.com/authorize/oauth\" / \"registration_endpoint\":\"https://console-backend.apify.com/oauth/apps\" / \"grant_types_supported\":[\"authorization_code\",\"refresh_token\",\"urn:ietf:params:oauth:grant-type:device_code\"] / \"code_challenge_methods_supported\":[\"S256\"] / \"client_id_metadata_document_supported\":true / \"scopes_supported\":[\"full_api_access\"]",
     "ref": 34
    },
    {
     "label": "[35]",
     "url": "https://zuplo.com/.well-known/oauth-authorization-server",
     "claim": "Zuplo, *Zuplo OAuth authorization server metadata*, checked 2026-10-29",
     "date": null,
     "quote": "\"issuer\":\"https://auth.zuplo.com/\" / \"authorization_endpoint\":\"https://auth.zuplo.com/authorize\" / \"token_endpoint\":\"https://auth.zuplo.com/oauth/token\" / \"client_id_metadata_document_supported\":true",
     "ref": 35
    },
    {
     "label": "[36]",
     "url": "https://stytch.com/blog/stytch-supports-cimd/",
     "claim": "Stytch, *Stytch supports CIMD for OAuth*, Oct 17, 2025",
     "date": null,
     "quote": "Oct 17, 2025 / Stytch now supports Client ID Metadata Documents (CIMD), a new technique that makes OAuth setup simpler and more secure by letting apps automatically discover and verify clients. / Instead of pre-registering or hardcoding credentials",
     "ref": 36
    },
    {
     "label": "[37]",
     "url": "https://workos.com/changelog/client-id-metadata-support-for-mcp-auth",
     "claim": "WorkOS, *Client ID Metadata Support for MCP Auth*, November 30, 2025",
     "date": null,
     "quote": "November 30, 2025 / WorkOS Connect now supports Client ID Metadata Document, or CIMD for use with MCP. / MCP clients need a way to identify themselves to authorization servers without preregistration, and CIMD provides a secure way to do that.",
     "ref": 37
    },
    {
     "label": "[38]",
     "url": "https://workos.com/docs/authkit/mcp",
     "claim": "WorkOS, *Model Context Protocol – AuthKit*, AuthKit MCP docs",
     "date": null,
     "quote": "Client ID Metadata Document is off by default, but you should enable it in the WorkOS Dashboard under Connect / The MCP protocol specifies that authorization servers (AuthKit) should support Client ID Metadata Document (CIMD) to allow MCP clients to identify themselves.",
     "ref": 38
    },
    {
     "label": "[39]",
     "url": "https://docs.scalekit.com/authenticate/mcp/quickstart/",
     "claim": "Scalekit, *Add OAuth 2.1 authorization to MCP servers*, Scalekit Docs",
     "date": null,
     "quote": "Enable Client ID Metadata Document (CIMD) to allow your authorization server to fetch client metadata from MCP hosts and authorize them automatically. / If your MCP server is intended for use by public MCP clients such as Claude, Cursor, or VS Code, it is recommended to keep both DCR and CIMD enabled. / Clients that support CIMD will use the CIMD flow",
     "ref": 39
    },
    {
     "label": "[40]",
     "url": "https://better-auth.com/docs/plugins/cimd",
     "claim": "Better Auth, *Client ID Metadata Document (CIMD)*, Better Auth docs",
     "date": null,
     "quote": "The client's client_id is the exact HTTPS URL of a metadata document it hosts. Better Auth validates the document and persists the client through the OAuth Provider's canonical registration path. / Use metadataProfile: \"mcp-2026-07-28\" when composing cimd() with mcp()",
     "ref": 40
    },
    {
     "label": "[41]",
     "url": "https://auth0.com/docs/get-started/auth0-overview/create-applications/cimd-overview",
     "claim": "Auth0, *Client ID Metadata Document (CIMD) Registration*, Auth0 Docs",
     "date": null,
     "quote": "Register an application in Auth0 by importing an externally hosted Client ID Metadata Document (CIMD) from a URL. / Auth0 supports manual CIMD and dynamic CIMD registration / Manual CIMD registration: Manually import an application from its CIMD URL. Auth0 fetches and validates the CIMD to register the application as a CIMD client / While Auth0 maintains a record of these settings, the hosted CIMD remains the source of truth.",
     "ref": 41
    },
    {
     "label": "[42]",
     "url": "https://developer.okta.com/docs/guides/ai-agent-cimd-registration/main/",
     "claim": "Okta, *Register AI agents with a Client ID Metadata Document (CIMD)*, Okta Developer",
     "date": null,
     "quote": "Register an AI agent with a CIMD-based OAuth client using the API. / Configure an existing AI agent as a CIMD client. / Use the CIMD client ID in an OAuth token request. / An Okta org that has CIMD-based AI agent registration enabled",
     "ref": 42
    },
    {
     "label": "[43]",
     "url": "https://curity.io/resources/learn/oauth-client-id-metadata-document/",
     "claim": "Curity, *OAuth Registration with Client ID Metadata Document*, Curity Identity Server",
     "date": null,
     "quote": "Published: 2026-03-02 / To learn how to use Client ID metadata documents with the Curity Identity Server, check out the tutorial on Ephemeral Clients, which walks through the steps to configure the use of Client ID metadata documents in the Admin UI. / Instead, the client can reuse the same client ID across authorization servers.",
     "ref": 43
    },
    {
     "label": "[44]",
     "url": "https://www.keycloak.org/securing-apps/mcp-authz-server",
     "claim": "Keycloak, *Integrating with Model Context Protocol (MCP)*, Keycloak securing apps",
     "date": null,
     "quote": "To process an authorization request whose client_id parameter is a URL pointing to a Client ID Metadata Document, you need to create the profile including client-id-metadata-document executor.",
     "ref": 44
    },
    {
     "label": "[45]",
     "url": "https://docs.pingidentity.com/pingone/applications_overview/p1_client_id_metadata_document.html",
     "claim": "Ping Identity, *Client ID metadata document (CIMD) | PingOne Advanced Identity Cloud*, undated product doc",
     "date": null,
     "quote": "The client ID metadata document (CIMD) feature lets you configure OAuth 2.0 clients to identify themselves using an HTTPS URL as their `client_id`. / Advanced Identity Cloud fetches the JSON metadata document at that URL and uses it to configure the client at runtime, with no prior registration required. / CIMD is particularly suited to large numbers of clients such as AI agents in Model Context Protocol (MCP) flows, where preregistering every short-lived or externally-hosted client is impractical. / Advanced Identity Cloud’s support for CIMD aligns with the IETF OAuth Client ID Metadata Document draft specification.",
     "ref": 45
    },
    {
     "label": "[46]",
     "url": "https://vercel.com/changelog/vercel-mcp-now-supports-client-id-metadata-documents",
     "claim": "Josh Souphanthong and Mark Roberts (Vercel), *Vercel MCP now supports Client ID Metadata Documents*, published 2 Nov 2026",
     "date": null,
     "quote": "To connect, a client publishes a Client ID Metadata Document (CIMD), a JSON file on its own domain that describes it, and uses that file's HTTPS URL as its OAuth `client_id`. / This follows the MCP authorization spec, which now recommends CIMD over Dynamic Client Registration.",
     "ref": 46
    },
    {
     "label": "[47]",
     "url": "https://oauth.net/2/client-id-metadata-document/",
     "claim": "OAuth Community Site, *OAuth Client ID Metadata Document*, undated implementation roster",
     "date": null,
     "quote": "The Client ID Metadata Document extension defines a mechanism for an OAuth client to host its metadata at a URL to be able to work with authorization servers without prior registration. / - Auth0 - Authlete - Authplane - Descope - FusionAuth - Okta - Ping - Scalekit - Stytch - WorkOS / - VSCode (↗) - MCPJam (↗) - Claude.ai (↗) - ChatGPT / - IndieLogin (↗) - Webmention.io (↗) / - BlueSky / * Auth0 (coming soon) * Authlete * Authplane * Descope * Ping * Scalekit * Stytch * WorkOS",
     "ref": 47
    }
   ],
   "last_verified": "2026-11-11",
   "dispute": null,
   "summary_md": "**OAuth Client ID Metadata Document** (`draft-ietf-oauth-client-id-metadata-document-03`) is a Standards Track IETF OAuth Working Group specification originated by Aaron Parecki and Emelia Smith that lets an OAuth 2.0 client identify itself to authorization servers without prior dynamic or manual registration by using an HTTPS URL as its `client_id`. The `client_id` URL refers to a JSON Client ID Metadata Document, which the authorization server fetches on demand during an authorization flow. It MUST be served with HTTP `200 OK`, the authorization server MUST NOT automatically follow HTTP redirects, and the document's `client_id` property MUST match the URL used to fetch it. Adopted by the IETF OAuth Working Group on October 8, 2025, `draft-ietf-oauth-client-id-metadata-document-03` was published on 2 November 2026 (expiring 6 May 2027) and serves as the default client registration mechanism in the Model Context Protocol (`SEP-991`).",
   "history": [
    {
     "date": "2026-10-29",
     "note": "Primary-source verification sweep across 71 primary IETF drafts, MCP specifications, live OAuth client metadata and authorization server endpoints, SDK implementations, and press sources."
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "part_of": null,
   "group": null,
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-ietf-oauth-client-id-metadata-document"
    }
   ],
   "use_cases": [
    "delegate-user-authority",
    "expose-tools-to-agents"
   ],
   "audience": [
    "agent-builder",
    "platform"
   ],
   "pairs_with": [
    "oauth-metadata-for-agents",
    "mcp",
    "identity-assertion-authz-grant",
    "web-bot-auth-signature-agent-card",
    "auth-md"
   ],
   "prerequisites": [],
   "hatnote_md": "Not to be confused with [OAuth Protected Resource and Authorization Server Metadata](/protocols/oauth-metadata-for-agents/) (RFC 9728 `/.well-known/oauth-protected-resource` and RFC 8414 `/.well-known/oauth-authorization-server` server discovery documents), with the OAuth 2.0 Dynamic Client Registration Protocol (RFC 7591, whose client registration endpoint accepts an HTTP POST and whose authorization server returns a client identifier), with [Identity Assertion JWT Authorization Grant (ID-JAG)](/protocols/identity-assertion-authz-grant/) (an application uses an identity assertion to obtain an access token for a third-party API), or with [auth.md](/protocols/auth-md/) (a reference implementation of agentic registration that returns a service-signed identity_assertion).",
   "ietf_tracker": {
    "doc": "draft-ietf-oauth-client-id-metadata-document",
    "rev": "03",
    "state": "active",
    "stream": "IETF",
    "group_type": "WG",
    "wg": "oauth",
    "replaced_by": null,
    "posted_utc": "2026-11-02",
    "expires_utc": "2027-05-06",
    "as_of": "2026-11-08",
    "source": "https://datatracker.ietf.org/doc/draft-ietf-oauth-client-id-metadata-document/",
    "source_label": "per IETF Datatracker"
   },
   "tier": "flagship",
   "lifecycle_status": "active_draft",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-11",
   "v05_hatnote_html_md": "Not to be confused with [OAuth Protected Resource and Authorization Server Metadata](/protocols/oauth-metadata-for-agents/) (RFC 9728 `/.well-known/oauth-protected-resource` and RFC 8414 `/.well-known/oauth-authorization-server` server discovery documents), with the OAuth 2.0 Dynamic Client Registration Protocol (RFC 7591, whose client registration endpoint accepts an HTTP POST and whose authorization server returns a client identifier), with [Identity Assertion JWT Authorization Grant (ID-JAG)](/protocols/identity-assertion-authz-grant/) (an application uses an identity assertion to obtain an access token for a third-party API), or with [auth.md](/protocols/auth-md/) (a reference implementation of agentic registration that returns a service-signed identity_assertion). [1][2][3][4][5]",
   "v05_elevator_pitch_md": "OAuth Client ID Metadata Document is an IETF OAuth specification—adopted by MCP for URL-based client registration—that lets AI agents and desktop applications authenticate against unfamiliar authorization servers without pre-shared credentials. Rather than requiring manual developer-portal setup or stateful Dynamic Client Registration on every server, the client uses an HTTPS URL for its `client_id` so the authorization server can fetch a self-hosted JSON metadata document on demand. [6][7]",
   "v05_lead_md": "**OAuth Client ID Metadata Document** (`draft-ietf-oauth-client-id-metadata-document-03`) is a Standards Track IETF OAuth Working Group specification originated by Aaron Parecki and Emelia Smith that lets an OAuth 2.0 client identify itself to authorization servers without prior dynamic or manual registration by using an HTTPS URL as its `client_id`. [6] The `client_id` URL refers to a JSON Client ID Metadata Document, which the authorization server fetches on demand during an authorization flow. It MUST be served with HTTP `200 OK`, the authorization server MUST NOT automatically follow HTTP redirects, and the document's `client_id` property MUST match the URL used to fetch it. [6] Adopted by the IETF OAuth Working Group on October 8, 2025, `draft-ietf-oauth-client-id-metadata-document-03` was published on 2 November 2026 (expiring 6 May 2027) and serves as the default client registration mechanism in the Model Context Protocol (`SEP-991`). [6][7][8]",
   "v05_identity_sentence_md": "**OAuth Client ID Metadata Document** (`draft-ietf-oauth-client-id-metadata-document-03`) is a Standards Track IETF OAuth Working Group specification originated by Aaron Parecki and Emelia Smith that lets an OAuth 2.0 client identify itself to authorization servers without prior dynamic or manual registration by using an HTTPS URL as its `client_id`. [6]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Permit](/category/permit/) (`permit`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "Aaron Parecki (Okta) and Emelia Smith. `draft-parecki-oauth-client-id-metadata-document-00` is dated 2 July 2024. [9][10][11]"
    },
    {
     "label": "Governed by",
     "value_md": "IETF oauth WG Document. Aaron Parecki recorded adoption on October 8, 2025. [8][11]"
    },
    {
     "label": "Track",
     "value_md": "IETF Standards Track (`draft-ietf-oauth-client-id-metadata-document-03`, `category: std`) [6][9][11]"
    },
    {
     "label": "IETF tracker",
     "value_md": "`draft-ietf-oauth-client-id-metadata-document-03` (published 2026-11-02; expires 2027-05-06) [6]"
    },
    {
     "label": "Status",
     "value_md": "Active oauth WG Internet-Draft (`draft-ietf-oauth-client-id-metadata-document-03`, updated 2026-11-02; expires 2027-05-06). [6][11][12]"
    },
    {
     "label": "Version",
     "value_md": "`draft-ietf-oauth-client-id-metadata-document-03` (published 2026-11-02; expires 2027-05-06) [6][9]"
    },
    {
     "label": "Schemes",
     "value_md": "MUST use `https` and a non-root path; MAY include a port; MUST NOT include fragment or userinfo. [6]"
    },
    {
     "label": "Message format",
     "value_md": "JSON metadata; `client_id` MUST match the fetched URL; document MUST be 200 OK; MUST NOT follow redirects. [6]"
    },
    {
     "label": "Discovery",
     "value_md": "OPTIONAL boolean `client_id_metadata_document_supported` in authorization-server metadata. [6]"
    },
    {
     "label": "IANA registration",
     "value_md": "Section 12.1 specifies `client_id_metadata_document_supported` (Change Controller IETF). The 2026-08-24 IANA page omits it. [6][13]"
    },
    {
     "label": "Specification",
     "value_md": "[OAuth Client ID Metadata Document](https://www.ietf.org/archive/id/draft-ietf-oauth-client-id-metadata-document-03.txt) (`draft-ietf-oauth-client-id-metadata-document-03`) [6]"
    },
    {
     "label": "Found at",
     "value_md": "Working repository `oauth-wg/draft-ietf-oauth-client-id-metadata-document` (published snapshot `-03`). [9][14]"
    },
    {
     "label": "Licence",
     "value_md": "Copyright (c) 2026 IETF Trust and document authors. Subject to BCP 78. Code uses the Revised BSD License. [6]"
    }
   ],
   "v05_problem_md": "When a client has no relationship with an authorization server, manual registration is impossible. Dynamic Client Registration can establish a client identifier for a previously unknown client, but it is not always practical and creates challenges managing registration data and cleaning up inactive clients. [6] Instead of calling a registration endpoint at each server, the client publishes a self-hosted JSON metadata document at its HTTPS `client_id` URL. Authorization servers supporting this specification that publish RFC 8414 metadata MUST include the `client_id_metadata_document_supported` boolean so a client redirects the user only to a server that supports the specification. [6] Clients without a stable public URL, such as a developer's local machine, are less well served. `client_secret` MUST NOT be used and private key material MUST NOT be included. Servers MUST NOT fetch URLs that resolve to special-use IP addresses. [6]",
   "v05_mechanism_delta_md": "Instead of calling a registration endpoint at each server, the client publishes a self-hosted JSON metadata document at its HTTPS `client_id` URL. Authorization servers supporting this specification that publish RFC 8414 metadata MUST include the `client_id_metadata_document_supported` boolean so a client redirects the user only to a server that supports the specification. [6]",
   "v05_scope_boundary_md": "Clients without a stable public URL, such as a developer's local machine, are less well served. `client_secret` MUST NOT be used and private key material MUST NOT be included. Servers MUST NOT fetch URLs that resolve to special-use IP addresses. [6]",
   "v05_fuzzy_additions": [
    {
     "id": "url-based-client-id-resolution-document-validation-and-security-rules",
     "heading": "URL-based client_id resolution, document validation, and security rules",
     "body_md": "A Client ID Metadata Document reuses the OAuth Dynamic Client Registration metadata registry in a JSON (`RFC8259`) document hosted at the client's own HTTPS URL, allowing a single metadata document to describe the client across any supporting authorization server. [6]",
     "bullets": [
      {
       "label": "Client Identifier URL rules",
       "text_md": "A Client Identifier URL MUST use the `https` scheme and MUST contain a path component other than `/`. It MUST NOT contain single-dot or double-dot path components or a fragment. Clients SHOULD normalize it; servers MUST NOT normalize it and MUST use simple string comparison. [6]"
      },
      {
       "label": "Metadata document contents",
       "text_md": "`client_id` MUST match the URL used to fetch the document by simple string comparison. Properties include `client_name`, `redirect_uris`, `grant_types`, `token_endpoint_auth_methods_supported` (recommended even for `[\"none\"]`), and `token_endpoint_auth_method` (NOT RECOMMENDED; defaults to `none` if neither is present). `client_secret` and shared-secret methods (`client_secret_post`, `client_secret_basic`, `client_secret_jwt`) MUST NOT be used, and authorization responses MUST include `iss`. [6]"
      },
      {
       "label": "Asymmetric client authentication",
       "text_md": "`jwks` and `jwks_uri` MUST NOT both be present. A client that can hold a private key SHOULD use `private_key_jwt` (advertising `token_endpoint_auth_methods_supported`), and the document MUST include `jwks` or `jwks_uri`, with the authorization server requiring RFC 7523 Section 2.2 client authentication. If the server lacks `private_key_jwt`, the method must be `none` and the client is public. [6]"
      },
      {
       "label": "Fetch, SSRF, and cache defenses",
       "text_md": "The authorization server MUST NOT automatically follow HTTP redirects and MUST NOT fetch a URL resolving to a special-use IP address. It SHOULD limit bytes read (recommended maximum 5 kilobytes) and SHOULD respect HTTP cache headers. A timeout is a transient failure. [6]"
      }
     ]
    },
    {
     "id": "mcp-authorization-registration-order-sep-991-transition-and-idp-rollouts",
     "heading": "MCP authorization registration order, SEP-991 transition, and IdP rollouts",
     "body_md": "The `2025-11-25` and `2026-07-28` Model Context Protocol specifications state that authorization servers advertise Client ID Metadata Document support by including `client_id_metadata_document_supported` set to true, and that servers and clients SHOULD support those documents while they MAY support Dynamic Client Registration. SEP-991 adopted the documents as MCP's default registration mechanism when client and server have no prior relationship. In the IETF OAuth Working Group, two companion individual Internet-Drafts extend CIMD deployments: `draft-mcguinness-oauth-cimd-sw-stmt-01` (2 November 2026) defines a software statement in which a trusted party records its review of the exact octets of a client's CIMD for request-time admission without registration, and `draft-gerber-oauth-client-metadata-lookup-00` (21 October 2026) defines an OAuth endpoint returning a public subset of a client's effective server configuration (including applied defaults) chiefly serving CIMD clients. [7][15][16][17][18]",
     "bullets": [
      {
       "label": "Authorization server discovery flag",
       "text_md": "MCP clients MUST support both OAuth 2.0 Authorization Server Metadata and OpenID Connect Discovery 1.0, checking the optional boolean `client_id_metadata_document_supported` in server metadata to determine whether the server retrieves client metadata from a `client_id` URL. [6][15]"
      },
      {
       "label": "Client registration priority",
       "text_md": "Clients supporting every option SHOULD follow this priority order: pre-registered client information, Client ID Metadata Documents when `client_id_metadata_document_supported` indicates support, Dynamic Client Registration when `registration_endpoint` is present, and a prompt for the user to enter client information. SEP-991 is Final, created `2025-07-07`. [7][15]"
      },
      {
       "label": "Localhost redirects and consent UI",
       "text_md": "In the MCP `2025-11-25` authorization specification, Client ID Metadata Documents cannot prevent `localhost` impersonation: servers SHOULD warn on localhost-only redirect URIs, MUST display the redirect URI hostname, and MAY warn on unreviewed clients or show only the Client Identifier URL hostname. The `2026-07-28` specification says MCP clients and authorization servers SHOULD support OAuth Client ID Metadata Documents. [6][15][16]"
      },
      {
       "label": "DCR deprecation and SDK rollouts",
       "text_md": "In the July 28, 2026 MCP specification release, Dynamic Client Registration (DCR) was formally deprecated in favor of Client ID Metadata Documents (retained only for backward compatibility), and the TypeScript, Python, Go, and C# SDKs were updated to support client metadata documents. [19]"
      }
     ]
    }
   ],
   "v05_diagram": {
    "title": "Client information discovery",
    "heading": "Client information discovery",
    "mermaid": "sequenceDiagram\n    participant Client\n    participant AS as Authorization Server\n    opt Authorization server metadata discovery\n        Client->>AS: GET authorization server metadata\n        AS-->>Client: client_id_metadata_document_supported: true\n    end\n    Client->>AS: authorization request, client_id is the Client Identifier URL\n    AS->>Client: fetch Client ID Metadata Document, Accept application/json\n    Note over AS: MUST NOT follow redirects. MUST be 200 OK.\n    Note over AS: client_id MUST match the fetched URL\n    Note over AS: redirect URLs are registered from the fetched document",
    "caption_md": "Clients may first read `client_id_metadata_document_supported` from authorization-server metadata. The authorization request carries the Client Identifier URL as `client_id`. The authorization server retrieves the Client ID Metadata Document, MUST NOT follow redirects, and `client_id` MUST match the Client Identifier URL, registering the redirect URLs. [6]"
   },
   "v05_wire_artifact": {
    "title": "§5.1 non-normative Client ID Metadata Document: private_key_jwt",
    "heading": "§5.1 non-normative Client ID Metadata Document: private_key_jwt",
    "lang": "json",
    "code": "{\n     ...\n     \"token_endpoint_auth_methods_supported\": [\"private_key_jwt\"],\n     \"jwks_uri\": \"https://client.example.com/jwks.json\"\n     ...\n   }",
    "caption_md": "Non-normative fragment: `token_endpoint_auth_methods_supported` is `private_key_jwt` and `jwks_uri` is `https://client.example.com/jwks.json`. [6]"
   },
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "OAuth 2.0 Dynamic Client Registration Protocol",
      "spec_or_rfc": "RFC 7591",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "RFC 7591 POSTs to a registration endpoint and returns a client identifier. CIMD uses the metadata URL as client_id. [3][6][16]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "oauth-metadata-for-agents",
      "target_name": "OAuth Protected Resource and Authorization Server Metadata (as used for agent authorization)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "RFC 9728 and RFC 8414 are server discovery. CIMD is client metadata from a client_id URL, via client_id_metadata_document_supported. [1][2][6]"
     },
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "MCP clients and authorization servers SHOULD support CIMD. Dynamic Client Registration is deprecated for new implementations. [6][16]"
     },
     {
      "target_id": "identity-assertion-authz-grant",
      "target_name": "Identity Assertion JWT Authorization Grant (ID-JAG)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "ID-JAG exchanges an identity assertion for an access token. CIMD is the separate document whose URL is client_id. [4][6]"
     },
     {
      "target_id": "web-bot-auth-signature-agent-card",
      "target_name": "Signature Agent Card (Web Bot Auth registry)",
      "relation_type": "depended_on_by",
      "relation_label": "Depended on by",
      "delta_md": "The Signature Agent Card reuses the CIMD client metadata namespace and adds one web_bot_auth object. [6][20]"
     },
     {
      "target_id": "auth-md",
      "target_name": "auth.md",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "auth.md returns a service-signed identity_assertion. CIMD is the client metadata document, and its URL is client_id. [5][6]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (24 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).",
    "side_a": {
     "visible": true,
     "heading": "Clients & agents publishing Client ID Metadata Documents",
     "col4_header": "Boundary & format",
     "note_md": null,
     "rows": [
      {
       "actor": "Microsoft, Visual Studio Code",
       "role": "OAuth client",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "HTTP 200; `token_endpoint_auth_method` `none`; `application_type` `native`.",
       "source_md": "[VS Code client metadata](https://vscode.dev/oauth/client-metadata.json) [21]"
      },
      {
       "actor": "Cursor",
       "role": "OAuth client",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "HTTP 200; `none` auth; `grant_types` are `authorization_code` and `refresh_token`.",
       "source_md": "[Cursor MCP client metadata](https://cursor.com/oauth/mcp-client.json) [22]"
      },
      {
       "actor": "Anthropic, Claude Code",
       "role": "OAuth client",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "HTTP 200; `client_name` Claude Code; loopback `redirect_uris` only.",
       "source_md": "[Claude Code client metadata](https://claude.ai/oauth/claude-code-client-metadata) [23]"
      },
      {
       "actor": "Anthropic, Claude",
       "role": "OAuth client",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "HTTP 200; `client_name` Claude; grant includes `jwt-bearer`.",
       "source_md": "[Claude MCP connector client metadata](https://claude.ai/oauth/mcp-oauth-client-metadata) [24]"
      },
      {
       "actor": "Block, goose",
       "role": "OAuth client",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "HTTP 200; `client_name` goose; PKCE `S256`.",
       "source_md": "[goose client metadata](https://goose-docs.ai/oauth/client-metadata.json) [25]"
      },
      {
       "actor": "Raycast",
       "role": "OAuth client",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "HTTP 200; `client_name` Raycast; `token_endpoint_auth_method` `none`.",
       "source_md": "[Raycast client metadata](https://www.raycast.com/.well-known/oauth-client-metadata/raycast.json) [26]"
      },
      {
       "actor": "Amp",
       "role": "OAuth client",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Supports CIMD, and falls back to dynamic client registration when CIMD is absent.",
       "source_md": "[Amp MCP docs](https://ampcode.com/docs/customize/mcp) [27]"
      },
      {
       "actor": "Bluesky, AT Protocol",
       "role": "OAuth client profile",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "`client_id` is a public metadata URL; there is no shared `client_secret`.",
       "source_md": "[AT Protocol OAuth](https://atproto.com/specs/oauth) [28] · [Bluesky OAuth proposal](https://raw.githubusercontent.com/bluesky-social/proposals/main/0004-oauth/README.md) [29]"
      },
      {
       "actor": "MCP Python SDK",
       "role": "Client SDK",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Passes `client_metadata_url`; skips `/register` when the flag is true.",
       "source_md": "[MCP Python SDK OAuth clients](https://py.sdk.modelcontextprotocol.io/client/oauth-clients/) [30]"
      },
      {
       "actor": "MCP C# SDK",
       "role": "Client SDK",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "`ClientMetadataDocumentUri` is sent as the client identifier when the flag is true.",
       "source_md": "[MCP C# ClientOAuthOptions](https://csharp.sdk.modelcontextprotocol.io/v2/api/ModelContextProtocol.Authentication.ClientOAuthOptions.html) [31]"
      },
      {
       "actor": "FastMCP",
       "role": "Client SDK",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "The HTTPS metadata URL becomes `client_id`; the server fetches that document.",
       "source_md": "[FastMCP CIMD authentication](https://gofastmcp.com/clients/auth/cimd) [32]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Authorization servers & identity providers",
     "col4_header": "Boundary & format",
     "note_md": null,
     "rows": [
      {
       "actor": "Sentry",
       "role": "Authorization server",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "HTTP 200; `client_id_metadata_document_supported` true; PKCE `S256`.",
       "source_md": "[Sentry authorization server metadata](https://mcp.sentry.dev/.well-known/oauth-authorization-server) [33]"
      },
      {
       "actor": "Apify",
       "role": "Authorization server",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "HTTP 200; CIMD flag true; `issuer` is `https://console-backend.apify.com`.",
       "source_md": "[Apify authorization server metadata](https://mcp.apify.com/.well-known/oauth-authorization-server) [34]"
      },
      {
       "actor": "Zuplo",
       "role": "Authorization server",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-10-30",
       "col4_md": "HTTP 200; flag true; `issuer` `https://auth.zuplo.com/`.",
       "source_md": "[Zuplo authorization server metadata](https://zuplo.com/.well-known/oauth-authorization-server) [35]"
      },
      {
       "actor": "Stytch",
       "role": "Identity provider",
       "status": "Supported",
       "status_display": "Supported · as of 2025-10-17",
       "col4_md": "Announced 2025-10-17; discovers clients without pre-registering credentials.",
       "source_md": "[Stytch supports CIMD](https://stytch.com/blog/stytch-supports-cimd/) [36]"
      },
      {
       "actor": "WorkOS",
       "role": "Identity provider",
       "status": "Supported",
       "status_display": "Supported · as of 2025-11-30",
       "col4_md": "Connect supports CIMD; dashboard flag is off by default (2025-11-30).",
       "source_md": "[WorkOS CIMD changelog](https://workos.com/changelog/client-id-metadata-support-for-mcp-auth) [37] · [WorkOS AuthKit MCP](https://workos.com/docs/authkit/mcp) [38]"
      },
      {
       "actor": "Scalekit",
       "role": "Identity provider",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Enable CIMD so the server fetches MCP-host metadata; keep DCR enabled too.",
       "source_md": "[Scalekit MCP quickstart](https://docs.scalekit.com/authenticate/mcp/quickstart/) [39]"
      },
      {
       "actor": "Better Auth",
       "role": "Identity provider",
       "status": "Supported",
       "status_display": "Supported · as of 2026-07-28",
       "col4_md": "`client_id` is the metadata URL; MCP profile `mcp-2026-07-28`.",
       "source_md": "[Better Auth CIMD plugin](https://better-auth.com/docs/plugins/cimd) [40]"
      },
      {
       "actor": "Auth0",
       "role": "Identity provider",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Manual and dynamic CIMD registration; hosted document stays the source of truth.",
       "source_md": "[Auth0 CIMD registration](https://auth0.com/docs/get-started/auth0-overview/create-applications/cimd-overview) [41]"
      },
      {
       "actor": "Okta",
       "role": "Identity provider",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "API registration of a CIMD client, then that client ID on the token request.",
       "source_md": "[Okta CIMD registration](https://developer.okta.com/docs/guides/ai-agent-cimd-registration/main/) [42]"
      },
      {
       "actor": "Curity",
       "role": "Identity provider",
       "status": "Supported",
       "status_display": "Supported · as of 2026-03-02",
       "col4_md": "Admin UI ephemeral clients; one client ID reused across servers (2026-03-02).",
       "source_md": "[Curity Client ID Metadata Document](https://curity.io/resources/learn/oauth-client-id-metadata-document/) [43]"
      },
      {
       "actor": "Keycloak",
       "role": "Identity provider",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "URL `client_id` needs a profile with the `client-id-metadata-document` executor.",
       "source_md": "[Keycloak MCP authorization server](https://www.keycloak.org/securing-apps/mcp-authz-server) [44]"
      },
      {
       "actor": "PingOne Advanced Identity Cloud",
       "role": "Identity provider",
       "status": "Supported",
       "status_display": "Supported · checked 2026-11-06",
       "col4_md": "Fetches the JSON document at the HTTPS `client_id` and configures the client at runtime, with no prior registration required.",
       "source_md": "[PingOne CIMD](https://docs.pingidentity.com/pingone/applications_overview/p1_client_id_metadata_document.html) [45]"
      },
      {
       "actor": "Vercel MCP",
       "role": "MCP authorization server",
       "status": "Supported",
       "status_display": "Supported · checked 2026-11-06",
       "col4_md": "Accepts a CIMD: a JSON file on the client's own domain, with that file's HTTPS URL used as the OAuth `client_id`.",
       "source_md": "[Vercel MCP CIMD changelog](https://vercel.com/changelog/vercel-mcp-now-supports-client-id-metadata-documents) [46]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [
     {
      "label": "oauth.net Client ID Metadata Document",
      "as_of": null,
      "value_md": "The oauth.net Client ID Metadata Document page lists OAuth servers Auth0, Authlete, Authplane, Descope, FusionAuth, Okta, Ping, Scalekit, Stytch, and WorkOS; MCP clients VSCode, MCPJam, Claude.ai, and ChatGPT; other clients IndieLogin and Webmention.io; and the service BlueSky. Another rendering on the same page marks Auth0 as coming soon and omits FusionAuth and Okta. [47]"
     }
    ],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "personal-agent-protocol",
     "target_name": "Personal Agent Protocol",
     "relation_label": "Depended on by",
     "delta": "A Personal Agent's client_id MUST be an HTTPS URL that returns its Client ID Metadata Document, and company discovery stays at /.well-known/poppy.json.",
     "item_md": "**[Personal Agent Protocol](/protocols/personal-agent-protocol/)** (Depended on by) — A Personal Agent's client_id MUST be an HTTPS URL that returns its Client ID Metadata Document, and company discovery stays at /.well-known/poppy.json."
    },
    {
     "target_id": "lws10-authn-ssi-cid",
     "target_name": "LWS 1.0 Authentication Suite: Self-signed Identity using Controlled Identifiers",
     "relation_label": "Peer alternative",
     "delta": "CIMD fetches client metadata from the client_id URL, while this suite fetches a controlled identifier document from the JWT sub and selects the key by kid.",
     "item_md": "**[LWS 1.0 Authentication Suite: Self-signed Identity using Controlled Identifiers](/protocols/lws10-authn-ssi-cid/)** (Peer alternative) — CIMD fetches client metadata from the client_id URL, while this suite fetches a controlled identifier document from the JWT sub and selects the key by kid."
    },
    {
     "item_md": "**[Permit protocols](/category/permit/)** — Category index for `permit` standards."
    }
   ],
   "v05_compiled_md": "---\nid: oauth-cimd\ntitle: \"OAuth Client ID Metadata Document\"\ntier: flagship\nlifecycle_status: active_draft\ncategory: permit\nform: document-format\nwire_archetype: identity_auth_crypto\nspec_url: https://www.ietf.org/archive/id/draft-ietf-oauth-client-id-metadata-document-03.txt\nlast_checked: 2026-11-11\n---\n\n# OAuth Client ID Metadata Document\n\n**Category:** [Permit](/category/permit/) (`permit`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-11-11\n\n> *Not to be confused with [OAuth Protected Resource and Authorization Server Metadata](/protocols/oauth-metadata-for-agents/) (RFC 9728 `/.well-known/oauth-protected-resource` and RFC 8414 `/.well-known/oauth-authorization-server` server discovery documents), with the OAuth 2.0 Dynamic Client Registration Protocol (RFC 7591, whose client registration endpoint accepts an HTTP POST and whose authorization server returns a client identifier), with [Identity Assertion JWT Authorization Grant (ID-JAG)](/protocols/identity-assertion-authz-grant/) (an application uses an identity assertion to obtain an access token for a third-party API), or with [auth.md](/protocols/auth-md/) (a reference implementation of agentic registration that returns a service-signed identity_assertion). [1][2][3][4][5]*\n\n> **In brief:** OAuth Client ID Metadata Document is an IETF OAuth specification—adopted by MCP for URL-based client registration—that lets AI agents and desktop applications authenticate against unfamiliar authorization servers without pre-shared credentials. Rather than requiring manual developer-portal setup or stateful Dynamic Client Registration on every server, the client uses an HTTPS URL for its `client_id` so the authorization server can fetch a self-hosted JSON metadata document on demand. [6][7]\n\n**OAuth Client ID Metadata Document** (`draft-ietf-oauth-client-id-metadata-document-03`) is a Standards Track IETF OAuth Working Group specification originated by Aaron Parecki and Emelia Smith that lets an OAuth 2.0 client identify itself to authorization servers without prior dynamic or manual registration by using an HTTPS URL as its `client_id`. [6] The `client_id` URL refers to a JSON Client ID Metadata Document, which the authorization server fetches on demand during an authorization flow. It MUST be served with HTTP `200 OK`, the authorization server MUST NOT automatically follow HTTP redirects, and the document's `client_id` property MUST match the URL used to fetch it. [6] Adopted by the IETF OAuth Working Group on October 8, 2025, `draft-ietf-oauth-client-id-metadata-document-03` was published on 2 November 2026 (expiring 6 May 2027) and serves as the default client registration mechanism in the Model Context Protocol (`SEP-991`). [6][7][8]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Permit](/category/permit/) (`permit`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | Aaron Parecki (Okta) and Emelia Smith. `draft-parecki-oauth-client-id-metadata-document-00` is dated 2 July 2024. [9][10][11] |\n| **Governed by** | IETF oauth WG Document. Aaron Parecki recorded adoption on October 8, 2025. [8][11] |\n| **Track** | IETF Standards Track (`draft-ietf-oauth-client-id-metadata-document-03`, `category: std`) [6][9][11] |\n| **IETF tracker** | `draft-ietf-oauth-client-id-metadata-document-03` (published 2026-11-02; expires 2027-05-06) [6] |\n| **Status** | Active oauth WG Internet-Draft (`draft-ietf-oauth-client-id-metadata-document-03`, updated 2026-11-02; expires 2027-05-06). [6][11][12] |\n| **Version** | `draft-ietf-oauth-client-id-metadata-document-03` (published 2026-11-02; expires 2027-05-06) [6][9] |\n| **Schemes** | MUST use `https` and a non-root path; MAY include a port; MUST NOT include fragment or userinfo. [6] |\n| **Message format** | JSON metadata; `client_id` MUST match the fetched URL; document MUST be 200 OK; MUST NOT follow redirects. [6] |\n| **Discovery** | OPTIONAL boolean `client_id_metadata_document_supported` in authorization-server metadata. [6] |\n| **IANA registration** | Section 12.1 specifies `client_id_metadata_document_supported` (Change Controller IETF). The 2026-08-24 IANA page omits it. [6][13] |\n| **Specification** | [OAuth Client ID Metadata Document](https://www.ietf.org/archive/id/draft-ietf-oauth-client-id-metadata-document-03.txt) (`draft-ietf-oauth-client-id-metadata-document-03`) [6] |\n| **Found at** | Working repository `oauth-wg/draft-ietf-oauth-client-id-metadata-document` (published snapshot `-03`). [9][14] |\n| **Licence** | Copyright (c) 2026 IETF Trust and document authors. Subject to BCP 78. Code uses the Revised BSD License. [6] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [URL-based client_id resolution, document validation, and security rules](#url-based-client-id-resolution-document-validation-and-security-rules)\n3. [MCP authorization registration order, SEP-991 transition, and IdP rollouts](#mcp-authorization-registration-order-sep-991-transition-and-idp-rollouts)\n4. [Counterparts and related standards](#counterparts-and-related-standards)\n5. [Adoption and ecosystem](#adoption-and-ecosystem)\n6. [See also](#see-also)\n7. [References](#references)\n\n---\n\n## Problem and scope\n\nWhen a client has no relationship with an authorization server, manual registration is impossible. Dynamic Client Registration can establish a client identifier for a previously unknown client, but it is not always practical and creates challenges managing registration data and cleaning up inactive clients. [6] Instead of calling a registration endpoint at each server, the client publishes a self-hosted JSON metadata document at its HTTPS `client_id` URL. Authorization servers supporting this specification that publish RFC 8414 metadata MUST include the `client_id_metadata_document_supported` boolean so a client redirects the user only to a server that supports the specification. [6] Clients without a stable public URL, such as a developer's local machine, are less well served. `client_secret` MUST NOT be used and private key material MUST NOT be included. Servers MUST NOT fetch URLs that resolve to special-use IP addresses. [6]\n\n### Client information discovery\n\n```mermaid\nsequenceDiagram\n    participant Client\n    participant AS as Authorization Server\n    opt Authorization server metadata discovery\n        Client->>AS: GET authorization server metadata\n        AS-->>Client: client_id_metadata_document_supported: true\n    end\n    Client->>AS: authorization request, client_id is the Client Identifier URL\n    AS->>Client: fetch Client ID Metadata Document, Accept application/json\n    Note over AS: MUST NOT follow redirects. MUST be 200 OK.\n    Note over AS: client_id MUST match the fetched URL\n    Note over AS: redirect URLs are registered from the fetched document\n```\n\n*Clients may first read `client_id_metadata_document_supported` from authorization-server metadata. The authorization request carries the Client Identifier URL as `client_id`. The authorization server retrieves the Client ID Metadata Document, MUST NOT follow redirects, and `client_id` MUST match the Client Identifier URL, registering the redirect URLs. [6]*\n\n### §5.1 non-normative Client ID Metadata Document: private_key_jwt\n\n```json\n{\n     ...\n     \"token_endpoint_auth_methods_supported\": [\"private_key_jwt\"],\n     \"jwks_uri\": \"https://client.example.com/jwks.json\"\n     ...\n   }\n```\n\n*Non-normative fragment: `token_endpoint_auth_methods_supported` is `private_key_jwt` and `jwks_uri` is `https://client.example.com/jwks.json`. [6]*\n\n---\n\n## URL-based client_id resolution, document validation, and security rules\n\nA Client ID Metadata Document reuses the OAuth Dynamic Client Registration metadata registry in a JSON (`RFC8259`) document hosted at the client's own HTTPS URL, allowing a single metadata document to describe the client across any supporting authorization server. [6]\n\n- **Client Identifier URL rules:** A Client Identifier URL MUST use the `https` scheme and MUST contain a path component other than `/`. It MUST NOT contain single-dot or double-dot path components or a fragment. Clients SHOULD normalize it; servers MUST NOT normalize it and MUST use simple string comparison. [6]\n- **Metadata document contents:** `client_id` MUST match the URL used to fetch the document by simple string comparison. Properties include `client_name`, `redirect_uris`, `grant_types`, `token_endpoint_auth_methods_supported` (recommended even for `[\"none\"]`), and `token_endpoint_auth_method` (NOT RECOMMENDED; defaults to `none` if neither is present). `client_secret` and shared-secret methods (`client_secret_post`, `client_secret_basic`, `client_secret_jwt`) MUST NOT be used, and authorization responses MUST include `iss`. [6]\n- **Asymmetric client authentication:** `jwks` and `jwks_uri` MUST NOT both be present. A client that can hold a private key SHOULD use `private_key_jwt` (advertising `token_endpoint_auth_methods_supported`), and the document MUST include `jwks` or `jwks_uri`, with the authorization server requiring RFC 7523 Section 2.2 client authentication. If the server lacks `private_key_jwt`, the method must be `none` and the client is public. [6]\n- **Fetch, SSRF, and cache defenses:** The authorization server MUST NOT automatically follow HTTP redirects and MUST NOT fetch a URL resolving to a special-use IP address. It SHOULD limit bytes read (recommended maximum 5 kilobytes) and SHOULD respect HTTP cache headers. A timeout is a transient failure. [6]\n\n---\n\n## MCP authorization registration order, SEP-991 transition, and IdP rollouts\n\nThe `2025-11-25` and `2026-07-28` Model Context Protocol specifications state that authorization servers advertise Client ID Metadata Document support by including `client_id_metadata_document_supported` set to true, and that servers and clients SHOULD support those documents while they MAY support Dynamic Client Registration. SEP-991 adopted the documents as MCP's default registration mechanism when client and server have no prior relationship. In the IETF OAuth Working Group, two companion individual Internet-Drafts extend CIMD deployments: `draft-mcguinness-oauth-cimd-sw-stmt-01` (2 November 2026) defines a software statement in which a trusted party records its review of the exact octets of a client's CIMD for request-time admission without registration, and `draft-gerber-oauth-client-metadata-lookup-00` (21 October 2026) defines an OAuth endpoint returning a public subset of a client's effective server configuration (including applied defaults) chiefly serving CIMD clients. [7][15][16][17][18]\n\n- **Authorization server discovery flag:** MCP clients MUST support both OAuth 2.0 Authorization Server Metadata and OpenID Connect Discovery 1.0, checking the optional boolean `client_id_metadata_document_supported` in server metadata to determine whether the server retrieves client metadata from a `client_id` URL. [6][15]\n- **Client registration priority:** Clients supporting every option SHOULD follow this priority order: pre-registered client information, Client ID Metadata Documents when `client_id_metadata_document_supported` indicates support, Dynamic Client Registration when `registration_endpoint` is present, and a prompt for the user to enter client information. SEP-991 is Final, created `2025-07-07`. [7][15]\n- **Localhost redirects and consent UI:** In the MCP `2025-11-25` authorization specification, Client ID Metadata Documents cannot prevent `localhost` impersonation: servers SHOULD warn on localhost-only redirect URIs, MUST display the redirect URI hostname, and MAY warn on unreviewed clients or show only the Client Identifier URL hostname. The `2026-07-28` specification says MCP clients and authorization servers SHOULD support OAuth Client ID Metadata Documents. [6][15][16]\n- **DCR deprecation and SDK rollouts:** In the July 28, 2026 MCP specification release, Dynamic Client Registration (DCR) was formally deprecated in favor of Client ID Metadata Documents (retained only for backward compatibility), and the TypeScript, Python, Go, and C# SDKs were updated to support client metadata documents. [19]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **OAuth 2.0 Dynamic Client Registration Protocol** | `RFC 7591` | Analogous to classic standard | RFC 7591 POSTs to a registration endpoint and returns a client identifier. CIMD uses the metadata URL as client_id. [3][6][16] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[OAuth Protected Resource and Authorization Server Metadata (as used for agent authorization)](/protocols/oauth-metadata-for-agents/)** | Complements | RFC 9728 and RFC 8414 are server discovery. CIMD is client metadata from a client_id URL, via client_id_metadata_document_supported. [1][2][6] |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | MCP clients and authorization servers SHOULD support CIMD. Dynamic Client Registration is deprecated for new implementations. [6][16] |\n| **[Identity Assertion JWT Authorization Grant (ID-JAG)](/protocols/identity-assertion-authz-grant/)** | Complements | ID-JAG exchanges an identity assertion for an access token. CIMD is the separate document whose URL is client_id. [4][6] |\n| **[Signature Agent Card (Web Bot Auth registry)](/protocols/web-bot-auth-signature-agent-card/)** | Depended on by | The Signature Agent Card reuses the CIMD client metadata namespace and adds one web_bot_auth object. [6][20] |\n| **[auth.md](/protocols/auth-md/)** | Peer alternative | auth.md returns a service-signed identity_assertion. CIMD is the client metadata document, and its URL is client_id. [5][6] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (24 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).*\n\n### Clients & agents publishing Client ID Metadata Documents\n\n| Actor | Role | Status | Boundary & format | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Microsoft, Visual Studio Code** | OAuth client | Live (HTTP 200) · checked 2026-10-30 | HTTP 200; `token_endpoint_auth_method` `none`; `application_type` `native`. | [VS Code client metadata](https://vscode.dev/oauth/client-metadata.json) [21] |\n| **Cursor** | OAuth client | Live (HTTP 200) · checked 2026-10-30 | HTTP 200; `none` auth; `grant_types` are `authorization_code` and `refresh_token`. | [Cursor MCP client metadata](https://cursor.com/oauth/mcp-client.json) [22] |\n| **Anthropic, Claude Code** | OAuth client | Live (HTTP 200) · checked 2026-10-30 | HTTP 200; `client_name` Claude Code; loopback `redirect_uris` only. | [Claude Code client metadata](https://claude.ai/oauth/claude-code-client-metadata) [23] |\n| **Anthropic, Claude** | OAuth client | Live (HTTP 200) · checked 2026-10-30 | HTTP 200; `client_name` Claude; grant includes `jwt-bearer`. | [Claude MCP connector client metadata](https://claude.ai/oauth/mcp-oauth-client-metadata) [24] |\n| **Block, goose** | OAuth client | Live (HTTP 200) · checked 2026-10-30 | HTTP 200; `client_name` goose; PKCE `S256`. | [goose client metadata](https://goose-docs.ai/oauth/client-metadata.json) [25] |\n| **Raycast** | OAuth client | Live (HTTP 200) · checked 2026-10-30 | HTTP 200; `client_name` Raycast; `token_endpoint_auth_method` `none`. | [Raycast client metadata](https://www.raycast.com/.well-known/oauth-client-metadata/raycast.json) [26] |\n| **Amp** | OAuth client | Supported · checked 2026-10-30 | Supports CIMD, and falls back to dynamic client registration when CIMD is absent. | [Amp MCP docs](https://ampcode.com/docs/customize/mcp) [27] |\n| **Bluesky, AT Protocol** | OAuth client profile | Supported · checked 2026-10-30 | `client_id` is a public metadata URL; there is no shared `client_secret`. | [AT Protocol OAuth](https://atproto.com/specs/oauth) [28] · [Bluesky OAuth proposal](https://raw.githubusercontent.com/bluesky-social/proposals/main/0004-oauth/README.md) [29] |\n| **MCP Python SDK** | Client SDK | Supported · checked 2026-10-30 | Passes `client_metadata_url`; skips `/register` when the flag is true. | [MCP Python SDK OAuth clients](https://py.sdk.modelcontextprotocol.io/client/oauth-clients/) [30] |\n| **MCP C# SDK** | Client SDK | Supported · checked 2026-10-30 | `ClientMetadataDocumentUri` is sent as the client identifier when the flag is true. | [MCP C# ClientOAuthOptions](https://csharp.sdk.modelcontextprotocol.io/v2/api/ModelContextProtocol.Authentication.ClientOAuthOptions.html) [31] |\n| **FastMCP** | Client SDK | Supported · checked 2026-10-30 | The HTTPS metadata URL becomes `client_id`; the server fetches that document. | [FastMCP CIMD authentication](https://gofastmcp.com/clients/auth/cimd) [32] |\n\n### Authorization servers & identity providers\n\n| Actor | Role | Status | Boundary & format | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Sentry** | Authorization server | Live (HTTP 200) · checked 2026-10-30 | HTTP 200; `client_id_metadata_document_supported` true; PKCE `S256`. | [Sentry authorization server metadata](https://mcp.sentry.dev/.well-known/oauth-authorization-server) [33] |\n| **Apify** | Authorization server | Live (HTTP 200) · checked 2026-10-30 | HTTP 200; CIMD flag true; `issuer` is `https://console-backend.apify.com`. | [Apify authorization server metadata](https://mcp.apify.com/.well-known/oauth-authorization-server) [34] |\n| **Zuplo** | Authorization server | Live (HTTP 200) · checked 2026-10-30 | HTTP 200; flag true; `issuer` `https://auth.zuplo.com/`. | [Zuplo authorization server metadata](https://zuplo.com/.well-known/oauth-authorization-server) [35] |\n| **Stytch** | Identity provider | Supported · as of 2025-10-17 | Announced 2025-10-17; discovers clients without pre-registering credentials. | [Stytch supports CIMD](https://stytch.com/blog/stytch-supports-cimd/) [36] |\n| **WorkOS** | Identity provider | Supported · as of 2025-11-30 | Connect supports CIMD; dashboard flag is off by default (2025-11-30). | [WorkOS CIMD changelog](https://workos.com/changelog/client-id-metadata-support-for-mcp-auth) [37] · [WorkOS AuthKit MCP](https://workos.com/docs/authkit/mcp) [38] |\n| **Scalekit** | Identity provider | Supported · checked 2026-10-30 | Enable CIMD so the server fetches MCP-host metadata; keep DCR enabled too. | [Scalekit MCP quickstart](https://docs.scalekit.com/authenticate/mcp/quickstart/) [39] |\n| **Better Auth** | Identity provider | Supported · as of 2026-07-28 | `client_id` is the metadata URL; MCP profile `mcp-2026-07-28`. | [Better Auth CIMD plugin](https://better-auth.com/docs/plugins/cimd) [40] |\n| **Auth0** | Identity provider | Supported · checked 2026-10-30 | Manual and dynamic CIMD registration; hosted document stays the source of truth. | [Auth0 CIMD registration](https://auth0.com/docs/get-started/auth0-overview/create-applications/cimd-overview) [41] |\n| **Okta** | Identity provider | Supported · checked 2026-10-30 | API registration of a CIMD client, then that client ID on the token request. | [Okta CIMD registration](https://developer.okta.com/docs/guides/ai-agent-cimd-registration/main/) [42] |\n| **Curity** | Identity provider | Supported · as of 2026-03-02 | Admin UI ephemeral clients; one client ID reused across servers (2026-03-02). | [Curity Client ID Metadata Document](https://curity.io/resources/learn/oauth-client-id-metadata-document/) [43] |\n| **Keycloak** | Identity provider | Supported · checked 2026-10-30 | URL `client_id` needs a profile with the `client-id-metadata-document` executor. | [Keycloak MCP authorization server](https://www.keycloak.org/securing-apps/mcp-authz-server) [44] |\n| **PingOne Advanced Identity Cloud** | Identity provider | Supported · checked 2026-11-06 | Fetches the JSON document at the HTTPS `client_id` and configures the client at runtime, with no prior registration required. | [PingOne CIMD](https://docs.pingidentity.com/pingone/applications_overview/p1_client_id_metadata_document.html) [45] |\n| **Vercel MCP** | MCP authorization server | Supported · checked 2026-11-06 | Accepts a CIMD: a JSON file on the client's own domain, with that file's HTTPS URL used as the OAuth `client_id`. | [Vercel MCP CIMD changelog](https://vercel.com/changelog/vercel-mcp-now-supports-client-id-metadata-documents) [46] |\n\n### Ecosystem censuses\n\n- **oauth.net Client ID Metadata Document**: The oauth.net Client ID Metadata Document page lists OAuth servers Auth0, Authlete, Authplane, Descope, FusionAuth, Okta, Ping, Scalekit, Stytch, and WorkOS; MCP clients VSCode, MCPJam, Claude.ai, and ChatGPT; other clients IndieLogin and Webmention.io; and the service BlueSky. Another rendering on the same page marks Auth0 as coming soon and omits FusionAuth and Okta. [47]\n\n---\n\n## See also\n\n- **[Personal Agent Protocol](/protocols/personal-agent-protocol/)** *(Depended on by)* — A Personal Agent's client_id MUST be an HTTPS URL that returns its Client ID Metadata Document, and company discovery stays at /.well-known/poppy.json.\n- **[LWS 1.0 Authentication Suite: Self-signed Identity using Controlled Identifiers](/protocols/lws10-authn-ssi-cid/)** *(Peer alternative)* — CIMD fetches client metadata from the client_id URL, while this suite fetches a controlled identifier document from the JWT sub and selects the key by kid.\n- **Category:** [Permit protocols](/category/permit/)\n\n---\n\n## References\n\n1. Michael B. Jones, Phil Hunt, and Aaron Parecki, *RFC 9728: OAuth 2.0 Protected Resource Metadata* (April 2025) — <https://www.rfc-editor.org/rfc/rfc9728.html>\n2. Michael B. Jones, Nat Sakimura, and John Bradley, *RFC 8414: OAuth 2.0 Authorization Server Metadata* (June 2018) — <https://www.rfc-editor.org/rfc/rfc8414.html>\n3. Justin Richer (ed.), Michael B. Jones, John Bradley, Maciej Machulak, and Phil Hunt, *RFC 7591: OAuth 2.0 Dynamic Client Registration Protocol* (July 2015) — <https://www.rfc-editor.org/rfc/rfc7591.html>\n4. A. Parecki (Okta), K. McGuinness (Independent), and B. Campbell (Ping Identity), *Identity Assertion JWT Authorization Grant (draft-ietf-oauth-identity-assertion-authz-grant-06)* (draft-06, 31 October 2026; expires 4 May 2027) — <https://www.ietf.org/archive/id/draft-ietf-oauth-identity-assertion-authz-grant-06.txt>\n5. WorkOS, *auth.md* (README) — <https://raw.githubusercontent.com/workos/auth.md/main/README.md>\n6. Aaron Parecki (Okta) and Emelia Smith, *OAuth Client ID Metadata Document (draft-ietf-oauth-client-id-metadata-document-03)* (2 November 2026; expires 6 May 2027) — <https://www.ietf.org/archive/id/draft-ietf-oauth-client-id-metadata-document-03.txt>\n7. Paul Carleton and Aaron Parecki, *SEP-991: Enable URL-based Client Registration using OAuth Client ID Metadata Documents* (created 2025-07-07; status Final) — <https://github.com/modelcontextprotocol/modelcontextprotocol/blob/02dd8f61/docs/seps/991-enable-url-based-client-registration-using-oauth-c.mdx>\n8. Aaron Parecki, *Client ID Metadata Document Adopted by the OAuth Working Group* (October 8, 2025) — <https://aaronparecki.com/2025/10/08/4/cimd>\n9. Aaron Parecki (Okta) and Emelia Smith (IETF Web Authorization Protocol Working Group), *OAuth Client ID Metadata Document (working-group markdown; docname -latest, date empty)* (undated main branch (docname draft-ietf-oauth-client-id-metadata-document-latest)) — <https://raw.githubusercontent.com/oauth-wg/draft-ietf-oauth-client-id-metadata-document/main/draft-ietf-oauth-client-id-metadata-document.md>\n10. Aaron Parecki (Okta) and Emelia Smith, *OAuth Client ID Metadata Document (draft-parecki-oauth-client-id-metadata-document-00)* (2 July 2024; expires 3 January 2025) — <https://www.ietf.org/archive/id/draft-parecki-oauth-client-id-metadata-document-00.txt>\n11. Aaron Parecki and Emelia Smith (IETF Web Authorization Protocol Working Group), *draft-ietf-oauth-client-id-metadata-document — OAuth Client ID Metadata Document (IETF Datatracker)* (revision -03; last updated 2026-11-02 (expires 2027-05-06)) — <https://datatracker.ietf.org/doc/draft-ietf-oauth-client-id-metadata-document/>\n12. IETF, *IETF Datatracker document JSON metadata for draft-ietf-oauth-client-id-metadata-document* (checked 2026-11-08) — <https://datatracker.ietf.org/doc/draft-ietf-oauth-client-id-metadata-document/doc.json>\n13. IANA, *OAuth Parameters* (last updated 2026-08-24) — <https://www.iana.org/assignments/oauth-parameters>\n14. IETF OAuth Working Group, *OAuth Client ID Metadata Document (working repository)* (repository readme) — <https://github.com/oauth-wg/draft-ietf-oauth-client-id-metadata-document>\n15. Model Context Protocol, *Authorization* (specification 2025-11-25) — <https://modelcontextprotocol.io/specification/2025-11-25/basic/authorization>\n16. Model Context Protocol, *Client Registration* (specification 2026-07-28) — <https://modelcontextprotocol.io/specification/2026-07-28/basic/authorization/client-registration>\n17. K. McGuinness (Independent), *Client ID Metadata Document Software Statement (draft-mcguinness-oauth-cimd-sw-stmt-01)* (2 November 2026; expires 6 May 2027) — <https://www.ietf.org/archive/id/draft-mcguinness-oauth-cimd-sw-stmt-01.txt>\n18. M. Gerber (Twilio), *OAuth Client Metadata Lookup (draft-gerber-oauth-client-metadata-lookup-00)* (21 October 2026; expires 24 April 2027) — <https://www.ietf.org/archive/id/draft-gerber-oauth-client-metadata-lookup-00.txt>\n19. David Soria Parra and Den Delimarsky, *The 2026-07-28 Specification* (July 28, 2026) — <https://blog.modelcontextprotocol.io/posts/2026-07-28/>\n20. Maxime Guerreiro (Cloudflare), Ulas Kirazci (Amazon), and Thibault Meunier (Cloudflare), *Registry and Signature Agent card for Web bot auth (draft-meunier-webbotauth-registry-04)* (27 October 2026; expires 30 April 2027) — <https://www.ietf.org/archive/id/draft-meunier-webbotauth-registry-04.txt>\n21. Microsoft Visual Studio Code, *OAuth Client ID Metadata Document (vscode.dev)* (HTTP Date Fri, 30 Oct 2026) — <https://vscode.dev/oauth/client-metadata.json>\n22. Cursor, *OAuth Client ID Metadata Document (cursor.com MCP client)* (HTTP Date Fri, 30 Oct 2026) — <https://cursor.com/oauth/mcp-client.json>\n23. Anthropic, *Claude Code OAuth Client ID Metadata Document* (HTTP Date Fri, 30 Oct 2026) — <https://claude.ai/oauth/claude-code-client-metadata>\n24. Anthropic, *Claude OAuth Client ID Metadata Document* (HTTP Date Fri, 30 Oct 2026) — <https://claude.ai/oauth/mcp-oauth-client-metadata>\n25. Block goose, *goose OAuth Client ID Metadata Document* (HTTP Date Fri, 30 Oct 2026) — <https://goose-docs.ai/oauth/client-metadata.json>\n26. Raycast, *Raycast OAuth Client ID Metadata Document* (HTTP Date Fri, 30 Oct 2026) — <https://www.raycast.com/.well-known/oauth-client-metadata/raycast.json>\n27. Amp, *MCP* (Amp docs) — <https://ampcode.com/docs/customize/mcp>\n28. AT Protocol, *OAuth* (AT Protocol OAuth specification) — <https://atproto.com/specs/oauth>\n29. Bluesky Social, *0004-oauth proposal README* (bluesky-social/proposals) — <https://raw.githubusercontent.com/bluesky-social/proposals/main/0004-oauth/README.md>\n30. Model Context Protocol (Python SDK), *OAuth clients* (Python SDK documentation) — <https://py.sdk.modelcontextprotocol.io/client/oauth-clients/>\n31. Model Context Protocol (C# SDK), *Class ClientOAuthOptions* (MCP C# SDK v2) — <https://csharp.sdk.modelcontextprotocol.io/v2/api/ModelContextProtocol.Authentication.ClientOAuthOptions.html>\n32. FastMCP, *CIMD Authentication* (FastMCP client auth docs) — <https://gofastmcp.com/clients/auth/cimd>\n33. Sentry, *Sentry OAuth authorization server metadata* (HTTP Date Fri, 30 Oct 2026) — <https://mcp.sentry.dev/.well-known/oauth-authorization-server>\n34. Apify, *Apify MCP OAuth authorization server metadata* (checked 2026-10-29) — <https://mcp.apify.com/.well-known/oauth-authorization-server>\n35. Zuplo, *Zuplo OAuth authorization server metadata* (checked 2026-10-29) — <https://zuplo.com/.well-known/oauth-authorization-server>\n36. Stytch, *Stytch supports CIMD for OAuth* (Oct 17, 2025) — <https://stytch.com/blog/stytch-supports-cimd/>\n37. WorkOS, *Client ID Metadata Support for MCP Auth* (November 30, 2025) — <https://workos.com/changelog/client-id-metadata-support-for-mcp-auth>\n38. WorkOS, *Model Context Protocol – AuthKit* (AuthKit MCP docs) — <https://workos.com/docs/authkit/mcp>\n39. Scalekit, *Add OAuth 2.1 authorization to MCP servers* (Scalekit Docs) — <https://docs.scalekit.com/authenticate/mcp/quickstart/>\n40. Better Auth, *Client ID Metadata Document (CIMD)* (Better Auth docs) — <https://better-auth.com/docs/plugins/cimd>\n41. Auth0, *Client ID Metadata Document (CIMD) Registration* (Auth0 Docs) — <https://auth0.com/docs/get-started/auth0-overview/create-applications/cimd-overview>\n42. Okta, *Register AI agents with a Client ID Metadata Document (CIMD)* (Okta Developer) — <https://developer.okta.com/docs/guides/ai-agent-cimd-registration/main/>\n43. Curity, *OAuth Registration with Client ID Metadata Document* (Curity Identity Server) — <https://curity.io/resources/learn/oauth-client-id-metadata-document/>\n44. Keycloak, *Integrating with Model Context Protocol (MCP)* (Keycloak securing apps) — <https://www.keycloak.org/securing-apps/mcp-authz-server>\n45. Ping Identity, *Client ID metadata document (CIMD) | PingOne Advanced Identity Cloud* (undated product doc) — <https://docs.pingidentity.com/pingone/applications_overview/p1_client_id_metadata_document.html>\n46. Josh Souphanthong and Mark Roberts (Vercel), *Vercel MCP now supports Client ID Metadata Documents* (published 2 Nov 2026) — <https://vercel.com/changelog/vercel-mcp-now-supports-client-id-metadata-documents>\n47. OAuth Community Site, *OAuth Client ID Metadata Document* (undated implementation roster) — <https://oauth.net/2/client-id-metadata-document/>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "iab-comp",
   "name": "CoMP (Content Monetization Protocols)",
   "acronym": "CoMP",
   "aliases": [
    "CoMP",
    "Content Metadata Marketplace Supply Specification"
   ],
   "collisions": [],
   "step": "permit",
   "parties": [
    "agent-site",
    "agent-registry"
   ],
   "form": "endpoint",
   "track": "industry-body",
   "scope": "general",
   "question": "How does a licensed AI system ask a publisher or content marketplace for content, saying who it is, how it authenticates and what it will use the content for?",
   "analog": "A syndication licence request, made machine-readable",
   "origin": {
    "org": "IAB Tech Lab",
    "date": "2026-02"
   },
   "governance": "IAB Tech Lab; specification under CC-BY 3.0 in github.com/IABTechLab/CoMP",
   "native_status": "CoMP v1 (Final): open for public comment until 2026-04-09 and finalized 2026-04-28, per IAB Tech Lab's initiative page",
   "phase": "stable",
   "implementation": "none-found",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "version": {
    "label": "CoMP v1 (Final)",
    "date": "2026-04-28"
   },
   "spec_url": "https://github.com/IABTechLab/CoMP/blob/main/CoMP-1.0.md",
   "discovery": {
    "mechanism": "none defined; supply discovery is explicitly out of scope, and terms are reached through a licenseurl in the response",
    "path": null
   },
   "probe": {
    "method": "GET",
    "path": "none — the spec defines request and response objects, not a fixed endpoint path",
    "parse": "No fixed path to parse.",
    "on_absent": "Not probeable from an origin."
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://iabtechlab.com/standards/comp-content-monetization-protocols-initiative/",
     "claim": "IAB Technology Laboratory, Inc., *CoMP (Content Monetization Protocols) Initiative Specification*, published 2026-02-02; modified 2026-08-06; page last updated 2026-04-28",
     "date": null,
     "quote": "CoMP (Content Monetization Protocols) Initiative / V1 of CoMP was open for Public Comment until April 9, 2026 and was finalized on April 28, 2026. … Access CoMP v1 (Final) / \"name\":\"CoMP (Content Monetization Protocols) Initiative Specification\" … \"datePublished\":\"2026-02-02T19:18:36+00:00\" / Copyright 2026 IAB Technology Laboratory, Inc. / The CoMP Working Group is developing open technical standards / V1 of CoMP was open for Public Comment until April 9, 2026 and was finalized on April 28, 2026. / Access CoMP v1 (Final) / was finalized on April 28, 2026 / Content is increasingly reused or summarized without clear permission, reporting, or attribution - creating both business and operational risk because there is: No standardized way to communicate usage rights or terms to LLMs",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://raw.githubusercontent.com/IABTechLab/CoMP/main/CoMP-1.0.md",
     "claim": "IAB Tech Lab, *Content Metadata Marketplace Supply Specification (MVP)*, fetched 2026-10-31",
     "date": null,
     "quote": "# Content Metadata Marketplace Supply Specification (MVP) / Define the object model and transport format for describing content assets offered by Inventory Owners and/or Content Marketplace to an AI System. / name | string, required | Canonical domain of the AI System requesting access to the content / aiauth | int, required | Information about how the AI system plans to authenticate itself / If the AI System has not been issued a token, it should review terms listed in `package.licenseurl`. / The response specifies that no authorization is currently granted (auth 0), but points the requester to a licenseurl to negotiate terms a priori to accessing the full corpus. / Request: json { \"aisystem\": / json { \"package\": / Supply Discovery - It is assumed that AI Systems have an understanding of the content they'd like to license. Where discovery is required, AI Systems should work directly with Marketplaces and Content Owners. / This API will standardize a language that allows inventory owners to communicate metadata about the content on offer, where the terms to use that content are, and how to access the content. It also allows AI Systems to tell Content owners and/or Marketplaces the action they would like to perform using the content package / Commercial terms between Content Owners, Marketplaces, and AI Systems must be negotiated a priori to this API … token issuance, counting, and payment are out of scope. … Supply Discovery - It is assumed that AI Systems have an understanding of the content they'd like to license. … it does not explicitly support reporting / Supply Discovery - It is assumed that AI Systems have an understanding of the content they'd like to license. / | licenseurl | string | URL for AI system to find the License(s) required to access content. / | reporturl | string | URL for AI system to send usage reporting to the Content Owner or Marketplace. / | 3 | WebBot Auth | / | 3 | MCP | | 4 | NLWeb |",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://rslstandard.org/rsl",
     "claim": "G. Boyer (RSL Collective); C. Chen (Condé Nast); J. Fortuna (Ziff Davis); RV Guha (Schema.org); S. Koenig (Yahoo); J. Le Page (Automattic); A. Odewahn (O'Reilly Media); E. Walther (RSL Collective); S. Wistow (Fastly), *Really Simple Licensing (RSL) 1.0 Specification*, published 2025-12-10",
     "date": null,
     "quote": "a standardized XML vocabulary and associated discovery and authorization mechanisms / robots.txt License: directives HTTP Link headers with rel=\"license\" HTML license associations established using <link> or <script> elements RSS <rsl:content> associations / RSL licenses MAY be embedded directly in the metadata facility of media or data files.",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://raw.githubusercontent.com/IABTechLab/CoMP/main/README.md",
     "claim": "IAB Tech Lab, *CoMP repository README*, fetched 2026-10-31",
     "date": null,
     "quote": "Technical Governance and code commits for the project are provided by the Content Monetization Protocols Working Group. / Participants in the Content Monetization Protocols group must be members of IAB Tech Lab. / Content Monetization Protocols Specification the IAB Tech Lab is licensed under a Creative Commons Attribution 3.0 License.",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://github.com/IABTechLab/CoMP/blob/main/CoMP-1.0.md",
     "claim": "IAB Tech Lab, *CoMP/CoMP-1.0.md at main*, fetched 2026-10-31",
     "date": null,
     "quote": "CoMP/CoMP-1.0.md at main · IABTechLab/CoMP",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://raw.githubusercontent.com/InteractiveAdvertisingBureau/openrtb2.x/main/2.6.md",
     "claim": "IAB Tech Lab, *OpenRTB API Specification Version 2.6*, fetched 2026-11-12",
     "date": null,
     "quote": "# About the IAB Tech Lab <a name=\"techlab\"></a>",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://www.w3.org/TR/odrl-model/",
     "claim": "W3C, *ODRL Information Model 2.2*, 2018-02-15",
     "date": "2018-02-15",
     "quote": "This document was published by the Permissions & Obligations Expression Working Group as a Recommendation.",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://github.com/IABTechLab/AAMP",
     "claim": "IAB Tech Lab, *AAMP - Agentic Advertising Management Protocols*, checked 2026-10-31",
     "date": null,
     "quote": "AAMP is the umbrella initiative under which all of Tech Lab's Agentic work is being developed in partnership with the advertising ecosystem.",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://iabtechlab.com/standards/aamp-agentic-advertising-management-protocols/",
     "claim": "IAB Tech Lab, *AAMP Agentic Advertising Management Protocols from IAB Tech Lab*, published 2026-02-26; modified 2026-10-27",
     "date": null,
     "quote": "IAB Tech Lab's AAMP (Agentic Advertising Management Protocols) creates the foundation for an Agentic future based on existing standards",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://datatracker.ietf.org/wg/webbotauth/about/",
     "claim": "IETF Web Bot Auth Working Group, *Web Bot Auth (webbotauth)*, charter-ietf-webbotauth-01 Approved; WG state Active",
     "date": null,
     "quote": "The Web Bot Authentication (webbotauth) Working Group will standardize methods for cryptographically authenticating automated clients",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-webbotauth-httpsig-protocol/",
     "claim": "Thibault Meunier (Cloudflare), Sandor Major (Google), *draft-ietf-webbotauth-httpsig-protocol-01 — HTTP Message Signatures for automated traffic (IETF Datatracker)*, 2026-10-29",
     "date": "2026-10-29",
     "quote": "HTTP Message Signatures for automated traffic",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28",
     "claim": "Model Context Protocol, *Model Context Protocol specification*, version 2026-07-28",
     "date": null,
     "quote": "Model Context Protocol (MCP) is an open protocol that enables seamless integration between LLM applications and external data sources and tools.",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://raw.githubusercontent.com/nlweb-ai/website/main/NLWEBSPEC.md",
     "claim": "NLWeb, *NLWeb Specification v0.55*, fetched 2026-10-30",
     "date": null,
     "quote": "NLWeb defines a standardized interface for natural language interactions with agents.",
     "ref": 13
    }
   ],
   "last_verified": "2026-11-12",
   "dispute": null,
   "summary_md": "CoMP (Content Monetization Protocols) is the Content Metadata Marketplace Supply Specification (MVP). It defines the object model and transport format for content assets offered by inventory owners or a content marketplace to an AI system. An `aisystem` request carries required `name`, the AI system's canonical domain, and required `aiauth`, stating how that system plans to authenticate. With no issued token, the system should review `package.licenseurl`, and the response can grant no authorization at `auth` 0 while pointing to that `licenseurl`. V1 of CoMP was open for public comment until April 9, 2026 and was finalized on April 28, 2026, and the page labels that release `CoMP v1` (Final). The specification file itself remains titled Content Metadata Marketplace Supply Specification (MVP).",
   "history": [
    {
     "date": "2026-10-20",
     "note": "initial record; verified against IAB Tech Lab's CoMP initiative page and CoMP-1.0.md on the main branch of github.com/IABTechLab/CoMP"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "part_of": null,
   "group": null,
   "watch": [
    {
     "type": "github",
     "repo": "IABTechLab/CoMP",
     "mode": "release"
    },
    {
     "type": "page",
     "url": "https://iabtechlab.com/standards/comp-content-monetization-protocols-initiative/",
     "selector": "main",
     "cadence": "weekly"
    }
   ],
   "use_cases": [
    "serve-content-to-agents",
    "control-ai-crawling",
    "prove-agent-identity"
   ],
   "audience": [
    "site-owner",
    "platform"
   ],
   "pairs_with": [
    "rsl",
    "aamp",
    "webbotauth",
    "mcp",
    "nlweb"
   ],
   "prerequisites": [],
   "hatnote_md": "This page is about IAB Tech Lab's CoMP (Content Monetization Protocols) Initiative and its Content Metadata Marketplace Supply Specification (MVP), which defines the object model and transport format for describing content assets offered to an AI system. For IAB Tech Lab's agentic advertising umbrella initiative, see [Agentic Advertising Management Protocols (AAMP)](/protocols/aamp/). For the XML licensing vocabulary and discovery standard, see [Really Simple Licensing (RSL)](/protocols/rsl/).",
   "tier": "spec_brief",
   "lifecycle_status": "published_standard",
   "wire_archetype": "crawler_policy",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "This page is about IAB Tech Lab's CoMP (Content Monetization Protocols) Initiative and its Content Metadata Marketplace Supply Specification (MVP), which defines the object model and transport format for describing content assets offered to an AI system. For IAB Tech Lab's agentic advertising umbrella initiative, see [Agentic Advertising Management Protocols (AAMP)](/protocols/aamp/). For the XML licensing vocabulary and discovery standard, see [Really Simple Licensing (RSL)](/protocols/rsl/). [1][2][3]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "CoMP (Content Monetization Protocols) is the Content Metadata Marketplace Supply Specification (MVP). [2] It defines the object model and transport format for content assets offered by inventory owners or a content marketplace to an AI system. [2] An `aisystem` request carries required `name`, the AI system's canonical domain, and required `aiauth`, stating how that system plans to authenticate. [2] With no issued token, the system should review `package.licenseurl`, and the response can grant no authorization at `auth` 0 while pointing to that `licenseurl`. [2] V1 of CoMP was open for public comment until April 9, 2026 and was finalized on April 28, 2026, and the page labels that release `CoMP v1` (Final). [1] The specification file itself remains titled Content Metadata Marketplace Supply Specification (MVP). [2]",
   "v05_identity_sentence_md": "CoMP (Content Monetization Protocols) is the Content Metadata Marketplace Supply Specification (MVP). [2] It defines the object model and transport format for content assets offered by inventory owners or a content marketplace to an AI system. [2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Permit](/category/permit/) (`permit`)"
    },
    {
     "label": "Form",
     "value_md": "Endpoint (`endpoint`)"
    },
    {
     "label": "Originated by",
     "value_md": "IAB Tech Lab, 2026-02-02 [1]"
    },
    {
     "label": "Governed by",
     "value_md": "Content Monetization Protocols Working Group (IAB Tech Lab members only) [4]"
    },
    {
     "label": "Track",
     "value_md": "IAB Tech Lab working-group specification [1]"
    },
    {
     "label": "Status",
     "value_md": "CoMP v1 (Final); public comment until 2026-04-09; finalized 2026-04-28 [1]"
    },
    {
     "label": "Version",
     "value_md": "CoMP v1 (Final), finalized 2026-04-28; document title still says MVP [1][2][5]"
    },
    {
     "label": "Message format",
     "value_md": "JSON `aisystem` request and `package` response [2]"
    },
    {
     "label": "Specification",
     "value_md": "[Content Metadata Marketplace Supply Specification (MVP)](https://github.com/IABTechLab/CoMP/blob/main/CoMP-1.0.md) [2]"
    },
    {
     "label": "Found at",
     "value_md": "Supply discovery is out of scope; the AI system is assumed to already know the content it wants to license [2]"
    },
    {
     "label": "Licence",
     "value_md": "Creative Commons Attribution 3.0 [4]"
    }
   ],
   "v05_problem_md": "The initiative page says content is increasingly reused or summarized without clear permission, reporting, or attribution, because there is no standardized way to communicate usage rights or terms to LLMs. [1] This API standardizes a language so inventory owners can describe the content on offer, where the terms to use that content are, and how to access the content, and so an AI system can state the action it would like to perform using the package. [2] Commercial terms must be negotiated a priori to this API. Token issuance, counting, and payment are out of scope; supply discovery assumes the AI system already knows the content to license; and the API does not explicitly support reporting. [2]",
   "v05_mechanism_delta_md": "This API standardizes a language so inventory owners can describe the content on offer, where the terms to use that content are, and how to access the content, and so an AI system can state the action it would like to perform using the package. [2]",
   "v05_scope_boundary_md": "Commercial terms must be negotiated a priori to this API. Token issuance, counting, and payment are out of scope; supply discovery assumes the AI system already knows the content to license; and the API does not explicitly support reporting. [2]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "IAB OpenRTB",
      "spec_or_rfc": "OpenRTB 2.6",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "CoMP v1 answers with a Package that carries licenseurl, reporturl, a retrieval method, and delivery formats, leaves supply discovery out of scope, and does not settle payment, whereas OpenRTB's bid request and bid response clear an ad impression. [2][6]"
     },
     {
      "name": "ODRL Information Model 2.2",
      "spec_or_rfc": "ODRL 2.2",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "CoMP carries terms by a licenseurl inside the Package and does not define that document, whereas ODRL 2.2 inlines permissions, prohibitions, and duties in its own policy model. [2][7]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "rsl",
      "target_name": "Really Simple Licensing",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "CoMP puts supply discovery out of scope and returns `licenseurl` and `reporturl` on the Package, while RSL is a standardized XML vocabulary with five discovery bindings: `robots.txt` `License` directives, HTTP `Link` headers (`rel=\"license\"`), HTML `<link>` or `<script>` elements, RSS `<rsl:content>` elements, and embedded media or data file metadata. [2][3]"
     },
     {
      "target_id": "aamp",
      "target_name": "Agentic Advertising Management Protocols",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "CoMP carries terms at licenseurl and leaves supply discovery out of scope, while AAMP is the umbrella initiative for IAB Tech Lab's agentic advertising work and is described as the foundation for an agentic future based on existing standards. [2][8][9]"
     },
     {
      "target_id": "webbotauth",
      "target_name": "Web Bot Auth",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "CoMP's AI Authentication Methods list labels value 3 as WebBot Auth, and the Package still points at terms through licenseurl, while the Web Bot Auth working group standardizes cryptographic authentication of automated clients in HTTP Message Signatures for automated traffic. [2][10][11]"
     },
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "CoMP lists MCP as value 3 on the Endpoint / Delivery Format list for retrieval, while MCP is an open protocol that enables integration between LLM applications and external data sources and tools. [2][12]"
     },
     {
      "target_id": "nlweb",
      "target_name": "NLWeb",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "CoMP lists NLWeb as value 4 on the Endpoint / Delivery Format list, while NLWeb defines a standardized interface for natural language interactions with agents. [2][13]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Permit protocols](/category/permit/)** — Category index for `permit` standards."
    }
   ],
   "v05_compiled_md": "---\nid: iab-comp\ntitle: \"CoMP (Content Monetization Protocols)\"\ntier: spec_brief\nlifecycle_status: published_standard\ncategory: permit\nform: endpoint\nwire_archetype: crawler_policy\nspec_url: https://github.com/IABTechLab/CoMP/blob/main/CoMP-1.0.md\nlast_checked: 2026-11-12\n---\n\n# CoMP (Content Monetization Protocols)\n\n**Category:** [Permit](/category/permit/) (`permit`) · **Form:** Endpoint (`endpoint`) · **Last checked:** 2026-11-12\n\n> *This page is about IAB Tech Lab's CoMP (Content Monetization Protocols) Initiative and its Content Metadata Marketplace Supply Specification (MVP), which defines the object model and transport format for describing content assets offered to an AI system. For IAB Tech Lab's agentic advertising umbrella initiative, see [Agentic Advertising Management Protocols (AAMP)](/protocols/aamp/). For the XML licensing vocabulary and discovery standard, see [Really Simple Licensing (RSL)](/protocols/rsl/). [1][2][3]*\n\nCoMP (Content Monetization Protocols) is the Content Metadata Marketplace Supply Specification (MVP). [2] It defines the object model and transport format for content assets offered by inventory owners or a content marketplace to an AI system. [2] An `aisystem` request carries required `name`, the AI system's canonical domain, and required `aiauth`, stating how that system plans to authenticate. [2] With no issued token, the system should review `package.licenseurl`, and the response can grant no authorization at `auth` 0 while pointing to that `licenseurl`. [2] V1 of CoMP was open for public comment until April 9, 2026 and was finalized on April 28, 2026, and the page labels that release `CoMP v1` (Final). [1] The specification file itself remains titled Content Metadata Marketplace Supply Specification (MVP). [2]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Permit](/category/permit/) (`permit`) |\n| **Form** | Endpoint (`endpoint`) |\n| **Originated by** | IAB Tech Lab, 2026-02-02 [1] |\n| **Governed by** | Content Monetization Protocols Working Group (IAB Tech Lab members only) [4] |\n| **Track** | IAB Tech Lab working-group specification [1] |\n| **Status** | CoMP v1 (Final); public comment until 2026-04-09; finalized 2026-04-28 [1] |\n| **Version** | CoMP v1 (Final), finalized 2026-04-28; document title still says MVP [1][2][5] |\n| **Message format** | JSON `aisystem` request and `package` response [2] |\n| **Specification** | [Content Metadata Marketplace Supply Specification (MVP)](https://github.com/IABTechLab/CoMP/blob/main/CoMP-1.0.md) [2] |\n| **Found at** | Supply discovery is out of scope; the AI system is assumed to already know the content it wants to license [2] |\n| **Licence** | Creative Commons Attribution 3.0 [4] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nThe initiative page says content is increasingly reused or summarized without clear permission, reporting, or attribution, because there is no standardized way to communicate usage rights or terms to LLMs. [1] This API standardizes a language so inventory owners can describe the content on offer, where the terms to use that content are, and how to access the content, and so an AI system can state the action it would like to perform using the package. [2] Commercial terms must be negotiated a priori to this API. Token issuance, counting, and payment are out of scope; supply discovery assumes the AI system already knows the content to license; and the API does not explicitly support reporting. [2]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **IAB OpenRTB** | `OpenRTB 2.6` | Analogous to classic standard | CoMP v1 answers with a Package that carries licenseurl, reporturl, a retrieval method, and delivery formats, leaves supply discovery out of scope, and does not settle payment, whereas OpenRTB's bid request and bid response clear an ad impression. [2][6] |\n| **ODRL Information Model 2.2** | `ODRL 2.2` | Analogous to classic standard | CoMP carries terms by a licenseurl inside the Package and does not define that document, whereas ODRL 2.2 inlines permissions, prohibitions, and duties in its own policy model. [2][7] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Really Simple Licensing](/protocols/rsl/)** | Peer alternative | CoMP puts supply discovery out of scope and returns `licenseurl` and `reporturl` on the Package, while RSL is a standardized XML vocabulary with five discovery bindings: `robots.txt` `License` directives, HTTP `Link` headers (`rel=\"license\"`), HTML `<link>` or `<script>` elements, RSS `<rsl:content>` elements, and embedded media or data file metadata. [2][3] |\n| **[Agentic Advertising Management Protocols](/protocols/aamp/)** | Complements | CoMP carries terms at licenseurl and leaves supply discovery out of scope, while AAMP is the umbrella initiative for IAB Tech Lab's agentic advertising work and is described as the foundation for an agentic future based on existing standards. [2][8][9] |\n| **[Web Bot Auth](/protocols/webbotauth/)** | Complements | CoMP's AI Authentication Methods list labels value 3 as WebBot Auth, and the Package still points at terms through licenseurl, while the Web Bot Auth working group standardizes cryptographic authentication of automated clients in HTTP Message Signatures for automated traffic. [2][10][11] |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | CoMP lists MCP as value 3 on the Endpoint / Delivery Format list for retrieval, while MCP is an open protocol that enables integration between LLM applications and external data sources and tools. [2][12] |\n| **[NLWeb](/protocols/nlweb/)** | Complements | CoMP lists NLWeb as value 4 on the Endpoint / Delivery Format list, while NLWeb defines a standardized interface for natural language interactions with agents. [2][13] |\n\n---\n\n## See also\n\n- **Category:** [Permit protocols](/category/permit/)\n\n---\n\n## References\n\n1. IAB Technology Laboratory, Inc., *CoMP (Content Monetization Protocols) Initiative Specification* (published 2026-02-02; modified 2026-08-06; page last updated 2026-04-28) — <https://iabtechlab.com/standards/comp-content-monetization-protocols-initiative/>\n2. IAB Tech Lab, *Content Metadata Marketplace Supply Specification (MVP)* (fetched 2026-10-31) — <https://raw.githubusercontent.com/IABTechLab/CoMP/main/CoMP-1.0.md>\n3. G. Boyer (RSL Collective); C. Chen (Condé Nast); J. Fortuna (Ziff Davis); RV Guha (Schema.org); S. Koenig (Yahoo); J. Le Page (Automattic); A. Odewahn (O'Reilly Media); E. Walther (RSL Collective); S. Wistow (Fastly), *Really Simple Licensing (RSL) 1.0 Specification* (published 2025-12-10) — <https://rslstandard.org/rsl>\n4. IAB Tech Lab, *CoMP repository README* (fetched 2026-10-31) — <https://raw.githubusercontent.com/IABTechLab/CoMP/main/README.md>\n5. IAB Tech Lab, *CoMP/CoMP-1.0.md at main* (fetched 2026-10-31) — <https://github.com/IABTechLab/CoMP/blob/main/CoMP-1.0.md>\n6. IAB Tech Lab, *OpenRTB API Specification Version 2.6* (fetched 2026-11-12) — <https://raw.githubusercontent.com/InteractiveAdvertisingBureau/openrtb2.x/main/2.6.md>\n7. W3C, *ODRL Information Model 2.2* (2018-02-15) — <https://www.w3.org/TR/odrl-model/>\n8. IAB Tech Lab, *AAMP - Agentic Advertising Management Protocols* (checked 2026-10-31) — <https://github.com/IABTechLab/AAMP>\n9. IAB Tech Lab, *AAMP Agentic Advertising Management Protocols from IAB Tech Lab* (published 2026-02-26; modified 2026-10-27) — <https://iabtechlab.com/standards/aamp-agentic-advertising-management-protocols/>\n10. IETF Web Bot Auth Working Group, *Web Bot Auth (webbotauth)* (charter-ietf-webbotauth-01 Approved; WG state Active) — <https://datatracker.ietf.org/wg/webbotauth/about/>\n11. Thibault Meunier (Cloudflare), Sandor Major (Google), *draft-ietf-webbotauth-httpsig-protocol-01 — HTTP Message Signatures for automated traffic (IETF Datatracker)* (2026-10-29) — <https://datatracker.ietf.org/doc/draft-ietf-webbotauth-httpsig-protocol/>\n12. Model Context Protocol, *Model Context Protocol specification* (version 2026-07-28) — <https://modelcontextprotocol.io/specification/2026-07-28>\n13. NLWeb, *NLWeb Specification v0.55* (fetched 2026-10-30) — <https://raw.githubusercontent.com/nlweb-ai/website/main/NLWEBSPEC.md>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "agent-commerce-kit",
   "name": "Agent Commerce Kit (ACK)",
   "acronym": "ACK",
   "hatnote_md": "This page is about the Agent Commerce Kit (ACK) from Catena Labs: two open patterns, ACK-ID for agent identity and ACK-Pay for payment requests and receipts, with MIT-licensed TypeScript packages. It is not the [Agentic Commerce Protocol](/protocols/agentic-commerce-protocol/) (ACP) from OpenAI and Stripe (see [ACP](/terms/acp/)), and not the TCP acknowledgement flag. Schemes ACK builds on or maps onto have their own pages: [x402](/protocols/x402/), the [Agent Payments Protocol (AP2)](/protocols/ap2/), the [Machine Payments Protocol (MPP)](/protocols/mpp/), [L402](/protocols/l402/), the [Trusted Agent Protocol (TAP)](/protocols/tap/) and the [KYAPay Token](/protocols/kyapay-token/).",
   "aliases": [
    "ACK",
    "ACK-ID",
    "ACK-Pay"
   ],
   "collisions": [],
   "step": "pay",
   "parties": [
    "agent-payment",
    "agent-agent",
    "agent-site"
   ],
   "form": "document-format",
   "track": "single-vendor",
   "scope": "payments",
   "question": "How can an agent prove who owns it and pay another party, on any rail, with a receipt both sides can verify?",
   "analog": "A company ID badge plus a signed receipt book",
   "origin": {
    "org": "Catena Labs",
    "date": "2025-05-20"
   },
   "governance": "Catena Labs, with no standards body found. \"Catena Labs has contributed ACK as an open-source project\"; \"The protocols and reference implementations are available under the MIT License.\" \"Copyright (c) 2025 Catena Labs, Inc. and contributors\" Catena now calls ACK \"Agent Commerce Kit (ACK) - Patterns for standards-based agentic identity and payments curated by Catena.\"",
   "native_status": "Version 1 is \"Current\" by ACK's own scheme; a v2 redesign is an open draft proposal. \"The current stable protocol version is 2025-05-04.\" \"Status: proposal. Nothing here has shipped.\" Pull request #179 is open (draft: true), opened 2026-08-27, last updated 2026-10-17 (UTC).",
   "phase": "draft",
   "implementation": "prototype",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "version": {
    "label": "2025-05-04 (agentcommercekit@0.11.0)",
    "date": "2026-08-04"
   },
   "spec_url": "https://www.agentcommercekit.com/overview/concepts.md",
   "discovery": {
    "mechanism": "No fixed discovery path. Over HTTP a payment request arrives in a 402 response: \"Over HTTP, the idiomatic approach is to return an HTTP 402 Payment Required status code, with the Payment Request JSON payload included in the response body.\" Identities are DIDs: \"Create a resolver with support for did:web, did:key, and did:pkh methods\"",
    "path": null
   },
   "probe": {
    "method": "GET",
    "path": "none — no fixed path defined",
    "parse": "No artefact at a fixed path to parse.",
    "on_absent": "Not probeable from an origin."
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.agentcommercekit.com/overview/concepts.md",
     "claim": "Agent Commerce Kit (Catena Labs), *Agent Commerce Kit Core Protocols and Design Principles*, checked 2026-10-31",
     "date": null,
     "quote": "two complementary design patterns: ACK-ID for identity and ACK-Pay for payments. / The Agent Commerce Kit was initially developed by Catena Labs. / Catena Labs has contributed ACK as an open-source project / ## Documentation Index Fetch the complete documentation index at: https://www.agentcommercekit.com/llms.txt Use this file to / ACK-ID utilizes the established W3C open standards Decentralized Identifiers (DIDs) and Verifiable Credentials (VCs).",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://www.agentcommercekit.com/ack-pay/server-initiated-sequence.md",
     "claim": "Agent Commerce Kit (Catena Labs), *ACK-Pay flow initiated by a Server requiring payment*, checked 2026-10-31",
     "date": null,
     "quote": "Over HTTP, the idiomatic approach is to return an HTTP 402 Payment Required status code, with the Payment Request JSON payload included in the response body. / 9. Service Delivery: The Server verifies the presented ACK Receipt",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://www.agentcommercekit.com/resources/versioning.md",
     "claim": "Agent Commerce Kit (Catena Labs), *Agent Commerce Kit (ACK) — Versioning*, checked 2026-10-31",
     "date": null,
     "quote": "The current stable protocol version is 2025-05-04. / ## Documentation Index Fetch the complete documentation index at: https://www.agentcommercekit.com/llms.txt Use this file to",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://github.com/agentcommercekit/ack/pull/179",
     "claim": "Agent Commerce Kit (Catena Labs), *RFC: ACK-ID + ACK-Pay v2 (agentcommercekit/ack Pull Request #179)*, checked 2026-10-31",
     "date": null,
     "quote": "Status: proposal. Nothing here has shipped. / adopt the x402 offer-receipt artifacts / \"html_url\": \"https://github.com/agentcommercekit/ack/pull/179\", \"id\": 5269518517, \"node_id\": \"PR_kwDOOszR_88AAAABBOqNlw\", \"number\": 179, \"title\": \"RFC: ACK-ID + ACK-Pay v2 / https://opengraph.githubassets.com/c5b8daeb89c94dde75756b2fa4940b17e996ddca502eedf18a7161b91a9f5627/agentcommercekit/ack/pull/179 Status: proposal. Nothing here has shipped. The documents live under / normative profile adopting the x402 offer-receipt artifacts and binding receipts to the authorizing grant. / ` /did.json`, or `/.well-known/did.json` for a bare domain, read for its `publicKeyJwk` entries only.",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://catena.com/blog/agent-commerce-kit",
     "claim": "Catena Labs, *Agent Commerce Kit (ACK): Enabling the Agent Economy*, checked 2026-10-31",
     "date": null,
     "quote": "Agent Commerce Kit (ACK): Enabling the Agent Economy | Catena {\"@context\":\"https://schema.org\",\"@type\":\"Organization\",\"@id\":\"https://catena.com/#organization\",\"name\":\"Catena\",\"legalName\":\"Catena Labs,",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://github.com/agentcommercekit/ack",
     "claim": "Agent Commerce Kit (Catena Labs), *agentcommercekit/ack — GitHub Repository Metadata*, checked 2026-10-31",
     "date": null,
     "quote": "\"https://api.github.com/repos/agentcommercekit/ack/deployments\", \"created_at\": \"2025-05-19T17:50:30Z\", \"updated_at\": \"2026-10-12T15:09:24Z\", \"pushed_at\": \"2026-10-30T14:16:18Z\", \"git_url\": / 210086250, \"node_id\": \"O_kgDODIWpag\", \"avatar_url\": \"https://avatars.githubusercontent.com/u/210086250?v=4\", \"gravatar_id\": \"\", \"url\": \"https://api.github.com/users/agentcommercekit\", \"html_url\": / null, \"archived\": false, \"disabled\": false, \"open_issues_count\": 55, \"license\": { \"key\": \"mit\", \"name\": \"MIT License\",",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://www.agentcommercekit.com/resources/license.md",
     "claim": "Agent Commerce Kit (Catena Labs), *Agent Commerce Kit (ACK) — License*, checked 2026-10-31",
     "date": null,
     "quote": "Copyright (c) 2025 Catena Labs, Inc. and contributors / further. # License MIT License Copyright (c) 2025 Catena Labs, Inc. and contributors Permission",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://raw.githubusercontent.com/agentcommercekit/ack/main/packages/did/README.md",
     "claim": "Agent Commerce Kit (Catena Labs), *@agentcommercekit/did — DID and DID Document Utilities README*, checked 2026-10-31",
     "date": null,
     "quote": "Create a resolver with support for did:web, did:key, and did:pkh methods",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://www.agentcommercekit.com/ack-id/standards.md",
     "claim": "Agent Commerce Kit (Catena Labs), *ACK-ID: Identity Standards*, checked 2026-10-31",
     "date": null,
     "quote": "ACK-ID leverages two key W3C open standards: Decentralized Identifiers (DIDs) and Verifiable Credentials (VCs), / ## Documentation Index Fetch the complete documentation index at: https://www.agentcommercekit.com/llms.txt Use this file to",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://www.agentcommercekit.com/ack-pay/payment-request-payload.md",
     "claim": "Agent Commerce Kit (Catena Labs), *ACK-Pay Payment Request*, checked 2026-10-31",
     "date": null,
     "quote": "Structure and details of the ACK-Pay Payment Request. The JSON Payment Request payload is",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://www.agentcommercekit.com/ack-pay/receipt-verification.md",
     "claim": "Agent Commerce Kit (Catena Labs), *ACK-Pay is the verifiable proof of payment*, checked 2026-10-31",
     "date": null,
     "quote": "This allows Server Agents or other relying parties to validate payments reliably without needing direct access to underlying payment systems",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://www.agentcommercekit.com/ack-pay/payment-service.md",
     "claim": "Agent Commerce Kit (Catena Labs), *Agent Commerce Kit (ACK) architecture*, checked 2026-10-31",
     "date": null,
     "quote": "Integration with protocols like Lightning Network (L402) or Fewsats could also be explored via this layer.",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://www.w3.org/TR/did-core/",
     "claim": "W3C, *Decentralized Identifiers (DIDs) v1.0*, 2022-07-19",
     "date": "2022-07-19",
     "quote": "Decentralized identifiers (DIDs) are a new type of identifier that",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://www.rfc-editor.org/rfc/rfc9110.html",
     "claim": "IETF, *RFC 9110: HTTP Semantics*, IETF RFC",
     "date": null,
     "quote": "<meta content=\"Common,Latin\" name=\"scripts\">",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://www.linuxfoundation.org/press/linux-foundation-announces-operational-launch-of-x402-foundation-to-standardize-internet-native-payments-for-ai-agents-and-applications",
     "claim": "Linux Foundation, *Linux Foundation Announces Operational Launch of x402 Foundation to Standardize Internet-Native Payments for AI Agents and Applications*, July 14, 2026",
     "date": null,
     "quote": "SAN FRANCISCO, July 14, 2026 – The Linux Foundation , the nonprofit organization enabling mass innovation through open source, today announced the operational launch of the x402 Foundation",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://raw.githubusercontent.com/Roasbeef/blips/697ae354c205f1aacc450e72067c92a7f2467321/blip-0026.md",
     "claim": "Olaoluwa Osuntokun, Oliver Gugger, and Wilmer Paulino, *bLIP-0026: L402: The Lightning HTTP 402 Protocol*, created 2023-06-06",
     "date": null,
     "quote": "Status: Active",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/specification.md",
     "claim": "Google (google-agentic-commerce), *Agentic Payment Protocol (v0.2)*, fetched 2026-10-30",
     "date": null,
     "quote": "Agentic Payment Protocol (v0.2)",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://www.ietf.org/archive/id/draft-skyfire-oauth-kyapay-token-03.txt",
     "claim": "A. Agarwal (Skyfire Systems Inc.) and Michael B. Jones (Self-Issued Consulting), *KYAPay Token (draft-skyfire-oauth-kyapay-token-03)*, 2 November 2026; checked 2026-11-07",
     "date": null,
     "quote": "Intended status: Standards Track ... Expires: 6 May 2027 ... 2 November 2026 ... draft-skyfire-oauth-kyapay-token-03 ... This Internet-Draft will expire on 6 May 2027.",
     "ref": 18
    }
   ],
   "last_verified": "2026-11-12",
   "dispute": null,
   "summary_md": "**Agent Commerce Kit** (`ACK`) is a pattern specification from Catena Labs that pairs **ACK-ID** for identity with **ACK-Pay** for payments. It was announced on 20 May 2025 and standardizes how autonomous agents authenticate to accountable owners and pay for metered or transactional services over HTTP-class transports. In the server-initiated pattern, the server answers with **HTTP 402 Payment Required** and places the Payment Request JSON in the response body. The client pays through a `paymentService`, settlement runs on the chosen rail, the client obtains a signed **ACK Receipt**, and presents that receipt for service delivery. The stable protocol version is **2025-05-04**. An open v2 proposal on the ACK repository has not shipped; it would drop the verifiable-credential requirement and adopt x402 offer-receipt artifacts instead of the VC-centric ACK-ID machinery in stable v1.",
   "history": [
    {
     "date": "2026-10-20",
     "note": "initial record; verified against agentcommercekit.com/overview/concepts and github.com/agentcommercekit/ack"
    },
    {
     "date": "2026-10-29",
     "note": "Primary-source verification across 51 primary and independent sources"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "part_of": null,
   "group": null,
   "watch": [
    {
     "type": "github",
     "repo": "agentcommercekit/ack",
     "mode": "tag",
     "version": false
    },
    {
     "type": "npm",
     "pkg": "agentcommercekit"
    }
   ],
   "use_cases": [
    "accept-agent-payments",
    "prove-agent-identity",
    "agent-checkout"
   ],
   "audience": [
    "agent-builder",
    "platform"
   ],
   "pairs_with": [
    "x402",
    "l402",
    "ap2",
    "kyapay-token"
   ],
   "prerequisites": [],
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "payments_onchain",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "This page is about the Agent Commerce Kit (ACK) from Catena Labs: two open patterns, ACK-ID for agent identity and ACK-Pay for payment requests and receipts, with MIT-licensed TypeScript packages. It is not the [Agentic Commerce Protocol](/protocols/agentic-commerce-protocol/) (ACP) from OpenAI and Stripe (see [ACP](/terms/acp/)), and not the TCP acknowledgement flag. Schemes ACK builds on or maps onto have their own pages: [x402](/protocols/x402/), the [Agent Payments Protocol (AP2)](/protocols/ap2/), the [Machine Payments Protocol (MPP)](/protocols/mpp/), [L402](/protocols/l402/), the [Trusted Agent Protocol (TAP)](/protocols/tap/) and the [KYAPay Token](/protocols/kyapay-token/). [1]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Agent Commerce Kit** (`ACK`) is a pattern specification from Catena Labs that pairs **ACK-ID** for identity with **ACK-Pay** for payments. It was announced on 20 May 2025 and standardizes how autonomous agents authenticate to accountable owners and pay for metered or transactional services over HTTP-class transports. [1] In the server-initiated pattern, the server answers with **HTTP 402 Payment Required** and places the Payment Request JSON in the response body. The client pays through a `paymentService`, settlement runs on the chosen rail, the client obtains a signed **ACK Receipt**, and presents that receipt for service delivery. [2] The stable protocol version is **2025-05-04**. An open v2 proposal on the ACK repository has not shipped; it would drop the verifiable-credential requirement and adopt x402 offer-receipt artifacts instead of the VC-centric ACK-ID machinery in stable v1. [3][4]",
   "v05_identity_sentence_md": "**Agent Commerce Kit** (`ACK`) is a pattern specification from Catena Labs that pairs **ACK-ID** for identity with **ACK-Pay** for payments. It was announced on 20 May 2025 and standardizes how autonomous agents authenticate to accountable owners and pay for metered or transactional services over HTTP-class transports. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Pay](/category/pay/) (`pay`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "Catena Labs, Inc. (`agentcommercekit/ack` created `2025-05-19`; announced `2025-05-20` with `$18M` seed led by a16z crypto) [1][5][6]"
    },
    {
     "label": "Governed by",
     "value_md": "Catena Labs, Inc. (`agentcommercekit` GitHub org; no external standards body) [1][6][7]"
    },
    {
     "label": "Track",
     "value_md": "Single-vendor open specification (Catena Labs) [1][7]"
    },
    {
     "label": "Status",
     "value_md": "Version 1 is \"Current\" by ACK's own scheme; a v2 redesign is an open draft proposal. \"The current stable protocol version is 2025-05-04.\" \"Status: proposal. Nothing here has shipped.\" Pull request #179 is open (draft: true), opened 2026-08-27, last updated 2026-10-17 (UTC). [3][4]"
    },
    {
     "label": "Version",
     "value_md": "Protocol `2025-05-04` (`Current`); SDK `agentcommercekit@0.11.0` (`2026-08-04`; `19` releases, `21` npm versions); `ACK v2` PR `#179` (`2026-08-27`, updated `2026-10-17`) [3][4]"
    },
    {
     "label": "Wire format",
     "value_md": "W3C DIDs (`did:web`, `did:key`, `did:pkh`, `did:jwks`), W3C VCs (`ControllerCredential`, `PaymentReceiptCredential`), JWT `paymentRequestToken`, Bitstring Status List; v2 JOSE `grant+jwt` + `x402` offer-receipt [4][8][9]"
    },
    {
     "label": "Specification",
     "value_md": "[Concepts](https://www.agentcommercekit.com/overview/concepts.md) · [ACK-ID](https://www.agentcommercekit.com/ack-id/standards.md) · [Request](https://www.agentcommercekit.com/ack-pay/payment-request-payload.md) · [Receipts](https://www.agentcommercekit.com/ack-pay/receipt-verification.md) · [Repo](https://github.com/agentcommercekit/ack) · [v2 RFC (#179)](https://github.com/agentcommercekit/ack/pull/179) [1][9][10]"
    },
    {
     "label": "Found at",
     "value_md": "No `.well-known` discovery path in v1; `HTTP 402` `{ paymentRequest, paymentRequestToken }` JSON (or A2A / WS); `/.well-known/did.json`; dev `X-Payload-Issuer`; v2 RFC 9421 `Grant` [2][4][8]"
    },
    {
     "label": "Licence",
     "value_md": "MIT License (`Copyright (c) 2025 Catena Labs, Inc. and contributors`) [1][6][7]"
    }
   ],
   "v05_problem_md": "Without a portable receipt, a server agent that confirms payment only by querying the underlying payment rail cannot validate payment independently or share proof with other relying parties. Checkout therefore stays coupled to whatever payment backend the server operators control. [11] **ACK-ID** ties an agent to an accountable owner using W3C Decentralized Identifiers and Verifiable Credentials so relying parties can check controller credentials. **ACK-Pay** has the server publish a Payment Request, a payment service execute settlement and obtain a signed ACK Receipt from its associated receipt service, and the client present that receipt so the server can verify it before delivering the resource. [1][11] Lightning Network (**L402**) and similar integrations are optional explorations at the payment-service layer rather than normative ACK-Pay requirements in the current stable specification. Readers should not assume those rails are defined end-to-end in the published stable ACK-Pay package. [3][12]",
   "v05_mechanism_delta_md": "**ACK-ID** ties an agent to an accountable owner using W3C Decentralized Identifiers and Verifiable Credentials so relying parties can check controller credentials. **ACK-Pay** has the server publish a Payment Request, a payment service execute settlement and obtain a signed ACK Receipt from its associated receipt service, and the client present that receipt so the server can verify it before delivering the resource. [1][11]",
   "v05_scope_boundary_md": "Lightning Network (**L402**) and similar integrations are optional explorations at the payment-service layer rather than normative ACK-Pay requirements in the current stable specification. Readers should not assume those rails are defined end-to-end in the published stable ACK-Pay package. [3][12]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "W3C Decentralized Identifiers (DID 1.0) & Verifiable Credentials (VC 2.0)",
      "spec_or_rfc": "W3C DID 1.0",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "ACK-ID identifies Owner and Agent with W3C DIDs, including did:web, did:key, and did:pkh, and verifiable credentials, and the published ACK-Pay receipt is a W3C Verifiable Credential. [1][13]"
     },
     {
      "name": "HTTP 402 Payment Required (RFC 9110 §15.5.3)",
      "spec_or_rfc": "RFC 9110 §15.5.3",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "On HTTP, ACK-Pay returns status 402 with its Payment Request JSON in the response body, the same pattern can be carried in A2A messages or over WebSockets, and the receipt the server checks is a W3C Verifiable Credential. [1][14]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "x402",
      "target_name": "x402",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ACK-Pay's HTTP payment request is JSON in the 402 body and its receipt is a W3C VC, while x402 uses PAYMENT-REQUIRED and PAYMENT-SIGNATURE headers and a facilitator settlement response, and ACK's unshipped v2 proposal would adopt x402 offer and receipt artifacts. [1][15]"
     },
     {
      "target_id": "l402",
      "target_name": "L402",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ACK-Pay places L402 among the 402-shaped flows that fit its payment pattern, while L402's credential is a macaroon and a BOLT 11 preimage and ACK-Pay's receipt is a W3C Verifiable Credential. [1][16]"
     },
     {
      "target_id": "ap2",
      "target_name": "Agent Payments Protocol (AP2)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ACK-Pay's published proof of payment is a W3C VC receipt and ACK-ID is the DID identity layer, while AP2's proof of authorization is an SD-JWT Checkout Mandate signed on a Trusted Surface. [1][17]"
     },
     {
      "target_id": "kyapay-token",
      "target_name": "KYAPay Token",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ACK-ID's identifiers are DID documents, including did:web, did:key, and did:pkh, and verifiable credentials, while a KYAPay token is a KYA, PAY, or KYA-PAY JWT verified from /.well-known/jwks.json. [1][18]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Pay protocols](/category/pay/)** — Category index for `pay` standards."
    }
   ],
   "v05_compiled_md": "---\nid: agent-commerce-kit\ntitle: \"Agent Commerce Kit (ACK)\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: pay\nform: document-format\nwire_archetype: payments_onchain\nspec_url: https://www.agentcommercekit.com/overview/concepts.md\nlast_checked: 2026-11-12\n---\n\n# Agent Commerce Kit (ACK)\n\n**Category:** [Pay](/category/pay/) (`pay`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-11-12\n\n> *This page is about the Agent Commerce Kit (ACK) from Catena Labs: two open patterns, ACK-ID for agent identity and ACK-Pay for payment requests and receipts, with MIT-licensed TypeScript packages. It is not the [Agentic Commerce Protocol](/protocols/agentic-commerce-protocol/) (ACP) from OpenAI and Stripe (see [ACP](/terms/acp/)), and not the TCP acknowledgement flag. Schemes ACK builds on or maps onto have their own pages: [x402](/protocols/x402/), the [Agent Payments Protocol (AP2)](/protocols/ap2/), the [Machine Payments Protocol (MPP)](/protocols/mpp/), [L402](/protocols/l402/), the [Trusted Agent Protocol (TAP)](/protocols/tap/) and the [KYAPay Token](/protocols/kyapay-token/). [1]*\n\n**Agent Commerce Kit** (`ACK`) is a pattern specification from Catena Labs that pairs **ACK-ID** for identity with **ACK-Pay** for payments. It was announced on 20 May 2025 and standardizes how autonomous agents authenticate to accountable owners and pay for metered or transactional services over HTTP-class transports. [1] In the server-initiated pattern, the server answers with **HTTP 402 Payment Required** and places the Payment Request JSON in the response body. The client pays through a `paymentService`, settlement runs on the chosen rail, the client obtains a signed **ACK Receipt**, and presents that receipt for service delivery. [2] The stable protocol version is **2025-05-04**. An open v2 proposal on the ACK repository has not shipped; it would drop the verifiable-credential requirement and adopt x402 offer-receipt artifacts instead of the VC-centric ACK-ID machinery in stable v1. [3][4]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Pay](/category/pay/) (`pay`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | Catena Labs, Inc. (`agentcommercekit/ack` created `2025-05-19`; announced `2025-05-20` with `$18M` seed led by a16z crypto) [1][5][6] |\n| **Governed by** | Catena Labs, Inc. (`agentcommercekit` GitHub org; no external standards body) [1][6][7] |\n| **Track** | Single-vendor open specification (Catena Labs) [1][7] |\n| **Status** | Version 1 is \"Current\" by ACK's own scheme; a v2 redesign is an open draft proposal. \"The current stable protocol version is 2025-05-04.\" \"Status: proposal. Nothing here has shipped.\" Pull request #179 is open (draft: true), opened 2026-08-27, last updated 2026-10-17 (UTC). [3][4] |\n| **Version** | Protocol `2025-05-04` (`Current`); SDK `agentcommercekit@0.11.0` (`2026-08-04`; `19` releases, `21` npm versions); `ACK v2` PR `#179` (`2026-08-27`, updated `2026-10-17`) [3][4] |\n| **Wire format** | W3C DIDs (`did:web`, `did:key`, `did:pkh`, `did:jwks`), W3C VCs (`ControllerCredential`, `PaymentReceiptCredential`), JWT `paymentRequestToken`, Bitstring Status List; v2 JOSE `grant+jwt` + `x402` offer-receipt [4][8][9] |\n| **Specification** | [Concepts](https://www.agentcommercekit.com/overview/concepts.md) · [ACK-ID](https://www.agentcommercekit.com/ack-id/standards.md) · [Request](https://www.agentcommercekit.com/ack-pay/payment-request-payload.md) · [Receipts](https://www.agentcommercekit.com/ack-pay/receipt-verification.md) · [Repo](https://github.com/agentcommercekit/ack) · [v2 RFC (#179)](https://github.com/agentcommercekit/ack/pull/179) [1][9][10] |\n| **Found at** | No `.well-known` discovery path in v1; `HTTP 402` `{ paymentRequest, paymentRequestToken }` JSON (or A2A / WS); `/.well-known/did.json`; dev `X-Payload-Issuer`; v2 RFC 9421 `Grant` [2][4][8] |\n| **Licence** | MIT License (`Copyright (c) 2025 Catena Labs, Inc. and contributors`) [1][6][7] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nWithout a portable receipt, a server agent that confirms payment only by querying the underlying payment rail cannot validate payment independently or share proof with other relying parties. Checkout therefore stays coupled to whatever payment backend the server operators control. [11] **ACK-ID** ties an agent to an accountable owner using W3C Decentralized Identifiers and Verifiable Credentials so relying parties can check controller credentials. **ACK-Pay** has the server publish a Payment Request, a payment service execute settlement and obtain a signed ACK Receipt from its associated receipt service, and the client present that receipt so the server can verify it before delivering the resource. [1][11] Lightning Network (**L402**) and similar integrations are optional explorations at the payment-service layer rather than normative ACK-Pay requirements in the current stable specification. Readers should not assume those rails are defined end-to-end in the published stable ACK-Pay package. [3][12]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **W3C Decentralized Identifiers (DID 1.0) & Verifiable Credentials (VC 2.0)** | `W3C DID 1.0` | Profiles classic standard | ACK-ID identifies Owner and Agent with W3C DIDs, including did:web, did:key, and did:pkh, and verifiable credentials, and the published ACK-Pay receipt is a W3C Verifiable Credential. [1][13] |\n| **HTTP 402 Payment Required (RFC 9110 §15.5.3)** | `RFC 9110 §15.5.3` | Profiles classic standard | On HTTP, ACK-Pay returns status 402 with its Payment Request JSON in the response body, the same pattern can be carried in A2A messages or over WebSockets, and the receipt the server checks is a W3C Verifiable Credential. [1][14] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[x402](/protocols/x402/)** | Peer alternative | ACK-Pay's HTTP payment request is JSON in the 402 body and its receipt is a W3C VC, while x402 uses PAYMENT-REQUIRED and PAYMENT-SIGNATURE headers and a facilitator settlement response, and ACK's unshipped v2 proposal would adopt x402 offer and receipt artifacts. [1][15] |\n| **[L402](/protocols/l402/)** | Peer alternative | ACK-Pay places L402 among the 402-shaped flows that fit its payment pattern, while L402's credential is a macaroon and a BOLT 11 preimage and ACK-Pay's receipt is a W3C Verifiable Credential. [1][16] |\n| **[Agent Payments Protocol (AP2)](/protocols/ap2/)** | Peer alternative | ACK-Pay's published proof of payment is a W3C VC receipt and ACK-ID is the DID identity layer, while AP2's proof of authorization is an SD-JWT Checkout Mandate signed on a Trusted Surface. [1][17] |\n| **[KYAPay Token](/protocols/kyapay-token/)** | Peer alternative | ACK-ID's identifiers are DID documents, including did:web, did:key, and did:pkh, and verifiable credentials, while a KYAPay token is a KYA, PAY, or KYA-PAY JWT verified from /.well-known/jwks.json. [1][18] |\n\n---\n\n## See also\n\n- **Category:** [Pay protocols](/category/pay/)\n\n---\n\n## References\n\n1. Agent Commerce Kit (Catena Labs), *Agent Commerce Kit Core Protocols and Design Principles* (checked 2026-10-31) — <https://www.agentcommercekit.com/overview/concepts.md>\n2. Agent Commerce Kit (Catena Labs), *ACK-Pay flow initiated by a Server requiring payment* (checked 2026-10-31) — <https://www.agentcommercekit.com/ack-pay/server-initiated-sequence.md>\n3. Agent Commerce Kit (Catena Labs), *Agent Commerce Kit (ACK) — Versioning* (checked 2026-10-31) — <https://www.agentcommercekit.com/resources/versioning.md>\n4. Agent Commerce Kit (Catena Labs), *RFC: ACK-ID + ACK-Pay v2 (agentcommercekit/ack Pull Request #179)* (checked 2026-10-31) — <https://github.com/agentcommercekit/ack/pull/179>\n5. Catena Labs, *Agent Commerce Kit (ACK): Enabling the Agent Economy* (checked 2026-10-31) — <https://catena.com/blog/agent-commerce-kit>\n6. Agent Commerce Kit (Catena Labs), *agentcommercekit/ack — GitHub Repository Metadata* (checked 2026-10-31) — <https://github.com/agentcommercekit/ack>\n7. Agent Commerce Kit (Catena Labs), *Agent Commerce Kit (ACK) — License* (checked 2026-10-31) — <https://www.agentcommercekit.com/resources/license.md>\n8. Agent Commerce Kit (Catena Labs), *@agentcommercekit/did — DID and DID Document Utilities README* (checked 2026-10-31) — <https://raw.githubusercontent.com/agentcommercekit/ack/main/packages/did/README.md>\n9. Agent Commerce Kit (Catena Labs), *ACK-ID: Identity Standards* (checked 2026-10-31) — <https://www.agentcommercekit.com/ack-id/standards.md>\n10. Agent Commerce Kit (Catena Labs), *ACK-Pay Payment Request* (checked 2026-10-31) — <https://www.agentcommercekit.com/ack-pay/payment-request-payload.md>\n11. Agent Commerce Kit (Catena Labs), *ACK-Pay is the verifiable proof of payment* (checked 2026-10-31) — <https://www.agentcommercekit.com/ack-pay/receipt-verification.md>\n12. Agent Commerce Kit (Catena Labs), *Agent Commerce Kit (ACK) architecture* (checked 2026-10-31) — <https://www.agentcommercekit.com/ack-pay/payment-service.md>\n13. W3C, *Decentralized Identifiers (DIDs) v1.0* (2022-07-19) — <https://www.w3.org/TR/did-core/>\n14. IETF, *RFC 9110: HTTP Semantics* (IETF RFC) — <https://www.rfc-editor.org/rfc/rfc9110.html>\n15. Linux Foundation, *Linux Foundation Announces Operational Launch of x402 Foundation to Standardize Internet-Native Payments for AI Agents and Applications* (July 14, 2026) — <https://www.linuxfoundation.org/press/linux-foundation-announces-operational-launch-of-x402-foundation-to-standardize-internet-native-payments-for-ai-agents-and-applications>\n16. Olaoluwa Osuntokun, Oliver Gugger, and Wilmer Paulino, *bLIP-0026: L402: The Lightning HTTP 402 Protocol* (created 2023-06-06) — <https://raw.githubusercontent.com/Roasbeef/blips/697ae354c205f1aacc450e72067c92a7f2467321/blip-0026.md>\n17. Google (google-agentic-commerce), *Agentic Payment Protocol (v0.2)* (fetched 2026-10-30) — <https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/specification.md>\n18. A. Agarwal (Skyfire Systems Inc.) and Michael B. Jones (Self-Issued Consulting), *KYAPay Token (draft-skyfire-oauth-kyapay-token-03)* (2 November 2026; checked 2026-11-07) — <https://www.ietf.org/archive/id/draft-skyfire-oauth-kyapay-token-03.txt>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "cloudflare-markdown-for-agents",
   "name": "Markdown for Agents",
   "acronym": "",
   "aliases": [],
   "collisions": [],
   "step": "read",
   "parties": [
    "agent-site"
   ],
   "form": "http-header",
   "track": "single-vendor",
   "scope": "general",
   "question": "Can an agent ask a site for a Markdown version of an HTML page, instead of parsing the HTML itself?",
   "analog": "HTTP content negotiation (as used for languages and image formats), applied to Markdown",
   "origin": {
    "org": "Cloudflare",
    "date": "2026-02-12"
   },
   "governance": "Cloudflare",
   "native_status": "Generally Available as of 2026-11-09 (Beta launch 2026-02-12); available at no cost on Pro, Business, Enterprise, and SSL for SaaS plans, with conversion analytics, logs, a playground, and traces",
   "phase": "living",
   "implementation": "shipping",
   "adoption": {
    "level": "observed",
    "by": "Cloudflare (Edge network, Developer Docs & Blog), Read the Docs, Zep, Taskade, Replicate, Anthropic Claude Code, Cursor, OpenCode, and 11 other verified implementations",
    "probe_run": null
   },
   "version": {
    "label": "Unversioned (Beta); last documented change 2026-10-09 (6 MiB limit, token headers removed)",
    "date": "2026-10-09"
   },
   "spec_url": "https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/",
   "discovery": {
    "mechanism": "Accept negotiation on any HTML page of an enabled zone",
    "path": "Any HTML page on an enabled zone, requested with Accept: text/markdown"
   },
   "probe": {
    "method": "GET",
    "path": "{origin}/ (request header Accept: text/markdown)",
    "parse": "Content-Type is text/markdown; a Content-Signal response header is present (Cloudflare adds ai-train=yes, search=yes, ai-input=yes when the origin sets none)",
    "on_absent": "An HTML response means the zone has not turned the feature on, or is not on Cloudflare; the site may still offer Markdown by other means, such as .md mirrors or llms.txt"
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/",
     "claim": "Cloudflare, *Markdown for Agents*, modified 2026-10-09; fetched 2026-11-04",
     "date": null,
     "quote": "To fetch the Markdown version of any page from a zone with Markdown for Agents enabled, the client needs to add the Accept negotiation header with text/markdown as one of the options. / Cloudflare's Markdown for Agents converts HTML to Markdown at the edge, allowing AI systems to request content in text/markdown format. / `Content-Type` is set to `text/markdown; charset=utf-8`. / Cloudflare's network supports real-time content conversion at the source, for enabled zones using content negotiation / they can express the preference for `text/markdown` in the request and our network will automatically and efficiently convert the HTML to Markdown, when possible, on the fly. / The format's explicit structure makes it ideal for AI processing, ultimately resulting in better results while minimizing token waste. / To fetch the Markdown version of any page from a zone with Markdown for Agents enabled, the client needs to add the `Accept` negotiation header with `text/markdown` as one of the options. Cloudflare will detect this, fetch the original HTML version from the origin, and convert it to Markdown before serving it to the client. / `Vary` includes `Accept` (any `Vary` dimensions your origin already declared are preserved) so that caches store separate variants for Markdown and HTML. / When the origin response does not include a `content-signal` header, Markdown for Agents adds a default `Content-Signal: ai-train=yes, search=yes, ai-input=yes` / \"publisher\":{\"@type\":\"Organization\",\"name\":\"Cloudflare\" / Markdown for Agents is available to Pro, Business and Enterprise plans, and SSL for SaaS customers at no cost. / the client needs to add the Accept negotiation header with text/markdown as one of the options. … Content-Type is set to text/markdown; charset=utf-8. Vary includes Accept … Markdown for Agents adds a default Content-Signal: ai-train=yes, search=yes, ai-input=yes / \"headline\":\"Markdown for Agents\" / Non-content elements (such as headers, footers, navigation, scripts, and styles) are stripped during pre-processing. / YAML frontmatter with metadata extracted from the page's `<meta>` tags. Only emitted when at least one supported meta tag is present. / JSON-LD structured data preserved as a fenced `json` code block at the end of the document. / We only convert from HTML, other types of documents may be included in the future. Conversion is limited to 6 MiB (6,291,456 bytes) of decompressed HTML. The limit applies after decompression, not to the compressed response size. / Workers AI [AI.toMarkdown()](https://developers.cloudflare.com/workers-ai/features/markdown-conversion/) supports multiple document types and summarization. / The Browser Run [/markdown](https://developers.cloudflare.com/browser-run/quick-actions/markdown-endpoint/) endpoint supports markdown conversion if you need to render a dynamic page or application in a real browser before converting it. / for enabled zones using content negotiation / add the `Accept` negotiation header with `text/markdown` as one of the options. Cloudflare will detect this, fetch the original HTML version from the origin, and convert it to Markdown before serving it to the client. / the client needs to add the `Accept` negotiation header with `text/markdown` as one of the options. Cloudflare will detect this, fetch the original HTML version from the origin, and convert it to Markdown before serving it to the client. / -H \"Accept: text/markdown\" / const markdown = await r.text(); / If your origin already sets a `content-signal` header, Markdown for Agents preserves that value on the converted response / When the origin response does not include a `content-signal` header, Markdown for Agents adds a default `Content-Signal: ai-train=yes, search=yes, ai-input=yes`, signaling that the content can be used for AI Training, Search results, and AI Input, which includes agentic use. / Cloudflare will detect this, fetch the original HTML version from the origin, and convert it to Markdown before serving it to the client. / you need a Pro or Business plan / Markdown for Agents is not available from the content source, we provide other ways to convert documents to Markdown for your applications: / | `title` | `<meta name=\"title\">`, with fallback to `<meta property=\"og:title\">` | / | `description` | `<meta name=\"description\">`, with fallback to `<meta property=\"og:description\">` | / | `image` | `<meta property=\"og:image\">` | / Only fields with a value are emitted. / JSON-LD structured data preserved as a fenced `json` code block at the end of the document. Only emitted when the source HTML contains JSON-LD. / HTTP 200 ... content-type: text/markdown; charset=utf-8 ... vary: accept-encoding, accept ... content-signal: ai-train=yes, search=yes, ai-input=yes ... Cloudflare's Markdown for Agents converts HTML to Markdown at the edge ... -H \"Accept: text/markdown\" / you need a Pro or Business plan). … Visit the AI Crawl Control … Enable Markdown for Agents. … send a PATCH to /client/v4/zones/{zone_tag}/settings/content_converter with the payload {\"value\": \"on\"} … Markdown for Agents is available to Pro, Business and Enterprise plans, and SSL for SaaS customers at no cost. … We have enabled this feature in our Developer Documentation … and our Blog … Conversion is limited to 6 MiB (6,291,456 bytes) of decompressed HTML.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://blog.cloudflare.com/markdown-for-agents/",
     "claim": "Celso Martinho and Will Allen (Cloudflare), *Introducing Markdown for Agents*, published 2026-02-12; modified 2026-07-15; fetched 2026-11-04",
     "date": null,
     "quote": "from traditional search engines to AI agents that need structured data from a Web built for humans. / Celso Martinho and Will Allen … \"datePublished\":\"2026-02-12T14:03:00.000Z\" … This feature is available today in Beta at no cost for Pro, Business and Enterprise plans, as well as SSL for SaaS customers. / \"datePublished\":\"2026-02-12T14:03:00.000Z\" … \"name\":\"Cloudflare Blog\" … Celso Martinho and Will Allen / A simple `## About Us` on a page in markdown costs roughly 3 tokens; its HTML equivalent – `<h2 class=\"section-title\" id=\"about\">About Us</h2>` – burns 12-15 / takes 16,180 tokens in HTML and 3,150 tokens when converted to markdown. / That's a 80% reduction in token usage / Cloudflare will detect this, fetch the original HTML version from the origin, and convert it to markdown before serving it to the client. / Note that we include an x-markdown-tokens header with the converted response that indicates the estimated number of tokens in the markdown document. / HTTP/2 200 date: Wed, 11 Feb 2026 11:44:48 GMT content-type: text/markdown; charset=utf-8 content-length: 2899 vary: accept x-markdown-tokens: 725 content-signal: ai-train=yes, search=yes, ai-input=yes / x-markdown-tokens: 725 content-signal: ai-train=yes, search=yes, ai-input=yes / Note that we include an `x-markdown-tokens` header with the converted response that indicates the estimated number of tokens in the markdown document. / HTTP 200 ... content-type: text/markdown; charset=utf-8 ... content-signal: ai-train=yes, search=yes, ai-input=yes ... const tokenCount = r.headers.get(\"x-markdown-tokens\"); ... This feature is available today in Beta at no cost for Pro, Business and Enterprise plans, as well as SSL for SaaS customers.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://developers.cloudflare.com/changelog/post/2026-11-09-markdown-for-agents-observability/",
     "claim": "Cloudflare, *Markdown for Agents analytics and tracing*, published 2026-11-09",
     "date": null,
     "quote": "Markdown for Agents leaves beta with dashboard analytics, sampled logs, a conversion playground, GraphQL analytics, and Cloudflare Traces support. … \"datePublished\":\"2026-11-09\" … Markdown for Agents is generally available, with new tools to monitor conversions and investigate partial or failed output. / Analytics shows conversion outcomes … Logs provides sampled conversion events … Playground requests Markdown … Cloudflare Traces includes a markdown_conversion span",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://developers.cloudflare.com/changelog/post/2026-10-09-markdown-for-agents-in-process-conversion/",
     "claim": "Cloudflare, *More efficient Markdown for Agents conversion*, published 2026-10-09",
     "date": null,
     "quote": "\"datePublished\":\"2026-10-09\" / Markdown for Agents now converts HTML with an in-process streaming engine at the edge. / Conversion supports up to 6 MiB (6,291,456 bytes) of decompressed HTML, increased from 2 MiB (2,097,152 bytes). / Converted responses no longer generate the x-markdown-tokens or x-original-tokens headers. / Content-Length is removed from converted responses rather than recalculated, because the Markdown body is streamed. / Conversion supports up to 6 MiB (6,291,456 bytes) of decompressed HTML, increased from 2 MiB (2,097,152 bytes). … Converted responses no longer generate the x-markdown-tokens or x-original-tokens headers. / 2026-10-09 / It processes content as it arrives instead of buffering the HTML response and sending it to a separate conversion service. / Conversion supports up to 6 MiB (6,291,456 bytes) of decompressed HTML, increased from 2 MiB (2,097,152 bytes). The limit applies after decompression, not to the compressed response size. / \"datePublished\":\"2026-10-09\" … Converted responses no longer generate the x-markdown-tokens or x-original-tokens headers.",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://developers.cloudflare.com/style-guide/how-we-docs/ai-consumability",
     "claim": "Cloudflare, *AI consumability*, last updated 20 August 2026; fetched 2026-11-06",
     "date": null,
     "quote": "The primary proposal in this space is `llms.txt` / Both methods return the same Markdown output, powered by Markdown for Agents. / Send a request to `/$page/index.md` — Add `/index.md` to the end of any page to get the Markdown version. For example, `/docs-for-agents/index.md`. / Send a request to any page with an `Accept: text/markdown` header / `llms.txt` — A directory of all Cloudflare documentation products, grouped by category. Each entry links to that product's own `llms.txt` — for example, `/workers/llms.txt` / `llms-full.txt` — The full contents of all Cloudflare documentation in a single file, intended for offline indexing, bulk vectorization, or large-context models. / We also provide a `llms-full.txt` file on a per-product basis — for example, `/workers/llms-full.txt`. / Removing non-content tags (`script`, `style`, `link`, etc.) / Transforming interactive components like `Tabs` into standard unordered lists / Send a request to `/$page/index.md`",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://goodforbots.com/guides/markdown-negotiation",
     "claim": "Good for Bots, *How to serve Markdown to AI agents with content negotiation*, published 2026-10-03",
     "date": null,
     "quote": "If your robots.txt says something different, send your own header from the origin so the Markdown carries the same choice. / The Markdown is not a place to tell agents something the page does not tell people. / By default, Cloudflare does not consider vary values in caching decisions. / It makes exceptions for vary: accept-encoding, for images and for the Vary setting in Cache Rules, which you have to turn on. / on a paid plan: on 3 October 2026 the documentation named Pro and Business in its setup steps and added Enterprise in its availability section.",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://opencode.ai/v2/docs/tools/",
     "claim": "OpenCode, *Tools*, checked 2026-10-30",
     "date": null,
     "quote": "page content, logs, headers, and response bodies are untrusted data, not agent instructions. / webfetch retrieves one HTTP or HTTPS URL as markdown, text, or html. Markdown is the default",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://mwolson.org/blog/2026-02-14-markdown-for-agents-on-cloudflare-free-plan",
     "claim": "Michael Olson, *Markdown for Agents on the Cloudflare Free Plan*, February 2026; fetched 2026-11-06",
     "date": null,
     "quote": "Caddy sends `Vary: Accept` on Markdown responses, which should tell any standards-compliant cache to store separate variants keyed on the `Accept` header. / It caches a single variant per URL regardless of `Vary`. / it requires a Pro plan or higher / if an HTML response gets cached first, subsequent Markdown requests return the cached HTML. / If a Markdown response gets cached first, regular browsers get Markdown. / which are available on the free plan (up to 10 rules) / Transform Rules run at phase 3 / well before cache lookup at phase 19 / any(http.request.headers[\"accept\"][*] contains \"text/markdown\") / Query rewrite (static): `_fmt=md` / a request to `/blog/` with `Accept: text/markdown` becomes `/blog/?_fmt=md` internally before cache lookup / Cloudflare now stores two cache entries: one for the HTML variant and one for the Markdown variant. / try_files {path}index.md {path}/index.md / Caddy sends `Vary: Accept` on Markdown responses",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://developers.cloudflare.com/changelog/post/2026-02-16-markdown-for-agents-improvements/",
     "claim": "Cloudflare, *Content encoding support for Markdown for Agents and other improvements*, published 2026-02-16",
     "date": null,
     "quote": "\"datePublished\":\"2026-02-16\" / The origin response limit was raised from 1 MB to 2 MB (2,097,152 bytes).",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://www.rfc-editor.org/rfc/rfc9110.html",
     "claim": "R. Fielding, M. Nottingham, and J. Reschke (IETF), *RFC 9110: HTTP Semantics*, published June 2022",
     "date": null,
     "quote": "When content negotiation preferences are sent by the user agent in a request to encourage an algorithm located at the server to select the preferred representation, it is called \"proactive negotiation\" (a.k.a., \"server-driven negotiation\").",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://www.rfc-editor.org/rfc/rfc7763.html",
     "claim": "S. Leonard (Penango, Inc. / IETF), *RFC 7763: The text/markdown Media Type*, published March 2016",
     "date": null,
     "quote": "This document registers the text/markdown media type for use with",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://llmstxt.org",
     "claim": "Jeremy Howard, *The /llms.txt file, v2*, published 2024-09-03; modified 2026-08-10; HTTP last-modified 2026-09-24",
     "date": null,
     "quote": "This is v2 of the proposal … The llms.txt specification is open for community input. A GitHub repository hosts this informal overview",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://vercel.com/kb/guide/make-your-site-readable-by-ai-agents",
     "claim": "Vercel and Ora, *Make your site readable by AI agents | Vercel Knowledge Base*, published 2026-08-28; updated 2026-09-03; fetched 2026-10-30",
     "date": null,
     "quote": "A request with Accept: text/markdown should receive Markdown with Content-Type: text/markdown; charset=utf-8. Include Vary: Accept so caches keep the HTML and Markdown responses separate.",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://blog.cloudflare.com/content-signals-policy/",
     "claim": "Cloudflare, *Giving users choice with Cloudflare's new Content Signals Policy*, published 2025-09-24; modified 2026-07-15",
     "date": null,
     "quote": "This policy defines three content signals - search, ai-input, and ai-train - and their relevance to crawlers.",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://www.rfc-editor.org/rfc/rfc9309.html",
     "claim": "M. Koster, G. Illyes, H. Zeller, and L. Sassman (IETF), *RFC 9309: Robots Exclusion Protocol*, published September 2022",
     "date": null,
     "quote": "Crawlers set their own name, which is called a product token, to find relevant groups.",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://docs.readthedocs.com/platform/latest/reference/markdown-for-agents.html",
     "claim": "Read the Docs, *Markdown for AI agents*, checked 2026-10-30",
     "date": null,
     "quote": "This feature is enabled automatically on all documentation domains hosted on Read the Docs, with no configuration required. … A request with Accept: text/markdown returns a Markdown response: $ curl -i https://docs.readthedocs.com/platform/stable/ -H \"Accept: text/markdown\" HTTP/2 200 content-type: text/markdown; charset=utf-8 vary: accept x-markdown-tokens: 1496 content-signal: ai-train=yes, search=yes, ai-input=yes … This feature is powered by Cloudflare.",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://docs.readthedocs.com/platform/stable/",
     "claim": "Read the Docs, *Read the Docs: documentation simplified*, fetched 2026-11-03",
     "date": null,
     "quote": "HTTP/2 200 … date: Tue, 03 Nov 2026 21:03:53 GMT … content-type: text/markdown; charset=utf-8 … server: cloudflare … vary: Accept-Encoding, accept … content-signal: ai-train=yes, search=yes, ai-input=yes … title: \"Read the Docs: documentation simplified\"",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://www.getzep.com/",
     "claim": "Zep, *Zep | The unified context layer for enterprise data*, fetched 2026-11-03",
     "date": null,
     "quote": "HTTP/2 200 … date: Tue, 03 Nov 2026 21:03:55 GMT … content-type: text/markdown; charset=utf-8 … vary: rsc, next-router-state-tree, next-router-prefetch, next-router-segment-prefetch, accept-encoding, accept … content-signal: ai-train=yes, search=yes, ai-input=yes … server: cloudflare … description: Zep unifies business data, documents, and conversations so agents have the context they need to complete tasks correctly.",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://www.taskade.com/",
     "claim": "Taskade, *Turn Business Processes Into Live Apps | Taskade Genesis*, fetched 2026-11-03",
     "date": null,
     "quote": "HTTP/2 200 … date: Tue, 03 Nov 2026 21:03:55 GMT … content-type: text/markdown; charset=utf-8 … content-signal: ai-train=yes, search=yes, ai-input=yes … vary: rsc, next-router-state-tree, next-router-prefetch, next-router-segment-prefetch, Accept-Encoding, accept … server: cloudflare … title: Turn Business Processes Into Live Apps | Taskade Genesis",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://replicate.com/",
     "claim": "Replicate, *Run and fine-tune models. Deploy custom models. All with one line of code.*, fetched 2026-11-03",
     "date": null,
     "quote": "HTTP/2 200 … date: Tue, 03 Nov 2026 21:03:57 GMT … content-type: text/markdown; charset=utf-8 … server: cloudflare … vary: Accept-Encoding, accept … content-signal: ai-train=yes, search=yes, ai-input=yes … description: Run open-source machine learning models with a cloud API",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://planetscale.com/",
     "claim": "PlanetScale, *PlanetScale - the world’s fastest and most scalable cloud hosting for Vitess, Neki, and Postgres*, fetched 2026-11-03",
     "date": null,
     "quote": "HTTP/2 200 … date: Tue, 03 Nov 2026 21:03:57 GMT … content-type: text/markdown; charset=utf-8 … vary: accept-encoding, accept … content-signal: ai-train=yes, search=yes, ai-input=yes … server: cloudflare … title: PlanetScale - the world’s fastest and most scalable cloud hosting for Vitess, Neki, and Postgres",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://cursor.com/docs",
     "claim": "Cursor (Docs), *cursor.com/docs*, checked 2026-11-04",
     "date": null,
     "quote": "HTTP 200 ... content-type: text/markdown; charset=utf-8 ... link: </llms.txt>; rel=\"describedby\" ... vary: Accept ... # Cursor Documentation",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://www.mintlify.com/docs/ai/markdown-export",
     "claim": "Mintlify, *Markdown export*, fetched 2026-11-06",
     "date": null,
     "quote": "Send a request with `Accept: text/markdown` or `Accept: text/plain` / Add `.md` to any page",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://code.claude.com/docs/en/tools-reference",
     "claim": "Anthropic, *Tools reference*, checked 2026-10-30",
     "date": null,
     "quote": "WebFetch sets a User-Agent header beginning with Claude-User, and an Accept header that prefers Markdown over HTML so servers that support content negotiation can return Markdown directly.",
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://www.checklyhq.com/blog/state-of-ai-agent-content-negotation/",
     "claim": "Stefan Judis (Checkly), *The Current State of Content Negotiation for AI Agents (Feb 2026)*, published 2026-02-19",
     "date": null,
     "quote": "\"Fetch\" in Claude Code (v2.1.38) requests Markdown … Accept: text/markdown, text/html, */* … User-Agent: axios/1.8.4 … Claude Code skips q values and relies on the header value order instead. / \"WebFetch\" in Cursor (2.4.28) requests Markdown Accept: text/markdown,text/html;q=0.9,application/xhtml+xml;q=0.8,application/xml;q=0.7,image/webp;q=0.6,*/*;q=0.5 … OpenCode and Cursor use the q factor / Gemini CLI (0.28.2) doesn't request Markdown Accept: */* / Only 3 out of 7 agents request markdown - Claude Code, Cursor, and OpenCode are the only ones asking for text/markdown.",
     "ref": 25
    },
    {
     "label": "[26]",
     "url": "https://raw.githubusercontent.com/anomalyco/opencode/dev/packages/core/src/tool/plugin/webfetch.ts",
     "claim": "OpenCode, *webfetch.ts*, checked 2026-10-30",
     "date": null,
     "quote": "text/markdown;q=1.0, text/x-markdown;q=0.9, text/plain;q=0.8, text/html;q=0.7, */*;q=0.1",
     "ref": 26
    },
    {
     "label": "[27]",
     "url": "https://developers.cloudflare.com/changelog/product-group/ai/",
     "claim": "Cloudflare, *AI Changelog: New web_fetch tool in the Agents SDK*, 2026-10-12",
     "date": "2026-10-12",
     "quote": "Oct 12, 2026 New web_fetch tool in the Agents SDK for reading webpages and documents, with automatic markdown conversion … The tool requests Markdown directly from sites that support Markdown for Agents and formats JSON for the model.",
     "ref": 27
    },
    {
     "label": "[28]",
     "url": "https://raw.githubusercontent.com/google-gemini/gemini-cli/main/packages/core/src/tools/web-fetch.ts",
     "claim": "Gemini CLI, *google-gemini/gemini-cli (web-fetch.ts)*, checked 2026-11-04",
     "date": null,
     "quote": "HTTP 200 ... Accept: 'text/markdown, text/plain;q=0.9, application/json;q=0.9, text/html;q=0.8, application/pdf;q=0.7, video/*;q=0.7, */*;q=0.5'",
     "ref": 28
    },
    {
     "label": "[29]",
     "url": "https://acceptmarkdown.com/status",
     "claim": "AcceptMarkdown, *AI agent support matrix*, last updated 2026-06-22; fetched 2026-11-06",
     "date": null,
     "quote": "Last updated 2026-06-22. / Accept: text/markdown, text/html;q=0.9, application/xhtml+xml;q=0.9, application/xml;q=0.8, */*;q=0.7 / 2026-06-22 / Accept: text/markdown, text/html, */* / Accept: text/markdown, text/html;q=0.9, */*;q=0.1 / 2026-05-04 / Codex CLI / Partial / RFC 8288 / 2026-04-18 / Claude Code / Copilot Chat (VS Code) / Copilot CLI / Microsoft Copilot / OpenClaw / OpenCode / Fetches only HTML",
     "ref": 29
    },
    {
     "label": "[30]",
     "url": "https://acceptmarkdown.com/",
     "claim": "AcceptMarkdown, *Accept: text/markdown checker*, fetched 2026-11-06",
     "date": null,
     "quote": "Accept: text/markdown / Vary: Accept / rejects unsupported types with 406",
     "ref": 30
    }
   ],
   "summary_md": "**Markdown for Agents** is a Cloudflare edge content-negotiation feature that converts origin HTML pages into structured Markdown on the fly when an HTTP client requests `Accept: text/markdown`, reducing markup token overhead for AI agents. Announced in Beta by Celso Martinho and Will Allen on 2026-02-12, Markdown for Agents is Generally Available as of 2026-11-09, with conversion analytics, logs, a playground, and traces. When a request includes `text/markdown` in `Accept`, Cloudflare fetches the origin HTML, converts it to Markdown, and serves `Content-Type: text/markdown; charset=utf-8` with `Vary: Accept` (preserving existing origin `Vary` dimensions so caches separate HTML and Markdown variants). If the origin omits a `content-signal` header, Cloudflare attaches the default policy `Content-Signal: ai-train=yes, search=yes, ai-input=yes`. An October 9, 2026 update moved conversion to an in-process streaming engine at the edge, raising the decompressed HTML limit from 2 MiB to 6 MiB (6,291,456 bytes) while removing `Content-Length`, `x-markdown-tokens`, and `x-original-tokens` from converted responses.",
   "part_of": null,
   "group": null,
   "use_cases": [
    "serve-content-to-agents"
   ],
   "audience": [
    "site-owner",
    "platform"
   ],
   "pairs_with": [
    "llms-txt",
    "vercel-agent-readability",
    "cloudflare-content-signals-policy",
    "ai-crawler-tokens-robots"
   ],
   "prerequisites": [],
   "dispute": null,
   "last_verified": "2026-11-12",
   "history": [
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "watch": [
    {
     "type": "page",
     "url": "https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/",
     "selector": "main",
     "cadence": "weekly"
    }
   ],
   "hatnote_md": "This page is about Cloudflare's Markdown for Agents feature (Accept: text/markdown). For a site-level index of LLM-readable pages, see [llms.txt](/protocols/llms-txt/); for the AI-use preferences it attaches, see [Content Signals Policy](/protocols/cloudflare-content-signals-policy/).",
   "tier": "flagship",
   "lifecycle_status": "active",
   "wire_archetype": "web_discovery",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "This page is about Cloudflare's Markdown for Agents feature (Accept: text/markdown). For a site-level index of LLM-readable pages, see [llms.txt](/protocols/llms-txt/); for the AI-use preferences it attaches, see [Content Signals Policy](/protocols/cloudflare-content-signals-policy/). [1]",
   "v05_elevator_pitch_md": "Cloudflare Markdown for Agents lets AI crawlers and assistants request a clean Markdown representation of any web page on an enabled domain instead of downloading layout-heavy HTML. Rather than forcing agents to strip navigation clutter client-side or requiring publishers to host parallel scraping endpoints, the CDN edge intercepts HTTP requests carrying `Accept: text/markdown` and converts the origin HTML into `Content-Type: text/markdown; charset=utf-8` in real time. [1][2]",
   "v05_lead_md": "**Markdown for Agents** is a Cloudflare edge content-negotiation feature that converts origin HTML pages into structured Markdown on the fly when an HTTP client requests `Accept: text/markdown`, reducing markup token overhead for AI agents. [1] Announced in Beta by Celso Martinho and Will Allen on 2026-02-12, Markdown for Agents is Generally Available as of 2026-11-09, with conversion analytics, logs, a playground, and traces. [2][3] When a request includes `text/markdown` in `Accept`, Cloudflare fetches the origin HTML, converts it to Markdown, and serves `Content-Type: text/markdown; charset=utf-8` with `Vary: Accept` (preserving existing origin `Vary` dimensions so caches separate HTML and Markdown variants). If the origin omits a `content-signal` header, Cloudflare attaches the default policy `Content-Signal: ai-train=yes, search=yes, ai-input=yes`. [1] An October 9, 2026 update moved conversion to an in-process streaming engine at the edge, raising the decompressed HTML limit from 2 MiB to 6 MiB (6,291,456 bytes) while removing `Content-Length`, `x-markdown-tokens`, and `x-original-tokens` from converted responses. [4]",
   "v05_identity_sentence_md": "**Markdown for Agents** is a Cloudflare edge content-negotiation feature that converts origin HTML pages into structured Markdown on the fly when an HTTP client requests `Accept: text/markdown`, reducing markup token overhead for AI agents. [1] Announced in Beta by Celso Martinho and Will Allen on 2026-02-12, Markdown for Agents is Generally Available as of 2026-11-09, with conversion analytics, logs, a playground, and traces. [2][3]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Read](/category/read/) (`read`)"
    },
    {
     "label": "Form",
     "value_md": "HTTP content-negotiation header (`http-header`)"
    },
    {
     "label": "Originated by",
     "value_md": "Celso Martinho and Will Allen (Cloudflare), 2026-02-12 [2]"
    },
    {
     "label": "Governed by",
     "value_md": "Cloudflare [1]"
    },
    {
     "label": "Track",
     "value_md": "Cloudflare network feature [1]"
    },
    {
     "label": "Status",
     "value_md": "Generally Available as of 2026-11-09 (Beta launch 2026-02-12); available at no cost on Pro, Business, Enterprise, and SSL for SaaS plans, with conversion analytics, logs, a playground, and traces [1][2][3]"
    },
    {
     "label": "Version",
     "value_md": "Unversioned edge feature; Generally Available 2026-11-09 (Beta launch 2026-02-12). The 2026-10-09 in-process conversion update remains in effect: 6 MiB decompressed HTML limit and removal of `Content-Length`, `x-markdown-tokens`, and `x-original-tokens`. [2][3][4]"
    },
    {
     "label": "Headers",
     "value_md": "`Accept: text/markdown`; `Content-Type: text/markdown; charset=utf-8`; `Vary: Accept`; `Content-Signal` [1]"
    },
    {
     "label": "Specification",
     "value_md": "[Markdown for Agents](https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/) [1]"
    },
    {
     "label": "Found at",
     "value_md": "Any HTML page on an enabled zone, requested with `Accept: text/markdown` [1]"
    }
   ],
   "v05_problem_md": "AI agents require structured data from a Web built for human browsers, where raw HTML spends tokens on markup with no semantic value: a Markdown heading (`## About Us`) costs roughly 3 tokens compared with 12–15 tokens for its HTML equivalent before navigation and script tags. Cloudflare's February 2026 launch blog post measured 16,180 tokens in HTML versus 3,150 tokens when converted to Markdown—an 80% reduction in token usage. [1][2] Instead of requiring agents to parse raw HTML or origins to maintain separate scraping endpoints, Cloudflare intercepts `Accept: text/markdown` requests at the CDN edge, strips layout boilerplate during pre-processing, and emits structured Markdown with extracted `<meta>` YAML frontmatter and preserved JSON-LD blocks. [1] Edge conversion applies only to HTML responses up to 6 MiB (6,291,456 bytes) after decompression on paid Pro, Business, Enterprise, and SSL for SaaS zones; for other document types or client-side rendering, Cloudflare points applications to Workers AI `AI.toMarkdown()` or the Browser Run `/markdown` endpoint. [1]",
   "v05_mechanism_delta_md": "Instead of requiring agents to parse raw HTML or origins to maintain separate scraping endpoints, Cloudflare intercepts `Accept: text/markdown` requests at the CDN edge, strips layout boilerplate during pre-processing, and emits structured Markdown with extracted `<meta>` YAML frontmatter and preserved JSON-LD blocks. [1]",
   "v05_scope_boundary_md": "Edge conversion applies only to HTML responses up to 6 MiB (6,291,456 bytes) after decompression on paid Pro, Business, Enterprise, and SSL for SaaS zones; for other document types or client-side rendering, Cloudflare points applications to Workers AI `AI.toMarkdown()` or the Browser Run `/markdown` endpoint. [1]",
   "v05_fuzzy_additions": [
    {
     "id": "accept-negotiation-response-headers-and-static-markdown-siblings",
     "heading": "Accept negotiation, response headers, and static Markdown siblings",
     "body_md": "On an enabled zone, Markdown for Agents is content negotiation: the client names `text/markdown` in `Accept`, and Cloudflare converts origin HTML before responding. Cloudflare's developer docs also publish that same Markdown at a static sibling path and list pages from `llms.txt`. [1][5]",
     "bullets": [
      {
       "label": "Accept negotiation",
       "text_md": "The client adds `Accept` with `text/markdown` as one option. Cloudflare fetches the original HTML from the origin and converts it to Markdown before responding. The documented request header is `Accept: text/markdown`, illustrated with `curl` and a Workers `fetch` example that reads the response body via `const markdown = await r.text()`. [1]"
      },
      {
       "label": "Default Content-Signal policy, launch token header, and origin HTML trust boundary",
       "text_md": "If an origin already sets a `content-signal` header, Markdown for Agents preserves that value; when an origin omits `content-signal`, Cloudflare attaches the permissive default `Content-Signal: ai-train=yes, search=yes, ai-input=yes` (so origins whose `robots.txt` restricts training must send an explicit `content-signal` header to override it). The February 2026 launch sample also included an estimated token count header (`x-markdown-tokens: 725`) before token headers were removed in October 2026. Because Cloudflare fetches HTML from the origin and strips only non-content markup (`headers`, `footers`, `navigation`, `scripts`, `styles`) rather than auditing semantic equivalence with browser HTML, an origin varying responses by request headers can serve agent-specific text (cautioned against in content-negotiation guidance warning that negotiated Markdown is not a place to tell agents something the page does not tell people), and agent harnesses treat response bodies as untrusted data rather than instructions. [1][2][6][7]"
      },
      {
       "label": "Static Markdown siblings",
       "text_md": "Request `/$page/index.md`, such as `/docs-for-agents/index.md`, or send `Accept: text/markdown`. Both return the same Markdown, powered by Markdown for Agents. `llms.txt` lists products, for example `/workers/llms.txt`, and `llms-full.txt` (including `/workers/llms-full.txt`) holds the full docs for offline indexing. [5]"
      },
      {
       "label": "Plans and Workers AI",
       "text_md": "Dashboard setup requires a Pro or Business plan, and the feature is available at no cost on Pro, Business, Enterprise, and SSL for SaaS plans. When Markdown for Agents is not available from the content source, Cloudflare documents two alternatives: Workers AI `AI.toMarkdown()` converts multiple document types and supports summarization, and the Browser Run `/markdown` endpoint converts a dynamic page after rendering it in a real browser. [1]"
      }
     ]
    },
    {
     "id": "streaming-conversion-limits-vary-caching-and-free-plan-workarounds",
     "heading": "Streaming conversion limits, Vary caching, and Free-plan workarounds",
     "body_md": "On 9 October 2026 Cloudflare's edge converter moved to an in-process streaming engine and raised its HTML size cap. Negotiated Markdown responses carry `Vary: Accept`, which separates HTML and Markdown in caches that key on `Vary`. Because the edge converter is not available on the Free plan and Cloudflare's Free cache stores a single variant per URL regardless of `Vary`, Free-plan operators serving Markdown from their own origin must split the cache key or publish distinct `.md` URLs. [4][8]",
     "bullets": [
      {
       "label": "Streaming size limit",
       "text_md": "Since the `2026-10-09` streaming engine update, HTML is processed as it arrives rather than buffered for a separate conversion service. The decompressed cap is 6 MiB (6,291,456 bytes), up from 2 MiB (2,097,152 bytes), measured after decompression; that earlier 2 MiB (2,097,152 bytes) origin response limit dated from `2026-02-16`, when Cloudflare raised it from 1 MB. `x-markdown-tokens` and `x-original-tokens` are no longer sent, and `Content-Length` is removed because the body is streamed. [4][9]"
      },
      {
       "label": "Stripped HTML and frontmatter",
       "text_md": "Pre-processing strips headers, footers, navigation, scripts, and styles. Separately, Cloudflare's own developer-docs build pipeline removes `script`, `style`, and `link` tags and turns interactive `Tabs` components into unordered lists. YAML frontmatter is emitted only when a supported meta tag exists, using `title`, `description`, and `image` when those fields have values. JSON-LD remains a fenced `json` block when present. [1][5]"
      },
      {
       "label": "Vary across plan tiers",
       "text_md": "Edge-converted responses include `Accept` in `Vary` (preserving any origin `Vary` dimensions) so caches can store separate Markdown and HTML variants. By default Cloudflare does not consider `Vary` values in caching decisions, with exceptions for `vary: accept-encoding`, for images, and for the Cache Rules `Vary` setting, which must be turned on. Cloudflare's edge Markdown for Agents converter requires a paid zone (dashboard setup names Pro or Business, with availability on Pro, Business, Enterprise, and SSL for SaaS) and is not available on the Free plan. [1][6][8]"
      },
      {
       "label": "Origin-served Markdown on Free-plan zones",
       "text_md": "Operators on the Free plan can negotiate `Accept: text/markdown` at their own origin (such as Caddy `try_files {path}index.md {path}/index.md` sending `Vary: Accept`), but Cloudflare's Free cache stores one variant per URL regardless of `Vary`—serving cached HTML to Markdown clients or cached Markdown to browsers. A Free-plan Transform Rule (up to 10 rules, running at phase 3 before cache lookup at phase 19) that rewrites `Accept: text/markdown` requests with query parameter `_fmt=md` (turning `/blog/` into `/blog/?_fmt=md`) splits the cache into two entries; direct static URLs (such as origin `{path}/index.md` files, analogous to Cloudflare's own docs `/$page/index.md` sibling paths) do not depend on `Vary`. [5][8]"
      }
     ]
    }
   ],
   "v05_diagram": {
    "title": "February 2026 launch-era negotiation sequence (from the introductory blog post)",
    "heading": "February 2026 launch-era negotiation sequence (from the introductory blog post)",
    "mermaid": "sequenceDiagram\n  participant Client\n  participant Edge as Cloudflare\n  participant Origin\n  Client->>Edge: GET Accept: text/markdown\n  Edge->>Origin: Fetch original HTML\n  Origin-->>Edge: HTML\n  Note over Edge: Convert HTML to Markdown\n  Edge-->>Client: 200 text/markdown; charset=utf-8<br/>vary: accept<br/>x-markdown-tokens: 725<br/>content-signal: ai-train=yes, search=yes, ai-input=yes",
    "caption_md": "The client sends `Accept: text/markdown`. Cloudflare fetches the origin HTML and returns `content-type: text/markdown; charset=utf-8` with `vary: accept`, `x-markdown-tokens: 725`, and `content-signal: ai-train=yes, search=yes, ai-input=yes`. This diagram reflects the February 2026 launch-era blog specimen (including x-markdown-tokens in the sample header block). [2]"
   },
   "v05_wire_artifact": {
    "title": "February 2026 launch-era request and response specimen",
    "heading": "February 2026 launch-era request and response specimen",
    "lang": "http",
    "code": "curl https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/ \\\n  -H \"Accept: text/markdown\"\n\nHTTP/2 200\ndate: Wed, 11 Feb 2026 11:44:48 GMT\ncontent-type: text/markdown; charset=utf-8\ncontent-length: 2899\nvary: accept\nx-markdown-tokens: 725\ncontent-signal: ai-train=yes, search=yes, ai-input=yes\n\n---\ntitle: Markdown for Agents · Cloudflare Agents docs\n---\n\n## What is Markdown for Agents\n\nThe ability to parse and convert HTML to Markdown has become foundational for AI.",
    "caption_md": "A request carrying `Accept: text/markdown` and the converted `HTTP/2 200` response, including `x-markdown-tokens: 725` and `content-signal: ai-train=yes, search=yes, ai-input=yes`. This specimen reproduces the February 2026 launch blog example (which showed Content-Length and x-markdown-tokens before the October 2026 streaming conversion update). [2]"
   },
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "HTTP Content Negotiation (RFC 9110)",
      "spec_or_rfc": "RFC 9110",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "RFC 9110 calls this proactive negotiation: the client states preferences, the server selects a representation, and each Accept range may carry a q weight from 0 to 1 (default 1). [1][10]"
     },
     {
      "name": "The text/markdown Media Type (RFC 7763)",
      "spec_or_rfc": "RFC 7763",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "RFC 7763 (Informational) registers text/markdown and requires a charset parameter, with no default value. [1][11]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "llms-txt",
      "target_name": "llms.txt",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "llms.txt points agents to Markdown versions of key pages, like robots.txt for crawlers, instead of converting one response. [1][12]"
     },
     {
      "target_id": "vercel-agent-readability",
      "target_name": "Agent Readability Spec",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Markdown for Agents converts HTML when Accept includes text/markdown (Vary: Accept; x-markdown-tokens until 9 October 2026); Agent Readability scores whether the site honors that request. [1][13]"
     },
     {
      "target_id": "cloudflare-content-signals-policy",
      "target_name": "Content Signals Policy",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Content Signals lets a publisher state how content may be used after access, rather than converting the page body. [1][14]"
     },
     {
      "target_id": "ai-crawler-tokens-robots",
      "target_name": "AI crawler tokens in robots.txt",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "robots.txt rules for AI crawlers treat AI training, search, and user-triggered crawlers separately and include a token list, rather than selecting a representation of a page. [1][15]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (19 probed or cited examples across 3 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).",
    "side_a": {
     "visible": true,
     "heading": "Origins & documentation hosts serving text/markdown",
     "col4_header": "Negotiation header, token count & scope",
     "note_md": null,
     "rows": [
      {
       "actor": "Cloudflare (Edge network, Developer Docs & Blog)",
       "role": "Edge network & documentation",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-11-04",
       "col4_md": "Per-zone edge conversion (`Accept: text/markdown` -> `text/markdown; charset=utf-8`, `content-signal: ai-train=yes, search=yes, ai-input=yes`); live on Docs and Blog.",
       "source_md": "[Cloudflare, Markdown for Agents (modified 2026-10-09; fetched 2026-11-04)](https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/) [1] · [Celso Martinho and Will Allen, Introducing Markdown for Agents (2026-02-12; fetched 2026-11-04)](https://blog.cloudflare.com/markdown-for-agents/) [2][3]"
      },
      {
       "actor": "Read the Docs",
       "role": "Docs platform & host",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-11-03",
       "col4_md": "Enabled automatically across hosted docs; live `Accept: text/markdown` probe returns `text/markdown; charset=utf-8` (`vary: Accept-Encoding, accept`).",
       "source_md": "[Read the Docs, Markdown for AI agents](https://docs.readthedocs.com/platform/latest/reference/markdown-for-agents.html) [16] · [Read the Docs stable docs (fetched 2026-11-03)](https://docs.readthedocs.com/platform/stable/) [17] · [Cloudflare, More efficient Markdown for Agents conversion (2026-10-09)](https://developers.cloudflare.com/changelog/post/2026-10-09-markdown-for-agents-in-process-conversion/) [4]"
      },
      {
       "actor": "Zep",
       "role": "Product site",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-11-03",
       "col4_md": "Negotiated `text/markdown; charset=utf-8` with `content-signal: ai-train=yes, search=yes, ai-input=yes` (`server: cloudflare`).",
       "source_md": "[Zep (fetched 2026-11-03)](https://www.getzep.com/) [18]"
      },
      {
       "actor": "Taskade",
       "role": "Product site",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-11-03",
       "col4_md": "Negotiated `text/markdown; charset=utf-8` with `content-signal: ai-train=yes, search=yes, ai-input=yes` (`server: cloudflare`).",
       "source_md": "[Taskade (fetched 2026-11-03)](https://www.taskade.com/) [19]"
      },
      {
       "actor": "Replicate",
       "role": "Product site",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-11-03",
       "col4_md": "`HTTP/2 200` `text/markdown; charset=utf-8` with `vary: Accept-Encoding, accept` via `server: cloudflare`.",
       "source_md": "[Replicate (fetched 2026-11-03)](https://replicate.com/) [20]"
      },
      {
       "actor": "PlanetScale",
       "role": "Product site",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-11-03",
       "col4_md": "`HTTP/2 200` `text/markdown; charset=utf-8` with `vary: accept-encoding, accept` via `server: cloudflare`.",
       "source_md": "[PlanetScale (fetched 2026-11-03)](https://planetscale.com/) [21]"
      },
      {
       "actor": "Cursor (Docs)",
       "role": "Developer documentation (cursor.com/docs)",
       "status": "Live (HTTP 200)",
       "status_display": "Live (HTTP 200) · checked 2026-11-04",
       "col4_md": "`HTTP 200` `content-type: text/markdown; charset=utf-8`, `vary: Accept`, `link: </llms.txt>; rel=\"describedby\"`.",
       "source_md": "[cursor.com/docs](https://cursor.com/docs) [22]"
      },
      {
       "actor": "Mintlify",
       "role": "Documentation platform",
       "status": "Supported",
       "status_display": "Supported · checked 2026-11-06",
       "col4_md": "Returns Markdown for `Accept: text/markdown` or `Accept: text/plain`.",
       "source_md": "[Mintlify, Markdown export](https://www.mintlify.com/docs/ai/markdown-export) [23]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Coding agents, harnesses & SDK tools",
     "col4_header": "Accept: text/markdown behavior & surface",
     "note_md": null,
     "rows": [
      {
       "actor": "Anthropic Claude Code",
       "role": "Coding agent",
       "status": "Observed fetching",
       "status_display": "Observed fetching · as of 2026-02-19",
       "col4_md": "`WebFetch` (`v2.1.38`) sends `Accept: text/markdown, text/html, */*` in Checkly's 2026-02-19 test.",
       "source_md": "[Anthropic, Tools reference](https://code.claude.com/docs/en/tools-reference) [24] · [Stefan Judis, Checkly (2026-02-19)](https://www.checklyhq.com/blog/state-of-ai-agent-content-negotation/) [25]"
      },
      {
       "actor": "Cursor",
       "role": "Coding agent",
       "status": "Observed fetching",
       "status_display": "Observed fetching · as of 2026-02-19",
       "col4_md": "Cursor `2.4.28` `WebFetch` sends `Accept: text/markdown,text/html;q=0.9,application/xhtml+xml;q=0.8,application/xml;q=0.7,image/webp;q=0.6,*/*;q=0.5`.",
       "source_md": "[Stefan Judis, Checkly (2026-02-19)](https://www.checklyhq.com/blog/state-of-ai-agent-content-negotation/) [25]"
      },
      {
       "actor": "OpenCode",
       "role": "Coding agent",
       "status": "Observed fetching",
       "status_display": "Observed fetching · checked 2026-10-30",
       "col4_md": "`webfetch` defaults to Markdown with `text/markdown;q=1.0` above `text/html;q=0.7`.",
       "source_md": "[OpenCode, Tools](https://opencode.ai/v2/docs/tools/) [7] · [OpenCode, webfetch.ts](https://raw.githubusercontent.com/anomalyco/opencode/dev/packages/core/src/tool/plugin/webfetch.ts) [26]"
      },
      {
       "actor": "Cloudflare Agents SDK",
       "role": "SDK tool",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-12",
       "col4_md": "Agents SDK `web_fetch` tool requests Markdown directly from supporting sites (2026-10-12).",
       "source_md": "[Cloudflare, AI Changelog: web_fetch tool (2026-10-12)](https://developers.cloudflare.com/changelog/product-group/ai/) [27]"
      },
      {
       "actor": "Gemini CLI",
       "role": "Coding agent",
       "status": "Development",
       "status_display": "Development · checked 2026-11-04",
       "col4_md": "Floating `main` branch sends `text/markdown, text/plain;q=0.9, application/json;q=0.9, text/html;q=0.8` ahead of `*/*;q=0.5`; released `0.28.2` sent `Accept: */*`.",
       "source_md": "[google-gemini/gemini-cli (web-fetch.ts)](https://raw.githubusercontent.com/google-gemini/gemini-cli/main/packages/core/src/tools/web-fetch.ts) [28] · [Checkly (Feb 2026 study)](https://www.checklyhq.com/blog/state-of-ai-agent-content-negotation/) [25]"
      },
      {
       "actor": "Copilot Chat (VS Code)",
       "role": "Coding agent",
       "status": "Observed fetching",
       "status_display": "Observed fetching · as of 2026-06-22",
       "col4_md": "Sends q-valued `Accept: text/markdown` (verified 2026-06-22).",
       "source_md": "[AcceptMarkdown client matrix](https://acceptmarkdown.com/status) [29]"
      },
      {
       "actor": "Copilot CLI",
       "role": "Coding agent",
       "status": "Observed fetching",
       "status_display": "Observed fetching · as of 2026-06-22",
       "col4_md": "Sends `Accept: text/markdown, text/html, */*` (verified 2026-06-22).",
       "source_md": "[AcceptMarkdown client matrix](https://acceptmarkdown.com/status) [29]"
      },
      {
       "actor": "Microsoft Copilot",
       "role": "Coding agent",
       "status": "Observed fetching",
       "status_display": "Observed fetching · as of 2026-06-22",
       "col4_md": "Sends `Accept: text/markdown, text/html, */*` (verified 2026-06-22).",
       "source_md": "[AcceptMarkdown client matrix](https://acceptmarkdown.com/status) [29]"
      },
      {
       "actor": "OpenClaw",
       "role": "Coding agent",
       "status": "Observed fetching",
       "status_display": "Observed fetching · as of 2026-05-04",
       "col4_md": "Sends `Accept: text/markdown` (verified 2026-05-04).",
       "source_md": "[AcceptMarkdown client matrix](https://acceptmarkdown.com/status) [29]"
      },
      {
       "actor": "Codex CLI",
       "role": "Coding agent",
       "status": "Partial",
       "status_display": "Partial · as of 2026-04-18",
       "col4_md": "Partial: follows an alternate `text/markdown` link (verified 2026-04-18).",
       "source_md": "[AcceptMarkdown client matrix](https://acceptmarkdown.com/status) [29]"
      }
     ]
    },
    "additional_tables": [
     {
      "visible": true,
      "heading": "Content-negotiation scanner",
      "col4_header": "Checks",
      "note_md": null,
      "rows": [
       {
        "actor": "AcceptMarkdown scanner",
        "role": "Negotiation checker",
        "status": "Listed",
        "status_display": "Listed · checked 2026-11-06",
        "col4_md": "Checks `Accept: text/markdown`, `Vary: Accept`, status `406`, and `q` values.",
        "source_md": "[AcceptMarkdown checker](https://acceptmarkdown.com/) [30]"
       }
      ]
     }
    ],
    "censuses": [
     {
      "label": "Checkly State of AI Agent Content Negotiation (2026-02-19)",
      "as_of": "2026-02-19",
      "value_md": "In Stefan Judis's February 19, 2026 Checkly content-negotiation test of seven coding agents, 3 out of 7 agents (Claude Code, Cursor, and OpenCode) requested text/markdown in their Accept header, whereas OpenAI Codex, Gemini CLI, GitHub Copilot, and Windsurf requested only HTML or wildcard media types. [25]"
     },
     {
      "label": "AcceptMarkdown client matrix",
      "as_of": "2026-06-22",
      "value_md": "The AcceptMarkdown client matrix (last updated 2026-06-22) records Claude Code, Copilot Chat (VS Code), Copilot CLI, Cursor, Microsoft Copilot, OpenClaw, and OpenCode as sending Accept: text/markdown, marks Codex CLI as Partial, and lists Aider, ChatGPT (browse), Claude.ai, Cline, Devin, Gemini (web app), Gemini CLI, Grok, Perplexity, v0, Windsurf, and Zed as fetching only HTML. [29]"
     }
    ],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "okf",
     "target_name": "Open Knowledge Format",
     "relation_label": "Complements",
     "delta": "Markdown for Agents converts HTML when Accept includes text/markdown; OKF stores Markdown files.",
     "item_md": "**[Open Knowledge Format](/protocols/okf/)** (Complements) — Markdown for Agents converts HTML when Accept includes text/markdown; OKF stores Markdown files."
    },
    {
     "item_md": "**[Read protocols](/category/read/)** — Category index for `read` standards."
    }
   ],
   "v05_compiled_md": "---\nid: cloudflare-markdown-for-agents\ntitle: \"Markdown for Agents\"\ntier: flagship\nlifecycle_status: active\ncategory: read\nform: http-header\nwire_archetype: web_discovery\nspec_url: https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/\nlast_checked: 2026-11-12\n---\n\n# Markdown for Agents\n\n**Category:** [Read](/category/read/) (`read`) · **Form:** HTTP content-negotiation header (`http-header`) · **Last checked:** 2026-11-12\n\n> *This page is about Cloudflare's Markdown for Agents feature (Accept: text/markdown). For a site-level index of LLM-readable pages, see [llms.txt](/protocols/llms-txt/); for the AI-use preferences it attaches, see [Content Signals Policy](/protocols/cloudflare-content-signals-policy/). [1]*\n\n> **In brief:** Cloudflare Markdown for Agents lets AI crawlers and assistants request a clean Markdown representation of any web page on an enabled domain instead of downloading layout-heavy HTML. Rather than forcing agents to strip navigation clutter client-side or requiring publishers to host parallel scraping endpoints, the CDN edge intercepts HTTP requests carrying `Accept: text/markdown` and converts the origin HTML into `Content-Type: text/markdown; charset=utf-8` in real time. [1][2]\n\n**Markdown for Agents** is a Cloudflare edge content-negotiation feature that converts origin HTML pages into structured Markdown on the fly when an HTTP client requests `Accept: text/markdown`, reducing markup token overhead for AI agents. [1] Announced in Beta by Celso Martinho and Will Allen on 2026-02-12, Markdown for Agents is Generally Available as of 2026-11-09, with conversion analytics, logs, a playground, and traces. [2][3] When a request includes `text/markdown` in `Accept`, Cloudflare fetches the origin HTML, converts it to Markdown, and serves `Content-Type: text/markdown; charset=utf-8` with `Vary: Accept` (preserving existing origin `Vary` dimensions so caches separate HTML and Markdown variants). If the origin omits a `content-signal` header, Cloudflare attaches the default policy `Content-Signal: ai-train=yes, search=yes, ai-input=yes`. [1] An October 9, 2026 update moved conversion to an in-process streaming engine at the edge, raising the decompressed HTML limit from 2 MiB to 6 MiB (6,291,456 bytes) while removing `Content-Length`, `x-markdown-tokens`, and `x-original-tokens` from converted responses. [4]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Read](/category/read/) (`read`) |\n| **Form** | HTTP content-negotiation header (`http-header`) |\n| **Originated by** | Celso Martinho and Will Allen (Cloudflare), 2026-02-12 [2] |\n| **Governed by** | Cloudflare [1] |\n| **Track** | Cloudflare network feature [1] |\n| **Status** | Generally Available as of 2026-11-09 (Beta launch 2026-02-12); available at no cost on Pro, Business, Enterprise, and SSL for SaaS plans, with conversion analytics, logs, a playground, and traces [1][2][3] |\n| **Version** | Unversioned edge feature; Generally Available 2026-11-09 (Beta launch 2026-02-12). The 2026-10-09 in-process conversion update remains in effect: 6 MiB decompressed HTML limit and removal of `Content-Length`, `x-markdown-tokens`, and `x-original-tokens`. [2][3][4] |\n| **Headers** | `Accept: text/markdown`; `Content-Type: text/markdown; charset=utf-8`; `Vary: Accept`; `Content-Signal` [1] |\n| **Specification** | [Markdown for Agents](https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/) [1] |\n| **Found at** | Any HTML page on an enabled zone, requested with `Accept: text/markdown` [1] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Accept negotiation, response headers, and static Markdown siblings](#accept-negotiation-response-headers-and-static-markdown-siblings)\n3. [Streaming conversion limits, Vary caching, and Free-plan workarounds](#streaming-conversion-limits-vary-caching-and-free-plan-workarounds)\n4. [Counterparts and related standards](#counterparts-and-related-standards)\n5. [Adoption and ecosystem](#adoption-and-ecosystem)\n6. [See also](#see-also)\n7. [References](#references)\n\n---\n\n## Problem and scope\n\nAI agents require structured data from a Web built for human browsers, where raw HTML spends tokens on markup with no semantic value: a Markdown heading (`## About Us`) costs roughly 3 tokens compared with 12–15 tokens for its HTML equivalent before navigation and script tags. Cloudflare's February 2026 launch blog post measured 16,180 tokens in HTML versus 3,150 tokens when converted to Markdown—an 80% reduction in token usage. [1][2] Instead of requiring agents to parse raw HTML or origins to maintain separate scraping endpoints, Cloudflare intercepts `Accept: text/markdown` requests at the CDN edge, strips layout boilerplate during pre-processing, and emits structured Markdown with extracted `<meta>` YAML frontmatter and preserved JSON-LD blocks. [1] Edge conversion applies only to HTML responses up to 6 MiB (6,291,456 bytes) after decompression on paid Pro, Business, Enterprise, and SSL for SaaS zones; for other document types or client-side rendering, Cloudflare points applications to Workers AI `AI.toMarkdown()` or the Browser Run `/markdown` endpoint. [1]\n\n### February 2026 launch-era negotiation sequence (from the introductory blog post)\n\n```mermaid\nsequenceDiagram\n  participant Client\n  participant Edge as Cloudflare\n  participant Origin\n  Client->>Edge: GET Accept: text/markdown\n  Edge->>Origin: Fetch original HTML\n  Origin-->>Edge: HTML\n  Note over Edge: Convert HTML to Markdown\n  Edge-->>Client: 200 text/markdown; charset=utf-8<br/>vary: accept<br/>x-markdown-tokens: 725<br/>content-signal: ai-train=yes, search=yes, ai-input=yes\n```\n\n*The client sends `Accept: text/markdown`. Cloudflare fetches the origin HTML and returns `content-type: text/markdown; charset=utf-8` with `vary: accept`, `x-markdown-tokens: 725`, and `content-signal: ai-train=yes, search=yes, ai-input=yes`. This diagram reflects the February 2026 launch-era blog specimen (including x-markdown-tokens in the sample header block). [2]*\n\n### February 2026 launch-era request and response specimen\n\n```http\ncurl https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/ \\\n  -H \"Accept: text/markdown\"\n\nHTTP/2 200\ndate: Wed, 11 Feb 2026 11:44:48 GMT\ncontent-type: text/markdown; charset=utf-8\ncontent-length: 2899\nvary: accept\nx-markdown-tokens: 725\ncontent-signal: ai-train=yes, search=yes, ai-input=yes\n\n---\ntitle: Markdown for Agents · Cloudflare Agents docs\n---\n\n## What is Markdown for Agents\n\nThe ability to parse and convert HTML to Markdown has become foundational for AI.\n```\n\n*A request carrying `Accept: text/markdown` and the converted `HTTP/2 200` response, including `x-markdown-tokens: 725` and `content-signal: ai-train=yes, search=yes, ai-input=yes`. This specimen reproduces the February 2026 launch blog example (which showed Content-Length and x-markdown-tokens before the October 2026 streaming conversion update). [2]*\n\n---\n\n## Accept negotiation, response headers, and static Markdown siblings\n\nOn an enabled zone, Markdown for Agents is content negotiation: the client names `text/markdown` in `Accept`, and Cloudflare converts origin HTML before responding. Cloudflare's developer docs also publish that same Markdown at a static sibling path and list pages from `llms.txt`. [1][5]\n\n- **Accept negotiation:** The client adds `Accept` with `text/markdown` as one option. Cloudflare fetches the original HTML from the origin and converts it to Markdown before responding. The documented request header is `Accept: text/markdown`, illustrated with `curl` and a Workers `fetch` example that reads the response body via `const markdown = await r.text()`. [1]\n- **Default Content-Signal policy, launch token header, and origin HTML trust boundary:** If an origin already sets a `content-signal` header, Markdown for Agents preserves that value; when an origin omits `content-signal`, Cloudflare attaches the permissive default `Content-Signal: ai-train=yes, search=yes, ai-input=yes` (so origins whose `robots.txt` restricts training must send an explicit `content-signal` header to override it). The February 2026 launch sample also included an estimated token count header (`x-markdown-tokens: 725`) before token headers were removed in October 2026. Because Cloudflare fetches HTML from the origin and strips only non-content markup (`headers`, `footers`, `navigation`, `scripts`, `styles`) rather than auditing semantic equivalence with browser HTML, an origin varying responses by request headers can serve agent-specific text (cautioned against in content-negotiation guidance warning that negotiated Markdown is not a place to tell agents something the page does not tell people), and agent harnesses treat response bodies as untrusted data rather than instructions. [1][2][6][7]\n- **Static Markdown siblings:** Request `/$page/index.md`, such as `/docs-for-agents/index.md`, or send `Accept: text/markdown`. Both return the same Markdown, powered by Markdown for Agents. `llms.txt` lists products, for example `/workers/llms.txt`, and `llms-full.txt` (including `/workers/llms-full.txt`) holds the full docs for offline indexing. [5]\n- **Plans and Workers AI:** Dashboard setup requires a Pro or Business plan, and the feature is available at no cost on Pro, Business, Enterprise, and SSL for SaaS plans. When Markdown for Agents is not available from the content source, Cloudflare documents two alternatives: Workers AI `AI.toMarkdown()` converts multiple document types and supports summarization, and the Browser Run `/markdown` endpoint converts a dynamic page after rendering it in a real browser. [1]\n\n---\n\n## Streaming conversion limits, Vary caching, and Free-plan workarounds\n\nOn 9 October 2026 Cloudflare's edge converter moved to an in-process streaming engine and raised its HTML size cap. Negotiated Markdown responses carry `Vary: Accept`, which separates HTML and Markdown in caches that key on `Vary`. Because the edge converter is not available on the Free plan and Cloudflare's Free cache stores a single variant per URL regardless of `Vary`, Free-plan operators serving Markdown from their own origin must split the cache key or publish distinct `.md` URLs. [4][8]\n\n- **Streaming size limit:** Since the `2026-10-09` streaming engine update, HTML is processed as it arrives rather than buffered for a separate conversion service. The decompressed cap is 6 MiB (6,291,456 bytes), up from 2 MiB (2,097,152 bytes), measured after decompression; that earlier 2 MiB (2,097,152 bytes) origin response limit dated from `2026-02-16`, when Cloudflare raised it from 1 MB. `x-markdown-tokens` and `x-original-tokens` are no longer sent, and `Content-Length` is removed because the body is streamed. [4][9]\n- **Stripped HTML and frontmatter:** Pre-processing strips headers, footers, navigation, scripts, and styles. Separately, Cloudflare's own developer-docs build pipeline removes `script`, `style`, and `link` tags and turns interactive `Tabs` components into unordered lists. YAML frontmatter is emitted only when a supported meta tag exists, using `title`, `description`, and `image` when those fields have values. JSON-LD remains a fenced `json` block when present. [1][5]\n- **Vary across plan tiers:** Edge-converted responses include `Accept` in `Vary` (preserving any origin `Vary` dimensions) so caches can store separate Markdown and HTML variants. By default Cloudflare does not consider `Vary` values in caching decisions, with exceptions for `vary: accept-encoding`, for images, and for the Cache Rules `Vary` setting, which must be turned on. Cloudflare's edge Markdown for Agents converter requires a paid zone (dashboard setup names Pro or Business, with availability on Pro, Business, Enterprise, and SSL for SaaS) and is not available on the Free plan. [1][6][8]\n- **Origin-served Markdown on Free-plan zones:** Operators on the Free plan can negotiate `Accept: text/markdown` at their own origin (such as Caddy `try_files {path}index.md {path}/index.md` sending `Vary: Accept`), but Cloudflare's Free cache stores one variant per URL regardless of `Vary`—serving cached HTML to Markdown clients or cached Markdown to browsers. A Free-plan Transform Rule (up to 10 rules, running at phase 3 before cache lookup at phase 19) that rewrites `Accept: text/markdown` requests with query parameter `_fmt=md` (turning `/blog/` into `/blog/?_fmt=md`) splits the cache into two entries; direct static URLs (such as origin `{path}/index.md` files, analogous to Cloudflare's own docs `/$page/index.md` sibling paths) do not depend on `Vary`. [5][8]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **HTTP Content Negotiation (RFC 9110)** | `RFC 9110` | Profiles classic standard | RFC 9110 calls this proactive negotiation: the client states preferences, the server selects a representation, and each Accept range may carry a q weight from 0 to 1 (default 1). [1][10] |\n| **The text/markdown Media Type (RFC 7763)** | `RFC 7763` | Analogous to classic standard | RFC 7763 (Informational) registers text/markdown and requires a charset parameter, with no default value. [1][11] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[llms.txt](/protocols/llms-txt/)** | Peer alternative | llms.txt points agents to Markdown versions of key pages, like robots.txt for crawlers, instead of converting one response. [1][12] |\n| **[Agent Readability Spec](/protocols/vercel-agent-readability/)** | Complements | Markdown for Agents converts HTML when Accept includes text/markdown (Vary: Accept; x-markdown-tokens until 9 October 2026); Agent Readability scores whether the site honors that request. [1][13] |\n| **[Content Signals Policy](/protocols/cloudflare-content-signals-policy/)** | Complements | Content Signals lets a publisher state how content may be used after access, rather than converting the page body. [1][14] |\n| **[AI crawler tokens in robots.txt](/protocols/ai-crawler-tokens-robots/)** | Complements | robots.txt rules for AI crawlers treat AI training, search, and user-triggered crawlers separately and include a token list, rather than selecting a representation of a page. [1][15] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (19 probed or cited examples across 3 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).*\n\n### Origins & documentation hosts serving text/markdown\n\n| Actor | Role | Status | Negotiation header, token count & scope | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Cloudflare (Edge network, Developer Docs & Blog)** | Edge network & documentation | Live (HTTP 200) · checked 2026-11-04 | Per-zone edge conversion (`Accept: text/markdown` -> `text/markdown; charset=utf-8`, `content-signal: ai-train=yes, search=yes, ai-input=yes`); live on Docs and Blog. | [Cloudflare, Markdown for Agents (modified 2026-10-09; fetched 2026-11-04)](https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/) [1] · [Celso Martinho and Will Allen, Introducing Markdown for Agents (2026-02-12; fetched 2026-11-04)](https://blog.cloudflare.com/markdown-for-agents/) [2][3] |\n| **Read the Docs** | Docs platform & host | Live (HTTP 200) · checked 2026-11-03 | Enabled automatically across hosted docs; live `Accept: text/markdown` probe returns `text/markdown; charset=utf-8` (`vary: Accept-Encoding, accept`). | [Read the Docs, Markdown for AI agents](https://docs.readthedocs.com/platform/latest/reference/markdown-for-agents.html) [16] · [Read the Docs stable docs (fetched 2026-11-03)](https://docs.readthedocs.com/platform/stable/) [17] · [Cloudflare, More efficient Markdown for Agents conversion (2026-10-09)](https://developers.cloudflare.com/changelog/post/2026-10-09-markdown-for-agents-in-process-conversion/) [4] |\n| **Zep** | Product site | Live (HTTP 200) · checked 2026-11-03 | Negotiated `text/markdown; charset=utf-8` with `content-signal: ai-train=yes, search=yes, ai-input=yes` (`server: cloudflare`). | [Zep (fetched 2026-11-03)](https://www.getzep.com/) [18] |\n| **Taskade** | Product site | Live (HTTP 200) · checked 2026-11-03 | Negotiated `text/markdown; charset=utf-8` with `content-signal: ai-train=yes, search=yes, ai-input=yes` (`server: cloudflare`). | [Taskade (fetched 2026-11-03)](https://www.taskade.com/) [19] |\n| **Replicate** | Product site | Live (HTTP 200) · checked 2026-11-03 | `HTTP/2 200` `text/markdown; charset=utf-8` with `vary: Accept-Encoding, accept` via `server: cloudflare`. | [Replicate (fetched 2026-11-03)](https://replicate.com/) [20] |\n| **PlanetScale** | Product site | Live (HTTP 200) · checked 2026-11-03 | `HTTP/2 200` `text/markdown; charset=utf-8` with `vary: accept-encoding, accept` via `server: cloudflare`. | [PlanetScale (fetched 2026-11-03)](https://planetscale.com/) [21] |\n| **Cursor (Docs)** | Developer documentation (cursor.com/docs) | Live (HTTP 200) · checked 2026-11-04 | `HTTP 200` `content-type: text/markdown; charset=utf-8`, `vary: Accept`, `link: </llms.txt>; rel=\"describedby\"`. | [cursor.com/docs](https://cursor.com/docs) [22] |\n| **Mintlify** | Documentation platform | Supported · checked 2026-11-06 | Returns Markdown for `Accept: text/markdown` or `Accept: text/plain`. | [Mintlify, Markdown export](https://www.mintlify.com/docs/ai/markdown-export) [23] |\n\n### Coding agents, harnesses & SDK tools\n\n| Actor | Role | Status | Accept: text/markdown behavior & surface | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Anthropic Claude Code** | Coding agent | Observed fetching · as of 2026-02-19 | `WebFetch` (`v2.1.38`) sends `Accept: text/markdown, text/html, */*` in Checkly's 2026-02-19 test. | [Anthropic, Tools reference](https://code.claude.com/docs/en/tools-reference) [24] · [Stefan Judis, Checkly (2026-02-19)](https://www.checklyhq.com/blog/state-of-ai-agent-content-negotation/) [25] |\n| **Cursor** | Coding agent | Observed fetching · as of 2026-02-19 | Cursor `2.4.28` `WebFetch` sends `Accept: text/markdown,text/html;q=0.9,application/xhtml+xml;q=0.8,application/xml;q=0.7,image/webp;q=0.6,*/*;q=0.5`. | [Stefan Judis, Checkly (2026-02-19)](https://www.checklyhq.com/blog/state-of-ai-agent-content-negotation/) [25] |\n| **OpenCode** | Coding agent | Observed fetching · checked 2026-10-30 | `webfetch` defaults to Markdown with `text/markdown;q=1.0` above `text/html;q=0.7`. | [OpenCode, Tools](https://opencode.ai/v2/docs/tools/) [7] · [OpenCode, webfetch.ts](https://raw.githubusercontent.com/anomalyco/opencode/dev/packages/core/src/tool/plugin/webfetch.ts) [26] |\n| **Cloudflare Agents SDK** | SDK tool | Supported · as of 2026-10-12 | Agents SDK `web_fetch` tool requests Markdown directly from supporting sites (2026-10-12). | [Cloudflare, AI Changelog: web_fetch tool (2026-10-12)](https://developers.cloudflare.com/changelog/product-group/ai/) [27] |\n| **Gemini CLI** | Coding agent | Development · checked 2026-11-04 | Floating `main` branch sends `text/markdown, text/plain;q=0.9, application/json;q=0.9, text/html;q=0.8` ahead of `*/*;q=0.5`; released `0.28.2` sent `Accept: */*`. | [google-gemini/gemini-cli (web-fetch.ts)](https://raw.githubusercontent.com/google-gemini/gemini-cli/main/packages/core/src/tools/web-fetch.ts) [28] · [Checkly (Feb 2026 study)](https://www.checklyhq.com/blog/state-of-ai-agent-content-negotation/) [25] |\n| **Copilot Chat (VS Code)** | Coding agent | Observed fetching · as of 2026-06-22 | Sends q-valued `Accept: text/markdown` (verified 2026-06-22). | [AcceptMarkdown client matrix](https://acceptmarkdown.com/status) [29] |\n| **Copilot CLI** | Coding agent | Observed fetching · as of 2026-06-22 | Sends `Accept: text/markdown, text/html, */*` (verified 2026-06-22). | [AcceptMarkdown client matrix](https://acceptmarkdown.com/status) [29] |\n| **Microsoft Copilot** | Coding agent | Observed fetching · as of 2026-06-22 | Sends `Accept: text/markdown, text/html, */*` (verified 2026-06-22). | [AcceptMarkdown client matrix](https://acceptmarkdown.com/status) [29] |\n| **OpenClaw** | Coding agent | Observed fetching · as of 2026-05-04 | Sends `Accept: text/markdown` (verified 2026-05-04). | [AcceptMarkdown client matrix](https://acceptmarkdown.com/status) [29] |\n| **Codex CLI** | Coding agent | Partial · as of 2026-04-18 | Partial: follows an alternate `text/markdown` link (verified 2026-04-18). | [AcceptMarkdown client matrix](https://acceptmarkdown.com/status) [29] |\n\n### Content-negotiation scanner\n\n| Actor | Role | Status | Checks | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **AcceptMarkdown scanner** | Negotiation checker | Listed · checked 2026-11-06 | Checks `Accept: text/markdown`, `Vary: Accept`, status `406`, and `q` values. | [AcceptMarkdown checker](https://acceptmarkdown.com/) [30] |\n\n### Ecosystem censuses\n\n- **Checkly State of AI Agent Content Negotiation (2026-02-19)** (*as of 2026-02-19*): In Stefan Judis's February 19, 2026 Checkly content-negotiation test of seven coding agents, 3 out of 7 agents (Claude Code, Cursor, and OpenCode) requested text/markdown in their Accept header, whereas OpenAI Codex, Gemini CLI, GitHub Copilot, and Windsurf requested only HTML or wildcard media types. [25]\n- **AcceptMarkdown client matrix** (*as of 2026-06-22*): The AcceptMarkdown client matrix (last updated 2026-06-22) records Claude Code, Copilot Chat (VS Code), Copilot CLI, Cursor, Microsoft Copilot, OpenClaw, and OpenCode as sending Accept: text/markdown, marks Codex CLI as Partial, and lists Aider, ChatGPT (browse), Claude.ai, Cline, Devin, Gemini (web app), Gemini CLI, Grok, Perplexity, v0, Windsurf, and Zed as fetching only HTML. [29]\n\n---\n\n## See also\n\n- **[Open Knowledge Format](/protocols/okf/)** *(Complements)* — Markdown for Agents converts HTML when Accept includes text/markdown; OKF stores Markdown files.\n- **Category:** [Read protocols](/category/read/)\n\n---\n\n## References\n\n1. Cloudflare, *Markdown for Agents* (modified 2026-10-09; fetched 2026-11-04) — <https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/>\n2. Celso Martinho and Will Allen (Cloudflare), *Introducing Markdown for Agents* (published 2026-02-12; modified 2026-07-15; fetched 2026-11-04) — <https://blog.cloudflare.com/markdown-for-agents/>\n3. Cloudflare, *Markdown for Agents analytics and tracing* (published 2026-11-09) — <https://developers.cloudflare.com/changelog/post/2026-11-09-markdown-for-agents-observability/>\n4. Cloudflare, *More efficient Markdown for Agents conversion* (published 2026-10-09) — <https://developers.cloudflare.com/changelog/post/2026-10-09-markdown-for-agents-in-process-conversion/>\n5. Cloudflare, *AI consumability* (last updated 20 August 2026; fetched 2026-11-06) — <https://developers.cloudflare.com/style-guide/how-we-docs/ai-consumability>\n6. Good for Bots, *How to serve Markdown to AI agents with content negotiation* (published 2026-10-03) — <https://goodforbots.com/guides/markdown-negotiation>\n7. OpenCode, *Tools* (checked 2026-10-30) — <https://opencode.ai/v2/docs/tools/>\n8. Michael Olson, *Markdown for Agents on the Cloudflare Free Plan* (February 2026; fetched 2026-11-06) — <https://mwolson.org/blog/2026-02-14-markdown-for-agents-on-cloudflare-free-plan>\n9. Cloudflare, *Content encoding support for Markdown for Agents and other improvements* (published 2026-02-16) — <https://developers.cloudflare.com/changelog/post/2026-02-16-markdown-for-agents-improvements/>\n10. R. Fielding, M. Nottingham, and J. Reschke (IETF), *RFC 9110: HTTP Semantics* (published June 2022) — <https://www.rfc-editor.org/rfc/rfc9110.html>\n11. S. Leonard (Penango, Inc. / IETF), *RFC 7763: The text/markdown Media Type* (published March 2016) — <https://www.rfc-editor.org/rfc/rfc7763.html>\n12. Jeremy Howard, *The /llms.txt file, v2* (published 2024-09-03; modified 2026-08-10; HTTP last-modified 2026-09-24) — <https://llmstxt.org>\n13. Vercel and Ora, *Make your site readable by AI agents | Vercel Knowledge Base* (published 2026-08-28; updated 2026-09-03; fetched 2026-10-30) — <https://vercel.com/kb/guide/make-your-site-readable-by-ai-agents>\n14. Cloudflare, *Giving users choice with Cloudflare's new Content Signals Policy* (published 2025-09-24; modified 2026-07-15) — <https://blog.cloudflare.com/content-signals-policy/>\n15. M. Koster, G. Illyes, H. Zeller, and L. Sassman (IETF), *RFC 9309: Robots Exclusion Protocol* (published September 2022) — <https://www.rfc-editor.org/rfc/rfc9309.html>\n16. Read the Docs, *Markdown for AI agents* (checked 2026-10-30) — <https://docs.readthedocs.com/platform/latest/reference/markdown-for-agents.html>\n17. Read the Docs, *Read the Docs: documentation simplified* (fetched 2026-11-03) — <https://docs.readthedocs.com/platform/stable/>\n18. Zep, *Zep | The unified context layer for enterprise data* (fetched 2026-11-03) — <https://www.getzep.com/>\n19. Taskade, *Turn Business Processes Into Live Apps | Taskade Genesis* (fetched 2026-11-03) — <https://www.taskade.com/>\n20. Replicate, *Run and fine-tune models. Deploy custom models. All with one line of code.* (fetched 2026-11-03) — <https://replicate.com/>\n21. PlanetScale, *PlanetScale - the world’s fastest and most scalable cloud hosting for Vitess, Neki, and Postgres* (fetched 2026-11-03) — <https://planetscale.com/>\n22. Cursor (Docs), *cursor.com/docs* (checked 2026-11-04) — <https://cursor.com/docs>\n23. Mintlify, *Markdown export* (fetched 2026-11-06) — <https://www.mintlify.com/docs/ai/markdown-export>\n24. Anthropic, *Tools reference* (checked 2026-10-30) — <https://code.claude.com/docs/en/tools-reference>\n25. Stefan Judis (Checkly), *The Current State of Content Negotiation for AI Agents (Feb 2026)* (published 2026-02-19) — <https://www.checklyhq.com/blog/state-of-ai-agent-content-negotation/>\n26. OpenCode, *webfetch.ts* (checked 2026-10-30) — <https://raw.githubusercontent.com/anomalyco/opencode/dev/packages/core/src/tool/plugin/webfetch.ts>\n27. Cloudflare, *AI Changelog: New web_fetch tool in the Agents SDK* (2026-10-12) — <https://developers.cloudflare.com/changelog/product-group/ai/>\n28. Gemini CLI, *google-gemini/gemini-cli (web-fetch.ts)* (checked 2026-11-04) — <https://raw.githubusercontent.com/google-gemini/gemini-cli/main/packages/core/src/tools/web-fetch.ts>\n29. AcceptMarkdown, *AI agent support matrix* (last updated 2026-06-22; fetched 2026-11-06) — <https://acceptmarkdown.com/status>\n30. AcceptMarkdown, *Accept: text/markdown checker* (fetched 2026-11-06) — <https://acceptmarkdown.com/>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "otel-genai-semconv",
   "name": "OpenTelemetry GenAI Semantic Conventions (agents and MCP)",
   "acronym": "",
   "aliases": [
    "OTel GenAI semconv",
    "gen_ai.* attributes",
    "semantic-conventions-genai"
   ],
   "collisions": [],
   "step": "account",
   "parties": [
    "agent-site",
    "agent-agent"
   ],
   "form": "document-format",
   "track": "linux-foundation",
   "scope": "general",
   "question": "What span, metric and attribute names should agent frameworks and MCP clients and servers emit, so traces of agent runs and tool calls line up across vendors?",
   "analog": "A common log format (like the web server combined log), for agent traces",
   "origin": {
    "org": "OpenTelemetry (CNCF)",
    "date": "2026-05-05"
   },
   "governance": "open-telemetry/semantic-conventions-genai (Apache License 2.0), extending the core OpenTelemetry Semantic Conventions",
   "native_status": "Status: Development on the agent-spans and MCP documents (no tagged repository release)",
   "phase": "draft",
   "implementation": "prototype",
   "adoption": {
    "level": "observed",
    "by": "OpenTelemetry Python GenAI — OpenAI Agents (opentelemetry-instrumentation-genai-openai-agents), OpenTelemetry Python GenAI — LangChain (opentelemetry-instrumentation-genai-langchain), OpenTelemetry Python GenAI — LlamaIndex, Agno, DSPy, Smolagents & Qwen-Agent, OpenTelemetry Python GenAI — OpenAI, Anthropic, Bedrock & Google GenAI, OpenTelemetry Python GenAI — Claude Agent SDK & CrewAI (1.4b0.dev), Langfuse, Datadog LLM Observability, OpenLIT Platform, and 7 other verified implementations",
    "probe_run": null
   },
   "version": {
    "label": "Development (no tagged release); core semantic conventions links at v1.45.0 (released 2026-11-02)",
    "date": "2026-11-08"
   },
   "spec_url": "https://github.com/open-telemetry/semantic-conventions-genai/blob/main/docs/gen-ai/gen-ai-agent-spans.md",
   "discovery": {
    "mechanism": "None at the web layer; the conventions name attributes on OpenTelemetry spans and metrics that an agent's own instrumentation exports to its operator's tracing backend",
    "path": null
   },
   "probe": {
    "method": "NONE",
    "path": "",
    "parse": "",
    "on_absent": "Telemetry naming lives inside an operator's tracing pipeline; nothing can be observed from a site's public endpoints."
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://github.com/open-telemetry/semantic-conventions-genai",
     "claim": "OpenTelemetry, *OpenTelemetry GenAI Semantic Conventions*, created 2026-05-05; pushed 2026-11-08; 0 releases, 0 tags",
     "date": null,
     "quote": "Semantic Conventions for Generative AI (GenAI), including spans, metrics, and events for GenAI clients, MCP (Model Context Protocol), and provider-specific conventions (OpenAI, etc.). / This repository extends the OpenTelemetry Semantic Conventions with GenAI-specific conventions / \"releaseCount\":0,\"tagCount\":0 … dependencies on the core semantic conventions … \"created_at\": \"2026-05-05T03:08:44Z\" / \"pushed_at\":\"2026-11-07T23:49:51Z\" / \"ownerLogin\":\"open-telemetry\" / \"created_at\": \"2026-05-05T03:08:44Z\" / OpenTelemetry GenAI Semantic Conventions / \"spdxId\":\"Apache-2.0\",\"name\":\"Apache License 2.0\" / \"releaseCount\":0,\"tagCount\":0 / The human-readable version of the semantic conventions resides in the docs folder.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://github.com/open-telemetry/semantic-conventions-genai/blob/main/docs/gen-ai/gen-ai-agent-spans.md",
     "claim": "OpenTelemetry, *Semantic Conventions for GenAI agent and framework spans*, Status: Development; fetched 2026-10-31",
     "date": null,
     "quote": "This document defines semantic conventions for GenAI agent calls that are defined by this whitepaper. / Semantic Conventions for GenAI agent and framework spans … Status: Development … This document defines semantic conventions for GenAI agent calls that are defined by this whitepaper. … The gen_ai.operation.name SHOULD be create_agent. / Status: Development / https://github.com/open-telemetry/semantic-conventions/blob/v1.45.0/docs/general/recording-errors.md / # Semantic Conventions for GenAI agent and framework spans / It MAY be applicable to agent operations that are performed by the GenAI framework locally. … The semantic conventions for GenAI agents extend and override the semantic conventions for Gen AI Spans. / Describes GenAI agent creation and is usually applicable when working with remote agent services.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://www.ietf.org/archive/id/draft-sharif-agent-audit-trail-09.txt",
     "claim": "R. Sharif (CyberSecAI Ltd), *Agent Audit Trail: A Standard Logging Format for Autonomous AI Systems (draft-sharif-agent-audit-trail-09)*, draft-sharif-agent-audit-trail-09; 26 October 2026",
     "date": null,
     "quote": "The Agent Audit Trail (AAT) defines a JSON-based record structure with mandatory fields for agent identity, the authorizing principal, action classification, outcome tracking, and trust level reporting. / Records are linked via tamper-evident hash chaining using SHA-256 per RFC 8785",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://www.ietf.org/archive/id/draft-gilda-audit-agent-audit-record-03.txt",
     "claim": "S. Gilda, *An Audit Record Format for AI Agent Authorization Decisions (draft-gilda-audit-agent-audit-record-03)*, 29 October 2026",
     "date": null,
     "quote": "This document defines a record format for AI agent authorization decisions and the effects that followed them. / signed inside a DSSE envelope.",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://github.com/open-telemetry/semantic-conventions-genai/blob/main/docs/gen-ai/mcp.md",
     "claim": "OpenTelemetry, *Semantic conventions for Model Context Protocol (MCP)*, Status: Development; links core semantic conventions v1.45.0",
     "date": null,
     "quote": "The MCP client span becomes a parent of the MCP server span regardless of transport used … invoke_agent weather-forecast-agent (INTERNAL, trace=t1, span=s1) … tools/call get-weather - (CLIENT, trace=t1, span=s3, parent=s1) / blob/v1.45.0/docs/rpc/README.md … Status: Development / Status: Development / https://github.com/open-telemetry/semantic-conventions/blob/v1.45.0/docs/rpc/README.md / params._meta / the context propagation keys SHOULD be written unprefixed. / (traceparent, tracestate, and baggage) / MCP is transport independent and works across different transports. The specification expects clients to implement at least stdio or Streamable HTTP. / # Semantic conventions for Model Context Protocol (MCP) / invoke_agent weather-forecast-agent (INTERNAL, trace=t1, span=s1) … tools/call get-weather - (CLIENT, trace=t1, span=s3, parent=s1) … The MCP client span becomes a parent of the MCP server span regardless of transport used / Model Context Protocol (MCP) is based on JSON RPC. … When instrumenting MCP calls, it's RECOMMENDED to follow MCP conventions instead of RPC semantic conventions / W3C Trace Context and Baggage keys / This span describes the MCP call from the client side. / Metric: mcp.client.operation.duration / Metric: mcp.server.operation.duration / Metric: mcp.client.session.duration / Metric: mcp.server.session.duration / by injecting it into the MCP request",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://github.com/open-telemetry/semantic-conventions/releases",
     "claim": "OpenTelemetry (open-telemetry), *open-telemetry/semantic-conventions releases (v1.45.0, published 2026-11-02)*, v1.45.0 published 2026-11-02; fetched 2026-11-08",
     "date": null,
     "quote": "\"tag_name\":\"v1.45.0\" … \"published_at\":\"2026-11-02T16:11:42Z\" / \"tag_name\":\"v1.45.0\" / \"published_at\":\"2026-11-02T16:11:42Z\"",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://github.com/open-telemetry/semantic-conventions",
     "claim": "OpenTelemetry, *open-telemetry/semantic-conventions*, created 2023-05-09; pushed 2026-10-30",
     "date": null,
     "quote": "\"full_name\": \"open-telemetry/semantic-conventions\" / Defines standards for generating consistent, accessible telemetry across a variety of domains",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://opentelemetry.io/docs/specs/semconv/gen-ai/",
     "claim": "OpenTelemetry, *Moved: Generative AI semantic conventions*, fetched 2026-10-31",
     "date": null,
     "quote": "This page has moved and is no longer maintained in this repository. / GenAI semantic conventions have moved to the",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://opentelemetry.io/blog/2025/ai-agent-observability/",
     "claim": "Guangya Liu (IBM) and Sujay Solomon (Google), *AI Agent Observability - Evolving Standards and Best Practices*, published 2025-03-06; page last modified 2026-02-24",
     "date": null,
     "quote": "In the case of an AI agent, given its non-deterministic nature, telemetry is also used as a feedback loop to continuously learn from and improve the quality of the agent by using it as input for evaluation tools. / it is important to establish standards around the shape of the telemetry generated by agent apps to avoid lock-in caused by vendor or framework specific formats. / establish standards around the shape of the telemetry generated by agent apps / like Traceloop OpenTelemetry Instrumentation, Langtrace OpenTelemetry Instrumentation / Traceloop is trying to donate the instrumentation code to OpenTelemetry now. / The first option is to implement built-in instrumentation that emits telemetry using OpenTelemetry semantic conventions. / Some AI agent frameworks, such as CrewAI, follow this pattern. / This post is more than a year old, so its content may be outdated, and some links may be invalid. / Blog posts are not updated after publication.",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28",
     "claim": "Model Context Protocol, *Specification*, version 2026-07-28; fetched 2026-10-30",
     "date": null,
     "quote": "MCP provides a standardized way for applications to: / share contextual information with language models / expose tools and capabilities to AI systems / The protocol uses JSON-RPC 2.0 messages",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://a2a-protocol.org/latest/specification/",
     "claim": "A2A Protocol, *Overview - A2A Protocol*, fetched 2026-10-30",
     "date": null,
     "quote": "an open standard for secure communication and interoperability between AI agents.",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://raw.githubusercontent.com/open-telemetry/opentelemetry-python-genai/main/README.md",
     "claim": "OpenTelemetry, *OpenTelemetry Python GenAI Instrumentations*, checked 2026-11-04",
     "date": null,
     "quote": "All instrumentations use opentelemetry-util-genai and emit spans, metrics, and logs according to GenAI Semantic Conventions. ... opentelemetry-instrumentation-genai-openai-agents | openai-agents >= 0.3.3, < 1 | 1.3b0 / opentelemetry-instrumentation-genai-langchain | langchain >= 0.3.22, < 2 | 1.3b0 / opentelemetry-instrumentation-genai-agno | agno >= 2.3.9, < 4 | 1.3b0 ... opentelemetry-instrumentation-genai-dspy | dspy >= 3.3.0, < 4 | 1.3b0 ... opentelemetry-instrumentation-genai-llama-index ... opentelemetry-instrumentation-genai-qwen-agent | qwen-agent >= 0.0.20, < 1 | 1.3b0 ... opentelemetry-instrumentation-genai-smolagents | smolagents >= 1.24.0, < 2 | 1.2b0 / opentelemetry-instrumentation-genai-anthropic | anthropic >= 0.51.0, < 3 | 1.3b0 ... opentelemetry-instrumentation-genai-bedrock | boto3 >= 1.40.46, < 2 | 1.3b0 ... opentelemetry-instrumentation-genai-openai | openai >= 1.26.0, < 4 | 1.3b0 ... opentelemetry-instrumentation-google-genai | google-genai >= 1.32.0, <3 | 1.3b0 / Unreleased Instrumentations ... opentelemetry-instrumentation-genai-claude-agent-sdk | claude-agent-sdk >= 0.1.14, < 1 | 1.4b0.dev | skeleton ... opentelemetry-instrumentation-genai-crewai | crewai >= 1.10.1, < 2 | 1.4b0.dev | skeleton / All instrumentations use opentelemetry-util-genai and emit spans, metrics, and logs according to GenAI Semantic Conventions. ... Released Instrumentations ... Unreleased Instrumentations",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://raw.githubusercontent.com/open-telemetry/opentelemetry-python-contrib/main/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/README.rst",
     "claim": "OpenTelemetry, *deprecation notice*, checked 2026-11-04",
     "date": null,
     "quote": "This package is deprecated. ... opentelemetry-instrumentation-openai-agents-v2 now only receives security patches. Please migrate by replacing it with opentelemetry-instrumentation-genai-openai-agents",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://raw.githubusercontent.com/open-telemetry/opentelemetry-python-contrib/main/instrumentation-genai/README.md",
     "claim": "OpenTelemetry, *opentelemetry-python-contrib*, checked 2026-11-04",
     "date": null,
     "quote": "opentelemetry-instrumentation-genai-langchain | langchain >= 0.3.21 | Yes | development",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://raw.githubusercontent.com/open-telemetry/opentelemetry.io/main/data/registry/instrumentation-python-genaiopenai.yml",
     "claim": "OpenTelemetry, *OTel Registry (openai)*, checked 2026-11-04",
     "date": null,
     "quote": "title: OpenTelemetry OpenAI Instrumentation registryType: instrumentation language: python",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://raw.githubusercontent.com/traceloop/openllmetry/main/README.md",
     "claim": "OpenLLMetry (Traceloop), *OpenLLMetry README*, checked 2026-11-04",
     "date": null,
     "quote": "OpenLLMetry is a set of extensions built on top of [OpenTelemetry](https://opentelemetry.io/) that gives you complete observability over your LLM application. / Our semantic conventions are now part of OpenTelemetry! / The repo contains standard OpenTelemetry instrumentations for LLM providers and Vector DBs / - ✅ [MCP](https://modelcontextprotocol.io/) / - ✅ [CrewAI](https://docs.crewai.com/introduction) / - ✅ [LangGraph](https://langchain-ai.github.io/langgraph/concepts/why-langgraph/) / - ✅ [AWS Strands](https://strandsagents.com/) (built-in OTEL support)",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://raw.githubusercontent.com/traceloop/openllmetry/main/packages/opentelemetry-instrumentation-mcp/pyproject.toml",
     "claim": "OpenLLMetry (Traceloop), *opentelemetry-instrumentation-mcp pyproject.toml*, checked 2026-11-04",
     "date": null,
     "quote": "name = \"opentelemetry-instrumentation-mcp\" / version = \"0.62.4\" / description = \"OpenTelemetry mcp instrumentation\" / mcp = \"opentelemetry.instrumentation.mcp:McpInstrumentor\" / \"opentelemetry-semantic-conventions-ai>=0.5.1,<0.6.0\"",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://raw.githubusercontent.com/openlit/openlit/main/README.md",
     "claim": "OpenLIT, *OpenLIT: the open-source agent harness engineering platform*, checked 2026-11-04",
     "date": null,
     "quote": "openlit.init() / OpenLIT automatically instruments supported LLM providers, frameworks, vector databases, and other AI infrastructure and exports OpenTelemetry traces and metrics. / Traces and metrics follow OpenTelemetry GenAI semantic conventions (`gen_ai.*`). / **Observe** every LLM call, tool call, MCP request, retrieval and agent step / http://127.0.0.1:4318 / **OpenLIT is an open-source agent harness engineering platform.** / OpenLIT OTLP receiver / http://127.0.0.1:3000",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://ai.pydantic.dev/logfire/",
     "claim": "Pydantic, *Pydantic Logfire Debugging and Monitoring | Pydantic Docs*, checked 2026-11-04",
     "date": null,
     "quote": "logfire.instrument_pydantic_ai() / enables instrumentation of Pydantic AI. / Pydantic AI follows the  / OpenTelemetry Semantic Conventions for Generative AI systems / gen_ai.operation.name / so histograms can be broken down by provider and model. / gen_ai.client.token.usage / Defined by the GenAI semantic conventions.",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://docs.ag2.ai/docs/user-guide/telemetry/agent/",
     "claim": "AG2, *Agent telemetry*, fetched 2026-11-06",
     "date": null,
     "quote": "The middleware follows the OpenTelemetry GenAI Semantic Conventions / invoke_agent`, `chat`, `execute_tool`, `await_human_input` / gen_ai.tool.call.id / Jaeger, Grafana Tempo, Datadog, Honeycomb, Langfuse, Arize AX, Arize Phoenix",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://langfuse.com/docs/opentelemetry/get-started",
     "claim": "Langfuse, *OpenTelemetry (OTEL) for LLM Observability - Langfuse*, checked 2026-11-04",
     "date": null,
     "quote": "Langfuse can operate as an OpenTelemetry Backend to receive traces on the  / /api/public/otel / https://cloud.langfuse.com/api/public/otel / Langfuse can receive traces on the  / Langfuse focuses on LLM-relevant spans / spans with  / gen_ai.* / OpenTelemetry GenAI semantic conventions / Furthermore, Langfuse uses attributes within the  / namespace to map OpenTelemetry span attributes directly to the Langfuse data model. / These specific attributes always take precedence over the generic OpenTelemetry conventions",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://docs.datadoghq.com/llm_observability/instrumentation/otel_instrumentation/",
     "claim": "Datadog, *OpenTelemetry Instrumentation*, checked 2026-11-04",
     "date": null,
     "quote": "Instrument LLM applications with OpenTelemetry using GenAI or OpenInference semantic conventions and send traces to Agent Observability without the Datadog SDK. / \"dateModified\":\"2026-11-04T17:06:52Z\"",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://arize.com/docs/ax/observe/tracing/openinference-semantic-conventions",
     "claim": "Arize, *OpenInference semantic conventions*, fetched 2026-11-06",
     "date": null,
     "quote": "Raw `gen_ai.*` attributes are preserved. / gen_ai.request.model` and `llm.model_name` / The span kind is inferred from `gen_ai.operation.name`. / An operation name that Arize AX does not recognize leaves the span kind unset",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://github.com/open-telemetry/semantic-conventions-genai/blob/main/reference/README.md",
     "claim": "OpenTelemetry, *semantic-conventions-genai reference README*, fetched 2026-11-06",
     "date": null,
     "quote": "aws-bedrock, azure-ai-inference, azure-openai / groq, litellm, mistralai, openai / Embeddings | aws-bedrock, azure-ai-inference, azure-openai, cohere / Fetch Response | openai / | Memory |",
     "ref": 24
    }
   ],
   "summary_md": "**OpenTelemetry GenAI Semantic Conventions** (including Semantic Conventions for GenAI agent and framework spans, Status: Development) define semantic conventions for GenAI agent calls, including `gen_ai.operation.name`. The repository extends the OpenTelemetry Semantic Conventions with GenAI-specific conventions. The MCP client span becomes a parent of the MCP server span regardless of transport used. In the example, INTERNAL span `invoke_agent weather-forecast-agent` (`trace=t1`) parents the client span `tools/call get-weather` (`parent=s1`). The semantic-conventions-genai repository has 0 published releases and 0 tags, was created on 2026-05-05, and was last pushed on 2026-11-08, while managing dependencies on the core semantic conventions. The MCP document has Status: Development and links core semantic conventions `v1.45.0` (published 2026-11-02).",
   "part_of": null,
   "group": null,
   "use_cases": [
    "audit-agent-actions"
   ],
   "audience": [
    "agent-builder",
    "platform"
   ],
   "pairs_with": [
    "mcp",
    "agent-audit-trail",
    "a2a",
    "wimse-agent-audit-record"
   ],
   "prerequisites": [],
   "dispute": null,
   "last_verified": "2026-11-08",
   "history": [
    {
     "date": "2026-10-20",
     "note": "initial record; verified against open-telemetry/semantic-conventions-genai (docs/gen-ai/gen-ai-agent-spans.md, docs/gen-ai/mcp.md, README and repository metadata)"
    },
    {
     "date": "2026-10-22",
     "note": "source github:otel-genai-semconv:open-telemetry/semantic-conventions-genai unavailable after 3 failures"
    },
    {
     "date": "2026-10-23",
     "note": "source reachable again"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "watch": [
    {
     "type": "github",
     "repo": "open-telemetry/semantic-conventions-genai",
     "mode": "tag",
     "version": false
    },
    {
     "type": "page",
     "url": "https://github.com/open-telemetry/semantic-conventions-genai/blob/main/docs/gen-ai/gen-ai-agent-spans.md",
     "selector": "main",
     "cadence": "weekly"
    },
    {
     "type": "page",
     "url": "https://github.com/open-telemetry/semantic-conventions-genai/blob/main/docs/gen-ai/mcp.md",
     "selector": "main",
     "cadence": "weekly"
    }
   ],
   "hatnote_md": "This page is about the OpenTelemetry Semantic Conventions for Generative AI (GenAI), which define span, metric, and event names for GenAI agent calls and [Model Context Protocol (MCP)](/protocols/mcp/) client and server telemetry. It is not the [Agent Audit Trail (AAT)](/protocols/agent-audit-trail/) hash-chained JSON log format or the [WIMSE Agent Audit Record](/protocols/wimse-agent-audit-record/) DSSE-signed authorization record.",
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "browser_telemetry",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-08",
   "v05_hatnote_html_md": "This page is about the OpenTelemetry Semantic Conventions for Generative AI (GenAI), which define span, metric, and event names for GenAI agent calls and [Model Context Protocol (MCP)](/protocols/mcp/) client and server telemetry. It is not the [Agent Audit Trail (AAT)](/protocols/agent-audit-trail/) hash-chained JSON log format or the [WIMSE Agent Audit Record](/protocols/wimse-agent-audit-record/) DSSE-signed authorization record. [1][2][3][4]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**OpenTelemetry GenAI Semantic Conventions** (including Semantic Conventions for GenAI agent and framework spans, Status: Development) define semantic conventions for GenAI agent calls, including `gen_ai.operation.name`. The repository extends the OpenTelemetry Semantic Conventions with GenAI-specific conventions. [1][2] The MCP client span becomes a parent of the MCP server span regardless of transport used. In the example, INTERNAL span `invoke_agent weather-forecast-agent` (`trace=t1`) parents the client span `tools/call get-weather` (`parent=s1`). [5] The semantic-conventions-genai repository has 0 published releases and 0 tags, was created on 2026-05-05, and was last pushed on 2026-11-08, while managing dependencies on the core semantic conventions. The MCP document has Status: Development and links core semantic conventions `v1.45.0` (published 2026-11-02). [1][5][6]",
   "v05_identity_sentence_md": "**OpenTelemetry GenAI Semantic Conventions** (including Semantic Conventions for GenAI agent and framework spans, Status: Development) define semantic conventions for GenAI agent calls, including `gen_ai.operation.name`. The repository extends the OpenTelemetry Semantic Conventions with GenAI-specific conventions. [1][2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Account](/category/account/) (`account`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "OpenTelemetry (`open-telemetry` GitHub organization), repository created 2026-05-05 [1]"
    },
    {
     "label": "Governed by",
     "value_md": "open-telemetry/semantic-conventions-genai (Apache License 2.0), extending the core OpenTelemetry Semantic Conventions [1][7]"
    },
    {
     "label": "Track",
     "value_md": "OpenTelemetry semantic conventions, Status: Development; no tagged release [1][2][5]"
    },
    {
     "label": "Status",
     "value_md": "Development on the agent-spans document and the MCP document [2][5]"
    },
    {
     "label": "Version",
     "value_md": "No tagged release; documents link core semantic conventions v1.45.0 (published 2026-11-02); repository pushed 2026-11-08 [1][2][5][6]"
    },
    {
     "label": "Record format",
     "value_md": "OpenTelemetry spans, metrics, and events for GenAI clients, MCP, and provider-specific conventions [1]"
    },
    {
     "label": "Message format",
     "value_md": "JSON-RPC `params._meta` carries unprefixed `traceparent`, `tracestate`, and `baggage` [5]"
    },
    {
     "label": "Transports",
     "value_md": "MCP is transport independent; clients are expected to implement at least stdio or Streamable HTTP [5]"
    },
    {
     "label": "Specification",
     "value_md": "[Semantic Conventions for GenAI agent and framework spans](https://github.com/open-telemetry/semantic-conventions-genai/blob/main/docs/gen-ai/gen-ai-agent-spans.md); [Semantic conventions for Model Context Protocol (MCP)](https://github.com/open-telemetry/semantic-conventions-genai/blob/main/docs/gen-ai/mcp.md) [2][5]"
    },
    {
     "label": "Found at",
     "value_md": "Human-readable conventions in the repository `docs` folder; opentelemetry.io GenAI pages are moved stubs [1][8]"
    },
    {
     "label": "Licence",
     "value_md": "Apache License 2.0 [1]"
    }
   ],
   "v05_problem_md": "For an AI agent, given its non-deterministic nature, telemetry is also used as a feedback loop for evaluation tools. It is important to establish standards around the shape of that telemetry to avoid lock-in caused by vendor or framework specific formats. [9] The conventions establish standards around the shape of telemetry generated by agent apps. In the MCP example, INTERNAL span `invoke_agent weather-forecast-agent` in `trace=t1` parents `tools/call get-weather`, and the MCP client span becomes a parent of the MCP server span regardless of transport used. [5][9] GenAI agent conventions extend and override GenAI span conventions and MAY apply to agent operations the framework performs locally. MCP is based on JSON RPC, and instrumenting MCP calls is RECOMMENDED to follow MCP conventions instead of RPC semantic conventions. [2][5]",
   "v05_mechanism_delta_md": "The conventions establish standards around the shape of telemetry generated by agent apps. In the MCP example, INTERNAL span `invoke_agent weather-forecast-agent` in `trace=t1` parents `tools/call get-weather`, and the MCP client span becomes a parent of the MCP server span regardless of transport used. [5][9]",
   "v05_scope_boundary_md": "GenAI agent conventions extend and override GenAI span conventions and MAY apply to agent operations the framework performs locally. MCP is based on JSON RPC, and instrumenting MCP calls is RECOMMENDED to follow MCP conventions instead of RPC semantic conventions. [2][5]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "W3C Trace Context",
      "spec_or_rfc": "W3C Trace Context",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "W3C Trace Context is the source of the traceparent and tracestate keys that these MCP conventions write, unprefixed, into params._meta, while the conventions themselves name the GenAI agent spans and the MCP client span. [2][5]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "MCP provides a standardized way for applications to share contextual information and expose tools using JSON-RPC 2.0 messages, while these conventions name client and server spans and the duration metrics mcp.client.operation.duration, mcp.server.operation.duration, mcp.client.session.duration, and mcp.server.session.duration, and they inject trace context into params._meta. [5][10]"
     },
     {
      "target_id": "agent-audit-trail",
      "target_name": "Agent Audit Trail",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "The Agent Audit Trail (AAT) defines a JSON record with mandatory fields for agent identity, the authorizing principal, action classification, outcome tracking, and trust level, linked by SHA-256 hash chaining, while these conventions define semantic conventions for GenAI agent spans and metrics rather than a hash-chained log. [1][2][3]"
     },
     {
      "target_id": "a2a",
      "target_name": "Agent2Agent Protocol (A2A)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "The Agent2Agent (A2A) protocol is an open standard for secure communication and interoperability between AI agents, while these conventions describe GenAI agent creation spans that are usually applicable when working with remote agent services. [2][11]"
     },
     {
      "target_id": "wimse-agent-audit-record",
      "target_name": "An Audit Record Format for AI Agent Authorization Decisions",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "Gilda's AI agent authorization audit record (`draft-gilda-audit-agent-audit-record-03`, renamed from `draft-gilda-wimse-agent-audit-record-02`) defines a DSSE-signed record format for AI agent authorization decisions, whereas these conventions define OpenTelemetry spans for GenAI agent calls and MCP clients and servers. [2][4][5]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (15 probed or cited examples across 3 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).",
    "side_a": {
     "visible": true,
     "heading": "Telemetry producers, SDKs & auto-instrumentations",
     "col4_header": "Emitted signals, scope & package",
     "note_md": null,
     "rows": [
      {
       "actor": "OpenTelemetry Python GenAI — OpenAI Agents (`opentelemetry-instrumentation-genai-openai-agents`)",
       "role": "Official OTel agent instrumentation (`openai-agents >= 0.3.3, < 1`)",
       "status": "Supported",
       "status_display": "Supported · checked 2026-11-04",
       "col4_md": "Released package `1.3b0` in `open-telemetry/opentelemetry-python-genai` (superseding deprecated `opentelemetry-instrumentation-openai-agents-v2`); emits spans, metrics, and logs according to `semantic-conventions-genai` via `opentelemetry-util-genai`",
       "source_md": "[opentelemetry-python-genai](https://raw.githubusercontent.com/open-telemetry/opentelemetry-python-genai/main/README.md) [12] · [deprecation notice](https://raw.githubusercontent.com/open-telemetry/opentelemetry-python-contrib/main/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/README.rst) [13]"
      },
      {
       "actor": "OpenTelemetry Python GenAI — LangChain (`opentelemetry-instrumentation-genai-langchain`)",
       "role": "Official OTel framework instrumentation (`langchain >= 0.3.22, < 2`)",
       "status": "Supported",
       "status_display": "Supported · checked 2026-11-04",
       "col4_md": "Released package `1.3b0` in `open-telemetry/opentelemetry-python-genai` (`langchain >= 0.3.22, < 2`, `Semconv status` `development`); emits spans, metrics, and logs according to `semantic-conventions-genai`",
       "source_md": "[opentelemetry-python-genai](https://raw.githubusercontent.com/open-telemetry/opentelemetry-python-genai/main/README.md) [12] · [opentelemetry-python-contrib](https://raw.githubusercontent.com/open-telemetry/opentelemetry-python-contrib/main/instrumentation-genai/README.md) [14]"
      },
      {
       "actor": "OpenTelemetry Python GenAI — LlamaIndex, Agno, DSPy, Smolagents & Qwen-Agent",
       "role": "Official OTel agent framework instrumentations",
       "status": "Supported",
       "status_display": "Supported · checked 2026-11-04",
       "col4_md": "Released packages in `open-telemetry/opentelemetry-python-genai`: `opentelemetry-instrumentation-genai-llama-index` (`1.3b0`), `opentelemetry-instrumentation-genai-agno` (`1.3b0`), `opentelemetry-instrumentation-genai-dspy` (`1.3b0`), `opentelemetry-instrumentation-genai-smolagents` (`1.2b0`), and `opentelemetry-instrumentation-genai-qwen-agent` (`1.3b0`)",
       "source_md": "[opentelemetry-python-genai](https://raw.githubusercontent.com/open-telemetry/opentelemetry-python-genai/main/README.md) [12]"
      },
      {
       "actor": "OpenTelemetry Python GenAI — OpenAI, Anthropic, Bedrock & Google GenAI",
       "role": "Official OTel model provider instrumentations",
       "status": "Supported",
       "status_display": "Supported · checked 2026-11-04",
       "col4_md": "Released `1.3b0` packages in `open-telemetry/opentelemetry-python-genai` (`opentelemetry-instrumentation-genai-openai`, `opentelemetry-instrumentation-genai-anthropic`, `opentelemetry-instrumentation-genai-bedrock`, `opentelemetry-instrumentation-google-genai`)",
       "source_md": "[opentelemetry-python-genai](https://raw.githubusercontent.com/open-telemetry/opentelemetry-python-genai/main/README.md) [12] · [OTel Registry (openai)](https://raw.githubusercontent.com/open-telemetry/opentelemetry.io/main/data/registry/instrumentation-python-genaiopenai.yml) [15]"
      },
      {
       "actor": "OpenTelemetry Python GenAI — Claude Agent SDK & CrewAI (`1.4b0.dev`)",
       "role": "Official OTel skeleton instrumentations (`claude-agent-sdk`, `crewai`)",
       "status": "Development",
       "status_display": "Development · checked 2026-11-04",
       "col4_md": "Listed under `Unreleased Instrumentations` (`skeleton`, version `1.4b0.dev`) in `open-telemetry/opentelemetry-python-genai` for `claude-agent-sdk >= 0.1.14, < 1` and `crewai >= 1.10.1, < 2`",
       "source_md": "[opentelemetry-python-genai](https://raw.githubusercontent.com/open-telemetry/opentelemetry-python-genai/main/README.md) [12]"
      },
      {
       "actor": "OpenLLMetry (Traceloop)",
       "role": "OpenTelemetry instrumentation set",
       "status": "Supported",
       "status_display": "Supported · as of 2025-03-06",
       "col4_md": "OpenLLMetry, maintained by Traceloop, is a set of extensions built on OpenTelemetry. The README says their semantic conventions are now part of OpenTelemetry and that the repo contains standard OpenTelemetry instrumentations for LLM providers and vector databases. Package `opentelemetry-instrumentation-mcp` 0.62.4 is described as OpenTelemetry mcp instrumentation, registers `opentelemetry.instrumentation.mcp:McpInstrumentor`, and depends on `opentelemetry-semantic-conventions-ai`. The README checklist marks MCP, CrewAI, and LangGraph, and marks AWS Strands as built-in OTEL support. Those lines do not name GenAI or MCP attribute keys. The 2025-03-06 OpenTelemetry post lists Traceloop OpenTelemetry Instrumentation as an external package and says Traceloop is trying to donate the instrumentation code to OpenTelemetry.",
       "source_md": "[OpenLLMetry README (checked 2026-11-04)](https://raw.githubusercontent.com/traceloop/openllmetry/main/README.md) [16] · [opentelemetry-instrumentation-mcp pyproject.toml (checked 2026-11-04)](https://raw.githubusercontent.com/traceloop/openllmetry/main/packages/opentelemetry-instrumentation-mcp/pyproject.toml) [17] · [OpenTelemetry, AI Agent Observability (published 2025-03-06; checked 2026-10-31)](https://opentelemetry.io/blog/2025/ai-agent-observability/) [9]"
      },
      {
       "actor": "OpenLIT",
       "role": "OpenTelemetry-native GenAI and MCP SDK",
       "status": "Supported",
       "status_display": "Supported · as of 2026-11-04",
       "col4_md": "Python and TypeScript SDK (`openlit.init()`, README fetched 2026-11-04). The README says OpenLIT automatically instruments supported LLM providers, frameworks, vector databases, and other AI infrastructure and exports OpenTelemetry traces and metrics, and that traces and metrics follow OpenTelemetry GenAI semantic conventions (`gen_ai.*`). The harness table includes observing every LLM call, tool call, and MCP request. Default export shown is OTLP at `http://127.0.0.1:4318`. The platform receiver is a separate row.",
       "source_md": "[OpenLIT README (checked 2026-11-04)](https://raw.githubusercontent.com/openlit/openlit/main/README.md) [18]"
      },
      {
       "actor": "Pydantic Logfire / Pydantic AI",
       "role": "Agent framework instrumentation",
       "status": "Supported",
       "status_display": "Supported · as of 2026-11-04",
       "col4_md": "`logfire.instrument_pydantic_ai()` enables instrumentation of Pydantic AI (fetched `2026-11-04`), following the OpenTelemetry Semantic Conventions for Generative AI systems (`gen_ai.operation.name`, `gen_ai.provider.name`, `gen_ai.request.model`, `gen_ai.response.model`, `gen_ai.client.token.usage`).",
       "source_md": "[Pydantic Logfire (checked 2026-11-04)](https://ai.pydantic.dev/logfire/) [19]"
      },
      {
       "actor": "CrewAI",
       "role": "Agent framework (baked-in instrumentation)",
       "status": "Supported",
       "status_display": "Supported · as of 2025-03-06",
       "col4_md": "The `2025-03-06` OpenTelemetry blog post states that some AI agent frameworks, such as CrewAI, provide built-in instrumentation that emits telemetry using OpenTelemetry semantic conventions.",
       "source_md": "[OpenTelemetry, AI Agent Observability (published 2025-03-06; checked 2026-10-31)](https://opentelemetry.io/blog/2025/ai-agent-observability/) [9]"
      },
      {
       "actor": "AG2",
       "role": "GenAI span middleware",
       "status": "Listed",
       "status_display": "Listed · checked 2026-11-06",
       "col4_md": "AG2 middleware follows the OpenTelemetry GenAI semantic conventions. `gen_ai.operation.name` includes `invoke_agent`, `chat`, `execute_tool`, and `await_human_input`. Tool spans carry `gen_ai.tool.name`, `gen_ai.tool.call.id`, and `gen_ai.tool.type`. Named backends include Jaeger, Grafana Tempo, Datadog, Honeycomb, Langfuse, Arize AX, and Arize Phoenix.",
       "source_md": "[AG2 agent telemetry](https://docs.ag2.ai/docs/user-guide/telemetry/agent/) [20]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Observability backends, collectors & evaluation platforms",
     "col4_header": "Ingested OTel GenAI conventions & endpoint",
     "note_md": null,
     "rows": [
      {
       "actor": "Langfuse",
       "role": "OpenTelemetry backend",
       "status": "Supported",
       "status_display": "Supported · as of 2026-11-04",
       "col4_md": "Docs fetched 2026-11-04. Langfuse can operate as an OpenTelemetry Backend and can receive traces on `/api/public/otel` (OTLP). The exporter example uses `https://cloud.langfuse.com/api/public/otel`. The page says it focuses on spans with `gen_ai.*` attributes and names OpenTelemetry GenAI semantic conventions. Attributes in the `langfuse.*` namespace map OpenTelemetry span attributes directly to the Langfuse data model and take precedence over the generic OpenTelemetry conventions.",
       "source_md": "[Langfuse OpenTelemetry docs (checked 2026-11-04)](https://langfuse.com/docs/opentelemetry/get-started) [21]"
      },
      {
       "actor": "Datadog LLM Observability",
       "role": "Agent observability backend",
       "status": "Supported",
       "status_display": "Supported · as of 2026-11-04",
       "col4_md": "Datadog's OpenTelemetry LLM Observability documentation (`docs.datadoghq.com/llm_observability/instrumentation/otel_instrumentation/`, HTTP 200, `dateModified` 2026-11-04, canonical `/llm_observability/instrument/`) states that users can instrument LLM applications with OpenTelemetry using GenAI or OpenInference semantic conventions and send traces to Agent Observability without the Datadog SDK.",
       "source_md": "[Datadog OpenTelemetry instrumentation (checked 2026-11-04)](https://docs.datadoghq.com/llm_observability/instrumentation/otel_instrumentation/) [22]"
      },
      {
       "actor": "OpenLIT Platform",
       "role": "OTLP receiver and evaluation platform",
       "status": "Supported",
       "status_display": "Supported · as of 2026-11-04",
       "col4_md": "Same README as the SDK row (fetched 2026-11-04). OpenLIT is described as an open-source agent harness engineering platform. Traces and metrics follow OpenTelemetry GenAI semantic conventions (`gen_ai.*`). The diagram sends OTLP from an AI app or agent to an OpenLIT OTLP receiver, with an optional OpenTelemetry Collector. The quickstart shows the local dashboard at `http://127.0.0.1:3000` and the OTLP endpoint `http://127.0.0.1:4318`.",
       "source_md": "[OpenLIT README (checked 2026-11-04)](https://raw.githubusercontent.com/openlit/openlit/main/README.md) [18]"
      },
      {
       "actor": "Arize AX",
       "role": "OpenInference mapping",
       "status": "Listed",
       "status_display": "Listed · checked 2026-11-06",
       "col4_md": "Arize AX preserves raw `gen_ai.*` attributes. An explicit OpenInference attribute wins, so `gen_ai.request.model` does not overwrite an existing `llm.model_name`. Span kind is inferred from `gen_ai.operation.name`. An unrecognized operation leaves the span kind unset.",
       "source_md": "[Arize OpenInference semantic conventions](https://arize.com/docs/ax/observe/tracing/openinference-semantic-conventions) [23]"
      }
     ]
    },
    "additional_tables": [
     {
      "visible": true,
      "heading": "GenAI provider coverage matrix",
      "col4_header": "Named providers",
      "note_md": null,
      "rows": [
       {
        "actor": "semantic-conventions-genai reference matrix",
        "role": "Provider-by-operation coverage",
        "status": "Listed",
        "status_display": "Listed · checked 2026-11-06",
        "col4_md": "The semantic-conventions-genai reference matrix names providers `aws-bedrock`, `azure-ai-inference`, `azure-openai`, `groq`, `litellm`, `mistralai`, and `openai`. The Embeddings row names `aws-bedrock`, `azure-ai-inference`, `azure-openai`, and `cohere`. Fetch Response names `openai`. A Memory row is present with an empty provider cell.",
        "source_md": "[semantic-conventions-genai reference README](https://github.com/open-telemetry/semantic-conventions-genai/blob/main/reference/README.md) [24]"
       }
      ]
     }
    ],
    "censuses": [
     {
      "label": "open-telemetry/opentelemetry-python-genai",
      "as_of": "2026-11-04",
      "value_md": "13 released instrumentation packages (`1.3b0` / `1.2b0`) and 3 unreleased skeleton packages (`1.4b0.dev`, including `claude-agent-sdk` and `crewai`) emitting spans, metrics, and logs according to `semantic-conventions-genai`. [12]"
     }
    ],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Account protocols](/category/account/)** — Category index for `account` standards."
    }
   ],
   "v05_compiled_md": "---\nid: otel-genai-semconv\ntitle: \"OpenTelemetry GenAI Semantic Conventions (agents and MCP)\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: account\nform: document-format\nwire_archetype: browser_telemetry\nspec_url: https://github.com/open-telemetry/semantic-conventions-genai/blob/main/docs/gen-ai/gen-ai-agent-spans.md\nlast_checked: 2026-11-08\n---\n\n# OpenTelemetry GenAI Semantic Conventions (agents and MCP)\n\n**Category:** [Account](/category/account/) (`account`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-11-08\n\n> *This page is about the OpenTelemetry Semantic Conventions for Generative AI (GenAI), which define span, metric, and event names for GenAI agent calls and [Model Context Protocol (MCP)](/protocols/mcp/) client and server telemetry. It is not the [Agent Audit Trail (AAT)](/protocols/agent-audit-trail/) hash-chained JSON log format or the [WIMSE Agent Audit Record](/protocols/wimse-agent-audit-record/) DSSE-signed authorization record. [1][2][3][4]*\n\n**OpenTelemetry GenAI Semantic Conventions** (including Semantic Conventions for GenAI agent and framework spans, Status: Development) define semantic conventions for GenAI agent calls, including `gen_ai.operation.name`. The repository extends the OpenTelemetry Semantic Conventions with GenAI-specific conventions. [1][2] The MCP client span becomes a parent of the MCP server span regardless of transport used. In the example, INTERNAL span `invoke_agent weather-forecast-agent` (`trace=t1`) parents the client span `tools/call get-weather` (`parent=s1`). [5] The semantic-conventions-genai repository has 0 published releases and 0 tags, was created on 2026-05-05, and was last pushed on 2026-11-08, while managing dependencies on the core semantic conventions. The MCP document has Status: Development and links core semantic conventions `v1.45.0` (published 2026-11-02). [1][5][6]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Account](/category/account/) (`account`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | OpenTelemetry (`open-telemetry` GitHub organization), repository created 2026-05-05 [1] |\n| **Governed by** | open-telemetry/semantic-conventions-genai (Apache License 2.0), extending the core OpenTelemetry Semantic Conventions [1][7] |\n| **Track** | OpenTelemetry semantic conventions, Status: Development; no tagged release [1][2][5] |\n| **Status** | Development on the agent-spans document and the MCP document [2][5] |\n| **Version** | No tagged release; documents link core semantic conventions v1.45.0 (published 2026-11-02); repository pushed 2026-11-08 [1][2][5][6] |\n| **Record format** | OpenTelemetry spans, metrics, and events for GenAI clients, MCP, and provider-specific conventions [1] |\n| **Message format** | JSON-RPC `params._meta` carries unprefixed `traceparent`, `tracestate`, and `baggage` [5] |\n| **Transports** | MCP is transport independent; clients are expected to implement at least stdio or Streamable HTTP [5] |\n| **Specification** | [Semantic Conventions for GenAI agent and framework spans](https://github.com/open-telemetry/semantic-conventions-genai/blob/main/docs/gen-ai/gen-ai-agent-spans.md); [Semantic conventions for Model Context Protocol (MCP)](https://github.com/open-telemetry/semantic-conventions-genai/blob/main/docs/gen-ai/mcp.md) [2][5] |\n| **Found at** | Human-readable conventions in the repository `docs` folder; opentelemetry.io GenAI pages are moved stubs [1][8] |\n| **Licence** | Apache License 2.0 [1] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [Adoption and ecosystem](#adoption-and-ecosystem)\n4. [See also](#see-also)\n5. [References](#references)\n\n---\n\n## Problem and scope\n\nFor an AI agent, given its non-deterministic nature, telemetry is also used as a feedback loop for evaluation tools. It is important to establish standards around the shape of that telemetry to avoid lock-in caused by vendor or framework specific formats. [9] The conventions establish standards around the shape of telemetry generated by agent apps. In the MCP example, INTERNAL span `invoke_agent weather-forecast-agent` in `trace=t1` parents `tools/call get-weather`, and the MCP client span becomes a parent of the MCP server span regardless of transport used. [5][9] GenAI agent conventions extend and override GenAI span conventions and MAY apply to agent operations the framework performs locally. MCP is based on JSON RPC, and instrumenting MCP calls is RECOMMENDED to follow MCP conventions instead of RPC semantic conventions. [2][5]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **W3C Trace Context** | `W3C Trace Context` | Analogous to classic standard | W3C Trace Context is the source of the traceparent and tracestate keys that these MCP conventions write, unprefixed, into params._meta, while the conventions themselves name the GenAI agent spans and the MCP client span. [2][5] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | MCP provides a standardized way for applications to share contextual information and expose tools using JSON-RPC 2.0 messages, while these conventions name client and server spans and the duration metrics mcp.client.operation.duration, mcp.server.operation.duration, mcp.client.session.duration, and mcp.server.session.duration, and they inject trace context into params._meta. [5][10] |\n| **[Agent Audit Trail](/protocols/agent-audit-trail/)** | Peer alternative | The Agent Audit Trail (AAT) defines a JSON record with mandatory fields for agent identity, the authorizing principal, action classification, outcome tracking, and trust level, linked by SHA-256 hash chaining, while these conventions define semantic conventions for GenAI agent spans and metrics rather than a hash-chained log. [1][2][3] |\n| **[Agent2Agent Protocol (A2A)](/protocols/a2a/)** | Complements | The Agent2Agent (A2A) protocol is an open standard for secure communication and interoperability between AI agents, while these conventions describe GenAI agent creation spans that are usually applicable when working with remote agent services. [2][11] |\n| **[An Audit Record Format for AI Agent Authorization Decisions](/protocols/wimse-agent-audit-record/)** | Peer alternative | Gilda's AI agent authorization audit record (`draft-gilda-audit-agent-audit-record-03`, renamed from `draft-gilda-wimse-agent-audit-record-02`) defines a DSSE-signed record format for AI agent authorization decisions, whereas these conventions define OpenTelemetry spans for GenAI agent calls and MCP clients and servers. [2][4][5] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (15 probed or cited examples across 3 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).*\n\n### Telemetry producers, SDKs & auto-instrumentations\n\n| Actor | Role | Status | Emitted signals, scope & package | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **OpenTelemetry Python GenAI — OpenAI Agents (`opentelemetry-instrumentation-genai-openai-agents`)** | Official OTel agent instrumentation (`openai-agents >= 0.3.3, < 1`) | Supported · checked 2026-11-04 | Released package `1.3b0` in `open-telemetry/opentelemetry-python-genai` (superseding deprecated `opentelemetry-instrumentation-openai-agents-v2`); emits spans, metrics, and logs according to `semantic-conventions-genai` via `opentelemetry-util-genai` | [opentelemetry-python-genai](https://raw.githubusercontent.com/open-telemetry/opentelemetry-python-genai/main/README.md) [12] · [deprecation notice](https://raw.githubusercontent.com/open-telemetry/opentelemetry-python-contrib/main/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/README.rst) [13] |\n| **OpenTelemetry Python GenAI — LangChain (`opentelemetry-instrumentation-genai-langchain`)** | Official OTel framework instrumentation (`langchain >= 0.3.22, < 2`) | Supported · checked 2026-11-04 | Released package `1.3b0` in `open-telemetry/opentelemetry-python-genai` (`langchain >= 0.3.22, < 2`, `Semconv status` `development`); emits spans, metrics, and logs according to `semantic-conventions-genai` | [opentelemetry-python-genai](https://raw.githubusercontent.com/open-telemetry/opentelemetry-python-genai/main/README.md) [12] · [opentelemetry-python-contrib](https://raw.githubusercontent.com/open-telemetry/opentelemetry-python-contrib/main/instrumentation-genai/README.md) [14] |\n| **OpenTelemetry Python GenAI — LlamaIndex, Agno, DSPy, Smolagents & Qwen-Agent** | Official OTel agent framework instrumentations | Supported · checked 2026-11-04 | Released packages in `open-telemetry/opentelemetry-python-genai`: `opentelemetry-instrumentation-genai-llama-index` (`1.3b0`), `opentelemetry-instrumentation-genai-agno` (`1.3b0`), `opentelemetry-instrumentation-genai-dspy` (`1.3b0`), `opentelemetry-instrumentation-genai-smolagents` (`1.2b0`), and `opentelemetry-instrumentation-genai-qwen-agent` (`1.3b0`) | [opentelemetry-python-genai](https://raw.githubusercontent.com/open-telemetry/opentelemetry-python-genai/main/README.md) [12] |\n| **OpenTelemetry Python GenAI — OpenAI, Anthropic, Bedrock & Google GenAI** | Official OTel model provider instrumentations | Supported · checked 2026-11-04 | Released `1.3b0` packages in `open-telemetry/opentelemetry-python-genai` (`opentelemetry-instrumentation-genai-openai`, `opentelemetry-instrumentation-genai-anthropic`, `opentelemetry-instrumentation-genai-bedrock`, `opentelemetry-instrumentation-google-genai`) | [opentelemetry-python-genai](https://raw.githubusercontent.com/open-telemetry/opentelemetry-python-genai/main/README.md) [12] · [OTel Registry (openai)](https://raw.githubusercontent.com/open-telemetry/opentelemetry.io/main/data/registry/instrumentation-python-genaiopenai.yml) [15] |\n| **OpenTelemetry Python GenAI — Claude Agent SDK & CrewAI (`1.4b0.dev`)** | Official OTel skeleton instrumentations (`claude-agent-sdk`, `crewai`) | Development · checked 2026-11-04 | Listed under `Unreleased Instrumentations` (`skeleton`, version `1.4b0.dev`) in `open-telemetry/opentelemetry-python-genai` for `claude-agent-sdk >= 0.1.14, < 1` and `crewai >= 1.10.1, < 2` | [opentelemetry-python-genai](https://raw.githubusercontent.com/open-telemetry/opentelemetry-python-genai/main/README.md) [12] |\n| **OpenLLMetry (Traceloop)** | OpenTelemetry instrumentation set | Supported · as of 2025-03-06 | OpenLLMetry, maintained by Traceloop, is a set of extensions built on OpenTelemetry. The README says their semantic conventions are now part of OpenTelemetry and that the repo contains standard OpenTelemetry instrumentations for LLM providers and vector databases. Package `opentelemetry-instrumentation-mcp` 0.62.4 is described as OpenTelemetry mcp instrumentation, registers `opentelemetry.instrumentation.mcp:McpInstrumentor`, and depends on `opentelemetry-semantic-conventions-ai`. The README checklist marks MCP, CrewAI, and LangGraph, and marks AWS Strands as built-in OTEL support. Those lines do not name GenAI or MCP attribute keys. The 2025-03-06 OpenTelemetry post lists Traceloop OpenTelemetry Instrumentation as an external package and says Traceloop is trying to donate the instrumentation code to OpenTelemetry. | [OpenLLMetry README (checked 2026-11-04)](https://raw.githubusercontent.com/traceloop/openllmetry/main/README.md) [16] · [opentelemetry-instrumentation-mcp pyproject.toml (checked 2026-11-04)](https://raw.githubusercontent.com/traceloop/openllmetry/main/packages/opentelemetry-instrumentation-mcp/pyproject.toml) [17] · [OpenTelemetry, AI Agent Observability (published 2025-03-06; checked 2026-10-31)](https://opentelemetry.io/blog/2025/ai-agent-observability/) [9] |\n| **OpenLIT** | OpenTelemetry-native GenAI and MCP SDK | Supported · as of 2026-11-04 | Python and TypeScript SDK (`openlit.init()`, README fetched 2026-11-04). The README says OpenLIT automatically instruments supported LLM providers, frameworks, vector databases, and other AI infrastructure and exports OpenTelemetry traces and metrics, and that traces and metrics follow OpenTelemetry GenAI semantic conventions (`gen_ai.*`). The harness table includes observing every LLM call, tool call, and MCP request. Default export shown is OTLP at `http://127.0.0.1:4318`. The platform receiver is a separate row. | [OpenLIT README (checked 2026-11-04)](https://raw.githubusercontent.com/openlit/openlit/main/README.md) [18] |\n| **Pydantic Logfire / Pydantic AI** | Agent framework instrumentation | Supported · as of 2026-11-04 | `logfire.instrument_pydantic_ai()` enables instrumentation of Pydantic AI (fetched `2026-11-04`), following the OpenTelemetry Semantic Conventions for Generative AI systems (`gen_ai.operation.name`, `gen_ai.provider.name`, `gen_ai.request.model`, `gen_ai.response.model`, `gen_ai.client.token.usage`). | [Pydantic Logfire (checked 2026-11-04)](https://ai.pydantic.dev/logfire/) [19] |\n| **CrewAI** | Agent framework (baked-in instrumentation) | Supported · as of 2025-03-06 | The `2025-03-06` OpenTelemetry blog post states that some AI agent frameworks, such as CrewAI, provide built-in instrumentation that emits telemetry using OpenTelemetry semantic conventions. | [OpenTelemetry, AI Agent Observability (published 2025-03-06; checked 2026-10-31)](https://opentelemetry.io/blog/2025/ai-agent-observability/) [9] |\n| **AG2** | GenAI span middleware | Listed · checked 2026-11-06 | AG2 middleware follows the OpenTelemetry GenAI semantic conventions. `gen_ai.operation.name` includes `invoke_agent`, `chat`, `execute_tool`, and `await_human_input`. Tool spans carry `gen_ai.tool.name`, `gen_ai.tool.call.id`, and `gen_ai.tool.type`. Named backends include Jaeger, Grafana Tempo, Datadog, Honeycomb, Langfuse, Arize AX, and Arize Phoenix. | [AG2 agent telemetry](https://docs.ag2.ai/docs/user-guide/telemetry/agent/) [20] |\n\n### Observability backends, collectors & evaluation platforms\n\n| Actor | Role | Status | Ingested OTel GenAI conventions & endpoint | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Langfuse** | OpenTelemetry backend | Supported · as of 2026-11-04 | Docs fetched 2026-11-04. Langfuse can operate as an OpenTelemetry Backend and can receive traces on `/api/public/otel` (OTLP). The exporter example uses `https://cloud.langfuse.com/api/public/otel`. The page says it focuses on spans with `gen_ai.*` attributes and names OpenTelemetry GenAI semantic conventions. Attributes in the `langfuse.*` namespace map OpenTelemetry span attributes directly to the Langfuse data model and take precedence over the generic OpenTelemetry conventions. | [Langfuse OpenTelemetry docs (checked 2026-11-04)](https://langfuse.com/docs/opentelemetry/get-started) [21] |\n| **Datadog LLM Observability** | Agent observability backend | Supported · as of 2026-11-04 | Datadog's OpenTelemetry LLM Observability documentation (`docs.datadoghq.com/llm_observability/instrumentation/otel_instrumentation/`, HTTP 200, `dateModified` 2026-11-04, canonical `/llm_observability/instrument/`) states that users can instrument LLM applications with OpenTelemetry using GenAI or OpenInference semantic conventions and send traces to Agent Observability without the Datadog SDK. | [Datadog OpenTelemetry instrumentation (checked 2026-11-04)](https://docs.datadoghq.com/llm_observability/instrumentation/otel_instrumentation/) [22] |\n| **OpenLIT Platform** | OTLP receiver and evaluation platform | Supported · as of 2026-11-04 | Same README as the SDK row (fetched 2026-11-04). OpenLIT is described as an open-source agent harness engineering platform. Traces and metrics follow OpenTelemetry GenAI semantic conventions (`gen_ai.*`). The diagram sends OTLP from an AI app or agent to an OpenLIT OTLP receiver, with an optional OpenTelemetry Collector. The quickstart shows the local dashboard at `http://127.0.0.1:3000` and the OTLP endpoint `http://127.0.0.1:4318`. | [OpenLIT README (checked 2026-11-04)](https://raw.githubusercontent.com/openlit/openlit/main/README.md) [18] |\n| **Arize AX** | OpenInference mapping | Listed · checked 2026-11-06 | Arize AX preserves raw `gen_ai.*` attributes. An explicit OpenInference attribute wins, so `gen_ai.request.model` does not overwrite an existing `llm.model_name`. Span kind is inferred from `gen_ai.operation.name`. An unrecognized operation leaves the span kind unset. | [Arize OpenInference semantic conventions](https://arize.com/docs/ax/observe/tracing/openinference-semantic-conventions) [23] |\n\n### GenAI provider coverage matrix\n\n| Actor | Role | Status | Named providers | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **semantic-conventions-genai reference matrix** | Provider-by-operation coverage | Listed · checked 2026-11-06 | The semantic-conventions-genai reference matrix names providers `aws-bedrock`, `azure-ai-inference`, `azure-openai`, `groq`, `litellm`, `mistralai`, and `openai`. The Embeddings row names `aws-bedrock`, `azure-ai-inference`, `azure-openai`, and `cohere`. Fetch Response names `openai`. A Memory row is present with an empty provider cell. | [semantic-conventions-genai reference README](https://github.com/open-telemetry/semantic-conventions-genai/blob/main/reference/README.md) [24] |\n\n### Ecosystem censuses\n\n- **open-telemetry/opentelemetry-python-genai** (*as of 2026-11-04*): 13 released instrumentation packages (`1.3b0` / `1.2b0`) and 3 unreleased skeleton packages (`1.4b0.dev`, including `claude-agent-sdk` and `crewai`) emitting spans, metrics, and logs according to `semantic-conventions-genai`. [12]\n\n---\n\n## See also\n\n- **Category:** [Account protocols](/category/account/)\n\n---\n\n## References\n\n1. OpenTelemetry, *OpenTelemetry GenAI Semantic Conventions* (created 2026-05-05; pushed 2026-11-08; 0 releases, 0 tags) — <https://github.com/open-telemetry/semantic-conventions-genai>\n2. OpenTelemetry, *Semantic Conventions for GenAI agent and framework spans* (Status: Development; fetched 2026-10-31) — <https://github.com/open-telemetry/semantic-conventions-genai/blob/main/docs/gen-ai/gen-ai-agent-spans.md>\n3. R. Sharif (CyberSecAI Ltd), *Agent Audit Trail: A Standard Logging Format for Autonomous AI Systems (draft-sharif-agent-audit-trail-09)* (draft-sharif-agent-audit-trail-09; 26 October 2026) — <https://www.ietf.org/archive/id/draft-sharif-agent-audit-trail-09.txt>\n4. S. Gilda, *An Audit Record Format for AI Agent Authorization Decisions (draft-gilda-audit-agent-audit-record-03)* (29 October 2026) — <https://www.ietf.org/archive/id/draft-gilda-audit-agent-audit-record-03.txt>\n5. OpenTelemetry, *Semantic conventions for Model Context Protocol (MCP)* (Status: Development; links core semantic conventions v1.45.0) — <https://github.com/open-telemetry/semantic-conventions-genai/blob/main/docs/gen-ai/mcp.md>\n6. OpenTelemetry (open-telemetry), *open-telemetry/semantic-conventions releases (v1.45.0, published 2026-11-02)* (v1.45.0 published 2026-11-02; fetched 2026-11-08) — <https://github.com/open-telemetry/semantic-conventions/releases>\n7. OpenTelemetry, *open-telemetry/semantic-conventions* (created 2023-05-09; pushed 2026-10-30) — <https://github.com/open-telemetry/semantic-conventions>\n8. OpenTelemetry, *Moved: Generative AI semantic conventions* (fetched 2026-10-31) — <https://opentelemetry.io/docs/specs/semconv/gen-ai/>\n9. Guangya Liu (IBM) and Sujay Solomon (Google), *AI Agent Observability - Evolving Standards and Best Practices* (published 2025-03-06; page last modified 2026-02-24) — <https://opentelemetry.io/blog/2025/ai-agent-observability/>\n10. Model Context Protocol, *Specification* (version 2026-07-28; fetched 2026-10-30) — <https://modelcontextprotocol.io/specification/2026-07-28>\n11. A2A Protocol, *Overview - A2A Protocol* (fetched 2026-10-30) — <https://a2a-protocol.org/latest/specification/>\n12. OpenTelemetry, *OpenTelemetry Python GenAI Instrumentations* (checked 2026-11-04) — <https://raw.githubusercontent.com/open-telemetry/opentelemetry-python-genai/main/README.md>\n13. OpenTelemetry, *deprecation notice* (checked 2026-11-04) — <https://raw.githubusercontent.com/open-telemetry/opentelemetry-python-contrib/main/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/README.rst>\n14. OpenTelemetry, *opentelemetry-python-contrib* (checked 2026-11-04) — <https://raw.githubusercontent.com/open-telemetry/opentelemetry-python-contrib/main/instrumentation-genai/README.md>\n15. OpenTelemetry, *OTel Registry (openai)* (checked 2026-11-04) — <https://raw.githubusercontent.com/open-telemetry/opentelemetry.io/main/data/registry/instrumentation-python-genaiopenai.yml>\n16. OpenLLMetry (Traceloop), *OpenLLMetry README* (checked 2026-11-04) — <https://raw.githubusercontent.com/traceloop/openllmetry/main/README.md>\n17. OpenLLMetry (Traceloop), *opentelemetry-instrumentation-mcp pyproject.toml* (checked 2026-11-04) — <https://raw.githubusercontent.com/traceloop/openllmetry/main/packages/opentelemetry-instrumentation-mcp/pyproject.toml>\n18. OpenLIT, *OpenLIT: the open-source agent harness engineering platform* (checked 2026-11-04) — <https://raw.githubusercontent.com/openlit/openlit/main/README.md>\n19. Pydantic, *Pydantic Logfire Debugging and Monitoring | Pydantic Docs* (checked 2026-11-04) — <https://ai.pydantic.dev/logfire/>\n20. AG2, *Agent telemetry* (fetched 2026-11-06) — <https://docs.ag2.ai/docs/user-guide/telemetry/agent/>\n21. Langfuse, *OpenTelemetry (OTEL) for LLM Observability - Langfuse* (checked 2026-11-04) — <https://langfuse.com/docs/opentelemetry/get-started>\n22. Datadog, *OpenTelemetry Instrumentation* (checked 2026-11-04) — <https://docs.datadoghq.com/llm_observability/instrumentation/otel_instrumentation/>\n23. Arize, *OpenInference semantic conventions* (fetched 2026-11-06) — <https://arize.com/docs/ax/observe/tracing/openinference-semantic-conventions>\n24. OpenTelemetry, *semantic-conventions-genai reference README* (fetched 2026-11-06) — <https://github.com/open-telemetry/semantic-conventions-genai/blob/main/reference/README.md>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "erc-8001",
   "name": "ERC-8001: Agent Coordination Framework",
   "acronym": "ERC-8001",
   "aliases": [
    "EIP-8001"
   ],
   "collisions": [],
   "step": "coordinate",
   "parties": [
    "agent-agent"
   ],
   "form": "onchain-registry",
   "track": "community",
   "scope": "general",
   "question": "How can several agents agree on-chain that a coordinated action may run only once every required participant has signed an acceptance?",
   "analog": "A contract that takes effect only when every party has countersigned",
   "origin": {
    "org": "Ethereum community (Kwame Bryan)",
    "date": "2025-08-02"
   },
   "governance": "Ethereum EIP/ERC process (Ethereum Magicians discussion + ERCs repository); status Final",
   "native_status": "Final Standards Track ERC (moved to Last Call 2025-12-02 and to Final 2025-12-16)",
   "phase": "stable",
   "implementation": "prototype",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "version": {
    "label": "Final, created 2025-08-02",
    "date": "2025-12-16"
   },
   "spec_url": "https://eips.ethereum.org/EIPS/eip-8001",
   "discovery": {
    "mechanism": "EVM smart-contract interface; an initiator posts an EIP-712 intent and participants post EIP-712 or ERC-1271 acceptances to an ERC-8001 contract",
    "path": "none — no well-known file; discovery is by contract address/ABI"
   },
   "probe": {
    "method": "eth_call",
    "path": "{contract_address}",
    "parse": "Contract implements the ERC-8001 functions (proposeCoordination, acceptCoordination, executeCoordination, cancelCoordination, getCoordinationStatus, getRequiredAcceptances, getAgentNonce) and emits the mandatory lifecycle events",
    "on_absent": "Absence at a given contract address only shows that deployment does not implement ERC-8001; there is no registry of ERC-8001 deployments to enumerate."
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://raw.githubusercontent.com/ethereum/ERCs/master/ERCS/erc-8001.md",
     "claim": "Kwame Bryan (@KBryan), *ERCS/erc-8001.md (Agent Coordination Framework)*, created 2025-08-02; status Final; fetched 2026-10-31",
     "date": null,
     "quote": "An initiator posts an intent and each participant provides a verifiable acceptance attestation. Once the required set of acceptances is present and fresh, the intent is executable. / author: Kwame Bryan (@KBryan) / status: Final\ntype: Standards Track\ncategory: ERC\ncreated: 2025-08-02\nrequires: 712, 1271, 2098, 5267 / Implementations MUST expose the following interface and events. / interface IAgentCoordination / {name: \"ERC-8001\", version: \"1\", chainId, verifyingContract} / Implementations SHOULD expose the domain via ERC-5267. / Implementations MUST use the canonical enum defined below: / `None` = default zero state (intent not found)\n\n- `Proposed` = intent proposed, not all acceptances yet\n\n- `Ready` = all participants have accepted, intent executable\n\n- `Executed` = intent successfully executed\n\n- `Cancelled` = intent explicitly cancelled\n\n- `Expired` = intent expired before execution\n\n / single-chain, multi-party agent coordination using EIP-712 attestations author: Kwame Bryan (@KBryan) discussions-to: / Bryan (@KBryan) discussions-to: https://ethereum-magicians.org/t/erc-8001-secure-intents-a-cryptographic-framework-for-autonomous-agent-coordination-draft-erc-8001/24989 status: Final type: Standards Track / → accept → execute/cancel), - Error surface and status codes. ### EIP-712 Domain Implementations / A canonicalised EIP-712 domain for agent coordination, - Typed data structures (AgentIntent, CoordinationPayload, AcceptanceAttestation), / Agents in DeFi/MEV/Web3 Gaming and Agentic Commerce often need to act together without a trusted coordinator. / Existing intent standards (e.g., ERC-7521, ERC-7683) define single-initiator flows and do not specify multi-party agreement. / an initiator's EIP-712 intent plus per-participant EIP-712/EIP-1271 acceptances. / The intent becomes executable only when the required set of acceptances is present and unexpired. / status MUST be `Ready`. / `executeCoordination` MUST revert if:\n\n- the intent is not in `Ready` state;\n- `intent.expiry <= block.timestamp`;\n- any acceptance has expired;\n- the supplied payload does not hash to `payloadHash`.\n\nIf valid:\n\n- the implementation MUST attempt execution of the behaviour represented by `executionData`;\n- the function MUST return `(success, result)`;\n- `CoordinationExecuted` MUST be emitted;\n- `getCoordinationStatus` MUST report `Executed`.\n\n / omits privacy, reputation, threshold policies, bonding, and cross-chain semantics. Those are expected as optional modules that reference this specification. / This standard does NOT prescribe storage layout, execution model, or internal mechanisms. / It is compatible with EOA and contract wallets via ECDSA and ERC-1271. It does not modify existing standards.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://eips.ethereum.org/EIPS/eip-8001",
     "claim": "Kwame Bryan (@KBryan), *ERC-8001: Agent Coordination Framework*, created 2025-08-02; fetched 2026-10-31",
     "date": null,
     "quote": "agent coordination using EIP-712 attestations Authors Kwame Bryan (@KBryan) Created 2025-08-02 Requires EIP-712, EIP-1271, / Standards Track: ERC ERC-8001: Agent Coordination Framework / using EIP-712 attestations Minimal, single-chain, multi-party agent coordination using EIP-712 attestations Jekyll en_US https://eips.ethereum.org/EIPS/eip-8001 / Status Codes Overview EIP-712 Domain Primary Types Typed Data Hashes Interface Semantics Errors Rationale / ERC specifies: A canonicalised EIP-712 domain for agent coordination, Typed data structures (AgentIntent, CoordinationPayload, / no. 8001, August 2025. Available: https://eips.ethereum.org/EIPS/eip-8001. { \"@context\": \"http://schema.org\", \"@type\": \"TechArticle\", \"headline\": \"ERC-8001: Agent / the following EIP-712 domain: {name: \"ERC-8001\", version: \"1\", chainId, verifyingContract} Implementations SHOULD expose the / Copyright and related rights waived via CC0.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://github.com/ethereum/ERCs/blob/master/ERCS/erc-8001.md",
     "claim": "Kwame Bryan (@KBryan), *ethereum/ERCs blob ERCS/erc-8001.md*, created 2025-08-02; fetched 2026-10-31",
     "date": null,
     "quote": "Agents in DeFi/MEV/Web3 Gaming and Agentic Commerce often need to act together without a trusted coordinator. Existing intent standards (e.g., ERC-7521 , ERC-7683 ) define single-initiator flows and do not specify multi-party agreement. / codes.\",\"\",\"### EIP-712 Domain\",\"\",\"Implementations MUST use the following EIP-712 domain:\",\"\",\"\",\"{name: \\\"ERC-8001\\\", version: \\\"1\\\", chainId, verifyingContract}\",\"\",\"\",\"Implementations",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://eips.ethereum.org/EIPS/eip-712",
     "claim": "Remco Bloemen, Leonid Logvinov, and Jacob Evans (Ethereum), *EIP-712: Typed structured data hashing and signing*, 2017-09-12",
     "date": "2017-09-12",
     "quote": "Specification Definition of typed structured data 𝕊",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://eips.ethereum.org/EIPS/eip-1271",
     "claim": "Francisco Giordano et al. (Ethereum), *ERC-1271: Standard Signature Validation Method for Contracts*, 2018-07-25",
     "date": "2018-07-25",
     "quote": "Backwards Compatibility Reference Implementation",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://raw.githubusercontent.com/ethereum/ERCs/master/ERCS/erc-8004.md",
     "claim": "Marco De Rossi, Davide Crapis, Jordan Ellis, and Erik Reppel, *ERCS/erc-8004.md (Trustless Agents)*, created 2025-08-13; fetched 2026-10-30",
     "date": null,
     "quote": "author: Marco De Rossi (@MarcoMetaMask), Davide Crapis (@dcrapis) <davide@ethereum.org>, Jordan Ellis <jordanellis@google.com>, Erik Reppel <erik.reppel@coinbase.com> discussions-to: https://ethereum-magicians.org/t/erc-8004-trustless-agents/25098 status: Draft type: Standards Track category: ERC created: 2025-08-13 requires: 155, 712, 721, 1271",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://eips.ethereum.org/EIPS/eip-8183",
     "claim": "Davide Crapis, Bryan Lim, Tay Weixiong, and Chooi Zuhwa, *ERC-8183: Agentic Commerce*, created 2026-02-25; fetched 2026-10-31",
     "date": null,
     "quote": "(@ai-virtual-b), Tay Weixiong (@twx-virtuals), Chooi Zuhwa (@Zuhwa) Created 2026-02-25 Discussion Link https://ethereum-magicians.org/t/erc-8183-agentic-commerce/27902 Requires EIP-20",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://github.com/ethereum/ERCs/pull/1844",
     "claim": "thamerdridi, *Update ERC-8226: add reference implementation and refine spec*, merged 2026-06-29; fetched 2026-10-31",
     "date": null,
     "quote": "\"https://github.com/ethereum/ERCs/pull/1844.diff\", \"patch_url\": \"https://github.com/ethereum/ERCs/pull/1844.patch\", \"merged_at\": \"2026-06-29T21:55:50Z\" }, \"body\": \"this pr updates ERC-8226 (Regulated Agent",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://aaif.io/blog/a2a-joins-aaif",
     "claim": "Agentic AI Foundation, *A2A joins AAIF's open agentic stack*, published 2026-08-17; modified 2026-09-24",
     "date": null,
     "quote": "A2A v1.0, the first stable specification, shipped in March 2026.",
     "ref": 9
    }
   ],
   "summary_md": "**ERC-8001: Agent Coordination Framework** defines a minimal, single-chain primitive for multi-party agent coordination. An initiator posts an intent and each participant provides a verifiable acceptance attestation. Once the required set of acceptances is present and fresh, the intent is executable. Kwame Bryan (`@KBryan`) authored the ERC. It was created on 2025-08-02 with status Final, type Standards Track, and category ERC. The requires line lists 712, 1271, 2098, and 5267. Implementations MUST expose interface `IAgentCoordination` and its events. The calls are `proposeCoordination`, `acceptCoordination`, `executeCoordination`, and `cancelCoordination`, plus the views `getCoordinationStatus`, `getRequiredAcceptances`, and `getAgentNonce`. Implementations MUST use the EIP-712 domain `{name: \"ERC-8001\", version: \"1\", chainId, verifyingContract}`. Implementations SHOULD expose that domain via ERC-5267. The EIP-712 domain fixes `version` to `\"1\"` on the name `\"ERC-8001\"`, which is the only domain version the specification states. Implementations MUST use the canonical `Status` enum `None`, `Proposed`, `Ready`, `Executed`, `Cancelled`, and `Expired`. `None` is the default zero state when the intent is not found. `Proposed` means the intent is proposed and not all acceptances are in yet. `Ready` means all participants have accepted and the intent is executable. `Executed` means the intent successfully executed. `Cancelled` means the intent was explicitly cancelled. `Expired` means the intent expired before execution.",
   "part_of": null,
   "group": null,
   "use_cases": [
    "agent-to-agent-messaging"
   ],
   "audience": [
    "agent-builder",
    "platform"
   ],
   "pairs_with": [
    "erc-8004",
    "erc-8183",
    "erc-8226",
    "a2a"
   ],
   "prerequisites": [],
   "dispute": null,
   "last_verified": "2026-11-12",
   "history": [
    {
     "date": "2026-10-20",
     "note": "initial record; verified against eips.ethereum.org/EIPS/eip-8001, the ERCs repository file and commit history (Last Call 2025-12-02, Final 2025-12-16), and eips.ethereum.org/EIPS/eip-8107 (related ENS Trust Registry, Review)"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "watch": [
    {
     "type": "erc",
     "num": 8001
    },
    {
     "type": "erc",
     "num": 8107
    }
   ],
   "hatnote_md": "",
   "tier": "spec_brief",
   "lifecycle_status": "published_standard",
   "wire_archetype": "harnesses_rpc_ui",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": null,
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**ERC-8001: Agent Coordination Framework** defines a minimal, single-chain primitive for multi-party agent coordination. An initiator posts an intent and each participant provides a verifiable acceptance attestation. Once the required set of acceptances is present and fresh, the intent is executable. [1] Kwame Bryan (`@KBryan`) authored the ERC. It was created on 2025-08-02 with status Final, type Standards Track, and category ERC. The requires line lists 712, 1271, 2098, and 5267. [1] Implementations MUST expose interface `IAgentCoordination` and its events. The calls are `proposeCoordination`, `acceptCoordination`, `executeCoordination`, and `cancelCoordination`, plus the views `getCoordinationStatus`, `getRequiredAcceptances`, and `getAgentNonce`. [1] Implementations MUST use the EIP-712 domain `{name: \"ERC-8001\", version: \"1\", chainId, verifyingContract}`. Implementations SHOULD expose that domain via ERC-5267. [1] The EIP-712 domain fixes `version` to `\"1\"` on the name `\"ERC-8001\"`, which is the only domain version the specification states. [1] Implementations MUST use the canonical `Status` enum `None`, `Proposed`, `Ready`, `Executed`, `Cancelled`, and `Expired`. `None` is the default zero state when the intent is not found. `Proposed` means the intent is proposed and not all acceptances are in yet. `Ready` means all participants have accepted and the intent is executable. `Executed` means the intent successfully executed. `Cancelled` means the intent was explicitly cancelled. `Expired` means the intent expired before execution. [1]",
   "v05_identity_sentence_md": "**ERC-8001: Agent Coordination Framework** defines a minimal, single-chain primitive for multi-party agent coordination. An initiator posts an intent and each participant provides a verifiable acceptance attestation. Once the required set of acceptances is present and fresh, the intent is executable. [1] Kwame Bryan (`@KBryan`) authored the ERC. It was created on 2025-08-02 with status Final, type Standards Track, and category ERC. The requires line lists 712, 1271, 2098, and 5267. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Coordinate](/category/coordinate/) (`coordinate`)"
    },
    {
     "label": "Form",
     "value_md": "On-chain registry (`onchain-registry`)"
    },
    {
     "label": "Originated by",
     "value_md": "Kwame Bryan (`@KBryan`), created 2025-08-02 [1][2]"
    },
    {
     "label": "Governed by",
     "value_md": "Ethereum Standards Track (`ERC`, Final status as of 2025-12-16) [1][3]"
    },
    {
     "label": "Track",
     "value_md": "Ethereum Standards Track (ERC) [2]"
    },
    {
     "label": "Status",
     "value_md": "Final Standards Track ERC (moved to Last Call 2025-12-02 and to Final 2025-12-16) [1][2]"
    },
    {
     "label": "Version",
     "value_md": "EIP-712 Domain `version: \"1\"` (`status: Final`) [1][2]"
    },
    {
     "label": "Wire format",
     "value_md": "Solidity ABI calldata + EIP-712 typed structured data (`AgentIntent`, `CoordinationPayload`, `AcceptanceAttestation`) [1][2]"
    },
    {
     "label": "Specification",
     "value_md": "https://eips.ethereum.org/EIPS/eip-8001 [2]"
    },
    {
     "label": "Found at",
     "value_md": "On-chain contract address and ABI (`IAgentCoordination`), with optional `ERC-5267` EIP-712 domain exposure (`SHOULD`, `{name: \"ERC-8001\", version: \"1\", chainId, verifyingContract}`) rather than a discovery mechanism [2][3]"
    },
    {
     "label": "Licence",
     "value_md": "CC0 1.0 Universal (public domain waiver) [2]"
    }
   ],
   "v05_problem_md": "Agents in DeFi/MEV/Web3 Gaming and Agentic Commerce often need to act together without a trusted coordinator. Existing intent standards (e.g., ERC-7521, ERC-7683) define single-initiator flows and do not specify multi-party agreement. [1] The primitive pairs an initiator's EIP-712 intent with per-participant EIP-712/EIP-1271 acceptances. The intent becomes executable only when the required set of acceptances is present and unexpired. [1] When all participants have accepted, status MUST be Ready. `executeCoordination` MUST revert if the intent is not in the Ready state, if `intent.expiry` is less than or equal to `block.timestamp`, if any acceptance has expired, or if the supplied payload does not hash to `payloadHash`. [1] ERC-8001 omits privacy, reputation, threshold policies, bonding, and cross-chain semantics. Those are expected as optional modules that reference this specification. This standard does NOT prescribe storage layout, execution model, or internal mechanisms. [1] It is compatible with EOA and contract wallets via ECDSA and ERC-1271, and it does not modify existing standards. [1]",
   "v05_mechanism_delta_md": "The primitive pairs an initiator's EIP-712 intent with per-participant EIP-712/EIP-1271 acceptances. The intent becomes executable only when the required set of acceptances is present and unexpired. [1] When all participants have accepted, status MUST be Ready. `executeCoordination` MUST revert if the intent is not in the Ready state, if `intent.expiry` is less than or equal to `block.timestamp`, if any acceptance has expired, or if the supplied payload does not hash to `payloadHash`. [1]",
   "v05_scope_boundary_md": "ERC-8001 omits privacy, reputation, threshold policies, bonding, and cross-chain semantics. Those are expected as optional modules that reference this specification. This standard does NOT prescribe storage layout, execution model, or internal mechanisms. [1] It is compatible with EOA and contract wallets via ECDSA and ERC-1271, and it does not modify existing standards. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "EIP-712: Typed structured data hashing and signing",
      "spec_or_rfc": "EIP-712",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "ERC-8001 starts when an initiator posts an EIP-712 signed intent naming the participants, and the intent becomes executable only after every required signed acceptance is present and unexpired, discovered by contract address and ABI. [2][4]"
     },
     {
      "name": "EIP-1271: Standard Signature Validation Method for Contracts",
      "spec_or_rfc": "ERC-1271 (EIP-1271)",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "Each participant posts its own signed acceptance of that EIP-712 intent, using ERC-1271 when the participant is a contract wallet, and the spec fixes the lifecycle and the events the contract must emit. [2][5]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "erc-8004",
      "target_name": "ERC-8004: Trustless Agents",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "ERC-8004 is the Trustless Agents on-chain registry, while ERC-8001 is the coordination contract that becomes executable only after every party has posted an EIP-712 acceptance, or ERC-1271 for a contract wallet. [2][6]"
     },
     {
      "target_id": "erc-8183",
      "target_name": "ERC-8183: Agentic Commerce",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "ERC-8183 defines an on-chain Agentic Commerce job escrow state machine (Open, Funded, Submitted, Completed, Rejected, Expired) with evaluator attestation, while ERC-8001 is the EIP-712 countersigned multi-party intent coordination contract. [2][7]"
     },
     {
      "target_id": "erc-8226",
      "target_name": "ERC-8226 Regulated Agent Mandate",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "ERC-8226 is the Regulated Agent Mandate on-chain record, while ERC-8001 is the EIP-712 coordination contract, with ERC-1271 acceptance for contract wallets, discovered by address and ABI. [2][8]"
     },
     {
      "target_id": "a2a",
      "target_name": "Agent2Agent Protocol (A2A)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ERC-8001 coordination is an Ethereum contract of EIP-712 signed intents discovered by address and ABI, while A2A coordination uses an HTTP Agent Card at /.well-known/agent-card.json and JSON-RPC 2.0, gRPC, or HTTP+JSON. [2][9]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Coordinate protocols](/category/coordinate/)** — Category index for `coordinate` standards."
    }
   ],
   "v05_compiled_md": "---\nid: erc-8001\ntitle: \"ERC-8001: Agent Coordination Framework\"\ntier: spec_brief\nlifecycle_status: published_standard\ncategory: coordinate\nform: onchain-registry\nwire_archetype: harnesses_rpc_ui\nspec_url: https://eips.ethereum.org/EIPS/eip-8001\nlast_checked: 2026-11-12\n---\n\n# ERC-8001: Agent Coordination Framework\n\n**Category:** [Coordinate](/category/coordinate/) (`coordinate`) · **Form:** On-chain registry (`onchain-registry`) · **Last checked:** 2026-11-12\n\n**ERC-8001: Agent Coordination Framework** defines a minimal, single-chain primitive for multi-party agent coordination. An initiator posts an intent and each participant provides a verifiable acceptance attestation. Once the required set of acceptances is present and fresh, the intent is executable. [1] Kwame Bryan (`@KBryan`) authored the ERC. It was created on 2025-08-02 with status Final, type Standards Track, and category ERC. The requires line lists 712, 1271, 2098, and 5267. [1] Implementations MUST expose interface `IAgentCoordination` and its events. The calls are `proposeCoordination`, `acceptCoordination`, `executeCoordination`, and `cancelCoordination`, plus the views `getCoordinationStatus`, `getRequiredAcceptances`, and `getAgentNonce`. [1] Implementations MUST use the EIP-712 domain `{name: \"ERC-8001\", version: \"1\", chainId, verifyingContract}`. Implementations SHOULD expose that domain via ERC-5267. [1] The EIP-712 domain fixes `version` to `\"1\"` on the name `\"ERC-8001\"`, which is the only domain version the specification states. [1] Implementations MUST use the canonical `Status` enum `None`, `Proposed`, `Ready`, `Executed`, `Cancelled`, and `Expired`. `None` is the default zero state when the intent is not found. `Proposed` means the intent is proposed and not all acceptances are in yet. `Ready` means all participants have accepted and the intent is executable. `Executed` means the intent successfully executed. `Cancelled` means the intent was explicitly cancelled. `Expired` means the intent expired before execution. [1]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Coordinate](/category/coordinate/) (`coordinate`) |\n| **Form** | On-chain registry (`onchain-registry`) |\n| **Originated by** | Kwame Bryan (`@KBryan`), created 2025-08-02 [1][2] |\n| **Governed by** | Ethereum Standards Track (`ERC`, Final status as of 2025-12-16) [1][3] |\n| **Track** | Ethereum Standards Track (ERC) [2] |\n| **Status** | Final Standards Track ERC (moved to Last Call 2025-12-02 and to Final 2025-12-16) [1][2] |\n| **Version** | EIP-712 Domain `version: \"1\"` (`status: Final`) [1][2] |\n| **Wire format** | Solidity ABI calldata + EIP-712 typed structured data (`AgentIntent`, `CoordinationPayload`, `AcceptanceAttestation`) [1][2] |\n| **Specification** | https://eips.ethereum.org/EIPS/eip-8001 [2] |\n| **Found at** | On-chain contract address and ABI (`IAgentCoordination`), with optional `ERC-5267` EIP-712 domain exposure (`SHOULD`, `{name: \"ERC-8001\", version: \"1\", chainId, verifyingContract}`) rather than a discovery mechanism [2][3] |\n| **Licence** | CC0 1.0 Universal (public domain waiver) [2] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nAgents in DeFi/MEV/Web3 Gaming and Agentic Commerce often need to act together without a trusted coordinator. Existing intent standards (e.g., ERC-7521, ERC-7683) define single-initiator flows and do not specify multi-party agreement. [1] The primitive pairs an initiator's EIP-712 intent with per-participant EIP-712/EIP-1271 acceptances. The intent becomes executable only when the required set of acceptances is present and unexpired. [1] When all participants have accepted, status MUST be Ready. `executeCoordination` MUST revert if the intent is not in the Ready state, if `intent.expiry` is less than or equal to `block.timestamp`, if any acceptance has expired, or if the supplied payload does not hash to `payloadHash`. [1] ERC-8001 omits privacy, reputation, threshold policies, bonding, and cross-chain semantics. Those are expected as optional modules that reference this specification. This standard does NOT prescribe storage layout, execution model, or internal mechanisms. [1] It is compatible with EOA and contract wallets via ECDSA and ERC-1271, and it does not modify existing standards. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **EIP-712: Typed structured data hashing and signing** | `EIP-712` | Profiles classic standard | ERC-8001 starts when an initiator posts an EIP-712 signed intent naming the participants, and the intent becomes executable only after every required signed acceptance is present and unexpired, discovered by contract address and ABI. [2][4] |\n| **EIP-1271: Standard Signature Validation Method for Contracts** | `ERC-1271 (EIP-1271)` | Profiles classic standard | Each participant posts its own signed acceptance of that EIP-712 intent, using ERC-1271 when the participant is a contract wallet, and the spec fixes the lifecycle and the events the contract must emit. [2][5] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[ERC-8004: Trustless Agents](/protocols/erc-8004/)** | Complements | ERC-8004 is the Trustless Agents on-chain registry, while ERC-8001 is the coordination contract that becomes executable only after every party has posted an EIP-712 acceptance, or ERC-1271 for a contract wallet. [2][6] |\n| **[ERC-8183: Agentic Commerce](/protocols/erc-8183/)** | Complements | ERC-8183 defines an on-chain Agentic Commerce job escrow state machine (Open, Funded, Submitted, Completed, Rejected, Expired) with evaluator attestation, while ERC-8001 is the EIP-712 countersigned multi-party intent coordination contract. [2][7] |\n| **[ERC-8226 Regulated Agent Mandate](/protocols/erc-8226/)** | Complements | ERC-8226 is the Regulated Agent Mandate on-chain record, while ERC-8001 is the EIP-712 coordination contract, with ERC-1271 acceptance for contract wallets, discovered by address and ABI. [2][8] |\n| **[Agent2Agent Protocol (A2A)](/protocols/a2a/)** | Peer alternative | ERC-8001 coordination is an Ethereum contract of EIP-712 signed intents discovered by address and ABI, while A2A coordination uses an HTTP Agent Card at /.well-known/agent-card.json and JSON-RPC 2.0, gRPC, or HTTP+JSON. [2][9] |\n\n---\n\n## See also\n\n- **Category:** [Coordinate protocols](/category/coordinate/)\n\n---\n\n## References\n\n1. Kwame Bryan (@KBryan), *ERCS/erc-8001.md (Agent Coordination Framework)* (created 2025-08-02; status Final; fetched 2026-10-31) — <https://raw.githubusercontent.com/ethereum/ERCs/master/ERCS/erc-8001.md>\n2. Kwame Bryan (@KBryan), *ERC-8001: Agent Coordination Framework* (created 2025-08-02; fetched 2026-10-31) — <https://eips.ethereum.org/EIPS/eip-8001>\n3. Kwame Bryan (@KBryan), *ethereum/ERCs blob ERCS/erc-8001.md* (created 2025-08-02; fetched 2026-10-31) — <https://github.com/ethereum/ERCs/blob/master/ERCS/erc-8001.md>\n4. Remco Bloemen, Leonid Logvinov, and Jacob Evans (Ethereum), *EIP-712: Typed structured data hashing and signing* (2017-09-12) — <https://eips.ethereum.org/EIPS/eip-712>\n5. Francisco Giordano et al. (Ethereum), *ERC-1271: Standard Signature Validation Method for Contracts* (2018-07-25) — <https://eips.ethereum.org/EIPS/eip-1271>\n6. Marco De Rossi, Davide Crapis, Jordan Ellis, and Erik Reppel, *ERCS/erc-8004.md (Trustless Agents)* (created 2025-08-13; fetched 2026-10-30) — <https://raw.githubusercontent.com/ethereum/ERCs/master/ERCS/erc-8004.md>\n7. Davide Crapis, Bryan Lim, Tay Weixiong, and Chooi Zuhwa, *ERC-8183: Agentic Commerce* (created 2026-02-25; fetched 2026-10-31) — <https://eips.ethereum.org/EIPS/eip-8183>\n8. thamerdridi, *Update ERC-8226: add reference implementation and refine spec* (merged 2026-06-29; fetched 2026-10-31) — <https://github.com/ethereum/ERCs/pull/1844>\n9. Agentic AI Foundation, *A2A joins AAIF's open agentic stack* (published 2026-08-17; modified 2026-09-24) — <https://aaif.io/blog/a2a-joins-aaif>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "erc-8126",
   "name": "ERC-8126: AI Agent Verification",
   "acronym": "ERC-8126",
   "aliases": [
    "EIP-8126"
   ],
   "collisions": [],
   "step": "identify",
   "parties": [
    "agent-registry",
    "agent-agent"
   ],
   "form": "onchain-registry",
   "track": "community",
   "scope": "general",
   "question": "How can an agent registered under ERC-8004 be put through standard security checks and carry a comparable risk score?",
   "analog": "A security audit report with a credit-style score, attached to an on-chain identity",
   "origin": {
    "org": "Ethereum community (Leigh Cronian, Cybercentry; Chris Johnson, Virtuals)",
    "date": "2026-01-15"
   },
   "governance": "Ethereum EIP/ERC process (Ethereum Magicians discussion + ERCs repository); status Final",
   "native_status": "Final Standards Track ERC (moved to Last Call 2026-05-12 and to Final 2026-06-02); requires ERC-8004, which is still Draft",
   "phase": "stable",
   "implementation": "prototype",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "version": {
    "label": "Final, created 2026-01-15",
    "date": "2026-06-02"
   },
   "spec_url": "https://eips.ethereum.org/EIPS/eip-8126",
   "discovery": {
    "mechanism": "Agents are identified by their ERC-8004 Identity Registry token; verification attestations can be posted to ERC-8004's Validation Registry",
    "path": "none — no well-known file; discovery is by contract address/ABI"
   },
   "probe": {
    "method": "eth_call",
    "path": "{contract_address}",
    "parse": "Look up the agent in an ERC-8004 Validation Registry for ERC-8126 verification attestations; detailed results and the 0-100 risk score are readable only by the agent's wallet holder",
    "on_absent": "No attestation means no ERC-8126 provider has posted one for this agent; it says nothing about whether the agent is safe."
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://raw.githubusercontent.com/ethereum/ERCs/master/ERCS/erc-8126.md",
     "claim": "Leigh Cronian (@cybercentry) and Chris Johnson, *ERCS/erc-8126.md (AI Agent Verification)*, created 2026-01-15; status Final; fetched 2026-10-31",
     "date": null,
     "quote": "This ERC defines a standard interface for verifying AI agents on Ethereum that have been registered via ERC-8004. / Ethereum Token Verification (ETV), Media Content Verification (MCV), Solidity Code Verification (SCV), Web Application Verification (WAV), and Wallet Verification (WV). / Optional Quantum Cryptography Verification (QCV) provides future-proof encryption / author: Leigh Cronian (@cybercentry) <[email redacted]>, Chris Johnson <[email redacted]> / status: Final\ntype: Standards Track\ncategory: ERC\ncreated: 2026-01-15\nrequires: 155, 191, 712, 721, 3009, 8004 / Verification requests MUST reference an ERC-8004 `agentId` (`uint256` token ID from the Identity Registry). / The verification provider MUST call `tokenURI(agentId)` on the canonical Identity Registry contract and resolve the returned URI to fetch the agent registration JSON file. / No on-chain smart contract interface is required to submit verification requests or perform the verification types (ETV, MCV, SCV, WAV, WV, PDV, QCV). / If an on-chain component is deployed, it SHOULD include at minimum: / This ERC introduces a new standard focused on verification and does not modify any existing standards. / Johnson discussions-to: https://ethereum-magicians.org/t/erc-8126-ai-agent-verification/27445 status: Final type: Standards Track category: ERC created: 2026-01-15 requires: 155, / As AI agents become increasingly prevalent in blockchain ecosystems, users need standardized ways to verify their authenticity and trustworthiness. / Current solutions are fragmented, with no unified standard for agent registration or verification. / Compliant verification providers MUST implement **all** of the following verification types and apply them using the resolved metadata: / The overall risk score MUST be calculated as the mean of all applicable verification scores: / Verification providers implement this standard using Private Data Verification (PDV) to generate Zero-Knowledge Proofs (ZKPs). / Verification providers MAY post final risk scores and Proof IDs as attestations to the ERC-8004 Validation Registry using its pluggable validation interface. / Detailed verification results are accessible only to the AI agent's wallet holder and include a unified risk score (0-100) / Users should consider that verification through this standard indicates the agent has passed specific technical checks at a point in time, but does not guarantee the agent's future behavior or intentions. / EIP-712 (Typed Data Signing): Verification requests use structured data (agentId, metadata hashes, nonce, payment details). / EIP-191 (Signed Data Standard): Wallet verification and request authorization require proving control over the agent wallet. / Verification requests MUST reference an ERC-8004 agentId (uint256 token ID from the Identity Registry).",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://raw.githubusercontent.com/ethereum/ERCs/master/ERCS/erc-8004.md",
     "claim": "Marco De Rossi, Davide Crapis, Jordan Ellis, and Erik Reppel, *ERCS/erc-8004.md (Trustless Agents)*, created 2025-08-13; status Draft; fetched 2026-10-31",
     "date": null,
     "quote": "status: Draft\ntype: Standards Track\ncategory: ERC\ncreated: 2025-08-13 / valid EIP-712 signature for EOAs or ERC-1271 for smart contract wallets / author: Marco De Rossi (@MarcoMetaMask), Davide Crapis (@dcrapis) <davide@ethereum.org>, Jordan Ellis <jordanellis@google.com>, Erik Reppel <erik.reppel@coinbase.com> discussions-to: https://ethereum-magicians.org/t/erc-8004-trustless-agents/25098 status: Draft type: Standards Track category: ERC created: 2025-08-13 requires: 155, 712, 721, 1271",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://eips.ethereum.org/EIPS/eip-8126",
     "claim": "Leigh Cronian (@cybercentry) and Chris Johnson, *ERC-8126: AI Agent Verification*, created 2026-01-15; fetched 2026-10-31",
     "date": null,
     "quote": "Leigh Cronian (@cybercentry) < [email redacted] >, Chris Johnson < [email redacted] > / Standards Track: ERC ERC-8126: AI Agent Verification Special / 2026. Available: https://eips.ethereum.org/EIPS/eip-8126. { \"@context\": \"http://schema.org\", \"@type\": \"TechArticle\", \"headline\": \"ERC-8126: AI Agent Verification\", \"name\": / on Ethereum that have been registered via ERC-8004. It enables AI agents to undergo / in the ERC-8004 Identity Registry Setting the tokenURI to a compatible metadata JSON file / Copyright and related rights waived via CC0.",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://github.com/ethereum/ERCs/blob/master/ERCS/erc-8126.md",
     "claim": "Leigh Cronian (@cybercentry) and Chris Johnson, *ethereum/ERCs blob ERCS/erc-8126.md*, created 2026-01-15; fetched 2026-10-31",
     "date": null,
     "quote": "Leigh Cronian (@cybercentry) <[email redacted]>, Chris Johnson <[email redacted]> / Agents Registry)\\u003c/strong\\u003e: Builds on the canonical \\u003ca href=\\\"/ethereum/ERCs/blob/master/ERCS/eip-721.md\\\"\\u003eERC-721\\u003c/a\\u003e Non-Fungible Token Standard (with / Final\",\"type: Standards Track\",\"category: ERC\",\"created: 2026-01-15\",\"requires: 155, 191, 712, 721, 3009, 8004\",\"---\",\"\",\"## Abstract\",\"\",\"This ERC defines",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://eips.ethereum.org/EIPS/eip-8004",
     "claim": "Marco De Rossi, Davide Crapis, Jordan Ellis, and Erik Reppel, *ERC-8004: Trustless Agents*, created 2025-08-13; status Draft; fetched 2026-10-31",
     "date": null,
     "quote": "ERC-8004: Trustless Agents { \"@type\": \"WebSite\", \"url\": \"https://eips.ethereum.org\", \"name\": \"Ethereum Improvement Proposals\", \"description\": \"Ethereum / Identity Registry - A minimal on-chain handle based on ERC-721 with URIStorage extension that resolves to an agent’s registration file, providing every agent with a portable, censorship-resistant identifier.",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://eips.ethereum.org/EIPS/eip-712",
     "claim": "Remco Bloemen, Leonid Logvinov, and Jacob Evans (Ethereum), *EIP-712: Typed structured data hashing and signing*, 2017-09-12",
     "date": "2017-09-12",
     "quote": "EIP-712: Typed structured data hashing and signing … A procedure for hashing and signing of typed structured data as opposed to just bytestrings.",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://eips.ethereum.org/EIPS/eip-1271",
     "claim": "Francisco Giordano et al. (Ethereum), *ERC-1271: Standard Signature Validation Method for Contracts*, 2018-07-25",
     "date": "2018-07-25",
     "quote": "ERC-1271: Standard Signature Validation Method for Contracts … Standard way to verify a signature when the account is a smart contract",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://github.com/ethereum/ERCs/blob/master/ERCS/erc-8196.md",
     "claim": "ethereum/ERCs, *ERCs/ERCS/erc-8196.md at master · ethereum/ERCs*, fetched 2026-10-31",
     "date": null,
     "quote": "\\[email redacted]\\u003e, Chris Johnson \\[email redacted]\\u003e\",\"discussions-to: https://ethereum-magicians.org/t/erc-8196-ai-agent-authenticated-wallet/27987\",\"status: Final\",\"type:",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://raw.githubusercontent.com/decentralized-identity/kya-os-mcp/main/SPEC.md",
     "claim": "Dylan Hobbs (@H0BB5), KYA-OS Working Group, *KYA-OS Protocol Specification*, version 1.0.0",
     "date": null,
     "quote": "Status: Stable",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://github.com/ethereum/ERCs/pull/1844",
     "claim": "thamerdridi, *Update ERC-8226: add reference implementation and refine spec*, merged 2026-06-29; fetched 2026-10-31",
     "date": null,
     "quote": "\"https://github.com/ethereum/ERCs/pull/1844.diff\", \"patch_url\": \"https://github.com/ethereum/ERCs/pull/1844.patch\", \"merged_at\": \"2026-06-29T21:55:50Z\" }, \"body\": \"this pr updates ERC-8226 (Regulated Agent",
     "ref": 10
    }
   ],
   "summary_md": "**ERC-8126: AI Agent Verification** defines a standard interface for verifying AI agents on Ethereum that have been registered via ERC-8004, centered on five required verification processes—Ethereum Token Verification (ETV), Media Content Verification (MCV), Solidity Code Verification (SCV), Web Application Verification (WAV), and Wallet Verification (WV)—executed using Private Data Verification (PDV) zero-knowledge proofs, with Quantum Cryptography Verification (QCV) specified as an optional future-proof check. Leigh Cronian (`@cybercentry`) and Chris Johnson authored the ERC. It was created on 2026-01-15 with status Final, type Standards Track, and category ERC. The requires line lists 155, 191, 712, 721, 3009, and 8004. Verification requests MUST reference an ERC-8004 `agentId`, the `uint256` token ID from the Identity Registry. The verification provider MUST call `tokenURI(agentId)` on the canonical Identity Registry contract and resolve the returned URI to fetch the agent registration JSON file. Although classified under the ERC registry family because it resolves ERC-8004 Identity Registry tokens and can post attestations to the ERC-8004 Validation Registry, ERC-8126 is primarily an off-chain standard: no on-chain smart contract interface is required to submit requests or run the five required checks, PDV proof generation, or optional QCV, though any deployed on-chain component SHOULD expose `IERC8126`. While ERC-8126 itself is finalized (`status: Final`, `created: 2026-01-15`), its `requires` list depends on `8004` alongside finalized standards `155`, `191`, `712`, `721`, and `3009`. The required ERC-8004 file records status Draft and was created on 2025-08-13. ERC-8126 does not modify any existing standards. Agents already registered via ERC-8004 can undergo verification without changes.",
   "part_of": null,
   "group": null,
   "use_cases": [
    "prove-agent-identity",
    "audit-agent-actions"
   ],
   "audience": [
    "agent-builder",
    "platform"
   ],
   "pairs_with": [
    "erc-8004",
    "erc-8196",
    "kya-os",
    "erc-8226"
   ],
   "prerequisites": [
    "erc-8004"
   ],
   "dispute": {
    "claims": [
     "ERC-8126 front matter: status Final (Final 2026-06-02), requires 8004.",
     "ERC-8004 EIP page: status Draft."
    ],
    "summary": "ERC-8126 reached Final while it depends on ERC-8004, which is still a Draft. A Final standard is meant to be frozen, but the identity and validation registries it builds on can still change, so ERC-8126 implementations may need to follow ERC-8004 revisions."
   },
   "last_verified": "2026-11-12",
   "history": [
    {
     "date": "2026-10-20",
     "note": "initial record; verified against eips.ethereum.org/EIPS/eip-8126, the ERCs repository file and commit history (Last Call 2026-05-12, Final 2026-06-02), and the ERC-8004 EIP page (Draft); dispute recorded: Final while its dependency ERC-8004 is Draft"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "watch": [
    {
     "type": "erc",
     "num": 8126
    }
   ],
   "hatnote_md": "",
   "tier": "spec_brief",
   "lifecycle_status": "published_standard",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": null,
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**ERC-8126: AI Agent Verification** defines a standard interface for verifying AI agents on Ethereum that have been registered via ERC-8004, centered on five required verification processes—Ethereum Token Verification (ETV), Media Content Verification (MCV), Solidity Code Verification (SCV), Web Application Verification (WAV), and Wallet Verification (WV)—executed using Private Data Verification (PDV) zero-knowledge proofs, with Quantum Cryptography Verification (QCV) specified as an optional future-proof check. [1] Leigh Cronian (`@cybercentry`) and Chris Johnson authored the ERC. It was created on 2026-01-15 with status Final, type Standards Track, and category ERC. The requires line lists 155, 191, 712, 721, 3009, and 8004. [1] Verification requests MUST reference an ERC-8004 `agentId`, the `uint256` token ID from the Identity Registry. The verification provider MUST call `tokenURI(agentId)` on the canonical Identity Registry contract and resolve the returned URI to fetch the agent registration JSON file. [1] Although classified under the ERC registry family because it resolves ERC-8004 Identity Registry tokens and can post attestations to the ERC-8004 Validation Registry, ERC-8126 is primarily an off-chain standard: no on-chain smart contract interface is required to submit requests or run the five required checks, PDV proof generation, or optional QCV, though any deployed on-chain component SHOULD expose `IERC8126`. [1] While ERC-8126 itself is finalized (`status: Final`, `created: 2026-01-15`), its `requires` list depends on `8004` alongside finalized standards `155`, `191`, `712`, `721`, and `3009`. [1] The required ERC-8004 file records status Draft and was created on 2025-08-13. ERC-8126 does not modify any existing standards. Agents already registered via ERC-8004 can undergo verification without changes. [1][2]",
   "v05_identity_sentence_md": "**ERC-8126: AI Agent Verification** defines a standard interface for verifying AI agents on Ethereum that have been registered via ERC-8004, centered on five required verification processes—Ethereum Token Verification (ETV), Media Content Verification (MCV), Solidity Code Verification (SCV), Web Application Verification (WAV), and Wallet Verification (WV)—executed using Private Data Verification (PDV) zero-knowledge proofs, with Quantum Cryptography Verification (QCV) specified as an optional future-proof check. [1] Leigh Cronian (`@cybercentry`) and Chris Johnson authored the ERC. It was created on 2026-01-15 with status Final, type Standards Track, and category ERC. The requires line lists 155, 191, 712, 721, 3009, and 8004. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Identify](/category/identify/) (`identify`)"
    },
    {
     "label": "Form",
     "value_md": "On-chain registry (`onchain-registry`)"
    },
    {
     "label": "Originated by",
     "value_md": "Leigh Cronian (`@cybercentry`, Cybercentry) and Chris Johnson (`virtuals.io`, Virtuals Protocol) [3][4]"
    },
    {
     "label": "Governed by",
     "value_md": "Ethereum Improvement Proposals / Ethereum ERCs track (`ethereum/ERCs`) [1][4]"
    },
    {
     "label": "Track",
     "value_md": "Ethereum Standards Track (ERC) [3]"
    },
    {
     "label": "Status",
     "value_md": "Final Standards Track ERC (moved to Last Call 2026-05-12 and to Final 2026-06-02); requires ERC-8004, which is still Draft [1][3][4]"
    },
    {
     "label": "Version",
     "value_md": "ERC-8126 (`status: Final`, finalized 2026-06-02; created 2026-01-15) [1][3][4]"
    },
    {
     "label": "Wire format",
     "value_md": "Primarily off-chain verification over `ERC-8004` JSON registration manifests (`tokenURI(agentId)`), Ethereum JSON-RPC (`eth_getCode`), and Zero-Knowledge Proofs (ZKPs); optional on-chain `IERC8126` Solidity ABI (`SHOULD` if deployed) [1][3][5]"
    },
    {
     "label": "Specification",
     "value_md": "https://eips.ethereum.org/EIPS/eip-8126 [3]"
    },
    {
     "label": "Found at",
     "value_md": "Primarily off-chain; resolves `ERC-8004` Identity Registry `tokenURI(agentId)` and optional `IERC8126` / `ERC-8004` Validation Registry contracts (`/.well-known/agent-registration.json` is an optional `ERC-8004` domain-binding proof checked during `WV`, not an `ERC-8126` discovery path) [3][5]"
    },
    {
     "label": "Licence",
     "value_md": "CC0 1.0 Universal (public domain waiver) [3]"
    }
   ],
   "v05_problem_md": "As AI agents become increasingly prevalent in blockchain ecosystems, users need standardized ways to verify their authenticity and trustworthiness. Current solutions are fragmented, with no unified standard for agent registration or verification. [1] Compliant verification providers MUST apply all five mandatory checks (ETV, MCV, SCV, WAV, and WV) against the resolved agent registration metadata and compute the overall risk score as the arithmetic mean of all applicable verification scores. [1] Providers generate zero-knowledge proofs via Private Data Verification (PDV) and MAY publish the resulting risk scores and Proof IDs as attestations to the ERC-8004 Validation Registry through its pluggable validation interface. [1] Detailed verification reports (including the 0-100 unified risk score) are restricted to the AI agent wallet holder, and verification requests and checks execute off-chain without requiring a dedicated smart contract. [1] Quantum Cryptography Verification (QCV) remains an optional future-proof extension outside the five required checks, and passing verification reflects point-in-time technical checks rather than a guarantee of future agent behavior or intent. [1]",
   "v05_mechanism_delta_md": "Compliant verification providers MUST apply all five mandatory checks (ETV, MCV, SCV, WAV, and WV) against the resolved agent registration metadata and compute the overall risk score as the arithmetic mean of all applicable verification scores. [1] Providers generate zero-knowledge proofs via Private Data Verification (PDV) and MAY publish the resulting risk scores and Proof IDs as attestations to the ERC-8004 Validation Registry through its pluggable validation interface. [1]",
   "v05_scope_boundary_md": "Detailed verification reports (including the 0-100 unified risk score) are restricted to the AI agent wallet holder, and verification requests and checks execute off-chain without requiring a dedicated smart contract. [1] Quantum Cryptography Verification (QCV) remains an optional future-proof extension outside the five required checks, and passing verification reflects point-in-time technical checks rather than a guarantee of future agent behavior or intent. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "EIP-712: Typed structured data hashing and signing",
      "spec_or_rfc": "EIP-712",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "ERC-8126 verification requests sign structured fields (`agentId`, metadata hashes, `nonce`, and payment details) with EIP-712 for human-readable wallet authorization alongside EIP-191 prefixed message signing. [1][6]"
     },
     {
      "name": "ERC-1271: Standard Signature Validation Method for Contracts",
      "spec_or_rfc": "ERC-1271 (EIP-1271)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "ERC-8126 resolves the agent's `agentWallet` from its ERC-8004 Identity Registry record, where ERC-8004 validates smart-contract agent wallets via ERC-1271 rather than EOA signatures alone. [1][2][7]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "erc-8004",
      "target_name": "ERC-8004: Trustless Agents",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "ERC-8126 requires an ERC-8004 identity, which is still Draft, and turns up to five checks into zero-knowledge proofs and a single 0-100 risk score that can be attested on the Validation Registry. [2][3]"
     },
     {
      "target_id": "erc-8196",
      "target_name": "ERC-8196: AI Agent Authenticated Wallet",
      "relation_type": "depended_on_by",
      "relation_label": "Depended on by",
      "delta_md": "ERC-8196 requires ERC-8126 and places a policy on an ERC-4337 smart account, so the wallet depends on this verification result before it executes the agent's transaction. [3][8]"
     },
     {
      "target_id": "kya-os",
      "target_name": "KYA-OS (Know Your Agent Operating System)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "KYA-OS identifies the caller with did:key or did:web and a Verifiable Credential chain revoked by StatusList2021, while ERC-8126 attaches a 0-100 risk score to an ERC-8004 agentId. [3][9]"
     },
     {
      "target_id": "erc-8226",
      "target_name": "ERC-8226 Regulated Agent Mandate",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "ERC-8226 exposes IAgentMandate.canExecute for a principal's on-chain mandate and names ERC-8004 as a compatible identity, while ERC-8126 attaches the 0-100 verification score to that identity. [3][10]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Identify protocols](/category/identify/)** — Category index for `identify` standards."
    }
   ],
   "v05_compiled_md": "---\nid: erc-8126\ntitle: \"ERC-8126: AI Agent Verification\"\ntier: spec_brief\nlifecycle_status: published_standard\ncategory: identify\nform: onchain-registry\nwire_archetype: identity_auth_crypto\nspec_url: https://eips.ethereum.org/EIPS/eip-8126\nlast_checked: 2026-11-12\n---\n\n# ERC-8126: AI Agent Verification\n\n**Category:** [Identify](/category/identify/) (`identify`) · **Form:** On-chain registry (`onchain-registry`) · **Last checked:** 2026-11-12\n\n**ERC-8126: AI Agent Verification** defines a standard interface for verifying AI agents on Ethereum that have been registered via ERC-8004, centered on five required verification processes—Ethereum Token Verification (ETV), Media Content Verification (MCV), Solidity Code Verification (SCV), Web Application Verification (WAV), and Wallet Verification (WV)—executed using Private Data Verification (PDV) zero-knowledge proofs, with Quantum Cryptography Verification (QCV) specified as an optional future-proof check. [1] Leigh Cronian (`@cybercentry`) and Chris Johnson authored the ERC. It was created on 2026-01-15 with status Final, type Standards Track, and category ERC. The requires line lists 155, 191, 712, 721, 3009, and 8004. [1] Verification requests MUST reference an ERC-8004 `agentId`, the `uint256` token ID from the Identity Registry. The verification provider MUST call `tokenURI(agentId)` on the canonical Identity Registry contract and resolve the returned URI to fetch the agent registration JSON file. [1] Although classified under the ERC registry family because it resolves ERC-8004 Identity Registry tokens and can post attestations to the ERC-8004 Validation Registry, ERC-8126 is primarily an off-chain standard: no on-chain smart contract interface is required to submit requests or run the five required checks, PDV proof generation, or optional QCV, though any deployed on-chain component SHOULD expose `IERC8126`. [1] While ERC-8126 itself is finalized (`status: Final`, `created: 2026-01-15`), its `requires` list depends on `8004` alongside finalized standards `155`, `191`, `712`, `721`, and `3009`. [1] The required ERC-8004 file records status Draft and was created on 2025-08-13. ERC-8126 does not modify any existing standards. Agents already registered via ERC-8004 can undergo verification without changes. [1][2]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Identify](/category/identify/) (`identify`) |\n| **Form** | On-chain registry (`onchain-registry`) |\n| **Originated by** | Leigh Cronian (`@cybercentry`, Cybercentry) and Chris Johnson (`virtuals.io`, Virtuals Protocol) [3][4] |\n| **Governed by** | Ethereum Improvement Proposals / Ethereum ERCs track (`ethereum/ERCs`) [1][4] |\n| **Track** | Ethereum Standards Track (ERC) [3] |\n| **Status** | Final Standards Track ERC (moved to Last Call 2026-05-12 and to Final 2026-06-02); requires ERC-8004, which is still Draft [1][3][4] |\n| **Version** | ERC-8126 (`status: Final`, finalized 2026-06-02; created 2026-01-15) [1][3][4] |\n| **Wire format** | Primarily off-chain verification over `ERC-8004` JSON registration manifests (`tokenURI(agentId)`), Ethereum JSON-RPC (`eth_getCode`), and Zero-Knowledge Proofs (ZKPs); optional on-chain `IERC8126` Solidity ABI (`SHOULD` if deployed) [1][3][5] |\n| **Specification** | https://eips.ethereum.org/EIPS/eip-8126 [3] |\n| **Found at** | Primarily off-chain; resolves `ERC-8004` Identity Registry `tokenURI(agentId)` and optional `IERC8126` / `ERC-8004` Validation Registry contracts (`/.well-known/agent-registration.json` is an optional `ERC-8004` domain-binding proof checked during `WV`, not an `ERC-8126` discovery path) [3][5] |\n| **Licence** | CC0 1.0 Universal (public domain waiver) [3] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nAs AI agents become increasingly prevalent in blockchain ecosystems, users need standardized ways to verify their authenticity and trustworthiness. Current solutions are fragmented, with no unified standard for agent registration or verification. [1] Compliant verification providers MUST apply all five mandatory checks (ETV, MCV, SCV, WAV, and WV) against the resolved agent registration metadata and compute the overall risk score as the arithmetic mean of all applicable verification scores. [1] Providers generate zero-knowledge proofs via Private Data Verification (PDV) and MAY publish the resulting risk scores and Proof IDs as attestations to the ERC-8004 Validation Registry through its pluggable validation interface. [1] Detailed verification reports (including the 0-100 unified risk score) are restricted to the AI agent wallet holder, and verification requests and checks execute off-chain without requiring a dedicated smart contract. [1] Quantum Cryptography Verification (QCV) remains an optional future-proof extension outside the five required checks, and passing verification reflects point-in-time technical checks rather than a guarantee of future agent behavior or intent. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **EIP-712: Typed structured data hashing and signing** | `EIP-712` | Profiles classic standard | ERC-8126 verification requests sign structured fields (`agentId`, metadata hashes, `nonce`, and payment details) with EIP-712 for human-readable wallet authorization alongside EIP-191 prefixed message signing. [1][6] |\n| **ERC-1271: Standard Signature Validation Method for Contracts** | `ERC-1271 (EIP-1271)` | Complements | ERC-8126 resolves the agent's `agentWallet` from its ERC-8004 Identity Registry record, where ERC-8004 validates smart-contract agent wallets via ERC-1271 rather than EOA signatures alone. [1][2][7] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[ERC-8004: Trustless Agents](/protocols/erc-8004/)** | Builds on | ERC-8126 requires an ERC-8004 identity, which is still Draft, and turns up to five checks into zero-knowledge proofs and a single 0-100 risk score that can be attested on the Validation Registry. [2][3] |\n| **[ERC-8196: AI Agent Authenticated Wallet](/protocols/erc-8196/)** | Depended on by | ERC-8196 requires ERC-8126 and places a policy on an ERC-4337 smart account, so the wallet depends on this verification result before it executes the agent's transaction. [3][8] |\n| **[KYA-OS (Know Your Agent Operating System)](/protocols/kya-os/)** | Peer alternative | KYA-OS identifies the caller with did:key or did:web and a Verifiable Credential chain revoked by StatusList2021, while ERC-8126 attaches a 0-100 risk score to an ERC-8004 agentId. [3][9] |\n| **[ERC-8226 Regulated Agent Mandate](/protocols/erc-8226/)** | Complements | ERC-8226 exposes IAgentMandate.canExecute for a principal's on-chain mandate and names ERC-8004 as a compatible identity, while ERC-8126 attaches the 0-100 verification score to that identity. [3][10] |\n\n---\n\n## See also\n\n- **Category:** [Identify protocols](/category/identify/)\n\n---\n\n## References\n\n1. Leigh Cronian (@cybercentry) and Chris Johnson, *ERCS/erc-8126.md (AI Agent Verification)* (created 2026-01-15; status Final; fetched 2026-10-31) — <https://raw.githubusercontent.com/ethereum/ERCs/master/ERCS/erc-8126.md>\n2. Marco De Rossi, Davide Crapis, Jordan Ellis, and Erik Reppel, *ERCS/erc-8004.md (Trustless Agents)* (created 2025-08-13; status Draft; fetched 2026-10-31) — <https://raw.githubusercontent.com/ethereum/ERCs/master/ERCS/erc-8004.md>\n3. Leigh Cronian (@cybercentry) and Chris Johnson, *ERC-8126: AI Agent Verification* (created 2026-01-15; fetched 2026-10-31) — <https://eips.ethereum.org/EIPS/eip-8126>\n4. Leigh Cronian (@cybercentry) and Chris Johnson, *ethereum/ERCs blob ERCS/erc-8126.md* (created 2026-01-15; fetched 2026-10-31) — <https://github.com/ethereum/ERCs/blob/master/ERCS/erc-8126.md>\n5. Marco De Rossi, Davide Crapis, Jordan Ellis, and Erik Reppel, *ERC-8004: Trustless Agents* (created 2025-08-13; status Draft; fetched 2026-10-31) — <https://eips.ethereum.org/EIPS/eip-8004>\n6. Remco Bloemen, Leonid Logvinov, and Jacob Evans (Ethereum), *EIP-712: Typed structured data hashing and signing* (2017-09-12) — <https://eips.ethereum.org/EIPS/eip-712>\n7. Francisco Giordano et al. (Ethereum), *ERC-1271: Standard Signature Validation Method for Contracts* (2018-07-25) — <https://eips.ethereum.org/EIPS/eip-1271>\n8. ethereum/ERCs, *ERCs/ERCS/erc-8196.md at master · ethereum/ERCs* (fetched 2026-10-31) — <https://github.com/ethereum/ERCs/blob/master/ERCS/erc-8196.md>\n9. Dylan Hobbs (@H0BB5), KYA-OS Working Group, *KYA-OS Protocol Specification* (version 1.0.0) — <https://raw.githubusercontent.com/decentralized-identity/kya-os-mcp/main/SPEC.md>\n10. thamerdridi, *Update ERC-8226: add reference implementation and refine spec* (merged 2026-06-29; fetched 2026-10-31) — <https://github.com/ethereum/ERCs/pull/1844>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "erc-8196",
   "name": "ERC-8196: AI Agent Authenticated Wallet",
   "acronym": "ERC-8196",
   "aliases": [
    "EIP-8196"
   ],
   "collisions": [],
   "step": "permit",
   "parties": [
    "agent-payment",
    "agent-human"
   ],
   "form": "onchain-registry",
   "track": "community",
   "scope": "general",
   "question": "How can an asset owner let an AI agent transact from a wallet only within a policy the owner set, with proof and an audit trail for every action?",
   "analog": "A corporate card with spending rules enforced by the card itself, plus a tamper-evident statement",
   "origin": {
    "org": "Ethereum community (Leigh Cronian, Cybercentry; Chris Johnson, Virtuals)",
    "date": "2026-03-14"
   },
   "governance": "Ethereum EIP/ERC process (Ethereum Magicians discussion + ERCs repository); status Final",
   "native_status": "Final Standards Track ERC (Final 2026-07-21); requires ERC-4337 and ERC-8126",
   "phase": "stable",
   "implementation": "none-found",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "version": {
    "label": "Final, created 2026-03-14",
    "date": "2026-07-21"
   },
   "spec_url": "https://eips.ethereum.org/EIPS/eip-8196",
   "discovery": {
    "mechanism": "EVM smart-contract interface on an ERC-4337 account; policies are registered on the wallet contract",
    "path": "none — no well-known file; discovery is by contract address/ABI"
   },
   "probe": {
    "method": "eth_call",
    "path": "{contract_address}",
    "parse": "Contract implements the ERC-8196 functions (registerPolicy, getPolicy, revokePolicy, executeAction)",
    "on_absent": "Absence at a given contract address only shows that wallet does not implement ERC-8196; there is no registry of ERC-8196 wallets to enumerate."
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://raw.githubusercontent.com/ethereum/ERCs/master/ERCS/erc-8196.md",
     "claim": "Leigh Cronian and Chris Johnson, *ERCS/erc-8196.md (AI Agent Authenticated Wallet)*, created 2026-03-14; fetched 2026-10-31",
     "date": null,
     "quote": "This ERC defines a standard interface for AI agent-authenticated wallets. These wallets execute transactions only when accompanied by verifiable cryptographic proof that the action complies with a specific policy defined by the asset owner. / Layer 2 (Execute): ERC-8196 - policy-bound execution with immutable audit trail / Leigh Cronian (@cybercentry) … Chris Johnson / created: 2026-03-14 requires: 155, 191, 712, 4337, 8126 / function registerPolicy( address agent, uint256 agentId, string[] calldata allowedActions, address[] calldata allowedContracts, address[] calldata blockedContracts, uint256 maxValuePerTx, uint256 maxValuePerDay, uint256 validAfter, uint256 validUntil, uint8 minVerificationScore ) external returns (bytes32 policyHash); / function executeAction( bytes32 policyHash, address target, uint256 value, bytes calldata data, uint256 nonce, bytes32 entropyCommitment, bytes calldata signature ) external returns (bool success, bytes32 auditEntryId); / Implementations MUST perform a verification check using ERC-8126 before executing any agent action. The policy's minVerificationScore field MUST be enforced. Actions MUST be rejected if the agent's current ERC-8126 score exceeds the minVerificationScore value set in the policy. The agent's ERC-8126 score MUST be looked up by the policy's agentId via getLatestRiskScore. / status: Final type: Standards Track category: ERC created: 2026-03-14 / Compatible with ERC-4337 wallets and existing standards. No breaking changes. / open questions regarding gas-efficient audit roots, threshold-based containment mechanisms, and the enforcement of Censorship Resistant, Open Source, Private, and Secure (CROPS) properties in high-value agent scenarios. / author: Leigh Cronian (@cybercentry) <[email redacted]>, Chris Johnson <[email redacted]> / Leigh Cronian (@cybercentry) , Chris Johnson discussions-to: https://ethereum-magicians.org/t/erc-8196-ai-agent-authenticated-wallet/27987 status: Final type: Standards Track category: / https://ethereum-magicians.org/t/erc-8196-ai-agent-authenticated-wallet/27987 status: Final type: Standards Track category: ERC created: 2026-03-14 requires: 155, 191, 712, / ### EIP-712 Types bytes32 constant AGENT_ACTION_TYPEHASH = keccak256( \"AgentAction(address agent,string action,address target,uint256 value,bytes data,uint256 / ERC-8126 score MUST be looked up by the policy's `agentId` via `getLatestRiskScore`. Off-chain components / Autonomous AI agents introduce critical security challenges when performing on-chain actions: / Hosting Trust Trap - Hosts can steal private keys if agents hold funds directly … Blind Delegation - Credential delegation to agents lacks enforceable limits or auditable compliance … Host Manipulation - Malicious hosts can suppress outputs, delay requests, replay probabilistic queries, or influence agent behavior through repeated sampling … Malicious Historical Activity - Agents with prior sanctions, mixer usage, bot-like patterns, rapid forwarding, or clustering with tainted addresses pose ongoing risk … Replay & Timing Vulnerabilities - Valid proofs from the past can be reused, or timing manipulated to the host's advantage / Each audit entry MUST include previousHash for integrity. Implementations MAY store entries off-chain (e.g. IPFS) with periodic Merkle roots anchored on-chain. / Immutable, hash-chained audit trail for verifiable delegation … Entropy commit-reveal to counter host influence on probabilistic agents / minVerificationScore | uint8 | Yes | Minimum ERC-8126 verification score required (20 = Low Risk tier; scores 0-20 allowed; lower score = lower risk) / Actions MUST be rejected if the agent's current ERC-8126 score exceeds the minVerificationScore value set in the policy. / maxValuePerDay | uint256 | No | Optional daily spending limit (in wei) / Off-chain components (such as agent hosting services, wallet UIs, and relayers) SHOULD also perform the same verification checks before submitting transactions or UserOperations. / Expiration checks and nonce uniqueness should be enforced to prevent replay attacks. / Host manipulation remains a probabilistic risk. For high-value agents, using multiple independent hosts is recommended to reduce this threat. … Active containment mechanisms should be implemented where possible. … User sovereignty must remain the highest priority.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://eips.ethereum.org/EIPS/eip-8196",
     "claim": "Leigh Cronian and Chris Johnson, *ERC-8196: AI Agent Authenticated Wallet*, created 2026-03-14; fetched 2026-10-31",
     "date": null,
     "quote": "Final Standards Track: ERC ERC-8196: AI Agent Authenticated Wallet / [email redacted] >, Chris Johnson < [email redacted] > Created 2026-03-14 Requires EIP-155, EIP-191, EIP-712, EIP-4337, / Standards Track: ERC ERC-8196: AI Agent Authenticated Wallet / Wallet,\" Ethereum Improvement Proposals, no. 8196, March 2026. Available: https://eips.ethereum.org/EIPS/eip-8196. { \"@context\": \"http://schema.org\", \"@type\": / lower risk) EIP-712 Types bytes32 constant AGENT_ACTION_TYPEHASH = keccak256(\"AgentAction(address agent,string action,address target,uint256 value,bytes data,uint256 / MUST be looked up by the policy's agentId via getLatestRiskScore. Off-chain components (such as / Copyright and related rights waived via CC0.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://github.com/ethereum/ERCs/blob/master/ERCS/erc-8196.md",
     "claim": "ethereum/ERCs, *ERCs/ERCS/erc-8196.md at master · ethereum/ERCs*, fetched 2026-10-31",
     "date": null,
     "quote": "and Verify)\\u003c/strong\\u003e: \\u003ca href=\\\"/ethereum/ERCs/blob/master/ERCS/eip-8126.md\\\"\\u003eERC-8126\\u003c/a\\u003e - identification, verification and risk / \\[email redacted]\\u003e, Chris Johnson \\[email redacted]\\u003e\",\"discussions-to: https://ethereum-magicians.org/t/erc-8196-ai-agent-authenticated-wallet/27987\",\"status: Final\",\"type:",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://eips.ethereum.org/EIPS/eip-4337",
     "claim": "Vitalik Buterin et al. (Ethereum), *ERC-4337: Account Abstraction Using Alt Mempool*, 2021-09-29",
     "date": "2021-09-29",
     "quote": "Definitions The UserOperation structure",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://eips.ethereum.org/EIPS/eip-8126",
     "claim": "Leigh Cronian (@cybercentry) and Chris Johnson, *ERC-8126: AI Agent Verification*, created 2026-01-15; fetched 2026-10-31",
     "date": null,
     "quote": "2026. Available: https://eips.ethereum.org/EIPS/eip-8126. { \"@context\": \"http://schema.org\", \"@type\": \"TechArticle\", \"headline\": \"ERC-8126: AI Agent Verification\", \"name\":",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://raw.githubusercontent.com/ethereum/ERCs/master/ERCS/erc-8004.md",
     "claim": "Marco De Rossi, Davide Crapis, Jordan Ellis, and Erik Reppel, *ERCS/erc-8004.md (Trustless Agents)*, created 2025-08-13; fetched 2026-10-30",
     "date": null,
     "quote": "author: Marco De Rossi (@MarcoMetaMask), Davide Crapis (@dcrapis) <davide@ethereum.org>, Jordan Ellis <jordanellis@google.com>, Erik Reppel <erik.reppel@coinbase.com> discussions-to: https://ethereum-magicians.org/t/erc-8004-trustless-agents/25098 status: Draft type: Standards Track category: ERC created: 2025-08-13 requires: 155, 712, 721, 1271",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://github.com/ethereum/ERCs/pull/1844",
     "claim": "thamerdridi, *Update ERC-8226: add reference implementation and refine spec*, merged 2026-06-29; fetched 2026-10-31",
     "date": null,
     "quote": "\"https://github.com/ethereum/ERCs/pull/1844.diff\", \"patch_url\": \"https://github.com/ethereum/ERCs/pull/1844.patch\", \"merged_at\": \"2026-06-29T21:55:50Z\" }, \"body\": \"this pr updates ERC-8226 (Regulated Agent",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/specification.md",
     "claim": "Google (google-agentic-commerce), *Agentic Payment Protocol (v0.2)*, fetched 2026-10-30",
     "date": null,
     "quote": "Agentic Payment Protocol (v0.2)",
     "ref": 8
    }
   ],
   "summary_md": "**ERC-8196: AI Agent Authenticated Wallet** defines `IAIAgentAuthenticatedWallet`, a standard interface for wallets that execute a transaction only when it is accompanied by verifiable cryptographic proof that the action complies with a policy defined by the asset owner. The document places that interface at Layer 2 (Execute), with ERC-8126 as Layer 1 for identification, verification, and risk scoring. Leigh Cronian (`@cybercentry`) and Chris Johnson are the authors. The front matter records `created: 2026-03-14` and `requires: 155, 191, 712, 4337, 8126`. `registerPolicy` takes the agent, `agentId`, the action and contract lists, the value caps, `validAfter`, `validUntil`, and `minVerificationScore`, and it returns `policyHash`. The policy table says `ownerAddress` is the asset owner or delegator. `executeAction` takes that `policyHash`, the target, value, calldata, a nonce, `entropyCommitment`, and a signature, and it returns `success` and `auditEntryId`. Implementations MUST perform a verification check using ERC-8126 before executing any agent action. The policy's `minVerificationScore` field MUST be enforced, and the agent's ERC-8126 score MUST be looked up by the policy's `agentId` via `getLatestRiskScore`. Actions MUST be rejected if that current score exceeds `minVerificationScore`. The rendered EIP page and markdown header classify `ERC-8196: AI Agent Authenticated Wallet` as `status: Final` on the `Standards Track: ERC`. Backwards compatibility says the interface is compatible with ERC-4337 wallets and existing standards, and that there are no breaking changes. The rationale leaves open questions on gas-efficient audit roots, threshold-based containment mechanisms, and enforcement of CROPS properties in high-value agent scenarios.",
   "part_of": null,
   "group": null,
   "use_cases": [
    "delegate-user-authority",
    "audit-agent-actions"
   ],
   "audience": [
    "agent-builder",
    "platform"
   ],
   "pairs_with": [
    "erc-8126",
    "erc-8004",
    "erc-8226",
    "ap2"
   ],
   "prerequisites": [
    "erc-8126"
   ],
   "dispute": null,
   "last_verified": "2026-11-12",
   "history": [
    {
     "date": "2026-10-20",
     "note": "initial record; verified against eips.ethereum.org/EIPS/eip-8196 and the ERCs repository file and commit history (Final 2026-07-21)"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "watch": [
    {
     "type": "erc",
     "num": 8196
    }
   ],
   "hatnote_md": "",
   "tier": "spec_brief",
   "lifecycle_status": "published_standard",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": null,
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**ERC-8196: AI Agent Authenticated Wallet** defines `IAIAgentAuthenticatedWallet`, a standard interface for wallets that execute a transaction only when it is accompanied by verifiable cryptographic proof that the action complies with a policy defined by the asset owner. The document places that interface at Layer 2 (Execute), with ERC-8126 as Layer 1 for identification, verification, and risk scoring. [1] Leigh Cronian (`@cybercentry`) and Chris Johnson are the authors. The front matter records `created: 2026-03-14` and `requires: 155, 191, 712, 4337, 8126`. [1] `registerPolicy` takes the agent, `agentId`, the action and contract lists, the value caps, `validAfter`, `validUntil`, and `minVerificationScore`, and it returns `policyHash`. The policy table says `ownerAddress` is the asset owner or delegator. `executeAction` takes that `policyHash`, the target, value, calldata, a nonce, `entropyCommitment`, and a signature, and it returns `success` and `auditEntryId`. [1] Implementations MUST perform a verification check using ERC-8126 before executing any agent action. The policy's `minVerificationScore` field MUST be enforced, and the agent's ERC-8126 score MUST be looked up by the policy's `agentId` via `getLatestRiskScore`. Actions MUST be rejected if that current score exceeds `minVerificationScore`. [1] The rendered EIP page and markdown header classify `ERC-8196: AI Agent Authenticated Wallet` as `status: Final` on the `Standards Track: ERC`. [1][2] Backwards compatibility says the interface is compatible with ERC-4337 wallets and existing standards, and that there are no breaking changes. The rationale leaves open questions on gas-efficient audit roots, threshold-based containment mechanisms, and enforcement of CROPS properties in high-value agent scenarios. [1]",
   "v05_identity_sentence_md": "**ERC-8196: AI Agent Authenticated Wallet** defines `IAIAgentAuthenticatedWallet`, a standard interface for wallets that execute a transaction only when it is accompanied by verifiable cryptographic proof that the action complies with a policy defined by the asset owner. The document places that interface at Layer 2 (Execute), with ERC-8126 as Layer 1 for identification, verification, and risk scoring. [1] Leigh Cronian (`@cybercentry`) and Chris Johnson are the authors. The front matter records `created: 2026-03-14` and `requires: 155, 191, 712, 4337, 8126`. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Permit](/category/permit/) (`permit`)"
    },
    {
     "label": "Form",
     "value_md": "On-chain registry (`onchain-registry`)"
    },
    {
     "label": "Originated by",
     "value_md": "Leigh Cronian (`@cybercentry`, Cybercentry) and Chris Johnson (`Virtuals.io`) (created 2026-03-14) [1][2]"
    },
    {
     "label": "Governed by",
     "value_md": "Ethereum Improvement Proposals / ERCs Standards Track (`ethereum/ERCs`) [1][3]"
    },
    {
     "label": "Track",
     "value_md": "Ethereum Standards Track (ERC) [2]"
    },
    {
     "label": "Status",
     "value_md": "Final Standards Track ERC (Final 2026-07-21); requires ERC-4337 and ERC-8126 [1][2][3]"
    },
    {
     "label": "Version",
     "value_md": "`Final` (marked Final in `ethereum/ERCs` on 2026-07-21) [1][3]"
    },
    {
     "label": "Wire format",
     "value_md": "EVM Smart Contract ABI (`IAIAgentAuthenticatedWallet`, Solidity `^0.8.20`) + EIP-712 typed structured data (`AGENT_ACTION_TYPEHASH`, `DELEGATION_TYPEHASH`) [1][2]"
    },
    {
     "label": "Specification",
     "value_md": "https://eips.ethereum.org/EIPS/eip-8196 [2]"
    },
    {
     "label": "Found at",
     "value_md": "On-chain policy lookup (`getPolicy`) and cross-contract risk query (`getLatestRiskScore` via ERC-8126 `agentId`) [1][2]"
    },
    {
     "label": "Licence",
     "value_md": "CC0 1.0 Universal (public domain waiver) [2]"
    }
   ],
   "v05_problem_md": "Autonomous AI agents introduce critical security challenges for on-chain actions: a hosting trust trap if agents hold funds, blind delegation without enforceable limits, host manipulation by resampling, malicious historical activity, and replay of past proofs. [1] Each audit entry MUST include `previousHash`. Implementations MAY store entries off-chain, with periodic Merkle roots anchored on-chain. Entropy commit-reveal is listed to counter host influence on probabilistic agents. [1] `minVerificationScore` is a `uint8`. The table says 20 is the Low Risk tier, scores 0-20 are allowed, and a lower score means lower risk. An action MUST be rejected when the ERC-8126 score exceeds that value. [1] `maxValuePerDay` is not required. It is an optional daily spending limit. Off-chain hosts, wallet UIs, and relayers SHOULD run the same ERC-8126 checks before a transaction or a UserOperation. [1] Expiration checks and nonce uniqueness should be enforced against replay. Host manipulation remains a probabilistic risk. Active containment should be implemented where possible. User sovereignty must remain the highest priority. [1]",
   "v05_mechanism_delta_md": "Each audit entry MUST include `previousHash`. Implementations MAY store entries off-chain, with periodic Merkle roots anchored on-chain. Entropy commit-reveal is listed to counter host influence on probabilistic agents. [1] `minVerificationScore` is a `uint8`. The table says 20 is the Low Risk tier, scores 0-20 are allowed, and a lower score means lower risk. An action MUST be rejected when the ERC-8126 score exceeds that value. [1]",
   "v05_scope_boundary_md": "`maxValuePerDay` is not required. It is an optional daily spending limit. Off-chain hosts, wallet UIs, and relayers SHOULD run the same ERC-8126 checks before a transaction or a UserOperation. [1] Expiration checks and nonce uniqueness should be enforced against replay. Host manipulation remains a probabilistic risk. Active containment should be implemented where possible. User sovereignty must remain the highest priority. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "ERC-4337 Account Abstraction Using Alt Mempool",
      "spec_or_rfc": "ERC-4337",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "The asset owner registers a policy on an ERC-4337 smart account, and the wallet executes the agent's transaction only with cryptographic proof that the action complies with that policy, which requires ERC-8126. [2][4]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "erc-8126",
      "target_name": "ERC-8126: AI Agent Verification",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "ERC-8196 requires ERC-8126 and ERC-4337, so the wallet checks the 0-100 verification result before it accepts the agent's transaction under the registered policy. [2][5]"
     },
     {
      "target_id": "erc-8004",
      "target_name": "ERC-8004: Trustless Agents",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "ERC-8196 reaches the ERC-8004 agentId through ERC-8126, and the wallet is an ERC-4337 account that executes only when the action's proof matches the registered policy. [2][6]"
     },
     {
      "target_id": "erc-8226",
      "target_name": "ERC-8226 Regulated Agent Mandate",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ERC-8226 detects IAgentMandate with ERC-165 supportsInterface and caps quantity per ERC-20, ERC-721, or ERC-1155 asset, while ERC-8196 is the ERC-4337 wallet that requires ERC-8126. [2][7]"
     },
     {
      "target_id": "ap2",
      "target_name": "Agent Payments Protocol (AP2)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "AP2 authorizes a checkout with payment mandates, and ERC-8196 is the ERC-4337 wallet that executes an agent transaction only when cryptographic proof shows the action matches the registered policy. [2][8]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Permit protocols](/category/permit/)** — Category index for `permit` standards."
    }
   ],
   "v05_compiled_md": "---\nid: erc-8196\ntitle: \"ERC-8196: AI Agent Authenticated Wallet\"\ntier: spec_brief\nlifecycle_status: published_standard\ncategory: permit\nform: onchain-registry\nwire_archetype: identity_auth_crypto\nspec_url: https://eips.ethereum.org/EIPS/eip-8196\nlast_checked: 2026-11-12\n---\n\n# ERC-8196: AI Agent Authenticated Wallet\n\n**Category:** [Permit](/category/permit/) (`permit`) · **Form:** On-chain registry (`onchain-registry`) · **Last checked:** 2026-11-12\n\n**ERC-8196: AI Agent Authenticated Wallet** defines `IAIAgentAuthenticatedWallet`, a standard interface for wallets that execute a transaction only when it is accompanied by verifiable cryptographic proof that the action complies with a policy defined by the asset owner. The document places that interface at Layer 2 (Execute), with ERC-8126 as Layer 1 for identification, verification, and risk scoring. [1] Leigh Cronian (`@cybercentry`) and Chris Johnson are the authors. The front matter records `created: 2026-03-14` and `requires: 155, 191, 712, 4337, 8126`. [1] `registerPolicy` takes the agent, `agentId`, the action and contract lists, the value caps, `validAfter`, `validUntil`, and `minVerificationScore`, and it returns `policyHash`. The policy table says `ownerAddress` is the asset owner or delegator. `executeAction` takes that `policyHash`, the target, value, calldata, a nonce, `entropyCommitment`, and a signature, and it returns `success` and `auditEntryId`. [1] Implementations MUST perform a verification check using ERC-8126 before executing any agent action. The policy's `minVerificationScore` field MUST be enforced, and the agent's ERC-8126 score MUST be looked up by the policy's `agentId` via `getLatestRiskScore`. Actions MUST be rejected if that current score exceeds `minVerificationScore`. [1] The rendered EIP page and markdown header classify `ERC-8196: AI Agent Authenticated Wallet` as `status: Final` on the `Standards Track: ERC`. [1][2] Backwards compatibility says the interface is compatible with ERC-4337 wallets and existing standards, and that there are no breaking changes. The rationale leaves open questions on gas-efficient audit roots, threshold-based containment mechanisms, and enforcement of CROPS properties in high-value agent scenarios. [1]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Permit](/category/permit/) (`permit`) |\n| **Form** | On-chain registry (`onchain-registry`) |\n| **Originated by** | Leigh Cronian (`@cybercentry`, Cybercentry) and Chris Johnson (`Virtuals.io`) (created 2026-03-14) [1][2] |\n| **Governed by** | Ethereum Improvement Proposals / ERCs Standards Track (`ethereum/ERCs`) [1][3] |\n| **Track** | Ethereum Standards Track (ERC) [2] |\n| **Status** | Final Standards Track ERC (Final 2026-07-21); requires ERC-4337 and ERC-8126 [1][2][3] |\n| **Version** | `Final` (marked Final in `ethereum/ERCs` on 2026-07-21) [1][3] |\n| **Wire format** | EVM Smart Contract ABI (`IAIAgentAuthenticatedWallet`, Solidity `^0.8.20`) + EIP-712 typed structured data (`AGENT_ACTION_TYPEHASH`, `DELEGATION_TYPEHASH`) [1][2] |\n| **Specification** | https://eips.ethereum.org/EIPS/eip-8196 [2] |\n| **Found at** | On-chain policy lookup (`getPolicy`) and cross-contract risk query (`getLatestRiskScore` via ERC-8126 `agentId`) [1][2] |\n| **Licence** | CC0 1.0 Universal (public domain waiver) [2] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nAutonomous AI agents introduce critical security challenges for on-chain actions: a hosting trust trap if agents hold funds, blind delegation without enforceable limits, host manipulation by resampling, malicious historical activity, and replay of past proofs. [1] Each audit entry MUST include `previousHash`. Implementations MAY store entries off-chain, with periodic Merkle roots anchored on-chain. Entropy commit-reveal is listed to counter host influence on probabilistic agents. [1] `minVerificationScore` is a `uint8`. The table says 20 is the Low Risk tier, scores 0-20 are allowed, and a lower score means lower risk. An action MUST be rejected when the ERC-8126 score exceeds that value. [1] `maxValuePerDay` is not required. It is an optional daily spending limit. Off-chain hosts, wallet UIs, and relayers SHOULD run the same ERC-8126 checks before a transaction or a UserOperation. [1] Expiration checks and nonce uniqueness should be enforced against replay. Host manipulation remains a probabilistic risk. Active containment should be implemented where possible. User sovereignty must remain the highest priority. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **ERC-4337 Account Abstraction Using Alt Mempool** | `ERC-4337` | Profiles classic standard | The asset owner registers a policy on an ERC-4337 smart account, and the wallet executes the agent's transaction only with cryptographic proof that the action complies with that policy, which requires ERC-8126. [2][4] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[ERC-8126: AI Agent Verification](/protocols/erc-8126/)** | Builds on | ERC-8196 requires ERC-8126 and ERC-4337, so the wallet checks the 0-100 verification result before it accepts the agent's transaction under the registered policy. [2][5] |\n| **[ERC-8004: Trustless Agents](/protocols/erc-8004/)** | Complements | ERC-8196 reaches the ERC-8004 agentId through ERC-8126, and the wallet is an ERC-4337 account that executes only when the action's proof matches the registered policy. [2][6] |\n| **[ERC-8226 Regulated Agent Mandate](/protocols/erc-8226/)** | Peer alternative | ERC-8226 detects IAgentMandate with ERC-165 supportsInterface and caps quantity per ERC-20, ERC-721, or ERC-1155 asset, while ERC-8196 is the ERC-4337 wallet that requires ERC-8126. [2][7] |\n| **[Agent Payments Protocol (AP2)](/protocols/ap2/)** | Complements | AP2 authorizes a checkout with payment mandates, and ERC-8196 is the ERC-4337 wallet that executes an agent transaction only when cryptographic proof shows the action matches the registered policy. [2][8] |\n\n---\n\n## See also\n\n- **Category:** [Permit protocols](/category/permit/)\n\n---\n\n## References\n\n1. Leigh Cronian and Chris Johnson, *ERCS/erc-8196.md (AI Agent Authenticated Wallet)* (created 2026-03-14; fetched 2026-10-31) — <https://raw.githubusercontent.com/ethereum/ERCs/master/ERCS/erc-8196.md>\n2. Leigh Cronian and Chris Johnson, *ERC-8196: AI Agent Authenticated Wallet* (created 2026-03-14; fetched 2026-10-31) — <https://eips.ethereum.org/EIPS/eip-8196>\n3. ethereum/ERCs, *ERCs/ERCS/erc-8196.md at master · ethereum/ERCs* (fetched 2026-10-31) — <https://github.com/ethereum/ERCs/blob/master/ERCS/erc-8196.md>\n4. Vitalik Buterin et al. (Ethereum), *ERC-4337: Account Abstraction Using Alt Mempool* (2021-09-29) — <https://eips.ethereum.org/EIPS/eip-4337>\n5. Leigh Cronian (@cybercentry) and Chris Johnson, *ERC-8126: AI Agent Verification* (created 2026-01-15; fetched 2026-10-31) — <https://eips.ethereum.org/EIPS/eip-8126>\n6. Marco De Rossi, Davide Crapis, Jordan Ellis, and Erik Reppel, *ERCS/erc-8004.md (Trustless Agents)* (created 2025-08-13; fetched 2026-10-30) — <https://raw.githubusercontent.com/ethereum/ERCs/master/ERCS/erc-8004.md>\n7. thamerdridi, *Update ERC-8226: add reference implementation and refine spec* (merged 2026-06-29; fetched 2026-10-31) — <https://github.com/ethereum/ERCs/pull/1844>\n8. Google (google-agentic-commerce), *Agentic Payment Protocol (v0.2)* (fetched 2026-10-30) — <https://raw.githubusercontent.com/google-agentic-commerce/AP2/main/docs/ap2/specification.md>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "erc-8444",
   "name": "ERC-8444: Agentic Resource Discovery (ARD) Onchain",
   "acronym": "ERC-8444",
   "aliases": [
    "EIP-8444",
    "ARD Onchain"
   ],
   "collisions": [],
   "step": "discover",
   "parties": [
    "agent-registry",
    "agent-site"
   ],
   "form": "onchain-registry",
   "track": "community",
   "scope": "general",
   "question": "How can on-chain skills, task bounties and agent identities be found through ordinary ARD search, without the searcher needing a wallet or an RPC endpoint?",
   "analog": "A search-engine listing backed by a land registry: the listing is ordinary, the title to it is on-chain",
   "origin": {
    "org": "Ethereum community (Gary Yang, finchip)",
    "date": "2026-10-12"
   },
   "governance": "Ethereum EIP/ERC process (Ethereum Magicians discussion + ERCs repository); status Draft",
   "native_status": "Draft Standards Track ERC, created 2026-10-12",
   "phase": "draft",
   "implementation": "prototype",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "version": {
    "label": "Draft, created 2026-10-12",
    "date": "2026-10-12"
   },
   "spec_url": "https://eips.ethereum.org/EIPS/eip-8444",
   "discovery": {
    "mechanism": "On-chain registry of value records, served by gateways that are conformant ARD registries; a domain acknowledges an address in its own ARD manifest through a top-level value:controllers member or an entry's value:controller",
    "path": "/.well-known/ard.json"
   },
   "probe": {
    "method": "GET",
    "path": "https://{origin}/.well-known/ard.json",
    "parse": "ARD manifest with a top-level value:controllers array (did:pkh identifiers) or entries carrying value:controller; a gateway's manifest must also list at least one application/ai-registry+json entry describing itself",
    "on_absent": "The domain has not acknowledged any ERC-8444 controller address; its ordinary ARD entries remain valid, and per the ERC every existing ARD entry is already a dormant (level 0) value record"
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://raw.githubusercontent.com/ethereum/ERCs/master/ERCS/erc-8444.md",
     "claim": "Gary Yang (@garyyang-finchip), *ERCS/erc-8444.md — Agentic Resource Discovery (ARD) Onchain (Raw Markdown)*, created 2026-10-12; fetched 2026-10-31",
     "date": null,
     "quote": "This ERC defines an onchain registry of *value records* for agentic resources. / author: Gary Yang (@garyyang-finchip) / (@garyyang-finchip) discussions-to: https://ethereum-magicians.org/t/erc-8444-agentic-resource-discovery-ard-onchain/29963 status: Draft type: Standards Track category: ERC created: 2026-10-12 requires: 165, / Draft type: Standards Track category: ERC created: 2026-10-12 requires: 165, 712, 1271 --- ## / Authored descriptors for each kind — [`skill.json`](../assets/eip-8444/examples/skill.json), [`task.json`](../assets/eip-8444/examples/task.json), [`agent.json`](../assets/eip-8444/examples/agent.json), [`registry.json`](../assets/eip-8444/examples/registry.json)",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://eips.ethereum.org/EIPS/eip-8444",
     "claim": "Gary Yang (@garyyang-finchip), *ERC-8444: Agentic Resource Discovery (ARD) Onchain (Ethereum Improvement Proposals)*, created 2026-10-12; fetched 2026-10-31",
     "date": null,
     "quote": "An address claims a domain by calling `claimDomain`, or by having anyone submit `claimDomainBySig` with an [EIP-712](./eip-712.md) signature of the claim / A resolver builds the served view of a record as follows: it reads the record and the adapter views; it fetches the descriptor / name = \"ARD Onchain Registry\", version = \"1\" / The registry MUST implement [ERC-165](./eip-165.md) and return true for the interface above (id `0x881908a5`). / tender and agent identity contracts Authors Gary Yang ( @garyyang-finchip ) Created 2026-10-12 Discussion / @ ERC-8444: Agentic Resource Discovery (ARD) Onchain Ethereum Improvement Proposals All Core Networking Interface / Standards Track: ERC ERC-8444: Agentic Resource Discovery (A / summary_large_image https://eips.ethereum.org/assets/images/eip-og-image.png @ ERC-8444: Agentic Resource Discovery (ARD) Onchain { \"@type\": \"WebSite\", \"url\": \"https://eips.ethereum.org\", / restate that specification; the entry schema it relies on is vendored as ard-entry.schema.json, together / Link https://ethereum-magicians.org/t/erc-8444-agentic-resource-discovery-ard-onchain/29963 Requires EIP-165, EIP-712, EIP-1271 Table of Contents Abstract Motivation Specification 1. Terms / ERC-8444: Agentic Resource Discovery (ARD) Onchain / ARD manifest at /.well-known/ard.json: either a top-level member value:controllers (an array of did:pkh identifiers) / Copyright and related rights waived via CC0. / ARD deliberately defines nothing beyond discovery: no price, no payment, no settlement, no escrow, no credit. / A domain is not a second root. It is an endorsement an address can collect, and a domain without a key can only publish dormant entries. / Every existing ARD entry is already a dormant value record (level 0) / Authority over a record belongs to an address, never to a domain / Anchors MUST be on the chain of the registry instance. / No change is required to skill, tender or identity contracts: adapters read their existing views, and the registry writes nothing to them. / The names assertion, policy and market are reserved for future postures and are not defined by this ERC. / `Retired` is terminal and binds every later holder of the anchor. / Because publication and resolved members are excluded, a gateway alias entry and the controller's own entry hash to the same value / The payload of a `task` descriptor MUST have `type` `application/ai-task+json` / A domain acknowledges an address in its ARD manifest at /.well-known/ard.json: either a top-level member value:controllers (an array of did:pkh identifiers) containing the address, or an entry whose value:controller is the address. / Every served record MUST carry value:anchor and value:descriptorHash, so that any client can verify it against the chain / A binding that returns does not retroactively validate anything served while it was absent. / A domain acknowledges an address in its ARD manifest at `/.well-known/ard.json`: either a top-level member `value:controllers` (an array of `did:pkh` identifiers) containing the address, or an entry whose `value:controller` is the address. / `updateDescriptor` MUST set `attestor` to `msg.sender` and MUST accept a `descriptorHash` equal to the record's current one, so that a controller that acquired the anchor adopts the served descriptor by committing it again / Every served record MUST carry `value:anchor` and `value:descriptorHash`, so that any client can verify it against the chain or against a second gateway. / Authors Gary Yang (@garyyang-finchip) Created 2026-10-12",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://github.com/ethereum/ERCs/blob/master/ERCS/erc-8444.md",
     "claim": "Gary Yang (@garyyang-finchip), *ethereum/ERCs — ERCS/erc-8444.md Repository Source*, created 2026-10-12; fetched 2026-10-31",
     "date": null,
     "quote": "author Gary Yang (@garyyang-finchip) discussions-to https://ethereum-magicians.org/t/erc-8444-agentic-resource-discovery-ard-onchain/29963 status Draft type Standards Track category ERC created / and \\u003ccode\\u003etrustManifest\\u003c/code\\u003e. This ERC does not restate that specification; the entry schema it relies",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://ethereum-magicians.org/t/erc-8444-agentic-resource-discovery-ard-onchain/29963",
     "claim": "Gary Yang (Fellowship of Ethereum Magicians), *ERC-8444: Agentic Resource Discovery (ARD) Onchain — Discussion #29963*, 2026-10-13",
     "date": "2026-10-13",
     "quote": "ERC-8444: Agentic Resource Discovery (ARD) Onchain / garyyang-finchip/ard-onchain-framework: Agentic Resource Discovery (ARD) Onchain",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://raw.githubusercontent.com/garyyang-finchip/ard-onchain-framework/main/README.md",
     "claim": "Gary Yang (garyyang-finchip), *ard-onchain-framework — Reference Solidity Kernel, Gateway & Sepolia Deployment*, 2026-10-16",
     "date": "2026-10-16",
     "quote": "Sepolia reference deployment (kernel v1.1 / cross-language vectors (ethers v6 + RFC 8785 / Status: ERC-8444, Draft - merged into ethereum/ERCs on 2026-10-15 via PR #2073 / Sepolia reference deployment (kernel v1.1 0x126795eCa2A10ea5B2d065a8049e01B6fcDAaa78, 2026-10-16)",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://eips.ethereum.org/assets/eip-8444/examples/well-known-ard.json",
     "claim": "Gary Yang (Ethereum Improvement Proposals), *ERC-8444 Example Gateway Manifest (well-known-ard.json)*, 2026-10-12",
     "date": "2026-10-12",
     "quote": "\"identifier\": \"urn:air:registry.finchip.ai:registry:base\"",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://eips.ethereum.org/EIPS/eip-137",
     "claim": "Nick Johnson (Ethereum), *ERC-137: Ethereum Domain Name Service - Specification*, 2016-04-04",
     "date": "2016-04-04",
     "quote": "namehash algorithm Registry specification",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://www.w3.org/TR/did-core/",
     "claim": "W3C, *Decentralized Identifiers (DIDs) v1.0*, 2022-07-19",
     "date": "2022-07-19",
     "quote": "Decentralized identifiers (DIDs) are a new type of identifier that",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://agenticresourcediscovery.org/spec/",
     "claim": "Agentic Resource Discovery Project (ards-project), *Agentic Resource Discovery Specification v0.91*, 2026-08-26; fetched 2026-10-30",
     "date": null,
     "quote": "Version: v0.91 Status: Proposal Date: August 26, 2026",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://raw.githubusercontent.com/ethereum/ERCs/master/ERCS/erc-8004.md",
     "claim": "Marco De Rossi, Davide Crapis, Jordan Ellis, and Erik Reppel, *ERCS/erc-8004.md (Trustless Agents)*, created 2025-08-13; fetched 2026-10-30",
     "date": null,
     "quote": "author: Marco De Rossi (@MarcoMetaMask), Davide Crapis (@dcrapis) <davide@ethereum.org>, Jordan Ellis <jordanellis@google.com>, Erik Reppel <erik.reppel@coinbase.com> discussions-to: https://ethereum-magicians.org/t/erc-8004-trustless-agents/25098 status: Draft type: Standards Track category: ERC created: 2025-08-13 requires: 155, 712, 721, 1271",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://www.linuxfoundation.org/press/linux-foundation-announces-operational-launch-of-x402-foundation-to-standardize-internet-native-payments-for-ai-agents-and-applications",
     "claim": "Linux Foundation, *Linux Foundation Announces Operational Launch of x402 Foundation to Standardize Internet-Native Payments for AI Agents and Applications*, July 14, 2026",
     "date": null,
     "quote": "SAN FRANCISCO, July 14, 2026 – The Linux Foundation , the nonprofit organization enabling mass innovation through open source, today announced the operational launch of the x402 Foundation",
     "ref": 11
    }
   ],
   "summary_md": "**ERC-8444: Agentic Resource Discovery (ARD) Onchain** (`ERC-8444`) defines an onchain registry of value records for agentic resources. A value record binds an ARD entry, as defined by the Agentic Resource Discovery specification maintained by the ards-project working group, to an onchain anchor — a token-bound executable skill, a token-bound task tender, an address-anchored agent identity, or an ARD registry endpoint — and, through a kind adapter, to the address that controls that anchor. The author is Gary Yang (`@garyyang-finchip`). Front matter sets `status: Draft`, `type: Standards Track`, `category: ERC`, and `created: 2026-10-12`. An address claims a domain by calling `claimDomain`, or by having anyone submit `claimDomainBySig` with an EIP-712 signature of the claim. `register` MUST revert unless `kind` has an adapter, `descriptorHash` is nonzero, `adapter.exists(target, id)` is true, `msg.sender` is the controller the adapter reports, and no record exists for the anchor. A resolver builds the served view of a record as follows: it reads the record and the adapter views; it fetches the descriptor; it rejects the descriptor unless the content-member hash equals `descriptorHash`. A gateway MUST publish `/.well-known/ard.json` containing at least one entry of type `application/ai-registry+json` that describes itself. Signed domain claims use EIP-712 typed data with `name = \"ARD Onchain Registry\"` and `version = \"1\"`, and contract accounts are verified through ERC-1271 (`requires: 165, 712, 1271`). The registry MUST implement ERC-165 and return true for interface id `0x881908a5`. An ARD entry in this ERC follows the ARD specification, v0.91.",
   "part_of": null,
   "group": null,
   "use_cases": [
    "discover-my-api",
    "describe-agent-capabilities",
    "accept-agent-payments"
   ],
   "audience": [
    "agent-builder",
    "platform"
   ],
   "pairs_with": [
    "ard",
    "erc-8004",
    "x402"
   ],
   "prerequisites": [
    "ard"
   ],
   "dispute": null,
   "last_verified": "2026-11-12",
   "history": [
    {
     "date": "2026-10-20",
     "note": "initial record; verified against eips.ethereum.org/EIPS/eip-8444 and the ERCs repository file erc-8444.md (Draft, 2026-10-12)"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "watch": [
    {
     "type": "erc",
     "num": 8444
    }
   ],
   "hatnote_md": "",
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "web_discovery",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": null,
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**ERC-8444: Agentic Resource Discovery (ARD) Onchain** (`ERC-8444`) defines an onchain registry of value records for agentic resources. A value record binds an ARD entry, as defined by the Agentic Resource Discovery specification maintained by the ards-project working group, to an onchain anchor — a token-bound executable skill, a token-bound task tender, an address-anchored agent identity, or an ARD registry endpoint — and, through a kind adapter, to the address that controls that anchor. [1] The author is Gary Yang (`@garyyang-finchip`). Front matter sets `status: Draft`, `type: Standards Track`, `category: ERC`, and `created: 2026-10-12`. [1] An address claims a domain by calling `claimDomain`, or by having anyone submit `claimDomainBySig` with an EIP-712 signature of the claim. `register` MUST revert unless `kind` has an adapter, `descriptorHash` is nonzero, `adapter.exists(target, id)` is true, `msg.sender` is the controller the adapter reports, and no record exists for the anchor. [2] A resolver builds the served view of a record as follows: it reads the record and the adapter views; it fetches the descriptor; it rejects the descriptor unless the content-member hash equals `descriptorHash`. A gateway MUST publish `/.well-known/ard.json` containing at least one entry of type `application/ai-registry+json` that describes itself. [2] Signed domain claims use EIP-712 typed data with `name = \"ARD Onchain Registry\"` and `version = \"1\"`, and contract accounts are verified through ERC-1271 (`requires: 165, 712, 1271`). [2] The registry MUST implement ERC-165 and return true for interface id `0x881908a5`. An ARD entry in this ERC follows the ARD specification, v0.91. [2]",
   "v05_identity_sentence_md": "**ERC-8444: Agentic Resource Discovery (ARD) Onchain** (`ERC-8444`) defines an onchain registry of value records for agentic resources. A value record binds an ARD entry, as defined by the Agentic Resource Discovery specification maintained by the ards-project working group, to an onchain anchor — a token-bound executable skill, a token-bound task tender, an address-anchored agent identity, or an ARD registry endpoint — and, through a kind adapter, to the address that controls that anchor. [1] The author is Gary Yang (`@garyyang-finchip`). Front matter sets `status: Draft`, `type: Standards Track`, `category: ERC`, and `created: 2026-10-12`. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Discover](/category/discover/) (`discover`)"
    },
    {
     "label": "Form",
     "value_md": "On-chain registry (`onchain-registry`)"
    },
    {
     "label": "Originated by",
     "value_md": "Gary Yang (`@garyyang-finchip`) (created 2026-10-12) [1][2]"
    },
    {
     "label": "Governed by",
     "value_md": "Ethereum Improvement Proposals (EIP / ERC Standards Track process) [1][2]"
    },
    {
     "label": "Track",
     "value_md": "Ethereum Standards Track (ERC) [2]"
    },
    {
     "label": "Status",
     "value_md": "Draft Standards Track ERC, created 2026-10-12 [2][3]"
    },
    {
     "label": "Version",
     "value_md": "Draft (`status: Draft`, targeting ARD v0.91 entry schema) [2][3]"
    },
    {
     "label": "Wire format",
     "value_md": "Solidity smart contract ABI (`ERC-165`, `EIP-712`, `ERC-1271`), CAIP-10 / CAIP-19 identifiers, and JSON / JSON-LD (`ard-entry.schema.json`) [1][2][3]"
    },
    {
     "label": "Specification",
     "value_md": "[ERC-8444](https://eips.ethereum.org/EIPS/eip-8444) · [well-known-ard.json Example](https://eips.ethereum.org/assets/eip-8444/examples/well-known-ard.json) · [Ethereum Magicians #29963](https://ethereum-magicians.org/t/erc-8444-agentic-resource-discovery-ard-onchain/29963) · [Reference Framework (`ard-onchain-framework`)](https://github.com/garyyang-finchip/ard-onchain-framework) [2][4][5]"
    },
    {
     "label": "Found at",
     "value_md": "On-chain registry lookups bridged to `/.well-known/ard.json` via `value:controllers` and `value:controller` [2]"
    },
    {
     "label": "Licence",
     "value_md": "CC0 1.0 Universal (public domain waiver) [2]"
    }
   ],
   "v05_problem_md": "ARD answers what exists and who says so, and it roots trust in domain ownership. ARD deliberately defines nothing beyond discovery: no price, no payment, no settlement, no escrow, no credit. [2] This ERC is that layer. A value record binds an ARD entry to an onchain anchor and, through a kind adapter, to the address that controls that anchor. The address is the only root, and a domain is an endorsement an address collects. [2] A value record's `kind` says which side of a trade the entry occupies: an offer, a tender, a subject, or an index. Every existing ARD entry is already a dormant value record (level 0). [2] Authority over a record belongs to an address, never to a domain. The registry does not verify manifests, and the chain cannot. This ERC defines no assertion registry. [2] Anchors MUST be on the chain of the registry instance. The registry cannot verify an anchor on another chain, so it refuses them. [2] No change is required to skill, tender, or identity contracts: adapters read their existing views, and the registry writes nothing to them. [2]",
   "v05_mechanism_delta_md": "This ERC is that layer. A value record binds an ARD entry to an onchain anchor and, through a kind adapter, to the address that controls that anchor. The address is the only root, and a domain is an endorsement an address collects. [2] A value record's `kind` says which side of a trade the entry occupies: an offer, a tender, a subject, or an index. Every existing ARD entry is already a dormant value record (level 0). [2]",
   "v05_scope_boundary_md": "Authority over a record belongs to an address, never to a domain. The registry does not verify manifests, and the chain cannot. This ERC defines no assertion registry. [2] Anchors MUST be on the chain of the registry instance. The registry cannot verify an anchor on another chain, so it refuses them. [2] No change is required to skill, tender, or identity contracts: adapters read their existing views, and the registry writes nothing to them. [2]",
   "v05_fuzzy_additions": [
    {
     "id": "kinds-levels-and-the-descriptor-hash",
     "heading": "Kinds, levels, and the descriptor hash",
     "body_md": "ERC-8444 anchors conformant Agentic Resource Discovery (`ARD`) JSON entries to EVM smart contracts across four resource kinds (`skill`, `task`, `agent`, and `registry`), binding on-chain `Record` structs to off-chain descriptors via canonical `RFC 8785` (`JCS`) `descriptorHash` digests. [1][5]",
     "bullets": [
      {
       "label": "Kind postures",
       "text_md": "`skill` is an offer on a token-bound skill, and `task` is a tender on a token-bound task tender. The controller of both is the token owner. `agent` is a subject on an address with id 0, and `registry` is an index on an operator address with a nonzero id. The controller of those two is the address itself. The names assertion, policy, and market are reserved and are not defined by this ERC. [2]"
      },
      {
       "label": "Levels and status",
       "text_md": "Status is `Active`, `Suspended`, or `Retired`. The controller moves a record between `Active` and `Suspended` and from either to `Retired`. `Retired` is terminal and binds every later holder of the anchor. `L0` means no record exists. `L1` means an `Active` record. `L2` means `L1`, the adapter reports the anchor backed, and any anchor hint matches the descriptor package digest. [2]"
      },
      {
       "label": "What the hash covers",
       "text_md": "Publication members, including `@context`, `@id`, `identifier`, and `trustManifest`, are not hashed. Resolved `value:` members are computed by resolvers and are never hashed. Content members are every other member. Excluding publication and resolved members lets a gateway alias and the controller's own entry hash to the same value. [2]"
      },
      {
       "label": "Authored value members",
       "text_md": "`value:kind` is REQUIRED and MUST equal the record's kind. For `skill` and `task` records, `packageDigest` MUST equal the anchor hint for the record to reach level 2. A `task` descriptor MUST have `type` `application/ai-task+json`. A settlement `rail` is one of `onchain`, `x402`, or `declared`, and `declared` carries no guarantee and is meaningful only at level 0. [2]"
      }
     ]
    },
    {
     "id": "domain-binding-adoption-and-gateway-serving",
     "heading": "Domain binding, adoption, and gateway serving",
     "body_md": "Bidirectional domain binding pairs an on-chain controller claim with an off-chain acknowledgment in the origin's `/.well-known/ard.json` manifest, while HTTP gateways index contract events and serve verifiable `value:anchor` and `value:descriptorHash` fields to ARD clients. [2]",
     "bullets": [
      {
       "label": "Binding states",
       "text_md": "Binding is `unbound` when the address has no claim, `claimed` when it has the only claim and the domain does not acknowledge it, and `verified` when the domain acknowledges the claim. When several addresses have claims, an acknowledged one is `verified` and the others are `contested`. A record without a URN reports `none`. A binding that returns does not retroactively validate anything served while it was absent. [2]"
      },
      {
       "label": "Acknowledgment file",
       "text_md": "Acknowledgment is either a top-level `value:controllers` array of `did:pkh` identifiers or an entry whose `value:controller` is the address. ARD registries ignore both members. Resolvers conforming to this ERC read them. This ERC defines no assertion registry for mirroring a verified binding onchain. [2]"
      },
      {
       "label": "Adoption after transfer",
       "text_md": "A record is adopted when its attestor is the current controller. After the controller changes, the record is unadopted until the new controller commits a descriptor. `updateDescriptor` MUST set `attestor` to `msg.sender` and MUST accept a `descriptorHash` equal to the current one, so the new controller adopts the served descriptor by committing it again. A resolver MUST NOT include an unadopted record in search results. [2]"
      },
      {
       "label": "Gateway duties",
       "text_md": "A gateway MUST implement search with federation modes `auto`, `referrals`, and `none`, SHOULD implement explore, and MAY implement listing. Every served record MUST carry `value:anchor` and `value:descriptorHash`. A gateway MAY register itself as a `registry` record. [2]"
      }
     ]
    }
   ],
   "v05_diagram": null,
   "v05_wire_artifact": {
    "title": "ERC-8444 gateway manifest (/.well-known/ard.json)",
    "heading": "ERC-8444 gateway manifest (/.well-known/ard.json)",
    "lang": "json",
    "code": "{\n  \"@context\": [\n    \"https://agenticresourcediscovery.org/context/v1\",\n    {\n      \"value\": \"https://eips.ethereum.org/assets/eip-8444/ns#\"\n    }\n  ],\n  \"value:controllers\": [\n    \"did:pkh:eip155:8453:0x6666666666666666666666666666666666666666\"\n  ],\n  \"entries\": [\n    {\n      \"identifier\": \"urn:air:registry.finchip.ai:registry:base\",\n      \"trustManifest\": {\n        \"identity\": \"registry.finchip.ai\"\n      },\n      \"displayName\": \"ARD Onchain gateway for Base\",\n      \"description\": \"ARD registry endpoint indexing the ARD Onchain registry instance on Base. Results carry onchain anchors and descriptor hashes for independent verification.\",\n      \"type\": \"application/ai-registry+json\",\n      \"url\": \"https://registry.finchip.ai/api/v1/\",\n      \"representativeQueries\": [\n        \"onchain skills with escrowed bounties\",\n        \"agent tasks paying in USDC on Base\"\n      ],\n      \"updatedAt\": \"2026-10-12T00:00:00Z\",\n      \"value:kind\": \"registry\",\n      \"value:controller\": \"did:pkh:eip155:8453:0x6666666666666666666666666666666666666666\",\n      \"value:indexes\": [\n        \"eip155:8453:0x7777777777777777777777777777777777777777\"\n      ]\n    },\n    {\n      \"identifier\": \"urn:air:registry.finchip.ai:onchain:eip155-8453-erc721-0x1111111111111111111111111111111111111111-42\",\n      \"trustManifest\": {\n        \"identity\": \"registry.finchip.ai\"\n      },\n      \"displayName\": \"FinChip Daily Finance Brief\",\n      \"description\": \"Generates the daily global finance brief: 60-instrument dashboard, top headlines, short analysis.\",\n      \"type\": \"application/ai-skill+md\",\n      \"url\": \"https://finchip.ai/skills/daily-finance-brief/SKILL.md\",\n      \"tags\": [\n        \"finance\",\n        \"report\",\n        \"daily\"\n      ],\n      \"capabilities\": [\n        \"DailyFinanceBrief\"\n      ],\n      \"representativeQueries\": [\n        \"generate today's global markets brief\",\n        \"daily finance report with crypto and FX dashboard\",\n        \"morning market summary as PDF\"\n      ],\n      \"version\": \"1.4.0\",\n      \"updatedAt\": \"2026-10-12T00:00:00Z\",\n      \"value:kind\": \"skill\",\n      \"value:controller\": \"did:pkh:eip155:8453:0x2222222222222222222222222222222222222222\",\n      \"value:terms\": {\n        \"unit\": \"call\",\n        \"price\": {\n          \"amount\": \"0.50\",\n          \"currency\": \"USDC\",\n          \"asset\": \"eip155:8453/erc20:0x833589fcd6edb6e08f4c7c32d4f71b54bda02913\"\n        }\n      },\n      \"value:settlement\": [\n        {\n          \"rail\": \"x402\",\n          \"payee\": \"eip155:8453:0x2222222222222222222222222222222222222222\",\n          \"asset\": \"eip155:8453/erc20:0x833589fcd6edb6e08f4c7c32d4f71b54bda02913\",\n          \"endpoint\": \"https://finchip.ai/api/v1/skills/daily-finance-brief\"\n        },\n        {\n          \"rail\": \"onchain\",\n          \"payee\": \"eip155:8453:0x2222222222222222222222222222222222222222\",\n          \"asset\": \"eip155:8453/erc20:0x833589fcd6edb6e08f4c7c32d4f71b54bda02913\"\n        }\n      ],\n      \"value:provenance\": {\n        \"packageDigest\": \"sha256:3f2a9c0b7e1d4a6f8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a\",\n        \"cardDigest\": \"sha256:9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f\"\n      },\n      \"value:anchor\": \"eip155:8453/erc721:0x1111111111111111111111111111111111111111/42\",\n      \"value:adopted\": true,\n      \"value:canonical\": \"urn:air:finchip.ai:skills:daily-finance-brief\",\n      \"value:aliases\": [\n        \"urn:air:registry.finchip.ai:onchain:eip155-8453-erc721-0x1111111111111111111111111111111111111111-42\"\n      ],\n      \"value:binding\": \"verified\",\n      \"value:level\": 2,\n      \"value:status\": \"Active\",\n      \"value:registry\": \"eip155:8453:0x7777777777777777777777777777777777777777\",\n      \"value:descriptorHash\": \"sha256:8df640a84dbff351a1d67490b42a8d696f5d1232210863e2b469137fe105a6ac\"\n    }\n  ]\n}",
    "caption_md": "Official EIP-8444 example gateway manifest (/.well-known/ard.json) combining a `did:pkh` `value:controllers` array, an `application/ai-registry+json` gateway self-entry, and a verified Level 2 `skill` record anchored on Base (`value:anchor`, `value:descriptorHash`, and `x402` / `onchain` `value:settlement` rails). [6]"
   },
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "Ethereum Name Service (EIP-137)",
      "spec_or_rfc": "EIP-137 (ENS)",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "ERC-8444 puts an on-chain title behind ARD entries, and a domain endorses an address under value:controllers or value:controller in /.well-known/ard.json, whereas ENS resolves a name through a registry and resolver. [2][7]"
     },
     {
      "name": "W3C Decentralized Identifiers (DID 1.0) & Verifiable Credentials (VC 2.0)",
      "spec_or_rfc": "W3C DID 1.0",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "ERC-8444 names the endorsed address with value:controllers or value:controller in /.well-known/ard.json, which plain ARD registries ignore, whereas DID Core and VC 2.0 define identifier syntax and credentials and do not define those members. [2][8]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "ard",
      "target_name": "Agentic Resource Discovery (ARD)",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "ERC-8444 depends on ARD and serves records through /.well-known/ard.json, adding value:controllers, which plain ARD registries ignore, and on-chain records for a skill, a task tender, an agent identity, or a registry endpoint. [2][9]"
     },
     {
      "target_id": "erc-8004",
      "target_name": "ERC-8004: Trustless Agents",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "ERC-8004 is an on-chain agent-identity registry, while ERC-8444 anchors ARD records on chain, can point an agent record at an ERC-8004 registration, and serves them at /.well-known/ard.json. [2][10]"
     },
     {
      "target_id": "x402",
      "target_name": "x402",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "ERC-8444 anchors discovery records on chain and in the ARD manifest at /.well-known/ard.json, while x402 is an HTTP-header payment protocol and does not define that manifest. [2][11]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": "ERC-8444 (`Draft`, created `2026-10-12` and merged into `ethereum/ERCs` via PR `#2073` on `2026-10-15`) has no independent third-party mainnet deployments verified yet. Author Gary Yang's reference repository (`garyyang-finchip/ard-onchain-framework`) provides the Solidity registry kernel, four kind adapters, a Node.js resolver/gateway passing the ARD conformance CLI, and a Sepolia testnet deployment (`0x126795eCa2A10ea5B2d065a8049e01B6fcDAaa78`, `2026-10-16`). [2][4][5]",
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Discover protocols](/category/discover/)** — Category index for `discover` standards."
    }
   ],
   "v05_compiled_md": "---\nid: erc-8444\ntitle: \"ERC-8444: Agentic Resource Discovery (ARD) Onchain\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: discover\nform: onchain-registry\nwire_archetype: web_discovery\nspec_url: https://eips.ethereum.org/EIPS/eip-8444\nlast_checked: 2026-11-12\n---\n\n# ERC-8444: Agentic Resource Discovery (ARD) Onchain\n\n**Category:** [Discover](/category/discover/) (`discover`) · **Form:** On-chain registry (`onchain-registry`) · **Last checked:** 2026-11-12\n\n**ERC-8444: Agentic Resource Discovery (ARD) Onchain** (`ERC-8444`) defines an onchain registry of value records for agentic resources. A value record binds an ARD entry, as defined by the Agentic Resource Discovery specification maintained by the ards-project working group, to an onchain anchor — a token-bound executable skill, a token-bound task tender, an address-anchored agent identity, or an ARD registry endpoint — and, through a kind adapter, to the address that controls that anchor. [1] The author is Gary Yang (`@garyyang-finchip`). Front matter sets `status: Draft`, `type: Standards Track`, `category: ERC`, and `created: 2026-10-12`. [1] An address claims a domain by calling `claimDomain`, or by having anyone submit `claimDomainBySig` with an EIP-712 signature of the claim. `register` MUST revert unless `kind` has an adapter, `descriptorHash` is nonzero, `adapter.exists(target, id)` is true, `msg.sender` is the controller the adapter reports, and no record exists for the anchor. [2] A resolver builds the served view of a record as follows: it reads the record and the adapter views; it fetches the descriptor; it rejects the descriptor unless the content-member hash equals `descriptorHash`. A gateway MUST publish `/.well-known/ard.json` containing at least one entry of type `application/ai-registry+json` that describes itself. [2] Signed domain claims use EIP-712 typed data with `name = \"ARD Onchain Registry\"` and `version = \"1\"`, and contract accounts are verified through ERC-1271 (`requires: 165, 712, 1271`). [2] The registry MUST implement ERC-165 and return true for interface id `0x881908a5`. An ARD entry in this ERC follows the ARD specification, v0.91. [2]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Discover](/category/discover/) (`discover`) |\n| **Form** | On-chain registry (`onchain-registry`) |\n| **Originated by** | Gary Yang (`@garyyang-finchip`) (created 2026-10-12) [1][2] |\n| **Governed by** | Ethereum Improvement Proposals (EIP / ERC Standards Track process) [1][2] |\n| **Track** | Ethereum Standards Track (ERC) [2] |\n| **Status** | Draft Standards Track ERC, created 2026-10-12 [2][3] |\n| **Version** | Draft (`status: Draft`, targeting ARD v0.91 entry schema) [2][3] |\n| **Wire format** | Solidity smart contract ABI (`ERC-165`, `EIP-712`, `ERC-1271`), CAIP-10 / CAIP-19 identifiers, and JSON / JSON-LD (`ard-entry.schema.json`) [1][2][3] |\n| **Specification** | [ERC-8444](https://eips.ethereum.org/EIPS/eip-8444) · [well-known-ard.json Example](https://eips.ethereum.org/assets/eip-8444/examples/well-known-ard.json) · [Ethereum Magicians #29963](https://ethereum-magicians.org/t/erc-8444-agentic-resource-discovery-ard-onchain/29963) · [Reference Framework (`ard-onchain-framework`)](https://github.com/garyyang-finchip/ard-onchain-framework) [2][4][5] |\n| **Found at** | On-chain registry lookups bridged to `/.well-known/ard.json` via `value:controllers` and `value:controller` [2] |\n| **Licence** | CC0 1.0 Universal (public domain waiver) [2] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Kinds, levels, and the descriptor hash](#kinds-levels-and-the-descriptor-hash)\n3. [Domain binding, adoption, and gateway serving](#domain-binding-adoption-and-gateway-serving)\n4. [Counterparts and related standards](#counterparts-and-related-standards)\n5. [Adoption and ecosystem](#adoption-and-ecosystem)\n6. [See also](#see-also)\n7. [References](#references)\n\n---\n\n## Problem and scope\n\nARD answers what exists and who says so, and it roots trust in domain ownership. ARD deliberately defines nothing beyond discovery: no price, no payment, no settlement, no escrow, no credit. [2] This ERC is that layer. A value record binds an ARD entry to an onchain anchor and, through a kind adapter, to the address that controls that anchor. The address is the only root, and a domain is an endorsement an address collects. [2] A value record's `kind` says which side of a trade the entry occupies: an offer, a tender, a subject, or an index. Every existing ARD entry is already a dormant value record (level 0). [2] Authority over a record belongs to an address, never to a domain. The registry does not verify manifests, and the chain cannot. This ERC defines no assertion registry. [2] Anchors MUST be on the chain of the registry instance. The registry cannot verify an anchor on another chain, so it refuses them. [2] No change is required to skill, tender, or identity contracts: adapters read their existing views, and the registry writes nothing to them. [2]\n\n### ERC-8444 gateway manifest (/.well-known/ard.json)\n\n```json\n{\n  \"@context\": [\n    \"https://agenticresourcediscovery.org/context/v1\",\n    {\n      \"value\": \"https://eips.ethereum.org/assets/eip-8444/ns#\"\n    }\n  ],\n  \"value:controllers\": [\n    \"did:pkh:eip155:8453:0x6666666666666666666666666666666666666666\"\n  ],\n  \"entries\": [\n    {\n      \"identifier\": \"urn:air:registry.finchip.ai:registry:base\",\n      \"trustManifest\": {\n        \"identity\": \"registry.finchip.ai\"\n      },\n      \"displayName\": \"ARD Onchain gateway for Base\",\n      \"description\": \"ARD registry endpoint indexing the ARD Onchain registry instance on Base. Results carry onchain anchors and descriptor hashes for independent verification.\",\n      \"type\": \"application/ai-registry+json\",\n      \"url\": \"https://registry.finchip.ai/api/v1/\",\n      \"representativeQueries\": [\n        \"onchain skills with escrowed bounties\",\n        \"agent tasks paying in USDC on Base\"\n      ],\n      \"updatedAt\": \"2026-10-12T00:00:00Z\",\n      \"value:kind\": \"registry\",\n      \"value:controller\": \"did:pkh:eip155:8453:0x6666666666666666666666666666666666666666\",\n      \"value:indexes\": [\n        \"eip155:8453:0x7777777777777777777777777777777777777777\"\n      ]\n    },\n    {\n      \"identifier\": \"urn:air:registry.finchip.ai:onchain:eip155-8453-erc721-0x1111111111111111111111111111111111111111-42\",\n      \"trustManifest\": {\n        \"identity\": \"registry.finchip.ai\"\n      },\n      \"displayName\": \"FinChip Daily Finance Brief\",\n      \"description\": \"Generates the daily global finance brief: 60-instrument dashboard, top headlines, short analysis.\",\n      \"type\": \"application/ai-skill+md\",\n      \"url\": \"https://finchip.ai/skills/daily-finance-brief/SKILL.md\",\n      \"tags\": [\n        \"finance\",\n        \"report\",\n        \"daily\"\n      ],\n      \"capabilities\": [\n        \"DailyFinanceBrief\"\n      ],\n      \"representativeQueries\": [\n        \"generate today's global markets brief\",\n        \"daily finance report with crypto and FX dashboard\",\n        \"morning market summary as PDF\"\n      ],\n      \"version\": \"1.4.0\",\n      \"updatedAt\": \"2026-10-12T00:00:00Z\",\n      \"value:kind\": \"skill\",\n      \"value:controller\": \"did:pkh:eip155:8453:0x2222222222222222222222222222222222222222\",\n      \"value:terms\": {\n        \"unit\": \"call\",\n        \"price\": {\n          \"amount\": \"0.50\",\n          \"currency\": \"USDC\",\n          \"asset\": \"eip155:8453/erc20:0x833589fcd6edb6e08f4c7c32d4f71b54bda02913\"\n        }\n      },\n      \"value:settlement\": [\n        {\n          \"rail\": \"x402\",\n          \"payee\": \"eip155:8453:0x2222222222222222222222222222222222222222\",\n          \"asset\": \"eip155:8453/erc20:0x833589fcd6edb6e08f4c7c32d4f71b54bda02913\",\n          \"endpoint\": \"https://finchip.ai/api/v1/skills/daily-finance-brief\"\n        },\n        {\n          \"rail\": \"onchain\",\n          \"payee\": \"eip155:8453:0x2222222222222222222222222222222222222222\",\n          \"asset\": \"eip155:8453/erc20:0x833589fcd6edb6e08f4c7c32d4f71b54bda02913\"\n        }\n      ],\n      \"value:provenance\": {\n        \"packageDigest\": \"sha256:3f2a9c0b7e1d4a6f8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a\",\n        \"cardDigest\": \"sha256:9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f\"\n      },\n      \"value:anchor\": \"eip155:8453/erc721:0x1111111111111111111111111111111111111111/42\",\n      \"value:adopted\": true,\n      \"value:canonical\": \"urn:air:finchip.ai:skills:daily-finance-brief\",\n      \"value:aliases\": [\n        \"urn:air:registry.finchip.ai:onchain:eip155-8453-erc721-0x1111111111111111111111111111111111111111-42\"\n      ],\n      \"value:binding\": \"verified\",\n      \"value:level\": 2,\n      \"value:status\": \"Active\",\n      \"value:registry\": \"eip155:8453:0x7777777777777777777777777777777777777777\",\n      \"value:descriptorHash\": \"sha256:8df640a84dbff351a1d67490b42a8d696f5d1232210863e2b469137fe105a6ac\"\n    }\n  ]\n}\n```\n\n*Official EIP-8444 example gateway manifest (/.well-known/ard.json) combining a `did:pkh` `value:controllers` array, an `application/ai-registry+json` gateway self-entry, and a verified Level 2 `skill` record anchored on Base (`value:anchor`, `value:descriptorHash`, and `x402` / `onchain` `value:settlement` rails). [6]*\n\n---\n\n## Kinds, levels, and the descriptor hash\n\nERC-8444 anchors conformant Agentic Resource Discovery (`ARD`) JSON entries to EVM smart contracts across four resource kinds (`skill`, `task`, `agent`, and `registry`), binding on-chain `Record` structs to off-chain descriptors via canonical `RFC 8785` (`JCS`) `descriptorHash` digests. [1][5]\n\n- **Kind postures:** `skill` is an offer on a token-bound skill, and `task` is a tender on a token-bound task tender. The controller of both is the token owner. `agent` is a subject on an address with id 0, and `registry` is an index on an operator address with a nonzero id. The controller of those two is the address itself. The names assertion, policy, and market are reserved and are not defined by this ERC. [2]\n- **Levels and status:** Status is `Active`, `Suspended`, or `Retired`. The controller moves a record between `Active` and `Suspended` and from either to `Retired`. `Retired` is terminal and binds every later holder of the anchor. `L0` means no record exists. `L1` means an `Active` record. `L2` means `L1`, the adapter reports the anchor backed, and any anchor hint matches the descriptor package digest. [2]\n- **What the hash covers:** Publication members, including `@context`, `@id`, `identifier`, and `trustManifest`, are not hashed. Resolved `value:` members are computed by resolvers and are never hashed. Content members are every other member. Excluding publication and resolved members lets a gateway alias and the controller's own entry hash to the same value. [2]\n- **Authored value members:** `value:kind` is REQUIRED and MUST equal the record's kind. For `skill` and `task` records, `packageDigest` MUST equal the anchor hint for the record to reach level 2. A `task` descriptor MUST have `type` `application/ai-task+json`. A settlement `rail` is one of `onchain`, `x402`, or `declared`, and `declared` carries no guarantee and is meaningful only at level 0. [2]\n\n---\n\n## Domain binding, adoption, and gateway serving\n\nBidirectional domain binding pairs an on-chain controller claim with an off-chain acknowledgment in the origin's `/.well-known/ard.json` manifest, while HTTP gateways index contract events and serve verifiable `value:anchor` and `value:descriptorHash` fields to ARD clients. [2]\n\n- **Binding states:** Binding is `unbound` when the address has no claim, `claimed` when it has the only claim and the domain does not acknowledge it, and `verified` when the domain acknowledges the claim. When several addresses have claims, an acknowledged one is `verified` and the others are `contested`. A record without a URN reports `none`. A binding that returns does not retroactively validate anything served while it was absent. [2]\n- **Acknowledgment file:** Acknowledgment is either a top-level `value:controllers` array of `did:pkh` identifiers or an entry whose `value:controller` is the address. ARD registries ignore both members. Resolvers conforming to this ERC read them. This ERC defines no assertion registry for mirroring a verified binding onchain. [2]\n- **Adoption after transfer:** A record is adopted when its attestor is the current controller. After the controller changes, the record is unadopted until the new controller commits a descriptor. `updateDescriptor` MUST set `attestor` to `msg.sender` and MUST accept a `descriptorHash` equal to the current one, so the new controller adopts the served descriptor by committing it again. A resolver MUST NOT include an unadopted record in search results. [2]\n- **Gateway duties:** A gateway MUST implement search with federation modes `auto`, `referrals`, and `none`, SHOULD implement explore, and MAY implement listing. Every served record MUST carry `value:anchor` and `value:descriptorHash`. A gateway MAY register itself as a `registry` record. [2]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **Ethereum Name Service (EIP-137)** | `EIP-137 (ENS)` | Analogous to classic standard | ERC-8444 puts an on-chain title behind ARD entries, and a domain endorses an address under value:controllers or value:controller in /.well-known/ard.json, whereas ENS resolves a name through a registry and resolver. [2][7] |\n| **W3C Decentralized Identifiers (DID 1.0) & Verifiable Credentials (VC 2.0)** | `W3C DID 1.0` | Analogous to classic standard | ERC-8444 names the endorsed address with value:controllers or value:controller in /.well-known/ard.json, which plain ARD registries ignore, whereas DID Core and VC 2.0 define identifier syntax and credentials and do not define those members. [2][8] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Agentic Resource Discovery (ARD)](/protocols/ard/)** | Builds on | ERC-8444 depends on ARD and serves records through /.well-known/ard.json, adding value:controllers, which plain ARD registries ignore, and on-chain records for a skill, a task tender, an agent identity, or a registry endpoint. [2][9] |\n| **[ERC-8004: Trustless Agents](/protocols/erc-8004/)** | Complements | ERC-8004 is an on-chain agent-identity registry, while ERC-8444 anchors ARD records on chain, can point an agent record at an ERC-8004 registration, and serves them at /.well-known/ard.json. [2][10] |\n| **[x402](/protocols/x402/)** | Complements | ERC-8444 anchors discovery records on chain and in the ARD manifest at /.well-known/ard.json, while x402 is an HTTP-header payment protocol and does not define that manifest. [2][11] |\n\n---\n\n## Adoption and ecosystem\n\nERC-8444 (`Draft`, created `2026-10-12` and merged into `ethereum/ERCs` via PR `#2073` on `2026-10-15`) has no independent third-party mainnet deployments verified yet. Author Gary Yang's reference repository (`garyyang-finchip/ard-onchain-framework`) provides the Solidity registry kernel, four kind adapters, a Node.js resolver/gateway passing the ARD conformance CLI, and a Sepolia testnet deployment (`0x126795eCa2A10ea5B2d065a8049e01B6fcDAaa78`, `2026-10-16`). [2][4][5]\n\n---\n\n## See also\n\n- **Category:** [Discover protocols](/category/discover/)\n\n---\n\n## References\n\n1. Gary Yang (@garyyang-finchip), *ERCS/erc-8444.md — Agentic Resource Discovery (ARD) Onchain (Raw Markdown)* (created 2026-10-12; fetched 2026-10-31) — <https://raw.githubusercontent.com/ethereum/ERCs/master/ERCS/erc-8444.md>\n2. Gary Yang (@garyyang-finchip), *ERC-8444: Agentic Resource Discovery (ARD) Onchain (Ethereum Improvement Proposals)* (created 2026-10-12; fetched 2026-10-31) — <https://eips.ethereum.org/EIPS/eip-8444>\n3. Gary Yang (@garyyang-finchip), *ethereum/ERCs — ERCS/erc-8444.md Repository Source* (created 2026-10-12; fetched 2026-10-31) — <https://github.com/ethereum/ERCs/blob/master/ERCS/erc-8444.md>\n4. Gary Yang (Fellowship of Ethereum Magicians), *ERC-8444: Agentic Resource Discovery (ARD) Onchain — Discussion #29963* (2026-10-13) — <https://ethereum-magicians.org/t/erc-8444-agentic-resource-discovery-ard-onchain/29963>\n5. Gary Yang (garyyang-finchip), *ard-onchain-framework — Reference Solidity Kernel, Gateway & Sepolia Deployment* (2026-10-16) — <https://raw.githubusercontent.com/garyyang-finchip/ard-onchain-framework/main/README.md>\n6. Gary Yang (Ethereum Improvement Proposals), *ERC-8444 Example Gateway Manifest (well-known-ard.json)* (2026-10-12) — <https://eips.ethereum.org/assets/eip-8444/examples/well-known-ard.json>\n7. Nick Johnson (Ethereum), *ERC-137: Ethereum Domain Name Service - Specification* (2016-04-04) — <https://eips.ethereum.org/EIPS/eip-137>\n8. W3C, *Decentralized Identifiers (DIDs) v1.0* (2022-07-19) — <https://www.w3.org/TR/did-core/>\n9. Agentic Resource Discovery Project (ards-project), *Agentic Resource Discovery Specification v0.91* (2026-08-26; fetched 2026-10-30) — <https://agenticresourcediscovery.org/spec/>\n10. Marco De Rossi, Davide Crapis, Jordan Ellis, and Erik Reppel, *ERCS/erc-8004.md (Trustless Agents)* (created 2025-08-13; fetched 2026-10-30) — <https://raw.githubusercontent.com/ethereum/ERCs/master/ERCS/erc-8004.md>\n11. Linux Foundation, *Linux Foundation Announces Operational Launch of x402 Foundation to Standardize Internet-Native Payments for AI Agents and Applications* (July 14, 2026) — <https://www.linuxfoundation.org/press/linux-foundation-announces-operational-launch-of-x402-foundation-to-standardize-internet-native-payments-for-ai-agents-and-applications>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "jafar",
   "name": "JAFAR: A JSON-Based Format for Publishing IP Ranges of Automated HTTP Clients",
   "acronym": "JAFAR",
   "aliases": [
    "draft-illyes-webbotauth-jafar",
    "draft-illyes-aipref-jafar"
   ],
   "collisions": [],
   "step": "identify",
   "parties": [
    "agent-site"
   ],
   "form": "document-format",
   "track": "ietf",
   "scope": "general",
   "question": "How can a crawler or bot operator publish the IP ranges its automated clients use, in one machine-readable format that sites can check traffic against?",
   "analog": "A crawler's published list of IP ranges, checked alongside reverse DNS",
   "origin": {
    "org": "Gary Illyes (individual submission)",
    "date": "2025-09-30"
   },
   "governance": "Individual Internet-Draft, not adopted by a working group; despite 'webbotauth' in its name, discussion takes place on the AI Preferences (aipref) Working Group mailing list; source at github.com/garyillyes/jafar",
   "native_status": "Active Internet-Draft (draft-illyes-webbotauth-jafar-01), Intended Status: Informational; expires 2027-04-25",
   "phase": "draft",
   "implementation": "none-found",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "version": {
    "label": "draft-illyes-webbotauth-jafar-01",
    "date": "2026-10-22"
   },
   "spec_url": "https://datatracker.ietf.org/doc/html/draft-illyes-webbotauth-jafar-01",
   "discovery": {
    "mechanism": "None defined: the draft specifies only the JSON file's syntax and semantics (media type application/jafar+json), not where it is published or how it is retrieved",
    "path": null
   },
   "probe": {
    "method": "NONE",
    "path": "",
    "parse": "",
    "on_absent": "The draft defines no fixed location for the file, so absence at any given URL says nothing about whether an operator publishes one."
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.ietf.org/archive/id/draft-illyes-webbotauth-jafar-01.txt",
     "claim": "G. Illyes (Independent), *A JSON-Based Format for Publishing IP Ranges of Automated HTTP Clients (draft-illyes-webbotauth-jafar-01)*, checked 2026-10-31",
     "date": null,
     "quote": "A JSON-Based Format for Publishing IP Ranges of Automated HTTP Clients draft-illyes-webbotauth-jafar-01 Abstract This document defines a standardized JSON format for operators of automated HTTP clients / Internet-Draft JAFAR October 2026 / Internet-Draft Independent Intended status: Informational 22 October 2026 Expires: 25 April 2027 / Discussion of this document takes place on the AI Preferences Working Group mailing list (ai-control@ietf.org), which is archived at / An IP range publication file MUST be a single JSON object. The text encoding of the file MUST be UTF-8. / The prefixes member of the top-level object MUST contain an array of JSON objects. / there MUST be a single, unified array for both IPv4 and IPv6 prefixes. / of the application/jafar+json media type, as specified in the Content-Type HTTP header. / Intended status: Informational 22 October 2026 Expires: 25 April 2027 A JSON-Based Format for Publishing IP Ranges of Automated HTTP Clients draft-illyes-webbotauth-jafar-01 / This Internet-Draft will expire on 25 April 2027. / Address Gary Illyes Independent Email: [email redacted] Illyes Expires 25 April 2027 [Page 11] Network / Intended status: Informational / can be Illyes Expires 25 April 2027 [Page 2] Internet-Draft JAFAR October 2026 integrated / Copyright (c) 2026 IETF Trust and the persons identified as the document authors. / A consistent, machine-readable format for IP range publication simplifies the task of identifying and verifying legitimate automated traffic, thereby decreasing maintenance load on website operators while reducing the risk of inadvertently blocking beneficial clients. / This specification codifies and extends common existing practices to provide a simple yet extensible format that accommodates a variety of use cases. / A Prefix Object MUST contain exactly one of either the ipv4Prefix or ipv6Prefix field. An object containing both or neither of these fields is invalid and MUST be ignored by consumers. / The scope of this specification is limited to the syntax and semantics of the JSON file itself. It does not specify the transport mechanism for retrieving the file. / It also does not prescribe specific policies for how consumers should use the data (e.g., allowlisting, rate-limiting, or monitoring). / This format is intended to complement, not replace, other established methods for crawler verification. Techniques such as forward-confirmed reverse DNS (FCrDNS) lookups remain a vital part of a comprehensive verification strategy.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://datatracker.ietf.org/doc/draft-illyes-webbotauth-jafar/",
     "claim": "G. Illyes (Independent), *draft-illyes-webbotauth-jafar — A JSON-Based Format for Publishing IP Ranges of Automated HTTP Clients (IETF Datatracker)*, checked 2026-10-31",
     "date": null,
     "quote": "Author | | Gary Illyes / This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. ... Active Internet-Draft (individual) / Last updated | 2026-10-22 | | Replaces | | draft-illyes-aipref-jafar / Preferences Working Group mailing list (ai-control@ietf.org), which is archived at.¶ Source for this draft",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://www.ietf.org/archive/id/draft-illyes-webbotauth-jafar-00.txt",
     "claim": "G. Illyes (Independent), *A JSON-Based Format for Publishing IP Ranges of Automated HTTP Clients (draft-illyes-webbotauth-jafar-00)*, historical revision (checked 2026-10-31)",
     "date": null,
     "quote": "21 April 2026 Expires: 23 October 2026 A JSON-Based Format for Publishing IP Ranges of Automated HTTP Clients draft-illyes-webbotauth-jafar-00 / can be Illyes Expires 23 October 2026 [Page 2] Internet-Draft JAFAR April 2026 integrated",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://datatracker.ietf.org/doc/html/draft-illyes-webbotauth-jafar-01",
     "claim": "G. Illyes (Independent), *A JSON-Based Format for Publishing IP Ranges of Automated HTTP Clients (draft-illyes-webbotauth-jafar-01 HTML)*, checked 2026-10-31",
     "date": null,
     "quote": "this document takes place on the AI Preferences Working Group mailing list (ai-control@ietf.org), which / October 2026 Illyes Expires 25 April 2027 [Page] Workgroup: Network Working Group Internet-Draft: draft-illyes-webbotauth-jafar-01 / inspect the version optional parameter of the application/jafar+json media type, as specified in the / < https://datatracker.ietf.org/doc/html/draft-illyes-aipref-cbcp-04 >. CIDR Fuller, V. and T. Li, \"Classless Inter-domain Routing (CIDR): The / disclosed by the publisher of the file on the page that describes the crawler / | creationTime | String | MUST | An ISO 8601 timestamp in the \"Z\" timezone (UTC) indicating when the file was generated (e.g., \"2025-08-15T14:30:00Z\"). |",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://www.ietf.org/archive/id/draft-illyes-webbotauth-jafar-00.html",
     "claim": "G. Illyes (Independent), *A JSON-Based Format for Publishing IP Ranges of Automated HTTP Clients (draft-illyes-webbotauth-jafar-00 HTML)*, historical revision (checked 2026-10-31)",
     "date": null,
     "quote": "this specification, consumers MUST inspect the version optional parameter of the application/jafar+json media type,",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://openai.com/gptbot.json",
     "claim": "OpenAI, *OpenAI GPTBot IP Range List (openai.com/gptbot.json)*, checked 2026-10-31",
     "date": null,
     "quote": "content-type: application/json; charset=utf-8 ... \"creationTime\": \"2026-09-22T02:00:07.000000\"",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://www.bing.com/toolbox/bingbot.json",
     "claim": "Microsoft, *Microsoft Bingbot IP Range List (bing.com/toolbox/bingbot.json)*, checked 2026-10-31",
     "date": null,
     "quote": "\"creationTime\": \"2024-01-03T10:00:00.121331\" ... content-type: application/json",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://www.rfc-editor.org/rfc/rfc8805.html",
     "claim": "E. Kline, K. Duleba, Z. Szamonek, S. Moser, and W. Kumari, *RFC 8805: A Format for Self-Published IP Geolocation Feeds*, August 2020",
     "date": null,
     "quote": "This document records a format whereby a network operator can publish",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-webbotauth-httpsig-protocol/",
     "claim": "IETF Datatracker, *draft-ietf-webbotauth-httpsig-protocol — HTTP Message Signatures for automated traffic (IETF Datatracker)*, checked 2026-10-30",
     "date": null,
     "quote": "WG state WG Document",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://www.ietf.org/archive/id/draft-meunier-webbotauth-registry-04.txt",
     "claim": "M. Guerreiro (Cloudflare), U. Kirazci (Amazon), and T. Meunier (Cloudflare), *Registry and Signature Agent card for Web bot auth (draft-meunier-webbotauth-registry-04)*, checked 2026-10-30",
     "date": null,
     "quote": "https://www.ietf.org/mailman/listinfo/web-bot-auth/. Source for this draft and an issue tracker can be found at https://github.com/thibmeu/draft-meunier-webbotauth-registry.",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://www.rfc-editor.org/rfc/rfc9309.html",
     "claim": "M. Koster, G. Illyes, H. Zeller, and L. Sassman (IETF), *RFC 9309: Robots Exclusion Protocol*, published September 2022",
     "date": null,
     "quote": "This is an Internet Standards Track document.",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://datatracker.ietf.org/doc/draft-rescorla-anonymous-webbotauth/",
     "claim": "E. Rescorla (Independent) and R. L. Barnes (Cisco), *draft-rescorla-anonymous-webbotauth — Anonymous Bot Authentication: Authorization and Rate Limiting for Web Agents (IETF Datatracker)*, checked 2026-10-31",
     "date": null,
     "quote": "Status information for this document may be found at https://datatracker.ietf.org/doc/draft-rescorla-anonymous-webbotauth/. Source for this draft",
     "ref": 12
    }
   ],
   "summary_md": "**JAFAR** (`draft-illyes-webbotauth-jafar-01`) defines a standardized JSON format for operators of automated HTTP clients to publicly disclose their IP address ranges. Gary Illyes is the author. The draft header lists Independent, intended status Informational, and 22 October 2026. Discussion of the draft takes place on the AI Preferences Working Group mailing list. Datatracker records an Active Internet-Draft (individual). This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. An IP range publication file MUST be a single JSON object. The text encoding of the file MUST be UTF-8. The `prefixes` member MUST contain an array of JSON objects. There MUST be a single, unified array for both IPv4 and IPv6 prefixes. The media type is `application/jafar+json` on the Content-Type header. `draft-illyes-webbotauth-jafar-01` is dated 22 October 2026 and will expire on 25 April 2027. Datatracker last updated the document on `2026-10-22` and records that it replaces `draft-illyes-aipref-jafar`. `draft-illyes-webbotauth-jafar-00` is dated 21 April 2026 and expires on 23 October 2026.",
   "part_of": null,
   "group": null,
   "use_cases": [
    "attribute-agent-traffic",
    "control-ai-crawling"
   ],
   "audience": [
    "site-owner",
    "platform"
   ],
   "pairs_with": [
    "webbotauth",
    "web-bot-auth-signature-agent-card",
    "ai-crawler-tokens-robots",
    "anonymous-bot-auth"
   ],
   "prerequisites": [],
   "dispute": null,
   "last_verified": "2026-11-12",
   "history": [
    {
     "date": "2026-10-20",
     "note": "initial record; verified against the datatracker page and the -00 text (IETF rsync mirror); expires 2026-10-23"
    },
    {
     "date": "2026-10-22",
     "note": "draft-illyes-webbotauth-jafar-00 expires on 2026-10-23"
    },
    {
     "date": "2026-10-23",
     "note": "revision 00 → 01"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-illyes-webbotauth-jafar"
    }
   ],
   "ietf_tracker": {
    "doc": "draft-illyes-webbotauth-jafar",
    "rev": "01",
    "state": "active",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-10-22",
    "expires_utc": "2027-04-25",
    "as_of": "2026-10-31",
    "source": "https://datatracker.ietf.org/doc/draft-illyes-webbotauth-jafar/",
    "source_label": "per IETF Datatracker"
   },
   "hatnote_md": "",
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": null,
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**JAFAR** (`draft-illyes-webbotauth-jafar-01`) defines a standardized JSON format for operators of automated HTTP clients to publicly disclose their IP address ranges. [1] Gary Illyes is the author. [2] The draft header lists Independent, intended status Informational, and 22 October 2026. [1] Discussion of the draft takes place on the AI Preferences Working Group mailing list. [1] Datatracker records an Active Internet-Draft (individual). This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. [2] An IP range publication file MUST be a single JSON object. The text encoding of the file MUST be UTF-8. [1] The `prefixes` member MUST contain an array of JSON objects. [1] There MUST be a single, unified array for both IPv4 and IPv6 prefixes. [1] The media type is `application/jafar+json` on the Content-Type header. [1] `draft-illyes-webbotauth-jafar-01` is dated 22 October 2026 and will expire on 25 April 2027. [1] Datatracker last updated the document on `2026-10-22` and records that it replaces `draft-illyes-aipref-jafar`. [2] `draft-illyes-webbotauth-jafar-00` is dated 21 April 2026 and expires on 23 October 2026. [3]",
   "v05_identity_sentence_md": "**JAFAR** (`draft-illyes-webbotauth-jafar-01`) defines a standardized JSON format for operators of automated HTTP clients to publicly disclose their IP address ranges. [1] Gary Illyes is the author. [2] The draft header lists Independent, intended status Informational, and 22 October 2026. [1] Discussion of the draft takes place on the AI Preferences Working Group mailing list. [1] Datatracker records an Active Internet-Draft (individual). This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. [2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Identify](/category/identify/) (`identify`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "Gary Illyes (listed as Independent) [1]"
    },
    {
     "label": "Governed by",
     "value_md": "Individual Internet-Draft with no formal IETF standing; discussion on the AI Preferences Working Group list (ai-control@ietf.org) [2][4]"
    },
    {
     "label": "Track",
     "value_md": "IETF Internet-Draft (Informational) [1]"
    },
    {
     "label": "Status",
     "value_md": "Active Internet-Draft (draft-illyes-webbotauth-jafar-01), Intended Status: Informational; expires 2027-04-25 [1][4]"
    },
    {
     "label": "Version",
     "value_md": "`draft-illyes-webbotauth-jafar-01`, 22 October 2026, expires 25 April 2027; follows `-00` of 21 April 2026 [1][3]"
    },
    {
     "label": "Wire format",
     "value_md": "One UTF-8 JSON object with `creationTime` and a unified `prefixes` array; media type `application/jafar+json` [4][5]"
    },
    {
     "label": "Specification",
     "value_md": "https://datatracker.ietf.org/doc/html/draft-illyes-webbotauth-jafar-01 [4]"
    },
    {
     "label": "Found at",
     "value_md": "No well-known path; the file URL must be disclosed on the publisher's crawler description page. Pre-existing crawler IP lists (`openai.com/gptbot.json`, `bing.com/toolbox/bingbot.json`) are served as `application/json` (with `creationTime` values omitting the `Z` UTC indicator) rather than `application/jafar+json` [4][6][7]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust Legal Provisions (BCP 78) [1]"
    },
    {
     "label": "IETF state",
     "value_md": "`draft-illyes-webbotauth-jafar-01` · **Active Internet-Draft** (expires 2027-04-25) · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-illyes-webbotauth-jafar/))"
    }
   ],
   "v05_problem_md": "Identifying and verifying legitimate automated traffic is a maintenance load on website operators, and it carries the risk of inadvertently blocking beneficial clients, unless IP range publication uses one consistent machine-readable format. [1] The specification codifies and extends common existing practices to provide a simple yet extensible format that accommodates a variety of use cases. [1] A Prefix Object MUST contain exactly one of either the `ipv4Prefix` or `ipv6Prefix` field. An object containing both or neither of these fields is invalid and MUST be ignored by consumers. [1] The scope of the specification is limited to the syntax and semantics of the JSON file itself. It does not specify the transport mechanism for retrieving the file. [1] It also does not prescribe specific policies for how consumers should use the data, such as allowlisting, rate-limiting, or monitoring. [1] This format is intended to complement, not replace, other established methods for crawler verification. Forward-confirmed reverse DNS (FCrDNS) lookups remain a vital part of a comprehensive verification strategy. [1]",
   "v05_mechanism_delta_md": "The specification codifies and extends common existing practices to provide a simple yet extensible format that accommodates a variety of use cases. [1] A Prefix Object MUST contain exactly one of either the `ipv4Prefix` or `ipv6Prefix` field. An object containing both or neither of these fields is invalid and MUST be ignored by consumers. [1]",
   "v05_scope_boundary_md": "The scope of the specification is limited to the syntax and semantics of the JSON file itself. It does not specify the transport mechanism for retrieving the file. [1] It also does not prescribe specific policies for how consumers should use the data, such as allowlisting, rate-limiting, or monitoring. [1] This format is intended to complement, not replace, other established methods for crawler verification. Forward-confirmed reverse DNS (FCrDNS) lookups remain a vital part of a comprehensive verification strategy. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "Self-Published IP Geolocation Feeds (RFC 8805)",
      "spec_or_rfc": "RFC 8805",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "A geofeed publishes IP prefix locations for an operator-chosen URL, while JAFAR is an application/jafar+json document of automated-client IP ranges and defines no retrieval URL. [4][8]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "webbotauth",
      "target_name": "Web Bot Auth",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Web Bot Auth verifies the HTTP signature and Signature-Agent directory, and a JAFAR file lists the IP prefixes the same operator uses. [4][9]"
     },
     {
      "target_id": "web-bot-auth-signature-agent-card",
      "target_name": "Signature Agent Card (Web Bot Auth registry)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "The Signature Agent Card's ips_uri points at a JAFAR document, and the card remains the key and purpose metadata. [4][10]"
     },
     {
      "target_id": "ai-crawler-tokens-robots",
      "target_name": "AI crawler tokens in robots.txt",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "robots.txt matches a crawler by product token, and JAFAR publishes the prefixes that token's operator claims to send from. [4][11]"
     },
     {
      "target_id": "anonymous-bot-auth",
      "target_name": "Anonymous Bot Authentication",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Anonymous Bot Authentication redeems an Anchor Endorsement with a Moderator for an unlinkable Credential under the MoLE architecture, and JAFAR still publishes the operator's prefixes as application/jafar+json. [4][12]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Identify protocols](/category/identify/)** — Category index for `identify` standards."
    }
   ],
   "v05_compiled_md": "---\nid: jafar\ntitle: \"JAFAR: A JSON-Based Format for Publishing IP Ranges of Automated HTTP Clients\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: identify\nform: document-format\nwire_archetype: identity_auth_crypto\nspec_url: https://datatracker.ietf.org/doc/html/draft-illyes-webbotauth-jafar-01\nlast_checked: 2026-11-12\n---\n\n# JAFAR: A JSON-Based Format for Publishing IP Ranges of Automated HTTP Clients\n\n**Category:** [Identify](/category/identify/) (`identify`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-11-12\n\n**JAFAR** (`draft-illyes-webbotauth-jafar-01`) defines a standardized JSON format for operators of automated HTTP clients to publicly disclose their IP address ranges. [1] Gary Illyes is the author. [2] The draft header lists Independent, intended status Informational, and 22 October 2026. [1] Discussion of the draft takes place on the AI Preferences Working Group mailing list. [1] Datatracker records an Active Internet-Draft (individual). This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. [2] An IP range publication file MUST be a single JSON object. The text encoding of the file MUST be UTF-8. [1] The `prefixes` member MUST contain an array of JSON objects. [1] There MUST be a single, unified array for both IPv4 and IPv6 prefixes. [1] The media type is `application/jafar+json` on the Content-Type header. [1] `draft-illyes-webbotauth-jafar-01` is dated 22 October 2026 and will expire on 25 April 2027. [1] Datatracker last updated the document on `2026-10-22` and records that it replaces `draft-illyes-aipref-jafar`. [2] `draft-illyes-webbotauth-jafar-00` is dated 21 April 2026 and expires on 23 October 2026. [3]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Identify](/category/identify/) (`identify`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | Gary Illyes (listed as Independent) [1] |\n| **Governed by** | Individual Internet-Draft with no formal IETF standing; discussion on the AI Preferences Working Group list (ai-control@ietf.org) [2][4] |\n| **Track** | IETF Internet-Draft (Informational) [1] |\n| **Status** | Active Internet-Draft (draft-illyes-webbotauth-jafar-01), Intended Status: Informational; expires 2027-04-25 [1][4] |\n| **Version** | `draft-illyes-webbotauth-jafar-01`, 22 October 2026, expires 25 April 2027; follows `-00` of 21 April 2026 [1][3] |\n| **Wire format** | One UTF-8 JSON object with `creationTime` and a unified `prefixes` array; media type `application/jafar+json` [4][5] |\n| **Specification** | https://datatracker.ietf.org/doc/html/draft-illyes-webbotauth-jafar-01 [4] |\n| **Found at** | No well-known path; the file URL must be disclosed on the publisher's crawler description page. Pre-existing crawler IP lists (`openai.com/gptbot.json`, `bing.com/toolbox/bingbot.json`) are served as `application/json` (with `creationTime` values omitting the `Z` UTC indicator) rather than `application/jafar+json` [4][6][7] |\n| **Licence** | IETF Trust Legal Provisions (BCP 78) [1] |\n| **IETF state** | `draft-illyes-webbotauth-jafar-01` · **Active Internet-Draft** (expires 2027-04-25) · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-illyes-webbotauth-jafar/)) |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nIdentifying and verifying legitimate automated traffic is a maintenance load on website operators, and it carries the risk of inadvertently blocking beneficial clients, unless IP range publication uses one consistent machine-readable format. [1] The specification codifies and extends common existing practices to provide a simple yet extensible format that accommodates a variety of use cases. [1] A Prefix Object MUST contain exactly one of either the `ipv4Prefix` or `ipv6Prefix` field. An object containing both or neither of these fields is invalid and MUST be ignored by consumers. [1] The scope of the specification is limited to the syntax and semantics of the JSON file itself. It does not specify the transport mechanism for retrieving the file. [1] It also does not prescribe specific policies for how consumers should use the data, such as allowlisting, rate-limiting, or monitoring. [1] This format is intended to complement, not replace, other established methods for crawler verification. Forward-confirmed reverse DNS (FCrDNS) lookups remain a vital part of a comprehensive verification strategy. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **Self-Published IP Geolocation Feeds (RFC 8805)** | `RFC 8805` | Analogous to classic standard | A geofeed publishes IP prefix locations for an operator-chosen URL, while JAFAR is an application/jafar+json document of automated-client IP ranges and defines no retrieval URL. [4][8] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Web Bot Auth](/protocols/webbotauth/)** | Complements | Web Bot Auth verifies the HTTP signature and Signature-Agent directory, and a JAFAR file lists the IP prefixes the same operator uses. [4][9] |\n| **[Signature Agent Card (Web Bot Auth registry)](/protocols/web-bot-auth-signature-agent-card/)** | Complements | The Signature Agent Card's ips_uri points at a JAFAR document, and the card remains the key and purpose metadata. [4][10] |\n| **[AI crawler tokens in robots.txt](/protocols/ai-crawler-tokens-robots/)** | Complements | robots.txt matches a crawler by product token, and JAFAR publishes the prefixes that token's operator claims to send from. [4][11] |\n| **[Anonymous Bot Authentication](/protocols/anonymous-bot-auth/)** | Complements | Anonymous Bot Authentication redeems an Anchor Endorsement with a Moderator for an unlinkable Credential under the MoLE architecture, and JAFAR still publishes the operator's prefixes as application/jafar+json. [4][12] |\n\n---\n\n## See also\n\n- **Category:** [Identify protocols](/category/identify/)\n\n---\n\n## References\n\n1. G. Illyes (Independent), *A JSON-Based Format for Publishing IP Ranges of Automated HTTP Clients (draft-illyes-webbotauth-jafar-01)* (checked 2026-10-31) — <https://www.ietf.org/archive/id/draft-illyes-webbotauth-jafar-01.txt>\n2. G. Illyes (Independent), *draft-illyes-webbotauth-jafar — A JSON-Based Format for Publishing IP Ranges of Automated HTTP Clients (IETF Datatracker)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/draft-illyes-webbotauth-jafar/>\n3. G. Illyes (Independent), *A JSON-Based Format for Publishing IP Ranges of Automated HTTP Clients (draft-illyes-webbotauth-jafar-00)* (historical revision (checked 2026-10-31)) — <https://www.ietf.org/archive/id/draft-illyes-webbotauth-jafar-00.txt>\n4. G. Illyes (Independent), *A JSON-Based Format for Publishing IP Ranges of Automated HTTP Clients (draft-illyes-webbotauth-jafar-01 HTML)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/html/draft-illyes-webbotauth-jafar-01>\n5. G. Illyes (Independent), *A JSON-Based Format for Publishing IP Ranges of Automated HTTP Clients (draft-illyes-webbotauth-jafar-00 HTML)* (historical revision (checked 2026-10-31)) — <https://www.ietf.org/archive/id/draft-illyes-webbotauth-jafar-00.html>\n6. OpenAI, *OpenAI GPTBot IP Range List (openai.com/gptbot.json)* (checked 2026-10-31) — <https://openai.com/gptbot.json>\n7. Microsoft, *Microsoft Bingbot IP Range List (bing.com/toolbox/bingbot.json)* (checked 2026-10-31) — <https://www.bing.com/toolbox/bingbot.json>\n8. E. Kline, K. Duleba, Z. Szamonek, S. Moser, and W. Kumari, *RFC 8805: A Format for Self-Published IP Geolocation Feeds* (August 2020) — <https://www.rfc-editor.org/rfc/rfc8805.html>\n9. IETF Datatracker, *draft-ietf-webbotauth-httpsig-protocol — HTTP Message Signatures for automated traffic (IETF Datatracker)* (checked 2026-10-30) — <https://datatracker.ietf.org/doc/draft-ietf-webbotauth-httpsig-protocol/>\n10. M. Guerreiro (Cloudflare), U. Kirazci (Amazon), and T. Meunier (Cloudflare), *Registry and Signature Agent card for Web bot auth (draft-meunier-webbotauth-registry-04)* (checked 2026-10-30) — <https://www.ietf.org/archive/id/draft-meunier-webbotauth-registry-04.txt>\n11. M. Koster, G. Illyes, H. Zeller, and L. Sassman (IETF), *RFC 9309: Robots Exclusion Protocol* (published September 2022) — <https://www.rfc-editor.org/rfc/rfc9309.html>\n12. E. Rescorla (Independent) and R. L. Barnes (Cisco), *draft-rescorla-anonymous-webbotauth — Anonymous Bot Authentication: Authorization and Rate Limiting for Web Agents (IETF Datatracker)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/draft-rescorla-anonymous-webbotauth/>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "anonymous-bot-auth",
   "name": "Anonymous Bot Authentication",
   "acronym": "ABA",
   "aliases": [
    "draft-rescorla-anonymous-webbotauth",
    "Anonymous Bot Authentication: Authorization and Rate Limiting for Web Agents"
   ],
   "collisions": [],
   "step": "identify",
   "parties": [
    "agent-site"
   ],
   "form": "endpoint",
   "track": "ietf",
   "scope": "general",
   "question": "How can a site tell authorised, well-behaved bots from others, and rate-limit them, without learning which bot sent each request?",
   "analog": "A members-only pass that proves you belong to a club without showing your name",
   "origin": {
    "org": "E. Rescorla (Independent), R. Barnes (Cisco)",
    "date": "2026-04-08"
   },
   "governance": "Individual Internet-Draft, not adopted by a working group; source at github.com/ekr/draft-rescorla-anonymous-webbotauth",
   "native_status": "Active Internet-Draft, Intended Status: Informational; expires 20 January 2027; the draft says it 'has not yet seen significant security analysis'",
   "phase": "draft",
   "implementation": "none-found",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "version": {
    "label": "draft-rescorla-anonymous-webbotauth-01",
    "date": "2026-07-19"
   },
   "spec_url": "https://datatracker.ietf.org/doc/draft-rescorla-anonymous-webbotauth/",
   "discovery": {
    "mechanism": "None at an origin: a bot registers with a credential Anchor, receives an Endorsement, redeems it with a Moderator (run by or for the site) for an anonymous Credential and presents that Credential; the concrete design uses the MoLE architecture",
    "path": null
   },
   "probe": {
    "method": "NONE",
    "path": "",
    "parse": "",
    "on_absent": "The draft defines no site-side artefact, so support cannot be observed from a site's public endpoints."
   },
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.ietf.org/archive/id/draft-rescorla-anonymous-webbotauth-01.txt",
     "claim": "E. Rescorla (Independent) and R. L. Barnes (Cisco), *Anonymous Bot Authentication: Authorization and Rate Limiting for Web Agents (draft-rescorla-anonymous-webbotauth-01)*, checked 2026-10-31",
     "date": null,
     "quote": "E. Rescorla Internet-Draft Independent Intended status: Informational R. L. Barnes Expires: 20 January 2027 Cisco 19 July 2026 Anonymous Bot Authentication: Authorization and Rate Limiting for Web Agents draft-rescorla-anonymous-webbotauth-01 / This memo describes Anonymous Bot Authentication (ABA), a system that allows Web site operators to distinguish wanted from unwanted traffic, while not tying a given request to a specific sender. / Prior to contacting the site, Alice and Bob both register with a credential Anchor, which is responsible for evaluating whether they comply with the Anchor's policies. They each are issued an anonymous credential, which they can use to authenticate to the server. / the site only learns that someone with a credential from the Anchor is authenticating, not whether it's Alice or Bob. / The Anchor provides an Endorsement which can then be redeemed by the client with the Moderator for a Credential, which can then be presented to the Moderator at a future time in order to provide anonymous authentication. / The Moderator can be operated directly by the Site or can be separate from the Site but cooperating with it. / draft-rescorla-anonymous-webbotauth-01 / This Internet-Draft will expire on 20 January 2027. / Independent Email: [email redacted] Richard L. Barnes Cisco Email: [email redacted] Rescorla & Barnes Expires 20 / Rate Limiting for Web Agents draft-rescorla-anonymous-webbotauth-01 Abstract Automated agents (\"bots\") Network Working Group E. / found at https://datatracker.ietf.org/doc/draft-rescorla-anonymous-webbotauth/. Source for this draft and an issue tracker can be found / Expires 20 January 2027 [Page 3] Internet-Draft Anonymous Bot Authentication July 2026 While directly / directly identifying each bot allows the site to precisely monitor bots' behavior ... Allowing sites to precisely discriminate against specific bots, even when those bots are acting in the public interest. ... Preventing users and groups from being able to anonymously retrieve Web content using automated tools. / When a bot presents an anonymous credential, the Web site learns that the bot is part of some set of authorized bots -- say those whose operators have agreed to good behavior -- and not the specific identity of the bot or the bot operator. / This section describes how to implement ABA using mechanisms from MoLE / This prevents the site from discriminating _between_ customers of the same anchor, although it can discriminate between anchors. As a result, while it is possible to distinguish authenticated from unauthenticated bots, it is not possible to use the authentication method to either (1) selectively block individual bots(2) determine which bots are accessing which resources or (3) link multiple visits by the same bot. It may still be possible to identify bots via other mechanisms such as IP address or fingerprinting. / ABA does not support: - Allow lists / deny lists - Auditing bot behavior - Authenticating site services ... This is a work-in-progress draft and has not yet seen significant security analysis.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://datatracker.ietf.org/doc/draft-rescorla-anonymous-webbotauth/",
     "claim": "E. Rescorla (Independent) and R. L. Barnes (Cisco), *draft-rescorla-anonymous-webbotauth — Anonymous Bot Authentication: Authorization and Rate Limiting for Web Agents (IETF Datatracker)*, checked 2026-10-31",
     "date": null,
     "quote": "Active Internet-Draft (individual) / Last updated | 2026-07-19 / Rescorla Independent Email: [email redacted] Richard L. Barnes Cisco Email: [email redacted] Rescorla & Barnes Expires / Status information for this document may be found at https://datatracker.ietf.org/doc/draft-rescorla-anonymous-webbotauth/. Source for this draft / Intended status: Informational / & Barnes Expires 20 January 2027 [Page 2] Internet-Draft Anonymous Bot Authentication July 2026 / draft-jms-mole-architecture-00, 6 July 2026,. [I-D.jms-mole-protocols] Schlesinger, S., Jackson, D., and T. Meunier, \"MoLE Protocols\", / specific Moderator allow the Client to use one Anchor-issued Endorsement across multiple Moderators, while / Copyright (c) 2026 IETF Trust and the persons identified as the document authors.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://datatracker.ietf.org/doc/html/draft-rescorla-anonymous-webbotauth-01",
     "claim": "E. Rescorla (Independent) and R. L. Barnes (Cisco), *Anonymous Bot Authentication: Authorization and Rate Limiting for Web Agents (draft-rescorla-anonymous-webbotauth-01 HTML)*, checked 2026-10-31",
     "date": null,
     "quote": "This Internet-Draft will expire on 20 January 2027. / Generic Zero-Knowledge Proofs In principle, it is possible to omit the use of Credentials / the Anchor.¶ This Client has not authenticated to the Moderator previously using this Endorsement",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://www.ietf.org/archive/id/draft-rescorla-anonymous-webbotauth-01.html",
     "claim": "E. Rescorla (Independent) and R. L. Barnes (Cisco), *Anonymous Bot Authentication (draft-rescorla-anonymous-webbotauth-01)*, checked 2026-10-31",
     "date": null,
     "quote": "to the Moderator 3.2. Alternate Cryptographic Approaches 3.2.1. Only Generic Zero-Knowledge Proofs 3.2.2. Other",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://www.rfc-editor.org/rfc/rfc9576.html",
     "claim": "A. Davidson, J. Iyengar, and C. A. Wood, *RFC 9576: The Privacy Pass Architecture*, June 2024",
     "date": null,
     "quote": "This document specifies the Privacy Pass architecture and requirements for",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-webbotauth-httpsig-protocol/",
     "claim": "IETF Datatracker, *draft-ietf-webbotauth-httpsig-protocol — HTTP Message Signatures for automated traffic (IETF Datatracker)*, checked 2026-10-30",
     "date": null,
     "quote": "WG state WG Document",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://datatracker.ietf.org/doc/rfc9421/",
     "claim": "IETF Datatracker, *HTTP Message Signatures (RFC 9421)*, Proposed Standard (February 2024); checked 2026-10-30",
     "date": null,
     "quote": "RFC - Proposed Standard (February 2024)",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://www.ietf.org/archive/id/draft-meunier-webbotauth-registry-04.txt",
     "claim": "M. Guerreiro (Cloudflare), U. Kirazci (Amazon), and T. Meunier (Cloudflare), *Registry and Signature Agent card for Web bot auth (draft-meunier-webbotauth-registry-04)*, checked 2026-10-30",
     "date": null,
     "quote": "https://www.ietf.org/mailman/listinfo/web-bot-auth/. Source for this draft and an issue tracker can be found at https://github.com/thibmeu/draft-meunier-webbotauth-registry.",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://www.ietf.org/archive/id/draft-illyes-webbotauth-jafar-01.txt",
     "claim": "G. Illyes (Independent), *A JSON-Based Format for Publishing IP Ranges of Automated HTTP Clients (draft-illyes-webbotauth-jafar-01)*, checked 2026-10-31",
     "date": null,
     "quote": "can be Illyes Expires 25 April 2027 [Page 2] Internet-Draft JAFAR October 2026 integrated",
     "ref": 9
    }
   ],
   "summary_md": "**Anonymous Bot Authentication** (`draft-rescorla-anonymous-webbotauth-01`) is an Active Internet-Draft (individual) with intended status Informational, by E. Rescorla (Independent) and R. L. Barnes (Cisco). It describes a system that allows Web site operators to distinguish wanted from unwanted traffic, while not tying a given request to a specific sender. In the general architectural overview, prior to contacting the site, Alice and Bob both register with a credential Anchor and are issued an anonymous credential that they use to authenticate to the server. The site only learns that someone with a credential from the Anchor is authenticating, not whether it's Alice or Bob. In the concrete MoLE architecture, registration with the Anchor provides a CWT Endorsement which can then be redeemed by the client with the Moderator for a Credential, and that Credential is presented to the Moderator at a future time to provide anonymous authentication. The Moderator can be operated directly by the Site or can be separate from the Site but cooperating with it. `draft-rescorla-anonymous-webbotauth-01` was last updated on 2026-07-19. This Internet-Draft will expire on 20 January 2027 (2027-01-20).",
   "part_of": null,
   "group": null,
   "use_cases": [
    "prove-agent-identity",
    "attribute-agent-traffic",
    "control-ai-crawling"
   ],
   "audience": [
    "site-owner",
    "platform",
    "standards-body"
   ],
   "pairs_with": [
    "webbotauth",
    "http-message-signatures",
    "web-bot-auth-signature-agent-card",
    "jafar"
   ],
   "prerequisites": [],
   "dispute": null,
   "last_verified": "2026-11-12",
   "history": [
    {
     "date": "2026-10-20",
     "note": "initial record; verified against the datatracker page and the -01 text (IETF rsync mirror)"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-rescorla-anonymous-webbotauth"
    }
   ],
   "ietf_tracker": {
    "doc": "draft-rescorla-anonymous-webbotauth",
    "rev": "01",
    "state": "active",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-07-19",
    "expires_utc": "2027-01-20",
    "as_of": "2026-10-31",
    "source": "https://datatracker.ietf.org/doc/draft-rescorla-anonymous-webbotauth/",
    "source_label": "per IETF Datatracker"
   },
   "hatnote_md": "",
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": null,
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Anonymous Bot Authentication** (`draft-rescorla-anonymous-webbotauth-01`) is an Active Internet-Draft (individual) with intended status Informational, by E. Rescorla (Independent) and R. L. Barnes (Cisco). [1][2] It describes a system that allows Web site operators to distinguish wanted from unwanted traffic, while not tying a given request to a specific sender. [1] In the general architectural overview, prior to contacting the site, Alice and Bob both register with a credential Anchor and are issued an anonymous credential that they use to authenticate to the server. [1] The site only learns that someone with a credential from the Anchor is authenticating, not whether it's Alice or Bob. [1] In the concrete MoLE architecture, registration with the Anchor provides a CWT Endorsement which can then be redeemed by the client with the Moderator for a Credential, and that Credential is presented to the Moderator at a future time to provide anonymous authentication. [1] The Moderator can be operated directly by the Site or can be separate from the Site but cooperating with it. [1] `draft-rescorla-anonymous-webbotauth-01` was last updated on 2026-07-19. [1][2] This Internet-Draft will expire on 20 January 2027 (2027-01-20). [1][3]",
   "v05_identity_sentence_md": "**Anonymous Bot Authentication** (`draft-rescorla-anonymous-webbotauth-01`) is an Active Internet-Draft (individual) with intended status Informational, by E. Rescorla (Independent) and R. L. Barnes (Cisco). [1][2] It describes a system that allows Web site operators to distinguish wanted from unwanted traffic, while not tying a given request to a specific sender. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Identify](/category/identify/) (`identify`)"
    },
    {
     "label": "Form",
     "value_md": "Endpoint (`endpoint`)"
    },
    {
     "label": "Originated by",
     "value_md": "Eric Rescorla (Independent) and Richard L. Barnes (Cisco) [1][2]"
    },
    {
     "label": "Governed by",
     "value_md": "Individual IETF Internet-Draft (`draft-rescorla-anonymous-webbotauth`, Network Working Group, not adopted by `webbotauth` WG) [1][2]"
    },
    {
     "label": "Track",
     "value_md": "IETF Internet-Draft (Informational) [2]"
    },
    {
     "label": "Status",
     "value_md": "Active Internet-Draft, Intended Status: Informational; expires 20 January 2027; the draft says it 'has not yet seen significant security analysis' [1][2]"
    },
    {
     "label": "Version",
     "value_md": "`draft-rescorla-anonymous-webbotauth-01` (published 2026-07-19, expires 2027-01-20; Informational) [1][2]"
    },
    {
     "label": "Wire format",
     "value_md": "Anonymous credentials and endorsements instantiated via MoLE (`draft-jms-mole-architecture`) or generic zero-knowledge proofs [2][3][4]"
    },
    {
     "label": "Specification",
     "value_md": "https://datatracker.ietf.org/doc/draft-rescorla-anonymous-webbotauth/ [2]"
    },
    {
     "label": "Found at",
     "value_md": "Anchor registration (`Register`), Moderator endorsement redemption, and Credential presentation (no IANA registrations in `-01`) [2][3]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust Legal Provisions (BCP 78) [2]"
    },
    {
     "label": "IETF state",
     "value_md": "`draft-rescorla-anonymous-webbotauth-01` · **Active Internet-Draft** (expires 2027-01-20) · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-rescorla-anonymous-webbotauth/))"
    }
   ],
   "v05_problem_md": "Directly identifying each bot lets sites monitor behavior and discriminate against specific bots, preventing anonymous automated retrieval of Web content. [1] When a bot presents an anonymous credential, the Web site learns that the bot is part of some set of authorized bots and not the specific identity of the bot or the bot operator. [1] The draft describes how to implement ABA using mechanisms from MoLE. An Anchor Endorsement is redeemed with a Moderator for a Credential, and that Credential is presented later for anonymous authentication. [1] ABA cannot selectively block individual bots, determine which bots access which resources, or link visits by the same bot within an anchor, though a site can discriminate between anchors and bots may still be identified via IP address or fingerprinting. [1] ABA does not support allow or deny lists, auditing bot behavior, or authenticating site services, and this early-stage draft has not yet seen significant security analysis. [1]",
   "v05_mechanism_delta_md": "When a bot presents an anonymous credential, the Web site learns that the bot is part of some set of authorized bots and not the specific identity of the bot or the bot operator. [1] The draft describes how to implement ABA using mechanisms from MoLE. An Anchor Endorsement is redeemed with a Moderator for a Credential, and that Credential is presented later for anonymous authentication. [1]",
   "v05_scope_boundary_md": "ABA cannot selectively block individual bots, determine which bots access which resources, or link visits by the same bot within an anchor, though a site can discriminate between anchors and bots may still be identified via IP address or fingerprinting. [1] ABA does not support allow or deny lists, auditing bot behavior, or authenticating site services, and this early-stage draft has not yet seen significant security analysis. [1]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "Privacy Pass Architecture (RFC 9576)",
      "spec_or_rfc": "RFC 9576",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "Privacy Pass issues an anonymous token from an issuer to a client, while this draft has an Anchor issue an Endorsement that the bot redeems with a Moderator for an anonymous Credential under the MoLE architecture. [2][5]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "webbotauth",
      "target_name": "Web Bot Auth",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "Web Bot Auth presents an RFC 9421 Signature and a Signature-Agent directory, while this draft presents an unlinkable Credential redeemed from an Anchor Endorsement under the MoLE architecture. [2][6]"
     },
     {
      "target_id": "http-message-signatures",
      "target_name": "HTTP Message Signatures",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "RFC 9421 verifies a signature that identifies a key, while the anonymous Credential is presented so that verification does not yield a sender identity. [2][7]"
     },
     {
      "target_id": "web-bot-auth-signature-agent-card",
      "target_name": "Signature Agent Card (Web Bot Auth registry)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "A Signature Agent Card publishes the bot's identity and keys, while this draft's Moderator credential is designed to be unlinkable to that card. [2][8]"
     },
     {
      "target_id": "jafar",
      "target_name": "JAFAR: A JSON-Based Format for Publishing IP Ranges of Automated HTTP Clients",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "JAFAR publishes IP prefixes as application/jafar+json, and the anonymous Credential is the separate MoLE proof that a request is in a population an Anchor endorsed. [2][9]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Identify protocols](/category/identify/)** — Category index for `identify` standards."
    }
   ],
   "v05_compiled_md": "---\nid: anonymous-bot-auth\ntitle: \"Anonymous Bot Authentication\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: identify\nform: endpoint\nwire_archetype: identity_auth_crypto\nspec_url: https://datatracker.ietf.org/doc/draft-rescorla-anonymous-webbotauth/\nlast_checked: 2026-11-12\n---\n\n# Anonymous Bot Authentication\n\n**Category:** [Identify](/category/identify/) (`identify`) · **Form:** Endpoint (`endpoint`) · **Last checked:** 2026-11-12\n\n**Anonymous Bot Authentication** (`draft-rescorla-anonymous-webbotauth-01`) is an Active Internet-Draft (individual) with intended status Informational, by E. Rescorla (Independent) and R. L. Barnes (Cisco). [1][2] It describes a system that allows Web site operators to distinguish wanted from unwanted traffic, while not tying a given request to a specific sender. [1] In the general architectural overview, prior to contacting the site, Alice and Bob both register with a credential Anchor and are issued an anonymous credential that they use to authenticate to the server. [1] The site only learns that someone with a credential from the Anchor is authenticating, not whether it's Alice or Bob. [1] In the concrete MoLE architecture, registration with the Anchor provides a CWT Endorsement which can then be redeemed by the client with the Moderator for a Credential, and that Credential is presented to the Moderator at a future time to provide anonymous authentication. [1] The Moderator can be operated directly by the Site or can be separate from the Site but cooperating with it. [1] `draft-rescorla-anonymous-webbotauth-01` was last updated on 2026-07-19. [1][2] This Internet-Draft will expire on 20 January 2027 (2027-01-20). [1][3]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Identify](/category/identify/) (`identify`) |\n| **Form** | Endpoint (`endpoint`) |\n| **Originated by** | Eric Rescorla (Independent) and Richard L. Barnes (Cisco) [1][2] |\n| **Governed by** | Individual IETF Internet-Draft (`draft-rescorla-anonymous-webbotauth`, Network Working Group, not adopted by `webbotauth` WG) [1][2] |\n| **Track** | IETF Internet-Draft (Informational) [2] |\n| **Status** | Active Internet-Draft, Intended Status: Informational; expires 20 January 2027; the draft says it 'has not yet seen significant security analysis' [1][2] |\n| **Version** | `draft-rescorla-anonymous-webbotauth-01` (published 2026-07-19, expires 2027-01-20; Informational) [1][2] |\n| **Wire format** | Anonymous credentials and endorsements instantiated via MoLE (`draft-jms-mole-architecture`) or generic zero-knowledge proofs [2][3][4] |\n| **Specification** | https://datatracker.ietf.org/doc/draft-rescorla-anonymous-webbotauth/ [2] |\n| **Found at** | Anchor registration (`Register`), Moderator endorsement redemption, and Credential presentation (no IANA registrations in `-01`) [2][3] |\n| **Licence** | IETF Trust Legal Provisions (BCP 78) [2] |\n| **IETF state** | `draft-rescorla-anonymous-webbotauth-01` · **Active Internet-Draft** (expires 2027-01-20) · Individual · as of 2026-10-31 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-rescorla-anonymous-webbotauth/)) |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nDirectly identifying each bot lets sites monitor behavior and discriminate against specific bots, preventing anonymous automated retrieval of Web content. [1] When a bot presents an anonymous credential, the Web site learns that the bot is part of some set of authorized bots and not the specific identity of the bot or the bot operator. [1] The draft describes how to implement ABA using mechanisms from MoLE. An Anchor Endorsement is redeemed with a Moderator for a Credential, and that Credential is presented later for anonymous authentication. [1] ABA cannot selectively block individual bots, determine which bots access which resources, or link visits by the same bot within an anchor, though a site can discriminate between anchors and bots may still be identified via IP address or fingerprinting. [1] ABA does not support allow or deny lists, auditing bot behavior, or authenticating site services, and this early-stage draft has not yet seen significant security analysis. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **Privacy Pass Architecture (RFC 9576)** | `RFC 9576` | Analogous to classic standard | Privacy Pass issues an anonymous token from an issuer to a client, while this draft has an Anchor issue an Endorsement that the bot redeems with a Moderator for an anonymous Credential under the MoLE architecture. [2][5] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Web Bot Auth](/protocols/webbotauth/)** | Peer alternative | Web Bot Auth presents an RFC 9421 Signature and a Signature-Agent directory, while this draft presents an unlinkable Credential redeemed from an Anchor Endorsement under the MoLE architecture. [2][6] |\n| **[HTTP Message Signatures](/protocols/http-message-signatures/)** | Peer alternative | RFC 9421 verifies a signature that identifies a key, while the anonymous Credential is presented so that verification does not yield a sender identity. [2][7] |\n| **[Signature Agent Card (Web Bot Auth registry)](/protocols/web-bot-auth-signature-agent-card/)** | Peer alternative | A Signature Agent Card publishes the bot's identity and keys, while this draft's Moderator credential is designed to be unlinkable to that card. [2][8] |\n| **[JAFAR: A JSON-Based Format for Publishing IP Ranges of Automated HTTP Clients](/protocols/jafar/)** | Complements | JAFAR publishes IP prefixes as application/jafar+json, and the anonymous Credential is the separate MoLE proof that a request is in a population an Anchor endorsed. [2][9] |\n\n---\n\n## See also\n\n- **Category:** [Identify protocols](/category/identify/)\n\n---\n\n## References\n\n1. E. Rescorla (Independent) and R. L. Barnes (Cisco), *Anonymous Bot Authentication: Authorization and Rate Limiting for Web Agents (draft-rescorla-anonymous-webbotauth-01)* (checked 2026-10-31) — <https://www.ietf.org/archive/id/draft-rescorla-anonymous-webbotauth-01.txt>\n2. E. Rescorla (Independent) and R. L. Barnes (Cisco), *draft-rescorla-anonymous-webbotauth — Anonymous Bot Authentication: Authorization and Rate Limiting for Web Agents (IETF Datatracker)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/draft-rescorla-anonymous-webbotauth/>\n3. E. Rescorla (Independent) and R. L. Barnes (Cisco), *Anonymous Bot Authentication: Authorization and Rate Limiting for Web Agents (draft-rescorla-anonymous-webbotauth-01 HTML)* (checked 2026-10-31) — <https://datatracker.ietf.org/doc/html/draft-rescorla-anonymous-webbotauth-01>\n4. E. Rescorla (Independent) and R. L. Barnes (Cisco), *Anonymous Bot Authentication (draft-rescorla-anonymous-webbotauth-01)* (checked 2026-10-31) — <https://www.ietf.org/archive/id/draft-rescorla-anonymous-webbotauth-01.html>\n5. A. Davidson, J. Iyengar, and C. A. Wood, *RFC 9576: The Privacy Pass Architecture* (June 2024) — <https://www.rfc-editor.org/rfc/rfc9576.html>\n6. IETF Datatracker, *draft-ietf-webbotauth-httpsig-protocol — HTTP Message Signatures for automated traffic (IETF Datatracker)* (checked 2026-10-30) — <https://datatracker.ietf.org/doc/draft-ietf-webbotauth-httpsig-protocol/>\n7. IETF Datatracker, *HTTP Message Signatures (RFC 9421)* (Proposed Standard (February 2024); checked 2026-10-30) — <https://datatracker.ietf.org/doc/rfc9421/>\n8. M. Guerreiro (Cloudflare), U. Kirazci (Amazon), and T. Meunier (Cloudflare), *Registry and Signature Agent card for Web bot auth (draft-meunier-webbotauth-registry-04)* (checked 2026-10-30) — <https://www.ietf.org/archive/id/draft-meunier-webbotauth-registry-04.txt>\n9. G. Illyes (Independent), *A JSON-Based Format for Publishing IP Ranges of Automated HTTP Clients (draft-illyes-webbotauth-jafar-01)* (checked 2026-10-31) — <https://www.ietf.org/archive/id/draft-illyes-webbotauth-jafar-01.txt>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "WAG",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "aliases": [
    "WAG"
   ],
   "analog": "A platform-issued service credential exchanged for an OAuth access token",
   "collisions": [
    "Workload Identity Token (WIMSE), which is a credential format rather than this grant"
   ],
   "discovery": {
    "mechanism": "No dedicated well-known path. In published draft-carleton-workload-authz-grant-02 (Section 8), an Authorization Server that publishes RFC 8414 metadata SHOULD include urn:ietf:params:oauth:grant-profile:wag in authorization_grant_profiles_supported and MUST also include urn:ietf:params:oauth:grant-type:jwt-bearer in grant_types_supported. Section 11 requests IANA registration of media type oauth-wag+jwt, urn:ietf:params:oauth:token-type:wag, and urn:ietf:params:oauth:grant-profile:wag; those requests are not completed IANA registrations.",
    "path": null
   },
   "dispute": null,
   "hatnote_md": "This page is about the individual IETF Internet-Draft draft-carleton-workload-authz-grant, an OAuth grant by which an agent platform signs a short-lived JWT so that one of its workloads, such as an AI agent, can get an access token from another company's authorization server without being registered there. It is not the [Identity Assertion JWT Authorization Grant (ID-JAG)](https://agenticweb.wiki/protocols/identity-assertion-authz-grant/), which covers users who signed in through single sign-on; the authors describe that difference as \"ID-JAG is for humans with SSO. This is for workloads.\" It is also not the [WIMSE AI Identity Management System](https://agenticweb.wiki/protocols/wimse-aims/), which its first version profiled.",
   "evidence": [
    {
     "label": "[1]",
     "url": "https://oauth.net/workload-authorization-grant/",
     "claim": "OAuth.net, *Workload Authorization Grant - OAuth 2.0*, undated; fetched 2026-10-30",
     "date": null,
     "quote": "The platform signs a short-lived JWT naming one agent, and the agent presents it at the token endpoint of an authorization server that has been configured once to trust that platform. / WAG is an individual draft and an early exploration, not yet an OAuth Working Group item.",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://www.ietf.org/archive/id/draft-carleton-workload-authz-grant-02.txt",
     "claim": "P. Carleton, N. Steele, A. Parecki, A. Schwenkschuster, and B. Campbell, *Workload Authorization Grant (draft-carleton-workload-authz-grant-02)*, 2 November 2026; expires 6 May 2027",
     "date": null,
     "quote": "An Authorization Server MUST NOT require a client registration per Agent. / This document defines the Workload Authorization Grant (WAG), by / This document defines the Workload Authorization Grant (WAG), by which a workload hosted on a platform -- an AI agent is the motivating case -- obtains access tokens from a third party's OAuth authorization server without requiring an administrator to perform a per-workload provisioning step. / A Workload Identity Provider operated by the platform signs a JWT authorization grant ([RFC7523]) that names one workload, and the workload presents it at the token endpoint of an authorization server that has been configured, once, to trust that Workload Identity Provider. / the JWT in the assertion parameter … The typ JOSE Header Parameter ([RFC7515], Section 4.1.9) of the JWT MUST be oauth-wag+jwt (Section 11.1) / An Authorization Server that publishes metadata [RFC8414] SHOULD include the value urn:ietf:params:oauth:grant-profile:wag (Section 11.2) in its authorization_grant_profiles_supported metadata parameter ([IDJAG], Section 7.2). An Authorization Server that includes this value MUST also include urn:ietf:params:oauth:grant- type:jwt-bearer in grant_types_supported. / Expires: 6 May 2027 … 2 November 2026 Workload Authorization Grant draft-carleton-workload-authz-grant-02 / This document is an early, exploratory individual draft, published to solicit discussion of the deployment pattern it describes. It is not a working group document, does not describe a shipped or committed design, and does not represent a position or roadmap of the editors' employers. Every aspect of it is subject to change or withdrawal, including whether this mechanism should be specified in a separate document at all. / draft-carleton-workload-authz-grant-02 / P. Carleton, Ed. Internet-Draft Anthropic Intended status: Informational N. Steele Expires: 6 May 2027 OpenAI A. Parecki Okta A. Schwenkschuster Defakto Security B. Campbell Ping Identity 2 November 2026 Workload Authorization Grant draft-carleton-workload-authz-grant-02 / It is not a working group document / Intended status: Informational / The token request carries grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer, the JWT in the assertion parameter, and the target resource in the resource parameter [RFC8707]. / The Authorization Server MUST NOT issue refresh tokens for this grant … Where a token type identifier is needed for a Workload Authorization Grant, the value urn:ietf:params:oauth:token-type:wag (Section 11.2) is used / The typ JOSE Header Parameter ([RFC7515], Section 4.1.9) of the JWT MUST be oauth-wag+jwt (Section 11.1) / This section registers oauth-wag+jwt, a new media type … This section registers urn:ietf:params:oauth:token-type:wag … This section registers urn:ietf:params:oauth:grant-profile:wag / 11. IANA Considerations 11.1. Media Types This section registers oauth-wag+jwt, a new media type … 11.2. OAuth URI Registration This section registers urn:ietf:params:oauth:token-type:wag … This section registers urn:ietf:params:oauth:grant-profile:wag in the \"OAuth URI\" subregistry of the \"OAuth Parameters\" registry [IANA.oauth-parameters], for use in the authorization_grant_profiles_supported metadata parameter (Section 8). / Workload Authorization Grant draft-carleton-workload-authz-grant-02 / Status information for this document may be found at https://datatracker.ietf.org/doc/draft-carleton-workload-authz- grant/. Source for this draft and an issue tracker can be found at https://github.com/pcarleton/draft-carleton-workload-authz-grant. / An Authorization Server that publishes metadata [RFC8414] SHOULD include the value urn:ietf:params:oauth:grant-profile:wag (Section 11.2) in its authorization_grant_profiles_supported metadata parameter / Copyright (c) 2026 IETF Trust and the persons identified as the document authors. / This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents / Code Components extracted from this document must include Revised BSD License text / Registering each agent individually at the Authorization Servers it uses is impractical and creates a heavy maintenance burden. / In practice every agent of an installation ends up sharing one credential, at the cost of any attribution of an individual agent's actions. / The authorization server does not reject a workload because it has not seen it before. / The Authorization Server MUST NOT issue refresh tokens for this grant / This document covers workloads acting on their own behalf. Access on behalf of a user or other principal is out of scope, though the grant is intended to compose with delegation mechanisms in which the workload is the actor. / [RFC7523] Jones, M., Campbell, B., and C. Mortimore, \"JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants\", RFC 7523, DOI 10.17487/RFC7523, May 2015, / A Workload Identity Provider operated by the platform signs a JWT authorization grant ([RFC7523]) that names one workload, and the workload presents it at the token endpoint / This document covers workloads acting on their own behalf.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://datatracker.ietf.org/meeting/interim-2026-wimse-02/materials/slides-interim-2026-wimse-02-sessa-workload-authorization-grant-wag-wimse-interim-00",
     "claim": "Carleton, Steele, Parecki, Schwenkschuster, and Campbell, *Workload Authorization Grant (WAG), WIMSE interim slides*, 7 October 2026",
     "date": null,
     "quote": "ID-JAG is for humans with SSO. This is for workloads.",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://datatracker.ietf.org/api/v1/doc/newrevisiondocevent/?doc__name=draft-carleton-workload-authz-grant&format=json",
     "claim": "IETF Datatracker, *New-revision events for draft-carleton-workload-authz-grant*, revision 00 on 2026-08-03; revision 01 on 2026-09-22",
     "date": null,
     "quote": "\"rev\": \"00\", \"time\": \"2026-08-03T17:47:42Z\" / \"rev\": \"01\", \"time\": \"2026-09-22T17:23:54Z\"",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://datatracker.ietf.org/doc/draft-carleton-workload-authz-grant/",
     "claim": "Paul Carleton (Anthropic), Nick Steele (OpenAI), Aaron Parecki (Okta), Arndt Schwenkschuster (Defakto Security), and Brian Campbell (Ping Identity), *draft-carleton-workload-authz-grant — Workload Authorization Grant (IETF Datatracker)*, fetched 2026-10-30",
     "date": null,
     "quote": "Paul Carleton, Nick Steele, Aaron Parecki, Arndt Schwenkschuster, Brian Campbell / This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. / RFC stream | | (None) / Intended RFC status | | (None) / Workload Authorization Grant draft-carleton-workload-authz-grant-01 / Active Internet-Draft (individual) / IESG state | | I-D Exists",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://mailarchive.ietf.org/arch/msg/wimse/4UjEGhAZUt8_JqAse5lxzTQM6zo/",
     "claim": "Paul Carleton, *[WIMSE] New I-D: draft-carleton-workload-authz-grant (Workload Authorization Grant)*, 3 August 2026",
     "date": null,
     "quote": "Paul Carleton Mon, 03 August 2026 / WIMSE does the identity and cross-domain trust work; the 7523 shape is the adoption path at the far end, not a replacement for it.",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://www.ietf.org/archive/id/draft-carleton-workload-authz-grant-01.txt",
     "claim": "P. Carleton, Ed. (Anthropic), N. Steele (OpenAI), A. Parecki (Okta), A. Schwenkschuster (Defakto Security), and B. Campbell (Ping Identity), *Workload Authorization Grant (draft-carleton-workload-authz-grant-01)*, 22 September 2026",
     "date": null,
     "quote": "P. Carleton, Ed. Internet-Draft Anthropic Intended status: Informational N. Steele Expires: 26 March 2027 OpenAI A. Parecki Okta A. Schwenkschuster Defakto Security B. Campbell Ping Identity 22 September 2026 / Expires: 26 March 2027 … 22 September 2026 / draft-carleton-workload-authz-grant-01 / 22 September 2026 / This document has no IANA actions.",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://datatracker.ietf.org/doc/draft-carleton-workload-authz-grant/doc.json",
     "claim": "IETF Datatracker, *IETF Datatracker document JSON metadata for draft-carleton-workload-authz-grant*, revision 01, 2026-09-22",
     "date": null,
     "quote": "\"name\": \"Individual Submissions\" / \"rev\": \"01\" / \"time\": \"2026-09-22 17:23:54\" / \"title\": \"Workload Authorization Grant\"",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://datatracker.ietf.org/doc/agenda-interim-2026-wimse-02-wimse-01/",
     "claim": "IETF WIMSE working group, *Agenda, interim-2026-wimse-02*, meeting 2026-10-07 16:00",
     "date": null,
     "quote": "Date and time | 2026-10-07 16:00 / Present and discuss the Workload Authorization Grant draft:",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://mailarchive.ietf.org/arch/msg/wimse/ImalwT51bfXsqJ8H6JzSCd6tkIk/",
     "claim": "Pieter Kasselman (Defakto Security), *[WIMSE] Request for Expression of Interest*, 7 October 2026",
     "date": null,
     "quote": "*This is not a call for adoption* of the draft or of any particular solution. We only want to know whether this is a problem the working group should spend time on.",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://www.rfc-editor.org/rfc/rfc8414.html",
     "claim": "M. Jones (Microsoft), N. Sakimura (NRI), and J. Bradley (Yubico), *OAuth 2.0 Authorization Server Metadata*, June 2018",
     "date": null,
     "quote": "grant_types_supported OPTIONAL. JSON array containing a list of the OAuth 2.0 grant type values that this authorization server supports. / This specification defines a metadata format that an OAuth 2.0 client can use to obtain the information needed to interact with an OAuth 2.0 authorization server, including its endpoint locations / /.well-known/oauth-authorization-server",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://www.ietf.org/archive/id/draft-ietf-oauth-identity-assertion-authz-grant-06.txt",
     "claim": "A. Parecki (Okta), K. McGuinness (Independent), and B. Campbell (Ping Identity), *Identity Assertion JWT Authorization Grant (draft-ietf-oauth-identity-assertion-authz-grant-06)*, draft-06, 31 October 2026; expires 4 May 2027",
     "date": null,
     "quote": "This specification provides a mechanism for an application to use an / This specification provides a mechanism for an application to use an identity assertion to obtain an access token for a third-party API by coordinating through an identity provider that the downstream Resource Authorization Server already trusts for single sign-on (SSO)",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-wimse-aims/",
     "claim": "Pieter Kasselman, Jeff Lombardo, Yaroslav Rosomakho, and Brian Campbell (IETF WIMSE working group), *draft-ietf-wimse-aims — AI Identity Management System (IETF Datatracker)*, fetched 2026-10-30",
     "date": null,
     "quote": "the Workload Identity Token (WIT) and the transport-layer X.509 Workload Identity Certificate (WIC), both of which bind a cryptographic key to a workload identifier for use in authentication. / SPIFFE defines three credential formats: the X.509-SVID [SPIFFE-X509-SVID], WIT-SVID [SPIFFE-WIT-SVID], and JWT-SVID [SPIFFE-JWT-SVID]. / JWT-SVIDs are short-lived bearer credentials used for JWT-based authentication.",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://spiffe.io/docs/latest/spiffe-about/overview/",
     "claim": "SPIFFE, *SPIFFE Overview*, fetched 2026-10-30",
     "date": null,
     "quote": "SPIFFE, the Secure Production Identity Framework for Everyone, is a set of open-source standards for securely identifying software systems in dynamic and heterogeneous environments.",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://www.rfc-editor.org/rfc/rfc9728.html",
     "claim": "Jones, et al. (IETF), *OAuth 2.0 Protected Resource Metadata*, April 2025",
     "date": null,
     "quote": "This specification defines a metadata format that an OAuth 2.0 client or authorization server can use to obtain the information needed to interact with an OAuth 2.0 protected resource.",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://www.ietf.org/archive/id/draft-mcguinness-oauth-id-continuation-assertion-02.txt",
     "claim": "K. McGuinness (Independent) and A. Parecki (Okta), *Identity Continuation Assertion for OAuth 2.0 Token Exchange (draft-mcguinness-oauth-id-continuation-assertion-02)*, 9 September 2026",
     "date": null,
     "quote": "This document defines the Identity Continuation Assertion, a short- lived, sender-constrained JSON Web Token (JWT) used as an OAuth 2.0 Token Exchange subject token. / when the user is no longer present",
     "ref": 16
    }
   ],
   "form": "document-format",
   "governance": "No working group. Datatracker group: \"name\": \"Individual Submissions\"; \"This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process.\" Presented at the WIMSE working group's interim on 2026-10-07 16:00 UTC (19:00 EEST): \"Present and discuss the Workload Authorization Grant draft:\". The follow-up list message says: \"*This is not a call for adoption* of the draft or of any particular solution. We only want to know whether this is a problem the working group should spend time on.\"",
   "group": null,
   "history": [
    {
     "date": "2026-10-20",
     "note": "added from staged research 2026-10-20; header read from draft-carleton-workload-authz-grant-01"
    },
    {
     "date": "2026-10-29",
     "note": "Primary-source verification across 25 primary sources"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "workload-authz-grant",
   "implementation": "none-found",
   "last_verified": "2026-11-08",
   "name": "Workload Authorization Grant (WAG)",
   "native_status": "\"Active Internet-Draft (individual)\"; \"IESG state I-D Exists\". \"This document is an early, exploratory individual draft, published to solicit discussion of the deployment pattern it describes. It is not a working group document, does not describe a shipped or committed design, and does not represent a position or roadmap of the editors' employers.\". oauth.net: \"WAG is an individual draft and an early exploration, not yet an OAuth Working Group item.\"",
   "origin": {
    "org": "Paul Carleton (Anthropic), editor, as sole author of -00",
    "date": "2026-08-03"
   },
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "draft",
   "probe": {
    "method": "n/a",
    "path": "n/a (OAuth token request; no fixed origin artifact)",
    "parse": "n/a. A platform-signed JWT is presented at a token endpoint. Nothing at a fixed path proves this grant.",
    "on_absent": "No public artifact is defined, so absence at an origin is expected."
   },
   "question": "How can a workload, such as an AI agent, obtain an access token from a third party's authorization server without a per-workload administrator step?",
   "scope": "general",
   "spec_url": "https://datatracker.ietf.org/doc/draft-carleton-workload-authz-grant/",
   "step": "permit",
   "summary_md": "The Workload Authorization Grant (`WAG`) lets a platform-hosted workload, an AI agent being the motivating case, obtain access tokens from a third party's OAuth authorization server without a per-workload administrator provisioning step. A Workload Identity Provider operated by the platform signs a JWT authorization grant (`typ` `oauth-wag+jwt`) naming one workload, and the workload presents it at the token endpoint in the `assertion` parameter. An Authorization Server that publishes metadata SHOULD include `urn:ietf:params:oauth:grant-profile:wag` in `authorization_grant_profiles_supported` and MUST also include `urn:ietf:params:oauth:grant-type:jwt-bearer` in `grant_types_supported`. `draft-carleton-workload-authz-grant-02` was published on 2 November 2026 (expires 6 May 2027), following `draft-carleton-workload-authz-grant-01` at `2026-09-22` and `draft-carleton-workload-authz-grant-00` at `2026-08-03`. The 2 November 2026 `-02` text is an early, exploratory individual draft, is not a working group document, does not describe a shipped or committed design, and notes that every aspect is subject to change or withdrawal, including whether this mechanism should be specified in a separate document at all.",
   "track": "ietf",
   "version": {
    "label": "draft-carleton-workload-authz-grant-02",
    "date": "2026-11-02"
   },
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-carleton-workload-authz-grant"
    }
   ],
   "use_cases": [
    "prove-agent-identity",
    "delegate-user-authority"
   ],
   "audience": [
    "platform",
    "agent-builder",
    "standards-body"
   ],
   "pairs_with": [
    "identity-assertion-authz-grant",
    "wimse",
    "spiffe",
    "oauth-metadata-for-agents",
    "oauth-id-continuation"
   ],
   "prerequisites": [],
   "ietf_tracker": {
    "doc": "draft-carleton-workload-authz-grant",
    "rev": "02",
    "state": "active",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-11-02",
    "expires_utc": "2027-05-06",
    "as_of": "2026-11-08",
    "source": "https://datatracker.ietf.org/doc/draft-carleton-workload-authz-grant/",
    "source_label": "per IETF Datatracker"
   },
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-08",
   "v05_hatnote_html_md": "This page is about the individual IETF Internet-Draft draft-carleton-workload-authz-grant, an OAuth grant by which an agent platform signs a short-lived JWT so that one of its workloads, such as an AI agent, can get an access token from another company's authorization server without being registered there. It is not the [Identity Assertion JWT Authorization Grant (ID-JAG)](/protocols/identity-assertion-authz-grant/), which covers users who signed in through single sign-on; the authors describe that difference as \"ID-JAG is for humans with SSO. This is for workloads.\" It is also not the [WIMSE AI Identity Management System](/protocols/wimse-aims/), which its first version profiled. [1][2][3]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "The Workload Authorization Grant (`WAG`) lets a platform-hosted workload, an AI agent being the motivating case, obtain access tokens from a third party's OAuth authorization server without a per-workload administrator provisioning step. [2] A Workload Identity Provider operated by the platform signs a JWT authorization grant (`typ` `oauth-wag+jwt`) naming one workload, and the workload presents it at the token endpoint in the `assertion` parameter. [2] An Authorization Server that publishes metadata SHOULD include `urn:ietf:params:oauth:grant-profile:wag` in `authorization_grant_profiles_supported` and MUST also include `urn:ietf:params:oauth:grant-type:jwt-bearer` in `grant_types_supported`. [2] `draft-carleton-workload-authz-grant-02` was published on 2 November 2026 (expires 6 May 2027), following `draft-carleton-workload-authz-grant-01` at `2026-09-22` and `draft-carleton-workload-authz-grant-00` at `2026-08-03`. [2][4] The 2 November 2026 `-02` text is an early, exploratory individual draft, is not a working group document, does not describe a shipped or committed design, and notes that every aspect is subject to change or withdrawal, including whether this mechanism should be specified in a separate document at all. [2]",
   "v05_identity_sentence_md": "The Workload Authorization Grant (`WAG`) lets a platform-hosted workload, an AI agent being the motivating case, obtain access tokens from a third party's OAuth authorization server without a per-workload administrator provisioning step. [2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Permit](/category/permit/) (`permit`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "Paul Carleton (Anthropic), editor of `draft-carleton-workload-authz-grant-00` (3 August 2026). Revisions `-01` (22 September 2026) and `-02` (2 November 2026) add Nick Steele (OpenAI), Aaron Parecki (Okta), Arndt Schwenkschuster (Defakto Security), and Brian Campbell (Ping Identity). [2][5][6][7]"
    },
    {
     "label": "Governed by",
     "value_md": "No working group. Datatracker group: Individual Submissions. This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. Presented at the WIMSE interim on 2026-10-07 16:00 UTC. The follow-up says this is not a call for adoption. [2][5][8][9][10]"
    },
    {
     "label": "Track",
     "value_md": "IETF individual Internet-Draft. Intended status: Informational. RFC stream: (None). Intended RFC status: (None). [2][5][8]"
    },
    {
     "label": "IETF tracker",
     "value_md": "[draft-carleton-workload-authz-grant](https://datatracker.ietf.org/doc/draft-carleton-workload-authz-grant/) [5]"
    },
    {
     "label": "Status",
     "value_md": "Active Internet-Draft (individual). IESG state: I-D Exists. Revision `-02` published 2 November 2026 (`2026-11-02`), expires 6 May 2027 (`2027-05-06`), updating `-01` (22 September 2026, expires 26 March 2027). The text states it is an early, exploratory individual draft, is not a working group document, does not describe a shipped or committed design, and every aspect is subject to change or withdrawal, including whether this mechanism should be specified in a separate document at all. [1][2][5][7]"
    },
    {
     "label": "Version",
     "value_md": "`draft-carleton-workload-authz-grant-02` (2 November 2026, expires 6 May 2027; revision `-01` posted 22 September 2026; revision `-00` posted 3 August 2026). [2][4][7][8]"
    },
    {
     "label": "Message format",
     "value_md": "RFC 7523 JWT authorization grant signed by a Workload Identity Provider naming one workload, presented at the token endpoint with `grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer`, the JWT in the `assertion` parameter, and the target resource in the `resource` parameter (RFC 8707). In `-02` Section 8, an Authorization Server that publishes RFC 8414 metadata SHOULD include `urn:ietf:params:oauth:grant-profile:wag` in `authorization_grant_profiles_supported` and MUST also include `urn:ietf:params:oauth:grant-type:jwt-bearer` in `grant_types_supported`. [2]"
    },
    {
     "label": "Token format",
     "value_md": "Signed JWT (`typ: \"oauth-wag+jwt\"`, Sections 5 and 5.1) carrying workload identity and target audience; token type URI `urn:ietf:params:oauth:token-type:wag` where required (such as RFC 8693 token exchange); Authorization Servers MUST NOT issue refresh tokens for this grant. [2]"
    },
    {
     "label": "IANA registration",
     "value_md": "Requests, not completed IANA registrations. Published `draft-carleton-workload-authz-grant-02` Section 11 requests registration of media type `oauth-wag+jwt` (Section 11.1) and OAuth URIs `urn:ietf:params:oauth:token-type:wag` and `urn:ietf:params:oauth:grant-profile:wag` (Section 11.2, used in `authorization_grant_profiles_supported` per Section 8). Earlier revision `-01` stated that it had no IANA actions. [2][7]"
    },
    {
     "label": "Specification",
     "value_md": "[Workload Authorization Grant, draft-carleton-workload-authz-grant-02](https://www.ietf.org/archive/id/draft-carleton-workload-authz-grant-02.txt) [2][8]"
    },
    {
     "label": "Found at",
     "value_md": "[IETF Datatracker](https://datatracker.ietf.org/doc/draft-carleton-workload-authz-grant/) · [pcarleton/draft-carleton-workload-authz-grant](https://github.com/pcarleton/draft-carleton-workload-authz-grant); RFC 8414 metadata advertises `urn:ietf:params:oauth:grant-profile:wag` in `authorization_grant_profiles_supported` (Section 8). [2]"
    },
    {
     "label": "Licence",
     "value_md": "Copyright (c) 2026 IETF Trust and the persons identified as the document authors. Subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents. Code components extracted from the document must include Revised BSD License text. [2]"
    }
   ],
   "v05_problem_md": "Registering each agent individually at the Authorization Servers it uses is impractical and creates a heavy maintenance burden. In practice every agent of an installation ends up sharing one credential. [2] An Authorization Server MUST NOT require a client registration per Agent. [2] The authorization server does not reject a workload because it has not seen it before. [2] The Authorization Server MUST NOT issue refresh tokens for this grant. [2] The specification covers workloads acting on their own behalf. Access on behalf of a user or other principal is out of scope, though the grant is intended to compose with delegation mechanisms in which the workload is the actor. [2]",
   "v05_mechanism_delta_md": "An Authorization Server MUST NOT require a client registration per Agent. [2] The authorization server does not reject a workload because it has not seen it before. [2] The Authorization Server MUST NOT issue refresh tokens for this grant. [2]",
   "v05_scope_boundary_md": "The specification covers workloads acting on their own behalf. Access on behalf of a user or other principal is out of scope, though the grant is intended to compose with delegation mechanisms in which the workload is the actor. [2]",
   "v05_fuzzy_additions": null,
   "v05_diagram": null,
   "v05_wire_artifact": null,
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants",
      "spec_or_rfc": "RFC 7523",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "RFC 7523 is the JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants. The Workload Authorization Grant signs that profile's authorization grant naming one workload, and the workload presents it at the token endpoint. [2]"
     },
     {
      "name": "OAuth 2.0 Authorization Server Metadata",
      "spec_or_rfc": "RFC 8414",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "RFC 8414 defines grant_types_supported as the list of OAuth 2.0 grant type values an authorization server supports. Published draft-carleton-workload-authz-grant-02 (Section 8) states that an Authorization Server publishing RFC 8414 metadata SHOULD include urn:ietf:params:oauth:grant-profile:wag in authorization_grant_profiles_supported and MUST also include urn:ietf:params:oauth:grant-type:jwt-bearer in grant_types_supported. Section 11 requests IANA registration of media type oauth-wag+jwt, urn:ietf:params:oauth:token-type:wag, and urn:ietf:params:oauth:grant-profile:wag; those requests are not completed IANA registrations. [2][11]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "identity-assertion-authz-grant",
      "target_name": "Identity Assertion JWT Authorization Grant (ID-JAG)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "The Identity Assertion JWT Authorization Grant requires the JWT typ header to be oauth-id-jag+jwt, and it lets an application use an identity assertion to obtain an access token for a third-party API through an identity provider already trusted for single sign-on. The Workload Authorization Grant's WIMSE interim slides say ID-JAG is for humans with SSO and this grant is for workloads. [2][3][12]"
     },
     {
      "target_id": "wimse",
      "target_name": "Workload Identity in Multi System Environments (WIMSE)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "WIMSE credential formats include the Workload Identity Token (WIT), which binds a cryptographic key to a workload identifier for authentication. The Workload Authorization Grant's 2 November 2026 (`draft-carleton-workload-authz-grant-02`) text treats its assertion as an RFC 7523 authorization grant rather than a WIMSE WIT, and the editor's announcement says WIMSE does the identity and cross-domain trust work while the 7523 shape is the adoption path at the far end. [2][6][13]"
     },
     {
      "target_id": "spiffe",
      "target_name": "SPIFFE (Secure Production Identity Framework for Everyone)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "SPIFFE, the Secure Production Identity Framework for Everyone, defines X.509-SVID, WIT-SVID, and JWT-SVID formats, with JWT-SVIDs as short-lived bearer credentials for JWT-based authentication, while `draft-carleton-workload-authz-grant-02` (2 November 2026) binds short-lived workload authorization grants to WIMSE/SPIFFE workload identifiers. [2][13][14]"
     },
     {
      "target_id": "oauth-metadata-for-agents",
      "target_name": "OAuth Protected Resource and Authorization Server Metadata (as used for agent authorization)",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "RFC 9728 defines protected-resource metadata, and RFC 8414 defines authorization-server metadata at `/.well-known/oauth-authorization-server`, including grant_types_supported. Published draft-carleton-workload-authz-grant-02 (Section 8) says an authorization server publishing RFC 8414 metadata SHOULD include urn:ietf:params:oauth:grant-profile:wag in authorization_grant_profiles_supported and MUST also include urn:ietf:params:oauth:grant-type:jwt-bearer in grant_types_supported; Section 11 requests IANA registration of oauth-wag+jwt, urn:ietf:params:oauth:token-type:wag, and urn:ietf:params:oauth:grant-profile:wag (requests, not completed IANA registrations). [2][11][15]"
     },
     {
      "target_id": "oauth-id-continuation",
      "target_name": "Identity Continuation Assertion for OAuth 2.0 Token Exchange",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "The Identity Continuation Assertion is a short-lived, sender-constrained JWT used as an OAuth 2.0 Token Exchange subject token so a workload acting on a user's behalf can obtain an ID-JAG when the user is no longer present. The Workload Authorization Grant covers workloads acting on their own behalf. [2][16]"
     }
    ]
   },
   "v05_adoption": {
    "visible": false,
    "empty_state_note_md": null,
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "daap",
     "target_name": "OAuth Profile for Delegated AI Agent Authorization",
     "relation_label": "Peer alternative",
     "delta": "The Workload Authorization Grant trades a platform-signed JWT for an access token with the jwt-bearer grant, while DAAP attenuates a user-consented agent token through RFC 8693 and defines no new claims.",
     "item_md": "**[OAuth Profile for Delegated AI Agent Authorization](/protocols/daap/)** (Peer alternative) — The Workload Authorization Grant trades a platform-signed JWT for an access token with the jwt-bearer grant, while DAAP attenuates a user-consented agent token through RFC 8693 and defines no new claims."
    },
    {
     "target_id": "credential-delegation-protocol-wimse",
     "target_name": "Credential Delegation Protocol for AI Agents in Multi-System Environments",
     "relation_label": "Peer alternative",
     "delta": "The Workload Authorization Grant trades one platform-signed JWT at the jwt-bearer grant, while this draft profiles RFC 8693, DPoP (RFC 9449), RAR (RFC 9396), and CIBA and defines no new grant type.",
     "item_md": "**[Credential Delegation Protocol for AI Agents in Multi-System Environments](/protocols/credential-delegation-protocol-wimse/)** (Peer alternative) — The Workload Authorization Grant trades one platform-signed JWT at the jwt-bearer grant, while this draft profiles RFC 8693, DPoP (RFC 9449), RAR (RFC 9396), and CIBA and defines no new grant type."
    },
    {
     "target_id": "oauth-agent-delegation",
     "target_name": "An Attenuated Delegation Profile for Automated Agents",
     "relation_label": "Complements",
     "delta": "The Workload Authorization Grant obtains an access token for the workload itself with the jwt-bearer grant, and Agent-Delegation carries the narrowed chain, with scope, floors, and expiry, on a signed request.",
     "item_md": "**[An Attenuated Delegation Profile for Automated Agents](/protocols/oauth-agent-delegation/)** (Complements) — The Workload Authorization Grant obtains an access token for the workload itself with the jwt-bearer grant, and Agent-Delegation carries the narrowed chain, with scope, floors, and expiry, on a signed request."
    },
    {
     "target_id": "opena2a-aap",
     "target_name": "OpenA2A Agent Authorization Protocol",
     "relation_label": "Peer alternative",
     "delta": "The Workload Authorization Grant presents a platform-signed JWT with the jwt-bearer grant, while AAP defines six authorization components and asks IANA for an aap URI scheme.",
     "item_md": "**[OpenA2A Agent Authorization Protocol](/protocols/opena2a-aap/)** (Peer alternative) — The Workload Authorization Grant presents a platform-signed JWT with the jwt-bearer grant, while AAP defines six authorization components and asks IANA for an aap URI scheme."
    },
    {
     "item_md": "**[Permit protocols](/category/permit/)** — Category index for `permit` standards."
    }
   ],
   "v05_compiled_md": "---\nid: workload-authz-grant\ntitle: \"Workload Authorization Grant (WAG)\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: permit\nform: document-format\nwire_archetype: identity_auth_crypto\nspec_url: https://www.ietf.org/archive/id/draft-carleton-workload-authz-grant-02.txt\nlast_checked: 2026-11-08\n---\n\n# Workload Authorization Grant (WAG)\n\n**Category:** [Permit](/category/permit/) (`permit`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-11-08\n\n> *This page is about the individual IETF Internet-Draft draft-carleton-workload-authz-grant, an OAuth grant by which an agent platform signs a short-lived JWT so that one of its workloads, such as an AI agent, can get an access token from another company's authorization server without being registered there. It is not the [Identity Assertion JWT Authorization Grant (ID-JAG)](/protocols/identity-assertion-authz-grant/), which covers users who signed in through single sign-on; the authors describe that difference as \"ID-JAG is for humans with SSO. This is for workloads.\" It is also not the [WIMSE AI Identity Management System](/protocols/wimse-aims/), which its first version profiled. [1][2][3]*\n\nThe Workload Authorization Grant (`WAG`) lets a platform-hosted workload, an AI agent being the motivating case, obtain access tokens from a third party's OAuth authorization server without a per-workload administrator provisioning step. [2] A Workload Identity Provider operated by the platform signs a JWT authorization grant (`typ` `oauth-wag+jwt`) naming one workload, and the workload presents it at the token endpoint in the `assertion` parameter. [2] An Authorization Server that publishes metadata SHOULD include `urn:ietf:params:oauth:grant-profile:wag` in `authorization_grant_profiles_supported` and MUST also include `urn:ietf:params:oauth:grant-type:jwt-bearer` in `grant_types_supported`. [2] `draft-carleton-workload-authz-grant-02` was published on 2 November 2026 (expires 6 May 2027), following `draft-carleton-workload-authz-grant-01` at `2026-09-22` and `draft-carleton-workload-authz-grant-00` at `2026-08-03`. [2][4] The 2 November 2026 `-02` text is an early, exploratory individual draft, is not a working group document, does not describe a shipped or committed design, and notes that every aspect is subject to change or withdrawal, including whether this mechanism should be specified in a separate document at all. [2]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Permit](/category/permit/) (`permit`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | Paul Carleton (Anthropic), editor of `draft-carleton-workload-authz-grant-00` (3 August 2026). Revisions `-01` (22 September 2026) and `-02` (2 November 2026) add Nick Steele (OpenAI), Aaron Parecki (Okta), Arndt Schwenkschuster (Defakto Security), and Brian Campbell (Ping Identity). [2][5][6][7] |\n| **Governed by** | No working group. Datatracker group: Individual Submissions. This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. Presented at the WIMSE interim on 2026-10-07 16:00 UTC. The follow-up says this is not a call for adoption. [2][5][8][9][10] |\n| **Track** | IETF individual Internet-Draft. Intended status: Informational. RFC stream: (None). Intended RFC status: (None). [2][5][8] |\n| **IETF tracker** | [draft-carleton-workload-authz-grant](https://datatracker.ietf.org/doc/draft-carleton-workload-authz-grant/) [5] |\n| **Status** | Active Internet-Draft (individual). IESG state: I-D Exists. Revision `-02` published 2 November 2026 (`2026-11-02`), expires 6 May 2027 (`2027-05-06`), updating `-01` (22 September 2026, expires 26 March 2027). The text states it is an early, exploratory individual draft, is not a working group document, does not describe a shipped or committed design, and every aspect is subject to change or withdrawal, including whether this mechanism should be specified in a separate document at all. [1][2][5][7] |\n| **Version** | `draft-carleton-workload-authz-grant-02` (2 November 2026, expires 6 May 2027; revision `-01` posted 22 September 2026; revision `-00` posted 3 August 2026). [2][4][7][8] |\n| **Message format** | RFC 7523 JWT authorization grant signed by a Workload Identity Provider naming one workload, presented at the token endpoint with `grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer`, the JWT in the `assertion` parameter, and the target resource in the `resource` parameter (RFC 8707). In `-02` Section 8, an Authorization Server that publishes RFC 8414 metadata SHOULD include `urn:ietf:params:oauth:grant-profile:wag` in `authorization_grant_profiles_supported` and MUST also include `urn:ietf:params:oauth:grant-type:jwt-bearer` in `grant_types_supported`. [2] |\n| **Token format** | Signed JWT (`typ: \"oauth-wag+jwt\"`, Sections 5 and 5.1) carrying workload identity and target audience; token type URI `urn:ietf:params:oauth:token-type:wag` where required (such as RFC 8693 token exchange); Authorization Servers MUST NOT issue refresh tokens for this grant. [2] |\n| **IANA registration** | Requests, not completed IANA registrations. Published `draft-carleton-workload-authz-grant-02` Section 11 requests registration of media type `oauth-wag+jwt` (Section 11.1) and OAuth URIs `urn:ietf:params:oauth:token-type:wag` and `urn:ietf:params:oauth:grant-profile:wag` (Section 11.2, used in `authorization_grant_profiles_supported` per Section 8). Earlier revision `-01` stated that it had no IANA actions. [2][7] |\n| **Specification** | [Workload Authorization Grant, draft-carleton-workload-authz-grant-02](https://www.ietf.org/archive/id/draft-carleton-workload-authz-grant-02.txt) [2][8] |\n| **Found at** | [IETF Datatracker](https://datatracker.ietf.org/doc/draft-carleton-workload-authz-grant/) · [pcarleton/draft-carleton-workload-authz-grant](https://github.com/pcarleton/draft-carleton-workload-authz-grant); RFC 8414 metadata advertises `urn:ietf:params:oauth:grant-profile:wag` in `authorization_grant_profiles_supported` (Section 8). [2] |\n| **Licence** | Copyright (c) 2026 IETF Trust and the persons identified as the document authors. Subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents. Code components extracted from the document must include Revised BSD License text. [2] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Counterparts and related standards](#counterparts-and-related-standards)\n3. [See also](#see-also)\n4. [References](#references)\n\n---\n\n## Problem and scope\n\nRegistering each agent individually at the Authorization Servers it uses is impractical and creates a heavy maintenance burden. In practice every agent of an installation ends up sharing one credential. [2] An Authorization Server MUST NOT require a client registration per Agent. [2] The authorization server does not reject a workload because it has not seen it before. [2] The Authorization Server MUST NOT issue refresh tokens for this grant. [2] The specification covers workloads acting on their own behalf. Access on behalf of a user or other principal is out of scope, though the grant is intended to compose with delegation mechanisms in which the workload is the actor. [2]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants** | `RFC 7523` | Profiles classic standard | RFC 7523 is the JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants. The Workload Authorization Grant signs that profile's authorization grant naming one workload, and the workload presents it at the token endpoint. [2] |\n| **OAuth 2.0 Authorization Server Metadata** | `RFC 8414` | Profiles classic standard | RFC 8414 defines grant_types_supported as the list of OAuth 2.0 grant type values an authorization server supports. Published draft-carleton-workload-authz-grant-02 (Section 8) states that an Authorization Server publishing RFC 8414 metadata SHOULD include urn:ietf:params:oauth:grant-profile:wag in authorization_grant_profiles_supported and MUST also include urn:ietf:params:oauth:grant-type:jwt-bearer in grant_types_supported. Section 11 requests IANA registration of media type oauth-wag+jwt, urn:ietf:params:oauth:token-type:wag, and urn:ietf:params:oauth:grant-profile:wag; those requests are not completed IANA registrations. [2][11] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Identity Assertion JWT Authorization Grant (ID-JAG)](/protocols/identity-assertion-authz-grant/)** | Peer alternative | The Identity Assertion JWT Authorization Grant requires the JWT typ header to be oauth-id-jag+jwt, and it lets an application use an identity assertion to obtain an access token for a third-party API through an identity provider already trusted for single sign-on. The Workload Authorization Grant's WIMSE interim slides say ID-JAG is for humans with SSO and this grant is for workloads. [2][3][12] |\n| **[Workload Identity in Multi System Environments (WIMSE)](/protocols/wimse/)** | Complements | WIMSE credential formats include the Workload Identity Token (WIT), which binds a cryptographic key to a workload identifier for authentication. The Workload Authorization Grant's 2 November 2026 (`draft-carleton-workload-authz-grant-02`) text treats its assertion as an RFC 7523 authorization grant rather than a WIMSE WIT, and the editor's announcement says WIMSE does the identity and cross-domain trust work while the 7523 shape is the adoption path at the far end. [2][6][13] |\n| **[SPIFFE (Secure Production Identity Framework for Everyone)](/protocols/spiffe/)** | Complements | SPIFFE, the Secure Production Identity Framework for Everyone, defines X.509-SVID, WIT-SVID, and JWT-SVID formats, with JWT-SVIDs as short-lived bearer credentials for JWT-based authentication, while `draft-carleton-workload-authz-grant-02` (2 November 2026) binds short-lived workload authorization grants to WIMSE/SPIFFE workload identifiers. [2][13][14] |\n| **[OAuth Protected Resource and Authorization Server Metadata (as used for agent authorization)](/protocols/oauth-metadata-for-agents/)** | Builds on | RFC 9728 defines protected-resource metadata, and RFC 8414 defines authorization-server metadata at `/.well-known/oauth-authorization-server`, including grant_types_supported. Published draft-carleton-workload-authz-grant-02 (Section 8) says an authorization server publishing RFC 8414 metadata SHOULD include urn:ietf:params:oauth:grant-profile:wag in authorization_grant_profiles_supported and MUST also include urn:ietf:params:oauth:grant-type:jwt-bearer in grant_types_supported; Section 11 requests IANA registration of oauth-wag+jwt, urn:ietf:params:oauth:token-type:wag, and urn:ietf:params:oauth:grant-profile:wag (requests, not completed IANA registrations). [2][11][15] |\n| **[Identity Continuation Assertion for OAuth 2.0 Token Exchange](/protocols/oauth-id-continuation/)** | Peer alternative | The Identity Continuation Assertion is a short-lived, sender-constrained JWT used as an OAuth 2.0 Token Exchange subject token so a workload acting on a user's behalf can obtain an ID-JAG when the user is no longer present. The Workload Authorization Grant covers workloads acting on their own behalf. [2][16] |\n\n---\n\n## See also\n\n- **[OAuth Profile for Delegated AI Agent Authorization](/protocols/daap/)** *(Peer alternative)* — The Workload Authorization Grant trades a platform-signed JWT for an access token with the jwt-bearer grant, while DAAP attenuates a user-consented agent token through RFC 8693 and defines no new claims.\n- **[Credential Delegation Protocol for AI Agents in Multi-System Environments](/protocols/credential-delegation-protocol-wimse/)** *(Peer alternative)* — The Workload Authorization Grant trades one platform-signed JWT at the jwt-bearer grant, while this draft profiles RFC 8693, DPoP (RFC 9449), RAR (RFC 9396), and CIBA and defines no new grant type.\n- **[An Attenuated Delegation Profile for Automated Agents](/protocols/oauth-agent-delegation/)** *(Complements)* — The Workload Authorization Grant obtains an access token for the workload itself with the jwt-bearer grant, and Agent-Delegation carries the narrowed chain, with scope, floors, and expiry, on a signed request.\n- **[OpenA2A Agent Authorization Protocol](/protocols/opena2a-aap/)** *(Peer alternative)* — The Workload Authorization Grant presents a platform-signed JWT with the jwt-bearer grant, while AAP defines six authorization components and asks IANA for an aap URI scheme.\n- **Category:** [Permit protocols](/category/permit/)\n\n---\n\n## References\n\n1. OAuth.net, *Workload Authorization Grant - OAuth 2.0* (undated; fetched 2026-10-30) — <https://oauth.net/workload-authorization-grant/>\n2. P. Carleton, N. Steele, A. Parecki, A. Schwenkschuster, and B. Campbell, *Workload Authorization Grant (draft-carleton-workload-authz-grant-02)* (2 November 2026; expires 6 May 2027) — <https://www.ietf.org/archive/id/draft-carleton-workload-authz-grant-02.txt>\n3. Carleton, Steele, Parecki, Schwenkschuster, and Campbell, *Workload Authorization Grant (WAG), WIMSE interim slides* (7 October 2026) — <https://datatracker.ietf.org/meeting/interim-2026-wimse-02/materials/slides-interim-2026-wimse-02-sessa-workload-authorization-grant-wag-wimse-interim-00>\n4. IETF Datatracker, *New-revision events for draft-carleton-workload-authz-grant* (revision 00 on 2026-08-03; revision 01 on 2026-09-22) — <https://datatracker.ietf.org/api/v1/doc/newrevisiondocevent/?doc__name=draft-carleton-workload-authz-grant&format=json>\n5. Paul Carleton (Anthropic), Nick Steele (OpenAI), Aaron Parecki (Okta), Arndt Schwenkschuster (Defakto Security), and Brian Campbell (Ping Identity), *draft-carleton-workload-authz-grant — Workload Authorization Grant (IETF Datatracker)* (fetched 2026-10-30) — <https://datatracker.ietf.org/doc/draft-carleton-workload-authz-grant/>\n6. Paul Carleton, *[WIMSE] New I-D: draft-carleton-workload-authz-grant (Workload Authorization Grant)* (3 August 2026) — <https://mailarchive.ietf.org/arch/msg/wimse/4UjEGhAZUt8_JqAse5lxzTQM6zo/>\n7. P. Carleton, Ed. (Anthropic), N. Steele (OpenAI), A. Parecki (Okta), A. Schwenkschuster (Defakto Security), and B. Campbell (Ping Identity), *Workload Authorization Grant (draft-carleton-workload-authz-grant-01)* (22 September 2026) — <https://www.ietf.org/archive/id/draft-carleton-workload-authz-grant-01.txt>\n8. IETF Datatracker, *IETF Datatracker document JSON metadata for draft-carleton-workload-authz-grant* (revision 01, 2026-09-22) — <https://datatracker.ietf.org/doc/draft-carleton-workload-authz-grant/doc.json>\n9. IETF WIMSE working group, *Agenda, interim-2026-wimse-02* (meeting 2026-10-07 16:00) — <https://datatracker.ietf.org/doc/agenda-interim-2026-wimse-02-wimse-01/>\n10. Pieter Kasselman (Defakto Security), *[WIMSE] Request for Expression of Interest* (7 October 2026) — <https://mailarchive.ietf.org/arch/msg/wimse/ImalwT51bfXsqJ8H6JzSCd6tkIk/>\n11. M. Jones (Microsoft), N. Sakimura (NRI), and J. Bradley (Yubico), *OAuth 2.0 Authorization Server Metadata* (June 2018) — <https://www.rfc-editor.org/rfc/rfc8414.html>\n12. A. Parecki (Okta), K. McGuinness (Independent), and B. Campbell (Ping Identity), *Identity Assertion JWT Authorization Grant (draft-ietf-oauth-identity-assertion-authz-grant-06)* (draft-06, 31 October 2026; expires 4 May 2027) — <https://www.ietf.org/archive/id/draft-ietf-oauth-identity-assertion-authz-grant-06.txt>\n13. Pieter Kasselman, Jeff Lombardo, Yaroslav Rosomakho, and Brian Campbell (IETF WIMSE working group), *draft-ietf-wimse-aims — AI Identity Management System (IETF Datatracker)* (fetched 2026-10-30) — <https://datatracker.ietf.org/doc/draft-ietf-wimse-aims/>\n14. SPIFFE, *SPIFFE Overview* (fetched 2026-10-30) — <https://spiffe.io/docs/latest/spiffe-about/overview/>\n15. Jones, et al. (IETF), *OAuth 2.0 Protected Resource Metadata* (April 2025) — <https://www.rfc-editor.org/rfc/rfc9728.html>\n16. K. McGuinness (Independent) and A. Parecki (Okta), *Identity Continuation Assertion for OAuth 2.0 Token Exchange (draft-mcguinness-oauth-id-continuation-assertion-02)* (9 September 2026) — <https://www.ietf.org/archive/id/draft-mcguinness-oauth-id-continuation-assertion-02.txt>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "oauth-id-continuation",
   "name": "Identity Continuation Assertion for OAuth 2.0 Token Exchange",
   "acronym": "",
   "hatnote_md": "",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "aliases": [
    "draft-mcguinness-oauth-id-continuation-assertion",
    "Identity Continuation Assertion"
   ],
   "analog": "A short-lived stand-in for the user, exchanged for an ID-JAG after the user has left",
   "collisions": [],
   "discovery": {
    "mechanism": "OAuth 2.0 token exchange (RFC 8693). The assertion is a subject token, not a file on the origin.",
    "path": null
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.ietf.org/archive/id/draft-mcguinness-oauth-id-continuation-assertion-02.txt",
     "claim": "K. McGuinness (Independent) and A. Parecki (Okta), *Identity Continuation Assertion for OAuth 2.0 Token Exchange (draft-mcguinness-oauth-id-continuation-assertion-02)*, draft-02, 9 September 2026; expires 13 March 2027",
     "date": null,
     "quote": "Intended status: Standards Track A. Parecki Expires: 13 March 2027 Okta 9 September 2026 Identity Continuation Assertion for OAuth 2.0 Token Exchange draft-mcguinness-oauth-id-continuation-assertion-02 Abstract This document defines the Identity Continuation Assertion, a short-lived, sender-constrained JSON Web Token (JWT) used as an OAuth 2.0 Token Exchange subject token. / The workload presents the assertion to the IdP as the subject token of an OAuth 2.0 Token Exchange [RFC8693] request. / Expires: 13 March 2027 Okta 9 September 2026 Identity Continuation Assertion for OAuth 2.0 Token Exchange draft-mcguinness-oauth-id-continuation-assertion-02 / Discussion of this document takes place on the Web Authorization Protocol Working Group mailing list / Karl McGuinness Independent / also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/. / Intended status: Standards Track / McGuinness & Parecki Expires 13 March 2027 [Page 4] Internet-Draft Identity Continuation Assertion September / The Identity Continuation Assertion has token type urn:ietf:params:oauth:token-type:identity-continuation and media type application/oauth-identity-continuation+jwt (Section 11). It is a JWT [RFC7519] in JWS Compact Serialization. / at https://mcguinness.github.io/draft-mcguinness-oauth-id-continuation- assertion/draft-mcguinness-oauth-id-continuation-assertion.html. Status information for this document may be found at / base urn:ietf:params:oauth:grant-profile:id-jag value referenced by this document are defined and registered by [I-D.ietf-oauth-identity-assertion-authz-grant] and / must include Revised BSD License text as described in Section 4.e of the Trust / The Identity Assertion JWT Authorization Grant (ID-JAG) [I-D.ietf-oauth-identity-assertion-authz-grant] allows an application to exchange the user's identity assertion at the IdP Authorization Server (IdP) for a grant that it redeems at a target Resource Authorization Server (RAS) for an access token. A service receiving that access token may need to call a further service on the user's behalf, including when the user is no longer present. It may hold neither the user's identity assertion nor another credential accepted by the next authorization server. This profile addresses deployments in which RASes trust a common IdP. The receiving workload's incoming access token is not accepted at the next RAS. / This document extends ID-JAG, referred to as the base profile / A trusted issuer attests that a resource authorization server accepted an earlier ID-JAG and that the resulting authorization remains active and eligible for continuation. / The workload exchanges this assertion at the identity provider, which evaluates the requested access under the chain authorization and current policy before issuing an onward ID-JAG. / The assertion conveys no downstream authority. / the continuation request, not the assertion, names the target and the requested authority. / This profile does not replace mechanisms for narrowing an existing token within one trust domain (Appendix A.1). / This document defines no new access-token format. / The following is a non-normative example of the Identity Continuation Assertion claim set: / short-lived, sender-constrained JSON Web Token (JWT) used as an OAuth 2.0 Token Exchange subject token. / identity_continuation_handle / The Identity Continuation Assertion has token type urn:ietf:params:oauth:token-type:identity-continuation and media type application/oauth-identity-continuation+jwt (Section 11). It is a JWT RFC7519 in JWS Compact Serialization. The CAI MUST set the JOSE typ header to oauth-identity-continuation+jwt. The CAI MUST sign the assertion with an asymmetric algorithm the IdP accepts (Section 9.7). The assertion MUST NOT be encrypted (JWE) or use nested signing. / iss: REQUIRED. The CAI that issued the assertion; the IdP verifies its issuer trust per the issuer-trust rule of Section 5.5.3, and its signature per the well-formedness rule. aud: REQUIRED. A single string exactly matching the IdP issuer identifier: not its token endpoint URL, and not the requested target. identity_continuation_handle: REQUIRED. The hop being continued (Section 4). act: REQUIRED. The current actor presenting the Token Exchange request, encoded as a single-level act claim per [RFC8693] / cnf MUST contain exactly one confirmation method: jkt, the JWK SHA-256 thumbprint [RFC7638] of the DPoP key [RFC9449] (Section 9.1). iat, exp: REQUIRED. exp MUST follow iat. The assertion is short- lived: a CAI SHOULD NOT issue a lifetime (exp - iat) longer than 300 seconds, and an IdP SHOULD accept lifetimes of up to 300 seconds. The IdP rejects a lifetime longer than the maximum it accepts (Section 5.5.3). nbf: OPTIONAL. If present, processed as [RFC7519] specifies. jti: REQUIRED. A replay-detection identifier that MUST be unique per iss during the assertion validity window, with negligible probability of collision. It SHOULD contain at least 128 bits of entropy. / The assertion MUST NOT contain: * a top-level sub, auth_time, acr, amr, or sid claim; or * the Token Exchange request parameters audience, resource, scope, authorization_details, or requested_token_type (these are supplied by the request). / When it establishes or continues a chain (Section 5.1), the IdP MUST embed a fresh identity_continuation_handle claim in the issued ID-JAG / identity_continuation_supported / When it establishes or continues a chain (Section 5.1), the IdP MUST embed a fresh identity_continuation_handle claim in the issued ID-JAG, for that root or child hop, and MUST NOT reuse a handle across hops. 2. identity_continuation_handle MUST provide at least 128 bits of unpredictability, MUST NOT contain user-identifying information, and MUST consist of characters drawn from the base64url alphabet (A-Z, a-z, 0-9, -, _); it SHOULD NOT exceed 256 characters. 3. Across a trust boundary, the handle is accepted only inside an ID-JAG (by the RAS) or an Identity Continuation Assertion (by the IdP), never as a standalone value. / An IdP that supports this profile SHOULD signal it in its authorization server metadata [RFC8414] with the following parameter: identity_continuation_supported: OPTIONAL. Boolean, default false, indicating that the IdP accepts the urn:ietf:params:oauth:token- type:identity-continuation subject token type and issues continuation-capable ID-JAGs. Such an ID-JAG is still the urn:ietf:params:oauth:token-type:id-jag type / A Resource Authorization Server that binds the identity_continuation_handle claim to authorization state MUST advertise support by listing the grant profile urn:ietf:params:oauth:grant-profile:id-jag-continuation in its authorization_grant_profiles_supported [I-D.ietf-oauth-identity-assertion-authz-grant]. This value indicates that the server recognizes continuation-capable ID-JAGs and performs that binding (Section 5.2). The base ID-JAG grant profile indicates ordinary grant processing without handle binding. A Resource Authorization Server that advertises urn:ietf:params:oauth:grant-profile:id-jag-continuation MUST also advertise the base urn:ietf:params:oauth:grant-profile:id-jag profile and the urn:ietf:params:oauth:grant-type:jwt-bearer grant type / It MUST also advertise urn:ietf:params:oauth:grant-type:jwt-dpop, since every onward ID-JAG it redeems carries cnf (Section 5.5.5). / identity_continuation_authorization_server: REQUIRED. A JSON string containing the issuer identifier ([RFC8414]) of the authorization server at which the client exchanges the assertion for an ID-JAG. The CAI MUST set its value to the assertion's aud claim. The client uses this parameter to identify the IdP without decoding the assertion. / Identity Continuation Assertion for OAuth 2.0 Token Exchange draft-mcguinness-oauth-id-continuation-assertion-02",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://datatracker.ietf.org/doc/draft-mcguinness-oauth-id-continuation-assertion/",
     "claim": "Karl McGuinness (Independent) and Aaron Parecki (Okta), *draft-mcguinness-oauth-id-continuation-assertion — Identity Continuation Assertion for OAuth 2.0 Token Exchange (IETF Datatracker)*, draft-mcguinness-oauth-id-continuation-assertion-02",
     "date": null,
     "quote": "Active Internet-Draft (individual) | | Authors | | Karl McGuinness, Aaron Parecki / Active Internet-Draft (individual) Authors Karl McGuinness, Aaron Parecki Last updated 2026-09-08 RFC stream (None) / Internet-Drafts. The list of current Internet- Drafts is at https://datatracker.ietf.org/drafts/current/. Internet-Drafts are draft documents / & Parecki Expires 13 March 2027 [Page 20] Internet-Draft Identity Continuation Assertion September 2026 / 2026 Identity Continuation Assertion for OAuth 2.0 Token Exchange draft-mcguinness-oauth-id-continuation-assertion-02 Abstract This document defines",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://datatracker.ietf.org/api/v1/doc/newrevisiondocevent/?doc__name=draft-mcguinness-oauth-id-continuation-assertion&format=json",
     "claim": "IETF Datatracker API, *Revision events for draft-mcguinness-oauth-id-continuation-assertion*, checked 2026-10-30",
     "date": null,
     "quote": "2026-08-03T17:23:44Z",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://datatracker.ietf.org/api/v1/doc/document/draft-mcguinness-oauth-id-continuation-assertion/",
     "claim": "IETF Datatracker API, *IETF Datatracker document record for draft-mcguinness-oauth-id-continuation-assertion*, checked 2026-10-30",
     "date": null,
     "quote": "a common identity provider. 2027-03-13T06:06:23Z /api/v1/group/group/1027/ 160132 [] draft-mcguinness-oauth-id-continuation-assertion 84 /api/v1/doc/document/draft-mcguinness-oauth-id-continuation-assertion/ / authorization servers that trust a common identity provider. 2027-03-13T06:06:23Z /api/v1/group/group/1027/ 160132 [] draft-mcguinness-oauth-id-continuation-assertion 84 / draft-mcguinness-oauth-id-continuation-assertion 84 /api/v1/doc/document/draft-mcguinness-oauth-id-continuation-assertion/ 02 / 2026-09-09T06:06:23Z / 2027-03-13T06:06:23Z",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://raw.githubusercontent.com/mcguinness/draft-mcguinness-oauth-id-continuation-assertion/main/README.md",
     "claim": "Karl McGuinness and Aaron Parecki, *draft-mcguinness-oauth-id-continuation-assertion — Editor Working Repository*, checked 2026-11-12",
     "date": null,
     "quote": "working area for the individual Internet-Draft, \"Identity Continuation Assertion for OAuth 2.0 Token Exchange\"",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://www.rfc-editor.org/rfc/rfc8693.html",
     "claim": "IETF, *RFC 8693: OAuth 2.0 Token Exchange*, IETF RFC",
     "date": null,
     "quote": "This specification defines a protocol for an HTTP- and JSON-based",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://www.rfc-editor.org/rfc/rfc7519.html",
     "claim": "IETF, *RFC 7519: JSON Web Token (JWT)*, IETF RFC",
     "date": null,
     "quote": "JSON Web Token (JWT) is a compact, URL-safe means of representing",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://www.ietf.org/archive/id/draft-ietf-oauth-identity-assertion-authz-grant-06.txt",
     "claim": "Aaron Parecki (Okta), Karl McGuinness (Independent), and Brian Campbell (Ping Identity), *Identity Assertion JWT Authorization Grant (draft-ietf-oauth-identity-assertion-authz-grant-06)*, draft-06, 31 October 2026; expires 4 May 2027",
     "date": null,
     "quote": "Identity Assertion JWT Authorization Grant draft-ietf-oauth-identity-assertion-authz-grant-06",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://datatracker.ietf.org/doc/html/rfc9728",
     "claim": "IETF Datatracker, *RFC 9728: OAuth 2.0 Protected Resource Metadata*, RFC - Proposed Standard (April 2025)",
     "date": null,
     "quote": "RFC - Proposed Standard April 2025",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://www.ietf.org/archive/id/draft-carleton-workload-authz-grant-02.txt",
     "claim": "Paul Carleton (Anthropic), Nick Steele (OpenAI), Aaron Parecki (Okta), Arndt Schwenkschuster (Defakto Security), and Brian Campbell (Ping Identity), *Workload Authorization Grant (draft-carleton-workload-authz-grant-02)*, draft-02, 2 November 2026; expires 6 May 2027",
     "date": null,
     "quote": "Workload Authorization Grant draft-carleton-workload-authz-grant-02",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://www.ietf.org/archive/id/draft-hamr-oauth-agent-delegation-03.txt",
     "claim": "Amr Hassan (Independent), *An Attenuated Delegation Profile for Automated Agents (draft-hamr-oauth-agent-delegation-03)*, checked 2026-10-30",
     "date": null,
     "quote": "Vectors appendix of draft-hamr-oauth-agent-delegation-01 (https://datatracker.ietf.org/doc/html/draft-hamr-oauth-agent-delegation-01). There, V10 and V11 use writeBudget 2; in this",
     "ref": 11
    }
   ],
   "form": "document-format",
   "governance": "Individual IETF Internet-Draft (discussion routed to the OAuth Working Group mailing list); not a working-group document.",
   "group": null,
   "history": [
    {
     "date": "2026-10-29",
     "note": "Primary-source verification against draft-mcguinness-oauth-id-continuation-assertion-02 text and IETF Datatracker document/API records (4 primary sources)"
    },
    {
     "date": "2026-10-20",
     "note": "added from staged research 2026-10-20; header read from draft-mcguinness-oauth-id-continuation-assertion-02"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "implementation": "none-found",
   "last_verified": "2026-11-12",
   "native_status": "\"Active Internet-Draft (individual)\"; \"IESG state I-D Exists\". \"This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process.\" is Datatracker's own wording. The draft says \"Intended status: Standards Track\". Its header line reads \"Web Authorization Protocol K. McGuinness\", and it says \"Discussion of this document takes place on the Web Authorization Protocol Working Group mailing list\". That routes discussion to a working-group mailing list; it does not make the draft a working-group document, and Datatracker files it as individual.",
   "origin": {
    "org": "Karl McGuinness (Independent) and Aaron Parecki (Okta)",
    "date": "2026-08-03"
   },
   "part_of": null,
   "parties": [
    "agent-site"
   ],
   "phase": "draft",
   "probe": {
    "method": "n/a",
    "path": "n/a (token-exchange subject token; no fixed origin artifact)",
    "parse": "n/a. The assertion is presented as a subject token in a token-exchange request.",
    "on_absent": "No public artifact is defined, so absence at an origin is expected."
   },
   "question": "How can a workload obtain an ID-JAG for another service after the user who started the session is no longer present?",
   "scope": "general",
   "spec_url": "https://www.ietf.org/archive/id/draft-mcguinness-oauth-id-continuation-assertion-02.txt",
   "step": "permit",
   "summary_md": "**Identity Continuation Assertion for OAuth 2.0 Token Exchange** (`draft-mcguinness-oauth-id-continuation-assertion-02`) is an individual Standards Track IETF Internet-Draft by Karl McGuinness and Aaron Parecki (Okta) defining a short-lived, sender-constrained JSON Web Token used as the `subject_token` in an OAuth 2.0 Token Exchange request. The workload presents the assertion to the IdP as the subject token of an OAuth 2.0 Token Exchange request. Revision `-02` was published on 9 September 2026 (expiring 13 March 2027) as an individual submission routed to the `oauth` Working Group mailing list for discussion.",
   "track": "ietf",
   "version": {
    "label": "draft-mcguinness-oauth-id-continuation-assertion-02",
    "date": "2026-09-09"
   },
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-mcguinness-oauth-id-continuation-assertion"
    }
   ],
   "use_cases": [
    "delegate-user-authority",
    "prove-agent-identity"
   ],
   "audience": [
    "platform",
    "agent-builder",
    "standards-body"
   ],
   "pairs_with": [
    "identity-assertion-authz-grant",
    "oauth-metadata-for-agents",
    "workload-authz-grant",
    "oauth-agent-delegation"
   ],
   "prerequisites": [
    "identity-assertion-authz-grant"
   ],
   "ietf_tracker": {
    "doc": "draft-mcguinness-oauth-id-continuation-assertion",
    "rev": "02",
    "state": "active",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-09-09",
    "expires_utc": "2027-03-13",
    "as_of": "2026-10-30",
    "source": "https://datatracker.ietf.org/doc/draft-mcguinness-oauth-id-continuation-assertion/",
    "source_label": "per IETF Datatracker"
   },
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": null,
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**Identity Continuation Assertion for OAuth 2.0 Token Exchange** (`draft-mcguinness-oauth-id-continuation-assertion-02`) is an individual Standards Track IETF Internet-Draft by Karl McGuinness and Aaron Parecki (Okta) defining a short-lived, sender-constrained JSON Web Token used as the `subject_token` in an OAuth 2.0 Token Exchange request. [1][2] The workload presents the assertion to the IdP as the subject token of an OAuth 2.0 Token Exchange request. [1] Revision `-02` was published on 9 September 2026 (expiring 13 March 2027) as an individual submission routed to the `oauth` Working Group mailing list for discussion. [1]",
   "v05_identity_sentence_md": "**Identity Continuation Assertion for OAuth 2.0 Token Exchange** (`draft-mcguinness-oauth-id-continuation-assertion-02`) is an individual Standards Track IETF Internet-Draft by Karl McGuinness and Aaron Parecki (Okta) defining a short-lived, sender-constrained JSON Web Token used as the `subject_token` in an OAuth 2.0 Token Exchange request. [1][2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Permit](/category/permit/) (`permit`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "Karl McGuinness (Independent, `-00` `2026-08-03`) and Aaron Parecki (Okta, `-02` `2026-09-09`) [1][2][3]"
    },
    {
     "label": "Governed by",
     "value_md": "Individual IETF Internet-Draft on the OAuth WG list (`oauth@ietf.org`; `IESG state: I-D Exists`) [1][2]"
    },
    {
     "label": "Track",
     "value_md": "IETF Internet-Draft (Standards Track) [1]"
    },
    {
     "label": "Status",
     "value_md": "Active individual Internet-Draft (Intended status: Standards Track; IESG state `I-D Exists`, discussed on the `oauth` WG mailing list without working-group adoption) [1][2][4]"
    },
    {
     "label": "Version",
     "value_md": "`draft-mcguinness-oauth-id-continuation-assertion-02` (`9 September 2026`, Datatracker `2026-09-08`; 84 pages; expires `13 March 2027`) [1][2][4]"
    },
    {
     "label": "Wire format",
     "value_md": "Compact JWS (`\"typ\": \"oauth-identity-continuation+jwt\"`, `application/oauth-identity-continuation+jwt`) via RFC 8693 (`urn:ietf:params:oauth:token-type:identity-continuation`) + RFC 9449 `DPoP` (`cnf.jkt`) [1]"
    },
    {
     "label": "Specification",
     "value_md": "[Draft `-02` Text](https://www.ietf.org/archive/id/draft-mcguinness-oauth-id-continuation-assertion-02.txt) · [IETF Datatracker](https://datatracker.ietf.org/doc/draft-mcguinness-oauth-id-continuation-assertion/) · [Editor Repository](https://github.com/mcguinness/draft-mcguinness-oauth-id-continuation-assertion) [1][2][4][5]"
    },
    {
     "label": "Found at",
     "value_md": "RFC 8414 `/.well-known/oauth-authorization-server` (`identity_continuation_supported`; `urn:ietf:params:oauth:grant-profile:id-jag-continuation`, requested for IANA registration in Section 11 and not yet registered), `identity_continuation_authorization_server`, and `DPoP` [1]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust BCP 78 / BCP 79 (Revised BSD License for code components) [1]"
    },
    {
     "label": "IETF state",
     "value_md": "`draft-mcguinness-oauth-id-continuation-assertion-02` · **Active Internet-Draft** (expires 2027-03-13) · Individual · as of 2026-10-30 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-mcguinness-oauth-id-continuation-assertion/))"
    }
   ],
   "v05_problem_md": "ID-JAG allows an application to exchange the user's identity assertion at the IdP for a grant that it redeems at a target RAS for an access token. A service receiving that access token may need to call a further service on the user's behalf, including when the user is no longer present. It may hold neither the user's identity assertion nor another credential accepted by the next authorization server. The receiving workload's incoming access token is not accepted at the next RAS. [1] The specification extends ID-JAG, referred to as the base profile. [1] A trusted issuer attests that a resource authorization server accepted an earlier ID-JAG and that the resulting authorization remains active and eligible for continuation. [1] The workload exchanges this assertion at the identity provider, which evaluates the requested access under the chain authorization and current policy before issuing an onward ID-JAG. [1] The assertion conveys no downstream authority. [1] The continuation request, not the assertion, names the target and the requested authority. [1] This profile does not replace mechanisms for narrowing an existing token within one trust domain. [1] The specification defines no new access-token format. [1]",
   "v05_mechanism_delta_md": "The specification extends ID-JAG, referred to as the base profile. [1] A trusted issuer attests that a resource authorization server accepted an earlier ID-JAG and that the resulting authorization remains active and eligible for continuation. [1] The workload exchanges this assertion at the identity provider, which evaluates the requested access under the chain authorization and current policy before issuing an onward ID-JAG. [1]",
   "v05_scope_boundary_md": "The assertion conveys no downstream authority. [1] The continuation request, not the assertion, names the target and the requested authority. [1] This profile does not replace mechanisms for narrowing an existing token within one trust domain. [1] The specification defines no new access-token format. [1]",
   "v05_fuzzy_additions": [
    {
     "id": "assertion-claims-and-the-continuation-request",
     "heading": "Assertion claims and the continuation request",
     "body_md": "`draft-mcguinness-oauth-id-continuation-assertion-02` profiles OAuth 2.0 Token Exchange (`RFC 8693`) so a Context-Aware Intermediary or agent workload presents a short-lived, sender-constrained JWT carrying an `identity_continuation_handle` and `act` claim to the enterprise IdP without replaying raw SSO assertions. [1]",
     "bullets": [
      {
       "label": "Token type and JOSE header",
       "text_md": "The token type is `urn:ietf:params:oauth:token-type:identity-continuation` and the media type is `application/oauth-identity-continuation+jwt`. The CAI MUST set the JOSE `typ` header to `oauth-identity-continuation+jwt`. The assertion MUST NOT be encrypted (JWE) or use nested signing. [1]"
      },
      {
       "label": "Required claim names",
       "text_md": "`iss`, `aud`, `identity_continuation_handle`, and `act` are REQUIRED. `aud` is a single string exactly matching the IdP issuer identifier, not its token endpoint URL and not the requested target. `act` is a single-level claim naming the current actor. [1]"
      },
      {
       "label": "Confirmation, lifetime, and replay",
       "text_md": "`cnf` MUST contain exactly one confirmation method, `jkt`. `exp` MUST follow `iat`. A CAI SHOULD NOT issue a lifetime (`exp` - `iat`) longer than 300 seconds. An IdP SHOULD accept lifetimes of up to 300 seconds. The IdP rejects a lifetime longer than the maximum it accepts. `jti` is REQUIRED and SHOULD contain at least 128 bits of entropy. [1]"
      },
      {
       "label": "Claims the assertion omits",
       "text_md": "The assertion MUST NOT contain a top-level `sub`, `auth_time`, `acr`, `amr`, or `sid` claim, nor `audience`, `resource`, `scope`, `authorization_details`, or `requested_token_type`. The request supplies those parameters. [1]"
      }
     ]
    },
    {
     "id": "handles-metadata-and-continuation-failure",
     "heading": "Handles, metadata, and continuation failure",
     "body_md": "To prevent cross-hop handle fixation and replay, the IdP rotates a fresh `identity_continuation_handle` at each continuation hop while Authorization Servers and Resource Authorization Servers coordinate capability support through RFC 8414 metadata parameters. [1]",
     "bullets": [
      {
       "label": "Fresh handle constraints",
       "text_md": "The IdP MUST embed a fresh `identity_continuation_handle` when it establishes or continues a chain and MUST NOT reuse a handle across hops. The handle MUST provide at least 128 bits of unpredictability and MUST NOT contain user-identifying information. Across a trust boundary it is accepted only inside an ID-JAG or an Identity Continuation Assertion, never as a standalone value. [1]"
      },
      {
       "label": "IdP metadata signal",
       "text_md": "An IdP that supports this profile SHOULD signal `identity_continuation_supported` in authorization server metadata. The parameter is OPTIONAL, Boolean, and default false. A continuation-capable ID-JAG is still type `urn:ietf:params:oauth:token-type:id-jag`. [1]"
      },
      {
       "label": "RAS profile advertisement",
       "text_md": "A Resource Authorization Server that binds `identity_continuation_handle` to authorization state MUST advertise `urn:ietf:params:oauth:grant-profile:id-jag-continuation` in `authorization_grant_profiles_supported`. It MUST also advertise `urn:ietf:params:oauth:grant-profile:id-jag` and `urn:ietf:params:oauth:grant-type:jwt-bearer`. It MUST also advertise `urn:ietf:params:oauth:grant-type:jwt-dpop`, since every onward ID-JAG it redeems carries `cnf`. [1]"
      },
      {
       "label": "Issuer beside the assertion",
       "text_md": "`identity_continuation_authorization_server` is REQUIRED. The CAI MUST set it to the assertion's `aud` claim. The client uses it to identify the IdP without decoding the assertion. [1]"
      }
     ]
    }
   ],
   "v05_diagram": null,
   "v05_wire_artifact": {
    "title": "Identity Continuation Assertion claims",
    "heading": "Identity Continuation Assertion claims",
    "lang": "json",
    "code": "{\n  \"iss\": \"https://cai.expenses.example/\",\n  \"aud\": \"https://idp.example/\",\n  \"identity_continuation_handle\": \"kW4uJ8pTe2NxA6rQvD1zYs\",\n  \"act\": {\n    \"iss\": \"https://expenses.example/\",\n    \"sub\": \"expense-service\"\n  },\n  \"cnf\": {\n    \"jkt\": \"base64url-current-actor-key-thumbprint\"\n  },\n  \"iat\": 1710000020,\n  \"exp\": 1710000200,\n  \"jti\": \"b8Rn5Yx1Qe4Nk2Wf6zVc9d\"\n}",
    "caption_md": "Section 3.2 gives this non-normative Identity Continuation Assertion claim set, including `iss`, `aud`, `identity_continuation_handle`, `act`, `cnf`, `jkt`, `iat`, `exp`, and `jti`. [1]"
   },
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "OAuth 2.0 Token Exchange (RFC 8693)",
      "spec_or_rfc": "RFC 8693",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "The Identity Continuation Assertion is the subject token of an RFC 8693 token exchange, a short-lived stand-in for the user that can be exchanged for an ID-JAG after the user has left. [1][6]"
     },
     {
      "name": "JSON Web Token (JWT, RFC 7519)",
      "spec_or_rfc": "RFC 7519",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "The assertion is a JWT subject token rather than a file on the origin. [1][7]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "identity-assertion-authz-grant",
      "target_name": "Identity Assertion JWT Authorization Grant (ID-JAG)",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "The continuation assertion depends on ID-JAG: it is the RFC 8693 subject token exchanged for an ID-JAG after the user has left. [1][8]"
     },
     {
      "target_id": "oauth-metadata-for-agents",
      "target_name": "OAuth Protected Resource and Authorization Server Metadata (as used for agent authorization)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "The continuation assertion is an RFC 8693 subject token, and authorization-server metadata remains the discovery document for the token endpoint. [1][9]"
     },
     {
      "target_id": "workload-authz-grant",
      "target_name": "Workload Authorization Grant (WAG)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "The Workload Authorization Grant is a platform-signed JWT naming the workload acting alone, while a continuation assertion attests that an earlier user-backed ID-JAG is still eligible. [1][10]"
     },
     {
      "target_id": "oauth-agent-delegation",
      "target_name": "An Attenuated Delegation Profile for Automated Agents",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Identity Continuation obtains the next ID-JAG from the identity provider, and the Agent-Delegation header carries an attenuated chain on the HTTP request the agent then sends. [1][11]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": "`draft-mcguinness-oauth-id-continuation-assertion-02` (`2026-09-09`, expiring `2027-03-13`) is an individual Internet-Draft by Karl McGuinness and Aaron Parecki (Okta) discussed on the IETF `oauth` mailing list; no production IdP or Resource Authorization Server deployments have been verified yet. [1][4]",
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Permit protocols](/category/permit/)** — Category index for `permit` standards."
    }
   ],
   "v05_compiled_md": "---\nid: oauth-id-continuation\ntitle: \"Identity Continuation Assertion for OAuth 2.0 Token Exchange\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: permit\nform: document-format\nwire_archetype: identity_auth_crypto\nspec_url: https://www.ietf.org/archive/id/draft-mcguinness-oauth-id-continuation-assertion-02.txt\nlast_checked: 2026-11-12\n---\n\n# Identity Continuation Assertion for OAuth 2.0 Token Exchange\n\n**Category:** [Permit](/category/permit/) (`permit`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-11-12\n\n**Identity Continuation Assertion for OAuth 2.0 Token Exchange** (`draft-mcguinness-oauth-id-continuation-assertion-02`) is an individual Standards Track IETF Internet-Draft by Karl McGuinness and Aaron Parecki (Okta) defining a short-lived, sender-constrained JSON Web Token used as the `subject_token` in an OAuth 2.0 Token Exchange request. [1][2] The workload presents the assertion to the IdP as the subject token of an OAuth 2.0 Token Exchange request. [1] Revision `-02` was published on 9 September 2026 (expiring 13 March 2027) as an individual submission routed to the `oauth` Working Group mailing list for discussion. [1]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Permit](/category/permit/) (`permit`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | Karl McGuinness (Independent, `-00` `2026-08-03`) and Aaron Parecki (Okta, `-02` `2026-09-09`) [1][2][3] |\n| **Governed by** | Individual IETF Internet-Draft on the OAuth WG list (`oauth@ietf.org`; `IESG state: I-D Exists`) [1][2] |\n| **Track** | IETF Internet-Draft (Standards Track) [1] |\n| **Status** | Active individual Internet-Draft (Intended status: Standards Track; IESG state `I-D Exists`, discussed on the `oauth` WG mailing list without working-group adoption) [1][2][4] |\n| **Version** | `draft-mcguinness-oauth-id-continuation-assertion-02` (`9 September 2026`, Datatracker `2026-09-08`; 84 pages; expires `13 March 2027`) [1][2][4] |\n| **Wire format** | Compact JWS (`\"typ\": \"oauth-identity-continuation+jwt\"`, `application/oauth-identity-continuation+jwt`) via RFC 8693 (`urn:ietf:params:oauth:token-type:identity-continuation`) + RFC 9449 `DPoP` (`cnf.jkt`) [1] |\n| **Specification** | [Draft `-02` Text](https://www.ietf.org/archive/id/draft-mcguinness-oauth-id-continuation-assertion-02.txt) · [IETF Datatracker](https://datatracker.ietf.org/doc/draft-mcguinness-oauth-id-continuation-assertion/) · [Editor Repository](https://github.com/mcguinness/draft-mcguinness-oauth-id-continuation-assertion) [1][2][4][5] |\n| **Found at** | RFC 8414 `/.well-known/oauth-authorization-server` (`identity_continuation_supported`; `urn:ietf:params:oauth:grant-profile:id-jag-continuation`, requested for IANA registration in Section 11 and not yet registered), `identity_continuation_authorization_server`, and `DPoP` [1] |\n| **Licence** | IETF Trust BCP 78 / BCP 79 (Revised BSD License for code components) [1] |\n| **IETF state** | `draft-mcguinness-oauth-id-continuation-assertion-02` · **Active Internet-Draft** (expires 2027-03-13) · Individual · as of 2026-10-30 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-mcguinness-oauth-id-continuation-assertion/)) |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Assertion claims and the continuation request](#assertion-claims-and-the-continuation-request)\n3. [Handles, metadata, and continuation failure](#handles-metadata-and-continuation-failure)\n4. [Counterparts and related standards](#counterparts-and-related-standards)\n5. [Adoption and ecosystem](#adoption-and-ecosystem)\n6. [See also](#see-also)\n7. [References](#references)\n\n---\n\n## Problem and scope\n\nID-JAG allows an application to exchange the user's identity assertion at the IdP for a grant that it redeems at a target RAS for an access token. A service receiving that access token may need to call a further service on the user's behalf, including when the user is no longer present. It may hold neither the user's identity assertion nor another credential accepted by the next authorization server. The receiving workload's incoming access token is not accepted at the next RAS. [1] The specification extends ID-JAG, referred to as the base profile. [1] A trusted issuer attests that a resource authorization server accepted an earlier ID-JAG and that the resulting authorization remains active and eligible for continuation. [1] The workload exchanges this assertion at the identity provider, which evaluates the requested access under the chain authorization and current policy before issuing an onward ID-JAG. [1] The assertion conveys no downstream authority. [1] The continuation request, not the assertion, names the target and the requested authority. [1] This profile does not replace mechanisms for narrowing an existing token within one trust domain. [1] The specification defines no new access-token format. [1]\n\n### Identity Continuation Assertion claims\n\n```json\n{\n  \"iss\": \"https://cai.expenses.example/\",\n  \"aud\": \"https://idp.example/\",\n  \"identity_continuation_handle\": \"kW4uJ8pTe2NxA6rQvD1zYs\",\n  \"act\": {\n    \"iss\": \"https://expenses.example/\",\n    \"sub\": \"expense-service\"\n  },\n  \"cnf\": {\n    \"jkt\": \"base64url-current-actor-key-thumbprint\"\n  },\n  \"iat\": 1710000020,\n  \"exp\": 1710000200,\n  \"jti\": \"b8Rn5Yx1Qe4Nk2Wf6zVc9d\"\n}\n```\n\n*Section 3.2 gives this non-normative Identity Continuation Assertion claim set, including `iss`, `aud`, `identity_continuation_handle`, `act`, `cnf`, `jkt`, `iat`, `exp`, and `jti`. [1]*\n\n---\n\n## Assertion claims and the continuation request\n\n`draft-mcguinness-oauth-id-continuation-assertion-02` profiles OAuth 2.0 Token Exchange (`RFC 8693`) so a Context-Aware Intermediary or agent workload presents a short-lived, sender-constrained JWT carrying an `identity_continuation_handle` and `act` claim to the enterprise IdP without replaying raw SSO assertions. [1]\n\n- **Token type and JOSE header:** The token type is `urn:ietf:params:oauth:token-type:identity-continuation` and the media type is `application/oauth-identity-continuation+jwt`. The CAI MUST set the JOSE `typ` header to `oauth-identity-continuation+jwt`. The assertion MUST NOT be encrypted (JWE) or use nested signing. [1]\n- **Required claim names:** `iss`, `aud`, `identity_continuation_handle`, and `act` are REQUIRED. `aud` is a single string exactly matching the IdP issuer identifier, not its token endpoint URL and not the requested target. `act` is a single-level claim naming the current actor. [1]\n- **Confirmation, lifetime, and replay:** `cnf` MUST contain exactly one confirmation method, `jkt`. `exp` MUST follow `iat`. A CAI SHOULD NOT issue a lifetime (`exp` - `iat`) longer than 300 seconds. An IdP SHOULD accept lifetimes of up to 300 seconds. The IdP rejects a lifetime longer than the maximum it accepts. `jti` is REQUIRED and SHOULD contain at least 128 bits of entropy. [1]\n- **Claims the assertion omits:** The assertion MUST NOT contain a top-level `sub`, `auth_time`, `acr`, `amr`, or `sid` claim, nor `audience`, `resource`, `scope`, `authorization_details`, or `requested_token_type`. The request supplies those parameters. [1]\n\n---\n\n## Handles, metadata, and continuation failure\n\nTo prevent cross-hop handle fixation and replay, the IdP rotates a fresh `identity_continuation_handle` at each continuation hop while Authorization Servers and Resource Authorization Servers coordinate capability support through RFC 8414 metadata parameters. [1]\n\n- **Fresh handle constraints:** The IdP MUST embed a fresh `identity_continuation_handle` when it establishes or continues a chain and MUST NOT reuse a handle across hops. The handle MUST provide at least 128 bits of unpredictability and MUST NOT contain user-identifying information. Across a trust boundary it is accepted only inside an ID-JAG or an Identity Continuation Assertion, never as a standalone value. [1]\n- **IdP metadata signal:** An IdP that supports this profile SHOULD signal `identity_continuation_supported` in authorization server metadata. The parameter is OPTIONAL, Boolean, and default false. A continuation-capable ID-JAG is still type `urn:ietf:params:oauth:token-type:id-jag`. [1]\n- **RAS profile advertisement:** A Resource Authorization Server that binds `identity_continuation_handle` to authorization state MUST advertise `urn:ietf:params:oauth:grant-profile:id-jag-continuation` in `authorization_grant_profiles_supported`. It MUST also advertise `urn:ietf:params:oauth:grant-profile:id-jag` and `urn:ietf:params:oauth:grant-type:jwt-bearer`. It MUST also advertise `urn:ietf:params:oauth:grant-type:jwt-dpop`, since every onward ID-JAG it redeems carries `cnf`. [1]\n- **Issuer beside the assertion:** `identity_continuation_authorization_server` is REQUIRED. The CAI MUST set it to the assertion's `aud` claim. The client uses it to identify the IdP without decoding the assertion. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **OAuth 2.0 Token Exchange (RFC 8693)** | `RFC 8693` | Profiles classic standard | The Identity Continuation Assertion is the subject token of an RFC 8693 token exchange, a short-lived stand-in for the user that can be exchanged for an ID-JAG after the user has left. [1][6] |\n| **JSON Web Token (JWT, RFC 7519)** | `RFC 7519` | Profiles classic standard | The assertion is a JWT subject token rather than a file on the origin. [1][7] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Identity Assertion JWT Authorization Grant (ID-JAG)](/protocols/identity-assertion-authz-grant/)** | Builds on | The continuation assertion depends on ID-JAG: it is the RFC 8693 subject token exchanged for an ID-JAG after the user has left. [1][8] |\n| **[OAuth Protected Resource and Authorization Server Metadata (as used for agent authorization)](/protocols/oauth-metadata-for-agents/)** | Complements | The continuation assertion is an RFC 8693 subject token, and authorization-server metadata remains the discovery document for the token endpoint. [1][9] |\n| **[Workload Authorization Grant (WAG)](/protocols/workload-authz-grant/)** | Peer alternative | The Workload Authorization Grant is a platform-signed JWT naming the workload acting alone, while a continuation assertion attests that an earlier user-backed ID-JAG is still eligible. [1][10] |\n| **[An Attenuated Delegation Profile for Automated Agents](/protocols/oauth-agent-delegation/)** | Complements | Identity Continuation obtains the next ID-JAG from the identity provider, and the Agent-Delegation header carries an attenuated chain on the HTTP request the agent then sends. [1][11] |\n\n---\n\n## Adoption and ecosystem\n\n`draft-mcguinness-oauth-id-continuation-assertion-02` (`2026-09-09`, expiring `2027-03-13`) is an individual Internet-Draft by Karl McGuinness and Aaron Parecki (Okta) discussed on the IETF `oauth` mailing list; no production IdP or Resource Authorization Server deployments have been verified yet. [1][4]\n\n---\n\n## See also\n\n- **Category:** [Permit protocols](/category/permit/)\n\n---\n\n## References\n\n1. K. McGuinness (Independent) and A. Parecki (Okta), *Identity Continuation Assertion for OAuth 2.0 Token Exchange (draft-mcguinness-oauth-id-continuation-assertion-02)* (draft-02, 9 September 2026; expires 13 March 2027) — <https://www.ietf.org/archive/id/draft-mcguinness-oauth-id-continuation-assertion-02.txt>\n2. Karl McGuinness (Independent) and Aaron Parecki (Okta), *draft-mcguinness-oauth-id-continuation-assertion — Identity Continuation Assertion for OAuth 2.0 Token Exchange (IETF Datatracker)* (draft-mcguinness-oauth-id-continuation-assertion-02) — <https://datatracker.ietf.org/doc/draft-mcguinness-oauth-id-continuation-assertion/>\n3. IETF Datatracker API, *Revision events for draft-mcguinness-oauth-id-continuation-assertion* (checked 2026-10-30) — <https://datatracker.ietf.org/api/v1/doc/newrevisiondocevent/?doc__name=draft-mcguinness-oauth-id-continuation-assertion&format=json>\n4. IETF Datatracker API, *IETF Datatracker document record for draft-mcguinness-oauth-id-continuation-assertion* (checked 2026-10-30) — <https://datatracker.ietf.org/api/v1/doc/document/draft-mcguinness-oauth-id-continuation-assertion/>\n5. Karl McGuinness and Aaron Parecki, *draft-mcguinness-oauth-id-continuation-assertion — Editor Working Repository* (checked 2026-11-12) — <https://raw.githubusercontent.com/mcguinness/draft-mcguinness-oauth-id-continuation-assertion/main/README.md>\n6. IETF, *RFC 8693: OAuth 2.0 Token Exchange* (IETF RFC) — <https://www.rfc-editor.org/rfc/rfc8693.html>\n7. IETF, *RFC 7519: JSON Web Token (JWT)* (IETF RFC) — <https://www.rfc-editor.org/rfc/rfc7519.html>\n8. Aaron Parecki (Okta), Karl McGuinness (Independent), and Brian Campbell (Ping Identity), *Identity Assertion JWT Authorization Grant (draft-ietf-oauth-identity-assertion-authz-grant-06)* (draft-06, 31 October 2026; expires 4 May 2027) — <https://www.ietf.org/archive/id/draft-ietf-oauth-identity-assertion-authz-grant-06.txt>\n9. IETF Datatracker, *RFC 9728: OAuth 2.0 Protected Resource Metadata* (RFC - Proposed Standard (April 2025)) — <https://datatracker.ietf.org/doc/html/rfc9728>\n10. Paul Carleton (Anthropic), Nick Steele (OpenAI), Aaron Parecki (Okta), Arndt Schwenkschuster (Defakto Security), and Brian Campbell (Ping Identity), *Workload Authorization Grant (draft-carleton-workload-authz-grant-02)* (draft-02, 2 November 2026; expires 6 May 2027) — <https://www.ietf.org/archive/id/draft-carleton-workload-authz-grant-02.txt>\n11. Amr Hassan (Independent), *An Attenuated Delegation Profile for Automated Agents (draft-hamr-oauth-agent-delegation-03)* (checked 2026-10-30) — <https://www.ietf.org/archive/id/draft-hamr-oauth-agent-delegation-03.txt>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "id": "oauth-agent-delegation",
   "name": "An Attenuated Delegation Profile for Automated Agents",
   "acronym": "",
   "hatnote_md": "",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "aliases": [
    "draft-hamr-oauth-agent-delegation",
    "draft-hassan-oauth-agent-delegation",
    "Attenuated Delegation Profile for Automated Agents",
    "Agent-Delegation header"
   ],
   "analog": "A signed chain of authority on an HTTP request, each hop narrower than the last",
   "collisions": [
    "Agent Authorization Profile (draft-aap-oauth-profile) and OpenA2A AAP, which are token models rather than this header"
   ],
   "discovery": {
    "mechanism": "An Agent-Delegation HTTP header on a request signed with RFC 9421. No well-known file is defined.",
    "path": null
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://www.ietf.org/archive/id/draft-hamr-oauth-agent-delegation-03.txt",
     "claim": "Amr Hassan (Independent), *An Attenuated Delegation Profile for Automated Agents (draft-hamr-oauth-agent-delegation-03)*, checked 2026-10-30",
     "date": null,
     "quote": "An Attenuated Delegation Profile for Automated Agents draft-hamr-oauth-agent-delegation-03 ... This document defines an HTTP header field, Agent-Delegation, that carries a chain of delegation links. / Web Authorization Protocol A. Hassan Internet-Draft Independent Intended status: Standards Track / It carries a delegation chain from a Delegate to a Relying Service, or to the next Delegate in the chain. / ordered from the root link (index zero) to the leaf link the immediate sender presents. / The immediate sender covers Agent-Delegation with an RFC 9421 [RFC9421] signature, which binds the field to the request it accompanies. This document defines no new signature mechanism. / A sender MUST set the tag parameter to the string \"agent-delegation\", so that a verifier can identify a signature made under this profile. / This Internet-Draft will expire on 25 April 2027. / single-author and open source. None has had external review or been adopted by any organization, and no Attestation Issuer has reviewed or validated this profile. / OAuth lists in September 2026. Author's Address Amr Hassan Independent San Francisco, California United / Working Group Charter\", 4 June 2026,. [I-D.google-cfrg-libzk] Frigo, M. and A. shelat, \"Longfellow ZK\", / Intended status: Standards Track / Vectors appendix of draft-hamr-oauth-agent-delegation-01 (https://datatracker.ietf.org/doc/html/draft-hamr-oauth-agent-delegation-01). There, V10 and V11 use writeBudget 2; in this / unverifiable. Hassan Expires 25 April 2027 Page 9 Internet-Draft Agent Delegation Profile October 2026 / This document defines an HTTP header field, Agent-Delegation, that carries a chain of delegation links. / SHOULD send the Accept-Signature field with a nonce parameter, as RFC 9421 Section 7.2.2 / reserved. This document is subject to BCP 78 and the IETF Trust's Legal Provisions / RFC 9421 shows who signed a request. It does not show who the agent acts for, or what the agent may do. / API Providers already let a person limit what a credential may do, but each provider does it in its own way. ... These controls were built for a person who sets up a credential once and then uses it for a long time. ... A deployment can start a new agent for each job, and each job needs its own small scope. / Each link can only narrow the scope, floors, and expiry of the link before it, and a verifier checks every link. / Each call has one of three classes, read as in the chmod command: r reads and changes nothing; w changes something that a later call can set back; x cannot be undone, for example a delete, a payment, or a message sent / This document does not define a credential format, an identity system, or revocation. / A short expiry is the only limit on the life of a link. / It is a Structured Field [RFC9651]: a List whose members are Byte Sequences, each member one opaque, encoded link ... this document does not mandate one. / Agent-Delegation: :BASE64-ENCODED-L0:, :BASE64-ENCODED-L1: / A sender MUST include the keyid, alg, created, expires, and nonce parameters, and MUST include the Agent-Delegation field among the signature's covered components. / RFC 9421 leaves enforcement of expires to the application. This profile requires it: a verifier MUST reject a request whose signature expires value is earlier than the time of verification. / Three expiry values stay separate. A link carries its own expiry. A floor attestation carries its own expiry (Section 11). The expires parameter covers the HTTP message alone. / The nonce parameter binds one HTTP message. The nonce inside a floor attestation (Section 11) binds one attestation to one verifier's question. They are two nonces at two layers, and implementers MUST NOT treat them as one. / actionClass is an ordered list, r, w, and x, ranked r < w < x by the rank comparator of Section 8. / A failure at any step MUST produce one uniform rejection outcome / The scope granted by L(i) MUST be a subset of the scope granted by L(i-1), per Section 6. L(i) MUST NOT name a capability that L(i-1) did not itself hold. / A capability string is OPAQUE to this profile: this document defines no syntax, no internal structure, and no namespace for it. ... Comparison is by exact set containment. ... wildcard or prefix matching; ... hierarchical or namespace containment ... case folding; * Unicode normalisation; * whitespace trimming / actionClass is an ordered list, r, w, and x, ranked r < w < x by the rank comparator of Section 8. A link's actionClass is a ceiling on the whole link, not a statement about one call. ... A child link's actionClass MUST NOT be higher than its parent's. / Where classSource is method, the method gives a starting class, not the definition of the class: GET, HEAD, and OPTIONS default to r; PUT and PATCH default to w; DELETE, POST, and any other method default to x. / A child link's classSource MUST NOT go from method to declared; the only permitted move is declared down to method. / A failure at any step MUST produce one uniform rejection outcome, indistinguishable from the outcome of a failure at any other step ... that key is obtained from a configured trust source and MUST NOT be obtained from the message itself. ... every floor attestation carried by the chain has a yes result; reject if any is a signed no or a signed refusal / Web Authorization Protocol A. Hassan Internet-Draft Independent Intended status: Standards Track 22 October 2026 Expires: 25 April 2027 An Attenuated Delegation Profile for Automated Agents draft-hamr-oauth-agent-delegation-03",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://datatracker.ietf.org/doc/draft-hamr-oauth-agent-delegation/",
     "claim": "A. Hassan (Independent), *An Attenuated Delegation Profile for Automated Agents (draft-hamr-oauth-agent-delegation)*, checked 2026-10-30",
     "date": null,
     "quote": "This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. Document Type Active Internet-Draft (individual) Author Amr Hassan / RFC stream | | (None) ... Intended RFC status | | (None) / IESG | IESG state | | I-D Exists / draft-hamr-oauth-agent-delegation-03 ... Last updated 2026-10-22 Replaces draft-hassan-oauth-agent-delegation / | RFC Editor Note | | (None) | | IESG | IESG state | / draft-hamr-oauth-agent-delegation-03.txt 2026-10-22 03 Amr Hassan / draft-hamr-oauth-agent-delegation-03.txt 2026-10-22 03 Amr Hassan New version accepted (logged-in submitter: Amr Hassan) 2026-10-22 03 / !IETF Logo!IETF Logo # An Attenuated Delegation Profile for Automated Agents draft-hamr-oauth-agent-delegation-03 | |",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://datatracker.ietf.org/api/v1/doc/newrevisiondocevent/?doc__name=draft-hamr-oauth-agent-delegation&format=json",
     "claim": "IETF Datatracker API, *Revision events for draft-hamr-oauth-agent-delegation*, checked 2026-10-30",
     "date": null,
     "quote": "New version available: draft-hamr-oauth-agent-delegation-03.txt ... \"rev\": \"03\", \"time\": \"2026-10-22T21:56:56Z\" / New version available: draft-hamr-oauth-agent-delegation-00.txt ... \"rev\": \"00\", \"time\": \"2026-08-31T14:17:34Z\" / \"rev\": \"00\", \"time\": \"2026-08-31T14:17:34Z\"",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://datatracker.ietf.org/api/v1/doc/document/draft-hamr-oauth-agent-delegation/",
     "claim": "IETF Datatracker API, *IETF Datatracker document record for draft-hamr-oauth-agent-delegation*, checked 2026-10-30",
     "date": null,
     "quote": "2027-04-25T21:56:56Z /api/v1/group/group/1027/ 160833 [] draft-hamr-oauth-agent-delegation 37 /api/v1/doc/document/draft-hamr-oauth-agent-delegation/ 03 / 160833 [] draft-hamr-oauth-agent-delegation 37 /api/v1/doc/document/draft-hamr-oauth-agent-delegation/ 03 /api/v1/doc/state/1/ /api/v1/doc/state/150/ /api/v1/submit/submission/169290/ / 2027-04-25T21:56:56Z /api/v1/group/group/1027/ 160833 [] draft-hamr-oauth-agent-delegation 37",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://datatracker.ietf.org/api/v1/doc/newrevisiondocevent/?doc__name=draft-hassan-oauth-agent-delegation&format=json",
     "claim": "IETF Datatracker API, *Revision events for predecessor draft-hassan-oauth-agent-delegation*, checked 2026-10-30",
     "date": null,
     "quote": "New version available: draft-hassan-oauth-agent-delegation-00.txt ... \"rev\": \"00\", \"time\": \"2026-08-31T13:44:42Z\" / \"rev\": \"00\", \"time\": \"2026-08-31T13:44:42Z\"",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://raw.githubusercontent.com/hamr0/bareguard/main/README.md",
     "claim": "Amr Hassan (hamr0/bareguard), *bareguard — Deterministic Action Gate Companion*, checked 2026-11-12",
     "date": null,
     "quote": "Gates what the agent **does** — and whether its **work** is done — with deterministic checks only / Gates what the agent **does** — and whether its **work** is done — with deterministic checks only; it never runs an LLM.",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://www.rfc-editor.org/rfc/rfc9421.html",
     "claim": "A. Backman, Ed., J. Richer, Ed., and M. Sporny, *RFC 9421: HTTP Message Signatures*, February 2024",
     "date": null,
     "quote": "<meta content=\"Common,Latin\" name=\"scripts\">",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://raw.githubusercontent.com/biscuit-auth/biscuit/master/SPECIFICATIONS.md",
     "claim": "Biscuit Authorization, *Biscuit 2.0 Specification*, fetched 2026-11-12",
     "date": null,
     "quote": "# Biscuit, a bearer token with offline attenuation and decentralized verification",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://datatracker.ietf.org/doc/rfc9421/",
     "claim": "IETF Datatracker, *HTTP Message Signatures (RFC 9421)*, Proposed Standard (February 2024); checked 2026-10-30",
     "date": null,
     "quote": "RFC - Proposed Standard (February 2024)",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://www.ietf.org/archive/id/draft-fane-opena2a-aap-02.txt",
     "claim": "A. Fane (OpenA2A), *OpenA2A Agent Authorization Protocol (AAP) (draft-fane-opena2a-aap-02)*, 30 September 2026",
     "date": null,
     "quote": "Standards Track 30 September 2026 Expires: 3 April 2027 OpenA2A Agent Authorization Protocol (AAP)",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://datatracker.ietf.org/doc/draft-ietf-oauth-identity-assertion-authz-grant/",
     "claim": "Aaron Parecki, Karl McGuinness, and Brian Campbell (IETF Web Authorization Protocol Working Group), *draft-ietf-oauth-identity-assertion-authz-grant — Identity Assertion JWT Authorization Grant (IETF Datatracker)*, checked 2026-11-08",
     "date": null,
     "quote": "Active Internet-Draft (oauth WG) … Intended RFC status | | (None) … WG state | | WG Document … IESG state | | I-D Exists",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://datatracker.ietf.org/doc/draft-carleton-workload-authz-grant/",
     "claim": "Paul Carleton (Anthropic), Nick Steele (OpenAI), Aaron Parecki (Okta), Arndt Schwenkschuster (Defakto Security), and Brian Campbell (Ping Identity), *draft-carleton-workload-authz-grant — Workload Authorization Grant (IETF Datatracker)*, checked 2026-11-08",
     "date": null,
     "quote": "Active Internet-Draft (individual)",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://www.ietf.org/archive/id/draft-mcguinness-oauth-id-continuation-assertion-02.txt",
     "claim": "K. McGuinness (Independent) and A. Parecki (Okta), *Identity Continuation Assertion for OAuth 2.0 Token Exchange (draft-mcguinness-oauth-id-continuation-assertion-02)*, draft-02, 9 September 2026; expires 13 March 2027",
     "date": null,
     "quote": "McGuinness & Parecki Expires 13 March 2027 [Page 4] Internet-Draft Identity Continuation Assertion September",
     "ref": 13
    }
   ],
   "form": "http-header",
   "governance": "Individual IETF Internet-Draft (replaces draft-hassan-oauth-agent-delegation); not a working-group document.",
   "group": null,
   "history": [
    {
     "date": "2026-10-29",
     "note": "Primary-source verification against draft-hamr-oauth-agent-delegation-03 text and IETF Datatracker document/API records (5 primary sources)"
    },
    {
     "date": "2026-10-23",
     "note": "revision 02 → 03"
    },
    {
     "date": "2026-10-20",
     "note": "added from staged research 2026-10-20; header read from draft-hamr-oauth-agent-delegation-02"
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "implementation": "none-found",
   "last_verified": "2026-11-12",
   "native_status": "\"Active Internet-Draft (individual)\"; \"IESG state I-D Exists\". \"This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process.\" is Datatracker's own wording. The draft says \"Intended status: Standards Track\". Its first header line reads \"Web Authorization Protocol A. Hassan\". That header line does not make it a working-group document: Datatracker files it as individual, as above.",
   "origin": {
    "org": "Amr Hassan (Independent)",
    "date": "2026-08-31"
   },
   "part_of": null,
   "parties": [
    "agent-site",
    "agent-agent"
   ],
   "phase": "draft",
   "probe": {
    "method": "n/a",
    "path": "n/a (Agent-Delegation request header; no fixed origin artifact)",
    "parse": "n/a. Look for an Agent-Delegation header on a request signed under RFC 9421. Call classes are r, w, and x. Each link can only narrow scope, floors, and expiry.",
    "on_absent": "No Agent-Delegation header on a given request means this profile was not used for that call."
   },
   "question": "How can an automated agent pass on a user's authority so that each hop can only narrow scope, floors, and expiry?",
   "scope": "general",
   "spec_url": "https://www.ietf.org/archive/id/draft-hamr-oauth-agent-delegation-03.txt",
   "step": "permit",
   "summary_md": "**An Attenuated Delegation Profile for Automated Agents** (`draft-hamr-oauth-agent-delegation-03`) defines an HTTP header field, `Agent-Delegation`, that carries a chain of delegation links. The draft header line reads Web Authorization Protocol A. Hassan Internet-Draft Independent, and it says Intended status: Standards Track. Datatracker records Document Type Active Internet-Draft (individual) and Author Amr Hassan. This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. The RFC stream is (None). Intended RFC status is (None). IESG state is I-D Exists. `Agent-Delegation` carries a delegation chain from a Delegate to a Relying Service, or to the next Delegate in the chain. Members are ordered from the root link (index zero) to the leaf link the immediate sender presents. The immediate sender covers `Agent-Delegation` with an RFC 9421 signature, which binds the field to the request it accompanies. The draft defines no new signature mechanism. A sender MUST set the `tag` parameter to the string `agent-delegation`, so that a verifier can identify a signature made under this profile. Datatracker lists `draft-hamr-oauth-agent-delegation` as replacing `draft-hassan-oauth-agent-delegation`, last updated `2026-10-22`. The Datatracker revision history records revision `03` (`draft-hamr-oauth-agent-delegation-03.txt`) on `2026-10-22`. The draft says this Internet-Draft will expire on 25 April 2027. The Datatracker document record lists revision `03` of `draft-hamr-oauth-agent-delegation` at 37 pages, expiring on `2027-04-25`. The predecessor submission `draft-hassan-oauth-agent-delegation-00.txt` was posted on `2026-08-31`. Initial revision `draft-hamr-oauth-agent-delegation-00.txt` was also posted on `2026-08-31`. Section 16 notes that the implementations listed in the draft are single-author and open source, without external review or organizational adoption.",
   "track": "ietf",
   "version": {
    "label": "draft-hamr-oauth-agent-delegation-03",
    "date": "2026-10-22"
   },
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-hamr-oauth-agent-delegation"
    }
   ],
   "use_cases": [
    "delegate-user-authority",
    "audit-agent-actions",
    "prove-agent-identity"
   ],
   "audience": [
    "platform",
    "agent-builder",
    "standards-body"
   ],
   "pairs_with": [
    "http-message-signatures",
    "opena2a-aap",
    "identity-assertion-authz-grant",
    "workload-authz-grant",
    "oauth-id-continuation"
   ],
   "prerequisites": [
    "http-message-signatures"
   ],
   "ietf_tracker": {
    "doc": "draft-hamr-oauth-agent-delegation",
    "rev": "03",
    "state": "active",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-10-22",
    "expires_utc": "2027-04-25",
    "as_of": "2026-10-30",
    "source": "https://datatracker.ietf.org/doc/draft-hamr-oauth-agent-delegation/",
    "source_label": "per IETF Datatracker"
   },
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "identity_auth_crypto",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": null,
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**An Attenuated Delegation Profile for Automated Agents** (`draft-hamr-oauth-agent-delegation-03`) defines an HTTP header field, `Agent-Delegation`, that carries a chain of delegation links. [1] The draft header line reads Web Authorization Protocol A. Hassan Internet-Draft Independent, and it says Intended status: Standards Track. [1] Datatracker records Document Type Active Internet-Draft (individual) and Author Amr Hassan. This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. [2] The RFC stream is (None). Intended RFC status is (None). IESG state is I-D Exists. [2] `Agent-Delegation` carries a delegation chain from a Delegate to a Relying Service, or to the next Delegate in the chain. [1] Members are ordered from the root link (index zero) to the leaf link the immediate sender presents. [1] The immediate sender covers `Agent-Delegation` with an RFC 9421 signature, which binds the field to the request it accompanies. The draft defines no new signature mechanism. [1] A sender MUST set the `tag` parameter to the string `agent-delegation`, so that a verifier can identify a signature made under this profile. [1] Datatracker lists `draft-hamr-oauth-agent-delegation` as replacing `draft-hassan-oauth-agent-delegation`, last updated `2026-10-22`. [2] The Datatracker revision history records revision `03` (`draft-hamr-oauth-agent-delegation-03.txt`) on `2026-10-22`. [3] The draft says this Internet-Draft will expire on 25 April 2027. [1] The Datatracker document record lists revision `03` of `draft-hamr-oauth-agent-delegation` at 37 pages, expiring on `2027-04-25`. [4] The predecessor submission `draft-hassan-oauth-agent-delegation-00.txt` was posted on `2026-08-31`. [5] Initial revision `draft-hamr-oauth-agent-delegation-00.txt` was also posted on `2026-08-31`. [3] Section 16 notes that the implementations listed in the draft are single-author and open source, without external review or organizational adoption. [1]",
   "v05_identity_sentence_md": "**An Attenuated Delegation Profile for Automated Agents** (`draft-hamr-oauth-agent-delegation-03`) defines an HTTP header field, `Agent-Delegation`, that carries a chain of delegation links. [1] The draft header line reads Web Authorization Protocol A. Hassan Internet-Draft Independent, and it says Intended status: Standards Track. [1] Datatracker records Document Type Active Internet-Draft (individual) and Author Amr Hassan. This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. [2] The RFC stream is (None). Intended RFC status is (None). IESG state is I-D Exists. [2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Permit](/category/permit/) (`permit`)"
    },
    {
     "label": "Form",
     "value_md": "HTTP header (`http-header`)"
    },
    {
     "label": "Originated by",
     "value_md": "Amr Hassan (Independent, San Francisco; `2026-08-31` as `draft-hassan-*`) [1][3][5]"
    },
    {
     "label": "Governed by",
     "value_md": "Individual IETF submission (`IESG state: I-D Exists`, `RFC stream: (None)`; targets `2026-06-04` `oauth` WG charter) [1][2][4]"
    },
    {
     "label": "Track",
     "value_md": "Individual IETF Internet-Draft (`draft-hamr-oauth-agent-delegation-03`, Intended status: Standards Track) with companion reference repository (`hamr0/bareguard`) [1][2][6]"
    },
    {
     "label": "Status",
     "value_md": "\"Active Internet-Draft (individual)\"; \"IESG state I-D Exists\". \"This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process.\" is Datatracker's own wording. The draft says \"Intended status: Standards Track\". Its first header line reads \"Web Authorization Protocol A. Hassan\". That header line does not make it a working-group document: Datatracker files it as individual, as above. [1][2][4]"
    },
    {
     "label": "Version",
     "value_md": "`draft-hamr-oauth-agent-delegation-03` (`2026-10-22`, expires `2027-04-25`, 37 pages) [1][2][4]"
    },
    {
     "label": "Wire format",
     "value_md": "HTTP `Agent-Delegation` RFC 9651 List (`:BASE64-ENCODED-L0:, :BASE64-ENCODED-L1:`), signed links/attestations, and RFC 7515 JWS menus [1]"
    },
    {
     "label": "Specification",
     "value_md": "[draft-hamr-oauth-agent-delegation-03.txt](https://www.ietf.org/archive/id/draft-hamr-oauth-agent-delegation-03.txt) · [IETF Datatracker](https://datatracker.ietf.org/doc/draft-hamr-oauth-agent-delegation/) · [Companion `bareguard` Repo](https://github.com/hamr0/bareguard) [1][2][4][6]"
    },
    {
     "label": "Found at",
     "value_md": "`Agent-Delegation` (requested as `permanent` `List` in the IANA HTTP Field Name Registry; not yet registered), `Signature` / `Signature-Input` / `Accept-Signature` (RFC 9421), and JWS menus [1]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust provisions (BCP 78 / BCP 79); code components under the Revised BSD License [1]"
    },
    {
     "label": "IETF state",
     "value_md": "`draft-hamr-oauth-agent-delegation-03` · **Active Internet-Draft** (expires 2027-04-25) · Individual · as of 2026-10-30 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-hamr-oauth-agent-delegation/))"
    }
   ],
   "v05_problem_md": "RFC 9421 shows who signed a request. It does not show who the agent acts for, or what the agent may do. [1] API Providers already let a person limit what a credential may do, but each provider does it in its own way. These controls were built for a person who sets up a credential once and then uses it for a long time. A deployment can start a new agent for each job, and each job needs its own small scope. [1] Each link can only narrow the scope, floors, and expiry of the link before it, and a verifier checks every link. [1] Each call has one of three classes, read as in the chmod command: `r` reads and changes nothing; `w` changes something that a later call can set back; `x` cannot be undone, for example a delete, a payment, or a message sent. [1] The draft does not define a credential format, an identity system, or revocation. [1] A short expiry is the only limit on the life of a link. [1]",
   "v05_mechanism_delta_md": "Each link can only narrow the scope, floors, and expiry of the link before it, and a verifier checks every link. [1] Each call has one of three classes, read as in the chmod command: `r` reads and changes nothing; `w` changes something that a later call can set back; `x` cannot be undone, for example a delete, a payment, or a message sent. [1]",
   "v05_scope_boundary_md": "The draft does not define a credential format, an identity system, or revocation. [1] A short expiry is the only limit on the life of a link. [1]",
   "v05_fuzzy_additions": [
    {
     "id": "agent-delegation-header-and-the-rfc-9421-signature-profile",
     "heading": "Agent-Delegation header and the RFC 9421 signature profile",
     "body_md": "`draft-hamr-oauth-agent-delegation-03` carries an ordered chain of attenuated delegation links in the `Agent-Delegation` Structured Field List and binds each outbound HTTP request to the terminal holder key via an `RFC 9421` HTTP Message Signature tagged `agent-delegation`. [1]",
     "bullets": [
      {
       "label": "Covered signature parameters",
       "text_md": "A sender MUST include the `keyid`, `alg`, `created`, `expires`, and `nonce` parameters, and MUST include the `Agent-Delegation` field among the signature's covered components. [1]"
      },
      {
       "label": "Profile tag",
       "text_md": "A sender MUST set the `tag` parameter to the string `agent-delegation`, so that a verifier can identify a signature made under this profile. [1]"
      },
      {
       "label": "Separate expiry values",
       "text_md": "RFC 9421 leaves enforcement of `expires` to the application. This profile requires it: a verifier MUST reject a request whose signature `expires` value is earlier than the time of verification. Three expiry values stay separate. A link carries its own expiry. A floor attestation carries its own expiry. The `expires` parameter covers the HTTP message alone. [1]"
      },
      {
       "label": "Two nonce layers",
       "text_md": "The `nonce` parameter binds one HTTP message. The nonce inside a floor attestation binds one attestation to one verifier's question. They are two nonces at two layers, and implementers MUST NOT treat them as one. [1]"
      }
     ]
    },
    {
     "id": "attenuation-rules-action-classes-and-verification",
     "heading": "Attenuation rules, action classes, and verification",
     "body_md": "Each link in the chain monotonically narrows scope and enforces an `actionClass` ceiling (`r` < `w` < `x`) evaluated against HTTP method defaults or signed API menus, returning one uniform rejection response on any verification failure. [1]",
     "bullets": [
      {
       "label": "Scope containment",
       "text_md": "The scope granted by L(i) MUST be a subset of the scope granted by L(i-1). L(i) MUST NOT name a capability that L(i-1) did not itself hold. A capability string is OPAQUE to this profile: the draft defines no syntax, no internal structure, and no namespace for it. Comparison is by exact set containment. A verifier MUST NOT apply wildcard or prefix matching, hierarchical or namespace containment, case folding, Unicode normalization, or whitespace trimming. [1]"
      },
      {
       "label": "Action-class ceiling",
       "text_md": "`actionClass` is an ordered list, `r`, `w`, and `x`, ranked r < w < x. A link's `actionClass` is a ceiling on the whole link, not a statement about one call. A child link's `actionClass` MUST NOT be higher than its parent's. [1]"
      },
      {
       "label": "Method defaults and class source",
       "text_md": "Where `classSource` is `method`, the method gives a starting class, not the definition of the class: GET, HEAD, and OPTIONS default to `r`; PUT and PATCH default to `w`; DELETE, POST, and any other method default to `x`. A child link's `classSource` MUST NOT go from `method` to `declared`. The only permitted move is `declared` down to `method`. [1]"
      },
      {
       "label": "Uniform verification outcome",
       "text_md": "A failure at any step MUST produce one uniform rejection outcome, indistinguishable from the outcome of a failure at any other step. The root attestation key is obtained from a configured trust source and MUST NOT be obtained from the message itself. Every floor attestation carried by the chain has a yes result; reject if any is a signed no or a signed refusal. [1]"
      }
     ]
    }
   ],
   "v05_diagram": null,
   "v05_wire_artifact": {
    "title": "Agent-Delegation Structured Field",
    "heading": "Agent-Delegation Structured Field",
    "lang": "http",
    "code": "Agent-Delegation: :BASE64-ENCODED-L0:, :BASE64-ENCODED-L1:",
    "caption_md": "The field is a Structured Field: a List whose members are Byte Sequences, each member one opaque, encoded link. The draft does not mandate the credential format inside the link. The specimen line is `Agent-Delegation: :BASE64-ENCODED-L0:, :BASE64-ENCODED-L1:`. [1]"
   },
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "HTTP Message Signatures (RFC 9421)",
      "spec_or_rfc": "RFC 9421",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "The agent sends an Agent-Delegation header on a request signed with RFC 9421, and each link can only narrow the scope, floors, and expiry of the link before it. [1][7]"
     },
     {
      "name": "Biscuit authorization token specification",
      "spec_or_rfc": "Biscuit 2.0",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "A Biscuit attenuates authority inside one token, while Agent-Delegation attenuates across header links on the RFC 9421-signed request, and each call is classed r, w, or x. [1][8]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "http-message-signatures",
      "target_name": "HTTP Message Signatures",
      "relation_type": "builds_on",
      "relation_label": "Builds on",
      "delta_md": "RFC 9421 shows which key signed the request, and the Agent-Delegation header adds the chain of who the agent acts for, with each link narrowing scope, floors, and expiry. [1][9]"
     },
     {
      "target_id": "opena2a-aap",
      "target_name": "OpenA2A Agent Authorization Protocol",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "OpenA2A AAP defines six authorization components and asks IANA for an aap URI scheme, while this draft puts the attenuated chain in the Agent-Delegation header of an RFC 9421-signed request. [1][10]"
     },
     {
      "target_id": "identity-assertion-authz-grant",
      "target_name": "Identity Assertion JWT Authorization Grant (ID-JAG)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "An ID-JAG is the oauth-id-jag+jwt a client exchanges at a token endpoint with the jwt-bearer grant, and Agent-Delegation is the r, w, or x header chain on the later RFC 9421 request. [1][11]"
     },
     {
      "target_id": "workload-authz-grant",
      "target_name": "Workload Authorization Grant (WAG)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "The Workload Authorization Grant obtains an access token for the workload itself with the jwt-bearer grant, and Agent-Delegation carries the narrowed chain, with scope, floors, and expiry, on a signed request. [1][12]"
     },
     {
      "target_id": "oauth-id-continuation",
      "target_name": "Identity Continuation Assertion for OAuth 2.0 Token Exchange",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "Identity Continuation is the RFC 8693 subject token exchanged for a further ID-JAG, and Agent-Delegation is an HTTP header of r, w, and x links rather than a token-exchange subject token. [1][13]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": "`draft-hamr-oauth-agent-delegation-03` (an individual IETF Internet-Draft expiring `2027-04-25`) references author A. Hassan's open-source `hamr0/bareguard` and `hamr0/bareagent` companion tools; no independent third-party OAuth server or gateway deployments have been verified yet. [1][4][6]",
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "aagv",
     "target_name": "Agentic Authority Graph Validation",
     "relation_label": "Complements",
     "delta": "The Agent-Delegation header is one attenuated chain on a signed HTTP request, and AAGV exchanges a carrier-neutral JSON snapshot out of band.",
     "item_md": "**[Agentic Authority Graph Validation](/protocols/aagv/)** (Complements) — The Agent-Delegation header is one attenuated chain on a signed HTTP request, and AAGV exchanges a carrier-neutral JSON snapshot out of band."
    },
    {
     "target_id": "agent-authorization-envelope",
     "target_name": "Agent Authorization Envelope",
     "relation_label": "Peer alternative",
     "delta": "Agent-Delegation is an HTTP header of r, w, and x links on an RFC 9421-signed request, each link narrowing scope, floors, and expiry, while the envelope is a JWS-secured Verifiable Credential.",
     "item_md": "**[Agent Authorization Envelope](/protocols/agent-authorization-envelope/)** (Peer alternative) — Agent-Delegation is an HTTP header of r, w, and x links on an RFC 9421-signed request, each link narrowing scope, floors, and expiry, while the envelope is a JWS-secured Verifiable Credential."
    },
    {
     "item_md": "**[Permit protocols](/category/permit/)** — Category index for `permit` standards."
    }
   ],
   "v05_compiled_md": "---\nid: oauth-agent-delegation\ntitle: \"An Attenuated Delegation Profile for Automated Agents\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: permit\nform: http-header\nwire_archetype: identity_auth_crypto\nspec_url: https://www.ietf.org/archive/id/draft-hamr-oauth-agent-delegation-03.txt\nlast_checked: 2026-11-12\n---\n\n# An Attenuated Delegation Profile for Automated Agents\n\n**Category:** [Permit](/category/permit/) (`permit`) · **Form:** HTTP header (`http-header`) · **Last checked:** 2026-11-12\n\n**An Attenuated Delegation Profile for Automated Agents** (`draft-hamr-oauth-agent-delegation-03`) defines an HTTP header field, `Agent-Delegation`, that carries a chain of delegation links. [1] The draft header line reads Web Authorization Protocol A. Hassan Internet-Draft Independent, and it says Intended status: Standards Track. [1] Datatracker records Document Type Active Internet-Draft (individual) and Author Amr Hassan. This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. [2] The RFC stream is (None). Intended RFC status is (None). IESG state is I-D Exists. [2] `Agent-Delegation` carries a delegation chain from a Delegate to a Relying Service, or to the next Delegate in the chain. [1] Members are ordered from the root link (index zero) to the leaf link the immediate sender presents. [1] The immediate sender covers `Agent-Delegation` with an RFC 9421 signature, which binds the field to the request it accompanies. The draft defines no new signature mechanism. [1] A sender MUST set the `tag` parameter to the string `agent-delegation`, so that a verifier can identify a signature made under this profile. [1] Datatracker lists `draft-hamr-oauth-agent-delegation` as replacing `draft-hassan-oauth-agent-delegation`, last updated `2026-10-22`. [2] The Datatracker revision history records revision `03` (`draft-hamr-oauth-agent-delegation-03.txt`) on `2026-10-22`. [3] The draft says this Internet-Draft will expire on 25 April 2027. [1] The Datatracker document record lists revision `03` of `draft-hamr-oauth-agent-delegation` at 37 pages, expiring on `2027-04-25`. [4] The predecessor submission `draft-hassan-oauth-agent-delegation-00.txt` was posted on `2026-08-31`. [5] Initial revision `draft-hamr-oauth-agent-delegation-00.txt` was also posted on `2026-08-31`. [3] Section 16 notes that the implementations listed in the draft are single-author and open source, without external review or organizational adoption. [1]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Permit](/category/permit/) (`permit`) |\n| **Form** | HTTP header (`http-header`) |\n| **Originated by** | Amr Hassan (Independent, San Francisco; `2026-08-31` as `draft-hassan-*`) [1][3][5] |\n| **Governed by** | Individual IETF submission (`IESG state: I-D Exists`, `RFC stream: (None)`; targets `2026-06-04` `oauth` WG charter) [1][2][4] |\n| **Track** | Individual IETF Internet-Draft (`draft-hamr-oauth-agent-delegation-03`, Intended status: Standards Track) with companion reference repository (`hamr0/bareguard`) [1][2][6] |\n| **Status** | \"Active Internet-Draft (individual)\"; \"IESG state I-D Exists\". \"This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process.\" is Datatracker's own wording. The draft says \"Intended status: Standards Track\". Its first header line reads \"Web Authorization Protocol A. Hassan\". That header line does not make it a working-group document: Datatracker files it as individual, as above. [1][2][4] |\n| **Version** | `draft-hamr-oauth-agent-delegation-03` (`2026-10-22`, expires `2027-04-25`, 37 pages) [1][2][4] |\n| **Wire format** | HTTP `Agent-Delegation` RFC 9651 List (`:BASE64-ENCODED-L0:, :BASE64-ENCODED-L1:`), signed links/attestations, and RFC 7515 JWS menus [1] |\n| **Specification** | [draft-hamr-oauth-agent-delegation-03.txt](https://www.ietf.org/archive/id/draft-hamr-oauth-agent-delegation-03.txt) · [IETF Datatracker](https://datatracker.ietf.org/doc/draft-hamr-oauth-agent-delegation/) · [Companion `bareguard` Repo](https://github.com/hamr0/bareguard) [1][2][4][6] |\n| **Found at** | `Agent-Delegation` (requested as `permanent` `List` in the IANA HTTP Field Name Registry; not yet registered), `Signature` / `Signature-Input` / `Accept-Signature` (RFC 9421), and JWS menus [1] |\n| **Licence** | IETF Trust provisions (BCP 78 / BCP 79); code components under the Revised BSD License [1] |\n| **IETF state** | `draft-hamr-oauth-agent-delegation-03` · **Active Internet-Draft** (expires 2027-04-25) · Individual · as of 2026-10-30 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-hamr-oauth-agent-delegation/)) |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Agent-Delegation header and the RFC 9421 signature profile](#agent-delegation-header-and-the-rfc-9421-signature-profile)\n3. [Attenuation rules, action classes, and verification](#attenuation-rules-action-classes-and-verification)\n4. [Counterparts and related standards](#counterparts-and-related-standards)\n5. [Adoption and ecosystem](#adoption-and-ecosystem)\n6. [See also](#see-also)\n7. [References](#references)\n\n---\n\n## Problem and scope\n\nRFC 9421 shows who signed a request. It does not show who the agent acts for, or what the agent may do. [1] API Providers already let a person limit what a credential may do, but each provider does it in its own way. These controls were built for a person who sets up a credential once and then uses it for a long time. A deployment can start a new agent for each job, and each job needs its own small scope. [1] Each link can only narrow the scope, floors, and expiry of the link before it, and a verifier checks every link. [1] Each call has one of three classes, read as in the chmod command: `r` reads and changes nothing; `w` changes something that a later call can set back; `x` cannot be undone, for example a delete, a payment, or a message sent. [1] The draft does not define a credential format, an identity system, or revocation. [1] A short expiry is the only limit on the life of a link. [1]\n\n### Agent-Delegation Structured Field\n\n```http\nAgent-Delegation: :BASE64-ENCODED-L0:, :BASE64-ENCODED-L1:\n```\n\n*The field is a Structured Field: a List whose members are Byte Sequences, each member one opaque, encoded link. The draft does not mandate the credential format inside the link. The specimen line is `Agent-Delegation: :BASE64-ENCODED-L0:, :BASE64-ENCODED-L1:`. [1]*\n\n---\n\n## Agent-Delegation header and the RFC 9421 signature profile\n\n`draft-hamr-oauth-agent-delegation-03` carries an ordered chain of attenuated delegation links in the `Agent-Delegation` Structured Field List and binds each outbound HTTP request to the terminal holder key via an `RFC 9421` HTTP Message Signature tagged `agent-delegation`. [1]\n\n- **Covered signature parameters:** A sender MUST include the `keyid`, `alg`, `created`, `expires`, and `nonce` parameters, and MUST include the `Agent-Delegation` field among the signature's covered components. [1]\n- **Profile tag:** A sender MUST set the `tag` parameter to the string `agent-delegation`, so that a verifier can identify a signature made under this profile. [1]\n- **Separate expiry values:** RFC 9421 leaves enforcement of `expires` to the application. This profile requires it: a verifier MUST reject a request whose signature `expires` value is earlier than the time of verification. Three expiry values stay separate. A link carries its own expiry. A floor attestation carries its own expiry. The `expires` parameter covers the HTTP message alone. [1]\n- **Two nonce layers:** The `nonce` parameter binds one HTTP message. The nonce inside a floor attestation binds one attestation to one verifier's question. They are two nonces at two layers, and implementers MUST NOT treat them as one. [1]\n\n---\n\n## Attenuation rules, action classes, and verification\n\nEach link in the chain monotonically narrows scope and enforces an `actionClass` ceiling (`r` < `w` < `x`) evaluated against HTTP method defaults or signed API menus, returning one uniform rejection response on any verification failure. [1]\n\n- **Scope containment:** The scope granted by L(i) MUST be a subset of the scope granted by L(i-1). L(i) MUST NOT name a capability that L(i-1) did not itself hold. A capability string is OPAQUE to this profile: the draft defines no syntax, no internal structure, and no namespace for it. Comparison is by exact set containment. A verifier MUST NOT apply wildcard or prefix matching, hierarchical or namespace containment, case folding, Unicode normalization, or whitespace trimming. [1]\n- **Action-class ceiling:** `actionClass` is an ordered list, `r`, `w`, and `x`, ranked r < w < x. A link's `actionClass` is a ceiling on the whole link, not a statement about one call. A child link's `actionClass` MUST NOT be higher than its parent's. [1]\n- **Method defaults and class source:** Where `classSource` is `method`, the method gives a starting class, not the definition of the class: GET, HEAD, and OPTIONS default to `r`; PUT and PATCH default to `w`; DELETE, POST, and any other method default to `x`. A child link's `classSource` MUST NOT go from `method` to `declared`. The only permitted move is `declared` down to `method`. [1]\n- **Uniform verification outcome:** A failure at any step MUST produce one uniform rejection outcome, indistinguishable from the outcome of a failure at any other step. The root attestation key is obtained from a configured trust source and MUST NOT be obtained from the message itself. Every floor attestation carried by the chain has a yes result; reject if any is a signed no or a signed refusal. [1]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **HTTP Message Signatures (RFC 9421)** | `RFC 9421` | Profiles classic standard | The agent sends an Agent-Delegation header on a request signed with RFC 9421, and each link can only narrow the scope, floors, and expiry of the link before it. [1][7] |\n| **Biscuit authorization token specification** | `Biscuit 2.0` | Analogous to classic standard | A Biscuit attenuates authority inside one token, while Agent-Delegation attenuates across header links on the RFC 9421-signed request, and each call is classed r, w, or x. [1][8] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[HTTP Message Signatures](/protocols/http-message-signatures/)** | Builds on | RFC 9421 shows which key signed the request, and the Agent-Delegation header adds the chain of who the agent acts for, with each link narrowing scope, floors, and expiry. [1][9] |\n| **[OpenA2A Agent Authorization Protocol](/protocols/opena2a-aap/)** | Peer alternative | OpenA2A AAP defines six authorization components and asks IANA for an aap URI scheme, while this draft puts the attenuated chain in the Agent-Delegation header of an RFC 9421-signed request. [1][10] |\n| **[Identity Assertion JWT Authorization Grant (ID-JAG)](/protocols/identity-assertion-authz-grant/)** | Complements | An ID-JAG is the oauth-id-jag+jwt a client exchanges at a token endpoint with the jwt-bearer grant, and Agent-Delegation is the r, w, or x header chain on the later RFC 9421 request. [1][11] |\n| **[Workload Authorization Grant (WAG)](/protocols/workload-authz-grant/)** | Complements | The Workload Authorization Grant obtains an access token for the workload itself with the jwt-bearer grant, and Agent-Delegation carries the narrowed chain, with scope, floors, and expiry, on a signed request. [1][12] |\n| **[Identity Continuation Assertion for OAuth 2.0 Token Exchange](/protocols/oauth-id-continuation/)** | Complements | Identity Continuation is the RFC 8693 subject token exchanged for a further ID-JAG, and Agent-Delegation is an HTTP header of r, w, and x links rather than a token-exchange subject token. [1][13] |\n\n---\n\n## Adoption and ecosystem\n\n`draft-hamr-oauth-agent-delegation-03` (an individual IETF Internet-Draft expiring `2027-04-25`) references author A. Hassan's open-source `hamr0/bareguard` and `hamr0/bareagent` companion tools; no independent third-party OAuth server or gateway deployments have been verified yet. [1][4][6]\n\n---\n\n## See also\n\n- **[Agentic Authority Graph Validation](/protocols/aagv/)** *(Complements)* — The Agent-Delegation header is one attenuated chain on a signed HTTP request, and AAGV exchanges a carrier-neutral JSON snapshot out of band.\n- **[Agent Authorization Envelope](/protocols/agent-authorization-envelope/)** *(Peer alternative)* — Agent-Delegation is an HTTP header of r, w, and x links on an RFC 9421-signed request, each link narrowing scope, floors, and expiry, while the envelope is a JWS-secured Verifiable Credential.\n- **Category:** [Permit protocols](/category/permit/)\n\n---\n\n## References\n\n1. Amr Hassan (Independent), *An Attenuated Delegation Profile for Automated Agents (draft-hamr-oauth-agent-delegation-03)* (checked 2026-10-30) — <https://www.ietf.org/archive/id/draft-hamr-oauth-agent-delegation-03.txt>\n2. A. Hassan (Independent), *An Attenuated Delegation Profile for Automated Agents (draft-hamr-oauth-agent-delegation)* (checked 2026-10-30) — <https://datatracker.ietf.org/doc/draft-hamr-oauth-agent-delegation/>\n3. IETF Datatracker API, *Revision events for draft-hamr-oauth-agent-delegation* (checked 2026-10-30) — <https://datatracker.ietf.org/api/v1/doc/newrevisiondocevent/?doc__name=draft-hamr-oauth-agent-delegation&format=json>\n4. IETF Datatracker API, *IETF Datatracker document record for draft-hamr-oauth-agent-delegation* (checked 2026-10-30) — <https://datatracker.ietf.org/api/v1/doc/document/draft-hamr-oauth-agent-delegation/>\n5. IETF Datatracker API, *Revision events for predecessor draft-hassan-oauth-agent-delegation* (checked 2026-10-30) — <https://datatracker.ietf.org/api/v1/doc/newrevisiondocevent/?doc__name=draft-hassan-oauth-agent-delegation&format=json>\n6. Amr Hassan (hamr0/bareguard), *bareguard — Deterministic Action Gate Companion* (checked 2026-11-12) — <https://raw.githubusercontent.com/hamr0/bareguard/main/README.md>\n7. A. Backman, Ed., J. Richer, Ed., and M. Sporny, *RFC 9421: HTTP Message Signatures* (February 2024) — <https://www.rfc-editor.org/rfc/rfc9421.html>\n8. Biscuit Authorization, *Biscuit 2.0 Specification* (fetched 2026-11-12) — <https://raw.githubusercontent.com/biscuit-auth/biscuit/master/SPECIFICATIONS.md>\n9. IETF Datatracker, *HTTP Message Signatures (RFC 9421)* (Proposed Standard (February 2024); checked 2026-10-30) — <https://datatracker.ietf.org/doc/rfc9421/>\n10. A. Fane (OpenA2A), *OpenA2A Agent Authorization Protocol (AAP) (draft-fane-opena2a-aap-02)* (30 September 2026) — <https://www.ietf.org/archive/id/draft-fane-opena2a-aap-02.txt>\n11. Aaron Parecki, Karl McGuinness, and Brian Campbell (IETF Web Authorization Protocol Working Group), *draft-ietf-oauth-identity-assertion-authz-grant — Identity Assertion JWT Authorization Grant (IETF Datatracker)* (checked 2026-11-08) — <https://datatracker.ietf.org/doc/draft-ietf-oauth-identity-assertion-authz-grant/>\n12. Paul Carleton (Anthropic), Nick Steele (OpenAI), Aaron Parecki (Okta), Arndt Schwenkschuster (Defakto Security), and Brian Campbell (Ping Identity), *draft-carleton-workload-authz-grant — Workload Authorization Grant (IETF Datatracker)* (checked 2026-11-08) — <https://datatracker.ietf.org/doc/draft-carleton-workload-authz-grant/>\n13. K. McGuinness (Independent) and A. Parecki (Okta), *Identity Continuation Assertion for OAuth 2.0 Token Exchange (draft-mcguinness-oauth-id-continuation-assertion-02)* (draft-02, 9 September 2026; expires 13 March 2027) — <https://www.ietf.org/archive/id/draft-mcguinness-oauth-id-continuation-assertion-02.txt>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "AAP",
   "adoption": {
    "level": "unmeasured",
    "by": null,
    "probe_run": null
   },
   "aliases": [
    "OpenA2A AAP",
    "draft-fane-opena2a-aap",
    "Agent Authorization Protocol (OpenA2A)"
   ],
   "analog": "A token that says which agent is acting, what it may do, and who delegated that authority",
   "collisions": [
    "Agent Authorization Profile (draft-aap-oauth-profile-01), the expired individual draft recorded as aap",
    "Agent Attribution Protocol, an unrelated use of the AAP acronym"
   ],
   "discovery": {
    "mechanism": "Token model for identity, grants, delegation, attestation, federation, and revocation. The named broker layer is not specified in this draft, and no well-known file is defined.",
    "path": "No well-known path. The draft asks IANA for a URI scheme: \"This document requests registration of the “aap” URI scheme in the Uniform Resource Identifier (URI) Schemes registry\""
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://datatracker.ietf.org/doc/draft-fane-opena2a-aap/",
     "claim": "A. Fane (OpenA2A), *draft-fane-opena2a-aap status page*, checked 2026-10-30",
     "date": null,
     "quote": "# OpenA2A Agent Authorization Protocol (AAP) draft-fane-opena2a-aap-02 * Status * Email expansions * History / Active Internet-Draft (individual) | | Author | | Abdel Fane | | Last updated | 2026-10-02 | | RFC stream | | (None) | | Intended RFC status | | (None) / This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. / 00 | Abdel Fane | New version available: draft-fane-opena2a-aap-00.txt | | 2026-07-06 | 00 / 2027 OpenA2A Agent Authorization Protocol (AAP) draft-fane-opena2a-aap-02 Abstract This document defines the OpenA2A Agent / yet Fane Expires 3 April 2027 [Page 19] Internet-Draft AAP September 2026 verify the / ML-DSA-65. The aap-conformance suite AAP-CONFORMANCE exercises the hybrid profile with the fixtures: cgt-hybrid-general-valid.json cgt-hybrid-missing-ed25519.json",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://www.ietf.org/archive/id/draft-fane-opena2a-aap-02.txt",
     "claim": "A. Fane (OpenA2A), *OpenA2A Agent Authorization Protocol (AAP) (draft-fane-opena2a-aap-02)*, 30 September 2026",
     "date": null,
     "quote": "This document defines the OpenA2A Agent Authorization Protocol (AAP), a protocol for authorization in AI agent systems. AAP provides mechanisms for agent identity assertion, scoped capability grants, cross-agent delegation, behavioral attestation, cross-organizational federation, and revocation propagation. / AAP is the authorization complement to agent communication protocols such as A2A and the Model Context Protocol, in the same way that OAuth 2.0 complements HTTP for web applications. / Individual Submission A. Fane Internet-Draft OpenA2A Intended status: Standards Track 30 September 2026 Expires: 3 April 2027 / OpenA2A Agent Authorization Protocol (AAP) draft-fane-opena2a-aap-02 / It is presented by an agent to identify itself to other agents, services, and infrastructure. An AIT is an identity assertion only; it conveys no authorization / In a broker deployment the CGT is used as the OAuth 2.0 Token Exchange [RFC8693] \"subject_token\" with a \"subject_token_type\" of \"urn:ietf:params:oauth:token-type:jwt\", so the downstream authorization server verifies it as a standard JWT against the broker's published key material. / A delegatee's capability scope MUST NOT exceed the delegator's scope. / This revision adds a structured, mandatory-to-understand \"authorization_details\" claim with a typed entry registry and a per-type attenuation relation for delegation, an \"aap_crit\" claim naming the claims a verifier must understand, a \"cnf\" claim binding a token to the presenter's key, a session label in the behavioral attestation claim, and a local grant revocation list. / The \"fga_constraints\" claim of the previous revisions is deprecated: it is replaced by \"authorization_details\" / Intended status: Standards Track / Standards Track 30 September 2026 Expires: 3 April 2027 OpenA2A Agent Authorization Protocol (AAP) / General JSON Serialization (RFC7515, Section 7.2.1), pinned by \"schemas/jws-general-v1.schema.json\":one \"signatures\" entry per suite, each / Internet- Drafts is at https://datatracker.ietf.org/drafts/current/. Fane Expires 3 April 2027 [Page 1] Internet-Draft AAP / This document requests registration of the \"aap\" URI scheme in the Uniform Resource Identifier (URI) Schemes registry, and, via the broker profile [AAP-BROKER-PROFILE], the \"grant\" URI scheme. / status: Standards Track 30 September 2026 Expires: 3 April 2027 OpenA2A Agent Authorization Protocol / AI agent systems present authorization challenges that existing protocols such as OAuth 2.0 [RFC6749], SAML, and OpenID Connect were not designed to address. Agents are non-deterministic: the same agent with identical permissions can behave differently depending on its inputs, conversation history, and model state. Static authorization grants cannot account for this behavioral variability. / A second, agent-specific hazard is credential exposure. An autonomous agent that holds a secret in its reasoning context can be induced, through prompt injection or tool-output poisoning, to disclose or misuse it. / Where AAP is deployed via a broker, no credential value, temporary token, or backend identifier may enter an agent's reasoning context. / The BAC is a short-lived signed assertion of an agent's current behavioral state, with a time-to-live on the order of 60 seconds. It has no direct parallel in existing web protocols; it exists because agents are non-deterministic. / The validity window MUST satisfy \"exp\" minus \"iat\" less than or equal to 60 seconds. / Authorization exists only where a local policy grants it. Brokers MUST default-deny. / AAP has two layers. The token model, defined in this document, specifies the AAP credentials and assertions: what they contain, how they are signed, and how they are verified. A companion broker and resolution layer specifies how an agent obtains and exercises a grant without the credential value ever entering the agent's reasoning context. / The following generated claim set carries one \"data\" entry, one \"budget\" entry, \"aap_crit\", and \"cnf\" / The \"authorization_details\" claim is the claim of that name defined in [RFC9396]: an array of objects, each with a REQUIRED \"type\" member / \"cnf\" MUST be listed whenever it is present, because a verifier that ignores \"cnf\" accepts the token as a bearer token. / The \"authorization_details\" claim is the claim of that name defined in [RFC9396]: an array of objects, each with a REQUIRED \"type\" member naming an entry type from the registry below, plus the members that type defines. It is the structured, fine-grained form of the grant. It is mandatory to understand: whenever it is present it MUST be named in \"aap_crit\" (Section 4.2), and a verifier that does not implement it MUST reject the token. / The \"aap_crit\" claim is an array of claim names the verifier MUST understand in order to accept the token. A verifier that encounters a name in \"aap_crit\" that it does not implement MUST reject the token. A verifier MUST also reject a token whose \"aap_crit\" names a claim that is not present in the token, and a token whose \"aap_crit\" is present but empty. \"aap_crit\" MUST NOT name the baseline claims listed above. \"authorization_details\" MUST be listed whenever it is present. \"cnf\" MUST be listed whenever it is present, because a verifier that ignores \"cnf\" accepts the token as a bearer token. / \"cnf\" carries exactly one of \"jwk\" (the public key itself, per [RFC7800]) or \"jkt\" / \"cnf\" is REQUIRED on every CGT or DA that is presented by an agent to any party other than the broker that minted it. On a local socket binding, where the token never leaves the minting broker and the presenter is bound by operating system peer credentials, \"cnf\" MAY be omitted. A verifier that receives a token with \"cnf\" MUST verify the presenter's proof against the bound key and MUST reject the token otherwise. As of the date of this revision no known implementation mints \"cnf\", and the reference broker binds no presentation. / A CGT has a bounded time-to-live. This document defines three tiers; profiles MAY define others: / SUPER_PRIVILEGED 15 minutes, no renewal; human approval REQUIRED. / For \"authorization_details\" this is made mechanical by a \"narrower than or equal to\" relation defined per entry type. / with \"subDelegationDepth\" strictly less because the delegatee is one delegation deeper / A DA is valid only if every entry in its \"authorization_details\" is narrower than or equal to some entry of the same type in the delegator's \"authorization_details\", and no entry lacks such a parent. An orphan entry makes the DA invalid. The delegatee's array MAY hold fewer entries than the delegator's. When a chain is present, the relation is checked link by link. / identity members (\"serverId\", \"serverAtx\", \"identifier\", \"version\", \"contentHash\", \"schemaHash\", \"peerDid\", \"endpoint\") are equal, and a hash the delegator left open MAY be pinned by the delegatee ... allow-set members (\"locations\", \"actions\", \"datatypes\", \"privileges\", \"tools\", \"models\", \"destinations\", \"direction\", \"fieldsAllowed\", \"labelCeiling\", \"egressCeiling\") are a subset, where an absent allow set in the delegator means unbounded except for ... \"labelCeiling\" and \"egressCeiling\", where absent means the empty set, and an absent allow set in the delegatee inherits the delegator's value ... deny-set members (\"fieldsDenied\") are a superset ... bound members (\"subDelegationDepth\", \"maxUses\", \"concurrency\", the \"max\" of \"rate\", the \"amount\" of \"spend\" in the same currency, and the members of \"tokenCap\") are less than or equal, with the \"windowSeconds\" of \"rate\" greater than or equal for the same or a smaller \"max\" ... with \"subDelegationDepth\" strictly less because the delegatee is one delegation deeper / The minting broker MUST check the relation at mint time; a verifier that can resolve the delegator's grant MUST re-check it; a verifier that cannot MUST NOT treat the DA as carrying more than its own entries state. / A DA's \"max_depth\" MUST NOT exceed the \"subDelegationDepth\" of the delegator's \"peer_agent\" entry whose \"peerDid\" is the DA's \"sub\", when such an entry exists; a \"max_depth\" of 0 is a terminal delegation.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://datatracker.ietf.org/doc/draft-fane-opena2a-aap/history/",
     "claim": "A. Fane (OpenA2A), *draft-fane-opena2a-aap history*, checked 2026-10-30",
     "date": null,
     "quote": "2026-10-02 | 02 | Abdel Fane | New version available: draft-fane-opena2a-aap-02.txt ... 2026-07-22 | 01 | Abdel Fane | New version available: draft-fane-opena2a-aap-01.txt ... 2026-07-06 | 00 | Abdel Fane | New version available: draft-fane-opena2a-aap-00.txt / 2026-10-02 | 02 | Abdel Fane | New version available: draft-fane-opena2a-aap-02.txt / # OpenA2A Agent Authorization Protocol (AAP) draft-fane-opena2a-aap-02 * Status * Email expansions * History",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://specs.opena2a.org/specs/aap",
     "claim": "OpenA2A, *AAP specification page*, checked 2026-10-30",
     "date": null,
     "quote": "AAP is filed as draft-fane-opena2a-aap-02 (filed 2026-10-02 ), an individual IETF Internet-Draft with intended status Standards Track. The v1 reference implementation targets Level 1 with the Exchange mode. / AAP is filed as draft-fane-opena2a-aap-02 (filed 2026-10-02 ), an individual IETF Internet-Draft with intended status Standards Track. / An authorization layer where an agent emits an abstract grant:// reference and a local broker resolves scoped access, so no secret, token, or backend name ever enters the model's context. / AAP: Agent Authorization Protocol | OpenA2A Specs {\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"OpenA2A Specs\",\"url\":\"https://specs.opena2a.org\",\"description\":\"A plain-language, visual guide to the / be resolved. AAP-BROKER-PROFILE, grant referencetext grant-reference = \"grant://\" grant-name; e.g. grant://orders-db # A grant",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://github.com/opena2a-standards/agent-authorization-protocol",
     "claim": "opena2a-standards, *agent-authorization-protocol repository metadata*, checked 2026-10-30",
     "date": null,
     "quote": "\"full_name\": \"opena2a-standards/agent-authorization-protocol\" / { \"id\": 1256405858, \"node_id\": \"R_kgDOSuM7Yg\", \"name\": \"agent-authorization-protocol\", \"full_name\": \"opena2a-standards/agent-authorization-protocol\", \"private\": false, \"owner\": { \"login\":",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://github.com/opena2a-org/secretless-ai/commit/055bbbf92f1c451bca93c6f8515fe1c02a917b84",
     "claim": "opena2a-org, *secretless-ai commit 055bbbf, AAP v1 Exchange broker*, checked 2026-10-30",
     "date": null,
     "quote": "v1 reference implementation of the Agent Authorization Protocol, extending the existing Secretless broker. An agent emits a grant reference; the broker verifies the ATX, authorizes via local policy, mints a broker assertion, performs an RFC 8693 token exchange for a scoped downstream token, runs the operation in an ephemeral worker, and returns ONLY the result. / v1 reference implementation of the Agent Authorization Protocol, extending the existing Secretless broker.",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://www.rfc-editor.org/rfc/rfc7519.html",
     "claim": "M. Jones, J. Bradley, and N. Sakimura, *RFC 7519: JSON Web Token (JWT)*, May 2015",
     "date": null,
     "quote": "JSON Web Token (JWT) is a compact, URL-safe means of representing",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://www.rfc-editor.org/rfc/rfc6749.html",
     "claim": "D. Hardt, Ed., *RFC 6749: The OAuth 2.0 Authorization Framework*, October 2012",
     "date": null,
     "quote": "The OAuth 2.0 authorization framework enables a third-party",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://www.ietf.org/archive/id/draft-aap-oauth-profile-01.txt",
     "claim": "A. Cruz (Independent), *Agent Authorization Profile (AAP) for OAuth 2.0 (draft-aap-oauth-profile-01)*, checked 2026-10-31",
     "date": null,
     "quote": "Expires 11 August 2026 [Page 56] Internet-Draft AAP for OAuth 2.0 February 2026 16.7.",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://aaif.io/blog/a2a-joins-aaif",
     "claim": "Agentic AI Foundation, *A2A joins AAIF's open agentic stack*, published 2026-08-17; modified 2026-09-24",
     "date": null,
     "quote": "A2A v1.0, the first stable specification, shipped in March 2026.",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning",
     "claim": "Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation*, 2026-07-28",
     "date": "2026-07-28",
     "quote": "Current : the current protocol version, which is ready for use and may continue to receive backwards compatible changes.",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://www.ietf.org/archive/id/draft-hamr-oauth-agent-delegation-03.txt",
     "claim": "Amr Hassan (Independent), *An Attenuated Delegation Profile for Automated Agents (draft-hamr-oauth-agent-delegation-03)*, checked 2026-10-30",
     "date": null,
     "quote": "Vectors appendix of draft-hamr-oauth-agent-delegation-01 (https://datatracker.ietf.org/doc/html/draft-hamr-oauth-agent-delegation-01). There, V10 and V11 use writeBudget 2; in this",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://datatracker.ietf.org/doc/draft-carleton-workload-authz-grant/",
     "claim": "Paul Carleton (Anthropic), Nick Steele (OpenAI), Aaron Parecki (Okta), Arndt Schwenkschuster (Defakto Security), and Brian Campbell (Ping Identity), *draft-carleton-workload-authz-grant — Workload Authorization Grant (IETF Datatracker)*, checked 2026-11-08",
     "date": null,
     "quote": "Active Internet-Draft (individual)",
     "ref": 13
    }
   ],
   "form": "document-format",
   "governance": "Its author, A. Fane of OpenA2A. Datatracker shows \"RFC stream (None) Intended RFC status (None)\"",
   "group": null,
   "history": [
    {
     "date": "2026-10-20",
     "note": "added from staged research 2026-10-20; header read from draft-fane-opena2a-aap-02. Kept separate from the expired aap record (draft-aap-oauth-profile-01)."
    },
    {
     "date": "2026-10-30",
     "note": "Updated IETF Internet-Draft tracker metadata and document status."
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "opena2a-aap",
   "implementation": "prototype",
   "last_verified": "2026-11-12",
   "name": "OpenA2A Agent Authorization Protocol",
   "native_status": "See IETF tracker.",
   "origin": {
    "org": "A. Fane, OpenA2A",
    "date": "2026-07-06"
   },
   "part_of": null,
   "parties": [
    "agent-agent",
    "agent-site"
   ],
   "phase": "draft",
   "probe": {
    "method": "n/a",
    "path": "n/a (token model; the broker layer is named and not specified)",
    "parse": "n/a. The draft specifies a token model. It does not define a fixed path to fetch.",
    "on_absent": "No public artifact is defined, so absence at an origin is expected."
   },
   "question": "How does an agent present identity, a scoped grant, a delegation, and an attestation when it calls another agent or a tool?",
   "scope": "general",
   "spec_url": "https://datatracker.ietf.org/doc/draft-fane-opena2a-aap/",
   "step": "permit",
   "summary_md": "**OpenA2A Agent Authorization Protocol** (`AAP`) is a protocol for authorization in AI agent systems. It provides mechanisms for agent identity assertion, scoped capability grants, cross-agent delegation, behavioral attestation, cross-organizational federation, and revocation propagation. `AAP` is the authorization complement to agent communication protocols such as A2A and the Model Context Protocol. `draft-fane-opena2a-aap-02` is an individual submission by A. Fane of OpenA2A, with intended status Standards Track. The title page is dated 30 September 2026, and the draft expires on 3 April 2027. Datatracker lists an Active Internet-Draft (individual) by Abdel Fane, last updated `2026-10-02`, with RFC stream (None) and Intended RFC status (None). This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. An agent presents an AIT to identify itself to other agents, services, and infrastructure. An AIT is an identity assertion only; it conveys no authorization. In a broker deployment the CGT is used as the OAuth 2.0 Token Exchange `subject_token`, with a `subject_token_type` of `urn:ietf:params:oauth:token-type:jwt`. The downstream authorization server verifies it as a standard JWT against the broker's published key material. A delegatee's capability scope MUST NOT exceed the delegator's scope. Datatracker history records `draft-fane-opena2a-aap-02` on `2026-10-02`, `draft-fane-opena2a-aap-01` on `2026-07-22`, and `draft-fane-opena2a-aap-00` on `2026-07-06`. This revision adds mandatory-to-understand `authorization_details`, `aap_crit`, and `cnf`, a session label in the behavioral attestation claim, and a local grant revocation list. The `fga_constraints` claim of the previous revisions is deprecated: it is replaced by `authorization_details`.",
   "track": "ietf",
   "version": {
    "label": "draft-fane-opena2a-aap-02",
    "date": "2026-10-02"
   },
   "watch": [
    {
     "type": "ietf",
     "doc": "draft-fane-opena2a-aap"
    }
   ],
   "use_cases": [
    "delegate-user-authority",
    "prove-agent-identity",
    "audit-agent-actions"
   ],
   "audience": [
    "agent-builder",
    "platform",
    "standards-body"
   ],
   "pairs_with": [
    "aap",
    "a2a",
    "mcp",
    "oauth-agent-delegation",
    "workload-authz-grant"
   ],
   "prerequisites": [],
   "freshness": "current",
   "hatnote_md": "This page is about the OpenA2A Agent Authorization Protocol, an Internet-Draft by A. Fane of OpenA2A. For the unrelated expired draft with the same acronym, see [Agent Authorization Profile](/protocols/aap/).",
   "ietf_tracker": {
    "doc": "draft-fane-opena2a-aap",
    "rev": "02",
    "state": "active",
    "stream": null,
    "group_type": "Individual",
    "wg": null,
    "replaced_by": null,
    "posted_utc": "2026-09-30",
    "expires_utc": "2027-04-03",
    "as_of": "2026-10-30",
    "source": "https://datatracker.ietf.org/doc/draft-fane-opena2a-aap/",
    "source_label": "per IETF Datatracker"
   },
   "tier": "spec_brief",
   "lifecycle_status": "active_draft",
   "wire_archetype": "identity_auth_crypto",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-12",
   "v05_hatnote_html_md": "This page is about the OpenA2A Agent Authorization Protocol, an Internet-Draft by A. Fane of OpenA2A. For the unrelated expired draft with the same acronym, see [Agent Authorization Profile](/protocols/aap/). [1]",
   "v05_elevator_pitch_md": null,
   "v05_lead_md": "**OpenA2A Agent Authorization Protocol** (`AAP`) is a protocol for authorization in AI agent systems. It provides mechanisms for agent identity assertion, scoped capability grants, cross-agent delegation, behavioral attestation, cross-organizational federation, and revocation propagation. [2] `AAP` is the authorization complement to agent communication protocols such as A2A and the Model Context Protocol. [2] `draft-fane-opena2a-aap-02` is an individual submission by A. Fane of OpenA2A, with intended status Standards Track. The title page is dated 30 September 2026, and the draft expires on 3 April 2027. [2] Datatracker lists an Active Internet-Draft (individual) by Abdel Fane, last updated `2026-10-02`, with RFC stream (None) and Intended RFC status (None). This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. [1] An agent presents an AIT to identify itself to other agents, services, and infrastructure. An AIT is an identity assertion only; it conveys no authorization. [2] In a broker deployment the CGT is used as the OAuth 2.0 Token Exchange `subject_token`, with a `subject_token_type` of `urn:ietf:params:oauth:token-type:jwt`. The downstream authorization server verifies it as a standard JWT against the broker's published key material. [2] A delegatee's capability scope MUST NOT exceed the delegator's scope. [2] Datatracker history records `draft-fane-opena2a-aap-02` on `2026-10-02`, `draft-fane-opena2a-aap-01` on `2026-07-22`, and `draft-fane-opena2a-aap-00` on `2026-07-06`. [3] This revision adds mandatory-to-understand `authorization_details`, `aap_crit`, and `cnf`, a session label in the behavioral attestation claim, and a local grant revocation list. [2] The `fga_constraints` claim of the previous revisions is deprecated: it is replaced by `authorization_details`. [2]",
   "v05_identity_sentence_md": "**OpenA2A Agent Authorization Protocol** (`AAP`) is a protocol for authorization in AI agent systems. It provides mechanisms for agent identity assertion, scoped capability grants, cross-agent delegation, behavioral attestation, cross-organizational federation, and revocation propagation. [2] `AAP` is the authorization complement to agent communication protocols such as A2A and the Model Context Protocol. [2] `draft-fane-opena2a-aap-02` is an individual submission by A. Fane of OpenA2A, with intended status Standards Track. The title page is dated 30 September 2026, and the draft expires on 3 April 2027. [2] Datatracker lists an Active Internet-Draft (individual) by Abdel Fane, last updated `2026-10-02`, with RFC stream (None) and Intended RFC status (None). This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. [1]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Permit](/category/permit/) (`permit`)"
    },
    {
     "label": "Form",
     "value_md": "Document format (`document-format`)"
    },
    {
     "label": "Originated by",
     "value_md": "Abdel Fane (`OpenA2A`; repository created `2026-06-01`, `-00` posted `2026-07-06`) [1][2][3]"
    },
    {
     "label": "Governed by",
     "value_md": "Individual IETF Internet-Draft (`Intended status: Standards Track` in text; `RFC stream: (None)` on Datatracker) and OpenA2A [1][2][4]"
    },
    {
     "label": "Track",
     "value_md": "OpenA2A community specification (`specs.opena2a.org/specs/aap`, `opena2a-standards/agent-authorization-protocol`) and individual IETF Internet-Draft (`draft-fane-opena2a-aap-02`, Intended status: Standards Track) [2][4][5]"
    },
    {
     "label": "Status",
     "value_md": "Active Internet-Draft (individual, `draft-fane-opena2a-aap-02`; dated 30 September 2026, posted `2026-10-02`, expires 3 April 2027) [1][2][3]"
    },
    {
     "label": "Version",
     "value_md": "`draft-fane-opena2a-aap-02` (`30 September 2026`, posted `2026-10-02`; expires `2027-04-03`; `AAP 0.5.1-draft`) [1][2][3]"
    },
    {
     "label": "Wire format",
     "value_md": "JWTs (`RFC 7519`) over JWS Compact (`RFC 7515`) and JWS General JSON (`schemas/jws-general-v1.schema.json`) for hybrid `EdDSA` + `ML-DSA-65`, plus `grant://<grant-name>` URIs [1][2][4]"
    },
    {
     "label": "Specification",
     "value_md": "[draft-fane-opena2a-aap-02.txt](https://www.ietf.org/archive/id/draft-fane-opena2a-aap-02.txt) · [Datatracker](https://datatracker.ietf.org/doc/draft-fane-opena2a-aap/) · [OpenA2A Spec](https://specs.opena2a.org/specs/aap) · [GitHub Repo](https://github.com/opena2a-standards/agent-authorization-protocol) · [Lab](https://specs.opena2a.org/lab/aap) [1][2][4]"
    },
    {
     "label": "Found at",
     "value_md": "No `.well-known` file in `-02` (planned for Level 2); requests `aap` and `grant` URI schemes (`§10`) and resolves grants locally via `POST /grant` (`AAP-BROKER-PROFILE`) [2][4][6]"
    },
    {
     "label": "Licence",
     "value_md": "IETF Trust (`BCP 78`/`BCP 79`, Revised BSD for code) and Apache-2.0 (`opena2a-standards/agent-authorization-protocol`) [2][5]"
    },
    {
     "label": "IETF state",
     "value_md": "`draft-fane-opena2a-aap-02` · **Active Internet-Draft** (expires 2027-04-03) · Individual · as of 2026-10-30 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-fane-opena2a-aap/))"
    }
   ],
   "v05_problem_md": "AI agent systems present authorization challenges that existing protocols such as OAuth 2.0, SAML, and OpenID Connect were not designed to address. Agents are non-deterministic: the same agent with identical permissions can behave differently depending on its inputs, conversation history, and model state. [2] An autonomous agent that holds a secret in its reasoning context can be induced, through prompt injection or tool-output poisoning, to disclose or misuse it. [2] Where AAP is deployed via a broker, no credential value, temporary token, or backend identifier may enter an agent's reasoning context. [2] The BAC is a short-lived signed assertion of an agent's current behavioral state, with a time-to-live on the order of 60 seconds. It exists because agents are non-deterministic. [2] The validity window MUST satisfy `exp` minus `iat` less than or equal to 60 seconds. [2] Authorization exists only where a local policy grants it. Brokers MUST default-deny. [2] AAP has two layers. The token model, defined in the specification, specifies the credentials and assertions. A companion broker and resolution layer specifies how an agent obtains and exercises a grant. [2]",
   "v05_mechanism_delta_md": "Where AAP is deployed via a broker, no credential value, temporary token, or backend identifier may enter an agent's reasoning context. [2] The BAC is a short-lived signed assertion of an agent's current behavioral state, with a time-to-live on the order of 60 seconds. It exists because agents are non-deterministic. [2] The validity window MUST satisfy `exp` minus `iat` less than or equal to 60 seconds. [2] Authorization exists only where a local policy grants it. Brokers MUST default-deny. [2]",
   "v05_scope_boundary_md": "AAP has two layers. The token model, defined in the specification, specifies the credentials and assertions. A companion broker and resolution layer specifies how an agent obtains and exercises a grant. [2]",
   "v05_fuzzy_additions": [
    {
     "id": "capability-grant-claims-and-presentation-binding",
     "heading": "Capability Grant claims and presentation binding",
     "body_md": "`draft-fane-opena2a-aap-02` issues short-lived Capability Grant Tokens (`CGT`) carrying typed `authorization_details` entries, mandatory-to-understand `aap_crit` claim lists, and required `cnf` proof-of-possession key bindings across tiered token lifetimes. [2]",
     "bullets": [
      {
       "label": "Authorization details",
       "text_md": "The `authorization_details` claim is an array of objects, each with a REQUIRED `type` member naming an entry type, plus the members that type defines. Whenever it is present it MUST be named in `aap_crit`, and a verifier that does not implement it MUST reject the token. [2]"
      },
      {
       "label": "Mandatory-to-understand names",
       "text_md": "`aap_crit` is an array of claim names the verifier MUST understand in order to accept the token. A verifier that does not implement a name in `aap_crit` MUST reject the token. It MUST also reject a token whose `aap_crit` names a claim that is not present, and a token whose `aap_crit` is present but empty. `aap_crit` MUST NOT name the baseline claims. `authorization_details` MUST be listed whenever it is present. `cnf` MUST be listed whenever it is present, because a verifier that ignores `cnf` accepts the token as a bearer token. [2]"
      },
      {
       "label": "Proof of possession",
       "text_md": "`cnf` carries exactly one of `jwk` or `jkt`. `cnf` is REQUIRED on every CGT or DA that is presented by an agent to any party other than the broker that minted it. On a local socket binding, where the token never leaves the minting broker and the presenter is bound by operating system peer credentials, `cnf` MAY be omitted. A verifier that receives a token with `cnf` MUST verify the presenter's proof against the bound key and MUST reject the token otherwise. [2]"
      },
      {
       "label": "Lifetime tiers",
       "text_md": "A CGT has a bounded time-to-live. The specification defines three tiers; profiles MAY define others. STANDARD is 4 hours. PRIVILEGED is 30 minutes. `SUPER_PRIVILEGED` is 15 minutes, no renewal; human approval REQUIRED. [2]"
      }
     ]
    },
    {
     "id": "delegation-assertion-attenuation",
     "heading": "Delegation Assertion attenuation",
     "body_md": "Sub-delegation mints a Delegation Assertion (`DA`) whose `authorization_details` entries must satisfy a per-type `narrower than or equal to` attenuation relation, checked at mint time by the broker with `subDelegationDepth` strictly decreasing across hops. [2]",
     "bullets": [
      {
       "label": "Same-type parent",
       "text_md": "A DA is valid only if every `authorization_details` entry is narrower than or equal to some entry of the same type in the delegator's `authorization_details`, and no entry lacks such a parent. An orphan entry makes the DA invalid. The delegatee's array MAY hold fewer entries than the delegator's. When a chain is present, the relation is checked link by link. [2]"
      },
      {
       "label": "Member kinds",
       "text_md": "Identity members are equal, and a hash the delegator left open MAY be pinned by the delegatee. Allow-set members are a subset. An absent allow set in the delegator means unbounded, except for `labelCeiling` and `egressCeiling`, where absent means the empty set. An absent allow set in the delegatee inherits the delegator's value. Deny-set members (`fieldsDenied`) are a superset. Bound members are less than or equal, while the `windowSeconds` of `rate` is greater than or equal for the same or a smaller `max`. `subDelegationDepth` is strictly less. [2]"
      },
      {
       "label": "Mint-time check",
       "text_md": "The minting broker MUST check the relation at mint time. A verifier that can resolve the delegator's grant MUST re-check it. A verifier that cannot MUST NOT treat the DA as carrying more than its own entries state. [2]"
      },
      {
       "label": "Depth bound",
       "text_md": "A DA's `max_depth` MUST NOT exceed the `subDelegationDepth` of the delegator's `peer_agent` entry whose `peerDid` is the DA's `sub`, when such an entry exists. A `max_depth` of 0 is a terminal delegation. [2]"
      }
     ]
    }
   ],
   "v05_diagram": null,
   "v05_wire_artifact": {
    "title": "CGT claims with authorization_details",
    "heading": "CGT claims with authorization_details",
    "lang": "json",
    "code": "{\n  \"iss\": \"https://broker.acme.example\",\n  \"sub\": \"did:opena2a:agent:acme/orders-reader\",\n  \"aud\": \"https://api.orders.internal\",\n  \"scope\": \"orders.read\",\n  \"trust_class\": \"orders:read\",\n  \"issuer_chain\": [\n    \"did:opena2a:authority:opena2a.org\"\n  ],\n  \"trust_level\": 4,\n  \"authorization_details\": [\n    {\n      \"type\": \"https://specs.opena2a.org/aap/types/data\",\n      \"locations\": [\n        \"https://api.orders.internal/orders\"\n      ],\n      \"actions\": [\n        \"read\"\n      ],\n      \"fieldsAllowed\": [\n        \"id\",\n        \"status\",\n        \"total\"\n      ],\n      \"fieldsDenied\": [\n        \"customer.email\"\n      ],\n      \"labelCeiling\": [\n        \"internal\"\n      ]\n    },\n    {\n      \"type\": \"https://specs.opena2a.org/aap/types/budget\",\n      \"maxUses\": 100,\n      \"rate\": {\n        \"max\": 60,\n        \"windowSeconds\": 60\n      }\n    }\n  ],\n  \"aap_crit\": [\n    \"authorization_details\",\n    \"cnf\"\n  ],\n  \"cnf\": {\n    \"jkt\": \"HlHgCcjrhbeyw80VMef51yPwhyRqjiwLdwSLRqo7hSI\"\n  },\n  \"iat\": 1780315200,\n  \"exp\": 1780315500,\n  \"jti\": \"c3d4e5f6a7b8091a2b3c4d5e6f708192\"\n}",
    "caption_md": "The following generated claim set carries one \"data\" entry, one \"budget\" entry, \"aap_crit\", and \"cnf\". [2]"
   },
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "JSON Web Token (JWT, RFC 7519)",
      "spec_or_rfc": "RFC 7519",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "AAP defines six authorization components for identity, capability, delegation, attestation, federation, and revocation, asks IANA for an aap URI scheme, and keeps credentials in a broker outside the model context, in the role a signed token plays. [2][7]"
     },
     {
      "name": "OAuth 2.0 Authorization Framework (RFC 6749)",
      "spec_or_rfc": "RFC 6749",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "OAuth 2.0 access tokens authorize a client at an HTTP resource, while this draft defines six authorization components and asks IANA for an aap URI scheme rather than an OAuth grant. [2][8]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "aap",
      "target_name": "Agent Authorization Profile",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "The expired Agent Authorization Profile defines structured JWT access-token and token-exchange claims over OAuth 2.0, while OpenA2A AAP defines six authorization components and a broker that keeps credentials out of the model context. [2][9]"
     },
     {
      "target_id": "a2a",
      "target_name": "Agent2Agent Protocol (A2A)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "A2A carries agent-to-agent messages, and OpenA2A AAP is the authorization layer the draft pairs with those messages, with a broker that keeps credentials out of the model context. [2][10]"
     },
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "MCP carries tool calls, and OpenA2A AAP is the authorization layer the draft pairs with those calls, using six components and an aap URI scheme. [2][11]"
     },
     {
      "target_id": "oauth-agent-delegation",
      "target_name": "An Attenuated Delegation Profile for Automated Agents",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "Agent-Delegation is an attenuated header of r, w, and x links on an RFC 9421 request, while AAP defines six authorization components and asks IANA for an aap URI scheme. [2][12]"
     },
     {
      "target_id": "workload-authz-grant",
      "target_name": "Workload Authorization Grant (WAG)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "The Workload Authorization Grant presents a platform-signed JWT with the jwt-bearer grant, while AAP defines six authorization components and asks IANA for an aap URI scheme. [2][13]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": "`draft-fane-opena2a-aap-02` is maintained alongside OpenA2A's specification portal (`specs.opena2a.org/specs/aap`), `opena2a-standards/agent-authorization-protocol`, and first-party `opena2a-org/secretless-ai` code; no independent third-party production deployments have been verified yet. [4][5][6]",
    "scope_note_md": null,
    "side_a": null,
    "side_b": null,
    "additional_tables": null,
    "censuses": [],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "item_md": "**[Permit protocols](/category/permit/)** — Category index for `permit` standards."
    }
   ],
   "v05_compiled_md": "---\nid: opena2a-aap\ntitle: \"OpenA2A Agent Authorization Protocol\"\ntier: spec_brief\nlifecycle_status: active_draft\ncategory: permit\nform: document-format\nwire_archetype: identity_auth_crypto\nspec_url: https://www.ietf.org/archive/id/draft-fane-opena2a-aap-02.txt\nlast_checked: 2026-11-12\n---\n\n# OpenA2A Agent Authorization Protocol\n\n**Category:** [Permit](/category/permit/) (`permit`) · **Form:** Document format (`document-format`) · **Last checked:** 2026-11-12\n\n> *This page is about the OpenA2A Agent Authorization Protocol, an Internet-Draft by A. Fane of OpenA2A. For the unrelated expired draft with the same acronym, see [Agent Authorization Profile](/protocols/aap/). [1]*\n\n**OpenA2A Agent Authorization Protocol** (`AAP`) is a protocol for authorization in AI agent systems. It provides mechanisms for agent identity assertion, scoped capability grants, cross-agent delegation, behavioral attestation, cross-organizational federation, and revocation propagation. [2] `AAP` is the authorization complement to agent communication protocols such as A2A and the Model Context Protocol. [2] `draft-fane-opena2a-aap-02` is an individual submission by A. Fane of OpenA2A, with intended status Standards Track. The title page is dated 30 September 2026, and the draft expires on 3 April 2027. [2] Datatracker lists an Active Internet-Draft (individual) by Abdel Fane, last updated `2026-10-02`, with RFC stream (None) and Intended RFC status (None). This I-D is not endorsed by the IETF and has no formal standing in the IETF standards process. [1] An agent presents an AIT to identify itself to other agents, services, and infrastructure. An AIT is an identity assertion only; it conveys no authorization. [2] In a broker deployment the CGT is used as the OAuth 2.0 Token Exchange `subject_token`, with a `subject_token_type` of `urn:ietf:params:oauth:token-type:jwt`. The downstream authorization server verifies it as a standard JWT against the broker's published key material. [2] A delegatee's capability scope MUST NOT exceed the delegator's scope. [2] Datatracker history records `draft-fane-opena2a-aap-02` on `2026-10-02`, `draft-fane-opena2a-aap-01` on `2026-07-22`, and `draft-fane-opena2a-aap-00` on `2026-07-06`. [3] This revision adds mandatory-to-understand `authorization_details`, `aap_crit`, and `cnf`, a session label in the behavioral attestation claim, and a local grant revocation list. [2] The `fga_constraints` claim of the previous revisions is deprecated: it is replaced by `authorization_details`. [2]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Permit](/category/permit/) (`permit`) |\n| **Form** | Document format (`document-format`) |\n| **Originated by** | Abdel Fane (`OpenA2A`; repository created `2026-06-01`, `-00` posted `2026-07-06`) [1][2][3] |\n| **Governed by** | Individual IETF Internet-Draft (`Intended status: Standards Track` in text; `RFC stream: (None)` on Datatracker) and OpenA2A [1][2][4] |\n| **Track** | OpenA2A community specification (`specs.opena2a.org/specs/aap`, `opena2a-standards/agent-authorization-protocol`) and individual IETF Internet-Draft (`draft-fane-opena2a-aap-02`, Intended status: Standards Track) [2][4][5] |\n| **Status** | Active Internet-Draft (individual, `draft-fane-opena2a-aap-02`; dated 30 September 2026, posted `2026-10-02`, expires 3 April 2027) [1][2][3] |\n| **Version** | `draft-fane-opena2a-aap-02` (`30 September 2026`, posted `2026-10-02`; expires `2027-04-03`; `AAP 0.5.1-draft`) [1][2][3] |\n| **Wire format** | JWTs (`RFC 7519`) over JWS Compact (`RFC 7515`) and JWS General JSON (`schemas/jws-general-v1.schema.json`) for hybrid `EdDSA` + `ML-DSA-65`, plus `grant://<grant-name>` URIs [1][2][4] |\n| **Specification** | [draft-fane-opena2a-aap-02.txt](https://www.ietf.org/archive/id/draft-fane-opena2a-aap-02.txt) · [Datatracker](https://datatracker.ietf.org/doc/draft-fane-opena2a-aap/) · [OpenA2A Spec](https://specs.opena2a.org/specs/aap) · [GitHub Repo](https://github.com/opena2a-standards/agent-authorization-protocol) · [Lab](https://specs.opena2a.org/lab/aap) [1][2][4] |\n| **Found at** | No `.well-known` file in `-02` (planned for Level 2); requests `aap` and `grant` URI schemes (`§10`) and resolves grants locally via `POST /grant` (`AAP-BROKER-PROFILE`) [2][4][6] |\n| **Licence** | IETF Trust (`BCP 78`/`BCP 79`, Revised BSD for code) and Apache-2.0 (`opena2a-standards/agent-authorization-protocol`) [2][5] |\n| **IETF state** | `draft-fane-opena2a-aap-02` · **Active Internet-Draft** (expires 2027-04-03) · Individual · as of 2026-10-30 ([per IETF Datatracker](https://datatracker.ietf.org/doc/draft-fane-opena2a-aap/)) |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [Capability Grant claims and presentation binding](#capability-grant-claims-and-presentation-binding)\n3. [Delegation Assertion attenuation](#delegation-assertion-attenuation)\n4. [Counterparts and related standards](#counterparts-and-related-standards)\n5. [Adoption and ecosystem](#adoption-and-ecosystem)\n6. [See also](#see-also)\n7. [References](#references)\n\n---\n\n## Problem and scope\n\nAI agent systems present authorization challenges that existing protocols such as OAuth 2.0, SAML, and OpenID Connect were not designed to address. Agents are non-deterministic: the same agent with identical permissions can behave differently depending on its inputs, conversation history, and model state. [2] An autonomous agent that holds a secret in its reasoning context can be induced, through prompt injection or tool-output poisoning, to disclose or misuse it. [2] Where AAP is deployed via a broker, no credential value, temporary token, or backend identifier may enter an agent's reasoning context. [2] The BAC is a short-lived signed assertion of an agent's current behavioral state, with a time-to-live on the order of 60 seconds. It exists because agents are non-deterministic. [2] The validity window MUST satisfy `exp` minus `iat` less than or equal to 60 seconds. [2] Authorization exists only where a local policy grants it. Brokers MUST default-deny. [2] AAP has two layers. The token model, defined in the specification, specifies the credentials and assertions. A companion broker and resolution layer specifies how an agent obtains and exercises a grant. [2]\n\n### CGT claims with authorization_details\n\n```json\n{\n  \"iss\": \"https://broker.acme.example\",\n  \"sub\": \"did:opena2a:agent:acme/orders-reader\",\n  \"aud\": \"https://api.orders.internal\",\n  \"scope\": \"orders.read\",\n  \"trust_class\": \"orders:read\",\n  \"issuer_chain\": [\n    \"did:opena2a:authority:opena2a.org\"\n  ],\n  \"trust_level\": 4,\n  \"authorization_details\": [\n    {\n      \"type\": \"https://specs.opena2a.org/aap/types/data\",\n      \"locations\": [\n        \"https://api.orders.internal/orders\"\n      ],\n      \"actions\": [\n        \"read\"\n      ],\n      \"fieldsAllowed\": [\n        \"id\",\n        \"status\",\n        \"total\"\n      ],\n      \"fieldsDenied\": [\n        \"customer.email\"\n      ],\n      \"labelCeiling\": [\n        \"internal\"\n      ]\n    },\n    {\n      \"type\": \"https://specs.opena2a.org/aap/types/budget\",\n      \"maxUses\": 100,\n      \"rate\": {\n        \"max\": 60,\n        \"windowSeconds\": 60\n      }\n    }\n  ],\n  \"aap_crit\": [\n    \"authorization_details\",\n    \"cnf\"\n  ],\n  \"cnf\": {\n    \"jkt\": \"HlHgCcjrhbeyw80VMef51yPwhyRqjiwLdwSLRqo7hSI\"\n  },\n  \"iat\": 1780315200,\n  \"exp\": 1780315500,\n  \"jti\": \"c3d4e5f6a7b8091a2b3c4d5e6f708192\"\n}\n```\n\n*The following generated claim set carries one \"data\" entry, one \"budget\" entry, \"aap_crit\", and \"cnf\". [2]*\n\n---\n\n## Capability Grant claims and presentation binding\n\n`draft-fane-opena2a-aap-02` issues short-lived Capability Grant Tokens (`CGT`) carrying typed `authorization_details` entries, mandatory-to-understand `aap_crit` claim lists, and required `cnf` proof-of-possession key bindings across tiered token lifetimes. [2]\n\n- **Authorization details:** The `authorization_details` claim is an array of objects, each with a REQUIRED `type` member naming an entry type, plus the members that type defines. Whenever it is present it MUST be named in `aap_crit`, and a verifier that does not implement it MUST reject the token. [2]\n- **Mandatory-to-understand names:** `aap_crit` is an array of claim names the verifier MUST understand in order to accept the token. A verifier that does not implement a name in `aap_crit` MUST reject the token. It MUST also reject a token whose `aap_crit` names a claim that is not present, and a token whose `aap_crit` is present but empty. `aap_crit` MUST NOT name the baseline claims. `authorization_details` MUST be listed whenever it is present. `cnf` MUST be listed whenever it is present, because a verifier that ignores `cnf` accepts the token as a bearer token. [2]\n- **Proof of possession:** `cnf` carries exactly one of `jwk` or `jkt`. `cnf` is REQUIRED on every CGT or DA that is presented by an agent to any party other than the broker that minted it. On a local socket binding, where the token never leaves the minting broker and the presenter is bound by operating system peer credentials, `cnf` MAY be omitted. A verifier that receives a token with `cnf` MUST verify the presenter's proof against the bound key and MUST reject the token otherwise. [2]\n- **Lifetime tiers:** A CGT has a bounded time-to-live. The specification defines three tiers; profiles MAY define others. STANDARD is 4 hours. PRIVILEGED is 30 minutes. `SUPER_PRIVILEGED` is 15 minutes, no renewal; human approval REQUIRED. [2]\n\n---\n\n## Delegation Assertion attenuation\n\nSub-delegation mints a Delegation Assertion (`DA`) whose `authorization_details` entries must satisfy a per-type `narrower than or equal to` attenuation relation, checked at mint time by the broker with `subDelegationDepth` strictly decreasing across hops. [2]\n\n- **Same-type parent:** A DA is valid only if every `authorization_details` entry is narrower than or equal to some entry of the same type in the delegator's `authorization_details`, and no entry lacks such a parent. An orphan entry makes the DA invalid. The delegatee's array MAY hold fewer entries than the delegator's. When a chain is present, the relation is checked link by link. [2]\n- **Member kinds:** Identity members are equal, and a hash the delegator left open MAY be pinned by the delegatee. Allow-set members are a subset. An absent allow set in the delegator means unbounded, except for `labelCeiling` and `egressCeiling`, where absent means the empty set. An absent allow set in the delegatee inherits the delegator's value. Deny-set members (`fieldsDenied`) are a superset. Bound members are less than or equal, while the `windowSeconds` of `rate` is greater than or equal for the same or a smaller `max`. `subDelegationDepth` is strictly less. [2]\n- **Mint-time check:** The minting broker MUST check the relation at mint time. A verifier that can resolve the delegator's grant MUST re-check it. A verifier that cannot MUST NOT treat the DA as carrying more than its own entries state. [2]\n- **Depth bound:** A DA's `max_depth` MUST NOT exceed the `subDelegationDepth` of the delegator's `peer_agent` entry whose `peerDid` is the DA's `sub`, when such an entry exists. A `max_depth` of 0 is a terminal delegation. [2]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **JSON Web Token (JWT, RFC 7519)** | `RFC 7519` | Analogous to classic standard | AAP defines six authorization components for identity, capability, delegation, attestation, federation, and revocation, asks IANA for an aap URI scheme, and keeps credentials in a broker outside the model context, in the role a signed token plays. [2][7] |\n| **OAuth 2.0 Authorization Framework (RFC 6749)** | `RFC 6749` | Analogous to classic standard | OAuth 2.0 access tokens authorize a client at an HTTP resource, while this draft defines six authorization components and asks IANA for an aap URI scheme rather than an OAuth grant. [2][8] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Agent Authorization Profile](/protocols/aap/)** | Peer alternative | The expired Agent Authorization Profile defines structured JWT access-token and token-exchange claims over OAuth 2.0, while OpenA2A AAP defines six authorization components and a broker that keeps credentials out of the model context. [2][9] |\n| **[Agent2Agent Protocol (A2A)](/protocols/a2a/)** | Complements | A2A carries agent-to-agent messages, and OpenA2A AAP is the authorization layer the draft pairs with those messages, with a broker that keeps credentials out of the model context. [2][10] |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | MCP carries tool calls, and OpenA2A AAP is the authorization layer the draft pairs with those calls, using six components and an aap URI scheme. [2][11] |\n| **[An Attenuated Delegation Profile for Automated Agents](/protocols/oauth-agent-delegation/)** | Peer alternative | Agent-Delegation is an attenuated header of r, w, and x links on an RFC 9421 request, while AAP defines six authorization components and asks IANA for an aap URI scheme. [2][12] |\n| **[Workload Authorization Grant (WAG)](/protocols/workload-authz-grant/)** | Peer alternative | The Workload Authorization Grant presents a platform-signed JWT with the jwt-bearer grant, while AAP defines six authorization components and asks IANA for an aap URI scheme. [2][13] |\n\n---\n\n## Adoption and ecosystem\n\n`draft-fane-opena2a-aap-02` is maintained alongside OpenA2A's specification portal (`specs.opena2a.org/specs/aap`), `opena2a-standards/agent-authorization-protocol`, and first-party `opena2a-org/secretless-ai` code; no independent third-party production deployments have been verified yet. [4][5][6]\n\n---\n\n## See also\n\n- **Category:** [Permit protocols](/category/permit/)\n\n---\n\n## References\n\n1. A. Fane (OpenA2A), *draft-fane-opena2a-aap status page* (checked 2026-10-30) — <https://datatracker.ietf.org/doc/draft-fane-opena2a-aap/>\n2. A. Fane (OpenA2A), *OpenA2A Agent Authorization Protocol (AAP) (draft-fane-opena2a-aap-02)* (30 September 2026) — <https://www.ietf.org/archive/id/draft-fane-opena2a-aap-02.txt>\n3. A. Fane (OpenA2A), *draft-fane-opena2a-aap history* (checked 2026-10-30) — <https://datatracker.ietf.org/doc/draft-fane-opena2a-aap/history/>\n4. OpenA2A, *AAP specification page* (checked 2026-10-30) — <https://specs.opena2a.org/specs/aap>\n5. opena2a-standards, *agent-authorization-protocol repository metadata* (checked 2026-10-30) — <https://github.com/opena2a-standards/agent-authorization-protocol>\n6. opena2a-org, *secretless-ai commit 055bbbf, AAP v1 Exchange broker* (checked 2026-10-30) — <https://github.com/opena2a-org/secretless-ai/commit/055bbbf92f1c451bca93c6f8515fe1c02a917b84>\n7. M. Jones, J. Bradley, and N. Sakimura, *RFC 7519: JSON Web Token (JWT)* (May 2015) — <https://www.rfc-editor.org/rfc/rfc7519.html>\n8. D. Hardt, Ed., *RFC 6749: The OAuth 2.0 Authorization Framework* (October 2012) — <https://www.rfc-editor.org/rfc/rfc6749.html>\n9. A. Cruz (Independent), *Agent Authorization Profile (AAP) for OAuth 2.0 (draft-aap-oauth-profile-01)* (checked 2026-10-31) — <https://www.ietf.org/archive/id/draft-aap-oauth-profile-01.txt>\n10. Agentic AI Foundation, *A2A joins AAIF's open agentic stack* (published 2026-08-17; modified 2026-09-24) — <https://aaif.io/blog/a2a-joins-aaif>\n11. Model Context Protocol (AAIF / Linux Foundation), *Versioning — Model Context Protocol Documentation* (2026-07-28) — <https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning>\n12. Amr Hassan (Independent), *An Attenuated Delegation Profile for Automated Agents (draft-hamr-oauth-agent-delegation-03)* (checked 2026-10-30) — <https://www.ietf.org/archive/id/draft-hamr-oauth-agent-delegation-03.txt>\n13. Paul Carleton (Anthropic), Nick Steele (OpenAI), Aaron Parecki (Okta), Arndt Schwenkschuster (Defakto Security), and Brian Campbell (Ping Identity), *draft-carleton-workload-authz-grant — Workload Authorization Grant (IETF Datatracker)* (checked 2026-11-08) — <https://datatracker.ietf.org/doc/draft-carleton-workload-authz-grant/>\n",
   "status_notice_md": null,
   "superseded_by": null
  },
  {
   "acronym": "Open Responses",
   "adoption": {
    "level": "observed",
    "by": "OpenAI, Vercel AI Gateway, OpenRouter, Hugging Face Inference Providers, LM Studio, Vercel AI SDK, Agno, openresponses/openresponses, and 6 other verified implementations",
    "probe_run": null
   },
   "aliases": [
    "openresponses",
    "v1/responses"
   ],
   "analog": "OpenAI Chat Completions API",
   "audience": [
    "agent-builder",
    "platform",
    "standards-body"
   ],
   "collisions": [
    "mcp",
    "agent-protocol"
   ],
   "discovery": {
    "mechanism": "Published OpenAPI 3.1 contract or API documentation declaring POST /v1/responses",
    "path": "No discovery file. Each implementer serves the endpoint on its own host, for example OpenRouter at \"https://openrouter.ai/api/v1/responses\"; Databricks uses its own path: \"Send requests to the /serving-endpoints/open-responses path with the model serving endpoint name in the model field of the request body.\""
   },
   "dispute": null,
   "evidence": [
    {
     "label": "[1]",
     "url": "https://raw.githubusercontent.com/openresponses/openresponses/main/README.md",
     "claim": "Open Responses, *README*, fetched 2026-10-30",
     "date": null,
     "quote": "Open Responses is an open-source specification for multi-provider, interoperable LLM interfaces inspired by the OpenAI Responses API. / Dated releases in public/openapi/<YYYY-MM-DD>/ are immutable. / bin/compliance-test.ts",
     "ref": 1
    },
    {
     "label": "[2]",
     "url": "https://developers.openai.com/api/docs/changelog",
     "claim": "OpenAI, *Changelog | OpenAI API*, Open Responses entry 2026-01-15; fetched 2026-10-30",
     "date": null,
     "quote": "Announced Open Responses: an open-source spec for building multi-provider, interoperable LLM interfaces built on top of the original OpenAI Responses API. / Jan 15 Announcement Announced Open Responses: an open-source spec for building multi-provider, interoperable LLM interfaces built on top of the original OpenAI Responses API. / built on top of the original OpenAI Responses API.",
     "ref": 2
    },
    {
     "label": "[3]",
     "url": "https://www.linuxfoundation.org/press/agentic-ai-foundation-announces-four-new-projects-agent-skills-open-responses-openenv-and-opensandbox",
     "claim": "The Linux Foundation, *Agentic AI Foundation Announces Four New Projects: Agent Skills, Open Responses, OpenEnv, and OpenSandbox*, 2026-10-22",
     "date": "2026-10-22",
     "quote": "SAN JOSE, Oct. 22, 2026 – The Agentic AI Foundation (AAIF), today announced four new projects: Agent Skills, contributed by Anthropic; Open Responses, contributed by OpenAI / \"datePublished\": \"2026-10-22T16:00:00.000Z\" … Agentic AI Foundation Announces Four New Projects: Agent Skills, Open Responses, OpenEnv, and OpenSandbox / The Agentic AI Foundation (AAIF), today announced four new projects: Agent Skills, contributed by Anthropic; Open Responses, contributed by OpenAI",
     "ref": 3
    },
    {
     "label": "[4]",
     "url": "https://www.openresponses.org/reference",
     "claim": "Open Responses, *Reference: Create a response*, POST /v1/responses field catalog",
     "date": null,
     "quote": "POST /v1/responses / function_call … function_call_output / POST`/v1/responses` … string or an array of input items. … The ID of the response to use as the prior turn for this request. … A list of tools that the model may call while generating the response. … Additional instructions to guide the model for this request. … Whether to store the response so it can be retrieved later. / A function tool call output that was returned by the tool. / stream … response.created … response.queued … response.in_progress … response.completed … response.failed … response.incomplete / response.output_item.added … response.content_part.added … response.output_text.delta / reasoning.encrypted_content`** :   includes encrypted reasoning content so that it may be rehydrated on a subsequent request.",
     "ref": 4
    },
    {
     "label": "[5]",
     "url": "https://www.openresponses.org/specification",
     "claim": "Open Responses, *Specification*, version 2026-04-24 (Current); prior snapshot 2026-01-15; fetched 2026-10-30",
     "date": null,
     "quote": "Open Responses standardizes these concepts, enabling: One spec, many providers: Describe inputs/outputs once; run on OpenAI, Anthropic, Gemini, or local models. / they represent an atomic unit of model output, tool invocation, or reasoning state. / Streaming is modeled as a series of semantic events, not raw text or object deltas. / When streaming, servers MUST return header Content-Type: text/event-stream / Servers MAY expose the Responses API over a persistent WebSocket connection at the same /v1/responses resource. / Clients MUST start each turn by sending a JSON object with type: \"response.create\". / an API that implements this spec directly or is a proper superset of Open Responses. / 2026-04-24 Current 2026-01-15 / Items are the fundamental unit of context in Open Responses: they represent an atomic unit of model output, tool invocation, or reasoning state. / 2026-04-24 Current / the LLM is able to call the function, but the developer must run the function and return the output back to the LLM in a second request. / These items MUST be prefixed with the canonical provider slug / extensions MUST NOT alter required core behavior. / The agentic loop is the core principle that enables Open Responses to interact intelligently with users, reason about tasks, and invoke tools as needed to complete complex workflows. / For externally-hosted tools, the execution happens outside the model provider, and the result is returned in a follow-up request. / When streaming, servers MUST return header Content-Type: text/event-stream, with individual data objects returned as JSON-encoded strings. / The event field MUST match the type in the event body. / Items are the fundamental unit of context in Open Responses: they represent an atomic unit of model output, tool invocation, or reasoning state. … Streaming is modeled as a series of semantic events, not raw text or object deltas. … When streaming, servers MUST return header Content-Type: text/event-stream … Items are polymorphic / Items are polymorphic Item shapes can vary depending on what purpose they serve. A message item, for instance, has a different shape from a function_call, and so on. Items are discriminated based on the type field … Reasoning items expose the model's internal thought process / Providers MAY surface the model's raw reasoning trace directly through the content field on reasoning items. This content is typically streamable and follows the same delta semantics as other text-like content parts. Exposing raw reasoning is optional and may be disabled or truncated for safety, privacy, or cost reasons. encrypted_content (protected reasoning content): Providers MAY choose to never expose raw reasoning to the client. Instead, they can return an encrypted_content payload whose format and cryptographic properties are provider-specific. Clients are expected to treat this field as opaque and non-inspectable; it is intended for providers to protect reasoning content while allowing it to be round-trippable. / making requests that allow the model to do multiple things and yield back a result, whether this is developer-hosted tool calls where control is yielded back to the user, or provider-hosted tools where control is held by the model provider until the model signals an exit criteria. / the ability to perceive input, reason, act through tools, and reflect on outcomes. … making requests that allow the model to do multiple things and yield back a result … When previous_response_id is provided, the server MUST load both the input and output associated with that prior response / the LLM is able to call the function, but the developer must run the function and return the output back to the LLM in a second request. MCP is another example, where external servers host the implementations, although control is not first yielded back to the developer. Internally-hosted tools Internally hosted tools are ones where the implementation lives inside the model provider's system. An example is OpenAI's file search tool, where the model is able to call file search, and the tool can execute and return results to the LLM without yielding control back to the developer. / Model providers may emit their own types of items not contained in the Open Responses spec. These items MUST be prefixed with the canonical provider slug … OpenAPI definitions that depend on them may not validate or behave identically … extensions MUST NOT alter required core behavior. / Any implementer can be considered to have a Open Responses-compliant API if they have an API that implements this spec directly or is a proper superset of Open Responses. / at the same /v1/responses resource / MCP is another example, where external servers host the implementations, although control is not first yielded back to the developer.",
     "ref": 5
    },
    {
     "label": "[6]",
     "url": "https://www.openresponses.org/changelog",
     "claim": "Open Responses, *Changelog*, releases 2026-04-24 and 2026-01-15; fetched 2026-10-30",
     "date": null,
     "quote": "2026-04-24 Specification · Reference · OpenAPI JSON … 2026-01-15 Specification · Reference · OpenAPI JSON Launched Open Responses as an open, multi-provider specification / Added WebSocket transport for /v1/responses. Clients start turns with response.create, and servers reuse the same semantic streaming events as HTTP streaming. / 2026-04-24 … Added WebSocket transport for /v1/responses. … Added POST /v1/responses/compact / 2026-04-24 / Added WebSocket transport for /v1/responses. Clients start turns with response.create",
     "ref": 6
    },
    {
     "label": "[7]",
     "url": "https://huggingface.co/blog/open-responses",
     "claim": "Shaun Smith, Ben Burtenshaw, merve, and Pedro Cuenca (Hugging Face), *Open Responses: What you need to know*, published 2026-01-15",
     "date": null,
     "quote": "Initiated by OpenAI, built by the open source AI community, and backed by the Hugging Face ecosystem, Open Responses is based on the Responses API / Initiated by OpenAI, built by the open source AI community / designed for turn-based conversations and falls short for agentic use cases. / practically capable of replacing chat completions … hf.space/v1/responses / You can try Open Responses with Hugging Face Inference Providers today. / We have an early access version available for use on Hugging Face Spaces / https://evalstate-openresponses.hf.space/v1/responses / response.reasoning.delta",
     "ref": 7
    },
    {
     "label": "[8]",
     "url": "https://www.openresponses.org/governance",
     "claim": "Open Responses a Series of LF Projects, LLC, *Technical Charter*, adopted 2026-10-21; fetched 2026-10-30",
     "date": null,
     "quote": "The Technical Steering Committee (the \"TSC\") will be responsible for all technical oversight of the open source Project. / Technical Charter (the \"Charter\") for Open Responses a Series of LF Projects, LLC Adopted October 21, 2026 / The Technical Steering Committee (the \"TSC\") will be responsible for all technical oversight of the open source Project. The TSC voting members are initially the Project's Maintainers. / The TSC Chair, or any other TSC member so designated by the TSC, will serve as the primary communication contact between the Project and Agentic AI Foundation (AAIF), a directed fund of The Linux Foundation. / Agentic AI Foundation (AAIF), a directed fund of The Linux Foundation. / All new inbound code contributions to the Project must be made using Apache License, Version 2.0 / Documentation will be received and made available by the Project under the Creative Commons Attribution 4.0 International License",
     "ref": 8
    },
    {
     "label": "[9]",
     "url": "https://github.com/openresponses/openresponses",
     "claim": "Open Responses, *openresponses/openresponses*, created 2026-01-15; fetched 2026-10-30",
     "date": null,
     "quote": "\"full_name\": \"openresponses/openresponses\" … \"created_at\": \"2026-01-15T01:53:57Z\" / \"license\": { \"key\": \"apache-2.0\", \"name\": \"Apache License 2.0\", \"spdx_id\": \"Apache-2.0\" / \"full_name\": \"openresponses/openresponses\"",
     "ref": 9
    },
    {
     "label": "[10]",
     "url": "https://raw.githubusercontent.com/openresponses/openresponses/main/MAINTAINERS.md",
     "claim": "Open Responses (LF Projects, LLC), *Maintainers*, fetched 2026-11-11",
     "date": null,
     "quote": "The Maintainers are the initial voting members of the Technical Steering Committee (TSC).\n\n- Steve Coffey, OpenAI\n- Ankit Mathur, Databricks\n- Anthony Liguori, Amazon\n- Ben Burtenshaw, HuggingFace\n- Devon Rifkin, Ollama\n- Ji Huang, OpenAI\n- Matt Apperson, OpenRouter\n- Shaun Smith, HuggingFace\n- Kedar Thakkar, Ramp",
     "ref": 10
    },
    {
     "label": "[11]",
     "url": "https://www.openresponses.org/openapi/2026-04-24/openapi.json",
     "claim": "Open Responses, *Open Responses OpenAPI*, openapi 3.1.0; info.version 2026-04-24; fetched 2026-10-30",
     "date": null,
     "quote": "\"title\": \"Open Responses\", \"version\": \"2026-04-24\" / \"securitySchemes\": { \"ApiKeyAuth\": { \"type\": \"http\", \"scheme\": \"bearer\", \"in\": \"header\" } } / \"openapi\": \"3.1.0\", \"info\": { \"title\": \"Open Responses\", \"version\": \"2026-04-24\" } / \"servers\": [ { \"url\": \"https://api.openai.com/v1\" } ] … \"paths\": { \"/responses\": { \"x-openresponses-websocket\": { \"x-openresponses-added-in\": \"2026-04-24\", \"description\": \"Open a WebSocket connection to /v1/responses. / { \"openapi\": \"3.1.0\", \"info\": { \"title\": \"Open Responses\" / \"url\": \"https://api.openai.com/v1\" / \"/responses\" / \"servers\": [ { \"url\": \"https://api.openai.com/v1\" } ] ... \"post\": { \"summary\": \"Create response\"",
     "ref": 11
    },
    {
     "label": "[12]",
     "url": "https://raw.githubusercontent.com/openresponses/openresponses/main/CONTRIBUTING",
     "claim": "Open Responses, *CONTRIBUTING*, fetched 2026-10-30",
     "date": null,
     "quote": "Dated artifacts are immutable: release generation stops if that release date already has a different snapshot.",
     "ref": 12
    },
    {
     "label": "[13]",
     "url": "https://openrouter.ai/docs/api/api-reference/responses/create-a-response",
     "claim": "OpenRouter, *Create a response*, fetched 2026-10-30",
     "date": null,
     "quote": "Creates a streaming or non-streaming response using OpenResponses API format … https://openrouter.ai/api/v1/responses / https://openrouter.ai/api/v1/responses / Creates a streaming or non-streaming response using OpenResponses API format / Not supported on this proxy. Each response request is independent",
     "ref": 13
    },
    {
     "label": "[14]",
     "url": "https://docs.databricks.com/aws/en/machine-learning/model-serving/query-open-responses-models",
     "claim": "Databricks, *Query a model with the Open Responses API*, fetched 2026-10-30",
     "date": null,
     "quote": "Send requests to the /serving-endpoints/open-responses path with the model serving endpoint name in the model field of the request body. / It uses an input field instead of messages and returns a structured output array. / Send requests to the /serving-endpoints/open-responses path / previous_response_id and server-side conversation storage aren't supported. / Last updated on Oct 2, 2026",
     "ref": 14
    },
    {
     "label": "[15]",
     "url": "https://www.openresponses.org/",
     "claim": "Open Responses, *Open Responses*, fetched 2026-10-30; HTTP last-modified 2026-10-29",
     "date": null,
     "quote": "converged on similar building blocks-messages, tool calls, streaming, and multimodal inputs-but each provider encodes them differently.",
     "ref": 15
    },
    {
     "label": "[16]",
     "url": "https://platform.claude.com/docs/en/api/overview",
     "claim": "Anthropic, *API overview*, fetched 2026-10-30",
     "date": null,
     "quote": "interactions (POST /v1/messages)",
     "ref": 16
    },
    {
     "label": "[17]",
     "url": "https://thenewstack.io/openai-donates-open-responses/",
     "claim": "Frederic Lardinois (The New Stack), *OpenAI donates Open Responses, its spec for a common LLM API, to the Agentic AI Foundation*, 2026-10-22",
     "date": "2026-10-22",
     "quote": "Anthropic, which defines its own Messages API for giving developers access to its models. … With the Interactions API, Google, too, has its default for letting developers work with its models. / Vercel AI Gateway and Databricks Model Serving already implement it / open source projects like vLLM and OGC (previously Llama Stack) supporting it / AWS (in Bedrock), Databricks, LM Studio, Ollama, Hugging Face, Nvidia, OpenRouter, Red Hat, Vercel / AWS (in Bedrock), Databricks, LM Studio, Ollama, Hugging Face, Nvidia, OpenRouter, Red Hat, Vercel, and open source projects like vLLM and OGC (previously Llama Stack) supporting it",
     "ref": 17
    },
    {
     "label": "[18]",
     "url": "https://ai.google.dev/gemini-api/docs/openai",
     "claim": "Google AI for Developers, *OpenAI compatibility*, fetched 2026-10-30",
     "date": null,
     "quote": "Interactions API",
     "ref": 18
    },
    {
     "label": "[19]",
     "url": "https://www.infoq.com/news/2026/02/openai-open-responses/",
     "claim": "Hien Luu (InfoQ), *Open Responses Specification Enables Unified Agentic LLM Workflows*, 2026-02-02",
     "date": "2026-02-02",
     "quote": "The specification has seen early adoption from partners including Hugging Face, OpenRouter, Vercel, and local inference providers like LM Studio, Ollama and vLLM / local inference providers like LM Studio, Ollama and vLLM",
     "ref": 19
    },
    {
     "label": "[20]",
     "url": "https://ai-sdk.dev/providers/ai-sdk-providers/open-responses",
     "claim": "Vercel, *Open Responses | AI SDK*, fetched 2026-10-30",
     "date": null,
     "quote": "The Open Responses provider connects AI SDK Core to language model servers that implement an Open Responses-compatible POST endpoint. Open Responses is an open specification based on the OpenAI Responses API. Start with AI Gateway for hosted models (recommended). Gateway also exposes an OpenResponses-compatible endpoint that you can call with @ai-sdk/open-responses. / https://ai-gateway.vercel.sh/v1/responses / createOpenResponses / The Open Responses provider connects AI SDK Core to language model servers that implement an Open Responses-compatible POST endpoint. / @ai-sdk/open-responses / generateText and streamText",
     "ref": 20
    },
    {
     "label": "[21]",
     "url": "https://www.openresponses.org/compliance",
     "claim": "Open Responses, *Acceptance Tests*, fetched 2026-10-30",
     "date": null,
     "quote": "Test any API endpoint for Open Responses specification compliance. Configure your connection details and run the test suite to validate responses against the OpenAPI schema. / Test any API endpoint for Open Responses specification compliance. / validate responses against the OpenAPI schema. / Browser Runnable 10 tests / CLI Only 7 tests",
     "ref": 21
    },
    {
     "label": "[22]",
     "url": "https://docs.ag-ui.com/spec/1.0/index",
     "claim": "Agent User Interaction Protocol, *Specification*, AG-UI protocol 1.0; modified 2026-09-17",
     "date": null,
     "quote": "the behavioural specification for the ag-ui protocol - 1.0 / \"title\":\"HTTP + Server-Sent Events\",\"href\":\"/spec/1.0/basic/transports/http-sse\"},{\"title\":\"HTTP + Protobuf\"",
     "ref": 22
    },
    {
     "label": "[23]",
     "url": "https://docs.ag-ui.com/introduction",
     "claim": "Agent User Interaction Protocol, *Overview*, modified 2026-10-28",
     "date": null,
     "quote": "AG-UI is designed to be the general-purpose, bi-directional connection between a user-facing application and any agentic backend",
     "ref": 23
    },
    {
     "label": "[24]",
     "url": "https://modelcontextprotocol.io/specification/2026-07-28",
     "claim": "Model Context Protocol, *Specification*, version 2026-07-28 (latest)",
     "date": null,
     "quote": "The protocol uses JSON-RPC 2.0 messages to establish communication between / Servers offer any of the following features to clients: Resources: Context and data, for the user or the AI model to use Prompts: Templated messages and workflows for users Tools: Functions for the AI model to execute",
     "ref": 24
    },
    {
     "label": "[25]",
     "url": "https://agentclientprotocol.com/protocol/v1/overview",
     "claim": "Agent Client Protocol, *Overview*, modified 2026-10-30",
     "date": null,
     "quote": "The protocol follows the JSON-RPC 2.0 specification with two types of messages: Methods are request-response pairs that expect a result or error. / Client → Agent: initialize to establish connection / They are typically code editors (IDEs, text editors) but can also be other UIs for interacting with agents.",
     "ref": 25
    },
    {
     "label": "[26]",
     "url": "https://zed.dev/blog/bring-your-own-agent-to-zed",
     "claim": "Nathan Sobo (Zed), *Introducing the Agent Client Protocol*, 2025-08-27",
     "date": "2025-08-27",
     "quote": "By running the same Gemini CLI as a subprocess speaking ACP",
     "ref": 26
    },
    {
     "label": "[27]",
     "url": "https://a2a-protocol.org/latest/specification/",
     "claim": "The Linux Foundation, *A2A Protocol specification*, copyright 2026; v1.0",
     "date": null,
     "quote": "Simple: Reuse existing, well-understood standards (HTTP, JSON-RPC 2.0, Server-Sent Events). / JSON-RPC Protocol Binding … gRPC Protocol Binding … HTTP+JSON/REST Protocol Binding / fetches the public Agent Card: GET /.well-known/agent-card.json / Enable agents to delegate tasks",
     "ref": 27
    },
    {
     "label": "[28]",
     "url": "https://vercel.com/changelog/openresponses-api-now-supported-on-vercel-ai-gateway",
     "claim": "Vercel, *OpenResponses API now supported on Vercel AI Gateway*, 2026-01-15",
     "date": "2026-01-15",
     "quote": "Vercel AI Gateway is a day 0 launch partner for the OpenResponses API",
     "ref": 28
    },
    {
     "label": "[29]",
     "url": "https://docs.agno.com/reference/models/open-responses",
     "claim": "Agno, *Open Responses*, fetched 2026-10-30",
     "date": null,
     "quote": "Providers that implement this spec include Ollama (v0.13.3+) and OpenRouter. / OpenResponses, the base class for providers implementing the Open Responses API specification. / Configurable base_url for pointing to different API endpoints / role_map / Stateless by default (no previous_response_id chaining)",
     "ref": 29
    },
    {
     "label": "[30]",
     "url": "https://aws.amazon.com/blogs/opensource/open-responses-joins-aaif-with-aws-support/",
     "claim": "Anthony Liguori, James Ward, and Libby Clark (AWS), *Open Responses Joins AAIF with AWS Support*, 2026-10-22",
     "date": "2026-10-22",
     "quote": "Ollama, vLLM, OpenRouter, and Hugging Face now among the providers serving the format / Amazon Bedrock has supported the Responses API since December 2025 / Amazon Bedrock already supports the Responses API across dozens of models. / bedrock-runtime and bedrock-mantle / 22 OCT 2026 / Developers can use the familiar OpenAI SDK to call models hosted on Bedrock just by changing the base URL and API key.",
     "ref": 30
    },
    {
     "label": "[31]",
     "url": "https://lmstudio.ai/blog/openresponses",
     "claim": "LM Studio Team, *Open Responses with local models via LM Studio*, published 2026-01-15",
     "date": null,
     "quote": "Please update to LM Studio 0.3.39 / making our /v1/responses endpoint compatible with the Open Responses specification / We have partnered with OpenAI to support Open Responses / \"datePublished\":\"2026-01-15\"",
     "ref": 31
    },
    {
     "label": "[32]",
     "url": "https://udapy.github.io/openresponses-python/examples/",
     "claim": "openresponses-python examples, *Examples - OpenResponses Python*, undated examples page",
     "date": null,
     "quote": "The `openresponses-python` repository includes several proxy implementations to adapt popular LLM providers to the Open Responses standard. / **Port:** `8001` / **Env:** `OPENROUTER_API_KEY` / **Port:** `8002` / **Env:** `OPENAI_API_KEY` / Proxies to a local Ollama instance running on `localhost:11434`. / **Port:** `8003` / Proxies to local LM Studio running on `localhost:1234`. / **Port:** `8004` / **Port:** `8005` / `HF_API_KEY` (Optional), `HF_BASE_URL` (Defaults to public API)",
     "ref": 32
    }
   ],
   "form": "endpoint",
   "governance": "Open Responses is a Series of LF Projects, LLC. The technical charter (https://raw.githubusercontent.com/openresponses/openresponses/main/CHARTER.md) was adopted October 21, 2026. The Technical Steering Committee is responsible for all technical oversight of the open source project. The TSC Chair is the primary communication contact between the Project and Agentic AI Foundation (AAIF), a directed fund of The Linux Foundation. Initial TSC voting members are the maintainers named in https://raw.githubusercontent.com/openresponses/openresponses/main/MAINTAINERS.md: Steve Coffey (OpenAI), Ankit Mathur (Databricks), Anthony Liguori (Amazon), Ben Burtenshaw (HuggingFace), Devon Rifkin (Ollama), Ji Huang (OpenAI), Matt Apperson (OpenRouter), Shaun Smith (HuggingFace), and Kedar Thakkar (Ramp).",
   "group": null,
   "hatnote_md": "Open Responses is the open multi-provider LLM inference specification built on top of OpenAI's proprietary Responses API and hosted under the Linux Foundation's Agentic AI Foundation (AAIF); for agent-to-tool and agent-to-agent protocols, see [Model Context Protocol (MCP)](/protocols/mcp/) and [Agent2Agent Protocol (A2A)](/protocols/a2a/), and for UI or editor harnesses, see [Agent-User Interaction Protocol (AG-UI)](/protocols/ag-ui/) and [Agent Client Protocol](/protocols/agent-client-protocol/).",
   "history": [
    {
     "date": "2026-10-29",
     "note": "Primary-source verification sweep across 24 primary Open Responses specifications, LF AAIF charter/press documents, provider docs, and press coverage."
    },
    {
     "date": "2026-11-12",
     "note": "Completed v0.5 primary-source specification, protocol-graph, and ecosystem adoption pass."
    }
   ],
   "id": "open-responses",
   "implementation": "multi-implementation",
   "last_verified": "2026-11-11",
   "name": "Open Responses",
   "native_status": "Published, date-versioned specification; current release 2026-04-24. The home page, specification and changelog carry no beta, preview or general-availability label (checked 2026-10-29). Compliance is defined by the spec: \"Any implementer can be considered to have a Open Responses-compliant API if they have an API that implements this spec directly or is a proper superset of Open Responses.\". The project publishes a test suite: \"Test any API endpoint for Open Responses specification compliance. Configure your connection details and run the test suite to validate responses against the OpenAPI schema.\"",
   "origin": {
    "date": "2026-01-15",
    "org": "OpenAI"
   },
   "pairs_with": [
    "ag-ui",
    "mcp",
    "agent-client-protocol",
    "a2a"
   ],
   "part_of": null,
   "parties": [
    "agent-agent",
    "agent-site"
   ],
   "phase": "stable",
   "prerequisites": [],
   "probe": {
    "method": "POST",
    "on_absent": "HTTP 404 or non-Open-Responses JSON payload",
    "parse": "JSON response object with object=\"response\" or streaming response.* SSE events",
    "path": "/v1/responses"
   },
   "question": "How can an agent or application call LLM inference and server-side tool loops across multiple providers using a single vendor-neutral wire format?",
   "scope": "general",
   "spec_url": "https://www.openresponses.org/specification",
   "step": "act",
   "summary_md": "**Open Responses** is an open-source specification for multi-provider, interoperable large language model (LLM) interfaces built on top of the original OpenAI Responses API. Clients send structured requests to `POST /v1/responses` (or open an optional persistent WebSocket on `/v1/responses` starting each turn with `response.create`) and exchange polymorphic `Items`—the atomic units of model output, tool invocation, and reasoning state—alongside semantic Server-Sent Events (`text/event-stream`) rather than raw text or object deltas. The specification changelog records `2026-01-15` (initial release on January 15, 2026) and `2026-04-24` (current revision on April 24, 2026), and OpenAI and Hugging Face contributed Open Responses to the Linux Foundation's Agentic AI Foundation (AAIF) on October 22, 2026 under a Technical Steering Committee; an API is compliant when it implements the specification directly or as a proper superset.",
   "track": "linux-foundation",
   "use_cases": [
    "expose-tools-to-agents",
    "agent-to-agent-messaging"
   ],
   "version": {
    "date": "2026-04-24",
    "label": "Immutable dated OpenAPI snapshots: current revision 2026-04-24 (April 24, 2026); initial release 2026-01-15 (January 15, 2026)"
   },
   "watch": [
    {
     "mode": "commit",
     "repo": "openresponses/openresponses",
     "type": "github"
    },
    {
     "cadence": "weekly",
     "selector": "main",
     "type": "page",
     "url": "https://www.openresponses.org/specification"
    }
   ],
   "tier": "flagship",
   "lifecycle_status": "published_standard",
   "wire_archetype": "harnesses_rpc_ui",
   "freshness": "current",
   "v05_verified": true,
   "v05_last_checked_display": "2026-11-11",
   "v05_hatnote_html_md": "Open Responses is the open multi-provider LLM inference specification built on top of OpenAI's proprietary Responses API and hosted under the Linux Foundation's Agentic AI Foundation (AAIF); for agent-to-tool and agent-to-agent protocols, see [Model Context Protocol (MCP)](/protocols/mcp/) and [Agent2Agent Protocol (A2A)](/protocols/a2a/), and for UI or editor harnesses, see [Agent-User Interaction Protocol (AG-UI)](/protocols/ag-ui/) and [Agent Client Protocol](/protocols/agent-client-protocol/). [1][2][3]",
   "v05_elevator_pitch_md": "Open Responses is an open-source API specification that provides a unified request, streaming, and tool-calling interface for running multi-step agentic workflows across cloud LLM providers and local inference engines. Rather than maintaining separate translation adapters for incompatible vendor endpoints and single-turn chat schemas, developers target one `POST /v1/responses` contract that exchanges typed `Items` and semantic `text/event-stream` events across OpenAI, Anthropic, Gemini, and open-weight models. [1][4][5]",
   "v05_lead_md": "**Open Responses** is an open-source specification for multi-provider, interoperable large language model (LLM) interfaces built on top of the original OpenAI Responses API. [1][2] Clients send structured requests to `POST /v1/responses` (or open an optional persistent WebSocket on `/v1/responses` starting each turn with `response.create`) and exchange polymorphic `Items`—the atomic units of model output, tool invocation, and reasoning state—alongside semantic Server-Sent Events (`text/event-stream`) rather than raw text or object deltas. [4][5] The specification changelog records `2026-01-15` (initial release on January 15, 2026) and `2026-04-24` (current revision on April 24, 2026), and OpenAI and Hugging Face contributed Open Responses to the Linux Foundation's Agentic AI Foundation (AAIF) on October 22, 2026 under a Technical Steering Committee; an API is compliant when it implements the specification directly or as a proper superset. [3][5][6][7][8]",
   "v05_identity_sentence_md": "**Open Responses** is an open-source specification for multi-provider, interoperable large language model (LLM) interfaces built on top of the original OpenAI Responses API. [1][2]",
   "v05_infobox_rows": [
    {
     "label": "Category",
     "value_md": "[Act](/category/act/) (`act`)"
    },
    {
     "label": "Form",
     "value_md": "Endpoint (`endpoint`)"
    },
    {
     "label": "Originated by",
     "value_md": "OpenAI and Hugging Face (announced January 15, 2026; repository `openresponses/openresponses` created `2026-01-15`) [2][7][9]"
    },
    {
     "label": "Governed by",
     "value_md": "Technical Steering Committee (TSC) of Open Responses, a Series of LF Projects, LLC ([Technical Charter](https://www.openresponses.org/governance) adopted October 21, 2026). The TSC Chair is the primary communication contact with the Agentic AI Foundation (AAIF), a directed fund of The Linux Foundation (initial TSC voting maintainers from OpenAI, Databricks, Amazon, Hugging Face, Ollama, OpenRouter, and Ramp). [8][10]"
    },
    {
     "label": "Track",
     "value_md": "Linux Foundation (Agentic AI Foundation, a directed fund) [3][8]"
    },
    {
     "label": "Status",
     "value_md": "Specification changelog records `2026-01-15` (initial release) and `2026-04-24` (current revision); contributed to the Agentic AI Foundation (AAIF) on October 22, 2026 [3][6]"
    },
    {
     "label": "Version",
     "value_md": "Immutable dated OpenAPI `3.1.0` snapshots: `2026-04-24` (April 24, 2026 current revision) and `2026-01-15` (January 15, 2026 initial release) [1][5][11][12]"
    },
    {
     "label": "Message format",
     "value_md": "JSON items (atomic unit of model output, tool invocation, or reasoning state) and semantic streaming events [5]"
    },
    {
     "label": "Transports",
     "value_md": "HTTP `/v1/responses` with optional persistent WebSocket transport at the same `/v1/responses` resource (added `2026-04-24`; clients start each turn by sending `response.create`). [5][6]"
    },
    {
     "label": "Schemes",
     "value_md": "HTTP bearer (`ApiKeyAuth` in the 2026-04-24 OpenAPI document) [11]"
    },
    {
     "label": "Specification",
     "value_md": "[Specification](https://www.openresponses.org/specification) (version 2026-04-24) [5][11]"
    },
    {
     "label": "Found at",
     "value_md": "OpenAPI server `https://api.openai.com/v1` with path `/responses` (described as `/v1/responses`). OpenRouter documents `POST https://openrouter.ai/api/v1/responses`. Databricks documents `/serving-endpoints/open-responses`. [11][13][14]"
    },
    {
     "label": "Licence",
     "value_md": "Apache License 2.0 (inbound code and GitHub repository); CC BY 4.0 (documentation). [8][9]"
    }
   ],
   "v05_problem_md": "While LLM APIs have converged on shared primitives, providers expose incompatible native request/response shapes: Anthropic defines `POST /v1/messages` and Google directs developers to its `Interactions API`, requiring a translating router or adapter layer unless providers adopt a shared wire schema. [15][16][17][18] Furthermore, the Chat Completion format was designed for single-turn chat and falls short for agentic workflows; when a model emits a client-side function call, the application developer must execute the function and return its output on a subsequent turn. [5][7] Open Responses standardizes these concepts so clients describe inputs and outputs once and run them on OpenAI, Anthropic, Gemini, or local models. [5] Model providers may emit custom item types outside the core specification, provided those items are prefixed with the canonical provider slug and do not alter required core behavior. [5] For customer-hosted function calls, Open Responses specifies only the `function_call` and `function_call_output` wire items; execution happens outside the model provider and returns in a follow-up request. [4][5]",
   "v05_mechanism_delta_md": "Open Responses standardizes these concepts so clients describe inputs and outputs once and run them on OpenAI, Anthropic, Gemini, or local models. [5]",
   "v05_scope_boundary_md": "Model providers may emit custom item types outside the core specification, provided those items are prefixed with the canonical provider slug and do not alter required core behavior. [5] For customer-hosted function calls, Open Responses specifies only the `function_call` and `function_call_output` wire items; execution happens outside the model provider and returns in a follow-up request. [4][5]",
   "v05_fuzzy_additions": [
    {
     "id": "post-v1-responses-request-model-polymorphic-items-and-streaming-events",
     "heading": "POST /v1/responses request model, polymorphic items, and streaming events",
     "body_md": "Hugging Face describes a shared format practically capable of replacing chat completions, and a client example calls `/v1/responses`. Items are polymorphic and an atomic unit of model output, tool invocation, or reasoning state, while streaming servers MUST return `text/event-stream` for semantic events, not raw text or object deltas. [5][7]",
     "bullets": [
      {
       "label": "Request body fields",
       "text_md": "`POST /v1/responses` takes optional `model` and `input`, a string or an array of input items, plus optional `instructions`, `tools` the model may call, and `previous_response_id` for the prior turn. Optional `store` says whether the response is stored so it can be retrieved later. [4]"
      },
      {
       "label": "Polymorphic item model",
       "text_md": "Items are polymorphic, and a `message` has a different shape from a `function_call`. Items are discriminated by the `type` field. A `function_call_output` is the tool result returned by the tool, and reasoning items expose the model's internal thought process. [4][5]"
      },
      {
       "label": "Semantic streaming events",
       "text_md": "When `stream` is enabled, streaming servers MUST return `Content-Type: text/event-stream` and emit state-machine transitions. Top-level lifecycle events (`response.created`, `response.queued`, `response.in_progress`, `response.completed`, `response.failed`, and `response.incomplete`) bracket the stream, while item- and content-level events (`response.output_item.added`, `response.content_part.added`, and `response.output_text.delta`) stream incremental token and tool-call deltas. [4][5]"
      },
      {
       "label": "Reasoning and rehydration",
       "text_md": "Providers MAY surface raw reasoning through `content`, and MAY choose to never expose raw reasoning, returning `encrypted_content` that clients treat as opaque, non-inspectable, and round-trippable. `reasoning.encrypted_content` includes encrypted reasoning content so that it may be rehydrated on a subsequent request. [4][5]"
      }
     ]
    },
    {
     "id": "agentic-loop-execution-tool-calls-and-provider-extensibility",
     "heading": "Agentic loop execution, tool calls, and provider extensibility",
     "body_md": "Requests allow the model to do multiple things and yield back a result, whether this is developer-hosted tool calls where control is yielded back to the user, or provider-hosted tools where control is held by the model provider until the model signals an exit criteria. The specification has seen early adoption from Hugging Face, OpenRouter, Vercel, LM Studio, Ollama, and vLLM. [5][19]",
     "bullets": [
      {
       "label": "Loop steps across turns",
       "text_md": "Models can perceive input, reason, act through tools, and reflect on outcomes, and a request may let the model do multiple things and yield back a result. When `previous_response_id` is provided, the server MUST load both the prior input and output. [5]"
      },
      {
       "label": "Hosted and external tools",
       "text_md": "The model can call a function, but the developer must run it and return the output back to the LLM in a second request. External servers host MCP implementations, although control is not first yielded back to the developer. Internal tools run inside the provider. [5]"
      },
      {
       "label": "Prefixed schema extensions",
       "text_md": "The published contract is OpenAPI `3.1.0`. Provider item types not contained in the spec MUST be prefixed with the canonical provider slug. Extensions MUST NOT alter required core behavior, and OpenAPI definitions that depend on them may not validate or behave identically across other servers. [5][11]"
      },
      {
       "label": "Release history and AI SDK",
       "text_md": "The April 24, 2026 (`2026-04-24`) revision added optional WebSocket transport on `/v1/responses` and `POST /v1/responses/compact`, following the initial January 15, 2026 (`2026-01-15`) release. On the client side, the Vercel AI SDK provides `createOpenResponses` in `@ai-sdk/open-responses` for `generateText` and `streamText`. [6][20]"
      }
     ]
    }
   ],
   "v05_diagram": {
    "title": "The Agentic loop",
    "heading": "The Agentic loop",
    "mermaid": "sequenceDiagram\nautonumber\nparticipant User\nparticipant API as API Server\nparticipant LLM\nparticipant Tool\n\nUser->>API: user request\n\nloop agentic loop\nAPI->>LLM: sample from model\nLLM-->>API: Sampled message\nalt internal (provider-hosted) tool\nAPI->>Tool: sampled tool call arguments\nTool-->>API: tool result\nelse external (developer-hosted) tool\nAPI-->>User: tool call output item\nUser->>API: follow-up request with tool result\nelse no tool call\nNote right of API: loop finished\nend\nend\n\nAPI-->>User: output items",
    "caption_md": "The agentic loop sends a user request from `User` to `API Server`, which samples the `LLM`. For internal (provider-hosted) tools, `API Server` invokes `Tool` directly inside the loop; for externally-hosted tools, execution happens outside the model provider and the result is returned in a follow-up request. [5]"
   },
   "v05_wire_artifact": {
    "title": "Streaming HTTP semantic event: response.output_text.delta",
    "heading": "Streaming HTTP semantic event: response.output_text.delta",
    "lang": "text",
    "code": "event: response.output_text.delta\ndata: { \"type\":\"response.output_text.delta\",\"sequence_number\":10,\"item_id\":\"msg_07315d23576898080068e95daa2e34819685fb0a98a0503f78\",\"output_index\":0,\"content_index\":0,\"delta\":\" a\",\"logprobs\":[],\"obfuscation\":\"Wd6S45xQ7SyQLT\"}",
    "caption_md": "Streaming semantic event `response.output_text.delta`. The `event` field matches the `type` in the event body. Servers return `Content-Type: text/event-stream`. [5]"
   },
   "v05_counterparts": {
    "classic_analogues": [
     {
      "name": "Server-Sent Events (WHATWG HTML)",
      "spec_or_rfc": "WHATWG HTML, Server-Sent Events",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "Open Responses streams semantic events on `/v1/responses`, plus a 2026-04-24 WebSocket started with `response.create`. [5]"
     },
     {
      "name": "The WebSocket Protocol (RFC 6455)",
      "spec_or_rfc": "RFC 6455",
      "relation_type": "profiles_classic",
      "relation_label": "Profiles classic standard",
      "delta_md": "Release 2026-04-24 adds a WebSocket for `/v1/responses`; clients start turns with `response.create`. [6]"
     },
     {
      "name": "OpenAPI Specification 3.1",
      "spec_or_rfc": "OpenAPI 3.1.0",
      "relation_type": "analogous_to_classic",
      "relation_label": "Analogous to classic standard",
      "delta_md": "The 2026-04-24 contract declares OpenAPI 3.1.0. Compliance is this spec or a proper superset, checked against that schema. [5][11][21]"
     }
    ],
    "agentic_peers": [
     {
      "target_id": "ag-ui",
      "target_name": "Agent-User Interaction Protocol (AG-UI)",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "AG-UI streams bi-directional agent-to-frontend UI state and user-facing events over HTTP+SSE or HTTP+Protobuf, whereas Open Responses standardizes harness-to-LLM `/v1/responses` inference turns over HTTP or WebSocket. [5][6][22][23]"
     },
     {
      "target_id": "mcp",
      "target_name": "Model Context Protocol",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "MCP is JSON-RPC 2.0 for resources, prompts, and tools. Open Responses is `/v1/responses` and names MCP servers as tool hosts. [5][24]"
     },
     {
      "target_id": "agent-client-protocol",
      "target_name": "Agent Client Protocol",
      "relation_type": "peer_alternative",
      "relation_label": "Peer alternative",
      "delta_md": "ACP connects code editors and IDEs to coding-agent harnesses over JSON-RPC 2.0 subprocesses, whereas Open Responses standardizes HTTP and WebSocket `/v1/responses` model inference calls. [5][6][25][26]"
     },
     {
      "target_id": "a2a",
      "target_name": "Agent2Agent Protocol (A2A)",
      "relation_type": "complements",
      "relation_label": "Complements",
      "delta_md": "A2A delegates tasks over JSON-RPC, gRPC, or HTTP+JSON, discovered at `/.well-known/agent-card.json`. Open Responses returns a model response. [5][27]"
     }
    ]
   },
   "v05_adoption": {
    "visible": true,
    "empty_state_note_md": null,
    "scope_note_md": "Selected verified implementations (14 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).",
    "side_a": {
     "visible": true,
     "heading": "Inference engines, model routers & API providers",
     "col4_header": "Transport & Scope",
     "note_md": null,
     "rows": [
      {
       "actor": "OpenAI",
       "role": "Inference API",
       "status": "Supported",
       "status_display": "Supported · as of 2026-04-24",
       "col4_md": "Baseline `POST /v1/responses` endpoint (`https://api.openai.com/v1`, HTTP JSON and `text/event-stream`) on which Open Responses is built. Steve Coffey and Ji Huang (OpenAI) are initial TSC voting members.",
       "source_md": "[Open Responses OpenAPI 2026-04-24](https://www.openresponses.org/openapi/2026-04-24/openapi.json) [11] · [OpenAI API changelog](https://developers.openai.com/api/docs/changelog) [2] · [Open Responses maintainers](https://raw.githubusercontent.com/openresponses/openresponses/main/MAINTAINERS.md) [10]"
      },
      {
       "actor": "Vercel AI Gateway",
       "role": "Model router",
       "status": "Supported",
       "status_display": "Supported · as of 2026-01-15",
       "col4_md": "Day 0 launch partner; AI SDK example URL `https://ai-gateway.vercel.sh/v1/responses`.",
       "source_md": "[Vercel changelog, January 15, 2026](https://vercel.com/changelog/openresponses-api-now-supported-on-vercel-ai-gateway) [28] · [AI SDK Open Responses provider](https://ai-sdk.dev/providers/ai-sdk-providers/open-responses) [20] · [The New Stack, October 22, 2026](https://thenewstack.io/openai-donates-open-responses/) [17]"
      },
      {
       "actor": "OpenRouter",
       "role": "Model router",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "POST `https://openrouter.ai/api/v1/responses` for streaming or non-streaming OpenResponses. Matt Apperson (OpenRouter) is an initial TSC voting member.",
       "source_md": "[OpenRouter, Create a response](https://openrouter.ai/docs/api/api-reference/responses/create-a-response) [13] · [Agno Open Responses reference](https://docs.agno.com/reference/models/open-responses) [29] · [Open Responses maintainers](https://raw.githubusercontent.com/openresponses/openresponses/main/MAINTAINERS.md) [10]"
      },
      {
       "actor": "Hugging Face Inference Providers",
       "role": "Inference router",
       "status": "Supported (preview)",
       "status_display": "Supported (preview) · as of 2026-01-15",
       "col4_md": "Early-access Space `https://evalstate-openresponses.hf.space/v1/responses` shows `response.reasoning.delta`. Ben Burtenshaw and Shaun Smith (HuggingFace) are initial TSC voting members.",
       "source_md": "[Hugging Face, Open Responses, 2026-01-15](https://huggingface.co/blog/open-responses) [7] · [AWS Open Source Blog, October 22, 2026](https://aws.amazon.com/blogs/opensource/open-responses-joins-aaif-with-aws-support/) [30] · [Open Responses maintainers](https://raw.githubusercontent.com/openresponses/openresponses/main/MAINTAINERS.md) [10]"
      },
      {
       "actor": "LM Studio",
       "role": "Local inference engine",
       "status": "Supported",
       "status_display": "Supported · as of 2026-01-15",
       "col4_md": "LM Studio `0.3.39` (`2026-01-15`) makes local `/v1/responses` match the specification.",
       "source_md": "[LM Studio blog, 2026-01-15](https://lmstudio.ai/blog/openresponses) [31]"
      },
      {
       "actor": "Databricks Model Serving",
       "role": "Inference API",
       "status": "Supported",
       "status_display": "Supported · as of 2026-10-02",
       "col4_md": "Stateless `/serving-endpoints/open-responses`; `previous_response_id` unsupported (updated October 2, 2026). Ankit Mathur (Databricks) is an initial TSC voting member.",
       "source_md": "[Databricks, Query with the Open Responses API](https://docs.databricks.com/aws/en/machine-learning/model-serving/query-open-responses-models) [14] · [The New Stack, October 22, 2026](https://thenewstack.io/openai-donates-open-responses/) [17] · [Open Responses maintainers](https://raw.githubusercontent.com/openresponses/openresponses/main/MAINTAINERS.md) [10]"
      },
      {
       "actor": "Ollama",
       "role": "Local inference engine",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Agno names Ollama (`v0.13.3+`); AWS and InfoQ also list it as serving the format. Devon Rifkin (Ollama) is an initial TSC voting member.",
       "source_md": "[Agno Open Responses reference](https://docs.agno.com/reference/models/open-responses) [29] · [AWS Open Source Blog, October 22, 2026](https://aws.amazon.com/blogs/opensource/open-responses-joins-aaif-with-aws-support/) [30] · [InfoQ, February 2, 2026](https://www.infoq.com/news/2026/02/openai-open-responses/) [19] · [Open Responses maintainers](https://raw.githubusercontent.com/openresponses/openresponses/main/MAINTAINERS.md) [10]"
      },
      {
       "actor": "vLLM",
       "role": "Inference engine",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "AWS, The New Stack, and InfoQ name vLLM among projects serving the format.",
       "source_md": "[AWS Open Source Blog, October 22, 2026](https://aws.amazon.com/blogs/opensource/open-responses-joins-aaif-with-aws-support/) [30] · [The New Stack, October 22, 2026](https://thenewstack.io/openai-donates-open-responses/) [17] · [InfoQ, February 2, 2026](https://www.infoq.com/news/2026/02/openai-open-responses/) [19]"
      },
      {
       "actor": "Amazon Bedrock",
       "role": "Inference API",
       "status": "Partial",
       "status_display": "Partial · as of 2026-10-22",
       "col4_md": "Supports the Responses API format on `bedrock-runtime` and `bedrock-mantle` (streaming and non-streaming; launched December 2025); AWS joined AAIF in support of Open Responses on October 22, 2026. Anthony Liguori (Amazon) is an initial TSC voting member.",
       "source_md": "[AWS Open Source Blog, October 22, 2026](https://aws.amazon.com/blogs/opensource/open-responses-joins-aaif-with-aws-support/) [30] · [The New Stack, October 22, 2026](https://thenewstack.io/openai-donates-open-responses/) [17] · [Open Responses maintainers](https://raw.githubusercontent.com/openresponses/openresponses/main/MAINTAINERS.md) [10]"
      }
     ]
    },
    "side_b": {
     "visible": true,
     "heading": "Client SDKs, agent frameworks & compliance suites",
     "col4_header": "Transport & Scope",
     "note_md": null,
     "rows": [
      {
       "actor": "Vercel AI SDK",
       "role": "Client SDK",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "`createOpenResponses` from `@ai-sdk/open-responses` for `generateText` and `streamText`.",
       "source_md": "[AI SDK Open Responses provider](https://ai-sdk.dev/providers/ai-sdk-providers/open-responses) [20]"
      },
      {
       "actor": "Agno",
       "role": "Agent framework",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "`OpenResponses` base class; stateless, no `previous_response_id`; configurable `base_url`.",
       "source_md": "[Agno Open Responses reference](https://docs.agno.com/reference/models/open-responses) [29]"
      },
      {
       "actor": "openresponses/openresponses",
       "role": "Compliance suite",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Published suite: Browser Runnable 10 tests and CLI Only 7 tests against the OpenAPI schema.",
       "source_md": "[Acceptance tests](https://www.openresponses.org/compliance) [21] · [openresponses/openresponses README](https://raw.githubusercontent.com/openresponses/openresponses/main/README.md) [1] · [GitHub repository](https://github.com/openresponses/openresponses) [9]"
      },
      {
       "actor": "OpenAI SDK",
       "role": "Client SDK",
       "status": "Supported",
       "status_display": "Supported · checked 2026-10-30",
       "col4_md": "Official OpenAI SDK for the Responses API; targets compliant third-party endpoints (such as Amazon Bedrock) by overriding the base URL and API key.",
       "source_md": "[AWS Open Source Blog, October 22, 2026](https://aws.amazon.com/blogs/opensource/open-responses-joins-aaif-with-aws-support/) [30] · [OpenAI API changelog](https://developers.openai.com/api/docs/changelog) [2]"
      },
      {
       "actor": "openresponses-python examples",
       "role": "Example proxy roster",
       "status": "Listed",
       "status_display": "Listed · checked 2026-11-06",
       "col4_md": "Example proxies listen on `8001` (OpenRouter), `8002` (OpenAI), `8003` (Ollama), `8004` (LM Studio), and `8005` (Hugging Face).",
       "source_md": "[openresponses-python examples](https://udapy.github.io/openresponses-python/examples/) [32]"
      }
     ]
    },
    "additional_tables": null,
    "censuses": [
     {
      "label": "The New Stack, October 22, 2026",
      "as_of": "2026-10-22",
      "value_md": "The New Stack says AWS (in Bedrock), Databricks, LM Studio, Ollama, Hugging Face, Nvidia, OpenRouter, Red Hat, Vercel, vLLM, and OGC (previously Llama Stack) support the specification, and that Vercel AI Gateway and Databricks Model Serving already implement it. [17]"
     },
     {
      "label": "Open Responses acceptance tests",
      "as_of": "2026-10-30",
      "value_md": "The acceptance-test page lists Browser Runnable 10 tests and CLI Only 7 tests, and says the suite validates responses against the OpenAPI schema. [21]"
     }
    ],
    "footer_md": null
   },
   "v05_see_also": [
    {
     "target_id": "agent-protocol-aief",
     "target_name": "Agent Protocol",
     "relation_label": "Peer alternative",
     "delta": "The AIEF API executes steps on a task resource via POST /ap/v1/agent/tasks/{task_id}/steps, while Open Responses creates a model response at /v1/responses and can continue a turn over WebSocket with response.create.",
     "item_md": "**[Agent Protocol](/protocols/agent-protocol-aief/)** (Peer alternative) — The AIEF API executes steps on a task resource via POST /ap/v1/agent/tasks/{task_id}/steps, while Open Responses creates a model response at /v1/responses and can continue a turn over WebSocket with response.create."
    },
    {
     "item_md": "**[Act protocols](/category/act/)** — Category index for `act` standards."
    }
   ],
   "v05_compiled_md": "---\nid: open-responses\ntitle: \"Open Responses\"\ntier: flagship\nlifecycle_status: published_standard\ncategory: act\nform: endpoint\nwire_archetype: harnesses_rpc_ui\nspec_url: https://www.openresponses.org/specification\nlast_checked: 2026-11-11\n---\n\n# Open Responses\n\n**Category:** [Act](/category/act/) (`act`) · **Form:** Endpoint (`endpoint`) · **Last checked:** 2026-11-11\n\n> *Open Responses is the open multi-provider LLM inference specification built on top of OpenAI's proprietary Responses API and hosted under the Linux Foundation's Agentic AI Foundation (AAIF); for agent-to-tool and agent-to-agent protocols, see [Model Context Protocol (MCP)](/protocols/mcp/) and [Agent2Agent Protocol (A2A)](/protocols/a2a/), and for UI or editor harnesses, see [Agent-User Interaction Protocol (AG-UI)](/protocols/ag-ui/) and [Agent Client Protocol](/protocols/agent-client-protocol/). [1][2][3]*\n\n> **In brief:** Open Responses is an open-source API specification that provides a unified request, streaming, and tool-calling interface for running multi-step agentic workflows across cloud LLM providers and local inference engines. Rather than maintaining separate translation adapters for incompatible vendor endpoints and single-turn chat schemas, developers target one `POST /v1/responses` contract that exchanges typed `Items` and semantic `text/event-stream` events across OpenAI, Anthropic, Gemini, and open-weight models. [1][4][5]\n\n**Open Responses** is an open-source specification for multi-provider, interoperable large language model (LLM) interfaces built on top of the original OpenAI Responses API. [1][2] Clients send structured requests to `POST /v1/responses` (or open an optional persistent WebSocket on `/v1/responses` starting each turn with `response.create`) and exchange polymorphic `Items`—the atomic units of model output, tool invocation, and reasoning state—alongside semantic Server-Sent Events (`text/event-stream`) rather than raw text or object deltas. [4][5] The specification changelog records `2026-01-15` (initial release on January 15, 2026) and `2026-04-24` (current revision on April 24, 2026), and OpenAI and Hugging Face contributed Open Responses to the Linux Foundation's Agentic AI Foundation (AAIF) on October 22, 2026 under a Technical Steering Committee; an API is compliant when it implements the specification directly or as a proper superset. [3][5][6][7][8]\n\n| Field | Value |\n| :--- | :--- |\n| **Category** | [Act](/category/act/) (`act`) |\n| **Form** | Endpoint (`endpoint`) |\n| **Originated by** | OpenAI and Hugging Face (announced January 15, 2026; repository `openresponses/openresponses` created `2026-01-15`) [2][7][9] |\n| **Governed by** | Technical Steering Committee (TSC) of Open Responses, a Series of LF Projects, LLC ([Technical Charter](https://www.openresponses.org/governance) adopted October 21, 2026). The TSC Chair is the primary communication contact with the Agentic AI Foundation (AAIF), a directed fund of The Linux Foundation (initial TSC voting maintainers from OpenAI, Databricks, Amazon, Hugging Face, Ollama, OpenRouter, and Ramp). [8][10] |\n| **Track** | Linux Foundation (Agentic AI Foundation, a directed fund) [3][8] |\n| **Status** | Specification changelog records `2026-01-15` (initial release) and `2026-04-24` (current revision); contributed to the Agentic AI Foundation (AAIF) on October 22, 2026 [3][6] |\n| **Version** | Immutable dated OpenAPI `3.1.0` snapshots: `2026-04-24` (April 24, 2026 current revision) and `2026-01-15` (January 15, 2026 initial release) [1][5][11][12] |\n| **Message format** | JSON items (atomic unit of model output, tool invocation, or reasoning state) and semantic streaming events [5] |\n| **Transports** | HTTP `/v1/responses` with optional persistent WebSocket transport at the same `/v1/responses` resource (added `2026-04-24`; clients start each turn by sending `response.create`). [5][6] |\n| **Schemes** | HTTP bearer (`ApiKeyAuth` in the 2026-04-24 OpenAPI document) [11] |\n| **Specification** | [Specification](https://www.openresponses.org/specification) (version 2026-04-24) [5][11] |\n| **Found at** | OpenAPI server `https://api.openai.com/v1` with path `/responses` (described as `/v1/responses`). OpenRouter documents `POST https://openrouter.ai/api/v1/responses`. Databricks documents `/serving-endpoints/open-responses`. [11][13][14] |\n| **Licence** | Apache License 2.0 (inbound code and GitHub repository); CC BY 4.0 (documentation). [8][9] |\n\n**Contents**\n1. [Problem and scope](#problem-and-scope)\n2. [POST /v1/responses request model, polymorphic items, and streaming events](#post-v1-responses-request-model-polymorphic-items-and-streaming-events)\n3. [Agentic loop execution, tool calls, and provider extensibility](#agentic-loop-execution-tool-calls-and-provider-extensibility)\n4. [Counterparts and related standards](#counterparts-and-related-standards)\n5. [Adoption and ecosystem](#adoption-and-ecosystem)\n6. [See also](#see-also)\n7. [References](#references)\n\n---\n\n## Problem and scope\n\nWhile LLM APIs have converged on shared primitives, providers expose incompatible native request/response shapes: Anthropic defines `POST /v1/messages` and Google directs developers to its `Interactions API`, requiring a translating router or adapter layer unless providers adopt a shared wire schema. [15][16][17][18] Furthermore, the Chat Completion format was designed for single-turn chat and falls short for agentic workflows; when a model emits a client-side function call, the application developer must execute the function and return its output on a subsequent turn. [5][7] Open Responses standardizes these concepts so clients describe inputs and outputs once and run them on OpenAI, Anthropic, Gemini, or local models. [5] Model providers may emit custom item types outside the core specification, provided those items are prefixed with the canonical provider slug and do not alter required core behavior. [5] For customer-hosted function calls, Open Responses specifies only the `function_call` and `function_call_output` wire items; execution happens outside the model provider and returns in a follow-up request. [4][5]\n\n### The Agentic loop\n\n```mermaid\nsequenceDiagram\nautonumber\nparticipant User\nparticipant API as API Server\nparticipant LLM\nparticipant Tool\n\nUser->>API: user request\n\nloop agentic loop\nAPI->>LLM: sample from model\nLLM-->>API: Sampled message\nalt internal (provider-hosted) tool\nAPI->>Tool: sampled tool call arguments\nTool-->>API: tool result\nelse external (developer-hosted) tool\nAPI-->>User: tool call output item\nUser->>API: follow-up request with tool result\nelse no tool call\nNote right of API: loop finished\nend\nend\n\nAPI-->>User: output items\n```\n\n*The agentic loop sends a user request from `User` to `API Server`, which samples the `LLM`. For internal (provider-hosted) tools, `API Server` invokes `Tool` directly inside the loop; for externally-hosted tools, execution happens outside the model provider and the result is returned in a follow-up request. [5]*\n\n### Streaming HTTP semantic event: response.output_text.delta\n\n```text\nevent: response.output_text.delta\ndata: { \"type\":\"response.output_text.delta\",\"sequence_number\":10,\"item_id\":\"msg_07315d23576898080068e95daa2e34819685fb0a98a0503f78\",\"output_index\":0,\"content_index\":0,\"delta\":\" a\",\"logprobs\":[],\"obfuscation\":\"Wd6S45xQ7SyQLT\"}\n```\n\n*Streaming semantic event `response.output_text.delta`. The `event` field matches the `type` in the event body. Servers return `Content-Type: text/event-stream`. [5]*\n\n---\n\n## POST /v1/responses request model, polymorphic items, and streaming events\n\nHugging Face describes a shared format practically capable of replacing chat completions, and a client example calls `/v1/responses`. Items are polymorphic and an atomic unit of model output, tool invocation, or reasoning state, while streaming servers MUST return `text/event-stream` for semantic events, not raw text or object deltas. [5][7]\n\n- **Request body fields:** `POST /v1/responses` takes optional `model` and `input`, a string or an array of input items, plus optional `instructions`, `tools` the model may call, and `previous_response_id` for the prior turn. Optional `store` says whether the response is stored so it can be retrieved later. [4]\n- **Polymorphic item model:** Items are polymorphic, and a `message` has a different shape from a `function_call`. Items are discriminated by the `type` field. A `function_call_output` is the tool result returned by the tool, and reasoning items expose the model's internal thought process. [4][5]\n- **Semantic streaming events:** When `stream` is enabled, streaming servers MUST return `Content-Type: text/event-stream` and emit state-machine transitions. Top-level lifecycle events (`response.created`, `response.queued`, `response.in_progress`, `response.completed`, `response.failed`, and `response.incomplete`) bracket the stream, while item- and content-level events (`response.output_item.added`, `response.content_part.added`, and `response.output_text.delta`) stream incremental token and tool-call deltas. [4][5]\n- **Reasoning and rehydration:** Providers MAY surface raw reasoning through `content`, and MAY choose to never expose raw reasoning, returning `encrypted_content` that clients treat as opaque, non-inspectable, and round-trippable. `reasoning.encrypted_content` includes encrypted reasoning content so that it may be rehydrated on a subsequent request. [4][5]\n\n---\n\n## Agentic loop execution, tool calls, and provider extensibility\n\nRequests allow the model to do multiple things and yield back a result, whether this is developer-hosted tool calls where control is yielded back to the user, or provider-hosted tools where control is held by the model provider until the model signals an exit criteria. The specification has seen early adoption from Hugging Face, OpenRouter, Vercel, LM Studio, Ollama, and vLLM. [5][19]\n\n- **Loop steps across turns:** Models can perceive input, reason, act through tools, and reflect on outcomes, and a request may let the model do multiple things and yield back a result. When `previous_response_id` is provided, the server MUST load both the prior input and output. [5]\n- **Hosted and external tools:** The model can call a function, but the developer must run it and return the output back to the LLM in a second request. External servers host MCP implementations, although control is not first yielded back to the developer. Internal tools run inside the provider. [5]\n- **Prefixed schema extensions:** The published contract is OpenAPI `3.1.0`. Provider item types not contained in the spec MUST be prefixed with the canonical provider slug. Extensions MUST NOT alter required core behavior, and OpenAPI definitions that depend on them may not validate or behave identically across other servers. [5][11]\n- **Release history and AI SDK:** The April 24, 2026 (`2026-04-24`) revision added optional WebSocket transport on `/v1/responses` and `POST /v1/responses/compact`, following the initial January 15, 2026 (`2026-01-15`) release. On the client side, the Vercel AI SDK provides `createOpenResponses` in `@ai-sdk/open-responses` for `generateText` and `streamText`. [6][20]\n\n---\n\n## Counterparts and related standards\n\n### Classic web analogues\n\n| Standard | Spec / RFC | Relationship | Architectural Delta |\n| :--- | :--- | :--- | :--- |\n| **Server-Sent Events (WHATWG HTML)** | `WHATWG HTML, Server-Sent Events` | Analogous to classic standard | Open Responses streams semantic events on `/v1/responses`, plus a 2026-04-24 WebSocket started with `response.create`. [5] |\n| **The WebSocket Protocol (RFC 6455)** | `RFC 6455` | Profiles classic standard | Release 2026-04-24 adds a WebSocket for `/v1/responses`; clients start turns with `response.create`. [6] |\n| **OpenAPI Specification 3.1** | `OpenAPI 3.1.0` | Analogous to classic standard | The 2026-04-24 contract declares OpenAPI 3.1.0. Compliance is this spec or a proper superset, checked against that schema. [5][11][21] |\n\n### Agentic protocol peers\n\n| Protocol | Relationship | Architectural Delta |\n| :--- | :--- | :--- |\n| **[Agent-User Interaction Protocol (AG-UI)](/protocols/ag-ui/)** | Peer alternative | AG-UI streams bi-directional agent-to-frontend UI state and user-facing events over HTTP+SSE or HTTP+Protobuf, whereas Open Responses standardizes harness-to-LLM `/v1/responses` inference turns over HTTP or WebSocket. [5][6][22][23] |\n| **[Model Context Protocol](/protocols/mcp/)** | Complements | MCP is JSON-RPC 2.0 for resources, prompts, and tools. Open Responses is `/v1/responses` and names MCP servers as tool hosts. [5][24] |\n| **[Agent Client Protocol](/protocols/agent-client-protocol/)** | Peer alternative | ACP connects code editors and IDEs to coding-agent harnesses over JSON-RPC 2.0 subprocesses, whereas Open Responses standardizes HTTP and WebSocket `/v1/responses` model inference calls. [5][6][25][26] |\n| **[Agent2Agent Protocol (A2A)](/protocols/a2a/)** | Complements | A2A delegates tasks over JSON-RPC, gRPC, or HTTP+JSON, discovered at `/.well-known/agent-card.json`. Open Responses returns a model response. [5][27] |\n\n---\n\n## Adoption and ecosystem\n\n*Selected verified implementations (14 probed or cited examples across 2 tables; non-exhaustive — see [Ecosystem censuses](#ecosystem-censuses) below for ecosystem-wide totals).*\n\n### Inference engines, model routers & API providers\n\n| Actor | Role | Status | Transport & Scope | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **OpenAI** | Inference API | Supported · as of 2026-04-24 | Baseline `POST /v1/responses` endpoint (`https://api.openai.com/v1`, HTTP JSON and `text/event-stream`) on which Open Responses is built. Steve Coffey and Ji Huang (OpenAI) are initial TSC voting members. | [Open Responses OpenAPI 2026-04-24](https://www.openresponses.org/openapi/2026-04-24/openapi.json) [11] · [OpenAI API changelog](https://developers.openai.com/api/docs/changelog) [2] · [Open Responses maintainers](https://raw.githubusercontent.com/openresponses/openresponses/main/MAINTAINERS.md) [10] |\n| **Vercel AI Gateway** | Model router | Supported · as of 2026-01-15 | Day 0 launch partner; AI SDK example URL `https://ai-gateway.vercel.sh/v1/responses`. | [Vercel changelog, January 15, 2026](https://vercel.com/changelog/openresponses-api-now-supported-on-vercel-ai-gateway) [28] · [AI SDK Open Responses provider](https://ai-sdk.dev/providers/ai-sdk-providers/open-responses) [20] · [The New Stack, October 22, 2026](https://thenewstack.io/openai-donates-open-responses/) [17] |\n| **OpenRouter** | Model router | Supported · checked 2026-10-30 | POST `https://openrouter.ai/api/v1/responses` for streaming or non-streaming OpenResponses. Matt Apperson (OpenRouter) is an initial TSC voting member. | [OpenRouter, Create a response](https://openrouter.ai/docs/api/api-reference/responses/create-a-response) [13] · [Agno Open Responses reference](https://docs.agno.com/reference/models/open-responses) [29] · [Open Responses maintainers](https://raw.githubusercontent.com/openresponses/openresponses/main/MAINTAINERS.md) [10] |\n| **Hugging Face Inference Providers** | Inference router | Supported (preview) · as of 2026-01-15 | Early-access Space `https://evalstate-openresponses.hf.space/v1/responses` shows `response.reasoning.delta`. Ben Burtenshaw and Shaun Smith (HuggingFace) are initial TSC voting members. | [Hugging Face, Open Responses, 2026-01-15](https://huggingface.co/blog/open-responses) [7] · [AWS Open Source Blog, October 22, 2026](https://aws.amazon.com/blogs/opensource/open-responses-joins-aaif-with-aws-support/) [30] · [Open Responses maintainers](https://raw.githubusercontent.com/openresponses/openresponses/main/MAINTAINERS.md) [10] |\n| **LM Studio** | Local inference engine | Supported · as of 2026-01-15 | LM Studio `0.3.39` (`2026-01-15`) makes local `/v1/responses` match the specification. | [LM Studio blog, 2026-01-15](https://lmstudio.ai/blog/openresponses) [31] |\n| **Databricks Model Serving** | Inference API | Supported · as of 2026-10-02 | Stateless `/serving-endpoints/open-responses`; `previous_response_id` unsupported (updated October 2, 2026). Ankit Mathur (Databricks) is an initial TSC voting member. | [Databricks, Query with the Open Responses API](https://docs.databricks.com/aws/en/machine-learning/model-serving/query-open-responses-models) [14] · [The New Stack, October 22, 2026](https://thenewstack.io/openai-donates-open-responses/) [17] · [Open Responses maintainers](https://raw.githubusercontent.com/openresponses/openresponses/main/MAINTAINERS.md) [10] |\n| **Ollama** | Local inference engine | Supported · checked 2026-10-30 | Agno names Ollama (`v0.13.3+`); AWS and InfoQ also list it as serving the format. Devon Rifkin (Ollama) is an initial TSC voting member. | [Agno Open Responses reference](https://docs.agno.com/reference/models/open-responses) [29] · [AWS Open Source Blog, October 22, 2026](https://aws.amazon.com/blogs/opensource/open-responses-joins-aaif-with-aws-support/) [30] · [InfoQ, February 2, 2026](https://www.infoq.com/news/2026/02/openai-open-responses/) [19] · [Open Responses maintainers](https://raw.githubusercontent.com/openresponses/openresponses/main/MAINTAINERS.md) [10] |\n| **vLLM** | Inference engine | Supported · checked 2026-10-30 | AWS, The New Stack, and InfoQ name vLLM among projects serving the format. | [AWS Open Source Blog, October 22, 2026](https://aws.amazon.com/blogs/opensource/open-responses-joins-aaif-with-aws-support/) [30] · [The New Stack, October 22, 2026](https://thenewstack.io/openai-donates-open-responses/) [17] · [InfoQ, February 2, 2026](https://www.infoq.com/news/2026/02/openai-open-responses/) [19] |\n| **Amazon Bedrock** | Inference API | Partial · as of 2026-10-22 | Supports the Responses API format on `bedrock-runtime` and `bedrock-mantle` (streaming and non-streaming; launched December 2025); AWS joined AAIF in support of Open Responses on October 22, 2026. Anthony Liguori (Amazon) is an initial TSC voting member. | [AWS Open Source Blog, October 22, 2026](https://aws.amazon.com/blogs/opensource/open-responses-joins-aaif-with-aws-support/) [30] · [The New Stack, October 22, 2026](https://thenewstack.io/openai-donates-open-responses/) [17] · [Open Responses maintainers](https://raw.githubusercontent.com/openresponses/openresponses/main/MAINTAINERS.md) [10] |\n\n### Client SDKs, agent frameworks & compliance suites\n\n| Actor | Role | Status | Transport & Scope | Source |\n| :--- | :--- | :--- | :--- | :--- |\n| **Vercel AI SDK** | Client SDK | Supported · checked 2026-10-30 | `createOpenResponses` from `@ai-sdk/open-responses` for `generateText` and `streamText`. | [AI SDK Open Responses provider](https://ai-sdk.dev/providers/ai-sdk-providers/open-responses) [20] |\n| **Agno** | Agent framework | Supported · checked 2026-10-30 | `OpenResponses` base class; stateless, no `previous_response_id`; configurable `base_url`. | [Agno Open Responses reference](https://docs.agno.com/reference/models/open-responses) [29] |\n| **openresponses/openresponses** | Compliance suite | Supported · checked 2026-10-30 | Published suite: Browser Runnable 10 tests and CLI Only 7 tests against the OpenAPI schema. | [Acceptance tests](https://www.openresponses.org/compliance) [21] · [openresponses/openresponses README](https://raw.githubusercontent.com/openresponses/openresponses/main/README.md) [1] · [GitHub repository](https://github.com/openresponses/openresponses) [9] |\n| **OpenAI SDK** | Client SDK | Supported · checked 2026-10-30 | Official OpenAI SDK for the Responses API; targets compliant third-party endpoints (such as Amazon Bedrock) by overriding the base URL and API key. | [AWS Open Source Blog, October 22, 2026](https://aws.amazon.com/blogs/opensource/open-responses-joins-aaif-with-aws-support/) [30] · [OpenAI API changelog](https://developers.openai.com/api/docs/changelog) [2] |\n| **openresponses-python examples** | Example proxy roster | Listed · checked 2026-11-06 | Example proxies listen on `8001` (OpenRouter), `8002` (OpenAI), `8003` (Ollama), `8004` (LM Studio), and `8005` (Hugging Face). | [openresponses-python examples](https://udapy.github.io/openresponses-python/examples/) [32] |\n\n### Ecosystem censuses\n\n- **The New Stack, October 22, 2026** (*as of 2026-10-22*): The New Stack says AWS (in Bedrock), Databricks, LM Studio, Ollama, Hugging Face, Nvidia, OpenRouter, Red Hat, Vercel, vLLM, and OGC (previously Llama Stack) support the specification, and that Vercel AI Gateway and Databricks Model Serving already implement it. [17]\n- **Open Responses acceptance tests** (*as of 2026-10-30*): The acceptance-test page lists Browser Runnable 10 tests and CLI Only 7 tests, and says the suite validates responses against the OpenAPI schema. [21]\n\n---\n\n## See also\n\n- **[Agent Protocol](/protocols/agent-protocol-aief/)** *(Peer alternative)* — The AIEF API executes steps on a task resource via POST /ap/v1/agent/tasks/{task_id}/steps, while Open Responses creates a model response at /v1/responses and can continue a turn over WebSocket with response.create.\n- **Category:** [Act protocols](/category/act/)\n\n---\n\n## References\n\n1. Open Responses, *README* (fetched 2026-10-30) — <https://raw.githubusercontent.com/openresponses/openresponses/main/README.md>\n2. OpenAI, *Changelog | OpenAI API* (Open Responses entry 2026-01-15; fetched 2026-10-30) — <https://developers.openai.com/api/docs/changelog>\n3. The Linux Foundation, *Agentic AI Foundation Announces Four New Projects: Agent Skills, Open Responses, OpenEnv, and OpenSandbox* (2026-10-22) — <https://www.linuxfoundation.org/press/agentic-ai-foundation-announces-four-new-projects-agent-skills-open-responses-openenv-and-opensandbox>\n4. Open Responses, *Reference: Create a response* (POST /v1/responses field catalog) — <https://www.openresponses.org/reference>\n5. Open Responses, *Specification* (version 2026-04-24 (Current); prior snapshot 2026-01-15; fetched 2026-10-30) — <https://www.openresponses.org/specification>\n6. Open Responses, *Changelog* (releases 2026-04-24 and 2026-01-15; fetched 2026-10-30) — <https://www.openresponses.org/changelog>\n7. Shaun Smith, Ben Burtenshaw, merve, and Pedro Cuenca (Hugging Face), *Open Responses: What you need to know* (published 2026-01-15) — <https://huggingface.co/blog/open-responses>\n8. Open Responses a Series of LF Projects, LLC, *Technical Charter* (adopted 2026-10-21; fetched 2026-10-30) — <https://www.openresponses.org/governance>\n9. Open Responses, *openresponses/openresponses* (created 2026-01-15; fetched 2026-10-30) — <https://github.com/openresponses/openresponses>\n10. Open Responses (LF Projects, LLC), *Maintainers* (fetched 2026-11-11) — <https://raw.githubusercontent.com/openresponses/openresponses/main/MAINTAINERS.md>\n11. Open Responses, *Open Responses OpenAPI* (openapi 3.1.0; info.version 2026-04-24; fetched 2026-10-30) — <https://www.openresponses.org/openapi/2026-04-24/openapi.json>\n12. Open Responses, *CONTRIBUTING* (fetched 2026-10-30) — <https://raw.githubusercontent.com/openresponses/openresponses/main/CONTRIBUTING>\n13. OpenRouter, *Create a response* (fetched 2026-10-30) — <https://openrouter.ai/docs/api/api-reference/responses/create-a-response>\n14. Databricks, *Query a model with the Open Responses API* (fetched 2026-10-30) — <https://docs.databricks.com/aws/en/machine-learning/model-serving/query-open-responses-models>\n15. Open Responses, *Open Responses* (fetched 2026-10-30; HTTP last-modified 2026-10-29) — <https://www.openresponses.org/>\n16. Anthropic, *API overview* (fetched 2026-10-30) — <https://platform.claude.com/docs/en/api/overview>\n17. Frederic Lardinois (The New Stack), *OpenAI donates Open Responses, its spec for a common LLM API, to the Agentic AI Foundation* (2026-10-22) — <https://thenewstack.io/openai-donates-open-responses/>\n18. Google AI for Developers, *OpenAI compatibility* (fetched 2026-10-30) — <https://ai.google.dev/gemini-api/docs/openai>\n19. Hien Luu (InfoQ), *Open Responses Specification Enables Unified Agentic LLM Workflows* (2026-02-02) — <https://www.infoq.com/news/2026/02/openai-open-responses/>\n20. Vercel, *Open Responses | AI SDK* (fetched 2026-10-30) — <https://ai-sdk.dev/providers/ai-sdk-providers/open-responses>\n21. Open Responses, *Acceptance Tests* (fetched 2026-10-30) — <https://www.openresponses.org/compliance>\n22. Agent User Interaction Protocol, *Specification* (AG-UI protocol 1.0; modified 2026-09-17) — <https://docs.ag-ui.com/spec/1.0/index>\n23. Agent User Interaction Protocol, *Overview* (modified 2026-10-28) — <https://docs.ag-ui.com/introduction>\n24. Model Context Protocol, *Specification* (version 2026-07-28 (latest)) — <https://modelcontextprotocol.io/specification/2026-07-28>\n25. Agent Client Protocol, *Overview* (modified 2026-10-30) — <https://agentclientprotocol.com/protocol/v1/overview>\n26. Nathan Sobo (Zed), *Introducing the Agent Client Protocol* (2025-08-27) — <https://zed.dev/blog/bring-your-own-agent-to-zed>\n27. The Linux Foundation, *A2A Protocol specification* (copyright 2026; v1.0) — <https://a2a-protocol.org/latest/specification/>\n28. Vercel, *OpenResponses API now supported on Vercel AI Gateway* (2026-01-15) — <https://vercel.com/changelog/openresponses-api-now-supported-on-vercel-ai-gateway>\n29. Agno, *Open Responses* (fetched 2026-10-30) — <https://docs.agno.com/reference/models/open-responses>\n30. Anthony Liguori, James Ward, and Libby Clark (AWS), *Open Responses Joins AAIF with AWS Support* (2026-10-22) — <https://aws.amazon.com/blogs/opensource/open-responses-joins-aaif-with-aws-support/>\n31. LM Studio Team, *Open Responses with local models via LM Studio* (published 2026-01-15) — <https://lmstudio.ai/blog/openresponses>\n32. openresponses-python examples, *Examples - OpenResponses Python* (undated examples page) — <https://udapy.github.io/openresponses-python/examples/>\n",
   "status_notice_md": null,
   "superseded_by": null
  }
 ]
}