<?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.5) -->


<!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="July" day="03"/>

    
    
    

    <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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
JffphVFWQOh19r/tiYzK1UsAAA==

-->

</rfc>

