<?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.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-illyes-aipref-jafar-00" category="info" submissionType="independent" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.2 -->
  <front>
    <title abbrev="JAFAR">A JSON-Based Format for Publishing IP Ranges of Automated HTTP Clients</title>
    <seriesInfo name="Internet-Draft" value="draft-illyes-aipref-jafar-00"/>
    <author initials="G." surname="Illyes" fullname="Gary Illyes">
      <organization>Independent</organization>
      <address>
        <email>synack@garyillyes.com</email>
      </address>
    </author>
    <date year="2025" month="September" day="30"/>
    <area>Web and Internet Transport</area>
    <workgroup>AI Preferences</workgroup>
    <keyword>next generation</keyword>
    <keyword>sparkling distributed ledger</keyword>
    <abstract>
      <?line 30?>

<t>This document defines a standardized JSON format for automated HTTP client (e.g., web crawlers, AI bots) operators to disclose their IP address ranges publicly. 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>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    AI Preferences Working Group mailing list (ai-control@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/ai-control/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/garyillyes/jafar"/>.</t>
    </note>
  </front>
  <middle>
    <?line 35?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>This document specifies a data format using the JavaScript Object Notation (JSON). It is intended for the publication of IP address ranges associated with automated HTTP clients.
The scope of this specification is limited to the syntax and semantics of the JSON file itself. It does not specify the transport mechanism for retrieving the file. It also does not prescribe specific policies for how consumers should use the data (e.g., allowlisting, rate-limiting, or monitoring).
This format is intended to complement, not replace, other established methods for crawler verification. Techniques such as forward-confirmed reverse DNS (FCrDNS) lookups remain a vital part of a comprehensive verification strategy. This specification provides a scalable, machine-readable component that can be integrated into a multi-layered verification process.</t>
    </section>
    <section anchor="format">
      <name>Format</name>
      <section anchor="top-level-object-definition">
        <name>Top-Level Object Definition</name>
        <t>An IP range publication file <bcp14>MUST</bcp14> be a single JSON object. The text encoding of the file <bcp14>MUST</bcp14> be UTF-8. This top-level object serves as the root container for essential metadata and the list of IP prefixes.</t>
        <t>The top-level object contains the fields defined in Table 1.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Field Name</th>
              <th align="left">Type</th>
              <th align="left">Requirement</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">formatVersion</td>
              <td align="left">String</td>
              <td align="left">
                <bcp14>MUST</bcp14></td>
              <td align="left">The version of this specification that the file conforms to, represented as a string in "major.minor" format (e.g., "1.0"). Consumers <bcp14>MUST</bcp14> use this to handle potential future breaking changes. See Section 3.2 for processing rules.</td>
            </tr>
            <tr>
              <td align="left">synctoken</td>
              <td align="left">String</td>
              <td align="left">
                <bcp14>MUST</bcp14></td>
              <td align="left">An opaque synchronization token that changes whenever there is a change to any metadata associated with one or more prefixes.</td>
            </tr>
            <tr>
              <td align="left">creationTime</td>
              <td align="left">String</td>
              <td align="left">
                <bcp14>MUST</bcp14></td>
              <td align="left">An ISO 8601 timestamp in the "Z" timezone (UTC) indicating when the file was generated (e.g., "2025-08-15T14:30:00Z").</td>
            </tr>
            <tr>
              <td align="left">notes</td>
              <td align="left">String</td>
              <td align="left">
                <bcp14>OPTIONAL</bcp14></td>
              <td align="left">A human-readable string containing any relevant notes, disclaimers, or comments from the publisher. This can be used to provide context that is not captured by the structured data.</td>
            </tr>
            <tr>
              <td align="left">prefixes</td>
              <td align="left">Array</td>
              <td align="left">
                <bcp14>MUST</bcp14></td>
              <td align="left">An array of Prefix Objects, as defined in Section 2.3. Each object in the array describes an IPv4 or IPv6 address range. This array <bcp14>MAY</bcp14> be empty if the publisher currently has no active IP ranges to declare.</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="the-prefixes-array">
        <name>The prefixes Array</name>
        <t>The prefixes member of the top-level object <bcp14>MUST</bcp14> contain an array of JSON objects. Each of these objects is a Prefix Object, as defined in Section 2.3.</t>
        <t>To simplify implementation for consumers, there <bcp14>MUST</bcp14> be a single, unified array for both IPv4 and IPv6 prefixes.</t>
      </section>
      <section anchor="the-prefix-object">
        <name>The Prefix Object</name>
        <t>Each object within the prefixes array represents a single IP address range and its associated metadata.</t>
        <t>A Prefix Object <bcp14>MUST</bcp14> contain exactly one of either the ipv4Prefix field or the ipv6Prefix field. An object containing both or neither of these fields is invalid and <bcp14>MUST</bcp14> be ignored by consumers. The fields are defined in Table 2.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Field Name</th>
              <th align="left">Type</th>
              <th align="left">Requirement</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">ipv4Prefix</td>
              <td align="left">String</td>
              <td align="left">CONDITIONAL</td>
              <td align="left">The IPv4 address range in Classless Inter-Domain Routing (CIDR) notation (e.g., "66.249.64.0/20"). This field <bcp14>MUST</bcp14> be present if the ipv6Prefix field is absent.</td>
            </tr>
            <tr>
              <td align="left">ipv6Prefix</td>
              <td align="left">String</td>
              <td align="left">CONDITIONAL</td>
              <td align="left">The IPv6 address range in CIDR notation (e.g., "2001:4860:4000::/36"). This field <bcp14>MUST</bcp14> be present if the ipv4Prefix field is absent.</td>
            </tr>
            <tr>
              <td align="left">service</td>
              <td align="left">String</td>
              <td align="left">
                <bcp14>OPTIONAL</bcp14></td>
              <td align="left">A publisher-defined, case-sensitive string that identifies the specific service, bot, or purpose associated with this prefix. Examples could include "Bingbot", "AdsBot-Google". This allows consumers to apply more granular policies.</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="processing-and-consumption-rules">
      <name>Processing and Consumption Rules</name>
      <section anchor="fetching-and-caching">
        <name>Fetching and Caching</name>
        <t>Consumers <bcp14>SHOULD</bcp14> fetch the IP range publication file from a stable URL provided by the publisher in a machine readable format. The file location <bcp14>MUST</bcp14> be disclosed by the publisher of the file in the page that describes the crawler.</t>
        <t>Publishers <bcp14>SHOULD</bcp14> update the file when there's any change to the prefixes or every 24 hours, even if the only update is to <tt>creationTime</tt>. Consumers <bcp14>SHOULD</bcp14> implement a polling mechanism to check for updates at a reasonable interval, such as once every 24 hours. Consumers <bcp14>MUST NOT</bcp14> poll more frequently than once per hour unless explicitly permitted by the publisher's documentation or HTTP caching headers.</t>
        <t>To minimize server load for the publisher and reduce unnecessary bandwidth usage for the consumer, consumers <bcp14>MUST</bcp14> respect standard HTTP caching headers that may be present in the response, such as Cache-Control, ETag, and Last-Modified. Publishers <bcp14>SHOULD</bcp14> provide these headers to facilitate efficient caching.</t>
      </section>
      <section anchor="handling-format-versioning">
        <name>Handling Format Versioning</name>
        <t>To ensure long-term stability and allow for future evolution of this specification, consumers <bcp14>MUST</bcp14> inspect the formatVersion field in the top-level object of the file. The version is expressed as "major.minor".</t>
        <ul spacing="normal">
          <li>
            <t>Major Version Changes: A change in the major version number (e.g., from "1.0" to "2.0") indicates a non-backwards compatible change to the specification. If a consumer encounters a file with a major version number greater than the major version it is programmed to handle, the consumer <bcp14>MUST NOT</bcp14> attempt to parse the file. It <bcp14>SHOULD</bcp14> treat this situation as an error and <bcp14>MAY</bcp14> continue to use its last known valid list until it can be updated to support the new version. This prevents the misinterpretation of data from a significantly altered schema.</t>
          </li>
          <li>
            <t>Minor Version Changes: A change in the minor version number (e.g., from "1.0" to "1.1") indicates the addition of new features or fields that are backward-compatible. For example, a new <bcp14>OPTIONAL</bcp14> field might be added to the Prefix Object. A consumer programmed to handle version "1.0" <bcp14>MUST</bcp14> be able to correctly parse a file with version "1.1". The minor version number increases numerically independently of the major version number, for instance: 1.9 -&gt; 1.10 -&gt; 1.11. The consumer <bcp14>MUST</bcp14> ignore any unrecognized fields or properties within the JSON objects.</t>
          </li>
        </ul>
      </section>
      <section anchor="prefix-aggregation-and-specificity">
        <name>Prefix Aggregation and Specificity</name>
        <t>A publication file <bcp14>MAY</bcp14> contain overlapping IP address ranges. For instance, a publisher might list a broad range like 198.51.100.0/22 with a generic service tag, and also list a more specific range within it, such as 198.51.100.0/24, with a more specific service tag.</t>
        <t>When a consumer evaluates a specific IP address against the list, it <bcp14>MAY</bcp14> match multiple Prefix Objects. In such cases, the consumer's logic <bcp14>SHOULD</bcp14> use the data from the Prefix Object with the most specific CIDR range (i.e., the one with the largest prefix length) for that IP address.</t>
      </section>
    </section>
    <section anchor="use-cases-and-examples">
      <name>Use Cases and Examples</name>
      <section anchor="example-1-basic-publication">
        <name>Example 1: Basic Publication</name>
        <t>This example demonstrates a minimal, valid file for a publisher with a single type of automated client. It uses only the required fields, making it simple to generate and consume.</t>
        <t><tt>
{
  "formatVersion": "1.0",
  "creationTime": "2025-08-15T14:30:00Z",
  "prefixes": [
    {
      "ipv4Prefix": "66.249.64.0/20"
    },
    {
      "ipv4Prefix": "34.64.0.0/12"
    },
    {
      "ipv6Prefix": "2001:4860:4000::/36"
    }
  ]
}
</tt></t>
      </section>
      <section anchor="example-2-advanced-publication-with-multiple-services">
        <name>Example 2: Advanced Publication with Multiple Services</name>
        <t>This example illustrates a more complex file from a large cloud provider that uses optional fields to provide richer context. It differentiates between IP ranges used for a general web crawler, a specialized ads crawler, and a user-triggered fetching service. This allows consumers to implement more granular access policies.</t>
        <t><tt>
{
  "formatVersion": "1.0",
  "creationTime": "2025-09-01T10:00:00Z",
  "notes": "IP ranges for ExampleCloud services. For verification, FCrDNS is also recommended.",
  "Prefixes": "FILL OUT WITH EXAMPLE"
}
</tt></t>
      </section>
      <section anchor="example-3-aggregated-publication-by-a-third-party">
        <name>Example 3: Aggregated Publication by a Third Party</name>
        <t>This example shows how a third-party security provider or an open-source project could aggregate IP lists from multiple publishers into a single file. The service field is used to attribute each prefix to its original source, allowing consumers to apply policies based on the original publisher. This reflects the use case of services that provide curated lists of known bots.</t>
        <t><tt>
{
  "formatVersion": "1.0",
  "creationTime": "2025-09-02T00:00:00Z",
  "notes": "Aggregated list of known good bots. Data is updated daily from original publisher sources.",
  "Prefixes": FILL OUT WITH EXAMPLE
}
</tt></t>
      </section>
    </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="security-considerations">
      <name>Security Considerations</name>
      <t>TODO Security</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="RFC2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner"/>
          <date month="March" year="1997"/>
          <abstract>
            <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
      <reference anchor="RFC8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author fullname="B. Leiba" initials="B." surname="Leiba"/>
          <date month="May" year="2017"/>
          <abstract>
            <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>
    </references>
    <?line 203?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
XDYjYaD/Al+Aaq3ZJwAA

-->

</rfc>
