<?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.6.36 (Ruby 3.1.3) -->


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

]>

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

<rfc ipr="trust200902" docName="draft-ietf-httpapi-idempotency-key-header-03" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title>The Idempotency-Key HTTP Header Field</title>

    <author initials="J." surname="Jena" fullname="Jayadeba Jena">
      <organization></organization>
      <address>
        <email>jayadebaj@gmail.com</email>
      </address>
    </author>
    <author initials="S." surname="Dalal" fullname="Sanjay Dalal">
      <organization></organization>
      <address>
        <email>sanjay.dalal@cal.berkeley.edu</email>
        <uri>https://github.com/sdatspun2</uri>
      </address>
    </author>

    <date year="2023" month="July" day="04"/>

    
    
    

    <abstract>


<?line 36?>

<t>The HTTP Idempotency-Key request header field can be used to carry idempotency key in order to make non-idempotent HTTP methods such as <spanx style="verb">POST</spanx> or <spanx style="verb">PATCH</spanx> fault-tolerant.</t>



    </abstract>

    <note title="About This Document" removeInRFC="true">
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-httpapi-idempotency-key-header/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        HTTPAPI Working Group mailing list (<eref target="mailto:httpapi@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/httpapi/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/httpapi/"/>.
        Working Group information can be found at <eref target="https://ietf-wg-httpapi.github.io/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ietf-wg-httpapi/idempotency"/>.</t>
    </note>


  </front>

  <middle>


<?line 40?>

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

<t>Idempotence is the property of certain operations in mathematics and computer science whereby they can be applied multiple times without changing the result beyond the initial application. It does not matter if the operation is called only once, or 10s of times over. The result <bcp14>SHOULD</bcp14> be the same.</t>

<t>Idempotency is important in building a fault-tolerant HTTP API. An HTTP request method is considered <spanx style="verb">idempotent</spanx> if the intended effect on the server of multiple identical requests with that method is the same as the effect for a single such request. According to <xref target="RFC7231"/>, HTTP methods <spanx style="verb">OPTIONS</spanx>, <spanx style="verb">HEAD</spanx>, <spanx style="verb">GET</spanx>, <spanx style="verb">PUT</spanx> and <spanx style="verb">DELETE</spanx> are idempotent while methods <spanx style="verb">POST</spanx> and <spanx style="verb">PATCH</spanx> are not.</t>

<t>Let's say a client of an HTTP API wants to create (or update) a resource using a <spanx style="verb">POST</spanx> method. Since <spanx style="verb">POST</spanx> is NOT an idempotent method, calling it multiple times can result in duplication or wrong updates. Consider a scenario where the client sent a <spanx style="verb">POST</spanx> request to the server, but it got a timeout. Following questions arise :  Is the resource actually created (or updated)? Did the timeout occur during sending of the request, or when receiving of the response? Can the client safely retry the request, or does it need to figure out what happened in the first place? If <spanx style="verb">POST</spanx> had been an idempotent method, such questions may not arise. Client would safely retry a request until it actually gets a valid response from the server.</t>

<t>For many use cases of HTTP APIs, duplicated resources are a severe problem from a business perspective. For example, duplicate records for requests involving any kind of money transfer <spanx style="verb">MUST NOT</spanx> be allowed. In other cases, processing of duplicate webhook delivery is not expected.</t>

<section anchor="notational-conventions"><name>Notational Conventions</name>

<t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>

<?line -18?>

<t>This specification uses the Augmented Backus-Naur Form (ABNF) notation of <xref target="RFC5234"/> and includes, by reference, the IMF-fixdate rule as defined in Section 7.1.1.1 of <xref target="RFC7231"/>.</t>

<t>The term "resource" is to be interpreted as defined in Section 2 of <xref target="RFC7231"/>, that is identified by an URI. The term "resource server" is to be interpreted as "origin server" as defined in Section 3 of <xref target="RFC7231"/>.</t>

</section>
</section>
<section anchor="the-idempotency-key-http-request-header-field"><name>The Idempotency-Key HTTP Request Header Field</name>

<t>An idempotency key is a unique value generated by the client which the resource server uses to recognize subsequent retries of the same request. The <spanx style="verb">Idempotency-Key</spanx> HTTP request header field carries this key.</t>

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

<t><spanx style="verb">Idempotency-Key</spanx> is an Item Structured Header <xref target="RFC8941"/>. Its value <bcp14>MUST</bcp14> be a String. Refer to Section 3.3.3 of <xref target="RFC8941"/> for ABNF of <spanx style="verb">sf-string</spanx>:</t>

<figure><artwork><![CDATA[
Idempotency-Key = sf-string
]]></artwork></figure>

<t>Clients <bcp14>MUST NOT</bcp14> include more than one <spanx style="verb">Idempotency-Key</spanx> header field in the same request.</t>

<t>The following example shows an idempotency key using <spanx style="verb">UUID</spanx> <xref target="RFC4122"/>:</t>

<figure><artwork><![CDATA[
Idempotency-Key: "8e03978e-40d5-43e8-bc93-6894a57f9324"
]]></artwork></figure>

</section>
<section anchor="uniqueness-of-idempotency-key"><name>Uniqueness of Idempotency Key</name>

<t>The idempotency key that is supplied as part of every <spanx style="verb">POST</spanx> request <bcp14>MUST</bcp14> be unique and <bcp14>MUST NOT</bcp14> be reused with another request with a different request payload.</t>

<t>Uniqueness of the key <bcp14>MUST</bcp14> be defined by the resource owner and <bcp14>MUST</bcp14> be implemented by the clients of the resource server. It is <bcp14>RECOMMENDED</bcp14> that <spanx style="verb">UUID</spanx> <xref target="RFC4122"/> or a similar random identifier be used as an idempotency key.</t>

</section>
<section anchor="idempotency-key-validity-and-expiry"><name>Idempotency Key Validity and Expiry</name>

<t>The resource <bcp14>MAY</bcp14> enforce time based idempotency keys, thus, be able to purge or delete a key upon its expiry. The resource server <bcp14>SHOULD</bcp14> define such expiration policy and publish it in the documentation.</t>

</section>
<section anchor="idempotency-fingerprint"><name>Idempotency Fingerprint</name>

<t>An idempotency fingerprint <bcp14>MAY</bcp14> be used in conjunction with an idempotency key to determine the uniqueness of a request. Such a fingerprint is generated from request payload data by the resource server. An idempotency fingerprint generation algorithm <bcp14>MAY</bcp14> use one of the following or similar approaches to create a fingerprint.</t>

<t><list style="symbols">
  <t>Checksum of the entire request payload.</t>
  <t>Checksum of selected element(s) in the request payload.</t>
  <t>Field value match for each field in the request payload.</t>
  <t>Field value match for selected element(s) in the request payload.</t>
  <t>Request digest/signature.</t>
</list></t>

</section>
<section anchor="responsibilities"><name>Responsibilities</name>

<t>Client</t>

<t>Clients of HTTP API requiring idempotency, <bcp14>SHOULD</bcp14> understand the idempotency related requirements as published by the server and use appropriate algorithm to generate idempotency keys.</t>

<t>For each request, client <bcp14>SHOULD</bcp14></t>

<t><list style="symbols">
  <t>Send a unique idempotency key in the HTTP <spanx style="verb">Idempotency-Key</spanx> request header field.</t>
</list></t>

<t>Resource Server</t>

<t>Resource server <bcp14>MUST</bcp14> publish idempotency related specification. This specification <bcp14>MUST</bcp14> include expiration related policy if applicable. Server is responsible for managing the lifecycle of the idempotency key.</t>

<t>For each request, server <bcp14>SHOULD</bcp14></t>

<t><list style="symbols">
  <t>Identify idempotency key from the HTTP <spanx style="verb">Idempotency-Key</spanx> request header field.</t>
  <t>Generate idempotency fingerprint if required.</t>
  <t>Check for idempotency considering various scenarios including the ones described in section below.</t>
</list></t>

</section>
<section anchor="idempotency-enforcement-scenarios"><name>Idempotency Enforcement Scenarios</name>

<t><list style="symbols">
  <t>First time request (idempotency key and fingerprint has not been seen)  <vspace blankLines='1'/>
The resource server <bcp14>SHOULD</bcp14> process the request normally and respond with an appropriate response and status code.</t>
  <t>Duplicate request (idempotency key and fingerprint has been seen)  <vspace blankLines='1'/>
Retry  <vspace blankLines='1'/>
The request was retried after the original request completed. The resource server <bcp14>SHOULD</bcp14> respond with the result of the previously completed operation, success or an error. See Error Scenarios for details on errors.  <vspace blankLines='1'/>
Concurrent Request  <vspace blankLines='1'/>
The request was retried before the original request completed. The resource server <bcp14>MUST</bcp14> respond with a resource conflict error. See Error Scenarios for details.</t>
</list></t>

</section>
<section anchor="error-scenarios"><name>Error Scenarios</name>

<t>If the <spanx style="verb">Idempotency-Key</spanx> request header is missing for a documented idempotent operation requiring this header, the resource server <bcp14>SHOULD</bcp14> reply with an HTTP <spanx style="verb">400</spanx> status code with body containing a link pointing to relevant documentation. Following examples shows an error response describing the problem using <xref target="RFC7807"/>.</t>

<figure><artwork><![CDATA[
HTTP/1.1 400 Bad Request
Content-Type: application/problem+json
Content-Language: en
{
  "type": "https://developer.example.com/idempotency",
  "title": "Idempotency-Key is missing",
  "detail": "This operation is idempotent and it requires correct usage of Idempotency Key.",
}
]]></artwork></figure>

<t>Alternately, using the HTTP header <spanx style="verb">Link</spanx>, the client can be informed about the error as shown below.</t>

<figure><artwork><![CDATA[
HTTP/1.1 400 Bad Request
Link: <https://developer.example.com/idempotency>;
  rel="describedby"; type="text/html"
]]></artwork></figure>

<t>If there is an attempt to reuse an idempotency key with a different request payload, the resource server <bcp14>SHOULD</bcp14> reply with a HTTP <spanx style="verb">422</spanx> status code with body containing a link pointing to relevant documentation. The status code <spanx style="verb">422</spanx> is defined in Section 11.2 of <xref target="RFC4918"/>.</t>

<figure><artwork><![CDATA[
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/problem+json
Content-Language: en
{
  "type": "https://developer.example.com/idempotency",
  "title": "Idempotency-Key is already used",
  "detail": "This operation is idempotent and it requires correct usage of Idempotency Key. Idempotency Key MUST not be reused across different payloads of this operation.",
}
]]></artwork></figure>

<t>The server can also inform the client by using the HTTP header <spanx style="verb">Link</spanx> as shown below.</t>

<figure><artwork><![CDATA[
HTTP/1.1 422 Unprocessable Entity
Link: <https://developer.example.com/idempotency>;
rel="describedby"; type="text/html"
]]></artwork></figure>

<t>If the request is retried, while the original request is still being processed, the resource server <bcp14>SHOULD</bcp14> reply with an HTTP <spanx style="verb">409</spanx> status code with body containing problem description.</t>

<figure><artwork><![CDATA[
HTTP/1.1 409 Conflict
Content-Type: application/problem+json
Content-Language: en
{
  "type": "https://developer.example.com/idempotency",
  "title": "A request is outstanding for this Idempotency-Key",
  "detail": "A request with the same Idempotency-Key for the same operation is being processed or is outstanding.",
}
]]></artwork></figure>

<t>Or, alternately using the HTTP header <spanx style="verb">Link</spanx> pointing to the relevant documentation</t>

<figure><artwork><![CDATA[
HTTP/1.1 409 Conflict
Link: <https://developer.example.com/idempotency>;
rel="describedby"; type="text/html"
]]></artwork></figure>

<t>Error scenarios above describe the status of failed idempotent requests after the resource server prcocesses them. Clients <bcp14>MUST</bcp14> correct the requests (with the execption of 409 where no correction is required) before performing a retry operation, or the the resource server <bcp14>MUST</bcp14> fail the request and return one of the above errors.</t>

<t>For other 4xx/5xx errors, such as 401, 403, 500, 502, 503, 504, 429, or any other HTTP error code that is not listed here, the client <bcp14>SHOULD</bcp14> act appropriately by following the resource server's documentation.</t>

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

<section anchor="the-idempotency-key-http-request-header-field-1"><name>The Idempotency-Key HTTP Request Header Field</name>

<t>The Idempotency-Key field name should be added to the "Hypertext Transfer Protocol (HTTP) Field Name Registry".</t>

<dl>
  <dt>Field Name:</dt>
  <dd>
    <t>Idempotency-Key</t>
  </dd>
  <dt>Status:</dt>
  <dd>
    <t>permanent</t>
  </dd>
  <dt>Specification document:</dt>
  <dd>
    <t>This specification, Section 2</t>
  </dd>
</dl>

</section>
</section>
<section anchor="implementation-status"><name>Implementation Status</name>

<t>Note to RFC Editor: Please remove this section before publication.</t>

<t>This section records the status of known implementations of the protocol defined by this specification at the time of posting of this Internet-Draft, and is based on a proposal described in <xref target="RFC7942"/>.  The description of implementations in this section is intended to assist the IETF in its decision processes in progressing drafts to RFCs.  Please note that the listing of any individual implementation here does not imply endorsement by the IETF. Furthermore, no effort has been spent to verify the information presented here that was supplied by IETF contributors.  This is not intended as, and must not be construed to be, a catalog of available implementations or their features.  Readers are advised to note that
other implementations may exist.</t>

<t>According to RFC 7942, "this will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature. It is up to the individual working groups to use this information as they see fit".</t>

<t>Organization: Stripe</t>

<t><list style="symbols">
  <t>Description: Stripe uses custom HTTP header named <spanx style="verb">Idempotency-Key</spanx></t>
  <t>Reference:  https://stripe.com/docs/idempotency</t>
</list></t>

<t>Organization: Adyen</t>

<t><list style="symbols">
  <t>Description: Adyen uses custom HTTP header named <spanx style="verb">Idempotency-Key</spanx></t>
  <t>Reference: https://docs.adyen.com/development-resources/api-idempotency/</t>
</list></t>

<t>Organization: Dwolla</t>

<t><list style="symbols">
  <t>Description: Dwolla uses custom HTTP header named <spanx style="verb">Idempotency-Key</spanx></t>
  <t>Reference: https://docs.dwolla.com/</t>
</list></t>

<t>Organization: Interledger</t>

<t><list style="symbols">
  <t>Description: Interledger uses custom HTTP header named <spanx style="verb">Idempotency-Key</spanx></t>
  <t>Reference: https://github.com/interledger/</t>
</list></t>

<t>Organization: WorldPay</t>

<t><list style="symbols">
  <t>Description: WorldPay uses custom HTTP header named <spanx style="verb">Idempotency-Key</spanx></t>
  <t>Reference: https://developer.worldpay.com/docs/wpg/idempotency</t>
</list></t>

<t>Organization: Yandex</t>

<t><list style="symbols">
  <t>Description: Yandex uses custom HTTP header named <spanx style="verb">Idempotency-Key</spanx></t>
  <t>Reference: https://cloud.yandex.com/docs/api-design-guide/concepts/idempotency</t>
</list></t>

<t>Organization: http4s.org</t>

<t><list style="symbols">
  <t>Description: Http4s is a minimal, idiomatic Scala interface for HTTP services.</t>
  <t>Reference: https://github.com/http4s/http4s</t>
</list></t>

<t>Organization: Finastra</t>

<t><list style="symbols">
  <t>Description: Finastra uses custom HTTP header named <spanx style="verb">Idempotency-Key</spanx></t>
  <t>Reference: https://developer.fusionfabric.cloud/</t>
</list></t>

<t>Organization: Datatrans</t>

<t><list style="symbols">
  <t>Description: Datatrans focuses on the technical processing of payments, including hosting smart payment forms and correctly routing payment information.</t>
  <t>Reference: https://docs.datatrans.ch/docs/api-endpoints</t>
</list></t>

<section anchor="implementing-the-concept"><name>Implementing the Concept</name>

<t>This is a list of implementations that implement the general concept, but do so using different mechanisms:</t>

<t>Organization: Django</t>

<t><list style="symbols">
  <t>Description: Django uses custom HTTP header named <spanx style="verb">HTTP_IDEMPOTENCY_KEY</spanx></t>
  <t>Reference:  https://pypi.org/project/django-idempotency-key</t>
</list></t>

<t>Organization: Twilio</t>

<t><list style="symbols">
  <t>Description: Twilio uses custom HTTP header named <spanx style="verb">I-Twilio-Idempotency-Token</spanx> in webhooks</t>
  <t>Reference: https://www.twilio.com/docs/usage/webhooks/webhooks-connection-overrides</t>
</list></t>

<t>Organization: PayPal</t>

<t><list style="symbols">
  <t>Description: PayPal uses custom HTTP header named <spanx style="verb">PayPal-Request-Id</spanx></t>
  <t>Reference:  https://developer.paypal.com/docs/business/develop/idempotency</t>
</list></t>

<t>Organization: RazorPay</t>

<t><list style="symbols">
  <t>Description: RazorPay uses custom HTTP header named <spanx style="verb">X-Payout-Idempotency</spanx></t>
  <t>Reference: https://razorpay.com/docs/razorpayx/api/idempotency/</t>
</list></t>

<t>Organization: OpenBanking</t>

<t><list style="symbols">
  <t>Description: OpenBanking uses custom HTTP header called <spanx style="verb">x-idempotency-key</spanx></t>
  <t>Reference: https://openbankinguk.github.io/read-write-api-site3/v3.1.6/profiles/read-write-data-api-profile.html#request-headers</t>
</list></t>

<t>Organization: Square</t>

<t><list style="symbols">
  <t>Description: To make an idempotent API call, Square recommends adding a property named <spanx style="verb">idempotency_key</spanx> with a unique value in the request body.</t>
  <t>Reference: https://developer.squareup.com/docs/build-basics/using-rest-api</t>
</list></t>

<t>Organization: Google Standard Payments</t>

<t><list style="symbols">
  <t>Description: Google Standard Payments API uses a property named <spanx style="verb">requestId</spanx> in request body in order to provider idempotency in various use cases.</t>
  <t>Reference: https://developers.google.com/standard-payments/payment-processor-service-api/rest/v1/TopLevel/capture</t>
</list></t>

<t>Organization: BBVA</t>

<t><list style="symbols">
  <t>Description: BBVA Open Platform uses custom HTTP header called <spanx style="verb">X-Unique-Transaction-ID</spanx></t>
  <t>Reference: https://bbvaopenplatform.com/apiReference/APIbasics/content/x-unique-transaction-id</t>
</list></t>

<t>Organization: WebEngage</t>

<t><list style="symbols">
  <t>Description: WebEngage uses custom HTTP header called <spanx style="verb">x-request-id</spanx> to identify webhook POST requests uniquely to achieve events idempotency.</t>
  <t>Reference: https://docs.webengage.com/docs/webhooks</t>
</list></t>

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

<t>This section is meant to inform developers, information providers,
and users of known security concerns specific to the idempotency keys.</t>

<t>Resource servers that do not implement  strong idempotency keys, such as UUIDs, or have appropriate controls to validate the idempotency keys, could be victim to various forms of security attacks from malicious clients:</t>

<t><list style="symbols">
  <t>Injection attacks-When the resource server does not validate the idempotency key in the client request and performs a idempotent cache lookup, there can be security attacks (primarily in the form of injection), compromising the server.</t>
  <t>Data leaks-When an idempotency implementation allows low entropy keys, attackers <bcp14>MAY</bcp14> determine other keys and use them to fetch existing idempotent cache entries, belonging to other clients.</t>
</list></t>

<t>To prevent such situations, the specification recommends the following best practices for idempotency key implementation in the resource server.</t>

<t><list style="symbols">
  <t>Establish a fixed format for the idempotency key and publish the key’s specification.</t>
  <t>Always validate the key as per its published specification before processing any request.</t>
  <t>On the resource server, implement a unique composite key as the idempotent cache lookup key. For example, a composite key <bcp14>MAY</bcp14> be implemented by combining the idempotency key sent by the client with other client specific attributes known only to the resource server.</t>
</list></t>

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

<t>The first example shows an idempotency-key header field with key value using UUID version 4 scheme:</t>

<figure><artwork><![CDATA[
Idempotency-Key: "8e03978e-40d5-43e8-bc93-6894a57f9324"
]]></artwork></figure>

<t>Second example shows an idempotency-key header field with key value using some random string generator:</t>

<figure><artwork><![CDATA[
Idempotency-Key: "clkyoesmbgybucifusbbtdsbohtyuuwz"
]]></artwork></figure>

</section>


  </middle>

  <back>


    <references title='Normative References'>



<reference anchor="RFC7231">
  <front>
    <title>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</title>
    <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
    <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 the semantics of HTTP/1.1 messages, as expressed by request methods, request header fields, response status codes, and response header fields, along with the payload of messages (metadata and body content) and mechanisms for content negotiation.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7231"/>
  <seriesInfo name="DOI" value="10.17487/RFC7231"/>
</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="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="RFC8941">
  <front>
    <title>Structured Field Values for HTTP</title>
    <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
    <author fullname="P-H. Kamp" surname="P-H. Kamp"/>
    <date month="February" year="2021"/>
    <abstract>
      <t>This document describes a set of data types and associated algorithms that are intended to make it easier and safer to define and handle HTTP header and trailer fields, known as "Structured Fields", "Structured Headers", or "Structured Trailers". It is intended for use by specifications of new HTTP fields that wish to use a common syntax that is more restrictive than traditional HTTP field values.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8941"/>
  <seriesInfo name="DOI" value="10.17487/RFC8941"/>
</reference>

<reference anchor="RFC4122">
  <front>
    <title>A Universally Unique IDentifier (UUID) URN Namespace</title>
    <author fullname="P. Leach" initials="P." surname="Leach"/>
    <author fullname="M. Mealling" initials="M." surname="Mealling"/>
    <author fullname="R. Salz" initials="R." surname="Salz"/>
    <date month="July" year="2005"/>
    <abstract>
      <t>This specification defines a Uniform Resource Name namespace for UUIDs (Universally Unique IDentifier), also known as GUIDs (Globally Unique IDentifier). A UUID is 128 bits long, and can guarantee uniqueness across space and time. UUIDs were originally used in the Apollo Network Computing System and later in the Open Software Foundation\'s (OSF) Distributed Computing Environment (DCE), and then in Microsoft Windows platforms.</t>
      <t>This specification is derived from the DCE specification with the kind permission of the OSF (now known as The Open Group). Information from earlier versions of the DCE specification have been incorporated into this document. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="4122"/>
  <seriesInfo name="DOI" value="10.17487/RFC4122"/>
</reference>

<reference anchor="RFC7807">
  <front>
    <title>Problem Details for HTTP APIs</title>
    <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
    <author fullname="E. Wilde" initials="E." surname="Wilde"/>
    <date month="March" year="2016"/>
    <abstract>
      <t>This document defines a "problem detail" as a way to carry machine- readable details of errors in a HTTP response to avoid the need to define new error response formats for HTTP APIs.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7807"/>
  <seriesInfo name="DOI" value="10.17487/RFC7807"/>
</reference>

<reference anchor="RFC4918">
  <front>
    <title>HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)</title>
    <author fullname="L. Dusseault" initials="L." role="editor" surname="Dusseault"/>
    <date month="June" year="2007"/>
    <abstract>
      <t>Web Distributed Authoring and Versioning (WebDAV) consists of a set of methods, headers, and content-types ancillary to HTTP/1.1 for the management of resource properties, creation and management of resource collections, URL namespace manipulation, and resource locking (collision avoidance).</t>
      <t>RFC 2518 was published in February 1999, and this specification obsoletes RFC 2518 with minor revisions mostly due to interoperability experience. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="4918"/>
  <seriesInfo name="DOI" value="10.17487/RFC4918"/>
</reference>

<reference anchor="RFC7230">
  <front>
    <title>Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing</title>
    <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
    <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 provides an overview of HTTP architecture and its associated terminology, defines the "http" and "https" Uniform Resource Identifier (URI) schemes, defines the HTTP/1.1 message syntax and parsing requirements, and describes related security concerns for implementations.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7230"/>
  <seriesInfo name="DOI" value="10.17487/RFC7230"/>
</reference>




    </references>

    <references title='Informative References'>



<reference anchor="RFC7942">
  <front>
    <title>Improving Awareness of Running Code: The Implementation Status Section</title>
    <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
    <author fullname="A. Farrel" initials="A." surname="Farrel"/>
    <date month="July" year="2016"/>
    <abstract>
      <t>This document describes a simple process that allows authors of Internet-Drafts to record the status of known implementations by including an Implementation Status section. This will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.</t>
      <t>This process is not mandatory. Authors of Internet-Drafts are encouraged to consider using the process for their documents, and working groups are invited to think about applying the process to all of their protocol specifications. This document obsoletes RFC 6982, advancing it to a Best Current Practice.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="205"/>
  <seriesInfo name="RFC" value="7942"/>
  <seriesInfo name="DOI" value="10.17487/RFC7942"/>
</reference>




    </references>


<?line 373?>

<section anchor="imported-abnf"><name>Imported ABNF</name>

<t>The following core rules are included by reference, as defined in Appendix B.1 of <xref target="RFC5234"/>: ALPHA (letters), CR (carriage return), CRLF (CR LF), CTL (controls), DIGIT (decimal 0-9), DQUOTE (double quote), HEXDIG (hexadecimal 0-9/A-F/a-f), LF (line feed), OCTET (any 8-bit sequence of data), SP (space), and VCHAR (any visible US-ASCII character).</t>

<t>The rules below are defined in <xref target="RFC7230"/>:</t>

<figure><artwork><![CDATA[
 obs-text      = <obs-text, see [RFC7230], Section 3.2.6>
]]></artwork></figure>

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

<t>The authors would like to thank Mark Nottingham for his support for this Internet Draft. We would like to acknowledge that this draft is inspired by Idempotency related patterns described in API documentation of <eref target="https://github.com/paypal/api-standards/blob/master/patterns.md#idempotency">PayPal</eref> and <eref target="https://stripe.com/docs/idempotency">Stripe</eref> as well as Internet Draft on <eref target="https://tools.ietf.org/html/draft-nottingham-http-poe-00">POST Once Exactly</eref> authored by Mark Nottingham.</t>

<t>The authors take all responsibility for errors and omissions.</t>

</section>


  </back>

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

-->

</rfc>

