<?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.35 (Ruby 3.2.11) -->


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

<!ENTITY RFC2119 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC3986 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3986.xml">
<!ENTITY RFC8174 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC8259 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8259.xml">
<!ENTITY RFC9110 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9110.xml">
<!ENTITY RFC9176 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9176.xml">
]>


<rfc ipr="noModificationTrust200902" docName="draft-payment-discovery-00" category="info" consensus="true" submissionType="IETF">
  <front>
    <title abbrev="Payment Discovery">Service Discovery for HTTP Payment Authentication</title>

    <author initials="B." surname="Ryan" fullname="Brendan Ryan">
      <organization>Tempo Labs</organization>
      <address>
        <email>brendan@tempo.xyz</email>
      </address>
    </author>
    <author initials="J." surname="Moxey" fullname="Jake Moxey">
      <organization>Tempo Labs</organization>
      <address>
        <email>jake@tempo.xyz</email>
      </address>
    </author>
    <author initials="R." surname="Sproule" fullname="Ryan Sproule">
      <organization>Merit Systems</organization>
      <address>
        <email>ryan@merit.systems</email>
      </address>
    </author>
    <author initials="S." surname="Ragsdale" fullname="Sam Ragsdale">
      <organization>Merit Systems</organization>
      <address>
        <email>sam@merit.systems</email>
      </address>
    </author>

    <date year="2026" month="April" day="17"/>

    
    
    

    <abstract>


<?line 79?>

<t>This document defines a service discovery framework for
the "Payment" HTTP authentication scheme. Services
publish an OpenAPI document annotated with payment
extensions that describe pricing, payment methods, and
intent types. The OpenAPI document serves as the
canonical machine-readable contract, providing both
payment metadata and input schemas so that agents can
discover and invoke endpoints. The runtime 402
challenge remains authoritative for all payment
parameters.</t>



    </abstract>



  </front>

  <middle>


<?line 92?>

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

<t>The "Payment" HTTP authentication scheme
<xref target="I-D.httpauth-payment"/> enables servers to require
payment for resource access using the HTTP 402 status
code. While the 402 challenge provides all information
needed to complete a single paid exchange, clients and
agents benefit from discovering payment-enabled services
before initiating requests.</t>

<t>This specification defines a discovery mechanism based
on OpenAPI <xref target="OPENAPI"/>. Services publish an OpenAPI
document annotated with two extensions:</t>

<t><list style="symbols">
  <t><spanx style="verb">x-service-info</spanx>: Top-level service metadata
including categories and documentation links.</t>
  <t><spanx style="verb">x-payment-info</spanx>: Per-operation payment requirements
including intent type, payment method, amount, and
currency.</t>
</list></t>

<t>OpenAPI provides both payment metadata and input
schemas, enabling agents to discover and invoke
endpoints without additional documentation.</t>

<t>Discovery is <bcp14>OPTIONAL</bcp14>. Servers <bcp14>MAY</bcp14> implement this
mechanism to improve client experience. Clients <bcp14>MUST
NOT</bcp14> require discovery to function; the 402 challenge in
<xref target="I-D.httpauth-payment"/> is always authoritative.</t>

</section>
<section anchor="requirements-language"><name>Requirements Language</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?>

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

<dl>
  <dt>Service</dt>
  <dd>
    <t>An HTTP origin that accepts payment via the "Payment"
authentication scheme.</t>
  </dd>
  <dt>Payable Operation</dt>
  <dd>
    <t>An API operation that requires payment, indicated by
a 402 response and <spanx style="verb">x-payment-info</spanx> extension in the
OpenAPI document.</t>
  </dd>
</dl>

</section>
<section anchor="openapi-discovery"><name>OpenAPI Discovery</name>

<t>Services that support discovery <bcp14>MUST</bcp14> publish an OpenAPI
3.x <xref target="OPENAPI"/> document that describes their API
surface, including payment-enabled operations.</t>

<section anchor="document-location"><name>Document Location</name>

<t>The OpenAPI document <bcp14>MUST</bcp14> be accessible at:</t>

<figure><artwork><![CDATA[
GET /openapi.json
]]></artwork></figure>

<t>The document <bcp14>MUST</bcp14> be served over HTTPS with
<spanx style="verb">Content-Type: application/json</spanx>.</t>

</section>
<section anchor="required-top-level-fields"><name>Required Top-Level Fields</name>

<t>The OpenAPI document <bcp14>MUST</bcp14> include the following
standard fields:</t>

<t><list style="symbols">
  <t><spanx style="verb">openapi</spanx>: The OpenAPI version (e.g., <spanx style="verb">"3.1.0"</spanx>).</t>
  <t><spanx style="verb">info.title</spanx>: The service name.</t>
  <t><spanx style="verb">info.version</spanx>: The API version.</t>
  <t><spanx style="verb">paths</spanx>: At least one path with operations.</t>
</list></t>

</section>
<section anchor="x-service-info"><name>Service Extension: x-service-info</name>

<t>The OpenAPI document <bcp14>MAY</bcp14> include a top-level
<spanx style="verb">x-service-info</spanx> extension object to provide service
metadata that is not part of the standard OpenAPI
specification.</t>

<texttable>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Required</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c><spanx style="verb">categories</spanx></c>
      <c>array</c>
      <c><bcp14>OPTIONAL</bcp14></c>
      <c>Service categories (see <xref target="categories"/>).</c>
      <c><spanx style="verb">docs</spanx></c>
      <c>object</c>
      <c><bcp14>OPTIONAL</bcp14></c>
      <c>Documentation and reference links (see <xref target="docs-schema"/>).</c>
</texttable>

<section anchor="categories"><name>Categories</name>

<t>The <spanx style="verb">categories</spanx> field, when present, <bcp14>MUST</bcp14> be an array
of strings. Category values are free-form; services
<bcp14>MAY</bcp14> use any string value. The following values are
<bcp14>RECOMMENDED</bcp14> as a starting vocabulary:</t>

<figure><artwork><![CDATA[
communication, compute, data, developer-tools,
media, search, social, storage, travel
]]></artwork></figure>

<t>Category values <bcp14>SHOULD</bcp14> be lowercase, use hyphens for
multi-word values, and be concise. Registries <bcp14>SHOULD</bcp14>
limit services to no more than 5 categories. Clients
<bcp14>SHOULD</bcp14> ignore category values they do not recognize.</t>

</section>
<section anchor="docs-schema"><name>Documentation Links</name>

<t>The <spanx style="verb">docs</spanx> field, when present, <bcp14>MUST</bcp14> be a JSON object
with the following optional fields:</t>

<texttable>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c><spanx style="verb">apiReference</spanx></c>
      <c>string (URI)</c>
      <c>API reference documentation URL.</c>
      <c><spanx style="verb">homepage</spanx></c>
      <c>string (URI)</c>
      <c>Main documentation or landing page.</c>
      <c><spanx style="verb">llms</spanx></c>
      <c>string (URI)</c>
      <c>LLM-friendly documentation URL (see <xref target="LLMS-TXT"/>).</c>
</texttable>

<t>All URI values <bcp14>MUST</bcp14> conform to <xref target="RFC3986"/>.</t>

</section>
</section>
<section anchor="x-payment-info"><name>Payment Extension: x-payment-info</name>

<t>Each payable operation <bcp14>MUST</bcp14> include the
<spanx style="verb">x-payment-info</spanx> extension object on the operation.
This extension describes the payment requirements for
the operation.</t>

<texttable>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Required</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c><spanx style="verb">intent</spanx></c>
      <c>string</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c><spanx style="verb">"charge"</spanx> (per-request) or <spanx style="verb">"session"</spanx> (pay-as-you-go).</c>
      <c><spanx style="verb">method</spanx></c>
      <c>string</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>Payment method identifier (e.g., <spanx style="verb">"tempo"</spanx>, <spanx style="verb">"stripe"</spanx>).</c>
      <c><spanx style="verb">amount</spanx></c>
      <c>string or null</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>Cost in base currency units. <spanx style="verb">null</spanx> indicates dynamic pricing.</c>
      <c><spanx style="verb">currency</spanx></c>
      <c>string</c>
      <c><bcp14>OPTIONAL</bcp14></c>
      <c>Currency identifier. For blockchain methods: token contract address. For fiat: ISO 4217 code.</c>
      <c><spanx style="verb">description</spanx></c>
      <c>string</c>
      <c><bcp14>OPTIONAL</bcp14></c>
      <c>Human-readable pricing note.</c>
</texttable>

<t>The <spanx style="verb">amount</spanx> field is <bcp14>REQUIRED</bcp14> but its value <bcp14>MAY</bcp14> be
<spanx style="verb">null</spanx> to support endpoints where pricing depends on
request parameters (e.g., variable-cost operations).
When non-null, the value <bcp14>MUST</bcp14> be a string of ASCII
digits (<spanx style="verb">0</spanx>-<spanx style="verb">9</spanx>) representing a non-negative integer in
the smallest denomination of the currency (e.g., cents
for USD, wei for ETH). Leading zeros <bcp14>MUST NOT</bcp14> be used
except for the value <spanx style="verb">"0"</spanx>. This format is consistent
with the <spanx style="verb">amount</spanx> field defined in the request object
of <xref target="I-D.httpauth-payment"/>.</t>

</section>
<section anchor="response-declaration"><name>402 Response Declaration</name>

<t>Each payable operation <bcp14>MUST</bcp14> include a <spanx style="verb">402</spanx> response
in its <spanx style="verb">responses</spanx> object:</t>

<figure><sourcecode type="yaml"><![CDATA[
responses:
  "402":
    description: "Payment Required"
]]></sourcecode></figure>

<t>This signals to clients that the operation may return
a 402 challenge requiring payment.</t>

</section>
<section anchor="input-schema"><name>Input Schema</name>

<t>Each operation <bcp14>SHOULD</bcp14> define its input schema using
the standard OpenAPI <spanx style="verb">requestBody</spanx> field:</t>

<figure><sourcecode type="yaml"><![CDATA[
requestBody:
  content:
    application/json:
      schema:
        type: object
        properties:
          prompt:
            type: string
        required:
          - prompt
]]></sourcecode></figure>

<t>Input schemas enable agents to construct valid requests
without additional documentation. Operations that omit
input schemas <bcp14>MAY</bcp14> be marked as "schema-missing" by
discovery clients and registries.</t>

</section>
<section anchor="caching"><name>Caching</name>

<t>Servers <bcp14>SHOULD</bcp14> include <spanx style="verb">Cache-Control</spanx> headers. A
maximum age of 5 minutes is <bcp14>RECOMMENDED</bcp14> for services
whose capabilities change infrequently:</t>

<figure><sourcecode type="http"><![CDATA[
Cache-Control: max-age=300
]]></sourcecode></figure>

<t>Clients <bcp14>SHOULD</bcp14> respect cache headers and refetch when
capabilities may have changed.</t>

</section>
<section anchor="example-openapi-document"><name>Example OpenAPI Document</name>

<figure><sourcecode type="json"><![CDATA[
{
  "openapi": "3.1.0",
  "info": {
    "title": "Example AI API",
    "version": "1.0.0"
  },
  "x-service-info": {
    "categories": ["compute"],
    "docs": {
      "homepage": "https://api.example.com/docs",
      "llms": "https://api.example.com/llms.txt",
      "apiReference":
        "https://api.example.com/reference"
    }
  },
  "paths": {
    "/v1/chat/completions": {
      "post": {
        "summary": "Chat completions",
        "x-payment-info": {
          "intent": "session",
          "method": "tempo",
          "amount": "500",
          "currency":
            "0x20c00000000000000000000000000000000000"
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "model": { "type": "string" },
                  "messages": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "role": {
                          "type": "string"
                        },
                        "content": {
                          "type": "string"
                        }
                      },
                      "required": ["role",
                        "content"]
                    }
                  }
                },
                "required": ["model", "messages"]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response"
          },
          "402": {
            "description": "Payment Required"
          }
        }
      }
    },
    "/v1/embeddings": {
      "post": {
        "summary": "Text embeddings",
        "x-payment-info": {
          "intent": "charge",
          "method": "tempo",
          "amount": null,
          "currency":
            "0x20c00000000000000000000000000000000000",
          "description": "Price varies by model
            and token count."
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "model": { "type": "string" },
                  "input": { "type": "string" }
                },
                "required": ["model", "input"]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response"
          },
          "402": {
            "description": "Payment Required"
          }
        }
      }
    }
  }
}
]]></sourcecode></figure>

</section>
</section>
<section anchor="relationship-to-the-402-challenge"><name>Relationship to the 402 Challenge</name>

<t>Discovery metadata is advisory. The 402 challenge
defined in <xref target="I-D.httpauth-payment"/> is always
authoritative.</t>

<t>Specifically:</t>

<t><list style="symbols">
  <t>If discovery indicates a payment method that differs
from the 402 challenge, the 402 challenge takes
precedence.</t>
  <t>If discovery indicates an amount that differs from
the 402 challenge, the 402 challenge takes
precedence.</t>
  <t>Clients <bcp14>MUST NOT</bcp14> cache discovery data as a
substitute for processing 402 challenges.</t>
</list></t>

<t>Discovery exists to help clients and agents find and
evaluate services before making requests, not to
replace the runtime payment negotiation defined by the
core protocol.</t>

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

<section anchor="discovery-spoofing"><name>Discovery Spoofing</name>

<t>Discovery information is not cryptographically
authenticated beyond HTTPS transport security. Clients
<bcp14>MUST NOT</bcp14> rely on discovery metadata for security
decisions. The 402 challenge is authoritative for all
payment parameters.</t>

</section>
<section anchor="information-disclosure"><name>Information Disclosure</name>

<t>OpenAPI documents reveal payment capabilities, endpoint
structure, input schemas, and pricing to
unauthenticated clients. Service operators <bcp14>SHOULD</bcp14>
consider whether this disclosure is acceptable for
their use case.</t>

</section>
<section anchor="cross-origin-requests"><name>Cross-Origin Requests</name>

<t>Browser-based clients may need to access discovery
endpoints cross-origin. Servers that intend to support
browser-based clients <bcp14>SHOULD</bcp14> include appropriate CORS
headers on OpenAPI document responses.</t>

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

<t>This document has no IANA actions.</t>

</section>


  </middle>

  <back>


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

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

&RFC2119;
&RFC3986;
&RFC8174;
&RFC8259;
&RFC9110;
<reference anchor="OPENAPI" target="https://spec.openapis.org/oas/v3.1.0">
  <front>
    <title>OpenAPI Specification v3.1.0</title>
    <author >
      <organization>OpenAPI Initiative</organization>
    </author>
    <date year="2021"/>
  </front>
</reference>
<reference anchor="I-D.httpauth-payment" target="https://datatracker.ietf.org/doc/draft-ryan-httpauth-payment/">
  <front>
    <title>The 'Payment' HTTP Authentication Scheme</title>
    <author initials="B." surname="Ryan" fullname="Brendan Ryan">
      <organization></organization>
    </author>
    <date year="2026" month="January"/>
  </front>
</reference>


    </references>

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

&RFC9176;
<reference anchor="A2A" target="https://github.com/a2aproject/A2A">
  <front>
    <title>Agent2Agent Protocol Specification</title>
    <author >
      <organization>Google</organization>
    </author>
    <date year="2025"/>
  </front>
</reference>
<reference anchor="MCP-REGISTRY" target="https://github.com/modelcontextprotocol/registry">
  <front>
    <title>Model Context Protocol Registry</title>
    <author >
      <organization>Anthropic</organization>
    </author>
    <date year="2025"/>
  </front>
</reference>
<reference anchor="X402" target="https://github.com/coinbase/x402">
  <front>
    <title>x402: HTTP Payment Protocol</title>
    <author >
      <organization>Coinbase</organization>
    </author>
    <date year="2025"/>
  </front>
</reference>
<reference anchor="ERC-8004" target="https://eips.ethereum.org/EIPS/eip-8004">
  <front>
    <title>ERC-8004: Trustless Agents Registry</title>
    <author >
      <organization></organization>
    </author>
    <date year="2025"/>
  </front>
</reference>
<reference anchor="LLMS-TXT" target="https://llmstxt.org/">
  <front>
    <title>llms.txt - A Proposal to Standardise LLM-Friendly Documentation</title>
    <author >
      <organization></organization>
    </author>
    <date year="2024"/>
  </front>
</reference>


    </references>

</references>


<?line 461?>

<section anchor="registry-and-aggregator-guidance"><name>Registry and Aggregator Guidance</name>

<t>This appendix provides informative guidance for
building registries and aggregators on top of the
discovery mechanism defined in this specification.</t>

<section anchor="registries"><name>Registries</name>

<t>A registry is a server that discovers, validates, and
indexes payment-enabled services into a searchable
catalog. Registries <bcp14>MAY</bcp14> discover services by:</t>

<t><list style="symbols">
  <t>Crawling OpenAPI documents from submitted domains.</t>
  <t>Accepting domain submissions from service operators.</t>
  <t>Consuming snapshots from other registries.</t>
</list></t>

<t>If a domain serves a valid OpenAPI document with
<spanx style="verb">x-payment-info</spanx> extensions over HTTPS, that
constitutes sufficient proof of domain ownership.</t>

<t>Registries <bcp14>SHOULD</bcp14> re-crawl services periodically (at
least every 24 hours is <bcp14>RECOMMENDED</bcp14>). If the discovery
document becomes invalid or unreachable, the registry
<bcp14>SHOULD</bcp14> delist the service after 7 or more consecutive
failures.</t>

<t>Registries <bcp14>SHOULD</bcp14> enforce crawl constraints: HTTPS
only, 10-second timeouts, 64 KB size limits, and
rate limiting.</t>

</section>
<section anchor="aggregators"><name>Aggregators</name>

<t>Aggregators consume registry data and layer on their
own views: curating (filtering by quality or vertical),
enriching (adding trust scores, uptime, volume data),
reshaping (exposing agent-native formats such as
llms.txt <xref target="LLMS-TXT"/>), or federating (merging data
from multiple registries).</t>

<t>Aggregators are not required to use the registry API
schema. The only universal contract is the OpenAPI
discovery mechanism defined in <xref target="openapi-discovery"/>.</t>

</section>
</section>
<section anchor="comparison-with-prior-art"><name>Comparison with Prior Art</name>

<section anchor="core-resource-directory-rfc-9176"><name>CoRE Resource Directory (RFC 9176)</name>

<t>The CoRE Resource Directory <xref target="RFC9176"/> defines push
registration with leased lifetimes for constrained IoT
devices. This specification uses crawl-based
registration, which better suits HTTP services.</t>

</section>
<section anchor="agent2agent-protocol-a2a"><name>Agent2Agent Protocol (A2A)</name>

<t>The A2A Protocol <xref target="A2A"/> uses
<spanx style="verb">/.well-known/agent-card.json</spanx> as a self-describing
service endpoint. This specification uses OpenAPI as
the discovery mechanism, providing richer schema
information.</t>

</section>
<section anchor="mcp-registry"><name>MCP Registry</name>

<t>The MCP Registry <xref target="MCP-REGISTRY"/> implements a
three-layer architecture with reverse-DNS namespacing
and SHA-256 package integrity. This specification
uses domain authority rather than OAuth-based
registration.</t>

</section>
<section anchor="x402-protocol"><name>x402 Protocol</name>

<t>The x402 protocol <xref target="X402"/> uses HTTP 402 responses as
the primary payment signal. This specification
separates discovery (pre-request) from the payment
challenge (at-request).</t>

</section>
<section anchor="openapi-first-discovery-x402scan"><name>OpenAPI-First Discovery (x402scan)</name>

<t>The x402scan project uses OpenAPI documents as the
canonical discovery signal, with <spanx style="verb">/.well-known/x402</spanx>
as a fallback. This specification adopts the same
OpenAPI-first approach, using <spanx style="verb">x-payment-info</spanx> as
the payment extension with fields consistent with the
Payment authentication scheme.</t>

</section>
<section anchor="erc-8004-trustless-agents"><name>ERC-8004 (Trustless Agents)</name>

<t>ERC-8004 <xref target="ERC-8004"/> defines on-chain identity
registries and domain verification. This specification
operates entirely off-chain but is compatible with
future on-chain anchoring.</t>

</section>
</section>
<section anchor="json-schema-for-x-payment-info"><name>JSON Schema for x-payment-info</name>

<t>The following JSON Schema defines the structure of
the <spanx style="verb">x-payment-info</spanx> OpenAPI extension. Tooling
authors <bcp14>SHOULD</bcp14> validate payment extensions against
this schema.</t>

<figure><sourcecode type="json"><![CDATA[
{
  "$schema":
    "https://json-schema.org/draft/2020-12/schema",
  "title": "x-payment-info",
  "type": "object",
  "required": ["intent", "method", "amount"],
  "properties": {
    "intent": {
      "type": "string",
      "enum": ["charge", "session"]
    },
    "method": {
      "type": "string"
    },
    "amount": {
      "oneOf": [
        { "type": "null" },
        {
          "type": "string",
          "pattern": "^(0|[1-9][0-9]*)$"
        }
      ]
    },
    "currency": {
      "type": "string"
    },
    "description": {
      "type": "string"
    }
  }
}
]]></sourcecode></figure>

</section>
<section anchor="json-schema-for-x-service-info"><name>JSON Schema for x-service-info</name>

<t>The following JSON Schema defines the structure of
the <spanx style="verb">x-service-info</spanx> OpenAPI extension.</t>

<figure><sourcecode type="json"><![CDATA[
{
  "$schema":
    "https://json-schema.org/draft/2020-12/schema",
  "title": "x-service-info",
  "type": "object",
  "properties": {
    "categories": {
      "type": "array",
      "items": { "type": "string" }
    },
    "docs": {
      "type": "object",
      "properties": {
        "apiReference": {
          "type": "string",
          "format": "uri"
        },
        "homepage": {
          "type": "string",
          "format": "uri"
        },
        "llms": {
          "type": "string",
          "format": "uri"
        }
      }
    }
  }
}
]]></sourcecode></figure>

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

<t>The authors thank the contributors to the MPP
Registry reference implementation and the x402scan
project, whose operational experience informed this
specification.</t>

</section>


  </back>

<!-- ##markdown-source:
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
W8LUFGQLzdt2rmWDJQy+orfWUflfT4mveT5EAAA=

-->

</rfc>

