<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.34 (Ruby 2.6.10) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>

<?rfc tocindent="yes"?>
<?rfc strict="yes"?>
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc docmapping="yes"?>

<rfc ipr="trust200902" docName="draft-li-atp-02" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="ATP">Agent Transfer Protocol (ATP)</title>

    <author initials="X." surname="Li" fullname="Xiang Li">
      <organization>Nankai University</organization>
      <address>
        <postal>
          <street>Tongyan Road</street>
          <city>Tianjin</city>
          <code>300350</code>
          <country>China</country>
        </postal>
        <email>lixiang@nankai.edu.cn</email>
      </address>
    </author>
    <author initials="L." surname="Sun" fullname="Lu Sun">
      <organization>Nankai University</organization>
      <address>
        <postal>
          <street>Tongyan Road</street>
          <city>Tianjin</city>
          <code>300350</code>
          <country>China</country>
        </postal>
        <email>sunlu25@mail.nankai.edu.cn</email>
      </address>
    </author>
    <author initials="Y." surname="Qiu" fullname="Yuqi Qiu">
      <organization>Nankai University</organization>
      <address>
        <postal>
          <street>Tongyan Road</street>
          <city>Tianjin</city>
          <code>300350</code>
          <country>China</country>
        </postal>
        <email>qiuyuqi@mail.nankai.edu.cn</email>
      </address>
    </author>
    <author initials="Z." surname="Xu" fullname="Zuyao Xu">
      <organization>Nankai University</organization>
      <address>
        <postal>
          <street>Tongyan Road</street>
          <city>Tianjin</city>
          <code>300350</code>
          <country>China</country>
        </postal>
        <email>xuzuyao@mail.nankai.edu.cn</email>
      </address>
    </author>

    <date year="2026" month="June" day="29"/>

    <area>art</area>
    <workgroup>Internet Engineering Task Force</workgroup>
    <keyword>agent communication</keyword> <keyword>autonomous agents</keyword> <keyword>messaging protocol</keyword> <keyword>ATP</keyword> <keyword>Internet of Agents</keyword>

    <abstract>


<?line 76?>

<t>The Agent Transfer Protocol (ATP) is a communication protocol designed for autonomous agents to exchange messages, requests, and events in a secure, structured manner. ATP supports the emerging Internet of Agents (IoA) paradigm, where autonomous agents operate across four deployment scenarios: household (small scale), service (medium scale), enterprise (large scale), cloud provider (huge scale), and etc.</t>

<t>ATP employs a two-tier architecture where agents connect to the global Internet through ATP servers, enabling server-mediated communication for proper routing, security enforcement, and resource management. The protocol provides DNS-based service discovery using SVCB records, mandatory authentication via Agent Transfer Sender (ATS) policies and Agent Transfer Keys (ATK), and support for multiple interaction patterns including asynchronous messaging, synchronous request/response, and event-driven streaming.</t>

<t>This specification defines the discovery mechanism, identity model, authentication framework, transport layer, and message semantics for ATP.</t>



    </abstract>



  </front>

  <middle>


<?line 84?>

<section anchor="introduction"><name>Introduction</name>

<t>The evolution of the Internet has always centered around the theme of "connection":</t>

<t><list style="symbols">
  <t><strong>Person-to-Person</strong>: Email and instant messaging connect people with people</t>
  <t><strong>Person-to-Service</strong>: Web pages and mobile apps connect people with services</t>
  <t><strong>Thing-to-Thing</strong>: IoT devices connect the physical world</t>
</list></t>

<t><strong>The next trend is emerging: agents will become part of Internet infrastructure.</strong></t>

<t>With the advancement of artificial intelligence technology, autonomous agents are moving from concept to large-scale application:</t>

<t><list style="symbols">
  <t>Households deploy intelligent assistants to act on behalf of users for daily tasks</t>
  <t>Enterprises deploy customer service bots and operations agents to automate business processes</t>
  <t>Cloud providers offer agent-based capabilities including AI services and IoT coordination</t>
</list></t>

<t>When agents are ubiquitous, they need to communicate with each other - this requires a communication protocol designed specifically for agents.</t>

<t><strong>The Agent Transfer Protocol (ATP) is proposed as a communication protocol design reference for the era of Internet of Agents.</strong></t>

<section anchor="motivation"><name>Motivation</name>

<t>The emergence of autonomous agents represents a fundamental shift in how digital services are delivered and consumed. We are entering the era of the <strong>Internet of Agents (IoA)</strong>, where autonomous agents will become ubiquitous in both personal and commercial environments.</t>

<t>The Agent Transfer Protocol (ATP) is a communication protocol designed for autonomous agents to exchange messages, requests, and events across the Internet. ATP enables secure, structured agent-to-agent communication through a server-mediated architecture that provides routing, security enforcement, and resource management.</t>

<t>This document describes the motivation, architecture, and technical specifications of ATP. We first present the vision of the Internet of Agents (IoA) and the four deployment scenarios that ATP supports. We then describe the design goals, terminology, and core components of the protocol, including discovery, identity, authentication, transport, and message semantics.</t>

<section anchor="the-vision-of-internet-of-agents"><name>The Vision of Internet of Agents</name>

<t>In the near future, autonomous agents will be deployed across four primary deployment scenarios, each serving distinct needs and scales:</t>

<t><strong>Household (Small Scale)</strong>: Every household will deploy personal agent systems—either as physical robots or dedicated home servers—that manage daily tasks, coordinate schedules, and interact with external services on behalf of family members. Each household member will have their own agent account, enabling personalized interactions while maintaining shared context.</t>

<t><strong>Service (Medium Scale)</strong>: Commercial organizations will deploy agent services to automate customer interactions, process transactions, and provide intelligent assistance. These service agents handle high-volume interactions with customers worldwide.</t>

<t><strong>Enterprise (Large Scale)</strong>: Large corporations and organizations will deploy internal agent systems to streamline business operations, from HR and IT support to development and operations automation.</t>

<t><strong>Cloud Provider (Huge Scale)</strong>: Major technology providers will operate multi-tenant agent platforms serving millions of global users, providing AI services, data management, IoT coordination, and machine learning capabilities across continents.</t>

</section>
<section anchor="four-deployment-scenarios"><name>Four Deployment Scenarios</name>

<t>The agent ecosystem spans four distinct deployment scenarios, each with different scale requirements:</t>

<t><list style="symbols">
  <t><strong>Household Agents (Small)</strong>: A household domain (e.g., <spanx style="verb">family.example.com</spanx>) hosts a few personal agent identities:
  <list style="symbols">
      <t><spanx style="verb">parent1@family.example.com</spanx> - Agent for first parent</t>
      <t><spanx style="verb">parent2@family.example.com</spanx> - Agent for second parent</t>
      <t><spanx style="verb">home@family.example.com</spanx> - Home automation coordination agent</t>
    </list></t>
  <t><strong>Service Agents (Medium)</strong>: Service providers operate multiple specialized agents:
  <list style="symbols">
      <t><spanx style="verb">service-bot@company.example</spanx> - General customer service agent</t>
      <t><spanx style="verb">shop-bot@retailer.example</spanx> - Shopping assistant agent</t>
      <t><spanx style="verb">support@tech.example</spanx> - Technical support agent</t>
    </list></t>
  <t><strong>Enterprise Agents (Large)</strong>: Organizations deploy agents for various business functions:
  <list style="symbols">
      <t><spanx style="verb">hr@enterprise.example</spanx> - Human resources assistant</t>
      <t><spanx style="verb">dev@enterprise.example</spanx> - Development workflow agent</t>
      <t><spanx style="verb">ops@enterprise.example</spanx> - IT operations agent</t>
    </list></t>
  <t><strong>Cloud Provider Agents (Huge)</strong>: Global platforms serve diverse user bases:
  <list style="symbols">
      <t><spanx style="verb">user-us@cloud.example</spanx> - North American user services</t>
      <t><spanx style="verb">user-eu@cloud.example</spanx> - European user services</t>
      <t><spanx style="verb">user-cn@cloud.example</spanx> - Asian user services</t>
      <t><spanx style="verb">ai-service@cloud.example</spanx> - AI/ML service endpoints</t>
      <t><spanx style="verb">iot@cloud.example</spanx> - IoT device coordination</t>
    </list></t>
</list></t>

</section>
<section anchor="why-atp-is-needed"><name>Why ATP is Needed</name>

<t>Existing protocols cannot adequately meet the requirements of the Internet of Agents era:</t>

<texttable title="Requirements for Internet of Agents and Limitations of Existing Protocols" anchor="_table-requirements">
      <ttcol align='left'>Requirement</ttcol>
      <ttcol align='left'>Description</ttcol>
      <ttcol align='left'>Limitations of Existing Protocols</ttcol>
      <c><strong>Multi-tenant Identity</strong></c>
      <c>Each domain hosts multiple agent identities (from 2-5 in households to millions on cloud platforms)</c>
      <c>Email supports multi-user but lacks identity management for automated scenarios</c>
      <c><strong>Structured Data Exchange</strong></c>
      <c>JSON/CBOR payloads for automated processing</c>
      <c>HTTP can transport JSON but lacks native agent semantics</c>
      <c><strong>Strong Security Guarantees</strong></c>
      <c>Mandatory authentication and integrity verification for automated operations</c>
      <c>TLS only protects transport; application-layer authentication depends on implementation</c>
      <c><strong>Multiple Interaction Patterns</strong></c>
      <c>Asynchronous messaging, synchronous request/response, event-driven streaming</c>
      <c>Typically requires combining multiple protocols (e.g., HTTP + WebSocket)</c>
      <c><strong>Scalable Discovery</strong></c>
      <c>Cross-internet agent location and authentication</c>
      <c>Relies on centralized directory services or additional infrastructure</c>
      <c><strong>Context Awareness</strong></c>
      <c>Stateful multi-turn dialogues and complex workflow coordination</c>
      <c>No native support; must be implemented at application layer</c>
      <c><strong>Variable Scale Support</strong></c>
      <c>Efficient handling from household to cloud platform scenarios</c>
      <c>Typically optimized for specific scales, difficult to accommodate all</c>
</texttable>

<t><strong>Therefore, agents need their own communication protocol.</strong></t>

<t>This vision requires a communication infrastructure that supports:</t>

<t><list style="numbers" type="1">
  <t><strong>Multi-tenant Identity</strong>: Each domain hosts multiple agent identities, from a few agents in households to thousands in cloud platforms, requiring scalable identity management and routing.</t>
  <t><strong>Structured Data Exchange</strong>: Agents communicate using structured payloads (JSON, CBOR) rather than unstructured text, enabling automated processing and decision-making.</t>
  <t><strong>Strong Security Guarantees</strong>: Agent communication involves automated actions on behalf of users, demanding mandatory authentication and integrity verification to prevent unauthorized operations.</t>
  <t><strong>Multiple Interaction Patterns</strong>: Beyond simple messaging, agents need:
  <list style="symbols">
      <t>Synchronous request/response for RPC-style interactions</t>
      <t>Event-driven streaming for real-time updates</t>
      <t>Asynchronous messaging for notifications and broadcasts</t>
    </list></t>
  <t><strong>Scalable Discovery</strong>: Agents must locate and authenticate each other across the global internet using existing, proven infrastructure.</t>
  <t><strong>Context Awareness</strong>: Agents maintain state across interactions, support multi-turn dialogues, and coordinate complex workflows involving multiple parties.</t>
  <t><strong>Variable Scale Support</strong>: The protocol must efficiently handle scenarios ranging from small household deployments (2-5 agents) to massive cloud platforms (millions of users), with appropriate resource allocation and routing strategies for each scale.</t>
</list></t>

<t>ATP addresses these requirements by providing a modern, secure, and extensible protocol built upon existing internet infrastructure while introducing agent-specific semantics.</t>

<t>ATP is designed so that it can interoperate with application-layer agent interaction protocols. While protocols such as A2A and MCP define rich semantics for agent capabilities, task management, and tool invocation, ATP provides the underlying cross-domain transport infrastructure with DNS-native discovery and mandatory security guarantees. ATP's payload is opaque by design, enabling it to carry messages from any application-layer agent protocol.</t>

</section>
<section anchor="internet-of-agents-architecture"><name>Internet of Agents Architecture</name>

<t>The Internet of Agents (IoA) follows a two-tier architecture where agents connect to the global internet through ATP servers. This design ensures proper resource allocation, security enforcement, and efficient routing.</t>

<figure title="Internet of Agents (IoA) Architecture: Four deployment scenarios showing Household (Small), Service (Medium), Enterprise (Large), and Cloud Provider (Huge) ATP server categories" anchor="fig-ioa-architecture"><artwork type="ascii-art"><![CDATA[
                   Internet of Agents (IoA)

  +====================================================+
  |                      INTERNET                       |
  +====================================================+
       |              |               |              |
       |              |               |              |
  +----+------+ +-----+-----+ +------+-------+      |
  |    ATP    | |    ATP    | |     ATP      |      |
  |   Server  | |   Server  | |    Server    |      |
  | Household | |  Service  | |  Enterprise  |      |
  |  (Small)  | | (Medium)  | |   (Large)    |      |
  +--+--+--+--+ +--+--+--+--+ +--+--+--+--+--+      |
     |  |  |       |  |  |       |  |  |  |         |
    P1 P2 Home    S1 S2 Shop    HR Dev Ops          |
                                                     |
             +---------------------------------------+
             |            ATP Server                 |
             |          Cloud Provider               |
             |             (Huge)                    |
             +--+--+--+--+--+--+--+--+               |
                |  |  |  |  |  |  |  |               |
               US EU CN AI DB IoT ML API

  Household:  Personal/Family agents
  Service:    Commercial service agents
  Enterprise: Corporate agents
  Cloud:      Multi-tenant global cloud
]]></artwork></figure>

<t>In this architecture:</t>

<t><list style="symbols">
  <t><strong>ATP Servers</strong> act as gateways for agents, handling:
  <list style="symbols">
      <t>Resource allocation and scheduling for local agents</t>
      <t>Outbound connection management and routing</t>
      <t>Inbound traffic filtering and security enforcement</t>
      <t>Policy enforcement (ATS/ATK validation)</t>
      <t>Message queuing and delivery guarantees</t>
    </list></t>
  <t><strong>Agents</strong> operate within their ATP Server's domain:
  <list style="symbols">
      <t>All outbound communication goes through their local ATP Server</t>
      <t>All inbound communication arrives via their ATP Server</t>
      <t>Agents benefit from server-side security and filtering</t>
      <t>Multiple agents share server resources efficiently</t>
    </list></t>
  <t><strong>Scale Considerations</strong>:
  <list style="symbols">
      <t><strong>Household (Small)</strong>: 2-10 agents, minimal resource requirements</t>
      <t><strong>Service (Medium)</strong>: 10-100 agents, moderate traffic handling</t>
      <t><strong>Enterprise (Large)</strong>: 100-1000+ agents, high availability requirements</t>
      <t><strong>Cloud Provider (Huge)</strong>: Millions of users, global distribution, multi-region deployment</t>
    </list></t>
</list></t>

<t>This architecture reflects the reality that in the Internet of Agents era, every household and organization will deploy an ATP server (or manager) to coordinate local agent activities, manage network connections, and provide security boundaries.</t>

</section>
</section>
<section anchor="design-goals"><name>Design Goals</name>

<t><list style="numbers" type="1">
  <t><strong>Security-first</strong>: Authentication and integrity verification are mandatory, not optional.</t>
  <t><strong>Structured semantics</strong>: Native support for multiple interaction patterns (message, request/response, event/subscription).</t>
  <t><strong>DNS-based discovery</strong>: Leverage existing DNS infrastructure for agent discovery and service location.</t>
  <t><strong>Transport agnostic</strong>: Support multiple transport protocols (HTTPS, QUIC) for flexibility and performance.</t>
  <t><strong>Backward compatible</strong>: Coexist with existing internet infrastructure and standards.</t>
  <t><strong>Extensible</strong>: Support capability discovery and protocol negotiation for future evolution.</t>
  <t><strong>Multi-tenant support</strong>: Efficiently handle multiple agents per domain, similar to multi-user email systems.</t>
  <t><strong>Server-mediated communication</strong>: All agent communication <bcp14>MUST</bcp14> flow through ATP servers for proper routing, security enforcement, and resource management. This design reflects the reality that agents operate within managed domains (households, organizations, cloud services) that require centralized coordination.</t>
</list></t>

</section>
<section anchor="terminology"><name>Terminology</name>

<t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" 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>

<?line -18?>

<t>This document uses the following terms:</t>

<t><list style="symbols">
  <t><strong>Agent</strong>: An autonomous software entity capable of communication, decision-making, and task execution.</t>
  <t><strong>Agent ID</strong>: A unique identifier in the format <spanx style="verb">local@domain</spanx> that identifies a specific agent.</t>
  <t><strong>ATP Server</strong>: A server implementing the ATP protocol and handling agent communication. The ATP Server acts as a gateway for agents within its domain, providing resource allocation, connection management, security enforcement, and message routing. All agent communication <bcp14>MUST</bcp14> flow through their respective ATP servers.</t>
  <t><strong>ATP Client</strong>: An agent or application initiating ATP communication.</t>
  <t><strong>ATP Transfer</strong>: The process of transferring messages between ATP servers across the Internet.</t>
  <t><strong>ATS</strong>: Agent Transfer Sender policy - a DNS record defining authorized senders for a domain.</t>
  <t><strong>ATK</strong>: Agent Transfer Key - a DNS record publishing cryptographic keys for message signature verification.</t>
  <t><strong>SVCB</strong>: Service Binding - DNS record type defined in <xref target="RFC9460"/> for service discovery.</t>
  <t><strong>ALPN</strong>: Application-Layer Protocol Negotiation - TLS extension for protocol negotiation.</t>
</list></t>

</section>
<section anchor="protocol-stack-overview"><name>Protocol Stack Overview</name>

<figure title="ATP Protocol Stack: Four-layer architecture with Discovery (DNS SVCB), Transport (HTTPS/QUIC), Message Format (JSON/CBOR), and Application Semantics" anchor="fig-protocol-stack"><artwork type="ascii-art"><![CDATA[
+-------------------------------------------------+
|              Application Semantics              |
|     message / request-response / event-stream   |
+-------------------------------------------------+
|             Message Format (JSON/CBOR)          |
|           envelope + payload + signature        |
+-------------------------------------------------+
|            Transport Layer (HTTPS/QUIC)         |
|              TLS 1.3+ / ALPN negotiation        |
+-------------------------------------------------+
|               Discovery (DNS SVCB)              |
|            _atp.<domain> SVCB records           |
+-------------------------------------------------+
]]></artwork></figure>

<t>ATP is built upon a layered protocol stack that leverages existing Internet infrastructure while introducing agent-specific semantics. The stack consists of four layers, from bottom to top:</t>

<t><strong>Discovery Layer</strong>: Uses DNS SVCB records <xref target="RFC9460"/> to enable agents to locate and discover ATP services for any given domain. The discovery query targets <spanx style="verb">_atp.&lt;domain&gt;</spanx> to retrieve service endpoint information including hostname, port, and supported protocols.</t>

<t><strong>Transport Layer</strong>: Supports multiple transport protocols for flexibility and performance:</t>

<t><list style="symbols">
  <t><strong>HTTPS</strong>: Primary transport protocol, enabling deployment behind existing CDNs, load balancers, and firewalls. Uses TLS 1.3+ for encryption and ALPN for protocol negotiation.</t>
  <t><strong>QUIC</strong>: Optional transport protocol <xref target="RFC9000"/> for low-latency scenarios, providing 0-RTT handshakes and connection migration capabilities.</t>
</list></t>

<t><strong>Message Format Layer</strong>: Defines the structure of ATP messages using structured data encodings:</t>

<t><list style="symbols">
  <t><strong>JSON</strong>: Recommended encoding <xref target="RFC8259"/> with Content-Type <spanx style="verb">application/atp+json</spanx></t>
  <t><strong>CBOR</strong>: Optional encoding <xref target="RFC8949"/> for bandwidth-constrained environments with Content-Type <spanx style="verb">application/atp+cbor</spanx></t>
</list></t>

<t>Messages consist of an envelope (containing from, to, timestamp, nonce, type) and a payload, with a cryptographic signature for integrity and authenticity.</t>

<t><strong>Application Semantics Layer</strong>: Provides three interaction patterns for different use cases:</t>

<t><list style="symbols">
  <t><strong>Message</strong>: Asynchronous, fire-and-forget communication</t>
  <t><strong>Request/Response</strong>: Synchronous RPC-style interactions</t>
  <t><strong>Event/Subscription</strong>: Streaming and publish-subscribe patterns</t>
</list></t>

</section>
</section>
<section anchor="discovery-mechanism"><name>Discovery Mechanism</name>

<section anchor="dns-svcb-record-format"><name>DNS SVCB Record Format</name>

<t>ATP uses DNS SVCB (Service Binding) records <xref target="RFC9460"/> for agent discovery. The SVCB record provides the hostname, port, protocol version, and optional connection hints for the ATP service. The DNS query follows the standard DNS protocol <xref target="RFC1034"/><xref target="RFC1035"/>.</t>

<section anchor="record-name"><name>Record Name</name>

<t>The standard SVCB query name for ATP discovery is:</t>

<figure><sourcecode type="dns"><![CDATA[
_atp.<domain>
]]></sourcecode></figure>

<t>Where <spanx style="verb">&lt;domain&gt;</spanx> is the domain portion of the recipient Agent ID.</t>

</section>
<section anchor="record-format"><name>Record Format</name>

<figure><sourcecode type="dns"><![CDATA[
_atp.<domain>. IN SVCB <priority> <target> (
    port=<port-number>
    alpn=<protocol-identifier>
    [ipv4hint=<ipv4-address>]
    [ipv6hint=<ipv6-address>]
    [atp-capabilities=<capability-list>]
)
]]></sourcecode></figure>

</section>
<section anchor="example"><name>Example</name>

<figure><sourcecode type="dns"><![CDATA[
_atp.example.com. IN SVCB 1 agent.example.com. (
    port=7443
    alpn="atp/1"
    ipv4hint=192.0.2.1,192.0.2.2
    ipv6hint=2001:db8::1,2001:db8::2
    atp-capabilities="message,request,event"
    atp-auth="ats,atk"
)
]]></sourcecode></figure>

</section>
<section anchor="parameters"><name>Parameters</name>

<t><list style="symbols">
  <t><strong>port</strong>: TCP/UDP port number for the ATP service. If not specified, the default port is 7443.</t>
  <t><strong>alpn</strong>: Application-layer protocol negotiation identifier. Supported values:
  <list style="symbols">
      <t><spanx style="verb">atp/1</spanx> - ATP version 1</t>
      <t><spanx style="verb">atp-json</spanx> - ATP with JSON payload encoding</t>
      <t><spanx style="verb">atp-cbor</spanx> - ATP with CBOR payload encoding</t>
      <t><spanx style="verb">atp+proto</spanx> - ATP with Protocol Buffers encoding</t>
    </list></t>
  <t><strong>ipv4hint</strong> (optional): Comma-separated list of IPv4 addresses for faster connection establishment.</t>
  <t><strong>ipv6hint</strong> (optional): Comma-separated list of IPv6 addresses for faster connection establishment.</t>
  <t><strong>atp-capabilities</strong> (optional): Comma-separated list of supported protocol capabilities.</t>
  <t><strong>atp-auth</strong> (optional): Comma-separated list of supported authentication mechanisms. Supported values include <spanx style="verb">ats</spanx> (ATS policy validation), <spanx style="verb">atk</spanx> (ATK signature verification), <spanx style="verb">mtls</spanx> (mutual TLS). This parameter enables clients to determine the server's authentication requirements before connection establishment.</t>
</list></t>

</section>
</section>
<section anchor="discovery-process"><name>Discovery Process</name>

<t>The ATP client performs the following steps to discover the recipient's ATP service:</t>

<t><list style="numbers" type="1">
  <t><strong>Extract Domain</strong>: Parse the recipient Agent ID to extract the domain portion. The domain portion is derived from the <spanx style="verb">local@domain</spanx> Agent ID format — the same domain that hosts the agent's identity also hosts the ATP service discovery records.</t>
  <t><strong>DNS SVCB Query</strong>: Query the SVCB record for <spanx style="verb">_atp.&lt;domain&gt;</spanx>.</t>
  <t><strong>Address Resolution</strong>: Resolve the target hostname to IP addresses using A/AAAA records. Implementations <bcp14>MUST</bcp14> query both A and AAAA records and <bcp14>SHOULD</bcp14> prefer IPv6 addresses when available.</t>
  <t><strong>Connection Establishment</strong>: Establish a secure connection to the resolved endpoint using the specified port.</t>
</list></t>

</section>
<section anchor="capability-discovery"><name>Capability Discovery</name>

<t>Agents can advertise their capabilities to enable protocol negotiation and feature discovery.</t>

<t>When both DNS-based and HTTP-based capability information are available, the HTTP-based response <bcp14>MUST</bcp14> take precedence, as it can be updated more frequently than DNS records. DNS-based capabilities serve as an initial hint for connection establishment and protocol negotiation; HTTP-based capabilities provide the authoritative and current capability set.</t>

<section anchor="dns-based-capability-advertisement"><name>DNS-Based Capability Advertisement</name>

<t>Capabilities can be included in the SVCB record using the <spanx style="verb">atp-capabilities</spanx> parameter:</t>

<figure><sourcecode type="dns"><![CDATA[
_atp.example.com. IN SVCB 1 agent.example.com. (
    port=7443
    alpn="atp/1"
    atp-capabilities="message,request,event,payment,search"
)
]]></sourcecode></figure>

</section>
<section anchor="http-based-capability-query"><name>HTTP-Based Capability Query</name>

<t>Agents can query capabilities via an HTTP endpoint:</t>

<figure><sourcecode type="http"><![CDATA[
GET /.well-known/atp/v1/capabilities
Host: agent.example.com
Accept: application/json
]]></sourcecode></figure>

<t><strong>Response</strong>:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "version": "1.0",
  "capabilities": ["message", "request", "event", "payment", "search"],
  "protocols": ["atp/1", "atp-json"],
  "max_payload_size": 1048576,
  "rate_limits": {
    "messages_per_second": 100,
    "requests_per_minute": 1000
  },
  "metadata_url": "https://agent.example.com/.well-known/agent.json"
}
]]></sourcecode></figure>

<t>The <spanx style="verb">metadata_url</spanx> field (<bcp14>OPTIONAL</bcp14>) points to an external agent description document that provides additional metadata about agents at this server. The format of the referenced document is out of scope for this specification. This field enables zero-cost cross-ecosystem discovery without binding ATP to any specific agent description standard.</t>

</section>
</section>
</section>
<section anchor="identity-model"><name>Identity Model</name>

<section anchor="agent-identifier-format"><name>Agent Identifier Format</name>

<t>Agent identifiers follow the standard email address format but with extended semantics for agent communication.</t>

<figure><sourcecode type="abnf"><![CDATA[
agent-id    = local-part "@" domain
local-part  = 1*63( ALPHA / DIGIT / "." / "-" / "_" / "+" )
domain      = sub-domain *("." sub-domain)
sub-domain  = ; as defined in RFC 5321
]]></sourcecode></figure>

<t>The <spanx style="verb">local-part</spanx> identifies a specific agent within the domain, and the <spanx style="verb">domain</spanx> identifies the ATP server responsible for routing messages to that agent. ATP uses a restricted character set compared to RFC 5321 to ensure safe handling across diverse agent implementations.</t>

<t>A key design feature of ATP is that each domain hosts multiple agent identities using the <spanx style="verb">local@domain</spanx> format, similar to how email domains host multiple user mailboxes. This multi-tenant identity model is fundamental to ATP's architecture:</t>

<t><list style="symbols">
  <t><strong>Households</strong>: <spanx style="verb">parent1@family.example.com</spanx>, <spanx style="verb">parent2@family.example.com</spanx>, <spanx style="verb">home@family.example.com</spanx></t>
  <t><strong>Services</strong>: <spanx style="verb">support@company.example</spanx>, <spanx style="verb">billing@company.example</spanx>, <spanx style="verb">shop-bot@company.example</spanx></t>
  <t><strong>Enterprises</strong>: <spanx style="verb">hr@enterprise.example</spanx>, <spanx style="verb">dev@enterprise.example</spanx>, <spanx style="verb">ops@enterprise.example</spanx></t>
  <t><strong>Cloud Providers</strong>: <spanx style="verb">user-us@cloud.example</spanx>, <spanx style="verb">user-eu@cloud.example</spanx>, <spanx style="verb">ai-service@cloud.example</spanx></t>
</list></t>

<t>Unlike centralized agent discovery systems that assign globally unique identifiers, ATP's <spanx style="verb">local@domain</spanx> model allows each domain administrator to independently manage their agent namespace. This mirrors the email ecosystem's proven scalability: no central registry is needed, and identity management is delegated to domain owners.</t>

<section anchor="examples"><name>Examples</name>

<t><list style="symbols">
  <t><spanx style="verb">a1@example.com</spanx> - Individual agent</t>
  <t><spanx style="verb">chatbot@service.example</spanx> - Service agent</t>
  <t><spanx style="verb">billing.taskbot@example.com</spanx> - Task-specific agent with hierarchical naming</t>
  <t><spanx style="verb">weather-agent-v2@provider.example</spanx> - Versioned agent identifier</t>
</list></t>

</section>
<section anchor="local-part-semantics"><name>Local-part Semantics</name>

<t>The <spanx style="verb">local-part</spanx> uses alphanumeric characters, period (<spanx style="verb">.</spanx>), hyphen (<spanx style="verb">-</spanx>), underscore (<spanx style="verb">_</spanx>), and plus (<spanx style="verb">+</spanx>). The maximum length of the local-part is 63 characters.</t>

<t>Domains <bcp14>MUST</bcp14> support case-insensitive matching of local-parts, similar to email systems.</t>

</section>
<section anchor="domain-requirements"><name>Domain Requirements</name>

<t>The domain portion <bcp14>MUST</bcp14> be a valid Internationalized Domain Name (IDN) as defined in <xref target="RFC5890"/>. ATP servers <bcp14>MUST</bcp14> support both ASCII and UTF-8 encoded domain names.</t>

</section>
</section>
<section anchor="delegation"><name>Delegation</name>

<t>Domains can delegate agent handling to external ATP servers using DNS CNAME records or SVCB alias mode.</t>

<section anchor="cname-delegation"><name>CNAME Delegation</name>

<figure><sourcecode type="dns"><![CDATA[
_atp.user.example.com. IN CNAME _atp.provider.example.
]]></sourcecode></figure>

<t>This allows users to maintain their identity (<spanx style="verb">@user.example.com</spanx>) while using third-party ATP services.</t>

</section>
<section anchor="svcb-alias-mode"><name>SVCB Alias Mode</name>

<figure><sourcecode type="dns"><![CDATA[
_atp.delegated.example.com. IN SVCB 0 _atp.target.example.
]]></sourcecode></figure>

<t>SVCB alias mode provides a more modern delegation mechanism with additional metadata capabilities.</t>

</section>
</section>
</section>
<section anchor="security-framework"><name>Security Framework</name>

<section anchor="transport-layer-security"><name>Transport Layer Security</name>

<t>All ATP connections <bcp14>MUST</bcp14> use TLS 1.3 <xref target="RFC8446"/> or higher.</t>

<section anchor="tls-requirements"><name>TLS Requirements</name>

<t><list style="symbols">
  <t><strong>Mandatory Encryption</strong>: All ATP traffic <bcp14>MUST</bcp14> be encrypted using TLS.</t>
  <t><strong>Cipher Suites</strong>: Servers <bcp14>MUST</bcp14> support the mandatory-to-implement cipher suites specified in Section 9.1 of <xref target="RFC8446"/>.</t>
  <t><strong>Forward Secrecy</strong>: Ephemeral key exchange <bcp14>MUST</bcp14> be used.</t>
</list></t>

</section>
<section anchor="mutual-tls"><name>Mutual TLS</name>

<t>For server-to-server communication, ATP servers <bcp14>SHOULD</bcp14> support mutual TLS (mTLS) authentication. mTLS is specified as <bcp14>SHOULD</bcp14> rather than <bcp14>MUST</bcp14> because sender authentication in ATP is provided primarily at the application layer by ATS (authorized-sender policy) and ATK (DNS-published signature verification); mTLS provides an additional, transport-level layer of authentication. ATP servers <bcp14>MAY</bcp14> require mTLS for all connections in high-security deployments.</t>

</section>
</section>
<section anchor="agent-transfer-sender-policy-ats"><name>Agent Transfer Sender Policy (ATS)</name>

<t>The Agent Transfer Sender policy (ATS) defines which entities are authorized to send ATP messages on behalf of a domain. ATS is designed specifically for agent communication with strict enforcement.</t>

<section anchor="ats-record-format"><name>ATS Record Format</name>

<t>ATS policies are published as DNS TXT records at the following location:</t>

<figure><sourcecode type="dns"><![CDATA[
ats._atp.<domain>. IN TXT "v=atp1 <policy-directives>"
]]></sourcecode></figure>

</section>
<section anchor="example-ats-records"><name>Example ATS Records</name>

<t><strong>Simple IP-based policy</strong>:</t>

<figure><sourcecode type="dns"><![CDATA[
ats._atp.example.com. IN TXT "v=atp1 allow=ip:192.0.2.0/24"
]]></sourcecode></figure>

<t><strong>Multi-source policy</strong>:</t>

<figure><sourcecode type="dns"><![CDATA[
ats._atp.example.com. IN TXT "v=atp1 allow=ip:192.0.2.0/24 allow=domain:agent-provider.example include:ats._atp.trusted-partner.example"
]]></sourcecode></figure>

<t><strong>Permissive policy</strong>:</t>

<figure><sourcecode type="dns"><![CDATA[
ats._atp.example.com. IN TXT "v=atp1 allow=all"
]]></sourcecode></figure>

<t><strong>Restrictive policy</strong>:</t>

<figure><sourcecode type="dns"><![CDATA[
ats._atp.example.com. IN TXT "v=atp1 deny=all allow=ip:192.0.2.10"
]]></sourcecode></figure>

</section>
<section anchor="policy-directives"><name>Policy Directives</name>

<t>ATS policy directives are evaluated in order, with later directives overriding earlier ones when conflicts occur.</t>

<t><list style="symbols">
  <t><strong><spanx style="verb">v=atp1</spanx></strong>: Version identifier (<bcp14>REQUIRED</bcp14>). Indicates ATP version 1 policy format.</t>
  <t><strong><spanx style="verb">allow=ip:&lt;cidr&gt;</spanx></strong>: Authorize messages from specific IP address ranges.</t>
  <t><strong><spanx style="verb">allow=domain:&lt;domain&gt;</spanx></strong>: Authorize messages from agents at the specified domain.</t>
  <t><strong><spanx style="verb">allow=all</spanx></strong>: Authorize messages from any source (<bcp14>NOT RECOMMENDED</bcp14>).</t>
  <t><strong><spanx style="verb">deny=ip:&lt;cidr&gt;</spanx></strong>: Explicitly deny messages from specific IP ranges.</t>
  <t><strong><spanx style="verb">deny=domain:&lt;domain&gt;</spanx></strong>: Explicitly deny messages from agents at the specified domain.</t>
  <t><strong><spanx style="verb">deny=all</spanx></strong>: Deny all sources (must be followed by specific <spanx style="verb">allow</spanx> directives).</t>
  <t><strong><spanx style="verb">include:&lt;record&gt;</spanx></strong>: Include policy from another ATS record.</t>
  <t><strong><spanx style="verb">redirect=&lt;domain&gt;</spanx></strong>: Redirect policy evaluation to another domain.</t>
  <t><strong><spanx style="verb">exp=&lt;domain&gt;</spanx></strong>: Specify a domain for explanation text (human-readable).</t>
</list></t>

</section>
<section anchor="ats-query-process"><name>ATS Query Process</name>

<t>When an ATP server receives a message claiming to be from a sender in domain <spanx style="verb">&lt;domain&gt;</spanx>, it performs the following ATS verification:</t>

<t><list style="numbers" type="1">
  <t><strong>Query ATS Record</strong>: Query the DNS TXT record for <spanx style="verb">ats._atp.&lt;domain&gt;</spanx>.</t>
  <t><strong>Extract IP</strong>: Determine the source IP address of the incoming connection.</t>
  <t><strong>Policy Evaluation</strong>: Evaluate the ATS policy against the source IP and sender domain.</t>
  <t><strong>Authorization Decision</strong>:
  <list style="symbols">
      <t>If policy evaluation results in <spanx style="verb">PASS</spanx>, accept the message.</t>
      <t>If policy evaluation results in <spanx style="verb">FAIL</spanx>, reject the message with HTTP 403 and error body <spanx style="verb">{"error": "ATS_VALIDATION_FAILED"}</spanx>.</t>
      <t>If no ATS record exists, treat as <spanx style="verb">NEUTRAL</spanx> (accept but flag for monitoring).</t>
    </list></t>
</list></t>

</section>
<section anchor="ats-processing-algorithm"><name>ATS Processing Algorithm</name>

<t>The ATS verification algorithm processes policy directives as follows:</t>

<figure><sourcecode type="text"><![CDATA[
result = NEUTRAL

FOR EACH directive in policy:
    IF directive is 'allow=ip:<cidr>' AND source_ip matches <cidr>:
        result = PASS
    ELSE IF directive is 'deny=ip:<cidr>' AND source_ip matches <cidr>:
        result = FAIL
    ELSE IF directive is 'allow=domain:<domain>' AND sender_domain matches <domain>:
        result = PASS
    ELSE IF directive is 'deny=domain:<domain>' AND sender_domain matches <domain>:
        result = FAIL
    ELSE IF directive is 'allow=all':
        result = PASS
    ELSE IF directive is 'deny=all':
        result = FAIL
    ELSE IF directive is 'include:<record>':
        include_result = query_ats(<record>)
        IF include_result is PASS or FAIL:
            result = include_result

RETURN result
]]></sourcecode></figure>

</section>
<section anchor="ats-error-codes"><name>ATS Error Codes</name>

<t>ATS validation errors are returned as HTTP responses with structured JSON error bodies:</t>

<t><list style="symbols">
  <t><strong>403 Forbidden</strong> with body: <spanx style="verb">{"error": "ATS_VALIDATION_FAILED", "detail": "Sender not authorized by ATS policy"}</spanx></t>
  <t><strong>502 Bad Gateway</strong> with body: <spanx style="verb">{"error": "ATS_TEMPORARY_FAILURE", "detail": "DNS lookup timeout for ATS record"}</spanx></t>
  <t><strong>403 Forbidden</strong> with body: <spanx style="verb">{"error": "ATS_RECORD_INVALID", "detail": "ATS record syntax error"}</spanx></t>
</list></t>

</section>
<section anchor="cloud-deployment-considerations"><name>Cloud Deployment Considerations</name>

<t>In cloud environments where agents share IP addresses (e.g., CDN, serverless platforms, container orchestration), IP-based ATS policies may be insufficient. Deployments in such environments <bcp14>SHOULD</bcp14>:</t>

<t><list style="numbers" type="1">
  <t>Use <spanx style="verb">allow=domain:&lt;domain&gt;</spanx> directives instead of IP-based directives where possible.</t>
  <t>Combine ATS with mutual TLS for stronger sender verification.</t>
  <t>Rely on ATK signature verification as the primary authentication mechanism, with ATS as an additional signal.</t>
</list></t>

<t>Note: ATS is designed as a first-pass filter, not a sole authentication mechanism. ATK signature verification provides cryptographic proof of sender identity regardless of network topology.</t>

</section>
<section anchor="ats-best-practices"><name>ATS Best Practices</name>

<t><list style="symbols">
  <t><strong>Start Restrictive</strong>: Begin with a restrictive policy and gradually add authorized sources.</t>
  <t><strong>Use Includes</strong>: Use <spanx style="verb">include:</spanx> directives to inherit policies from trusted providers.</t>
  <t><strong>Monitor Logs</strong>: Regularly review ATS validation logs to identify unauthorized attempts.</t>
  <t><strong>Gradual Deployment</strong>: Deploy ATS gradually, starting with monitoring mode before enforcement.</t>
</list></t>

</section>
</section>
<section anchor="agent-transfer-key-atk"><name>Agent Transfer Key (ATK)</name>

<t>The Agent Transfer Key (ATK) record publishes cryptographic public keys used for message signature verification. ATK is mandatory in ATP and uses modern cryptographic algorithms.</t>

<section anchor="atk-record-format"><name>ATK Record Format</name>

<t>ATK records are published as DNS TXT records at the following location:</t>

<figure><sourcecode type="dns"><![CDATA[
<selector>.atk._atp.<domain>. IN TXT "v=atp1 <key-parameters>"
]]></sourcecode></figure>

<t>Where <spanx style="verb">&lt;selector&gt;</spanx> is an identifier for the specific key (e.g., <spanx style="verb">default</spanx>, <spanx style="verb">2026q1</spanx>, <spanx style="verb">rotated-key</spanx>).</t>

</section>
<section anchor="example-atk-records"><name>Example ATK Records</name>

<t><strong>Ed25519 key (<bcp14>RECOMMENDED</bcp14>)</strong>:</t>

<figure><sourcecode type="dns"><![CDATA[
default.atk._atp.example.com. IN TXT "v=atp1 k=ed25519 p=MCowBQYDK2VwAyEAtLJ5VqH7K+R5VZ8cD9XwY3J2mN8K+R5VZ8cD9XwY3J2m"
]]></sourcecode></figure>

<t><strong>RSA key (3072-bit)</strong>:</t>

<figure><sourcecode type="dns"><![CDATA[
legacy.atk._atp.example.com. IN TXT "v=atp1 k=rsa p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..."
]]></sourcecode></figure>

<t><strong>ECDSA key (P-256)</strong>:</t>

<figure><sourcecode type="dns"><![CDATA[
p256.atk._atp.example.com. IN TXT "v=atp1 k=ecdsa n=prime256v1 p=MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE..."
]]></sourcecode></figure>

</section>
<section anchor="key-parameters"><name>Key Parameters</name>

<t><list style="symbols">
  <t><strong><spanx style="verb">v=atp1</spanx></strong>: Version identifier (<bcp14>REQUIRED</bcp14>). Indicates ATP version 1 key format.</t>
  <t><strong><spanx style="verb">k=&lt;algorithm&gt;</spanx></strong>: Key algorithm (<bcp14>REQUIRED</bcp14>). Supported values:
  <list style="symbols">
      <t><spanx style="verb">ed25519</spanx> - Ed25519 (<bcp14>RECOMMENDED</bcp14> for new deployments)</t>
      <t><spanx style="verb">rsa</spanx> - RSA (3072-bit minimum for new keys, 2048-bit minimum accepted for verification)</t>
      <t><spanx style="verb">ecdsa</spanx> - ECDSA (P-256, P-384, or P-521)</t>
    </list></t>
  <t><strong><spanx style="verb">p=&lt;base64-key&gt;</spanx></strong>: Base64-encoded public key (<bcp14>REQUIRED</bcp14>).</t>
  <t><strong><spanx style="verb">n=&lt;curve-name&gt;</spanx></strong>: Elliptic curve name (<bcp14>REQUIRED</bcp14> for ECDSA). Supported values: <spanx style="verb">prime256v1</spanx>, <spanx style="verb">secp384r1</spanx>, <spanx style="verb">secp521r1</spanx>.</t>
  <t><strong><spanx style="verb">h=&lt;hash-alg&gt;</spanx></strong>: Hash algorithm (<bcp14>OPTIONAL</bcp14>). Defaults to <spanx style="verb">sha256</spanx>. Supported values: <spanx style="verb">sha256</spanx>, <spanx style="verb">sha384</spanx>, <spanx style="verb">sha512</spanx>.</t>
  <t><strong><spanx style="verb">s=&lt;service&gt;</spanx></strong>: Service type (<bcp14>OPTIONAL</bcp14>). Indicates which ATP services use this key.</t>
  <t><strong><spanx style="verb">t=&lt;flags&gt;</spanx></strong>: Flags (<bcp14>OPTIONAL</bcp14>). Comma-separated list of flags:
  <list style="symbols">
      <t><spanx style="verb">r</spanx> - Key is revoked (<bcp14>MUST NOT</bcp14> be used for new signatures)</t>
    </list></t>
  <t><strong><spanx style="verb">x=&lt;expiry&gt;</spanx></strong>: Key expiry (<bcp14>OPTIONAL</bcp14>). Unix time, in seconds, after which the key <bcp14>MUST NOT</bcp14> be used.</t>
</list></t>

</section>
<section anchor="atk-query-process"><name>ATK Query Process</name>

<t>When an ATP server receives a signed message, it performs the following ATK verification:</t>

<t><list style="numbers" type="1">
  <t><strong>Extract Signature Information</strong>: Parse the message signature to extract key selector, domain, signature algorithm, and signature value.</t>
  <t><strong>Query ATK Record</strong>: Query the DNS TXT record for <spanx style="verb">&lt;selector&gt;.atk._atp.&lt;domain&gt;</spanx>.</t>
  <t><strong>Validate Key Parameters</strong>: Verify that the key algorithm and parameters match the signature.</t>
  <t><strong>Canonicalization</strong>: Canonicalize the message payload according to the specified algorithm.</t>
  <t><strong>Signature Verification</strong>: Verify the signature using the public key from the ATK record.</t>
  <t><strong>Validation Decision</strong>:
  <list style="symbols">
      <t>If signature verification succeeds, accept the message.</t>
      <t>If signature verification fails, reject the message with HTTP 403 and error body <spanx style="verb">{"error": "ATK_SIGNATURE_INVALID", "detail": "Signature verification failed"}</spanx>.</t>
      <t>If ATK record is not found, reject the message with HTTP 403 and error body <spanx style="verb">{"error": "ATK_KEY_NOT_FOUND", "detail": "No ATK record found for selector"}</spanx>.</t>
    </list></t>
</list></t>

</section>
<section anchor="atk-key-management"><name>ATK Key Management</name>

<section anchor="key-rotation"><name>Key Rotation</name>

<t>Domains <bcp14>SHOULD</bcp14> rotate ATK keys periodically (e.g., every 90 days).</t>

</section>
<section anchor="key-revocation"><name>Key Revocation</name>

<t>If a key is compromised, it <bcp14>SHOULD</bcp14> be revoked immediately by updating the ATK record to include the <spanx style="verb">r</spanx> flag.</t>

</section>
</section>
<section anchor="atk-best-practices"><name>ATK Best Practices</name>

<t><list style="symbols">
  <t><strong>Use Ed25519</strong>: Prefer Ed25519 keys for new deployments due to their security and performance characteristics.</t>
  <t><strong>Key Size</strong>: For RSA keys, generate new keys with at least 3072 bits (4096-bit <bcp14>RECOMMENDED</bcp14>). Implementations <bcp14>MUST</bcp14> accept RSA keys of 2048 bits or longer for signature verification. For ECDSA, use P-256 or stronger curves.</t>
  <t><strong>Multiple Keys</strong>: Maintain multiple keys (current, next, previous) for smooth rotation.</t>
  <t><strong>DNSSEC</strong>: Sign ATK records with DNSSEC to prevent DNS spoofing attacks.</t>
  <t><strong>Monitoring</strong>: Monitor signature validation failures to detect potential attacks or misconfigurations.</t>
</list></t>

</section>
</section>
<section anchor="message-signature"><name>Message Signature</name>

<t>All ATP messages <bcp14>MUST</bcp14> be cryptographically signed to ensure integrity and authenticity.</t>

<section anchor="signature-envelope"><name>Signature Envelope</name>

<t>The signature is included in the message envelope as a <spanx style="verb">signature</spanx> field:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "from": "sender@example.com",
  "to": "recipient@example.com",
  "timestamp": 1710000000,
  "nonce": "msg-12345-abcde",
  "type": "message",
  "payload": {},
  "signature": {
    "key_id": "default.atk._atp.example.com",
    "algorithm": "ed25519",
    "signature": "MEUCIQDR...",
    "headers": ["from", "to", "timestamp", "nonce", "type"],
    "timestamp": 1710000000
  }
}
]]></sourcecode></figure>

<t>The <spanx style="verb">timestamp</spanx> field within the signature object records when the signature was generated, expressed as Unix time in seconds.</t>

</section>
<section anchor="signature-algorithm"><name>Signature Algorithm</name>

<t>The signature algorithm depends on the key type:</t>

<t><list style="symbols">
  <t><strong>Ed25519</strong>: Sign the canonicalized message bytes directly.</t>
  <t><strong>RSA</strong>: Use RSASSA-PSS with SHA-256 (or stronger).</t>
  <t><strong>ECDSA</strong>: Use ECDSA with the specified curve and hash algorithm.</t>
</list></t>

</section>
<section anchor="signature-coverage"><name>Signature Coverage</name>

<t>The signature <bcp14>MUST</bcp14> cover all fields of the message envelope except the <spanx style="verb">signature</spanx> field itself. The <spanx style="verb">headers</spanx> field within the signature object is informational and lists the fields that were present at signing time; it <bcp14>MUST NOT</bcp14> be used to selectively exclude fields from signature verification.</t>

<t>Verifiers <bcp14>MUST</bcp14> reject messages where the set of fields in the message envelope does not match the <spanx style="verb">headers</spanx> list in the signature object.</t>

</section>
<section anchor="canonicalization"><name>Canonicalization</name>

<t>Messages <bcp14>MUST</bcp14> be canonicalized before signing to ensure consistent signature verification.</t>

<t><strong>JSON Canonicalization Process</strong>:</t>

<t>ATP uses JSON Canonicalization Scheme (JCS) <xref target="RFC8785"/> for JSON payloads:</t>

<t><list style="numbers" type="1">
  <t>Remove the <spanx style="verb">signature</spanx> field from the message object.</t>
  <t>Apply JCS canonicalization to the remaining JSON object.</t>
  <t>Convert the canonicalized JSON to UTF-8 bytes.</t>
  <t>Sign the UTF-8 bytes using the specified algorithm.</t>
</list></t>

<t><strong>CBOR Canonicalization Process</strong>:</t>

<t>For CBOR payloads, ATP uses deterministic CBOR encoding as defined in RFC 8949 Section 4.2 (Core Deterministic Encoding Requirements):</t>

<t><list style="numbers" type="1">
  <t>Remove the <spanx style="verb">signature</spanx> field from the CBOR map.</t>
  <t>Re-encode the remaining map using deterministic CBOR encoding:
  <list style="symbols">
      <t>Map keys <bcp14>MUST</bcp14> be sorted in bytewise lexicographic order of their deterministic encodings.</t>
      <t>Indefinite-length items <bcp14>MUST NOT</bcp14> be used.</t>
      <t>Preferred serialization rules from Section 4.1 of <xref target="RFC8949"/> <bcp14>MUST</bcp14> be applied.</t>
    </list></t>
  <t>Sign the resulting byte string using the specified algorithm.</t>
</list></t>

</section>
<section anchor="signature-verification"><name>Signature Verification</name>

<t>The recipient verifies the signature as follows:</t>

<t><list style="numbers" type="1">
  <t>Extract the <spanx style="verb">signature</spanx> field from the message.</t>
  <t>Verify that the <spanx style="verb">headers</spanx> list in the signature object matches the set of fields present in the message envelope (excluding <spanx style="verb">signature</spanx>). Reject the message if they do not match.</t>
  <t>Reconstruct the message object without the <spanx style="verb">signature</spanx> field.</t>
  <t>Apply the appropriate canonicalization process (JCS for JSON, deterministic encoding for CBOR).</t>
  <t>Verify the signature using the public key from the ATK record.</t>
</list></t>

</section>
<section anchor="signature-error-handling"><name>Signature Error Handling</name>

<t>If signature verification fails, the recipient <bcp14>MUST</bcp14> reject the message and <bcp14>MAY</bcp14> log the failure for monitoring.</t>

</section>
</section>
</section>
<section anchor="transport-protocol"><name>Transport Protocol</name>

<section anchor="https-transport"><name>HTTPS Transport</name>

<t>The primary transport for ATP is HTTPS, enabling easy deployment behind existing infrastructure such as CDNs, load balancers, and firewalls.</t>

<section anchor="default-port"><name>Default Port</name>

<t>The default port for ATP over HTTPS is <strong>7443</strong>. IANA registration for this port is requested in the IANA Considerations section of this document.</t>

<t>Deployments <bcp14>MUST</bcp14> support custom port configuration via SVCB records. ATP servers <bcp14>MAY</bcp14> listen on alternative ports (including 443) as specified in the SVCB record's port parameter. The use of a dedicated port provides operational advantages in enterprise environments: security teams can identify and audit ATP traffic by port number without requiring deep packet inspection, and it avoids path conflicts with existing HTTPS services on port 443.</t>

</section>
<section anchor="endpoints"><name>Endpoints</name>

<t>ATP servers <bcp14>MUST</bcp14> implement the following standard endpoints:</t>

<section anchor="send-message-endpoint"><name>Send Message Endpoint</name>

<figure><sourcecode type="http"><![CDATA[
POST /.well-known/atp/v1/message
Content-Type: application/atp+json
]]></sourcecode></figure>

<t><strong>Request Body</strong>: ATP message envelope</t>

<t><strong>Response</strong>:</t>

<t><list style="symbols">
  <t><strong>202 Accepted</strong>: Message accepted for delivery</t>
  <t><strong>400 Bad Request</strong>: Invalid message format</t>
  <t><strong>401 Unauthorized</strong>: Authentication failed</t>
  <t><strong>429 Too Many Requests</strong>: Rate limit exceeded</t>
  <t><strong>500 Internal Server Error</strong>: Server error</t>
</list></t>

</section>
<section anchor="capability-discovery-endpoint"><name>Capability Discovery Endpoint</name>

<figure><sourcecode type="http"><![CDATA[
GET /.well-known/atp/v1/capabilities
]]></sourcecode></figure>

<t><strong>Response</strong>: JSON object describing server capabilities</t>

</section>
<section anchor="health-check-endpoint"><name>Health Check Endpoint</name>

<figure><sourcecode type="http"><![CDATA[
GET /.well-known/atp/v1/health
]]></sourcecode></figure>

<t><strong>Response</strong>:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "status": "ok",
  "version": "1.0.0",
  "uptime": 86400,
  "load": 0.45
}
]]></sourcecode></figure>

</section>
</section>
<section anchor="connection-management"><name>Connection Management</name>

<t><list style="symbols">
  <t><strong>Keep-Alive</strong>: Clients <bcp14>SHOULD</bcp14> use HTTP keep-alive for multiple requests.</t>
  <t><strong>Timeout</strong>: Servers <bcp14>SHOULD</bcp14> implement idle timeout (<bcp14>RECOMMENDED</bcp14>: 60 seconds).</t>
  <t><strong>Rate Limiting</strong>: Servers <bcp14>MAY</bcp14> implement rate limiting with appropriate HTTP headers.</t>
</list></t>

</section>
</section>
<section anchor="ipv6-considerations"><name>IPv6 Considerations</name>

<t>ATP deployments <bcp14>SHOULD</bcp14> support IPv6 connectivity. ATP servers <bcp14>MUST</bcp14> publish both A and AAAA records when IPv6 is available. Clients <bcp14>SHOULD</bcp14> implement Happy Eyeballs <xref target="RFC8305"/> for dual-stack connection establishment.</t>

<t>In the SVCB record, the <spanx style="verb">ipv6hint</spanx> parameter provides IPv6 address hints for faster connection establishment without an additional AAAA query:</t>

<figure><sourcecode type="dns"><![CDATA[
_atp.example.com. IN SVCB 1 agent.example.com. (
    port=7443
    alpn="atp/1"
    ipv4hint=192.0.2.1
    ipv6hint=2001:db8::1,2001:db8::2
    atp-capabilities="message,request,event"
)
]]></sourcecode></figure>

<t>For new ATP deployments, IPv6-only operation is a valid configuration. IPv4 support is NOT <bcp14>REQUIRED</bcp14> when the deployment environment is IPv6-capable.</t>

</section>
<section anchor="quic-transport-future-work"><name>QUIC Transport (Future Work)</name>

<t>ATP is designed to support QUIC transport <xref target="RFC9000"/> for low-latency scenarios. The ALPN identifier for ATP over QUIC is <spanx style="verb">atp/1</spanx>.</t>

<t>The full specification of QUIC transport for ATP, including message-to-stream mapping, QUIC error code registry, and 0-RTT security considerations, is deferred to a companion document. This section provides an overview of the intended design.</t>

<section anchor="expected-benefits"><name>Expected Benefits</name>

<t><list style="symbols">
  <t><strong>0-RTT Handshake</strong>: Establish connections with zero round-trip time for resumed connections.</t>
  <t><strong>Multiplexing</strong>: Multiple ATP messages over a single connection without head-of-line blocking.</t>
  <t><strong>Connection Migration</strong>: Maintain connections across network changes.</t>
  <t><strong>Better Performance</strong>: Reduced latency over lossy networks.</t>
</list></t>

</section>
<section anchor="security-note"><name>Security Note</name>

<t>QUIC 0-RTT data is subject to replay attacks. ATP messages sent over 0-RTT <bcp14>MUST</bcp14> be idempotent, or servers <bcp14>MUST</bcp14> implement application-level replay protection in addition to the timestamp/nonce mechanism defined in this specification.</t>

</section>
</section>
</section>
<section anchor="message-format"><name>Message Format</name>

<section anchor="common-fields"><name>Common Fields</name>

<t>All ATP messages share a common envelope structure with the following fields:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "from": "string",
  "to": "string",
  "cc": ["string"],
  "timestamp": "integer",
  "nonce": "string",
  "type": "string",
  "in_reply_to": "string",
  "task_id": "string",
  "context_id": "string",
  "payload": "object",
  "signature": "object",
  "routing": "object"
}
]]></sourcecode></figure>

<section anchor="field-definitions"><name>Field Definitions</name>

<t><list style="symbols">
  <t><strong><spanx style="verb">from</spanx></strong>: The Agent ID of the message sender (<bcp14>REQUIRED</bcp14>). <bcp14>MUST</bcp14> be a valid agent identifier.</t>
  <t><strong><spanx style="verb">to</spanx></strong>: The Agent ID of the primary recipient (<bcp14>REQUIRED</bcp14>). <bcp14>MUST</bcp14> be a valid agent identifier.</t>
  <t><strong><spanx style="verb">cc</spanx></strong>: Array of Agent IDs for carbon-copy recipients (<bcp14>OPTIONAL</bcp14>).</t>
  <t><strong><spanx style="verb">timestamp</spanx></strong>: Unix timestamp (seconds since epoch) when the message was created (<bcp14>REQUIRED</bcp14>). Recipients <bcp14>MUST</bcp14> reject messages with timestamps more than 300 seconds (5 minutes) in the past or more than 60 seconds in the future relative to the recipient's clock. Implementations <bcp14>SHOULD</bcp14> use NTP-synchronized clocks.</t>
  <t><strong><spanx style="verb">nonce</spanx></strong>: Cryptographically random unique identifier for the message (<bcp14>REQUIRED</bcp14>). <bcp14>MUST</bcp14> be unique per sender within the timestamp validity window. Recipients <bcp14>MUST</bcp14> maintain a cache of recently seen (sender, nonce) pairs for at least the duration of the timestamp validity window (300 seconds) and <bcp14>MUST</bcp14> reject duplicate (sender, nonce) pairs.</t>
  <t><strong><spanx style="verb">type</spanx></strong>: Message type indicator (<bcp14>REQUIRED</bcp14>). Values: <spanx style="verb">message</spanx>, <spanx style="verb">request</spanx>, <spanx style="verb">response</spanx>, <spanx style="verb">event</spanx>.</t>
  <t><strong><spanx style="verb">in_reply_to</spanx></strong>: The nonce of the original message that this message is responding to (<bcp14>OPTIONAL</bcp14>). <bcp14>REQUIRED</bcp14> for <spanx style="verb">response</spanx> type messages. Used for request-response correlation.</t>
  <t><strong><spanx style="verb">task_id</spanx></strong>: Identifies the task or workflow this message belongs to (<bcp14>OPTIONAL</bcp14>). All messages related to the same task <bcp14>SHOULD</bcp14> use the same task_id.</t>
  <t><strong><spanx style="verb">context_id</spanx></strong>: Identifies the conversation or session context (<bcp14>OPTIONAL</bcp14>). Used for multi-turn interactions.</t>
  <t><strong><spanx style="verb">payload</spanx></strong>: Message-specific content (<bcp14>REQUIRED</bcp14>). Structure depends on message type.</t>
  <t><strong><spanx style="verb">signature</spanx></strong>: Cryptographic signature envelope (<bcp14>REQUIRED</bcp14>).</t>
  <t><strong><spanx style="verb">routing</spanx></strong>: Routing information for multi-hop scenarios (<bcp14>OPTIONAL</bcp14>).</t>
</list></t>

</section>
</section>
<section anchor="message-types"><name>Message Types</name>

<t>ATP supports three primary message types, each with distinct semantics and use cases.</t>

<section anchor="message-asynchronous"><name>Message (Asynchronous)</name>

<t>The <spanx style="verb">message</spanx> type is used for asynchronous, fire-and-forget communication.</t>

<figure><sourcecode type="json"><![CDATA[
{
  "from": "a1@example.com",
  "to": "a2@example.com",
  "timestamp": 1710000000,
  "nonce": "msg-12345-abcde",
  "type": "message",
  "payload": {
    "subject": "Hello from Agent A1",
    "body": "This is an asynchronous message",
    "attachments": [
      {
        "name": "data.json",
        "content_type": "application/json",
        "data": "base64-encoded-data"
      }
    ],
    "priority": "normal"
  },
  "signature": {}
}
]]></sourcecode></figure>

</section>
<section anchor="requestresponse"><name>Request/Response</name>

<t>The <spanx style="verb">request</spanx>/<spanx style="verb">response</spanx> pattern supports synchronous RPC-style interactions.</t>

<section anchor="request-format"><name>Request Format</name>

<figure><sourcecode type="json"><![CDATA[
{
  "from": "client@example.com",
  "to": "service@example.org",
  "timestamp": 1710000000,
  "nonce": "req-67890-fghij",
  "type": "request",
  "payload": {
    "action": "get_weather",
    "params": {
      "location": "New York",
      "units": "metric"
    },
    "timeout": 30,
    "correlation_id": "corr-12345"
  },
  "signature": {}
}
]]></sourcecode></figure>

</section>
<section anchor="response-format"><name>Response Format</name>

<figure><sourcecode type="json"><![CDATA[
{
  "from": "service@example.org",
  "to": "client@example.com",
  "timestamp": 1710000001,
  "nonce": "resp-67890-klmno",
  "type": "response",
  "in_reply_to": "req-67890-fghij",
  "payload": {
    "status": "success",
    "data": {
      "temperature": 22,
      "conditions": "sunny",
      "humidity": 65
    },
    "correlation_id": "corr-12345"
  },
  "signature": {}
}
]]></sourcecode></figure>

</section>
</section>
<section anchor="eventsubscription"><name>Event/Subscription</name>

<t>The <spanx style="verb">event</spanx> type supports streaming and event-driven communication.</t>

<section anchor="subscription-request"><name>Subscription Request</name>

<figure><sourcecode type="json"><![CDATA[
{
  "from": "subscriber@example.com",
  "to": "publisher@example.org",
  "timestamp": 1710000000,
  "nonce": "sub-11111-pqrst",
  "type": "request",
  "payload": {
    "action": "subscribe",
    "event_types": ["price_update", "news", "alert"],
    "filter": {
      "symbol": "AAPL",
      "priority": ">=high"
    },
    "delivery_mode": "push",
    "subscription_id": "sub-12345"
  },
  "signature": {}
}
]]></sourcecode></figure>

</section>
<section anchor="event-message"><name>Event Message</name>

<figure><sourcecode type="json"><![CDATA[
{
  "from": "publisher@example.org",
  "to": "subscriber@example.com",
  "timestamp": 1710000010,
  "nonce": "evt-22222-uvwxy",
  "type": "event",
  "payload": {
    "event_type": "price_update",
    "subscription_id": "sub-12345",
    "data": {
      "symbol": "AAPL",
      "price": 150.25,
      "timestamp": 1710000010,
      "volume": 1000000
    },
    "sequence_number": 42
  },
  "signature": {}
}
]]></sourcecode></figure>

</section>
</section>
</section>
<section anchor="payload-encoding"><name>Payload Encoding</name>

<t>ATP supports multiple payload encoding formats. ATP defines a single abstract data model for the message envelope and payload. All data structures in this document are presented in JSON, which is the reference encoding; the CBOR encoding represents the same abstract data model, and a CBOR message is structurally equivalent to its JSON counterpart. The two encodings are interconvertible without loss of information.</t>

<section anchor="json-encoding"><name>JSON Encoding</name>

<t>JSON <xref target="RFC8259"/> is the <bcp14>RECOMMENDED</bcp14> encoding format.</t>

<t><strong>Content-Type</strong>: <spanx style="verb">application/atp+json</spanx></t>

</section>
<section anchor="cbor-encoding"><name>CBOR Encoding</name>

<t>CBOR <xref target="RFC8949"/> is an <bcp14>OPTIONAL</bcp14> encoding format for bandwidth-constrained environments. CBOR messages carry the same abstract data model as the JSON examples in this document and are canonicalized for signing using the deterministic CBOR encoding described in <xref target="canonicalization"/>.</t>

<t><strong>Content-Type</strong>: <spanx style="verb">application/atp+cbor</spanx></t>

</section>
</section>
<section anchor="message-size-limits"><name>Message Size Limits</name>

<t>ATP servers <bcp14>SHOULD</bcp14> enforce message size limits:</t>

<t><list style="symbols">
  <t><strong>Default Maximum</strong>: 1 MB (1,048,576 bytes)</t>
  <t><strong>Minimum Supported</strong>: 64 KB (65,536 bytes)</t>
</list></t>

</section>
</section>
<section anchor="protocol-semantics"><name>Protocol Semantics</name>

<section anchor="message-asynchronous-1"><name>Message (Asynchronous)</name>

<t>Asynchronous messages follow a store-and-forward model.</t>

<section anchor="delivery-model"><name>Delivery Model</name>

<figure title="Asynchronous Message Delivery Model: Submit → Transfer → Deliver flow through ATP servers" anchor="fig-message-delivery"><artwork type="ascii-art"><![CDATA[
Sender Agent      ATP Server A      ATP Server B      Recipient Agent
     |                |                 |                    |
     |---[Submit]---->|                 |                    |
     |                |                 |                    |
     |                |---[Transfer]--->|                    |
     |                |                 |                    |
     |                |                 |----[Deliver]------>|
     |                |                 |                    |
]]></artwork></figure>

<t>In this model:</t>

<t><list style="numbers" type="1">
  <t>The Sender Agent submits a message to its local ATP Server A</t>
  <t>ATP Server A performs policy enforcement (ATS/ATK validation) and transfers the message to ATP Server B</t>
  <t>ATP Server B performs security checks and delivers the message to the Recipient Agent</t>
</list></t>

<t>Each hop (Submit/Transfer/Deliver) involves independent ATS/ATK validation for security enforcement.</t>

</section>
<section anchor="delivery-guarantees"><name>Delivery Guarantees</name>

<t>ATP asynchronous messages provide store-and-forward delivery with the following semantics:</t>

<t><list style="symbols">
  <t><strong>Default</strong>: Best-effort delivery. Servers attempt delivery but do not guarantee success.</t>
  <t><strong>With acknowledgment</strong>: When delivery acknowledgment is requested (via <spanx style="verb">payload.ack_required: true</spanx>), servers provide at-least-once delivery semantics.</t>
</list></t>

</section>
<section anchor="retry-policy"><name>Retry Policy</name>

<t>Servers <bcp14>SHOULD</bcp14> retry failed deliveries using exponential backoff:</t>

<t><list style="symbols">
  <t>Initial retry interval: 1 second</t>
  <t>Maximum retry interval: 1 hour</t>
  <t>Maximum retry duration: 48 hours</t>
  <t>Maximum retry count: 10</t>
</list></t>

<t>After exhausting retries, servers <bcp14>MUST</bcp14> generate a bounce notification if the sender requested acknowledgment.</t>

</section>
</section>
<section anchor="requestresponse-synchronous"><name>Request/Response (Synchronous)</name>

<t>Synchronous request/response follows an RPC pattern.</t>

<section anchor="interaction-model"><name>Interaction Model</name>

<t>All agent communication <bcp14>MUST</bcp14> go through their respective ATP servers. This design ensures proper routing, security filtering, and policy enforcement.</t>

<figure title="Request/Response Interaction Model: Synchronous RPC-style flow with bidirectional server-mediated communication" anchor="fig-request-response"><artwork type="ascii-art"><![CDATA[
Client Agent     ATP Server A     ATP Server B     Service Agent
     |                |                 |                 |
     |---[Request]--->|                 |                 |
     |                |                 |                 |
     |                |---[Transfer]--->|                 |
     |                |                 |                 |
     |                |                 |---[Request]---->|
     |                |                 |                 |
     |                |                 |<--[Response]----|
     |                |                 |                 |
     |                |<--[Transfer]----|                 |
     |<--[Response]---|                 |                 |
     |                |                 |                 |
]]></artwork></figure>

<t>In this model:</t>

<t><list style="numbers" type="1">
  <t>The Client Agent submits a request to its local ATP Server A via HTTP POST</t>
  <t>ATP Server A performs policy enforcement (ATS/ATK validation) and transfers the request to ATP Server B</t>
  <t>ATP Server B performs security checks and delivers the request to the Service Agent</t>
  <t>The Service Agent processes the request and returns a response</t>
  <t>The response flows back through the same path (Service Agent → ATP Server B → ATP Server A → Client Agent)</t>
</list></t>

<t>Each hop (Submit/Transfer/Deliver) involves independent ATS/ATK validation for security enforcement.</t>

</section>
<section anchor="deadline-propagation"><name>Deadline Propagation</name>

<t>For multi-hop request/response interactions, the <spanx style="verb">timeout</spanx> field (in seconds) <bcp14>MUST</bcp14> be converted to an absolute deadline for relay forwarding. Because the deadline is obtained by adding <spanx style="verb">timeout</spanx> to the sender's timestamp, both values use the same unit (seconds). The absolute deadline is computed as:</t>

<figure><artwork><![CDATA[
deadline = sender_timestamp + timeout
]]></artwork></figure>

<t>When a relay forwards a request:</t>

<t><list style="numbers" type="1">
  <t>Calculate the remaining time: <spanx style="verb">remaining = deadline - now</spanx></t>
  <t>If <spanx style="verb">remaining &lt;= 0</spanx>, return a TIMEOUT error immediately with HTTP 504 and error body <spanx style="verb">{"error": "DEADLINE_EXCEEDED", "detail": "Request deadline expired in transit"}</spanx>.</t>
  <t>Set the forwarded request's timeout to the remaining time.</t>
</list></t>

</section>
<section anchor="state-management"><name>State Management</name>

<t><list style="symbols">
  <t><strong>Stateless</strong>: Each request is independent.</t>
  <t><strong>Correlation ID</strong>: Clients <bcp14>MAY</bcp14> include a <spanx style="verb">correlation_id</spanx> to track workflows.</t>
  <t><strong>Idempotency</strong>: Requests <bcp14>SHOULD</bcp14> be idempotent.</t>
</list></t>

</section>
</section>
<section anchor="eventsubscription-streaming"><name>Event/Subscription (Streaming)</name>

<t>Event/subscription follows a publish-subscribe pattern.</t>

<section anchor="pubsub-model"><name>Pub/Sub Model</name>

<t>All event publications and subscriptions <bcp14>MUST</bcp14> go through ATP servers for proper routing and access control.</t>

<figure title="Event/Subscription Pub/Sub Model: Bidirectional flow for subscription establishment and event notification" anchor="fig-event-subscription"><artwork type="ascii-art"><![CDATA[
Publisher       ATP Server A    ATP Server B      Subscriber
     |               |               |                 |
     |----[Event]--->|               |                 |
     |               |               |                 |
     |               |--[Transfer]-->|                 |
     |               |               |                 |
     |               |               |-----[Event]---->|
     |               |               |                 |
     |               |               |<--[Subscribe]---|
     |               |               |                 |
     |               |<--[Transfer]--|                 |
     |<-[Subscribe]--|               |                 |
     |               |               |                 |
]]></artwork></figure>

<t>The event/subscription flow consists of two phases:</t>

<t><strong>Subscription Phase</strong>: The Subscriber initiates a subscription request to its local ATP Server, which transfers the request to the Publisher's ATP Server, which then delivers it to the Publisher. This establishes the subscription relationship across the server chain.</t>

<t><strong>Event Notification Phase</strong>: When an event occurs, the Publisher sends the event to its local ATP Server (Server B), which transfers it across the Internet to the Subscriber's ATP Server (Server A), which then delivers the notification to the Subscriber.</t>

<t>This bidirectional flow ensures:</t>

<t><list style="symbols">
  <t>Proper access control at each ATP server boundary</t>
  <t>ATS/ATK policy enforcement for both subscription and event messages</t>
  <t>Subscription state management at the Publisher's server</t>
</list></t>

</section>
<section anchor="subscription-lifecycle"><name>Subscription Lifecycle</name>

<t><list style="symbols">
  <t><strong>TTL</strong>: Subscriptions <bcp14>SHOULD</bcp14> include a <spanx style="verb">ttl</spanx> field (in seconds) in the subscribe request payload. If not specified, the default TTL is 3600 seconds (1 hour).</t>
  <t><strong>Renewal</strong>: Subscribers <bcp14>MUST</bcp14> renew subscriptions before TTL expiry by sending a new subscribe request with the same <spanx style="verb">subscription_id</spanx>.</t>
  <t><strong>Heartbeat</strong>: Publishing servers <bcp14>SHOULD</bcp14> send periodic heartbeat events (type: <spanx style="verb">event</spanx>, event_type: <spanx style="verb">heartbeat</spanx>) to subscribing servers. Note that heartbeat is a server-to-server mechanism, not agent-to-agent; it verifies the liveness of the subscription channel between ATP servers. Subscribing servers that do not receive a heartbeat within 2x the expected interval <bcp14>SHOULD</bcp14> re-subscribe.</t>
  <t><strong>Auto-expiry</strong>: Subscriptions that are not renewed within their TTL period are automatically expired. Publishers <bcp14>MUST</bcp14> stop sending events to expired subscriptions.</t>
</list></t>

</section>
<section anchor="server-to-server-event-delivery"><name>Server-to-Server Event Delivery</name>

<t>For push-mode event delivery, the publishing server sends events to the subscribing server's ATP message endpoint. The subscribing server's endpoint is discovered through the standard DNS SVCB discovery process using the subscriber's domain.</t>

<t>Future versions of this specification <bcp14>MAY</bcp14> define additional transport mechanisms for real-time event delivery, including:</t>

<t><list style="symbols">
  <t>Server-Sent Events (SSE) for unidirectional streaming</t>
  <t>WebSocket for bidirectional streaming</t>
</list></t>

<t>These mechanisms are out of scope for the current version.</t>

</section>
</section>
</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t>ATP is designed with security as a first-class requirement. This section analyzes the threat model and security considerations for each component of the protocol.</t>

<section anchor="threat-model"><name>Threat Model</name>

<t>The threat model for ATP considers the following adversaries and attack vectors:</t>

<t><strong>Network Adversaries</strong>: Passive or active attackers on the network path between agents and ATP servers, or between ATP servers. Capabilities may include:</t>

<t><list style="symbols">
  <t>Eavesdropping on unencrypted traffic</t>
  <t>Man-in-the-middle (MitM) attacks to intercept or modify communications</t>
  <t>Replay attacks using captured messages</t>
  <t>Traffic analysis to infer communication patterns</t>
</list></t>

<t><strong>Malicious Agents</strong>: Compromised or malicious agents that attempt to:</t>

<t><list style="symbols">
  <t>Send unauthorized messages on behalf of other agents (spoofing)</t>
  <t>Flood servers with excessive requests (DoS)</t>
  <t>Exploit protocol vulnerabilities to gain unauthorized access</t>
</list></t>

<t><strong>Rogue ATP Servers</strong>: Compromised or malicious ATP servers that may:</t>

<t><list style="symbols">
  <t>Fail to enforce ATS/ATK policies</t>
  <t>Leak sensitive message content</t>
  <t>Drop or delay messages selectively</t>
</list></t>

<t><strong>DNS Attackers</strong>: Adversaries that attempt to compromise DNS infrastructure:</t>

<t><list style="symbols">
  <t>DNS cache poisoning to redirect ATP traffic</t>
  <t>DNS spoofing to provide fraudulent SVCB records</t>
  <t>DNS amplification attacks</t>
</list></t>

</section>
<section anchor="authentication"><name>Authentication</name>

<section anchor="tls-security"><name>TLS Security</name>

<t><strong>Threat</strong>: Network adversaries attempting eavesdropping or MitM attacks.</t>

<t><strong>Mitigation</strong>:</t>

<t><list style="symbols">
  <t>All ATP connections <bcp14>MUST</bcp14> use TLS 1.3 <xref target="RFC8446"/> or higher</t>
  <t>Certificate validation against trusted Certification Authorities is mandatory</t>
  <t>Cipher suites <bcp14>MUST</bcp14> provide forward secrecy</t>
  <t>Cipher suites <bcp14>SHOULD</bcp14> use authenticated encryption (AES-GCM, ChaCha20-Poly1305)</t>
</list></t>

<t><strong>Residual Risk</strong>: Certificate authority compromise or mis-issuance. Deployments with high security requirements <bcp14>SHOULD</bcp14> implement certificate pinning or use DANE <xref target="RFC6698"/>.</t>

</section>
<section anchor="ats-agent-transfer-sender-policy"><name>ATS (Agent Transfer Sender Policy)</name>

<t><strong>Threat</strong>: Malicious agents attempting to send messages on behalf of domains they do not control (spoofing).</t>

<t><strong>Mitigation</strong>:</t>

<t><list style="symbols">
  <t>ATS records define authorized sending sources per domain</t>
  <t>Policy directives include IP ranges, domains, and explicit deny rules</t>
  <t>Each ATP server performs ATS validation on every incoming message</t>
  <t>Failed ATS validation results in immediate rejection</t>
</list></t>

<t><strong>Residual Risk</strong>: ATS record tampering via DNS attacks. Deployments <bcp14>SHOULD</bcp14> sign ATS records with DNSSEC <xref target="RFC4033"/>.</t>

</section>
<section anchor="atk-agent-transfer-key"><name>ATK (Agent Transfer Key)</name>

<t><strong>Threat</strong>: Message tampering or forgery by network adversaries or malicious agents.</t>

<t><strong>Mitigation</strong>:</t>

<t><list style="symbols">
  <t>ATK records publish cryptographic public keys for signature verification</t>
  <t>All ATP messages <bcp14>MUST</bcp14> be cryptographically signed</t>
  <t>Supported algorithms: Ed25519 (<bcp14>RECOMMENDED</bcp14>), RSA (3072+ bit for new keys), ECDSA (P-256+)</t>
  <t>Signature covers all critical message fields (from, to, timestamp, nonce, type, payload)</t>
</list></t>

<t><strong>Residual Risk</strong>: Key compromise. Domains <bcp14>MUST</bcp14> implement key rotation and maintain revocation procedures via the <spanx style="verb">r</spanx> flag in ATK records.</t>

</section>
<section anchor="message-signature-1"><name>Message Signature</name>

<t><strong>Threat</strong>: Message modification in transit, replay attacks.</t>

<t><strong>Mitigation</strong>:</t>

<t><list style="symbols">
  <t>Cryptographic signatures cover canonicalized message content</t>
  <t>Nonce prevents replay attacks</t>
  <t>Timestamp enables expiration checking</t>
  <t>Signature includes headers list to prevent header manipulation</t>
</list></t>

<t><strong>Residual Risk</strong>: Long-term key compromise enables retroactive forgery. Future work may introduce forward-secure signature schemes.</t>

</section>
</section>
<section anchor="privacy"><name>Privacy</name>

<section anchor="metadata-exposure"><name>Metadata Exposure</name>

<t><strong>Threat</strong>: Traffic analysis revealing communication patterns, relationships, or sensitive business information.</t>

<t><strong>Exposure</strong>:</t>

<t><list style="symbols">
  <t><spanx style="verb">from</spanx> and <spanx style="verb">to</spanx> fields are visible to ATP servers and network observers</t>
  <t><spanx style="verb">timestamp</spanx> reveals timing of communications</t>
  <t><spanx style="verb">type</spanx> indicates interaction pattern (message, request, response, event)</t>
</list></t>

<t><strong>Mitigation</strong>:</t>

<t><list style="symbols">
  <t>Payload content <bcp14>SHOULD</bcp14> be encrypted end-to-end when confidentiality is required</t>
  <t>Agents <bcp14>MAY</bcp14> use pseudonymous identifiers for sensitive communications</t>
  <t>ATP servers <bcp14>SHOULD</bcp14> minimize metadata logging</t>
</list></t>

<t><strong>Residual Risk</strong>: Metadata analysis remains possible. Applications with strong privacy requirements <bcp14>SHOULD</bcp14> implement additional obfuscation at the application layer.</t>

</section>
<section anchor="payload-confidentiality"><name>Payload Confidentiality</name>

<t><strong>Threat</strong>: Unauthorized access to message content by ATP servers or network adversaries.</t>

<t><strong>Mitigation</strong>:</t>

<t><list style="symbols">
  <t>TLS encryption protects payload in transit between hops</t>
  <t>Agents <bcp14>MAY</bcp14> encrypt payload content end-to-end using recipient's public key</t>
  <t>CBOR encoding supports embedded encrypted content</t>
</list></t>

<t><strong>Residual Risk</strong>: ATP servers must inspect messages for policy enforcement. Deployments handling sensitive data <bcp14>SHOULD</bcp14> implement server-side encryption with customer-managed keys.</t>

</section>
</section>
<section anchor="denial-of-service"><name>Denial of Service</name>

<section anchor="resource-exhaustion-attacks"><name>Resource Exhaustion Attacks</name>

<t><strong>Threat</strong>: Adversaries flooding ATP servers with excessive messages or connections.</t>

<t><strong>Attack Vectors</strong>:</t>

<t><list style="symbols">
  <t>Message flooding to exhaust server storage or bandwidth</t>
  <t>Connection exhaustion to deplete server connection pools</t>
  <t>Computational DoS via expensive cryptographic operations</t>
</list></t>

<t><strong>Mitigation</strong>:</t>

<t><list style="symbols">
  <t>Rate limiting based on sender reputation and domain</t>
  <t>Message size limits (default 1 MB maximum)</t>
  <t>Connection limits per sender IP and domain</t>
  <t>Exponential backoff for retry attempts</t>
  <t>Quota enforcement per agent and per domain</t>
</list></t>

</section>
<section anchor="amplification-attacks"><name>Amplification Attacks</name>

<t><strong>Threat</strong>: Attackers using ATP to amplify traffic toward victims.</t>

<t><strong>Mitigation</strong>:</t>

<t><list style="symbols">
  <t>ATS validation prevents unauthorized relaying</t>
  <t>Response messages only sent to request initiators</t>
  <t>Subscription confirmation required before event delivery</t>
  <t>No broadcast or multicast mechanisms</t>
</list></t>

</section>
</section>
<section anchor="dns-security"><name>DNS Security</name>

<section anchor="dns-spoofing-and-cache-poisoning"><name>DNS Spoofing and Cache Poisoning</name>

<t><strong>Threat</strong>: Attackers providing fraudulent DNS responses to redirect ATP traffic.</t>

<t><strong>Mitigation</strong>:</t>

<t><list style="symbols">
  <t>ATP servers <bcp14>SHOULD</bcp14> validate DNS responses using DNSSEC <xref target="RFC4033"/></t>
  <t>SVCB records <bcp14>SHOULD</bcp14> be cached with appropriate TTL</t>
  <t>Multiple independent DNS resolvers <bcp14>SHOULD</bcp14> be consulted</t>
</list></t>

<t><strong>Residual Risk</strong>: DNSSEC adoption is not universal. Applications requiring high assurance <bcp14>SHOULD</bcp14> implement additional verification.</t>

</section>
<section anchor="dns-query-privacy"><name>DNS Query Privacy</name>

<t><strong>Threat</strong>: DNS queries revealing which domains agents communicate with.</t>

<t><strong>Mitigation</strong>:</t>

<t><list style="symbols">
  <t>DNS-over-HTTPS (DoH) or DNS-over-TLS (DoT) for query confidentiality</t>
  <t>DNS query caching to reduce query frequency</t>
  <t>Batch queries when discovering multiple domains</t>
</list></t>

</section>
</section>
<section anchor="atp-server-security"><name>ATP Server Security</name>

<section anchor="server-compromise"><name>Server Compromise</name>

<t><strong>Threat</strong>: Compromised ATP server leaking or modifying messages.</t>

<t><strong>Mitigation</strong>:</t>

<t><list style="symbols">
  <t>End-to-end message signatures detect modification</t>
  <t>Payload encryption protects content from server inspection</t>
  <t>Audit logging for security monitoring</t>
  <t>Regular security updates and hardening</t>
</list></t>

</section>
<section anchor="multi-tenant-isolation"><name>Multi-tenant Isolation</name>

<t><strong>Threat</strong>: One tenant's agents accessing or interfering with another tenant's agents.</t>

<t><strong>Mitigation</strong>:</t>

<t><list style="symbols">
  <t>Strict domain-based access control</t>
  <t>Per-tenant quota enforcement</t>
  <t>Isolated processing contexts</t>
  <t>ATS/ATK validation per message</t>
</list></t>

</section>
</section>
<section anchor="security-best-practices"><name>Security Best Practices</name>

<t>Deployments <bcp14>SHOULD</bcp14> implement the following security practices:</t>

<t><list style="numbers" type="1">
  <t><strong>DNSSEC</strong>: Sign all DNS zones containing ATS and ATK records</t>
  <t><strong>Key Rotation</strong>: Rotate ATK keys every 90 days minimum</t>
  <t><strong>Monitoring</strong>: Log and alert on ATS/ATK validation failures</t>
  <t><strong>Certificate Management</strong>: Monitor certificate expiration and implement automated renewal</t>
  <t><strong>Incident Response</strong>: Maintain procedures for key revocation and emergency policy updates</t>
  <t><strong>Defense in Depth</strong>: Implement multiple layers of security controls</t>
</list></t>

</section>
<section anchor="known-limitations"><name>Known Limitations</name>

<t><list style="numbers" type="1">
  <t><strong>Metadata Visibility</strong>: ATP does not hide communication metadata from ATP servers</t>
  <t><strong>DNS Trust</strong>: DNS security depends on DNSSEC adoption</t>
  <t><strong>Server Trust</strong>: ATP servers can observe unencrypted payload content</t>
  <t><strong>Key Management</strong>: Compromised keys enable message forgery until revocation</t>
</list></t>

<t>Future revisions of ATP may address these limitations through techniques such as onion routing, encrypted DNS, or decentralized trust models.</t>

</section>
</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<section anchor="application-layer-protocol-negotiation-alpn-protocol-identifier"><name>Application-Layer Protocol Negotiation (ALPN) Protocol Identifier</name>

<t>IANA is requested to register the following ALPN protocol identifier:</t>

<t><list style="symbols">
  <t><strong>Protocol</strong>: <spanx style="verb">atp/1</spanx></t>
  <t><strong>Identification Sequence</strong>: 0x61 0x74 0x70 0x2f 0x31 (<spanx style="verb">atp/1</spanx>)</t>
  <t><strong>Specification</strong>: This document</t>
</list></t>

</section>
<section anchor="well-known-uri"><name>Well-Known URI</name>

<t>IANA is requested to register the following well-known URI:</t>

<t><list style="symbols">
  <t><strong>URI Suffix</strong>: <spanx style="verb">atp</spanx></t>
  <t><strong>Change Controller</strong>: IETF</t>
  <t><strong>Specification</strong>: This document</t>
</list></t>

</section>
<section anchor="media-types"><name>Media Types</name>

<t>IANA is requested to register the following media types:</t>

<t><list style="symbols">
  <t><strong>application/atp+json</strong>: JSON-encoded ATP messages as defined in Section 6</t>
  <t><strong>application/atp+cbor</strong>: CBOR-encoded ATP messages as defined in Section 6</t>
</list></t>

</section>
<section anchor="service-name-and-transport-protocol-port-number-registry"><name>Service Name and Transport Protocol Port Number Registry</name>

<t>IANA is requested to register the following service:</t>

<t><list style="symbols">
  <t><strong>Service Name</strong>: <spanx style="verb">atp</spanx></t>
  <t><strong>Port Number</strong>: 7443</t>
  <t><strong>Transport Protocol</strong>: TCP, UDP</t>
  <t><strong>Description</strong>: Agent Transfer Protocol</t>
  <t><strong>Reference</strong>: This document</t>
</list></t>

</section>
<section anchor="svcb-svcparamkey-registrations"><name>SVCB SvcParamKey Registrations</name>

<t>IANA is requested to register the following entries in the "Service Binding (SVCB) SvcParamKey" registry defined in <xref target="RFC9460"/>:</t>

<texttable>
      <ttcol align='left'>SvcParamKey</ttcol>
      <ttcol align='left'>Meaning</ttcol>
      <ttcol align='left'>Format Reference</ttcol>
      <ttcol align='left'>Change Controller</ttcol>
      <c>atp-capabilities</c>
      <c>Comma-separated list of ATP protocol capabilities</c>
      <c>Section 2.3 of this document</c>
      <c>IETF</c>
      <c>atp-auth</c>
      <c>Comma-separated list of supported authentication mechanisms</c>
      <c>Section 2.1 of this document</c>
      <c>IETF</c>
</texttable>

<section anchor="atp-capabilities-values"><name>ATP Capabilities Values</name>

<t>The initial registered values for the <spanx style="verb">atp-capabilities</spanx> parameter are:</t>

<texttable>
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Description</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>message</c>
      <c>Asynchronous messaging</c>
      <c>Section 7.1</c>
      <c>request</c>
      <c>Synchronous request/response</c>
      <c>Section 7.2</c>
      <c>event</c>
      <c>Event/subscription streaming</c>
      <c>Section 7.3</c>
</texttable>

<t>Additional values may be registered via Specification Required <xref target="RFC8126"/> policy.</t>

</section>
<section anchor="atp-auth-values"><name>ATP Auth Values</name>

<t>The initial registered values for the <spanx style="verb">atp-auth</spanx> parameter are:</t>

<texttable>
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Description</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>ats</c>
      <c>ATS policy validation</c>
      <c>Section 4.2</c>
      <c>atk</c>
      <c>ATK signature verification</c>
      <c>Section 4.3</c>
      <c>mtls</c>
      <c>Mutual TLS authentication</c>
      <c>Section 4.1</c>
</texttable>

</section>
</section>
<section anchor="atp-message-type-registry"><name>ATP Message Type Registry</name>

<t>IANA is requested to create the "ATP Message Types" registry with the following initial values:</t>

<texttable>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Description</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>message</c>
      <c>Asynchronous message</c>
      <c>Section 6.2.1</c>
      <c>request</c>
      <c>Synchronous request</c>
      <c>Section 6.2.2</c>
      <c>response</c>
      <c>Synchronous response</c>
      <c>Section 6.2.2</c>
      <c>event</c>
      <c>Event notification</c>
      <c>Section 6.2.3</c>
</texttable>

<t>New message types are registered via Specification Required <xref target="RFC8126"/> policy.</t>

</section>
</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">



<reference anchor="RFC5890">
  <front>
    <title>Internationalized Domain Names for Applications (IDNA): Definitions and Document Framework</title>
    <author fullname="J. Klensin" initials="J." surname="Klensin"/>
    <date month="August" year="2010"/>
    <abstract>
      <t>This document is one of a collection that, together, describe the protocol and usage context for a revision of Internationalized Domain Names for Applications (IDNA), superseding the earlier version. It describes the document collection and provides definitions and other material that are common to the set. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5890"/>
  <seriesInfo name="DOI" value="10.17487/RFC5890"/>
</reference>
<reference anchor="RFC8259">
  <front>
    <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
    <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
    <date month="December" year="2017"/>
    <abstract>
      <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
      <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="90"/>
  <seriesInfo name="RFC" value="8259"/>
  <seriesInfo name="DOI" value="10.17487/RFC8259"/>
</reference>
<reference anchor="RFC8446">
  <front>
    <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
    <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
    <date month="August" year="2018"/>
    <abstract>
      <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
      <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8446"/>
  <seriesInfo name="DOI" value="10.17487/RFC8446"/>
</reference>
<reference anchor="RFC8785">
  <front>
    <title>JSON Canonicalization Scheme (JCS)</title>
    <author fullname="A. Rundgren" initials="A." surname="Rundgren"/>
    <author fullname="B. Jordan" initials="B." surname="Jordan"/>
    <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
    <date month="June" year="2020"/>
    <abstract>
      <t>Cryptographic operations like hashing and signing need the data to be expressed in an invariant format so that the operations are reliably repeatable. One way to address this is to create a canonical representation of the data. Canonicalization also permits data to be exchanged in its original form on the "wire" while cryptographic operations performed on the canonicalized counterpart of the data in the producer and consumer endpoints generate consistent results.</t>
      <t>This document describes the JSON Canonicalization Scheme (JCS). This specification defines how to create a canonical representation of JSON data by building on the strict serialization methods for JSON primitives defined by ECMAScript, constraining JSON data to the Internet JSON (I-JSON) subset, and by using deterministic property sorting.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8785"/>
  <seriesInfo name="DOI" value="10.17487/RFC8785"/>
</reference>
<reference anchor="RFC8949">
  <front>
    <title>Concise Binary Object Representation (CBOR)</title>
    <author fullname="C. Bormann" initials="C." surname="Bormann"/>
    <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
    <date month="December" year="2020"/>
    <abstract>
      <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
      <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="94"/>
  <seriesInfo name="RFC" value="8949"/>
  <seriesInfo name="DOI" value="10.17487/RFC8949"/>
</reference>
<reference anchor="RFC9000">
  <front>
    <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
    <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
    <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
    <date month="May" year="2021"/>
    <abstract>
      <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9000"/>
  <seriesInfo name="DOI" value="10.17487/RFC9000"/>
</reference>
<reference anchor="RFC9110">
  <front>
    <title>HTTP Semantics</title>
    <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
    <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
    <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
    <date month="June" year="2022"/>
    <abstract>
      <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
      <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="97"/>
  <seriesInfo name="RFC" value="9110"/>
  <seriesInfo name="DOI" value="10.17487/RFC9110"/>
</reference>
<reference anchor="RFC9460">
  <front>
    <title>Service Binding and Parameter Specification via the DNS (SVCB and HTTPS Resource Records)</title>
    <author fullname="B. Schwartz" initials="B." surname="Schwartz"/>
    <author fullname="M. Bishop" initials="M." surname="Bishop"/>
    <author fullname="E. Nygren" initials="E." surname="Nygren"/>
    <date month="November" year="2023"/>
    <abstract>
      <t>This document specifies the "SVCB" ("Service Binding") and "HTTPS" DNS resource record (RR) types to facilitate the lookup of information needed to make connections to network services, such as for HTTP origins. SVCB records allow a service to be provided from multiple alternative endpoints, each with associated parameters (such as transport protocol configuration), and are extensible to support future uses (such as keys for encrypting the TLS ClientHello). They also enable aliasing of apex domains, which is not possible with CNAME. The HTTPS RR is a variation of SVCB for use with HTTP (see RFC 9110, "HTTP Semantics"). By providing more information to the client before it attempts to establish a connection, these records offer potential benefits to both performance and privacy.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9460"/>
  <seriesInfo name="DOI" value="10.17487/RFC9460"/>
</reference>
<reference anchor="RFC2119">
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname="S. Bradner" initials="S." surname="Bradner"/>
    <date month="March" year="1997"/>
    <abstract>
      <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="2119"/>
  <seriesInfo name="DOI" value="10.17487/RFC2119"/>
</reference>
<reference anchor="RFC8174">
  <front>
    <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <date month="May" year="2017"/>
    <abstract>
      <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="8174"/>
  <seriesInfo name="DOI" value="10.17487/RFC8174"/>
</reference>



    </references>

    <references title='Informative References' anchor="sec-informative-references">



<reference anchor="RFC1034">
  <front>
    <title>Domain names - concepts and facilities</title>
    <author fullname="P. Mockapetris" initials="P." surname="Mockapetris"/>
    <date month="November" year="1987"/>
    <abstract>
      <t>This RFC is the revised basic definition of The Domain Name System. It obsoletes RFC-882. This memo describes the domain style names and their used for host address look up and electronic mail forwarding. It discusses the clients and servers in the domain name system and the protocol used between them.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="13"/>
  <seriesInfo name="RFC" value="1034"/>
  <seriesInfo name="DOI" value="10.17487/RFC1034"/>
</reference>
<reference anchor="RFC1035">
  <front>
    <title>Domain names - implementation and specification</title>
    <author fullname="P. Mockapetris" initials="P." surname="Mockapetris"/>
    <date month="November" year="1987"/>
    <abstract>
      <t>This RFC is the revised specification of the protocol and format used in the implementation of the Domain Name System. It obsoletes RFC-883. This memo documents the details of the domain name client - server communication.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="13"/>
  <seriesInfo name="RFC" value="1035"/>
  <seriesInfo name="DOI" value="10.17487/RFC1035"/>
</reference>
<reference anchor="RFC4033">
  <front>
    <title>DNS Security Introduction and Requirements</title>
    <author fullname="R. Arends" initials="R." surname="Arends"/>
    <author fullname="R. Austein" initials="R." surname="Austein"/>
    <author fullname="M. Larson" initials="M." surname="Larson"/>
    <author fullname="D. Massey" initials="D." surname="Massey"/>
    <author fullname="S. Rose" initials="S." surname="Rose"/>
    <date month="March" year="2005"/>
    <abstract>
      <t>The Domain Name System Security Extensions (DNSSEC) add data origin authentication and data integrity to the Domain Name System. This document introduces these extensions and describes their capabilities and limitations. This document also discusses the services that the DNS security extensions do and do not provide. Last, this document describes the interrelationships between the documents that collectively describe DNSSEC. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="4033"/>
  <seriesInfo name="DOI" value="10.17487/RFC4033"/>
</reference>
<reference anchor="RFC6698">
  <front>
    <title>The DNS-Based Authentication of Named Entities (DANE) Transport Layer Security (TLS) Protocol: TLSA</title>
    <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
    <author fullname="J. Schlyter" initials="J." surname="Schlyter"/>
    <date month="August" year="2012"/>
    <abstract>
      <t>Encrypted communication on the Internet often uses Transport Layer Security (TLS), which depends on third parties to certify the keys used. This document improves on that situation by enabling the administrators of domain names to specify the keys used in that domain's TLS servers. This requires matching improvements in TLS client software, but no change in TLS server software. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6698"/>
  <seriesInfo name="DOI" value="10.17487/RFC6698"/>
</reference>
<reference anchor="RFC8126">
  <front>
    <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
    <author fullname="M. Cotton" initials="M." surname="Cotton"/>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <author fullname="T. Narten" initials="T." surname="Narten"/>
    <date month="June" year="2017"/>
    <abstract>
      <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
      <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
      <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="26"/>
  <seriesInfo name="RFC" value="8126"/>
  <seriesInfo name="DOI" value="10.17487/RFC8126"/>
</reference>
<reference anchor="RFC8305">
  <front>
    <title>Happy Eyeballs Version 2: Better Connectivity Using Concurrency</title>
    <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
    <author fullname="T. Pauly" initials="T." surname="Pauly"/>
    <date month="December" year="2017"/>
    <abstract>
      <t>Many communication protocols operating over the modern Internet use hostnames. These often resolve to multiple IP addresses, each of which may have different performance and connectivity characteristics. Since specific addresses or address families (IPv4 or IPv6) may be blocked, broken, or sub-optimal on a network, clients that attempt multiple connections in parallel have a chance of establishing a connection more quickly. This document specifies requirements for algorithms that reduce this user-visible delay and provides an example algorithm, referred to as "Happy Eyeballs". This document obsoletes the original algorithm description in RFC 6555.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8305"/>
  <seriesInfo name="DOI" value="10.17487/RFC8305"/>
</reference>



    </references>

</references>


<?line 1546?>

<section anchor="example-message-flows"><name>Example Message Flows</name>

<section anchor="sending-an-atp-message"><name>Sending an ATP Message</name>

<figure title="Sending an ATP Message: DNS discovery, TLS handshake, and message submission flow" anchor="fig-sending-message"><artwork type="ascii-art"><![CDATA[
Client                      DNS                   Server
  |                          |                      |
  |---- SVCB Query --------->|                      |
  |                          |                      |
  |<----- SVCB Response -----|                      |
  |     _atp.example.com     |                      |
  |    agent.example.com:7443|                      |
  |                          |                      |
  |---- A/AAAA Query ------->|                      |
  |                          |                      |
  |<------- IP Address ------|                      |
  |         192.0.2.1        |                      |
  |                          |                      |
  |==========================|======================|
  |                                                 |
  |<-------------------TLS Handshake--------------->|
  |                                                 |
  |--- POST /.well-known/atp/v1/message ----------->|
  |   Content-Type: application/atp+json            |
  |   {                                             |
  |     "from": "a1@sender.example",                |
  |     "to": "a2@example.com",                     |
  |     "type": "message",                          |
  |     "payload": {...},                           |
  |     "signature": {...}                          |
  |   }                                             |
  |                                                 |
  |<---------------------- 202 Accepted ------------|
  |                                                 |
]]></artwork></figure>

</section>
<section anchor="requestresponse-flow"><name>Request/Response Flow</name>

<t>The request/response flow demonstrates synchronous RPC-style interaction between agents. The Client Agent connects to its local ATP Server (Server A), which enforces policy and transfers the request to the destination ATP Server (Server B), which delivers it to the Service Agent. The response follows the reverse path.</t>

<figure title="Request/Response Flow: DNS discovery, TLS handshake, request submission, server transfer, and response return" anchor="fig-request-response-flow"><artwork type="ascii-art"><![CDATA[
Client                  DNS                  ATP           ATP        Service
 Agent                   |                 Server A      Server B      Agent
  |                      |                    |             |             |
  |-- SVCB Query --------|                    |             |             |
  |                      |                    |             |             |
  |<- SVCB Response -----|                    |             |             |
  | _atp.service.example |                    |             |             |
  | service.example:7443 |                    |             |             |
  |                      |                    |             |             |
  |-- A/AAAA Query ------>                    |             |             |
  |                      |                    |             |             |
  |<- IP Address ---------                    |             |             |
  |    198.51.100.1      |                    |             |             |
  |                      |                    |             |             |
  |======================|====================|=============|=============|
  |                                           |             |             |
  |<-------------TLS Handshake--------------->|             |             |
  |                                           |             |             |
  |-- POST /.well-known/atp/v1/message ------>|             |             |
  |   Content-Type: application/atp+json      |             |             |
  |   {                                       |             |             |
  |     "from": "client@example.com",         |             |             |
  |     "to": "service@service.example",      |             |             |
  |     "timestamp": 1710000000,              |             |             |
  |     "nonce": "req-67890-fghij",           |             |             |
  |     "type": "request",                    |             |             |
  |     "payload": {                          |             |             |
  |       "action": "get_weather",            |             |             |
  |       "params": {"location": "New York"}  |             |             |
  |     },                                    |             |             |
  |     "signature": {...}                    |             |             |
  |   }                                       |             |             |
  |                                           |             |             |
  |                                           |-[Transfer]->|             |
  |                                           |             |             |
  |                                           |             |-[Request]-->|
  |                                           |             |             |
  |                                           |             |<-[Response]-|
  |                                           |<-[Transfer]-|             |
  |                                           |             |             |
  |<- 202 Accept/Response --------------------|             |             |
  |   {                                       |             |             |
  |     "from": "service@service.example",    |             |             |
  |     "to": "client@example.com",           |             |             |
  |     "timestamp": 1710000002,              |             |             |
  |     "nonce": "resp-67890-klmno",          |             |             |
  |     "type": "response",                   |             |             |
  |     "in_reply_to": "req-67890-fghij",     |             |             |
  |     "payload": {                          |             |             |
  |       "status": "success",                |             |             |
  |       "data": {"temperature": 22}         |             |             |
  |     },                                    |             |             |
  |     "signature": {...}                    |             |             |
  |   }                                       |             |             |
  |                                           |             |             |
]]></artwork></figure>

</section>
<section anchor="event-subscription-flow"><name>Event Subscription Flow</name>

<t>The event subscription flow demonstrates the publish-subscribe pattern with streaming notifications. The flow has two phases:</t>

<t><strong>Phase 1 - Subscribe</strong>: The Subscriber sends a subscription request to its local ATP Server (Server A), which transfers it to the Publisher's ATP Server (Server B), which delivers it to the Publisher.</t>

<t><strong>Phase 2 - Event Notification</strong>: When an event occurs, the Publisher sends the event to Server B, which transfers it to Server A, which delivers the notification to the Subscriber.</t>

<figure title="Event Subscription Flow: Two-phase publish-subscribe with Subscribe Phase and Event Notification Phase" anchor="fig-event-subscription-flow"><artwork type="ascii-art"><![CDATA[
Subscriber              DNS                  ATP           ATP      Publisher
 Agent                   |                 Server A      Server B      Agent
  |                      |                    |             |             |
  |-- SVCB Query --------|                    |             |             |
  |                      |                    |             |             |
  |<- SVCB Response -----|                    |             |             |
  |_atp.publisher.example|                    |             |             |
  |publisher.example:7443|                    |             |             |
  |                      |                    |             |             |
  |-- A/AAAA Query ------>                    |             |             |
  |                      |                    |             |             |
  |<- IP Address ---------                    |             |             |
  |    203.0.113.1       |                    |             |             |
  |                      |                    |             |             |
  |======================|====================|=============|=============|
  |<-------------TLS Handshake--------------->|             |             |
  |============================ Subscribe Phase ==========================|
  |                                           |             |             |
  |-- POST /.well-known/atp/v1/message ------>|             |             |
  |   Content-Type: application/atp+json      |             |             |
  |   {                                       |             |             |
  |     "from": "subscriber@example.com",     |             |             |
  |     "to": "publisher@publisher.example",  |             |             |
  |     "timestamp": 1710000000,              |             |             |
  |     "nonce": "sub-11111-pqrst",           |             |             |
  |     "type": "request",                    |             |             |
  |     "payload": {                          |             |             |
  |       "action": "subscribe",              |             |             |
  |       "event_types": ["price_update"],    |             |             |
  |       "subscription_id": "sub-12345"      |             |             |
  |     },                                    |             |             |
  |     "signature": {...}                    |             |             |
  |   }                                       |             |             |
  |                                           |-[Transfer]->|             |
  |                                           |             |-[Subscribe]>|
  |<-- 202 Accepted --------------------------|             |             |
  |                                           |             |             |
  |======================== Event Notification Phase =====================|
  |                                           |             |             |
  |                                           |             |<---[Event]--|
  |                                           |<-[Transfer]-|             |
  |<--[Event Delivery]------------------------|             |             |
  |   {                                       |             |             |
  |     "from": "publisher@publisher.example",|             |             |
  |     "to": "subscriber@example.com",       |             |             |
  |     "timestamp": 1710000010,              |             |             |
  |     "nonce": "evt-22222-uvwxy",           |             |             |
  |     "type": "event",                      |             |             |
  |     "payload": {                          |             |             |
  |       "event_type": "price_update",       |             |             |
  |       "subscription_id": "sub-12345",     |             |             |
  |       "data": {"symbol": "AAPL",          |             |             |
  |              "price": 150}                |             |             |
  |     },                                    |             |             |
  |     "signature": {...}                    |             |             |
  |   }                                       |             |             |
]]></artwork></figure>

</section>
</section>
<section numbered="false" anchor="acknowledgments"><name>Acknowledgments</name>

<t>This protocol draws inspiration from multiple existing protocols and standards:</t>

<t><list style="symbols">
  <t>DNS SVCB <xref target="RFC9460"/> - for service discovery</t>
  <t>HTTP/2 <xref target="RFC9110"/> - for multiplexing</t>
  <t>QUIC <xref target="RFC9000"/> - for low-latency transport</t>
  <t>TLS <xref target="RFC8446"/> - for secure transport</t>
</list></t>

</section>


  </back>

<!-- ##markdown-source:
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
1zcf/rqBvxU5pjgeduDD07VuVUP30mro9oabDx5sPOY+rXYg0B7JKH6dy7RI
758m0un06eud/PLZjz/vvtz86bJ3tdebvfq3Bz/9+uLbl3ePHvz0748Gu4//
evnz/X/bHB88qj3yqq1j9vdYvb/+7Wann87CyaHBZnB107kVZYzz2t9/tv/3
3sGz8/e/jt6nPzy+XH/W+3Hvea/3Zqf346Mevt85fwm/7/W63a6byt7Ork7m
sLP54GE4kyk8ufEeDYYwk8lTJAkJtLvYwGk9f3+5d/nzi5f5v+//9vd1GP7n
ffl9t/fjYPfH896enw4eK97GaoDKV9CK4QoDldj7p0/cJWP9BI7sxS3b6YIg
FIEKKsokAGIhjhOOA6o0Gn9OxHcKZ4atEA4cDHAmuPnYNUM8044217ceBa9Z
zBTsE9g4ZFZ4DjQnOlo+1nZ02Ln/aAsTEMFvDzY31ngXpk+fIEfxcAuvFm/D
M/5bzcEe6dkt4daTp08Gc2CmOmgsFs1YlqE/3SCiFxzI5trRlGlaTZsanXrQ
IYebZDCFORfuD5g2/CFjj54+GcXlqAMnxiO/iNHZ3J+fc4JEtoxuOxGoU+AO
YYjTxgnIO/L2iWFs+e3BxqYOWz59IgZeUWqJYwZl4LBjekBkY0wQaz4nD3VA
jLCt0vHs6RPUGpTc7XP8NehvUQAMNRKApBAmBGMqDX2Rv4fvVjWzkZoTHXw5
ilUKMHx4+iT5ME2LK38f+O9gIm8n6QeSFdrE4pIPLMZ3n6H2m9c6k3RU1aEN
LbuVLk84QpdnbpmC7mWjgk61aseOSu97R/0wbqVO0E3YCq5KSVvbpDzTTx38
SSi/ZwoQxETFp9rClzfWFi6jzBpO8hMzY0kFgwrORJaMHLf0bPxNibmoonzP
Cgqmzzp7jfeIJzlVDxSdH2W188/C7dPYOazKUgxFARvqw90UJHGeP5yfzBEG
C7DH4n0cDY5yUUKeO5LseT95ZrVJV7lAWgARboBVgpfrKRc0PgOht/xSBeXL
d8f7Pxz0TkB0bxapjxcPngwDXabfE/Jyy1HWn0+GXz7Dl3s/v4N7/u75m7cH
ldkd5HZYGk9SEjFE0wQdWkDYfe0c7eg5swRH+azigaTeCMQaUmNizNl/TAzU
wlRyKtDH69EwviqFf5RuE60i0Grto937PWNP9PEESEpLdAMEdCOD9ROHV9Ox
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
rrLjI9YT8+H/ATuRcGgVNwEA

-->

</rfc>

