<?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 RFC3629 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3629.xml">
<!ENTITY RFC4648 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4648.xml">
<!ENTITY RFC5234 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5234.xml">
<!ENTITY RFC5246 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5246.xml">
<!ENTITY RFC8126 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8126.xml">
<!ENTITY RFC8174 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC8259 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8259.xml">
<!ENTITY RFC8446 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8446.xml">
<!ENTITY RFC8785 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8785.xml">
<!ENTITY RFC9110 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9110.xml">
<!ENTITY RFC9111 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9111.xml">
<!ENTITY RFC9457 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9457.xml">
<!ENTITY RFC9530 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9530.xml">
]>


<rfc ipr="noModificationTrust200902" docName="draft-httpauth-payment-01" category="std" consensus="true" submissionType="IETF">
  <front>
    <title abbrev="Payment Auth Scheme">The "Payment" HTTP Authentication Scheme</title>

    <author initials="B." surname="Ryan" fullname="Brendan Ryan">
      <organization>Tempo Labs</organization>
      <address>
        <postal>
          <country>US</country>
        </postal>
        <email>brendan@tempo.xyz</email>
      </address>
    </author>
    <author initials="J." surname="Moxey" fullname="Jake Moxey">
      <organization>Tempo Labs</organization>
      <address>
        <postal>
          <country>US</country>
        </postal>
        <email>jake@tempo.xyz</email>
      </address>
    </author>
    <author initials="T." surname="Meagher" fullname="Tom Meagher">
      <organization>Tempo Labs</organization>
      <address>
        <postal>
          <country>US</country>
        </postal>
        <email>tom@tempo.xyz</email>
      </address>
    </author>
    <author initials="J." surname="Weinstein" fullname="Jeff Weinstein">
      <organization>Stripe</organization>
      <address>
        <postal>
          <country>US</country>
        </postal>
        <email>jweinstein@stripe.com</email>
      </address>
    </author>
    <author initials="S." surname="Kaliski" fullname="Steve Kaliski">
      <organization>Stripe</organization>
      <address>
        <postal>
          <country>US</country>
        </postal>
        <email>stevekaliski@stripe.com</email>
      </address>
    </author>

    <date year="2026" month="October" day="15"/>

    
    
    

    <abstract>


<?line 68?>

<t>This document defines the "Payment" HTTP authentication scheme, enabling
HTTP resources to require a payment challenge to be fulfilled before access.
The scheme extends HTTP Authentication, using the HTTP 402 "Payment Required"
status code.</t>

<t>The protocol is payment-method agnostic, supporting any payment network
or currency through registered payment method identifiers. Specific
payment methods are defined in separate payment method specifications.</t>



    </abstract>



  </front>

  <middle>


<?line 79?>

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

<t>HTTP 402 "Payment Required" was reserved in HTTP/one-point-one <xref target="RFC9110"/> but never
standardized for common use. This specification defines the "Payment"
authentication scheme that gives 402 its semantics, enabling resources to
require a payment challenge to be fulfilled before access.</t>

<section anchor="relationship-to-payment-method-specifications"><name>Relationship to Payment Method Specifications</name>

<t>This specification defines the abstract protocol framework. Concrete
payment methods are defined in payment method specifications that:</t>

<t><list style="symbols">
  <t>Register a payment method identifier</t>
  <t>Define the <spanx style="verb">request</spanx> schema for that method</t>
  <t>Define the <spanx style="verb">payload</spanx> schema for that method</t>
  <t>Specify verification and settlement procedures</t>
</list></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>Payment Challenge</dt>
  <dd>
    <t>A <spanx style="verb">WWW-Authenticate</spanx> header with scheme "Payment" indicating the
payment requirements for accessing a resource.</t>
  </dd>
  <dt>Payment Credential</dt>
  <dd>
    <t>An HTTP header field with scheme "Payment" containing payment
authorization data. The default field name is <spanx style="verb">Authorization</spanx>. A
Payment challenge <bcp14>MAY</bcp14> select <spanx style="verb">Payment-Authorization</spanx> with the
<spanx style="verb">header</spanx> parameter (see <xref target="credential-header"/>).</t>
  </dd>
  <dt>Payment Method</dt>
  <dd>
    <t>A mechanism for transferring value, identified by a registered
identifier.</t>
  </dd>
  <dt>Payment Intent</dt>
  <dd>
    <t>The type of payment request, identified by a registered value in the
IANA "HTTP Payment Intents" registry. Intents are defined by separate
intent specifications.</t>
  </dd>
  <dt>Request</dt>
  <dd>
    <t>Method-specific data in the challenge enabling payment completion.
Encoded as base64url JSON in the <spanx style="verb">request</spanx> parameter.</t>
  </dd>
  <dt>Payload</dt>
  <dd>
    <t>Method-specific data in the credential proving payment.</t>
  </dd>
</dl>

</section>
<section anchor="protocol-overview"><name>Protocol Overview</name>

<section anchor="request-flow"><name>Request Flow</name>

<figure><artwork><![CDATA[
   Client                                            Server
      │                                                 │
      │  (1) GET /resource                              │
      ├────────────────────────────────────────────────>│
      │                                                 │
      │  (2) 402 Payment Required                       │
      │      WWW-Authenticate: Payment id="..",         │
      │        method="..", intent="..", request=".."   │
      │<────────────────────────────────────────────────┤
      │                                                 │
      │  (3) Client fulfills payment challenge          │
      │      (signs transaction, pays invoice, etc.)    │
      │                                                 │
      │  (4) GET /resource                              │
      │      Authorization: Payment <credential>        │
      ├────────────────────────────────────────────────>│
      │                                                 │
      │  (5) Server verifies and settles                │
      │                                                 │
      │  (6) 200 OK                                     │
      │      Payment-Receipt: <receipt>                 │
      │<────────────────────────────────────────────────┤
      │                                                 │
]]></artwork></figure>

<t>Step (4) uses the default <spanx style="verb">Authorization</spanx> header because the challenge
did not include a specific header field.</t>

</section>
<section anchor="response-status-codes"><name>Status Codes</name>

<t>The following table defines how servers <bcp14>MUST</bcp14> respond to payment-related
conditions.</t>

<texttable>
      <ttcol align='left'>Condition</ttcol>
      <ttcol align='left'>Status</ttcol>
      <ttcol align='left'>Response</ttcol>
      <c>Resource requires payment, no credential provided</c>
      <c>402</c>
      <c>Fresh challenge in <spanx style="verb">WWW-Authenticate</spanx></c>
      <c>Malformed credential (invalid base64url, bad JSON)</c>
      <c>402</c>
      <c>Fresh challenge + <spanx style="verb">malformed-credential</spanx> problem</c>
      <c>Unknown or already-used challenge <spanx style="verb">id</spanx></c>
      <c>402</c>
      <c>Fresh challenge + <spanx style="verb">invalid-challenge</spanx> problem</c>
      <c>Expired challenge <spanx style="verb">id</spanx></c>
      <c>402</c>
      <c>Fresh challenge + <spanx style="verb">payment-expired</spanx> problem</c>
      <c>Payment proof invalid or verification failed</c>
      <c>402</c>
      <c>Fresh challenge + <spanx style="verb">verification-failed</spanx> problem</c>
      <c>Payment verified, access granted</c>
      <c>200</c>
      <c>Resource + optional <spanx style="verb">Payment-Receipt</spanx></c>
      <c>Payment verified, but policy denies access</c>
      <c>403</c>
      <c>No challenge (payment was valid)</c>
</texttable>

<t>Servers <bcp14>MUST</bcp14> return 402 with a <spanx style="verb">WWW-Authenticate: Payment</spanx> header when
payment is required or when a payment credential fails validation
(see <xref target="usage-of-402"/> for details).</t>

<t>Error details are provided in the response body using Problem Details
<xref target="RFC9457"/> rather than in the <spanx style="verb">WWW-Authenticate</spanx> header parameters.</t>

</section>
<section anchor="relationship-to-401-unauthorized"><name>Relationship to 401 Unauthorized</name>

<t>This specification uses 402 (Payment Required) consistently for all
payment-related challenges, including failed credential validation.
This diverges from the traditional 401 pattern used by other HTTP
authentication schemes. The distinction is intentional:</t>

<t><list style="symbols">
  <t><strong>402</strong> indicates a payment barrier (initial challenge or retry needed)</t>
  <t><strong>401</strong> is reserved for authentication failures unrelated to payment</t>
  <t><strong>403</strong> indicates the payment succeeded but access is denied by policy</t>
</list></t>

<t>This design ensures clients can distinguish payment requirements from
other authentication schemes that use 401.</t>

</section>
<section anchor="usage-of-402"><name>Usage of 402 Payment Required</name>

<section anchor="when-to-return-402"><name>When to Return 402</name>

<t>Servers <bcp14>SHOULD</bcp14> return 402 when:</t>

<t><list style="symbols">
  <t>The resource requires payment as a precondition for access</t>
  <t>The server can provide a Payment challenge that the client may fulfill</t>
  <t>Payment is the primary barrier to access (not authentication or authorization)</t>
</list></t>

<t>Servers <bcp14>MAY</bcp14> return 402 when:</t>

<t><list style="symbols">
  <t>Offering optional paid features or premium content</t>
  <t>Indicating that a previously-paid resource requires additional payment</t>
  <t>The payment requirement applies to a subset of request methods</t>
</list></t>

</section>
<section anchor="when-not-to-return-402"><name>When NOT to Return 402</name>

<t>Servers <bcp14>SHOULD NOT</bcp14> return 402 when:</t>

<t><list style="symbols">
  <t>The client lacks authentication credentials (use 401)</t>
  <t>The client is authenticated but lacks authorization (use 403)</t>
  <t>The resource does not exist (use 404)</t>
  <t>No Payment challenge can be constructed for the request</t>
</list></t>

<t>Servers <bcp14>MUST NOT</bcp14> return 402 without including a <spanx style="verb">WWW-Authenticate</spanx> header
containing at least one Payment challenge.</t>

</section>
<section anchor="interaction-with-other-authentication-schemes"><name>Interaction with Other Authentication Schemes</name>

<t>When a resource requires both authentication and payment, servers <bcp14>SHOULD</bcp14>:</t>

<t><list style="numbers" type="1">
  <t>First verify authentication credentials</t>
  <t>Return 401 if authentication fails</t>
  <t>Return 402 with a Payment challenge only after successful authentication</t>
</list></t>

<t>This ordering prevents information leakage about payment requirements to
unauthenticated clients.</t>

<t>When authentication succeeds but the resource also requires payment, the
server <bcp14>MAY</bcp14> include the <spanx style="verb">header</spanx> parameter in its Payment challenge to
select <spanx style="verb">Payment-Authorization</spanx> instead of the default <spanx style="verb">Authorization</spanx>
for the Payment credential (see <xref target="credential-header"/>). A challenge that
omits <spanx style="verb">header</spanx> defaults to <spanx style="verb">Authorization</spanx>. A challenge that includes
<spanx style="verb">header="Payment-Authorization"</spanx> requires the client to send the Payment
credential in the <spanx style="verb">Payment-Authorization</spanx> header. This allows the client
to retain its ordinary authentication credential in <spanx style="verb">Authorization</spanx>.</t>

<t>For example, the server can issue:</t>

<figure><sourcecode type="http"><![CDATA[
HTTP/1.1 402 Payment Required
WWW-Authenticate: Payment id="x7Tg2pLqR9mKvNwY3hBcZa",
    realm="api.example.com",
    method="example",
    intent="charge",
    header="Payment-Authorization",
    request="eyJhbW91bnQiOiIxMDAwIiwiY3VycmVuY3kiOiJVU0QiLCJyZWNpcGllbnQiOiJhY2N0XzEyMyJ9"
]]></sourcecode></figure>

<t>The subsequent request can then carry both a Bearer credential and a
Payment credential:</t>

<figure><sourcecode type="http"><![CDATA[
GET /resource HTTP/1.1
Host: api.example.com
Authorization: Bearer mF_9.B5f-4.1JqM
Payment-Authorization: Payment eyJjaGFsbGVuZ2UiOiJ...
]]></sourcecode></figure>

</section>
</section>
</section>
<section anchor="the-payment-authentication-scheme"><name>The Payment Authentication Scheme</name>

<section anchor="challenge-www-authenticate"><name>Challenge (WWW-Authenticate)</name>

<t>The Payment challenge is sent in the <spanx style="verb">WWW-Authenticate</spanx> header per
<xref target="RFC9110"/>. The challenge uses the auth-param syntax defined in Section 11
of <xref target="RFC9110"/>:</t>

<figure><sourcecode type="abnf"><![CDATA[
challenge       = "Payment" [ 1*SP auth-params ]
auth-params     = auth-param *( OWS "," OWS auth-param )
auth-param      = token BWS "=" BWS ( token / quoted-string )
]]></sourcecode></figure>

<section anchor="required-parameters"><name>Required Parameters</name>

<t><strong><spanx style="verb">id</spanx></strong>: Unique challenge identifier. This parameter is <bcp14>REQUIRED</bcp14> and its
  value <bcp14>MUST</bcp14> be non-empty after <spanx style="verb">auth-param</spanx> parsing and <spanx style="verb">quoted-string</spanx>
  unescaping. Servers <bcp14>MUST NOT</bcp14> emit a Payment challenge with a missing or
  empty <spanx style="verb">id</spanx>; clients and parsers <bcp14>MUST</bcp14> reject challenges whose <spanx style="verb">id</spanx> is
  missing or empty. Servers <bcp14>MUST</bcp14> bind this value to the challenge
  parameters as described in <xref target="challenge-binding"/>. Clients <bcp14>MUST</bcp14> include
  this value unchanged in the credential.</t>

<t><strong><spanx style="verb">realm</spanx></strong>: Protection space identifier per <xref target="RFC9110"/>. Servers <bcp14>MUST</bcp14>
  include this parameter to define the scope of the payment requirement.</t>

<t><strong><spanx style="verb">method</spanx></strong>: Payment method identifier (<xref target="payment-methods"/>). <bcp14>MUST</bcp14> be a lowercase
  ASCII string.</t>

<t><strong><spanx style="verb">intent</spanx></strong>: Payment intent type (<xref target="payment-intents"/>). The value <bcp14>MUST</bcp14> be a
  registered entry in the IANA "HTTP Payment Intents" registry.</t>

<t><strong><spanx style="verb">request</spanx></strong>: Base64url-encoded <xref target="RFC4648"/> JSON <xref target="RFC8259"/> containing
  payment-method-specific data needed to complete payment. Structure is
  defined by the payment method specification. Padding characters ("=")
  <bcp14>MUST NOT</bcp14> be included. The JSON <bcp14>MUST</bcp14> be serialized using JSON
  Canonicalization Scheme (JCS) <xref target="RFC8785"/> to ensure deterministic
  encoding across implementations. This is critical for challenge binding
  (<xref target="challenge-binding"/>): since the HMAC input includes the base64url-encoded
  request as it appears on the wire, different JSON serialization orders
  would produce different HMAC values, breaking cross-implementation
  interoperability.</t>

</section>
<section anchor="optional-parameters"><name>Optional Parameters</name>

<t><strong><spanx style="verb">digest</spanx></strong>: Content digest of the request body, formatted per <xref target="RFC9530"></xref>.
  Servers <bcp14>SHOULD</bcp14> include this parameter when the payment challenge applies
  to a request with a body (e.g., POST, PUT, PATCH). When present, clients
  <bcp14>MUST</bcp14> submit the credential with a request body whose digest matches this
  value. See <xref target="request-body-digest-binding"/> for body binding
  requirements.</t>

<t><strong><spanx style="verb">expires</spanx></strong>: Timestamp indicating when this challenge expires, formatted
  as an <xref target="RFC3339"/> date-time string (e.g., <spanx style="verb">"2025-01-15T12:00:00Z"</spanx>).
  Servers <bcp14>SHOULD</bcp14> include this parameter. Clients <bcp14>MUST NOT</bcp14> submit
  credentials for expired challenges.</t>

<t><strong><spanx style="verb">description</spanx></strong>: Human-readable description of the resource or payment
  purpose. This parameter is for display purposes only and <bcp14>MUST NOT</bcp14> be
  relied upon for payment verification (see <xref target="amount-verification"/>).</t>

<t><strong><spanx style="verb">header</spanx></strong>: Selects the HTTP field for the Payment credential, as
  specified in <xref target="credential-header"/>. When present, the value <bcp14>MUST</bcp14> be
  <spanx style="verb">Payment-Authorization</spanx> to avoid collision with other HTTP fields.
  The default field is
  <spanx style="verb">Authorization</spanx>. A challenge that omits this parameter selects that
  default: the client <bcp14>MUST</bcp14> send the credential in the <spanx style="verb">Authorization</spanx>
  header. A challenge that includes this parameter selects
  <spanx style="verb">Payment-Authorization</spanx>; the client <bcp14>MUST</bcp14> send the credential in that
  field. Clients <bcp14>MUST NOT</bcp14> send the credential in a different field than
  the one selected by the challenge. Clients that do not support
  <spanx style="verb">Payment-Authorization</spanx> <bcp14>MUST NOT</bcp14> send a Payment credential for that
  challenge. Servers <bcp14>MUST</bcp14> include this parameter in the challenge
  binding when it is present. Clients <bcp14>MUST</bcp14> echo it unchanged in the
  credential's <spanx style="verb">challenge</spanx> object. <spanx style="verb">Payment-Authorization</spanx> is
  <bcp14>RECOMMENDED</bcp14> when a resource needs to preserve <spanx style="verb">Authorization</spanx> for
  ordinary authentication.</t>

<t><strong><spanx style="verb">opaque</spanx></strong>: Base64url-encoded <xref target="RFC4648"/> JSON <xref target="RFC8259"/> containing
  server-defined correlation data (e.g., a payment processor intent
  identifier). The value <bcp14>MUST</bcp14> be a JSON object whose values are strings
  (a flat string-to-string map). Clients <bcp14>MUST</bcp14> return this parameter
  unchanged in the credential and <bcp14>MUST NOT</bcp14> modify it. The JSON <bcp14>MUST</bcp14> be
  serialized using JSON Canonicalization Scheme (JCS) <xref target="RFC8785"/> before
  base64url encoding. Servers <bcp14>MUST</bcp14> include <spanx style="verb">opaque</spanx> in the challenge
  binding (<xref target="challenge-binding"/>) to ensure tamper protection.</t>

<t>Unknown parameters <bcp14>MUST</bcp14> be ignored by clients.</t>

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

<t>Servers <bcp14>MUST</bcp14> bind the challenge <spanx style="verb">id</spanx> to <spanx style="verb">realm</spanx>, <spanx style="verb">method</spanx>, <spanx style="verb">intent</spanx>, and
<spanx style="verb">request</spanx>, and to <spanx style="verb">expires</spanx>, <spanx style="verb">digest</spanx>, <spanx style="verb">opaque</spanx>, and <spanx style="verb">header</spanx> when present. This
prevents request integrity attacks where a client signs or submits a
payment different from what the server intended. The <spanx style="verb">description</spanx>
parameter is excluded because it is not used for payment verification.</t>

<t>Servers <bcp14>MUST</bcp14> verify the binding when processing a credential and <bcp14>MUST</bcp14>
reject a credential whose echoed challenge parameters do not match the
expected binding.</t>

<t>The binding mechanism is implementation-defined. Servers <bcp14>MAY</bcp14> use stateful
storage (e.g., database lookup) or stateless verification (e.g., HMAC,
authenticated encryption) to validate the binding.</t>

<section anchor="recommended-hmac-sha256-binding"><name>Recommended: HMAC-SHA256 Binding</name>

<t>Servers using HMAC-SHA256 for stateless challenge binding <bcp14>SHOULD</bcp14> compute
the challenge <spanx style="verb">id</spanx> as follows:</t>

<t>The HMAC input consists of six fixed prefix slots, an optional <spanx style="verb">header</spanx>
slot, and a final <spanx style="verb">opaque</spanx> slot. Required fields supply their string value;
optional fields use an empty string (<spanx style="verb">""</spanx>) when absent. The <spanx style="verb">header</spanx> slot
is omitted when <spanx style="verb">header</spanx> is absent. When <spanx style="verb">header</spanx> is present, its slot is
inserted immediately before <spanx style="verb">opaque</spanx>. Thus the two layouts are:</t>

<figure><artwork><![CDATA[
realm|method|intent|request|expires|digest|opaque
realm|method|intent|request|expires|digest|header|opaque
]]></artwork></figure>

<t>This preserves the HMAC input for challenges that predate <spanx style="verb">header</spanx>. The
slots are:</t>

<texttable>
      <ttcol align='left'>Slot</ttcol>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Value</ttcol>
      <c>0</c>
      <c><spanx style="verb">realm</spanx></c>
      <c>Required. String value.</c>
      <c>1</c>
      <c><spanx style="verb">method</spanx></c>
      <c>Required. String value.</c>
      <c>2</c>
      <c><spanx style="verb">intent</spanx></c>
      <c>Required. String value.</c>
      <c>3</c>
      <c><spanx style="verb">request</spanx></c>
      <c>Required. JCS-serialized per <xref target="RFC8785"/>, then base64url-encoded.</c>
      <c>4</c>
      <c><spanx style="verb">expires</spanx></c>
      <c>Optional. String value if present; empty string if absent.</c>
      <c>5</c>
      <c><spanx style="verb">digest</spanx></c>
      <c>Optional. String value if present; empty string if absent.</c>
      <c>6</c>
      <c><spanx style="verb">header</spanx></c>
      <c>Present only when the <spanx style="verb">header</spanx> parameter is present. The value <spanx style="verb">Payment-Authorization</spanx>.</c>
      <c>last</c>
      <c><spanx style="verb">opaque</spanx></c>
      <c>Optional. JCS-serialized per <xref target="RFC8785"/>, then base64url-encoded if present; empty string if absent.</c>
</texttable>

<t>The computation proceeds as follows:</t>

<t><list style="numbers" type="1">
  <t>Populate the six prefix slots as described above. If <spanx style="verb">header</spanx> is
present, append its value. Append the <spanx style="verb">opaque</spanx> value last, using an empty
string when it is absent.</t>
  <t>Join the populated slots with the pipe character (<spanx style="verb">|</spanx>) as delimiter.
Every slot other than <spanx style="verb">header</spanx> is always present in the joined string;
absent optional fields appear as empty segments (e.g.,
<spanx style="verb">...|expires||opaque_b64url</spanx> when <spanx style="verb">digest</spanx> is absent and <spanx style="verb">header</spanx> is
omitted). The <spanx style="verb">header</spanx> slot is omitted entirely when the parameter is
absent.</t>
  <t>Compute HMAC-SHA256 over the resulting string using a server secret.</t>
  <t>Encode the HMAC output as base64url without padding (<xref target="RFC4648"/>
Section 5).</t>
</list></t>

<figure><artwork><![CDATA[
values = [
    realm,
    method,
    intent,
    request_b64url,
    expires or "",
    digest or "",
]
if header is present:
    values.append(header)
values.append(opaque_b64url or "")
input = "|".join(values)
id = base64url(HMAC-SHA256(server_secret, input))
]]></artwork></figure>

<t>The base optional fields use fixed positional slots with empty strings when
absent, rather than being omitted. This avoids ambiguity between
combinations of optional fields — for example, <spanx style="verb">(expires set, no digest)</spanx>
and <spanx style="verb">(no expires, digest set)</spanx> produce distinct inputs. Clients echo the
challenge <spanx style="verb">id</spanx> and bound fields; they do not know the server secret and do
not recompute this HMAC. A deterministic construction nevertheless allows
different server components and implementations to issue and verify the
same challenge.</t>

<section anchor="hmac-sha256-test-vectors"><name>HMAC-SHA256 Test Vectors</name>

<t>The following vectors use the UTF-8 server secret <spanx style="verb">test-vector-secret</spanx> and
this request object:</t>

<figure><sourcecode type="json"><![CDATA[
{"amount":"1000000"}
]]></sourcecode></figure>

<t>Its JCS serialization has the base64url encoding
<spanx style="verb">eyJhbW91bnQiOiIxMDAwMDAwIn0</spanx>. All vectors omit <spanx style="verb">expires</spanx> and <spanx style="verb">digest</spanx>.</t>

<t>In the following inputs, adjacent quoted strings are concatenated without
whitespace. The legacy layout, with neither <spanx style="verb">header</spanx> nor <spanx style="verb">opaque</spanx>, is:</t>

<figure><artwork><![CDATA[
input = "api.example.com|tempo|charge|"
        "eyJhbW91bnQiOiIxMDAwMDAwIn0|||"
]]></artwork></figure>

<t>Its challenge <spanx style="verb">id</spanx> is:</t>

<figure><artwork><![CDATA[
X6v1eo7fJ76gAxqY0xN9Jd__4lUyDDYmriryOM-5FO4
]]></artwork></figure>

<t>With <spanx style="verb">header="Payment-Authorization"</spanx> and no <spanx style="verb">opaque</spanx>, the input is:</t>

<figure><artwork><![CDATA[
input = "api.example.com|tempo|charge|"
        "eyJhbW91bnQiOiIxMDAwMDAwIn0|||"
        "Payment-Authorization|"
]]></artwork></figure>

<t>Its challenge <spanx style="verb">id</spanx> is:</t>

<figure><artwork><![CDATA[
S91xi-OFGZPMs-j7GsX0FDpIkmCcZT1P9XyV58WNy_U
]]></artwork></figure>

<t>Finally, with <spanx style="verb">header="Payment-Authorization"</spanx> and the following <spanx style="verb">opaque</spanx>
object:</t>

<figure><sourcecode type="json"><![CDATA[
{"pi":"pi_123"}
]]></sourcecode></figure>

<t>the base64url-encoded <spanx style="verb">opaque</spanx> value is <spanx style="verb">eyJwaSI6InBpXzEyMyJ9</spanx>, and the
input is:</t>

<figure><artwork><![CDATA[
input = "api.example.com|tempo|charge|"
        "eyJhbW91bnQiOiIxMDAwMDAwIn0|||"
        "Payment-Authorization|eyJwaSI6InBpXzEyMyJ9"
]]></artwork></figure>

<t>Its challenge <spanx style="verb">id</spanx> is:</t>

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

</section>
</section>
</section>
<section anchor="example-challenge"><name>Example Challenge</name>

<t>This challenge omits <spanx style="verb">header</spanx> and therefore selects the default
credential field <spanx style="verb">Authorization</spanx> (see <xref target="credential-header"/>).</t>

<figure><sourcecode type="http"><![CDATA[
HTTP/1.1 402 Payment Required
Cache-Control: no-store
WWW-Authenticate: Payment id="x7Tg2pLqR9mKvNwY3hBcZa",
    realm="api.example.com",
    method="example",
    intent="charge",
    expires="2025-01-15T12:05:00Z",
    request="eyJhbW91bnQiOiIxMDAwIiwiY3VycmVuY3kiOiJVU0QiLCJyZWNpcGllbnQiOiJhY2N0XzEyMyJ9"
]]></sourcecode></figure>

<t>Decoded <spanx style="verb">request</spanx> example:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "amount": "1000",
  "currency": "usd",
  "recipient": "acct_123"
}
]]></sourcecode></figure>

</section>
<section anchor="example-challenge-selecting-an-alternate-header"><name>Example Challenge Selecting an Alternate Header</name>

<t>This challenge includes <spanx style="verb">header="Payment-Authorization"</spanx>. The client
<bcp14>MUST</bcp14> send the corresponding Payment credential in the
<spanx style="verb">Payment-Authorization</spanx> header, not in <spanx style="verb">Authorization</spanx>.</t>

<figure><sourcecode type="http"><![CDATA[
HTTP/1.1 402 Payment Required
Cache-Control: no-store
WWW-Authenticate: Payment id="x7Tg2pLqR9mKvNwY3hBcZa",
    realm="api.example.com",
    method="example",
    intent="charge",
    header="Payment-Authorization",
    expires="2025-01-15T12:05:00Z",
    request="eyJhbW91bnQiOiIxMDAwIiwiY3VycmVuY3kiOiJVU0QiLCJyZWNpcGllbnQiOiJhY2N0XzEyMyJ9"
]]></sourcecode></figure>

</section>
</section>
<section anchor="request-body-digest-binding"><name>Request Body Digest Binding</name>

<t>Servers <bcp14>SHOULD</bcp14> include the <spanx style="verb">digest</spanx> parameter when issuing challenges for
requests with bodies. The digest value is computed per <xref target="RFC9530"></xref>:</t>

<figure><sourcecode type="http"><![CDATA[
WWW-Authenticate: Payment id="...",
    realm="api.example.com",
    method="example",
    intent="charge",
    digest="sha-256=:X48E9qOokqqrvdts8nOJRJN3OWDUoyWxBf7kbu9DBPE=:",
    expires="2025-01-15T12:05:00Z",
    request="..."
]]></sourcecode></figure>

<t>When verifying a credential with a <spanx style="verb">digest</spanx> parameter, servers <bcp14>MUST</bcp14>:</t>

<t><list style="numbers" type="1">
  <t>Compute the digest of the current request body per <xref target="RFC9530"></xref></t>
  <t>Compare it with the <spanx style="verb">digest</spanx> value from the challenge</t>
  <t>Reject the credential if the digests do not match</t>
</list></t>

</section>
</section>
<section anchor="credential-header"><name>Credentials</name>

<t>The default HTTP field for the Payment credential is <spanx style="verb">Authorization</spanx>.</t>

<t>A challenge that omits the <spanx style="verb">header</spanx> parameter selects this default.
Clients receiving such a challenge <bcp14>MUST</bcp14> send the Payment credential in
the <spanx style="verb">Authorization</spanx> header.</t>

<t>A challenge that includes the <spanx style="verb">header</spanx> parameter selects
<spanx style="verb">Payment-Authorization</spanx> instead of the default. The value <bcp14>MUST</bcp14> be
<spanx style="verb">Payment-Authorization</spanx>; this specification does not allow any other
field name, to avoid collision with other HTTP fields. Servers <bcp14>MUST NOT</bcp14>
emit a <spanx style="verb">header</spanx> parameter with any other value. Clients receiving such a
challenge <bcp14>MUST</bcp14> send the Payment credential in the
<spanx style="verb">Payment-Authorization</spanx> header. Clients <bcp14>MUST NOT</bcp14> send the credential in
a different field than the one selected by the challenge. Clients <bcp14>MUST</bcp14>
treat any other <spanx style="verb">header</spanx> value as an unrecognized challenge and <bcp14>MUST NOT</bcp14>
send a Payment credential for it.</t>

<t>Servers <bcp14>MUST</bcp14> accept a Payment credential for a given challenge only from
the field selected by that challenge. A Payment credential received in
any other field <bcp14>MUST NOT</bcp14> satisfy the challenge.</t>

<t>The field value uses base64url encoding without
padding per <xref target="RFC4648"/> Section 5:</t>

<figure><sourcecode type="abnf"><![CDATA[
credentials     = "Payment" 1*SP base64url-nopad
base64url-nopad = 1*( ALPHA / DIGIT / "-" / "_" )
]]></sourcecode></figure>

<t>The base64url-nopad value is a base64url-encoded JSON object (without padding)
containing:</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">challenge</spanx></c>
      <c>object</c>
      <c>Yes</c>
      <c>Echoed challenge parameters</c>
      <c><spanx style="verb">source</spanx></c>
      <c>string</c>
      <c>No</c>
      <c>Payer identifier (<bcp14>RECOMMENDED</bcp14>: DID format per <xref target="W3C-DID"></xref>)</c>
      <c><spanx style="verb">payload</spanx></c>
      <c>object</c>
      <c>Yes</c>
      <c>Method-specific payment proof</c>
</texttable>

<t>The <spanx style="verb">challenge</spanx> object contains the parameters from the original challenge:</t>

<texttable>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c><spanx style="verb">id</spanx></c>
      <c>string</c>
      <c>Challenge identifier</c>
      <c><spanx style="verb">realm</spanx></c>
      <c>string</c>
      <c>Protection space</c>
      <c><spanx style="verb">method</spanx></c>
      <c>string</c>
      <c>Payment method identifier</c>
      <c><spanx style="verb">intent</spanx></c>
      <c>string</c>
      <c>Payment intent type</c>
      <c><spanx style="verb">request</spanx></c>
      <c>string</c>
      <c>Base64url-encoded payment request</c>
      <c><spanx style="verb">description</spanx></c>
      <c>string</c>
      <c>Human-readable payment purpose (if present in challenge)</c>
      <c><spanx style="verb">opaque</spanx></c>
      <c>string</c>
      <c>Base64url-encoded server correlation data (if present in challenge)</c>
      <c><spanx style="verb">digest</spanx></c>
      <c>string</c>
      <c>Content digest</c>
      <c><spanx style="verb">expires</spanx></c>
      <c>string</c>
      <c>Challenge expiration timestamp</c>
      <c><spanx style="verb">header</spanx></c>
      <c>string</c>
      <c><spanx style="verb">Payment-Authorization</spanx> when the challenge selected that field (included only when the challenge contained <spanx style="verb">header</spanx>)</c>
</texttable>

<t>The <spanx style="verb">payload</spanx> field contains the payment-method-specific data needed to
complete the payment challenge. Payment method specifications define the
exact structure.</t>

<t>When the original challenge omitted <spanx style="verb">header</spanx>, clients <bcp14>MUST NOT</bcp14> include a
<spanx style="verb">header</spanx> field in the credential's <spanx style="verb">challenge</spanx> object.</t>

<section anchor="example-credential"><name>Example Credential</name>

<t>This credential corresponds to a challenge that omitted <spanx style="verb">header</spanx>, so it
is sent in the default <spanx style="verb">Authorization</spanx> field:</t>

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

<t>Decoded credential:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "challenge": {
    "id": "x7Tg2pLqR9mKvNwY3hBcZa",
    "realm": "api.example.com",
    "method": "example",
    "intent": "charge",
    "request": "eyJhbW91bnQiOiIxMDAwIiwiY3VycmVuY3kiOiJVU0QiLCJyZWNpcGllbnQiOiJhY2N0XzEyMyJ9",
    "expires": "2025-01-15T12:05:00Z"
  },
  "payload": {
    "proof": "0xabc123..."
  }
}
]]></sourcecode></figure>

</section>
<section anchor="example-credential-with-alternate-header"><name>Example Credential with Alternate Header</name>

<t>This credential corresponds to a challenge that included
<spanx style="verb">header="Payment-Authorization"</spanx>. The client <bcp14>MUST</bcp14> send it in
<spanx style="verb">Payment-Authorization</spanx>, and <bcp14>MUST</bcp14> echo <spanx style="verb">header</spanx> in the credential's
<spanx style="verb">challenge</spanx> object:</t>

<figure><sourcecode type="http"><![CDATA[
GET /api/data HTTP/1.1
Host: api.example.com
Authorization: Bearer mF_9.B5f-4.1JqM
Payment-Authorization: Payment eyJjaGFsbGVuZ2UiOnsiaWQiOiJ4N1RnMnBMcVI5bUt2TndZM2hCY1phIiwicmVhbG0iOiJhcGkuZXhhbXBsZS5jb20iLCJtZXRob2QiOiJleGFtcGxlIiwiaW50ZW50IjoiY2hhcmdlIiwicmVxdWVzdCI6ImV5SmhiVzkxYm5RaU9pSXhNREF3SWl3aVkzVnljbVZ1WTNraU9pSlZVMFFpTENKeVpXTnBjR2xsYm5RaU9pSmhZMk4wWHpFeU15SjkiLCJoZWFkZXIiOiJQYXltZW50LUF1dGhvcml6YXRpb24iLCJleHBpcmVzIjoiMjAyNS0wMS0xNVQxMjowNTowMFoifSwicGF5bG9hZCI6eyJwcm9vZiI6IjB4YWJjMTIzLi4uIn19
]]></sourcecode></figure>

<t>Decoded credential:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "challenge": {
    "id": "x7Tg2pLqR9mKvNwY3hBcZa",
    "realm": "api.example.com",
    "method": "example",
    "intent": "charge",
    "request": "eyJhbW91bnQiOiIxMDAwIiwiY3VycmVuY3kiOiJVU0QiLCJyZWNpcGllbnQiOiJhY2N0XzEyMyJ9",
    "header": "Payment-Authorization",
    "expires": "2025-01-15T12:05:00Z"
  },
  "payload": {
    "proof": "0xabc123..."
  }
}
]]></sourcecode></figure>

</section>
</section>
<section anchor="payment-receipt-header"><name>Payment-Receipt Header</name>

<t>Servers <bcp14>SHOULD</bcp14> include a <spanx style="verb">Payment-Receipt</spanx> header on successful responses:</t>

<figure><sourcecode type="abnf"><![CDATA[
Payment-Receipt = base64url-nopad
]]></sourcecode></figure>

<t>The decoded JSON object contains:</t>

<texttable>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c><spanx style="verb">status</spanx></c>
      <c>string</c>
      <c><spanx style="verb">"success"</spanx> — receipts are only issued on successful payment</c>
      <c><spanx style="verb">method</spanx></c>
      <c>string</c>
      <c>Payment method used</c>
      <c><spanx style="verb">timestamp</spanx></c>
      <c>string</c>
      <c><xref target="RFC3339"/> settlement timestamp</c>
      <c><spanx style="verb">reference</spanx></c>
      <c>string</c>
      <c>Method-specific reference (tx hash, invoice id, etc.)</c>
</texttable>

<t>Payment method specifications <bcp14>MAY</bcp14> define additional fields for receipts.</t>

<section anchor="receipt-status-semantics"><name>Receipt Status Semantics</name>

<t>The <spanx style="verb">status</spanx> field <bcp14>MUST</bcp14> be <spanx style="verb">"success"</spanx>, indicating the payment was
verified and settled successfully. Receipts are only issued on
successful payment responses (2xx status codes).</t>

<t>Servers <bcp14>MUST NOT</bcp14> return a <spanx style="verb">Payment-Receipt</spanx> header on error responses.
Payment failures are communicated via HTTP status codes and Problem
Details <xref target="RFC9457"/>. Servers <bcp14>MUST</bcp14> return 402 with a fresh challenge
and appropriate problem type when payment verification fails.</t>

</section>
</section>
</section>
<section anchor="payment-methods"><name>Payment Methods</name>

<section anchor="method-identifier-format"><name>Method Identifier Format</name>

<t>Payment methods are identified by lowercase ASCII letters:</t>

<figure><sourcecode type="abnf"><![CDATA[
payment-method-id = 1*LOWERALPHA
]]></sourcecode></figure>

<t>Method identifiers are case-sensitive and <bcp14>MUST</bcp14> be lowercase.</t>

</section>
<section anchor="method-registry"><name>Method Registry</name>

<t>Payment methods are registered in the HTTP Payment Methods registry
(<xref target="payment-method-registry"/>). Each registered method has an associated specification
that defines the <spanx style="verb">request</spanx> and <spanx style="verb">payload</spanx> schemas.</t>

</section>
</section>
<section anchor="payment-intents"><name>Payment Intents</name>

<t>Payment intents describe the type of payment being requested.</t>

<section anchor="intent-identifiers"><name>Intent Identifiers</name>

<figure><sourcecode type="abnf"><![CDATA[
intent = 1*( ALPHA / DIGIT / "-" )
]]></sourcecode></figure>

</section>
<section anchor="intent-specifications"><name>Intent Specifications</name>

<t>Payment intents are defined in separate intent specifications that:</t>

<t><list style="symbols">
  <t>Define the semantic meaning of the intent</t>
  <t>Specify required and optional <spanx style="verb">request</spanx> fields</t>
  <t>Specify <spanx style="verb">payload</spanx> requirements</t>
  <t>Define verification and settlement semantics</t>
  <t>Register the intent in the Payment Intent Registry (<xref target="payment-intent-registry"/>)</t>
</list></t>

<t>See the Payment Intent Registry for registered intents.</t>

</section>
<section anchor="intent-negotiation"><name>Intent Negotiation</name>

<t>If a server supports multiple intents, it <bcp14>MAY</bcp14> issue multiple challenges:</t>

<figure><sourcecode type="http"><![CDATA[
WWW-Authenticate: Payment id="abc", realm="api.example.com", method="example", intent="charge", request="..."
WWW-Authenticate: Payment id="def", realm="api.example.com", method="example", intent="authorize", request="..."
]]></sourcecode></figure>

<t>Clients choose which challenge to respond to. Clients that do not
recognize an intent <bcp14>SHOULD</bcp14> treat the challenge as unsupported.</t>

</section>
<section anchor="client-payment-preferences"><name>Client Payment Preferences</name>

<t>Clients <bcp14>MAY</bcp14> send an <spanx style="verb">Accept-Payment</spanx> request header to declare which
payment method and intent combinations they support.</t>

<t>The header uses the same weighted-preference model as other HTTP
negotiation fields: omitted <spanx style="verb">q</spanx> values are equivalent to <spanx style="verb">q=1</spanx>, and
<spanx style="verb">q=0</spanx> means "do not use".</t>

<figure><sourcecode type="abnf"><![CDATA[
Accept-Payment = #payment-range
payment-range  = payment-token [ weight ]
payment-token  = payment-method-or-wildcard "/" intent-or-wildcard
payment-method-or-wildcard = payment-method-id / "*"
intent-or-wildcard         = intent-token / "*"
]]></sourcecode></figure>

<t>Examples:</t>

<figure><sourcecode type="http"><![CDATA[
Accept-Payment: tempo/charge, tempo/session, stripe/charge;q=0.5, solana/charge;q=0.3
Accept-Payment: tempo/*, solana/*;q=0.6, */session;q=0.3
Accept-Payment: tempo/charge, tempo/session;q=0, solana/charge
]]></sourcecode></figure>

<t>When <spanx style="verb">Accept-Payment</spanx> is present, servers <bcp14>SHOULD</bcp14> consider it when
choosing which Payment challenges to return.</t>

<t>Specifically, servers <bcp14>SHOULD</bcp14>:</t>

<t><list style="symbols">
  <t>Filter challenges to those matching at least one declared range with <spanx style="verb">q&gt;0</spanx></t>
  <t>Order matching challenges by descending client <spanx style="verb">q</spanx> value</t>
  <t>Preserve server preference order when multiple matches have the same <spanx style="verb">q</spanx></t>
  <t>Prefer the most specific matching range when multiple ranges match the same challenge</t>
</list></t>

<t>If <spanx style="verb">Accept-Payment</spanx> is absent, servers <bcp14>MUST</bcp14> behave as though the client
accepts any method and intent combination.</t>

<t>If <spanx style="verb">Accept-Payment</spanx> is malformed, servers <bcp14>MAY</bcp14> ignore it.</t>

<t>If <spanx style="verb">Accept-Payment</spanx> is present but no available challenge matches a
declared range with <spanx style="verb">q&gt;0</spanx>, servers <bcp14>MAY</bcp14> ignore the header and return
their normal set of challenges.</t>

<t>The <spanx style="verb">WWW-Authenticate: Payment</spanx> challenge remains authoritative even
when <spanx style="verb">Accept-Payment</spanx> is used. Clients <bcp14>MUST</bcp14> validate the returned
challenge before authorizing payment.</t>

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

<section anchor="error-response-format"><name>Error Response Format</name>

<t>Servers <bcp14>SHOULD</bcp14> return Problem Details <xref target="RFC9457"/> error bodies for
payment-related errors, using the HTTP status defined below. For example:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "type": "https://paymentauth.org/problems/payment-required",
  "title": "Payment Required",
  "status": 402,
  "detail": "Human-readable description"
}
]]></sourcecode></figure>

<t>The <spanx style="verb">type</spanx> URI <bcp14>SHOULD</bcp14> correspond to one of the problem types defined
below, and the canonical base URI for problem types is
<spanx style="verb">https://paymentauth.org/problems/</spanx>.</t>

</section>
<section anchor="error-codes"><name>Error Codes</name>

<texttable>
      <ttcol align='left'>Code</ttcol>
      <ttcol align='left'>HTTP</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c><spanx style="verb">payment-required</spanx></c>
      <c>402</c>
      <c>Resource requires payment</c>
      <c><spanx style="verb">payment-insufficient</spanx></c>
      <c>402</c>
      <c>Amount too low</c>
      <c><spanx style="verb">payment-expired</spanx></c>
      <c>402</c>
      <c>Challenge or authorization expired</c>
      <c><spanx style="verb">verification-failed</spanx></c>
      <c>402</c>
      <c>Proof invalid</c>
      <c><spanx style="verb">method-unsupported</spanx></c>
      <c>400</c>
      <c>Method not accepted</c>
      <c><spanx style="verb">malformed-credential</spanx></c>
      <c>402</c>
      <c>Invalid credential format</c>
      <c><spanx style="verb">invalid-challenge</spanx></c>
      <c>402</c>
      <c>Challenge ID unknown or already used</c>
      <c><spanx style="verb">bad-request</spanx></c>
      <c>400</c>
      <c>Malformed request or invalid parameters</c>
      <c><spanx style="verb">invalid-payload</spanx></c>
      <c>402</c>
      <c>Credential payload does not match schema</c>
      <c><spanx style="verb">internal-payment-error</spanx></c>
      <c>500</c>
      <c>Unexpected payment processing error</c>
      <c><spanx style="verb">payment-action-required</spanx></c>
      <c>402</c>
      <c>Payment requires additional action</c>
</texttable>

</section>
<section anchor="retry-behavior"><name>Retry Behavior</name>

<t>Servers <bcp14>SHOULD</bcp14> use the <spanx style="verb">Retry-After</spanx> HTTP header <xref target="RFC9110"/> to indicate
when clients may retry:</t>

<figure><sourcecode type="http"><![CDATA[
HTTP/1.1 402 Payment Required
Retry-After: 60
WWW-Authenticate: Payment ...
]]></sourcecode></figure>

</section>
</section>
<section anchor="extensibility"><name>Extensibility</name>

<section anchor="payment-method-specifications"><name>Payment Method Specifications</name>

<t>Payment method specifications <bcp14>MUST</bcp14> define:</t>

<t><list style="numbers" type="1">
  <t><strong>Method Identifier</strong>: Unique lowercase string</t>
  <t><strong>Request Schema</strong>: JSON structure for the <spanx style="verb">request</spanx> parameter</t>
  <t><strong>Payload Schema</strong>: JSON structure for credential payloads</t>
  <t><strong>Verification Procedure</strong>: How servers validate proofs</t>
  <t><strong>Settlement Procedure</strong>: How payment is finalized</t>
  <t><strong>Security Considerations</strong>: Method-specific threats and mitigations</t>
</list></t>

</section>
<section anchor="versioning"><name>Versioning</name>

<t>The Payment scheme uses a layered versioning strategy:</t>

<section anchor="core-protocol"><name>Core Protocol</name>

<t>The <spanx style="verb">Payment</spanx> scheme name is the stable identifier. The core protocol
does NOT carry a version on the wire, consistent with all deployed HTTP
authentication schemes (<spanx style="verb">Basic</spanx>, <spanx style="verb">Bearer</spanx>, <spanx style="verb">Digest</spanx>). Evolution happens
through adding optional parameters and fields; implementations <bcp14>MUST</bcp14>
ignore unknown parameters and fields. If a future change is truly
incompatible, a new scheme name (e.g., <spanx style="verb">Payment2</spanx>) would be registered.</t>

</section>
<section anchor="versioning-payment-methods"><name>Payment Methods</name>

<t>Payment method specifications <bcp14>MAY</bcp14> include a <spanx style="verb">version</spanx> field in their
<spanx style="verb">methodDetails</spanx>. The absence of a <spanx style="verb">version</spanx> field is implicitly
version 1. When a breaking change is needed, the method specification
adds a <spanx style="verb">version</spanx> field starting at <spanx style="verb">2</spanx>. Compatible changes (adding
optional fields, defining defaults) do not require a version change.
Methods <bcp14>MAY</bcp14> also register a new identifier for changes fundamental
enough to warrant a distinct name.</t>

</section>
<section anchor="versioning-payment-intents"><name>Payment Intents</name>

<t>Payment intents do not carry a version. They evolve through the same
compatibility rules as the core: adding optional fields with defined
defaults is compatible, and breaking changes require a new intent
identifier (e.g., <spanx style="verb">charge-v2</spanx>).</t>

</section>
</section>
<section anchor="custom-parameters"><name>Custom Parameters</name>

<t>Implementations <bcp14>MAY</bcp14> define additional parameters in challenges:</t>

<t><list style="symbols">
  <t>Parameters <bcp14>MUST</bcp14> use lowercase names</t>
  <t>Unknown parameters <bcp14>MUST</bcp14> be ignored by clients</t>
</list></t>

</section>
<section anchor="size-considerations"><name>Size Considerations</name>

<t>Servers <bcp14>SHOULD</bcp14> keep challenges under 8KB. Clients <bcp14>MUST</bcp14> be able to handle
challenges of at least 4KB. Servers <bcp14>MUST</bcp14> be able to handle credentials
of at least 4KB.</t>

</section>
</section>
<section anchor="internationalization-considerations"><name>Internationalization Considerations</name>

<section anchor="character-encoding"><name>Character Encoding</name>

<t>All string values use UTF-8 encoding <xref target="RFC3629"/>:</t>

<t><list style="symbols">
  <t>The <spanx style="verb">request</spanx> and credential payloads are JSON <xref target="RFC8259"/></t>
  <t>Payment method identifiers are restricted to ASCII lowercase</t>
  <t>The <spanx style="verb">realm</spanx> parameter <bcp14>SHOULD</bcp14> use ASCII-only values per <xref target="RFC9110"/></t>
</list></t>

</section>
<section anchor="human-readable-text"><name>Human-Readable Text</name>

<t>The <spanx style="verb">description</spanx> parameter may contain localized text. Servers <bcp14>SHOULD</bcp14>
use the <spanx style="verb">Accept-Language</spanx> request header <xref target="RFC9110"/> to determine the
appropriate language.</t>

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

<section anchor="threat-model"><name>Threat Model</name>

<t>This specification assumes:</t>

<t><list style="symbols">
  <t>Attackers can observe all network traffic</t>
  <t>Attackers can inject, modify, or replay messages</t>
  <t>Attackers may control malicious servers or clients</t>
</list></t>

</section>
<section anchor="transport-security"><name>Transport Security</name>

<t>This specification REQUIRES TLS 1.2 <xref target="RFC5246"/> or later for all Payment
authentication flows. TLS 1.3 <xref target="RFC8446"/> is <bcp14>RECOMMENDED</bcp14>.</t>

<t>Implementations <bcp14>MUST</bcp14> use TLS when transmitting Payment challenges and
credentials. Payment credentials contain sensitive authorization data
that could result in financial loss if intercepted.</t>

<t>Servers <bcp14>MUST NOT</bcp14> issue Payment challenges over unencrypted HTTP. Clients
<bcp14>MUST NOT</bcp14> send Payment credentials over unencrypted HTTP. Implementations
<bcp14>SHOULD</bcp14> reject Payment protocol messages received over non-TLS connections.</t>

<section anchor="credential-handling"><name>Credential Handling</name>

<t>Payment credentials are bearer tokens that authorize financial transactions.
Servers and intermediaries <bcp14>MUST NOT</bcp14> log Payment credentials or include them
in error messages, debugging output, or analytics. Credential exposure could
enable replay attacks or unauthorized payments.</t>

<t>Implementations <bcp14>MUST</bcp14> treat Payment credentials with the same care as
authentication passwords or session tokens. Credentials <bcp14>SHOULD</bcp14> be stored
only in memory and cleared after use.</t>

</section>
<section anchor="challenge-binding-secret-management"><name>Challenge-Binding Secret Management</name>

<t>Implementations that use a shared secret for stateless challenge binding
(for example, HMAC) <bcp14>MUST</bcp14> keep that secret on trusted server-side systems
only and <bcp14>MUST NOT</bcp14> disclose it to clients. Servers <bcp14>MUST NOT</bcp14> log the secret
or include it in error messages, debugging output, or analytics.</t>

<t>If a server rotates a challenge-binding secret, it <bcp14>SHOULD</bcp14> continue
verifying challenges issued under the previous secret until those
challenges expire, or use an equivalent migration strategy that avoids
invalidating unexpired challenges.</t>

</section>
</section>
<section anchor="replay-protection"><name>Replay Protection</name>

<t>Payment methods used with this specification <bcp14>MUST</bcp14> provide single-use
proof semantics. A payment proof <bcp14>MUST</bcp14> be usable exactly once; subsequent
attempts to use the same proof <bcp14>MUST</bcp14> be rejected by the payment method
infrastructure.</t>

</section>
<section anchor="idempotency-and-side-effects"><name>Idempotency and Side Effects</name>

<t>Servers <bcp14>MUST NOT</bcp14> perform side effects (database writes, external API
calls, resource creation) for requests that have not been paid. The
unpaid request that triggers a 402 challenge <bcp14>MUST NOT</bcp14> modify server
state beyond recording the challenge itself.</t>

<t>For non-idempotent methods (POST, PUT, DELETE), servers <bcp14>SHOULD</bcp14> accept
an <spanx style="verb">Idempotency-Key</spanx> header to enable safe client retries. When a client
retries a request with the same <spanx style="verb">Idempotency-Key</spanx> and a valid Payment
credential, the server <bcp14>SHOULD</bcp14> return the same response as the original
successful request without re-executing the operation.</t>

</section>
<section anchor="concurrent-request-handling"><name>Concurrent Request Handling</name>

<t>Servers <bcp14>MUST</bcp14> ensure that concurrent requests with the same Payment
credential result in at most one successful payment settlement and one
resource delivery. Race conditions between parallel requests could
otherwise cause double-payment or double-delivery.</t>

<t>Implementations <bcp14>SHOULD</bcp14> use atomic operations or distributed locks when
verifying and consuming Payment credentials. The credential verification
and resource delivery <bcp14>SHOULD</bcp14> be performed as an atomic operation where
possible.</t>

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

<t>Clients <bcp14>MUST</bcp14> verify before authorizing payment:</t>

<t><list style="numbers" type="1">
  <t>Requested amount is reasonable for the resource</t>
  <t>Recipient/address is expected</t>
  <t>Currency/asset is as expected</t>
  <t>Validity window is appropriate</t>
</list></t>

<t>Clients <bcp14>MUST NOT</bcp14> rely on the <spanx style="verb">description</spanx> parameter for payment
verification. Malicious servers could provide a misleading description
while the actual <spanx style="verb">request</spanx> payload requests a different amount.</t>

</section>
<section anchor="privacy"><name>Privacy</name>

<t><list style="symbols">
  <t>Servers <bcp14>MUST NOT</bcp14> require user accounts for payment.</t>
  <t>Payment methods <bcp14>SHOULD</bcp14> support pseudonymous options where possible.</t>
  <t>Servers <bcp14>SHOULD NOT</bcp14> log Payment credentials in plaintext</t>
</list></t>

</section>
<section anchor="credential-storage"><name>Credential Storage</name>

<t>Implementations <bcp14>MUST</bcp14> treat any header carrying a Payment credential and
<spanx style="verb">Payment-Receipt</spanx> headers as sensitive data.</t>

</section>
<section anchor="intermediary-handling-of-402"><name>Intermediary Handling of 402</name>

<t>HTTP intermediaries (proxies, caches, CDNs) may not recognize 402 as an
authentication challenge in the same way they handle 401. While this
specification uses <spanx style="verb">WWW-Authenticate</spanx> headers with 402 responses following
the same syntax as <xref target="RFC9110"/>, intermediaries that perform special
processing for 401 (such as stripping credentials or triggering
authentication prompts) may not apply the same behavior to 402.</t>

<t>Servers <bcp14>SHOULD NOT</bcp14> rely on intermediary-specific handling of 402 responses.
Clients <bcp14>MUST</bcp14> be prepared to receive 402 responses through any intermediary.</t>

</section>
<section anchor="caching"><name>Caching</name>

<t>Payment challenges contain unique identifiers and time-sensitive payment
data that <bcp14>MUST NOT</bcp14> be cached or reused. To prevent challenge replay and
stale payment information:</t>

<t>Servers <bcp14>MUST</bcp14> send <spanx style="verb">Cache-Control: no-store</spanx> <xref target="RFC9111"/> with 402 responses; this ensures no shared cache reuse.</t>

<t>Responses containing <spanx style="verb">Payment-Receipt</spanx> headers <bcp14>MUST</bcp14> include
<spanx style="verb">Cache-Control: private</spanx> to prevent shared caches from storing
payment receipts.</t>

<t>When a request carries a Payment credential in a field other than
<spanx style="verb">Authorization</spanx>, every corresponding response <bcp14>MUST</bcp14> include
<spanx style="verb">Cache-Control: private</spanx> or <spanx style="verb">Cache-Control: no-store</spanx>. <xref target="RFC9111"/>
Section 3.5 restricts shared caching of responses to requests that
contain <spanx style="verb">Authorization</spanx>; that protection does not apply to
<spanx style="verb">Payment-Authorization</spanx>. <spanx style="verb">Payment-Receipt</spanx> is optional and does not by
itself prevent shared caches from storing those responses.</t>

</section>
<section anchor="cross-origin-considerations"><name>Cross-Origin Considerations</name>

<t>Clients (particularly browser-based wallets) <bcp14>SHOULD</bcp14>:</t>

<t><list style="symbols">
  <t>Clearly display the origin requesting payment</t>
  <t>Require explicit user confirmation before authorizing payments</t>
  <t>Not automatically respond to Payment challenges</t>
</list></t>

</section>
<section anchor="denial-of-service"><name>Denial of Service</name>

<t>Servers <bcp14>SHOULD</bcp14> implement rate limiting on challenges issued and
credential verification attempts.</t>

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

<section anchor="authentication-scheme-registration"><name>Authentication Scheme Registration</name>

<t>This document registers the "Payment" authentication scheme in the
"Hypertext Transfer Protocol (HTTP) Authentication Scheme Registry"
established by <xref target="RFC9110"/>:</t>

<t><list style="symbols">
  <t><strong>Authentication Scheme Name</strong>: Payment</t>
  <t><strong>Reference</strong>: This document, <xref target="the-payment-authentication-scheme"/></t>
  <t><strong>Notes</strong>: Used with HTTP 402 status code for proof-of-payment flows</t>
</list></t>

</section>
<section anchor="header-field-registration"><name>Header Field Registration</name>

<t>This document registers the following header fields:</t>

<texttable>
      <ttcol align='left'>Field Name</ttcol>
      <ttcol align='left'>Status</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>Accept-Payment</c>
      <c>permanent</c>
      <c>This document, <xref target="client-payment-preferences"/></c>
      <c>Payment-Authorization</c>
      <c>permanent</c>
      <c>This document, <xref target="credential-header"/></c>
      <c>Payment-Receipt</c>
      <c>permanent</c>
      <c>This document, <xref target="payment-receipt-header"/></c>
</texttable>

</section>
<section anchor="payment-method-registry"><name>Payment Method Registry</name>

<t>This document establishes the "HTTP Payment Methods" registry. This
registry uses the "Specification Required" policy defined in <xref target="RFC8126"/>.</t>

<t>Registration requests must include:</t>

<t><list style="symbols">
  <t><strong>Method Identifier</strong>: Unique lowercase ASCII letters (<spanx style="verb">a-z</spanx>)</t>
  <t><strong>Description</strong>: Brief payment-method description</t>
  <t><strong>Specification pointer</strong>: Reference to the specification document</t>
  <t><strong>Registrant Contact</strong>: Contact information for the registrant</t>
</list></t>

</section>
<section anchor="payment-intent-registry"><name>Payment Intent Registry</name>

<t>This document establishes the "HTTP Payment Intents" registry. This
registry uses the "Specification Required" policy defined in <xref target="RFC8126"/>.</t>

<t>Registration requests must include:</t>

<t><list style="symbols">
  <t><strong>Intent Identifier</strong>: Unique lowercase ASCII string</t>
  <t><strong>Description</strong>: Brief description of the intent semantics</t>
  <t><strong>Specification pointer</strong>: Reference to the specification document</t>
  <t><strong>Registrant Contact</strong>: Contact information for the registrant</t>
</list></t>

<t>The registry is initially empty. Intent specifications register their
identifiers upon publication.</t>

</section>
</section>


  </middle>

  <back>


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

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

&RFC2119;
&RFC3339;
&RFC3629;
&RFC4648;
&RFC5234;
&RFC5246;
&RFC8126;
&RFC8174;
&RFC8259;
&RFC8446;
&RFC8785;
&RFC9110;
&RFC9111;
&RFC9457;
&RFC9530;


    </references>

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

<reference anchor="W3C-DID" target="https://www.w3.org/TR/did-core/">
  <front>
    <title>Decentralized Identifiers (DIDs) v1.0</title>
    <author >
      <organization>W3C</organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="W3C-PMI" target="https://www.w3.org/TR/payment-method-id/">
  <front>
    <title>Payment Method Identifiers</title>
    <author >
      <organization>W3C</organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>


    </references>

</references>


<?line 1165?>

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

<figure><sourcecode type="abnf"><![CDATA[
; HTTP Authentication Challenge (following RFC 7235 Section 2.1)
payment-challenge = "Payment" [ 1*SP auth-params ]
auth-params       = auth-param *( OWS "," OWS auth-param )
auth-param        = token BWS "=" BWS ( token / quoted-string )

; Required parameters: id, realm, method, intent, request
; The id parameter is required by prose to be non-empty after parsing.
; Optional parameters: expires, digest, description, header, opaque

; Payment credential field value (Authorization by default;
; Payment-Authorization when the challenge includes header)
payment-credentials = "Payment" 1*SP base64url-nopad
Payment-Authorization = payment-credentials

; Client payment preferences
Accept-Payment = #payment-range
payment-range = payment-token [ weight ]
payment-token = payment-method-or-wildcard "/" intent-or-wildcard
payment-method-or-wildcard = payment-method-id / "*"
intent-or-wildcard = intent-token / "*"

; Payment-Receipt header field value
Payment-Receipt = base64url-nopad

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

; Payment method identifier (lowercase only)
payment-method-id   = 1*LOWERALPHA
LOWERALPHA          = %x61-7A  ; a-z

; Payment intent
intent-token = 1*( ALPHA / DIGIT / "-" )
]]></sourcecode></figure>

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

<section anchor="one-time-charge"><name>One-Time Charge</name>

<t>A client requests a resource, receives a payment challenge, fulfills
the payment, and receives the resource with a receipt.</t>

<figure><artwork><![CDATA[
Client                                 Server
   │                                      │
   │  (1) GET /resource                   │
   ├─────────────────────────────────────>│
   │                                      │
   │  (2) 402 Payment Required            │
   │      WWW-Authenticate: Payment ...   │
   │<─────────────────────────────────────┤
   │                                      │
   │  (3) Fulfill payment challenge       │
   │      (method-specific)               │
   │                                      │
   │  (4) GET /resource                   │
   │      Authorization: Payment ...      │
   ├─────────────────────────────────────>│
   │                                      │
   │  (5) 200 OK                          │
   │      Payment-Receipt: ...            │
   │<─────────────────────────────────────┤
   │                                      │
]]></artwork></figure>

<t><strong>Challenge:</strong></t>

<figure><sourcecode type="http"><![CDATA[
HTTP/1.1 402 Payment Required
Cache-Control: no-store
Content-Type: application/problem+json
WWW-Authenticate: Payment id="qB3wErTyU7iOpAsD9fGhJk",
    realm="api.example.com",
    method="invoice",
    intent="charge",
    expires="2025-01-15T12:05:00Z",
    request="eyJhbW91bnQiOiIxMDAwIiwiY3VycmVuY3kiOiJVU0QiLCJpbnZvaWNlIjoiaW52XzEyMzQ1In0"

{
  "type": "https://paymentauth.org/problems/payment-required",
  "title": "Payment Required",
  "status": 402,
  "detail": "Payment required for access.",
  "challengeId": "qB3wErTyU7iOpAsD9fGhJk"
}
]]></sourcecode></figure>

<t>Decoded <spanx style="verb">request</spanx>:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "amount": "1000",
  "currency": "usd",
  "invoice": "inv_12345"
}
]]></sourcecode></figure>

<t><strong>Credential:</strong></t>

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

<t>Decoded credential:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "challenge": {
    "id": "qB3wErTyU7iOpAsD9fGhJk",
    "realm": "api.example.com",
    "method": "invoice",
    "intent": "charge",
    "request": "eyJhbW91bnQiOiIxMDAwIiwiY3VycmVuY3kiOiJVU0QiLCJpbnZvaWNlIjoiaW52XzEyMzQ1In0",
    "expires": "2025-01-15T12:05:00Z"
  },
  "payload": {
    "preimage": "0xabc123..."
  }
}
]]></sourcecode></figure>

<t><strong>Success:</strong></t>

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

{"data": "..."}
]]></sourcecode></figure>

</section>
<section anchor="challenge-negotiation-with-accept-payment"><name>Challenge Negotiation with Accept-Payment</name>

<t>The client can pre-declare its supported payment capabilities and let
the server tailor the 402 response:</t>

<figure><sourcecode type="http"><![CDATA[
GET /resource HTTP/1.1
Host: api.example.com
Accept-Payment: tempo/charge, tempo/session, stripe/charge;q=0.5, solana/charge;q=0.3
]]></sourcecode></figure>

<t>If the server supports all four combinations, it <bcp14>SHOULD</bcp14> prefer the
higher-ranked <spanx style="verb">tempo</spanx> challenges, then <spanx style="verb">stripe/charge</spanx>, then
<spanx style="verb">solana/charge</spanx>:</t>

<figure><sourcecode type="http"><![CDATA[
HTTP/1.1 402 Payment Required
Cache-Control: no-store
WWW-Authenticate: Payment id="pT7yHnKmQ2wErXsZ5vCbNl", realm="api.example.com", method="tempo", intent="charge", request="..."
WWW-Authenticate: Payment id="nH6xJkLpO3qRtYsA6wDcVb", realm="api.example.com", method="tempo", intent="session", request="..."
WWW-Authenticate: Payment id="mF8uJkLpO3qRtYsA6wDcVb", realm="api.example.com", method="stripe", intent="charge", request="..."
WWW-Authenticate: Payment id="kD4vLmNpQ2rStUwX5yAbCe", realm="api.example.com", method="solana", intent="charge", request="..."
]]></sourcecode></figure>

<t>When multiple entries omit <spanx style="verb">q</spanx>, they are equally preferred. In that
case, the server <bcp14>MAY</bcp14> order the returned challenges according to its own
policy:</t>

<figure><sourcecode type="http"><![CDATA[
GET /resource HTTP/1.1
Host: api.example.com
Accept-Payment: tempo/charge, solana/charge
]]></sourcecode></figure>

<figure><sourcecode type="http"><![CDATA[
HTTP/1.1 402 Payment Required
Cache-Control: no-store
WWW-Authenticate: Payment id="sK9vLmQwErTyUiOpA2dFgH", realm="api.example.com", method="solana", intent="charge", request="..."
WWW-Authenticate: Payment id="rJ8uKnLpO3qWtYsA6wDcVb", realm="api.example.com", method="tempo", intent="charge", request="..."
]]></sourcecode></figure>

<t>Clients can also use wildcards to express broader support. In the
following example, the client prefers any <spanx style="verb">tempo</spanx> payment method, then
any <spanx style="verb">solana</spanx> method, and least prefers <spanx style="verb">stripe/charge</spanx>:</t>

<figure><sourcecode type="http"><![CDATA[
GET /stream HTTP/1.1
Host: api.example.com
Accept-Payment: tempo/*, solana/*;q=0.6, stripe/charge;q=0.2
]]></sourcecode></figure>

<t>If the server can offer <spanx style="verb">tempo/session</spanx>, <spanx style="verb">tempo/charge</spanx>,
<spanx style="verb">solana/charge</spanx>, and <spanx style="verb">stripe/charge</spanx>, it <bcp14>SHOULD</bcp14> rank the <spanx style="verb">tempo</spanx> offers
first, then <spanx style="verb">solana/charge</spanx>, then <spanx style="verb">stripe/charge</spanx>:</t>

<figure><sourcecode type="http"><![CDATA[
HTTP/1.1 402 Payment Required
Cache-Control: no-store
WWW-Authenticate: Payment id="tM4nOpQrS5uVwXyZ6aBcDe", realm="api.example.com", method="tempo", intent="session", request="..."
WWW-Authenticate: Payment id="uN5oPqRsT6vWxYzA7bCdEf", realm="api.example.com", method="tempo", intent="charge", request="..."
WWW-Authenticate: Payment id="qE3rFgHiJ4kLmNpO5sAtBu", realm="api.example.com", method="solana", intent="charge", request="..."
WWW-Authenticate: Payment id="vP6qRtSuV7wXyZaB8cDeFg", realm="api.example.com", method="stripe", intent="charge", request="..."
]]></sourcecode></figure>

<t>Clients can set <spanx style="verb">q=0</spanx> to declare that a capability is not acceptable.
In this example, the client is able to use <spanx style="verb">tempo/session</spanx>, but does not
wish to receive that challenge for this request:</t>

<figure><sourcecode type="http"><![CDATA[
GET /download HTTP/1.1
Host: api.example.com
Accept-Payment: tempo/charge, tempo/session;q=0, solana/charge;q=0.8, stripe/charge;q=0.4
]]></sourcecode></figure>

<t>If the server would otherwise offer <spanx style="verb">tempo/charge</spanx>, <spanx style="verb">tempo/session</spanx>,
<spanx style="verb">solana/charge</spanx>, and <spanx style="verb">stripe/charge</spanx>, it <bcp14>SHOULD</bcp14> omit <spanx style="verb">tempo/session</spanx>
from the ranked set:</t>

<figure><sourcecode type="http"><![CDATA[
HTTP/1.1 402 Payment Required
Cache-Control: no-store
WWW-Authenticate: Payment id="wQ7rStTuV8xYzAbC9dEfGh", realm="api.example.com", method="tempo", intent="charge", request="..."
WWW-Authenticate: Payment id="yR5tUvWxY6zAbCdE7fGhIj", realm="api.example.com", method="solana", intent="charge", request="..."
WWW-Authenticate: Payment id="xR8sTuUvW9yZaBcD0eFgHi", realm="api.example.com", method="stripe", intent="charge", request="..."
]]></sourcecode></figure>

</section>
<section anchor="signed-authorization"><name>Signed Authorization</name>

<t>A payment method using cryptographic signatures:</t>

<t><strong>Challenge:</strong></t>

<figure><sourcecode type="http"><![CDATA[
HTTP/1.1 402 Payment Required
Cache-Control: no-store
WWW-Authenticate: Payment id="zL4xCvBnM6kJhGfD8sAaWe",
    realm="api.example.com",
    method="signed",
    intent="charge",
    expires="2025-01-15T12:05:00Z",
    request="eyJhbW91bnQiOiI1MDAwIiwiYXNzZXQiOiJVU0QiLCJyZWNpcGllbnQiOiIweDc0MmQzNUNjNjYzNEMwNTMyOTI1YTNiODQ0QmM5ZTc1OTVmOGZFMDAiLCJub25jZSI6IjB4MTIzNDU2Nzg5MCJ9"
]]></sourcecode></figure>

<t>Decoded <spanx style="verb">request</spanx>:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "amount": "5000",
  "currency": "usd",
  "recipient": "0x742d35Cc6634C0532925a3b844Bc9e7595f8fE00",
  "methodDetails": {
    "nonce": "0x1234567890"
  }
}
]]></sourcecode></figure>

<t><strong>Credential:</strong></t>

<figure><sourcecode type="json"><![CDATA[
{
  "challenge": {
    "id": "zL4xCvBnM6kJhGfD8sAaWe",
    "realm": "api.example.com",
    "method": "signed",
    "intent": "charge",
    "request": "eyJhbW91bnQiOiI1MDAwIiwiYXNzZXQiOiJVU0QiLCJyZWNpcGllbnQiOiIweDc0MmQzNUNjNjYzNEMwNTMyOTI1YTNiODQ0QmM5ZTc1OTVmOGZFMDAiLCJub25jZSI6IjB4MTIzNDU2Nzg5MCJ9",
    "expires": "2025-01-15T12:05:00Z"
  },
  "source": "did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK",
  "payload": {
    "signature": "0x1b2c3d4e5f..."
  }
}
]]></sourcecode></figure>

</section>
<section anchor="multiple-payment-options"><name>Multiple Payment Options</name>

<t>Servers <bcp14>MAY</bcp14> return multiple Payment challenges in a single 402 response,
each with a different payment method or configuration:</t>

<figure><sourcecode type="http"><![CDATA[
HTTP/1.1 402 Payment Required
Cache-Control: no-store
WWW-Authenticate: Payment id="pT7yHnKmQ2wErXsZ5vCbNl", realm="api.example.com", method="invoice", intent="charge", request="..."
WWW-Authenticate: Payment id="mF8uJkLpO3qRtYsA6wDcVb", realm="api.example.com", method="signed", intent="charge", request="..."
]]></sourcecode></figure>

<t>When a server returns multiple challenges, clients <bcp14>SHOULD</bcp14> select one
based on their capabilities and user preferences. Clients <bcp14>MUST</bcp14> send only
one Payment credential in the subsequent request, in the field selected
by that challenge (<xref target="credential-header"/>). A selected challenge that
omits <spanx style="verb">header</spanx> uses <spanx style="verb">Authorization</spanx>; a selected challenge that includes
<spanx style="verb">header</spanx> requires the credential in <spanx style="verb">Payment-Authorization</spanx>.</t>

<t>Servers receiving multiple Payment credentials in a single request
<bcp14>SHOULD</bcp14> reject with 400 (Bad Request).</t>

</section>
<section anchor="failed-payment-verification"><name>Failed Payment Verification</name>

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

{
  "type": "https://paymentauth.org/problems/verification-failed",
  "title": "Payment Verification Failed",
  "status": 402,
  "detail": "Invalid payment proof."
}
]]></sourcecode></figure>

<t>The server returns 402 with a fresh challenge, allowing the client to
retry with a new payment credential.</t>

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

<t>TBD</t>

</section>


  </back>

<!-- ##markdown-source:
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
VZtxHCrFs9TP5Jv7mKhT26AfsYnJyqqeBvDUlJazETVPzb65IOkIa93tR3vb
B8u9vW54snre7o3ay1tb3aW3q5c3vfh0mOLZTt6/C9NOa+9m/8Po2X60Nb28
CLP3Fz0664NXg8H74cHdwYeD8ZtgJei/W/rV5fEevA1fUR4vfyd+g/J4D2L9
dyh75wdDj8Azs/LdwsIph6hUUzKm9kXaJZ6aomy/gUjxqfdyb6n37gC3+al3
cfjh8t3hJwRB5+J8yXu5fqO22mmFHy5P99P96GTUwUKQWDQSEerD/uTgw1l2
sLObHbTPzw7a+2sARvh/y5PCkcPLd6/DzrASbA/QU8Ic55caOhYRJggLUwDQ
WBOsMj1SljSn0UmbVZZ3MQod4FxXFVqoRbLK9TXiizfyKFEmkHploZ85VkgU
Ehqxv9hOxWLB0Edf2d+kcAj36+rboVy6bhGGtvdhbbkKNHa85kgXpXAGoN76
Caq/N0gDaTlWnYNUmuBe5RbGPeUi5yq3sqtHZ8d+WwujUfvZ9FX00/BtC+jJ
u/Ry9Xa7cxg+prAR7erXFlGKXq3dvb55Mzpa/niSvU831yY73fPOt0wvp/2V
8w/3no+/bX4+u1+7/5udlds3w8PR21Zymp1N3q1ONzvb/qPmJyz58vymKI0u
hAKPkxOcG0p+ZMSbqrJGZP1kZKZ+2dRYEt3IXurnohwxoYwrt9h1NnJZGF0d
FBoT3YgnkcMm69/m4lfU4/ktL0/60zqc3lvmxMiIW72961ff8/Qenj95/Xz8
U0TYe/Hrbs9DyKMLkmFAImZ5YvikMpxRvAEwcAry6yQxWcdUSS7GHd8xtmsd
3m/K5QiucbkcRSvzodZCGekBhtyV/oZ5DSbpqXEKZLWIaSmGoA2/Dc8qakiV
mUurio9Q3hcG/8kWFXfCvG0bh68WiwyAt1jiFYbxIJvhsEcBHs2TOv0gQQO2
sJrCmFUM6DdmNdnBSnQ0epucro7PJ++ml2veVnfnUbTu+9D68eFqfPzxJG2v
3V7cvf+0+ayz3dt9VA2/78LqPu4uJ0AdgtcrN0jxj1bTzWxr/PsRi9vjNeBx
p+PzZwh8b+s5AH/v+nuyuhK1wNBerodnVfjjjBIjMJLfzZSI8SgalQgHxQyX
6QWV5OK0XaREpfuEla9U9JEzCdKBHfCXbxAlPkHT67lILHrAsSiI9/vJoxWV
44hsPK+iJStVtIRLIph4+Bxd0Te8CJevpissHuRHcXQrIhFu4Yh/Y7IxefsM
ZKP2+Pw5XtrO9jpc2peD3+3aTk9WszMkGGs4eW/3GUy+/+H3u7Z3J8/T9hhW
sI6Xtruz5CMR+e7XlrLyr1F+y1lD0O2S58VSmYyyTePrxBsNgq6bwqseZkFh
QNH3NR4+DJ1Pb1butm+3ooO1m9eDl/2d5+mmd+F/jVUwpV3/VkbBpjaPvDv8
dPnu7QOdA/Yn/k536WD49tPh2eGHww/vPx3uHkwO2wfTo/Z+8337MDjaebv0
dniwetnuNo/a58Ojl5d7MD6ONe60VtHWQM0YsBHD4c5Z6/DT9erB9uwew7Nt
cqtf0Vt46e7ZSqu3vLrdXVtbXtleWl1urbdWveXO85WVre66/2x1fbX/vL+r
RsxVUDGmnAiz9Hg8svGtPXu+vlQw5JSNfY8wlT2IIl9hKsshyjdYyv4xUOFr
TW6sleFzvaC3ceNPNz6tHdwMvHfXW5c7t3G2c/NmtbX6rO8Fn7LgZbDdepv9
9OblqBNFuy8zr9WLf6pVm+40yZAz77S6y70Vf7Vf0bniQGmu6upz6IadUAm6
qKTbDYsP23GwGOHNGaU5M9Si42PFdXH7miydAumLJeD3epyo8Pp/TNuMNuv+
Ot7zK6wjclkeb50wWdJ0jGlVJXDTUk1lOFH/Ocow5EjvWAo1le2RFK5tBbEU
yshQZgQGRDiY1FidHEAimM4iVjtZVF/lu5E6pW6kWH69Ijx1HvOYdSO9fLMn
h3sI6y5MnCBUjOP3Zr2uA4dMvzld/C8rdpOd1ffPysoxrW/LlyyfHaZvmYra
ytefkOSSJXduy+upBEMpZbRHNSf1wHZa4z+EI9LbaqLm1EJVbhlVuRXUKr/r
rfxKZ2BFyc4Z/sBcjuie9eQDrsF9Xf/SSrVv5Iq5Fm7u7M4ji9zNWaeJs0KX
xZSOPVUvYe2rUQmvKDFhs4u1pmDZ19I2wWlv7Tj/F5Dink//zgAA

-->

</rfc>

