<?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.39 (Ruby 4.0.6) -->


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

    
    
    

    <abstract>


<?line 47?>

<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
Shared Payment Tokens (SPTs).</t>



    </abstract>



  </front>

  <middle>


<?line 54?>

<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
Shared 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>Shared 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.
See <xref target="STRIPE-SPT"/>.</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>Shared 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>Shared 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>. The server <bcp14>MAY</bcp14> include
Stripe Connect settlement parameters as described in
<xref target="stripe-connect-settlement"/>:</t>
</list></t>

<figure><sourcecode type="javascript"><![CDATA[
const stripeDetails = request.methodDetails || {};
const settlementPolicy = getServerSettlementPolicy(challenge, request);

const paymentIntentParams = {
  amount: Number(request.amount),
  currency: request.currency,
  shared_payment_granted_token: credential.spt,
  confirm: true,
  automatic_payment_methods: {
    enabled: true,
    allow_redirects: 'never'
  },
  metadata: {
    ...(stripeDetails.metadata || {}),
    challenge_id: challenge.id
  }
};

if (settlementPolicy.applicationFeeAmount !== undefined) {
  paymentIntentParams.application_fee_amount =
    settlementPolicy.applicationFeeAmount;
}

if (settlementPolicy.onBehalfOf !== undefined) {
  paymentIntentParams.on_behalf_of = settlementPolicy.onBehalfOf;
}

if (settlementPolicy.transferData !== undefined) {
  paymentIntentParams.transfer_data = {
    destination: settlementPolicy.transferData.destination
  };

  if (settlementPolicy.transferData.amount !== undefined) {
    paymentIntentParams.transfer_data.amount =
      settlementPolicy.transferData.amount;
  }
}

if (settlementPolicy.transferGroup !== undefined) {
  paymentIntentParams.transfer_group = settlementPolicy.transferGroup;
}

const paymentIntentOptions = {
  idempotencyKey: `${challenge.id}_${credential.spt}`
};

if (settlementPolicy.stripeAccount !== undefined) {
  paymentIntentOptions.stripeAccount = settlementPolicy.stripeAccount;
}

const paymentIntent = await stripe.paymentIntents.create(
  paymentIntentParams,
  paymentIntentOptions
);
]]></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="stripe-connect-settlement"><name>Stripe Connect Settlement</name>

<t>Servers that use Stripe Connect <bcp14>MAY</bcp14> apply Connect parameters when
creating the Stripe PaymentIntent. These parameters are settlement
policy inputs controlled by the server, not payment request fields
that clients need in order to create an SPT.</t>

<t>The following Stripe PaymentIntent create parameters are compatible
with this specification:</t>

<texttable>
      <ttcol align='left'>Stripe parameter</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c><spanx style="verb">Stripe-Account</spanx> header or SDK <spanx style="verb">stripeAccount</spanx> option</c>
      <c>Connected account used as the Stripe account context for the request</c>
      <c><spanx style="verb">application_fee_amount</spanx></c>
      <c>Platform application fee amount in the smallest currency unit</c>
      <c><spanx style="verb">on_behalf_of</spanx></c>
      <c>Connected account used as the business of record</c>
      <c><spanx style="verb">transfer_data[destination]</spanx></c>
      <c>Connected account that receives transferred funds</c>
      <c><spanx style="verb">transfer_data[amount]</spanx></c>
      <c>Amount transferred to <spanx style="verb">transfer_data[destination]</spanx></c>
      <c><spanx style="verb">transfer_group</spanx></c>
      <c>Reconciliation token linking related charges and transfers</c>
</texttable>

<t>Servers <bcp14>SHOULD</bcp14> derive Connect settlement parameters from server-side
merchant configuration, platform policy, order state, or equivalent
trusted state. Servers <bcp14>MUST NOT</bcp14> include Connect settlement parameters
in the MPP challenge.</t>

</section>
<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 usage limits constrain the
currency, maximum amount, and expiration window granted to the seller,
but those limits are derived from the challenge parameters the client
accepts.</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="stripe-connect-parameter-integrity"><name>Stripe Connect Parameter Integrity</name>

<t>Servers that use Stripe Connect settlement parameters <bcp14>MUST</bcp14> validate
those parameters before creating the PaymentIntent:</t>

<t><list style="symbols">
  <t>Connected account identifiers, including <spanx style="verb">stripeAccount</spanx>,
<spanx style="verb">on_behalf_of</spanx>, and <spanx style="verb">transfer_data[destination]</spanx>, <bcp14>MUST</bcp14> refer to
connected accounts that the server is authorized to use for the
current request.</t>
  <t><spanx style="verb">transfer_data[destination]</spanx> <bcp14>MUST</bcp14> be present when <spanx style="verb">transfer_data</spanx>
is present.</t>
  <t><spanx style="verb">application_fee_amount</spanx>, when present, <bcp14>MUST</bcp14> be a non-negative
integer no greater than the PaymentIntent <spanx style="verb">amount</spanx>.</t>
  <t><spanx style="verb">transfer_data[amount]</spanx>, when present, <bcp14>MUST</bcp14> be a non-negative
integer no greater than the PaymentIntent <spanx style="verb">amount</spanx>.</t>
  <t><spanx style="verb">transfer_group</spanx>, when present, <bcp14>MUST</bcp14> be derived from an order,
invoice, request, or similar reconciliation identifier and <bcp14>MUST NOT</bcp14>
be treated as secret.</t>
</list></t>

<t>Servers <bcp14>MUST NOT</bcp14> accept Connect settlement parameters from clients
unless an explicit trust boundary authorizes that client to control
settlement routing or platform fees.</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. Shared 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>
<reference anchor="STRIPE-SPT" target="https://docs.stripe.com/agentic-commerce/concepts/shared-payment-tokens">
  <front>
    <title>Shared payment tokens</title>
    <author >
      <organization>Stripe, Inc.</organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>


    </references>

</references>


<?line 479?>

<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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
pxdGWQGhN9j/Arj4/QfVSwAA

-->

</rfc>

