<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.39 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-meunier-webbotauth-registry-02" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.33.0 -->
  <front>
    <title abbrev="Registry and Signature Agent card for Web bot auth">Registry and Signature Agent card for Web bot auth</title>
    <seriesInfo name="Internet-Draft" value="draft-meunier-webbotauth-registry-02"/>
    <author fullname="Maxime Guerreiro">
      <organization>Cloudflare</organization>
      <address>
        <email>maxime.guerreiro@gmail.com</email>
      </address>
    </author>
    <author fullname="Ulas Kirazci">
      <organization>Amazon</organization>
      <address>
        <email>ulaskira@amazon.com</email>
      </address>
    </author>
    <author fullname="Thibault Meunier">
      <organization>Cloudflare</organization>
      <address>
        <email>ot-ietf@thibault.uk</email>
      </address>
    </author>
    <date year="2026" month="May" day="26"/>
    <area>Web and Internet Transport</area>
    <workgroup>Web Bot Auth</workgroup>
    <keyword>not-yet</keyword>
    <abstract>
      <?line 67?>

<t>This document describes a JSON based format for clients using <xref target="DIRECTORY"/>
to advertise information about themselves.</t>
      <t>This document describes a JSON-based "Signature Agent Card" format for signature agent using <xref target="DIRECTORY"/> to advertise metadata about themselve. This includes identity, purpose, rate expectations,
and cryptographic keys. It also establishes an IANA registry for Signature Agent
Card parameters, enabling extensible and interoperable discovery of agent
information.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://thibmeu.github.io/http-message-signatures-directory/draft-meunier-webbotauth-registry.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-meunier-webbotauth-registry/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Web Bot Auth Working Group mailing list (<eref target="mailto:web-bot-auth@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/web-bot-auth/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/web-bot-auth/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/thibmeu/http-message-signatures-directory"/>.</t>
    </note>
  </front>
  <middle>
    <?line 77?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Signature Agents are entities that originate or forward signed HTTP requests on behalf
of users or services. They include bots developers, platforms providers,
and other intermediaries using <xref target="DIRECTORY"/>. These agents often
need to identify themselves, and establish
trust with origin servers.</t>
      <t>Today, the mechanisms for doing so are inconsistent: some rely on User-Agent
strings (e.g. <tt>MyCompanyBot/1.0</tt>), others on IP address lists hosted on file servers (e.g. <tt>https://curated-bots.com/ips.json</tt>), and still others on out-of-band
definitions (e.g. documentation on docs.example.com/mybot). This diversity makes it difficult for operators and origin servers
to reliably discover and share a Signature Agent’s purpose, contact information, or rate
expectations.
Existing discovery mechanisms, such as <xref target="OPENID-CONNECT-DISCOVERY"/>, do not have the necessary
granularity, and pursue different goals.</t>
      <t>This document introduces a JSON-based "Signature Agent Card" format for Signature
Agents, to be published in registries and discovered by servers. It also
creates a new IANA registry of "Signature Agent Card Parameters" to ensure
extensibility and consistency of future attributes.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</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="signature-agent-card">
      <name>Signature Agent Card</name>
      <t>Signature-Agent header is defined in <xref section="4.1" sectionFormat="of" target="DIRECTORY"/>.
This section describes Signature Agent Card, a JSON object containing parameters describing the Signature Agent.</t>
      <artwork><![CDATA[
{
  "client_name": "Example Bot",
  "client_uri": "https://example.com/bot/about.html",
  "logo_uri": "https://example.com/",
  "contacts": ["mailto:bot-support@example.com"],
  "expected-user-agent": "Mozilla/5.0 ExampleBot",
  "rfc9309-product-token": "ExampleBot",
  "rfc9309-compliance": ["User-Agent", "Allow", "Disallow", "Content-Usage"],
  "trigger": "fetcher",
  "purpose": "tdm",
  "targeted-content": "Cat pictures",
  "rate-control": "429",
  "rate-expectation": "avg=10rps;max=100rps",
  "known-urls": ["/", "/robots.txt", "*.png"],
  "jwks_uri": "https://example.com/.well-known/http-message-signatures-directory",
  "ips_uri": "https://example.com/ips.json",
  "keys": [{
    "kty": "OKP",
    "crv": "Ed25519",
    "kid": "NFcWBst6DXG-N35nHdzMrioWntdzNZghQSkjHNMMSjw",
    "x": "JrQLj5P_89iXES9-vFgrIy29clF9CC_oPPsw3c5D0bs",
    "use": "sig",
    "nbf": 1712793600,
    "exp": 1715385600
  }]
}
]]></artwork>
      <t>Unless otherwise specified, all parameters in this document are <bcp14>OPTIONAL</bcp14>.
There <bcp14>MUST</bcp14> be at least one parameter set.</t>
      <t>Parameters for which the value is unknown <bcp14>MUST</bcp14> be ignored.
All string values are UTF-8.</t>
      <section anchor="signature-agent-parameter-name">
        <name>Client Name</name>
        <t>The <tt>client_name</tt> parameter provides a friendly identifier for the Signature Agent.</t>
        <t>Example</t>
        <ul spacing="normal">
          <li>
            <t><tt>ExampleBot</tt></t>
          </li>
          <li>
            <t><tt>My remote browser company</tt></t>
          </li>
        </ul>
      </section>
      <section anchor="signature-agent-parameter-about">
        <name>Client URI</name>
        <t>The <tt>client_uri</tt> parameter provides inline content or a web page describing the bot: e.g. what does it do, how it handles data it fetches.</t>
        <t>Only http, https or data:text/plain are allowed.</t>
        <t>Example</t>
        <ul spacing="normal">
          <li>
            <t><tt>https://example.com/bot/about.html</tt></t>
          </li>
          <li>
            <t><tt>data:text/plain,The Example bot is about providing an example.</tt></t>
          </li>
        </ul>
      </section>
      <section anchor="signature-agent-parameter-contact">
        <name>Contacts</name>
        <t>The <tt>contacts</tt> parameter provides reliable communication channels in URI forms.
Typically, this is an email address.</t>
        <t>Example</t>
        <ul spacing="normal">
          <li>
            <t><tt>["mailto:bot-support@example.com"]</tt></t>
          </li>
          <li>
            <t><tt>["https://example.com/contact"]</tt></t>
          </li>
        </ul>
      </section>
      <section anchor="signature-agent-parameter-logo">
        <name>Logo URI</name>
        <t>The <tt>logo_uri</tt> parameter provides an image reference for visual identification.</t>
        <t>TODO: Recommendation for size and format, if there is a clear consensus or reference we can point to.</t>
        <t>Example</t>
        <ul spacing="normal">
          <li>
            <t><tt>data:image/svg+xml;base64,deadbeef</tt></t>
          </li>
          <li>
            <t><tt>https://example.com/logo.png</tt></t>
          </li>
        </ul>
      </section>
      <section anchor="signature-agent-parameter-user-agent">
        <name>Expected user agent</name>
        <t>The <tt>expected-user-agent</tt> parameter specifies one or more <tt>User-Agent</tt> strings as defined in <xref section="10.1.5" sectionFormat="of" target="HTTP"/>
or prefix matches. Prefixes <bcp14>MAY</bcp14> use <tt>*</tt> as a wildcard.</t>
        <t>Example</t>
        <ul spacing="normal">
          <li>
            <t><tt>Mozilla/5.0 ExampleBot</tt></t>
          </li>
        </ul>
      </section>
      <section anchor="signature-agent-parameter-robotstxt-token">
        <name>robots.txt product token</name>
        <t>The <tt>rfc9309-product-token</tt> parameter specifies the product token used for
<tt>robots.txt</tt> directives per <xref section="2.2.1" sectionFormat="of" target="ROBOTSTXT"/>.</t>
        <t>Example</t>
        <ul spacing="normal">
          <li>
            <t><tt>ExampleBot</tt></t>
          </li>
        </ul>
      </section>
      <section anchor="signature-agent-parameter-robotstxt-compliance">
        <name>robots.txt compliance</name>
        <t>The <tt>rfc9309-compliance</tt> parameter lists directives from <tt>robots.txt</tt> that the
agent implements.</t>
        <t>Example</t>
        <ul spacing="normal">
          <li>
            <t><tt>["User-Agent", "Disallow"]</tt></t>
          </li>
          <li>
            <t><tt>["User-Agent", "Disallow", "CrawlDelay"]</tt></t>
          </li>
        </ul>
      </section>
      <section anchor="signature-agent-parameter-trigger">
        <name>Trigger</name>
        <t>The <tt>trigger</tt> parameter indicates the operational mode of the agent.</t>
        <t>Valid values:</t>
        <ol spacing="normal" type="1"><li>
            <t><tt>fetcher</tt> - request initiated by the user</t>
          </li>
          <li>
            <t><tt>crawler</tt> - autonomous scanning</t>
          </li>
        </ol>
      </section>
      <section anchor="signature-agent-parameter-purpose">
        <name>Purpose</name>
        <t>The <tt>purpose</tt> parameter describes the intended use of collected data. Values
<bcp14>SHOULD</bcp14> be drawn from a controlled vocabulary, such as <xref target="AIPREF-VOCAB"/>.</t>
        <t>Example</t>
        <ul spacing="normal">
          <li>
            <t><tt>search</tt></t>
          </li>
          <li>
            <t><tt>tdm</tt></t>
          </li>
        </ul>
      </section>
      <section anchor="signature-agent-parameter-targeted-content">
        <name>Targeted content</name>
        <t>The <tt>targeted-content</tt> parameter specifies the type of data the agent seeks.
Its format is arbitrary UTF-8 encoded string.</t>
        <t>Example</t>
        <ul spacing="normal">
          <li>
            <t><tt>SEO analysis</tt></t>
          </li>
          <li>
            <t><tt>Vulnerability scanning</tt></t>
          </li>
          <li>
            <t><tt>Ads verification</tt></t>
          </li>
        </ul>
      </section>
      <section anchor="signature-agent-parameter-rate-control">
        <name>Rate control</name>
        <t>The <tt>rate-control</tt> parameter indicates how origins can influence the agent’s
request rate.</t>
        <t>TODO: specify a format</t>
        <t>Example</t>
        <ul spacing="normal">
          <li>
            <t>CrawlDelay in robots.txt (non-standard)</t>
          </li>
          <li>
            <t>Custom tool</t>
          </li>
          <li>
            <t>429 + <xref target="RATELIMIT-HEADER"/></t>
          </li>
        </ul>
      </section>
      <section anchor="signature-agent-parameter-rate-expectation">
        <name>Rate expectation</name>
        <t>The <tt>rate-expectation</tt> parameter specifies anticipated request volume or
burstiness.</t>
        <t>TODO: consider a format such as <tt>avg=10rps;max=100rps</tt></t>
        <t>Example</t>
        <ul spacing="normal">
          <li>
            <t>500 rps</t>
          </li>
          <li>
            <t>Spikes during reindexing</t>
          </li>
        </ul>
      </section>
      <section anchor="signature-agent-parameter-known-urls">
        <name>Known URLs</name>
        <t>The <tt>known-urls</tt> parameter lists predictable endpoints accessed by the agent.</t>
        <t>These URLs may be absolute URLs like <tt>https://example.com/index.html</tt>.
They could be relative path like <tt>/ads.txt</tt>.
Or they can use <tt>*</tt> as wildcard such as <tt>*.png</tt>.</t>
        <t>Example</t>
        <ul spacing="normal">
          <li>
            <t><tt>["/"]</tt></t>
          </li>
          <li>
            <t><tt>["/ads.txt"]</tt></t>
          </li>
          <li>
            <t><tt>["/favicon.ico"]</tt></t>
          </li>
          <li>
            <t><tt>["/index.html"]</tt></t>
          </li>
        </ul>
      </section>
      <section anchor="signature-agent-parameter-jwks-uri">
        <name>JWKS URI</name>
        <t>The <tt>jwks_uri</tt> parameter provides the URL of the signature agent's
JWKS keys as defined in <xref section="5" sectionFormat="of" target="JWK"/>. This covers
HTTP Message Signatures Directory as defined in <xref target="DIRECTORY"/>.</t>
        <t>When present, this parameter separates key material discovery from metadata
discovery. Clients that need key material <bcp14>SHOULD</bcp14> fetch the directory at the
given URL rather than relying on the <tt>keys</tt> parameter. This separation allows
registry operators to host metadata and key material on different endpoints,
supporting deployment scenarios where the registry endpoint itself contains
signature agent card metadata but the key directory is hosted elsewhere.</t>
        <t>If both <tt>jwks_uri</tt> and <tt>keys</tt> are present, the
<tt>jwks_uri</tt> takes precedence for key discovery.</t>
        <t>The URI scheme <bcp14>MUST</bcp14> be <tt>https</tt>.</t>
        <t>Example</t>
        <ul spacing="normal">
          <li>
            <t><tt>https://example.com/.well-known/http-message-signatures-directory</tt></t>
          </li>
        </ul>
      </section>
      <section anchor="signature-agent-parameter-ips-uri">
        <name>IP Address List URI</name>
        <t>The <tt>ips_uri</tt> parameter provides the URL of the signature agent's
IP address list as defined in <xref target="JAFAR"/>.</t>
        <t>The URI scheme <bcp14>MUST</bcp14> be <tt>https</tt>.</t>
        <t>Example</t>
        <ul spacing="normal">
          <li>
            <t><tt>https://example.com/ips.json</tt></t>
          </li>
        </ul>
      </section>
      <section anchor="signature-agent-parameter-keys">
        <name>Keys</name>
        <t>The <tt>keys</tt> parameter contains a JWKS as defined in <xref section="5" sectionFormat="of" target="JWK"/>.</t>
        <t>If <tt>keys</tt> is present, it is <bcp14>RECOMMENDED</bcp14> that the card is signed using <xref target="HTTP-MESSAGE-SIGNATURES"/>.
<tt>Content-Digest</tt> header <bcp14>MUST</bcp14> be included in the covered components.</t>
        <t>TODO: describe signature, CWS keys.</t>
        <t>Example</t>
        <ul spacing="normal">
          <li>
            <t>https://example.com/.well-known/http-message-signatures-directory</t>
          </li>
          <li>
            <t>JWKS-directory</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="discovery">
      <name>Discovery</name>
      <t>A registry is a list of URLs, each refering to a signature agent card.</t>
      <t>The URI scheme <bcp14>MUST</bcp14> be one of:</t>
      <ul spacing="normal">
        <li>
          <t>https (<bcp14>RECOMMENDED</bcp14>): Points to an HTTPS resource serving a signature agent card</t>
        </li>
        <li>
          <t>http: Points to an HTTP resource serving a signature agent card</t>
        </li>
        <li>
          <t>data: Contains an inline signature agent card</t>
        </li>
      </ul>
      <t>Example</t>
      <sourcecode type="txt"><![CDATA[
# An example list of bots
https://bot1.example.com/.well-known/http-message-signatures-directory
https://crawler2.example.com/.well-known/http-message-signatures-directory

# Now the list of platforms
https://zerotrust-gateway.example.com/v1/signature-agent-card

# Below is an inlined card with the data URL scheme
data:application/json,{"client_name":"Inline Bot","jwks_uri":"https://inline.example.com/.well-known/http-message-signatures-directory"}
]]></sourcecode>
      <section anchor="formal-syntax">
        <name>Formal Syntax</name>
        <t>Below is an Augmented Backus-Naur Form (ABNF) description, as described in <xref target="ABNF"/>.</t>
        <t>The below definition imports <tt>http-URI</tt> and <tt>https-URI</tt> from <xref target="HTTP"/>, and
<tt>dataurl</tt> from <xref target="DATAURL"/>.</t>
        <artwork><![CDATA[
registry = *(cardendpointline / emptyline)
cardendpointline = (
    http-URI /       ; As defined in Section 4.2.1 of RFC 9110
    https-URI /      ; As defined in Section 4.2.2 of RFC 9110
    dataurl          ; As defined in Section 3 of RFC 2397
) EOL


comment = "#" *(UTF8-char-noctl / WS / "#")
emptyline = EOL
EOL = *WS [comment] NL ; end-of-line may have
                       ; optional trailing comment
NL = %x0D / %x0A / %x0D.0A
WS = %x20 / %x09

; UTF8 derived from RFC 3629, but excluding control characters

UTF8-char-noctl = UTF8-1-noctl / UTF8-2 / UTF8-3 / UTF8-4
UTF8-1-noctl = %x21 / %x22 / %x24-7F ; excluding control, space, "#"
UTF8-2 = %xC2-DF UTF8-tail
UTF8-3 = %xE0 %xA0-BF UTF8-tail / %xE1-EC 2UTF8-tail /
         %xED %x80-9F UTF8-tail / %xEE-EF 2UTF8-tail
UTF8-4 = %xF0 %x90-BF 2UTF8-tail / %xF1-F3 3UTF8-tail /
         %xF4 %x80-8F 2UTF8-tail

UTF8-tail = %x80-BF
]]></artwork>
      </section>
      <section anchor="out-of-band-communication-between-client-and-origin">
        <name>Out-of-band communication between client and origin</name>
        <t>A signature agent <bcp14>MAY</bcp14> submit their signature agent card to an origin, or the
origin <bcp14>MAY</bcp14> manually add them to their local registry.</t>
      </section>
      <section anchor="registry-endpoint">
        <name>Registry Endpoint</name>
        <t>A registry <bcp14>MAY</bcp14> be provided via a GitHub repository, a public file server, or a
dedicated endpoint.</t>
        <t>The registry <bcp14>SHOULD</bcp14> be served over HTTPS.</t>
        <t>A client application <bcp14>SHOULD</bcp14> validate the registry format and reject malformed
entries.</t>
        <section anchor="registry-authentication">
          <name>Authentication</name>
          <t>A registry endpoint <bcp14>MAY</bcp14> require authentication to restrict access to authorized
clients. This allows a registry operator to expose registries without revealing
their contents publicly.</t>
          <t>No specific authentication mechanism is mandated. Implementations <bcp14>MAY</bcp14> use
pre-shared keys as mentioned in <xref target="PSK-TLS"/>, bearer tokens as defined in <xref target="OAUTH-BEARER"/>, or HTTP Message
Signatures as defined in <xref target="HTTP-MESSAGE-SIGNATURES"/>. HTTP Message Signatures
are <bcp14>RECOMMENDED</bcp14> when key rotation without out-of-band coordination is desired.</t>
        </section>
        <section anchor="registry-conditional-requests">
          <name>Efficient Polling with Conditional Requests</name>
          <t>Registry servers <bcp14>SHOULD</bcp14> include <tt>ETag</tt> and <tt>Last-Modified</tt> response header
fields as defined in <xref section="8.8" sectionFormat="of" target="HTTP"/>.</t>
          <t>Clients <bcp14>SHOULD</bcp14> send <tt>If-None-Match</tt> or <tt>If-Modified-Since</tt> precondition
header fields as defined in <xref section="13.1" sectionFormat="of" target="HTTP"/> on subsequent requests.
A server <bcp14>SHOULD</bcp14> respond with <tt>304 (Not Modified)</tt> when the registry has not
changed, avoiding redundant data transfer.</t>
        </section>
        <section anchor="registry-caching">
          <name>Caching</name>
          <t>Registry servers <bcp14>SHOULD</bcp14> include a <tt>Cache-Control</tt> response header field as
defined in <xref target="HTTP-CACHE"/> to communicate the intended freshness lifetime of the
registry content. Clients <bcp14>SHOULD</bcp14> respect these cache directives and <bcp14>SHOULD NOT</bcp14>
poll more frequently than indicated.</t>
        </section>
      </section>
      <section anchor="signature-agent-header">
        <name>Signature-Agent header</name>
        <t>Signature Agent Card format defined in <xref target="signature-agent-card"/> extends the
format of <tt>Signature-Agent</tt> header as defined in <xref section="4.1" sectionFormat="of" target="DIRECTORY"/>.</t>
        <t>When used for HTTP Message Signatures, and hosted on a well-known URL, Signature
Agent Card <bcp14>MAY</bcp14> be discovered via a <tt>Signature-Agent</tt> header.</t>
      </section>
      <section anchor="change-notification">
        <name>Change Notification</name>
        <t>Pull-based consumption with conditional requests is sufficient for most
deployments. When lower notification latency is required (e.g., to promptly
act on entry removal), a registry operator <bcp14>MAY</bcp14> implement a push-based change
notification mechanism.</t>
        <section anchor="notification-advertisement">
          <name>Advertising the Notification Endpoint</name>
          <t>A registry operator that supports change notifications <bcp14>SHOULD</bcp14> advertise its
notification endpoint in the registry HTTP response using a <tt>Link</tt> header field
as defined in <xref target="WEB-LINKING"/>:</t>
          <artwork><![CDATA[
Link: <https://registry.example/v1/registry-changes>; rel="registry-changes"
]]></artwork>
          <t>The <tt>registry-changes</tt> link relation identifies an endpoint to which clients
may register callbacks out of band.</t>
          <t>TODO: Register the <tt>registry-changes</tt> link relation with IANA, or replace it
with an extension relation URI.</t>
        </section>
        <section anchor="notification-registration">
          <name>Callback Registration</name>
          <t>Registration of a client callback URL with the registry operator is performed
out of band. No specific registration protocol is defined by this document.
An unsubscribe mechanism <bcp14>SHOULD</bcp14> be considered, and <bcp14>MAY</bcp14> also be out of band.</t>
        </section>
        <section anchor="notification-requests">
          <name>Notification Requests</name>
          <t>When an entry is added to or removed from the registry, the registry operator
<bcp14>MUST</bcp14> send an HTTP request to each registered callback URL.</t>
          <t>The format in <xref target="CDDL"/> is as follows:</t>
          <sourcecode type="cddl"><![CDATA[
Action = "put" / "delete"

Notification = {
  action: Action,
  signature-agent: tstr
}
]]></sourcecode>
          <t>TODO: should we use application/json, a new media-type, permit binary encoding?
TODO: should signature-agent be an array?</t>
          <t><tt>action</tt> denotes the operation performed on the registry:
1. <tt>put</tt> when a new entry has been added,
2. <tt>delete</tt> when an entry has been removed.</t>
          <t>The request <bcp14>MUST</bcp14> use <tt>POST</tt>.
It <bcp14>MUST</bcp14> be signed using <xref target="HTTP-MESSAGE-SIGNATURES"/> with a key present in the
registry operator's existing signature agent card. This is the signature agent
card associated with the registry operator during out-of-band callback
registration.</t>
          <t>The <tt>Content-Type</tt> <bcp14>SHOULD</bcp14> be <tt>application/json</tt>.</t>
          <t>Example notification for an added entry:</t>
          <artwork><![CDATA[
POST /registry-callback HTTP/1.1
Host: origin.example
Content-Type: application/json
Signature-Input: sig1=("@method" "@authority" "@path" "content-digest"); \
  created=1741046400; keyid="NFcWBst6DXG-N35nHdzMrioWntdzNZghQSkjHNMMSjw"
Signature: sig1=:base64signature:
Content-Digest: sha-256=:base64hash:

{
  "action": "put",
  "signature-agent": "https://abc123.registry.example/.well-known/signature-agent-card"
}
]]></artwork>
        </section>
        <section anchor="notification-processing">
          <name>Notification Processing</name>
          <t>Upon receiving a notification, the client <bcp14>MUST</bcp14> verify the HTTP Message
Signature against the registry operator's key, discovered via the registry
operator's signature-agent card. Notifications with missing or invalid
signatures <bcp14>MUST</bcp14> be rejected.</t>
          <t>A notification is advisory only. The registry endpoint remains the authoritative
source of truth. After verifying a <tt>put</tt> notification, clients <bcp14>SHOULD</bcp14> re-fetch
the affected signature agent card to obtain current metadata.</t>
          <t>For <tt>delete</tt> notifications, clients <bcp14>SHOULD</bcp14> confirm the removal by re-fetching
the full registry. This confirmation does not need to happen synchronously with
notification processing.</t>
          <t>Registry operators <bcp14>SHOULD</bcp14> retry delivery of failed notifications with
exponential backoff. Clients that miss notifications will recover on their next
conditional pull from the registry endpoint.</t>
        </section>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Malicious actors may put properties which are not theirs in the registry. If signatures are present, clients <bcp14>MUST</bcp14> verify them.
Clients <bcp14>SHOULD</bcp14> reject cards with invalid signatures.</t>
      <section anchor="registry-integrity">
        <name>Registry Integrity</name>
        <t>When a registry is served over HTTPS, TLS provides channel integrity between
the server and the client. To additionally bind the registry contents to the
registry operator's cryptographic identity, registry servers <bcp14>SHOULD</bcp14> sign their
HTTP responses using <xref target="HTTP-MESSAGE-SIGNATURES"/> with a key present in the
registry operator's own signature agent card. Clients <bcp14>SHOULD</bcp14> verify such
signatures when present.</t>
      </section>
      <section anchor="binding-delegated-keys-to-the-directory-authority">
        <name>Binding Delegated Keys to the Directory Authority</name>
        <t>When a signature agent card delegates key discovery using <tt>jwks_uri</tt>, clients
<bcp14>SHOULD</bcp14> validate the referenced directory response to ensure the authenticity
and integrity of the delegated key material.</t>
        <t>When a directory server provides key material over HTTP or HTTPS, it is
<bcp14>RECOMMENDED</bcp14> that it include one HTTP Message Signature per key in the response,
with each key used to provide one signature. The signature <bcp14>SHOULD</bcp14> cover
<tt>@authority</tt> with the <tt>req</tt> flag set, and <bcp14>SHOULD</bcp14> include the <tt>created</tt>,
<tt>expires</tt>, <tt>keyid</tt>, and <tt>tag</tt> signature parameters. The <tt>tag</tt> value <bcp14>MUST</bcp14> be
<tt>http-message-signatures-directory</tt>.</t>
        <t>Clients <bcp14>SHOULD</bcp14> validate these signatures using the keys provided by the
directory. Clients <bcp14>SHOULD</bcp14> ignore keys from a directory response that do not have
a corresponding valid signature binding the key material to the directory
authority.</t>
      </section>
      <section anchor="private-registries">
        <name>Private Registries</name>
        <t>Registry endpoints that require authentication as described in
<xref target="registry-authentication"/> limit exposure of registry entries to authorized
clients only. Registry operators <bcp14>SHOULD</bcp14> use authenticated endpoints when the
enumeration of their registry entries is sensitive.</t>
      </section>
    </section>
    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <t>TODO</t>
      <section anchor="access-patterns">
        <name>Access Patterns</name>
        <t>Registry servers <bcp14>SHOULD</bcp14> avoid logging personally identifiable information from
client requests. Clients fetching a registry reveal their interest in its
entries; registry servers <bcp14>SHOULD</bcp14> treat access logs as sensitive.</t>
      </section>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <section anchor="registration-template">
        <name>Registration template</name>
        <t>New registrations need to list the following attributes:</t>
        <dl spacing="compact">
          <dt><strong>Parameter Name:</strong></dt>
          <dd>
            <t>The name requested (e.g. "useragent"). This name is
case sensitive.  Names may not match other registered names in a
case-insensitive manner unless the Designated Experts state that
there is a compelling reason to allow an exception</t>
          </dd>
          <dt><strong>Parameter Description:</strong></dt>
          <dd>
            <t>Brief description of the Header Parameter</t>
          </dd>
          <dt><strong>Change Controller:</strong></dt>
          <dd>
            <t>For Standards Track RFCs, list the "IESG".  For others, give the
name of the responsible party.  Other details (e.g., postal
address, email address, home page URI) may also be included.</t>
          </dd>
          <dt><strong>Reference:</strong></dt>
          <dd>
            <t>Where this parameter is defined</t>
          </dd>
          <dt><strong>Notes:</strong></dt>
          <dd>
            <t>Any notes associated with the entry</t>
          </dd>
        </dl>
        <t>New entries in this registry are subject to the Specification Required
registration policy (<xref section="4.6" sectionFormat="comma" target="RFC8126"/>). Designated experts need to
ensure that the token type is defined to be used for both token issuance and
redemption. Additionally, the experts can reject registrations on the basis
that they do not meet the security and privacy requirements defined in TODO.</t>
        <section anchor="initial-registry-content">
          <name>Initial Registry content</name>
          <t>This section registers the Signature Agent Card Parameter names defined
in <xref target="signature-agent-card"/> in this registry.</t>
          <section anchor="client-name-parameter">
            <name>Client Name Parameter</name>
            <dl>
              <dt><strong>Parameter Name:</strong></dt>
              <dd>
                <t>client_name</t>
              </dd>
              <dt><strong>Parameter Description:</strong></dt>
              <dd>
                <t>A friendly name for your signature agent.</t>
              </dd>
              <dt><strong>Change Controller:</strong></dt>
              <dd>
                <t>IETF</t>
              </dd>
              <dt><strong>Reference:</strong></dt>
              <dd>
                <t><xref target="signature-agent-parameter-name"/></t>
              </dd>
              <dt><strong>Notes:</strong></dt>
              <dd>
                <t>N/A</t>
              </dd>
            </dl>
          </section>
          <section anchor="client-uri-parameter">
            <name>Client URI Parameter</name>
            <dl>
              <dt><strong>Parameter Name:</strong></dt>
              <dd>
                <t>client_uri</t>
              </dd>
              <dt><strong>Parameter Description:</strong></dt>
              <dd>
                <t>Describes what the bot does inline with data URI or with an HTTP link to an external resource</t>
              </dd>
              <dt><strong>Change Controller:</strong></dt>
              <dd>
                <t>IETF</t>
              </dd>
              <dt><strong>Reference:</strong></dt>
              <dd>
                <t><xref target="signature-agent-parameter-about"/></t>
              </dd>
              <dt><strong>Notes:</strong></dt>
              <dd>
                <t>N/A</t>
              </dd>
            </dl>
          </section>
          <section anchor="logo-uri-parameter">
            <name>Logo URI Parameter</name>
            <dl>
              <dt><strong>Parameter Name:</strong></dt>
              <dd>
                <t>logo_uri</t>
              </dd>
              <dt><strong>Parameter Description:</strong></dt>
              <dd>
                <t>Image for a quick visual identification</t>
              </dd>
              <dt><strong>Change Controller:</strong></dt>
              <dd>
                <t>IETF</t>
              </dd>
              <dt><strong>Reference:</strong></dt>
              <dd>
                <t><xref target="signature-agent-parameter-logo"/></t>
              </dd>
              <dt><strong>Notes:</strong></dt>
              <dd>
                <t>N/A</t>
              </dd>
            </dl>
          </section>
          <section anchor="contacts-parameter">
            <name>Contacts Parameter</name>
            <dl>
              <dt><strong>Parameter Name:</strong></dt>
              <dd>
                <t>contacts</t>
              </dd>
              <dt><strong>Parameter Description:</strong></dt>
              <dd>
                <t>An array of URI with a reliable communication channel; typically email addresses</t>
              </dd>
              <dt><strong>Change Controller:</strong></dt>
              <dd>
                <t>IETF</t>
              </dd>
              <dt><strong>Reference:</strong></dt>
              <dd>
                <t><xref target="signature-agent-parameter-contact"/></t>
              </dd>
              <dt><strong>Notes:</strong></dt>
              <dd>
                <t>N/A</t>
              </dd>
            </dl>
          </section>
          <section anchor="expected-user-agent-parameter">
            <name>Expected User Agent Parameter</name>
            <dl>
              <dt><strong>Parameter Name:</strong></dt>
              <dd>
                <t>expected-user-agent</t>
              </dd>
              <dt><strong>Parameter Description:</strong></dt>
              <dd>
                <t>String or fragment patterns</t>
              </dd>
              <dt><strong>Change Controller:</strong></dt>
              <dd>
                <t>IETF</t>
              </dd>
              <dt><strong>Reference:</strong></dt>
              <dd>
                <t><xref target="signature-agent-parameter-user-agent"/></t>
              </dd>
              <dt><strong>Notes:</strong></dt>
              <dd>
                <t>N/A</t>
              </dd>
            </dl>
          </section>
          <section anchor="rfc9309-product-token-parameter">
            <name>RFC9309 Product Token Parameter</name>
            <dl>
              <dt><strong>Parameter Name:</strong></dt>
              <dd>
                <t>rfc9309-product-token</t>
              </dd>
              <dt><strong>Parameter Description:</strong></dt>
              <dd>
                <t>Robots.txt product token your signature-agent satisfies.</t>
              </dd>
              <dt><strong>Change Controller:</strong></dt>
              <dd>
                <t>IETF</t>
              </dd>
              <dt><strong>Reference:</strong></dt>
              <dd>
                <t><xref target="signature-agent-parameter-robotstxt-token"/></t>
              </dd>
              <dt><strong>Notes:</strong></dt>
              <dd>
                <t>N/A</t>
              </dd>
            </dl>
          </section>
          <section anchor="rfc9309-compliance-parameter">
            <name>RFC9309 Compliance Parameter</name>
            <dl>
              <dt><strong>Parameter Name:</strong></dt>
              <dd>
                <t>rfc9309-compliance</t>
              </dd>
              <dt><strong>Parameter Description:</strong></dt>
              <dd>
                <t>Does your signature-agent respect robots.txt.</t>
              </dd>
              <dt><strong>Change Controller:</strong></dt>
              <dd>
                <t>IETF</t>
              </dd>
              <dt><strong>Reference:</strong></dt>
              <dd>
                <t><xref target="signature-agent-parameter-robotstxt-compliance"/></t>
              </dd>
              <dt><strong>Notes:</strong></dt>
              <dd>
                <t>N/A</t>
              </dd>
            </dl>
          </section>
          <section anchor="trigger-parameter">
            <name>Trigger Parameter</name>
            <dl>
              <dt><strong>Parameter Name:</strong></dt>
              <dd>
                <t>trigger</t>
              </dd>
              <dt><strong>Parameter Description:</strong></dt>
              <dd>
                <t>Fetcher/Crawler</t>
              </dd>
              <dt><strong>Change Controller:</strong></dt>
              <dd>
                <t>IETF</t>
              </dd>
              <dt><strong>Reference:</strong></dt>
              <dd>
                <t><xref target="signature-agent-parameter-trigger"/></t>
              </dd>
              <dt><strong>Notes:</strong></dt>
              <dd>
                <t>N/A</t>
              </dd>
            </dl>
          </section>
          <section anchor="purpose-parameter">
            <name>Purpose Parameter</name>
            <dl>
              <dt><strong>Parameter Name:</strong></dt>
              <dd>
                <t>purpose</t>
              </dd>
              <dt><strong>Parameter Description:</strong></dt>
              <dd>
                <t>Intended use for the collected data</t>
              </dd>
              <dt><strong>Change Controller:</strong></dt>
              <dd>
                <t>IETF</t>
              </dd>
              <dt><strong>Reference:</strong></dt>
              <dd>
                <t><xref target="signature-agent-parameter-purpose"/></t>
              </dd>
              <dt><strong>Notes:</strong></dt>
              <dd>
                <t>N/A</t>
              </dd>
            </dl>
          </section>
          <section anchor="targeted-content-parameter">
            <name>Targeted Content Parameter</name>
            <dl>
              <dt><strong>Parameter Name:</strong></dt>
              <dd>
                <t>targeted-content</t>
              </dd>
              <dt><strong>Parameter Description:</strong></dt>
              <dd>
                <t>Type of data your agent seeks</t>
              </dd>
              <dt><strong>Change Controller:</strong></dt>
              <dd>
                <t>IETF</t>
              </dd>
              <dt><strong>Reference:</strong></dt>
              <dd>
                <t><xref target="signature-agent-parameter-targeted-content"/></t>
              </dd>
              <dt><strong>Notes:</strong></dt>
              <dd>
                <t>N/A</t>
              </dd>
            </dl>
          </section>
          <section anchor="rate-control-parameter">
            <name>Rate control Parameter</name>
            <dl>
              <dt><strong>Parameter Name:</strong></dt>
              <dd>
                <t>rate-control</t>
              </dd>
              <dt><strong>Parameter Description:</strong></dt>
              <dd>
                <t>How can an origin control your crawl rate</t>
              </dd>
              <dt><strong>Change Controller:</strong></dt>
              <dd>
                <t>IETF</t>
              </dd>
              <dt><strong>Reference:</strong></dt>
              <dd>
                <t><xref target="signature-agent-parameter-rate-control"/></t>
              </dd>
              <dt><strong>Notes:</strong></dt>
              <dd>
                <t>N/A</t>
              </dd>
            </dl>
          </section>
          <section anchor="rate-expectation-parameter">
            <name>Rate expectation Parameter</name>
            <dl>
              <dt><strong>Parameter Name:</strong></dt>
              <dd>
                <t>rate-expectation</t>
              </dd>
              <dt><strong>Parameter Description:</strong></dt>
              <dd>
                <t>Expected traffic and intensity</t>
              </dd>
              <dt><strong>Change Controller:</strong></dt>
              <dd>
                <t>IETF</t>
              </dd>
              <dt><strong>Reference:</strong></dt>
              <dd>
                <t><xref target="signature-agent-parameter-rate-expectation"/></t>
              </dd>
              <dt><strong>Notes:</strong></dt>
              <dd>
                <t>N/A</t>
              </dd>
            </dl>
          </section>
          <section anchor="known-urls-parameter">
            <name>Known URLs Parameter</name>
            <dl>
              <dt><strong>Parameter Name:</strong></dt>
              <dd>
                <t>known-urls</t>
              </dd>
              <dt><strong>Parameter Description:</strong></dt>
              <dd>
                <t>Predictable endpoint accessed</t>
              </dd>
              <dt><strong>Change Controller:</strong></dt>
              <dd>
                <t>IETF</t>
              </dd>
              <dt><strong>Reference:</strong></dt>
              <dd>
                <t><xref target="signature-agent-parameter-known-urls"/></t>
              </dd>
              <dt><strong>Notes:</strong></dt>
              <dd>
                <t>N/A</t>
              </dd>
            </dl>
          </section>
          <section anchor="jwks-uri-parameter">
            <name>JWKS URI Parameter</name>
            <dl>
              <dt><strong>Parameter Name:</strong></dt>
              <dd>
                <t>jwks_uri</t>
              </dd>
              <dt><strong>Parameter Description:</strong></dt>
              <dd>
                <t>URL of the signature agent's key set. This can be an HTTP Message Signatures Directory for key discovery</t>
              </dd>
              <dt><strong>Change Controller:</strong></dt>
              <dd>
                <t>IETF</t>
              </dd>
              <dt><strong>Reference:</strong></dt>
              <dd>
                <t><xref target="signature-agent-parameter-jwks-uri"/></t>
              </dd>
              <dt><strong>Notes:</strong></dt>
              <dd>
                <t>N/A</t>
              </dd>
            </dl>
          </section>
          <section anchor="ip-address-list-uri-parameter">
            <name>IP Address List URI Parameter</name>
            <dl>
              <dt><strong>Parameter Name:</strong></dt>
              <dd>
                <t>ips_uri</t>
              </dd>
              <dt><strong>Parameter Description:</strong></dt>
              <dd>
                <t>URL of the signature agent's IP address list in <xref target="JAFAR"/> format.</t>
              </dd>
              <dt><strong>Change Controller:</strong></dt>
              <dd>
                <t>IETF</t>
              </dd>
              <dt><strong>Reference:</strong></dt>
              <dd>
                <t><xref target="signature-agent-parameter-ips-uri"/></t>
              </dd>
              <dt><strong>Notes:</strong></dt>
              <dd>
                <t>N/A</t>
              </dd>
            </dl>
          </section>
          <section anchor="keys-parameter">
            <name>Keys Parameter</name>
            <dl>
              <dt><strong>Parameter Name:</strong></dt>
              <dd>
                <t>keys</t>
              </dd>
              <dt><strong>Parameter Description:</strong></dt>
              <dd>
                <t>JWKS Endpoint</t>
              </dd>
              <dt><strong>Change Controller:</strong></dt>
              <dd>
                <t>IETF</t>
              </dd>
              <dt><strong>Reference:</strong></dt>
              <dd>
                <t><xref target="signature-agent-parameter-keys"/></t>
              </dd>
              <dt><strong>Notes:</strong></dt>
              <dd>
                <t>N/A</t>
              </dd>
            </dl>
          </section>
        </section>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="ABNF">
          <front>
            <title>Augmented BNF for Syntax Specifications: ABNF</title>
            <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker"/>
            <author fullname="P. Overell" initials="P." surname="Overell"/>
            <date month="January" year="2008"/>
            <abstract>
              <t>Internet technical specifications often need to define a formal syntax. Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications. The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power. The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges. This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="68"/>
          <seriesInfo name="RFC" value="5234"/>
          <seriesInfo name="DOI" value="10.17487/RFC5234"/>
        </reference>
        <reference anchor="AIPREF-VOCAB">
          <front>
            <title>A Vocabulary For Expressing AI Usage Preferences</title>
            <author fullname="Paul Keller" initials="P." surname="Keller">
              <organization>Open Future</organization>
            </author>
            <author fullname="Martin Thomson" initials="M." surname="Thomson">
              <organization>Mozilla</organization>
            </author>
            <date day="27" month="April" year="2026"/>
            <abstract>
              <t>   This document defines a vocabulary for expressing preferences
   regarding how digital assets are used by automated processing
   systems.  This vocabulary allows for the declaration of restrictions
   or permissions for use of digital assets by such systems.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-aipref-vocab-06"/>
        </reference>
        <reference anchor="CDDL">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="DIRECTORY">
          <front>
            <title>HTTP Message Signatures Directory</title>
            <author fullname="Thibault Meunier" initials="T." surname="Meunier">
              <organization>Cloudflare</organization>
            </author>
            <author fullname="Sandor Major" initials="S." surname="Major">
              <organization>Google</organization>
            </author>
            <date day="2" month="March" year="2026"/>
            <abstract>
              <t>   This document describes a method for clients using
   [HTTP-MESSAGE-SIGNATURES] to advertise their signing keys.

   It defines a key directory format based on JWKS as defined in
   Section 5 of [JWK], as well as new HTTP Method Context to allow for
   in-band key discovery.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-meunier-http-message-signatures-directory-05"/>
        </reference>
        <reference anchor="HTTP-MESSAGE-SIGNATURES">
          <front>
            <title>HTTP Message Signatures</title>
            <author fullname="A. Backman" initials="A." role="editor" surname="Backman"/>
            <author fullname="J. Richer" initials="J." role="editor" surname="Richer"/>
            <author fullname="M. Sporny" initials="M." surname="Sporny"/>
            <date month="February" year="2024"/>
            <abstract>
              <t>This document describes a mechanism for creating, encoding, and verifying digital signatures or message authentication codes over components of an HTTP message. This mechanism supports use cases where the full HTTP message may not be known to the signer and where the message may be transformed (e.g., by intermediaries) before reaching the verifier. This document also describes a means for requesting that a signature be applied to a subsequent HTTP message in an ongoing HTTP exchange.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9421"/>
          <seriesInfo name="DOI" value="10.17487/RFC9421"/>
        </reference>
        <reference anchor="HTTP">
          <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="HTTP-CACHE">
          <front>
            <title>HTTP Caching</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 defines HTTP caches and the associated header fields that control cache behavior or indicate cacheable response messages.</t>
              <t>This document obsoletes RFC 7234.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="98"/>
          <seriesInfo name="RFC" value="9111"/>
          <seriesInfo name="DOI" value="10.17487/RFC9111"/>
        </reference>
        <reference anchor="HTTP-MORE-STATUS-CODE">
          <front>
            <title>Additional HTTP Status Codes</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <date month="April" year="2012"/>
            <abstract>
              <t>This document specifies additional HyperText Transfer Protocol (HTTP) status codes for a variety of common situations. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6585"/>
          <seriesInfo name="DOI" value="10.17487/RFC6585"/>
        </reference>
        <reference anchor="JAFAR">
          <front>
            <title>A JSON-Based Format for Publishing IP Ranges of Automated HTTP Clients</title>
            <author fullname="Gary Illyes" initials="G." surname="Illyes">
              <organization>Independent</organization>
            </author>
            <date day="21" month="April" year="2026"/>
            <abstract>
              <t>   This document defines a standardized JSON format for operators of
   automated HTTP clients (e.g., web crawlers, AI bots) to publicly
   disclose their IP address ranges.  A consistent, machine-readable
   format for IP range publication simplifies the task of identifying
   and verifying legitimate automated traffic, thereby decreasing
   maintenance load on website operators while reducing the risk of
   inadvertently blocking beneficial clients.  This specification
   codifies and extends common existing practices to provide a simple
   yet extensible format that accommodates a variety of use cases.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-illyes-webbotauth-jafar-00"/>
        </reference>
        <reference anchor="JWK">
          <front>
            <title>JSON Web Key (JWK)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key. This specification also defines a JWK Set JSON data structure that represents a set of JWKs. Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and IANA registries established by that specification.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7517"/>
          <seriesInfo name="DOI" value="10.17487/RFC7517"/>
        </reference>
        <reference anchor="JWK-OKP">
          <front>
            <title>CFRG Elliptic Curve Diffie-Hellman (ECDH) and Signatures in JSON Object Signing and Encryption (JOSE)</title>
            <author fullname="I. Liusvaara" initials="I." surname="Liusvaara"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document defines how to use the Diffie-Hellman algorithms "X25519" and "X448" as well as the signature algorithms "Ed25519" and "Ed448" from the IRTF CFRG elliptic curves work in JSON Object Signing and Encryption (JOSE).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8037"/>
          <seriesInfo name="DOI" value="10.17487/RFC8037"/>
        </reference>
        <reference anchor="JWK-THUMBPRINT">
          <front>
            <title>JSON Web Key (JWK) Thumbprint</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <date month="September" year="2015"/>
            <abstract>
              <t>This specification defines a method for computing a hash value over a JSON Web Key (JWK). It defines which fields in a JWK are used in the hash computation, the method of creating a canonical form for those fields, and how to convert the resulting Unicode string into a byte sequence to be hashed. The resulting hash value can be used for identifying or selecting the key represented by the JWK that is the subject of the thumbprint.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7638"/>
          <seriesInfo name="DOI" value="10.17487/RFC7638"/>
        </reference>
        <reference anchor="WEB-LINKING">
          <front>
            <title>Web Linking</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <date month="October" year="2017"/>
            <abstract>
              <t>This specification defines a model for the relationships between resources on the Web ("links") and the type of those relationships ("link relation types").</t>
              <t>It also defines the serialisation of such links in HTTP headers with the Link header field.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8288"/>
          <seriesInfo name="DOI" value="10.17487/RFC8288"/>
        </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>
        <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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="CBCP">
          <front>
            <title>Crawler best practices</title>
            <author fullname="Gary Illyes" initials="G." surname="Illyes">
              <organization>Independent</organization>
            </author>
            <author fullname="Mirja Kühlewind" initials="M." surname="Kühlewind">
              <organization>Ericsson</organization>
            </author>
            <author fullname="AJ Kohn" initials="K." surname="Aj">
              <organization>Blind Five Year Old</organization>
            </author>
            <date day="21" month="April" year="2026"/>
            <abstract>
              <t>   This document describes best practices for web crawlers.

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Source for this draft and an issue tracker can be found at
   https://github.com/garyillyes/cbcp.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-illyes-webbotauth-cbcp-00"/>
        </reference>
        <reference anchor="DATAURL">
          <front>
            <title>The "data" URL scheme</title>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <date month="August" year="1998"/>
            <abstract>
              <t>A new URL scheme, "data", is defined. It allows inclusion of small data items as "immediate" data, as if it had been included externally. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2397"/>
          <seriesInfo name="DOI" value="10.17487/RFC2397"/>
        </reference>
        <reference anchor="OAUTH-BEARER">
          <front>
            <title>The OAuth 2.0 Authorization Framework: Bearer Token Usage</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="D. Hardt" initials="D." surname="Hardt"/>
            <date month="October" year="2012"/>
            <abstract>
              <t>This specification describes how to use bearer tokens in HTTP requests to access OAuth 2.0 protected resources. Any party in possession of a bearer token (a "bearer") can use it to get access to the associated resources (without demonstrating possession of a cryptographic key). To prevent misuse, bearer tokens need to be protected from disclosure in storage and in transport. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6750"/>
          <seriesInfo name="DOI" value="10.17487/RFC6750"/>
        </reference>
        <reference anchor="OPENID-CONNECT-DISCOVERY" target="https://openid.net/specs/openid-connect-discovery-1_0.html">
          <front>
            <title>OpenID Connect Discovery 1.0</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="PSK-TLS">
          <front>
            <title>Guidance for External Pre-Shared Key (PSK) Usage in TLS</title>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="J. Hoyland" initials="J." surname="Hoyland"/>
            <author fullname="M. Sethi" initials="M." surname="Sethi"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="July" year="2022"/>
            <abstract>
              <t>This document provides usage guidance for external Pre-Shared Keys (PSKs) in Transport Layer Security (TLS) 1.3 as defined in RFC 8446. It lists TLS security properties provided by PSKs under certain assumptions, then it demonstrates how violations of these assumptions lead to attacks. Advice for applications to help meet these assumptions is provided. This document also discusses PSK use cases and provisioning processes. Finally, it lists the privacy and security properties that are not provided by TLS 1.3 when external PSKs are used.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9257"/>
          <seriesInfo name="DOI" value="10.17487/RFC9257"/>
        </reference>
        <reference anchor="RATELIMIT-HEADER">
          <front>
            <title>RateLimit header fields for HTTP</title>
            <author fullname="Roberto Polli" initials="R." surname="Polli">
              <organization>Team Digitale, Italian Government</organization>
            </author>
            <author fullname="Alex Martínez Ruiz" initials="A. M." surname="Ruiz">
              <organization>Red Hat</organization>
            </author>
            <author fullname="Darrel Miller" initials="D." surname="Miller">
              <organization>Microsoft</organization>
            </author>
            <date day="23" month="May" year="2026"/>
            <abstract>
              <t>   This document defines the RateLimit-Policy and RateLimit HTTP header
   fields for servers to advertise their quota policies and the current
   service limits, thereby allowing clients to avoid being throttled.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-httpapi-ratelimit-headers-11"/>
        </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="ROBOTSTXT">
          <front>
            <title>Robots Exclusion Protocol</title>
            <author fullname="M. Koster" initials="M." surname="Koster"/>
            <author fullname="G. Illyes" initials="G." surname="Illyes"/>
            <author fullname="H. Zeller" initials="H." surname="Zeller"/>
            <author fullname="L. Sassman" initials="L." surname="Sassman"/>
            <date month="September" year="2022"/>
            <abstract>
              <t>This document specifies and extends the "Robots Exclusion Protocol" method originally defined by Martijn Koster in 1994 for service owners to control how content served by their services may be accessed, if at all, by automatic clients known as crawlers. Specifically, it adds definition language for the protocol, instructions for handling errors, and instructions for caching.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9309"/>
          <seriesInfo name="DOI" value="10.17487/RFC9309"/>
        </reference>
        <reference anchor="UTF8">
          <front>
            <title>UTF-8, a transformation format of ISO 10646</title>
            <author fullname="F. Yergeau" initials="F." surname="Yergeau"/>
            <date month="November" year="2003"/>
            <abstract>
              <t>ISO/IEC 10646-1 defines a large character set called the Universal Character Set (UCS) which encompasses most of the world's writing systems. The originally proposed encodings of the UCS, however, were not compatible with many current applications and protocols, and this has led to the development of UTF-8, the object of this memo. UTF-8 has the characteristic of preserving the full US-ASCII range, providing compatibility with file systems, parsers and other software that rely on US-ASCII values but are transparent to other values. This memo obsoletes and replaces RFC 2279.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="63"/>
          <seriesInfo name="RFC" value="3629"/>
          <seriesInfo name="DOI" value="10.17487/RFC3629"/>
        </reference>
      </references>
    </references>
    <?line 916?>

<section anchor="test-vectors">
      <name>Test Vectors</name>
      <t>TODO</t>
    </section>
    <section anchor="implementations">
      <name>Implementations</name>
      <t>TODO</t>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO</t>
      <t>The editor would also like to thank the following individuals (listed in alphabetical order) for feedback, insight, and implementation of this document -</t>
    </section>
    <section numbered="false" anchor="changelog">
      <name>Changelog</name>
      <t>v02</t>
      <ul spacing="normal">
        <li>
          <t>Add <tt>ips_uri</tt> parameter so client can expose IP addresses</t>
        </li>
        <li>
          <t>Add optional <tt>jwks_uri</tt> parameter to separate key material from metadata</t>
        </li>
        <li>
          <t>Fix inline data URL example in registry to use valid signature agent card</t>
        </li>
        <li>
          <t>Rename "Public list" to "Registry Endpoint" for clarity</t>
        </li>
        <li>
          <t>Add authentication guidance for private registry endpoints</t>
        </li>
        <li>
          <t>Add conditional GET (ETag/If-Modified-Since) guidance for efficient polling</t>
        </li>
        <li>
          <t>Add caching guidance referencing HTTP-CACHE</t>
        </li>
        <li>
          <t>Add change notification section: PUT/DELETE webhook signed with HTTP Message Signatures, OOB callback registration, pull as source of truth</t>
        </li>
        <li>
          <t>Expand Security Considerations: registry integrity via HTTP Message Signatures, private registry guidance</t>
        </li>
        <li>
          <t>Expand Privacy Considerations: customer list exposure, access patterns</t>
        </li>
        <li>
          <t>Add normative reference to RFC 8288 (Web Linking)</t>
        </li>
      </ul>
      <t>v01</t>
      <ul spacing="normal">
        <li>
          <t>Add contributors</t>
        </li>
        <li>
          <t>Aligning registry draft with oauth dynamic client registration iana registry</t>
        </li>
        <li>
          <t>Add an about-url field</t>
        </li>
        <li>
          <t>Add ABNF for discovery of signature-agent card (registry)</t>
        </li>
        <li>
          <t>Add precisions about known URLs</t>
        </li>
        <li>
          <t>Add placeholder for image size</t>
        </li>
      </ul>
      <t>v00</t>
      <ul spacing="normal">
        <li>
          <t>Initial draft</t>
        </li>
      </ul>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
