<?xml version="1.0" encoding="utf-8"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude"
     ipr="trust200902"
     docName="draft-dimare-ans-protocol-registry-00"
     category="bcp"
     submissionType="IETF"
     consensus="true"
     version="3">

  <front>
    <title abbrev="ANS Protocol Identifiers">An IANA Registry for Agent Name Service (ANS) Protocol Identifiers</title>
    <seriesInfo name="Internet-Draft" value="draft-dimare-ans-protocol-registry-00"/>

    <author fullname="J. DiMare" initials="J." surname="DiMare">
      <organization>DNS of Money</organization>
      <address>
        <email>jdimare@pm.me</email>
      </address>
    </author>

    <date year="2026" month="July" day="25"/>

    <area>General</area>

    <keyword>agent</keyword>
    <keyword>ANS</keyword>
    <keyword>protocol identifier</keyword>
    <keyword>IANA registry</keyword>
    <keyword>payment</keyword>

    <abstract>
      <t>The Agent Name Service (ANS), described in
      draft-narajala-courtney-ansv2, identifies the interaction protocol an
      agent speaks by a protocol identifier carried in the "p" field of the
      agent's "_ans" DNS record and Trust Card. ANS defines the values "a2a",
      "mcp", and "http" by enumeration, and its IANA Considerations create no
      registry, leaving no interoperable procedure for adding a new protocol
      identifier. This document requests that IANA create an "ANS Protocol
      Identifiers" registry, registers the values already in use, and registers
      "pay" as the protocol identifier for agent payment.</t>
    </abstract>
  </front>

  <middle>

    <section anchor="introduction">
      <name>Introduction</name>
      <t>The Agent Name Service (ANS) <xref target="ANSv2"/> anchors an agent's
      identity to a DNS name of the form "ans://v{version}.{agentHost}". An agent
      declares the interaction protocol or protocols it speaks through a protocol
      identifier carried in the "p" field of the agent's "_ans" DNS record and in
      its Trust Card. ANSv2 Section 7.4.1 defines the values "a2a"
      (Agent-to-Agent), "mcp" (Model Context Protocol), and "http" (HTTP-based
      API); an omitted "p" field means "any protocol".</t>

      <t>These values are defined by enumeration in the specification text and in
      reference-implementation source. ANSv2's IANA Considerations state that the
      document "has no IANA actions at this time" and anticipate only the future
      registration of the "ans" URI scheme and the "_ans" family of underscore
      labels. There is therefore no IANA registry for ANS protocol identifiers
      and no documented procedure for adding one. A new interaction protocol has
      no interoperable way to be named in the "p" field: an implementer must
      either use an unregistered value, which fragments interoperability, or wait
      for a revision of the base specification, which does not scale.</t>

      <t>The gap is most visible for payment. The enumerated identifiers (ANSv2
      Section 7.4.1) are "a2a", "mcp", and "http"; none expresses payment. Yet
      the motivating scenario for ANS in its own text (ANSv2 Section 1.1) is a
      payment agent instructed to wire fifty thousand dollars to a supplier's
      agent. A metadata field whose headline use case is payment cannot express a
      payment protocol and cannot be extended to add one.</t>

      <t>This document closes the gap. It defines the syntax of a protocol
      identifier (<xref target="syntax"/>), a registration procedure and the "ANS
      Protocol Identifiers" registry (<xref target="procedure"/>), guidance for
      the Designated Expert (<xref target="expert"/>), the initial registry
      contents including the values already in use (<xref target="initial"/>),
      and the "pay" protocol identifier for agent payment (<xref
      target="pay"/>).</t>

      <t>The registry, not any single value, is the contribution. Once it exists,
      "pay" is one entry among others and any future protocol can register on
      equal footing.</t>
    </section>

    <section anchor="conventions">
      <name>Conventions and Definitions</name>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
      "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
      "OPTIONAL" in this document are to be interpreted as described in BCP 14
      <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
      appear in all capitals, as shown here.</t>

      <dl>
        <dt>Protocol Identifier:</dt>
        <dd>the token carried in the "p" field of an agent's "_ans" DNS record
        and Trust Card, naming an interaction protocol the agent speaks, as
        defined by <xref target="ANSv2"/>.</dd>
        <dt>Resolver / Verifier:</dt>
        <dd>a client that reads an agent's ANS metadata, including its protocol
        identifiers, before connecting.</dd>
        <dt>Designated Expert:</dt>
        <dd>the reviewer role defined by <xref target="RFC8126"/> for the
        "Specification Required" policy.</dd>
      </dl>
    </section>

    <section anchor="syntax">
      <name>Protocol Identifier Syntax</name>
      <t>A protocol identifier MUST be a string of one or more characters from
      the set of lowercase ASCII letters (a-z), digits (0-9), and the hyphen
      ("-"), and MUST begin with a lowercase ASCII letter. A protocol identifier
      MUST NOT exceed 32 characters. Comparison is case-sensitive; registrants
      MUST register the lowercase form and consumers MUST treat a value that is
      not already lowercase, or that is unregistered, as an unknown protocol
      rather than guessing an intended one.</t>

      <t>This syntax is a strict subset of the existing "a2a", "mcp", and "http"
      values and does not change how the "p" field is carried or parsed by <xref
      target="ANSv2"/>. It constrains only what a registrant may request.</t>
    </section>

    <section anchor="procedure">
      <name>Registration Procedure</name>
      <t>IANA is requested to create the "ANS Protocol Identifiers" registry
      (<xref target="iana"/>). The registration policy is "Specification
      Required" per <xref target="RFC8126"/>, which entails Expert Review.</t>

      <t>Each registration MUST provide:</t>
      <dl>
        <dt>Protocol Identifier:</dt>
        <dd>the token, conforming to <xref target="syntax"/>.</dd>
        <dt>Protocol Name:</dt>
        <dd>the human-readable name of the interaction protocol the identifier
        names.</dd>
        <dt>Reference:</dt>
        <dd>a stable, publicly retrievable specification of the protocol and of
        how a consumer of an ANS agent's metadata is expected to interact with an
        endpoint declaring this identifier. An Internet-Draft, RFC, or an
        equivalently stable and openly licensed specification satisfies this
        requirement.</dd>
        <dt>Usage Semantics:</dt>
        <dd>a short statement of what a consumer does upon finding this identifier
        in an agent's "p" field (for example, open an MCP session, or fetch a
        payment-requirements document).</dd>
        <dt>Change Controller:</dt>
        <dd>the entity permitted to modify the entry.</dd>
        <dt>Contact:</dt>
        <dd>an email address for the registrant.</dd>
      </dl>

      <t>Registrations are permanent by default. A protocol identifier MUST NOT
      be reassigned to a different protocol once registered; an obsolete
      identifier is marked "deprecated" but retained, so that historical agent
      records remain interpretable.</t>
    </section>

    <section anchor="expert">
      <name>Guidance for the Designated Expert</name>
      <t>The Designated Expert SHOULD evaluate a request against the following
      criteria and SHOULD NOT apply criteria beyond these:</t>
      <ul>
        <li>Distinctness: the identifier names an interaction protocol that is
        meaningfully distinct from those already registered. A request that
        duplicates an existing protocol under a new spelling SHOULD be
        rejected.</li>
        <li>Specification stability: the Reference is retrievable, is stable, and
        specifies usage semantics precisely enough for independent interoperable
        implementation.</li>
        <li>Namespace hygiene: the identifier is not confusingly similar to an
        existing entry, and is not a generic term likely to be needed by the base
        protocol itself.</li>
      </ul>
      <t>The Expert SHOULD NOT reject a request on the basis of the registrant's
      commercial interest in the protocol, provided the Reference is open and the
      semantics are interoperable. The purpose of the registry is to make
      protocol identifiers interoperable, not to adjudicate who benefits from a
      protocol.</t>
    </section>

    <section anchor="initial">
      <name>Initial Registry Contents</name>
      <t>IANA is requested to populate the registry with the following initial
      entries. The first three record the values already defined by <xref
      target="ANSv2"/> Section 7.4.1 and are registered here to bring the
      existing set under the procedure; their Reference is <xref target="ANSv2"/>
      pending any more specific document from the base-protocol authors.</t>

      <table anchor="initial-table">
        <name>Initial ANS Protocol Identifiers</name>
        <thead>
          <tr>
            <th>Identifier</th>
            <th>Protocol Name</th>
            <th>Reference</th>
            <th>Change Controller</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td>a2a</td>
            <td>Agent-to-Agent</td>
            <td>[ANSv2]</td>
            <td>IESG</td>
          </tr>
          <tr>
            <td>mcp</td>
            <td>Model Context Protocol</td>
            <td>[ANSv2]</td>
            <td>IESG</td>
          </tr>
          <tr>
            <td>http</td>
            <td>HTTP-based API</td>
            <td>[ANSv2]</td>
            <td>IESG</td>
          </tr>
          <tr>
            <td>pay</td>
            <td>Agent Payment</td>
            <td>This document, <xref target="pay"/></td>
            <td>J. DiMare</td>
          </tr>
        </tbody>
      </table>

      <t>The Change Controller for the three pre-existing values is shown as IESG
      on the expectation that the base-protocol authors are the proper
      controllers; this document defers to their preference and the final
      assignment is for the responsible AD to confirm. An agent MAY list more
      than one identifier in its "p" field; an omitted field continues to mean
      "any protocol" per <xref target="ANSv2"/>.</t>
    </section>

    <section anchor="pay">
      <name>The "pay" Protocol Identifier</name>
      <t>An agent whose "p" field contains "pay" declares that it speaks an agent
      payment protocol: a consumer that wishes to settle an obligation to the
      agent can obtain, from the agent's advertised endpoint, the information it
      needs to pay.</t>

      <t>Usage Semantics: upon finding "pay" in an agent's "p" field, a consumer
      retrieves a payment-requirements document that identifies one or more
      settlement endpoints and the parameters required to pay them. The concrete
      shape of that document is out of scope for this registration and is
      specified separately; this document registers only the identifier and its
      usage role. A companion draft specifies the payment-requirements document
      and its relationship to the HTTP 402 handshake and to agent-payment
      protocols already deployed in the field.</t>

      <t>The "pay" identifier does not itself move value, custody funds, or select
      a settlement rail. It marks an agent as payable and points a consumer at the
      information used to pay; the payment occurs by whatever protocol the
      advertised endpoint speaks. This keeps the identifier a discovery construct
      rather than a financial one and keeps this registration within the scope of
      a naming standard.</t>
    </section>

    <section anchor="relationship">
      <name>Relationship to Existing Work</name>
      <t>ANS base specification: <xref target="ANSv2"/> anticipates future
      registration of the "ans" URI scheme and the "_ans" family of underscore
      labels. This document is orthogonal to those actions: it registers values
      of the "p" protocol-identifier field, not the "ans" URI scheme and not any
      DNS underscore label. The registry defined here and any future ANS scheme
      or label registration can proceed independently, and the authors of this
      document will coordinate with the ANS base-protocol authors.</t>

      <t>payto: <xref target="RFC8905"/> defines the "payto" URI scheme for
      describing a payment target. The "pay" protocol identifier and the "payto"
      URI scheme operate at different layers and are complementary: "pay" marks an
      agent as payable in ANS discovery, while a payment-requirements document
      returned by a "pay" agent MAY express an individual settlement target as a
      "payto" URI where that target is expressible in <xref target="RFC8905"/>
      terms. The companion payment-requirements draft addresses this mapping
      normatively; implementers are cautioned not to treat the "pay" identifier
      and the "payto" scheme as interchangeable.</t>

      <t>ANS trust model: <xref target="ANSv2"/> defines a three-layer trust
      framework whose Layer 3 (behavioral reputation) currently carries no
      populated solvency signals. A separate contribution specifies a solvency
      signal and its ledger-anchored verification. That work is independent of
      this document; the protocol-identifier registry does not depend on it.</t>
    </section>

    <section anchor="security">
      <name>Security Considerations</name>
      <t>Identifier confusability: a registered identifier that is visually or
      semantically confusable with another can mislead a consumer into
      interacting with an agent under the wrong protocol. The Designated Expert's
      namespace-hygiene criterion (<xref target="expert"/>) is the primary
      mitigation. Consumers MUST treat an unregistered or non-lowercase value as
      an unknown protocol rather than guessing an intended one.</t>

      <t>Field integrity: the "p" field is carried in a DNS record and in the
      Trust Card. Its integrity therefore depends on the mechanisms ANS already
      specifies for those carriers (for example, DNSSEC and Trust Card signing),
      not on this registry. A consumer MUST NOT rely on an unauthenticated "p"
      value.</t>

      <t>Payment misdirection: an agent declaring "pay" points a consumer at
      information used to move value, and is therefore a high-value target for
      tampering. The integrity of the payment-requirements retrieval is the
      responsibility of the agent's endpoint and of the payment-requirements
      document format, not of this registry. Consumers SHOULD require
      cryptographic evidence of a settlement endpoint's authenticity and MUST NOT
      treat information retrieved over an unauthenticated channel as trustworthy.
      Registering "pay" confers no trust on any agent that declares it.</t>
    </section>

    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>IANA is requested to create a new registry group "Agent Name Service
      (ANS) Parameters" containing a registry titled "ANS Protocol
      Identifiers".</t>
      <dl>
        <dt>Registration Procedure:</dt>
        <dd>Specification Required <xref target="RFC8126"/>.</dd>
        <dt>Registry fields:</dt>
        <dd>Protocol Identifier; Protocol Name; Reference; Usage Semantics; Change
        Controller; Contact.</dd>
        <dt>Initial contents:</dt>
        <dd>as given in <xref target="initial"/>.</dd>
      </dl>
      <t>This registry governs values of the ANS "p" protocol-identifier field
      only. It does not register the "ans" URI scheme or any DNS underscore
      label; those remain for the base-protocol authors as anticipated in <xref
      target="ANSv2"/>. IANA is requested to record this document as the defining
      reference for the registry and its procedure.</t>
    </section>

  </middle>

  <back>
    <references>
      <name>Normative References</name>

      <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author initials="S." surname="Bradner" fullname="S. Bradner"/>
          <date year="1997" month="March"/>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
      </reference>

      <reference anchor="RFC8126" target="https://www.rfc-editor.org/info/rfc8126">
        <front>
          <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
          <author initials="M." surname="Cotton" fullname="M. Cotton"/>
          <author initials="B." surname="Leiba" fullname="B. Leiba"/>
          <author initials="T." surname="Narten" fullname="T. Narten"/>
          <date year="2017" month="June"/>
        </front>
        <seriesInfo name="BCP" value="26"/>
        <seriesInfo name="RFC" value="8126"/>
      </reference>

      <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author initials="B." surname="Leiba" fullname="B. Leiba"/>
          <date year="2017" month="May"/>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
      </reference>
    </references>

    <references>
      <name>Informative References</name>

      <reference anchor="ANSv2" target="https://datatracker.ietf.org/doc/draft-narajala-courtney-ansv2/">
        <front>
          <title>Agent Name Service v2 (ANS): A Domain-Anchored Trust Layer for Autonomous AI Agent Identity</title>
          <author initials="S." surname="Courtney" fullname="S. Courtney"/>
          <author initials="V. S." surname="Narajala" fullname="V. S. Narajala"/>
          <date year="2026"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-narajala-courtney-ansv2-01"/>
      </reference>

      <reference anchor="RFC8905" target="https://www.rfc-editor.org/info/rfc8905">
        <front>
          <title>The 'payto' URI Scheme for Payments</title>
          <author initials="F." surname="Dold" fullname="F. Dold"/>
          <author initials="C." surname="Grothoff" fullname="C. Grothoff"/>
          <date year="2020" month="October"/>
        </front>
        <seriesInfo name="RFC" value="8905"/>
      </reference>
    </references>
  </back>

</rfc>
