<?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.23 (Ruby 3.2.0) -->


<!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-07" 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="2025" month="October" day="15"/>

    
    
    

    <abstract>


<?line 36?>

<t>The HTTP Idempotency-Key request header field can be used 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>In mathematics and computer science, an idempotent operation is one that 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 tens of times over.</t>

<t>Idempotency is important in building fault-tolerant HTTP APIs. 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. Per <xref target="RFC9110"/>, the 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. Repeating the request multiple times can result in duplication or incorrect updates. Consider a scenario where the client sent a <spanx style="verb">POST</spanx> request to the server, but the request timed out. The client is left uncertain about the status of the resource. It doesn't know if the resource was created or updated, or if the server even completed processing the request. Furthermore, the client does not know if it can safely retry the request.</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.</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 uses to recognize subsequent retries of the same request. The <spanx style="verb">Idempotency-Key</spanx> HTTP request header field carries this value.</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 (Section 3.3.3 of <xref target="RFC8941"/>).</t>

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

<t>The idempotency key <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. It is <bcp14>RECOMMENDED</bcp14> that a UUID <xref target="RFC4122"/> or a similar random identifier be used as an idempotency key.</t>

<t>The following example shows an idempotency key whose value is a UUID <xref target="RFC4122"/>:</t>

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

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

<t>The resource <bcp14>MAY</bcp14> require time based idempotency keys to be able to purge or delete a key upon its expiry. The resource <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. 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>

<section anchor="client"><name>Client</name>

<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>Clients <bcp14>MAY</bcp14> choose to send an Idempotency-Key field with any valid value to indicate the user's intent is to only perform this action once. Without a priori knowledge, a general client cannot assume the server will respect this request.</t>

<t>For each request, a 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>

</section>
<section anchor="resource"><name>Resource</name>

<t>Resources <bcp14>MUST</bcp14> publish a idempotency related specification. This specification <bcp14>MUST</bcp14> include expiration related policy if applicable. A resource is responsible for managing the lifecycle of the idempotency key.</t>

<t>For each request, a 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>Enforce idempotency (see below)</t>
</list></t>

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

<t><list style="symbols">
  <t>First time request (idempotency key and fingerprint has not been seen)  <vspace blankLines='1'/>
The resource <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 <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 <bcp14>SHOULD</bcp14> respond with a resource conflict error. See Error Scenarios for details.</t>
</list></t>

</section>
<section anchor="error-handling"><name>Error Handling</name>

<t>If the <spanx style="verb">Idempotency-Key</spanx> request header is missing for a documented idempotent operation requiring this header, the resource <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><sourcecode type="http-message"><![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.",
    }
]]></sourcecode></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><sourcecode type="http-message"><![CDATA[
    HTTP/1.1 400 Bad Request
    Link: <https://developer.example.com/idempotency>;
      rel="describedby"; type="text/html"
]]></sourcecode></figure>

<t>If there is an attempt to reuse an idempotency key with a different request payload, the resource <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 15.5.21 of <xref target="RFC9110"/>.</t>

<figure><sourcecode type="http-message"><![CDATA[
    HTTP/1.1 422 Unprocessable Content
    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.",
    }
]]></sourcecode></figure>

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

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

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

<figure><sourcecode type="http-message"><![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.",
    }
]]></sourcecode></figure>

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

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

<t>Error scenarios above describe the status of failed idempotent requests after the resource prcocesses them. Clients <bcp14>MUST</bcp14> correct the requests (with the exception of 409 where no correction is required) before performing a retry operation, or the resource <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'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: Chargebee</t>

<t><list style="symbols">
  <t>Description: Chargebee uses custom HTTP header named <spanx style="verb">chargebee-idempotency-key</spanx></t>
  <t>Reference: https://apidocs.chargebee.com/docs/api/idempotency</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>Resources 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 resources 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.</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, 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.</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 a random string generator:</t>

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

</section>


  </middle>

  <back>


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

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



<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="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="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="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>




    </references>

    <references title='Informative References' anchor="sec-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>

</references>


<?line 380?>

<section anchor="changes"><name>Changes from Draft-06</name>

</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:
H4sIAAAAAAAAA9Vc63LcNpb+z6fAyj9iZZvdkizHtiY3WZJjZWxLK8mTSaVS
EZpEd8MiCQ5BqtVxObWvsf/2WfZR9kn2XABeW5I98VbtViqtbhIEDs75zhWH
DsMwiEyss/meqMpZ+DQISl0mak9cLJQ4jlWam1Jl0Sr8q1qJlxcXp+KlkrEq
xAutkjiITZTJFIbHhZyVoVYwx6Isc5nrULeevlKrcEEPhltPgkiWam6K1Z6w
ZRzovNgTZVHZcmdr69nWTmBLmcW/ycRkMPFK2SDXe+KX0kQjAR86i1VWjoQ1
RVmomYVvq9R9KQsdwa3IpLl0X1IYDLd0luhM/RoE1yqr1F4gxLwwVb5He9o/
PYYL5SqH9X4yxRWwQ/yAt+HqwuD2cE92bzKhDS7nfo/juS4X1XSszQSGplIn
PBRufY9Dx6aYw41C5aaZwz0DtPWnm7RYFgSyKhemQFJD+F/AFuye+HEsflSZ
pAvM+R/lCvg6lc11xYS8czfefT/HC7hg0J3sfCwOZSKT1mznMoPnWpfdZJau
j2O8/n0kk/FUFVcqUauxiisaWBV67R5tLEubV9lOEASZKVJZ6msQQKCzWetX
EIahkFOQIAguCBB9hLY+BAv1j0rZUjCYxAxRKCKZiakSlVUxIATkcKVEZrIG
gSVPlirgaGyFraKFkFZcnp6cX1wKU8C3/YuDl5diJqukDEuTqEJm5ZjJSnUc
JyoIHojjrCxMXEWlNlkQHGewVLlQuInICgAtIa8qgTAbaaBZjeCqaJFhcpgY
nxbaCsC3KBey9PTLPE80bCEFGnSewE2dKiuWwEtTwaiFzOYITVgS+GBhFDy1
MrAsXtGZLrVMeJaIFhmL41LEBubITIm0ImV6RsM7lIBAE1jYZMkKPiKFLAF6
gcSZI8JcqwLY0RIHPqfhRwHaWsLqYlrpBC1Jj4nMelAxOxb7Gf/yUmSBEAUm
s8CnAqi4bPh16anVGfyM4aaazVQEfMzoslUF0IVU1jzTaB1g/4lfhBnIjG7W
o6cB8QgD/O7mBUgKKSzsAqYimLhZxuIUFnr//l/OXhw8297e+vBhRM95SF2e
nF4cn7w5vxyJy5dH+4f494ejC/xz+hYwhuC4PDx6dXRxBD8K1QbFcqGT1kwM
SnrAoRLHgwSB/69U+QXgFzRUigjAgpCaIcY8k8USWG5RC6JCgZkVD2FHVQ46
qDbhGYCNqYoIdQUlJf1qvPhYnKkcnmpA5sTUBSTC1eEPxB5XNd4QNjqLTFEg
L3lVkPqBky1yNgIjVWgDewZZ0yJuGxY/anr8yrCPRs4jgFjZIQzpAdhWIJ6L
ZioQb6JmQAAgGdAJNMqpcU+CbykrxjVrEbGjVpTsi1JcZWbpcVfzawk4YY7G
ouZoPKIdz9pYVOBgyAwkCsfmhYmUtT2OjsWLqoDfRWoKNWqzodZWT4Vm82Dl
TCVo/spi1ZkJTOeDB0K8MSWJAHAP7L5GHQCusyEF5yuWpgBsbbx+e36xMeK/
4s0JfT87+re3x2dHh/j9/OX+q1f1l8CNOH958vbVYfOtefLg5PXrozeH/DBc
FZ1Lwcbr/Z83RoTlDVaQ/VcbCJpyAUKC4KFKSewIBYMmEPW8yAtinbRBrGxU
6Cn8gGeeH5z+139u7zol3Nnefvbhg/vxdPvJLvwAUGW8Glky/gnMWgVgFJVE
cAqwdMDQXJcygbAApGoXZpkJhCPw8stfkDO/7omvp1G+vfutu4Ab7lz0POtc
JJ4NrwweZiauubRmmZqbnes9Tnfp3f+589vzvXXx6+8wGBLh9tPvvg0QIyAM
m6tIz7wigytlu7hfzVFEIIHnMrqqbPhGVhD8gecWD/efv3mxiWB1yj9z0ni8
8wilgXIAa5BUIEVQXQTvDLhMXhGnPn79IpzpG1QkUVQJmeJYzYAyEve5Ijcr
noy38b9m+ic7j7Y/fBgztgEuqdjwarpBpn0NktZNvNOfcsROAv0aOZEZOmOg
G9Tv7dnxGAOAW6PiM2eROtFxsN9y/uAxURFhdgmWScNwcS0T+JyrDF0xr9Uy
BeAWokXXCrFYDFyIzDzTv6OPmlpcGsajbdCqtm3k3Wp7g4Rf9ii/7DrjXkhV
0GSkqETnmAzN+Sor5U0QDOfCjWVgR1UqziGaj8oKnbnjh1PTZ7soORjk5hSk
XBj64DNoJB966Twaw3+NhPjRTWfu3hL/MjCsOKIdlAApDIw+3/1KjvUITq/Z
eLlQFD1SqCAB0mAPasbwRRHrGeG3rG/kcpUYGQNRXYJKZ3T9mh5801VXnGB4
0Ct6UhC16DecwnXQsN5lAc9bZoDhK8Xbt8eHjm272zs7oIouqkl1AkYQgrLY
pA3Gizp2lrYTrjLnnKLNTJKYJYpI3UikkgznugcAuMZ6cBPcBwTtBZQy9DC0
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
1fq5ji24S+svINDRQ2by5Xv1KuRxYVvBLsyVyi4xMF6q6cKYK7ue5uVyOS7p
8YZYKktO/HP1lxAAk3GkHmJXfAEbGlgJsPinMhnshC/ftxMeFbrEEvZzGyYa
IwEKl8ukoX2KEAat9kPu4vqZ/N0U63yXv3EfvX8PYRBofpvzt2CjwCk7bstf
uemDY2DlTiBleC6zKzoQ7JHauncrte4lh8ubj8QxMDab8pzVVetNH6yDh8tC
lypEM2Xhy6PJ9aPx9vgrVM6ZTiCOag1C60Yj3c0xVp0euBKLeytqAKDzf1SQ
TQxVwb3d0n2rBNtycHcj9xglzfjmE+TNMo65BITZqirKlZdaiwm/IRP8KUun
N7XXV4S12tsMeY1FSzRUeRuNOolDyJw1qRXQgxFniUzp7/sHY/DVi3MsRMoi
Ro0hfzTgxG0DiRkEgeGW3TZAoXBj7U3hb8i/sHJn8LFrel+hfYYFA66xMlhZ
SjciSKRvCyVqVtjxnKjk96AcpaF3sRP3JXQe2BShi1GQMRPk0OR6e3Jh8lc4
4SSSOeZGfY49f/63/QF38CIpBeT8sqTTjPvU4u8hN7GGVHniDqbw+PAW5ZhO
ryUqSO6mpy0C2fXQCcjBSTziCvvkJmRshWVrBR0Hg2BaTY+yOZaEB9G0v/MR
Su4VTIO0sYvL9+g4Oy7wRZOm4MqUJdQGKaOFVljhvCZAtVBwVxAD8yqirRWS
e5+DBbNzFVUFNqj2i4sXvdpPqiSXRtwxVAOnUa9EwjC1o8D1yhWt2pj1y1F8
U2RN9atOqYdtc00HFwVMsalLPRw3QXxreo1/+GRT6cVOX0vVXMr42408VKjB
PB+LPthh51vqhrNFvjgKylDqlJ9g3eOok5ow3f5kWcroynKvFSQDOqKBrm2a
+7Oyd469fnAoflqorFMOtk1t6y7yvEl0Zed2pdxV3G274w0P/COssgEOqnzk
js1dE8BgDw+BVxBk66RehhCAAa3fwia/3gqb1fUpDJ9fYiMYxvsiURLCFNpg
7yC+V9GjkpIVWFdSKJzcC4DpQTxhA2XTFsx1LOqS9u2ZeKKBApqpktqcXTVx
wABcQNOLIABm9x6jcRM6WWHp11BTFGENIQXOtWI94WJ/t4LbcnPdTuApNRbg
q6SY8VEOOBBjlxW6CwbqLjsCk+1bGGf6BjubSfn8+dpgznZLt3sH4L///T96
dWcU036ylCvbxRlNYBFEVN5t2mK7e/YV8yZrw6pt3Qv6pTjp7mTUUt/auSOC
DAYuftXObrqYpU5IQY2QfNJGpdLOBK7bvPfyAoyZ8pHuOl7ZVsnYv/CCAUgb
EY3JAkBSkReEyeaNem7rE8ZaaGBnj1zflHttgTob73plASPA7rsvRAde5RiI
s0F6hwG0jEruu8ICg/Co5c+9xwA+AXvmPgN50r/WYfk9Gtccje+P30JilFyt
wOCl0/lqWgGXKzudlrGdmkW5qqrl7xv88jPWcJGtB/j2sXJmlo5Ewq2vxPsH
EV//QEm62I98czNHbe/3siqd4mu932zMZGLVxgeWC7/cbsWSTH2irxRLE+Jt
8VoWV/hCIxqShUxJ3chHVjm+btw6MndHNEzPGMKD3nyyJqc+8MC+HhzNpyw2
xzNTOkxY06Oc0xvTme0e8GCA2Tk4RPv8Cydtvz5cU0/i5IxqGj4IhJg4MdNJ
Ki0sMPHrjNP4QUv0m2RQfuGCdDPzHTXlTdTlpcLTgj53sPDzC8U8J1i+By3B
ik0za2nAN4/9P1pAJ+MT/kcdsloS9O8UhLlR4dbWphMhc68nsnFXyCWlLK5/
vX7bgPsU+KyYX9qkfj64Pw7+B1CplWqYQgAA

-->

</rfc>

