<?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.35 (Ruby 3.2.11) -->


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

<!ENTITY RFC2119 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC3339 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3339.xml">
<!ENTITY RFC8174 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC8785 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8785.xml">
<!ENTITY RFC7235 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7235.xml">
]>


<rfc ipr="noModificationTrust200902" docName="draft-stripe-charge-00" category="info" consensus="true" submissionType="IETF">
  <front>
    <title abbrev="Stripe Charge">Stripe charge Intent for HTTP Payment Authentication</title>

    <author initials="B." surname="Ryan" fullname="Brendan Ryan">
      <organization>Tempo Labs</organization>
      <address>
        <email>brendan@tempo.xyz</email>
      </address>
    </author>
    <author initials="S." surname="Kaliski" fullname="Steve Kaliski">
      <organization>Stripe</organization>
      <address>
        <email>stevekaliski@stripe.com</email>
      </address>
    </author>

    <date year="2026" month="April" day="17"/>

    
    
    

    <abstract>


<?line 42?>

<t>This document defines the "charge" intent for the Stripe payment method
within the Payment HTTP Authentication Scheme <xref target="I-D.httpauth-payment"/>.
It specifies how clients and servers exchange one-time payments using
Stripe Payment Tokens (SPTs).</t>



    </abstract>



  </front>

  <middle>


<?line 49?>

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

<t>This specification defines the "charge" intent for use with the Stripe
payment method in the Payment HTTP Authentication Scheme
<xref target="I-D.httpauth-payment"/>. The charge intent enables one-time payments
where the server processes the payment immediately upon receiving a
Stripe Payment Token (SPT).</t>

<t>Stripe provides payment processing through SPTs, which are single-use
tokens that represent payment authorization. SPTs abstract away the
complexity of payment method details (cards, bank accounts, wallets)
and provide a unified interface for payment acceptance.</t>

<section anchor="stripe-charge-flow"><name>Stripe Charge Flow</name>

<t>The following diagram illustrates the Stripe charge payment flow:</t>

<figure><artwork><![CDATA[
   Client                          Server                          Stripe
      |                               |                               |
      |  (1) GET /resource            |                               |
      |---------------------------->  |                               |
      |                               |                               |
      |  (2) 402 Payment Required     |                               |
      |      intent="charge",         |                               |
      |      request=<base64url>      |                               |
      |<----------------------------- |                               |
      |                               |                               |
      |  (3) Collect payment method   |                               |
      |      via Stripe.js and        |                               |
      |      generate SPT             |                               |
      |      (may prompt for 3DS,     |                               |
      |      biometrics, etc.)        |                               |
      |------------------------------------------------------------>  |
      |                               |                               |
      |  (4) Authorization:           |                               |
      |      Payment <credential>     |                               |
      |---------------------------->  |                               |
      |                               |  (5) Create PaymentIntent     |
      |                               |      (Stripe API, using SPT)  |
      |                               |---------------------------->  |
      |                               |                               |
      |  (6) 200 OK                   |                               |
      |      Payment-Receipt:         |                               |
      |      <receipt>                |                               |
      |<----------------------------  |                               |
      |                               |                               |
]]></artwork></figure>

</section>
<section anchor="relationship-to-the-payment-scheme"><name>Relationship to the Payment Scheme</name>

<t>This document is a payment method intent specification as defined in
<xref target="I-D.httpauth-payment"/>. It defines the <spanx style="verb">request</spanx> and
<spanx style="verb">payload</spanx> structures for the <spanx style="verb">charge</spanx> intent of the <spanx style="verb">stripe</spanx> payment
method, along with verification and settlement procedures.</t>

</section>
</section>
<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="terminology"><name>Terminology</name>

<dl>
  <dt>Stripe Payment Token (SPT)</dt>
  <dd>
    <t>A single-use token (prefixed with <spanx style="verb">spt_</spanx>) that represents authorization
to charge a payment method. SPTs are created by clients using the
Stripe API and consumed by servers to process payments. Both the Client
and Server require a Stripe account. In the Stripe API, SPTs are
referenced as <spanx style="verb">shared_payment_granted_token</spanx> on PaymentIntent creation.
Learn more: https://docs.stripe.com/agentic-commerce/concepts/shared-payment-tokens</t>
  </dd>
  <dt>Business Network Profile</dt>
  <dd>
    <t>A Stripe profile is a business’s public identity on Stripe. With a Stripe profile,
businesses can find, verify, and connect with each other on Stripe.
Learn more: https://docs.stripe.com/get-started/account/profile</t>
  </dd>
  <dt>Payment Intent</dt>
  <dd>
    <t>A Stripe API object that tracks the lifecycle of a customer payment,
from creation through settlement. Not to be confused with the HTTP
Payment Auth protocol's "payment intent" parameter.
Learn more: https://docs.stripe.com/payments/payment-intents</t>
  </dd>
</dl>

</section>
<section anchor="intent-identifier"><name>Intent Identifier</name>

<t>This specification defines the following intent for the <spanx style="verb">stripe</spanx> payment
method:</t>

<figure><artwork><![CDATA[
charge
]]></artwork></figure>

<t>The intent identifier is case-sensitive and <bcp14>MUST</bcp14> be lowercase.</t>

</section>
<section anchor="intent-charge"><name>Intent: "charge"</name>

<t>A one-time payment of the specified amount. The server processes the
payment immediately upon receiving the SPT.</t>

<t><strong>Fulfillment mechanism:</strong></t>

<t><list style="numbers" type="1">
  <t><strong>Stripe Payment Token (SPT)</strong>: The payer creates an SPT using the
Stripe API, which the server uses to create a PaymentIntent via Stripe.</t>
</list></t>

</section>
<section anchor="request-schema"><name>Request Schema</name>

<t>The <spanx style="verb">request</spanx> parameter in the <spanx style="verb">WWW-Authenticate</spanx> challenge contains a
base64url-encoded JSON object with the following fields. The JSON <bcp14>MUST</bcp14>
be serialized using JSON Canonicalization Scheme (JCS) <xref target="RFC8785"/> before
base64url encoding, per <xref target="I-D.httpauth-payment"/>.</t>

<section anchor="shared-fields"><name>Shared Fields</name>

<texttable>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Required</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c><spanx style="verb">amount</spanx></c>
      <c>string</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>Amount in smallest currency unit (e.g., cents), encoded as a string</c>
      <c><spanx style="verb">currency</spanx></c>
      <c>string</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>Three-letter ISO currency code (e.g., <spanx style="verb">"usd"</spanx>)</c>
      <c><spanx style="verb">description</spanx></c>
      <c>string</c>
      <c><bcp14>OPTIONAL</bcp14></c>
      <c>Human-readable payment description</c>
      <c><spanx style="verb">externalId</spanx></c>
      <c>string</c>
      <c><bcp14>OPTIONAL</bcp14></c>
      <c>Merchant's identifier (e.g., order ID, cart ID)</c>
      <c><spanx style="verb">recipient</spanx></c>
      <c>string</c>
      <c><bcp14>OPTIONAL</bcp14></c>
      <c>Payment recipient identifier</c>
</texttable>

</section>
<section anchor="method-details"><name>Method Details</name>

<texttable>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Required</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c><spanx style="verb">methodDetails.networkId</spanx></c>
      <c>string</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>Stripe Business Network Profile ID</c>
      <c><spanx style="verb">methodDetails.paymentMethodTypes</spanx></c>
      <c>[]string</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>The list of payment method types that the seller can process.</c>
      <c><spanx style="verb">methodDetails.metadata</spanx></c>
      <c>object</c>
      <c><bcp14>OPTIONAL</bcp14></c>
      <c>Key-value pairs for additional context</c>
</texttable>

<t><strong>Example:</strong></t>

<figure><sourcecode type="json"><![CDATA[
{
  "amount": "5000",
  "currency": "usd",
  "description": "Premium API access for 1 month",
  "externalId": "order_12345",
  "methodDetails": {
    "networkId": "profile_1MqDcVKA5fEO2tZvKQm9g8Yj",
    "paymentMethodTypes": ["card", "link"]
  }
}
]]></sourcecode></figure>

<t>The client fulfills this by creating an SPT using Stripe:</t>

<figure><sourcecode type="javascript"><![CDATA[
const spt = await stripe.sharedPayment.issuedTokens.create({
  payment_method: 'pm_123',
  usage_limits: {
    currency: 'usd',
    max_amount: 5000,
    expires_at: Timestamp
  },
  seller_details: {
    networkId: 'profile_123'
  }
});
// Returns: { id: 'spt_1N...' }
]]></sourcecode></figure>

</section>
</section>
<section anchor="credential-schema"><name>Credential Schema</name>

<t>The Payment credential is a base64url-encoded JSON object containing
<spanx style="verb">challenge</spanx> and <spanx style="verb">payload</spanx> fields per
<xref target="I-D.httpauth-payment"/>. For Stripe charge, the <spanx style="verb">payload</spanx> object
contains the following fields:</t>

<texttable>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Required</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c><spanx style="verb">spt</spanx></c>
      <c>string</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>Stripe Payment Token ID (starts with <spanx style="verb">spt_</spanx>)</c>
      <c><spanx style="verb">externalId</spanx></c>
      <c>string</c>
      <c><bcp14>OPTIONAL</bcp14></c>
      <c>Client's reference ID</c>
</texttable>

<t><strong>Example:</strong></t>

<figure><sourcecode type="json"><![CDATA[
{
  "spt": "spt_1N4Zv32eZvKYlo2CPhVPkJlW",
  "externalId": "client_order_789"
}
]]></sourcecode></figure>

</section>
<section anchor="charge-verification"><name>Verification Procedure</name>

<t>Servers <bcp14>MUST</bcp14> verify Payment credentials for charge intent:</t>

<t><list style="numbers" type="1">
  <t>Verify the challenge ID matches the one issued</t>
  <t>Verify the challenge has not expired</t>
  <t>Extract the <spanx style="verb">spt</spanx> from the credential payload</t>
  <t>Verify the SPT has not been previously used (replay protection)</t>
  <t>Validate the SPT exists and is valid via Stripe API (optional pre-check)</t>
</list></t>

<t>Servers <bcp14>MUST</bcp14> complete challenge ID validation and expiry checks (steps 1-2)
before processing credential material (steps 3-5). This ensures basic
request validity is established before accessing payment tokens.</t>

<section anchor="challenge-binding"><name>Challenge Binding</name>

<t>Servers <bcp14>MUST</bcp14> verify that the credential corresponds to the exact challenge
issued. This includes validating:</t>

<t><list style="symbols">
  <t>Challenge ID</t>
  <t>Amount (if specified in request)</t>
  <t>Currency</t>
  <t>Business Network (if specified)</t>
  <t>Any custom metadata</t>
</list></t>

</section>
</section>
<section anchor="charge-settlement"><name>Settlement Procedure</name>

<t><strong>Synchronous settlement:</strong></t>

<t><list style="numbers" type="1">
  <t>Server receives and verifies the credential (<xref target="charge-verification"/>)</t>
  <t>Server creates a Stripe PaymentIntent with <spanx style="verb">confirm: true</spanx> and the
SPT as <spanx style="verb">shared_payment_granted_token</spanx>:</t>
</list></t>

<figure><sourcecode type="javascript"><![CDATA[
const paymentIntent = await stripe.paymentIntents.create({
  amount: Number(request.amount),
  currency: request.currency,
  shared_payment_granted_token: credential.spt,
  confirm: true,
  automatic_payment_methods: {
    enabled: true,
    allow_redirects: 'never'
  },
  metadata: { challenge_id: challenge.id }
}, {
  idempotencyKey: `${challenge.id}_${credential.spt}`
});
]]></sourcecode></figure>

<t><list style="numbers" type="1">
  <t>Server <bcp14>MUST</bcp14> verify the PaymentIntent <spanx style="verb">status</spanx> is <spanx style="verb">"succeeded"</spanx>
before returning 200 with <spanx style="verb">Payment-Receipt</spanx> header</t>
  <t>If the PaymentIntent fails or requires additional action, server
returns 402 with a new challenge</t>
</list></t>

<t><strong>Idempotency:</strong></t>

<t>Servers <bcp14>SHOULD</bcp14> include an idempotency key derived from the challenge ID
and SPT when creating PaymentIntents. This prevents duplicate charges
if the client retries a request.</t>

<t><strong>Settlement timing:</strong></t>

<t>Stripe processes fund transfers asynchronously. Servers <bcp14>SHOULD</bcp14> return
200 immediately after PaymentIntent confirmation (status <spanx style="verb">"succeeded"</spanx>),
even if final fund settlement to the merchant is pending.</t>

<section anchor="receipt-generation"><name>Receipt Generation</name>

<t>Upon successful settlement, servers <bcp14>MUST</bcp14> return a <spanx style="verb">Payment-Receipt</spanx> header
per <xref target="I-D.httpauth-payment"/>. Servers <bcp14>MUST NOT</bcp14> include a
<spanx style="verb">Payment-Receipt</spanx> header on error responses; failures are communicated via
HTTP status codes and Problem Details.</t>

<t>The receipt payload for Stripe charge:</t>

<texttable>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c><spanx style="verb">method</spanx></c>
      <c>string</c>
      <c><spanx style="verb">"stripe"</spanx></c>
      <c><spanx style="verb">reference</spanx></c>
      <c>string</c>
      <c>Stripe PaymentIntent ID (e.g., <spanx style="verb">"pi_1N4..."</spanx>)</c>
      <c><spanx style="verb">status</spanx></c>
      <c>string</c>
      <c><spanx style="verb">"success"</spanx></c>
      <c><spanx style="verb">timestamp</spanx></c>
      <c>string</c>
      <c><xref target="RFC3339"/> confirmation time</c>
      <c><spanx style="verb">externalId</spanx></c>
      <c>string</c>
      <c><bcp14>OPTIONAL</bcp14>. Echoed from credential payload</c>
</texttable>

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

<section anchor="spt-single-use-constraint"><name>SPT Single-Use Constraint</name>

<t>SPTs are single-use tokens. Stripe automatically prevents SPT reuse at
the API level, and idempotency keys (<xref target="charge-settlement"/>) prevent
duplicate PaymentIntent creation. Servers <bcp14>MUST</bcp14> enforce single-use
challenge IDs per <xref target="I-D.httpauth-payment"/> and <bcp14>SHOULD</bcp14>
use Stripe idempotency keys to prevent repeated charges. Servers <bcp14>MAY</bcp14>
additionally maintain a local replay cache of consumed challenge IDs.</t>

</section>
<section anchor="amount-verification"><name>Amount Verification</name>

<t>Clients <bcp14>MUST</bcp14> verify the payment amount in the challenge matches their
expectation before creating an SPT. The SPT itself does not encode the
amount, so clients must trust the challenge parameters.</t>

<t><strong>Verification checklist:</strong></t>

<t><list style="numbers" type="1">
  <t>Verify the <spanx style="verb">amount</spanx> matches the expected cost</t>
  <t>Verify the <spanx style="verb">currency</spanx> matches the expected currency</t>
  <t>Verify the <spanx style="verb">description</spanx> matches the expected service</t>
  <t>Verify the challenge hasn't expired</t>
  <t>Verify the server's identity (TLS certificate validation)</t>
</list></t>

</section>
<section anchor="pci-dss-compliance"><name>PCI DSS Compliance</name>

<t>Stripe's SPT model ensures clients never handle raw payment method details,
significantly reducing PCI DSS compliance scope.</t>

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

<t>All communication <bcp14>MUST</bcp14> use TLS 1.2 or higher. Stripe Payment Tokens <bcp14>MUST</bcp14>
only be transmitted over HTTPS connections.</t>

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

<section anchor="payment-intent-registration"><name>Payment Intent Registration</name>

<t>This specification registers the "charge" intent for the "stripe" payment
method in the Payment Intent Registry established by
<xref target="I-D.httpauth-payment"/>:</t>

<t><list style="symbols">
  <t><strong>Intent</strong>: charge</t>
  <t><strong>Method</strong>: stripe</t>
  <t><strong>Specification</strong>: [this document]</t>
</list></t>

<t>Contact: Stripe (<eref target="mailto:stevekaliski@stripe.com">stevekaliski@stripe.com</eref>) and Tempo Labs (<eref target="mailto:brendan@tempo.xyz">brendan@tempo.xyz</eref>)</t>

</section>
</section>


  </middle>

  <back>


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

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

&RFC2119;
&RFC3339;
&RFC8174;
&RFC8785;
&RFC7235;
<reference anchor="I-D.httpauth-payment" target="https://datatracker.ietf.org/doc/draft-ryan-httpauth-payment/">
  <front>
    <title>The 'Payment' HTTP Authentication Scheme</title>
    <author initials="J." surname="Moxey" fullname="Jake Moxey">
      <organization></organization>
    </author>
    <date year="2026" month="January"/>
  </front>
</reference>


    </references>

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

<reference anchor="STRIPE-API" target="https://stripe.com/docs/api">
  <front>
    <title>Stripe API Reference</title>
    <author >
      <organization>Stripe, Inc.</organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>


    </references>

</references>


<?line 382?>

<section anchor="abnf-collected"><name>ABNF Collected</name>

<figure><sourcecode type="abnf"><![CDATA[
stripe-charge-challenge = "Payment" 1*SP
  "id=" quoted-string ","
  "realm=" quoted-string ","
  "method=" DQUOTE "stripe" DQUOTE ","
  "intent=" DQUOTE "charge" DQUOTE ","
  "request=" base64url-nopad

stripe-charge-credential = "Payment" 1*SP base64url-nopad

; Base64url encoding without padding per RFC 4648 Section 5
base64url-nopad = 1*( ALPHA / DIGIT / "-" / "_" )
]]></sourcecode></figure>

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

<section anchor="charge-example-http-transport"><name>Charge Example (HTTP Transport)</name>

<t><strong>Step 1: Client requests resource</strong></t>

<figure><sourcecode type="http"><![CDATA[
GET /api/generate HTTP/1.1
Host: api.example.com
]]></sourcecode></figure>

<t><strong>Step 2: Server issues payment challenge</strong></t>

<figure><sourcecode type="http"><![CDATA[
HTTP/1.1 402 Payment Required
WWW-Authenticate: Payment id="ch_1a2b3c4d5e",
  realm="api.example.com",
  method="stripe",
  intent="charge",
  request="eyJhbW91bnQiOiI1MDAwIiwiY3VycmVuY3kiOiJ1c2QiLCJkZXNjcmlwdGlvbiI6IkFJIGdlbmVyYXRpb24ifQ"
Cache-Control: no-store
Content-Type: application/json

{
  "type": "https://paymentauth.org/problems/payment-required",
  "title": "Payment Required",
  "status": 402,
  "detail": "This resource requires payment"
}
]]></sourcecode></figure>

<t>Decoded request:
~~~ json
{
  "amount": "5000",
  "currency": "usd",
  "description": "AI generation"
}
~~~</t>

<t><strong>Step 3: Client creates SPT and submits credential</strong></t>

<figure><sourcecode type="http"><![CDATA[
GET /api/generate HTTP/1.1
Host: api.example.com
Authorization: Payment eyJjaGFsbGVuZ2UiOnsiaWQiOiJjaF8xYTJiM2M0ZDVlIiwicmVhbG0iOiJhcGkuZXhhbXBsZS5jb20iLCJtZXRob2QiOiJzdHJpcGUiLCJpbnRlbnQiOiJjaGFyZ2UiLCJyZXF1ZXN0IjoiZXlKaGJXOTFiblFpT2lJMU1EQXdJaXdpWTNWeWNtVnVZM2tpT2lKMWMyUWlMQ0prWlhOamNtbHdkR2x2YmlJNklrRkpJR2RsYm1WeVlYUnBiMjRpZlEiLCJleHBpcmVzIjoiMjAyNS0wMS0xNVQxMjowNTowMFoifSwicGF5bG9hZCI6eyJzcHQiOiJzcHRfMU40WnYzMmVadktZbG8yQ1BoVlBrSmxXIn19

]]></sourcecode></figure>

<t>Decoded credential:
~~~ json
{
  "challenge": {
    "id": "ch_1a2b3c4d5e",
    "realm": "api.example.com",
    "method": "stripe",
    "intent": "charge",
    "request": "eyJhbW91bnQiOiI1MDAwIiwiY3VycmVuY3kiOiJ1c2QiLCJkZXNjcmlwdGlvbiI6IkFJIGdlbmVyYXRpb24ifQ",
    "expires": "2025-01-15T12:05:00Z"
  },
  "payload": {
    "spt": "spt_1N4Zv32eZvKYlo2CPhVPkJlW"
  }
}
~~~</t>

<t><strong>Step 4: Server processes payment and returns resource</strong></t>

<figure><sourcecode type="http"><![CDATA[
HTTP/1.1 200 OK
Payment-Receipt: eyJtZXRob2QiOiJzdHJpcGUiLCJyZWZlcmVuY2UiOiJwaV8xTjRadjMyZVp2S1lsbzJDUGhWUGtKbFciLCJzdGF0dXMiOiJzdWNjZXNzIiwidGltZXN0YW1wIjoiMjAyNS0wMS0xNVQxMjowNDozMloifQ
Cache-Control: private
Content-Type: text/plain

Here is your generated content...
]]></sourcecode></figure>

<t>Decoded receipt:
~~~ json
{
  "method": "stripe",
  "reference": "pi_1N4Zv32eZvKYlo2CPhVPkJlW",
  "status": "success",
  "timestamp": "2025-01-15T12:04:32Z"
}
~~~</t>

</section>
</section>
<section anchor="acknowledgements"><name>Acknowledgements</name>

<t>The authors thank the Tempo community for their feedback on this
specification.</t>

</section>


  </back>

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

-->

</rfc>

