<?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.38 (Ruby 3.3.8) -->


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

]>

<?rfc strict="yes"?>
<?rfc compact="yes"?>

<rfc ipr="trust200902" docName="draft-callec-api-advisory-00" category="info" submissionType="independent" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="api-advisory">A Well-Known URI for API Change Advisories</title>

    <author initials="M. F." surname="Callec" fullname="Mateo Florian Callec">
      <organization>Independent</organization>
      <address>
        <postal>
          <country>France</country>
        </postal>
        <email>mateo@callec.net</email>
      </address>
    </author>

    <date year="2026" month="May" day="14"/>

    <area>Applications and Real-Time</area>
    <workgroup>Network Working Group</workgroup>
    <keyword>well-known</keyword> <keyword>API</keyword> <keyword>advisory</keyword> <keyword>change management</keyword> <keyword>JSON</keyword>

    <abstract>


<?line 49?>

<t>This document defines a well-known URI, <spanx style="verb">/.well-known/api-advisory.json</spanx>, at which API providers <bcp14>MAY</bcp14> publish a machine-readable JSON file listing change advisories that affect their API. The file enables automated scanners and API consumers to discover pricing changes, deprecations, security advisories, and other relevant events without relying on manual monitoring of blogs or mailing lists.</t>



    </abstract>



  </front>

  <middle>


<?line 53?>

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

<t>API providers routinely make changes that affect their consumers: endpoints are deprecated, pricing models shift, authentication mechanisms are rotated, security vulnerabilities are disclosed. Today, this information is conveyed through provider blogs, developer mailing lists, and dashboard notifications, all of which require consumers to monitor multiple out-of-band channels and cannot be discovered programmatically.</t>

<t>This document defines a well-known URI (<xref target="RFC8615"/>) at which a provider <bcp14>MAY</bcp14> publish a JSON file containing a structured list of such advisories. Scanners and API clients can poll this URI periodically to detect changes relevant to their integration, without any prior coordination with the provider.</t>

<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="scope-and-limitations"><name>Scope and Limitations</name>

<t>This document is an independent submission and does not represent IETF consensus. It is published as a pre-draft proposal to gather community feedback on the problem space and the proposed approach.</t>

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

<t>The well-known URI defined by this document is:</t>

<figure><artwork><![CDATA[
/.well-known/api-advisory.json
]]></artwork></figure>

<t>It <bcp14>MUST</bcp14> be served using HTTPS. The advisory file <bcp14>MUST</bcp14> be served from the exact Fully Qualified Domain Name (FQDN) on which the API being described is hosted. If the API is reachable at <spanx style="verb">api.example.net</spanx>, the advisory file <bcp14>MUST</bcp14> be available at:</t>

<figure><artwork><![CDATA[
https://api.example.net/.well-known/api-advisory.json
]]></artwork></figure>

<t>The file <bcp14>MUST NOT</bcp14> be considered authoritative for any other FQDN, including parent domains or subdomains. If the advisory file is served at <spanx style="verb">api.example.net</spanx>, it does not extend to <spanx style="verb">v1.api.example.net</spanx>, to <spanx style="verb">example.net</spanx>, or to any other hostname. Each FQDN requiring advisory coverage <bcp14>MUST</bcp14> host its own advisory file.</t>

<texttable title="FQDN scope examples">
      <ttcol align='left'>File location</ttcol>
      <ttcol align='left'>Applies to</ttcol>
      <ttcol align='left'>Does NOT apply to</ttcol>
      <c><spanx style="verb">api.example.net/.well-known/api-advisory.json</spanx></c>
      <c><spanx style="verb">api.example.net</spanx></c>
      <c><spanx style="verb">v1.api.example.net</spanx>, <spanx style="verb">example.net</spanx></c>
      <c><spanx style="verb">v1.api.example.net/.well-known/api-advisory.json</spanx></c>
      <c><spanx style="verb">v1.api.example.net</spanx></c>
      <c><spanx style="verb">api.example.net</spanx></c>
      <c><spanx style="verb">example.net/.well-known/api-advisory.json</spanx></c>
      <c><spanx style="verb">example.net</spanx></c>
      <c><spanx style="verb">api.example.net</spanx></c>
</texttable>

</section>
<section anchor="json-file-format"><name>JSON File Format</name>

<t>The advisory file is a JSON object. Producers <bcp14>MUST</bcp14> serve it with the Content-Type <spanx style="verb">application/json</spanx>.</t>

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

<texttable title="Top-level fields">
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Required</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c><spanx style="verb">protocol_version</spanx></c>
      <c><bcp14>MUST</bcp14></c>
      <c>string</c>
      <c>Version of this specification (currently <spanx style="verb">"1.0"</spanx>)</c>
      <c><spanx style="verb">namespace</spanx></c>
      <c><bcp14>MUST</bcp14></c>
      <c>string</c>
      <c>The FQDN this file is authoritative for</c>
      <c><spanx style="verb">last_updated</spanx></c>
      <c><bcp14>MUST</bcp14></c>
      <c>string (<xref target="RFC3339"/>)</c>
      <c>Datetime of the last change to this file</c>
      <c><spanx style="verb">api_name</spanx></c>
      <c><bcp14>MUST</bcp14></c>
      <c>string</c>
      <c>Human-readable name of the API</c>
      <c><spanx style="verb">advisories</spanx></c>
      <c><bcp14>MUST</bcp14></c>
      <c>array</c>
      <c>List of advisory objects, ordered most recent first</c>
      <c><spanx style="verb">pagination</spanx></c>
      <c><bcp14>MAY</bcp14></c>
      <c>object</c>
      <c>Pagination metadata (see <xref target="pagination"/>)</c>
</texttable>

<t>The <spanx style="verb">namespace</spanx> field <bcp14>MUST</bcp14> exactly match the FQDN from which the file is served, as it would appear in an HTTP Host header (<xref target="RFC9110"/>). Consumers <bcp14>MUST</bcp14> reject or ignore a file where <spanx style="verb">namespace</spanx> does not match the request host. The <spanx style="verb">namespace</spanx> field allows consumers aggregating multiple files to unambiguously associate each advisory with its origin, independently of the URL used to fetch the file.</t>

<t>The <spanx style="verb">protocol_version</spanx> field allows consumers to detect files produced by future revisions of this specification. Consumers <bcp14>MUST</bcp14> check this field before processing any other field. If the value of <spanx style="verb">protocol_version</spanx> is not a version the consumer implements, the consumer <bcp14>MUST NOT</bcp14> process the file and <bcp14>SHOULD</bcp14> surface an error or warning to the operator. A consumer that silently ignores an unrecognized version risks misinterpreting fields whose semantics may have changed. The only version defined by this document is <spanx style="verb">"1.0"</spanx>.</t>

</section>
<section anchor="advisory-object-fields"><name>Advisory Object Fields</name>

<t>Each element of the <spanx style="verb">advisories</spanx> array is an advisory object with the following fields.</t>

<texttable title="Advisory object fields">
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Required</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c><spanx style="verb">id</spanx></c>
      <c><bcp14>MUST</bcp14></c>
      <c>string</c>
      <c>Advisory identifier (see <xref target="advisory-id"/>)</c>
      <c><spanx style="verb">advisory_datetime</spanx></c>
      <c><bcp14>MUST</bcp14></c>
      <c>string (<xref target="RFC3339"/>)</c>
      <c>Datetime when this advisory was published</c>
      <c><spanx style="verb">effective_datetime</spanx></c>
      <c><bcp14>MUST</bcp14></c>
      <c>string (<xref target="RFC3339"/>)</c>
      <c>Datetime when the change takes effect</c>
      <c><spanx style="verb">status</spanx></c>
      <c><bcp14>MUST</bcp14></c>
      <c>string (enum)</c>
      <c>Lifecycle status (see <xref target="status"/>)</c>
      <c><spanx style="verb">superseded_by</spanx></c>
      <c><bcp14>MUST</bcp14> when status is <spanx style="verb">superseded</spanx></c>
      <c>string</c>
      <c>ID of the replacing advisory</c>
      <c><spanx style="verb">category</spanx></c>
      <c><bcp14>MUST</bcp14></c>
      <c>string (enum)</c>
      <c>Type of change (see <xref target="categories"/>)</c>
      <c><spanx style="verb">priority</spanx></c>
      <c><bcp14>MUST</bcp14></c>
      <c>string (enum)</c>
      <c>Severity level (see <xref target="priority"/>)</c>
      <c><spanx style="verb">title</spanx></c>
      <c>See <xref target="localization"/></c>
      <c>string</c>
      <c>English-language title</c>
      <c><spanx style="verb">title_i18n</spanx></c>
      <c>See <xref target="localization"/></c>
      <c>object</c>
      <c>Translated titles</c>
      <c><spanx style="verb">description</spanx></c>
      <c>See <xref target="localization"/></c>
      <c>string</c>
      <c>English-language description</c>
      <c><spanx style="verb">description_i18n</spanx></c>
      <c>See <xref target="localization"/></c>
      <c>object</c>
      <c>Translated descriptions</c>
      <c><spanx style="verb">action_required</spanx></c>
      <c><bcp14>MUST</bcp14></c>
      <c>boolean</c>
      <c>Whether the consumer must act</c>
      <c><spanx style="verb">suggested_action</spanx></c>
      <c>See <xref target="localization"/></c>
      <c>string</c>
      <c>English-language recommended action</c>
      <c><spanx style="verb">suggested_action_i18n</spanx></c>
      <c>See <xref target="localization"/></c>
      <c>object</c>
      <c>Translated recommended actions</c>
      <c><spanx style="verb">scope</spanx></c>
      <c><bcp14>MUST</bcp14></c>
      <c>object</c>
      <c>Affected portion of the API (see <xref target="scope"/>)</c>
      <c><spanx style="verb">link</spanx></c>
      <c><bcp14>MAY</bcp14></c>
      <c>string (URI)</c>
      <c>Link to full documentation or blog post</c>
</texttable>

</section>
</section>
<section anchor="advisory-id"><name>Advisory Identifier</name>

<t>Advisory identifiers follow the pattern <spanx style="verb">ADV-YYYY-N</spanx>, where <spanx style="verb">YYYY</spanx> is a year and <spanx style="verb">N</spanx> is a positive integer sequence number.</t>

<section anchor="uniqueness-scope"><name>Uniqueness Scope</name>

<t>Advisory IDs <bcp14>MUST</bcp14> be unique within a single advisory file. Uniqueness is NOT required across different files hosted on different FQDNs. Teams managing separate FQDNs are not expected to coordinate their ID sequences. A globally unambiguous advisory is identified by the tuple <spanx style="verb">(namespace, normalized_id)</spanx>, not by <spanx style="verb">normalized_id</spanx> alone.</t>

</section>
<section anchor="normalization"><name>Normalization</name>

<t>Because the format is intentionally lenient to accommodate different producer conventions, consumers <bcp14>MUST</bcp14> normalize IDs before any comparison or deduplication. Normalization <bcp14>MUST</bcp14> follow these steps:</t>

<t><list style="numbers" type="1">
  <t>Split the raw string on the <spanx style="verb">-</spanx> character. The result <bcp14>MUST</bcp14> contain exactly three elements; if not, the ID is malformed and <bcp14>MUST</bcp14> be rejected.</t>
  <t>Convert the first element to upper-case and verify it equals <spanx style="verb">"ADV"</spanx>; if not, the ID <bcp14>MUST</bcp14> be rejected as having an unknown prefix.</t>
  <t>Parse the second and third elements as base-10 integers, discarding any leading zeros. If either element is not a valid integer, the ID <bcp14>MUST</bcp14> be rejected.</t>
</list></t>

<t>The canonical form for storage, comparison, and deduplication is the tuple <spanx style="verb">(prefix, year, seq)</spanx>. Two IDs are equal if and only if their normalized tuples are identical.</t>

</section>
<section anchor="accepted-variants"><name>Accepted Variants</name>

<t>The following raw strings all normalize to the same identity:</t>

<texttable title="Equivalent advisory ID representations">
      <ttcol align='left'>Raw string</ttcol>
      <ttcol align='left'>prefix</ttcol>
      <ttcol align='left'>year</ttcol>
      <ttcol align='left'>seq</ttcol>
      <c><spanx style="verb">ADV-2026-001</spanx></c>
      <c><spanx style="verb">ADV</spanx></c>
      <c>2026</c>
      <c>1</c>
      <c><spanx style="verb">adv-2026-001</spanx></c>
      <c><spanx style="verb">ADV</spanx></c>
      <c>2026</c>
      <c>1</c>
      <c><spanx style="verb">ADV-2026-1</spanx></c>
      <c><spanx style="verb">ADV</spanx></c>
      <c>2026</c>
      <c>1</c>
      <c><spanx style="verb">ADV-002026-001</spanx></c>
      <c><spanx style="verb">ADV</spanx></c>
      <c>2026</c>
      <c>1</c>
      <c><spanx style="verb">adv-002026-1</spanx></c>
      <c><spanx style="verb">ADV</spanx></c>
      <c>2026</c>
      <c>1</c>
</texttable>

</section>
<section anchor="producer-recommendations"><name>Producer Recommendations</name>

<t>Producers <bcp14>SHOULD</bcp14> emit IDs in the form <spanx style="verb">ADV-YYYY-NNN</spanx> (upper-case prefix, 4-digit year, sequence number zero-padded to at least 3 digits) for human readability. This is a <bcp14>SHOULD</bcp14>, not a <bcp14>MUST</bcp14>; parsers <bcp14>MUST</bcp14> handle all valid variants.</t>

</section>
<section anchor="reference-implementation"><name>Reference Implementation</name>

<t>The following JavaScript functions implement normalization, equality testing, and key generation for use in deduplication structures such as <spanx style="verb">Map</spanx> or <spanx style="verb">Set</spanx>. They are provided for illustrative purposes and do not form a normative part of this specification.</t>

<figure><sourcecode type="javascript"><![CDATA[
/**
 * Parses and normalizes an advisory ID string into its three
 * components. The returned tuple {prefix, year, seq} MUST be used
 * for all comparisons (never compare raw ID strings directly).
 *
 * @param {string} id  Raw advisory ID (e.g. "ADV-2026-001")
 * @returns {{ prefix: string, year: number, seq: number }}
 * @throws {Error}     If the ID is malformed or contains
 *                     non-numeric segments
 */
function parseAdvisoryId(id) {
  const blocks = id.split("-");
  if (blocks.length !== 3)
    throw new Error(`Malformed advisory ID: "${id}"`);

  const prefix = blocks[0].toUpperCase();
  if (prefix !== "ADV")
    throw new Error(`Unknown prefix "${prefix}" in ID: "${id}"`);

  const year = parseInt(blocks[1], 10);
  const seq  = parseInt(blocks[2], 10);

  if (isNaN(year) || isNaN(seq))
    throw new Error(`Non-numeric segment in ID: "${id}"`);

  return { prefix, year, seq };
}

/**
 * Returns true if two raw ID strings refer to the same advisory,
 * regardless of casing or zero-padding.
 */
function advisoryIdsEqual(a, b) {
  const pa = parseAdvisoryId(a);
  const pb = parseAdvisoryId(b);
  return pa.prefix === pb.prefix
      && pa.year   === pb.year
      && pa.seq    === pb.seq;
}

/**
 * Returns a stable string key suitable for use in a Map or Set.
 * For cross-namespace deduplication, prefix this key with the
 * namespace: `${namespace}::${advisoryIdKey(id)}`.
 *
 * @param {string} id  Raw advisory ID
 * @returns {string}   Canonical key, e.g. "ADV-2026-1"
 */
function advisoryIdKey(id) {
  const { prefix, year, seq } = parseAdvisoryId(id);
  return `${prefix}-${year}-${seq}`;
}
]]></sourcecode></figure>

</section>
</section>
<section anchor="ordering"><name>Ordering</name>

<t>Advisories <bcp14>MUST</bcp14> be listed in reverse chronological order by <spanx style="verb">advisory_datetime</spanx>, most recent first. This ordering allows consumers to stop processing the list as soon as they encounter an advisory with an <spanx style="verb">advisory_datetime</spanx> older than their last known checkpoint.</t>

</section>
<section anchor="pagination"><name>Pagination</name>

<t>Pagination is <bcp14>OPTIONAL</bcp14>. A producer with a large number of advisories <bcp14>MAY</bcp14> split the list across multiple pages by including a <spanx style="verb">pagination</spanx> object at the top level. If no <spanx style="verb">pagination</spanx> field is present, the <spanx style="verb">advisories</spanx> array contains the complete list.</t>

<section anchor="pagination-fields"><name>Pagination Fields</name>

<texttable title="Pagination fields">
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Required</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c><spanx style="verb">total</spanx></c>
      <c><bcp14>MAY</bcp14></c>
      <c>integer</c>
      <c>Total advisory count across all pages</c>
      <c><spanx style="verb">page</spanx></c>
      <c><bcp14>MUST</bcp14></c>
      <c>integer</c>
      <c>Current page number, 1-indexed</c>
      <c><spanx style="verb">page_size</spanx></c>
      <c><bcp14>MUST</bcp14></c>
      <c>integer</c>
      <c>Maximum advisories per page</c>
      <c><spanx style="verb">next</spanx></c>
      <c><bcp14>MAY</bcp14></c>
      <c>string (URI)</c>
      <c>URL of the next (older) page</c>
      <c><spanx style="verb">prev</spanx></c>
      <c><bcp14>MAY</bcp14></c>
      <c>string (URI)</c>
      <c>URL of the previous (more recent) page</c>
</texttable>

<t>The <spanx style="verb">next</spanx> field <bcp14>MUST</bcp14> be omitted on the last page. The <spanx style="verb">prev</spanx> field <bcp14>MUST</bcp14> be omitted on the first page. Because advisories are ordered most recent first, <spanx style="verb">next</spanx> points toward older content and <spanx style="verb">prev</spanx> toward more recent content.</t>

<t>The first page <bcp14>MUST</bcp14> be accessible at the well-known URI without any query parameters. Subsequent pages <bcp14>MAY</bcp14> use query parameters or any other stable URL convention, as long as each page returns a valid advisory file conforming to this specification.</t>

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

<t>Producers <bcp14>SHOULD</bcp14> set a <spanx style="verb">Cache-Control</spanx> header (see <xref target="RFC7234"/>) on the advisory file response. A recommended value is:</t>

<figure><artwork><![CDATA[
Cache-Control: public, max-age=3600
]]></artwork></figure>

<t>A <spanx style="verb">max-age</spanx> of less than 60 seconds is <bcp14>NOT RECOMMENDED</bcp14>, as it provides no meaningful benefit over uncached responses. Consumers <bcp14>SHOULD</bcp14> respect the <spanx style="verb">Cache-Control</spanx> header when polling, and <bcp14>SHOULD</bcp14> also compare the top-level <spanx style="verb">last_updated</spanx> field to the value observed on their last successful fetch to determine whether the file content has actually changed.</t>

</section>
<section anchor="localization"><name>Localization</name>

<t>The fields <spanx style="verb">title</spanx>, <spanx style="verb">description</spanx>, and <spanx style="verb">suggested_action</spanx> carry human-readable content intended for operators and developers, not for automated parsers. Each of these fields has a plain-string variant and an i18n object variant.</t>

<t>For each field, at least one of the two variants <bcp14>MUST</bcp14> be present. Both variants <bcp14>MAY</bcp14> be present simultaneously in the same advisory object.</t>

<section anchor="plain-string-variant"><name>Plain-String Variant</name>

<t>The plain-string variant (<spanx style="verb">title</spanx>, <spanx style="verb">description</spanx>, <spanx style="verb">suggested_action</spanx>) carries an English-language string. Producers that do not require multilingual output <bcp14>SHOULD</bcp14> use this variant.</t>

<figure><sourcecode type="json"><![CDATA[
"title": "Webhooks endpoint moving to paid model"
]]></sourcecode></figure>

</section>
<section anchor="i18n-object-variant"><name>i18n Object Variant</name>

<t>The i18n object variant (<spanx style="verb">title_i18n</spanx>, <spanx style="verb">description_i18n</spanx>, <spanx style="verb">suggested_action_i18n</spanx>) is a JSON object whose keys are language tags conforming to <xref target="RFC5646"/> and whose values are the corresponding translated strings. The key <spanx style="verb">"en"</spanx> <bcp14>MUST</bcp14> be present in every i18n object.</t>

<figure><sourcecode type="json"><![CDATA[
"title_i18n": {
  "en": "Webhooks endpoint moving to paid model",
  "fr": "Le endpoint webhooks passe a un modele payant",
  "de":
"Der Webhooks-Endpunkt wechselt zu einem kostenpflichtigen Modell"
}
]]></sourcecode></figure>

</section>
<section anchor="resolution-rules"><name>Resolution Rules</name>

<t>When both variants are present for a field, consumers <bcp14>MUST</bcp14> resolve field values as follows:</t>

<t><list style="numbers" type="1">
  <t>For English: the plain-string variant takes precedence. The <spanx style="verb">"en"</spanx> key of the i18n object <bcp14>MUST</bcp14> be ignored when the plain-string variant is also present.</t>
  <t>For any language other than English: the i18n object variant is the only source.</t>
  <t>If no match is found for the consumer's preferred language, the consumer <bcp14>MUST</bcp14> fall back to the English value resolved by rule 1.</t>
</list></t>

<t>The plain-string variant always takes precedence over the <spanx style="verb">"en"</spanx> key of the i18n variant.</t>

</section>
<section anchor="mixing-variants"><name>Mixing Variants</name>

<t>The two variants <bcp14>MAY</bcp14> be mixed freely across fields within the same advisory object. For example, <spanx style="verb">title</spanx> <bcp14>MAY</bcp14> be a plain string while <spanx style="verb">description_i18n</spanx> provides multilingual translations.</t>

</section>
</section>
<section anchor="status"><name>Advisory Status</name>

<t>Each advisory <bcp14>MUST</bcp14> carry a <spanx style="verb">status</spanx> field indicating its current lifecycle state. Producers <bcp14>MUST NOT</bcp14> remove advisories from the file once published; instead they <bcp14>MUST</bcp14> update the <spanx style="verb">status</spanx> field to reflect the advisory's current state. This preserves the historical record and allows consumers that previously processed an advisory to detect status changes on subsequent polls.</t>

<section anchor="status-values"><name>Status Values</name>

<texttable title="Advisory status values">
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Meaning</ttcol>
      <c><spanx style="verb">active</spanx></c>
      <c>The advisory is current and applicable</c>
      <c><spanx style="verb">withdrawn</spanx></c>
      <c>The advisory was retracted and should be disregarded</c>
      <c><spanx style="verb">superseded</spanx></c>
      <c>The advisory has been replaced by a newer one</c>
</texttable>

<t>When <spanx style="verb">status</spanx> is <spanx style="verb">superseded</spanx>, the <spanx style="verb">superseded_by</spanx> field <bcp14>MUST</bcp14> be present and <bcp14>MUST</bcp14> contain the normalized ID of the replacing advisory. The replacing advisory <bcp14>MUST</bcp14> exist within the same namespace (i.e., the same advisory file or a subsequent page of the same paginated file). Consumers <bcp14>SHOULD</bcp14> fetch and process the replacement advisory before acting on the superseded one.</t>

</section>
</section>
<section anchor="priority"><name>Priority Levels</name>

<t>The <spanx style="verb">priority</spanx> field indicates the urgency of the advisory.</t>

<texttable title="Priority values">
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Meaning</ttcol>
      <c><spanx style="verb">critical</spanx></c>
      <c>Immediate action required; breaking or security impact</c>
      <c><spanx style="verb">high</spanx></c>
      <c>Action required before the effective datetime</c>
      <c><spanx style="verb">medium</spanx></c>
      <c>Action recommended; graceful degradation is possible</c>
      <c><spanx style="verb">low</spanx></c>
      <c>Minor or optional change</c>
      <c><spanx style="verb">info</spanx></c>
      <c>No action needed; informational only</c>
</texttable>

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

<t>The <spanx style="verb">category</spanx> field indicates the type of change being announced.</t>

<texttable title="Category values">
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Meaning</ttcol>
      <c><spanx style="verb">pricing_change</spanx></c>
      <c>Free tier ending, price change, or quota change</c>
      <c><spanx style="verb">legal_update</spanx></c>
      <c>Terms of service, privacy policy, or data residency</c>
      <c><spanx style="verb">compliance_update</spanx></c>
      <c>Change imposed by an external regulation (e.g. GDPR, PCI-DSS)</c>
      <c><spanx style="verb">deprecation</spanx></c>
      <c>A feature or endpoint marked for future removal</c>
      <c><spanx style="verb">sunset</spanx></c>
      <c>A feature or endpoint being permanently removed</c>
      <c><spanx style="verb">end_of_life</spanx></c>
      <c>An entire API version being permanently decommissioned</c>
      <c><spanx style="verb">breaking_change</spanx></c>
      <c>A non-backward-compatible API change</c>
      <c><spanx style="verb">maintenance</spanx></c>
      <c>Planned downtime or degraded availability</c>
      <c><spanx style="verb">incident</spanx></c>
      <c>An ongoing or recently resolved incident</c>
      <c><spanx style="verb">migration_required</spanx></c>
      <c>Consumers must migrate to a new system</c>
      <c><spanx style="verb">security_advisory</spanx></c>
      <c>Vulnerability or key rotation requiring consumer action</c>
      <c><spanx style="verb">credential_rotation</spanx></c>
      <c>API keys, certificates, or OAuth secrets are being rotated</c>
      <c><spanx style="verb">performance_update</spanx></c>
      <c>SLA or throughput limit change</c>
      <c><spanx style="verb">new_feature</spanx></c>
      <c>A new endpoint or capability (non-breaking)</c>
      <c><spanx style="verb">ownership_transfer</spanx></c>
      <c>The API has been acquired, transferred, or rebranded</c>
      <c><spanx style="verb">endpoint_moved</spanx></c>
      <c>A path or domain has changed</c>
      <c><spanx style="verb">rate_limit_change</spanx></c>
      <c>Request quotas or throttling has been updated</c>
      <c><spanx style="verb">data_retention_update</spanx></c>
      <c>Data storage duration or policy has changed</c>
      <c><spanx style="verb">region_change</spanx></c>
      <c>Geographic availability has changed (new region, closure, or data relocation)</c>
</texttable>

</section>
<section anchor="scope"><name>Scope</name>

<t>The <spanx style="verb">scope</spanx> object describes which portion of the API is affected by an advisory. It uses a progressive model: a consumer can stop reading <spanx style="verb">scope</spanx> as soon as the <spanx style="verb">level</spanx> field indicates an impact broad enough to be relevant.</t>

<section anchor="scope-fields"><name>Scope Fields</name>

<texttable title="Scope object fields">
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Required</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c><spanx style="verb">level</spanx></c>
      <c><bcp14>MUST</bcp14></c>
      <c>string (enum)</c>
      <c>Granularity of the scope</c>
      <c><spanx style="verb">versions</spanx></c>
      <c><bcp14>MUST</bcp14> when level is <spanx style="verb">versions</spanx>; <bcp14>MAY</bcp14> when level is <spanx style="verb">routes</spanx></c>
      <c>array of strings</c>
      <c>Affected API versions</c>
      <c><spanx style="verb">routes</spanx></c>
      <c><bcp14>MUST</bcp14> when level is <spanx style="verb">routes</spanx></c>
      <c>array of objects</c>
      <c>Affected routes</c>
</texttable>

</section>
<section anchor="level-values"><name>Level Values</name>

<texttable title="Scope level values">
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Meaning</ttcol>
      <c><spanx style="verb">global</spanx></c>
      <c>The entire API is affected; <spanx style="verb">versions</spanx> and <spanx style="verb">routes</spanx> are ignored</c>
      <c><spanx style="verb">versions</spanx></c>
      <c>Only the listed versions are affected; <spanx style="verb">routes</spanx> is ignored</c>
      <c><spanx style="verb">routes</spanx></c>
      <c>Only the listed routes are affected; <spanx style="verb">versions</spanx> is an optional additional filter</c>
</texttable>

</section>
<section anchor="route-objects"><name>Route Objects</name>

<t>When <spanx style="verb">level</spanx> is <spanx style="verb">routes</spanx>, the <spanx style="verb">routes</spanx> array <bcp14>MUST</bcp14> be present and <bcp14>MUST</bcp14> contain one or more route objects.</t>

<texttable title="Route object fields">
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Required</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c><spanx style="verb">method</spanx></c>
      <c><bcp14>MUST</bcp14></c>
      <c>string</c>
      <c>HTTP method, or <spanx style="verb">*</spanx> to match all methods</c>
      <c><spanx style="verb">path</spanx></c>
      <c><bcp14>MUST</bcp14></c>
      <c>string</c>
      <c>Route path pattern (see <xref target="path-patterns"/>)</c>
</texttable>

</section>
<section anchor="path-patterns"><name>Path Pattern Syntax</name>

<t>The <spanx style="verb">path</spanx> field contains a pattern that is matched against the path component of request URIs. This section defines the syntax and matching semantics of these patterns normatively.</t>

<section anchor="syntax"><name>Syntax</name>

<t>Path patterns are defined using the following ABNF grammar (<xref target="RFC5234"/>). The rule <spanx style="verb">pchar</spanx> is imported from Section 3.3 of <xref target="RFC3986"/> and covers unreserved characters, percent-encoded characters, sub-delimiters, colons, and at-signs.</t>

<figure><sourcecode type="abnf"><![CDATA[
path-pattern     = "/" *( segment "/" ) terminal

segment          = 1*pchar
                   ; A literal path segment; no wildcards allowed.
                   ; MUST NOT be empty.

terminal         = segment
                 / wildcard-single
                 / wildcard-multi

wildcard-single  = "*"
                   ; Matches exactly one non-empty segment.

wildcard-multi   = "**"
                   ; Matches one or more segments at any depth.

pchar            = unreserved / pct-encoded / sub-delims / ":" / "@"
                   ; Imported from Section 3.3 of RFC 3986.
]]></sourcecode></figure>

<t>A path pattern <bcp14>MUST</bcp14> begin with a <spanx style="verb">/</spanx> character. The empty string and patterns that do not begin with <spanx style="verb">/</spanx> are malformed and <bcp14>MUST</bcp14> be rejected by consumers.</t>

<t>Wildcards (<spanx style="verb">*</spanx> and <spanx style="verb">**</spanx>) are only permitted as an entire terminal segment, they <bcp14>MUST NOT</bcp14> appear embedded within a literal segment (e.g., <spanx style="verb">/v2/web*</spanx> is invalid). A pattern containing an embedded wildcard <bcp14>MUST</bcp14> be rejected by consumers.</t>

</section>
<section anchor="matching-semantics"><name>Matching Semantics</name>

<t>For the purpose of pattern matching, a subject path is split into a sequence of segments by splitting on <spanx style="verb">/</spanx> and discarding empty strings produced by leading, trailing, or consecutive <spanx style="verb">/</spanx> characters. A pattern is split into its component segments in the same way.</t>

<t>The following rules apply:</t>

<t><list style="symbols">
  <t>A <strong>literal segment</strong> matches a subject segment if and only if the two strings are identical after percent-decoding both (case-sensitive comparison).</t>
  <t>A <strong><spanx style="verb">*</spanx> wildcard</strong> (wildcard-single) matches exactly one subject segment. It <bcp14>MUST NOT</bcp14> match an empty segment. It <bcp14>MUST NOT</bcp14> match across a <spanx style="verb">/</spanx> boundary, i.e., it matches at most one path component.</t>
  <t>A <strong><spanx style="verb">**</spanx> wildcard</strong> (wildcard-multi) matches one or more consecutive subject segments. It <bcp14>MUST NOT</bcp14> match zero segments. It may match segments at any depth, i.e., it consumes one or more path components including their intervening <spanx style="verb">/</spanx> characters.</t>
  <t>A pattern matches a subject path if and only if the entire sequence of subject segments is consumed by the pattern segments, with no subject segments remaining after the last pattern segment is applied.</t>
</list></t>

<t>Consumers <bcp14>MUST</bcp14> apply these rules deterministically. Where a <spanx style="verb">**</spanx> wildcard could match a variable number of segments, it <bcp14>MUST</bcp14> be treated greedily: it consumes the maximum number of segments that still allows the overall pattern to match. In practice, because <spanx style="verb">**</spanx> is only permitted as a terminal segment in this grammar, no backtracking is required.</t>

</section>
<section anchor="matching-examples"><name>Matching Examples</name>

<t>The following table illustrates the matching rules. All examples assume case-sensitive comparison after percent-decoding.</t>

<texttable title="Path pattern matching examples">
      <ttcol align='left'>Pattern</ttcol>
      <ttcol align='left'>Subject path</ttcol>
      <ttcol align='left'>Match?</ttcol>
      <ttcol align='left'>Reason</ttcol>
      <c><spanx style="verb">/v2/webhooks</spanx></c>
      <c><spanx style="verb">/v2/webhooks</spanx></c>
      <c>Yes</c>
      <c>Exact literal match</c>
      <c><spanx style="verb">/v2/webhooks</spanx></c>
      <c><spanx style="verb">/v2/webhooks/</spanx></c>
      <c>Yes</c>
      <c>Trailing slash discarded before matching</c>
      <c><spanx style="verb">/v2/webhooks</spanx></c>
      <c><spanx style="verb">/v2/webhooks/123</spanx></c>
      <c>No</c>
      <c>Extra segment not covered</c>
      <c><spanx style="verb">/v2/webhooks/*</spanx></c>
      <c><spanx style="verb">/v2/webhooks/abc</spanx></c>
      <c>Yes</c>
      <c><spanx style="verb">*</spanx> matches single segment <spanx style="verb">abc</spanx></c>
      <c><spanx style="verb">/v2/webhooks/*</spanx></c>
      <c><spanx style="verb">/v2/webhooks/abc/def</spanx></c>
      <c>No</c>
      <c><spanx style="verb">*</spanx> does not match across <spanx style="verb">/</spanx></c>
      <c><spanx style="verb">/v2/webhooks/*</spanx></c>
      <c><spanx style="verb">/v2/webhooks/</spanx></c>
      <c>No</c>
      <c><spanx style="verb">*</spanx> does not match an empty segment</c>
      <c><spanx style="verb">/v2/webhooks/**</spanx></c>
      <c><spanx style="verb">/v2/webhooks/abc</spanx></c>
      <c>Yes</c>
      <c><spanx style="verb">**</spanx> matches one segment</c>
      <c><spanx style="verb">/v2/webhooks/**</spanx></c>
      <c><spanx style="verb">/v2/webhooks/abc/def/ghi</spanx></c>
      <c>Yes</c>
      <c><spanx style="verb">**</spanx> matches multiple segments</c>
      <c><spanx style="verb">/v2/webhooks/**</spanx></c>
      <c><spanx style="verb">/v2/webhooks</spanx></c>
      <c>No</c>
      <c><spanx style="verb">**</spanx> requires at least one segment</c>
      <c><spanx style="verb">/v1/**</spanx></c>
      <c><spanx style="verb">/v1/users/123/orders</spanx></c>
      <c>Yes</c>
      <c><spanx style="verb">**</spanx> matches remaining segments</c>
      <c><spanx style="verb">/v1/**</spanx></c>
      <c><spanx style="verb">/v2/users</spanx></c>
      <c>No</c>
      <c>Literal <spanx style="verb">v1</spanx> does not match <spanx style="verb">v2</spanx></c>
      <c><spanx style="verb">/v2/web*</spanx></c>
      <c><spanx style="verb">/v2/webhooks</spanx></c>
      <c>Invalid</c>
      <c>Embedded wildcard; pattern <bcp14>MUST</bcp14> be rejected</c>
</texttable>

</section>
</section>
<section anchor="scope-semantics"><name>Scope Semantics</name>

<t>The following normative rules apply:</t>

<t><list style="symbols">
  <t>When <spanx style="verb">level</spanx> is <spanx style="verb">"global"</spanx>, <spanx style="verb">versions</spanx> and <spanx style="verb">routes</spanx> <bcp14>MUST</bcp14> be omitted or, if present, <bcp14>MUST</bcp14> be ignored by consumers.</t>
  <t>When <spanx style="verb">level</spanx> is <spanx style="verb">"versions"</spanx>, <spanx style="verb">versions</spanx> is <bcp14>REQUIRED</bcp14>; <spanx style="verb">routes</spanx> <bcp14>MUST</bcp14> be omitted or, if present, <bcp14>MUST</bcp14> be ignored by consumers.</t>
  <t>When <spanx style="verb">level</spanx> is <spanx style="verb">"routes"</spanx>, <spanx style="verb">routes</spanx> is <bcp14>REQUIRED</bcp14>; <spanx style="verb">versions</spanx> is <bcp14>OPTIONAL</bcp14> and, if present, acts as an additional filter, the advisory applies only to the listed routes within the listed versions.</t>
</list></t>

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

<t>The following example shows a paginated first page containing three advisories in reverse chronological order. It demonstrates: the <spanx style="verb">namespace</spanx> field; the <spanx style="verb">status</spanx> field including a <spanx style="verb">superseded</spanx> advisory; the localization resolution rules (ADV-2026-003 carries both a plain-string <spanx style="verb">title</spanx> and a <spanx style="verb">title_i18n</spanx> object without an <spanx style="verb">"en"</spanx> key, illustrating that the plain-string variant takes precedence for English while the i18n object supplies other languages); and the <spanx style="verb">pagination</spanx> object. The <spanx style="verb">Cache-Control</spanx> header shown after the JSON is a separate HTTP response header, not part of the JSON body.</t>

<figure><sourcecode type="json"><![CDATA[
{
  "protocol_version": "1.0",
  "namespace": "api.acme.com",
  "last_updated": "2026-05-13T20:45:00Z",
  "api_name": "Acme Payments API",
  "pagination": {
    "total": 42,
    "page": 1,
    "page_size": 3,
    "next":
      "https://api.acme.com/.well-known/api-advisory.json?page=2"
  },
  "advisories": [
    {
      "id": "ADV-2026-003",
      "advisory_datetime": "2026-05-13T14:00:00Z",
      "effective_datetime": "2027-01-01T00:00:00Z",
      "status": "active",
      "category": "deprecation",
      "priority": "high",
      "title":
        "Deprecation of query parameter authentication (revised)",
      "title_i18n": {
        "fr":
"Depreciation de l'authentification par parametre (revisee)"
      },
      "description":
"The migration deadline has been extended to January 1, 2027.",
      "action_required": true,
      "suggested_action":
        "Replace the api_key query parameter with a Bearer token.",
      "scope": { "level": "global" },
      "link": "https://docs.acme.com/auth-migration"
    },
    {
      "id": "ADV-2026-002",
      "advisory_datetime": "2026-05-13T09:00:00Z",
      "effective_datetime": "2026-10-01T00:00:00Z",
      "status": "superseded",
      "superseded_by": "ADV-2026-003",
      "category": "deprecation",
      "priority": "medium",
      "title_i18n": {
        "en": "Deprecation of query parameter authentication",
        "fr":
"Depreciation de l'authentification par parametre de requete"
      },
      "description":
"Authentication via the api_key query parameter is deprecated.",
      "action_required": true,
      "suggested_action":
        "Migrate to the Authorization HTTP header.",
      "scope": { "level": "global" },
      "link": "https://docs.acme.com/auth-migration"
    },
    {
      "id": "ADV-2026-001",
      "advisory_datetime": "2026-05-10T10:00:00Z",
      "effective_datetime": "2026-12-01T00:00:00Z",
      "status": "active",
      "category": "pricing_change",
      "priority": "high",
      "title": "Webhooks endpoint moving to paid model",
      "description":
        "Webhook usage will be billed at $0.01 per call.",
      "action_required": true,
      "suggested_action":
"Review your webhook usage and update your billing plan.",
      "scope": {
        "level": "routes",
        "versions": ["v2"],
        "routes": [
          { "method": "POST", "path": "/v2/webhooks" },
          { "method": "*",    "path": "/v2/webhooks/**" }
        ]
      },
      "link": "https://acme.com/blog/pricing-2026"
    }
  ]
}
]]></sourcecode></figure>

<t>The HTTP response <bcp14>SHOULD</bcp14> include:</t>

<figure><artwork><![CDATA[
Cache-Control: public, max-age=3600
]]></artwork></figure>

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

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

<t>This document requests the registration of the following well-known URI in the "Well-Known URIs" registry established by <xref target="RFC8615"/>:</t>

<t><list style="symbols">
  <t>URI suffix: <spanx style="verb">api-advisory.json</spanx></t>
  <t>Change controller: IETF</t>
  <t>Specification document: this document</t>
  <t>Related information: The resource is a JSON object as defined in <xref target="json-file-format"/>.</t>
</list></t>

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

<section anchor="https-requirement"><name>HTTPS Requirement</name>

<t>Consumers <bcp14>MUST</bcp14> only fetch advisory files over HTTPS. A file served over plain HTTP is subject to manipulation in transit and <bcp14>MUST NOT</bcp14> be trusted.</t>

</section>
<section anchor="namespace-validation"><name>Namespace Validation</name>

<t>Consumers <bcp14>MUST</bcp14> verify that the <spanx style="verb">namespace</spanx> field in the advisory file exactly matches the FQDN from which the file was retrieved. Failure to do so may allow a malicious party to serve an advisory file for a different domain, causing consumers to apply advisories to the wrong API.</t>

</section>
<section anchor="availability"><name>Availability</name>

<t>An advisory file that is temporarily or permanently unavailable <bcp14>MUST</bcp14> be treated as a transient error. Consumers <bcp14>MUST NOT</bcp14> interpret the absence of an advisory file as confirmation that no advisories exist. Producers <bcp14>SHOULD</bcp14> ensure that the advisory endpoint is subject to the same availability guarantees as their API.</t>

</section>
<section anchor="content-integrity"><name>Content Integrity</name>

<t>This specification does not define a mandatory mechanism for signing advisory files. Consumers relying on advisory content for automated decisions (e.g., automated circuit-breaking) <bcp14>SHOULD</bcp14> consider whether additional integrity guarantees are appropriate for their threat model. One approach is HTTP Message Signatures (<xref target="RFC9421"/>), which allows producers to sign HTTP responses (including the advisory file response) using asymmetric keys. Consumers can then verify the signature before processing the file content, without relying solely on HTTPS for authenticity.</t>

</section>
<section anchor="historical-record-preservation"><name>Historical Record Preservation</name>

<t>Producers <bcp14>MUST NOT</bcp14> remove advisories from the file after they have been published. Removing a <spanx style="verb">superseded</spanx> or <spanx style="verb">withdrawn</spanx> advisory may cause consumers that had previously observed it to re-process it as a new advisory on a subsequent poll, depending on their deduplication implementation.</t>

</section>
</section>


  </middle>

  <back>


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

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



<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="RFC8615">
  <front>
    <title>Well-Known Uniform Resource Identifiers (URIs)</title>
    <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
    <date month="May" year="2019"/>
    <abstract>
      <t>This memo defines a path prefix for "well-known locations", "/.well-known/", in selected Uniform Resource Identifier (URI) schemes.</t>
      <t>In doing so, it obsoletes RFC 5785 and updates the URI schemes defined in RFC 7230 to reserve that space. It also updates RFC 7595 to track URI schemes that support well-known URIs in their registry.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8615"/>
  <seriesInfo name="DOI" value="10.17487/RFC8615"/>
</reference>
<reference anchor="RFC3339">
  <front>
    <title>Date and Time on the Internet: Timestamps</title>
    <author fullname="G. Klyne" initials="G." surname="Klyne"/>
    <author fullname="C. Newman" initials="C." surname="Newman"/>
    <date month="July" year="2002"/>
    <abstract>
      <t>This document defines a date and time format for use in Internet protocols that is a profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="3339"/>
  <seriesInfo name="DOI" value="10.17487/RFC3339"/>
</reference>
<reference anchor="RFC5646">
  <front>
    <title>Tags for Identifying Languages</title>
    <author fullname="A. Phillips" initials="A." role="editor" surname="Phillips"/>
    <author fullname="M. Davis" initials="M." role="editor" surname="Davis"/>
    <date month="September" year="2009"/>
    <abstract>
      <t>This document describes the structure, content, construction, and semantics of language tags for use in cases where it is desirable to indicate the language used in an information object. It also describes how to register values for use in language tags and the creation of user-defined extensions for private interchange. 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="47"/>
  <seriesInfo name="RFC" value="5646"/>
  <seriesInfo name="DOI" value="10.17487/RFC5646"/>
</reference>
<reference anchor="RFC9110">
  <front>
    <title>HTTP Semantics</title>
    <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
    <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
    <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
    <date month="June" year="2022"/>
    <abstract>
      <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
      <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="97"/>
  <seriesInfo name="RFC" value="9110"/>
  <seriesInfo name="DOI" value="10.17487/RFC9110"/>
</reference>
<reference anchor="RFC5234">
  <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="RFC3986">
  <front>
    <title>Uniform Resource Identifier (URI): Generic Syntax</title>
    <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
    <author fullname="R. Fielding" initials="R." surname="Fielding"/>
    <author fullname="L. Masinter" initials="L." surname="Masinter"/>
    <date month="January" year="2005"/>
    <abstract>
      <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="66"/>
  <seriesInfo name="RFC" value="3986"/>
  <seriesInfo name="DOI" value="10.17487/RFC3986"/>
</reference>



    </references>

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



<reference anchor="RFC7234">
  <front>
    <title>Hypertext Transfer Protocol (HTTP/1.1): 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="2014"/>
    <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>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7234"/>
  <seriesInfo name="DOI" value="10.17487/RFC7234"/>
</reference>
<reference anchor="RFC9421">
  <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>



    </references>

</references>



  </back>

<!-- ##markdown-source:
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

-->

</rfc>

